@esfaenza/es-table 11.2.22-beta7 → 11.2.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/bundles/esfaenza-es-table.umd.js +145 -90
  2. package/bundles/esfaenza-es-table.umd.js.map +1 -1
  3. package/bundles/esfaenza-es-table.umd.min.js +1 -1
  4. package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
  5. package/esfaenza-es-table.metadata.json +1 -1
  6. package/esm2015/lib/components/es-table/es_table.component.js +56 -39
  7. package/esm2015/lib/components/pager/table_pager.component.js +10 -4
  8. package/esm2015/lib/core/handlers/classes/ColumnMetadataHandler.js +25 -12
  9. package/esm2015/lib/core/handlers/classes/DynamicModeHandler.js +2 -1
  10. package/esm2015/lib/core/handlers/classes/ExportHandler.js +3 -1
  11. package/esm2015/lib/core/handlers/classes/HierarchyModeHandler.js +3 -1
  12. package/esm2015/lib/core/handlers/classes/ItemsHandler.js +17 -7
  13. package/esm2015/lib/core/handlers/classes/ReportModeHandler.js +4 -1
  14. package/esm2015/lib/core/handlers/classes/RowGroupingHandler.js +4 -3
  15. package/esm2015/lib/core/handlers/classes/SelectionHandler.js +23 -20
  16. package/esm2015/lib/core/handlers/classes/UtilitiesHandler.js +11 -12
  17. package/esm2015/lib/domain/internals/classes/ThElement.js +2 -0
  18. package/esm2015/lib/domain/internals/index.js +2 -1
  19. package/fesm2015/esfaenza-es-table.js +146 -90
  20. package/fesm2015/esfaenza-es-table.js.map +1 -1
  21. package/lib/components/es-table/es_table.component.d.ts +17 -39
  22. package/lib/components/pager/table_pager.component.d.ts +4 -0
  23. package/lib/core/handlers/classes/ColumnMetadataHandler.d.ts +6 -5
  24. package/lib/core/handlers/classes/DynamicModeHandler.d.ts +1 -0
  25. package/lib/core/handlers/classes/ExportHandler.d.ts +2 -0
  26. package/lib/core/handlers/classes/HierarchyModeHandler.d.ts +2 -0
  27. package/lib/core/handlers/classes/ItemsHandler.d.ts +4 -4
  28. package/lib/core/handlers/classes/ReportModeHandler.d.ts +2 -0
  29. package/lib/core/handlers/classes/RowGroupingHandler.d.ts +3 -3
  30. package/lib/core/handlers/classes/SelectionHandler.d.ts +6 -10
  31. package/lib/core/handlers/classes/UtilitiesHandler.d.ts +5 -4
  32. package/lib/domain/internals/classes/ThElement.d.ts +13 -0
  33. package/lib/domain/internals/index.d.ts +1 -0
  34. package/package.json +5 -5
@@ -1,8 +1,10 @@
1
+ // Modelli
1
2
  import { CacheTriptic } from "../../../domain";
3
+ /** Classe che gestisce le selezioni degli oggetti */
2
4
  export class SelectionHandler {
3
- constructor(est, utilities, rgHandler) {
5
+ /** @ignore Costruttore */
6
+ constructor(est, rgHandler) {
4
7
  this.est = est;
5
- this.utilities = utilities;
6
8
  this.rgHandler = rgHandler;
7
9
  /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via hash*/
8
10
  this.itemsCache = new Map();
@@ -72,7 +74,7 @@ export class SelectionHandler {
72
74
  }
73
75
  // Se tutti gli oggetti di questa pagina sono solezionati allora posso mettere il global check a true
74
76
  // Se sono in situazione di all-select anche metto la global checkbox, nonostante ci possano essere delle esclusioni
75
- this.est.globalCheck = this.est.boundSource.filter(t => t._group || t._item).every(t => t._selected);
77
+ this.est.globalCheck = this.est.boundSource.length > 0 && this.est.boundSource.filter(t => t._group || t._item).every(t => t._selected);
76
78
  this.est.canSelectAll = selectionItem.count > 0 && this.est.SelectAll;
77
79
  // Potrebbe cambiare qualora qualcuno inserisse dati a manazza in modalità Array e desse il refresh manuale alla tabella
78
80
  // Comunque costa 0 quindi mi permetto di refreshare
@@ -284,9 +286,7 @@ export class SelectionHandler {
284
286
  }
285
287
  }
286
288
  }
287
- /**
288
- * Helper per evitare di riscrivere ogni santa volta array.splice(array.indexof(item), 1);
289
- */
289
+ /** Helper per evitare di riscrivere ogni santa volta array.splice(array.indexof(item), 1); */
290
290
  removeItem(item, triptic) {
291
291
  let index = triptic.index_cache.get(item._hash);
292
292
  if (index != null) {
@@ -296,9 +296,7 @@ export class SelectionHandler {
296
296
  }
297
297
  return !!index;
298
298
  }
299
- /**
300
- * Helper per evitare di riscrivere ogni santa volta array.push(item); e la gestione della
301
- */
299
+ /** Helper per evitare di riscrivere ogni santa volta array.push(item); e la gestione della */
302
300
  addItem(item, triptic) {
303
301
  if (triptic.index_cache.get(item._hash) == null) {
304
302
  let i = triptic.array.push(item) - 1;
@@ -436,21 +434,26 @@ export class SelectionHandler {
436
434
  tmpItems.push(selectionItem.items[i]);
437
435
  else
438
436
  itemsRemoved = true;
439
- for (let i = 0; i < selectionItem.groups.length; i++)
440
- if (selectionItem.groups[i] != null)
441
- tmpGrp.push(selectionItem.groups[i]);
442
- else
443
- grpRemoved = true;
444
437
  for (let i = 0; i < selectionItem.exclusions.length; i++)
445
438
  if (selectionItem.exclusions[i] != null)
446
439
  tmpExcl.push(selectionItem.exclusions[i]);
447
440
  else
448
441
  exclRemoved = true;
449
- for (let i = 0; i < selectionItem.group_exclusions.length; i++)
450
- if (selectionItem.group_exclusions[i] != null)
451
- tmpGrpExcl.push(selectionItem.group_exclusions[i]);
452
- else
453
- grpExclRemoved = true;
442
+ // In vecchie versioni dell'AppSearch per cui non vengono deserializzate queste informaizoni potrebbero esserci casini
443
+ if (selectionItem.groups) {
444
+ for (let i = 0; i < selectionItem.groups.length; i++)
445
+ if (selectionItem.groups[i] != null)
446
+ tmpGrp.push(selectionItem.groups[i]);
447
+ else
448
+ grpRemoved = true;
449
+ }
450
+ if (selectionItem.group_exclusions) {
451
+ for (let i = 0; i < selectionItem.group_exclusions.length; i++)
452
+ if (selectionItem.group_exclusions[i] != null)
453
+ tmpGrpExcl.push(selectionItem.group_exclusions[i]);
454
+ else
455
+ grpExclRemoved = true;
456
+ }
454
457
  selectionItem.items = tmpItems;
455
458
  selectionItem.group_exclusions = tmpGrpExcl;
456
459
  selectionItem.exclusions = tmpExcl;
@@ -521,4 +524,4 @@ export class SelectionHandler {
521
524
  this.evaluateSelection(this.est.boundSource, selectionItem);
522
525
  }
523
526
  }
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9jbGFzc2VzL1NlbGVjdGlvbkhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLFlBQVksRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQU0xRSxNQUFNLE9BQU8sZ0JBQWdCO0lBb0J6QixZQUFvQixHQUFxQixFQUFVLFNBQTJCLEVBQVUsU0FBNkI7UUFBakcsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBbEJySCwrSEFBK0g7UUFDdkgsZUFBVSxHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pELGlJQUFpSTtRQUN6SCxnQkFBVyxHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xELHFJQUFxSTtRQUM3SCxvQkFBZSxHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELDJJQUEySTtRQUNuSSwwQkFBcUIsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUU1RCxpSUFBaUk7UUFDekgsaUJBQVksR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxtSUFBbUk7UUFDM0gsa0JBQWEsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2RCx1SUFBdUk7UUFDL0gsc0JBQWlCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0QsNklBQTZJO1FBQ3JJLDRCQUF1QixHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXdELENBQUM7SUFFMUgsc0NBQXNDO0lBQy9CLG9CQUFvQjtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7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QXlCO1FBQzVCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQzNFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQzlCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzFCLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDcEMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFekIsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEQsMEhBQTBIO1FBQzFILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBTZWFyY2gsIENhY2hlVHJpcHRpYywgSXRlbXNTZWxlY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluXCI7XHJcbmltcG9ydCB7IFV0aWxpdGllc0hhbmRsZXIgfSBmcm9tIFwiLi9VdGlsaXRpZXNIYW5kbGVyXCI7XHJcblxyXG5pbXBvcnQgeyBFc1RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvZXMtdGFibGUvZXNfdGFibGUuY29tcG9uZW50XCJcclxuaW1wb3J0IHsgUm93R3JvdXBpbmdIYW5kbGVyIH0gZnJvbSBcIi4vUm93R3JvdXBpbmdIYW5kbGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqaXRlbXMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2gqL1xyXG4gICAgcHJpdmF0ZSBpdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCAqL1xyXG4gICAgcHJpdmF0ZSBleGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cF9leGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKippdGVtcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlKi9cclxuICAgIHByaXZhdGUgaV9pdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UgKi9cclxuICAgIHByaXZhdGUgaV9ncm91cHNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmV4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwX2V4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSB1dGlsaXRpZXM6IFV0aWxpdGllc0hhbmRsZXIsIHByaXZhdGUgcmdIYW5kbGVyOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKiBSaXB1bGlzY2UgbGUgY2FjaGUgZGkgc2VsZXppb25lICovXHJcbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb25DYWNoZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pX2l0ZW1zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZ3JvdXBzQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHF1YWxpIGVsZW1lbnRpIGRldm9ubyBlc3NlcmUgbWFyY2F0aSBjb21lIHNlbGV6aW9uYXRpIG5lbGxhIHZpc3RhIGF0dHVhbGUuIFNpIGJhc2Egc3VsbCdvZ2dldHRvICoqc2VsZWN0aW9uKiogaW50ZXJubyBhbGwnQXBwU2VhcmNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkaSBjdWkgdmFsdXRhcmUgbGEgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0aSBkaSBzZWxlemlvbmUgZGVyaXZhbnRlIGRhbGxhIHZpZXcgbyBkYWxsJ29nZ2V0dG8gcGVyIEFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVNlbGVjdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbkl0ZW0pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25FdmFsdWF0aW9uKGl0ZW1zLCBzZWxlY3Rpb25JdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF6aW9uZSBhZ25vc3RpY2EgZGVsbGEgdmFsdXRhemlvbmUgZGVsbGUgc2VsZXppb25pIGRlZ2xpIG9nZ2V0dGkuIFJpY2hpZWRlIGdsaSBvZ2dldHRpIGRlbGxhIHZpc3RhIGF0dHVhbGUgZSBsJ2l0ZW1TZWxlY3RvclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0byBjb250ZW5lbnRlIGxvIHN0YXRvIGF0dHVhbGUgZGkgc2VsZXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uRXZhbHVhdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBpdG0uX2hhc2g7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBpdG0uX2dyb3VwID8gbnVsbCA6IHRoaXMuZ2V0SXRlbUdyb3VwKGl0bSk7XHJcbiAgICAgICAgICAgIC8vIFJlaWRyYXRvIGxhIGNhY2hlIGRpIHNlbGV6aW9uZSBjb2kgbnVvdmkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiByaXVzY2lyZWkgYSBiZWNjYXJlIGdsaSBpbmRpY2kgZ2l1c3RpXHJcbiAgICAgICAgICAgIC8vIERvcG9kaWNow6kgbGEgdXNvIHBlciBjYWxjb2xhcmUgaXN0YW50YW5lYW1lbnRlIHNlIGdsaSBvZ2dldHRpIHNvbm8gc2VsZXppb25hdGkgbyBub1xyXG4gICAgICAgICAgICB0aGlzLnJlaGlkcmF0ZUNhY2hlKGl0bSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRtLl9pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5hbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKCghdGhpcy5ncm91cHNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkgJiYgdGhpcy5pdGVtc0NhY2hlLmhhcyhoYXNoKSkgfHwgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpIHx8IHRoaXMuaXRlbXNDYWNoZS5oYXMoaGFzaCkgfHwgKHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtR3JvdXApID09ICdpbmNsdWRlZCcgJiYgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0bS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmFsbClcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiB0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRtKSAhPSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSB0aGlzLmdyb3Vwc0NhY2hlLmhhcyhoYXNoKSB8fCAodGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0bSkgPT0gJ2luY2x1ZGVkJyAmJiAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgdHV0dGkgZ2xpIG9nZ2V0dGkgZGkgcXVlc3RhIHBhZ2luYSBzb25vIHNvbGV6aW9uYXRpIGFsbG9yYSBwb3NzbyBtZXR0ZXJlIGlsIGdsb2JhbCBjaGVjayBhIHRydWVcclxuICAgICAgICAvLyBTZSBzb25vIGluIHNpdHVhemlvbmUgZGkgYWxsLXNlbGVjdCBhbmNoZSBtZXR0byBsYSBnbG9iYWwgY2hlY2tib3gsIG5vbm9zdGFudGUgY2kgcG9zc2FubyBlc3NlcmUgZGVsbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENoZWNrID0gdGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgfHwgdC5faXRlbSkuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCk7XHJcbiAgICAgICAgdGhpcy5lc3QuY2FuU2VsZWN0QWxsID0gc2VsZWN0aW9uSXRlbS5jb3VudCA+IDAgJiYgdGhpcy5lc3QuU2VsZWN0QWxsO1xyXG5cclxuICAgICAgICAvLyBQb3RyZWJiZSBjYW1iaWFyZSBxdWFsb3JhIHF1YWxjdW5vIGluc2VyaXNzZSBkYXRpIGEgbWFuYXp6YSBpbiBtb2RhbGl0w6AgQXJyYXkgZSBkZXNzZSBpbCByZWZyZXNoIG1hbnVhbGUgYWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gQ29tdW5xdWUgY29zdGEgMCBxdWluZGkgbWkgcGVybWV0dG8gZGkgcmVmcmVzaGFyZVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgbGV0IHByZXZTZWxlY3RlZCA9IHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cztcclxuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cyAhPSBwcmV2U2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIG9nZ2V0dG8gdHJvdmEgbGEgY2VsbGEgZGkgY2FjaGUgaW4gY3VpIMOoIHJlZ2lzdHJhdG8gZSBhZ2dpb3JuYSBpbCBjb250ZW51dG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkYSBhZ2dpb3JuYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVoaWRyYXRlQ2FjaGUoaXRlbTogYW55KSB7XHJcbiAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5pdGVtc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gZ3J1cHBvIGNvbnRyb2xsYSByaWNvcnNpdmFtZW50ZSBsJ2FsYmVybyBkaSBjdWkgZmEgcGFydGUgc2UgYyfDqCBzdGF0YSB1bmEgaW5jbHVzaW9uZSBvIGVzY2x1c2lvbmUgZGlyZXR0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JwIEdydXBwbyBkYSBjb250cm9sbGFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7J25vbmUnIHwgJ2V4Y2x1ZGVkJyB8ICdpbmNsdWRlZCd9IFxyXG4gICAgICogJ25vbmUnIHNlIG5vbiBjaSBzb25vIGluZm9ybWF6aW9uaSBzdSBpbmNsdXNpb25pIG8gZXNjbHVzaW9uaSBcclxuICAgICAqICdpbmNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGluY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICogJ2V4Y2x1ZGVkJyBzZSBpbCBncnVwcG8gY29udHJvbGxhdG8gw6ggc3RhdG8gZXNjbHVzbyBpbiBtYW5pZXJhIGVzcGxpY2l0YSBkYWxsJ2FsYmVybyBkZWkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyZW50VHJlZVN0YXR1cyhncnA6IGFueSk6ICdub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnIHtcclxuICAgICAgICBpZiAoIWdycClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudEdyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdycC5fcGFyZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRHcm91cClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhwYXJlbnRHcm91cC5faGFzaCkpXHJcbiAgICAgICAgICAgIHJldHVybiAnZXhjbHVkZWQnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2luY2x1ZGVkJztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VHJlZVN0YXR1cyhwYXJlbnRHcm91cCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIHNlbGV6aW9uZSBkaSBOIGVsZW1lbnRpIHV0aWxpenphbmRvIGxhIENhY2hlIGRpIHNlbGV6aW9uZSBlZCBldmVudHVhbG1lbnRlIGFnZ2lvcm5hbmRvIGlsIGNvbmNldHRvIGRpIFwiYWxsIHNlbGVjdGlvblwiXHJcbiAgICAgKlxyXG4gICAgICogVnVuemlvbmEgc2lhIGluIG1vZGFsaXTDoCBBcnJheSBjaGUgaW4gbW9kYWxpdMOgIFZpZXcgU2VtcGxpY2UgbyBWaWV3IEF2YW56YXRhIChjb24gbGUgQ3VzdG9tIENlbGxzKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGEgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbCBWYWxvcmUgZm9yemF0byBkaSBjaGVjayBkYSBhc3NlZ25hcmUgYWdsaSBvZ2dldHRpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbENoZWNrIFZhbG9yZSBkZWwgY2hlY2sgZ2xvYmFsZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBPZ2dldHRvIGRpIHNlbGV6aW9uZSBhZ2dpb3JuYXRvIGNvbiBsZSBpbmZvcm1hemlvbmkgc3VsbCd1bHRpbWEgb3BlcmF6aW9uZSBlZmZldHR1YXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtczogYW55W10sIGZvcmNlZFZhbDogYm9vbGVhbiA9IG51bGwsIGdsb2JhbENoZWNrOiBib29sZWFuID0gbnVsbCk6IEl0ZW1zU2VsZWN0aW9uPGFueT4ge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGkgc2VsZXppb25lIHNpbmdvbGEgZSBkZXZvIHNlbGV6aW9uYXJlIHVuJ29nZ2V0dG8sIHBlciBwcmltYSBjb3NhIGRldm8gZGVzZWxlemlvbmFyZSB0dXR0aSBnbGkgYWx0cmlcclxuICAgICAgICBpZiAodGhpcy5lc3QuU2luZ2xlU2VsZWN0aW9uICYmIGl0ZW1zWzBdPy5fc2VsZWN0ZWQgJiYgIWl0ZW1zWzBdPy5fZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEgJiYgZm9yY2VkVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBcIlRlbnRhdGl2byBkaSBzZWxlemlvbmFyZSBvIGRlc2VsZXppb25hcmUgcGnDuSBkaSB1biBlbGVtZW50byBjb24gU2luZ2xlU2VsZWN0aW9uIGF0dGl2b1wiO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAxICYmIGZvcmNlZFZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzaSA9IHRoaXMuaGFuZGxlSXRlbXNTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gIXQuX2dyb3VwKSwgZmFsc2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbMF0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBsZXQgdG9DaGFuZ2UgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGl0ZW0uX3NlbGVjdGVkICE9IGZvcmNlZFZhbCA6IGdsb2JhbENoZWNrICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSB0aGlzLmVzdC5nbG9iYWxDaGVjayA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgZGV2J2Vzc2VyZSBvdmVycmlkYXRvIGlsIHZhbG9yZSBkaSBjaGVjayBlZmZldHR1byBsJ292ZXJyaWRlIG8gY29sIHZhbG9yZSBmb3J6YXRvIG8gY29sIHZhbG9yZSBnbG9iYWxlXHJcbiAgICAgICAgICAgIGlmICh0b0NoYW5nZSAmJiAhaXRlbS5sb2NrZWQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9IGZvcmNlZFZhbCAhPSBudWxsID8gZm9yY2VkVmFsIDogdGhpcy5lc3QuZ2xvYmFsQ2hlY2s7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBpbCB2YWxvcmUgbm9uIGRldidlc3NlcmUgdmFyaWF0byBlIHZlbmdvIGRhIHVuYSBzZWxlemlvbmUgZ2xvYmFsZSBzZW1wbGljZW1lbnRlIGV2aXRvIGRpIGVmZmV0dHVhcmUgb3BlcmFpem9uaSBpbnV0aWxpLiBMJ2l0ZW0vZ3J1cHBvIMOoIGdpw6AgbmVsbG8gc3RhdG8gZ2l1c3RvXHJcbiAgICAgICAgICAgIGlmICghdG9DaGFuZ2UgJiYgZ2xvYmFsQ2hlY2sgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFsbFNlbGVjdGlvbiA9IHNpLmFsbDtcclxuICAgICAgICAgICAgbGV0IGlzR3JvdXAgPSBpdGVtLl9ncm91cDtcclxuICAgICAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gaXRlbS5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBudWxsLCBhbGxJdGVtcyA9IG51bGwsIHNlbGVjdGVkSXRlbXMgPSBudWxsLCB1bnNlbGVjdGVkSXRlbXMgPSBudWxsLCBhbGxHcm91cHMgPSBudWxsLCBzZWxlY3RlZEdyb3VwcyA9IG51bGwsIHVuc2VsZWN0ZWRHcm91cHMgPSBudWxsLCBwYXJlbnRHcm91cFNlbGVjdGVkID0gbnVsbCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHRzID0gdGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IHB0cyA9PSAnaW5jbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gcHRzID09ICdleGNsdWRlZCc7XHJcbiAgICAgICAgICAgICAgICBhbGxJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB1bnNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgYWxsR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3Vuc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbUdyb3VwID0gdGhpcy5nZXRJdGVtR3JvdXAoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFNlbGVjdGVkID0gaXRlbUdyb3VwID09IG51bGwgPyBudWxsIDogaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6ICFpdGVtR3JvdXAuX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZXN0LkFycmF5R3JvdXBpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBhbGxTZWxlY3Rpb24sIGlzR3JvdXAsIGlzU2VsZWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCBzZWxlY3RlZEdyb3VwcywgdW5zZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkR3JvdXBzLCBhbGxJdGVtcywgYWxsR3JvdXBzLCBwYXJlbnRHcm91cFNlbGVjdGVkLCBwYXJlbnRHcm91cFVuc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgaXRlbUdyb3VwLCBzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXMsIGFsbEl0ZW1zLCBhbGxHcm91cHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW1wb3N0byBpbCBjaGVjayBnbG9iYWxlIGluIGJhc2UgYSBzZSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBzZWxlemlvbmF0aSBvIG1lbm8uXHJcbiAgICAgICAgLy8gRXZpdG8gZGkgZmFyZSBxdWVzdGUgb3BlcmF6aW9uaSBzZSBsYSBzZWxlemlvbmUgZGVyaXZhIHByb3ByaW8gZGFsIGdsb2JhbCBDaGVja1xyXG4gICAgICAgIGlmIChnbG9iYWxDaGVjayA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9ICF0aGlzLmVzdC5ib3VuZFNvdXJjZS5zb21lKHQgPT4gIXQuX3NlbGVjdGVkICYmICF0Ll9zZXApO1xyXG5cclxuICAgICAgICB0aGlzLmZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExvZ2ljYSBzZW1wbGlmaWNhdGEgcmlzcGV0dG8gYWxsJ29yaWdpbmFsZSAqKnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKiogcGVyIGxhdm9yYXJlIGluIHVuYSBtb2RhbGl0w6AgaW4gY3VpIHR1dHRpIGdsaSBlbGVtZW50aSBzb25vIGNhcmljYXRpICgqKkFycmF5R3JvdXBpbmcqKiA9IHRydWUpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNpbXBsZVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBpdG1fZ3JvdXA6IGFueSwgc2VsX2l0bTogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcblxyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5hZGRJdGVtKGVsLCB0cmlwdGljSXRlbSkgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9pdG0pXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cCAmJiBhbGxfaXRtcyAmJiBhbGxfaXRtcy5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEdyb3VwKGl0bV9ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cClcclxuICAgICAgICAgICAgICAgICAgICBpdG1fZ3JvdXAuX3NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHNlbGV6aW9uYXJlIHVuIGdydXBwbyBlLCByaWNvcnNpdmFtZW50ZSwgc2UgdHV0dGkgaSBncnVwcGkgc290dG9zdGFudGkgYWwgcGFyZW50IHNvbm8gc2VsZXppb25hdGksIHNlbGV6aW9uYXJlIGkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gZGEgc2VsZXppb25hcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RHcm91cChncm91cDogYW55KSB7XHJcbiAgICAgICAgZ3JvdXAuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRHcm91cFBhcmVudChncm91cCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCAmJiB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMobnVsbCwgcGFyZW50LCBudWxsLCB0cnVlKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExhIGxvZ2ljYSBkaSBxdWVzdGEgZnVuemlvbmUgw6ggbmF0YSBlc3NlbnppYWxtZW50ZSBkYSBzcGFtIGRpIHRyaWFsICYgZXJyb3IgZWQgw6ggc3RhdGEgdGVzdGF0YSBzb2xvIGZpbm8gYSBkdWUgbGl2ZWxsaSBkaSByYWdncnVwcGFtZW50byxcclxuICAgICAqIHF1YWxzaWFzaSBjb3NhIHZhZGEgb2x0cmUgbm9uIMOoIDEwMCUgZGV0dG8gY2hlIGZ1bnppb25pLi4uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBhbGw6IGJvb2xlYW4sIGdyb3VwOiBib29sZWFuLCBzZWw6IGJvb2xlYW4sIHNlbF9pdG06IGFueVtdLCBzZWxfZ3JwOiBhbnlbXSwgZGVzZWxfaXRtOiBhbnlbXSwgZGVzZWxfZ3JwOiBhbnlbXSwgYWxsX2l0bXM6IGFueVtdLCBhbGxfZ3JwczogYW55W10sIHBhcmVudF9pbmNsOiBib29sZWFuLCBwYXJlbnRfZXhjbDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCB0cmlwdGljR3JvdXAgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdleGNsdXNpb24nLCBiYXNlKTtcclxuICAgICAgICBsZXQgdHJpcHRpY2dycEV4Y2wgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwX2V4Y2x1c2lvbicsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKSBzZWxfaXRtLmZvckVhY2goZWwgPT4gdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9ncnApIHNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNHcm91cCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9pdG1zKSBhbGxfaXRtcy5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljZ3JwRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9pdG0pIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9ncnApIGRlc2VsX2dycC5mb3JFYWNoKGdyID0+IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2dycHMpIGFsbF9ncnBzLmZvckVhY2goZ3IgPT4geyBnci5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwYXJlbnRfZXhjbCA9PSBudWxsICYmIGFsbCkgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudF9leGNsIHx8ICghYWxsICYmIHBhcmVudF9leGNsID09IG51bGwpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkuc3BsaWNlKGFycmF5LmluZGV4b2YoaXRlbSksIDEpO1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogYW55LCB0cmlwdGljPzogQ2FjaGVUcmlwdGljKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5kZWxldGUoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gISFpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkucHVzaChpdGVtKTsgZSBsYSBnZXN0aW9uZSBkZWxsYSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhZGRJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0cmlwdGljLmluZGV4X2NhY2hlLmdldChpdGVtLl9oYXNoKSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gdHJpcHRpYy5hcnJheS5wdXNoKGl0ZW0pIC0gMTtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5zZXQoaXRlbS5faGFzaCwgaXRlbSk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgdHJpdHRpY28gZGkgc2VsZXppb25lLCBjaW/DqCBsJ2FycmF5IGRlZ2xpIG9nZ2V0dGkgY2hlIHNpIHZ1b2xlIG1hbmlwb2xhcmUgZSBsZSBkdWUgY2FjaGUgY29sbGVnYXRlIGFkIGVzc29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsnZ3JvdXAnIHwgJ2l0ZW0nIHwgJ2dyb3VwX2V4Y2x1c2lvbicgfCAnZXhjbHVzaW9uJ30gc3ViamVjdCBPZ2dldHRvIGxvZ2ljbyBkZXNpZGVyYXRvIHN1IGN1aSBlZmZldHR1YXJlIGxlIG9wZXJhemlvbmkgc3VjY2Vzc2l2ZVxyXG4gICAgICogQHBhcmFtIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBiYXNlIFNlbGV0dG9yZSBkaSBiYXNlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtDYWNoZVRyaXB0aWN9IFRyaXR0aWNvIGRpIHNlbGV6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFRyaXB0aWMoc3ViamVjdDogJ2dyb3VwJyB8ICdpdGVtJyB8ICdncm91cF9leGNsdXNpb24nIHwgJ2V4Y2x1c2lvbicsIGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4pOiBDYWNoZVRyaXB0aWMge1xyXG4gICAgICAgIHN3aXRjaCAoc3ViamVjdCkge1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLmdyb3Vwc0NhY2hlLCB0aGlzLmlfZ3JvdXBzQ2FjaGUsIGJhc2UuZ3JvdXBzKTtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLml0ZW1zQ2FjaGUsIHRoaXMuaV9pdGVtc0NhY2hlLCBiYXNlLml0ZW1zKTtcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXBfZXhjbHVzaW9uJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVUcmlwdGljKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLCB0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLCBiYXNlLmdyb3VwX2V4Y2x1c2lvbnMpO1xyXG4gICAgICAgICAgICBjYXNlICdleGNsdXNpb24nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5leGNsdXNpb25zQ2FjaGUsIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUsIGJhc2UuZXhjbHVzaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biBvZ2dldHRvIHJlc3RpdHVpc2NlIGlsIGdydXBwbyBkaSBjdWkgZmEgcGFydGUsIHNlIGVzaXN0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRpIGN1aSB0cm92YXJlIGlsIGdydXBwb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEl0ZW1Hcm91cChpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGl0ZW0uX3RoaXNLZXkpXHJcbiAgICAgICAgaWYgKHBhcmVudClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgZ2xpIG9nZ2V0dGkgY29uIHF1ZWxsYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIENoaWF2ZSBkYSBjZXJjYXJlXHJcbiAgICAgKiBAcGFyYW0geydzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCd9IHN0YXR1cyBTdGF0byBkZWdsaSBlbGVtZW50aSwgc2VsZXppb25hdGkgbyBub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgSW5kaWNhIHNlIGNlcmNhcmUgc29sbyBnbGkgZWxlbWVudGkgZGlyZXR0YW1lbnRlIGNvbGxlZ2F0aSBvIHNlIHByZW5kZXJlIGFuY2hlIHF1ZWxsaSBkZWkgZ3J1cHBpIGZpZ2xpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHthbnlbXX0gT2dnZXR0aSBkaSB0aXBvICoqX2l0ZW0qKiBmYWNlbnRpIGNhcG8gYWxsYSBjaGlhdmUgKipncm91cEtleSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBJdGVtcyhzZWw6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGdyb3VwOiBhbnksIHN0YXR1cz86ICdzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlLCBhbGxiYXNlOiBhbnlbXSA9IG51bGwpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW107XHJcblxyXG4gICAgICAgIGlmIChhbGxiYXNlKVxyXG4gICAgICAgICAgICBpdGVtcyA9IGFsbGJhc2U7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCByaWNvcnNpdmEgcHJlbmRvIGdsaSBvZ2dldHRpIGRpIHR1dHRlIGxlIGNoaWF2aSBzaW1pbGkgY2hlIHRyb3ZvXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgdGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUuZ2V0KGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUuZ2V0KGdyb3VwLl90aGlzS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKHQgPT4gIXN0YXR1cyB8fCAodC5fc2VsZWN0ZWQgJiYgc3RhdHVzID09ICdzZWxlY3RlZCcpIHx8ICghdC5fc2VsZWN0ZWQgJiYgc3RhdHVzID09ICd1bnNlbGVjdGVkJykpO1xyXG5cclxuICAgICAgICAvLyBOb24gdHJvdm8gbmVzc3VuIG9nZ2V0dG8sIHBlcsOyIG1hZ2FyaSBkaSBvZ2dldHRpIG5lIGhvIGFsbCdpbnRlcm5vIGRlbGwnb2dnZXR0byBkaSBzZWxlemlvbmUuIFxyXG4gICAgICAgIC8vIFF1ZXN0byBwdcOyIGVzc2VyZSB2ZXJvIHNvbG8gc2UgTk9OIHNvbm8gaW4gbW9kYWxpdMOgIGFycmF5LCBpbiBjYXNvIGNvbnRyYXJpbyBnbGkgb2dnZXR0aSBsaSBkZXZvIHBlciBmb3J6YSBhdmVyZSB0dXR0aVxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT0gMCB8fCAhc2VsIHx8IHRoaXMuZXN0LmFycmF5TW9kZSlcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG5cclxuICAgICAgICBpZiAoc3RhdHVzID09ICd1bnNlbGVjdGVkJylcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuZXhjbHVzaW9ucy5maWx0ZXIodCA9PiB0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICghcmVjdXJzaXZlICYmIHQuX3RoaXNLZXkgPT0gZ3JvdXAuX3RoaXNLZXkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpKTtcclxuICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gJ3NlbGVjdGVkJylcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuaXRlbXMuZmlsdGVyKHQgPT4gdCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5ID09IGdyb3VwLl90aGlzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgY2hpYXZlIGRpIHVuIGdydXBwbyByZXN0aXR1aXNjZSB0dXR0aSBnbGkgb2dnZXR0aSBjb24gcXVlbGxhIGNoaWF2ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRpIGN1aSBjZXJjYXJlIGlsIHBhcmVudFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55fSBPZ2dldHRvIGRpIHRpcG8gKipfZ3JvdXAqKiByYXBwcmVzZW50YW50ZSBpbCBwYXJlbnQgZGVsICoqZ3JvdXAqKiBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBQYXJlbnQoZ3JvdXA6IGFueSk6IGFueSB7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucmdIYW5kbGVyLnJnR3JvdXBDYWNoZS5nZXQoZ3JvdXAuX3BhcmVudClcclxuICAgICAgICBpZiAocGFyZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgY2hpYXZlIGRpIHVuIGdydXBwbyByZXN0aXR1aXNjZSB0dXR0aSBpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgR3J1cHBvIGNoZSByYXBwcmVzZW50YSBpbCBwYWRyZSBkaSBjdWkgY2VyY2FyZSBpIGZpZ2xpXHJcbiAgICAgKiBAcGFyYW0geydzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCd9IHN0YXR1cyBTdGF0byBkZWkgZ3J1cHBpLCBzZWxlemlvbmF0aSBvIG5vXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY3Vyc2l2ZSBJbmRpY2Egc2UgY2VyY2FyZSBzb2xvIGkgZ3J1cHBpIGRpcmV0dGFtZW50ZSBjb2xsZWdhdGkgbyBzZSBwcmVuZGVyZSBhbmNoZSBxdWVsbGkgZGVpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IE9nZ2V0dGkgZGkgdGlwbyAqKl9ncm91cCoqIGZhY2VudGkgY2FwbyBhbGxhIGNoaWF2ZSAqKmdyb3VwS2V5KipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRHcm91cENoaWxkR3JvdXBzKHNlbDogSXRlbXNTZWxlY3Rpb248YW55PiwgZ3JvdXA6IGFueSwgc3RhdHVzPzogJ3NlbGVjdGVkJyB8ICd1bnNlbGVjdGVkJywgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2UsIGFsbGJhc2U6IGFueVtdID0gbnVsbCkge1xyXG4gICAgICAgIGxldCB0aGlzR3JvdXA6IGFueSA9IHRoaXMucmdIYW5kbGVyLnJnR3JvdXBDYWNoZS5nZXQoZ3JvdXAuX3RoaXNLZXkpO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsYmFzZSlcclxuICAgICAgICAgICAgaXRlbXMgPSBhbGxiYXNlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agcmljb3JzaXZhIHByZW5kbyBnbGkgb2dnZXR0aSBkaSB0dXR0ZSBsZSBjaGlhdmkgc2ltaWxpIGNoZSB0cm92b1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdIYW5kbGVyLnJnQ2hpbGRHcm91cHNDYWNoZS5rZXlzKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi50aGlzLnJnSGFuZGxlci5yZ0NoaWxkR3JvdXBzQ2FjaGUuZ2V0KGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5yZ0hhbmRsZXIucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChncm91cC5fdGhpc0tleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcih0ID0+ICFzdGF0dXMgfHwgKHQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAnc2VsZWN0ZWQnKSB8fCAoIXQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHRyb3ZvIG5lc3N1biBvZ2dldHRvLCBwZXLDsiBtYWdhcmkgZGkgb2dnZXR0aSBuZSBobyBhbGwnaW50ZXJubyBkZWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCAhPSAwIHx8ICFzZWwpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmdyb3VwX2V4Y2x1c2lvbnMuZmlsdGVyKCh0OiBhbnkpID0+IHQgIT0gbnVsbCAmJiAoXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzUm91dGUubGVuZ3RoID09IHRoaXNHcm91cC5fdGhpc1JvdXRlLmxlbmd0aCArIDEgJiYgdC5fdGhpc1JvdXRlLnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuZ3JvdXBzLmZpbHRlcigodDogYW55KSA9PiB0ICE9IG51bGwgJiYgKFxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc1JvdXRlLmxlbmd0aCA9PSB0aGlzR3JvdXAuX3RoaXNSb3V0ZS5sZW5ndGggKyAxICYmIHQuX3RoaXNSb3V0ZS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBGaW5hbGl6emEgbGUgaW5mb3JtYXppb25pIGRpIHNlbGV6aW9uZSBkZWwgKipJdGVtc1NlbGVjdGlvbioqIGNvcnJlbnRlICovXHJcbiAgICBwcml2YXRlIGZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICAvLyBEYXRvIGNoZSBsZSBkZWxldGUgc29ubyBsb2dpY2hlIGRhdG8gY2hlIHRlbmdvIGxhIGNhY2hlIGRlZ2xpIGluZGljaSBkZXZvIHJlbmRlcmxlIGZpc2ljaGVcclxuICAgICAgICBsZXQgdG1wR3JwID0gW10sIHRtcEl0ZW1zID0gW10sIHRtcEV4Y2wgPSBbXSwgdG1wR3JwRXhjbCA9IFtdO1xyXG4gICAgICAgIGxldCBncnBSZW1vdmVkID0gZmFsc2UsIGl0ZW1zUmVtb3ZlZCA9IGZhbHNlLCBleGNsUmVtb3ZlZCA9IGZhbHNlLCBncnBFeGNsUmVtb3ZlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLml0ZW1zW2ldICE9IG51bGwpIHRtcEl0ZW1zLnB1c2goc2VsZWN0aW9uSXRlbS5pdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGVsc2UgaXRlbXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uZ3JvdXBzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cHNbaV0gIT0gbnVsbCkgdG1wR3JwLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cHNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGdycFJlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zW2ldICE9IG51bGwpIHRtcEV4Y2wucHVzaChzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGV4Y2xSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9uc1tpXSAhPSBudWxsKSB0bXBHcnBFeGNsLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zW2ldKTtcclxuICAgICAgICAgICAgZWxzZSBncnBFeGNsUmVtb3ZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSB0bXBJdGVtcztcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnMgPSB0bXBHcnBFeGNsO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9ucyA9IHRtcEV4Y2w7XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cHMgPSB0bXBHcnA7XHJcblxyXG4gICAgICAgIC8vIExlIGNhY2hlIGRlZ2xpIGluZGljaSBwb3RyZWJiZXJvIGF2ZXJlIGJ1Y2hpLCByaXNvbHZvXHJcbiAgICAgICAgaWYgKGdycFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9ncm91cHNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9ncm91cHNDYWNoZSk7XHJcbiAgICAgICAgaWYgKGl0ZW1zUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2l0ZW1zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfaXRlbXNDYWNoZSk7XHJcbiAgICAgICAgaWYgKGV4Y2xSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2V4Y2x1c2lvbnNDYWNoZSk7XHJcbiAgICAgICAgaWYgKGdycEV4Y2xSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZSk7XHJcblxyXG4gICAgICAgIC8vIFBvaSByaXByZW5kbyBhIGZhcmUgdHV0dG8gaW4gbm9ybWFsaXTDoFxyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uY291bnQgPSB0aGlzLmV2YWx1YXRlU2VsZWN0ZWQoKTtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZmF0dG8gc2VsZXppb25lIFwiYWxsXCIgbWEgcG9pIG1pIHNvbm8gbWVzc28gYSB0b2dsaWVyZSB0dXR0aSBnbGkgZWxlbWVudGkgZmlubyBhIHJpbWFuZXJuZSAwIHJlc2V0dG8gbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmNvdW50ID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuYm91bmRTb3VyY2UuZm9yRWFjaCh0ID0+IHQuX3NlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLmFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSBbXTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5pdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IFtdO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJpcHVsaXNjbyBsYSBjYWNoZSBhbHRyaW1lbnRpIG1pIHJpbWFuZSBwaWVuYSBkaSB0dXR0ZSBsZSBlc2NsdXNpb25pXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlIGxhIHBvc3NpYmlsaXTDoCBkaSBmYXJlIFwiU2VsZXppb25hIHR1dHRvXCIgw6ggYWJpbGl0YXRhIGFsbG9yYSBsYSBjb25zaWRlcm8gYXBwZW5hIG1pIHZpZW5lIHNlbGV6aW9uYXRvIHF1YWxjb3NhXHJcbiAgICAgICAgdGhpcy5lc3QuY2FuU2VsZWN0QWxsID0gc2VsZWN0aW9uSXRlbS5jb3VudCA+IDAgJiYgdGhpcy5lc3QuU2VsZWN0QWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb21wYXR0YSB1bmEgY2FjaGUgZGkgaW5kaWNpICovXHJcbiAgICBwcml2YXRlIGNvbXBhY3RJbmRleE1hcChtYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4pOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIGxldCByZXQgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIG1hcC5rZXlzKCkpXHJcbiAgICAgICAgICAgIHJldC5zZXQoa2V5LCBpbmRleCsrKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1dGEgbGEgcXVhbnRpdMOgIGRpIG9nZ2V0dGkgY2hlIHNvbm8gc3RhdGkgc2VsZXppb25hdGkgYWwgdGVybWluZSBkaSB1biBldmVudG8gZGkgc2VsZXppb25lXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge251bWJlcn0gTnVtZXJvIGRpIG9nZ2V0dGkgc2VsZXppb25hdGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZVNlbGVjdGVkKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHNpID0gKHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pPy5zZWxlY3Rpb24gfHwgdGhpcy5lc3QuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG5cclxuICAgICAgICBsZXQgZXhjQnlHcm91cCA9IHNpLmdyb3VwX2V4Y2x1c2lvbnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5jb3VudCwgMCk7XHJcbiAgICAgICAgbGV0IGluY0J5R3JvdXAgPSBzaS5ncm91cHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5jb3VudCwgMCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cyA9IChzaS5hbGwgPyB0aGlzLmVzdC5CYXNlSXRlbXNDb3VudCA6IGluY0J5R3JvdXApIC0gZXhjQnlHcm91cCArIHNpLml0ZW1zLmxlbmd0aCAtIHNpLmV4Y2x1c2lvbnMubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdlc3Rpc2NlIGlsIGNvbWFuZG8gZGkgXCJTZWxlemlvbmEgdHV0dG8gaW4gdHV0dGUgbGUgcGFnaW5lXCIgbyBpbCBzdW8gY29udHJhcmlvLCBjaW/DqCBcIlJlaW1wb3N0YSBzZWxlemlvbmVcIiAqL1xyXG4gICAgcHVibGljIHNlbGVjdEFsbE9yUmVzZXRTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGlvbkl0ZW0gPSB0aGlzLmVzdC5WaWV3LnNlbGVjdGlvbiB8fCB0aGlzLmVzdC5hcnJheW1vZGVTZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uYWxsID0gIXNlbGVjdGlvbkl0ZW0uYWxsO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gW107XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zID0gW107XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBSaXB1bGlzY28gZ2xpIHN0YXRpIFVJIGRpIHNlbGV6aW9uZSBnbG9iYWxlIHNlIGwnaG8gZGlzYXR0aXZhdGFcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbkl0ZW0uYWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmNhblNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtKTtcclxuXHJcbiAgICAgICAgdGhpcy5lc3Qub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uSXRlbSk7XHJcblxyXG4gICAgICAgIC8vIERvcG8gYXZlciByZXNldHRhdG8gZGlyZXR0YW1lbnRlIGlsIHNvbG8gb2dnZXR0byB0aGlzLlZpZXcuc2VsZWN0aW9uIGRldm8gYW5jaGUgcmlhbGxpbmVhcmUgYSB0dXR0aSBnbGkgb2dnZXR0aSBiaW5kYXRpXHJcbiAgICAgICAgdGhpcy5ldmFsdWF0ZVNlbGVjdGlvbih0aGlzLmVzdC5ib3VuZFNvdXJjZSwgc2VsZWN0aW9uSXRlbSk7XHJcbiAgICB9XHJcbn0iXX0=
527
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9jbGFzc2VzL1NlbGVjdGlvbkhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBYSxZQUFZLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFRMUUscURBQXFEO0FBQ3JELE1BQU0sT0FBTyxnQkFBZ0I7SUFvQnpCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTZCO1FBQTVELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFuQmhGLCtIQUErSDtRQUN2SCxlQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsaUlBQWlJO1FBQ3pILGdCQUFXLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUlBQXFJO1FBQzdILG9CQUFlLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsMklBQTJJO1FBQ25JLDBCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTVELGlJQUFpSTtRQUN6SCxpQkFBWSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELG1JQUFtSTtRQUMzSCxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELHVJQUF1STtRQUMvSCxzQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCw2SUFBNkk7UUFDckksNEJBQXVCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFHbUIsQ0FBQztJQUVyRixzQ0FBc0M7SUFDL0Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztR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QUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDakksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUhBQWlIO0lBQzFHLHlCQUF5QjtRQUM1QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUMzRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUN2QyxhQUFhLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUM5QixhQUFhLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUMxQixhQUFhLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRXpCLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELDBIQUEwSDtRQUMxSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBTZWFyY2gsIENhY2hlVHJpcHRpYywgSXRlbXNTZWxlY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluXCI7XHJcblxyXG4vLyBDb21wb25lbnRpXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLy8gSGFuZGxlcnNcclxuaW1wb3J0IHsgUm93R3JvdXBpbmdIYW5kbGVyIH0gZnJvbSBcIi4uL1wiO1xyXG5cclxuLyoqIENsYXNzZSBjaGUgZ2VzdGlzY2UgbGUgc2VsZXppb25pIGRlZ2xpIG9nZ2V0dGkgKi9cclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkhhbmRsZXIge1xyXG5cclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKml0ZW1zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoKi9cclxuICAgIHByaXZhdGUgaXRlbXNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCAqL1xyXG4gICAgcHJpdmF0ZSBncm91cHNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmV4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2ggKi9cclxuICAgIHByaXZhdGUgZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBfZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCAqL1xyXG4gICAgcHJpdmF0ZSBncm91cF9leGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqaXRlbXMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSovXHJcbiAgICBwcml2YXRlIGlfaXRlbXNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlICovXHJcbiAgICBwcml2YXRlIGlfZ3JvdXBzQ2FjaGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipleGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UgKi9cclxuICAgIHByaXZhdGUgaV9leGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cF9leGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UgKi9cclxuICAgIHByaXZhdGUgaV9ncm91cF9leGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZXN0OiBFc1RhYmxlQ29tcG9uZW50LCBwcml2YXRlIHJnSGFuZGxlcjogUm93R3JvdXBpbmdIYW5kbGVyKSB7IH1cclxuXHJcbiAgICAvKiogUmlwdWxpc2NlIGxlIGNhY2hlIGRpIHNlbGV6aW9uZSAqL1xyXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uQ2FjaGVzKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBzQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmV4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaV9pdGVtc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pX2dyb3Vwc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuaV9ncm91cF9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbHV0YSBxdWFsaSBlbGVtZW50aSBkZXZvbm8gZXNzZXJlIG1hcmNhdGkgY29tZSBzZWxlemlvbmF0aSBuZWxsYSB2aXN0YSBhdHR1YWxlLiBTaSBiYXNhIHN1bGwnb2dnZXR0byAqKnNlbGVjdGlvbioqIGludGVybm8gYWxsJ0FwcFNlYXJjaFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIHZhbHV0YXJlIGxhIHNlbGV6aW9uZVxyXG4gICAgICogQHBhcmFtIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBzZWxlY3Rpb25JdGVtIE9nZ2V0dGkgZGkgc2VsZXppb25lIGRlcml2YW50ZSBkYWxsYSB2aWV3IG8gZGFsbCdvZ2dldHRvIHBlciBBcnJheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVTZWxlY3Rpb24oaXRlbXM6IGFueVtdLCBzZWxlY3Rpb25JdGVtOiBJdGVtc1NlbGVjdGlvbjxhbnk+KSB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3Rpb25JdGVtKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uRXZhbHVhdGlvbihpdGVtcywgc2VsZWN0aW9uSXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhemlvbmUgYWdub3N0aWNhIGRlbGxhIHZhbHV0YXppb25lIGRlbGxlIHNlbGV6aW9uaSBkZWdsaSBvZ2dldHRpLiBSaWNoaWVkZSBnbGkgb2dnZXR0aSBkZWxsYSB2aXN0YSBhdHR1YWxlIGUgbCdpdGVtU2VsZWN0b3JcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRpIGN1aSBhZ2dpb3JuYXJlIGxvIHN0YXRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICogQHBhcmFtIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBzZWxlY3Rpb25JdGVtIE9nZ2V0dG8gY29udGVuZW50ZSBsbyBzdGF0byBhdHR1YWxlIGRpIHNlbGV6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbkV2YWx1YXRpb24oaXRlbXM6IGFueVtdLCBzZWxlY3Rpb25JdGVtOiBJdGVtc1NlbGVjdGlvbjxhbnk+KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGxldCBoYXNoID0gaXRtLl9oYXNoO1xyXG4gICAgICAgICAgICBsZXQgaXRlbUdyb3VwID0gaXRtLl9ncm91cCA/IG51bGwgOiB0aGlzLmdldEl0ZW1Hcm91cChpdG0pO1xyXG4gICAgICAgICAgICAvLyBSZWlkcmF0byBsYSBjYWNoZSBkaSBzZWxlemlvbmUgY29pIG51b3ZpIG9nZ2V0dGkgYWx0cmltZW50aSBub24gcml1c2NpcmVpIGEgYmVjY2FyZSBnbGkgaW5kaWNpIGdpdXN0aVxyXG4gICAgICAgICAgICAvLyBEb3BvZGljaMOpIGxhIHVzbyBwZXIgY2FsY29sYXJlIGlzdGFudGFuZWFtZW50ZSBzZSBnbGkgb2dnZXR0aSBzb25vIHNlbGV6aW9uYXRpIG8gbm9cclxuICAgICAgICAgICAgdGhpcy5yZWhpZHJhdGVDYWNoZShpdG0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0bS5faXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uYWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSAhdGhpcy5leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpICYmICgoIXRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpICYmIHRoaXMuaXRlbXNDYWNoZS5oYXMoaGFzaCkpIHx8ICF0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSAhdGhpcy5leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpICYmICh0aGlzLmdyb3Vwc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSB8fCB0aGlzLml0ZW1zQ2FjaGUuaGFzKGhhc2gpIHx8ICh0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRlbUdyb3VwKSA9PSAnaW5jbHVkZWQnICYmICF0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpdG0uX2dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5hbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgdGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0bSkgIT0gJ2V4Y2x1ZGVkJztcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gdGhpcy5ncm91cHNDYWNoZS5oYXMoaGFzaCkgfHwgKHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdG0pID09ICdpbmNsdWRlZCcgJiYgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlIHR1dHRpIGdsaSBvZ2dldHRpIGRpIHF1ZXN0YSBwYWdpbmEgc29ubyBzb2xlemlvbmF0aSBhbGxvcmEgcG9zc28gbWV0dGVyZSBpbCBnbG9iYWwgY2hlY2sgYSB0cnVlXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBzaXR1YXppb25lIGRpIGFsbC1zZWxlY3QgYW5jaGUgbWV0dG8gbGEgZ2xvYmFsIGNoZWNrYm94LCBub25vc3RhbnRlIGNpIHBvc3Nhbm8gZXNzZXJlIGRlbGxlIGVzY2x1c2lvbmlcclxuICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9IHRoaXMuZXN0LmJvdW5kU291cmNlLmxlbmd0aCA+IDAgJiYgdGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgfHwgdC5faXRlbSkuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCk7XHJcbiAgICAgICAgdGhpcy5lc3QuY2FuU2VsZWN0QWxsID0gc2VsZWN0aW9uSXRlbS5jb3VudCA+IDAgJiYgdGhpcy5lc3QuU2VsZWN0QWxsO1xyXG5cclxuICAgICAgICAvLyBQb3RyZWJiZSBjYW1iaWFyZSBxdWFsb3JhIHF1YWxjdW5vIGluc2VyaXNzZSBkYXRpIGEgbWFuYXp6YSBpbiBtb2RhbGl0w6AgQXJyYXkgZSBkZXNzZSBpbCByZWZyZXNoIG1hbnVhbGUgYWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gQ29tdW5xdWUgY29zdGEgMCBxdWluZGkgbWkgcGVybWV0dG8gZGkgcmVmcmVzaGFyZVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgbGV0IHByZXZTZWxlY3RlZCA9IHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cztcclxuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cyAhPSBwcmV2U2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIG9nZ2V0dG8gdHJvdmEgbGEgY2VsbGEgZGkgY2FjaGUgaW4gY3VpIMOoIHJlZ2lzdHJhdG8gZSBhZ2dpb3JuYSBpbCBjb250ZW51dG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkYSBhZ2dpb3JuYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVoaWRyYXRlQ2FjaGUoaXRlbTogYW55KSB7XHJcbiAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5pdGVtc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gZ3J1cHBvIGNvbnRyb2xsYSByaWNvcnNpdmFtZW50ZSBsJ2FsYmVybyBkaSBjdWkgZmEgcGFydGUgc2UgYyfDqCBzdGF0YSB1bmEgaW5jbHVzaW9uZSBvIGVzY2x1c2lvbmUgZGlyZXR0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JwIEdydXBwbyBkYSBjb250cm9sbGFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7J25vbmUnIHwgJ2V4Y2x1ZGVkJyB8ICdpbmNsdWRlZCd9IFxyXG4gICAgICogJ25vbmUnIHNlIG5vbiBjaSBzb25vIGluZm9ybWF6aW9uaSBzdSBpbmNsdXNpb25pIG8gZXNjbHVzaW9uaSBcclxuICAgICAqICdpbmNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGluY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICogJ2V4Y2x1ZGVkJyBzZSBpbCBncnVwcG8gY29udHJvbGxhdG8gw6ggc3RhdG8gZXNjbHVzbyBpbiBtYW5pZXJhIGVzcGxpY2l0YSBkYWxsJ2FsYmVybyBkZWkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyZW50VHJlZVN0YXR1cyhncnA6IGFueSk6ICdub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnIHtcclxuICAgICAgICBpZiAoIWdycClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudEdyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdycC5fcGFyZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRHcm91cClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhwYXJlbnRHcm91cC5faGFzaCkpXHJcbiAgICAgICAgICAgIHJldHVybiAnZXhjbHVkZWQnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2luY2x1ZGVkJztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VHJlZVN0YXR1cyhwYXJlbnRHcm91cCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIHNlbGV6aW9uZSBkaSBOIGVsZW1lbnRpIHV0aWxpenphbmRvIGxhIENhY2hlIGRpIHNlbGV6aW9uZSBlZCBldmVudHVhbG1lbnRlIGFnZ2lvcm5hbmRvIGlsIGNvbmNldHRvIGRpIFwiYWxsIHNlbGVjdGlvblwiXHJcbiAgICAgKlxyXG4gICAgICogVnVuemlvbmEgc2lhIGluIG1vZGFsaXTDoCBBcnJheSBjaGUgaW4gbW9kYWxpdMOgIFZpZXcgU2VtcGxpY2UgbyBWaWV3IEF2YW56YXRhIChjb24gbGUgQ3VzdG9tIENlbGxzKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGEgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbCBWYWxvcmUgZm9yemF0byBkaSBjaGVjayBkYSBhc3NlZ25hcmUgYWdsaSBvZ2dldHRpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbENoZWNrIFZhbG9yZSBkZWwgY2hlY2sgZ2xvYmFsZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBPZ2dldHRvIGRpIHNlbGV6aW9uZSBhZ2dpb3JuYXRvIGNvbiBsZSBpbmZvcm1hemlvbmkgc3VsbCd1bHRpbWEgb3BlcmF6aW9uZSBlZmZldHR1YXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtczogYW55W10sIGZvcmNlZFZhbDogYm9vbGVhbiA9IG51bGwsIGdsb2JhbENoZWNrOiBib29sZWFuID0gbnVsbCk6IEl0ZW1zU2VsZWN0aW9uPGFueT4ge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGkgc2VsZXppb25lIHNpbmdvbGEgZSBkZXZvIHNlbGV6aW9uYXJlIHVuJ29nZ2V0dG8sIHBlciBwcmltYSBjb3NhIGRldm8gZGVzZWxlemlvbmFyZSB0dXR0aSBnbGkgYWx0cmlcclxuICAgICAgICBpZiAodGhpcy5lc3QuU2luZ2xlU2VsZWN0aW9uICYmIGl0ZW1zWzBdPy5fc2VsZWN0ZWQgJiYgIWl0ZW1zWzBdPy5fZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEgJiYgZm9yY2VkVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBcIlRlbnRhdGl2byBkaSBzZWxlemlvbmFyZSBvIGRlc2VsZXppb25hcmUgcGnDuSBkaSB1biBlbGVtZW50byBjb24gU2luZ2xlU2VsZWN0aW9uIGF0dGl2b1wiO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAxICYmIGZvcmNlZFZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzaSA9IHRoaXMuaGFuZGxlSXRlbXNTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gIXQuX2dyb3VwKSwgZmFsc2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbMF0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBsZXQgdG9DaGFuZ2UgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGl0ZW0uX3NlbGVjdGVkICE9IGZvcmNlZFZhbCA6IGdsb2JhbENoZWNrICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSB0aGlzLmVzdC5nbG9iYWxDaGVjayA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgZGV2J2Vzc2VyZSBvdmVycmlkYXRvIGlsIHZhbG9yZSBkaSBjaGVjayBlZmZldHR1byBsJ292ZXJyaWRlIG8gY29sIHZhbG9yZSBmb3J6YXRvIG8gY29sIHZhbG9yZSBnbG9iYWxlXHJcbiAgICAgICAgICAgIGlmICh0b0NoYW5nZSAmJiAhaXRlbS5sb2NrZWQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9IGZvcmNlZFZhbCAhPSBudWxsID8gZm9yY2VkVmFsIDogdGhpcy5lc3QuZ2xvYmFsQ2hlY2s7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBpbCB2YWxvcmUgbm9uIGRldidlc3NlcmUgdmFyaWF0byBlIHZlbmdvIGRhIHVuYSBzZWxlemlvbmUgZ2xvYmFsZSBzZW1wbGljZW1lbnRlIGV2aXRvIGRpIGVmZmV0dHVhcmUgb3BlcmFpem9uaSBpbnV0aWxpLiBMJ2l0ZW0vZ3J1cHBvIMOoIGdpw6AgbmVsbG8gc3RhdG8gZ2l1c3RvXHJcbiAgICAgICAgICAgIGlmICghdG9DaGFuZ2UgJiYgZ2xvYmFsQ2hlY2sgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFsbFNlbGVjdGlvbiA9IHNpLmFsbDtcclxuICAgICAgICAgICAgbGV0IGlzR3JvdXAgPSBpdGVtLl9ncm91cDtcclxuICAgICAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gaXRlbS5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBudWxsLCBhbGxJdGVtcyA9IG51bGwsIHNlbGVjdGVkSXRlbXMgPSBudWxsLCB1bnNlbGVjdGVkSXRlbXMgPSBudWxsLCBhbGxHcm91cHMgPSBudWxsLCBzZWxlY3RlZEdyb3VwcyA9IG51bGwsIHVuc2VsZWN0ZWRHcm91cHMgPSBudWxsLCBwYXJlbnRHcm91cFNlbGVjdGVkID0gbnVsbCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHRzID0gdGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IHB0cyA9PSAnaW5jbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gcHRzID09ICdleGNsdWRlZCc7XHJcbiAgICAgICAgICAgICAgICBhbGxJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB1bnNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgYWxsR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3Vuc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbUdyb3VwID0gdGhpcy5nZXRJdGVtR3JvdXAoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFNlbGVjdGVkID0gaXRlbUdyb3VwID09IG51bGwgPyBudWxsIDogaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6ICFpdGVtR3JvdXAuX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZXN0LkFycmF5R3JvdXBpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBhbGxTZWxlY3Rpb24sIGlzR3JvdXAsIGlzU2VsZWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCBzZWxlY3RlZEdyb3VwcywgdW5zZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkR3JvdXBzLCBhbGxJdGVtcywgYWxsR3JvdXBzLCBwYXJlbnRHcm91cFNlbGVjdGVkLCBwYXJlbnRHcm91cFVuc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgaXRlbUdyb3VwLCBzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXMsIGFsbEl0ZW1zLCBhbGxHcm91cHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW1wb3N0byBpbCBjaGVjayBnbG9iYWxlIGluIGJhc2UgYSBzZSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBzZWxlemlvbmF0aSBvIG1lbm8uXHJcbiAgICAgICAgLy8gRXZpdG8gZGkgZmFyZSBxdWVzdGUgb3BlcmF6aW9uaSBzZSBsYSBzZWxlemlvbmUgZGVyaXZhIHByb3ByaW8gZGFsIGdsb2JhbCBDaGVja1xyXG4gICAgICAgIGlmIChnbG9iYWxDaGVjayA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9ICF0aGlzLmVzdC5ib3VuZFNvdXJjZS5zb21lKHQgPT4gIXQuX3NlbGVjdGVkICYmICF0Ll9zZXApO1xyXG5cclxuICAgICAgICB0aGlzLmZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExvZ2ljYSBzZW1wbGlmaWNhdGEgcmlzcGV0dG8gYWxsJ29yaWdpbmFsZSAqKnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKiogcGVyIGxhdm9yYXJlIGluIHVuYSBtb2RhbGl0w6AgaW4gY3VpIHR1dHRpIGdsaSBlbGVtZW50aSBzb25vIGNhcmljYXRpICgqKkFycmF5R3JvdXBpbmcqKiA9IHRydWUpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNpbXBsZVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBpdG1fZ3JvdXA6IGFueSwgc2VsX2l0bTogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcblxyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5hZGRJdGVtKGVsLCB0cmlwdGljSXRlbSkgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9pdG0pXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cCAmJiBhbGxfaXRtcyAmJiBhbGxfaXRtcy5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEdyb3VwKGl0bV9ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cClcclxuICAgICAgICAgICAgICAgICAgICBpdG1fZ3JvdXAuX3NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHNlbGV6aW9uYXJlIHVuIGdydXBwbyBlLCByaWNvcnNpdmFtZW50ZSwgc2UgdHV0dGkgaSBncnVwcGkgc290dG9zdGFudGkgYWwgcGFyZW50IHNvbm8gc2VsZXppb25hdGksIHNlbGV6aW9uYXJlIGkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gZGEgc2VsZXppb25hcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RHcm91cChncm91cDogYW55KSB7XHJcbiAgICAgICAgZ3JvdXAuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRHcm91cFBhcmVudChncm91cCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCAmJiB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMobnVsbCwgcGFyZW50LCBudWxsLCB0cnVlKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExhIGxvZ2ljYSBkaSBxdWVzdGEgZnVuemlvbmUgw6ggbmF0YSBlc3NlbnppYWxtZW50ZSBkYSBzcGFtIGRpIHRyaWFsICYgZXJyb3IgZWQgw6ggc3RhdGEgdGVzdGF0YSBzb2xvIGZpbm8gYSBkdWUgbGl2ZWxsaSBkaSByYWdncnVwcGFtZW50byxcclxuICAgICAqIHF1YWxzaWFzaSBjb3NhIHZhZGEgb2x0cmUgbm9uIMOoIDEwMCUgZGV0dG8gY2hlIGZ1bnppb25pLi4uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBhbGw6IGJvb2xlYW4sIGdyb3VwOiBib29sZWFuLCBzZWw6IGJvb2xlYW4sIHNlbF9pdG06IGFueVtdLCBzZWxfZ3JwOiBhbnlbXSwgZGVzZWxfaXRtOiBhbnlbXSwgZGVzZWxfZ3JwOiBhbnlbXSwgYWxsX2l0bXM6IGFueVtdLCBhbGxfZ3JwczogYW55W10sIHBhcmVudF9pbmNsOiBib29sZWFuLCBwYXJlbnRfZXhjbDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCB0cmlwdGljR3JvdXAgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdleGNsdXNpb24nLCBiYXNlKTtcclxuICAgICAgICBsZXQgdHJpcHRpY2dycEV4Y2wgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwX2V4Y2x1c2lvbicsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKSBzZWxfaXRtLmZvckVhY2goZWwgPT4gdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9ncnApIHNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNHcm91cCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9pdG1zKSBhbGxfaXRtcy5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljZ3JwRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9pdG0pIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9ncnApIGRlc2VsX2dycC5mb3JFYWNoKGdyID0+IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2dycHMpIGFsbF9ncnBzLmZvckVhY2goZ3IgPT4geyBnci5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwYXJlbnRfZXhjbCA9PSBudWxsICYmIGFsbCkgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudF9leGNsIHx8ICghYWxsICYmIHBhcmVudF9leGNsID09IG51bGwpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBldml0YXJlIGRpIHJpc2NyaXZlcmUgb2duaSBzYW50YSB2b2x0YSBhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhvZihpdGVtKSwgMSk7ICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogYW55LCB0cmlwdGljPzogQ2FjaGVUcmlwdGljKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5kZWxldGUoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gISFpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBldml0YXJlIGRpIHJpc2NyaXZlcmUgb2duaSBzYW50YSB2b2x0YSBhcnJheS5wdXNoKGl0ZW0pOyBlIGxhIGdlc3Rpb25lIGRlbGxhICAqL1xyXG4gICAgcHJpdmF0ZSBhZGRJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0cmlwdGljLmluZGV4X2NhY2hlLmdldChpdGVtLl9oYXNoKSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gdHJpcHRpYy5hcnJheS5wdXNoKGl0ZW0pIC0gMTtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5zZXQoaXRlbS5faGFzaCwgaXRlbSk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgdHJpdHRpY28gZGkgc2VsZXppb25lLCBjaW/DqCBsJ2FycmF5IGRlZ2xpIG9nZ2V0dGkgY2hlIHNpIHZ1b2xlIG1hbmlwb2xhcmUgZSBsZSBkdWUgY2FjaGUgY29sbGVnYXRlIGFkIGVzc29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsnZ3JvdXAnIHwgJ2l0ZW0nIHwgJ2dyb3VwX2V4Y2x1c2lvbicgfCAnZXhjbHVzaW9uJ30gc3ViamVjdCBPZ2dldHRvIGxvZ2ljbyBkZXNpZGVyYXRvIHN1IGN1aSBlZmZldHR1YXJlIGxlIG9wZXJhemlvbmkgc3VjY2Vzc2l2ZVxyXG4gICAgICogQHBhcmFtIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBiYXNlIFNlbGV0dG9yZSBkaSBiYXNlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtDYWNoZVRyaXB0aWN9IFRyaXR0aWNvIGRpIHNlbGV6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFRyaXB0aWMoc3ViamVjdDogJ2dyb3VwJyB8ICdpdGVtJyB8ICdncm91cF9leGNsdXNpb24nIHwgJ2V4Y2x1c2lvbicsIGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4pOiBDYWNoZVRyaXB0aWMge1xyXG4gICAgICAgIHN3aXRjaCAoc3ViamVjdCkge1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLmdyb3Vwc0NhY2hlLCB0aGlzLmlfZ3JvdXBzQ2FjaGUsIGJhc2UuZ3JvdXBzKTtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLml0ZW1zQ2FjaGUsIHRoaXMuaV9pdGVtc0NhY2hlLCBiYXNlLml0ZW1zKTtcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXBfZXhjbHVzaW9uJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVUcmlwdGljKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLCB0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLCBiYXNlLmdyb3VwX2V4Y2x1c2lvbnMpO1xyXG4gICAgICAgICAgICBjYXNlICdleGNsdXNpb24nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5leGNsdXNpb25zQ2FjaGUsIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUsIGJhc2UuZXhjbHVzaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biBvZ2dldHRvIHJlc3RpdHVpc2NlIGlsIGdydXBwbyBkaSBjdWkgZmEgcGFydGUsIHNlIGVzaXN0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRpIGN1aSB0cm92YXJlIGlsIGdydXBwb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEl0ZW1Hcm91cChpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGl0ZW0uX3RoaXNLZXkpXHJcbiAgICAgICAgaWYgKHBhcmVudClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgZ2xpIG9nZ2V0dGkgY29uIHF1ZWxsYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIENoaWF2ZSBkYSBjZXJjYXJlXHJcbiAgICAgKiBAcGFyYW0geydzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCd9IHN0YXR1cyBTdGF0byBkZWdsaSBlbGVtZW50aSwgc2VsZXppb25hdGkgbyBub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgSW5kaWNhIHNlIGNlcmNhcmUgc29sbyBnbGkgZWxlbWVudGkgZGlyZXR0YW1lbnRlIGNvbGxlZ2F0aSBvIHNlIHByZW5kZXJlIGFuY2hlIHF1ZWxsaSBkZWkgZ3J1cHBpIGZpZ2xpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHthbnlbXX0gT2dnZXR0aSBkaSB0aXBvICoqX2l0ZW0qKiBmYWNlbnRpIGNhcG8gYWxsYSBjaGlhdmUgKipncm91cEtleSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBJdGVtcyhzZWw6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGdyb3VwOiBhbnksIHN0YXR1cz86ICdzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlLCBhbGxiYXNlOiBhbnlbXSA9IG51bGwpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW107XHJcblxyXG4gICAgICAgIGlmIChhbGxiYXNlKVxyXG4gICAgICAgICAgICBpdGVtcyA9IGFsbGJhc2U7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCByaWNvcnNpdmEgcHJlbmRvIGdsaSBvZ2dldHRpIGRpIHR1dHRlIGxlIGNoaWF2aSBzaW1pbGkgY2hlIHRyb3ZvXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgdGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUuZ2V0KGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUuZ2V0KGdyb3VwLl90aGlzS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKHQgPT4gIXN0YXR1cyB8fCAodC5fc2VsZWN0ZWQgJiYgc3RhdHVzID09ICdzZWxlY3RlZCcpIHx8ICghdC5fc2VsZWN0ZWQgJiYgc3RhdHVzID09ICd1bnNlbGVjdGVkJykpO1xyXG5cclxuICAgICAgICAvLyBOb24gdHJvdm8gbmVzc3VuIG9nZ2V0dG8sIHBlcsOyIG1hZ2FyaSBkaSBvZ2dldHRpIG5lIGhvIGFsbCdpbnRlcm5vIGRlbGwnb2dnZXR0byBkaSBzZWxlemlvbmUuIFxyXG4gICAgICAgIC8vIFF1ZXN0byBwdcOyIGVzc2VyZSB2ZXJvIHNvbG8gc2UgTk9OIHNvbm8gaW4gbW9kYWxpdMOgIGFycmF5LCBpbiBjYXNvIGNvbnRyYXJpbyBnbGkgb2dnZXR0aSBsaSBkZXZvIHBlciBmb3J6YSBhdmVyZSB0dXR0aVxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT0gMCB8fCAhc2VsIHx8IHRoaXMuZXN0LmFycmF5TW9kZSlcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG5cclxuICAgICAgICBpZiAoc3RhdHVzID09ICd1bnNlbGVjdGVkJylcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuZXhjbHVzaW9ucy5maWx0ZXIodCA9PiB0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICghcmVjdXJzaXZlICYmIHQuX3RoaXNLZXkgPT0gZ3JvdXAuX3RoaXNLZXkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpKTtcclxuICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gJ3NlbGVjdGVkJylcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuaXRlbXMuZmlsdGVyKHQgPT4gdCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5ID09IGdyb3VwLl90aGlzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgY2hpYXZlIGRpIHVuIGdydXBwbyByZXN0aXR1aXNjZSB0dXR0aSBnbGkgb2dnZXR0aSBjb24gcXVlbGxhIGNoaWF2ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRpIGN1aSBjZXJjYXJlIGlsIHBhcmVudFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55fSBPZ2dldHRvIGRpIHRpcG8gKipfZ3JvdXAqKiByYXBwcmVzZW50YW50ZSBpbCBwYXJlbnQgZGVsICoqZ3JvdXAqKiBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBQYXJlbnQoZ3JvdXA6IGFueSk6IGFueSB7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucmdIYW5kbGVyLnJnR3JvdXBDYWNoZS5nZXQoZ3JvdXAuX3BhcmVudClcclxuICAgICAgICBpZiAocGFyZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgY2hpYXZlIGRpIHVuIGdydXBwbyByZXN0aXR1aXNjZSB0dXR0aSBpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgR3J1cHBvIGNoZSByYXBwcmVzZW50YSBpbCBwYWRyZSBkaSBjdWkgY2VyY2FyZSBpIGZpZ2xpXHJcbiAgICAgKiBAcGFyYW0geydzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCd9IHN0YXR1cyBTdGF0byBkZWkgZ3J1cHBpLCBzZWxlemlvbmF0aSBvIG5vXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY3Vyc2l2ZSBJbmRpY2Egc2UgY2VyY2FyZSBzb2xvIGkgZ3J1cHBpIGRpcmV0dGFtZW50ZSBjb2xsZWdhdGkgbyBzZSBwcmVuZGVyZSBhbmNoZSBxdWVsbGkgZGVpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IE9nZ2V0dGkgZGkgdGlwbyAqKl9ncm91cCoqIGZhY2VudGkgY2FwbyBhbGxhIGNoaWF2ZSAqKmdyb3VwS2V5KipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRHcm91cENoaWxkR3JvdXBzKHNlbDogSXRlbXNTZWxlY3Rpb248YW55PiwgZ3JvdXA6IGFueSwgc3RhdHVzPzogJ3NlbGVjdGVkJyB8ICd1bnNlbGVjdGVkJywgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2UsIGFsbGJhc2U6IGFueVtdID0gbnVsbCkge1xyXG4gICAgICAgIGxldCB0aGlzR3JvdXA6IGFueSA9IHRoaXMucmdIYW5kbGVyLnJnR3JvdXBDYWNoZS5nZXQoZ3JvdXAuX3RoaXNLZXkpO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsYmFzZSlcclxuICAgICAgICAgICAgaXRlbXMgPSBhbGxiYXNlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agcmljb3JzaXZhIHByZW5kbyBnbGkgb2dnZXR0aSBkaSB0dXR0ZSBsZSBjaGlhdmkgc2ltaWxpIGNoZSB0cm92b1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdIYW5kbGVyLnJnQ2hpbGRHcm91cHNDYWNoZS5rZXlzKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi50aGlzLnJnSGFuZGxlci5yZ0NoaWxkR3JvdXBzQ2FjaGUuZ2V0KGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5yZ0hhbmRsZXIucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChncm91cC5fdGhpc0tleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcih0ID0+ICFzdGF0dXMgfHwgKHQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAnc2VsZWN0ZWQnKSB8fCAoIXQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHRyb3ZvIG5lc3N1biBvZ2dldHRvLCBwZXLDsiBtYWdhcmkgZGkgb2dnZXR0aSBuZSBobyBhbGwnaW50ZXJubyBkZWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCAhPSAwIHx8ICFzZWwpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmdyb3VwX2V4Y2x1c2lvbnMuZmlsdGVyKCh0OiBhbnkpID0+IHQgIT0gbnVsbCAmJiAoXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzUm91dGUubGVuZ3RoID09IHRoaXNHcm91cC5fdGhpc1JvdXRlLmxlbmd0aCArIDEgJiYgdC5fdGhpc1JvdXRlLnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuZ3JvdXBzLmZpbHRlcigodDogYW55KSA9PiB0ICE9IG51bGwgJiYgKFxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc1JvdXRlLmxlbmd0aCA9PSB0aGlzR3JvdXAuX3RoaXNSb3V0ZS5sZW5ndGggKyAxICYmIHQuX3RoaXNSb3V0ZS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBGaW5hbGl6emEgbGUgaW5mb3JtYXppb25pIGRpIHNlbGV6aW9uZSBkZWwgKipJdGVtc1NlbGVjdGlvbioqIGNvcnJlbnRlICovXHJcbiAgICBwcml2YXRlIGZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICAvLyBEYXRvIGNoZSBsZSBkZWxldGUgc29ubyBsb2dpY2hlIGRhdG8gY2hlIHRlbmdvIGxhIGNhY2hlIGRlZ2xpIGluZGljaSBkZXZvIHJlbmRlcmxlIGZpc2ljaGVcclxuICAgICAgICBsZXQgdG1wR3JwID0gW10sIHRtcEl0ZW1zID0gW10sIHRtcEV4Y2wgPSBbXSwgdG1wR3JwRXhjbCA9IFtdO1xyXG4gICAgICAgIGxldCBncnBSZW1vdmVkID0gZmFsc2UsIGl0ZW1zUmVtb3ZlZCA9IGZhbHNlLCBleGNsUmVtb3ZlZCA9IGZhbHNlLCBncnBFeGNsUmVtb3ZlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLml0ZW1zW2ldICE9IG51bGwpIHRtcEl0ZW1zLnB1c2goc2VsZWN0aW9uSXRlbS5pdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGVsc2UgaXRlbXNSZW1vdmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnNbaV0gIT0gbnVsbCkgdG1wRXhjbC5wdXNoKHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9uc1tpXSk7XHJcbiAgICAgICAgICAgIGVsc2UgZXhjbFJlbW92ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBJbiB2ZWNjaGllIHZlcnNpb25pIGRlbGwnQXBwU2VhcmNoIHBlciBjdWkgbm9uIHZlbmdvbm8gZGVzZXJpYWxpenphdGUgcXVlc3RlIGluZm9ybWFpem9uaSBwb3RyZWJiZXJvIGVzc2VyY2kgY2FzaW5pXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5ncm91cHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cHNbaV0gIT0gbnVsbCkgdG1wR3JwLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cHNbaV0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBncnBSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zW2ldICE9IG51bGwpIHRtcEdycEV4Y2wucHVzaChzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnNbaV0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBncnBFeGNsUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxlY3Rpb25JdGVtLml0ZW1zID0gdG1wSXRlbXM7XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zID0gdG1wR3JwRXhjbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSB0bXBFeGNsO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gdG1wR3JwO1xyXG5cclxuICAgICAgICAvLyBMZSBjYWNoZSBkZWdsaSBpbmRpY2kgcG90cmViYmVybyBhdmVyZSBidWNoaSwgcmlzb2x2b1xyXG4gICAgICAgIGlmIChncnBSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfZ3JvdXBzQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZ3JvdXBzQ2FjaGUpO1xyXG4gICAgICAgIGlmIChpdGVtc1JlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9pdGVtc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2l0ZW1zQ2FjaGUpO1xyXG4gICAgICAgIGlmIChleGNsUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2V4Y2x1c2lvbnNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9leGNsdXNpb25zQ2FjaGUpO1xyXG4gICAgICAgIGlmIChncnBFeGNsUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9ncm91cF9leGNsdXNpb25zQ2FjaGUpO1xyXG5cclxuICAgICAgICAvLyBQb2kgcmlwcmVuZG8gYSBmYXJlIHR1dHRvIGluIG5vcm1hbGl0w6BcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmNvdW50ID0gdGhpcy5ldmFsdWF0ZVNlbGVjdGVkKCk7XHJcblxyXG4gICAgICAgIC8vIFNlIGhvIGZhdHRvIHNlbGV6aW9uZSBcImFsbFwiIG1hIHBvaSBtaSBzb25vIG1lc3NvIGEgdG9nbGllcmUgdHV0dGkgZ2xpIGVsZW1lbnRpIGZpbm8gYSByaW1hbmVybmUgMCByZXNldHRvIGwnb2dnZXR0byBkaSBzZWxlemlvbmVcclxuICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5jb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlLmZvckVhY2godCA9PiB0Ll9zZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5hbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cHMgPSBbXTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zID0gW107XHJcblxyXG4gICAgICAgICAgICAvLyBSaXB1bGlzY28gbGEgY2FjaGUgYWx0cmltZW50aSBtaSByaW1hbmUgcGllbmEgZGkgdHV0dGUgbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQ2FjaGVzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBsYSBwb3NzaWJpbGl0w6AgZGkgZmFyZSBcIlNlbGV6aW9uYSB0dXR0b1wiIMOoIGFiaWxpdGF0YSBhbGxvcmEgbGEgY29uc2lkZXJvIGFwcGVuYSBtaSB2aWVuZSBzZWxlemlvbmF0byBxdWFsY29zYVxyXG4gICAgICAgIHRoaXMuZXN0LmNhblNlbGVjdEFsbCA9IHNlbGVjdGlvbkl0ZW0uY291bnQgPiAwICYmIHRoaXMuZXN0LlNlbGVjdEFsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29tcGF0dGEgdW5hIGNhY2hlIGRpIGluZGljaSAqL1xyXG4gICAgcHJpdmF0ZSBjb21wYWN0SW5kZXhNYXAobWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+KTogTWFwPHN0cmluZywgbnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgcmV0ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBtYXAua2V5cygpKVxyXG4gICAgICAgICAgICByZXQuc2V0KGtleSwgaW5kZXgrKyk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIGxhIHF1YW50aXTDoCBkaSBvZ2dldHRpIGNoZSBzb25vIHN0YXRpIHNlbGV6aW9uYXRpIGFsIHRlcm1pbmUgZGkgdW4gZXZlbnRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWVybyBkaSBvZ2dldHRpIHNlbGV6aW9uYXRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVTZWxlY3RlZCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgbGV0IGV4Y0J5R3JvdXAgPSBzaS5ncm91cF9leGNsdXNpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG4gICAgICAgIGxldCBpbmNCeUdyb3VwID0gc2kuZ3JvdXBzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgPSAoc2kuYWxsID8gdGhpcy5lc3QuQmFzZUl0ZW1zQ291bnQgOiBpbmNCeUdyb3VwKSAtIGV4Y0J5R3JvdXAgKyBzaS5pdGVtcy5sZW5ndGggLSBzaS5leGNsdXNpb25zLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gdGhpcy5lc3Quc2VsZWN0ZWRPYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXN0aXNjZSBpbCBjb21hbmRvIGRpIFwiU2VsZXppb25hIHR1dHRvIGluIHR1dHRlIGxlIHBhZ2luZVwiIG8gaWwgc3VvIGNvbnRyYXJpbywgY2lvw6ggXCJSZWltcG9zdGEgc2VsZXppb25lXCIgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb25JdGVtID0gdGhpcy5lc3QuVmlldy5zZWxlY3Rpb24gfHwgdGhpcy5lc3QuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmFsbCA9ICFzZWxlY3Rpb25JdGVtLmFsbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSBbXTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUmlwdWxpc2NvIGdsaSBzdGF0aSBVSSBkaSBzZWxlemlvbmUgZ2xvYmFsZSBzZSBsJ2hvIGRpc2F0dGl2YXRhXHJcbiAgICAgICAgaWYgKCFzZWxlY3Rpb25JdGVtLmFsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHNlbGVjdGlvbkl0ZW0pO1xyXG5cclxuICAgICAgICAvLyBEb3BvIGF2ZXIgcmVzZXR0YXRvIGRpcmV0dGFtZW50ZSBpbCBzb2xvIG9nZ2V0dG8gdGhpcy5WaWV3LnNlbGVjdGlvbiBkZXZvIGFuY2hlIHJpYWxsaW5lYXJlIGEgdHV0dGkgZ2xpIG9nZ2V0dGkgYmluZGF0aVxyXG4gICAgICAgIHRoaXMuZXZhbHVhdGVTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UsIHNlbGVjdGlvbkl0ZW0pO1xyXG4gICAgfVxyXG59Il19
@@ -1,13 +1,18 @@
1
+ // Angular
1
2
  import { Injectable } from "@angular/core";
3
+ // Librerie
2
4
  import { HashingService } from "@esfaenza/extensions";
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "@esfaenza/extensions";
7
+ /** Classe di utilità per le cose comuni */
5
8
  export class UtilitiesHandler {
9
+ /** @ignore Costruttore */
6
10
  constructor(hashExts) {
7
11
  this.hashExts = hashExts;
8
12
  }
9
13
  /**
10
- * Data una lista di oggetti effettua dei raggruppamenti in base alla proprietà **field**, restituendo un oggetto del tipo { Gruppo1: oggetti[], Gruppo2: oggetti[], ecc... }
14
+ * Data una lista di oggetti effettua dei raggruppamenti in base alla proprietà **field**,
15
+ * restituendo un oggetto del tipo { Gruppo1: oggetti[], Gruppo2: oggetti[], ecc... }
11
16
  *
12
17
  * @param {any[]} array Lista degli oggetti da raggruppare
13
18
  * @param {string} field Campo su cui effettuare i raggruppamenti
@@ -42,9 +47,7 @@ export class UtilitiesHandler {
42
47
  }
43
48
  }
44
49
  }
45
- /**
46
- * Helper per spostare un oggetto di un array da un indice all'altro, in place
47
- */
50
+ /** Helper per spostare un oggetto di un array da un indice all'altro, in place */
48
51
  arrayMove(array, oldI, newI) {
49
52
  if (newI > array.length - 1 || oldI > array.length - 1 || newI < 0 || oldI < 0)
50
53
  throw "Gli indici passati non fanno riferimento a una posizione dell'array. Length: " + array.length + " Old:" + oldI + " New: " + newI;
@@ -56,18 +59,14 @@ export class UtilitiesHandler {
56
59
  * @param {any} td Cella da valutare
57
60
  * @returns {boolean} Restituisce **true** se il **td** è di tipo **EsTd**, **false** se è di tipo **EsTdDirective**
58
61
  */
59
- isEsTd(td) {
60
- return !td._directive;
61
- }
62
+ isEsTd(td) { return !td._directive; }
62
63
  /**
63
64
  * Helper che identifica se il th attuale è di tipo **EsTh**. In caso contrario è da considerarsi **EsThDirective**
64
65
  *
65
66
  * @param {any} td Header da valutare
66
67
  * @returns {boolean} Restituisce **true** se il **th** è di tipo **EsTh**, **false** se è di tipo **EsThDirective**
67
68
  */
68
- isEsTh(th) {
69
- return !th._directive;
70
- }
69
+ isEsTh(th) { return !th._directive; }
71
70
  /**
72
71
  * Date le informazioni di paginazione ottiene l'array dei pulsanti
73
72
  *
@@ -162,9 +161,9 @@ export class UtilitiesHandler {
162
161
  }
163
162
  UtilitiesHandler.ɵprov = i0.ɵɵdefineInjectable({ factory: function UtilitiesHandler_Factory() { return new UtilitiesHandler(i0.ɵɵinject(i1.HashingService)); }, token: UtilitiesHandler, providedIn: "root" });
164
163
  UtilitiesHandler.decorators = [
165
- { type: Injectable, args: [{ providedIn: 'root', },] }
164
+ { type: Injectable, args: [{ providedIn: 'root' },] }
166
165
  ];
167
166
  UtilitiesHandler.ctorParameters = () => [
168
167
  { type: HashingService }
169
168
  ];
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbGl0aWVzSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9jbGFzc2VzL1V0aWxpdGllc0hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQU90RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFlBQW9CLFFBQXdCO1FBQXhCLGFBQVEsR0FBUixRQUFRLENBQWdCO0lBQUksQ0FBQztJQUVqRDs7Ozs7OztPQU9HO0lBQ0ksT0FBTyxDQUFDLEtBQVksRUFBRSxLQUFhO1FBQ3RDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQUEsQ0FBQztJQUdGOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxLQUFVO1FBQ3pCLEtBQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksYUFBYSxHQUE0QyxLQUFNLENBQUMsa0JBQW1CLENBQUM7UUFDeEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFH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O0lBQ2hCLENBQUM7Ozs7WUFqTEosVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRTs7O1lBTnpCLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IEhhc2hpbmdTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG5pbXBvcnQgeyBFc1RkIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvZXMtdGQvZXNfdGQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEVzVGggfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9lcy10aC9lc190aC5jb21wb25lbnRcIjtcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290Jyx9KVxyXG5leHBvcnQgY2xhc3MgVXRpbGl0aWVzSGFuZGxlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGhhc2hFeHRzOiBIYXNoaW5nU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGVmZmV0dHVhIGRlaSByYWdncnVwcGFtZW50aSBpbiBiYXNlIGFsbGEgcHJvcHJpZXTDoCAqKmZpZWxkKiosIHJlc3RpdHVlbmRvIHVuIG9nZ2V0dG8gZGVsIHRpcG8geyBHcnVwcG8xOiBvZ2dldHRpW10sIEdydXBwbzI6IG9nZ2V0dGlbXSwgZWNjLi4uIH1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBhcnJheSBMaXN0YSBkZWdsaSBvZ2dldHRpIGRhIHJhZ2dydXBwYXJlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgQ2FtcG8gc3UgY3VpIGVmZmV0dHVhcmUgaSByYWdncnVwcGFtZW50aVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHt7IFtpZDogc3RyaW5nXTogYW55W10gfX0gRGl6aW9uYXJpbyBkZWkgZ3J1cHBpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncm91cEJ5KGFycmF5OiBhbnlbXSwgZmllbGQ6IHN0cmluZyk6IHsgW2lkOiBzdHJpbmddOiBhbnlbXTsgfSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHggPSBhcnJheVtpXTtcclxuICAgICAgICAgICAgKHJldFt4W2ZpZWxkXV0gPSByZXRbeFtmaWVsZF1dIHx8IFtdKS5wdXNoKHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIGVmZmV0dHVhcmUgaWwgY2FjaGluZyBkZWxsZSBhZ2dyZWdhemlvbmkuIExlIHNwb3N0YSBkYSB1bmEgbGlzdGEgZGkgKipHcm91cEFnZ3JlZ2F0aW9uKiogYSB1bmEgKio8TWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gZGkgY3VpIGNhY2hhcmUgbGUgYWdncmVnYXppb25pXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjYWNoZUFnZ3JlZ2F0aW9ucyhncm91cDogYW55KSB7XHJcbiAgICAgICAgKDxhbnk+Z3JvdXApLl9hZ2dyZWdhdGlvbnNDYWNoZSA9IG5ldyBNYXAoKTtcclxuICAgICAgICBsZXQgY2FzdGVkQWdDYWNoZSA9ICg8TWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4+KDxhbnk+Z3JvdXApLl9hZ2dyZWdhdGlvbnNDYWNoZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cC5hZ2dyZWdhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGFnZyA9IGdyb3VwLmFnZ3JlZ2F0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKGNhc3RlZEFnQ2FjaGUuaGFzKGFnZy5jb2x1bW4pKVxyXG4gICAgICAgICAgICAgICAgY2FzdGVkQWdDYWNoZS5nZXQoYWdnLmNvbHVtbikuc2V0KGFnZy5hZ2dyZWdhdGlvbiwgYWdnLnZhbHVlKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG1wOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgdG1wLnNldChhZ2cuYWdncmVnYXRpb24sIGFnZy52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBjYXN0ZWRBZ0NhY2hlLnNldChhZ2cuY29sdW1uLCB0bXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBzcG9zdGFyZSB1biBvZ2dldHRvIGRpIHVuIGFycmF5IGRhIHVuIGluZGljZSBhbGwnYWx0cm8sIGluIHBsYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcnJheU1vdmUoYXJyYXk6IGFueVtdLCBvbGRJOiBudW1iZXIsIG5ld0k6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChuZXdJID4gYXJyYXkubGVuZ3RoIC0gMSB8fCBvbGRJID4gYXJyYXkubGVuZ3RoIC0gMSB8fCBuZXdJIDwgMCB8fCBvbGRJIDwgMClcclxuICAgICAgICAgICAgdGhyb3cgXCJHbGkgaW5kaWNpIHBhc3NhdGkgbm9uIGZhbm5vIHJpZmVyaW1lbnRvIGEgdW5hIHBvc2l6aW9uZSBkZWxsJ2FycmF5LiBMZW5ndGg6IFwiICsgYXJyYXkubGVuZ3RoICsgXCIgT2xkOlwiICsgb2xkSSArIFwiIE5ldzogXCIgKyBuZXdJO1xyXG5cclxuICAgICAgICBhcnJheS5zcGxpY2UobmV3SSwgMCwgYXJyYXkuc3BsaWNlKG9sZEksIDEpWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBjaGUgaWRlbnRpZmljYSBzZSBpbCB0ZCBhdHR1YWxlIMOoIGRpIHRpcG8gKipFc1RkKiouIEluIGNhc28gY29udHJhcmlvIMOoIGRhIGNvbnNpZGVyYXJzaSAqKkVzVGREaXJlY3RpdmUqKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSB0ZCBDZWxsYSBkYSB2YWx1dGFyZVxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJlc3RpdHVpc2NlICoqdHJ1ZSoqIHNlIGlsICoqdGQqKiDDqCBkaSB0aXBvICoqRXNUZCoqLCAqKmZhbHNlKiogc2Ugw6ggZGkgdGlwbyAqKkVzVGREaXJlY3RpdmUqKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNFc1RkKHRkOiBhbnkpOiB0ZCBpcyBFc1RkIHtcclxuICAgICAgICByZXR1cm4gIXRkLl9kaXJlY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGlkZW50aWZpY2Egc2UgaWwgdGggYXR0dWFsZSDDqCBkaSB0aXBvICoqRXNUaCoqLiBJbiBjYXNvIGNvbnRyYXJpbyDDqCBkYSBjb25zaWRlcmFyc2kgKipFc1RoRGlyZWN0aXZlKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdGQgSGVhZGVyIGRhIHZhbHV0YXJlXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmVzdGl0dWlzY2UgKip0cnVlKiogc2UgaWwgKip0aCoqIMOoIGRpIHRpcG8gKipFc1RoKiosICoqZmFsc2UqKiBzZSDDqCBkaSB0aXBvICoqRXNUaERpcmVjdGl2ZSoqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0VzVGgodGg6IGFueSk6IHRoIGlzIEVzVGgge1xyXG4gICAgICAgIHJldHVybiAhdGguX2RpcmVjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGUgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lIG90dGllbmUgbCdhcnJheSBkZWkgcHVsc2FudGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4QnRucyBOdW1lcm8gbWFzc2ltbyBkaSBwdWxzYW50aSBkYSB2aXN1YWxpenphcmVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIFBhZ2luYSBjb3JyZW50ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxhc3RQYWdlIFVsdGltYSBwYWdpbmEgZGlzcG9uaWJpbGVcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IFBzZXVkby1hcnJheSBkaSBwdWxzYW50aSBhIGN1aSBjaSBzaSBwdcOyIGJpbmRhcmUgbGF0byBIVE1MXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQYWdlc0FycmF5KG1heEJ0bnM6IG51bWJlciwgcGFnZTogbnVtYmVyLCBsYXN0UGFnZTogbnVtYmVyLCBhY3R1YWxDb3VudDogbnVtYmVyID0gbnVsbCwgaXBwOiBudW1iZXIgPSBudWxsKTogYW55W10ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgXCJOdW1lcm8gZGkgcGFnaW5lIGVkIG9nZ2V0dGkgc2Nvbm9zY2l1dGlcIiBmYWNjaW8gaW4gbW9kbyBkaSBtb3N0cmFyZSBsYSBwYWdpbmEgc3VjY2Vzc2l2YSBzb2xvIHNlIGdsaSBpdGVtcyBlZmZldHRpdmFtZW50ZSBwZXJ2ZW51dGlcclxuICAgICAgICAvLyBzb25vIHVndWFsaSBhbGxhIHBhZ2luYXppb25lIGF0dHVhbGUgKGNpb8OoIHF1ZXN0YSBwYWdpbmEgw6ggZGkgc2ljdXJvIHJpZW1waXRhIGNvbXBsZXRhbWVudGUpXHJcbiAgICAgICAgaWYgKGxhc3RQYWdlID09IC0xICYmICgoYWN0dWFsQ291bnQgPT0gbnVsbCAmJiBpcHAgPT0gbnVsbCkgfHwgKGFjdHVhbENvdW50ID09IGlwcCkpKVxyXG4gICAgICAgICAgICBsYXN0UGFnZSA9IHBhZ2UgKyAxO1xyXG5cclxuICAgICAgICAvLyBTZSBzb25vIGluIG1vZGFsaXTDoCBcIk51bWVybyBkaSBwYWdpbmUgZWQgb2dnZXR0aSBzY29ub3NjaXV0aVwiIGUgbWkgYXJyaXZhbm8gMCBvZ2dldHRpIHNpZ25pZmljYSBjaGUgbCd1bHRpbWEgcGFnaW5hIMOoIGxhIHByZWNlZGVudGUgZSBub24gbW9zdHJvIHBhZ2luZSBvbHRyZVxyXG4gICAgICAgIGlmIChsYXN0UGFnZSA9PSAtMSAmJiBhY3R1YWxDb3VudCA9PSAwKVxyXG4gICAgICAgICAgICBsYXN0UGFnZSA9IHBhZ2U7XHJcblxyXG4gICAgICAgIGxldCBtaW4sIG1heDtcclxuICAgICAgICBpZiAobGFzdFBhZ2UgPD0gbWF4QnRucykge1xyXG4gICAgICAgICAgICBtaW4gPSAxO1xyXG4gICAgICAgICAgICBtYXggPSBsYXN0UGFnZSAtIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdG9sZ28gbGEgcGFnaW5hIHNlbGVjdGVkIMOoIGwndWx0aW1hIHBhZ2luYSBjaGUgw6ggcXVlbGxhIGRlbGxlIHBhZ2luZSB0b3RhbGlcclxuICAgICAgICAgICAgbGV0IHJhbmdlT3V0c2lkZSA9IChtYXhCdG5zIC0gMikgLyAyO1xyXG5cclxuICAgICAgICAgICAgbWluID0gcGFnZSAtIHJhbmdlT3V0c2lkZTtcclxuICAgICAgICAgICAgbWF4ID0gcGFnZSArIHJhbmdlT3V0c2lkZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtaW4gPCAxKSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gPSAxO1xyXG4gICAgICAgICAgICAgICAgbWF4ID0gbWF4QnRucyAtIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4ID49IGxhc3RQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gPSBsYXN0UGFnZSAtIG1heEJ0bnMgKyAxO1xyXG4gICAgICAgICAgICAgICAgbWF4ID0gbGFzdFBhZ2UgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHQucHVzaCh7IHZhbDogMSwgY3NzQ2xhc3M6ICgxID09PSBwYWdlID8gJ2J0bi1tYWluIGFwcC13aGl0ZS10ZXh0JyA6ICdhcHAtd2hpdGUtYnV0dG9uJykgfSk7XHJcblxyXG4gICAgICAgIGlmIChtYXggPj0gbWluKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBtaW47IGkgPD0gbWF4OyBpKyspXHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IHZhbDogaSwgY3NzQ2xhc3M6IChpID09PSBwYWdlID8gJ2J0bi1tYWluIGFwcC13aGl0ZS10ZXh0JyA6ICdhcHAtd2hpdGUtYnV0dG9uJykgfSk7XHJcblxyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB2YWw6IGxhc3RQYWdlLFxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M6IChsYXN0UGFnZSA9PT0gcGFnZSA/ICdidG4tbWFpbiBhcHAtd2hpdGUtdGV4dCcgOiAnYXBwLXdoaXRlLWJ1dHRvbicpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY29sYSBsJ2hhc2ggZGkgdW4gb2dnZXR0byBxdWFsc2lhc2lcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIHBlciBjdWkgY2FsY29sYXJlIGwnaGFzaFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FsY3VsYXRlSGFzaChpdGVtczogYW55W10pIHtcclxuICAgICAgICBpZiAoIWl0ZW1zKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFN1cHBvcnRvIGEgaGFzaCBkdXBsaWNhdGkgZGkgb2dnZXR0aSB1Z3VhbGlcclxuICAgICAgICBsZXQgdXNlZEhhc2hlc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogbnVtYmVyOyB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJpbWEgZGkgY2FsY29sYXJlIGwnaGFzaCByaW11b3ZvIGxlIHByb3ByaWV0w6AgaW50ZXJuZSBwZXIgZXZpdGFyZSBjaGUgbWkgc2NvbXBlbnNpbm8gaSBjYWxjb2xpIHN1Y2Nlc3NpdmlcclxuICAgICAgICAgICAgbGV0IHRtcCA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRtcC5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0bXAuX3Zpc2libGU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0bXAuX2hhc2g7XHJcbiAgICAgICAgICAgIGxldCBoYXNoID0gdGhpcy5oYXNoRXh0cy5oYXNoT2JqZWN0KHRtcCk7XHJcblxyXG4gICAgICAgICAgICB1c2VkSGFzaGVzQ2FjaGVbaGFzaF0gPSB1c2VkSGFzaGVzQ2FjaGVbaGFzaF0gPyB1c2VkSGFzaGVzQ2FjaGVbaGFzaF0gKyAxIDogMTtcclxuICAgICAgICAgICAgaXRlbS5faGFzaCA9IGhhc2ggKyAodXNlZEhhc2hlc0NhY2hlW2hhc2hdID4gMSA/IFwiX1wiICsgdXNlZEhhc2hlc0NhY2hlW2hhc2hdIDogXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBTZSBsJ0lucHV0IMOoIG51bGwgKHZhbG9yZSBub24gc2V0dGF0bykgdmVkZSBzZSBjJ8OoIHVuIGRlZmF1bHQgY29uIGN1aSB2YWxvcml6emFybG8uIFNlIG5vbiBjJ8OoIHV0aWxpenphIGlsIHZhbG9yZSBkaSBmYWxsYmFjayAocXVhbG9yYSBmb3JuaXRvKVxyXG4gICAgKiBcclxuICAgICogQHBhcmFtIHtUfSBpbnB1dFZhbHVlIFZhbG9yZSBkZWxsJ0lucHV0XHJcbiAgICAqIEBwYXJhbSB7VH0gZGVmYXVsdFZhbHVlIFZhbG9yZSBkaSBkZWZhdWx0IGltcG9zdGF0byBkYSBjb25maWd1cmF6aW9uZVxyXG4gICAgKiBAcGFyYW0ge1R9IGZhbGxiYWNrVmFsdWUgVmFsb3JlIGRlbGwnSW5wdXQgcGVyIHF1YW5kbyBub24gw6ggc3RhdG8gYXNzZWduYXRvIGRhbCBwcm9ncmFtbWF0b3JlIGUgbm9uIGhhIHVuIGRlZmF1bHRcclxuICAgICovXHJcbiAgICBwdWJsaWMgSW5wdXRPckRlZmF1bHQ8VD4oaW5wdXRWYWx1ZTogVCwgZGVmYXVsdFZhbHVlOiBULCBmYWxsYmFja1ZhbHVlPzogVCkge1xyXG5cclxuICAgICAgICAvLyBJbnB1dCB2YWxvcml6emF0byBkYWwgcHJvZ3JhbW1hdG9yZVxyXG4gICAgICAgIGlmIChpbnB1dFZhbHVlICE9IG51bGwgJiYgaW5wdXRWYWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dFZhbHVlO1xyXG5cclxuICAgICAgICAvLyBJbnB1dCB2YWxvcml6emF0byBkYSBjb25maWd1cmF6aW9uZSBnbG9iYWxlXHJcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIC8vSW5wdXQgbm9uIHZhbG9yaXp6YXRvIGRhIG5pZW50ZSBlIGRhIG5lc3N1bm9cclxuICAgICAgICBpZiAoZmFsbGJhY2tWYWx1ZSAhPSBudWxsICYmIGZhbGxiYWNrVmFsdWUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcclxuXHJcbiAgICAgICAgLy8gSSBjYXNpIGluIGN1aSBzaSBhcnJpdmEgcXVpIHNvbm8gaSBjYXNpIGRpIElucHV0IGNoZSBkaSBkZWZhdWx0IHZhIGJlbmUgY2hlIHNpYW5vIG51bGxpIGUgY2hlIG5lc3N1bm8gc2kgY2FnYVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbGl0aWVzSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9jbGFzc2VzL1V0aWxpdGllc0hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsV0FBVztBQUNYLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTXRELDJDQUEyQztBQUUzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLDBCQUEwQjtJQUMxQixZQUFvQixRQUF3QjtRQUF4QixhQUFRLEdBQVIsUUFBUSxDQUFnQjtJQUFJLENBQUM7SUFFakQ7Ozs7Ozs7O09BUUc7SUFDSSxPQUFPLENBQUMsS0FBWSxFQUFFLEtBQWE7UUFDdEMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFBQSxDQUFDO0lBRUY7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLEtBQVU7UUFDekIsS0FBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxhQUFhLEdBQTRDLEtBQU0sQ0FBQyxrQkFBbUIsQ0FB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LE9BQU8sYUFBYSxDQUFDO1FBRXpCLGdIQUFnSDtRQUNoSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7O1lBN0tKLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQVB6QixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIExpYnJlcmllXHJcbmltcG9ydCB7IEhhc2hpbmdTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBDb21wb25lbnRpXHJcbmltcG9ydCB7IEVzVGQgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9lcy10ZC9lc190ZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRXNUaCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2VzLXRoL2VzX3RoLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqIENsYXNzZSBkaSB1dGlsaXTDoCBwZXIgbGUgY29zZSBjb211bmkgKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFV0aWxpdGllc0hhbmRsZXIge1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGhhc2hFeHRzOiBIYXNoaW5nU2VydmljZSkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGVmZmV0dHVhIGRlaSByYWdncnVwcGFtZW50aSBpbiBiYXNlIGFsbGEgcHJvcHJpZXTDoCAqKmZpZWxkKiosIFxyXG4gICAgICogcmVzdGl0dWVuZG8gdW4gb2dnZXR0byBkZWwgdGlwbyB7IEdydXBwbzE6IG9nZ2V0dGlbXSwgR3J1cHBvMjogb2dnZXR0aVtdLCBlY2MuLi4gfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGFycmF5IExpc3RhIGRlZ2xpIG9nZ2V0dGkgZGEgcmFnZ3J1cHBhcmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCBDYW1wbyBzdSBjdWkgZWZmZXR0dWFyZSBpIHJhZ2dydXBwYW1lbnRpXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3sgW2lkOiBzdHJpbmddOiBhbnlbXSB9fSBEaXppb25hcmlvIGRlaSBncnVwcGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyb3VwQnkoYXJyYXk6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogeyBbaWQ6IHN0cmluZ106IGFueVtdOyB9IHtcclxuICAgICAgICBsZXQgcmV0ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgeCA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgICAocmV0W3hbZmllbGRdXSA9IHJldFt4W2ZpZWxkXV0gfHwgW10pLnB1c2goeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBlZmZldHR1YXJlIGlsIGNhY2hpbmcgZGVsbGUgYWdncmVnYXppb25pLiBMZSBzcG9zdGEgZGEgdW5hIGxpc3RhIGRpICoqR3JvdXBBZ2dyZWdhdGlvbioqIGEgdW5hICoqPE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+KipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRpIGN1aSBjYWNoYXJlIGxlIGFnZ3JlZ2F6aW9uaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FjaGVBZ2dyZWdhdGlvbnMoZ3JvdXA6IGFueSkge1xyXG4gICAgICAgICg8YW55Pmdyb3VwKS5fYWdncmVnYXRpb25zQ2FjaGUgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgbGV0IGNhc3RlZEFnQ2FjaGUgPSAoPE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+Pig8YW55Pmdyb3VwKS5fYWdncmVnYXRpb25zQ2FjaGUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXAuYWdncmVnYXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBhZ2cgPSBncm91cC5hZ2dyZWdhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmIChjYXN0ZWRBZ0NhY2hlLmhhcyhhZ2cuY29sdW1uKSlcclxuICAgICAgICAgICAgICAgIGNhc3RlZEFnQ2FjaGUuZ2V0KGFnZy5jb2x1bW4pLnNldChhZ2cuYWdncmVnYXRpb24sIGFnZy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRtcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgICAgIHRtcC5zZXQoYWdnLmFnZ3JlZ2F0aW9uLCBhZ2cudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgY2FzdGVkQWdDYWNoZS5zZXQoYWdnLmNvbHVtbiwgdG1wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBzcG9zdGFyZSB1biBvZ2dldHRvIGRpIHVuIGFycmF5IGRhIHVuIGluZGljZSBhbGwnYWx0cm8sIGluIHBsYWNlICovXHJcbiAgICBwdWJsaWMgYXJyYXlNb3ZlKGFycmF5OiBhbnlbXSwgb2xkSTogbnVtYmVyLCBuZXdJOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAobmV3SSA+IGFycmF5Lmxlbmd0aCAtIDEgfHwgb2xkSSA+IGFycmF5Lmxlbmd0aCAtIDEgfHwgbmV3SSA8IDAgfHwgb2xkSSA8IDApXHJcbiAgICAgICAgICAgIHRocm93IFwiR2xpIGluZGljaSBwYXNzYXRpIG5vbiBmYW5ubyByaWZlcmltZW50byBhIHVuYSBwb3NpemlvbmUgZGVsbCdhcnJheS4gTGVuZ3RoOiBcIiArIGFycmF5Lmxlbmd0aCArIFwiIE9sZDpcIiArIG9sZEkgKyBcIiBOZXc6IFwiICsgbmV3STtcclxuXHJcbiAgICAgICAgYXJyYXkuc3BsaWNlKG5ld0ksIDAsIGFycmF5LnNwbGljZShvbGRJLCAxKVswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGlkZW50aWZpY2Egc2UgaWwgdGQgYXR0dWFsZSDDqCBkaSB0aXBvICoqRXNUZCoqLiBJbiBjYXNvIGNvbnRyYXJpbyDDqCBkYSBjb25zaWRlcmFyc2kgKipFc1RkRGlyZWN0aXZlKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdGQgQ2VsbGEgZGEgdmFsdXRhcmVcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXN0aXR1aXNjZSAqKnRydWUqKiBzZSBpbCAqKnRkKiogw6ggZGkgdGlwbyAqKkVzVGQqKiwgKipmYWxzZSoqIHNlIMOoIGRpIHRpcG8gKipFc1RkRGlyZWN0aXZlKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRXNUZCh0ZDogYW55KTogdGQgaXMgRXNUZCB7IHJldHVybiAhdGQuX2RpcmVjdGl2ZTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGNoZSBpZGVudGlmaWNhIHNlIGlsIHRoIGF0dHVhbGUgw6ggZGkgdGlwbyAqKkVzVGgqKi4gSW4gY2FzbyBjb250cmFyaW8gw6ggZGEgY29uc2lkZXJhcnNpICoqRXNUaERpcmVjdGl2ZSoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IHRkIEhlYWRlciBkYSB2YWx1dGFyZVxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJlc3RpdHVpc2NlICoqdHJ1ZSoqIHNlIGlsICoqdGgqKiDDqCBkaSB0aXBvICoqRXNUaCoqLCAqKmZhbHNlKiogc2Ugw6ggZGkgdGlwbyAqKkVzVGhEaXJlY3RpdmUqKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNFc1RoKHRoOiBhbnkpOiB0aCBpcyBFc1RoIHsgcmV0dXJuICF0aC5fZGlyZWN0aXZlOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRlIGxlIGluZm9ybWF6aW9uaSBkaSBwYWdpbmF6aW9uZSBvdHRpZW5lIGwnYXJyYXkgZGVpIHB1bHNhbnRpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heEJ0bnMgTnVtZXJvIG1hc3NpbW8gZGkgcHVsc2FudGkgZGEgdmlzdWFsaXp6YXJlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBQYWdpbmEgY29ycmVudGVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsYXN0UGFnZSBVbHRpbWEgcGFnaW5hIGRpc3BvbmliaWxlXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2FueVtdfSBQc2V1ZG8tYXJyYXkgZGkgcHVsc2FudGkgYSBjdWkgY2kgc2kgcHXDsiBiaW5kYXJlIGxhdG8gSFRNTFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UGFnZXNBcnJheShtYXhCdG5zOiBudW1iZXIsIHBhZ2U6IG51bWJlciwgbGFzdFBhZ2U6IG51bWJlciwgYWN0dWFsQ291bnQ6IG51bWJlciA9IG51bGwsIGlwcDogbnVtYmVyID0gbnVsbCk6IGFueVtdIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIFwiTnVtZXJvIGRpIHBhZ2luZSBlZCBvZ2dldHRpIHNjb25vc2NpdXRpXCIgZmFjY2lvIGluIG1vZG8gZGkgbW9zdHJhcmUgbGEgcGFnaW5hIHN1Y2Nlc3NpdmEgc29sbyBzZSBnbGkgaXRlbXMgZWZmZXR0aXZhbWVudGUgcGVydmVudXRpXHJcbiAgICAgICAgLy8gc29ubyB1Z3VhbGkgYWxsYSBwYWdpbmF6aW9uZSBhdHR1YWxlIChjaW/DqCBxdWVzdGEgcGFnaW5hIMOoIGRpIHNpY3VybyByaWVtcGl0YSBjb21wbGV0YW1lbnRlKVxyXG4gICAgICAgIGlmIChsYXN0UGFnZSA9PSAtMSAmJiAoKGFjdHVhbENvdW50ID09IG51bGwgJiYgaXBwID09IG51bGwpIHx8IChhY3R1YWxDb3VudCA9PSBpcHApKSlcclxuICAgICAgICAgICAgbGFzdFBhZ2UgPSBwYWdlICsgMTtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgXCJOdW1lcm8gZGkgcGFnaW5lIGVkIG9nZ2V0dGkgc2Nvbm9zY2l1dGlcIiBlIG1pIGFycml2YW5vIDAgb2dnZXR0aSBzaWduaWZpY2EgY2hlIGwndWx0aW1hIHBhZ2luYSDDqCBsYSBwcmVjZWRlbnRlIGUgbm9uIG1vc3RybyBwYWdpbmUgb2x0cmVcclxuICAgICAgICBpZiAobGFzdFBhZ2UgPT0gLTEgJiYgYWN0dWFsQ291bnQgPT0gMClcclxuICAgICAgICAgICAgbGFzdFBhZ2UgPSBwYWdlO1xyXG5cclxuICAgICAgICBsZXQgbWluLCBtYXg7XHJcbiAgICAgICAgaWYgKGxhc3RQYWdlIDw9IG1heEJ0bnMpIHtcclxuICAgICAgICAgICAgbWluID0gMTtcclxuICAgICAgICAgICAgbWF4ID0gbGFzdFBhZ2UgLSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHRvbGdvIGxhIHBhZ2luYSBzZWxlY3RlZCDDqCBsJ3VsdGltYSBwYWdpbmEgY2hlIMOoIHF1ZWxsYSBkZWxsZSBwYWdpbmUgdG90YWxpXHJcbiAgICAgICAgICAgIGxldCByYW5nZU91dHNpZGUgPSAobWF4QnRucyAtIDIpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIG1pbiA9IHBhZ2UgLSByYW5nZU91dHNpZGU7XHJcbiAgICAgICAgICAgIG1heCA9IHBhZ2UgKyByYW5nZU91dHNpZGU7XHJcblxyXG4gICAgICAgICAgICBpZiAobWluIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgbWluID0gMTtcclxuICAgICAgICAgICAgICAgIG1heCA9IG1heEJ0bnMgLSAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1heCA+PSBsYXN0UGFnZSkge1xyXG4gICAgICAgICAgICAgICAgbWluID0gbGFzdFBhZ2UgLSBtYXhCdG5zICsgMTtcclxuICAgICAgICAgICAgICAgIG1heCA9IGxhc3RQYWdlIC0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzdWx0LnB1c2goeyB2YWw6IDEsIGNzc0NsYXNzOiAoMSA9PT0gcGFnZSA/ICdidG4tbWFpbiBhcHAtd2hpdGUtdGV4dCcgOiAnYXBwLXdoaXRlLWJ1dHRvbicpIH0pO1xyXG5cclxuICAgICAgICBpZiAobWF4ID49IG1pbikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbWluOyBpIDw9IG1heDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeyB2YWw6IGksIGNzc0NsYXNzOiAoaSA9PT0gcGFnZSA/ICdidG4tbWFpbiBhcHAtd2hpdGUtdGV4dCcgOiAnYXBwLXdoaXRlLWJ1dHRvbicpIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdmFsOiBsYXN0UGFnZSxcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzOiAobGFzdFBhZ2UgPT09IHBhZ2UgPyAnYnRuLW1haW4gYXBwLXdoaXRlLXRleHQnIDogJ2FwcC13aGl0ZS1idXR0b24nKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGNvbGEgbCdoYXNoIGRpIHVuIG9nZ2V0dG8gcXVhbHNpYXNpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBwZXIgY3VpIGNhbGNvbGFyZSBsJ2hhc2hcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZUhhc2goaXRlbXM6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtcylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBTdXBwb3J0byBhIGhhc2ggZHVwbGljYXRpIGRpIG9nZ2V0dGkgdWd1YWxpXHJcbiAgICAgICAgbGV0IHVzZWRIYXNoZXNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlcjsgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFByaW1hIGRpIGNhbGNvbGFyZSBsJ2hhc2ggcmltdW92byBsZSBwcm9wcmlldMOgIGludGVybmUgcGVyIGV2aXRhcmUgY2hlIG1pIHNjb21wZW5zaW5vIGkgY2FsY29saSBzdWNjZXNzaXZpXHJcbiAgICAgICAgICAgIGxldCB0bXAgPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0bXAuX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICBkZWxldGUgdG1wLl92aXNpYmxlO1xyXG4gICAgICAgICAgICBkZWxldGUgdG1wLl9oYXNoO1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaEV4dHMuaGFzaE9iamVjdCh0bXApO1xyXG5cclxuICAgICAgICAgICAgdXNlZEhhc2hlc0NhY2hlW2hhc2hdID0gdXNlZEhhc2hlc0NhY2hlW2hhc2hdID8gdXNlZEhhc2hlc0NhY2hlW2hhc2hdICsgMSA6IDE7XHJcbiAgICAgICAgICAgIGl0ZW0uX2hhc2ggPSBoYXNoICsgKHVzZWRIYXNoZXNDYWNoZVtoYXNoXSA+IDEgPyBcIl9cIiArIHVzZWRIYXNoZXNDYWNoZVtoYXNoXSA6IFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogU2UgbCdJbnB1dCDDqCBudWxsICh2YWxvcmUgbm9uIHNldHRhdG8pIHZlZGUgc2UgYyfDqCB1biBkZWZhdWx0IGNvbiBjdWkgdmFsb3JpenphcmxvLiBTZSBub24gYyfDqCB1dGlsaXp6YSBpbCB2YWxvcmUgZGkgZmFsbGJhY2sgKHF1YWxvcmEgZm9ybml0bylcclxuICAgICogXHJcbiAgICAqIEBwYXJhbSB7VH0gaW5wdXRWYWx1ZSBWYWxvcmUgZGVsbCdJbnB1dFxyXG4gICAgKiBAcGFyYW0ge1R9IGRlZmF1bHRWYWx1ZSBWYWxvcmUgZGkgZGVmYXVsdCBpbXBvc3RhdG8gZGEgY29uZmlndXJhemlvbmVcclxuICAgICogQHBhcmFtIHtUfSBmYWxsYmFja1ZhbHVlIFZhbG9yZSBkZWxsJ0lucHV0IHBlciBxdWFuZG8gbm9uIMOoIHN0YXRvIGFzc2VnbmF0byBkYWwgcHJvZ3JhbW1hdG9yZSBlIG5vbiBoYSB1biBkZWZhdWx0XHJcbiAgICAqL1xyXG4gICAgcHVibGljIElucHV0T3JEZWZhdWx0PFQ+KGlucHV0VmFsdWU6IFQsIGRlZmF1bHRWYWx1ZTogVCwgZmFsbGJhY2tWYWx1ZT86IFQpIHtcclxuXHJcbiAgICAgICAgLy8gSW5wdXQgdmFsb3JpenphdG8gZGFsIHByb2dyYW1tYXRvcmVcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSAhPSBudWxsICYmIGlucHV0VmFsdWUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZTtcclxuXHJcbiAgICAgICAgLy8gSW5wdXQgdmFsb3JpenphdG8gZGEgY29uZmlndXJhemlvbmUgZ2xvYmFsZVxyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvL0lucHV0IG5vbiB2YWxvcml6emF0byBkYSBuaWVudGUgZSBkYSBuZXNzdW5vXHJcbiAgICAgICAgaWYgKGZhbGxiYWNrVmFsdWUgIT0gbnVsbCAmJiBmYWxsYmFja1ZhbHVlICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XHJcblxyXG4gICAgICAgIC8vIEkgY2FzaSBpbiBjdWkgc2kgYXJyaXZhIHF1aSBzb25vIGkgY2FzaSBkaSBJbnB1dCBjaGUgZGkgZGVmYXVsdCB2YSBiZW5lIGNoZSBzaWFubyBudWxsaSBlIGNoZSBuZXNzdW5vIHNpIGNhZ2FcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhFbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vaW50ZXJuYWxzL2NsYXNzZXMvVGhFbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRoRWxlbWVudCB7XHJcbiAgICBQaW5uZWQ6IGJvb2xlYW47XHJcbiAgICBGaXhlZDogYm9vbGVhbjtcclxuICAgIElEOiBzdHJpbmc7XHJcbiAgICBWaXNpYmxlOiBib29sZWFuO1xyXG4gICAgQ2xhc3M6IHN0cmluZztcclxuICAgIENvbnRlbnQ6IHN0cmluZztcclxuICAgIE9yZGVyOiBzdHJpbmc7XHJcbiAgICBPcmRlcmFibGU6IGJvb2xlYW47XHJcbiAgICBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgXHJcbiAgICBXcmFwOiBib29sZWFuXHJcbn0iXX0=
@@ -3,4 +3,5 @@ export * from "./classes/EsTableColumn";
3
3
  export * from "./classes/GroupPager";
4
4
  export * from "./classes/GroupRouteFragment";
5
5
  export * from "./classes/ThAggregation";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy10YWJsZS9zcmMvbGliL2RvbWFpbi9pbnRlcm5hbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY2xhc3Nlcy9DYWNoZVRyaXB0aWNcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY2xhc3Nlcy9Fc1RhYmxlQ29sdW1uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NsYXNzZXMvR3JvdXBQYWdlclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jbGFzc2VzL0dyb3VwUm91dGVGcmFnbWVudFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jbGFzc2VzL1RoQWdncmVnYXRpb25cIjsiXX0=
6
+ export * from "./classes/ThElement";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy10YWJsZS9zcmMvbGliL2RvbWFpbi9pbnRlcm5hbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jbGFzc2VzL0NhY2hlVHJpcHRpY1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jbGFzc2VzL0VzVGFibGVDb2x1bW5cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY2xhc3Nlcy9Hcm91cFBhZ2VyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NsYXNzZXMvR3JvdXBSb3V0ZUZyYWdtZW50XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NsYXNzZXMvVGhBZ2dyZWdhdGlvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jbGFzc2VzL1RoRWxlbWVudFwiOyJdfQ==