dmencu 3.6.1 → 3.6.3

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.
@@ -430,12 +430,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
430
430
  }
431
431
  setTimeout(restaurarBoton, 2500);
432
432
  });
433
- }, function (err) {
433
+ }).catch(function (err) {
434
434
  var error = (0, cast_error_1.expected)(err);
435
435
  boton.textContent = 'error';
436
436
  boton.style.backgroundColor = '#FF8';
437
437
  console.error('Error en acción de grilla:', error);
438
438
  alertPromise(error.message);
439
+ setTimeout(restaurarBoton, 2500);
439
440
  });
440
441
  };
441
442
  //if ((depot.row.consistido==null && depot.row.rea!=null) || depot.row.modificado!=null && depot.row.consistido!=null && depot.row.modificado >depot.row.consistido){
@@ -454,6 +455,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
454
455
  }) : alertPromise('La encuesta debe tener dato en rea para poder consistirla.');
455
456
  }
456
457
  });
458
+ myOwn.clientSides.paseTablaReintentar = {
459
+ prepare: function (depot, fieldName) {
460
+ var td = depot.rowControls[fieldName];
461
+ td.innerHTML = "";
462
+ if (!/dm_forpkraiz_descargar\.|pase_tabla_reintentar\./.test(depot.row.pase_tabla || ''))
463
+ return;
464
+ botonClientSideEnGrilla({
465
+ nombreBoton: 'pasar a tablas',
466
+ llamada: (depot) => myOwn.ajax.pase_tabla_reintentar({
467
+ operativo: depot.row.operativo,
468
+ enc: depot.row.enc
469
+ })
470
+ }).prepare(depot, fieldName);
471
+ },
472
+ update: (_depot, _fieldName) => { }
473
+ };
457
474
  myOwn.wScreens.proc.result.mostrar_encuestas_a_blanquear = function (result, divResult) {
458
475
  if (result.rows.length) {
459
476
  var currentToken = null;
@@ -843,4 +860,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
843
860
  });
844
861
  };
845
862
  });
846
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLDJDQUFrQztJQUNsQywyQ0FBa0Q7SUFDbEQsbUVBQWlGO0lBU2pGLGtDQUFtQztJQUNuQyxtRUFBd0U7SUFDeEUseURBQXlFO0lBQ3pFLDZEQUE0RDtJQUM1RCxxRUFBMEU7SUFHMUUsa0JBQWtCO0lBRWxCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFrQixJQUFJLENBQUM7SUFFckMsTUFBTSxlQUFlLEdBQUcsQ0FBTyxNQUFnQyxFQUF1QixFQUFFLGtEQUMzRixPQUFBLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQSxHQUFBLENBQUM7SUFEdkUsUUFBQSxlQUFlLG1CQUN3RDtJQUdwRixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVMsRUFBRTtRQUNyQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUM7WUFDRCxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFBLDRDQUE4QixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHO1lBQzVCLFVBQVUsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUs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LEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQztLQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBodG1sIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHsgZXhwZWN0ZWQsIHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5pbXBvcnQgeyBkaXNwYXRjaGVycywgY3JlYXJTdG9yZUZvcm11bGFyaW8gfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2Fzb1N0YXRlLFxyXG4gICAgSWRGb3JtdWxhcmlvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRFbmMsIElkT3BlcmF0aXZvLCBJZFRhcmVhLCBFc3RhZG9BY2Npb24sIERpcmVjY2lvbkFjY2lvbixcclxuICAgIENhbXBvUGtSYWl6LCBNb2RvRE0sXHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGtSYWl6LFxyXG4gICAgQXl1ZGFPcGNpb25NZW51LCBBeXVkYVBhcmFVc3VhcmlvXHJcbn0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCBsaWtlQXIgPSByZXF1aXJlKFwibGlrZS1hclwiKTtcclxuaW1wb3J0IHsgQkFDS1VQUywgY2FyZ2FyRXN0cnVjdHVyYSB9IGZyb20gXCIuLi91bmxvZ2dlZC9hYnJpci1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgY3JlYXRlTG9jYWxTdG9yYWdlRm9ybVJlbmRlcmVyIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3JlbmRlci1pbml0XCI7XHJcbmltcG9ydCB7IGdldEZvcm1SZW5kZXJlciB9IGZyb20gXCIuLi91bmxvZ2dlZC9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgfSBmcm9tICcuLi91bmxvZ2dlZC9yZW5kZXItZm9ybXVsYXJpbyc7XHJcbmltcG9ydCB7IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MgfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIjtcclxuXHJcbi8vVE9ETyBHRU5FUkFMSVpBUlxyXG5cclxuY29uc3QgVEFSRUFfREVGQVVMVCA9ICdlbmN1JztcclxudmFyIE9QRVJBVElWT19ERUZBVUxUOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbmV4cG9ydCBjb25zdCB0cmFlckVzdHJ1Y3R1cmEgPSBhc3luYyAocGFyYW1zOiB7b3BlcmF0aXZvOklkT3BlcmF0aXZvIH0pOiBQcm9taXNlPEVzdHJ1Y3R1cmE+ID0+XHJcbiAgICBhd2FpdCBteU93bi5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH0pO1xyXG5cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGFzeW5jICgpID0+IHtcclxuICAgIHZhciBteSA9IG15T3duO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2dldCh7fSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtUmVuZGVyZXIgPSBjcmVhdGVMb2NhbFN0b3JhZ2VGb3JtUmVuZGVyZXIoe30pO1xyXG4gICAgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGEgPSB7XHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IE9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IFRBUkVBX0RFRkFVTFQsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMTMwMDMxIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6IHRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjogYXN5bmMgKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBmb3JtUmVuZGVyZXIudXBkYXRlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIGxlZXJEYXRvczogYXN5bmMgZnVuY3Rpb24gbGVlckRhdG9zRW5CYXNlRGVEYXRvcygpOiBQcm9taXNlPERhdG9zQnlQYXNzUGVyc2lzdGlibGVzPiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Nhcmdhcih7IG9wZXJhdGl2bywgcGtfcmFpel92YWx1ZTogZW5jLCB0YXJlYSB9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvczogYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVzdMOhIGludGVudGFuZG8gbW9kaWZpY2FyIHVuYSBlbmN1ZXN0YSBhYmllcnRhIGNvbW8gc29sbyBsZWN0dXJhLCBubyBzZSBndWFyZGFyb24gbG9zIGNhbWJpb3NcIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyKHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgICAgICAgICB2YXIgY2FyZ2EgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICAgICAgICAgIGlmICghZXN0cnVjdHVyYSB8fCAhZXN0cnVjdHVyYS5zZW1hbmFzIHx8IChlc3RydWN0dXJhLnRpbWVzdGFtcCA/PyAwKSA8IGNhcmdhPy50aW1lc3RhbXBFc3RydWN0dXJhISB8fCBlc3RydWN0dXJhLm9wZXJhdGl2byAhPSBvcGVyYXRpdm8gfHwgbXkuY29uZmlnLmNvbmZpZy5kZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7IG9wZXJhdGl2byB9KVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLnBlcnNpc3RpckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIC8vdmFyIHN0YXRlOiBDYXNvU3RhdGUgPSB7fVxyXG4gICAgICAgICAgICAvL2luaWNpYWxpemFyU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0geyBmb3JtdWxhcmlvOiBjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmMgYXMgSWRFbmNdLnRhcmVhLm1haW5fZm9ybSwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGVuYyB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjYXJnYT8ucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbCBhcyBDYW1wb1BrUmFpel1dKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlIGVuY3VlbnRyYSBlbC9sYSAke2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbH0gJHtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKGZvcm1SZW5kZXJlciwgeyBmb3JQa1JhaXo6Zm9yUGtSYWl6IGFzIEZvclBrUmFpeiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbXlPd24ud1NjcmVlbnMuY29uc2lzdGlyX2VuY3Vlc3RhID0ge1xyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgZGVmYXVsdFZhbHVlOiBPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6IHRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjogYXN5bmMgKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAod2luZG93Lm9wZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5Ub3BCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10b3AtYmFyJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFpblRvcEJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Ub3BCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIHRhcmVhLCBlbmMgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogZW5jXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goeyBmaWVsZE5hbWU6ICdvcGVyYXRpdm8nLCB2YWx1ZTogb3BlcmF0aXZvIH0pO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7IGZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuYyB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdkdyaWxsYSA9IGh0bWwuZGl2KHsgaWQ6ICdpbmNvbnNpc3RlbmNpYXMnIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2R3JpbGxhLCBtYWluTGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdkJvdG9uZXMgPSBodG1sLmRpdih7IGlkOiAnYm90b25lcy1wb3N0LWNvbnNpc3RpcicgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNlcnJhciBlbmN1ZXN0YWBcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB2b2x2ZXIgYSBlbmN1ZXN0YSAke2VuY31gXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkJvdG9uZXMsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBteS50YWJsZUdyaWQoXCJpbmNvbnNpc3RlbmNpYXNfY3VtcGxlbl9jb25kaWNpb25cIiwgZGl2R3JpbGxhLCB7IHRhYmxlRGVmOiB7fSwgZml4ZWRGaWVsZHM6IGZpeGVkRmllbGRzIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy9xdWl0YSBib290c3RyYXAgZGVsIGhlYWQgcGFyYSBxdWUgbm8gcm9tcGEgbG9zIGVzdGlsb3MgZGUgQkVQbHVzIChzb2xvIHNlIHVzYSBib290c3RyYXAgZW4gZWwgZm9ybSlcclxudmFyIGxpbmtOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2hyZWY9XCJjc3MvYm9vdHN0cmFwLm1pbi5jc3NcIl0nKTtcclxubGlua05vZGVbMF0/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlWzBdKTtcclxuXHJcbmZ1bmN0aW9uIGNvbnNpc3Rpcl9maWx0cm8odGFyZWE6IHN0cmluZywgcmVhX3RlbTogbnVtYmVyIHwgbnVsbCwgcmVhOiBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGFyZWEgPyByZWFfdGVtIDogcmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczogYW55ID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIGh0bWxOdW1lcm8obnVtOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBodG1sLnNwYW4oeyBjbGFzczogJ251bWVybycgfSwgJycgKyAobnVtID8/ICcnKSlcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YSA9IChsYWJlbDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgcGF0aCA9IFwiTTMgM3YxOGgxOFYzSDN6bTE0IDEyLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIjtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7IGNsYXNzOiBcInN2Zy1jZXJyYXItZW5jdWVzdGFcIiB9LCBbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDogcGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIDI2IDI2XCIpO1xyXG4gICAgLy9AdHMtaWdub3JlIHN2ZyBwdWVkZSBzZXIgaGlqbyBkZSB1biBib3RvblxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHsgaWQ6ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnIH0sIFtzdmcsIGxhYmVsXSkuY3JlYXRlKCk7XHJcbiAgICB2ZXIub25jbGljayA9ICgpID0+IGNsb3NlKCk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbmNvbnN0IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBBQlJJUl9UQUIgPSBcIl9hYnJpclwiO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBBQlJJUl9UQUIpO1xyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IElkVGFyZWEsIGVuY3Vlc3RhOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpID0+IHtcclxuICAgIHZhciB1cCA9IHtcclxuICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTogdGFyZWEsXHJcbiAgICAgICAgZW5jOiBlbmN1ZXN0YVxyXG4gICAgfVxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHsgaWQ6ICdib3Rvbi12b2x2ZXItYS1lbmN1ZXN0YScgfSwgbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKSA9PiBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZSArIG15Lm1lbnVTZXBhcmF0b3IgKyBgdz1hYnJpcl9lbmN1ZXN0YSZ1cD0ke0pTT04uc3RyaW5naWZ5KHVwKX0mYXV0b3Byb2NlZD10cnVlYClcclxuICAgIHJldHVybiB2ZXJcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzID0gYXN5bmMgKGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcsIF9sYWJlbDogJ2FicmlyJyB8ICd2ZXInKSA9PiB7XHJcbiAgICB0YXJlYXMgPSB0YXJlYXMgPyB0YXJlYXMgOiAoYXdhaXQgbXlPd24uYWpheC50YWJsZV9kYXRhKHsgdGFibGU6IGB0YXJlYXNgLCBmaXhlZEZpZWxkczogW10gfSkpO1xyXG4gICAgdmFyIG1pc1RhcmVhcyA9IHRhcmVhcy5maWx0ZXIoKHRhcmVhOmFueSkgPT5cclxuICAgICAgICAvL0B0cy1pZ25vcmUgZGVmIGV4aXN0ZSBlbiBtYW5hZ2VyIHkgbXVlc3RyYUFicmlyRW5Ub2Rhc0xhc1RhcmVhcyB0YW1iaWVuIChlbiBlc2EgZ3JpbGxhKVxyXG4gICAgICAgICEhdGFyZWEubWFpbl9mb3JtICYmIHRhcmVhLm9wZXJhdGl2byA9PSBkZXBvdC5yb3cub3BlcmF0aXZvICYmIChkZXBvdC5tYW5hZ2VyLmRlZi5tdWVzdHJhQWJyaXJFblRvZGFzTGFzVGFyZWFzID8gdHJ1ZSA6IGRlcG90LnJvdy50YXJlYSA9PSB0YXJlYS50YXJlYSlcclxuICAgICk7XHJcbiAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgbWlzVGFyZWFzLmZvckVhY2goKHRhcmVhOiB7IHRhcmVhOiBzdHJpbmcsIG5vbWJyZTogc3RyaW5nLCBtYWluX2Zvcm06IElkRm9ybXVsYXJpbyB9KSA9PiB7XHJcbiAgICAgICAgbGV0IGJ1dHRvbkxhYmVsID0gYCR7dGFyZWEudGFyZWF9YDtcclxuICAgICAgICBsZXQgdmVyID0gY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgIGRlcG90LnJvdy5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIHRhcmVhLnRhcmVhIGFzIElkVGFyZWEsXHJcbiAgICAgICAgICAgIE51bWJlcihkZXBvdC5yb3cuZW5jKSxcclxuICAgICAgICAgICAgYnV0dG9uTGFiZWxcclxuICAgICAgICApO1xyXG4gICAgICAgIHZlci5zdHlsZSA9ICdtYXJnaW46MHB4IDJweDsnO1xyXG4gICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uYXBwZW5kQ2hpbGQodmVyKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbnZhciBnZXRBYnJpck92ZXIgPSAoX2RlcG90OiBteU93bi5EZXBvdCwgX2ZpZWxkTmFtZTogc3RyaW5nKTogJ2FicmlyJyA9PiAnYWJyaXInXHJcbi8vXHJcbi8qKGRlcG90LnJvdy5jYXJnYWRvX2RtIHx8ICFkZXBvdC5yb3dbJ2VzdGFkb3NfX3Blcm1pdGVfZWRpdGFyX2VuY3Vlc3RhJ10gJiYgZGVwb3Qucm93LmFzaWduYWRvICE9IG15LmNvbmZpZy5pZHBlcik/XHJcbiAgICAndmVyJzonYWJyaXInXHJcbiovXHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXIgPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgdmFyIGxhYmVsOiAndmVyJyB8ICdhYnJpcicgPSBnZXRBYnJpck92ZXIoZGVwb3QsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsIGZpZWxkTmFtZSwgbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFicmlyUmVjZXBjaW9uID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIHZhciBsYWJlbDogJ3ZlcicgfCAnYWJyaXInID0gZ2V0QWJyaXJPdmVyKGRlcG90LCBmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LCBmaWVsZE5hbWUsIGxhYmVsKTsgLy9ubyBlc3Blcm8gcHJvbWVzYSBwb3JxdWUgbm8gZXMgbmVjZXNhcmlvXHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy52ZXJJY29ub1N2ZyA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIGlmIChkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpIHtcclxuICAgICAgICAgICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInN2Zy1hY2Npb25lc1wiXHJcbiAgICAgICAgICAgIH0sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDogZGVwb3Qucm93LnBhdGhfaWNvbm9fc3ZnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgXCIwIDAgNTAgNTBcIik7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKHN2Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGNyZWFyU1ZHID0gKHBhdGg6IHN0cmluZywgcHJvcHM6IGFueSkgPT4ge1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHByb3BzIHx8IHt9LCBbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDogcGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgcmV0dXJuIHN2Z1xyXG59XHJcbnZhciBjcmVhckJvdG9uQWNjaW9uID0gKGRlcG90OiBteU93bi5EZXBvdCwgYWN0aW9uOiBFc3RhZG9BY2Npb24pID0+IHtcclxuICAgIGxldCBhY2Npb25TaW5HdWlvbmVzID0gYWN0aW9uLmVhY2Npb24ucmVwbGFjZSgnXycsICcgJyk7XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLCB7IGNsYXNzOiBcInN2Zy1hY2Npb25lc1wiIH0pXHJcbiAgICBpZiAoYWN0aW9uLmRlc2FjdGl2YV9ib3Rvbikge1xyXG4gICAgICAgIHJldHVybiBodG1sLnNwYW4oeyBjbGFzczogYHNpbi1ib3Rvbi1hY2Npb25gIH0sIFthY2Npb25TaW5HdWlvbmVzLCBzdmcgYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudF0pLmNyZWF0ZSgpXHJcbiAgICB9XHJcbiAgICBsZXQgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgIGNsYXNzOiBgYm90b24tYWNjaW9uIGJvdG9uLWFjY2lvbi0ke2FjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbn1gXHJcbiAgICB9LCBbXHJcbiAgICAgICAgYCR7YWNjaW9uU2luR3Vpb25lc31gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmcgPyBzdmcgOiBudWxsLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBidXR0b24ub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICB2YXIgYWN0aW9uRnVuID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5hY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhOiBkZXBvdC5yb3cudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpY2lvbjogYWN0aW9uLmNvbmRpY2lvbixcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb246IGFjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYXNUZW1UYWJsZTogZGVwb3QuZGVmLm5hbWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdyaWQgPSBkZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QsIHsgcmV0cmlldmVXaXRoQnJvYWRXaGVyZTogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5ub21icmVfd3NjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBhY29tb2RhciBlc3RvIGVuIGFsZ3VuIG1vbWVudG9cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gZGVwb3Qucm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTogcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IE51bWJlcihwYXJhbXMuZW5jKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZSArIG15Lm1lbnVTZXBhcmF0b3IgKyBgdz0ke2FjdGlvbi5ub21icmVfd3NjcmVlbn0mdXA9JHtKU09OLnN0cmluZ2lmeSh1cCl9JmF1dG9wcm9jZWQ9dHJ1ZWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAvL3JldHJhc28gbGEgaGFiaWxpdGFjacOzbiBwb3JxdWUgYSB2ZWNlcyB0YXJkYSBlbiByZWRpYnVqYXJzZSBsYSBib3RvbmVyYSB5IHB1ZWRlIHRyYWVyIHByb2JsZW1hcyBzaSBkYW4gZG9ibGUgY2xpY2sgXHJcbiAgICAgICAgICAgICAgICAvL3lhIHF1ZSBlamVjdXRhIG51ZXZhbWVudGUgdW5hIGFjY2nDs24gcXVlIHlhIHNlIGVqZWN1dMOzICh5IHRlcm1pbsOzKSBhbnRlc1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBidXR0b24uZGlzYWJsZWQgPSBmYWxzZSwgMzAwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNvbmZpcm1Qcm9taXNlT3B0czogRGlhbG9nT3B0aW9ucyA9IHt9XHJcbiAgICAgICAgaWYgKGFjdGlvbi5jb25maXJtYSkge1xyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZU9wdHMuYXNrRm9yTm9SZXBlYXQgPSAnbm8gdm9sdmVyIGEgbW9zdHJhcic7IC8vbXVlc3RyYSBtZW5zYWplIHBvciBkZWZhdWx0IHBlcm8gYW5kYSBpZ3VhbFxyXG4gICAgICAgICAgICB2YXIgYnV0dG9uc0RlZiA9IFtcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdzw60nLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ25vJywgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZShgY29uZmlybWEgYWNjacOzbiBcIiR7YWNjaW9uU2luR3Vpb25lc31cIj9gLCB7IC4uLmNvbmZpcm1Qcm9taXNlT3B0cywgYnV0dG9uc0RlZiB9KS50aGVuKGFjdGlvbkZ1bik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWN0aW9uRnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1dHRvblxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzQWNjaW9uZXMgPSBhc3luYyAob3B0czogeyBkZXBvdDogbXlPd24uRGVwb3QsIGZpZWxkTmFtZTogc3RyaW5nLCBkaXJlY2Npb246IERpcmVjY2lvbkFjY2lvbiB9KSA9PiB7XHJcbiAgICBsZXQgeyBkZXBvdCwgZmllbGROYW1lLCBkaXJlY2Npb24gfSA9IG9wdHM7XHJcbiAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgdGQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAoZGVwb3Qucm93Q29udHJvbHMuYWNjaW9uZXMuZ2V0VHlwZWRWYWx1ZSgpIHx8IFtdKVxyXG4gICAgICAgIC5maWx0ZXIoKGFjdGlvbjogRXN0YWRvQWNjaW9uKSA9PiBhY3Rpb24uZWFjY2lvbl9kaXJlY2Npb24gPT0gZGlyZWNjaW9uKVxyXG4gICAgICAgIC5mb3JFYWNoKChhY3Rpb246IEVzdGFkb0FjY2lvbikgPT4gdGQuYXBwZW5kQ2hpbGQoY3JlYXJCb3RvbkFjY2lvbihkZXBvdCwgYWN0aW9uKSkpO1xyXG59XHJcblxyXG52YXIgY3JlYXJTd2l0Y2ggPSAob3B0czogeyByb3VuZD86IGJvb2xlYW4sIGRpc2FibGVkPzogYm9vbGVhbiwgY2hlY2tlZD86IGJvb2xlYW4sIG9uQ2xpY2tGdW46IEZ1bmN0aW9uLCBvbkVyckZ1bj86IEZ1bmN0aW9uIH0pID0+IHtcclxuICAgIHZhciBjaGVja2JveCA9IGh0bWwuaW5wdXQoeyB0eXBlOiAnY2hlY2tib3gnLCBjaGVja2VkOiBvcHRzLmNoZWNrZWQgfSkuY3JlYXRlKCk7XHJcbiAgICBjaGVja2JveC5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgYXdhaXQgb3B0cy5vbkNsaWNrRnVuKClcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBodG1sLmxhYmVsKHsgY2xhc3M6ICdzd2l0Y2gnIH0sIFtcclxuICAgICAgICBjaGVja2JveCxcclxuICAgICAgICBodG1sLnNwYW4oeyBjbGFzczogYHNsaWRlciAke29wdHMucm91bmQgPyAncm91bmQnIDogJyd9YCB9KSxcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG59XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5oYWJpbGl0YXIgPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBjcmVhclN3aXRjaCh7XHJcbiAgICAgICAgICAgICAgICByb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGRlcG90LnJvdy5oYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgb25DbGlja0Z1bjogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQgPSBkZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpLCAzMDApOy8vcGFyYSBxdWUgc2UgdmVhIGVsIGVmZWN0b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0F2YW5jZSA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7IGRlcG90LCBmaWVsZE5hbWUsIGRpcmVjY2lvbjogJ2F2YW5jZScgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc1JldHJvY2VzbyA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7IGRlcG90LCBmaWVsZE5hbWUsIGRpcmVjY2lvbjogJ3JldHJvY2VzbycgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0JsYW5xdWVvID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHsgZGVwb3QsIGZpZWxkTmFtZSwgZGlyZWNjaW9uOiAnYmxhbnF1ZW8nIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuZGVzdmVyaWZpY2FyID0ge1xyXG4gICAgcHJlcGFyZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKCdkZXN2ZXJpZmljYXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICBib3Rvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRlcG90LnJvdy5lc3RhZG9fZGVzdGlubykge1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKCdObyBoYXkgdW5hIGFjY2nDs24gZW4gZXN0YWRvc19hY2Npb25lcyBxdWUgZWplY3V0ZSBlbmN1ZXN0YV9ub192ZXJpZmljYXIgZGVzZGUgZWwgZXN0YWRvIGRlIGxhIHRhcmVhIHZlcmlmaWNhZGEuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGRlc3Rpbm8gPSBkZXBvdC5yb3cuZGVzdGlub19fZGVzY19lc3RhZG8gPyBgJHtkZXBvdC5yb3cuZXN0YWRvX2Rlc3Rpbm99IC0gJHtkZXBvdC5yb3cuZGVzdGlub19fZGVzY19lc3RhZG99YCA6IGRlcG90LnJvdy5lc3RhZG9fZGVzdGlubztcclxuICAgICAgICAgICAgdmFyIGlucHV0TW90aXZvID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtbW90aXZvLWRlc3ZlcmlmaWNhcicsIHN0eWxlOiAnd2lkdGg6MTAwJScgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2RhbmdlcicgfSwgW2BFc3TDoSBwb3IgZGVzdmVyaWZpY2FyIGxhIHRhcmVhICR7ZGVwb3Qucm93LnRhcmVhfSBkZSBsYSBlbmN1ZXN0YSAke2RlcG90LnJvdy5lbmN9IHkgdm9sdmVybGEgZGVzZGUgJHtkZXBvdC5yb3cudGFyZWFfYWN0dWFsfS5gXSksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbYEVzdGFkbyBhbCBxdWUgdnVlbHZlIGxhIHRhcmVhICR7ZGVwb3Qucm93LnRhcmVhfTogYCwgaHRtbC5iKGRlc3Rpbm8pXSksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbJ01vdGl2bzogJywgaW5wdXRNb3Rpdm9dKSxcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBjb25maXJtYSA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdkZXN2ZXJpZmljYXInLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYW5jZWxhcicsIHZhbHVlOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpcm1hKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmVuY3Vlc3RhX2Rlc3ZlcmlmaWNhcl9leGNlcGNpb25hbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBtb3Rpdm86IGlucHV0TW90aXZvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGRlcG90Lm1hbmFnZXIucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZSh1bmV4cGVjdGVkKGVycikubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVwZGF0ZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9XHJcbn07XHJcblxyXG5mdW5jdGlvblxyXG4gICAgYm90b25DbGllbnRTaWRlRW5HcmlsbGEob3B0czogeyBub21icmVCb3Rvbjogc3RyaW5nLCBsbGFtYWRhOiAoZGVwb3Q6IG15T3duLkRlcG90KSA9PiBQcm9taXNlPGFueT4gfSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbihvcHRzLm5vbWJyZUJvdG9uKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgICAgICAgICB2YXIgcmVzdGF1cmFyQm90b24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSBvcHRzLm5vbWJyZUJvdG9uO1xyXG4gICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvdG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdwcm9jZXNhbmRvLi4uJztcclxuICAgICAgICAgICAgICAgIG9wdHMubGxhbWFkYShkZXBvdCkudGhlbihhc3luYyBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnb2snIGluIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzLmZvcmNlRGlzcGxheURldGFpbEdyaWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM4RjgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gYWNjacOzbiBkZSBncmlsbGE6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIGZpbHRyb1JlYSA9IGNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbJ3JlYSddLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWEgPyBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2FzbzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgIH0pIDogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXIgPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIGlmIChyZXN1bHQucm93cy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgY3VycmVudFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbFxyXG4gICAgICAgIHZhciBucm9DYXJnYSA9IDA7XHJcbiAgICAgICAgdmFyIGVuY3Vlc3Rhc0RpdjogbnVsbCB8IEhUTUxEaXZFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5oMignb3BlcmF0aXZvOiAnICsgcmVzdWx0Lm9wZXJhdGl2bykuY3JlYXRlKCkpO1xyXG4gICAgICAgIHJlc3VsdC5yb3dzLmZvckVhY2goKGVuY3Vlc3RhOmFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFRva2VuICE9IGVuY3Vlc3RhLmNhcmdhZG9fZG0pIHtcclxuICAgICAgICAgICAgICAgIG5yb0NhcmdhKys7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBlbmN1ZXN0YS5jYXJnYWRvX2RtO1xyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDQoJ2NhcmdhIE7CuiAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgZW5jdWVzdGFzRGl2ID0gaHRtbC5kaXYoeyBjbGFzczogJ2VuY3Vlc3Rhcy1hLWJsYW5xdWVhcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvL2xhcyBjb3BpbyBjb24gbGV0IHBhcmEgcXVlIHRvbWUgZWwgdmFsb3IgYWN0dWFsIHkgbm8gZWwgw7psdGltb1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pVG9rZW4gPSBjdXJyZW50VG9rZW47XHJcbiAgICAgICAgICAgICAgICBsZXQgbWlOcm9DYXJnYSA9IG5yb0NhcmdhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzczogYGJvdG9uLWJsYW5xdWVhci1kbSBib3Rvbi1hY2Npb25gXHJcbiAgICAgICAgICAgICAgICB9LCAnYmxhbnF1ZWFyIGNhcmdhICcgKyBucm9DYXJnYS50b1N0cmluZygpKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnZGFuZ2VyJyB9LCBbYEVzdMOhIHBvciBibGFucXVlYXIgbGEgY2FyZ2EgJHttaU5yb0NhcmdhfS4gTm8gc2UgcG9kcsOhIGRlc2NhcmdhciBlbCBkaXNwb3NpdGl2by5gXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEZvcnphciA9IGh0bWwuaW5wdXQoeyBjbGFzczogJ2lucHV0LWZvcnphcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFsnU2UgcHVlZGUgZm9yemFyIGVsIGJsYW5xdWVvICcsIGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2ZvcnphciBibGFucXVlbycsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsOiAnY2FuY2VsYXIgYmxhbnF1ZW8nLCB2YWx1ZTogZmFsc2UgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcnphcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRGb3J6YXIudmFsdWUgPT0gJ2ZvcnphcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4LmRtX2JsYW5xdWVhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcmVzdWx0Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IG1pVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0QmxhbnF1ZW8uZm9yRWFjaCgodHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3Bhbih7fSwgYCR7dHQucmVzdWx0X2JsYW5xdWVvfWApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ3NpIG5lY2VzaXRhIGJsYW5xdWVhciBlc2NyaWJhIGZvcnphci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3Rhc0Rpdik7XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbmN1ZXN0YXNEaXY/LmFwcGVuZENoaWxkKGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYGVuY3Vlc3RhOiAke2VuY3Vlc3RhLmVuY30gYCksXHJcbiAgICAgICAgICAgICAgICBodG1sLnNwYW4oYHRhcmVhOiAgJHtlbmN1ZXN0YS50YXJlYX0gYCksXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0LmRvd25sb2FkX3NxbCA9IGZ1bmN0aW9uIChyZXN1bHQsIGRpdlJlc3VsdCkge1xyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3Jlc3VsdF0sIHsgdHlwZTogJ3RleHQvc3FsJyB9KSk7XHJcblxyXG4gICAgZGl2UmVzdWx0LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBodG1sLmEoJ0Rlc2NhcmdhciBhcmNoaXZvIFNRTCcpLmNyZWF0ZSgpXHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gJ21pZ3Jhcl9vcGVyYXRpdm8uc3FsJztcclxuICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChsaW5rKTtcclxufVxyXG5cclxuY29uc3QgcHJldmlzdWFsaXphckVuY3Vlc3RhID0gKFxyXG4gICAgcmVzdWx0VGVtOiBhbnksXHJcbiAgICBkaXZSZXN1bHQ6IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgICAgbm9tYnJlUHJvY2VkdXJlOiBzdHJpbmcsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IGJvb2xlYW5cclxuICAgICAgICBsYWJlbEFjdGlvbjogc3RyaW5nXHJcbiAgICB9XHJcbikgPT4ge1xyXG4gICAgbGV0IHsgY2Fzb1RlbSB9ID0gcmVzdWx0VGVtO1xyXG4gICAgaWYgKCFjYXNvVGVtLmpzb25fZW5jdWVzdGEpIHtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5wKHsgaWQ6ICdtZW5zYWplLW5vLWhheS1qc29uLWVuY3Vlc3RhJyB9LCBgbm8gc2UgZW5jb250csOzIGluZm9ybWFjaW9uIGNhcmdhZGEgZW4gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY31gKS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2Fzb1RlbS5qc29uX2VuY3Vlc3RhIHx8IHBhcmFtcy5pZ25vcmFKc29uRW5jdWVzdGFWYWNpbykge1xyXG4gICAgICAgIHZhciBlbmN1ZXN0YURpdiA9IGh0bWwuZGl2KHsgaWQ6ICdiYWNrdXAtZGl2JyB9KS5jcmVhdGUoKTtcclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoZW5jdWVzdGFEaXYpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG15LmFncmVnYXJfanNvbihlbmN1ZXN0YURpdiwgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7IGlkOiAnbWVuc2FqZS1lcnJvci1qc29uLWVuY3Vlc3RhJyB9LCBgbm8gc2UgcHVkbyBhbCBwcmV2aXN1YWxpemFyIGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9IGNvcnJlY3RhbWVudGUuICR7dW5leHBlY3RlZChlcnIpLm1lc3NhZ2V9YCkuY3JlYXRlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgICAgICBjbGFzczogYGJvdG9uLWJsYW5xdWVhci1lbmN1ZXN0YS1hY2Npb25gXHJcbiAgICAgICAgfSwgYCR7cGFyYW1zLmxhYmVsQWN0aW9ufSBlbmN1ZXN0YWApLmNyZWF0ZSgpO1xyXG4gICAgICAgIGJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2RhbmdlcicgfSwgW2BFc3TDoSBwb3IgJHtwYXJhbXMubGFiZWxBY3Rpb259IGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9LiBTZSBwZXJkZXLDoW4gbG9zIGRhdG9zIGRlIGxhIG1pc21hLmBdKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFyIGlucHV0Rm9yemFyID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtZm9yemFyJyB9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbYHBhcmEgJHtwYXJhbXMubGFiZWxBY3Rpb259IGVzY3JpYmEgZm9yemFyIGAsIGlucHV0Rm9yemFyXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICB2YXIgZm9yemFyID0gYXdhaXQgY29uZmlybVByb21pc2UobWFpbkRpdiwge1xyXG4gICAgICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zRGVmOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2ZvcnphcicsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbmNlbGFyJywgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmb3J6YXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dEZvcnphci52YWx1ZSA9PSAnZm9yemFyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YWl0R2lmID0gaHRtbC5pbWcoeyBzcmM6ICdpbWcvbG9hZGluZzE2LmdpZicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKHdhaXRHaWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4W3BhcmFtcy5ub21icmVQcm9jZWR1cmVdKGNhc29UZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MID0gcmVzdWx0QmxhbnF1ZW87XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0R2lmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGBzaSBuZWNlc2l0YSAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZXNjcmliYSBmb3J6YXIuYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgIH1cclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG8gPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTogJ2VuY3Vlc3RhX2JsYW5xdWVhcicsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IGZhbHNlLFxyXG4gICAgICAgIGxhYmVsQWN0aW9uOiAnYmxhbnF1ZWFyJ1xyXG4gICAgfSlcclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YV9hX2JvcnJhciA9IGZ1bmN0aW9uIChyZXN1bHQsIGRpdlJlc3VsdCkge1xyXG4gICAgcHJldmlzdWFsaXphckVuY3Vlc3RhKHJlc3VsdCwgZGl2UmVzdWx0LCB7XHJcbiAgICAgICAgbm9tYnJlUHJvY2VkdXJlOiAnZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogdHJ1ZSxcclxuICAgICAgICBsYWJlbEFjdGlvbjogJ2JvcnJhcidcclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5RmxhdDxUPihhcnJheXM6IFRbXVtdKTogVFtdIHtcclxuICAgIHJldHVybiAoW10gYXMgVFtdKS5jb25jYXQuYXBwbHkoW10sIGFycmF5cyk7XHJcbn1cclxuXHJcblxyXG4vKnNpbmNyb25pemFyIHkgY2FtYmlvIGRlIG1vZG8gTEVHQUNZICovXHJcbmFzeW5jIGZ1bmN0aW9uIHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyB8IG51bGwsIGNhbWJpYU1vZG9ETTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgZm9ybVJlbmRlcmVyID0gZ2V0Rm9ybVJlbmRlcmVyKCk7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBmb3JtUmVuZGVyZXIuZ2V0TW9kb0RNKCkgfHwgYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICBmb3JtUmVuZGVyZXIuc2V0TW9kb0RNKG1vZG9ETSk7XHJcbiAgICBjb25zdCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgPSBmb3JtUmVuZGVyZXIuZ2V0SWRwZXJMb2d1ZWFkbygpO1xyXG4gICAgdmFyIGRhdG9zID0gYXdhaXQgbXkuYWpheC5kbV9zaW5jcm9uaXphcih7IHBlcnNpc3RlbnRlcywgbW9kb19kbTogbW9kb0RNLCBjYW1iaWFfbW9kb19kbTogY2FtYmlhTW9kb0RNLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSk7XHJcbiAgICBhd2FpdCBmb3JtUmVuZGVyZXIucGVyc2lzdGlyRGF0b3MoeyAuLi5kYXRvcywgbW9kb0FsbWFjZW5hbWllbnRvOiAnbG9jYWwnIH0pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCBteU93bi5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHsgb3BlcmF0aXZvOiBkYXRvcy5vcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCB9KTtcclxuICAgIGF3YWl0IGZvcm1SZW5kZXJlci5wZXJzaXN0aXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgbXkucmVtb3ZlTG9jYWxWYXIoQkFDS1VQUyk7XHJcbiAgICByZXR1cm4gZGF0b3M7XHJcbn1cclxuXHJcbmNvbnN0IG1vc3RyYXJJbmZvTG9jYWwgPSBhc3luYyAoZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50LCB0aXR1bG86IHN0cmluZywgbnJvU2luY3JvOiBudW1iZXIgfCBudWxsLCBtb3N0cmFyTGlua0hkcjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRGF0b3MoKTtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgaWYgKGRhdG9zKSB7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kKGh0bWwuZGl2KHsgaWQ6ICdhdmlzby1zaW5jcm8nIH0sIFtcclxuICAgICAgICAgICAgbnJvU2luY3JvID8gaHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIgKyBucm9TaW5jcm8udG9TdHJpbmcoKSldKSA6IG51bGwsXHJcbiAgICAgICAgICAgIGh0bWwuaDQodGl0dWxvKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvcy5jYXJnYXMpLmFycmF5KCkubGVuZ3RoKSwgJyBhcmVhczogJywgbGlrZUFyKGRhdG9zLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgZXN0cnVjdHVyYSA/IGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF0pLmFycmF5KCkubGVuZ3RoKSwgJyAnICsgZXN0cnVjdHVyYS51YVBwYWxdKSA6IG51bGwsXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBtb3N0cmFyTGlua0hkciA/IGh0bWwuYSh7IGhyZWY6ICcuL2NhbXBvJyB9LCBbaHRtbC5iKCdJUiBBIExBIEhPSkEgREUgUlVUQScpXSkgOiBudWxsXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmRDaGlsZChodG1sLmRpdih7IGNsYXNzOiAnYXZpc28nIH0sIFtcclxuICAgICAgICAgICAgaHRtbC5oNCgnU2lzdGVtYSB2YWPDrW8nKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIGZvcm11bGFyaW9zJyksXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBtb3N0cmFySW5mb01vZG8gPSBhc3luYyAobWFpbkxheW91dDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGxldCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpIHx8IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgZ2V0Rm9ybVJlbmRlcmVyKCkuc2V0TW9kb0RNKG1vZG9ETSk7XHJcbiAgICAvL0B0cy1pZ25vcmUgc2V0ZW8gdW4gYXRyaWJ1dG9cclxuICAgIHZhciBkaXZBdmlzb01vZG86IEhUTUxEaXZFbGVtZW50ID0gaHRtbC5kaXYoeyBjbGFzczogXCJpbmZvLW1vZG9cIiwgXCJtb2RvLWRtXCI6IG1vZG9ETSB9LCBgbW9kbyBhY3R1YWw6ICR7bW9kb0RNfWApLmNyZWF0ZSgpXHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvTW9kbylcclxuICAgIHJldHVybiBtb2RvRE07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbWJpYXJNb2RvRE1FbkxvY2FsU3RvcmFnZShtb2RvQWN0dWFsOiBNb2RvRE0pIHtcclxuICAgIG1vZG9BY3R1YWwgPSBtb2RvQWN0dWFsID09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyc7XHJcbiAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRNb2RvRE0obW9kb0FjdHVhbCk7XHJcbn1cclxuXHJcbnZhciBwcm9jZWRlclNpbmNyb0Z1biA9IGFzeW5jIChidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCBkaXZBdmlzb1NpbmNybzogSFRNTERpdkVsZW1lbnQsIGNhbWJpYU1vZG9ETTogYm9vbGVhbikgPT4ge1xyXG4gICAgYnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnZG93bmxvYWQtZG0tYnV0dG9uJztcclxuICAgIGRpdkF2aXNvU2luY3JvLmlubmVySFRNTCA9ICcnO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwZXJzaXN0ZW50ZXMgPSBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5sZWVyRGF0b3MoKTtcclxuICAgICAgICBjb25zdCBkYXRvcyA9IGF3YWl0IHNpbmNyb25pemFyRGF0b3MocGVyc2lzdGVudGVzLCBjYW1iaWFNb2RvRE0pO1xyXG4gICAgICAgIGxldCBtb2RvRE1BY3R1YWw6IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpIHx8IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgICAgIGlmIChjYW1iaWFNb2RvRE0pIHtcclxuICAgICAgICAgICAgY2FtYmlhck1vZG9ETUVuTG9jYWxTdG9yYWdlKG1vZG9ETUFjdHVhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IG1vc3RyYXJJbmZvTG9jYWwoZGl2QXZpc29TaW5jcm8sICdkYXRvcyByZWNpYmlkb3MnLCBkYXRvcy5udW1fc2luY3JvLCB0cnVlKTtcclxuICAgICAgICAoYXdhaXQgY3JlYXJTdG9yZUZvcm11bGFyaW8oe30pKS5kaXNwYXRjaChkaXNwYXRjaGVycy5SRVNFVF9PUENJT05FUyh7fSkpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKVxyXG4gICAgICAgIHRocm93IGVyclxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gJ2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JztcclxuICAgIH1cclxufVxyXG5teU93bi53U2NyZWVucy5zaW5jcm9uaXphcl9kbSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgY29uc3QgbW9kb0RNID0gYXdhaXQgbW9zdHJhckluZm9Nb2RvKG1haW5MYXlvdXQpO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oeyBjbGFzczogJ2Rvd25sb2FkLWRtLWJ1dHRvbi1jb250JyB9LCAnc2luY3Jvbml6YXInKS5jcmVhdGUoKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLnNldEF0dHJpYnV0ZShcIm1vZG8tZG1cIiwgbW9kb0RNKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzogSFRNTERpdkVsZW1lbnQgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgYXdhaXQgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCAnaW5mb3JtYWNpw7NuIGEgdHJhbnNtaXRpcicsIG51bGwsIGZhbHNlKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChwcm9jZWRlckJ1dHRvbik7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvU2luY3JvKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiBwcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8sIGZhbHNlKVxyXG59O1xyXG5cclxubXlPd24ud1NjcmVlbnMuY2FtYmlhcl9tb2RvX2RtID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICBjb25zdCBtb2RvRE0gPSBhd2FpdCBtb3N0cmFySW5mb01vZG8obWFpbkxheW91dCk7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7IGNsYXNzOiAnY2FtYmlhci1tb2RvLWRtLWJ1dHRvbicgfSwgYGNhbWJpYXIgYSBtb2RvICR7bW9kb0RNID09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyd9IOKHkmApLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGRpdkF2aXNvU2luY3JvOiBIVE1MRGl2RWxlbWVudCA9IGh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBhd2FpdCBtb3N0cmFySW5mb0xvY2FsKG1haW5MYXlvdXQgYXMgSFRNTERpdkVsZW1lbnQsIGBpbmZvcm1hY2nDs24gbW9kbyBcIiR7bW9kb0RNfVwiIGEgdHJhbnNtaXRpcmAsIG51bGwsIGZhbHNlKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChwcm9jZWRlckJ1dHRvbik7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvU2luY3JvKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgdmFyIG1haW5EaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpXHJcbiAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgaHRtbC5kaXYoe30sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbYENvbmZpcm1hIGNhbWJpbyBkZSBtb2RvIFwiJHttb2RvRE19XCIgYSAke21vZG9ETSA9PSAncHJvZHVjJyA/ICdcImNhcGFcIicgOiAnXCJwcm9kdWNcIid9LmBdKVxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmFyIGlucHV0Q2FtYmlhck1vZG8gPSBodG1sLmlucHV0KHsgY2xhc3M6ICdpbnB1dC1jYW1iaWFyLW1vZG8nIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICBodG1sLmRpdihbJ1BvciBmYXZvciBpbmdyZXNlIGxhIGNvbnRyYXNlw7FhICcsIGlucHV0Q2FtYmlhck1vZG9dKVxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICB2YXIgY2FtYmlhck1vZG9WYWx1ZSA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgd2l0aENsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogYGNhbWJpYXJgLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogYGNhbmNlbGFyYCwgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjYW1iaWFyTW9kb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dENhbWJpYXJNb2RvLnZhbHVlID09ICcxMjM0Jykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZWRlckJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJvY2VkZXJTaW5jcm9GdW4ocHJvY2VkZXJCdXR0b24sIGRpdkF2aXNvU2luY3JvLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBtYWluTGF5b3V0LmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KGBNT0RPICR7Z2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCl9IEFDVElWQURPYCkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UodW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZWRlckJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZSgnY29udHJhc2XDsWEgaW5jb3JyZWN0YS4nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyogRklOIHNpbmNyb25pemFyIHkgY2FtYmlvIGRlIG1vZG8gTEVHQUNZICovXHJcblxyXG4vKiBheXVkYSBlbiBsw61uZWEgcGFyYSB1c3VhcmlvcyAodmVyIGRvY3MvYXl1ZGEtb25saW5lLm1kKSAqL1xyXG5cclxuLy8gdHJhZSBsYSBheXVkYSBkZWwgdXN1YXJpbyB5IGxhIGd1YXJkYSBkb25kZSBsYSBsZWUgZWwgZGlzcG9zaXRpdm87IHNpIG5vIHB1ZWRlLCB1c2EgbGEgw7psdGltYSBxdWUgc2UgZ3VhcmTDs1xyXG5hc3luYyBmdW5jdGlvbiB0cmFlckF5dWRhKCk6IFByb21pc2U8QXl1ZGFQYXJhVXN1YXJpbz4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgYXl1ZGE6IEF5dWRhUGFyYVVzdWFyaW8gPSBhd2FpdCBteU93bi5hamF4LmF5dWRhX3RyYWVyKHt9KTtcclxuICAgICAgICBnZXRGb3JtUmVuZGVyZXIoKS5wZXJzaXN0aXJBeXVkYShheXVkYSk7XHJcbiAgICAgICAgcmV0dXJuIGF5dWRhO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgdmFyIGd1YXJkYWRhID0gZ2V0Rm9ybVJlbmRlcmVyKCkubGVlckF5dWRhKCk7XHJcbiAgICAgICAgaWYgKGd1YXJkYWRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ3VhcmRhZGE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9wY2lvbmVzRGVsTWVudUNvbkF5dWRhKG9wY2lvbmVzOiBBeXVkYU9wY2lvbk1lbnVbXSwgbW9zdHJhclRlbWE6IChpZDogc3RyaW5nKSA9PiB2b2lkKTogSFRNTFVMaXN0RWxlbWVudCB7XHJcbiAgICB2YXIgbGlzdGEgPSBodG1sLnVsKHsgY2xhc3M6ICdheXVkYS1tZW51JyB9KS5jcmVhdGUoKTtcclxuICAgIG9wY2lvbmVzLmZvckVhY2gob3BjaW9uID0+IHtcclxuICAgICAgICB2YXIgaXRlbSA9IGh0bWwubGkoW2h0bWwuc3Bhbih7IGNsYXNzOiAnYXl1ZGEtbWVudS1sYWJlbCcgfSwgb3BjaW9uLmxhYmVsKV0pLmNyZWF0ZSgpO1xyXG4gICAgICAgIGlmIChvcGNpb24udGVtYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZW1hID0gb3BjaW9uLnRlbWE7XHJcbiAgICAgICAgICAgIHZhciBlbmxhY2UgPSBodG1sLmEoeyBocmVmOiAnIycsIGNsYXNzOiAnYXl1ZGEtbWVudS10ZW1hJyB9LCAndmVyIGF5dWRhJykuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIGVubGFjZS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG1vc3RyYXJUZW1hKHRlbWEpOyB9O1xyXG4gICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGVubGFjZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcGNpb24ub3BjaW9uZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQob3BjaW9uZXNEZWxNZW51Q29uQXl1ZGEob3BjaW9uLm9wY2lvbmVzLCBtb3N0cmFyVGVtYSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0YS5hcHBlbmRDaGlsZChpdGVtKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGxpc3RhO1xyXG59XHJcblxyXG5teU93bi53U2NyZWVucy5heXVkYSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgdmFyIGF5dWRhOiBBeXVkYVBhcmFVc3VhcmlvO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBheXVkYSA9IGF3YWl0IHRyYWVyQXl1ZGEoKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoeyBjbGFzczogJ2F5dWRhJyB9LCAnTm8gc2UgcHVkbyBvYnRlbmVyIGxhIGF5dWRhOiAnICsgdW5leHBlY3RlZChlcnIpLm1lc3NhZ2UpLmNyZWF0ZSgpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgaW5kaWNlID0gaHRtbC51bCh7IGNsYXNzOiAnYXl1ZGEtaW5kaWNlJyB9KS5jcmVhdGUoKTtcclxuICAgIHZhciBjb250ZW5pZG8gPSBodG1sLmRpdih7IGNsYXNzOiAnYXl1ZGEtY29udGVuaWRvJyB9KS5jcmVhdGUoKTtcclxuICAgIHZhciBlbmxhY2VzRGVsSW5kaWNlOiBNYXA8c3RyaW5nLCBIVE1MQW5jaG9yRWxlbWVudD4gPSBuZXcgTWFwKCk7XHJcbiAgICBjb25zdCBNSV9NRU5VID0gJyc7XHJcbiAgICB2YXIgbWFyY2FyRW5JbmRpY2UgPSAoaWQ6IHN0cmluZykgPT4gZW5sYWNlc0RlbEluZGljZS5mb3JFYWNoKChlbmxhY2UsIGlkRW5sYWNlKSA9PiB7XHJcbiAgICAgICAgZW5sYWNlLmNsYXNzTGlzdC50b2dnbGUoJ2F5dWRhLXNlbGVjY2lvbmFkbycsIGlkRW5sYWNlID09IGlkKTtcclxuICAgIH0pO1xyXG4gICAgdmFyIG1vc3RyYXJNaU1lbnUgPSAoKSA9PiB7XHJcbiAgICAgICAgY29udGVuaWRvLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIGNvbnRlbmlkby5hcHBlbmRDaGlsZChodG1sLmgyKCdRdcOpIHB1ZWRvIGhhY2VyJykuY3JlYXRlKCkpO1xyXG4gICAgICAgIGNvbnRlbmlkby5hcHBlbmRDaGlsZChodG1sLnAoYEVzdGFzIHNvbiBsYXMgb3BjaW9uZXMgZGVsIG1lbsO6IHF1ZSB0aWVuZSBoYWJpbGl0YWRhcyR7YXl1ZGEucm9sID8gYCBlbCByb2wgJHtheXVkYS5yb2x9YCA6ICcnfSBlbiBlc3RhIGFwbGljYWNpw7NuIChtb2RvICR7YXl1ZGEubW9kby50b0xvd2VyQ2FzZSgpfSkuYCkuY3JlYXRlKCkpO1xyXG4gICAgICAgIGNvbnRlbmlkby5hcHBlbmRDaGlsZChvcGNpb25lc0RlbE1lbnVDb25BeXVkYShheXVkYS5tZW51LCBtb3N0cmFyVGVtYSkpO1xyXG4gICAgICAgIG1hcmNhckVuSW5kaWNlKE1JX01FTlUpO1xyXG4gICAgfTtcclxuICAgIHZhciBtb3N0cmFyVGVtYSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdmFyIHRlbWEgPSBheXVkYS50ZW1hcy5maW5kKHRlbWEgPT4gdGVtYS5pZCA9PSBpZCk7XHJcbiAgICAgICAgaWYgKHRlbWEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBtb3N0cmFyTWlNZW51KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGVuaWRvLmlubmVySFRNTCA9IHRlbWEuaHRtbDsgLy8gaHRtbCBnZW5lcmFkbyBlbiBlbCBzZXJ2aWRvciBhIHBhcnRpciBkZWwgbWFya2Rvd24gZGUgbGEgYXl1ZGEgKHNpbiBodG1sIGNydWRvKVxyXG4gICAgICAgIGNvbnRlbmlkby5xdWVyeVNlbGVjdG9yQWxsKCdhJykuZm9yRWFjaChlbmxhY2UgPT4ge1xyXG4gICAgICAgICAgICB2YXIgZGVzdGlubyA9IGVubGFjZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA/PyAnJztcclxuICAgICAgICAgICAgaWYgKGRlc3Rpbm8uc3RhcnRzV2l0aCgnYXl1ZGE6JykpIHtcclxuICAgICAgICAgICAgICAgIGVubGFjZS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG1vc3RyYXJUZW1hKGRlc3Rpbm8uc2xpY2UoJ2F5dWRhOicubGVuZ3RoKSk7IH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbmxhY2UudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBtYXJjYXJFbkluZGljZShpZCk7XHJcbiAgICAgICAgY29udGVuaWRvLnNjcm9sbFRvcCA9IDA7XHJcbiAgICB9O1xyXG4gICAgdmFyIGFncmVnYXJBbEluZGljZSA9IChpZDogc3RyaW5nLCB0aXR1bG86IHN0cmluZywgbW9zdHJhcjogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgICAgIHZhciBlbmxhY2UgPSBodG1sLmEoeyBocmVmOiAnIycgfSwgdGl0dWxvKS5jcmVhdGUoKTtcclxuICAgICAgICBlbmxhY2Uub25jbGljayA9IChldmVudCkgPT4geyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBtb3N0cmFyKCk7IH07XHJcbiAgICAgICAgZW5sYWNlc0RlbEluZGljZS5zZXQoaWQsIGVubGFjZSk7XHJcbiAgICAgICAgaW5kaWNlLmFwcGVuZENoaWxkKGh0bWwubGkoW2VubGFjZV0pLmNyZWF0ZSgpKTtcclxuICAgIH07XHJcbiAgICBhZ3JlZ2FyQWxJbmRpY2UoTUlfTUVOVSwgJ1F1w6kgcHVlZG8gaGFjZXInLCBtb3N0cmFyTWlNZW51KTtcclxuICAgIGF5dWRhLnRlbWFzLmZvckVhY2godGVtYSA9PiBhZ3JlZ2FyQWxJbmRpY2UodGVtYS5pZCwgdGVtYS50aXR1bG8sICgpID0+IG1vc3RyYXJUZW1hKHRlbWEuaWQpKSk7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGh0bWwuZGl2KHsgY2xhc3M6ICdheXVkYScgfSwgW2luZGljZSwgY29udGVuaWRvXSkuY3JlYXRlKCkpO1xyXG4gICAgaWYgKGF5dWRhLnRlbWFzLmxlbmd0aCkge1xyXG4gICAgICAgIG1vc3RyYXJUZW1hKGF5dWRhLnRlbWFzWzBdLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbW9zdHJhck1pTWVudSgpO1xyXG4gICAgfVxyXG59O1xyXG4iXX0=
863
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLDJDQUFrQztJQUNsQywyQ0FBa0Q7SUFDbEQsbUVBQWlGO0lBU2pGLGtDQUFtQztJQUNuQyxtRUFBd0U7SUFDeEUseURBQXlFO0lBQ3pFLDZEQUE0RDtJQUM1RCxxRUFBMEU7SUFHMUUsa0JBQWtCO0lBRWxCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixJQUFJLGlCQUFpQixHQUFrQixJQUFJLENBQUM7SUFFckMsTUFBTSxlQUFlLEdBQUcsQ0FBTyxNQUFnQyxFQUF1QixFQUFFLGtEQUMzRixPQUFBLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQSxHQUFBLENBQUM7SUFEdkUsUUFBQSxlQUFlLG1CQUN3RDtJQUdwRixLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQVMsRUFBRTtRQUNyQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUM7WUFDRCxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFBLDRDQUE4QixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHO1lBQzVCLFVBQVUsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUs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bkUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUM7WUFDRixlQUFlLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRixVQUFVLENBQUMsV0FBVyxDQUFDLGlCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNuRixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3JCLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDSixhQUFhLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQztLQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBodG1sIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHsgZXhwZWN0ZWQsIHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5pbXBvcnQgeyBkaXNwYXRjaGVycywgY3JlYXJTdG9yZUZvcm11bGFyaW8gfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2Fzb1N0YXRlLFxyXG4gICAgSWRGb3JtdWxhcmlvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRFbmMsIElkT3BlcmF0aXZvLCBJZFRhcmVhLCBFc3RhZG9BY2Npb24sIERpcmVjY2lvbkFjY2lvbixcclxuICAgIENhbXBvUGtSYWl6LCBNb2RvRE0sXHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGtSYWl6LFxyXG4gICAgQXl1ZGFPcGNpb25NZW51LCBBeXVkYVBhcmFVc3VhcmlvXHJcbn0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCBsaWtlQXIgPSByZXF1aXJlKFwibGlrZS1hclwiKTtcclxuaW1wb3J0IHsgQkFDS1VQUywgY2FyZ2FyRXN0cnVjdHVyYSB9IGZyb20gXCIuLi91bmxvZ2dlZC9hYnJpci1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgY3JlYXRlTG9jYWxTdG9yYWdlRm9ybVJlbmRlcmVyIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3JlbmRlci1pbml0XCI7XHJcbmltcG9ydCB7IGdldEZvcm1SZW5kZXJlciB9IGZyb20gXCIuLi91bmxvZ2dlZC9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwgfSBmcm9tICcuLi91bmxvZ2dlZC9yZW5kZXItZm9ybXVsYXJpbyc7XHJcbmltcG9ydCB7IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MgfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIjtcclxuXHJcbi8vVE9ETyBHRU5FUkFMSVpBUlxyXG5cclxuY29uc3QgVEFSRUFfREVGQVVMVCA9ICdlbmN1JztcclxudmFyIE9QRVJBVElWT19ERUZBVUxUOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbmV4cG9ydCBjb25zdCB0cmFlckVzdHJ1Y3R1cmEgPSBhc3luYyAocGFyYW1zOiB7b3BlcmF0aXZvOklkT3BlcmF0aXZvIH0pOiBQcm9taXNlPEVzdHJ1Y3R1cmE+ID0+XHJcbiAgICBhd2FpdCBteU93bi5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH0pO1xyXG5cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGFzeW5jICgpID0+IHtcclxuICAgIHZhciBteSA9IG15T3duO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IGF3YWl0IG15LmFqYXgub3BlcmF0aXZvX2dldCh7fSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBPUEVSQVRJVk9fREVGQVVMVCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtUmVuZGVyZXIgPSBjcmVhdGVMb2NhbFN0b3JhZ2VGb3JtUmVuZGVyZXIoe30pO1xyXG4gICAgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGEgPSB7XHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IE9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6IFRBUkVBX0RFRkFVTFQsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMTMwMDMxIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6IHRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjogYXN5bmMgKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBmb3JtUmVuZGVyZXIudXBkYXRlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAgIGxlZXJEYXRvczogYXN5bmMgZnVuY3Rpb24gbGVlckRhdG9zRW5CYXNlRGVEYXRvcygpOiBQcm9taXNlPERhdG9zQnlQYXNzUGVyc2lzdGlibGVzPiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Nhcmdhcih7IG9wZXJhdGl2bywgcGtfcmFpel92YWx1ZTogZW5jLCB0YXJlYSB9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvczogYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVzdMOhIGludGVudGFuZG8gbW9kaWZpY2FyIHVuYSBlbmN1ZXN0YSBhYmllcnRhIGNvbW8gc29sbyBsZWN0dXJhLCBubyBzZSBndWFyZGFyb24gbG9zIGNhbWJpb3NcIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyKHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgICAgICAgICB2YXIgY2FyZ2EgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICAgICAgICAgIGlmICghZXN0cnVjdHVyYSB8fCAhZXN0cnVjdHVyYS5zZW1hbmFzIHx8IChlc3RydWN0dXJhLnRpbWVzdGFtcCA/PyAwKSA8IGNhcmdhPy50aW1lc3RhbXBFc3RydWN0dXJhISB8fCBlc3RydWN0dXJhLm9wZXJhdGl2byAhPSBvcGVyYXRpdm8gfHwgbXkuY29uZmlnLmNvbmZpZy5kZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7IG9wZXJhdGl2byB9KVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZm9ybVJlbmRlcmVyLnBlcnNpc3RpckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIC8vdmFyIHN0YXRlOiBDYXNvU3RhdGUgPSB7fVxyXG4gICAgICAgICAgICAvL2luaWNpYWxpemFyU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0geyBmb3JtdWxhcmlvOiBjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmMgYXMgSWRFbmNdLnRhcmVhLm1haW5fZm9ybSwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGVuYyB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjYXJnYT8ucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbCBhcyBDYW1wb1BrUmFpel1dKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlIGVuY3VlbnRyYSBlbC9sYSAke2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbH0gJHtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKGZvcm1SZW5kZXJlciwgeyBmb3JQa1JhaXo6Zm9yUGtSYWl6IGFzIEZvclBrUmFpeiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbXlPd24ud1NjcmVlbnMuY29uc2lzdGlyX2VuY3Vlc3RhID0ge1xyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgZGVmYXVsdFZhbHVlOiBPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6IHRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjogYXN5bmMgKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAod2luZG93Lm9wZW5lcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5Ub3BCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi10b3AtYmFyJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFpblRvcEJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Ub3BCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIHRhcmVhLCBlbmMgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogZW5jXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goeyBmaWVsZE5hbWU6ICdvcGVyYXRpdm8nLCB2YWx1ZTogb3BlcmF0aXZvIH0pO1xyXG4gICAgICAgICAgICAgICAgZml4ZWRGaWVsZHMucHVzaCh7IGZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuYyB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdkdyaWxsYSA9IGh0bWwuZGl2KHsgaWQ6ICdpbmNvbnNpc3RlbmNpYXMnIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2R3JpbGxhLCBtYWluTGF5b3V0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdkJvdG9uZXMgPSBodG1sLmRpdih7IGlkOiAnYm90b25lcy1wb3N0LWNvbnNpc3RpcicgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGNlcnJhciBlbmN1ZXN0YWBcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB2b2x2ZXIgYSBlbmN1ZXN0YSAke2VuY31gXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkJvdG9uZXMsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBteS50YWJsZUdyaWQoXCJpbmNvbnNpc3RlbmNpYXNfY3VtcGxlbl9jb25kaWNpb25cIiwgZGl2R3JpbGxhLCB7IHRhYmxlRGVmOiB7fSwgZml4ZWRGaWVsZHM6IGZpeGVkRmllbGRzIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy9xdWl0YSBib290c3RyYXAgZGVsIGhlYWQgcGFyYSBxdWUgbm8gcm9tcGEgbG9zIGVzdGlsb3MgZGUgQkVQbHVzIChzb2xvIHNlIHVzYSBib290c3RyYXAgZW4gZWwgZm9ybSlcclxudmFyIGxpbmtOb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2hyZWY9XCJjc3MvYm9vdHN0cmFwLm1pbi5jc3NcIl0nKTtcclxubGlua05vZGVbMF0/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlWzBdKTtcclxuXHJcbmZ1bmN0aW9uIGNvbnNpc3Rpcl9maWx0cm8odGFyZWE6IHN0cmluZywgcmVhX3RlbTogbnVtYmVyIHwgbnVsbCwgcmVhOiBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGFyZWEgPyByZWFfdGVtIDogcmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczogYW55ID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIGh0bWxOdW1lcm8obnVtOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBodG1sLnNwYW4oeyBjbGFzczogJ251bWVybycgfSwgJycgKyAobnVtID8/ICcnKSlcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25DZXJyYXJFbmN1ZXN0YSA9IChsYWJlbDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgcGF0aCA9IFwiTTMgM3YxOGgxOFYzSDN6bTE0IDEyLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIjtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyh7IGNsYXNzOiBcInN2Zy1jZXJyYXItZW5jdWVzdGFcIiB9LCBbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDogcGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIDI2IDI2XCIpO1xyXG4gICAgLy9AdHMtaWdub3JlIHN2ZyBwdWVkZSBzZXIgaGlqbyBkZSB1biBib3RvblxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHsgaWQ6ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnIH0sIFtzdmcsIGxhYmVsXSkuY3JlYXRlKCk7XHJcbiAgICB2ZXIub25jbGljayA9ICgpID0+IGNsb3NlKCk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbmNvbnN0IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBBQlJJUl9UQUIgPSBcIl9hYnJpclwiO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBBQlJJUl9UQUIpO1xyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IElkVGFyZWEsIGVuY3Vlc3RhOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpID0+IHtcclxuICAgIHZhciB1cCA9IHtcclxuICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTogdGFyZWEsXHJcbiAgICAgICAgZW5jOiBlbmN1ZXN0YVxyXG4gICAgfVxyXG4gICAgbGV0IHZlciA9IGh0bWwuYnV0dG9uKHsgaWQ6ICdib3Rvbi12b2x2ZXItYS1lbmN1ZXN0YScgfSwgbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKSA9PiBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZSArIG15Lm1lbnVTZXBhcmF0b3IgKyBgdz1hYnJpcl9lbmN1ZXN0YSZ1cD0ke0pTT04uc3RyaW5naWZ5KHVwKX0mYXV0b3Byb2NlZD10cnVlYClcclxuICAgIHJldHVybiB2ZXJcclxufVxyXG5cclxudmFyIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzID0gYXN5bmMgKGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcsIF9sYWJlbDogJ2FicmlyJyB8ICd2ZXInKSA9PiB7XHJcbiAgICB0YXJlYXMgPSB0YXJlYXMgPyB0YXJlYXMgOiAoYXdhaXQgbXlPd24uYWpheC50YWJsZV9kYXRhKHsgdGFibGU6IGB0YXJlYXNgLCBmaXhlZEZpZWxkczogW10gfSkpO1xyXG4gICAgdmFyIG1pc1RhcmVhcyA9IHRhcmVhcy5maWx0ZXIoKHRhcmVhOmFueSkgPT5cclxuICAgICAgICAvL0B0cy1pZ25vcmUgZGVmIGV4aXN0ZSBlbiBtYW5hZ2VyIHkgbXVlc3RyYUFicmlyRW5Ub2Rhc0xhc1RhcmVhcyB0YW1iaWVuIChlbiBlc2EgZ3JpbGxhKVxyXG4gICAgICAgICEhdGFyZWEubWFpbl9mb3JtICYmIHRhcmVhLm9wZXJhdGl2byA9PSBkZXBvdC5yb3cub3BlcmF0aXZvICYmIChkZXBvdC5tYW5hZ2VyLmRlZi5tdWVzdHJhQWJyaXJFblRvZGFzTGFzVGFyZWFzID8gdHJ1ZSA6IGRlcG90LnJvdy50YXJlYSA9PSB0YXJlYS50YXJlYSlcclxuICAgICk7XHJcbiAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmlubmVySFRNTCA9ICcnO1xyXG4gICAgbWlzVGFyZWFzLmZvckVhY2goKHRhcmVhOiB7IHRhcmVhOiBzdHJpbmcsIG5vbWJyZTogc3RyaW5nLCBtYWluX2Zvcm06IElkRm9ybXVsYXJpbyB9KSA9PiB7XHJcbiAgICAgICAgbGV0IGJ1dHRvbkxhYmVsID0gYCR7dGFyZWEudGFyZWF9YDtcclxuICAgICAgICBsZXQgdmVyID0gY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgIGRlcG90LnJvdy5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIHRhcmVhLnRhcmVhIGFzIElkVGFyZWEsXHJcbiAgICAgICAgICAgIE51bWJlcihkZXBvdC5yb3cuZW5jKSxcclxuICAgICAgICAgICAgYnV0dG9uTGFiZWxcclxuICAgICAgICApO1xyXG4gICAgICAgIHZlci5zdHlsZSA9ICdtYXJnaW46MHB4IDJweDsnO1xyXG4gICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uYXBwZW5kQ2hpbGQodmVyKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbnZhciBnZXRBYnJpck92ZXIgPSAoX2RlcG90OiBteU93bi5EZXBvdCwgX2ZpZWxkTmFtZTogc3RyaW5nKTogJ2FicmlyJyA9PiAnYWJyaXInXHJcbi8vXHJcbi8qKGRlcG90LnJvdy5jYXJnYWRvX2RtIHx8ICFkZXBvdC5yb3dbJ2VzdGFkb3NfX3Blcm1pdGVfZWRpdGFyX2VuY3Vlc3RhJ10gJiYgZGVwb3Qucm93LmFzaWduYWRvICE9IG15LmNvbmZpZy5pZHBlcik/XHJcbiAgICAndmVyJzonYWJyaXInXHJcbiovXHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXIgPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgdmFyIGxhYmVsOiAndmVyJyB8ICdhYnJpcicgPSBnZXRBYnJpck92ZXIoZGVwb3QsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMoZGVwb3QsIGZpZWxkTmFtZSwgbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFicmlyUmVjZXBjaW9uID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIHZhciBsYWJlbDogJ3ZlcicgfCAnYWJyaXInID0gZ2V0QWJyaXJPdmVyKGRlcG90LCBmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LCBmaWVsZE5hbWUsIGxhYmVsKTsgLy9ubyBlc3Blcm8gcHJvbWVzYSBwb3JxdWUgbm8gZXMgbmVjZXNhcmlvXHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy52ZXJJY29ub1N2ZyA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIGlmIChkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpIHtcclxuICAgICAgICAgICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInN2Zy1hY2Npb25lc1wiXHJcbiAgICAgICAgICAgIH0sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDogZGVwb3Qucm93LnBhdGhfaWNvbm9fc3ZnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgXCIwIDAgNTAgNTBcIik7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKHN2Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGNyZWFyU1ZHID0gKHBhdGg6IHN0cmluZywgcHJvcHM6IGFueSkgPT4ge1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHByb3BzIHx8IHt9LCBbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDogcGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgcmV0dXJuIHN2Z1xyXG59XHJcbnZhciBjcmVhckJvdG9uQWNjaW9uID0gKGRlcG90OiBteU93bi5EZXBvdCwgYWN0aW9uOiBFc3RhZG9BY2Npb24pID0+IHtcclxuICAgIGxldCBhY2Npb25TaW5HdWlvbmVzID0gYWN0aW9uLmVhY2Npb24ucmVwbGFjZSgnXycsICcgJyk7XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLCB7IGNsYXNzOiBcInN2Zy1hY2Npb25lc1wiIH0pXHJcbiAgICBpZiAoYWN0aW9uLmRlc2FjdGl2YV9ib3Rvbikge1xyXG4gICAgICAgIHJldHVybiBodG1sLnNwYW4oeyBjbGFzczogYHNpbi1ib3Rvbi1hY2Npb25gIH0sIFthY2Npb25TaW5HdWlvbmVzLCBzdmcgYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudF0pLmNyZWF0ZSgpXHJcbiAgICB9XHJcbiAgICBsZXQgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgIGNsYXNzOiBgYm90b24tYWNjaW9uIGJvdG9uLWFjY2lvbi0ke2FjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbn1gXHJcbiAgICB9LCBbXHJcbiAgICAgICAgYCR7YWNjaW9uU2luR3Vpb25lc31gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmcgPyBzdmcgOiBudWxsLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBidXR0b24ub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICB2YXIgYWN0aW9uRnVuID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5hY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhOiBkZXBvdC5yb3cudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpY2lvbjogYWN0aW9uLmNvbmRpY2lvbixcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb246IGFjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYXNUZW1UYWJsZTogZGVwb3QuZGVmLm5hbWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdyaWQgPSBkZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QsIHsgcmV0cmlldmVXaXRoQnJvYWRXaGVyZTogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5ub21icmVfd3NjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBhY29tb2RhciBlc3RvIGVuIGFsZ3VuIG1vbWVudG9cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0gZGVwb3Qucm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1cCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTogcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IE51bWJlcihwYXJhbXMuZW5jKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZSArIG15Lm1lbnVTZXBhcmF0b3IgKyBgdz0ke2FjdGlvbi5ub21icmVfd3NjcmVlbn0mdXA9JHtKU09OLnN0cmluZ2lmeSh1cCl9JmF1dG9wcm9jZWQ9dHJ1ZWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAvL3JldHJhc28gbGEgaGFiaWxpdGFjacOzbiBwb3JxdWUgYSB2ZWNlcyB0YXJkYSBlbiByZWRpYnVqYXJzZSBsYSBib3RvbmVyYSB5IHB1ZWRlIHRyYWVyIHByb2JsZW1hcyBzaSBkYW4gZG9ibGUgY2xpY2sgXHJcbiAgICAgICAgICAgICAgICAvL3lhIHF1ZSBlamVjdXRhIG51ZXZhbWVudGUgdW5hIGFjY2nDs24gcXVlIHlhIHNlIGVqZWN1dMOzICh5IHRlcm1pbsOzKSBhbnRlc1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBidXR0b24uZGlzYWJsZWQgPSBmYWxzZSwgMzAwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNvbmZpcm1Qcm9taXNlT3B0czogRGlhbG9nT3B0aW9ucyA9IHt9XHJcbiAgICAgICAgaWYgKGFjdGlvbi5jb25maXJtYSkge1xyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZU9wdHMuYXNrRm9yTm9SZXBlYXQgPSAnbm8gdm9sdmVyIGEgbW9zdHJhcic7IC8vbXVlc3RyYSBtZW5zYWplIHBvciBkZWZhdWx0IHBlcm8gYW5kYSBpZ3VhbFxyXG4gICAgICAgICAgICB2YXIgYnV0dG9uc0RlZiA9IFtcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdzw60nLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ25vJywgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZShgY29uZmlybWEgYWNjacOzbiBcIiR7YWNjaW9uU2luR3Vpb25lc31cIj9gLCB7IC4uLmNvbmZpcm1Qcm9taXNlT3B0cywgYnV0dG9uc0RlZiB9KS50aGVuKGFjdGlvbkZ1bik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWN0aW9uRnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1dHRvblxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzQWNjaW9uZXMgPSBhc3luYyAob3B0czogeyBkZXBvdDogbXlPd24uRGVwb3QsIGZpZWxkTmFtZTogc3RyaW5nLCBkaXJlY2Npb246IERpcmVjY2lvbkFjY2lvbiB9KSA9PiB7XHJcbiAgICBsZXQgeyBkZXBvdCwgZmllbGROYW1lLCBkaXJlY2Npb24gfSA9IG9wdHM7XHJcbiAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgdGQuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAoZGVwb3Qucm93Q29udHJvbHMuYWNjaW9uZXMuZ2V0VHlwZWRWYWx1ZSgpIHx8IFtdKVxyXG4gICAgICAgIC5maWx0ZXIoKGFjdGlvbjogRXN0YWRvQWNjaW9uKSA9PiBhY3Rpb24uZWFjY2lvbl9kaXJlY2Npb24gPT0gZGlyZWNjaW9uKVxyXG4gICAgICAgIC5mb3JFYWNoKChhY3Rpb246IEVzdGFkb0FjY2lvbikgPT4gdGQuYXBwZW5kQ2hpbGQoY3JlYXJCb3RvbkFjY2lvbihkZXBvdCwgYWN0aW9uKSkpO1xyXG59XHJcblxyXG52YXIgY3JlYXJTd2l0Y2ggPSAob3B0czogeyByb3VuZD86IGJvb2xlYW4sIGRpc2FibGVkPzogYm9vbGVhbiwgY2hlY2tlZD86IGJvb2xlYW4sIG9uQ2xpY2tGdW46IEZ1bmN0aW9uLCBvbkVyckZ1bj86IEZ1bmN0aW9uIH0pID0+IHtcclxuICAgIHZhciBjaGVja2JveCA9IGh0bWwuaW5wdXQoeyB0eXBlOiAnY2hlY2tib3gnLCBjaGVja2VkOiBvcHRzLmNoZWNrZWQgfSkuY3JlYXRlKCk7XHJcbiAgICBjaGVja2JveC5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgYXdhaXQgb3B0cy5vbkNsaWNrRnVuKClcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBodG1sLmxhYmVsKHsgY2xhc3M6ICdzd2l0Y2gnIH0sIFtcclxuICAgICAgICBjaGVja2JveCxcclxuICAgICAgICBodG1sLnNwYW4oeyBjbGFzczogYHNsaWRlciAke29wdHMucm91bmQgPyAncm91bmQnIDogJyd9YCB9KSxcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG59XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5oYWJpbGl0YXIgPSB7XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH0sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBjcmVhclN3aXRjaCh7XHJcbiAgICAgICAgICAgICAgICByb3VuZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGRlcG90LnJvdy5oYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgb25DbGlja0Z1bjogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQgPSBkZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpLCAzMDApOy8vcGFyYSBxdWUgc2UgdmVhIGVsIGVmZWN0b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0F2YW5jZSA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7IGRlcG90LCBmaWVsZE5hbWUsIGRpcmVjY2lvbjogJ2F2YW5jZScgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc1JldHJvY2VzbyA9IHtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpID0+IHsgfSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7IGRlcG90LCBmaWVsZE5hbWUsIGRpcmVjY2lvbjogJ3JldHJvY2VzbycgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0JsYW5xdWVvID0ge1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHsgZGVwb3QsIGZpZWxkTmFtZSwgZGlyZWNjaW9uOiAnYmxhbnF1ZW8nIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuZGVzdmVyaWZpY2FyID0ge1xyXG4gICAgcHJlcGFyZTogKGRlcG90LCBmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKCdkZXN2ZXJpZmljYXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICBib3Rvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRlcG90LnJvdy5lc3RhZG9fZGVzdGlubykge1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKCdObyBoYXkgdW5hIGFjY2nDs24gZW4gZXN0YWRvc19hY2Npb25lcyBxdWUgZWplY3V0ZSBlbmN1ZXN0YV9ub192ZXJpZmljYXIgZGVzZGUgZWwgZXN0YWRvIGRlIGxhIHRhcmVhIHZlcmlmaWNhZGEuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGRlc3Rpbm8gPSBkZXBvdC5yb3cuZGVzdGlub19fZGVzY19lc3RhZG8gPyBgJHtkZXBvdC5yb3cuZXN0YWRvX2Rlc3Rpbm99IC0gJHtkZXBvdC5yb3cuZGVzdGlub19fZGVzY19lc3RhZG99YCA6IGRlcG90LnJvdy5lc3RhZG9fZGVzdGlubztcclxuICAgICAgICAgICAgdmFyIGlucHV0TW90aXZvID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtbW90aXZvLWRlc3ZlcmlmaWNhcicsIHN0eWxlOiAnd2lkdGg6MTAwJScgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2RhbmdlcicgfSwgW2BFc3TDoSBwb3IgZGVzdmVyaWZpY2FyIGxhIHRhcmVhICR7ZGVwb3Qucm93LnRhcmVhfSBkZSBsYSBlbmN1ZXN0YSAke2RlcG90LnJvdy5lbmN9IHkgdm9sdmVybGEgZGVzZGUgJHtkZXBvdC5yb3cudGFyZWFfYWN0dWFsfS5gXSksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbYEVzdGFkbyBhbCBxdWUgdnVlbHZlIGxhIHRhcmVhICR7ZGVwb3Qucm93LnRhcmVhfTogYCwgaHRtbC5iKGRlc3Rpbm8pXSksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdihbJ01vdGl2bzogJywgaW5wdXRNb3Rpdm9dKSxcclxuICAgICAgICAgICAgXSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBjb25maXJtYSA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdkZXN2ZXJpZmljYXInLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYW5jZWxhcicsIHZhbHVlOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpcm1hKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmVuY3Vlc3RhX2Rlc3ZlcmlmaWNhcl9leGNlcGNpb25hbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBtb3Rpdm86IGlucHV0TW90aXZvLnZhbHVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGRlcG90Lm1hbmFnZXIucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZSh1bmV4cGVjdGVkKGVycikubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVwZGF0ZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSkgPT4geyB9XHJcbn07XHJcblxyXG5mdW5jdGlvblxyXG4gICAgYm90b25DbGllbnRTaWRlRW5HcmlsbGEob3B0czogeyBub21icmVCb3Rvbjogc3RyaW5nLCBsbGFtYWRhOiAoZGVwb3Q6IG15T3duLkRlcG90KSA9PiBQcm9taXNlPGFueT4gfSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbihvcHRzLm5vbWJyZUJvdG9uKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgICAgICAgICB2YXIgcmVzdGF1cmFyQm90b24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSBvcHRzLm5vbWJyZUJvdG9uO1xyXG4gICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvdG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdwcm9jZXNhbmRvLi4uJztcclxuICAgICAgICAgICAgICAgIG9wdHMubGxhbWFkYShkZXBvdCkudGhlbihhc3luYyBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnb2snIGluIHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZCA9IGRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzLmZvcmNlRGlzcGxheURldGFpbEdyaWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM4RjgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gYWNjacOzbiBkZSBncmlsbGE6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIGZpbHRyb1JlYSA9IGNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbJ3JlYSddLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWEgPyBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2FzbzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgIH0pIDogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMucGFzZVRhYmxhUmVpbnRlbnRhciA9IHtcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QsIGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIGlmICghL2RtX2ZvcnBrcmFpel9kZXNjYXJnYXJcXC58cGFzZV90YWJsYV9yZWludGVudGFyXFwuLy50ZXN0KGRlcG90LnJvdy5wYXNlX3RhYmxhIHx8ICcnKSkgcmV0dXJuO1xyXG4gICAgICAgIGJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKHtcclxuICAgICAgICAgICAgbm9tYnJlQm90b246ICdwYXNhciBhIHRhYmxhcycsXHJcbiAgICAgICAgICAgIGxsYW1hZGE6IChkZXBvdDogbXlPd24uRGVwb3QpID0+IG15T3duLmFqYXgucGFzZV90YWJsYV9yZWludGVudGFyKHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pLnByZXBhcmUoZGVwb3QsIGZpZWxkTmFtZSk7XHJcbiAgICB9LFxyXG4gICAgdXBkYXRlOiAoX2RlcG90LCBfZmllbGROYW1lKSA9PiB7IH1cclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFzX2FfYmxhbnF1ZWFyID0gZnVuY3Rpb24gKHJlc3VsdCwgZGl2UmVzdWx0KSB7XHJcbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICAgICAgICB2YXIgbnJvQ2FyZ2EgPSAwO1xyXG4gICAgICAgIHZhciBlbmN1ZXN0YXNEaXY6IG51bGwgfCBIVE1MRGl2RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDIoJ29wZXJhdGl2bzogJyArIHJlc3VsdC5vcGVyYXRpdm8pLmNyZWF0ZSgpKTtcclxuICAgICAgICByZXN1bHQucm93cy5mb3JFYWNoKChlbmN1ZXN0YTphbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbiAhPSBlbmN1ZXN0YS5jYXJnYWRvX2RtKSB7XHJcbiAgICAgICAgICAgICAgICBucm9DYXJnYSsrO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gZW5jdWVzdGEuY2FyZ2Fkb19kbTtcclxuICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChodG1sLmg0KCdjYXJnYSBOwrogJyArIG5yb0NhcmdhLnRvU3RyaW5nKCkpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIGVuY3Vlc3Rhc0RpdiA9IGh0bWwuZGl2KHsgY2xhc3M6ICdlbmN1ZXN0YXMtYS1ibGFucXVlYXInIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy9sYXMgY29waW8gY29uIGxldCBwYXJhIHF1ZSB0b21lIGVsIHZhbG9yIGFjdHVhbCB5IG5vIGVsIMO6bHRpbW9cclxuICAgICAgICAgICAgICAgIGxldCBtaVRva2VuID0gY3VycmVudFRva2VuO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1pTnJvQ2FyZ2EgPSBucm9DYXJnYTtcclxuICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGBib3Rvbi1ibGFucXVlYXItZG0gYm90b24tYWNjaW9uYFxyXG4gICAgICAgICAgICAgICAgfSwgJ2JsYW5xdWVhciBjYXJnYSAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ2RhbmdlcicgfSwgW2BFc3TDoSBwb3IgYmxhbnF1ZWFyIGxhIGNhcmdhICR7bWlOcm9DYXJnYX0uIE5vIHNlIHBvZHLDoSBkZXNjYXJnYXIgZWwgZGlzcG9zaXRpdm8uYF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRGb3J6YXIgPSBodG1sLmlucHV0KHsgY2xhc3M6ICdpbnB1dC1mb3J6YXInIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbJ1NlIHB1ZWRlIGZvcnphciBlbCBibGFucXVlbyAnLCBpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3J6YXIgPSBhd2FpdCBjb25maXJtUHJvbWlzZShtYWluRGl2LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNEZWY6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdmb3J6YXIgYmxhbnF1ZW8nLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ2NhbmNlbGFyIGJsYW5xdWVvJywgdmFsdWU6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3J6YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0Rm9yemFyLnZhbHVlID09ICdmb3J6YXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdEJsYW5xdWVvID0gYXdhaXQgbXkuYWpheC5kbV9ibGFucXVlYXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHJlc3VsdC5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBtaVRva2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEJsYW5xdWVvLmZvckVhY2goKHR0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnNwYW4oe30sIGAke3R0LnJlc3VsdF9ibGFucXVlb31gKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKCdzaSBuZWNlc2l0YSBibGFucXVlYXIgZXNjcmliYSBmb3J6YXIuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChlbmN1ZXN0YXNEaXYpO1xyXG4gICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW5jdWVzdGFzRGl2Py5hcHBlbmRDaGlsZChodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKGBlbmN1ZXN0YTogJHtlbmN1ZXN0YS5lbmN9IGApLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKGB0YXJlYTogICR7ZW5jdWVzdGEudGFyZWF9IGApLFxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG5teU93bi53U2NyZWVucy5wcm9jLnJlc3VsdC5kb3dubG9hZF9zcWwgPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyZXN1bHRdLCB7IHR5cGU6ICd0ZXh0L3NxbCcgfSkpO1xyXG5cclxuICAgIGRpdlJlc3VsdC5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICBjb25zdCBsaW5rID0gaHRtbC5hKCdEZXNjYXJnYXIgYXJjaGl2byBTUUwnKS5jcmVhdGUoKVxyXG4gICAgbGluay5ocmVmID0gdXJsO1xyXG4gICAgbGluay5kb3dubG9hZCA9ICdtaWdyYXJfb3BlcmF0aXZvLnNxbCc7XHJcbiAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQobGluayk7XHJcbn1cclxuXHJcbmNvbnN0IHByZXZpc3VhbGl6YXJFbmN1ZXN0YSA9IChcclxuICAgIHJlc3VsdFRlbTogYW55LFxyXG4gICAgZGl2UmVzdWx0OiBIVE1MRGl2RWxlbWVudCxcclxuICAgIHBhcmFtczoge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTogc3RyaW5nLFxyXG4gICAgICAgIGlnbm9yYUpzb25FbmN1ZXN0YVZhY2lvOiBib29sZWFuXHJcbiAgICAgICAgbGFiZWxBY3Rpb246IHN0cmluZ1xyXG4gICAgfVxyXG4pID0+IHtcclxuICAgIGxldCB7IGNhc29UZW0gfSA9IHJlc3VsdFRlbTtcclxuICAgIGlmICghY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKSB7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7IGlkOiAnbWVuc2FqZS1uby1oYXktanNvbi1lbmN1ZXN0YScgfSwgYG5vIHNlIGVuY29udHLDsyBpbmZvcm1hY2lvbiBjYXJnYWRhIGVuIGxhIGVuY3Vlc3RhICR7Y2Fzb1RlbS5lbmN9YCkuY3JlYXRlKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhc29UZW0uanNvbl9lbmN1ZXN0YSB8fCBwYXJhbXMuaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW8pIHtcclxuICAgICAgICB2YXIgZW5jdWVzdGFEaXYgPSBodG1sLmRpdih7IGlkOiAnYmFja3VwLWRpdicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3RhRGl2KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBteS5hZ3JlZ2FyX2pzb24oZW5jdWVzdGFEaXYsIGNhc29UZW0uanNvbl9lbmN1ZXN0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChodG1sLnAoeyBpZDogJ21lbnNhamUtZXJyb3ItanNvbi1lbmN1ZXN0YScgfSwgYG5vIHNlIHB1ZG8gYWwgcHJldmlzdWFsaXphciBsYSBlbmN1ZXN0YSAke2Nhc29UZW0uZW5jfSBjb3JyZWN0YW1lbnRlLiAke3VuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlfWApLmNyZWF0ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICAgICAgY2xhc3M6IGBib3Rvbi1ibGFucXVlYXItZW5jdWVzdGEtYWNjaW9uYFxyXG4gICAgICAgIH0sIGAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZW5jdWVzdGFgKS5jcmVhdGUoKTtcclxuICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdmFyIG1haW5EaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdkYW5nZXInIH0sIFtgRXN0w6EgcG9yICR7cGFyYW1zLmxhYmVsQWN0aW9ufSBsYSBlbmN1ZXN0YSAke2Nhc29UZW0uZW5jfS4gU2UgcGVyZGVyw6FuIGxvcyBkYXRvcyBkZSBsYSBtaXNtYS5gXSlcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dEZvcnphciA9IGh0bWwuaW5wdXQoeyBjbGFzczogJ2lucHV0LWZvcnphcicgfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoW2BwYXJhICR7cGFyYW1zLmxhYmVsQWN0aW9ufSBlc2NyaWJhIGZvcnphciBgLCBpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uc0RlZjogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdmb3J6YXInLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdjYW5jZWxhcicsIHZhbHVlOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoZm9yemFyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRGb3J6YXIudmFsdWUgPT0gJ2ZvcnphcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgd2FpdEdpZiA9IGh0bWwuaW1nKHsgc3JjOiAnaW1nL2xvYWRpbmcxNi5naWYnIH0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRHaWYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZCh3YWl0R2lmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdEJsYW5xdWVvID0gYXdhaXQgbXkuYWpheFtwYXJhbXMubm9tYnJlUHJvY2VkdXJlXShjYXNvVGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmlubmVySFRNTCA9IHJlc3VsdEJsYW5xdWVvO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShgc2kgbmVjZXNpdGEgJHtwYXJhbXMubGFiZWxBY3Rpb259IGVzY3JpYmEgZm9yemFyLmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvID0gZnVuY3Rpb24gKHJlc3VsdCwgZGl2UmVzdWx0KSB7XHJcbiAgICBwcmV2aXN1YWxpemFyRW5jdWVzdGEocmVzdWx0LCBkaXZSZXN1bHQsIHtcclxuICAgICAgICBub21icmVQcm9jZWR1cmU6ICdlbmN1ZXN0YV9ibGFucXVlYXInLFxyXG4gICAgICAgIGlnbm9yYUpzb25FbmN1ZXN0YVZhY2lvOiBmYWxzZSxcclxuICAgICAgICBsYWJlbEFjdGlvbjogJ2JsYW5xdWVhcidcclxuICAgIH0pXHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFfYV9ib3JyYXIgPSBmdW5jdGlvbiAocmVzdWx0LCBkaXZSZXN1bHQpIHtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTogJ2VuY3Vlc3RhX2JvcnJhcicsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86IHRydWUsXHJcbiAgICAgICAgbGFiZWxBY3Rpb246ICdib3JyYXInXHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheUZsYXQ8VD4oYXJyYXlzOiBUW11bXSk6IFRbXSB7XHJcbiAgICByZXR1cm4gKFtdIGFzIFRbXSkuY29uY2F0LmFwcGx5KFtdLCBhcnJheXMpO1xyXG59XHJcblxyXG5cclxuLypzaW5jcm9uaXphciB5IGNhbWJpbyBkZSBtb2RvIExFR0FDWSAqL1xyXG5hc3luYyBmdW5jdGlvbiBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlczogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgfCBudWxsLCBjYW1iaWFNb2RvRE06IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgbGV0IG1vZG9ETTogTW9kb0RNID0gZm9ybVJlbmRlcmVyLmdldE1vZG9ETSgpIHx8IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgZm9ybVJlbmRlcmVyLnNldE1vZG9ETShtb2RvRE0pO1xyXG4gICAgY29uc3QgaWRwZXJfbG9ndWVhZG9fdGFibGV0ID0gZm9ybVJlbmRlcmVyLmdldElkcGVyTG9ndWVhZG8oKTtcclxuICAgIHZhciBkYXRvcyA9IGF3YWl0IG15LmFqYXguZG1fc2luY3Jvbml6YXIoeyBwZXJzaXN0ZW50ZXMsIG1vZG9fZG06IG1vZG9ETSwgY2FtYmlhX21vZG9fZG06IGNhbWJpYU1vZG9ETSwgaWRwZXJfbG9ndWVhZG9fdGFibGV0IH0pO1xyXG4gICAgYXdhaXQgZm9ybVJlbmRlcmVyLnBlcnNpc3RpckRhdG9zKHsgLi4uZGF0b3MsIG1vZG9BbG1hY2VuYW1pZW50bzogJ2xvY2FsJyB9KTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gYXdhaXQgbXlPd24uYWpheC5vcGVyYXRpdm9fZXN0cnVjdHVyYV9jb21wbGV0YSh7IG9wZXJhdGl2bzogZGF0b3Mub3BlcmF0aXZvLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSk7XHJcbiAgICBhd2FpdCBmb3JtUmVuZGVyZXIucGVyc2lzdGlyRXN0cnVjdHVyYShlc3RydWN0dXJhKTtcclxuICAgIG15LnJlbW92ZUxvY2FsVmFyKEJBQ0tVUFMpO1xyXG4gICAgcmV0dXJuIGRhdG9zO1xyXG59XHJcblxyXG5jb25zdCBtb3N0cmFySW5mb0xvY2FsID0gYXN5bmMgKGRpdkF2aXNvU2luY3JvOiBIVE1MRGl2RWxlbWVudCwgdGl0dWxvOiBzdHJpbmcsIG5yb1NpbmNybzogbnVtYmVyIHwgbnVsbCwgbW9zdHJhckxpbmtIZHI6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IGRhdG9zID0gYXdhaXQgZ2V0Rm9ybVJlbmRlcmVyKCkubGVlckRhdG9zKCk7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gYXdhaXQgZ2V0Rm9ybVJlbmRlcmVyKCkubGVlckVzdHJ1Y3R1cmEoKTtcclxuICAgIGlmIChkYXRvcykge1xyXG4gICAgICAgIGRpdkF2aXNvU2luY3JvLmFwcGVuZChodG1sLmRpdih7IGlkOiAnYXZpc28tc2luY3JvJyB9LCBbXHJcbiAgICAgICAgICAgIG5yb1NpbmNybyA/IGh0bWwucChbXCJOw7ptZXJvIGRlIHNpbmNyb25pemFjacOzbjogXCIsIGh0bWwuYihcIlwiICsgbnJvU2luY3JvLnRvU3RyaW5nKCkpXSkgOiBudWxsLFxyXG4gICAgICAgICAgICBodG1sLmg0KHRpdHVsbyksXHJcbiAgICAgICAgICAgIGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3MuY2FyZ2FzKS5hcnJheSgpLmxlbmd0aCksICcgYXJlYXM6ICcsIGxpa2VBcihkYXRvcy5jYXJnYXMpLmtleXMoKS5qb2luKCcsICcpXSksXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEgPyBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdKS5hcnJheSgpLmxlbmd0aCksICcgJyArIGVzdHJ1Y3R1cmEudWFQcGFsXSkgOiBudWxsLFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbW9zdHJhckxpbmtIZHIgPyBodG1sLmEoeyBocmVmOiAnLi9jYW1wbycgfSwgW2h0bWwuYignSVIgQSBMQSBIT0pBIERFIFJVVEEnKV0pIDogbnVsbFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoeyBjbGFzczogJ2F2aXNvJyB9LCBbXHJcbiAgICAgICAgICAgIGh0bWwuaDQoJ1Npc3RlbWEgdmFjw61vJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSBmb3JtdWxhcmlvcycpLFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgbW9zdHJhckluZm9Nb2RvID0gYXN5bmMgKG1haW5MYXlvdXQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKSB8fCBhd2FpdCBteS5hamF4Lm1vZG9fZG1fZGVmZWN0b19vYnRlbmVyKHt9KTtcclxuICAgIGdldEZvcm1SZW5kZXJlcigpLnNldE1vZG9ETShtb2RvRE0pO1xyXG4gICAgLy9AdHMtaWdub3JlIHNldGVvIHVuIGF0cmlidXRvXHJcbiAgICB2YXIgZGl2QXZpc29Nb2RvOiBIVE1MRGl2RWxlbWVudCA9IGh0bWwuZGl2KHsgY2xhc3M6IFwiaW5mby1tb2RvXCIsIFwibW9kby1kbVwiOiBtb2RvRE0gfSwgYG1vZG8gYWN0dWFsOiAke21vZG9ETX1gKS5jcmVhdGUoKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb01vZG8pXHJcbiAgICByZXR1cm4gbW9kb0RNO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW1iaWFyTW9kb0RNRW5Mb2NhbFN0b3JhZ2UobW9kb0FjdHVhbDogTW9kb0RNKSB7XHJcbiAgICBtb2RvQWN0dWFsID0gbW9kb0FjdHVhbCA9PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnO1xyXG4gICAgZ2V0Rm9ybVJlbmRlcmVyKCkuc2V0TW9kb0RNKG1vZG9BY3R1YWwpO1xyXG59XHJcblxyXG52YXIgcHJvY2VkZXJTaW5jcm9GdW4gPSBhc3luYyAoYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCwgZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50LCBjYW1iaWFNb2RvRE06IGJvb2xlYW4pID0+IHtcclxuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICBidXR0b24uY2xhc3NOYW1lID0gJ2Rvd25sb2FkLWRtLWJ1dHRvbic7XHJcbiAgICBkaXZBdmlzb1NpbmNyby5pbm5lckhUTUwgPSAnJztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcGVyc2lzdGVudGVzID0gYXdhaXQgZ2V0Rm9ybVJlbmRlcmVyKCkubGVlckRhdG9zKCk7XHJcbiAgICAgICAgY29uc3QgZGF0b3MgPSBhd2FpdCBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlcywgY2FtYmlhTW9kb0RNKTtcclxuICAgICAgICBsZXQgbW9kb0RNQWN0dWFsOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKSB8fCBhd2FpdCBteS5hamF4Lm1vZG9fZG1fZGVmZWN0b19vYnRlbmVyKHt9KTtcclxuICAgICAgICBpZiAoY2FtYmlhTW9kb0RNKSB7XHJcbiAgICAgICAgICAgIGNhbWJpYXJNb2RvRE1FbkxvY2FsU3RvcmFnZShtb2RvRE1BY3R1YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBtb3N0cmFySW5mb0xvY2FsKGRpdkF2aXNvU2luY3JvLCAnZGF0b3MgcmVjaWJpZG9zJywgZGF0b3MubnVtX3NpbmNybywgdHJ1ZSk7XHJcbiAgICAgICAgKGF3YWl0IGNyZWFyU3RvcmVGb3JtdWxhcmlvKHt9KSkuZGlzcGF0Y2goZGlzcGF0Y2hlcnMuUkVTRVRfT1BDSU9ORVMoe30pKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGFsZXJ0UHJvbWlzZSh1bmV4cGVjdGVkKGVycikubWVzc2FnZSlcclxuICAgICAgICB0aHJvdyBlcnJcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdkb3dubG9hZC1kbS1idXR0b24tY29udCc7XHJcbiAgICB9XHJcbn1cclxubXlPd24ud1NjcmVlbnMuc2luY3Jvbml6YXJfZG0gPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIGNvbnN0IG1vZG9ETSA9IGF3YWl0IG1vc3RyYXJJbmZvTW9kbyhtYWluTGF5b3V0KTtcclxuICAgIHZhciBwcm9jZWRlckJ1dHRvbiA9IGh0bWwuYnV0dG9uKHsgY2xhc3M6ICdkb3dubG9hZC1kbS1idXR0b24tY29udCcgfSwgJ3NpbmNyb25pemFyJykuY3JlYXRlKCk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJtb2RvLWRtXCIsIG1vZG9ETSk7XHJcbiAgICB2YXIgZGl2QXZpc29TaW5jcm86IEhUTUxEaXZFbGVtZW50ID0gaHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgIGF3YWl0IG1vc3RyYXJJbmZvTG9jYWwobWFpbkxheW91dCBhcyBIVE1MRGl2RWxlbWVudCwgJ2luZm9ybWFjacOzbiBhIHRyYW5zbWl0aXInLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gcHJvY2VkZXJTaW5jcm9GdW4ocHJvY2VkZXJCdXR0b24sIGRpdkF2aXNvU2luY3JvLCBmYWxzZSlcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLmNhbWJpYXJfbW9kb19kbSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgY29uc3QgbW9kb0RNID0gYXdhaXQgbW9zdHJhckluZm9Nb2RvKG1haW5MYXlvdXQpO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oeyBjbGFzczogJ2NhbWJpYXItbW9kby1kbS1idXR0b24nIH0sIGBjYW1iaWFyIGEgbW9kbyAke21vZG9ETSA9PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnfSDih5JgKS5jcmVhdGUoKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzogSFRNTERpdkVsZW1lbnQgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgYXdhaXQgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCBgaW5mb3JtYWNpw7NuIG1vZG8gXCIke21vZG9ETX1cIiBhIHRyYW5zbWl0aXJgLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7fSwgW2BDb25maXJtYSBjYW1iaW8gZGUgbW9kbyBcIiR7bW9kb0RNfVwiIGEgJHttb2RvRE0gPT0gJ3Byb2R1YycgPyAnXCJjYXBhXCInIDogJ1wicHJvZHVjXCInfS5gXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIHZhciBpbnB1dENhbWJpYXJNb2RvID0gaHRtbC5pbnB1dCh7IGNsYXNzOiAnaW5wdXQtY2FtYmlhci1tb2RvJyB9KS5jcmVhdGUoKTtcclxuICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgaHRtbC5kaXYoWydQb3IgZmF2b3IgaW5ncmVzZSBsYSBjb250cmFzZcOxYSAnLCBpbnB1dENhbWJpYXJNb2RvXSlcclxuICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgdmFyIGNhbWJpYXJNb2RvVmFsdWUgPSBhd2FpdCBjb25maXJtUHJvbWlzZShtYWluRGl2LCB7XHJcbiAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgIGJ1dHRvbnNEZWY6IFtcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IGBjYW1iaWFyYCwgdmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IGBjYW5jZWxhcmAsIHZhbHVlOiBmYWxzZSB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY2FtYmlhck1vZG9WYWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRDYW1iaWFyTW9kby52YWx1ZSA9PSAnMTIzNCcpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2VkZXJCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByb2NlZGVyU2luY3JvRnVuKHByb2NlZGVyQnV0dG9uLCBkaXZBdmlzb1NpbmNybywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihgTU9ETyAke2dldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpfSBBQ1RJVkFET2ApLmNyZWF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2VkZXJCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoJ2NvbnRyYXNlw7FhIGluY29ycmVjdGEuJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qIEZJTiBzaW5jcm9uaXphciB5IGNhbWJpbyBkZSBtb2RvIExFR0FDWSAqL1xyXG5cclxuLyogYXl1ZGEgZW4gbMOtbmVhIHBhcmEgdXN1YXJpb3MgKHZlciBkb2NzL2F5dWRhLW9ubGluZS5tZCkgKi9cclxuXHJcbi8vIHRyYWUgbGEgYXl1ZGEgZGVsIHVzdWFyaW8geSBsYSBndWFyZGEgZG9uZGUgbGEgbGVlIGVsIGRpc3Bvc2l0aXZvOyBzaSBubyBwdWVkZSwgdXNhIGxhIMO6bHRpbWEgcXVlIHNlIGd1YXJkw7NcclxuYXN5bmMgZnVuY3Rpb24gdHJhZXJBeXVkYSgpOiBQcm9taXNlPEF5dWRhUGFyYVVzdWFyaW8+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIGF5dWRhOiBBeXVkYVBhcmFVc3VhcmlvID0gYXdhaXQgbXlPd24uYWpheC5heXVkYV90cmFlcih7fSk7XHJcbiAgICAgICAgZ2V0Rm9ybVJlbmRlcmVyKCkucGVyc2lzdGlyQXl1ZGEoYXl1ZGEpO1xyXG4gICAgICAgIHJldHVybiBheXVkYTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHZhciBndWFyZGFkYSA9IGdldEZvcm1SZW5kZXJlcigpLmxlZXJBeXVkYSgpO1xyXG4gICAgICAgIGlmIChndWFyZGFkYSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGd1YXJkYWRhO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvcGNpb25lc0RlbE1lbnVDb25BeXVkYShvcGNpb25lczogQXl1ZGFPcGNpb25NZW51W10sIG1vc3RyYXJUZW1hOiAoaWQ6IHN0cmluZykgPT4gdm9pZCk6IEhUTUxVTGlzdEVsZW1lbnQge1xyXG4gICAgdmFyIGxpc3RhID0gaHRtbC51bCh7IGNsYXNzOiAnYXl1ZGEtbWVudScgfSkuY3JlYXRlKCk7XHJcbiAgICBvcGNpb25lcy5mb3JFYWNoKG9wY2lvbiA9PiB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBodG1sLmxpKFtodG1sLnNwYW4oeyBjbGFzczogJ2F5dWRhLW1lbnUtbGFiZWwnIH0sIG9wY2lvbi5sYWJlbCldKS5jcmVhdGUoKTtcclxuICAgICAgICBpZiAob3BjaW9uLnRlbWEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgdGVtYSA9IG9wY2lvbi50ZW1hO1xyXG4gICAgICAgICAgICB2YXIgZW5sYWNlID0gaHRtbC5hKHsgaHJlZjogJyMnLCBjbGFzczogJ2F5dWRhLW1lbnUtdGVtYScgfSwgJ3ZlciBheXVkYScpLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBlbmxhY2Uub25jbGljayA9IChldmVudCkgPT4geyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBtb3N0cmFyVGVtYSh0ZW1hKTsgfTtcclxuICAgICAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChlbmxhY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BjaW9uLm9wY2lvbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpdGVtLmFwcGVuZENoaWxkKG9wY2lvbmVzRGVsTWVudUNvbkF5dWRhKG9wY2lvbi5vcGNpb25lcywgbW9zdHJhclRlbWEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdGEuYXBwZW5kQ2hpbGQoaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBsaXN0YTtcclxufVxyXG5cclxubXlPd24ud1NjcmVlbnMuYXl1ZGEgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBheXVkYTogQXl1ZGFQYXJhVXN1YXJpbztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgYXl1ZGEgPSBhd2FpdCB0cmFlckF5dWRhKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGh0bWwuZGl2KHsgY2xhc3M6ICdheXVkYScgfSwgJ05vIHNlIHB1ZG8gb2J0ZW5lciBsYSBheXVkYTogJyArIHVuZXhwZWN0ZWQoZXJyKS5tZXNzYWdlKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGluZGljZSA9IGh0bWwudWwoeyBjbGFzczogJ2F5dWRhLWluZGljZScgfSkuY3JlYXRlKCk7XHJcbiAgICB2YXIgY29udGVuaWRvID0gaHRtbC5kaXYoeyBjbGFzczogJ2F5dWRhLWNvbnRlbmlkbycgfSkuY3JlYXRlKCk7XHJcbiAgICB2YXIgZW5sYWNlc0RlbEluZGljZTogTWFwPHN0cmluZywgSFRNTEFuY2hvckVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xyXG4gICAgY29uc3QgTUlfTUVOVSA9ICcnO1xyXG4gICAgdmFyIG1hcmNhckVuSW5kaWNlID0gKGlkOiBzdHJpbmcpID0+IGVubGFjZXNEZWxJbmRpY2UuZm9yRWFjaCgoZW5sYWNlLCBpZEVubGFjZSkgPT4ge1xyXG4gICAgICAgIGVubGFjZS5jbGFzc0xpc3QudG9nZ2xlKCdheXVkYS1zZWxlY2Npb25hZG8nLCBpZEVubGFjZSA9PSBpZCk7XHJcbiAgICB9KTtcclxuICAgIHZhciBtb3N0cmFyTWlNZW51ID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnRlbmlkby5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBjb250ZW5pZG8uYXBwZW5kQ2hpbGQoaHRtbC5oMignUXXDqSBwdWVkbyBoYWNlcicpLmNyZWF0ZSgpKTtcclxuICAgICAgICBjb250ZW5pZG8uYXBwZW5kQ2hpbGQoaHRtbC5wKGBFc3RhcyBzb24gbGFzIG9wY2lvbmVzIGRlbCBtZW7DuiBxdWUgdGllbmUgaGFiaWxpdGFkYXMke2F5dWRhLnJvbCA/IGAgZWwgcm9sICR7YXl1ZGEucm9sfWAgOiAnJ30gZW4gZXN0YSBhcGxpY2FjacOzbiAobW9kbyAke2F5dWRhLm1vZG8udG9Mb3dlckNhc2UoKX0pLmApLmNyZWF0ZSgpKTtcclxuICAgICAgICBjb250ZW5pZG8uYXBwZW5kQ2hpbGQob3BjaW9uZXNEZWxNZW51Q29uQXl1ZGEoYXl1ZGEubWVudSwgbW9zdHJhclRlbWEpKTtcclxuICAgICAgICBtYXJjYXJFbkluZGljZShNSV9NRU5VKTtcclxuICAgIH07XHJcbiAgICB2YXIgbW9zdHJhclRlbWEgPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHZhciB0ZW1hID0gYXl1ZGEudGVtYXMuZmluZCh0ZW1hID0+IHRlbWEuaWQgPT0gaWQpO1xyXG4gICAgICAgIGlmICh0ZW1hID09IG51bGwpIHtcclxuICAgICAgICAgICAgbW9zdHJhck1pTWVudSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRlbmlkby5pbm5lckhUTUwgPSB0ZW1hLmh0bWw7IC8vIGh0bWwgZ2VuZXJhZG8gZW4gZWwgc2Vydmlkb3IgYSBwYXJ0aXIgZGVsIG1hcmtkb3duIGRlIGxhIGF5dWRhIChzaW4gaHRtbCBjcnVkbylcclxuICAgICAgICBjb250ZW5pZG8ucXVlcnlTZWxlY3RvckFsbCgnYScpLmZvckVhY2goZW5sYWNlID0+IHtcclxuICAgICAgICAgICAgdmFyIGRlc3Rpbm8gPSBlbmxhY2UuZ2V0QXR0cmlidXRlKCdocmVmJykgPz8gJyc7XHJcbiAgICAgICAgICAgIGlmIChkZXN0aW5vLnN0YXJ0c1dpdGgoJ2F5dWRhOicpKSB7XHJcbiAgICAgICAgICAgICAgICBlbmxhY2Uub25jbGljayA9IChldmVudCkgPT4geyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBtb3N0cmFyVGVtYShkZXN0aW5vLnNsaWNlKCdheXVkYTonLmxlbmd0aCkpOyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5sYWNlLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWFyY2FyRW5JbmRpY2UoaWQpO1xyXG4gICAgICAgIGNvbnRlbmlkby5zY3JvbGxUb3AgPSAwO1xyXG4gICAgfTtcclxuICAgIHZhciBhZ3JlZ2FyQWxJbmRpY2UgPSAoaWQ6IHN0cmluZywgdGl0dWxvOiBzdHJpbmcsIG1vc3RyYXI6ICgpID0+IHZvaWQpID0+IHtcclxuICAgICAgICB2YXIgZW5sYWNlID0gaHRtbC5hKHsgaHJlZjogJyMnIH0sIHRpdHVsbykuY3JlYXRlKCk7XHJcbiAgICAgICAgZW5sYWNlLm9uY2xpY2sgPSAoZXZlbnQpID0+IHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgbW9zdHJhcigpOyB9O1xyXG4gICAgICAgIGVubGFjZXNEZWxJbmRpY2Uuc2V0KGlkLCBlbmxhY2UpO1xyXG4gICAgICAgIGluZGljZS5hcHBlbmRDaGlsZChodG1sLmxpKFtlbmxhY2VdKS5jcmVhdGUoKSk7XHJcbiAgICB9O1xyXG4gICAgYWdyZWdhckFsSW5kaWNlKE1JX01FTlUsICdRdcOpIHB1ZWRvIGhhY2VyJywgbW9zdHJhck1pTWVudSk7XHJcbiAgICBheXVkYS50ZW1hcy5mb3JFYWNoKHRlbWEgPT4gYWdyZWdhckFsSW5kaWNlKHRlbWEuaWQsIHRlbWEudGl0dWxvLCAoKSA9PiBtb3N0cmFyVGVtYSh0ZW1hLmlkKSkpO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChodG1sLmRpdih7IGNsYXNzOiAnYXl1ZGEnIH0sIFtpbmRpY2UsIGNvbnRlbmlkb10pLmNyZWF0ZSgpKTtcclxuICAgIGlmIChheXVkYS50ZW1hcy5sZW5ndGgpIHtcclxuICAgICAgICBtb3N0cmFyVGVtYShheXVkYS50ZW1hc1swXS5pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vc3RyYXJNaU1lbnUoKTtcclxuICAgIH1cclxufTtcclxuIl19