dmencu 0.5.7 → 0.5.9

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.
Files changed (28) hide show
  1. package/dist/client/client/client.js +2 -2
  2. package/dist/server/server/app-dmencu.js +33 -4
  3. package/dist/server/server/procedures-dmencu.d.ts +1 -0
  4. package/dist/server/server/procedures-dmencu.js +70 -5
  5. package/dist/server/server/table-acciones.js +4 -1
  6. package/dist/server/server/table-estados.js +4 -1
  7. package/dist/server/server/table-tareas_tem.d.ts +1 -0
  8. package/dist/server/server/table-tareas_tem.js +15 -7
  9. package/dist/server/server/table-tareas_tem_analisis_campo.d.ts +3 -0
  10. package/dist/server/server/table-tareas_tem_analisis_campo.js +32 -0
  11. package/dist/server/server/table-tareas_tem_fin_campo copy.d.ts +3 -0
  12. package/dist/server/server/table-tareas_tem_fin_campo copy.js +28 -0
  13. package/dist/server/server/table-tareas_tem_fin_campo.d.ts +4 -0
  14. package/dist/server/server/table-tareas_tem_fin_campo.js +43 -0
  15. package/dist/server/server/table-tareas_tem_ingreso copy.d.ts +3 -0
  16. package/dist/server/server/table-tareas_tem_ingreso copy.js +32 -0
  17. package/dist/server/server/table-tareas_tem_ingreso.d.ts +3 -0
  18. package/dist/server/server/table-tareas_tem_ingreso.js +32 -0
  19. package/dist/server/server/table-tareas_tem_procesamiento copy.d.ts +3 -0
  20. package/dist/server/server/table-tareas_tem_procesamiento copy.js +32 -0
  21. package/dist/server/server/table-tareas_tem_procesamiento.d.ts +3 -0
  22. package/dist/server/server/table-tareas_tem_procesamiento.js +32 -0
  23. package/dist/server/server/table-tareas_tem_recepcion copy.d.ts +8 -0
  24. package/dist/server/server/table-tareas_tem_recepcion copy.js +82 -0
  25. package/dist/server/server/table-tareas_tem_recepcion.d.ts +3 -1
  26. package/dist/server/server/table-tareas_tem_recepcion.js +6 -21
  27. package/dist/server/server/table-tem.js +3 -1
  28. package/package.json +1 -1
@@ -326,7 +326,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
326
326
  };
327
327
  var crearBotonesVerAbrirTareas = (depot, fieldName, label) => __awaiter(void 0, void 0, void 0, function* () {
328
328
  tareas = tareas ? tareas : (yield myOwn.ajax.table_data({ table: `tareas`, fixedFields: [] }));
329
- var misTareas = tareas.filter((tarea) => !!tarea.main_form && tarea.operativo == depot.row.operativo && depot.manager.def.tableName == 'tem' ? true : depot.row.tarea == tarea.tarea);
329
+ var misTareas = tareas.filter((tarea) => !!tarea.main_form && tarea.operativo == depot.row.operativo && (depot.manager.def.muestraAbrirEnTodasLasTareas ? true : depot.row.tarea == tarea.tarea));
330
330
  depot.rowControls[fieldName].innerHTML = '';
331
331
  misTareas.forEach((tarea) => {
332
332
  let buttonLabel = `${label} ${tarea.tarea}`;
@@ -569,4 +569,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
569
569
  return [].concat.apply([], arrays);
570
570
  }
571
571
  });
572
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUk3RCxrQ0FBa0M7SUFDbEMscUVBQW9GO0lBQ3BGLG1FQUFrSjtJQUtsSixrQkFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFjLElBQUksQ0FBQztJQUV4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVEsRUFBRTtRQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFHO1lBQ0MsaUJBQWlCLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUFBLE9BQU0sR0FBRyxFQUFDO1lBQ1AsaUJBQWlCLEdBQUMsSUFBSSxDQUFDO1NBQzFCO1FBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUM7WUFDMUIsVUFBVSxFQUFDO2dCQUNQLEVBQUMsSUFBSSxFQUFDLFdBQVcsRUFBRyxRQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsWUFBWSxFQUFDO2dCQUM3RixFQUFDLElBQUksRUFBQyxPQUFPLEVBQU8sUUFBUSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUM7Z0JBQ3RGLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBUyxRQUFRLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLEVBQUM7YUFDL0Q7WUFDRCxVQUFVLEVBQUMsSUFBSTtZQUNmLFVBQVUsRUFBQyxDQUFPLE1BQU0sRUFBQyxFQUFFOztnQkFDdkIs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Q0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDekYsT0FBTyxTQUFTLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQzVDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7Z0JBQzlCLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7YUFDekIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNuRixDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUMsVUFBZSxXQUFXOztZQUMxQyw4Q0FBOEM7WUFDOUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBLENBQUE7SUFFRCxTQUFTLFNBQVMsQ0FBSSxNQUFZO1FBQzlCLE9BQVEsRUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2h0bWx9IGZyb20gXCJqcy10by1odG1sXCI7XHJcbmltcG9ydCB7dHJhZXJFc3RydWN0dXJhfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyBDYXNvU3RhdGUsICBcclxuICAgIElkRm9ybXVsYXJpbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkRW5jLCBJZE9wZXJhdGl2bywgSWRUYXJlYSwgRXN0YWRvQWNjaW9uLCBEaXJlY2Npb25BY2Npb24sXHJcbn0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge2dldEVzdHJ1Y3R1cmEsIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge0JBQ0tVUFMsIGNhcmdhckVzdHJ1Y3R1cmEsIGNhcmdhckhvamFEZVJ1dGEsIEdMT1ZBUl9EQVRPU0JZUEFTUywgR0xPVkFSX0VTVFJVQ1RVUkEsIEdMT1ZBUl9NT0RPQllQQVNTfSBmcm9tIFwiLi4vdW5sb2dnZWQvYWJyaXItZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IE9wZXJhdGl2byB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQge3NsZWVwLCBjb2FsZXNjZX0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5cclxuXHJcbi8vVE9ETyBHRU5FUkFMSVpBUlxyXG5cclxuY29uc3QgQUJSSVJfVEFCID0gXCJfYWJyaXJcIjtcclxuY29uc3QgVEFSRUFfREVGQVVMVCA9ICdlbmN1JztcclxudmFyIE9QRVJBVElWT19ERUZBVUxUOnN0cmluZ3xudWxsPSBudWxsO1xyXG5cclxubXlPd24uYXV0b1NldHVwRnVuY3Rpb25zLnB1c2goYXN5bmMgKCk9PntcclxuICAgIHZhciBteSA9IG15T3duOyAgICBcclxuICAgIHRyeXtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2dldCh7fSk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVD1udWxsO1xyXG4gICAgfVxyXG4gICAgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGE9e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAsIHR5cGVOYW1lOid0ZXh0JywgZGVmYXVsdFZhbHVlOk9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6VEFSRUFfREVGQVVMVCwgcmVmZXJlbmNlczogJ3RhcmVhcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOjEzMDAzMX1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICAgICAgdmFyIGNhcmdhID0gYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfY2FyZ2FyKHtvcGVyYXRpdm8sIHZpdmllbmRhOmVuYywgdGFyZWF9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgaWYoIWVzdHJ1Y3R1cmEgfHwgKGVzdHJ1Y3R1cmEudGltZXN0YW1wPz8wKSA8IGNhcmdhLnRpbWVzdGFtcEVzdHJ1Y3R1cmEhIHx8IGVzdHJ1Y3R1cmEub3BlcmF0aXZvICE9IG9wZXJhdGl2byB8fCBteS5jb25maWcuY29uZmlnLmRldmVsKXtcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICAgICAgICAgICAgICBjYXJnYXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB2YXIgc3RhdGU6Q2Fzb1N0YXRlID0ge31cclxuICAgICAgICAgICAgaW5pY2lhbGl6YXJTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbzpjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmMgYXMgSWRFbmNdLnRhcmVhLm1haW5fZm9ybSwgdml2aWVuZGE6ZW5jfTtcclxuICAgICAgICAgICAgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MoXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzc0VuQmFzZURlRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihwZXJzaXN0ZW50ZXMuc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFc3TDoSBpbnRlbnRhbmRvIG1vZGlmaWNhciB1bmEgZW5jdWVzdGEgYWJpZXJ0YSBjb21vIHNvbG8gbGVjdHVyYSwgbm8gc2UgZ3VhcmRhcm9uIGxvcyBjYW1iaW9zXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhcih7b3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXN9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBpZighY2FyZ2EucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzZSBlbmN1ZW50cmEgbGEgdml2aWVuZGEgJHtmb3JQa1JhaXoudml2aWVuZGEhfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhcmdhckhvamFEZVJ1dGEoey4uLmNhcmdhLCBtb2RvQWxtYWNlbmFtaWVudG86J3Nlc3Npb24nfSk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCh7b3BlcmF0aXZvLCBtb2RvRGVtbzpmYWxzZSwgZm9yUGtSYWl6fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLm9idGVuZXJfdGVsZWZvbm89e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKF9wYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIHRhcmVhfSA9IHtvcGVyYXRpdm86IE9QRVJBVElWT19ERUZBVUxULCB0YXJlYTogVEFSRUFfREVGQVVMVH07XHJcbiAgICAgICAgICAgIGxldCBlbmMgPSBwYXJzZUludChhd2FpdCBteS5hamF4LmdldF9yYW5kb21fZnJlZV9jYXNlKHtvcGVyYXRpdm99KSk7IFxyXG4gICAgICAgICAgICBhd2FpdCBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YS5tYWluQWN0aW9uKHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbXlPd24ud1NjcmVlbnMuY29uc2lzdGlyX2VuY3Vlc3RhPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKHBhcmFtcyk9PntcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYWluVG9wQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdG9wLWJhcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1haW5Ub3BCYXIpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgbWFpblRvcEJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYSwgZW5jIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IGVuY1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgIHZhciBmaXhlZEZpZWxkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7ZmllbGROYW1lOiAnb3BlcmF0aXZvJywgdmFsdWU6IG9wZXJhdGl2b30pO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7ZmllbGROYW1lOiAndml2aWVuZGEnLCB2YWx1ZTogZW5jfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZHcmlsbGEgPSBodG1sLmRpdih7aWQ6J2luY29uc2lzdGVuY2lhcyd9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkdyaWxsYSwgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZCb3RvbmVzID0gaHRtbC5kaXYoe2lkOidib3RvbmVzLXBvc3QtY29uc2lzdGlyJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNlcnJhciBlbmN1ZXN0YWBcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdm9sdmVyIGEgZW5jdWVzdGEgJHtlbmN9YFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZCb3RvbmVzLCBtYWluTGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgbXkudGFibGVHcmlkKFwiaW5jb25zaXN0ZW5jaWFzXCIsIGRpdkdyaWxsYSx7dGFibGVEZWY6e30sZml4ZWRGaWVsZHM6IGZpeGVkRmllbGRzfSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy9xdWl0YSBib290c3RyYXAgZGVsIGhlYWQgcGFyYSBxdWUgbm8gcm9tcGEgbG9zIGVzdGlsb3MgZGUgQkVQbHVzIChzb2xvIHNlIHVzYSBib290c3RyYXAgZW4gZWwgZm9ybSlcclxudmFyIGxpbmtOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2hyZWY9XCJjc3MvYm9vdHN0cmFwLm1pbi5jc3NcIl0nKTtcclxubGlua05vZGVbMF0/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlWzBdKTtcclxuXHJcbmZ1bmN0aW9uIGNvbnNpc3Rpcl9maWx0cm8odGFyZWEsIHJlYV90ZW0sIHJlYSl7XHJcbiAgICByZXR1cm4gdGFyZWE/cmVhX3RlbTpyZWE7XHJcbn07XHJcblxyXG52YXIgdGFyZWFzOmFueSA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBodG1sTnVtZXJvKG51bTpudW1iZXIpe1xyXG4gICAgcmV0dXJuIGh0bWwuc3Bhbih7Y2xhc3M6J251bWVybyd9LCcnKyhudW0/PycnKSlcclxufVxyXG5cclxudmFyIHBlcnNpc3RpckVuTWVtb3JpYSA9IGFzeW5jIChwZXJzaXN0ZW50ZXM6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpID0+IHtcclxuICAgIHZhciB7bW9kb0FsbWFjZW5hbWllbnRvfSA9IHBlcnNpc3RlbnRlc1xyXG4gICAgICAgIGlmKG1vZG9BbG1hY2VuYW1pZW50bz09J2xvY2FsJyl7XHJcbiAgICAgICAgICAgIG15LnNldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgcGVyc2lzdGVudGVzKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBteS5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgcGVyc2lzdGVudGVzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBteS5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9NT0RPQllQQVNTLCBtb2RvQWxtYWNlbmFtaWVudG8pXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzfG51bGwpe1xyXG4gICAgdmFyIGRhdG9zID0gYXdhaXQgbXkuYWpheC5kbV9zaW5jcm9uaXphcih7cGVyc2lzdGVudGVzfSk7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gZGF0b3Mub3BlcmF0aXZvO1xyXG4gICAgcGVyc2lzdGlyRW5NZW1vcmlhKHsuLi5kYXRvcywgbW9kb0FsbWFjZW5hbWllbnRvOidsb2NhbCd9KTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gYXdhaXQgdHJhZXJFc3RydWN0dXJhKHtvcGVyYXRpdm99KVxyXG4gICAgbXkuc2V0TG9jYWxWYXIoR0xPVkFSX0VTVFJVQ1RVUkEsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgbXkucmVtb3ZlTG9jYWxWYXIoQkFDS1VQUyk7XHJcbiAgICByZXR1cm4gZGF0b3M7XHJcbn1cclxuXHJcblxyXG5cclxudmFyIG1vc3RyYXJJbmZvTG9jYWwgPSAoZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQsIHRpdHVsbzpzdHJpbmcsIG5yb1NpbmNybzpudW1iZXJ8bnVsbCwgbW9zdHJhckxpbmtIZHI6IGJvb2xlYW4pPT57XHJcbiAgICBsZXQgZGF0b3NCeVBhc3MgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgaWYoZGF0b3NCeVBhc3Mpe1xyXG4gICAgICAgIGRpdkF2aXNvU2luY3JvLmFwcGVuZChodG1sLmRpdih7aWQ6J2F2aXNvLXNpbmNybyd9LCBbXHJcbiAgICAgICAgICAgIG5yb1NpbmNybz9odG1sLnAoW1wiTsO6bWVybyBkZSBzaW5jcm9uaXphY2nDs246IFwiLCBodG1sLmIoXCJcIitucm9TaW5jcm8udG9TdHJpbmcoKSldKTpudWxsLFxyXG4gICAgICAgICAgICBodG1sLmg0KHRpdHVsbyksXHJcbiAgICAgICAgICAgIGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5hcnJheSgpLmxlbmd0aCksJyBhcmVhczogJyxsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5rZXlzKCkuam9pbignLCAnKV0pLFxyXG4gICAgICAgICAgICBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMudml2aWVuZGFzKS5hcnJheSgpLmxlbmd0aCksJyB2aXZpZW5kYXMnXSksXHJcbiAgICAgICAgICAgIG1vc3RyYXJMaW5rSGRyP2h0bWwuYSh7aHJlZjonLi9jYW1wbyd9LFtodG1sLmIoJ0lSIEEgTEEgSE9KQSBERSBSVVRBJyldKTpudWxsXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoe2NsYXNzOidhdmlzbyd9LFtcclxuICAgICAgICAgICAgaHRtbC5oNCgnU2lzdGVtYSB2YWPDrW8nKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSB2aXZpZW5kYXMnKVxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG52YXIgcHJvY2VkZXJTaW5jcm9GdW4gPSBhc3luYyAoYnV0dG9uOkhUTUxCdXR0b25FbGVtZW50LCBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudCk9PntcclxuICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uJztcclxuICAgIGRpdkF2aXNvU2luY3JvLmlubmVySFRNTD0nJztcclxuICAgIHRyeXtcclxuICAgICAgICB2YXIgZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgICAgIHZhciBkYXRvcyA9IGF3YWl0IHNpbmNyb25pemFyRGF0b3MoZGF0b3NCeVBhc3MpO1xyXG4gICAgICAgIG1vc3RyYXJJbmZvTG9jYWwoZGl2QXZpc29TaW5jcm8sICdkYXRvcyByZWNpYmlkb3MnLCBkYXRvcy5udW1fc2luY3JvLCB0cnVlKVxyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgIHRocm93IGVyclxyXG4gICAgfWZpbmFsbHl7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgIGJ1dHRvbi5jbGFzc05hbWU9J2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JztcclxuICAgIH1cclxufVxyXG5teU93bi53U2NyZWVucy5zaW5jcm9uaXphcl9kbT1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7Y2xhc3M6J2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250J30sJ3Byb2NlZGVyIOKHkicpLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50PWh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBtb3N0cmFySW5mb0xvY2FsKG1haW5MYXlvdXQgYXMgSFRNTERpdkVsZW1lbnQsICdpbmZvcm1hY2nDs24gYSB0cmFuc21pdGlyJywgbnVsbCwgZmFsc2UpXHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKHByb2NlZGVyQnV0dG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoZGl2QXZpc29TaW5jcm8pO1xyXG4gICAgcHJvY2VkZXJCdXR0b24ub25jbGljayA9ICgpPT5wcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8pXHJcbn07XHJcblxyXG5mdW5jdGlvbiBpbmljaWFsaXphclN0YXRlKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgIHN0YXRlLm1vZG8gPSB7XHJcbiAgICAgICAgZGVtbzogZmFsc2VcclxuICAgIH07XHJcbiAgICAvLyBPSk8gc3RhdGUub3BjaW9uZXMgc2UgbW9kaWZpY2EgYWPDoSB5IGVuIG90cm8gbGFkbyBjb24gZXN0ZSBtaXNtbyBjYXJ0ZWxcclxuICAgIHN0YXRlLm9wY2lvbmVzID0ge1xyXG4gICAgICAgIGJpZW52ZW5pZG86IHRydWUsXHJcbiAgICAgICAgZm9yUGs6IG51bGwsXHJcbiAgICAgICAgcGlsYUZvclBrOiBbXSxcclxuICAgICAgICBtb2RvRGVzcGxpZWd1ZTogXCJyZWxldmFtaWVudG9cIixcclxuICAgICAgICBtb2RvRGlyZWN0bzogZmFsc2UsXHJcbiAgICAgICAgbW9kb0JvcnJhclJlc3B1ZXN0YTogbnVsbCxcclxuICAgICAgICBjb25DYW1wb09wY2lvbmVzOiBmYWxzZSxcclxuICAgICAgICBzYWx0b0F1dG9tYXRpY286IHRydWUsXHJcbiAgICB9O1xyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBzdGF0ZS5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHt9O1xyXG59XHJcbi8qXHJcbmZ1bmN0aW9uIG1vc3RyYXJEYXRvc1BlcnNvbmEoaGF5RGF0b3M6Ym9vbGVhbiwgZGF0b3M6YW55LCBkaXZSZXN1bHQ6SFRNTERpdkVsZW1lbnQpe1xyXG4gICAgLy9UT0RPOiBFVkFMVUFSIFNJIENPTlZJRU5FIFRSQUVSTE8gREUgTEEgQkFTRVxyXG4gICAgdmFyIHRpcG9zRG9jdW1lbnRvID0gWydETkkgYXJnZW50aW5vJywgJ0RvY3VtZW50byBleHRyYW5qZXJvJywgJ05vIHRpZW5lIGRvY3VtZW50bycsICdPdHJvJ107XHJcbiAgICB2YXIgcGFpc0RvY3VtZW50byA9IFsnVXJ1Z3VheScsICdQYXJhZ3VheScsICdCcmFzaWwnLCAnQm9saXZpYScsICdDaGlsZScsICdQZXLDuicsICdWZW5lenVlbGEnLCAnT3RybyddO1xyXG4gICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGhheURhdG9zP1xyXG4gICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2RhdG9zLXBlcnNvbmEtY2FyZ2FkYSd9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwuaDIoXCJEYXRvcyBwZXJzb25hXCIpLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidmaWNoYS1wZXJzb25hJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtodG1sLmxhYmVsKCdBcGVsbGlkbzogJyksIGRhdG9zLmFwZWxsaWRvXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ05vbWJyZXM6ICcpLCBkYXRvcy5ub21icmVzXSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnVGlwbyBkb2N1bWVudG86ICcpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpcG9zRG9jdW1lbnRvW2RhdG9zLnRpcG9Eb2N1bWVudG8tMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvPT00ICYmIGRhdG9zLnRpcG9Eb2N1bWVudG9Fc3BlY2lmaWNhZG8/JyAoJysgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvPT0yICYmIGRhdG9zLnBhaXNEb2N1bWVudG8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwubGFiZWwoJ1BhaXM6ICcpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXNEb2N1bWVudG9bZGF0b3MucGFpc0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnBhaXNEb2N1bWVudG89PTggJiYgZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnK2RhdG9zLnBhaXNEb2N1bWVudG9Fc3BlY2lmaWNhZG8rJyknOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50byE9MyAmJiBkYXRvcy50aXBvRG9jdW1lbnRvP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdOwrogRG9jdW1lbnRvOiAnKSwgZGF0b3MuZG9jdW1lbnRvXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MuY2VsdWxhcj9odG1sLmRpdihbaHRtbC5sYWJlbCgnQ2VsLjogJyksIGRhdG9zLmNlbHVsYXJdKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5lbWFpbD9odG1sLmRpdihbaHRtbC5sYWJlbCgnRW1haWw6ICcpLCBkYXRvcy5lbWFpbF0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ1RlbC4gYWx0ZXJuYXRpdm86ICcpLCBkYXRvcy50ZWxlZm9ub0FsdGVybmF0aXZvXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3Mub2JzZXJ2YWNpb25lcz9odG1sLmRpdihbaHRtbC5sYWJlbCgnT2JzZXJ2YWNpb25lczogJyksIGRhdG9zLm9ic2VydmFjaW9uZXNdKTonJyxcclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgOlxyXG4gICAgICAgICAgICBodG1sLnAoXCJObyBzZSBlbmNvbnRyw7MgdW5hIGVuY3Vlc3RhIHBhcmEgbGEgZXRpcXVldGEgY2FyZ2FkYVwiKS5jcmVhdGUoKVxyXG4gICAgKVxyXG59XHJcbiovXHJcbi8qbXlPd24uY2xpZW50U2lkZXMudGFyZWFzVGVtUm93PXtcclxuICAgIHVwZGF0ZTooZGVwb3QpPT57XHJcbiAgICAgICAgdmFyIHRhcmVhOiduYWRhJ3wncHJlYXNpZ25hcid8J2Nhcmdhcid8J3JlYWxpemFyJ3wndmVyaWZpY2FyJz0nbmFkYSc7XHJcbiAgICAgICAgdmFyIHJvdz1kZXBvdC5yb3c7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHZhciBpZHBlcj1teS5jb25maWcuaWRwZXI7XHJcbiAgICAgICAgdmFyIGVzcGVyYXI6Ym9vbGVhbj1mYWxzZTtcclxuICAgICAgICBpZihyb3cuaGFiaWxpdGFkYSl7XHJcbiAgICAgICAgICAgIGlmKCFyb3cucmVjZXBjaW9uaXN0YSAmJiAhcm93LmFzaWduYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSdwcmVhc2lnbmFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9dHJ1ZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5hc2lnbmFkbyB8fCAhcm93LmZlY2hhX2FzaWduYWNpb24gfHwgIXJvdy5vcGVyYWNpb24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J2Nhcmdhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5yZWNlcGNpb25pc3RhIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5yZWEpe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3JlYWxpemFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LmFzaWduYWRvIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy52ZXJpZmljYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSd2ZXJpZmljYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cucmVjZXBjaW9uaXN0YSE9aWRwZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvbmVyPXtcclxuICAgICAgICAgICAgcmVjZXBjaW9uaXN0YSAgICAgICAgICA6dGFyZWE9PSdwcmVhc2lnbmFyJyAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBhc2lnbmFkbyAgICAgICAgICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgZmVjaGFfYXNpZ25hY2lvbiAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIG9wZXJhY2lvbiAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBjYXJnYV9vYnNlcnZhY2lvbmVzOih0YXJlYT09J2NhcmdhcicgICAgIHx8IHRhcmVhPT0ncmVhbGl6YXInICYmICFyb3cuY2FyZ2FkbyAmJiAhcm93LnJlYSApICYmIHJvdy5yZWNlcGNpb25pc3RhPT1pZHBlciAmJiAnb3B0YXRpdm8nLFxyXG4gICAgICAgICAgICB2ZXJpZmljYWRvICAgICAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb2JzX3ZlcmlmaWNhZG8gICAgIDp0YXJlYT09J3ZlcmlmaWNhcicgICYmIChlc3BlcmFyPydlc3BlcmFyJzonb3B0YXRpdm8nKSxcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHBvbmVyKS5mb3JFYWNoKCh2YWxvciwgY2FtcG8pPT57XHJcbiAgICAgICAgICAgIGlmKCF2YWxvcil7XHJcbiAgICAgICAgICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tjYW1wb10ucmVtb3ZlQXR0cmlidXRlKCdteS1tYW5kYXRvcnknKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5zZXRBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScsdmFsb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiBmdW5jdGlvbigpe31cclxufVxyXG4qL1xyXG5cclxudmFyIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YSA9IChsYWJlbDpzdHJpbmcpPT57XHJcbiAgICBsZXQgcGF0aCA9IFwiTTMgM3YxOGgxOFYzSDN6bTE0IDEyLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIjtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7Y2xhc3M6XCJzdmctY2VycmFyLWVuY3Vlc3RhXCJ9LFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOnBhdGhcclxuICAgICAgICB9KVxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDI2IDI2XCIpO1xyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHtpZDonYm90b24tY2VycmFyLWVuY3Vlc3RhJ30sW3N2ZywgbGFiZWxdKS5jcmVhdGUoKTtcclxuICAgIHZlci5vbmNsaWNrID0gKCk9PiBjbG9zZSgpO1xyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsZW5jdWVzdGE6bnVtYmVyLCBsYWJlbDpzdHJpbmcpPT57XHJcbiAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTp0YXJlYSxcclxuICAgICAgICBlbmM6ZW5jdWVzdGFcclxuICAgIH1cclxuICAgIGxldCB2ZXIgPSBodG1sLmJ1dHRvbih7aWQ6J2JvdG9uLXZvbHZlci1hLWVuY3Vlc3RhJ30sbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IHdpbmRvdy5vcGVuKGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yK2B3PWFicmlyX2VuY3Vlc3RhJnVwPSR7SlNPTi5zdHJpbmdpZnkodXApfSZhdXRvcHJvY2VkPXRydWVgLCBBQlJJUl9UQUIpXHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyA9IGFzeW5jIChkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgbGFiZWw6J2FicmlyJ3wndmVyJyk9PntcclxuICAgIHRhcmVhcyA9IHRhcmVhcz90YXJlYXM6KGF3YWl0IG15T3duLmFqYXgudGFibGVfZGF0YSh7dGFibGU6IGB0YXJlYXNgLCBmaXhlZEZpZWxkczpbXX0pKTtcclxuICAgIHZhciBtaXNUYXJlYXMgPSB0YXJlYXMuZmlsdGVyKCh0YXJlYSk9PiEhdGFyZWEubWFpbl9mb3JtICYmIHRhcmVhLm9wZXJhdGl2bz09ZGVwb3Qucm93Lm9wZXJhdGl2byAmJiBkZXBvdC5tYW5hZ2VyLmRlZi50YWJsZU5hbWU9PSd0ZW0nP3RydWU6ZGVwb3Qucm93LnRhcmVhID09IHRhcmVhLnRhcmVhKTtcclxuICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uaW5uZXJIVE1MPScnO1xyXG4gICAgbWlzVGFyZWFzLmZvckVhY2goKHRhcmVhOnt0YXJlYTpzdHJpbmcsIG5vbWJyZTpzdHJpbmcsIG1haW5fZm9ybTpJZEZvcm11bGFyaW99KT0+e1xyXG4gICAgICAgIGxldCBidXR0b25MYWJlbCA9IGAke2xhYmVsfSAke3RhcmVhLnRhcmVhfWA7XHJcbiAgICAgICAgbGV0IHZlciA9IGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICBkZXBvdC5yb3cub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICB0YXJlYS50YXJlYSBhcyBJZFRhcmVhLCBcclxuICAgICAgICAgICAgTnVtYmVyKGRlcG90LnJvdy5lbmMpLFxyXG4gICAgICAgICAgICBidXR0b25MYWJlbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmVyLnN0eWxlPSdtYXJnaW46MHB4IDJweDsnO1xyXG4gICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uYXBwZW5kQ2hpbGQodmVyKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbnZhciBnZXRBYnJpck92ZXIgPSAoZGVwb3Q6bXlPd24uRGVwb3QsX2ZpZWxkTmFtZTpzdHJpbmcpPT5cclxuICAgIChkZXBvdC5yb3cuY2FyZ2Fkb19kbSB8fCAhZGVwb3Qucm93Wydlc3RhZG9zX19wZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSddICYmIGRlcG90LnJvdy5hc2lnbmFkbyAhPSBteS5jb25maWcuaWRwZXIpP1xyXG4gICAgICAgICd2ZXInOidhYnJpcidcclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpcj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciBsYWJlbDondmVyJ3wnYWJyaXInID0gZ2V0QWJyaXJPdmVyKGRlcG90LGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsZmllbGROYW1lLGxhYmVsKTsgLy9ubyBlc3Blcm8gcHJvbWVzYSBwb3JxdWUgbm8gZXMgbmVjZXNhcmlvXHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpclJlY2VwY2lvbj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciBsYWJlbDondmVyJ3wnYWJyaXInID0gZ2V0QWJyaXJPdmVyKGRlcG90LGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsZmllbGROYW1lLGxhYmVsKTsgLy9ubyBlc3Blcm8gcHJvbWVzYSBwb3JxdWUgbm8gZXMgbmVjZXNhcmlvXHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy52ZXJJY29ub1N2Zz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MPScnO1xyXG4gICAgICAgIGlmKGRlcG90LnJvdy5wYXRoX2ljb25vX3N2Zyl7XHJcbiAgICAgICAgICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7XHJcbiAgICAgICAgICAgICAgICBjbGFzczpcInN2Zy1hY2Npb25lc1wiXHJcbiAgICAgICAgICAgIH0sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgICAgICAgICBkOmRlcG90LnJvdy5wYXRoX2ljb25vX3N2Z1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsXCIwIDAgNTAgNTBcIik7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKHN2Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGNyZWFyU1ZHID0gKHBhdGg6c3RyaW5nLHByb3BzOmFueSkgPT4ge1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHByb3BzIHx8IHt9LFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOnBhdGhcclxuICAgICAgICB9KVxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgcmV0dXJuIHN2Z1xyXG59XHJcbnZhciBjcmVhckJvdG9uQWNjaW9uID0gKGRlcG90Om15T3duLkRlcG90LCBhY3Rpb246RXN0YWRvQWNjaW9uKT0+e1xyXG4gICAgbGV0ICBhY2Npb25TaW5HdWlvbmVzID0gYWN0aW9uLmVhY2Npb24ucmVwbGFjZSgnXycsJyAnKTtcclxuICAgIHZhciBzdmcgPSBjcmVhclNWRyhhY3Rpb24ucGF0aF9pY29ub19zdmcse2NsYXNzOlwic3ZnLWFjY2lvbmVzXCJ9KVxyXG4gICAgaWYoYWN0aW9uLmRlc2FjdGl2YV9ib3Rvbil7XHJcbiAgICAgICAgcmV0dXJuIGh0bWwuc3Bhbih7Y2xhc3M6YHNpbi1ib3Rvbi1hY2Npb25gfSxbYWNjaW9uU2luR3Vpb25lcywgc3ZnIGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnRdKS5jcmVhdGUoKVxyXG4gICAgfVxyXG4gICAgbGV0IGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICBjbGFzczpgYm90b24tYWNjaW9uIGJvdG9uLWFjY2lvbi0ke2FjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbn1gXHJcbiAgICB9LFtcclxuICAgICAgICBgJHthY2Npb25TaW5HdWlvbmVzfWAsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIHN2ZyBlcyBodG1sZWxlbWVudFxyXG4gICAgICAgIGFjdGlvbi5wYXRoX2ljb25vX3N2Zz9zdmc6bnVsbCxcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgYnV0dG9uLm9uY2xpY2sgPSAoKT0+IHtcclxuICAgICAgICB2YXIgYWN0aW9uRnVuID0gYXN5bmMgKCk9PntcclxuICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4LmFjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWE6IGRlcG90LnJvdy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGljaW9uOiBhY3Rpb24uY29uZGljaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbjogYWN0aW9uXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdClcclxuICAgICAgICAgICAgICAgIGlmKGFjdGlvbi5ub21icmVfd3NjcmVlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9UT0RPIGFjb21vZGFyIGVzdG8gZW4gYWxndW4gbW9tZW50b1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBkZXBvdC5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYyA9IE51bWJlcihwYXJhbXMuZW5jKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbihsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWUrbXkubWVudVNlcGFyYXRvcitgdz0ke2FjdGlvbi5ub21icmVfd3NjcmVlbn0mdXA9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfSZhdXRvcHJvY2VkPXRydWVgLCBBQlJJUl9UQUIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICAgICAgLy9yZXRyYXNvIGxhIGhhYmlsaXRhY2nDs24gcG9ycXVlIGEgdmVjZXMgdGFyZGEgZW4gcmVkaWJ1amFyc2UgbGEgYm90b25lcmEgeSBwdWVkZSB0cmFlciBwcm9ibGVtYXMgc2kgZGFuIGRvYmxlIGNsaWNrIFxyXG4gICAgICAgICAgICAgICAgLy95YSBxdWUgZWplY3V0YSBudWV2YW1lbnRlIHVuYSBhY2Npw7NuIHF1ZSB5YSBzZSBlamVjdXTDsyAoeSB0ZXJtaW7DsykgYW50ZXNcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmJ1dHRvbi5kaXNhYmxlZD1mYWxzZSwzMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBjb25maXJtUHJvbWlzZU9wdHM6IERpYWxvZ09wdGlvbnMgPSB7fVxyXG4gICAgICAgIGlmKGFjdGlvbi5jb25maXJtYSl7XHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlT3B0cy5hc2tGb3JOb1JlcGVhdCA9ICdubyB2b2x2ZXIgYSBtb3N0cmFyJzsgLy9tdWVzdHJhIG1lbnNhamUgcG9yIGRlZmF1bHQgcGVybyBhbmRhIGlndWFsXHJcbiAgICAgICAgICAgIHZhciBidXR0b25zRGVmID0gW1xyXG4gICAgICAgICAgICAgICAge2xhYmVsOidzw60nLCB2YWx1ZTp0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonbm8nLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZShgY29uZmlybWEgYWNjacOzbiBcIiR7YWNjaW9uU2luR3Vpb25lc31cIj9gLCB7Li4uY29uZmlybVByb21pc2VPcHRzLCBidXR0b25zRGVmfSkudGhlbihhY3Rpb25GdW4pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBhY3Rpb25GdW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnV0dG9uXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNBY2Npb25lcyA9IGFzeW5jIChvcHRzOntkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgZGlyZWNjaW9uOiBEaXJlY2Npb25BY2Npb259KT0+e1xyXG4gICAgbGV0IHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9ufSA9IG9wdHM7XHJcbiAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgdGQuaW5uZXJIVE1MPScnO1xyXG4gICAgKGRlcG90LnJvd0NvbnRyb2xzLmFjY2lvbmVzLmdldFR5cGVkVmFsdWUoKXx8W10pXHJcbiAgICAgICAgLmZpbHRlcigoYWN0aW9uOkVzdGFkb0FjY2lvbik9PmFjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbj09ZGlyZWNjaW9uKVxyXG4gICAgICAgIC5mb3JFYWNoKChhY3Rpb246RXN0YWRvQWNjaW9uKT0+dGQuYXBwZW5kQ2hpbGQoY3JlYXJCb3RvbkFjY2lvbihkZXBvdCwgYWN0aW9uKSkpO1xyXG59XHJcblxyXG52YXIgY3JlYXJTd2l0Y2ggPSAob3B0czp7cm91bmQ/OmJvb2xlYW4sIGRpc2FibGVkPzpib29sZWFuLCBjaGVja2VkPzpib29sZWFuLCBvbkNsaWNrRnVuOkZ1bmN0aW9uLCBvbkVyckZ1bj86RnVuY3Rpb259KT0+e1xyXG4gICAgdmFyIGNoZWNrYm94ID0gaHRtbC5pbnB1dCh7dHlwZTonY2hlY2tib3gnLCBjaGVja2VkOm9wdHMuY2hlY2tlZH0pLmNyZWF0ZSgpO1xyXG4gICAgY2hlY2tib3gub25jbGljayA9IGFzeW5jKCk9PntcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgIGF3YWl0IG9wdHMub25DbGlja0Z1bigpXHJcbiAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgfWZpbmFsbHl7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBodG1sLmxhYmVsKHtjbGFzczonc3dpdGNoJ30sW1xyXG4gICAgICAgIGNoZWNrYm94LFxyXG4gICAgICAgIGh0bWwuc3Bhbih7Y2xhc3M6YHNsaWRlciAke29wdHMucm91bmQ/J3JvdW5kJzonJ31gfSksXHJcbiAgICBdKS5jcmVhdGUoKTtcclxufVxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuaGFiaWxpdGFyPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBjcmVhclN3aXRjaCh7XHJcbiAgICAgICAgICAgICAgICByb3VuZDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDpkZXBvdC5yb3cuaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGdW46IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5lbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KSwzMDApOy8vcGFyYSBxdWUgc2UgdmVhIGVsIGVmZWN0b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0F2YW5jZT17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidhdmFuY2UnfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc1JldHJvY2Vzbz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidyZXRyb2Nlc28nfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0JsYW5xdWVvPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J2JsYW5xdWVvJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gXHJcbmJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKG9wdHM6IHsgbm9tYnJlQm90b246IHN0cmluZywgbGxhbWFkYTogKGRlcG90OiBteU93bi5EZXBvdCkgPT4gUHJvbWlzZTxhbnk+IH0pIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICAgICAgdmFyIGJvdG9uID0gaHRtbC5idXR0b24ob3B0cy5ub21icmVCb3RvbikuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICAgICAgdmFyIHJlc3RhdXJhckJvdG9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYm90b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gb3B0cy5ub21icmVCb3RvbjtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBib3Rvbi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYm90b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAncHJvY2VzYW5kby4uLic7XHJcbiAgICAgICAgICAgICAgICBvcHRzLmxsYW1hZGEoZGVwb3QpLnRoZW4oYXN5bmMgZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgJ29rJyBpbiByZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQub2spe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBvdC5kZXRhaWxDb250cm9scy5pbmNvbnNpc3RlbmNpYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcG90LmRldGFpbENvbnRyb2xzLmluY29uc2lzdGVuY2lhcy5mb3JjZURpc3BsYXlEZXRhaWxHcmlkKHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAgcmVzdWx0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi50aXRsZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjOEY4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzdGF1cmFyQm90b24sIDI1MDApO1xyXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfTtcclxufVxyXG5cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmNvbnNpc3RpciA9IGJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKHtcclxuICAgIG5vbWJyZUJvdG9uOiAnY29uc2lzdGlyJyxcclxuICAgIGxsYW1hZGE6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QpIHtcclxuICAgICAgICB2YXIgbXlSZWFGaWVsZE5hbWUgPSBkZXBvdC5tYW5hZ2VyLmRlZi50YWJsZU5hbWU9PVwidGVtXCI/J3JlYSc6J3VsdF9yZWEnO1xyXG4gICAgICAgIHZhciBmaWx0cm9SZWE9Y29uc2lzdGlyX2ZpbHRybyhkZXBvdC5yb3cudGFyZWEsIGRlcG90LnJvd1tteVJlYUZpZWxkTmFtZV0sIGRlcG90LnJvdy5yZWEpXHJcbiAgICAgICAgcmV0dXJuIGZpbHRyb1JlYT8gbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGlkX2Nhc286IGRlcG90LnJvdy5lbmNcclxuICAgICAgICB9KTogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24ud1NjcmVlbnMuZGVtbz1hc3luYyBmdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICAvLyBAdHMtaWdub3JlIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgZ2xvYmFsXHJcbiAgICB3aW5kb3cuZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCh7bW9kb0RlbW86dHJ1ZX0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheUZsYXQ8VD4oYXJyYXlzOlRbXVtdKTpUW117XHJcbiAgICByZXR1cm4gKFtdIGFzIFRbXSkuY29uY2F0LmFwcGx5KFtdLCBhcnJheXMpO1xyXG59XHJcbiJdfQ==
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUk3RCxrQ0FBa0M7SUFDbEMscUVBQW9GO0lBQ3BGLG1FQUFrSjtJQUtsSixrQkFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFjLElBQUksQ0FBQztJQUV4QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVEsRUFBRTtRQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFHO1lBQ0MsaUJBQWlCLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUFBLE9BQU0sR0FBRyxFQUFDO1lBQ1AsaUJBQWlCLEdBQUMsSUFBSSxDQUFDO1NBQzFCO1FBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUM7WUFDMUIsVUFBVSxFQUFDO2dCQUNQLEVBQUMsSUFBSSxFQUFDLFdBQVcsRUFBRyxRQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsWUFBWSxFQUFDO2dCQUM3RixFQUFDLElBQUksRUFBQyxPQUFPLEVBQU8sUUFBUSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUM7Z0JBQ3RGLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBUyxRQUFRLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLEVBQUM7YUFDL0Q7WUFDRCxVQUFVLEVBQUMsSUFBSTtZQUNmLFVBQVUsRUFBQyxDQUFPLE1BQU0sRUFBQyxFQUFFOztnQkFDdkIs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QVMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDekYsT0FBTyxTQUFTLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQzVDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7Z0JBQzlCLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7YUFDekIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNuRixDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUMsVUFBZSxXQUFXOztZQUMxQyw4Q0FBOEM7WUFDOUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBLENBQUE7SUFFRCxTQUFTLFNBQVMsQ0FBSSxNQUFZO1FBQzlCLE9BQVEsRUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2h0bWx9IGZyb20gXCJqcy10by1odG1sXCI7XHJcbmltcG9ydCB7dHJhZXJFc3RydWN0dXJhfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyBDYXNvU3RhdGUsICBcclxuICAgIElkRm9ybXVsYXJpbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkRW5jLCBJZE9wZXJhdGl2bywgSWRUYXJlYSwgRXN0YWRvQWNjaW9uLCBEaXJlY2Npb25BY2Npb24sXHJcbn0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge2dldEVzdHJ1Y3R1cmEsIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge0JBQ0tVUFMsIGNhcmdhckVzdHJ1Y3R1cmEsIGNhcmdhckhvamFEZVJ1dGEsIEdMT1ZBUl9EQVRPU0JZUEFTUywgR0xPVkFSX0VTVFJVQ1RVUkEsIEdMT1ZBUl9NT0RPQllQQVNTfSBmcm9tIFwiLi4vdW5sb2dnZWQvYWJyaXItZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IE9wZXJhdGl2byB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQge3NsZWVwLCBjb2FsZXNjZX0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5cclxuXHJcbi8vVE9ETyBHRU5FUkFMSVpBUlxyXG5cclxuY29uc3QgQUJSSVJfVEFCID0gXCJfYWJyaXJcIjtcclxuY29uc3QgVEFSRUFfREVGQVVMVCA9ICdlbmN1JztcclxudmFyIE9QRVJBVElWT19ERUZBVUxUOnN0cmluZ3xudWxsPSBudWxsO1xyXG5cclxubXlPd24uYXV0b1NldHVwRnVuY3Rpb25zLnB1c2goYXN5bmMgKCk9PntcclxuICAgIHZhciBteSA9IG15T3duOyAgICBcclxuICAgIHRyeXtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2dldCh7fSk7XHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVD1udWxsO1xyXG4gICAgfVxyXG4gICAgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGE9e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAsIHR5cGVOYW1lOid0ZXh0JywgZGVmYXVsdFZhbHVlOk9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6VEFSRUFfREVGQVVMVCwgcmVmZXJlbmNlczogJ3RhcmVhcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOjEzMDAzMX1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICAgICAgdmFyIGNhcmdhID0gYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfY2FyZ2FyKHtvcGVyYXRpdm8sIHZpdmllbmRhOmVuYywgdGFyZWF9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgaWYoIWVzdHJ1Y3R1cmEgfHwgKGVzdHJ1Y3R1cmEudGltZXN0YW1wPz8wKSA8IGNhcmdhLnRpbWVzdGFtcEVzdHJ1Y3R1cmEhIHx8IGVzdHJ1Y3R1cmEub3BlcmF0aXZvICE9IG9wZXJhdGl2byB8fCBteS5jb25maWcuY29uZmlnLmRldmVsKXtcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICAgICAgICAgICAgICBjYXJnYXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB2YXIgc3RhdGU6Q2Fzb1N0YXRlID0ge31cclxuICAgICAgICAgICAgaW5pY2lhbGl6YXJTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbzpjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmMgYXMgSWRFbmNdLnRhcmVhLm1haW5fZm9ybSwgdml2aWVuZGE6ZW5jfTtcclxuICAgICAgICAgICAgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MoXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzc0VuQmFzZURlRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihwZXJzaXN0ZW50ZXMuc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFc3TDoSBpbnRlbnRhbmRvIG1vZGlmaWNhciB1bmEgZW5jdWVzdGEgYWJpZXJ0YSBjb21vIHNvbG8gbGVjdHVyYSwgbm8gc2UgZ3VhcmRhcm9uIGxvcyBjYW1iaW9zXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhcih7b3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXN9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBpZighY2FyZ2EucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzZSBlbmN1ZW50cmEgbGEgdml2aWVuZGEgJHtmb3JQa1JhaXoudml2aWVuZGEhfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhcmdhckhvamFEZVJ1dGEoey4uLmNhcmdhLCBtb2RvQWxtYWNlbmFtaWVudG86J3Nlc3Npb24nfSk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCh7b3BlcmF0aXZvLCBtb2RvRGVtbzpmYWxzZSwgZm9yUGtSYWl6fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLm9idGVuZXJfdGVsZWZvbm89e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKF9wYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIHRhcmVhfSA9IHtvcGVyYXRpdm86IE9QRVJBVElWT19ERUZBVUxULCB0YXJlYTogVEFSRUFfREVGQVVMVH07XHJcbiAgICAgICAgICAgIGxldCBlbmMgPSBwYXJzZUludChhd2FpdCBteS5hamF4LmdldF9yYW5kb21fZnJlZV9jYXNlKHtvcGVyYXRpdm99KSk7IFxyXG4gICAgICAgICAgICBhd2FpdCBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YS5tYWluQWN0aW9uKHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbXlPd24ud1NjcmVlbnMuY29uc2lzdGlyX2VuY3Vlc3RhPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKHBhcmFtcyk9PntcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYWluVG9wQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tdG9wLWJhcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1haW5Ub3BCYXIpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgbWFpblRvcEJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYSwgZW5jIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IGVuY1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgIHZhciBmaXhlZEZpZWxkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7ZmllbGROYW1lOiAnb3BlcmF0aXZvJywgdmFsdWU6IG9wZXJhdGl2b30pO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7ZmllbGROYW1lOiAndml2aWVuZGEnLCB2YWx1ZTogZW5jfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZHcmlsbGEgPSBodG1sLmRpdih7aWQ6J2luY29uc2lzdGVuY2lhcyd9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkdyaWxsYSwgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZCb3RvbmVzID0gaHRtbC5kaXYoe2lkOidib3RvbmVzLXBvc3QtY29uc2lzdGlyJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNlcnJhciBlbmN1ZXN0YWBcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdm9sdmVyIGEgZW5jdWVzdGEgJHtlbmN9YFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZCb3RvbmVzLCBtYWluTGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgbXkudGFibGVHcmlkKFwiaW5jb25zaXN0ZW5jaWFzXCIsIGRpdkdyaWxsYSx7dGFibGVEZWY6e30sZml4ZWRGaWVsZHM6IGZpeGVkRmllbGRzfSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy9xdWl0YSBib290c3RyYXAgZGVsIGhlYWQgcGFyYSBxdWUgbm8gcm9tcGEgbG9zIGVzdGlsb3MgZGUgQkVQbHVzIChzb2xvIHNlIHVzYSBib290c3RyYXAgZW4gZWwgZm9ybSlcclxudmFyIGxpbmtOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2hyZWY9XCJjc3MvYm9vdHN0cmFwLm1pbi5jc3NcIl0nKTtcclxubGlua05vZGVbMF0/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlWzBdKTtcclxuXHJcbmZ1bmN0aW9uIGNvbnNpc3Rpcl9maWx0cm8odGFyZWEsIHJlYV90ZW0sIHJlYSl7XHJcbiAgICByZXR1cm4gdGFyZWE/cmVhX3RlbTpyZWE7XHJcbn07XHJcblxyXG52YXIgdGFyZWFzOmFueSA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBodG1sTnVtZXJvKG51bTpudW1iZXIpe1xyXG4gICAgcmV0dXJuIGh0bWwuc3Bhbih7Y2xhc3M6J251bWVybyd9LCcnKyhudW0/PycnKSlcclxufVxyXG5cclxudmFyIHBlcnNpc3RpckVuTWVtb3JpYSA9IGFzeW5jIChwZXJzaXN0ZW50ZXM6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpID0+IHtcclxuICAgIHZhciB7bW9kb0FsbWFjZW5hbWllbnRvfSA9IHBlcnNpc3RlbnRlc1xyXG4gICAgICAgIGlmKG1vZG9BbG1hY2VuYW1pZW50bz09J2xvY2FsJyl7XHJcbiAgICAgICAgICAgIG15LnNldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgcGVyc2lzdGVudGVzKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBteS5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUywgcGVyc2lzdGVudGVzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBteS5zZXRTZXNzaW9uVmFyKEdMT1ZBUl9NT0RPQllQQVNTLCBtb2RvQWxtYWNlbmFtaWVudG8pXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzfG51bGwpe1xyXG4gICAgdmFyIGRhdG9zID0gYXdhaXQgbXkuYWpheC5kbV9zaW5jcm9uaXphcih7cGVyc2lzdGVudGVzfSk7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gZGF0b3Mub3BlcmF0aXZvO1xyXG4gICAgcGVyc2lzdGlyRW5NZW1vcmlhKHsuLi5kYXRvcywgbW9kb0FsbWFjZW5hbWllbnRvOidsb2NhbCd9KTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gYXdhaXQgdHJhZXJFc3RydWN0dXJhKHtvcGVyYXRpdm99KVxyXG4gICAgbXkuc2V0TG9jYWxWYXIoR0xPVkFSX0VTVFJVQ1RVUkEsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgbXkucmVtb3ZlTG9jYWxWYXIoQkFDS1VQUyk7XHJcbiAgICByZXR1cm4gZGF0b3M7XHJcbn1cclxuXHJcblxyXG5cclxudmFyIG1vc3RyYXJJbmZvTG9jYWwgPSAoZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQsIHRpdHVsbzpzdHJpbmcsIG5yb1NpbmNybzpudW1iZXJ8bnVsbCwgbW9zdHJhckxpbmtIZHI6IGJvb2xlYW4pPT57XHJcbiAgICBsZXQgZGF0b3NCeVBhc3MgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgaWYoZGF0b3NCeVBhc3Mpe1xyXG4gICAgICAgIGRpdkF2aXNvU2luY3JvLmFwcGVuZChodG1sLmRpdih7aWQ6J2F2aXNvLXNpbmNybyd9LCBbXHJcbiAgICAgICAgICAgIG5yb1NpbmNybz9odG1sLnAoW1wiTsO6bWVybyBkZSBzaW5jcm9uaXphY2nDs246IFwiLCBodG1sLmIoXCJcIitucm9TaW5jcm8udG9TdHJpbmcoKSldKTpudWxsLFxyXG4gICAgICAgICAgICBodG1sLmg0KHRpdHVsbyksXHJcbiAgICAgICAgICAgIGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5hcnJheSgpLmxlbmd0aCksJyBhcmVhczogJyxsaWtlQXIoZGF0b3NCeVBhc3MuY2FyZ2FzKS5rZXlzKCkuam9pbignLCAnKV0pLFxyXG4gICAgICAgICAgICBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMudml2aWVuZGFzKS5hcnJheSgpLmxlbmd0aCksJyB2aXZpZW5kYXMnXSksXHJcbiAgICAgICAgICAgIG1vc3RyYXJMaW5rSGRyP2h0bWwuYSh7aHJlZjonLi9jYW1wbyd9LFtodG1sLmIoJ0lSIEEgTEEgSE9KQSBERSBSVVRBJyldKTpudWxsXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoe2NsYXNzOidhdmlzbyd9LFtcclxuICAgICAgICAgICAgaHRtbC5oNCgnU2lzdGVtYSB2YWPDrW8nKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSB2aXZpZW5kYXMnKVxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG52YXIgcHJvY2VkZXJTaW5jcm9GdW4gPSBhc3luYyAoYnV0dG9uOkhUTUxCdXR0b25FbGVtZW50LCBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudCk9PntcclxuICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uJztcclxuICAgIGRpdkF2aXNvU2luY3JvLmlubmVySFRNTD0nJztcclxuICAgIHRyeXtcclxuICAgICAgICB2YXIgZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgICAgIHZhciBkYXRvcyA9IGF3YWl0IHNpbmNyb25pemFyRGF0b3MoZGF0b3NCeVBhc3MpO1xyXG4gICAgICAgIG1vc3RyYXJJbmZvTG9jYWwoZGl2QXZpc29TaW5jcm8sICdkYXRvcyByZWNpYmlkb3MnLCBkYXRvcy5udW1fc2luY3JvLCB0cnVlKVxyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgIHRocm93IGVyclxyXG4gICAgfWZpbmFsbHl7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgIGJ1dHRvbi5jbGFzc05hbWU9J2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JztcclxuICAgIH1cclxufVxyXG5teU93bi53U2NyZWVucy5zaW5jcm9uaXphcl9kbT1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7Y2xhc3M6J2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250J30sJ3Byb2NlZGVyIOKHkicpLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50PWh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBtb3N0cmFySW5mb0xvY2FsKG1haW5MYXlvdXQgYXMgSFRNTERpdkVsZW1lbnQsICdpbmZvcm1hY2nDs24gYSB0cmFuc21pdGlyJywgbnVsbCwgZmFsc2UpXHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKHByb2NlZGVyQnV0dG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoZGl2QXZpc29TaW5jcm8pO1xyXG4gICAgcHJvY2VkZXJCdXR0b24ub25jbGljayA9ICgpPT5wcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8pXHJcbn07XHJcblxyXG5mdW5jdGlvbiBpbmljaWFsaXphclN0YXRlKHN0YXRlOiBDYXNvU3RhdGUpIHtcclxuICAgIHN0YXRlLm1vZG8gPSB7XHJcbiAgICAgICAgZGVtbzogZmFsc2VcclxuICAgIH07XHJcbiAgICAvLyBPSk8gc3RhdGUub3BjaW9uZXMgc2UgbW9kaWZpY2EgYWPDoSB5IGVuIG90cm8gbGFkbyBjb24gZXN0ZSBtaXNtbyBjYXJ0ZWxcclxuICAgIHN0YXRlLm9wY2lvbmVzID0ge1xyXG4gICAgICAgIGJpZW52ZW5pZG86IHRydWUsXHJcbiAgICAgICAgZm9yUGs6IG51bGwsXHJcbiAgICAgICAgcGlsYUZvclBrOiBbXSxcclxuICAgICAgICBtb2RvRGVzcGxpZWd1ZTogXCJyZWxldmFtaWVudG9cIixcclxuICAgICAgICBtb2RvRGlyZWN0bzogZmFsc2UsXHJcbiAgICAgICAgbW9kb0JvcnJhclJlc3B1ZXN0YTogbnVsbCxcclxuICAgICAgICBjb25DYW1wb09wY2lvbmVzOiBmYWxzZSxcclxuICAgICAgICBzYWx0b0F1dG9tYXRpY286IHRydWUsXHJcbiAgICB9O1xyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICBzdGF0ZS5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHt9O1xyXG59XHJcbi8qXHJcbmZ1bmN0aW9uIG1vc3RyYXJEYXRvc1BlcnNvbmEoaGF5RGF0b3M6Ym9vbGVhbiwgZGF0b3M6YW55LCBkaXZSZXN1bHQ6SFRNTERpdkVsZW1lbnQpe1xyXG4gICAgLy9UT0RPOiBFVkFMVUFSIFNJIENPTlZJRU5FIFRSQUVSTE8gREUgTEEgQkFTRVxyXG4gICAgdmFyIHRpcG9zRG9jdW1lbnRvID0gWydETkkgYXJnZW50aW5vJywgJ0RvY3VtZW50byBleHRyYW5qZXJvJywgJ05vIHRpZW5lIGRvY3VtZW50bycsICdPdHJvJ107XHJcbiAgICB2YXIgcGFpc0RvY3VtZW50byA9IFsnVXJ1Z3VheScsICdQYXJhZ3VheScsICdCcmFzaWwnLCAnQm9saXZpYScsICdDaGlsZScsICdQZXLDuicsICdWZW5lenVlbGEnLCAnT3RybyddO1xyXG4gICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGhheURhdG9zP1xyXG4gICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2RhdG9zLXBlcnNvbmEtY2FyZ2FkYSd9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwuaDIoXCJEYXRvcyBwZXJzb25hXCIpLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidmaWNoYS1wZXJzb25hJ30sW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtodG1sLmxhYmVsKCdBcGVsbGlkbzogJyksIGRhdG9zLmFwZWxsaWRvXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ05vbWJyZXM6ICcpLCBkYXRvcy5ub21icmVzXSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnVGlwbyBkb2N1bWVudG86ICcpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpcG9zRG9jdW1lbnRvW2RhdG9zLnRpcG9Eb2N1bWVudG8tMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvPT00ICYmIGRhdG9zLnRpcG9Eb2N1bWVudG9Fc3BlY2lmaWNhZG8/JyAoJysgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvPT0yICYmIGRhdG9zLnBhaXNEb2N1bWVudG8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwubGFiZWwoJ1BhaXM6ICcpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXNEb2N1bWVudG9bZGF0b3MucGFpc0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnBhaXNEb2N1bWVudG89PTggJiYgZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnK2RhdG9zLnBhaXNEb2N1bWVudG9Fc3BlY2lmaWNhZG8rJyknOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50byE9MyAmJiBkYXRvcy50aXBvRG9jdW1lbnRvP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdOwrogRG9jdW1lbnRvOiAnKSwgZGF0b3MuZG9jdW1lbnRvXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MuY2VsdWxhcj9odG1sLmRpdihbaHRtbC5sYWJlbCgnQ2VsLjogJyksIGRhdG9zLmNlbHVsYXJdKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5lbWFpbD9odG1sLmRpdihbaHRtbC5sYWJlbCgnRW1haWw6ICcpLCBkYXRvcy5lbWFpbF0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ1RlbC4gYWx0ZXJuYXRpdm86ICcpLCBkYXRvcy50ZWxlZm9ub0FsdGVybmF0aXZvXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3Mub2JzZXJ2YWNpb25lcz9odG1sLmRpdihbaHRtbC5sYWJlbCgnT2JzZXJ2YWNpb25lczogJyksIGRhdG9zLm9ic2VydmFjaW9uZXNdKTonJyxcclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgOlxyXG4gICAgICAgICAgICBodG1sLnAoXCJObyBzZSBlbmNvbnRyw7MgdW5hIGVuY3Vlc3RhIHBhcmEgbGEgZXRpcXVldGEgY2FyZ2FkYVwiKS5jcmVhdGUoKVxyXG4gICAgKVxyXG59XHJcbiovXHJcbi8qbXlPd24uY2xpZW50U2lkZXMudGFyZWFzVGVtUm93PXtcclxuICAgIHVwZGF0ZTooZGVwb3QpPT57XHJcbiAgICAgICAgdmFyIHRhcmVhOiduYWRhJ3wncHJlYXNpZ25hcid8J2Nhcmdhcid8J3JlYWxpemFyJ3wndmVyaWZpY2FyJz0nbmFkYSc7XHJcbiAgICAgICAgdmFyIHJvdz1kZXBvdC5yb3c7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHZhciBpZHBlcj1teS5jb25maWcuaWRwZXI7XHJcbiAgICAgICAgdmFyIGVzcGVyYXI6Ym9vbGVhbj1mYWxzZTtcclxuICAgICAgICBpZihyb3cuaGFiaWxpdGFkYSl7XHJcbiAgICAgICAgICAgIGlmKCFyb3cucmVjZXBjaW9uaXN0YSAmJiAhcm93LmFzaWduYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSdwcmVhc2lnbmFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9dHJ1ZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5hc2lnbmFkbyB8fCAhcm93LmZlY2hhX2FzaWduYWNpb24gfHwgIXJvdy5vcGVyYWNpb24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J2Nhcmdhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5yZWNlcGNpb25pc3RhIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5yZWEpe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3JlYWxpemFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LmFzaWduYWRvIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy52ZXJpZmljYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSd2ZXJpZmljYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cucmVjZXBjaW9uaXN0YSE9aWRwZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvbmVyPXtcclxuICAgICAgICAgICAgcmVjZXBjaW9uaXN0YSAgICAgICAgICA6dGFyZWE9PSdwcmVhc2lnbmFyJyAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBhc2lnbmFkbyAgICAgICAgICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgZmVjaGFfYXNpZ25hY2lvbiAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIG9wZXJhY2lvbiAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBjYXJnYV9vYnNlcnZhY2lvbmVzOih0YXJlYT09J2NhcmdhcicgICAgIHx8IHRhcmVhPT0ncmVhbGl6YXInICYmICFyb3cuY2FyZ2FkbyAmJiAhcm93LnJlYSApICYmIHJvdy5yZWNlcGNpb25pc3RhPT1pZHBlciAmJiAnb3B0YXRpdm8nLFxyXG4gICAgICAgICAgICB2ZXJpZmljYWRvICAgICAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb2JzX3ZlcmlmaWNhZG8gICAgIDp0YXJlYT09J3ZlcmlmaWNhcicgICYmIChlc3BlcmFyPydlc3BlcmFyJzonb3B0YXRpdm8nKSxcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHBvbmVyKS5mb3JFYWNoKCh2YWxvciwgY2FtcG8pPT57XHJcbiAgICAgICAgICAgIGlmKCF2YWxvcil7XHJcbiAgICAgICAgICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tjYW1wb10ucmVtb3ZlQXR0cmlidXRlKCdteS1tYW5kYXRvcnknKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5zZXRBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScsdmFsb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiBmdW5jdGlvbigpe31cclxufVxyXG4qL1xyXG5cclxudmFyIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YSA9IChsYWJlbDpzdHJpbmcpPT57XHJcbiAgICBsZXQgcGF0aCA9IFwiTTMgM3YxOGgxOFYzSDN6bTE0IDEyLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIjtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7Y2xhc3M6XCJzdmctY2VycmFyLWVuY3Vlc3RhXCJ9LFtcclxuICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICBkOnBhdGhcclxuICAgICAgICB9KVxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDI2IDI2XCIpO1xyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHtpZDonYm90b24tY2VycmFyLWVuY3Vlc3RhJ30sW3N2ZywgbGFiZWxdKS5jcmVhdGUoKTtcclxuICAgIHZlci5vbmNsaWNrID0gKCk9PiBjbG9zZSgpO1xyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsZW5jdWVzdGE6bnVtYmVyLCBsYWJlbDpzdHJpbmcpPT57XHJcbiAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTp0YXJlYSxcclxuICAgICAgICBlbmM6ZW5jdWVzdGFcclxuICAgIH1cclxuICAgIGxldCB2ZXIgPSBodG1sLmJ1dHRvbih7aWQ6J2JvdG9uLXZvbHZlci1hLWVuY3Vlc3RhJ30sbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IHdpbmRvdy5vcGVuKGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yK2B3PWFicmlyX2VuY3Vlc3RhJnVwPSR7SlNPTi5zdHJpbmdpZnkodXApfSZhdXRvcHJvY2VkPXRydWVgLCBBQlJJUl9UQUIpXHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyA9IGFzeW5jIChkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgbGFiZWw6J2FicmlyJ3wndmVyJyk9PntcclxuICAgIHRhcmVhcyA9IHRhcmVhcz90YXJlYXM6KGF3YWl0IG15T3duLmFqYXgudGFibGVfZGF0YSh7dGFibGU6IGB0YXJlYXNgLCBmaXhlZEZpZWxkczpbXX0pKTtcclxuICAgIHZhciBtaXNUYXJlYXMgPSB0YXJlYXMuZmlsdGVyKCh0YXJlYSk9PlxyXG4gICAgICAgICEhdGFyZWEubWFpbl9mb3JtICYmIHRhcmVhLm9wZXJhdGl2bz09ZGVwb3Qucm93Lm9wZXJhdGl2byAmJiAoZGVwb3QubWFuYWdlci5kZWYubXVlc3RyYUFicmlyRW5Ub2Rhc0xhc1RhcmVhcz90cnVlOmRlcG90LnJvdy50YXJlYSA9PSB0YXJlYS50YXJlYSlcclxuICAgICk7XHJcbiAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmlubmVySFRNTD0nJztcclxuICAgIG1pc1RhcmVhcy5mb3JFYWNoKCh0YXJlYTp7dGFyZWE6c3RyaW5nLCBub21icmU6c3RyaW5nLCBtYWluX2Zvcm06SWRGb3JtdWxhcmlvfSk9PntcclxuICAgICAgICBsZXQgYnV0dG9uTGFiZWwgPSBgJHtsYWJlbH0gJHt0YXJlYS50YXJlYX1gO1xyXG4gICAgICAgIGxldCB2ZXIgPSBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgZGVwb3Qucm93Lm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgdGFyZWEudGFyZWEgYXMgSWRUYXJlYSwgXHJcbiAgICAgICAgICAgIE51bWJlcihkZXBvdC5yb3cuZW5jKSxcclxuICAgICAgICAgICAgYnV0dG9uTGFiZWxcclxuICAgICAgICApO1xyXG4gICAgICAgIHZlci5zdHlsZT0nbWFyZ2luOjBweCAycHg7JztcclxuICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmFwcGVuZENoaWxkKHZlcik7XHJcbiAgICB9KVxyXG59XHJcblxyXG52YXIgZ2V0QWJyaXJPdmVyID0gKGRlcG90Om15T3duLkRlcG90LF9maWVsZE5hbWU6c3RyaW5nKT0+XHJcbiAgICAoZGVwb3Qucm93LmNhcmdhZG9fZG0gfHwgIWRlcG90LnJvd1snZXN0YWRvc19fcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEnXSAmJiBkZXBvdC5yb3cuYXNpZ25hZG8gIT0gbXkuY29uZmlnLmlkcGVyKT9cclxuICAgICAgICAndmVyJzonYWJyaXInXHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXI9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXJSZWNlcGNpb249e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMudmVySWNvbm9Tdmc9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBpZihkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpe1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6XCJzdmctYWNjaW9uZXNcIlxyXG4gICAgICAgICAgICB9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDpkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChzdmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbnZhciBjcmVhclNWRyA9IChwYXRoOnN0cmluZyxwcm9wczphbnkpID0+IHtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyhwcm9wcyB8fCB7fSxbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDpwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixcIjAgMCA1MCA1MFwiKTtcclxuICAgIHJldHVybiBzdmdcclxufVxyXG52YXIgY3JlYXJCb3RvbkFjY2lvbiA9IChkZXBvdDpteU93bi5EZXBvdCwgYWN0aW9uOkVzdGFkb0FjY2lvbik9PntcclxuICAgIGxldCAgYWNjaW9uU2luR3Vpb25lcyA9IGFjdGlvbi5lYWNjaW9uLnJlcGxhY2UoJ18nLCcgJyk7XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLHtjbGFzczpcInN2Zy1hY2Npb25lc1wifSlcclxuICAgIGlmKGFjdGlvbi5kZXNhY3RpdmFfYm90b24pe1xyXG4gICAgICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOmBzaW4tYm90b24tYWNjaW9uYH0sW2FjY2lvblNpbkd1aW9uZXMsIHN2ZyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50XSkuY3JlYXRlKClcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6YGJvdG9uLWFjY2lvbiBib3Rvbi1hY2Npb24tJHthY3Rpb24uZWFjY2lvbl9kaXJlY2Npb259YFxyXG4gICAgfSxbXHJcbiAgICAgICAgYCR7YWNjaW9uU2luR3Vpb25lc31gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmc/c3ZnOm51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCk9PiB7XHJcbiAgICAgICAgdmFyIGFjdGlvbkZ1biA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgbXkuYWpheC5hY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhOiBkZXBvdC5yb3cudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpY2lvbjogYWN0aW9uLmNvbmRpY2lvbixcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb246IGFjdGlvblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpXHJcbiAgICAgICAgICAgICAgICBpZihhY3Rpb24ubm9tYnJlX3dzY3JlZW4pe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBhY29tb2RhciBlc3RvIGVuIGFsZ3VuIG1vbWVudG9cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gZGVwb3Qucm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMgPSBOdW1iZXIocGFyYW1zLmVuYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4obG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lK215Lm1lbnVTZXBhcmF0b3IrYHc9JHthY3Rpb24ubm9tYnJlX3dzY3JlZW59JnVwPSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX0mYXV0b3Byb2NlZD10cnVlYCwgQUJSSVJfVEFCKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgIC8vcmV0cmFzbyBsYSBoYWJpbGl0YWNpw7NuIHBvcnF1ZSBhIHZlY2VzIHRhcmRhIGVuIHJlZGlidWphcnNlIGxhIGJvdG9uZXJhIHkgcHVlZGUgdHJhZXIgcHJvYmxlbWFzIHNpIGRhbiBkb2JsZSBjbGljayBcclxuICAgICAgICAgICAgICAgIC8veWEgcXVlIGVqZWN1dGEgbnVldmFtZW50ZSB1bmEgYWNjacOzbiBxdWUgeWEgc2UgZWplY3V0w7MgKHkgdGVybWluw7MpIGFudGVzXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT5idXR0b24uZGlzYWJsZWQ9ZmFsc2UsMzAwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB2YXIgY29uZmlybVByb21pc2VPcHRzOiBEaWFsb2dPcHRpb25zID0ge31cclxuICAgICAgICBpZihhY3Rpb24uY29uZmlybWEpe1xyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZU9wdHMuYXNrRm9yTm9SZXBlYXQgPSAnbm8gdm9sdmVyIGEgbW9zdHJhcic7IC8vbXVlc3RyYSBtZW5zYWplIHBvciBkZWZhdWx0IHBlcm8gYW5kYSBpZ3VhbFxyXG4gICAgICAgICAgICB2YXIgYnV0dG9uc0RlZiA9IFtcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonc8OtJywgdmFsdWU6dHJ1ZX0sXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6J25vJywgdmFsdWU6ZmFsc2V9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgY29uZmlybVByb21pc2UoYGNvbmZpcm1hIGFjY2nDs24gXCIke2FjY2lvblNpbkd1aW9uZXN9XCI/YCwgey4uLmNvbmZpcm1Qcm9taXNlT3B0cywgYnV0dG9uc0RlZn0pLnRoZW4oYWN0aW9uRnVuKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgYWN0aW9uRnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1dHRvblxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzQWNjaW9uZXMgPSBhc3luYyAob3B0czp7ZGVwb3Q6bXlPd24uRGVwb3QsIGZpZWxkTmFtZTpzdHJpbmcsIGRpcmVjY2lvbjogRGlyZWNjaW9uQWNjaW9ufSk9PntcclxuICAgIGxldCB7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbn0gPSBvcHRzO1xyXG4gICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgIChkZXBvdC5yb3dDb250cm9scy5hY2Npb25lcy5nZXRUeXBlZFZhbHVlKCl8fFtdKVxyXG4gICAgICAgIC5maWx0ZXIoKGFjdGlvbjpFc3RhZG9BY2Npb24pPT5hY3Rpb24uZWFjY2lvbl9kaXJlY2Npb249PWRpcmVjY2lvbilcclxuICAgICAgICAuZm9yRWFjaCgoYWN0aW9uOkVzdGFkb0FjY2lvbik9PnRkLmFwcGVuZENoaWxkKGNyZWFyQm90b25BY2Npb24oZGVwb3QsIGFjdGlvbikpKTtcclxufVxyXG5cclxudmFyIGNyZWFyU3dpdGNoID0gKG9wdHM6e3JvdW5kPzpib29sZWFuLCBkaXNhYmxlZD86Ym9vbGVhbiwgY2hlY2tlZD86Ym9vbGVhbiwgb25DbGlja0Z1bjpGdW5jdGlvbiwgb25FcnJGdW4/OkZ1bmN0aW9ufSk9PntcclxuICAgIHZhciBjaGVja2JveCA9IGh0bWwuaW5wdXQoe3R5cGU6J2NoZWNrYm94JywgY2hlY2tlZDpvcHRzLmNoZWNrZWR9KS5jcmVhdGUoKTtcclxuICAgIGNoZWNrYm94Lm9uY2xpY2sgPSBhc3luYygpPT57XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uQ2xpY2tGdW4oKVxyXG4gICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaHRtbC5sYWJlbCh7Y2xhc3M6J3N3aXRjaCd9LFtcclxuICAgICAgICBjaGVja2JveCxcclxuICAgICAgICBodG1sLnNwYW4oe2NsYXNzOmBzbGlkZXIgJHtvcHRzLnJvdW5kPydyb3VuZCc6Jyd9YH0pLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbn1cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmhhYmlsaXRhcj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgY3JlYXJTd2l0Y2goe1xyXG4gICAgICAgICAgICAgICAgcm91bmQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6ZGVwb3Qucm93LmhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRnVuOiBhc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT5ncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCksMzAwKTsvL3BhcmEgcXVlIHNlIHZlYSBlbCBlZmVjdG9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNBdmFuY2U9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjonYXZhbmNlJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNSZXRyb2Nlc289e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjoncmV0cm9jZXNvJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNCbGFucXVlbz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidibGFucXVlbyd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIFxyXG5ib3RvbkNsaWVudFNpZGVFbkdyaWxsYShvcHRzOiB7IG5vbWJyZUJvdG9uOiBzdHJpbmcsIGxsYW1hZGE6IChkZXBvdDogbXlPd24uRGVwb3QpID0+IFByb21pc2U8YW55PiB9KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QsIGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKG9wdHMubm9tYnJlQm90b24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIHZhciByZXN0YXVyYXJCb3RvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGJvdG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9IG9wdHMubm9tYnJlQm90b247XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYm90b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGJvdG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ3Byb2Nlc2FuZG8uLi4nO1xyXG4gICAgICAgICAgICAgICAgb3B0cy5sbGFtYWRhKGRlcG90KS50aGVuKGFzeW5jIGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICdvaycgaW4gcmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBvdC5kZXRhaWxDb250cm9scy5pbmNvbnNpc3RlbmNpYXMuZm9yY2VEaXNwbGF5RGV0YWlsR3JpZCh7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gIHJlc3VsdC5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGl0bGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzhGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGRjgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYgKChkZXBvdC5yb3cuY29uc2lzdGlkbz09bnVsbCAgJiYgZGVwb3Qucm93LnJlYSE9bnVsbCkgfHwgZGVwb3Qucm93Lm1vZGlmaWNhZG8hPW51bGwgJiYgZGVwb3Qucm93LmNvbnNpc3RpZG8hPW51bGwgJiYgZGVwb3Qucm93Lm1vZGlmaWNhZG8gPmRlcG90LnJvdy5jb25zaXN0aWRvKXtcclxuICAgICAgICAgICAgLy8gICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yPScjOENGJ1xyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIG15UmVhRmllbGROYW1lID0gZGVwb3QubWFuYWdlci5kZWYudGFibGVOYW1lPT1cInRlbVwiPydyZWEnOid1bHRfcmVhJztcclxuICAgICAgICB2YXIgZmlsdHJvUmVhPWNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbbXlSZWFGaWVsZE5hbWVdLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWE/IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBpZF9jYXNvOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgfSk6IGFsZXJ0UHJvbWlzZSgnTGEgZW5jdWVzdGEgZGViZSB0ZW5lciBkYXRvIGVuIHJlYSBwYXJhIHBvZGVyIGNvbnNpc3RpcmxhLicpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbm15T3duLndTY3JlZW5zLmRlbW89YXN5bmMgZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsIGdsb2JhbFxyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe21vZG9EZW1vOnRydWV9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0PFQ+KGFycmF5czpUW11bXSk6VFtde1xyXG4gICAgcmV0dXJuIChbXSBhcyBUW10pLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcclxufVxyXG4iXX0=