dmencu 3.5.3 → 3.6.0

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.
@@ -27,7 +27,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
27
27
  if (v !== undefined) module.exports = v;
28
28
  }
29
29
  else if (typeof define === "function" && define.amd) {
30
- define(["require", "exports", "like-ar", "./types-dmencu", "pg-promise-strict", "best-globals", "fs", "expre-parser", "./table-tareas_tem", "console", "cast-error", "./app-dmencu", "./ayuda", "./setters-rea-no-rea"], factory);
30
+ define(["require", "exports", "like-ar", "./types-dmencu", "pg-promise-strict", "best-globals", "fs", "expre-parser", "./table-tareas_tem", "./table-desverificables", "console", "cast-error", "./app-dmencu", "./ayuda", "./setters-rea-no-rea"], factory);
31
31
  }
32
32
  })(function (require, exports) {
33
33
  "use strict";
@@ -37,6 +37,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
37
37
  exports.consultaUpdateTareasTemPorDescarga = consultaUpdateTareasTemPorDescarga;
38
38
  exports.reasNoReasDelOperativo = reasNoReasDelOperativo;
39
39
  exports.pasarEncuestasAProie = pasarEncuestasAProie;
40
+ exports.encuestaDesverificarExcepcional = encuestaDesverificarExcepcional;
40
41
  const likeAr = require("like-ar");
41
42
  __exportStar(require("./types-dmencu"), exports);
42
43
  const pg_promise_strict_1 = require("pg-promise-strict");
@@ -44,6 +45,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
44
45
  const fs_1 = require("fs");
45
46
  const ExpresionParser = require("expre-parser");
46
47
  const table_tareas_tem_1 = require("./table-tareas_tem");
48
+ const table_desverificables_1 = require("./table-desverificables");
47
49
  const console_1 = require("console");
48
50
  const cast_error_1 = require("cast-error");
49
51
  const app_dmencu_1 = require("./app-dmencu");
@@ -470,6 +472,48 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
470
472
  return 'ok';
471
473
  });
472
474
  }
475
+ // Vuelve la encuesta a la última tarea verificada aunque la tarea actual ya esté asignada (por ejemplo la que se asigna sola al pasar a fin de campo).
476
+ // No saltea los triggers: primero deja la tarea actual sin asignar, después mueve tem.tarea_actual (el trigger guarda la foto en historial_tem)
477
+ // y recién entonces desverifica, con lo cual desverificar_tarea_trg ve a la tarea desverificada como la actual.
478
+ function encuestaDesverificarExcepcional(context, params) {
479
+ return __awaiter(this, void 0, void 0, function* () {
480
+ var _a;
481
+ var be = context.be;
482
+ var { operativo, enc } = params;
483
+ var motivo = ((_a = params.motivo) !== null && _a !== void 0 ? _a : '').trim();
484
+ if (!motivo) {
485
+ throw new Error('hay que indicar el motivo de la desverificación');
486
+ }
487
+ var desverificable = (yield context.client.query(`select * from (${table_desverificables_1.sqlDesverificables}) d where operativo = $1 and enc = $2`, [operativo, enc]).fetchOneRowIfExists()).row;
488
+ if (!desverificable) {
489
+ throw new Error(`la encuesta ${enc} no se puede desverificar: su última tarea no está verificada o la tarea actual ya está verificada`);
490
+ }
491
+ if (!desverificable.estado_destino) {
492
+ throw new Error('no hay una acción en estados_acciones que ejecute encuesta_no_verificar desde el estado de la tarea verificada');
493
+ }
494
+ var tareaActual = (yield context.client.query(`select estado, asignado from tareas_tem where operativo = $1 and enc = $2 and tarea = $3`, [operativo, enc, desverificable.tarea_actual]).fetchUniqueRow()).row;
495
+ yield context.client.query(`update tareas_tem
496
+ set estado = '0D', asignado = null
497
+ where operativo = $1 and enc = $2 and tarea = $3
498
+ returning *`, [operativo, enc, desverificable.tarea_actual]).fetchUniqueRow();
499
+ yield context.client.query(`update tem
500
+ set tarea_actual = $4
501
+ where operativo = $1 and enc = $2 and tarea_actual = $3
502
+ returning *`, [operativo, enc, desverificable.tarea_actual, desverificable.tarea]).fetchUniqueRow();
503
+ // la foto de historial_tem se sacó con la tarea ya sin asignar: se restituye lo que tenía y se deja quién lo hizo y por qué
504
+ yield context.client.query(`update historial_tem
505
+ set estado = $4, asignado = $5, usuario_accion = $6, motivo = $7
506
+ where operativo = $1 and enc = $2 and tarea = $3
507
+ and orden = (select max(orden) from historial_tem where operativo = $1 and enc = $2)
508
+ returning *`, [operativo, enc, desverificable.tarea_actual, tareaActual.estado, tareaActual.asignado, context.user.usuario, motivo]).fetchUniqueRow();
509
+ yield be.procedure.encuesta_no_verificar.coreFunction(context, { operativo, tarea: desverificable.tarea, enc });
510
+ yield context.client.query(`update tareas_tem
511
+ set estado = $4
512
+ where operativo = $1 and enc = $2 and tarea = $3
513
+ returning *`, [operativo, enc, desverificable.tarea, desverificable.estado_destino]).fetchUniqueRow();
514
+ return 'ok';
515
+ });
516
+ }
473
517
  exports.ProceduresDmEncu = [
474
518
  {
475
519
  action: 'operativo_estructura_completa',
@@ -1653,6 +1697,20 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
1653
1697
  });
1654
1698
  }
1655
1699
  },
1700
+ {
1701
+ action: 'encuesta_desverificar_excepcional',
1702
+ parameters: [
1703
+ { name: 'operativo', typeName: 'text' },
1704
+ { name: 'enc', typeName: 'text' },
1705
+ { name: 'motivo', typeName: 'text' },
1706
+ ],
1707
+ roles: ['subcoor_campo', 'coor_campo', 'coor_proc', 'procesamiento', 'admin'],
1708
+ coreFunction: function (context, params) {
1709
+ return __awaiter(this, void 0, void 0, function* () {
1710
+ return yield encuestaDesverificarExcepcional(context, params);
1711
+ });
1712
+ }
1713
+ },
1656
1714
  {
1657
1715
  action: 'encuesta_no_cerrar',
1658
1716
  parameters: [
@@ -2310,4 +2368,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
2310
2368
  }
2311
2369
  ];
2312
2370
  });
2313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUF1TWIsOENBZUM7SUFJRCxnRkF3QkM7SUFrTUQsd0RBYUM7SUFrREQsb0RBaUNDO0lBaGhCRCxrQ0FBbUM7SUFDbkMsaURBQStCO0lBSy9CLHlEQUE0RDtJQUU1RCwrQ0FBd0Q7SUFDeEQsMkJBQW9DO0lBRXBDLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQscUNBQWdDO0lBRWhDLDJDQUFrRDtJQUNsRCw2Q0FBbUU7SUFDbkUsbUNBQXNEO0lBRXRELDZEQUFxRztJQUVyRyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUE7SUFFakIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQW9CLEVBQUUsRUFBRSxDQUN2RCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBRGIsUUFBQSxrQkFBa0Isc0JBQ0w7SUFFbkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcs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LFlBQVksRUFBRSxVQUFnQixPQUF5QixFQUFFLFVBQTJFOztvQkFDaEksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2Qjs7O2dDQUdnQixFQUNoQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUN6QyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUV4QixPQUFPLHdCQUF3QixVQUFVLENBQUMsR0FBRyxlQUFlLENBQUM7Z0JBQ2pFLENBQUM7YUFBQTtTQUNKO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgUHJvY2VkdXJlRGVmLCBUYWJsZURlZmluaXRpb24sIENsaWVudCwgVGFibGVEZWZpbml0aW9ucywgQXBwQmFja2VuZCB9IGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBQcm9jZWR1cmVDb250ZXh0LCBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzLCBGb3JlaWduS2V5IH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCBsaWtlQXIgPSByZXF1aXJlKFwibGlrZS1hclwiKTtcclxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IElkVW5pZGFkQW5hbGlzaXMsIFVuaWRhZEFuYWxpc2lzLCBFc3RhZG9BY2Npb24sIElkRW5jLCBJZFRhcmVhLCBSZXNwdWVzdGFzUmFpeiwgSWRPcGVyYXRpdm8sIElkQ2FyZ2EsIE1vZG9ETSwgUmVhLCBOb1JlYSwgTm9SZWFTdXAsIFJlYVN1cCwgUmVzdWx0YWRvUmVzdW1lbiB9IGZyb20gXCIuLi91bmxvZ2dlZC90aXBvc1wiO1xyXG5cclxuaW1wb3J0IHsgT3BlcmF0aXZvR2VuZXJhdG9yIH0gZnJvbSBcInByb2Nlc2FtaWVudG9cIjtcclxuXHJcbmltcG9ydCB7IGpzb24sIGpzb25vLCBSZXN1bHRSb3dzIH0gZnJvbSBcInBnLXByb21pc2Utc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBjaGFuZ2luZywgZGF0ZSwgY29hbGVzY2UgfSBmcm9tICdiZXN0LWdsb2JhbHMnO1xyXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gXCJmc1wiO1xyXG5cclxuaW1wb3J0ICogYXMgRXhwcmVzaW9uUGFyc2VyIGZyb20gJ2V4cHJlLXBhcnNlcic7XHJcbmltcG9ydCB7IHRhcmVhcyB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc1wiO1xyXG5pbXBvcnQgeyBwcmVwZW5kTGlzdGVuZXIgfSBmcm9tIFwicHJvY2Vzc1wiO1xyXG5pbXBvcnQgeyBnZXREaWFzQVBhc2FyUXVlcnkgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNfdGVtXCI7XHJcbmltcG9ydCB7IGVycm9yIH0gZnJvbSBcImNvbnNvbGVcIjtcclxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJ2bVwiO1xyXG5pbXBvcnQgeyBleHBlY3RlZCwgdW5leHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcbmltcG9ydCB7IGdldE1vZG9CeVBvbGljeSwgcXVpZW5Db25zdWx0YUF5dWRhIH0gZnJvbSBcIi4vYXBwLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBtZW51Q29uQXl1ZGEsIHRlbWFzVmlzaWJsZXMgfSBmcm9tIFwiLi9heXVkYVwiO1xyXG5pbXBvcnQgdHlwZSB7IEF5dWRhUGFyYVVzdWFyaW8gfSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuaW1wb3J0IHsgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8sIFBhcmFtZXRyb1NxbCB9IGZyb20gXCIuL3NldHRlcnMtcmVhLW5vLXJlYVwiO1xyXG5cclxudmFyIFBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuXHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfQ0FSR0EgPSAnQyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EgPSAnRCc7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQSA9ICdjYXJnYXInO1xyXG5jb25zdCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EgPSAnZGVzY2FyZ2FyJztcclxuY29uc3QgREVGQVVMVF9ET01JTklPID0gMztcclxuXHJcbmV4cG9ydCB0eXBlIGdlbmVyYXJJZEVuY0Z1biA9IChhcmVhOiBudW1iZXIsIGluZGV4OiBudW1iZXIpID0+IElkRW5jXHJcblxyXG52YXIgZ2VuZXJhcklkRW5jRnVuOiBnZW5lcmFySWRFbmNGdW47XHJcbnZhciBtYXhBRW5jUG9yQXJlYSA9IDk5OVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEdlbmVyYXJJZEVuY0Z1biA9IChmdW46IGdlbmVyYXJJZEVuY0Z1bikgPT5cclxuICAgIGdlbmVyYXJJZEVuY0Z1biA9IGZ1bjtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRNYXhFbmNQb3JBcmVhID0gKG1heDogbnVtYmVyKSA9PlxyXG4gICAgbWF4QUVuY1BvckFyZWEgPSBtYXg7XHJcblxyXG5zZXRHZW5lcmFySWRFbmNGdW4oKGFyZWE6IG51bWJlciwgbnVtRW5jOiBudW1iZXIpID0+IGFyZWEudG9TdHJpbmcoKSArIG51bUVuYy50b1N0cmluZygpLnBhZFN0YXJ0KG1heEFFbmNQb3JBcmVhLnRvU3RyaW5nKCkubGVuZ3RoLCAnMCcpIGFzIHVua25vd24gYXMgSWRFbmMpO1xyXG5cclxuc2V0TWF4RW5jUG9yQXJlYSg5OTkpO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBtYXhBRW5jUG9yQXJlYTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgU0VMRUNUIG9idGVuZXJfc2lndWllbnRlX2NvbnRhZG9yX2FyZWEoJDEsJDIsJDMpIEFTIG5leHRfY291bnRlcjtcclxuICAgIGAsIFtvcGVyYXRpdm8sIGFyZWEsIG1heEFFbmNQb3JBcmVhXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgIHJldHVybiBnZW5lcmFySWRFbmNGdW4oYXJlYSwgc2lndWllbnRlTnVtZXJvRW5jdWVzdGEpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aXZvQWN0dWFsID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3Qgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIGZyb20gcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB3aGVyZSB1bmljb19yZWdpc3Ryb2BcclxuICAgICAgICAsIFtdXHJcbiAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgIGlmIChvcGVyYXRpdm8pIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aXZvXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdubyBzZSBjb25maWd1csOzIHVuIG9wZXJhdGl2byBlbiBsYSB0YWJsYSBwYXLDoW1ldHJvcycpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8pIHtcclxuICAgIHJldHVybiAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHNlbGVjdCAqIFxyXG4gICAgICAgICAgICBmcm9tIHRhcmVhcyBcclxuICAgICAgICAgICAgd2hlcmUgZXNfaW5pY2lhbCBhbmQgb3BlcmF0aXZvID0gJDFcclxuICAgIGAsIFtvcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjbGllbnQ6IENsaWVudCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIChhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckVuY3Vlc3RhQXV0b2dlbmVyYWRhRW5ETShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBPUEVSQVRJVk86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIGVuY0F1dG9nZW5lcmFkb0RtOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgcmVjZXBjaW9uaXN0YTogc3RyaW5nLCBhc2lnbmFkbzogc3RyaW5nLCBtb2RvX2RtOiBNb2RvRE0sIGNhbWJpYV9tb2RvX2RtOiBib29sZWFuKTogUHJvbWlzZTxJZEVuYz4ge1xyXG4gICAgbGV0IGlkRW5jID0gbnVsbDtcclxuICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKTtcclxuICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgIGNvbnN0IGF1dG9nZW5lcmFkb0ZpZWxkID0gbW9kb19kbSA9PSAncHJvZHVjJyA/ICdlbmNfYXV0b2dlbmVyYWRvX2RtJyA6ICdlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEnO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdFVwZGF0ZSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgVVBEQVRFIHRlbSBcclxuICAgICAgICAgICAgICAgIHNldCAoanNvbl9iYWNrdXAsIGpzb25fZW5jdWVzdGEsIGZlY2hhX2JhY2t1cCkgPSBcclxuICAgICAgICAgICAgICAgICAgICAoJDQsICQ1LCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgIHdoZXJlIChvcGVyYXRpdm8gPSAkMSBhbmQgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoYXV0b2dlbmVyYWRvRmllbGQpfSA9ICQyIGFuZCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0gPSAkMylcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCwgW09QRVJBVElWTywgZW5jQXV0b2dlbmVyYWRvRG0sIHRva2VuLCByZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXpdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgLy8gaGFnbyBpbnNlcnQgcG9ycXVlIG5vIGV4aXN0ZSBlbiB0ZW1cclxuICAgICAgICBjb25zdCBkZWZhdWx0VGFyZWEgPSBhd2FpdCBnZXREZWZhdWx0VGFyZWEoY29udGV4dCwgT1BFUkFUSVZPKTtcclxuICAgICAgICBpZiAocmVzdWx0VXBkYXRlLnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgaWRFbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBPUEVSQVRJVk8sIGFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgaW50byB0ZW0gKFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBlbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBkb21pbmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICAgICAgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoYXV0b2dlbmVyYWRvRmllbGQpfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWFfYWN0dWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25fYmFja3VwLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25fZW5jdWVzdGEsIFxyXG4gICAgICAgICAgICAgICAgICAgIGZlY2hhX2JhY2t1cFxyXG4gICAgICAgICAgICAgICAgKSBcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0LCAkNSwgJDYsICQ3LCAkOCwgJDksICQxMCwgY3VycmVudF90aW1lc3RhbXApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW1xyXG4gICAgICAgICAgICAgICAgT1BFUkFUSVZPLFxyXG4gICAgICAgICAgICAgICAgaWRFbmMsXHJcbiAgICAgICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICAgICAgREVGQVVMVF9ET01JTklPLFxyXG4gICAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGVuY0F1dG9nZW5lcmFkb0RtLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VGFyZWEudGFyZWEsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkRW5jID0gcmVzdWx0VXBkYXRlLnJvdy5lbmNcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgIHNldCByZWNlcGNpb25pc3RhID0gJDQsIGFzaWduYWRvID0gJDVcclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCwgW09QRVJBVElWTywgaWRFbmMsIGRlZmF1bHRUYXJlYS50YXJlYSwgcmVjZXBjaW9uaXN0YSwgYXNpZ25hZG9dKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgIHNldCBjYXJnYWRvX2RtID0gJDQsIGVzdGFkbyA9ICQ1LCBvcGVyYWNpb24gPSAkNlxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBpZEVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCB0b2tlbiwgRVNUQURPX1BPU1RFUklPUl9DQVJHQSwgY2FtYmlhX21vZG9fZG0gPyBudWxsIDogT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBXVxyXG4gICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpZEVuY1xyXG59XHJcblxyXG4vKmRlZmluaWNpw7NuIGRlIGVzdHJ1Y3R1cmEgY29tcGxldGEsIGN1YW5kbyBleGlzdGEgaW5nLWVuYyBoYXkgcXVlIHBvbmVybG8gYWjDrSovXHJcbnR5cGUgRXN0cnVjdHVyYVRhYmxhID0geyB0YWJsZU5hbWU6IHN0cmluZywgcGtGaWVsZHM6IHsgZmllbGROYW1lOiBzdHJpbmcgfVtdLCBjaGlsZFRhYmxlczogRXN0cnVjdHVyYVRhYmxhW10gfTtcclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG1haW5UYWJsZURlZjogVGFibGVEZWZpbml0aW9uID0gYmUudGFibGVTdHJ1Y3R1cmVzW3RhYmxlTmFtZV0oY29udGV4dCk7XHJcbiAgICB2YXIgZ2V0UGtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRQa0Zyb21UYWJsZURlZih0YWJsZURlZjogVGFibGVEZWZpbml0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uIChwaykge1xyXG4gICAgICAgICAgICByZXR1cm4geyBmaWVsZE5hbWU6IHBrIH07XHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbiAgICB2YXIgZ2V0RmtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRGa0Zyb21UYWJsZURlZih0YWJsZURlZjogVGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPnRhYmxlRGVmLmZvcmVpZ25LZXlzKS5maW5kKGZrID0+IGZrLnJlZmVyZW5jZXMgPT0gcGFyZW50VGFibGVOYW1lKTtcclxuICAgICAgICByZXR1cm4gcGFyZW50RmsgPyBwYXJlbnRGay5maWVsZHMgOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6IEVzdHJ1Y3R1cmFUYWJsYSA9IHtcclxuICAgICAgICB0YWJsZU5hbWU6IG1haW5UYWJsZURlZi5uYW1lLFxyXG4gICAgICAgIHBrRmllbGRzOiBnZXRQa0Zyb21UYWJsZURlZihtYWluVGFibGVEZWYpLFxyXG4gICAgICAgIGNoaWxkVGFibGVzOiBbXVxyXG4gICAgfTtcclxuICAgIGlmIChtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzICYmIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXRhaWxUYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoZGV0YWlsVGFibGUudGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgZGV0YWlsVGFibGUudGFibGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZrRmllbGRzOiBnZXRGa0Zyb21UYWJsZURlZihiZS50YWJsZVN0cnVjdHVyZXNbZGV0YWlsVGFibGUudGFibGVdKGNvbnRleHQpLCB0YWJsZU5hbWUpIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJ1Y3Q7XHJcbn1cclxuLyogZmluIGRlZmluaWNpb24gZXN0cnVjdHVyYSBjb21wbGV0YSAqL1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7IFtrOiBzdHJpbmddOiBhbnkgfVxyXG5cclxuXHJcbmV4cG9ydCB0eXBlIENvbnN1bHRhU3FsID0geyBzcWw6IHN0cmluZywgcGFyYW1zOiBQYXJhbWV0cm9TcWxbXSB9O1xyXG5cclxuLy8gZ3JhYmEgZW4gbGEgVEVNIGxhIGVuY3Vlc3RhIHkgZWwgcmVzdWx0YWRvIGNhbGN1bGFkbyAocmVzdW1lbiwgcmVhIHkgbm8gcmVhOyBvIHN1cyB2ZXJzaW9uZXMgX3N1cCBzaSBsYSB0YXJlYSBlcyBzdXBlKVxyXG5leHBvcnQgZnVuY3Rpb24gY29uc3VsdGFVcGRhdGVUZW08UiBleHRlbmRzIFJlc3VsdGFkb1Jlc3VtZW4+KG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBzdHJpbmcsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUiwgdGFyZWE6IElkVGFyZWEpOiBDb25zdWx0YVNxbCB7XHJcbiAgICB2YXIgeyBwYXJhbXMsIHNldHRlcnMgfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW2Bqc29uX2VuY3Vlc3RhID0gJDNgLCBgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBjdXJyZW50X3RpbWVzdGFtcGBdLFxyXG4gICAgICAgIHBhcmFtczogW29wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbF0sXHJcbiAgICAgICAgZGVzdGlubzogJ3RlbSdcclxuICAgIH0pXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHNxbDogYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYCxcclxuICAgICAgICBwYXJhbXNcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIGN1YW5kbyBlbCBkaXNwb3NpdGl2byBkZXZ1ZWx2ZSBsYSBlbmN1ZXN0YTogcGFzYSBsYSB0YXJlYSBhIGRlc2NhcmdhZGEgeSBndWFyZGEgZWwgcmVzdWx0YWRvIGNhbGN1bGFkbyBlbiBlbCBkaXNwb3NpdGl2byAoZG1fKik7XHJcbi8vIHPDs2xvIHNpIGxhIGVuY3Vlc3RhIHNpZ3VlIGNhcmdhZGEgY29uIGVsIHRva2VuIGRlbCBkaXNwb3NpdGl2b1xyXG5leHBvcnQgZnVuY3Rpb24gY29uc3VsdGFVcGRhdGVUYXJlYXNUZW1Qb3JEZXNjYXJnYTxSIGV4dGVuZHMgUmVzdWx0YWRvUmVzdW1lbj4ob3B0czoge1xyXG4gICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IHN0cmluZywgdGFyZWE6IElkVGFyZWEsIHRva2VuOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IFIsIHBhc2FBRGVzY2FyZ2FyOiBib29sZWFuXHJcbn0pOiBDb25zdWx0YVNxbCB7XHJcbiAgICB2YXIgeyBwYXJhbXMsIHNldHRlcnMgfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYTogb3B0cy50YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IG9wdHMucmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgIHNldHRlcnM6IFtcclxuICAgICAgICAgICAgYGVzdGFkbyA9ICcke0VTVEFET19QT1NURVJJT1JfREVTQ0FSR0F9J2AsXHJcbiAgICAgICAgICAgIGBjYXJnYWRvX2RtPW51bGxgXHJcbiAgICAgICAgXSxcclxuICAgICAgICBwYXJhbXM6IFtvcHRzLm9wZXJhdGl2bywgb3B0cy5pZEVuYywgb3B0cy50YXJlYSwgb3B0cy50b2tlbl0sXHJcbiAgICAgICAgZGVzdGlubzogJ3RhcmVhc190ZW0nXHJcbiAgICB9KVxyXG4gICAgaWYgKG9wdHMucGFzYUFEZXNjYXJnYXIpIHtcclxuICAgICAgICBzZXR0ZXJzLnB1c2goYG9wZXJhY2lvbiA9ICcke09QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQX0nYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHNxbDogYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzIGFuZCBjYXJnYWRvX2RtID0gJDRcclxuICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYCxcclxuICAgICAgICBwYXJhbXNcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIGxvIHF1ZSBndWFyZGFyRW5jdWVzdGFFblRlbSB1c2EgZGVsIGNsaWVudGUgZGUgYmFzZSAoZWwgQ2xpZW50IGRlIHBnLXByb21pc2Utc3RyaWN0IGxvIGN1bXBsZSlcclxuZXhwb3J0IHR5cGUgQ2xpZW50ZVBhcmFUZW0gPSB7XHJcbiAgICBxdWVyeShzcWw6IHN0cmluZywgcGFyYW1zOiBQYXJhbWV0cm9TcWxbXSk6IHsgZmV0Y2hVbmlxdWVSb3coKTogUHJvbWlzZTx7IHJvd0NvdW50OiBudW1iZXIgfCBudWxsIH0+IH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBndWFyZGFyRW5jdWVzdGFFblRlbSA9IGFzeW5jIDxSIGV4dGVuZHMgUmVzdWx0YWRvUmVzdW1lbj4oY29udGV4dDogeyBjbGllbnQ6IENsaWVudGVQYXJhVGVtIH0sIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBzdHJpbmcsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUiwgdGFyZWE6IElkVGFyZWEpID0+IHtcclxuICAgIHZhciB7IHNxbCwgcGFyYW1zIH0gPSBjb25zdWx0YVVwZGF0ZVRlbShvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHRhcmVhKTtcclxuICAgIHJldHVybiBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShzcWwsIHBhcmFtcykuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0cmFyUGFzZVRhYmxhKFxyXG4gICAgY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCxcclxuICAgIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sXHJcbiAgICBpZEVuYzogc3RyaW5nIHwgbnVtYmVyLFxyXG4gICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBhbnlcclxuKSB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBlbmMgJHtpZEVuY306IGA7XHJcbiAgICBsZXQgcGFyYW1fZ3VhcmRhciA9IHsgb3BlcmF0aXZvOiBvcGVyYXRpdm8sIGlkX2Nhc286IGlkRW5jLCBkYXRvc19jYXNvOiByZXNwdWVzdGFzVUFQcmluY2lwYWwgfTtcclxuICAgIGxldCBzYXZlcG9pbnROYW1lID0gYHNwX2d1YXJkYXJfJHtpZEVuY31gLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywgJ18nKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhcik7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFJFTEVBU0UgU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhID0gJDNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBpZEVuYywgcmVzdWx0YWRvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG59XHJcblxyXG52YXIgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3JpbyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IElkRW5jLCB0YXJlYTogSWRUYXJlYSwganNvbl9lbmN1ZXN0YTogYW55KSA9PiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pKS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgcGVyc2lzdGVudGVzOiB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgW1VBX1BSSU5DSVBBTF06IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2VuY106IGpzb25fZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaW5mb3JtYWNpb25IZHI6IHtcclxuICAgICAgICAgICAgICAgICAgICBbZW5jXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxufVxyXG5cclxuLy8gY2FkYSBlbGVtZW50byBkZSBcImNhcmdhc1wiIHF1ZSBhcm1hIGdldEhkclF1ZXJ5IChmZWNoYSBsbGVnYSBjb21vIHRleHRvIGlzbyBkZXNkZSBlbCBqc29uKVxyXG50eXBlIENhcmdhSGRyRGIgPSB7XHJcbiAgICBjYXJnYTogbnVtYmVyIC8vIGFyZWFcclxuICAgIG9ic2VydmFjaW9uZXM6IHN0cmluZyB8IG51bGxcclxuICAgIGZlY2hhOiBzdHJpbmcgfCBudWxsXHJcbiAgICByZWNlcGNpb25pc3RhOiBzdHJpbmcgfCBudWxsXHJcbiAgICBwdWVkZV9hdXRvZ2VuZXJhcjogYm9vbGVhblxyXG59XHJcblxyXG5mdW5jdGlvbiBjYXJnYXNIZHJDb25GZWNoYURteShjYXJnYXM6IENhcmdhSGRyRGJbXSkge1xyXG4gICAgcmV0dXJuIGNhcmdhcy5tYXAoY2FyZ2EgPT4gKHsgLi4uY2FyZ2EsIGZlY2hhOiBjYXJnYS5mZWNoYSA/IGRhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpIDogbnVsbCB9KSk7XHJcbn1cclxuXHJcbnZhciBnZXRIZHJRdWVyeSA9IGZ1bmN0aW9uIGdldEhkclF1ZXJ5KHF1b3RlZENvbmRWaXY6IHN0cmluZywgY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdW5pZGFkQW5hbGlzaXNQcmluY2lwYWw6IElkVW5pZGFkQW5hbGlzaXMsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYTogYm9vbGVhbiwgaWRwZXI6c3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgd2l0aCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9IGFzIFxyXG4gICAgICAgIChzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEgYXMgcmVzcHVlc3RhcywgdC5yZXN1bWVuX2VzdGFkbyBhcyBcInJlc3VtZW5Fc3RhZG9cIiwgXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsIGRvbWluaW8gICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbm9tY2FsbGUgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnc2VjdG9yJyAgICAgICAgLCBzZWN0b3IgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIGVkaWZpY2lvICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgZW50cmFkYSAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbnJvY2F0YXN0cmFsJyAgLCBucm9jYXRhc3RyYWwgICxcclxuICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIHBpc28gICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgZGVwYXJ0YW1lbnRvICAsXHJcbiAgICAgICAgICAgICAgICAnaGFiaXRhY2lvbicgICAgLCBoYWJpdGFjaW9uICAgICxcclxuICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIGNhc2EgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgcmVzZXJ2YSsxICAgICAsXHJcbiAgICAgICAgICAgICAgICAnb2JzZXJ2YWNpb25lcycgLCB0dC5jYXJnYV9vYnNlcnZhY2lvbmVzICxcclxuICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIGNpdGEgLFxyXG4gICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgdC5hcmVhICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnc2VtYW5hJyAgICAgICAgLCB0LnNlbWFuYVxyXG4gICAgICAgICAgICApIGFzIHRlbSwgdC5hcmVhLFxyXG4gICAgICAgICAgICAtLVRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICd0YXJlYScsIHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBmZWNoYV9hc2lnbmFjaW9uLFxyXG4gICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgYXNpZ25hZG8sXHJcbiAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgICkgYXMgdGFyZWEsXHJcbiAgICAgICAgICAgIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYV9hc2lnbmFjaW9uXHJcbiAgICAgICAgICAgIGZyb20gdGVtIHQgbGVmdCBqb2luIHRhcmVhc190ZW0gdHQgb24gKHQub3BlcmF0aXZvID0gdHQub3BlcmF0aXZvIGFuZCB0LmVuYyA9IHR0LmVuYyBhbmQgdC50YXJlYV9hY3R1YWwgPSB0dC50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IGpvaW4gdGFyZWFzIHRhIG9uIHQudGFyZWFfYWN0dWFsID0gdGEudGFyZWFcclxuICAgICAgICAgICAgd2hlcmUgdC5oYWJpbGl0YWRhIGFuZCAke3F1b3RlZENvbmRWaXZ9XHJcbiAgICAgICAgICAgIGdyb3VwIGJ5IHQub3BlcmF0aXZvLCB0LmVuYywgdC5qc29uX2VuY3Vlc3RhLCB0LnJlc3VtZW5fZXN0YWRvLCBkb21pbmlvLCBub21jYWxsZSxzZWN0b3IsZWRpZmljaW8sIGVudHJhZGEsIG5yb2NhdGFzdHJhbCwgcGlzbyxkZXBhcnRhbWVudG8saGFiaXRhY2lvbixjYXNhLHJlc2VydmEsdHQuY2FyZ2Ffb2JzZXJ2YWNpb25lcywgY2l0YSwgdC5hcmVhLCB0dC50YXJlYSwgZmVjaGFfYXNpZ25hY2lvbiwgYXNpZ25hZG8sIG1haW5fZm9ybSwgdC5zZW1hbmFcclxuICAgICAgICApXHJcbiAgICAgICAgc2VsZWN0IGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfSwgJHtqc29ubyhcclxuICAgICAgICBgc2VsZWN0IGVuYywgcmVzcHVlc3RhcywganNvbmJfYnVpbGRfb2JqZWN0KCdyZXN1bWVuRXN0YWRvJyxcInJlc3VtZW5Fc3RhZG9cIikgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9YCxcclxuICAgICAgICAnZW5jJyxcclxuICAgICAgICBgb3RyYXMgfHwgY29hbGVzY2UocmVzcHVlc3Rhcywne30nOjpqc29uYilgXHJcbiAgICApfVxyXG4gICAgICAgICAgICApIGFzIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICR7anNvbihgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgYS5hcmVhIGFzIGNhcmdhLCBvYnNlcnZhY2lvbmVzX2hkciBhcyBvYnNlcnZhY2lvbmVzLCBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGEsIHRhLnJlY2VwY2lvbmlzdGEsXHJcbiAgICAgICAgICAgICAgICAke3Blcm1pdGVHZW5lcmFyTXVlc3RyYSA/IGBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGEuYXNpZ25hZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGlkcGVyKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICBlbmRgOiBgZmFsc2VgfSBhcyBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfSBhdXggaW5uZXIgam9pbiBhcmVhcyBhIHVzaW5nIChvcGVyYXRpdm8sIGFyZWEpIGlubmVyIGpvaW4gdGFyZWFzX2FyZWFzIHRhIG9uIChhLmFyZWEgPSB0YS5hcmVhIGFuZCBhdXgudGFyZWEtPj4ndGFyZWEnID0gdGEudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgYS5hcmVhLCBvYnNlcnZhY2lvbmVzX2hkciwgdGEucmVjZXBjaW9uaXN0YSwgcHVlZGVfYXV0b2dlbmVyYXJcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhID8gYFxyXG4gICAgICAgICAgICAgICAgICAgIHVuaW9uIC0tIGVzdGUgdW5pb24gcGVybWl0ZSB2aXN1YWxpemFyIGFyZWFzIGFzaWduYWRhcyBzaW4gZW5jdWVzdGFzIGdlbmVyYWRhc1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmVhIGFzIGNhcmdhLCBudWxsIGFzIG9ic2VydmFjaW9uZXMsIG51bGwgYXMgZmVjaGEsIHJlY2VwY2lvbmlzdGEsIHRydWUgYXMgcHVlZGVfYXV0b2dlbmVyYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXMgd2hlcmUgYXNpZ25hZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGlkcGVyKX0gYW5kIHRhcmVhID0gJ2VuY3UnYCA6ICcnfVxyXG4gICAgICAgICAgICAgICAgYCwgJ2ZlY2hhJyl9IGFzIGNhcmdhcyxcclxuICAgICAgICAgICAgJHtqc29ubyhcclxuICAgICAgICBgc2VsZWN0IGVuYywganNvbmJfYnVpbGRfb2JqZWN0KCd0ZW0nLCB0ZW0sICd0YXJlYScsIHRhcmVhKSBhcyBvdHJhcyBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX1gLFxyXG4gICAgICAgICdlbmMnLFxyXG4gICAgICAgIGBvdHJhcyB8fCd7fSc6Ompzb25iYFxyXG4gICAgKX1cclxuICAgICAgICAgICAgYXMgXCJpbmZvcm1hY2lvbkhkclwiXHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHZhciBzZXRIZHJRdWVyeSA9IChteUZ1bjogKHF1b3RlZENvbmRWaXY6IHN0cmluZywgY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdW5pZGFkQW5hbGlzaXNQcmluY2lwYWw6IElkVW5pZGFkQW5hbGlzaXMsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYTogYm9vbGVhbiwgaWRwZXI6IHN0cmluZykgPT4gc3RyaW5nKSA9PiBnZXRIZHJRdWVyeSA9IG15RnVuXHJcblxyXG5jb25zdCBnZXRVQVByaW5jaXBhbCA9IGFzeW5jIChjbGllbnQ6IENsaWVudCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykgPT5cclxuICAgIChhd2FpdCBjbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgIGZyb20gdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHByaW5jaXBhbFxyXG4gICAgICAgIGBcclxuICAgICAgICAsXHJcbiAgICAgICAgW29wZXJhdGl2b11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOiB7IFtrIGluIHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcblxyXG52YXIgY29tcGlsZXIgPSBuZXcgRXhwcmVzaW9uUGFyc2VyLkNvbXBpbGVyKHtcclxuICAgIGxhbmd1YWdlOiAnanMnLFxyXG4gICAgdmFyV3JhcHBlcjogKHZhcl9uYW1lOiBzdHJpbmcpID0+IGBoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLiR7dmFyX25hbWV9KWAsXHJcbiAgICBmdW5XcmFwcGVyOiAoZnVuY3Rpb25OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoIWZ1bmNpb25lc0Nvbm9jaWRhc1tmdW5jdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZ1bmN0aW9uTmFtZSlcclxuICAgICAgICAgICAgZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYGhlbHBlcnMuZnVucy4ke2Z1bmN0aW9uTmFtZX1gXHJcbiAgICB9XHJcbn0pXHJcblxyXG50eXBlIENhc2lsbGVyb0RlQWNhID0ge1xyXG4gICAgY2hpbGRzOiBDYXNpbGxlcm9EZUFjYVtdLFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXI6IHN0cmluZ1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6IHN0cmluZ1xyXG4gICAgICAgIGVzcGVjaWFsOiBhbnlcclxuICAgICAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzOiBzdHJpbmdcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb24oZXhwcmVzaW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBjb21waWxlci50b0NvZGUoRXhwcmVzaW9uUGFyc2VyLnBhcnNlKFxyXG4gICAgICAgIGV4cHJlc2lvblxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwgJyA8PiAnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvISEvZ2ksICcgJylcclxuICAgICkpLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuYmxhbmNvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywgJ2hlbHBlcnMuZnVucy5ibGFuY28oKCcpXHJcbiAgICAgICAgLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuaW5mb3JtYWRvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywgJ2hlbHBlcnMuZnVucy5pbmZvcm1hZG8oKCcpO1xyXG59XHJcblxyXG4vLyByZWEvbm8gcmVhICh5IHN1cyB2ZXJzaW9uZXMgX3N1cCkgZGVsIG9wZXJhdGl2bywgdG9tYWRhcyBkZSBsYXMgY2FjaGVzLCBwYXJhIGxhIGVzdHJ1Y3R1cmEgcXVlIHNlIG1hbmRhIGFsIGRpc3Bvc2l0aXZvLlxyXG4vLyBMYXMgY29uZGljaW9uZXMgZGUgcmVhIHNlIGNvbXBpbGFuIGEganMgKGNvbmRpY2lvbl9qcykgcGFyYSBldmFsdWFybGFzIGVuIGVsIGRpc3Bvc2l0aXZvLlxyXG5leHBvcnQgZnVuY3Rpb24gcmVhc05vUmVhc0RlbE9wZXJhdGl2byh0YWJsZUNvbnRlbnQ6IEFwcEJhY2tlbmRbJ2NhY2hlcyddWyd0YWJsZUNvbnRlbnQnXSwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykge1xyXG4gICAgdmFyIG5vUmVhc0NhY2hlOiBOb1JlYVtdID0gdGFibGVDb250ZW50Lm5vX3JlYSB8fCBbXTtcclxuICAgIHZhciBub1JlYXNTdXBDYWNoZTogTm9SZWFTdXBbXSA9IHRhYmxlQ29udGVudC5ub19yZWFfc3VwIHx8IFtdO1xyXG4gICAgdmFyIHJlYXNDYWNoZTogT21pdDxSZWEsICdjb25kaWNpb25fanMnPltdID0gdGFibGVDb250ZW50LnJlYSB8fCBbXTtcclxuICAgIHZhciByZWFzU3VwQ2FjaGU6IE9taXQ8UmVhU3VwLCAnY29uZGljaW9uX2pzJz5bXSA9IHRhYmxlQ29udGVudC5yZWFfc3VwIHx8IFtdO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub1JlYXM6IG5vUmVhc0NhY2hlLmZpbHRlcihub1JlYSA9PiBub1JlYS5vcGVyYXRpdm8gPT0gb3BlcmF0aXZvKSxcclxuICAgICAgICBub1JlYXNTdXA6IG5vUmVhc1N1cENhY2hlLmZpbHRlcihub1JlYVN1cCA9PiBub1JlYVN1cC5vcGVyYXRpdm8gPT0gb3BlcmF0aXZvKSxcclxuICAgICAgICByZWFzOiByZWFzQ2FjaGUuZmlsdGVyKHJlYSA9PiByZWEub3BlcmF0aXZvID09IG9wZXJhdGl2bylcclxuICAgICAgICAgICAgLm1hcCgocmVhKTogUmVhID0+ICh7IC4uLnJlYSwgY29uZGljaW9uX2pzOiBjb21waWxhckV4cHJlc2lvbihyZWEuY29uZGljaW9uKSB9KSksXHJcbiAgICAgICAgcmVhc1N1cDogcmVhc1N1cENhY2hlLmZpbHRlcihyZWFTdXAgPT4gcmVhU3VwLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pXHJcbiAgICAgICAgICAgIC5tYXAoKHJlYVN1cCk6IFJlYVN1cCA9PiAoeyAuLi5yZWFTdXAsIGNvbmRpY2lvbl9qczogY29tcGlsYXJFeHByZXNpb24ocmVhU3VwLmNvbmRpY2lvbikgfSkpLFxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm86IENhc2lsbGVyb0RlQWNhKSB7XHJcbiAgICBpZiAoIWNhc2lsbGVybykgeyByZXR1cm4gfVxyXG4gICAgaWYgKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyX2pzID0gY29tcGlsYXJFeHByZXNpb24oY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcik7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcpIHtcclxuICAgICAgICB2YXIgcGFydGVzID0gY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcuc3BsaXQoJz0+Jyk7XHJcbiAgICAgICAgaWYgKHBhcnRlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmVjb25kaWNpb24gPSBwYXJ0ZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB2YWxvciA9IHBhcnRlcy5zbGljZSgxKS5qb2luKCc9PicpO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gYCgke2NvbXBpbGFyRXhwcmVzaW9uKHByZWNvbmRpY2lvbil9KT8oJHtjb21waWxhckV4cHJlc2lvbih2YWxvcil9KTpudWxsYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gY29tcGlsYXJFeHByZXNpb24ocGFydGVzWzBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBjYXNpbGxlcm9JbnRlcm5vIG9mIGNhc2lsbGVyby5jaGlsZHMpIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvSW50ZXJubyk7XHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXJFbmN1ZXN0YVRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogSWRFbmMsIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEpID0+IHtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBJTlNFUlQgaW50byB0ZW0gKG9wZXJhdGl2bywgZW5jLCBhcmVhLCBkb21pbmlvLCBoYWJpbGl0YWRhLCB0YXJlYV9hY3R1YWwpIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNilgLFxyXG4gICAgICAgIFtvcGVyYXRpdm8sIGlkRW5jLCBhcmVhLCBkb21pbmlvLCB0cnVlLCB0YXJlYV9hY3R1YWxdKS5leGVjdXRlKCk7XHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMgPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykgPT4ge1xyXG4gICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIGluc2VydCBpbnRvIHRhcmVhc190ZW0gKG9wZXJhdGl2bywgZW5jLCB0YXJlYSlcclxuICAgICAgICAgICAgc2VsZWN0IHRhLm9wZXJhdGl2bywgdGEuZW5jLCB0YS50YXJlYVxyXG4gICAgICAgICAgICBmcm9tIChzZWxlY3QgdGEuKiwgdC5lbmMsdC5hcmVhIGZyb20gdGFyZWFzIHRhLCB0ZW0gdCB3aGVyZSB0YS5vcGVyYXRpdm89dC5vcGVyYXRpdm8pIHRhIFxyXG4gICAgICAgICAgICB3aGVyZSB0YS5vcGVyYXRpdm8gPSAkMSBcclxuICAgICAgICAgICAgICAgIGFuZCBub3QgKHRhLm9wZXJhdGl2bywgdGEuZW5jLCB0YS50YXJlYSkgaW4gKHNlbGVjdCBvcGVyYXRpdm8sIGVuYywgdGFyZWEgZnJvbSB0YXJlYXNfdGVtKVxyXG4gICAgICAgICAgICBvcmRlciBieSAxLDMsMjtcclxuICAgIGAsIFtvcGVyYXRpdm9dKS5leGVjdXRlKCk7XHJcbn1cclxuXHJcbmNvbnN0IGJ1c2NhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPGFueT4pID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIGVuY29udHLDsyBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHBhcmEgZWwgb3BlcmF0aXZvICR7cGFyYW1zLm9wZXJhdGl2b30uICR7ZXhwZWN0ZWQoZXJyKS5tZXNzYWdlfWApXHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBjYXNvVGVtOiByZXN1bHQucm93IH07XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXNhckVuY3Vlc3Rhc0FQcm9pZShjbGllbnQ6IENsaWVudCkge1xyXG4gICAgbGV0IHBhcmFtZXRyb3MgPSAoYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCAqIGZyb20gcGFyYW1ldHJvcyB3aGVyZSB1bmljb19yZWdpc3Ryb2AsXHJcbiAgICAgICAgW10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgIHZhciBzZWxlY3QgPSBgc2VsZWN0IHQub3BlcmF0aXZvLCB0LmVuYywgdC50YXJlYV9hY3R1YWwsIHR0LnRzX2VudHJhZGFcclxuICAgICAgICBmcm9tIHRhcmVhc190ZW0gdHQgam9pbiB0ZW0gdCB1c2luZyAob3BlcmF0aXZvLGVuYylcclxuICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm89JDEgYW5kIHR0LnRhcmVhPSAkMiBhbmQgKCR7Z2V0RGlhc0FQYXNhclF1ZXJ5KCd0dCcpfSA8PSAwIG9yIGNvYWxlc2NlKHR0LmFkZWxhbnRhcixmYWxzZSkpIGFuZCB0dC50YXJlYSA9IHQudGFyZWFfYWN0dWFsXHJcbiAgICBgO1xyXG4gICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnLCAnZmluYyddKVxyXG4gICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgLy9UT0RPIGFzaWduYXIgZW4gcHJvY2VzYW1pZW50b1xyXG4gICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnLCAncHJvYyddKVxyXG4gICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICB1cGRhdGUgdGVtIHRcclxuICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICdwcm9jJ1xyXG4gICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICB3aGVyZSB0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gYXV4LmVuY1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYyddKS5mZXRjaEFsbCgpO1xyXG4gICAgcmV0dXJuICdvayc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBQcm9jZWR1cmVzRG1FbmN1OiBQcm9jZWR1cmVEZWZbXSA9IFtcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZXN0cnVjdHVyYV9jb21wbGV0YScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRwZXJfbG9ndWVhZG9fdGFibGV0JywgdHlwZU5hbWU6ICd0ZXh0JywgZGVmYXVsdFZhbHVlOm51bGwgfSxcclxuXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonZGVzcGxlZ2FyRm9ybXVsYXJpbycsXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsIFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRwZXJfbG9ndWVhZG9fdGFibGV0OiBzdHJpbmd8bnVsbH0+KXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBjYXNpbGxlcm9zX2plcmFycXVpemFkb3MoJDEpIGFzIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgdW5pZGFkX2FuYWxpc2lzLCBwYWRyZSwgcGtfYWdyZWdhZGEsICd7fSc6Ompzb25iIGFzIGhpamFzIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICQyYCwgJ3VuaWRhZF9hbmFsaXNpcycpfSBhcyB1bmlkYWRlc19hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cuZm9ybXVsYXJpb3MpLmZvckVhY2goZiA9PiBjb21waWxhckV4cHJlc2lvbmVzKGYpKTtcclxuICAgICAgICAgICAgLy8gSGVybWFub3Mgc29uIGxvcyBmb3JtdWxhcmlvcyBxdWUgZXN0w6FuIGltcGxhbnRhZG9zIGVuIG90cm8gZm9ybXVsYXJpbyBkZSBsYSBtaXNtYSBVQS4gUG9yIGVqZW1wbG8gZWwgQTEgZW4gZWwgUzFcclxuICAgICAgICAgICAgdmFyIHJlc3VsdEhlcm1hbm9zID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG5zZWxlY3Qgby5pZF9jYXNpbGxlcm8gYXMgaWRfZm9ybXVsYXJpbywgby51bmlkYWRfYW5hbGlzaXMsICdCRl8nfHxvLmNhc2lsbGVybyBib3RvbiwgYmYuY2FzaWxsZXJvLCBiZi5wYWRyZSwgZnAuY2FzaWxsZXJvLCBmcC51bmlkYWRfYW5hbGlzaXNcclxuICBmcm9tIGNhc2lsbGVyb3MgbyBsZWZ0IGpvaW4gY2FzaWxsZXJvcyBiZlxyXG4gICAgb24gYmYudGlwb2M9J0JGJ1xyXG5cdGFuZCBiZi5jYXNpbGxlcm8gPSAnQkZfJ3x8by5jYXNpbGxlcm9cclxuXHRhbmQgYmYub3BlcmF0aXZvID0gby5vcGVyYXRpdm9cclxuXHRsZWZ0IGpvaW4gY2FzaWxsZXJvcyBmcFxyXG5cdCAgb24gZnAuaWRfY2FzaWxsZXJvID0gYmYucGFkcmVcclxuXHQgIGFuZCBmcC5vcGVyYXRpdm8gPSBiZi5vcGVyYXRpdm9cclxuICB3aGVyZSBvLnRpcG9jID0gJ0YnXHJcbiAgICBhbmQgby51bmlkYWRfYW5hbGlzaXMgPSBmcC51bmlkYWRfYW5hbGlzaXNcclxuXHRhbmQgby5vcGVyYXRpdm8gPSAkMWAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmVzdWx0SGVybWFub3Mucm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucm93LmZvcm11bGFyaW9zW3Jvdy5pZF9mb3JtdWxhcmlvXS5kYXRhLmhlcm1hbm8gPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJVQSh1YTogVW5pZGFkQW5hbGlzaXMsIGlkVWE6IElkVW5pZGFkQW5hbGlzaXMsIHVBczogeyBbayBpbiBJZFVuaWRhZEFuYWxpc2lzXTogVW5pZGFkQW5hbGlzaXMgfSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhLnBhZHJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdUFzW3VhLnBhZHJlXS5oaWphc1tpZFVhXSA9IHVhO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1YS5wcmluY2lwYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKS5mb3JFYWNoKCh1YSwgaWRVYSkgPT5cclxuICAgICAgICAgICAgICAgIGNvbXBsZXRhclVBKHVhLCBpZFVhIGFzIElkVW5pZGFkQW5hbGlzaXMsIHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgdmFyIHtcclxuICAgICAgICAgICAgICAgIGNvbl9yZWFfaG9nYXI6IGNvblJlYUhvZ2FyLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnX3NvcnRlbzogY29uZmlnU29ydGVvLFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW86IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY29uZmlnX3NvcnRlbywgY29uX3JlYV9ob2dhciwgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW8sIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLCBbcGFyYW1ldGVycy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VtYW5hcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgICR7anNvbm8oYHNlbGVjdCAqIGZyb20gc2VtYW5hcyB3aGVyZSBvcGVyYXRpdm8gPSAkMWAsICdzZW1hbmEnKX0gYXMgc2VtYW5hc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3cuc2VtYW5hcztcclxuICAgICAgICAgICAgbGV0IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyA9IChleHByZXNpb25lc0RvbWluaW86IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIGxpa2VBcihleHByZXNpb25lc0RvbWluaW8pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhwciwgZG9taW5pbykgPT4gKHsgZG9taW5pbywgZXhwcjogY29tcGlsYXJFeHByZXNpb24oZXhwci5leHByKSB9KSlcclxuICAgICAgICAgICAgICAgICAgICAucGxhaW4oKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ1NvcnRlbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGNvbmZpZ1NvcnRlbykuZm9yRWFjaCgoY29uZmlnU29ydGVvRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b24pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VGFyZWEgPSBhd2FpdCBnZXREZWZhdWx0VGFyZWEoY29udGV4dCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdEluZm9ybWFjaW9uSGRyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAgXHJcbiAgICAgICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoREVGQVVMVF9ET01JTklPKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlbWFuYScgICAgICAgICwgbnVsbFxyXG4gICAgICAgICAgICAgICAgKSBhcyB0ZW0sXHJcbiAgICAgICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RhcmVhJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEudGFyZWEpfSxcclxuICAgICAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChwYXJhbWV0ZXJzLmlkcGVyX2xvZ3VlYWRvX3RhYmxldCB8fCBjb250ZXh0LnVzZXIuaWRwZXIpfSxcclxuICAgICAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEubWFpbl9mb3JtKX1cclxuICAgICAgICAgICAgICAgICkgYXMgdGFyZWFcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSxcclxuICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgY29uUmVhSG9nYXIsXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAuLi5yZWFzTm9SZWFzRGVsT3BlcmF0aXZvKGJlLmNhY2hlcy50YWJsZUNvbnRlbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRJbmZvcm1hY2lvbkhkcixcclxuICAgICAgICAgICAgICAgIHVhUHBhbDogdW5pZGFkX2FuYWxpc2lzLFxyXG4gICAgICAgICAgICAgICAgc2VtYW5hcyxcclxuICAgICAgICAgICAgICAgIHBrQWdyZWdhZGFVYVBwYWw6IHBrX2FncmVnYWRhXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZW5lcmFyX2Zvcm11bGFyaW9zJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FubmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ2FubmlvJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtZXMnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiAnbWVzJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb3RlJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ2xvdGVzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHthbm5pbzpudW1iZXIsIG1lczpudW1iZXIsIGxvdGU6bnVtYmVyfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgdWFQcGFsID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRQcmVndW50YXMgPSBhd2FpdCBiZS5wcm9jZWR1cmUucHJlZ3VudGFzX3VhX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB1YVBwYWwpXHJcbiAgICAgICAgICAgIHZhciBjb250ZW5lZG9yVmFjaW86IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgICAgICAgICAgcmVzdWx0UHJlZ3VudGFzLmZvckVhY2goZnVuY3Rpb24gKGRlZlByZWd1bnRhOmFueSkge1xyXG4gICAgICAgICAgICAgICAgY29udGVuZWRvclZhY2lvW2RlZlByZWd1bnRhLnZhcl9uYW1lXSA9IGRlZlByZWd1bnRhLnVuaWRhZF9hbmFsaXNpcyA/IFtdIDogbnVsbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5hbm5pbyA9IHBhcmFtZXRlcnMuYW5uaW87XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5tZXMgPSBwYXJhbWV0ZXJzLm1lcztcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmxvdGUgPSBwYXJhbWV0ZXJzLmxvdGU7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGRlYmVfaGFiZXIuaWRfY2FzbywgcyBhcyBpZFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gKHNlbGVjdCBsb3RlLCBhcm1hcl9pZChhbm5pbywgbWVzLCBsb3RlLCBzKSBhcyBpZF9jYXNvLCBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKHNlbGVjdCBhbm5pbyxtZXMsbG90ZSwgY2FudF9jdWVzIGZyb20gbG90ZXMgd2hlcmUgKGFubmlvLG1lcyxsb3RlKT0oJDIsJDMsJDQpKSByLCBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLGNhbnRfY3Vlcykgc1xyXG4gICAgICAgICAgICAgICAgICAgICkgZGViZV9oYWJlciBsZWZ0IGpvaW4gZGVmZ2VuIGhheSBvbiBoYXkuaWRfY2FzbyA9IGRlYmVfaGFiZXIuaWRfY2FzbyBhbmQgaGF5Lm9wZXJhdGl2bz0kMVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIGhheS5pZF9jYXNvIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWTywgcGFyYW1ldGVycy5hbm5pbywgcGFyYW1ldGVycy5tZXMsIHBhcmFtZXRlcnMubG90ZV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0geyBvcGVyYXRpdm86IE9QRVJBVElWTyB9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChyZXN1bHQucm93Q291bnQgfHwgMCk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyhwYXJhbXMsIHsgaWRfY2FzbzogcmVzdWx0LnJvd3NbaV0uaWRfY2FzbywgZGF0b3NfY2FzbzogY2hhbmdpbmcoY29udGVuZWRvclZhY2lvLCB7IGlkOiByZXN1bHQucm93c1tpXS5pZCB9KSB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IGFncmVnYWRhczogcmVzdWx0LnJvd0NvdW50IH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ3VwbG9hZF9maWxlJyxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2FkanVudG8nLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ25vbWJyZScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGZpbGVzOntjb3VudDoxfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246ZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e2lkX2FkanVudG8/Om51bWJlciwgbm9tYnJlPzpzdHJpbmd9PiwgZmlsZXMpe1xyXG4gICAgICAgICAgICBsZXQgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IGNsaWVudD1jb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgY29udGV4dC5pbmZvcm1Qcm9ncmVzcyh7bWVzc2FnZTpiZS5tZXNzYWdlcy5maWxlVXBsb2FkZWR9KTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGV4aXN0ZVxyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZpbGVzWzBdXHJcbiAgICAgICAgICAgIGxldCBleHQgPSBQYXRoLmV4dG5hbWUoZmlsZS5wYXRoKS5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbEZpbGVuYW1lID0gZmlsZS5vcmlnaW5hbEZpbGVuYW1lLnNsaWNlKDAsIC0oZXh0Lmxlbmd0aCArIDEpKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gcGFyYW1ldGVycy5ub21icmUgfHwgb3JpZ2luYWxGaWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IG5ld1BhdGggPSAnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nO1xyXG4gICAgICAgICAgICB2YXIgY3JlYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShhZGp1bnRvUm93OmFueSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTGEgc3ViaWRhIHNlIHJlYWxpesOzIGNvcnJlY3RhbWVudGUgKHVwZGF0ZSknLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZTogYWRqdW50b1Jvdy5ub21icmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9tYnJlX29yaWdpbmFsOiBhZGp1bnRvUm93Lm5vbWJyZV9vcmlnaW5hbCxcclxuICAgICAgICAgICAgICAgICAgICBleHQ6IGFkanVudG9Sb3cuZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZlY2hhOiBhZGp1bnRvUm93LmZlY2hhLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvcmE6IGFkanVudG9Sb3cuaG9yYSxcclxuICAgICAgICAgICAgICAgICAgICBpZF9hZGp1bnRvOiBhZGp1bnRvUm93LmlkX2FkanVudG9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgdmFyIG1vdmVGaWxlID0gZnVuY3Rpb24gbW92ZUZpbGUoZmlsZSwgaWRfYWRqdW50bywgZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgIGZzLm1vdmUoZmlsZS5wYXRoLCBuZXdQYXRoICsgaWRfYWRqdW50byArICcuJyArIGV4dGVuc2lvbiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMuaWRfYWRqdW50bykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBub21icmU9ICQxLG5vbWJyZV9vcmlnaW5hbCA9ICQyLCBleHQgPSAkMywgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLCQ0Ojp0ZXh0LCcuJywkMzo6dGV4dCksIGZlY2hhID0gbm93KCksIGhvcmEgPSBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkNCByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0LCBwYXJhbWV0ZXJzLmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSwgcmVzdWx0YWRvLmlkX2FkanVudG8sIHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgaW5zZXJ0IGludG8gYWRqdW50b3MgKG5vbWJyZSwgbm9tYnJlX29yaWdpbmFsLCBleHQsIGZlY2hhLCBob3JhKSB2YWx1ZXMgKCQxLCQyLCQzLG5vdygpLCBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpKSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJyxpZF9hZGp1bnRvOjp0ZXh0LCcuJyxleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDEgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdC5yb3cuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdGFkbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSwgcmVzdWx0YWRvLmlkX2FkanVudG8sIHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fZ3VhcmRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZGF0b3NfY2FzbycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBlc3BlY2lmaWNvIGVsIHRpcG8gZGUgbG9zIHBhcsOhbWV0cm9zXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBpZF9jYXNvOiBzdHJpbmcsXHJcbiAgICAgICAgICAgIGRhdG9zX2Nhc286IEFueU9iamVjdFxyXG4gICAgICAgIH0sIG5ld0NsaWVudDogQ2xpZW50KSB7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudCA9IG5ld0NsaWVudCB8fCBjb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgdmFyIGRhdG9zX2pzb24gPSBwYXJhbWV0ZXJzLmRhdG9zX2Nhc287XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZVN0cnVjdHVyZXNfYXBwOiBUYWJsZURlZmluaXRpb25zID0gYmUudGFibGVTdHJ1Y3R1cmVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzKTtcclxuICAgICAgICAgICAgZGF0b3NfanNvblsnb3BlcmF0aXZvJ10gPSBwYXJhbWV0ZXJzLm9wZXJhdGl2bztcclxuXHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bcGtfYWdyZWdhZGFdID0gcGFyYW1ldGVycy5pZF9jYXNvO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJfdWx0X3BrX2VuX2Fycih1bHRfcGs6YW55LCB1YV9hcnI6YW55W10pIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb25fcGtfY29tcGxldGEgPSB1YV9hcnI7XHJcbiAgICAgICAgICAgICAgICBpZiAodWFfYXJyICYmIHVhX2Fyci5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbl9wa19jb21wbGV0YSA9IGNvbl9wa19jb21wbGV0YS5tYXAoKHVuYV91YSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmFfdWFbdWx0X3BrXSA9IGkgKyAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmFfdWE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uX3BrX2NvbXBsZXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc2o6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5TmFtZSBpbiBkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0b0sgPSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdG9LIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0b0subGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBrID0gdGFibGVTdHJ1Y3R1cmVzX2FwcFtrZXlOYW1lXShjb250ZXh0KS5wcmltYXJ5S2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWx0X3BrID0gcGtbcGsubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LID0gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrLCBkYXRvSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LLmZvckVhY2goKGVsZW1JOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1JID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhlbGVtSSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKCckJykgfHwga2V5TmFtZS5zdGFydHNXaXRoKCdfJykgfHwga2V5TmFtZSA9PSAnbnVsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdG9zaltrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b3NqO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb24gPSByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zX2pzb24pO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2RSZWE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZE5vUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5yZXN1bWVuRXN0YWRvO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2RSZWFTdXA7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZE5vUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5yZXN1bWVuRXN0YWRvU3VwO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdG9zX2pzb24pLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVyaWVzID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsV3JpdGUoZGF0b3NfanNvbiwgc3RydWN0X2RtZW5jdSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcXVlcmllcy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2U6IFByb21pc2U8YW55PiwgcXVlcnk6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnF1ZXJ5KHF1ZXJ5KS5leGVjdXRlKCkudGhlbihmdW5jdGlvbiAoX3Jlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9rXCI7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyOiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJjYXNvX2d1YXJkYXIgRU5UUkEgRU4gRUwgQ0FUQ0g6IFwiLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndmFjaW8nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIC8ve25hbWU6J2Zvcm11bGFyaW8nICAgICwgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZF9jYXNvOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50ID0gY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIHZhciBzcWwgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxSZWFkKHsgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2bywgW3BrX2FncmVnYWRhXTogcGFyYW1ldGVycy5pZF9jYXNvIH0sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KHNxbCkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogcGFyYW1ldGVycy5pZF9jYXNvLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NfY2FzbzogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgLy9mb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyX29fY3JlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIC8vIGJpdGFjb3JhOnthbHdheXM6dHJ1ZX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZF9jYXNvOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3ByZXBhcmFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX2d1YXJkYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgY2hhbmdpbmcocGFyYW1ldGVycywgeyBkYXRvc19jYXNvOiBqc29uIH0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ3Bhc2FyX2pzb24ydWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgLyogR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIC8qIEZJTi1HRU5FUkFMSVpBUjogKi9cclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTRUxFQ1QgKiBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKChyZXN1bHRNYWluLnJvd0NvdW50IHx8IDApID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0hBWSBEQVRPUycsIHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlR3VhcmRhci5kZWZpbmVkSW4gIT0gJ2RtZW5jdScpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGF5IHF1ZSBzb2JyZWVzY3JpYmlyIGNhc29fZ3VhcmRhcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRKc29uLnJvd3MubWFwKGFzeW5jIGZ1bmN0aW9uIChyb3cpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbiAoX2NsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwianNvbjJ1YSBlcnJvci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdGFkby5pbmNsdWRlcygnb2snKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9ID0gYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiByb3cub3BlcmF0aXZvLCBpZF9jYXNvOiByb3cuaWRfY2FzbyB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJRdWVHcmFibyA9IHsgZGF0b3NfY2FzbywgaWRfY2Fzbywgb3BlcmF0aXZvIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjcmVwYW5jZXMuc2hvd0FuZFRocm93KHZlclF1ZUdyYWJvLCByb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IodmVyUXVlR3JhYm8sIHJvdywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gICAgICAgICAgICB9KSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9mb3Jwa3JhaXpfY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGtfcmFpel92YWx1ZScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcInRhcmVhc1wiIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGtfcmFpel92YWx1ZTogc3RyaW5nLCB0YXJlYTogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICBjb25zdCBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCB7b3BlcmF0aXZvLHBrX3JhaXpfdmFsdWUsIHRhcmVhfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHtwZXJtaXRlX2JvcnJhcl91YTogdGFyZWFQZXJtaXRlQm9ycmFyVUEsIG1haW5fZm9ybX0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfYm9ycmFyX3VhLCBtYWluX2Zvcm0gXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWE9JDJcclxuICAgICAgICAgICAgYCwgW29wZXJhdGl2bywgdGFyZWFdKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIGNvbnN0IHt1bmlkYWRfYW5hbGlzaXN9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICBjb25zdCBjb25kdml2PSBgIHQub3BlcmF0aXZvPSAkMSBhbmQgdC5lbmMgPSQyYDtcclxuICAgICAgICAgICAgY29uc3QgdXN1YXJpb1B1ZWRlUHJvY2VzYXJFbmN1ZXN0YXMgPSBjb250ZXh0LnB1ZWRlPy5lbmN1ZXN0YXM/LnByb2Nlc2FyIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBzb2xvTGVjdHVyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY291bnQoKilcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiB0ZW0gdXNpbmcob3BlcmF0aXZvLCBlbmMpIGpvaW4gZXN0YWRvcyB1c2luZyAob3BlcmF0aXZvLCBlc3RhZG8pIC0tcGsgZXN0YWRvIHkgdGVtIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnYWRvX2RtIGlzIG5vdCBudWxsIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3QgcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEgYW5kIGFzaWduYWRvIDw+ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoY29udGV4dC51c2VyLmlkcGVyKX0gb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSB0YXJlYV9hY3R1YWwgYW5kIHRhcmVhX2FjdHVhbCA9ICdwcm9jJyBhbmQgJDMgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kIGVzdGFkbyA9ICdWJ1xyXG4gICAgICAgICAgICApYCwgW29wZXJhdGl2bywgcGtfcmFpel92YWx1ZSwgIXVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZSA+IDA7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGNvbnRleHQudXNlci5pZHBlciksIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWVdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByb3cuaW5mb3JtYWNpb25IZHJbcGtfcmFpel92YWx1ZV0udGFyZWEgPSB7XHJcbiAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgIG1haW5fZm9ybVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZHBlcjogY29udGV4dC51c2VyLmlkcGVyLFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOiBsaWtlQXIuY3JlYXRlSW5kZXgoY2FyZ2FzSGRyQ29uRmVjaGFEbXkocm93LmNhcmdhcyksICdjYXJnYScpLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wRXN0cnVjdHVyYTogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyRWxlbWVudG9zVUE6ICEhKHRhcmVhUGVybWl0ZUJvcnJhclVBICYmIGdldE1vZG9CeVBvbGljeShiZSkgPT09ICdHQUJJTkVURScgJiYgY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5ib3JyYXJfdWEpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyc2lzdGVudGVzJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIHBlcnNpc3RlbnRlcyB9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pKS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3B1ZXN0YXMgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdIHx8IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkRW5jIGluIHJlc3B1ZXN0YXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHJlc3B1ZXN0YXNbaWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNVQVByaW5jaXBhbC5zMWExX29icyA9PSAnIXBydWViYSBkZSBlcnJvciBhbCBncmFiYXIhJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWdpc3RyYXJQYXNlVGFibGEoY29udGV4dCwgb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyc2lzdGVudGVzJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FtYmlhX21vZG9fZG0nLCB0eXBlTmFtZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e3BlcnNpc3RlbnRlczogQW55T2JqZWN0LCBtb2RvX2RtOiBzdHJpbmcsIGNhbWJpYV9tb2RvX2RtOiBib29sZWFuLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQ6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGlmKCFwZXJtaXRlR2VuZXJhck11ZXN0cmEgJiYgcGFyYW1ldGVycy5jYW1iaWFfbW9kb19kbSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gZXMgcG9zaWJsZSBjYW1iaWFyIGRlIG1vZG8gZW4gZXN0ZSBvcGVyYXRpdm8nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBwZXJzaXN0ZW50ZXMsIG1vZG9fZG0sIGNhbWJpYV9tb2RvX2RtLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lTG9ndWVhZG9UYWJsZXQgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCB1c3VhcmlvIGZyb20gdXN1YXJpb3Mgd2hlcmUgaWRwZXIgPSAkMWAsIFtpZHBlcl9sb2d1ZWFkb190YWJsZXRdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlOyBcclxuICAgICAgICAgICAgdmFyIHRva2VuOiBzdHJpbmcgPSBwZXJzaXN0ZW50ZXM/LnRva2VuIHx8IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lTG9ndWVhZG9UYWJsZXRcclxuICAgICAgICAgICAgfSkpLnRva2VuO1xyXG4gICAgICAgICAgICBjb25zdCBudW1fc2luY3JvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHNpbmNyb25pemFjaW9uZXMgKHRva2VuLCB1c3VhcmlvLCBkYXRvcylcclxuICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCQxLCQyLCQzKSBcclxuICAgICAgICAgICAgICAgICAgICBSRVRVUk5JTkcgc2luY3JvXHJcbiAgICAgICAgICAgICAgICBgLCBbdG9rZW4sIHVzZXJuYW1lTG9ndWVhZG9UYWJsZXQsIHBlcnNpc3RlbnRlc11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdiA9IGBcclxuICAgICAgICAgICAgICAgIHR0Lm9wZXJhdGl2bz0gJDEgXHJcbiAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgYW5kIHR0Lm9wZXJhY2lvbj0nY2FyZ2FyJyBcclxuICAgICAgICAgICAgICAgIGFuZCAodHQuY2FyZ2Fkb19kbSBpcyBudWxsIG9yIHR0LmNhcmdhZG9fZG0gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHRva2VuKX0pXHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdW5pZGFkX2FuYWxpc2lzOiBVQV9QUklOQ0lQQUwsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZEVuYyBpbiBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF1baWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBBTCBQQVJFQ0VSIEVTVMOBIFJFU1VFTFRPLCBMTyBERUpPIFBPUiBMQVMgRFVEQVNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzcHVlc3Rhc1VBUHJpbmNpcGFsKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYXJnYSA9IHBlcnNpc3RlbnRlcy5jYXJnYXNbcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50ZW0uY2FyZ2FdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJnYVRhcmVhc0FyZWFzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCByZWNlcGNpb25pc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCB0YXJlYSA9ICQyIGFuZCBhcmVhID0gJDMgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgdGFyZWEsIGNhcmdhLmNhcmdhXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FyZ2FUYXJlYXNBcmVhcyAmJiAhY2FyZ2EucmVjZXBjaW9uaXN0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYG5vIHNlIGRlZmluacOzIHVuIHJlY2VwY2lvbmlzdGEgcGFyYSBlbCBvcGVyYXRpdm8gJHtPUEVSQVRJVk99LCB0YXJlYSAke3RhcmVhfSwgw6FyZWEgJHtjYXJnYS5jYXJnYX0sIHBvciBmYXZvciBjb211bmlxdWVzw6kgY29uIEdBQklORVRFIHBhcmEgcXVlIGNhcmd1ZW4gdW4gcmVjZXBjaW9uaXN0YWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZEVuYyBlcyBsYSBjbGF2ZSAodGV4dG8pIGRlIHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzOyBsYXMgZnVuY2lvbmVzIHF1ZSBzaWd1ZW4gbG8gcmVjaWJlbiBjb21vIHRleHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEVuYyA9IFN0cmluZyhhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBjYXJnYS5jYXJnYSwgaWRFbmMsIHRva2VuLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIGNhcmdhLnJlY2VwY2lvbmlzdGEgfHwgY2FyZ2FUYXJlYXNBcmVhcywgcGVyc2lzdGVudGVzLmlkcGVyLCBtb2RvX2RtIGFzIE1vZG9ETSwgY2FtYmlhX21vZG9fZG0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVlZG9HdWFyZGFyRW5URU0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uc3VsdGFUYXJlYXNUZW0gPSBjb25zdWx0YVVwZGF0ZVRhcmVhc1RlbVBvckRlc2NhcmdhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLCBpZEVuYywgdGFyZWEsIHRva2VuLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNhQURlc2NhcmdhcjogY2FtYmlhX21vZG9fZG0gfHwgcGVyc2lzdGVudGVzLmlkcGVyICE9IGlkcGVyX2xvZ3VlYWRvX3RhYmxldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5VGFyZWFzVGVtID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoY29uc3VsdGFUYXJlYXNUZW0uc3FsLCBjb25zdWx0YVRhcmVhc1RlbS5wYXJhbXMpLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHVlZG9HdWFyZGFyRW5URU0gPSBxdWVyeVRhcmVhc1RlbS5yb3dDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVlZG9HdWFyZGFyRW5URU0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIGlkcGVyOiBwZXJzaXN0ZW50ZXMuaWRwZXIsIGlkQ2FzbzogaWRFbmMsIFtwa19hZ3JlZ2FkYV06IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgVUFfUFJJTkNJUEFMLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCksIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0ICBlc3RhZG8gPSAkNCwgY2FyZ2Fkb19kbT0kMzo6dGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlICR7Y29uZHZpdn0gXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGVuY2BcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0FdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBudW1fc2luY3JvLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGlkcGVyX2xvZ3VlYWRvX3RhYmxldCxcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KGNhcmdhc0hkckNvbkZlY2hhRG15KHJvdy5jYXJnYXMpLm1hcChjYXJnYSA9PiAoeyAuLi5jYXJnYSwgZXN0YWRvX2NhcmdhOiAncmVsZXZhbWllbnRvJyB9KSksICdjYXJnYScpXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmFja3VwJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Rva2VuJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtb2RvX2RtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IHRva2VuOiBzdHJpbmcgfCBudWxsLCB0ZW06IEFueU9iamVjdCwgbW9kb19kbTogTW9kb0RNIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGJlLCBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIG51bV9zaW5jcm86IG51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IHBhcmFtZXRlcnMudG9rZW47XHJcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogJ29rOk4vVCcgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHJvd0NvdW50IH0gPSBhd2FpdCBjbGllbnQucXVlcnkoYHNlbGVjdCAxIGZyb20gdG9rZW5zIHdoZXJlIHRva2VuID0gJDFgLCBbdG9rZW5dKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJvd0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMudGVtKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBiYWNrdXAgb2YgbGlrZUFyKHBhcmFtZXRlcnMudGVtKS5hcnJheSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZWEgPSBiYWNrdXAuY2FyZ2EuY2FyZ2E7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNSYWl6ID0gYmFja3VwLnJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZEVuY0RNID0gYmFja3VwLmZvclBrUmFpeltwa19hZ3JlZ2FkYV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjZXBjaW9uaXN0YSA9IGJhY2t1cC5jYXJnYS5yZWNlcGNpb25pc3RhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc2lnbmFkbyA9IGJhY2t1cC5pZHBlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGlkRW5jRE0pIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBhcmVhLCBpZEVuY0RNLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlY2VwY2lvbmlzdGEsIGFzaWduYWRvLCBwYXJhbWV0ZXJzLm1vZG9fZG0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2JhY2t1cCA9ICQzLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCBqc29uX2JhY2t1cCBpcyBkaXN0aW5jdCBmcm9tICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZEVuY0RNLCByZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXpdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOiAnb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjb25zaXN0aXJfdml2aWVuZGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGJlLCBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbV9wcm9jID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuY2Fzb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdGFkbzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtX3Byb2NcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IFwiIGNvbnNpc3Rpcl9jYXNvLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKiogY29uc2lzdGlyX2Nhc28gcmVzdWx0YWRvOicsIHJlc3VsdGFkbylcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOiAnb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fcmVzY2F0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG9jYWxTdG9yYWdlSXRlbScsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW1LZXknLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBsb2NhbFN0b3JhZ2VJdGVtS2V5OiBzdHJpbmcsIGxvY2FsU3RvcmFnZUl0ZW06IEFueU9iamVjdCB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBsb2NhbFN0b3JhZ2VJdGVtIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlc2NhdGUudHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIHVzZXI6IGNvbnRleHQudXNlcm5hbWUsIGl0ZW1LZXk6IGxvY2FsU3RvcmFnZUl0ZW1LZXksIGl0ZW1EYXRhOiBsb2NhbFN0b3JhZ2VJdGVtIH0pICsgJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsIGV4cGVjdGVkKGVycikpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZXRfcmFuZG9tX2ZyZWVfY2FzZScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW3sgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfV0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zVG9FeHBpcmUgPSAzMDtcclxuICAgICAgICAgICAgY29uc3QgbWluc1NpbmNlQmxvcXVlZCA9IGBkYXRlX3BhcnQoJ21pbicsIGFnZShjdXJyZW50X3RpbWVzdGFtcCwgZmVjaGFfYmxvcXVlbykpYDtcclxuICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCBlbmMgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAobGlicmUgb3IgJHttaW5zU2luY2VCbG9xdWVkfSA+ICR7bWluc1RvRXhwaXJlfSkgbGltaXQgMTtgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFVQREFURSB0ZW0gc2V0IGxpYnJlID0gZmFsc2UsIGZlY2hhX2Jsb3F1ZW89Y3VycmVudF90aW1lc3RhbXAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJgLCBbcGFyYW1zLm9wZXJhdGl2bywgZW5jLnZhbHVlXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZW5jLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9nZW5lcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEgfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsQWN0dWFsID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgY291bnQoKikgYXMgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWFdXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcmFtcy5jYW50X2VuY3Vlc3RhcyAtIHRvdGFsQWN0dWFsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtdWVzdHJhX2FncmVnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYXJlYScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdkb21pbmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAzIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRfZW5jdWVzdGFzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAndGFyZWFzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIGNhbnRfZW5jdWVzdGFzOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZUdlbmVyYXJNdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwYXJhbXMuY2FudF9lbmN1ZXN0YXM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhLCBtYXhBRW5jUG9yQXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyRW5jdWVzdGFUZW0oY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgZW5jLCBwYXJhbXMuYXJlYSwgcGFyYW1zLmRvbWluaW8sIHBhcmFtcy50YXJlYV9hY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJlbCBvcGVyYXRpdm8gbm8gcGVybWl0ZSBnZW5lcmFyIG11ZXN0cmFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JsYW5xdWVhcl9wcmV2aXN1YWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdtb3N0cmFyX2VuY3Vlc3RhX2FfYmxhbnF1ZWFyX2NvbnRlbmlkbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JsYW5xdWVhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgLy9wYXNvIGEgZW5jdSBwYXJhIGd1YXJkYXIgZW4gaGlzdG9yaWFsXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCA9ICdlbmN1J1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAvL3Jlc2V0ZW8gdGVtIChubyBzZSBndWFyZGEgaGlzdG9yaWFsIHBvcnF1ZSB0YXJlYV9hY3R1YWwgZXMgbnVsbClcclxuICAgICAgICAgICAgLy9ndWFyZG8gYmFja3VwIHBvciBsYXMgZHVkYXNcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAgPSBqc29uX2VuY3Vlc3RhLCBqc29uX2VuY3Vlc3RhID0gbnVsbCwgdGFyZWFfYWN0dWFsID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBudWxsLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcCwgbW9kaWZpY2FkbyA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW5fZXN0YWRvID0gbnVsbCwgcmVzdW1lbl9lc3RhZG9fc3VwID0gbnVsbCwgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNlX3RhYmxhID0gbnVsbCwgcmVhID0gbnVsbCwgbm9yZWEgPSBudWxsLCByZWFfc3VwID0gbnVsbCwgbm9yZWFfc3VwID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzX3VsdGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGVgO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYm9ycmFyX3ByZXZpc3VhbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdzdWJjb29yX2NhbXBvJywnY29vcl9jYW1wbycsJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6J21vc3RyYXJfZW5jdWVzdGFfYV9ib3JyYXInLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdzdWJjb29yX2NhbXBvJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjYXNvVGVtIH0gPSBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbV9ib3JyYWRhcyAob3BlcmF0aXZvLCBlbmMsIGN1YW5kbywgYXJlYSwgY2x1c3RlciwgZG9taW5pbywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhLCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgcHJvaWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsJDIsY3VycmVudF90aW1lc3RhbXAsJDMsJDQsJDUsJDYsJDcsJDgsJDksJDEwLCQxMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5hcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uY2x1c3RlcixcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS50YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udG9rZW5fYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnByb2llXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBoaXN0b3JpYWxfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBib3Jyw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgcHVlZGUgYm9ycmFyIGxhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBvcGVyYXRpdm8gdGllbmUgbXVlc3RyYSBlc3TDoXRpY2EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX2NhcGFjaXRhY2lvbl9ib3JyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5jc0FCb3JyYXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVuY3NBQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX2JvcnJhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sIGVuYzogcm93LmVuYyB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZSBib3JyYXJvbiBsYXMgZW5jdWVzdGFzIGRlIGNhcGFjaXRhY2nDs24nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2FjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY29uZGljaW9uJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhY2Npb24nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcsIGNvbmRpY2lvbjogc3RyaW5nLCBhY2Npb246IEVzdGFkb0FjY2lvbiB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgYWNjaW9uID0gcGFyYW1zLmFjY2lvbiBhcyBFc3RhZG9BY2Npb247XHJcbiAgICAgICAgICAgIHZhciBjdW1wbGU6IGJvb2xlYW4gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGFjY2lvbl9jdW1wbGVfY29uZGljaW9uKCQ1LCAkNiwgJDcsICQ4LCAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGNvbmRpY2lvbiBcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb20gZXN0YWRvc19hY2Npb25lcyBcclxuICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlc3RhZG8gPSAkMiBhbmQgZWFjY2lvbiA9ICQzIGFuZCBlc3RhZG9fZGVzdGlubyA9ICQ0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClgLCBbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbyxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghY3VtcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgcHVkbyBlamVjdXRhciBsYSBhY2Npw7NuLCBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzbiBcIiR7cGFyYW1zLmNvbmRpY2lvbn1cIiBvIGJpZW4gZWwgZXN0YWRvIGVzdMOhIGRlc2FjdHVhbGl6YWRvLCByZWZyZXNxdWUgbGEgZ3JpbGxhLmApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbmM9JDIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgaWYgKGFjY2lvbi5ub21icmVfcHJvY2VkdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGV4aXN0ZSBlbCBwcm9jZWR1cmUgXCIke2FjY2lvbi5ub21icmVfcHJvY2VkdXJlfVwiIGRlZmluaWRvIGVuIGxhIHRhYmxhIFwiZXN0YWRvc19hY2Npb25lc1wiIHBhcmEgZWxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86ICR7YWNjaW9uLm9wZXJhdGl2b30sIGVzdGFkbzogJHthY2Npb24uZXN0YWRvfSwgZWFjY2lvbjogJHthY2Npb24uZWFjY2lvbn0uYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBCVVNDTyBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHZhciB0YXJlYVNpZ3VpZW50ZSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3Byb3hpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSAkMiBhbmQgZXN0YWRvID0gJDMgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9jdW1wbGVfY29uZGljaW9uKCQ0LCAkNSwgJDYsICQ3LCBjb25kaWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgb3JkZW5cclxuICAgICAgICAgICAgICAgICAgICBsaW1pdCAxYFxyXG4gICAgICAgICAgICAgICAgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvdztcclxuICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV0b0FzaWduYWRvID0gdGFyZWFTaWd1aWVudGUucmVnaXN0cmFfcmVjZXBjaW9uaXN0YSA/IGNvbnRleHQudXNlci5pZHBlciA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgcSA9IGNvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0c19lbnRyYWRhID0gY3VycmVudF90aW1lc3RhbXAsIGFkZWxhbnRhciA9IG51bGwsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F1dG9Bc2lnbmFkbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiICsgcShhdXRvQXNpZ25hZG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm8sIHRhcmVhU2lndWllbnRlLmVzdGFkb19kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbdGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kaXNwb25pYmlsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9hbmFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2bywgaWRfY2FzbzogcGFyYW1zLmVuYyB9KVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2luY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkOiBudW1iZXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopIGFzIGN1bXBsZVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzIGkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gY29uc2lzdGVuY2lhcyBjIHVzaW5nIChvcGVyYXRpdm8sIGNvbnNpc3RlbmNpYSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gbW9tZW50b3NfY29uc2lzdGVuY2lhIG1jIHVzaW5nIChvcGVyYXRpdm8sIG1vbWVudG8pXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGEgPSAkMiBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudG9fY29uc2lzdGVuY2lhX2N1bXBsZV9jb25kaWNpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnZpdmllbmRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCBjb25kaWNpb24gZnJvbSBtb21lbnRvc19jb25zaXN0ZW5jaWEgd2hlcmUgb3BlcmF0aXZvID0gbWMub3BlcmF0aXZvIGFuZCBtb21lbnRvID0gbWMubW9tZW50bylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS5qdXN0aWZpY2FjaW9uIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlcm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgbm8gc2UgcHVlZGUgdmVyaWZpY2FyIGxhIHRhcmVhIHBvcnF1ZSBoYXkgaW5jb25zaXN0ZW5jaWFzLCBwb3IgZmF2b3IgcmVzdcOpbHZhbGFzIG8ganVzdGlmw61xdWVsYXMgZW4gY2FzbyBkZSBzZXIgbmVjZXNhcmlvLmApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV92ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmluY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub192ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJywgYXNpZ25hZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXIuaWRwZXJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl9wcmVzZW5jaWFsJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl90ZWxlZm9uaWNhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fc3VwZXJ2aXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnZmluYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdDQydcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWEgaW4gKCQzLCQ0KSAtLXF1aWVybyBwYXNhciBsYXMgMiB0YXJlYXMgYSBDQ1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYycsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXZvbHZlcl9wcm9jX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdSddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgJ3JlY3UnLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZm9yemFyX3RhcmVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX251ZXZhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhX2FjdHVhbDogc3RyaW5nLCB0YXJlYV9udWV2YTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbF0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGhhYmlsaXRhZGEgPSBub3QgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX3Byb2Nlc2FtaWVudG9fcGFzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcGFzYXJFbmN1ZXN0YXNBUHJvaWUoY29udGV4dC5jbGllbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnaW50ZXJjYW1iaWFyX2VuY3Vlc3RhcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMxJywgcmVmZXJlbmNlczogJ3RlbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzEnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzInLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRIb2cyJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwYXNvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjb25maXJtYScsIHR5cGVOYW1lOiAnYm9vbGVhbicsIGRlZmF1bHRWYWx1ZTogZmFsc2UsIGxhYmVsOiAnQ29uZmlybWEgaW50ZXJjYW1iaW8gZGUgbG9zIGRhdG9zIGVudHJlIGxhcyBlbmN1ZXN0YXM/ICcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdwcm9jZXNhbWllbnRvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPGFueT4pIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBhcmEgY29udHJvbGFyOlxyXG4gICAgICAgICAgICAgKiAtIHF1ZSBsYXMgaG9nYXJlcywgcGVyc29uYXMsIGV0YyBlc3TDqW4gaW50ZXJjYW1iaWFkYXMgXHJcbiAgICAgICAgICAgICAqICAqIHRhbnRvIGVuIGVsIGpzb25cclxuICAgICAgICAgICAgICogICogY29tbyBlbiBsYXMgVERzXHJcbiAgICAgICAgICAgICAqIC0gY29zYXMgcXVlIHNlIGNhbGN1bGFuIHBvciBsYSBhcHA/IGN1YWxlcz8gKHJlc3VtZW5fZXN0YWRvLCByZWEgeSBub3JlYSlcclxuICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jb25maXJtYSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25maXJtw7MgaW50ZXJjYW1iaW8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmVuYzEgfHwgIXBhcmFtcy5lbmMyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBGYWx0YSBpbmdyZXNhciB1biBudW1lcm8gZGUgZW5jdWVzdGEhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5lbmMxID09IHBhcmFtcy5lbmMyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBlbmMxIHkgZW5jMiBkZWJlbiBzZXIgZGlzdGludG9zIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cxKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzEsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzIsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENPTlRST0xBUiBRVUUgTklOR1VOQSBERSBMQVMgMiBlbmN1ZXN0YXMgRVNURSBDQVJHQURBLCBBQklFUlRBIEZBTFRBXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgY29uc3QgY2FudF9ob2dzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCB2aXZpZW5kYSwgY291bnQoKiluaCBmcm9tIGhvZ2FyZXMgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgb3Igdml2aWVuZGE9JDMpXHJcbiAgICAgICAgICAgICAgICBncm91cCBieSB2aXZpZW5kYSBvcmRlciBieSB2aXZpZW5kYVxyXG4gICAgICAgICAgICAgICAgYCwgW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuXHJcbiAgICAgICAgICAgIHZhciBwYXJhbV9uaCA9IFtwYXJhbXMuY2FudEhvZzEsIHBhcmFtcy5jYW50SG9nMl07XHJcbiAgICAgICAgICAgIGNhbnRfaG9ncy5mb3JFYWNoKCh4ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtX25oW2ldICE9PSB4ZS5uaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtZW5zID0gYEVycm9yLCBubyBjb2luY2lkZSBsYSBjYW50aWRhZCBkZSBob2dhcmVzIGRlIGVuYyR7aSArIDF9YDtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeG1lbnMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVnRW5jID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0IGVuYywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGVuYyA9JDIgb3IgZW5jPSQzKSBvcmRlciBieSBlbmNcclxuICAgICAgICAgICAgYCwgW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuXHJcbiAgICAgICAgICAgIGlmIChyZWdFbmMubGVuZ3RoICE9IDIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIE5vIHNlIGVuY29udHJhcm9uIDIgZW5jdWVzdGFzJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbXBpYSBsYXMgVERzICBcclxuICAgICAgICAgICAgICAgIGxldCBbZW5jMSwgZW5jMl0gPSBbcmVnRW5jWzBdLCByZWdFbmNbMV1dXHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnBhc28gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgT1Igdml2aWVuZGE9JDMpYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsIFtPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMyLmVuY11cclxuICAgICAgICAgICAgICAgICAgICApLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtcy5wYXNvID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3NpbXVsYSBndWFyZGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMS50YXJlYV9hY3R1YWwsIGVuYzIuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMi5lbmMsIGVuYzIudGFyZWFfYWN0dWFsLCBlbmMxLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChgTGlzdG8gcGFzbyAke3BhcmFtcy5wYXNvfS4gSW50ZXJjYW1iaW8gcmVhbGl6YWRvIGVudHJlIGxhcyBlbmN1ZXN0YXMgICR7cGFyYW1zLmVuYzF9IHkgJHtwYXJhbXMuZW5jMn0uIFBvciBmYXZvciBjb25zaXN0YSBsYSBlbmN1ZXN0YWApXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YWRvcl9kbXNfbW9zdHJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmN1ZXN0YWRvcicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jdWVzdGFkb3I6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250cmFyb24gZW5jdWVzdGFzIGNhcmdhZGFzIGVuIHVuIERNIHBhcmEgZWwgb3BlcmF0aXZvICR7cGFyYW1zLm9wZXJhdGl2b30sIGVuY3Vlc3RhZG9yICR7cGFyYW1zLmVuY3Vlc3RhZG9yfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgcm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2byB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Rva2VuJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0b2tlbjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCB0YXJlYXNUZW1SZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBjYXJnYWRvX2RtID0gbnVsbCwgb3BlcmFjaW9uID0gJDMsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBjYXJnYWRvX2RtID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRva2VuLCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EsIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICh0YXJlYXNUZW1SZXN1bHQucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHNlIGJsYW5xdWXDsyBuaW5ndW5hIGVuY3Vlc3RhJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCB0dCBvZiB0YXJlYXNUZW1SZXN1bHQucm93cykge1xyXG4gICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvID0gYGVuYyAke3R0LmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGUuYDtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRCYWNrdXAgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9lbmN1ZXN0YSA9IGpzb25fYmFja3VwLCBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGZlY2hhX2JhY2t1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgZmVjaGFfYmFja3VwID4gY29hbGVzY2UoZmVjaGFfbW9kaWZfZW5jdWVzdGEsICcxOTAwLTAxLTAxJykgYW5kIGpzb25fYmFja3VwIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICBbdHQub3BlcmF0aXZvLCB0dC5lbmNdKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0QmFja3VwLnJvd0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvICs9IGAgU2UgcmVzdGFibGVjacOzIGVsIGJhY2t1cCBjb24gZmVjaGEgJHtyZXN1bHRCYWNrdXAucm93LmZlY2hhX2JhY2t1cC50b1ltZEhtcygpfS5gXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHsgcGFyYW1zOiBxdWVyeVBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTogdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbdHQub3BlcmF0aXZvLCB0dC5lbmMsIHR0LnRhcmVhXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGlubzogJ3RhcmVhc190ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIHJlc3VsdEJhY2t1cC5yb3cub3BlcmF0aXZvLCByZXN1bHRCYWNrdXAucm93LmVuYywgdHQudGFyZWEsIHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZWFzVGVtUmVzdWx0LnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gKGF3YWl0IChjbGllbnQucXVlcnkoYHNlbGVjdCBtb2RvX2RtX2RlZmVjdG8gZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCwgW10pLmZldGNoVW5pcXVlVmFsdWUoKSkpLnZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kb0RtRGVmZWN0bztcclxuICAgICAgICB9XHJcbiAgICB9LCB7XHJcbiAgICAgICAgYWN0aW9uOiAnbW9kb19hcHBfZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBiZSB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1vZG9CeVBvbGljeShiZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwge1xyXG4gICAgICAgIC8vIGxhIGF5dWRhIGVuIGzDrW5lYSBxdWUgbGUgY29ycmVzcG9uZGUgYWwgdXN1YXJpbyBzZWfDum4gc3Ugcm9sLCBzdXMgcGVybWlzb3MgeSBlbCBtb2RvICh2ZXIgZG9jcy9heXVkYS1vbmxpbmUubWQpXHJcbiAgICAgICAgYWN0aW9uOiAnYXl1ZGFfdHJhZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pik6IFByb21pc2U8QXl1ZGFQYXJhVXN1YXJpbz4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGJlIH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBxdWllbiA9IHF1aWVuQ29uc3VsdGFBeXVkYShjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgdGVtYXMgPSB0ZW1hc1Zpc2libGVzKGJlLmNhY2hlcy5heXVkYSwgcXVpZW4pO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcm9sOiBxdWllbi5yb2wsXHJcbiAgICAgICAgICAgICAgICBtb2RvOiBxdWllbi5tb2RvLFxyXG4gICAgICAgICAgICAgICAgdGVtYXM6IHRlbWFzLm1hcCh0ZW1hID0+ICh7IGlkOiB0ZW1hLmlkLCB0aXR1bG86IHRlbWEudGl0dWxvLCBodG1sOiB0ZW1hLmh0bWwgfSkpLFxyXG4gICAgICAgICAgICAgICAgbWVudTogbWVudUNvbkF5dWRhKGJlLmdldE1lbnUoY29udGV4dCkubWVudSwgdGVtYXMpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX21pZ3JhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm9fb3JpZ2VuJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2b19kZXN0aW5vJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdzY2hlbWFfbmFtZScsIHR5cGVOYW1lOiAndGV4dCcsIGxhYmVsOiAnbm9tYnJlIGRlIHNjaGVtYScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZG93bmxvYWRfc3FsJyxcclxuICAgICAgICBwcm9jZWVkTGFiZWw6ICdtaWdyYXInLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiB7IG9wZXJhdGl2b19vcmlnZW46IHN0cmluZywgb3BlcmF0aXZvX2Rlc3Rpbm86IHN0cmluZywgc2NoZW1hX25hbWU6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIC8vIDEuIENvbnN1bHRhbW9zIGxhcyB0YWJsYXMgYmFzZSBkZWwgb3JpZ2VuIChzaWVtcHJlIHRpZW5lbiBvcGVyYXRpdm8pXHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VUYWJsZXNSZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIFsnb3BlcmF0aXZvcycsICd0YXJlYXMnLCAndW5pZGFkX2FuYWxpc2lzJywgJ2Nhc2lsbGVyb3MnXS5tYXAoYXN5bmMgdGFibGVOYW1lID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc09wZXJhdGl2bzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgKiBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHRhYmxlTmFtZSl9IHdoZXJlIG9wZXJhdGl2byA9ICQxYCwgW3BhcmFtcy5vcGVyYXRpdm9fb3JpZ2VuXSkuZmV0Y2hBbGwoKVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBiYXNlVGFibGVzUmVzdWx0LmZvckVhY2goKF8sIGkpID0+IGJhc2VUYWJsZXNSZXN1bHRbaV0ucmVzdWx0LnJvd3MuZm9yRWFjaChyb3cgPT4gcm93Lm9wZXJhdGl2byA9IHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubykpO1xyXG5cclxuICAgICAgICAgICAgLy9DaGVxdWVvIHkgY29uc3VsdGEgZGUgdGFibGFzIHJlYXMgKHJlYSwgbm9fcmVhLCByZWFfc3VwLCBub19yZWFfc3VwKVxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbFRhYmxlcyA9IFsncmVhJywgJ25vX3JlYScsICdyZWFfc3VwJywgJ25vX3JlYV9zdXAnXTtcclxuICAgICAgICAgICAgY29uc3QgdGFibGVzRXhpc3RSZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgdGFibGVfbmFtZSBcclxuICAgICAgICAgICAgICAgICBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgXHJcbiAgICAgICAgICAgICAgICAgd2hlcmUgdGFibGVfc2NoZW1hID0gY3VycmVudF9zY2hlbWEoKSBcclxuICAgICAgICAgICAgICAgICAgIGFuZCB0YWJsZV9uYW1lID0gYW55KCQxKWAsXHJcbiAgICAgICAgICAgICAgICBbb3B0aW9uYWxUYWJsZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uYWxUYWJsZXMgPSB0YWJsZXNFeGlzdFJlc3VsdC5yb3dzLm1hcChyID0+IHIudGFibGVfbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdPcHRpb25hbFRhYmxlcyA9IG9wdGlvbmFsVGFibGVzLmZpbHRlcih0ID0+ICFleGlzdGluZ09wdGlvbmFsVGFibGVzLmluY2x1ZGVzKHQpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbmFsVGFibGVzUmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBleGlzdGluZ09wdGlvbmFsVGFibGVzLm1hcChhc3luYyB0YWJsZU5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHNSZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCBjb2x1bW5fbmFtZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0YWJsZV9zY2hlbWEgPSBjdXJyZW50X3NjaGVtYSgpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGFibGVfbmFtZSA9ICQxYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlTmFtZV1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc09wZXJhdGl2byA9IGNvbHNSZXN1bHQucm93cy5zb21lKGMgPT4gYy5jb2x1bW5fbmFtZSA9PT0gJ29wZXJhdGl2bycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVN0ciA9IGhhc09wZXJhdGl2b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBzZWxlY3QgKiBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHRhYmxlTmFtZSl9IHdoZXJlIG9wZXJhdGl2byA9ICQxYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBzZWxlY3QgKiBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHRhYmxlTmFtZSl9YDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBoYXNPcGVyYXRpdm8gPyBbcGFyYW1zLm9wZXJhdGl2b19vcmlnZW5dIDogW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkocXVlcnlTdHIsIHF1ZXJ5UGFyYW1zKS5mZXRjaEFsbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc09wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBvcHRpb25hbFRhYmxlc1Jlc3VsdC5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQuaGFzT3BlcmF0aXZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5yZXN1bHQucm93cy5mb3JFYWNoKHJvdyA9PiByb3cub3BlcmF0aXZvID0gcGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21iaW5hbW9zIGJhc2UgeSBvcGNpb25hbGVzIGVuY29udHJhZGFzXHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlc1Jlc3VsdCA9IFsuLi5iYXNlVGFibGVzUmVzdWx0LCAuLi5vcHRpb25hbFRhYmxlc1Jlc3VsdF07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlQ2FzaWxsZXJvc0ZLID0gYFxyXG4gICAgICAgICAgICAgICAgQUxURVIgVEFCTEUgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKX0uY2FzaWxsZXJvcyBESVNBQkxFIFRSSUdHRVIgQUxMO1xyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCBlbmFibGVDYXNpbGxlcm9zRksgPSBgXHJcbiAgICAgICAgICAgICAgICBBTFRFUiBUQUJMRSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpfS5jYXNpbGxlcm9zIEVOQUJMRSBUUklHR0VSIEFMTDtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkSW5zZXJ0cyA9IChxdWVyeTogeyBuYW1lOiBzdHJpbmcsIGhhc09wZXJhdGl2bz86IGJvb2xlYW4sIHJlc3VsdDogUmVzdWx0Um93cyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmllbGRzID0gWy4uLnF1ZXJ5LnJlc3VsdC5maWVsZHNdO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNpIGxhIHRhYmxhIGRlIHJlYSBubyB0ZW7DrWEgbGEgY29sdW1uYSBvcGVyYXRpdm8sIGxhIGFncmVnYW1vcyBhbCBpbnNlcnRcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeS5oYXNPcGVyYXRpdm8gPT09IGZhbHNlICYmICFmaWVsZHMuc29tZSgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gZi5uYW1lID09PSAnb3BlcmF0aXZvJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7IG5hbWU6ICdvcGVyYXRpdm8nIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeS5yZXN1bHQucm93cy5tYXAocm93ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkuaGFzT3BlcmF0aXZvID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3cub3BlcmF0aXZvID0gcGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbnNlcnQgaW50byAnICsgY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHBhcmFtcy5zY2hlbWFfbmFtZSkgKyAnLicgKyBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocXVlcnkubmFtZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnICgnICsgZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGYubmFtZSkpLmpvaW4oJywgJykgKyAnKScgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnIHZhbHVlcyAoJyArIGZpZWxkcy5tYXAoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGNvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShyb3dbZi5uYW1lXSkpLmpvaW4oJywgJykgKyAnKTsnO1xyXG4gICAgICAgICAgICAgICAgfSkuam9pbignXFxuJyk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcE9yaWdlblEgPSBjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pO1xyXG4gICAgICAgICAgICBjb25zdCBvcERlc3Rpbm9RID0gY29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0QXJlYXMgPSBbXHJcbiAgICAgICAgICAgICAgICAxLCAxNDAwLCAxNDEwLCAxNDIwLCAxNDMwLCAxNDQwLCAxNDUwLCAxNDYwLCAxNDcwLCAxNDgwLCAxNDkwLFxyXG4gICAgICAgICAgICAgICAgMTUwMCwgMTUxMCwgMTUyMCwgMTUzMCwgMTU0MCwgNzQwMCwgNzQxMCwgNzQyMCwgNzQzMCwgNzQ0MCxcclxuICAgICAgICAgICAgICAgIDc0NTAsIDc0NjAsIDc0NzAsIDc0ODAsIDc0OTAsIDc1MDAsIDc1MTAsIDc1MjAsIDc1MzAsIDc1NDBcclxuICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEF2aXNvcyBzaSBhbGd1bmEgdGFibGEgb3BjaW9uYWwgbm8gZXhpc3RlIGVuIGFic29sdXRvXHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGljZXNTcWwgPSBtaXNzaW5nT3B0aW9uYWxUYWJsZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgPyBcIkRPIFxcJFxcJFxcbkJFR0lOXFxuXCIgKyBtaXNzaW5nT3B0aW9uYWxUYWJsZXMubWFwKHQgPT4gYCAgICBSQUlTRSBOT1RJQ0UgJ0xhIHRhYmxhIFwiJVwiIG5vIGV4aXN0ZSBlbiBlbCBvcmlnZW4sIHNlIG9taXRlLicsICcke3R9JztgKS5qb2luKFwiXFxuXCIpICsgXCJcXG5FTkQgXFwkXFwkO1wiXHJcbiAgICAgICAgICAgICAgICA6ICcnO1xyXG5cclxuICAgICAgICAgICAgLy8gMi4gQmxvcXVlIFBML3BnU1FMIGNvbiB2YWxpZGFjacOzbiB5IGxpbXBpZXphIGV4Y2x1c2l2YSBlbiBlbCBjYW1pbm8gcG9yIGRlZmVjdG9cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uYWxBcmVhc1RlbVNxbCA9IGBcclxuICAgICAgICAgICAgICAgIERPICQkXHJcbiAgICAgICAgICAgICAgICBERUNMQVJFXHJcbiAgICAgICAgICAgICAgICAgICAgdl90aWVuZV9vbmRhIGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICBCRUdJTlxyXG4gICAgICAgICAgICAgICAgICAgIC0tIFZlcmlmaWNhciBzaSBsYXMgMyB0YWJsYXMgdGllbmVuIHJlZ2lzdHJvcyBzaW11bHTDoW5lYW1lbnRlIGVuIGVsIGRlc3Rpbm9cclxuICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPQUxFU0NFKChTRUxFQ1QgY291bnQoMSkgRlJPTSBhcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wT3JpZ2VuUX0pLCAwKSA+IDAgQU5EXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPQUxFU0NFKChTRUxFQ1QgY291bnQoMSkgRlJPTSB0YXJlYXNfYXJlYXMgV0hFUkUgb3BlcmF0aXZvID0gJHtvcE9yaWdlblF9KSwgMCkgPiAwIEFORFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDT0FMRVNDRSgoU0VMRUNUIGNvdW50KDEpIEZST00gdGVtIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfSksIDApID4gMFxyXG4gICAgICAgICAgICAgICAgICAgIElOVE8gdl90aWVuZV9vbmRhO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBJRiB2X3RpZW5lX29uZGEgVEhFTlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtLSAtLS0gQ0FNSU5PIEE6IEVsIGRlc3Rpbm8gVElFTkUgb25kYSBhbnRlcmlvciBjb21wbGV0YSAtLS1cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gYXJlYXMgKG9wZXJhdGl2bywgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBhcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wT3JpZ2VuUX07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0YXJlYXNfYXJlYXMgKG9wZXJhdGl2bywgdGFyZWEsIGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgJHtvcERlc3Rpbm9RfSBBUyBvcGVyYXRpdm8sIHRhcmVhLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIHRhcmVhc19hcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wT3JpZ2VuUX07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0ZW0gKG9wZXJhdGl2bywgYXJlYSwgZW5jLCBkb21pbmlvLCBoYWJpbGl0YWRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgJHtvcERlc3Rpbm9RfSBBUyBvcGVyYXRpdm8sIGFyZWEsIChhcmVhIHx8IGVuYzo6dGV4dCkgZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBU0UgV0hFTiBlbmNzLmVuYyA8IDEwNiBUSEVOIDMgRUxTRSA1IEVORCBBUyBkb21pbmlvLCBUUlVFIEFTIGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBhcmVhcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgSk9JTiAoU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxMDAsIDExMCkgZW5jKSBlbmNzIE9OIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYXJlYXMub3BlcmF0aXZvID0gJHtvcE9yaWdlblF9O1xyXG4gICAgICAgICAgICAgICAgICAgIEVMU0VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLS0gLS0tIENBTUlOTyBCOiBBbGd1bmEgdGFibGEgZXN0w6EgdmFjw61hIG8gaW5jb21wbGV0YSAoTGltcGlhbW9zIGUgaW5zZXJ0YW1vcyBwb3IgZGVmZWN0bykgLS0tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIHRlbSBXSEVSRSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSB0YXJlYXNfYXJlYXMgV0hFUkUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gYXJlYXMgV0hFUkUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIGFyZWFzIChvcGVyYXRpdm8sIGFyZWEpIFZBTFVFUyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtkZWZhdWx0QXJlYXMubWFwKGEgPT4gYCgke29wRGVzdGlub1F9LCR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKGEpfSlgKS5qb2luKCcsICcpfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRhcmVhc19hcmVhcyhvcGVyYXRpdm8sIHRhcmVhLCBhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgKiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgJHtvcERlc3Rpbm9RfSBBUyBvcGVyYXRpdm8sIHQudGFyZWEsIGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gYXJlYXMgYSwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCB0Lm9wZXJhdGl2bywgdC50YXJlYSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIHRhcmVhcyB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGEub3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgdC5vcGVyYXRpdm8gPSAke29wRGVzdGlub1F9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSAxLCAyLCAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0ZW0gKG9wZXJhdGl2bywgYXJlYSwgZW5jLCBkb21pbmlvLCBoYWJpbGl0YWRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgJHtvcERlc3Rpbm9RfSBBUyBvcGVyYXRpdm8sIGFyZWEsIChhcmVhIHx8IGVuYzo6dGV4dCkgZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBU0UgV0hFTiBlbmNzLmVuYyA8IDEwNiBUSEVOIDMgRUxTRSA1IEVORCBBUyBkb21pbmlvLCBUUlVFIEFTIGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBhcmVhcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgSk9JTiAoU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxMDAsIDExMCkgZW5jKSBlbmNzIE9OIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYXJlYXMub3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgICAgICAgICBFTkQgSUY7XHJcbiAgICAgICAgICAgICAgICBFTkQgJCQ7XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkZWxldGVzID0gYFxyXG4gICAgICAgICAgICAtLWRlbGV0ZXMgaWYgbmVjZXNzYXJ5XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdGFyZWFzX2FyZWFzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gY2FzaWxsZXJvcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHVuaWRhZF9hbmFsaXNpcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHRhcmVhc190ZW0gd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBhcmVhcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHRhcmVhcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIG9wZXJhdGl2b3Mgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSByZWEgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBub19yZWEgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSByZWFfc3VwIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gbm9fcmVhX3N1cCB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3FsID0gYHNldCBzZWFyY2hfcGF0aCA9IFwiJHtwYXJhbXMuc2NoZW1hX25hbWV9XCI7YCArIGBcXG5cXG5gXHJcbiAgICAgICAgICAgICAgICArIGRpc2FibGVDYXNpbGxlcm9zRktcclxuICAgICAgICAgICAgICAgICsgbm90aWNlc1NxbFxyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJ1xyXG4gICAgICAgICAgICAgICAgKyB0YWJsZXNSZXN1bHQubWFwKHF1ZXJ5ID0+IGJ1aWxkSW5zZXJ0cyhxdWVyeSkpLmpvaW4oJ1xcblxcbicpXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgY29uZGl0aW9uYWxBcmVhc1RlbVNxbFxyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGVuYWJsZUNhc2lsbGVyb3NGS1xyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGRlbGV0ZXM7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3FsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2FwYV9hX3Byb2RfcGFzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVuY19hdXRvZ2VuZXJhZG9fZG0gPSBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5lbmNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGBzZSBtb3Zpw7MgbGEgZW5jdWVzdGEgJHtwYXJhbWV0ZXJzLmVuY30gYSBwcm9kdWNjacOzbmA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5dOyJdfQ==
2371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUF3TWIsOENBZUM7SUFJRCxnRkF3QkM7SUFrTUQsd0RBYUM7SUFrREQsb0RBaUNDO0lBS0QsMEVBcURDO0lBM2tCRCxrQ0FBbUM7SUFDbkMsaURBQStCO0lBSy9CLHlEQUE0RDtJQUU1RCwrQ0FBd0Q7SUFDeEQsMkJBQW9DO0lBRXBDLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQsbUVBQTZEO0lBQzdELHFDQUFnQztJQUVoQywyQ0FBa0Q7SUFDbEQsNkNBQW1FO0lBQ25FLG1DQUFzRDtJQUV0RCw2REFBcUc7SUFFckcsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVwQyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFM0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBRTdCLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0lBQ25DLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDO0lBQzFDLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDO0lBQ2hELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztJQUkxQixJQUFJLGVBQWdDLENBQUM7SUFDckMsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFBO0lBRWpCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FDdkQsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQURiLFFBQUEsa0JBQWtCLHNCQUNMO0lBRW5CLE1B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QzNCLE1BQU0sR0FBRyxPQUFPLENBQUM7b0JBRXZCLE9BQU8sR0FBRyxDQUFDO2dCQUNmLENBQUM7YUFBQTtTQUNKO1FBQ0Q7WUFDSSxNQUFNLEVBQUUsNEJBQTRCO1lBQ3BDLFVBQVUsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO2dCQUNqRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUNwQztZQUNELEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNoQixZQUFZLEVBQUUsVUFBZ0IsT0FBeUIsRUFBRSxVQUEyRTs7b0JBQ2hJLENBQUMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkI7OztnQ0FHZ0IsRUFDaEIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDekMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFFeEIsT0FBTyx3QkFBd0IsVUFBVSxDQUFDLEdBQUcsZUFBZSxDQUFDO2dCQUNqRSxDQUFDO2FBQUE7U0FDSjtLQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IFByb2NlZHVyZURlZiwgVGFibGVEZWZpbml0aW9uLCBDbGllbnQsIFRhYmxlRGVmaW5pdGlvbnMsIEFwcEJhY2tlbmQgfSBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcclxuaW1wb3J0IHsgUHJvY2VkdXJlQ29udGV4dCwgQ29yZUZ1bmN0aW9uUGFyYW1ldGVycywgRm9yZWlnbktleSB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQgbGlrZUFyID0gcmVxdWlyZShcImxpa2UtYXJcIik7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvLCBJZENhcmdhLCBNb2RvRE0sIFJlYSwgTm9SZWEsIE5vUmVhU3VwLCBSZWFTdXAsIFJlc3VsdGFkb1Jlc3VtZW4gfSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuXHJcbmltcG9ydCB7IE9wZXJhdGl2b0dlbmVyYXRvciB9IGZyb20gXCJwcm9jZXNhbWllbnRvXCI7XHJcblxyXG5pbXBvcnQgeyBqc29uLCBqc29ubywgUmVzdWx0Um93cyB9IGZyb20gXCJwZy1wcm9taXNlLXN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgY2hhbmdpbmcsIGRhdGUsIGNvYWxlc2NlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwiZnNcIjtcclxuXHJcbmltcG9ydCAqIGFzIEV4cHJlc2lvblBhcnNlciBmcm9tICdleHByZS1wYXJzZXInO1xyXG5pbXBvcnQgeyB0YXJlYXMgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNcIjtcclxuaW1wb3J0IHsgcHJlcGVuZExpc3RlbmVyIH0gZnJvbSBcInByb2Nlc3NcIjtcclxuaW1wb3J0IHsgZ2V0RGlhc0FQYXNhclF1ZXJ5IH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzX3RlbVwiO1xyXG5pbXBvcnQgeyBzcWxEZXN2ZXJpZmljYWJsZXMgfSBmcm9tIFwiLi90YWJsZS1kZXN2ZXJpZmljYWJsZXNcIjtcclxuaW1wb3J0IHsgZXJyb3IgfSBmcm9tIFwiY29uc29sZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcInZtXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkLCB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuaW1wb3J0IHsgZ2V0TW9kb0J5UG9saWN5LCBxdWllbkNvbnN1bHRhQXl1ZGEgfSBmcm9tIFwiLi9hcHAtZG1lbmN1XCI7XHJcbmltcG9ydCB7IG1lbnVDb25BeXVkYSwgdGVtYXNWaXNpYmxlcyB9IGZyb20gXCIuL2F5dWRhXCI7XHJcbmltcG9ydCB0eXBlIHsgQXl1ZGFQYXJhVXN1YXJpbyB9IGZyb20gXCIuLi91bmxvZ2dlZC90aXBvc1wiO1xyXG5pbXBvcnQgeyBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbywgUGFyYW1ldHJvU3FsIH0gZnJvbSBcIi4vc2V0dGVycy1yZWEtbm8tcmVhXCI7XHJcblxyXG52YXIgUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxudmFyIHNxbFRvb2xzID0gcmVxdWlyZSgnc3FsLXRvb2xzJyk7XHJcblxyXG52YXIgZGlzY3JlcGFuY2VzID0gcmVxdWlyZSgnZGlzY3JlcGFuY2VzJyk7XHJcblxyXG5jb25zdCBmb3JtUHJpbmNpcGFsID0gJ0Y6RjEnO1xyXG5cclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9DQVJHQSA9ICdDJztcclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSA9ICdEJztcclxuY29uc3QgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBID0gJ2Nhcmdhcic7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSA9ICdkZXNjYXJnYXInO1xyXG5jb25zdCBERUZBVUxUX0RPTUlOSU8gPSAzO1xyXG5cclxuZXhwb3J0IHR5cGUgZ2VuZXJhcklkRW5jRnVuID0gKGFyZWE6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gSWRFbmNcclxuXHJcbnZhciBnZW5lcmFySWRFbmNGdW46IGdlbmVyYXJJZEVuY0Z1bjtcclxudmFyIG1heEFFbmNQb3JBcmVhID0gOTk5XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0R2VuZXJhcklkRW5jRnVuID0gKGZ1bjogZ2VuZXJhcklkRW5jRnVuKSA9PlxyXG4gICAgZ2VuZXJhcklkRW5jRnVuID0gZnVuO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldE1heEVuY1BvckFyZWEgPSAobWF4OiBudW1iZXIpID0+XHJcbiAgICBtYXhBRW5jUG9yQXJlYSA9IG1heDtcclxuXHJcbnNldEdlbmVyYXJJZEVuY0Z1bigoYXJlYTogbnVtYmVyLCBudW1FbmM6IG51bWJlcikgPT4gYXJlYS50b1N0cmluZygpICsgbnVtRW5jLnRvU3RyaW5nKCkucGFkU3RhcnQobWF4QUVuY1BvckFyZWEudG9TdHJpbmcoKS5sZW5ndGgsICcwJykgYXMgdW5rbm93biBhcyBJZEVuYyk7XHJcblxyXG5zZXRNYXhFbmNQb3JBcmVhKDk5OSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIG1heEFFbmNQb3JBcmVhOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNpZ3VpZW50ZU51bWVyb0VuY3Vlc3RhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBTRUxFQ1Qgb2J0ZW5lcl9zaWd1aWVudGVfY29udGFkb3JfYXJlYSgkMSwkMiwkMykgQVMgbmV4dF9jb3VudGVyO1xyXG4gICAgYCwgW29wZXJhdGl2bywgYXJlYSwgbWF4QUVuY1BvckFyZWFdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgcmV0dXJuIGdlbmVyYXJJZEVuY0Z1bihhcmVhLCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRPcGVyYXRpdm9BY3R1YWwgPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCkgPT4ge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgZnJvbSBwYXJhbWV0cm9zXHJcbiAgICAgICAgICAgIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYFxyXG4gICAgICAgICwgW11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgaWYgKG9wZXJhdGl2bykge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpdm9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXREZWZhdWx0VGFyZWEoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykge1xyXG4gICAgcmV0dXJuIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0ICogXHJcbiAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICB3aGVyZSBlc19pbmljaWFsIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIE9QRVJBVElWTzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZW5jQXV0b2dlbmVyYWRvRG06IHN0cmluZywgdG9rZW46IHN0cmluZywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhOiBzdHJpbmcsIGFzaWduYWRvOiBzdHJpbmcsIG1vZG9fZG06IE1vZG9ETSwgY2FtYmlhX21vZG9fZG06IGJvb2xlYW4pOiBQcm9taXNlPElkRW5jPiB7XHJcbiAgICBsZXQgaWRFbmMgPSBudWxsO1xyXG4gICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgY29uc3QgYXV0b2dlbmVyYWRvRmllbGQgPSBtb2RvX2RtID09ICdwcm9kdWMnID8gJ2VuY19hdXRvZ2VuZXJhZG9fZG0nIDogJ2VuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSc7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VXBkYXRlID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBVUERBVEUgdGVtIFxyXG4gICAgICAgICAgICAgICAgc2V0IChqc29uX2JhY2t1cCwganNvbl9lbmN1ZXN0YSwgZmVjaGFfYmFja3VwKSA9IFxyXG4gICAgICAgICAgICAgICAgICAgICgkNCwgJDUsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgKG9wZXJhdGl2byA9ICQxIGFuZCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9ID0gJDIgYW5kIHRva2VuX2F1dG9nZW5lcmFkb19kbSA9ICQzKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBlbmNBdXRvZ2VuZXJhZG9EbSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpel0pLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAvLyBoYWdvIGluc2VydCBwb3JxdWUgbm8gZXhpc3RlIGVuIHRlbVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRUYXJlYSA9IGF3YWl0IGdldERlZmF1bHRUYXJlYShjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGlmIChyZXN1bHRVcGRhdGUucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICBpZEVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBpbnRvIHRlbSAoXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYyxcclxuICAgICAgICAgICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9lbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICApIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4LCAkOSwgJDEwLCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICBPUEVSQVRJVk8sXHJcbiAgICAgICAgICAgICAgICBpZEVuYyxcclxuICAgICAgICAgICAgICAgIGFyZWEsXHJcbiAgICAgICAgICAgICAgICBERUZBVUxUX0RPTUlOSU8sXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZW5jQXV0b2dlbmVyYWRvRG0sXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRUYXJlYS50YXJlYSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWRFbmMgPSByZXN1bHRVcGRhdGUucm93LmVuY1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IHJlY2VwY2lvbmlzdGEgPSAkNCwgYXNpZ25hZG8gPSAkNVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBpZEVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCByZWNlcGNpb25pc3RhLCBhc2lnbmFkb10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSAkNCwgZXN0YWRvID0gJDUsIG9wZXJhY2lvbiA9ICQ2XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGlkRW5jLCBkZWZhdWx0VGFyZWEudGFyZWEsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBLCBjYW1iaWFfbW9kb19kbSA/IG51bGwgOiBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0FdXHJcbiAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkRW5jXHJcbn1cclxuXHJcbi8qZGVmaW5pY2nDs24gZGUgZXN0cnVjdHVyYSBjb21wbGV0YSwgY3VhbmRvIGV4aXN0YSBpbmctZW5jIGhheSBxdWUgcG9uZXJsbyBhaMOtKi9cclxudHlwZSBFc3RydWN0dXJhVGFibGEgPSB7IHRhYmxlTmFtZTogc3RyaW5nLCBwa0ZpZWxkczogeyBmaWVsZE5hbWU6IHN0cmluZyB9W10sIGNoaWxkVGFibGVzOiBFc3RydWN0dXJhVGFibGFbXSB9O1xyXG5mdW5jdGlvbiBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgbWFpblRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGFibGVEZWYucHJpbWFyeUtleS5tYXAoZnVuY3Rpb24gKHBrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGZpZWxkTmFtZTogcGsgfTtcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxuICAgIHZhciBnZXRGa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldEZrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24sIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudEZrID0gKDxGb3JlaWduS2V5W10+dGFibGVEZWYuZm9yZWlnbktleXMpLmZpbmQoZmsgPT4gZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGayA/IHBhcmVudEZrLmZpZWxkcyA6IFtdO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0cnVjdDogRXN0cnVjdHVyYVRhYmxhID0ge1xyXG4gICAgICAgIHRhYmxlTmFtZTogbWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6IGdldFBrRnJvbVRhYmxlRGVmKG1haW5UYWJsZURlZiksXHJcbiAgICAgICAgY2hpbGRUYWJsZXM6IFtdXHJcbiAgICB9O1xyXG4gICAgaWYgKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpIHtcclxuICAgICAgICBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKGRldGFpbFRhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXRhaWxUYWJsZS50YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgc3RydWN0LmNoaWxkVGFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBkZXRhaWxUYWJsZS50YWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSkgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cnVjdDtcclxufVxyXG4vKiBmaW4gZGVmaW5pY2lvbiBlc3RydWN0dXJhIGNvbXBsZXRhICovXHJcblxyXG50eXBlIEFueU9iamVjdCA9IHsgW2s6IHN0cmluZ106IGFueSB9XHJcblxyXG5cclxuZXhwb3J0IHR5cGUgQ29uc3VsdGFTcWwgPSB7IHNxbDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtZXRyb1NxbFtdIH07XHJcblxyXG4vLyBncmFiYSBlbiBsYSBURU0gbGEgZW5jdWVzdGEgeSBlbCByZXN1bHRhZG8gY2FsY3VsYWRvIChyZXN1bWVuLCByZWEgeSBubyByZWE7IG8gc3VzIHZlcnNpb25lcyBfc3VwIHNpIGxhIHRhcmVhIGVzIHN1cGUpXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25zdWx0YVVwZGF0ZVRlbTxSIGV4dGVuZHMgUmVzdWx0YWRvUmVzdW1lbj4ob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IHN0cmluZywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSLCB0YXJlYTogSWRUYXJlYSk6IENvbnN1bHRhU3FsIHtcclxuICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgIHRhcmVhLFxyXG4gICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICBzZXR0ZXJzOiBbYGpzb25fZW5jdWVzdGEgPSAkM2AsIGBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGN1cnJlbnRfdGltZXN0YW1wYF0sXHJcbiAgICAgICAgcGFyYW1zOiBbb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsXSxcclxuICAgICAgICBkZXN0aW5vOiAndGVtJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3FsOiBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gY3VhbmRvIGVsIGRpc3Bvc2l0aXZvIGRldnVlbHZlIGxhIGVuY3Vlc3RhOiBwYXNhIGxhIHRhcmVhIGEgZGVzY2FyZ2FkYSB5IGd1YXJkYSBlbCByZXN1bHRhZG8gY2FsY3VsYWRvIGVuIGVsIGRpc3Bvc2l0aXZvIChkbV8qKTtcclxuLy8gc8OzbG8gc2kgbGEgZW5jdWVzdGEgc2lndWUgY2FyZ2FkYSBjb24gZWwgdG9rZW4gZGVsIGRpc3Bvc2l0aXZvXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25zdWx0YVVwZGF0ZVRhcmVhc1RlbVBvckRlc2NhcmdhPFIgZXh0ZW5kcyBSZXN1bHRhZG9SZXN1bWVuPihvcHRzOiB7XHJcbiAgICBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogc3RyaW5nLCB0YXJlYTogSWRUYXJlYSwgdG9rZW46IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUiwgcGFzYUFEZXNjYXJnYXI6IGJvb2xlYW5cclxufSk6IENvbnN1bHRhU3FsIHtcclxuICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgIHRhcmVhOiBvcHRzLnRhcmVhLFxyXG4gICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogb3B0cy5yZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW1xyXG4gICAgICAgICAgICBgZXN0YWRvID0gJyR7RVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQX0nYCxcclxuICAgICAgICAgICAgYGNhcmdhZG9fZG09bnVsbGBcclxuICAgICAgICBdLFxyXG4gICAgICAgIHBhcmFtczogW29wdHMub3BlcmF0aXZvLCBvcHRzLmlkRW5jLCBvcHRzLnRhcmVhLCBvcHRzLnRva2VuXSxcclxuICAgICAgICBkZXN0aW5vOiAndGFyZWFzX3RlbSdcclxuICAgIH0pXHJcbiAgICBpZiAob3B0cy5wYXNhQURlc2Nhcmdhcikge1xyXG4gICAgICAgIHNldHRlcnMucHVzaChgb3BlcmFjaW9uID0gJyR7T1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBfSdgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3FsOiBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDMgYW5kIGNhcmdhZG9fZG0gPSAkNFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gbG8gcXVlIGd1YXJkYXJFbmN1ZXN0YUVuVGVtIHVzYSBkZWwgY2xpZW50ZSBkZSBiYXNlIChlbCBDbGllbnQgZGUgcGctcHJvbWlzZS1zdHJpY3QgbG8gY3VtcGxlKVxyXG5leHBvcnQgdHlwZSBDbGllbnRlUGFyYVRlbSA9IHtcclxuICAgIHF1ZXJ5KHNxbDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtZXRyb1NxbFtdKTogeyBmZXRjaFVuaXF1ZVJvdygpOiBQcm9taXNlPHsgcm93Q291bnQ6IG51bWJlciB8IG51bGwgfT4gfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGd1YXJkYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgPFIgZXh0ZW5kcyBSZXN1bHRhZG9SZXN1bWVuPihjb250ZXh0OiB7IGNsaWVudDogQ2xpZW50ZVBhcmFUZW0gfSwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IHN0cmluZywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSLCB0YXJlYTogSWRUYXJlYSkgPT4ge1xyXG4gICAgdmFyIHsgc3FsLCBwYXJhbXMgfSA9IGNvbnN1bHRhVXBkYXRlVGVtKG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KHNxbCwgcGFyYW1zKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiByZWdpc3RyYXJQYXNlVGFibGEoXHJcbiAgICBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LFxyXG4gICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgIGlkRW5jOiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IGFueVxyXG4pIHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgIGxldCBwYXJhbV9ndWFyZGFyID0geyBvcGVyYXRpdm86IG9wZXJhdGl2bywgaWRfY2FzbzogaWRFbmMsIGRhdG9zX2Nhc286IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9O1xyXG4gICAgbGV0IHNhdmVwb2ludE5hbWUgPSBgc3BfZ3VhcmRhcl8ke2lkRW5jfWAucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAnXycpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFNBVkVQT0lOVCAke3NhdmVwb2ludE5hbWV9YCkuZXhlY3V0ZSgpO1xyXG4gICAgICAgIHJlc3VsdGFkbyArPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyKTtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgUkVMRUFTRSBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBST0xMQkFDSyBUTyBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0IHBhc2VfdGFibGEgPSAkM1xyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgLFxyXG4gICAgICAgIFtvcGVyYXRpdm8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbn1cclxuXHJcbnZhciBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOiBhbnkpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2bykpLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmUuZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBwZXJzaXN0ZW50ZXM6IHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIFtlbmNdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG59XHJcblxyXG4vLyBjYWRhIGVsZW1lbnRvIGRlIFwiY2FyZ2FzXCIgcXVlIGFybWEgZ2V0SGRyUXVlcnkgKGZlY2hhIGxsZWdhIGNvbW8gdGV4dG8gaXNvIGRlc2RlIGVsIGpzb24pXHJcbnR5cGUgQ2FyZ2FIZHJEYiA9IHtcclxuICAgIGNhcmdhOiBudW1iZXIgLy8gYXJlYVxyXG4gICAgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbFxyXG4gICAgZmVjaGE6IHN0cmluZyB8IG51bGxcclxuICAgIHJlY2VwY2lvbmlzdGE6IHN0cmluZyB8IG51bGxcclxuICAgIHB1ZWRlX2F1dG9nZW5lcmFyOiBib29sZWFuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhcmdhc0hkckNvbkZlY2hhRG15KGNhcmdhczogQ2FyZ2FIZHJEYltdKSB7XHJcbiAgICByZXR1cm4gY2FyZ2FzLm1hcChjYXJnYSA9PiAoeyAuLi5jYXJnYSwgZmVjaGE6IGNhcmdhLmZlY2hhID8gZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCkgOiBudWxsIH0pKTtcclxufVxyXG5cclxudmFyIGdldEhkclF1ZXJ5ID0gZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjpzdHJpbmcpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIHQuc2VtYW5hXHJcbiAgICAgICAgICAgICkgYXMgdGVtLCB0LmFyZWEsXHJcbiAgICAgICAgICAgIC0tVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3RhcmVhJywgdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIGZlY2hhX2FzaWduYWNpb24sXHJcbiAgICAgICAgICAgICAgICAnYXNpZ25hZG8nLCBhc2lnbmFkbyxcclxuICAgICAgICAgICAgICAgICdtYWluX2Zvcm0nLCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgKSBhcyB0YXJlYSxcclxuICAgICAgICAgICAgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhX2FzaWduYWNpb25cclxuICAgICAgICAgICAgZnJvbSB0ZW0gdCBsZWZ0IGpvaW4gdGFyZWFzX3RlbSB0dCBvbiAodC5vcGVyYXRpdm8gPSB0dC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gdHQuZW5jIGFuZCB0LnRhcmVhX2FjdHVhbCA9IHR0LnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxlZnQgam9pbiB0YXJlYXMgdGEgb24gdC50YXJlYV9hY3R1YWwgPSB0YS50YXJlYVxyXG4gICAgICAgICAgICB3aGVyZSB0LmhhYmlsaXRhZGEgYW5kICR7cXVvdGVkQ29uZFZpdn1cclxuICAgICAgICAgICAgZ3JvdXAgYnkgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtLCB0LnNlbWFuYVxyXG4gICAgICAgIClcclxuICAgICAgICBzZWxlY3QganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9LCAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCByZXNwdWVzdGFzLCBqc29uYl9idWlsZF9vYmplY3QoJ3Jlc3VtZW5Fc3RhZG8nLFwicmVzdW1lbkVzdGFkb1wiKSBhcyBvdHJhcyBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX1gLFxyXG4gICAgICAgICdlbmMnLFxyXG4gICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhLmFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYSwgdGEucmVjZXBjaW9uaXN0YSxcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhID8gYGNhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0YS5hc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZGA6IGBmYWxzZWB9IGFzIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9IGF1eCBpbm5lciBqb2luIGFyZWFzIGEgdXNpbmcgKG9wZXJhdGl2bywgYXJlYSkgaW5uZXIgam9pbiB0YXJlYXNfYXJlYXMgdGEgb24gKGEuYXJlYSA9IHRhLmFyZWEgYW5kIGF1eC50YXJlYS0+Pid0YXJlYScgPSB0YS50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBncm91cCBieSBhLmFyZWEsIG9ic2VydmFjaW9uZXNfaGRyLCB0YS5yZWNlcGNpb25pc3RhLCBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgJHtwZXJtaXRlR2VuZXJhck11ZXN0cmEgPyBgXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pb24gLS0gZXN0ZSB1bmlvbiBwZXJtaXRlIHZpc3VhbGl6YXIgYXJlYXMgYXNpZ25hZGFzIHNpbiBlbmN1ZXN0YXMgZ2VuZXJhZGFzXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGFyZWEgYXMgY2FyZ2EsIG51bGwgYXMgb2JzZXJ2YWNpb25lcywgbnVsbCBhcyBmZWNoYSwgcmVjZXBjaW9uaXN0YSwgdHJ1ZSBhcyBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19hcmVhcyB3aGVyZSBhc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgIDogJyd9XHJcbiAgICAgICAgICAgICAgICBgLCAnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCBqc29uYl9idWlsZF9vYmplY3QoJ3RlbScsIHRlbSwgJ3RhcmVhJywgdGFyZWEpIGFzIG90cmFzIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfWAsXHJcbiAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOiAocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IGdldEhkclF1ZXJ5ID0gbXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3dcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6ICdqcycsXHJcbiAgICB2YXJXcmFwcGVyOiAodmFyX25hbWU6IHN0cmluZykgPT4gYGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2EgPSB7XHJcbiAgICBjaGlsZHM6IENhc2lsbGVyb0RlQWNhW10sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGNvbXBpbGVyLnRvQ29kZShFeHByZXNpb25QYXJzZXIucGFyc2UoXHJcbiAgICAgICAgZXhwcmVzaW9uXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwgJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmJsYW5jbygoJylcclxuICAgICAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbi8vIHJlYS9ubyByZWEgKHkgc3VzIHZlcnNpb25lcyBfc3VwKSBkZWwgb3BlcmF0aXZvLCB0b21hZGFzIGRlIGxhcyBjYWNoZXMsIHBhcmEgbGEgZXN0cnVjdHVyYSBxdWUgc2UgbWFuZGEgYWwgZGlzcG9zaXRpdm8uXHJcbi8vIExhcyBjb25kaWNpb25lcyBkZSByZWEgc2UgY29tcGlsYW4gYSBqcyAoY29uZGljaW9uX2pzKSBwYXJhIGV2YWx1YXJsYXMgZW4gZWwgZGlzcG9zaXRpdm8uXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFzTm9SZWFzRGVsT3BlcmF0aXZvKHRhYmxlQ29udGVudDogQXBwQmFja2VuZFsnY2FjaGVzJ11bJ3RhYmxlQ29udGVudCddLCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSB7XHJcbiAgICB2YXIgbm9SZWFzQ2FjaGU6IE5vUmVhW10gPSB0YWJsZUNvbnRlbnQubm9fcmVhIHx8IFtdO1xyXG4gICAgdmFyIG5vUmVhc1N1cENhY2hlOiBOb1JlYVN1cFtdID0gdGFibGVDb250ZW50Lm5vX3JlYV9zdXAgfHwgW107XHJcbiAgICB2YXIgcmVhc0NhY2hlOiBPbWl0PFJlYSwgJ2NvbmRpY2lvbl9qcyc+W10gPSB0YWJsZUNvbnRlbnQucmVhIHx8IFtdO1xyXG4gICAgdmFyIHJlYXNTdXBDYWNoZTogT21pdDxSZWFTdXAsICdjb25kaWNpb25fanMnPltdID0gdGFibGVDb250ZW50LnJlYV9zdXAgfHwgW107XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vUmVhczogbm9SZWFzQ2FjaGUuZmlsdGVyKG5vUmVhID0+IG5vUmVhLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pLFxyXG4gICAgICAgIG5vUmVhc1N1cDogbm9SZWFzU3VwQ2FjaGUuZmlsdGVyKG5vUmVhU3VwID0+IG5vUmVhU3VwLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pLFxyXG4gICAgICAgIHJlYXM6IHJlYXNDYWNoZS5maWx0ZXIocmVhID0+IHJlYS5vcGVyYXRpdm8gPT0gb3BlcmF0aXZvKVxyXG4gICAgICAgICAgICAubWFwKChyZWEpOiBSZWEgPT4gKHsgLi4ucmVhLCBjb25kaWNpb25fanM6IGNvbXBpbGFyRXhwcmVzaW9uKHJlYS5jb25kaWNpb24pIH0pKSxcclxuICAgICAgICByZWFzU3VwOiByZWFzU3VwQ2FjaGUuZmlsdGVyKHJlYVN1cCA9PiByZWFTdXAub3BlcmF0aXZvID09IG9wZXJhdGl2bylcclxuICAgICAgICAgICAgLm1hcCgocmVhU3VwKTogUmVhU3VwID0+ICh7IC4uLnJlYVN1cCwgY29uZGljaW9uX2pzOiBjb21waWxhckV4cHJlc2lvbihyZWFTdXAuY29uZGljaW9uKSB9KSksXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVybzogQ2FzaWxsZXJvRGVBY2EpIHtcclxuICAgIGlmICghY2FzaWxsZXJvKSB7IHJldHVybiB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPSBjb21waWxhckV4cHJlc2lvbihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKTtcclxuICAgIH1cclxuICAgIGlmIChjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZykge1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZiAocGFydGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdmFyIHByZWNvbmRpY2lvbiA9IHBhcnRlc1swXTtcclxuICAgICAgICAgICAgdmFyIHZhbG9yID0gcGFydGVzLnNsaWNlKDEpLmpvaW4oJz0+Jyk7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBgKCR7Y29tcGlsYXJFeHByZXNpb24ocHJlY29uZGljaW9uKX0pPygke2NvbXBpbGFyRXhwcmVzaW9uKHZhbG9yKX0pOm51bGxgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGNhc2lsbGVyb0ludGVybm8gb2YgY2FzaWxsZXJvLmNoaWxkcykgY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm9JbnRlcm5vKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhckVuY3Vlc3RhVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBJZEVuYywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSkgPT4ge1xyXG4gICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIElOU0VSVCBpbnRvIHRlbSAob3BlcmF0aXZvLCBlbmMsIGFyZWEsIGRvbWluaW8sIGhhYmlsaXRhZGEsIHRhcmVhX2FjdHVhbCkgdmFsdWVzICgkMSwgJDIsICQzLCAkNCwgJDUsICQ2KWAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIGFyZWEsIGRvbWluaW8sIHRydWUsIHRhcmVhX2FjdHVhbF0pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgaW5zZXJ0IGludG8gdGFyZWFzX3RlbSAob3BlcmF0aXZvLCBlbmMsIHRhcmVhKVxyXG4gICAgICAgICAgICBzZWxlY3QgdGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhXHJcbiAgICAgICAgICAgIGZyb20gKHNlbGVjdCB0YS4qLCB0LmVuYyx0LmFyZWEgZnJvbSB0YXJlYXMgdGEsIHRlbSB0IHdoZXJlIHRhLm9wZXJhdGl2bz10Lm9wZXJhdGl2bykgdGEgXHJcbiAgICAgICAgICAgIHdoZXJlIHRhLm9wZXJhdGl2byA9ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIG5vdCAodGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhKSBpbiAoc2VsZWN0IG9wZXJhdGl2bywgZW5jLCB0YXJlYSBmcm9tIHRhcmVhc190ZW0pXHJcbiAgICAgICAgICAgIG9yZGVyIGJ5IDEsMywyO1xyXG4gICAgYCwgW29wZXJhdGl2b10pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgYnVzY2FyRW5jdWVzdGFFblRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55PikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250csOzIGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfS4gJHtleHBlY3RlZChlcnIpLm1lc3NhZ2V9YClcclxuICAgIH1cclxuICAgIHJldHVybiB7IGNhc29UZW06IHJlc3VsdC5yb3cgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhc2FyRW5jdWVzdGFzQVByb2llKGNsaWVudDogQ2xpZW50KSB7XHJcbiAgICBsZXQgcGFyYW1ldHJvcyA9IChhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICBbXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdHQudHNfZW50cmFkYVxyXG4gICAgICAgIGZyb20gdGFyZWFzX3RlbSB0dCBqb2luIHRlbSB0IHVzaW5nIChvcGVyYXRpdm8sZW5jKVxyXG4gICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHR0LnRhcmVhID0gdC50YXJlYV9hY3R1YWxcclxuICAgIGA7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdmaW5jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAvL1RPRE8gYXNpZ25hciBlbiBwcm9jZXNhbWllbnRvXHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdwcm9jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHVwZGF0ZSB0ZW0gdFxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSBhdXguZW5jXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJ10pLmZldGNoQWxsKCk7XHJcbiAgICByZXR1cm4gJ29rJztcclxufVxyXG5cclxuLy8gVnVlbHZlIGxhIGVuY3Vlc3RhIGEgbGEgw7psdGltYSB0YXJlYSB2ZXJpZmljYWRhIGF1bnF1ZSBsYSB0YXJlYSBhY3R1YWwgeWEgZXN0w6kgYXNpZ25hZGEgKHBvciBlamVtcGxvIGxhIHF1ZSBzZSBhc2lnbmEgc29sYSBhbCBwYXNhciBhIGZpbiBkZSBjYW1wbykuXHJcbi8vIE5vIHNhbHRlYSBsb3MgdHJpZ2dlcnM6IHByaW1lcm8gZGVqYSBsYSB0YXJlYSBhY3R1YWwgc2luIGFzaWduYXIsIGRlc3B1w6lzIG11ZXZlIHRlbS50YXJlYV9hY3R1YWwgKGVsIHRyaWdnZXIgZ3VhcmRhIGxhIGZvdG8gZW4gaGlzdG9yaWFsX3RlbSlcclxuLy8geSByZWNpw6luIGVudG9uY2VzIGRlc3ZlcmlmaWNhLCBjb24gbG8gY3VhbCBkZXN2ZXJpZmljYXJfdGFyZWFfdHJnIHZlIGEgbGEgdGFyZWEgZGVzdmVyaWZpY2FkYSBjb21vIGxhIGFjdHVhbC5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3Vlc3RhRGVzdmVyaWZpY2FyRXhjZXBjaW9uYWwoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiB7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCBtb3Rpdm86IHN0cmluZyB9KTogUHJvbWlzZTwnb2snPiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMgfSA9IHBhcmFtcztcclxuICAgIHZhciBtb3Rpdm8gPSAocGFyYW1zLm1vdGl2byA/PyAnJykudHJpbSgpO1xyXG4gICAgaWYgKCFtb3Rpdm8pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgaW5kaWNhciBlbCBtb3Rpdm8gZGUgbGEgZGVzdmVyaWZpY2FjacOzbicpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlc3ZlcmlmaWNhYmxlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3QgKiBmcm9tICgke3NxbERlc3ZlcmlmaWNhYmxlc30pIGQgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmNdXHJcbiAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgaWYgKCFkZXN2ZXJpZmljYWJsZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbGEgZW5jdWVzdGEgJHtlbmN9IG5vIHNlIHB1ZWRlIGRlc3ZlcmlmaWNhcjogc3Ugw7psdGltYSB0YXJlYSBubyBlc3TDoSB2ZXJpZmljYWRhIG8gbGEgdGFyZWEgYWN0dWFsIHlhIGVzdMOhIHZlcmlmaWNhZGFgKTtcclxuICAgIH1cclxuICAgIGlmICghZGVzdmVyaWZpY2FibGUuZXN0YWRvX2Rlc3Rpbm8pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGhheSB1bmEgYWNjacOzbiBlbiBlc3RhZG9zX2FjY2lvbmVzIHF1ZSBlamVjdXRlIGVuY3Vlc3RhX25vX3ZlcmlmaWNhciBkZXNkZSBlbCBlc3RhZG8gZGUgbGEgdGFyZWEgdmVyaWZpY2FkYScpO1xyXG4gICAgfVxyXG4gICAgdmFyIHRhcmVhQWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGwgfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0IGVzdGFkbywgYXNpZ25hZG8gZnJvbSB0YXJlYXNfdGVtIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM2AsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWxdXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJywgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWxdXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWwsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgLy8gbGEgZm90byBkZSBoaXN0b3JpYWxfdGVtIHNlIHNhY8OzIGNvbiBsYSB0YXJlYSB5YSBzaW4gYXNpZ25hcjogc2UgcmVzdGl0dXllIGxvIHF1ZSB0ZW7DrWEgeSBzZSBkZWphIHF1acOpbiBsbyBoaXpvIHkgcG9yIHF1w6lcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgaGlzdG9yaWFsX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJDQsIGFzaWduYWRvID0gJDUsIHVzdWFyaW9fYWNjaW9uID0gJDYsIG1vdGl2byA9ICQ3XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgYW5kIG9yZGVuID0gKHNlbGVjdCBtYXgob3JkZW4pIGZyb20gaGlzdG9yaWFsX3RlbSB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIpXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhX2FjdHVhbCwgdGFyZWFBY3R1YWwuZXN0YWRvLCB0YXJlYUFjdHVhbC5hc2lnbmFkbywgY29udGV4dC51c2VyLnVzdWFyaW8sIG1vdGl2b11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvLCB0YXJlYTogZGVzdmVyaWZpY2FibGUudGFyZWEsIGVuYyB9KTtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhLCBkZXN2ZXJpZmljYWJsZS5lc3RhZG9fZGVzdGlub11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIHJldHVybiAnb2snO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdTogUHJvY2VkdXJlRGVmW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcsIGRlZmF1bHRWYWx1ZTpudWxsIH0sXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6J2Rlc3BsZWdhckZvcm11bGFyaW8nLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLCBcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldDogc3RyaW5nfG51bGx9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgY2FzaWxsZXJvc19qZXJhcnF1aXphZG9zKCQxKSBhcyBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICAgICAgJHtqc29ubyhgc2VsZWN0IHVuaWRhZF9hbmFsaXNpcywgcGFkcmUsIHBrX2FncmVnYWRhLCAne30nOjpqc29uYiBhcyBoaWphcyBmcm9tIHVuaWRhZF9hbmFsaXNpcyB3aGVyZSBvcGVyYXRpdm8gPSAkMmAsICd1bmlkYWRfYW5hbGlzaXMnKX0gYXMgdW5pZGFkZXNfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LmZvcm11bGFyaW9zKS5mb3JFYWNoKGYgPT4gY29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdy5mb3JtdWxhcmlvc1tyb3cuaWRfZm9ybXVsYXJpb10uZGF0YS5oZXJtYW5vID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyVUEodWE6IFVuaWRhZEFuYWxpc2lzLCBpZFVhOiBJZFVuaWRhZEFuYWxpc2lzLCB1QXM6IHsgW2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzIH0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1YS5wYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVBc1t1YS5wYWRyZV0uaGlqYXNbaWRVYV0gPSB1YTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcykuZm9yRWFjaCgodWEsIGlkVWEpID0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7XHJcbiAgICAgICAgICAgICAgICBjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhcixcclxuICAgICAgICAgICAgICAgIGNvbmZpZ19zb3J0ZW86IGNvbmZpZ1NvcnRlbyxcclxuICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvOiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgIH0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvbmZpZ19zb3J0ZW8sIGNvbl9yZWFfaG9nYXIsIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvLCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbWFuYXMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgKiBmcm9tIHNlbWFuYXMgd2hlcmUgb3BlcmF0aXZvID0gJDFgLCAnc2VtYW5hJyl9IGFzIHNlbWFuYXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93LnNlbWFuYXM7XHJcbiAgICAgICAgICAgIGxldCBjb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MgPSAoZXhwcmVzaW9uZXNEb21pbmlvOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsIGRvbWluaW8pID0+ICh7IGRvbWluaW8sIGV4cHI6IGNvbXBpbGFyRXhwcmVzaW9uKGV4cHIuZXhwcikgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdTb3J0ZW8pIHtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihjb25maWdTb3J0ZW8pLmZvckVhY2goKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZF9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRybylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanMgPSBjb21waWxhckV4cHJlc2lvbihmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRJbmZvcm1hY2lvbkhkciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKERFRkFVTFRfRE9NSU5JTyl9LFxyXG4gICAgICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIG51bGxcclxuICAgICAgICAgICAgICAgICkgYXMgdGVtLFxyXG4gICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXJlYScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLnRhcmVhKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICdhc2lnbmFkbycsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwocGFyYW1ldGVycy5pZHBlcl9sb2d1ZWFkb190YWJsZXQgfHwgY29udGV4dC51c2VyLmlkcGVyKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21haW5fZm9ybScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLm1haW5fZm9ybSl9XHJcbiAgICAgICAgICAgICAgICApIGFzIHRhcmVhXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGNvblJlYUhvZ2FyLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvLFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgLi4ucmVhc05vUmVhc0RlbE9wZXJhdGl2byhiZS5jYWNoZXMudGFibGVDb250ZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2byksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICB1YVBwYWw6IHVuaWRhZF9hbmFsaXNpcyxcclxuICAgICAgICAgICAgICAgIHNlbWFuYXMsXHJcbiAgICAgICAgICAgICAgICBwa0FncmVnYWRhVWFQcGFsOiBwa19hZ3JlZ2FkYVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2VuZXJhcl9mb3JtdWxhcmlvcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdhbm5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdhbm5pbycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbWVzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ21lcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG90ZScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdsb3RlcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7YW5uaW86bnVtYmVyLCBtZXM6bnVtYmVyLCBsb3RlOm51bWJlcn0+KXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHVhUHBhbCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgdWFQcGFsKVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgICAgIHJlc3VsdFByZWd1bnRhcy5mb3JFYWNoKGZ1bmN0aW9uIChkZWZQcmVndW50YTphbnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpb1tkZWZQcmVndW50YS52YXJfbmFtZV0gPSBkZWZQcmVndW50YS51bmlkYWRfYW5hbGlzaXMgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW8gPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzID0gcGFyYW1ldGVycy5tZXM7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuYW5uaW8sIHBhcmFtZXRlcnMubWVzLCBwYXJhbWV0ZXJzLmxvdGVdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsgb3BlcmF0aXZvOiBPUEVSQVRJVk8gfTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAocmVzdWx0LnJvd0NvdW50IHx8IDApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcocGFyYW1zLCB7IGlkX2Nhc286IHJlc3VsdC5yb3dzW2ldLmlkX2Nhc28sIGRhdG9zX2Nhc286IGNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbywgeyBpZDogcmVzdWx0LnJvd3NbaV0uaWQgfSkgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBhZ3JlZ2FkYXM6IHJlc3VsdC5yb3dDb3VudCB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICd1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9hZGp1bnRvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBmaWxlczp7Y291bnQ6MX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtpZF9hZGp1bnRvPzpudW1iZXIsIG5vbWJyZT86c3RyaW5nfT4sIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBleGlzdGVcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gUGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLCAtKGV4dC5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1JvdzphbnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlkX2FkanVudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgbm9tYnJlPSAkMSxub21icmVfb3JpZ2luYWwgPSAkMiwgZXh0ID0gJDMsIHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJywkNDo6dGV4dCwnLicsJDM6OnRleHQpLCBmZWNoYSA9IG5vdygpLCBob3JhID0gZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDQgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dCwgcGFyYW1ldGVycy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0YWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RhdG9zX2Nhc28nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgZXNwZWNpZmljbyBlbCB0aXBvIGRlIGxvcyBwYXLDoW1ldHJvc1xyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2Fzbzogc3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOiBBbnlPYmplY3RcclxuICAgICAgICB9LCBuZXdDbGllbnQ6IENsaWVudCkge1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXdDbGllbnQgfHwgY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBkYXRvc19qc29uID0gcGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDogVGFibGVEZWZpbml0aW9ucyA9IGJlLnRhYmxlU3RydWN0dXJlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcblxyXG4gICAgICAgICAgICBkYXRvc19qc29uW3BrX2FncmVnYWRhXSA9IHBhcmFtZXRlcnMuaWRfY2FzbztcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrOmFueSwgdWFfYXJyOmFueVtdKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29uX3BrX2NvbXBsZXRhID0gdWFfYXJyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGEgPSBjb25fcGtfY29tcGxldGEubWFwKCh1bmFfdWEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5hX3VhW3VsdF9wa10gPSBpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5hX3VhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbl9wa19jb21wbGV0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NqOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdG9LID0gZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRvSyBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdG9LLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwayA9IHRhYmxlU3RydWN0dXJlc19hcHBba2V5TmFtZV0oY29udGV4dCkucHJpbWFyeUtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsdF9wayA9IHBrW3BrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSyA9IGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKHVsdF9waywgZGF0b0spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSy5mb3JFYWNoKChlbGVtSTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtSSA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZWxlbUkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleU5hbWUuc3RhcnRzV2l0aCgnJCcpIHx8IGtleU5hbWUuc3RhcnRzV2l0aCgnXycpIHx8IGtleU5hbWUgPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcmllcyA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFdyaXRlKGRhdG9zX2pzb24sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlOiBQcm9taXNlPGFueT4sIHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24gKF9yZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiY2Fzb19ndWFyZGFyIEVOVFJBIEVOIEVMIENBVENIOiBcIiwgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICAvL3tuYW1lOidmb3JtdWxhcmlvJyAgICAsICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudCA9IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCB1bmlkYWRfYW5hbGlzaXMpO1xyXG4gICAgICAgICAgICB2YXIgc3FsID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsUmVhZCh7IG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sIFtwa19hZ3JlZ2FkYV06IHBhcmFtZXRlcnMuaWRfY2FzbyB9LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICAvLyBiaXRhY29yYTp7YWx3YXlzOnRydWV9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHsgZGF0b3NfY2FzbzoganNvbiB9KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdwYXNhcl9qc29uMnVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICAvKiBGSU4tR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0VMRUNUICogZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gTElNSVQgMWApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICgocmVzdWx0TWFpbi5yb3dDb3VudCB8fCAwKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLCByZXN1bHRNYWluLnJvd3MpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hBWSBEQVRPUy4gTk8gU0UgUFVFREUgSU5JQ0lBUiBFTCBQQVNBSkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SnNvbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBvcGVyYXRpdm8sIGVuYyBpZF9jYXNvLCBqc29uX2VuY3Vlc3RhIGRhdG9zX2Nhc28gZnJvbSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3BlcmF0aXZvPSQxIGFuZCByZXN1bWVuX2VzdGFkbyBpcyBkaXN0aW5jdCBmcm9tICd2YWNpbycgYW5kIGpzb25fZW5jdWVzdGEgaXMgbm90IG51bGwgXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgZW5jIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUd1YXJkYXIuZGVmaW5lZEluICE9ICdkbWVuY3UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgc29icmVlc2NyaWJpciBjYXNvX2d1YXJkYXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0SnNvbi5yb3dzLm1hcChhc3luYyBmdW5jdGlvbiAocm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGNhc28gJHtyb3cuaWRfY2Fzb306IGA7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24gKF9jbGllbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvICs9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImpzb24ydWEgZXJyb3IuIFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRhZG8uaW5jbHVkZXMoJ29rJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm8gfSA9IGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcm93Lm9wZXJhdGl2bywgaWRfY2Fzbzogcm93LmlkX2Nhc28gfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVyUXVlR3JhYm8gPSB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JlcGFuY2VzLnNob3dBbmRUaHJvdyh2ZXJRdWVHcmFibywgcm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHZlclF1ZUdyYWJvLCByb3csIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BrX3JhaXpfdmFsdWUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJ0YXJlYXNcIiB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWU6IHN0cmluZywgdGFyZWE6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3Qge29wZXJhdGl2byxwa19yYWl6X3ZhbHVlLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB7cGVybWl0ZV9ib3JyYXJfdWE6IHRhcmVhUGVybWl0ZUJvcnJhclVBLCBtYWluX2Zvcm19ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2JvcnJhcl91YSwgbWFpbl9mb3JtIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyXHJcbiAgICAgICAgICAgIGAsIFtvcGVyYXRpdm8sIHRhcmVhXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBjb25zdCB7dW5pZGFkX2FuYWxpc2lzfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZHZpdj0gYCB0Lm9wZXJhdGl2bz0gJDEgYW5kIHQuZW5jID0kMmA7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzID0gY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5wcm9jZXNhciB8fCBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgc29sb0xlY3R1cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIGpvaW4gdGVtIHVzaW5nKG9wZXJhdGl2bywgZW5jKSBqb2luIGVzdGFkb3MgdXNpbmcgKG9wZXJhdGl2bywgZXN0YWRvKSAtLXBrIGVzdGFkbyB5IHRlbSB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbCBvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBlcm1pdGVfZWRpdGFyX2VuY3Vlc3RhIGFuZCBhc2lnbmFkbyA8PiAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGNvbnRleHQudXNlci5pZHBlcil9IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kICQzIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9IHRhcmVhX2FjdHVhbCBhbmQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnIGFuZCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgKWAsIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWUsICF1c3VhcmlvUHVlZGVQcm9jZXNhckVuY3Vlc3Rhc10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWUgPiAwO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICB2YXIgeyByb3cgfSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhLCBjb250ZXh0LnVzZXIuaWRwZXIpLCBbb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcm93LmluZm9ybWFjaW9uSGRyW3BrX3JhaXpfdmFsdWVdLnRhcmVhID0ge1xyXG4gICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICBtYWluX2Zvcm1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KGNhcmdhc0hkckNvbkZlY2hhRG15KHJvdy5jYXJnYXMpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6IGJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhckVsZW1lbnRvc1VBOiAhISh0YXJlYVBlcm1pdGVCb3JyYXJVQSAmJiBnZXRNb2RvQnlQb2xpY3koYmUpID09PSAnR0FCSU5FVEUnICYmIGNvbnRleHQucHVlZGU/LmVuY3Vlc3Rhcz8uYm9ycmFyX3VhKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGVyc2lzdGVudGVzOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKSkudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzID0gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSB8fCB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpZEVuYyBpbiByZXNwdWVzdGFzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSByZXNwdWVzdGFzW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RJTyBQUlVFQkEgREUgRVJST1IgQUwgR1JBQkFSJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3NpbmNyb25pemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ21vZG9fZG0nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbWJpYV9tb2RvX2RtJywgdHlwZU5hbWU6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZHBlcl9sb2d1ZWFkb190YWJsZXQnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCwgbW9kb19kbTogc3RyaW5nLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbiwgaWRwZXJfbG9ndWVhZG9fdGFibGV0OiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBpZighcGVybWl0ZUdlbmVyYXJNdWVzdHJhICYmIHBhcmFtZXRlcnMuY2FtYmlhX21vZG9fZG0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGVzIHBvc2libGUgY2FtYmlhciBkZSBtb2RvIGVuIGVzdGUgb3BlcmF0aXZvJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgcGVyc2lzdGVudGVzLCBtb2RvX2RtLCBjYW1iaWFfbW9kb19kbSwgaWRwZXJfbG9ndWVhZG9fdGFibGV0IH0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgdXN1YXJpbyBmcm9tIHVzdWFyaW9zIHdoZXJlIGlkcGVyID0gJDFgLCBbaWRwZXJfbG9ndWVhZG9fdGFibGV0XSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTsgXHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nID0gcGVyc2lzdGVudGVzPy50b2tlbiB8fCAoYXdhaXQgYmUucHJvY2VkdXJlLnRva2VuX2dldC5jb3JlRnVuY3Rpb24oY29udGV4dCwge1xyXG4gICAgICAgICAgICAgICAgdXNlcmFnZW50OiBjb250ZXh0LnNlc3Npb24ucmVxLnVzZXJhZ2VudCxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZUxvZ3VlYWRvVGFibGV0XHJcbiAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgY29uc3QgbnVtX3NpbmNybyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0LCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXYgPSBgXHJcbiAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIGFzaWduYWRvID0gJDJcclxuICAgICAgICAgICAgICAgIGFuZCB0dC5vcGVyYWNpb249J2NhcmdhcicgXHJcbiAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCB7IHVuaWRhZF9hbmFsaXNpczogVUFfUFJJTkNJUEFMLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlbnRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWRFbmMgaW4gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgICAgICAvL1RPRE8gQUwgUEFSRUNFUiBFU1TDgSBSRVNVRUxUTywgTE8gREVKTyBQT1IgTEFTIERVREFTXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3B1ZXN0YXNVQVByaW5jaXBhbCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2FyZ2EgPSBwZXJzaXN0ZW50ZXMuY2FyZ2FzW3BlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGVtLmNhcmdhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmVhID0gcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZ2FUYXJlYXNBcmVhcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgcmVjZXBjaW9uaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWEgPSAkMiBhbmQgYXJlYSA9ICQzIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHRhcmVhLCBjYXJnYS5jYXJnYV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcmdhVGFyZWFzQXJlYXMgJiYgIWNhcmdhLnJlY2VwY2lvbmlzdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBubyBzZSBkZWZpbmnDsyB1biByZWNlcGNpb25pc3RhIHBhcmEgZWwgb3BlcmF0aXZvICR7T1BFUkFUSVZPfSwgdGFyZWEgJHt0YXJlYX0sIMOhcmVhICR7Y2FyZ2EuY2FyZ2F9LCBwb3IgZmF2b3IgY29tdW5pcXVlc8OpIGNvbiBHQUJJTkVURSBwYXJhIHF1ZSBjYXJndWVuIHVuIHJlY2VwY2lvbmlzdGFgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaWRFbmMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWRFbmMgZXMgbGEgY2xhdmUgKHRleHRvKSBkZSBwZXJzaXN0ZW50ZXMucmVzcHVlc3RhczsgbGFzIGZ1bmNpb25lcyBxdWUgc2lndWVuIGxvIHJlY2liZW4gY29tbyB0ZXh0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRFbmMgPSBTdHJpbmcoYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgY2FyZ2EuY2FyZ2EsIGlkRW5jLCB0b2tlbiwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBjYXJnYS5yZWNlcGNpb25pc3RhIHx8IGNhcmdhVGFyZWFzQXJlYXMsIHBlcnNpc3RlbnRlcy5pZHBlciwgbW9kb19kbSBhcyBNb2RvRE0sIGNhbWJpYV9tb2RvX2RtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1ZWRvR3VhcmRhckVuVEVNID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnN1bHRhVGFyZWFzVGVtID0gY29uc3VsdGFVcGRhdGVUYXJlYXNUZW1Qb3JEZXNjYXJnYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgaWRFbmMsIHRhcmVhLCB0b2tlbiwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzYUFEZXNjYXJnYXI6IGNhbWJpYV9tb2RvX2RtIHx8IHBlcnNpc3RlbnRlcy5pZHBlciAhPSBpZHBlcl9sb2d1ZWFkb190YWJsZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVRhcmVhc1RlbSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGNvbnN1bHRhVGFyZWFzVGVtLnNxbCwgY29uc3VsdGFUYXJlYXNUZW0ucGFyYW1zKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1ZWRvR3VhcmRhckVuVEVNID0gcXVlcnlUYXJlYXNUZW0ucm93Q291bnQgPT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1ZWRvR3VhcmRhckVuVEVNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBPUEVSQVRJVk8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHRhcmVhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZ2lzdHJhclBhc2VUYWJsYShjb250ZXh0LCBPUEVSQVRJVk8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVjaWJpZG8tc2luLXRva2VuLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCBpZHBlcjogcGVyc2lzdGVudGVzLmlkcGVyLCBpZENhc286IGlkRW5jLCBbcGtfYWdyZWdhZGFdOiByZXNwdWVzdGFzVUFQcmluY2lwYWwgfSkgKyAnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgeyByb3cgfSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIFVBX1BSSU5DSVBBTCwgcGVybWl0ZUdlbmVyYXJNdWVzdHJhLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQpLCBbT1BFUkFUSVZPLCBpZHBlcl9sb2d1ZWFkb190YWJsZXRdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCAgZXN0YWRvID0gJDQsIGNhcmdhZG9fZG09JDM6OnRleHRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSAke2NvbmR2aXZ9IFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBlbmNgXHJcbiAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTyxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgbnVtX3NpbmNybyxcclxuICAgICAgICAgICAgICAgIGlkcGVyOiBpZHBlcl9sb2d1ZWFkb190YWJsZXQsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6IGxpa2VBci5jcmVhdGVJbmRleChjYXJnYXNIZHJDb25GZWNoYURteShyb3cuY2FyZ2FzKS5tYXAoY2FyZ2EgPT4gKHsgLi4uY2FyZ2EsIGVzdGFkb19jYXJnYTogJ3JlbGV2YW1pZW50bycgfSkpLCAnY2FyZ2EnKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICd0b2tlbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGVtJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyB0b2tlbjogc3RyaW5nIHwgbnVsbCwgdGVtOiBBbnlPYmplY3QsIG1vZG9fZG06IE1vZG9ETSB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46IHN0cmluZyB8IG51bGwgPSBwYXJhbWV0ZXJzLnRva2VuO1xyXG4gICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyByb3dDb3VudCB9ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KGBzZWxlY3QgMSBmcm9tIHRva2VucyB3aGVyZSB0b2tlbiA9ICQxYCwgW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyb3dDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiAnb2s6Ti9UJyB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnRlbSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYmFja3VwIG9mIGxpa2VBcihwYXJhbWV0ZXJzLnRlbSkuYXJyYXkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVhID0gYmFja3VwLmNhcmdhLmNhcmdhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzUmFpeiA9IGJhY2t1cC5yZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRFbmNETSA9IGJhY2t1cC5mb3JQa1JhaXpbcGtfYWdyZWdhZGFdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlY2VwY2lvbmlzdGEgPSBiYWNrdXAuY2FyZ2EucmVjZXBjaW9uaXN0YTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNpZ25hZG8gPSBiYWNrdXAuaWRwZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuY0RNKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgaWRFbmNETSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhLCBhc2lnbmFkbywgcGFyYW1ldGVycy5tb2RvX2RtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9iYWNrdXAgPSAkMywgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQganNvbl9iYWNrdXAgaXMgZGlzdGluY3QgZnJvbSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmNETSwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY29uc2lzdGlyX3ZpdmllbmRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGNhc286IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1fcHJvYyA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLmNhc29cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRhZG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbV9wcm9jXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBcIiBjb25zaXN0aXJfY2Fzby4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKioqIGNvbnNpc3Rpcl9jYXNvIHJlc3VsdGFkbzonLCByZXN1bHRhZG8pXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3Jlc2NhdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb2NhbFN0b3JhZ2VJdGVtS2V5JywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgbG9jYWxTdG9yYWdlSXRlbUtleTogc3RyaW5nLCBsb2NhbFN0b3JhZ2VJdGVtOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgbG9jYWxTdG9yYWdlSXRlbUtleSwgbG9jYWxTdG9yYWdlSXRlbSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYWxTdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZXNjYXRlLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCB1c2VyOiBjb250ZXh0LnVzZXJuYW1lLCBpdGVtS2V5OiBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBpdGVtRGF0YTogbG9jYWxTdG9yYWdlSXRlbSB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCBleHBlY3RlZChlcnIpKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2V0X3JhbmRvbV9mcmVlX2Nhc2UnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFt7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH1dLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8gfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgbWluc1RvRXhwaXJlID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNTaW5jZUJsb3F1ZWQgPSBgZGF0ZV9wYXJ0KCdtaW4nLCBhZ2UoY3VycmVudF90aW1lc3RhbXAsIGZlY2hhX2Jsb3F1ZW8pKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgZW5jIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGxpYnJlIG9yICR7bWluc1NpbmNlQmxvcXVlZH0gPiAke21pbnNUb0V4cGlyZX0pIGxpbWl0IDE7YCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBVUERBVEUgdGVtIHNldCBsaWJyZSA9IGZhbHNlLCBmZWNoYV9ibG9xdWVvPWN1cnJlbnRfdGltZXN0YW1wIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyYCwgW3BhcmFtcy5vcGVyYXRpdm8sIGVuYy52YWx1ZV0pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ211ZXN0cmFfZ2VuZXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhcmVhJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogXCJhcmVhc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RvbWluaW8nLCB0eXBlTmFtZTogJ2ludGVnZXInLCBkZWZhdWx0VmFsdWU6IDMgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudF9lbmN1ZXN0YXMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlciwgY2FudF9lbmN1ZXN0YXM6IG51bWJlciwgdGFyZWFfYWN0dWFsOiBJZFRhcmVhIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlR2VuZXJhck11ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbEFjdHVhbCA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGFyZWEgPSAkMmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJhbXMuY2FudF9lbmN1ZXN0YXMgLSB0b3RhbEFjdHVhbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBlbmMsIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbywgcGFyYW1zLnRhcmVhX2FjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9hZ3JlZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEgfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcGFyYW1zLmNhbnRfZW5jdWVzdGFzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXJfcHJldmlzdWFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnbW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG8nLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3N1YmNvb3JfY2FtcG8nLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgIC8vcGFzbyBhIGVuY3UgcGFyYSBndWFyZGFyIGVuIGhpc3RvcmlhbFxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwgPSAnZW5jdSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgLy9yZXNldGVvIHRlbSAobm8gc2UgZ3VhcmRhIGhpc3RvcmlhbCBwb3JxdWUgdGFyZWFfYWN0dWFsIGVzIG51bGwpXHJcbiAgICAgICAgICAgIC8vZ3VhcmRvIGJhY2t1cCBwb3IgbGFzIGR1ZGFzXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25fYmFja3VwID0ganNvbl9lbmN1ZXN0YSwganNvbl9lbmN1ZXN0YSA9IG51bGwsIHRhcmVhX2FjdHVhbCA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gbnVsbCwgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXAsIG1vZGlmaWNhZG8gPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVuX2VzdGFkbyA9IG51bGwsIHJlc3VtZW5fZXN0YWRvX3N1cCA9IG51bGwsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzZV90YWJsYSA9IG51bGwsIHJlYSA9IG51bGwsIG5vcmVhID0gbnVsbCwgcmVhX3N1cCA9IG51bGwsIG5vcmVhX3N1cCA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc191bHRpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlYDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JvcnJhcl9wcmV2aXN1YWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOlsnY29vcl9wcm9jJywnc3ViY29vcl9jYW1wbycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3RhX2FfYm9ycmFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQscGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JvcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2Fzb1RlbSB9ID0gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1fYm9ycmFkYXMgKG9wZXJhdGl2bywgZW5jLCBjdWFuZG8sIGFyZWEsIGNsdXN0ZXIsIGRvbWluaW8sIHRhcmVhX2FjdHVhbCwganNvbl9lbmN1ZXN0YSwgdG9rZW5fYXV0b2dlbmVyYWRvX2RtLCBlbmNfYXV0b2dlbmVyYWRvX2RtLCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsIHByb2llKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKCQxLCQyLGN1cnJlbnRfdGltZXN0YW1wLCQzLCQ0LCQ1LCQ2LCQ3LCQ4LCQ5LCQxMCwkMTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgICAgICAgICAgYCwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0ub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uYXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmNsdXN0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5kb21pbmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udGFyZWFfYWN0dWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5wcm9pZVxyXG4gICAgICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGlzdG9yaWFsX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzX3VsdGltYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gc2UgYm9ycsOzIGNvcnJlY3RhbWVudGVgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3Rhc19jYXBhY2l0YWNpb25fYm9ycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuY3NBQm9ycmFyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgKiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hBbGwoKSkucm93cztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBlbmNzQUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ib3JyYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvLCBlbmM6IHJvdy5lbmMgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAnc2UgYm9ycmFyb24gbGFzIGVuY3Vlc3RhcyBkZSBjYXBhY2l0YWNpw7NuJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdubyBzZSBwdWVkZSBib3JyYXIgbGEgZW5jdWVzdGEgcG9ycXVlIGVsIG9wZXJhdGl2byB0aWVuZSBtdWVzdHJhIGVzdMOhdGljYScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdhY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NvbmRpY2lvbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYWNjaW9uJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nLCBjb25kaWNpb246IHN0cmluZywgYWNjaW9uOiBFc3RhZG9BY2Npb24gfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIGFjY2lvbiA9IHBhcmFtcy5hY2Npb24gYXMgRXN0YWRvQWNjaW9uO1xyXG4gICAgICAgICAgICB2YXIgY3VtcGxlOiBib29sZWFuID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBhY2Npb25fY3VtcGxlX2NvbmRpY2lvbigkNSwgJDYsICQ3LCAkOCwgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCBjb25kaWNpb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tIGVzdGFkb3NfYWNjaW9uZXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZXN0YWRvID0gJDIgYW5kIGVhY2Npb24gPSAkMyBhbmQgZXN0YWRvX2Rlc3Rpbm8gPSAkNFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApYCwgW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbixcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVuYyxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIWN1bXBsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIHB1ZG8gZWplY3V0YXIgbGEgYWNjacOzbiwgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs24gXCIke3BhcmFtcy5jb25kaWNpb259XCIgbyBiaWVuIGVsIGVzdGFkbyBlc3TDoSBkZXNhY3R1YWxpemFkbywgcmVmcmVzcXVlIGxhIGdyaWxsYS5gKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW5jPSQyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlub1xyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGlmIChhY2Npb24ubm9tYnJlX3Byb2NlZHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBleGlzdGUgZWwgcHJvY2VkdXJlIFwiJHthY2Npb24ubm9tYnJlX3Byb2NlZHVyZX1cIiBkZWZpbmlkbyBlbiBsYSB0YWJsYSBcImVzdGFkb3NfYWNjaW9uZXNcIiBwYXJhIGVsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiAke2FjY2lvbi5vcGVyYXRpdm99LCBlc3RhZG86ICR7YWNjaW9uLmVzdGFkb30sIGVhY2Npb246ICR7YWNjaW9uLmVhY2Npb259LmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQlVTQ08gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICB2YXIgdGFyZWFTaWd1aWVudGUgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19wcm94aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8gPSAkMSBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gJDIgYW5kIGVzdGFkbyA9ICQzIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfY3VtcGxlX2NvbmRpY2lvbigkNCwgJDUsICQ2LCAkNywgY29uZGljaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IG9yZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgbGltaXQgMWBcclxuICAgICAgICAgICAgICAgICwgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuY1xyXG4gICAgICAgICAgICAgICAgXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3c7XHJcbiAgICAgICAgICAgIGlmICh0YXJlYVNpZ3VpZW50ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9Bc2lnbmFkbyA9IHRhcmVhU2lndWllbnRlLnJlZ2lzdHJhX3JlY2VwY2lvbmlzdGEgPyBjb250ZXh0LnVzZXIuaWRwZXIgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IHEgPSBjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbDtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdHNfZW50cmFkYSA9IGN1cnJlbnRfdGltZXN0YW1wLCBhZGVsYW50YXIgPSBudWxsLCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthdXRvQXNpZ25hZG8gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgcmVjZXBjaW9uaXN0YT1cIiArIHEoYXV0b0FzaWduYWRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vLCB0YXJlYVNpZ3VpZW50ZS5lc3RhZG9fZGVzdGlub11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJlYVNpZ3VpZW50ZS5ub21icmVfcHJvY2VkdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW3RhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJTiBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHJldHVybiBcIm9rXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGlzcG9uaWJpbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXNjYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYW5hbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sIGlkX2Nhc286IHBhcmFtcy5lbmMgfSlcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdpbmNvbnNpc3RlbmNpYXNfZW5jdWVzdGFfY29udHJvbGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZDogbnVtYmVyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb3VudCgqKSBhcyBjdW1wbGVcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhcyBpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb2luIGNvbnNpc3RlbmNpYXMgYyB1c2luZyAob3BlcmF0aXZvLCBjb25zaXN0ZW5jaWEpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb2luIG1vbWVudG9zX2NvbnNpc3RlbmNpYSBtYyB1c2luZyAob3BlcmF0aXZvLCBtb21lbnRvKVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8gPSAkMSBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpdmllbmRhID0gJDIgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb21lbnRvX2NvbnNpc3RlbmNpYV9jdW1wbGVfY29uZGljaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS52aXZpZW5kYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3QgY29uZGljaW9uIGZyb20gbW9tZW50b3NfY29uc2lzdGVuY2lhIHdoZXJlIG9wZXJhdGl2byA9IG1jLm9wZXJhdGl2byBhbmQgbW9tZW50byA9IG1jLm1vbWVudG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuanVzdGlmaWNhY2lvbiBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXJuYW1lXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYG5vIHNlIHB1ZWRlIHZlcmlmaWNhciBsYSB0YXJlYSBwb3JxdWUgaGF5IGluY29uc2lzdGVuY2lhcywgcG9yIGZhdm9yIHJlc3XDqWx2YWxhcyBvIGp1c3RpZsOtcXVlbGFzIGVuIGNhc28gZGUgc2VyIG5lY2VzYXJpby5gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5pbmNvbnNpc3RlbmNpYXNfZW5jdWVzdGFfY29udHJvbGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMScsIGFzaWduYWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgY29udGV4dC51c2VyLmlkcGVyXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc3ZlcmlmaWNhcl9leGNlcGNpb25hbCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW90aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2Nvb3JfcHJvYycsICdwcm9jZXNhbWllbnRvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIG1vdGl2bzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBlbmN1ZXN0YURlc3ZlcmlmaWNhckV4Y2VwY2lvbmFsKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3ByZXNlbmNpYWwnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3RlbGVmb25pY2EnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdmaW5jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnMEQnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1J10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdScsICdhbmFjJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfbnVldmEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWFfYWN0dWFsOiBzdHJpbmcsIHRhcmVhX251ZXZhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YXNfcHJvY2VzYW1pZW50b19wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBwYXNhckVuY3Vlc3Rhc0FQcm9pZShjb250ZXh0LmNsaWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzEnLCByZWZlcmVuY2VzOiAndGVtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50SG9nMScsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jMicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzInLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Bhc28nLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NvbmZpcm1hJywgdHlwZU5hbWU6ICdib29sZWFuJywgZGVmYXVsdFZhbHVlOiBmYWxzZSwgbGFiZWw6ICdDb25maXJtYSBpbnRlcmNhbWJpbyBkZSBsb3MgZGF0b3MgZW50cmUgbGFzIGVuY3Vlc3Rhcz8gJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3Byb2Nlc2FtaWVudG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55Pikge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUGFyYSBjb250cm9sYXI6XHJcbiAgICAgICAgICAgICAqIC0gcXVlIGxhcyBob2dhcmVzLCBwZXJzb25hcywgZXRjIGVzdMOpbiBpbnRlcmNhbWJpYWRhcyBcclxuICAgICAgICAgICAgICogICogdGFudG8gZW4gZWwganNvblxyXG4gICAgICAgICAgICAgKiAgKiBjb21vIGVuIGxhcyBURHNcclxuICAgICAgICAgICAgICogLSBjb3NhcyBxdWUgc2UgY2FsY3VsYW4gcG9yIGxhIGFwcD8gY3VhbGVzPyAocmVzdW1lbl9lc3RhZG8sIHJlYSB5IG5vcmVhKVxyXG4gICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNvbmZpcm1hKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZW5jMSB8fCAhcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIEZhbHRhIGluZ3Jlc2FyIHVuIG51bWVybyBkZSBlbmN1ZXN0YSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmVuYzEgPT0gcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIGVuYzEgeSBlbmMyIGRlYmVuIHNlciBkaXN0aW50b3MhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMiwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ09OVFJPTEFSIFFVRSBOSU5HVU5BIERFIExBUyAyIGVuY3Vlc3RhcyBFU1RFIENBUkdBREEsIEFCSUVSVEEgRkFMVEFcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW50X2hvZ3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHZpdmllbmRhLCBjb3VudCgqKW5oIGZyb20gaG9nYXJlcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBvciB2aXZpZW5kYT0kMylcclxuICAgICAgICAgICAgICAgIGdyb3VwIGJ5IHZpdmllbmRhIG9yZGVyIGJ5IHZpdmllbmRhXHJcbiAgICAgICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmFtX25oID0gW3BhcmFtcy5jYW50SG9nMSwgcGFyYW1zLmNhbnRIb2cyXTtcclxuICAgICAgICAgICAgY2FudF9ob2dzLmZvckVhY2goKHhlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1fbmhbaV0gIT09IHhlLm5oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1lbnMgPSBgRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpICsgMX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih4bWVucyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZWdFbmMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlZ0VuYy5sZW5ndGggIT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgTm8gc2UgZW5jb250cmFyb24gMiBlbmN1ZXN0YXMnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbGltcGlhIGxhcyBURHMgIFxyXG4gICAgICAgICAgICAgICAgbGV0IFtlbmMxLCBlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucGFzbyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBkZWxldGUgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBPUiB2aXZpZW5kYT0kMylgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICwgW09QRVJBVElWTywgZW5jMS5lbmMsIGVuYzIuZW5jXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1zLnBhc28gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2ltdWxhIGd1YXJkYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMxLnRhcmVhX2FjdHVhbCwgZW5jMi5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMyLmVuYywgZW5jMi50YXJlYV9hY3R1YWwsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhZG9yX2Rtc19tb3N0cmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuY3Vlc3RhZG9yJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazogJ21vc3RyYXJfZW5jdWVzdGFzX2FfYmxhbnF1ZWFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmN1ZXN0YWRvcjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgYXNpZ25hZG8gPSAkMiBhbmQgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IGNhcmdhZG9fZG1cclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY3Vlc3RhZG9yXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBlbmNvbnRyYXJvbiBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gdW4gRE0gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfSwgZW5jdWVzdGFkb3IgJHtwYXJhbXMuZW5jdWVzdGFkb3J9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cywgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndG9rZW4nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRva2VuOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAkMywgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSwgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHRhcmVhc1RlbVJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcignTm8gc2UgYmxhbnF1ZcOzIG5pbmd1bmEgZW5jdWVzdGEnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gPSBgZW5jICR7dHQuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZS5gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdEJhY2t1cCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2VuY3Vlc3RhID0ganNvbl9iYWNrdXAsIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCBmZWNoYV9iYWNrdXAgPiBjb2FsZXNjZShmZWNoYV9tb2RpZl9lbmN1ZXN0YSwgJzE5MDAtMDEtMDEnKSBhbmQganNvbl9iYWNrdXAgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dC5vcGVyYXRpdm8sIHR0LmVuY10pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRCYWNrdXAucm93Q291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gKz0gYCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFt0dC5vcGVyYXRpdm8sIHR0LmVuYywgdHQudGFyZWFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5vOiAndGFyZWFzX3RlbSdcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgcmVzdWx0QmFja3VwLnJvdy5vcGVyYXRpdm8sIHJlc3VsdEJhY2t1cC5yb3cuZW5jLCB0dC50YXJlYSwgcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJlYXNUZW1SZXN1bHQucm93cztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ21vZG9fZG1fZGVmZWN0b19vYnRlbmVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZG9EbURlZmVjdG8gPSAoYXdhaXQgKGNsaWVudC5xdWVyeShgc2VsZWN0IG1vZG9fZG1fZGVmZWN0byBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLCBbXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2RvRG1EZWZlY3RvO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHtcclxuICAgICAgICBhY3Rpb246ICdtb2RvX2FwcF9nZXQnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pikge1xyXG4gICAgICAgICAgICBjb25zdCB7IGJlIH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0TW9kb0J5UG9saWN5KGJlKTtcclxuICAgICAgICB9XHJcbiAgICB9LCB7XHJcbiAgICAgICAgLy8gbGEgYXl1ZGEgZW4gbMOtbmVhIHF1ZSBsZSBjb3JyZXNwb25kZSBhbCB1c3VhcmlvIHNlZ8O6biBzdSByb2wsIHN1cyBwZXJtaXNvcyB5IGVsIG1vZG8gKHZlciBkb2NzL2F5dWRhLW9ubGluZS5tZClcclxuICAgICAgICBhY3Rpb246ICdheXVkYV90cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KTogUHJvbWlzZTxBeXVkYVBhcmFVc3VhcmlvPiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgYmUgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1aWVuID0gcXVpZW5Db25zdWx0YUF5dWRhKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1hcyA9IHRlbWFzVmlzaWJsZXMoYmUuY2FjaGVzLmF5dWRhLCBxdWllbik7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByb2w6IHF1aWVuLnJvbCxcclxuICAgICAgICAgICAgICAgIG1vZG86IHF1aWVuLm1vZG8sXHJcbiAgICAgICAgICAgICAgICB0ZW1hczogdGVtYXMubWFwKHRlbWEgPT4gKHsgaWQ6IHRlbWEuaWQsIHRpdHVsbzogdGVtYS50aXR1bG8sIGh0bWw6IHRlbWEuaHRtbCB9KSksXHJcbiAgICAgICAgICAgICAgICBtZW51OiBtZW51Q29uQXl1ZGEoYmUuZ2V0TWVudShjb250ZXh0KS5tZW51LCB0ZW1hcyksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fbWlncmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2b19vcmlnZW4nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvX2Rlc3Rpbm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3NjaGVtYV9uYW1lJywgdHlwZU5hbWU6ICd0ZXh0JywgbGFiZWw6ICdub21icmUgZGUgc2NoZW1hJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdkb3dubG9hZF9zcWwnLFxyXG4gICAgICAgIHByb2NlZWRMYWJlbDogJ21pZ3JhcicsXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IHsgb3BlcmF0aXZvX29yaWdlbjogc3RyaW5nLCBvcGVyYXRpdm9fZGVzdGlubzogc3RyaW5nLCBzY2hlbWFfbmFtZTogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgLy8gMS4gQ29uc3VsdGFtb3MgbGFzIHRhYmxhcyBiYXNlIGRlbCBvcmlnZW4gKHNpZW1wcmUgdGllbmVuIG9wZXJhdGl2bylcclxuICAgICAgICAgICAgY29uc3QgYmFzZVRhYmxlc1Jlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgWydvcGVyYXRpdm9zJywgJ3RhcmVhcycsICd1bmlkYWRfYW5hbGlzaXMnLCAnY2FzaWxsZXJvcyddLm1hcChhc3luYyB0YWJsZU5hbWUgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3BlcmF0aXZvOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX0gd2hlcmUgb3BlcmF0aXZvID0gJDFgLCBbcGFyYW1zLm9wZXJhdGl2b19vcmlnZW5dKS5mZXRjaEFsbCgpXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGJhc2VUYWJsZXNSZXN1bHQuZm9yRWFjaCgoXywgaSkgPT4gYmFzZVRhYmxlc1Jlc3VsdFtpXS5yZXN1bHQucm93cy5mb3JFYWNoKHJvdyA9PiByb3cub3BlcmF0aXZvID0gcGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKSk7XHJcblxyXG4gICAgICAgICAgICAvL0NoZXF1ZW8geSBjb25zdWx0YSBkZSB0YWJsYXMgcmVhcyAocmVhLCBub19yZWEsIHJlYV9zdXAsIG5vX3JlYV9zdXApXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbmFsVGFibGVzID0gWydyZWEnLCAnbm9fcmVhJywgJ3JlYV9zdXAnLCAnbm9fcmVhX3N1cCddO1xyXG4gICAgICAgICAgICBjb25zdCB0YWJsZXNFeGlzdFJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCB0YWJsZV9uYW1lIFxyXG4gICAgICAgICAgICAgICAgIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBcclxuICAgICAgICAgICAgICAgICB3aGVyZSB0YWJsZV9zY2hlbWEgPSBjdXJyZW50X3NjaGVtYSgpIFxyXG4gICAgICAgICAgICAgICAgICAgYW5kIHRhYmxlX25hbWUgPSBhbnkoJDEpYCxcclxuICAgICAgICAgICAgICAgIFtvcHRpb25hbFRhYmxlc11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdPcHRpb25hbFRhYmxlcyA9IHRhYmxlc0V4aXN0UmVzdWx0LnJvd3MubWFwKHIgPT4gci50YWJsZV9uYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWlzc2luZ09wdGlvbmFsVGFibGVzID0gb3B0aW9uYWxUYWJsZXMuZmlsdGVyKHQgPT4gIWV4aXN0aW5nT3B0aW9uYWxUYWJsZXMuaW5jbHVkZXModCkpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWxUYWJsZXNSZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9uYWxUYWJsZXMubWFwKGFzeW5jIHRhYmxlTmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sc1Jlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvbHVtbl9uYW1lIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRhYmxlX3NjaGVtYSA9IGN1cnJlbnRfc2NoZW1hKCkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YWJsZV9uYW1lID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVOYW1lXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzT3BlcmF0aXZvID0gY29sc1Jlc3VsdC5yb3dzLnNvbWUoYyA9PiBjLmNvbHVtbl9uYW1lID09PSAnb3BlcmF0aXZvJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyID0gaGFzT3BlcmF0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX0gd2hlcmUgb3BlcmF0aXZvID0gJDFgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX1gO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGhhc09wZXJhdGl2byA/IFtwYXJhbXMub3BlcmF0aXZvX29yaWdlbl0gOiBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShxdWVyeVN0ciwgcXVlcnlQYXJhbXMpLmZldGNoQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbmFsVGFibGVzUmVzdWx0LmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodC5oYXNPcGVyYXRpdm8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0LnJlc3VsdC5yb3dzLmZvckVhY2gocm93ID0+IHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbWJpbmFtb3MgYmFzZSB5IG9wY2lvbmFsZXMgZW5jb250cmFkYXNcclxuICAgICAgICAgICAgY29uc3QgdGFibGVzUmVzdWx0ID0gWy4uLmJhc2VUYWJsZXNSZXN1bHQsIC4uLm9wdGlvbmFsVGFibGVzUmVzdWx0XTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVDYXNpbGxlcm9zRksgPSBgXHJcbiAgICAgICAgICAgICAgICBBTFRFUiBUQUJMRSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpfS5jYXNpbGxlcm9zIERJU0FCTEUgVFJJR0dFUiBBTEw7XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZUNhc2lsbGVyb3NGSyA9IGBcclxuICAgICAgICAgICAgICAgIEFMVEVSIFRBQkxFICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHBhcmFtcy5zY2hlbWFfbmFtZSl9LmNhc2lsbGVyb3MgRU5BQkxFIFRSSUdHRVIgQUxMO1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYnVpbGRJbnNlcnRzID0gKHF1ZXJ5OiB7IG5hbWU6IHN0cmluZywgaGFzT3BlcmF0aXZvPzogYm9vbGVhbiwgcmVzdWx0OiBSZXN1bHRSb3dzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbLi4ucXVlcnkucmVzdWx0LmZpZWxkc107XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2kgbGEgdGFibGEgZGUgcmVhIG5vIHRlbsOtYSBsYSBjb2x1bW5hIG9wZXJhdGl2bywgbGEgYWdyZWdhbW9zIGFsIGluc2VydFxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5Lmhhc09wZXJhdGl2byA9PT0gZmFsc2UgJiYgIWZpZWxkcy5zb21lKChmOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBmLm5hbWUgPT09ICdvcGVyYXRpdm8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJ29wZXJhdGl2bycgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LnJlc3VsdC5yb3dzLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeS5oYXNPcGVyYXRpdm8gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm87XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luc2VydCBpbnRvICcgKyBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKSArICcuJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChxdWVyeS5uYW1lKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgKyBmaWVsZHMubWFwKChmOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoZi5uYW1lKSkuam9pbignLCAnKSArICcpJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcgdmFsdWVzICgnICsgZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHJvd1tmLm5hbWVdKSkuam9pbignLCAnKSArICcpOyc7XHJcbiAgICAgICAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wT3JpZ2VuUSA9IGNvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX29yaWdlbik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wRGVzdGlub1EgPSBjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRBcmVhcyA9IFtcclxuICAgICAgICAgICAgICAgIDEsIDE0MDAsIDE0MTAsIDE0MjAsIDE0MzAsIDE0NDAsIDE0NTAsIDE0NjAsIDE0NzAsIDE0ODAsIDE0OTAsXHJcbiAgICAgICAgICAgICAgICAxNTAwLCAxNTEwLCAxNTIwLCAxNTMwLCAxNTQwLCA3NDAwLCA3NDEwLCA3NDIwLCA3NDMwLCA3NDQwLFxyXG4gICAgICAgICAgICAgICAgNzQ1MCwgNzQ2MCwgNzQ3MCwgNzQ4MCwgNzQ5MCwgNzUwMCwgNzUxMCwgNzUyMCwgNzUzMCwgNzU0MFxyXG4gICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgLy8gQXZpc29zIHNpIGFsZ3VuYSB0YWJsYSBvcGNpb25hbCBubyBleGlzdGUgZW4gYWJzb2x1dG9cclxuICAgICAgICAgICAgY29uc3Qgbm90aWNlc1NxbCA9IG1pc3NpbmdPcHRpb25hbFRhYmxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/IFwiRE8gXFwkXFwkXFxuQkVHSU5cXG5cIiArIG1pc3NpbmdPcHRpb25hbFRhYmxlcy5tYXAodCA9PiBgICAgIFJBSVNFIE5PVElDRSAnTGEgdGFibGEgXCIlXCIgbm8gZXhpc3RlIGVuIGVsIG9yaWdlbiwgc2Ugb21pdGUuJywgJyR7dH0nO2ApLmpvaW4oXCJcXG5cIikgKyBcIlxcbkVORCBcXCRcXCQ7XCJcclxuICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgICAgICAvLyAyLiBCbG9xdWUgUEwvcGdTUUwgY29uIHZhbGlkYWNpw7NuIHkgbGltcGllemEgZXhjbHVzaXZhIGVuIGVsIGNhbWlubyBwb3IgZGVmZWN0b1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25hbEFyZWFzVGVtU3FsID0gYFxyXG4gICAgICAgICAgICAgICAgRE8gJCRcclxuICAgICAgICAgICAgICAgIERFQ0xBUkVcclxuICAgICAgICAgICAgICAgICAgICB2X3RpZW5lX29uZGEgYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgIEJFR0lOXHJcbiAgICAgICAgICAgICAgICAgICAgLS0gVmVyaWZpY2FyIHNpIGxhcyAzIHRhYmxhcyB0aWVuZW4gcmVnaXN0cm9zIHNpbXVsdMOhbmVhbWVudGUgZW4gZWwgZGVzdGlub1xyXG4gICAgICAgICAgICAgICAgICAgIFNFTEVDVCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKFNFTEVDVCBjb3VudCgxKSBGUk9NIGFyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfSksIDApID4gMCBBTkRcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKFNFTEVDVCBjb3VudCgxKSBGUk9NIHRhcmVhc19hcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wT3JpZ2VuUX0pLCAwKSA+IDAgQU5EXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPQUxFU0NFKChTRUxFQ1QgY291bnQoMSkgRlJPTSB0ZW0gV0hFUkUgb3BlcmF0aXZvID0gJHtvcE9yaWdlblF9KSwgMCkgPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgSU5UTyB2X3RpZW5lX29uZGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIElGIHZfdGllbmVfb25kYSBUSEVOXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tIC0tLSBDQU1JTk8gQTogRWwgZGVzdGlubyBUSUVORSBvbmRhIGFudGVyaW9yIGNvbXBsZXRhIC0tLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBhcmVhcyAob3BlcmF0aXZvLCBhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICR7b3BEZXN0aW5vUX0gQVMgb3BlcmF0aXZvLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRhcmVhc19hcmVhcyAob3BlcmF0aXZvLCB0YXJlYSwgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgdGFyZWEsIGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gdGFyZWFzX2FyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRlbSAob3BlcmF0aXZvLCBhcmVhLCBlbmMsIGRvbWluaW8sIGhhYmlsaXRhZGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgYXJlYSwgKGFyZWEgfHwgZW5jOjp0ZXh0KSBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIGVuY3MuZW5jIDwgMTA2IFRIRU4gMyBFTFNFIDUgRU5EIEFTIGRvbWluaW8sIFRSVUUgQVMgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKT0lOIChTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEwMCwgMTEwKSBlbmMpIGVuY3MgT04gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhcmVhcy5vcGVyYXRpdm8gPSAke29wT3JpZ2VuUX07XHJcbiAgICAgICAgICAgICAgICAgICAgRUxTRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtLSAtLS0gQ0FNSU5PIEI6IEFsZ3VuYSB0YWJsYSBlc3TDoSB2YWPDrWEgbyBpbmNvbXBsZXRhIChMaW1waWFtb3MgZSBpbnNlcnRhbW9zIHBvciBkZWZlY3RvKSAtLS1cclxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gdGVtIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIHRhcmVhc19hcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSBhcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gYXJlYXMgKG9wZXJhdGl2bywgYXJlYSkgVkFMVUVTIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2RlZmF1bHRBcmVhcy5tYXAoYSA9PiBgKCR7b3BEZXN0aW5vUX0sJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUoYSl9KWApLmpvaW4oJywgJyl9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGFyZWFzX2FyZWFzKG9wZXJhdGl2bywgdGFyZWEsIGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgdC50YXJlYSwgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBhcmVhcyBhLCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHQub3BlcmF0aXZvLCB0LnRhcmVhIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gdGFyZWFzIHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYS5vcGVyYXRpdm8gPSAke29wRGVzdGlub1F9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCB0Lm9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIDEsIDIsIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRlbSAob3BlcmF0aXZvLCBhcmVhLCBlbmMsIGRvbWluaW8sIGhhYmlsaXRhZGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgYXJlYSwgKGFyZWEgfHwgZW5jOjp0ZXh0KSBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIGVuY3MuZW5jIDwgMTA2IFRIRU4gMyBFTFNFIDUgRU5EIEFTIGRvbWluaW8sIFRSVUUgQVMgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKT0lOIChTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEwMCwgMTEwKSBlbmMpIGVuY3MgT04gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhcmVhcy5vcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAgICAgICAgIEVORCBJRjtcclxuICAgICAgICAgICAgICAgIEVORCAkJDtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZXMgPSBgXHJcbiAgICAgICAgICAgIC0tZGVsZXRlcyBpZiBuZWNlc3NhcnlcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSB0YXJlYXNfYXJlYXMgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBjYXNpbGxlcm9zIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdGFyZWFzX3RlbSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIGFyZWFzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdGFyZWFzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gb3BlcmF0aXZvcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHJlYSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIG5vX3JlYSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHJlYV9zdXAgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBub19yZWFfc3VwIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzcWwgPSBgc2V0IHNlYXJjaF9wYXRoID0gXCIke3BhcmFtcy5zY2hlbWFfbmFtZX1cIjtgICsgYFxcblxcbmBcclxuICAgICAgICAgICAgICAgICsgZGlzYWJsZUNhc2lsbGVyb3NGS1xyXG4gICAgICAgICAgICAgICAgKyBub3RpY2VzU3FsXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nXHJcbiAgICAgICAgICAgICAgICArIHRhYmxlc1Jlc3VsdC5tYXAocXVlcnkgPT4gYnVpbGRJbnNlcnRzKHF1ZXJ5KSkuam9pbignXFxuXFxuJylcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBjb25kaXRpb25hbEFyZWFzVGVtU3FsXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgZW5hYmxlQ2FzaWxsZXJvc0ZLXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgZGVsZXRlcztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzcWw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXBhX2FfcHJvZF9wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZW5jX2F1dG9nZW5lcmFkb19kbSA9IGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLmVuY11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYHNlIG1vdmnDsyBsYSBlbmN1ZXN0YSAke3BhcmFtZXRlcnMuZW5jfSBhIHByb2R1Y2Npw7NuYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbl07Il19