@esfaenza/es-table 11.2.22-beta8 → 11.2.25

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.
@@ -26,10 +26,13 @@ export class ItemsHandler {
26
26
  // Se faccio dei raggruppamenti ignoro la paginazione
27
27
  if (this.est.UseArrayModePaging && !allIfPossible) {
28
28
  // Se sono in modalità array ma la ricerca dipende da una view devo riallineare gli itemperpage
29
- if (this.est.SearchView)
29
+ if (this.est.SearchView) {
30
30
  this.est.ArraymodeItemsPerPage = this.est.SearchView.itemsperpageoverride;
31
+ this.est.arraymodePage = this.est.SearchView.page;
32
+ this.est.arraymodePages = this.est.SearchView.pages;
33
+ }
31
34
  // Devo chiamare il refresh page solo se vengo richiamato da un binding esterno
32
- if (refreshPaging)
35
+ else if (refreshPaging)
33
36
  this.refreshPaging(this.est.ArraymodeItemsPerPage);
34
37
  items = this.adaptViewToPaging();
35
38
  }
@@ -76,6 +79,8 @@ export class ItemsHandler {
76
79
  }
77
80
  else {
78
81
  let ret = this.est.SecondarySource ? this.est.View.items2 : this.est.TertiarySource ? this.est.View.items3 : this.est.View.items;
82
+ if (!ret)
83
+ ret = [];
79
84
  // Setto variabile interna per specificare che questo è un elemento normale, non un gruppo o altro
80
85
  ret.forEach(itm => { itm._item = true; });
81
86
  return ret;
@@ -84,9 +89,13 @@ export class ItemsHandler {
84
89
  /** Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata */
85
90
  adaptViewToPaging() {
86
91
  let tmpItems = [];
87
- // Se ho una search view l'array pulsanti viene calcolato da lei, non devo prendere quello della modalità array
92
+ // Se ho una search view l'array pulsanti viene calcolato da lei, non devo prendere quello della modalità array,
93
+ // inoltre non ho bisogno di fare ragionamenti su quanti elementi ci sono e sulla pagina, dato che viene tutto gestito esternamente,
94
+ // unendo al risultato della view tutti gli oggetti addizionali
88
95
  if (!this.est.SearchView)
89
96
  this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.arraymodePage, this.est.arraymodePages);
97
+ else
98
+ return this.est.View;
90
99
  // Poi per tutti i valori dopo compresi fra la pagina - 1 e la pagina
91
100
  for (let i = ((this.est.arraymodePage - 1) * this.est.ArraymodeItemsPerPage); i < this.est.arraymodePage * this.est.ArraymodeItemsPerPage; i++) {
92
101
  if (i <= this.est.View.length - 1)
@@ -118,4 +127,4 @@ export class ItemsHandler {
118
127
  this.est.arrayOrders.forEach(t => { this.est.boundSource = this.est.boundSource.sort((a, b) => (a[t.id] > b[t.id] ? 1 : -1) * (t.order == 'DESC' ? -1 : 1)); });
119
128
  }
120
129
  }
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbXNIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL2NsYXNzZXMvSXRlbXNIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLNUMsMkpBQTJKO0FBQzNKLE1BQU0sT0FBTyxZQUFZO0lBRXJCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTJCO1FBQTFELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBSSxDQUFDO0lBRW5GOzs7Ozs7OztPQVFHO0lBQ0ksY0FBYyxDQUFDLGVBQXdCLEtBQUssRUFBRSxnQkFBeUIsS0FBSyxFQUFFLGdCQUF5QixLQUFLO1FBQy9HLElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksU0FBUyxDQUFDLEVBQUU7WUFDM0QsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBELHFEQUFxRDtZQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBRS9DLCtGQUErRjtnQkFDL0YsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVU7b0JBQ25C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Q0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELDBFQUEwRTtJQUNuRSx3QkFBd0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEssQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29tcG9uZW50aVxyXG5pbXBvcnQgeyBFc1RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvZXMtdGFibGUvZXNfdGFibGUuY29tcG9uZW50XCJcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQXBwU2VhcmNoIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpblwiO1xyXG5cclxuLy8gVXRpbGl0aWVzXHJcbmltcG9ydCB7IFV0aWxpdGllc0hhbmRsZXIgfSBmcm9tIFwiLi9VdGlsaXRpZXNIYW5kbGVyXCI7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBzaSBvY2N1cGEgZGVsbGEgZ2VzdGlvbmUgZGVsIHJlY3VwZXJvIGRlZ2xpIG9nZ2V0dGksIHBhZ2luYXppb25lIGUgdHV0dG8gY2nDsiBpbiBjdWkgZ2xpIGVsZW1lbnRpIGNhcmljYXRpIHZlbmdvbm8gbWFuaXBvbGF0aSBkaXJldHRhbWVudGUgKi9cclxuZXhwb3J0IGNsYXNzIEl0ZW1zSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZXN0OiBFc1RhYmxlQ29tcG9uZW50LCBwcml2YXRlIHV0aWxpdGllczogVXRpbGl0aWVzSGFuZGxlcikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBiYXNlIGFsbGEgbW9kYWxpdMOgIHNwZWNpZmljYXRhIChBcnJheU1vZGUsIFZpZXdNb2RlLCBlY2MuLi4pIHF1ZXN0byBtZXRvZG8gcmVjdXBlcmEgbCdhcnJheSBkaSBvZ2dldHRpIGRhIGJpbmRhcmUgYWQgaW50ZXJmYWNjaWFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9ubHlzZWxlY3RlZCBbZmFsc2VdIEluZGljYSBkaSBwcmVuZGVyZSBzb2xvIGdsaSBvZ2dldHRpIHNlbGV6aW9uYXRpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlZnJlc2hQYWdpbmcgW2ZhbHNlXSBJbmRpY2Egc2UgYWdnaW9ybmFyZSBsZSBpbmZvcm1hemlvbmkgZGkgcGFnaW5hemlvbmUgbyBtZW5vXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFsbElmUG9zc2libGUgW2ZhbHNlXSBJbmRpY2Egc2UgcHJlbmRlcmUgdHV0dGkgZ2xpIG9nZ2V0dGkgcXVhb3JhIHBvc3NpYmlsZSwgdXNhdG8gc29sbyBpbiBBcnJheU1vZGVcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IExpc3RhIGRlZ2xpIG9nZ2V0dGkgc3UgY3VpIGVmZmV0dHVhcmUgaWwgYmluZCBsYXRvIGludGVyZmFjY2lhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRJdGVtc0J5TW9kZShvbmx5c2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZSwgcmVmcmVzaFBhZ2luZzogYm9vbGVhbiA9IGZhbHNlLCBhbGxJZlBvc3NpYmxlOiBib29sZWFuID0gZmFsc2UpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoKHRoaXMuZXN0LnZpZXdNb2RlICYmIHRoaXMuZXN0LlZpZXcgaW5zdGFuY2VvZiBBcHBTZWFyY2gpKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5nZXRWaWV3SXRlbXNCeVNvdXJjZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuVmlldy5mb3JFYWNoKGl0bSA9PiB7IGl0bS5faXRlbSA9IHRydWU7IH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgZmFjY2lvIGRlaSByYWdncnVwcGFtZW50aSBpZ25vcm8gbGEgcGFnaW5hemlvbmVcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LlVzZUFycmF5TW9kZVBhZ2luZyAmJiAhYWxsSWZQb3NzaWJsZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIGFycmF5IG1hIGxhIHJpY2VyY2EgZGlwZW5kZSBkYSB1bmEgdmlldyBkZXZvIHJpYWxsaW5lYXJlIGdsaSBpdGVtcGVycGFnZVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXN0LlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc3QuQXJyYXltb2RlSXRlbXNQZXJQYWdlID0gdGhpcy5lc3QuU2VhcmNoVmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBEZXZvIGNoaWFtYXJlIGlsIHJlZnJlc2ggcGFnZSBzb2xvIHNlIHZlbmdvIHJpY2hpYW1hdG8gZGEgdW4gYmluZGluZyBlc3Rlcm5vXHJcbiAgICAgICAgICAgICAgICBpZiAocmVmcmVzaFBhZ2luZylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hQYWdpbmcodGhpcy5lc3QuQXJyYXltb2RlSXRlbXNQZXJQYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMuYWRhcHRWaWV3VG9QYWdpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5lc3QuVmlldyBhcyBhbnlbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugdm9nbGlvIHNvbG8gaSBzZWxlemlvbmF0aSBmaWx0cm9cclxuICAgICAgICBpZiAob25seXNlbGVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKHQgPT4gdC5fc2VsZWN0ZWQpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGVmZmV0dHVhcmUgaWwgcmVmcmVzaCBkZWxsYSBwYWdpbmF6aW9uZSBzdWwgY2FtYmlhbWVudG8gZGVnbGkgb2dnZXR0aSBkYSB2aXN1YWxpenphcmUgaW4gdW5hIHNpbmdvbGEgcGFnaW5hLlxyXG4gICAgICpcclxuICAgICAqIFZhbGUgc29sbyBwZXIgbGEgbW9kYWxpdMOgIEFycmF5XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplIERpbWVuc2lvbmUgZGVsbGEgcGFnaW5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWZyZXNoUGFnaW5nKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UgPSBwYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLmVzdC5hcnJheW1vZGVQYWdlcyA9IE1hdGguY2VpbCgodGhpcy5lc3QuVmlldyBhcyBhbnlbXSkubGVuZ3RoIC8gdGhpcy5lc3QuQXJyYXltb2RlSXRlbXNQZXJQYWdlKTtcclxuICAgICAgICB0aGlzLmVzdC5hcnJheW1vZGVQYWdlID0gMTtcclxuXHJcbiAgICAgICAgLy8gUmlmb3J6byBpbCB3cml0ZXZhbHVlIGluIG1vZG8gY2hlIGlsIGNvZGljZSBwYXNzaSBkYWxsYSBnZXN0aW9uZSBjb21lIHNlIGZvc3NlIGZhdHRhIHJpcGFydGlyZSB1bmEgcmljZXJjYVxyXG4gICAgICAgIHRoaXMuZXN0LmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBnbGkgb2dnZXR0aSBpbiBiYXNlIGFsbGEgc29yZ2VudGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWaWV3SXRlbXNCeVNvdXJjZSgpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+O1xyXG4gICAgICAgIGxldCBncm91cEtleXMgPSBjYXN0ZWRWaWV3Lmdyb3VwaW5ncyA/IGNhc3RlZFZpZXcuZ3JvdXBpbmdzLmZpbHRlcih0ID0+ICF0LmFnZ3JlZ2F0aW9uKS5sZW5ndGggOiAwO1xyXG5cclxuICAgICAgICAvL0dydXBwaSBpbnRlcm1lZGlcclxuICAgICAgICBpZiAoKGNhc3RlZFZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggIT0gZ3JvdXBLZXlzIHx8IGNhc3RlZFZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggPT0gMCkgJiYgZ3JvdXBLZXlzID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gY2FzdGVkVmlldy5ncm91cHM7XHJcbiAgICAgICAgICAgIHJldC5mb3JFYWNoKGl0bSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0dG8gdmFyaWFiaWxlIGludGVybmEgcGVyIGNhcGlyZSBjaGUgcXVlc3RvIMOoIGluIHJlYWx0w6AgdW4gZ3J1cHBvXHJcbiAgICAgICAgICAgICAgICAoPGFueT5pdG0pLl9ncm91cCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTGUgaW5mb3JtYXppb25pIHBhc3NhdGUgY29tZSBsaXN0YSBsZSBtZXR0byBkZW50cm8gYSB1bmEgY2FjaGUgcGVyIHZlbG9jaXp6YXJuZSBsJ2FjY2Vzc28gcXVhbmRvIGRldm8gdGlyYXJlIGZ1b3JpIGlsIGRpc3BsYXkgZGVsbGEgcHJvcHJpZXTDoFxyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuY2FjaGVBZ2dyZWdhdGlvbnMoaXRtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gdGhpcy5lc3QuU2Vjb25kYXJ5U291cmNlID8gKHRoaXMuZXN0LlZpZXcgYXMgYW55KS5pdGVtczIgOiB0aGlzLmVzdC5UZXJ0aWFyeVNvdXJjZSA/ICh0aGlzLmVzdC5WaWV3IGFzIGFueSkuaXRlbXMzIDogKHRoaXMuZXN0LlZpZXcgYXMgYW55KS5pdGVtcztcclxuICAgICAgICAgICAgLy8gU2V0dG8gdmFyaWFiaWxlIGludGVybmEgcGVyIHNwZWNpZmljYXJlIGNoZSBxdWVzdG8gw6ggdW4gZWxlbWVudG8gbm9ybWFsZSwgbm9uIHVuIGdydXBwbyBvIGFsdHJvXHJcbiAgICAgICAgICAgIHJldC5mb3JFYWNoKGl0bSA9PiB7ICg8YW55Pml0bSkuX2l0ZW0gPSB0cnVlOyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdlbmVyYSBsZSBpbmZvcm1hemlvbmkgZGkgcGFnaW5hemlvbmUgZSB0YWdsaWEgbGEgVmlldyBpbiBtb2RhbGl0w6AgYXJyYXkgcGVyIG1vc3RyYXJlIHNvbG8gZ2xpIG9nZ2V0dGkgZGVsbGEgcGFnaW5hIHNwZWNpZmljYXRhICovXHJcbiAgICBwcml2YXRlIGFkYXB0Vmlld1RvUGFnaW5nKCkge1xyXG4gICAgICAgIGxldCB0bXBJdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gdW5hIHNlYXJjaCB2aWV3IGwnYXJyYXkgcHVsc2FudGkgdmllbmUgY2FsY29sYXRvIGRhIGxlaSwgbm9uIGRldm8gcHJlbmRlcmUgcXVlbGxvIGRlbGxhIG1vZGFsaXTDoCBhcnJheVxyXG4gICAgICAgIGlmICghdGhpcy5lc3QuU2VhcmNoVmlldylcclxuICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXlQdWxzYW50aSA9IHRoaXMudXRpbGl0aWVzLmdldFBhZ2VzQXJyYXkoNiwgdGhpcy5lc3QuYXJyYXltb2RlUGFnZSwgdGhpcy5lc3QuYXJyYXltb2RlUGFnZXMpO1xyXG5cclxuICAgICAgICAvLyBQb2kgcGVyIHR1dHRpIGkgdmFsb3JpIGRvcG8gY29tcHJlc2kgZnJhIGxhIHBhZ2luYSAtIDEgZSBsYSBwYWdpbmFcclxuICAgICAgICBmb3IgKGxldCBpID0gKCh0aGlzLmVzdC5hcnJheW1vZGVQYWdlIC0gMSkgKiB0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UpOyBpIDwgdGhpcy5lc3QuYXJyYXltb2RlUGFnZSAqIHRoaXMuZXN0LkFycmF5bW9kZUl0ZW1zUGVyUGFnZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDw9ICh0aGlzLmVzdC5WaWV3IGFzIGFueVtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAgdG1wSXRlbXMucHVzaCgodGhpcy5lc3QuVmlldyBhcyBhbnlbXSlbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG1wSXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHByZW5kZSB0dXR0aSBnbGkgb2dnZXR0aSBkaSBjdWkgZGlzcG9uZSBkaXZpc2kgaW4gYnVja2V0IGRhIDEwMCBlbGVtZW50aVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHthbnlbXVtdfSBNYXRyaWNlIGRpIGFycmF5IE54MTAwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRJdGVtU2xpY2VzKCk6IGFueVtdW10ge1xyXG4gICAgICAgIC8vIFNlIHNvbm8gcXVpIGRpIHNpY3VybyBub24gaG8gcm93Z3JvdXBpbmdcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmdldEl0ZW1zQnlNb2RlKCk7XHJcbiAgICAgICAgaWYgKCFpdGVtcylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICBsZXQgYXJyYXlCeTEwMCA9IFtdO1xyXG4gICAgICAgIGxldCBzbGljZXMgPSBNYXRoLmNlaWwoaXRlbXMubGVuZ3RoIC8gdGhpcy5lc3QuU2xpY2VTaXplKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlczsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheVNsaWNlID0gaXRlbXMuc2xpY2UoaSAqIHRoaXMuZXN0LlNsaWNlU2l6ZSwgaSAqIHRoaXMuZXN0LlNsaWNlU2l6ZSArIHRoaXMuZXN0LlNsaWNlU2l6ZSk7XHJcbiAgICAgICAgICAgIGFycmF5QnkxMDAucHVzaChhcnJheVNsaWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycmF5QnkxMDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNlIGluIG1vZGFsaXTDoCBhcnJheSBhcHBsaWNhIGdsaSBvcmRpbmFtZW50aSBBU0MtREVTQyBkZWxsZSBjb2xvbm5lICovXHJcbiAgICBwdWJsaWMgYXJyYXlNb2RlUmV2aWV3T3JkZXJpbmdzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVzdC5hcnJheU9yZGVycy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheU9yZGVycy5mb3JFYWNoKHQgPT4geyB0aGlzLmVzdC5ib3VuZFNvdXJjZSA9IHRoaXMuZXN0LmJvdW5kU291cmNlLnNvcnQoKGEsIGIpID0+IChhW3QuaWRdID4gYlt0LmlkXSA/IDEgOiAtMSkgKiAodC5vcmRlciA9PSAnREVTQycgPyAtMSA6IDEpKTsgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXRlbXNIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL2NsYXNzZXMvSXRlbXNIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLFVBQVU7QUFDVixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLNUMsMkpBQTJKO0FBQzNKLE1BQU0sT0FBTyxZQUFZO0lBRXJCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTJCO1FBQTFELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBSSxDQUFDO0lBRW5GOzs7Ozs7OztPQVFHO0lBQ0ksY0FBYyxDQUFDLGVBQXdCLEtBQUssRUFBRSxnQkFBeUIsS0FBSyxFQUFFLGdCQUF5QixLQUFLO1FBQy9HLElBQUksS0FBSyxHQUFVLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksU0FBUyxDQUFDLEVBQUU7WUFDM0QsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBELHFEQUFxRDtZQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBRS9DLCtGQUErRjtnQkFDL0YsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFDdkI7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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb21wb25lbnRpXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluXCI7XHJcblxyXG4vLyBVdGlsaXRpZXNcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIHNpIG9jY3VwYSBkZWxsYSBnZXN0aW9uZSBkZWwgcmVjdXBlcm8gZGVnbGkgb2dnZXR0aSwgcGFnaW5hemlvbmUgZSB0dXR0byBjacOyIGluIGN1aSBnbGkgZWxlbWVudGkgY2FyaWNhdGkgdmVuZ29ubyBtYW5pcG9sYXRpIGRpcmV0dGFtZW50ZSAqL1xyXG5leHBvcnQgY2xhc3MgSXRlbXNIYW5kbGVyIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgdXRpbGl0aWVzOiBVdGlsaXRpZXNIYW5kbGVyKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluIGJhc2UgYWxsYSBtb2RhbGl0w6Agc3BlY2lmaWNhdGEgKEFycmF5TW9kZSwgVmlld01vZGUsIGVjYy4uLikgcXVlc3RvIG1ldG9kbyByZWN1cGVyYSBsJ2FycmF5IGRpIG9nZ2V0dGkgZGEgYmluZGFyZSBhZCBpbnRlcmZhY2NpYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25seXNlbGVjdGVkIFtmYWxzZV0gSW5kaWNhIGRpIHByZW5kZXJlIHNvbG8gZ2xpIG9nZ2V0dGkgc2VsZXppb25hdGlcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVmcmVzaFBhZ2luZyBbZmFsc2VdIEluZGljYSBzZSBhZ2dpb3JuYXJlIGxlIGluZm9ybWF6aW9uaSBkaSBwYWdpbmF6aW9uZSBvIG1lbm9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsSWZQb3NzaWJsZSBbZmFsc2VdIEluZGljYSBzZSBwcmVuZGVyZSB0dXR0aSBnbGkgb2dnZXR0aSBxdWFvcmEgcG9zc2liaWxlLCB1c2F0byBzb2xvIGluIEFycmF5TW9kZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHthbnlbXX0gTGlzdGEgZGVnbGkgb2dnZXR0aSBzdSBjdWkgZWZmZXR0dWFyZSBpbCBiaW5kIGxhdG8gaW50ZXJmYWNjaWFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEl0ZW1zQnlNb2RlKG9ubHlzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlLCByZWZyZXNoUGFnaW5nOiBib29sZWFuID0gZmFsc2UsIGFsbElmUG9zc2libGU6IGJvb2xlYW4gPSBmYWxzZSk6IGFueVtdIHtcclxuICAgICAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5lc3Qudmlld01vZGUgJiYgdGhpcy5lc3QuVmlldyBpbnN0YW5jZW9mIEFwcFNlYXJjaCkpIHtcclxuICAgICAgICAgICAgaXRlbXMgPSB0aGlzLmdldFZpZXdJdGVtc0J5U291cmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZXN0LmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5WaWV3LmZvckVhY2goaXRtID0+IHsgaXRtLl9pdGVtID0gdHJ1ZTsgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBmYWNjaW8gZGVpIHJhZ2dydXBwYW1lbnRpIGlnbm9ybyBsYSBwYWdpbmF6aW9uZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuVXNlQXJyYXlNb2RlUGFnaW5nICYmICFhbGxJZlBvc3NpYmxlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgYXJyYXkgbWEgbGEgcmljZXJjYSBkaXBlbmRlIGRhIHVuYSB2aWV3IGRldm8gcmlhbGxpbmVhcmUgZ2xpIGl0ZW1wZXJwYWdlXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lc3QuU2VhcmNoVmlldylcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UgPSB0aGlzLmVzdC5TZWFyY2hWaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5bW9kZVBhZ2UgPSB0aGlzLmVzdC5TZWFyY2hWaWV3LnBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXltb2RlUGFnZXMgPSB0aGlzLmVzdC5TZWFyY2hWaWV3LnBhZ2VzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRGV2byBjaGlhbWFyZSBpbCByZWZyZXNoIHBhZ2Ugc29sbyBzZSB2ZW5nbyByaWNoaWFtYXRvIGRhIHVuIGJpbmRpbmcgZXN0ZXJub1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmcmVzaFBhZ2luZylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hQYWdpbmcodGhpcy5lc3QuQXJyYXltb2RlSXRlbXNQZXJQYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMuYWRhcHRWaWV3VG9QYWdpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5lc3QuVmlldyBhcyBhbnlbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugdm9nbGlvIHNvbG8gaSBzZWxlemlvbmF0aSBmaWx0cm9cclxuICAgICAgICBpZiAob25seXNlbGVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKHQgPT4gdC5fc2VsZWN0ZWQpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGVmZmV0dHVhcmUgaWwgcmVmcmVzaCBkZWxsYSBwYWdpbmF6aW9uZSBzdWwgY2FtYmlhbWVudG8gZGVnbGkgb2dnZXR0aSBkYSB2aXN1YWxpenphcmUgaW4gdW5hIHNpbmdvbGEgcGFnaW5hLlxyXG4gICAgICpcclxuICAgICAqIFZhbGUgc29sbyBwZXIgbGEgbW9kYWxpdMOgIEFycmF5XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplIERpbWVuc2lvbmUgZGVsbGEgcGFnaW5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWZyZXNoUGFnaW5nKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UgPSBwYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLmVzdC5hcnJheW1vZGVQYWdlcyA9IE1hdGguY2VpbCgodGhpcy5lc3QuVmlldyBhcyBhbnlbXSkubGVuZ3RoIC8gdGhpcy5lc3QuQXJyYXltb2RlSXRlbXNQZXJQYWdlKTtcclxuICAgICAgICB0aGlzLmVzdC5hcnJheW1vZGVQYWdlID0gMTtcclxuXHJcbiAgICAgICAgLy8gUmlmb3J6byBpbCB3cml0ZXZhbHVlIGluIG1vZG8gY2hlIGlsIGNvZGljZSBwYXNzaSBkYWxsYSBnZXN0aW9uZSBjb21lIHNlIGZvc3NlIGZhdHRhIHJpcGFydGlyZSB1bmEgcmljZXJjYVxyXG4gICAgICAgIHRoaXMuZXN0LmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBnbGkgb2dnZXR0aSBpbiBiYXNlIGFsbGEgc29yZ2VudGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWaWV3SXRlbXNCeVNvdXJjZSgpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+O1xyXG4gICAgICAgIGxldCBncm91cEtleXMgPSBjYXN0ZWRWaWV3Lmdyb3VwaW5ncyA/IGNhc3RlZFZpZXcuZ3JvdXBpbmdzLmZpbHRlcih0ID0+ICF0LmFnZ3JlZ2F0aW9uKS5sZW5ndGggOiAwO1xyXG5cclxuICAgICAgICAvL0dydXBwaSBpbnRlcm1lZGlcclxuICAgICAgICBpZiAoKGNhc3RlZFZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggIT0gZ3JvdXBLZXlzIHx8IGNhc3RlZFZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggPT0gMCkgJiYgZ3JvdXBLZXlzID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gY2FzdGVkVmlldy5ncm91cHM7XHJcbiAgICAgICAgICAgIHJldC5mb3JFYWNoKGl0bSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0dG8gdmFyaWFiaWxlIGludGVybmEgcGVyIGNhcGlyZSBjaGUgcXVlc3RvIMOoIGluIHJlYWx0w6AgdW4gZ3J1cHBvXHJcbiAgICAgICAgICAgICAgICAoPGFueT5pdG0pLl9ncm91cCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTGUgaW5mb3JtYXppb25pIHBhc3NhdGUgY29tZSBsaXN0YSBsZSBtZXR0byBkZW50cm8gYSB1bmEgY2FjaGUgcGVyIHZlbG9jaXp6YXJuZSBsJ2FjY2Vzc28gcXVhbmRvIGRldm8gdGlyYXJlIGZ1b3JpIGlsIGRpc3BsYXkgZGVsbGEgcHJvcHJpZXTDoFxyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuY2FjaGVBZ2dyZWdhdGlvbnMoaXRtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gdGhpcy5lc3QuU2Vjb25kYXJ5U291cmNlID8gKHRoaXMuZXN0LlZpZXcgYXMgYW55KS5pdGVtczIgOiB0aGlzLmVzdC5UZXJ0aWFyeVNvdXJjZSA/ICh0aGlzLmVzdC5WaWV3IGFzIGFueSkuaXRlbXMzIDogKHRoaXMuZXN0LlZpZXcgYXMgYW55KS5pdGVtcztcclxuICAgICAgICAgICAgaWYgKCFyZXQpIHJldCA9IFtdO1xyXG4gICAgICAgICAgICAvLyBTZXR0byB2YXJpYWJpbGUgaW50ZXJuYSBwZXIgc3BlY2lmaWNhcmUgY2hlIHF1ZXN0byDDqCB1biBlbGVtZW50byBub3JtYWxlLCBub24gdW4gZ3J1cHBvIG8gYWx0cm9cclxuICAgICAgICAgICAgcmV0LmZvckVhY2goaXRtID0+IHsgKDxhbnk+aXRtKS5faXRlbSA9IHRydWU7IH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogR2VuZXJhIGxlIGluZm9ybWF6aW9uaSBkaSBwYWdpbmF6aW9uZSBlIHRhZ2xpYSBsYSBWaWV3IGluIG1vZGFsaXTDoCBhcnJheSBwZXIgbW9zdHJhcmUgc29sbyBnbGkgb2dnZXR0aSBkZWxsYSBwYWdpbmEgc3BlY2lmaWNhdGEgKi9cclxuICAgIHByaXZhdGUgYWRhcHRWaWV3VG9QYWdpbmcoKSB7XHJcbiAgICAgICAgbGV0IHRtcEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBTZSBobyB1bmEgc2VhcmNoIHZpZXcgbCdhcnJheSBwdWxzYW50aSB2aWVuZSBjYWxjb2xhdG8gZGEgbGVpLCBub24gZGV2byBwcmVuZGVyZSBxdWVsbG8gZGVsbGEgbW9kYWxpdMOgIGFycmF5LFxyXG4gICAgICAgIC8vIGlub2x0cmUgbm9uIGhvIGJpc29nbm8gZGkgZmFyZSByYWdpb25hbWVudGkgc3UgcXVhbnRpIGVsZW1lbnRpIGNpIHNvbm8gZSBzdWxsYSBwYWdpbmEsIGRhdG8gY2hlIHZpZW5lIHR1dHRvIGdlc3RpdG8gZXN0ZXJuYW1lbnRlLCBcclxuICAgICAgICAvLyB1bmVuZG8gYWwgcmlzdWx0YXRvIGRlbGxhIHZpZXcgdHV0dGkgZ2xpIG9nZ2V0dGkgYWRkaXppb25hbGlcclxuICAgICAgICBpZiAoIXRoaXMuZXN0LlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllcy5nZXRQYWdlc0FycmF5KDYsIHRoaXMuZXN0LmFycmF5bW9kZVBhZ2UsIHRoaXMuZXN0LmFycmF5bW9kZVBhZ2VzKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVzdC5WaWV3IGFzIGFueVtdO1xyXG5cclxuICAgICAgICAvLyBQb2kgcGVyIHR1dHRpIGkgdmFsb3JpIGRvcG8gY29tcHJlc2kgZnJhIGxhIHBhZ2luYSAtIDEgZSBsYSBwYWdpbmFcclxuICAgICAgICBmb3IgKGxldCBpID0gKCh0aGlzLmVzdC5hcnJheW1vZGVQYWdlIC0gMSkgKiB0aGlzLmVzdC5BcnJheW1vZGVJdGVtc1BlclBhZ2UpOyBpIDwgdGhpcy5lc3QuYXJyYXltb2RlUGFnZSAqIHRoaXMuZXN0LkFycmF5bW9kZUl0ZW1zUGVyUGFnZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDw9ICh0aGlzLmVzdC5WaWV3IGFzIGFueVtdKS5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAgdG1wSXRlbXMucHVzaCgodGhpcy5lc3QuVmlldyBhcyBhbnlbXSlbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRtcEl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBwcmVuZGUgdHV0dGkgZ2xpIG9nZ2V0dGkgZGkgY3VpIGRpc3BvbmUgZGl2aXNpIGluIGJ1Y2tldCBkYSAxMDAgZWxlbWVudGlcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W11bXX0gTWF0cmljZSBkaSBhcnJheSBOeDEwMFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SXRlbVNsaWNlcygpOiBhbnlbXVtdIHtcclxuICAgICAgICAvLyBTZSBzb25vIHF1aSBkaSBzaWN1cm8gbm9uIGhvIHJvd2dyb3VwaW5nXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5TW9kZSgpO1xyXG4gICAgICAgIGlmICghaXRlbXMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgbGV0IGFycmF5QnkxMDAgPSBbXTtcclxuICAgICAgICBsZXQgc2xpY2VzID0gTWF0aC5jZWlsKGl0ZW1zLmxlbmd0aCAvIHRoaXMuZXN0LlNsaWNlU2l6ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZXM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlTbGljZSA9IGl0ZW1zLnNsaWNlKGkgKiB0aGlzLmVzdC5TbGljZVNpemUsIGkgKiB0aGlzLmVzdC5TbGljZVNpemUgKyB0aGlzLmVzdC5TbGljZVNpemUpO1xyXG4gICAgICAgICAgICBhcnJheUJ5MTAwLnB1c2goYXJyYXlTbGljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheUJ5MTAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTZSBpbiBtb2RhbGl0w6AgYXJyYXkgYXBwbGljYSBnbGkgb3JkaW5hbWVudGkgQVNDLURFU0MgZGVsbGUgY29sb25uZSAqL1xyXG4gICAgcHVibGljIGFycmF5TW9kZVJldmlld09yZGVyaW5ncygpIHtcclxuICAgICAgICBpZiAodGhpcy5lc3QuYXJyYXlPcmRlcnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXlPcmRlcnMuZm9yRWFjaCh0ID0+IHsgdGhpcy5lc3QuYm91bmRTb3VyY2UgPSB0aGlzLmVzdC5ib3VuZFNvdXJjZS5zb3J0KChhLCBiKSA9PiAoYVt0LmlkXSA+IGJbdC5pZF0gPyAxIDogLTEpICogKHQub3JkZXIgPT0gJ0RFU0MnID8gLTEgOiAxKSk7IH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -74,7 +74,7 @@ export class SelectionHandler {
74
74
  }
75
75
  // Se tutti gli oggetti di questa pagina sono solezionati allora posso mettere il global check a true
76
76
  // Se sono in situazione di all-select anche metto la global checkbox, nonostante ci possano essere delle esclusioni
77
- 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);
78
78
  this.est.canSelectAll = selectionItem.count > 0 && this.est.SelectAll;
79
79
  // Potrebbe cambiare qualora qualcuno inserisse dati a manazza in modalità Array e desse il refresh manuale alla tabella
80
80
  // Comunque costa 0 quindi mi permetto di refreshare
@@ -434,21 +434,26 @@ export class SelectionHandler {
434
434
  tmpItems.push(selectionItem.items[i]);
435
435
  else
436
436
  itemsRemoved = true;
437
- for (let i = 0; i < selectionItem.groups.length; i++)
438
- if (selectionItem.groups[i] != null)
439
- tmpGrp.push(selectionItem.groups[i]);
440
- else
441
- grpRemoved = true;
442
437
  for (let i = 0; i < selectionItem.exclusions.length; i++)
443
438
  if (selectionItem.exclusions[i] != null)
444
439
  tmpExcl.push(selectionItem.exclusions[i]);
445
440
  else
446
441
  exclRemoved = true;
447
- for (let i = 0; i < selectionItem.group_exclusions.length; i++)
448
- if (selectionItem.group_exclusions[i] != null)
449
- tmpGrpExcl.push(selectionItem.group_exclusions[i]);
450
- else
451
- 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
+ }
452
457
  selectionItem.items = tmpItems;
453
458
  selectionItem.group_exclusions = tmpGrpExcl;
454
459
  selectionItem.exclusions = tmpExcl;
@@ -519,4 +524,4 @@ export class SelectionHandler {
519
524
  this.evaluateSelection(this.est.boundSource, selectionItem);
520
525
  }
521
526
  }
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9jbGFzc2VzL1NlbGVjdGlvbkhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBYSxZQUFZLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFRMUUscURBQXFEO0FBQ3JELE1BQU0sT0FBTyxnQkFBZ0I7SUFvQnpCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTZCO1FBQTVELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFuQmhGLCtIQUErSDtRQUN2SCxlQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsaUlBQWlJO1FBQ3pILGdCQUFXLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUlBQXFJO1FBQzdILG9CQUFlLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsMklBQTJJO1FBQ25JLDBCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTVELGlJQUFpSTtRQUN6SCxpQkFBWSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELG1JQUFtSTtRQUMzSCxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELHVJQUF1STtRQUMvSCxzQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCw2SUFBNkk7UUFDckksNEJBQXVCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFHbUIsQ0FBQztJQUVyRixzQ0FBc0M7SUFDL0Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztR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eUJBQXlCO1FBQzVCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQzNFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQzlCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzFCLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDcEMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFekIsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEQsMEhBQTBIO1FBQzFILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFwcFNlYXJjaCwgQ2FjaGVUcmlwdGljLCBJdGVtc1NlbGVjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kb21haW5cIjtcclxuXHJcbi8vIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBIYW5kbGVyc1xyXG5pbXBvcnQgeyBSb3dHcm91cGluZ0hhbmRsZXIgfSBmcm9tIFwiLi4vXCI7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBnZXN0aXNjZSBsZSBzZWxlemlvbmkgZGVnbGkgb2dnZXR0aSAqL1xyXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqaXRlbXMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2gqL1xyXG4gICAgcHJpdmF0ZSBpdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCAqL1xyXG4gICAgcHJpdmF0ZSBleGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cF9leGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKippdGVtcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlKi9cclxuICAgIHByaXZhdGUgaV9pdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UgKi9cclxuICAgIHByaXZhdGUgaV9ncm91cHNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmV4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwX2V4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgcmdIYW5kbGVyOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKiBSaXB1bGlzY2UgbGUgY2FjaGUgZGkgc2VsZXppb25lICovXHJcbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb25DYWNoZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pX2l0ZW1zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZ3JvdXBzQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHF1YWxpIGVsZW1lbnRpIGRldm9ubyBlc3NlcmUgbWFyY2F0aSBjb21lIHNlbGV6aW9uYXRpIG5lbGxhIHZpc3RhIGF0dHVhbGUuIFNpIGJhc2Egc3VsbCdvZ2dldHRvICoqc2VsZWN0aW9uKiogaW50ZXJubyBhbGwnQXBwU2VhcmNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkaSBjdWkgdmFsdXRhcmUgbGEgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0aSBkaSBzZWxlemlvbmUgZGVyaXZhbnRlIGRhbGxhIHZpZXcgbyBkYWxsJ29nZ2V0dG8gcGVyIEFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVNlbGVjdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbkl0ZW0pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25FdmFsdWF0aW9uKGl0ZW1zLCBzZWxlY3Rpb25JdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF6aW9uZSBhZ25vc3RpY2EgZGVsbGEgdmFsdXRhemlvbmUgZGVsbGUgc2VsZXppb25pIGRlZ2xpIG9nZ2V0dGkuIFJpY2hpZWRlIGdsaSBvZ2dldHRpIGRlbGxhIHZpc3RhIGF0dHVhbGUgZSBsJ2l0ZW1TZWxlY3RvclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0byBjb250ZW5lbnRlIGxvIHN0YXRvIGF0dHVhbGUgZGkgc2VsZXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uRXZhbHVhdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBpdG0uX2hhc2g7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBpdG0uX2dyb3VwID8gbnVsbCA6IHRoaXMuZ2V0SXRlbUdyb3VwKGl0bSk7XHJcbiAgICAgICAgICAgIC8vIFJlaWRyYXRvIGxhIGNhY2hlIGRpIHNlbGV6aW9uZSBjb2kgbnVvdmkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiByaXVzY2lyZWkgYSBiZWNjYXJlIGdsaSBpbmRpY2kgZ2l1c3RpXHJcbiAgICAgICAgICAgIC8vIERvcG9kaWNow6kgbGEgdXNvIHBlciBjYWxjb2xhcmUgaXN0YW50YW5lYW1lbnRlIHNlIGdsaSBvZ2dldHRpIHNvbm8gc2VsZXppb25hdGkgbyBub1xyXG4gICAgICAgICAgICB0aGlzLnJlaGlkcmF0ZUNhY2hlKGl0bSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRtLl9pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5hbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKCghdGhpcy5ncm91cHNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkgJiYgdGhpcy5pdGVtc0NhY2hlLmhhcyhoYXNoKSkgfHwgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpIHx8IHRoaXMuaXRlbXNDYWNoZS5oYXMoaGFzaCkgfHwgKHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtR3JvdXApID09ICdpbmNsdWRlZCcgJiYgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0bS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmFsbClcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiB0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRtKSAhPSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSB0aGlzLmdyb3Vwc0NhY2hlLmhhcyhoYXNoKSB8fCAodGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0bSkgPT0gJ2luY2x1ZGVkJyAmJiAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgdHV0dGkgZ2xpIG9nZ2V0dGkgZGkgcXVlc3RhIHBhZ2luYSBzb25vIHNvbGV6aW9uYXRpIGFsbG9yYSBwb3NzbyBtZXR0ZXJlIGlsIGdsb2JhbCBjaGVjayBhIHRydWVcclxuICAgICAgICAvLyBTZSBzb25vIGluIHNpdHVhemlvbmUgZGkgYWxsLXNlbGVjdCBhbmNoZSBtZXR0byBsYSBnbG9iYWwgY2hlY2tib3gsIG5vbm9zdGFudGUgY2kgcG9zc2FubyBlc3NlcmUgZGVsbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENoZWNrID0gdGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgfHwgdC5faXRlbSkuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCk7XHJcbiAgICAgICAgdGhpcy5lc3QuY2FuU2VsZWN0QWxsID0gc2VsZWN0aW9uSXRlbS5jb3VudCA+IDAgJiYgdGhpcy5lc3QuU2VsZWN0QWxsO1xyXG5cclxuICAgICAgICAvLyBQb3RyZWJiZSBjYW1iaWFyZSBxdWFsb3JhIHF1YWxjdW5vIGluc2VyaXNzZSBkYXRpIGEgbWFuYXp6YSBpbiBtb2RhbGl0w6AgQXJyYXkgZSBkZXNzZSBpbCByZWZyZXNoIG1hbnVhbGUgYWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gQ29tdW5xdWUgY29zdGEgMCBxdWluZGkgbWkgcGVybWV0dG8gZGkgcmVmcmVzaGFyZVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgbGV0IHByZXZTZWxlY3RlZCA9IHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cztcclxuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cyAhPSBwcmV2U2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIG9nZ2V0dG8gdHJvdmEgbGEgY2VsbGEgZGkgY2FjaGUgaW4gY3VpIMOoIHJlZ2lzdHJhdG8gZSBhZ2dpb3JuYSBpbCBjb250ZW51dG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkYSBhZ2dpb3JuYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVoaWRyYXRlQ2FjaGUoaXRlbTogYW55KSB7XHJcbiAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5pdGVtc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gZ3J1cHBvIGNvbnRyb2xsYSByaWNvcnNpdmFtZW50ZSBsJ2FsYmVybyBkaSBjdWkgZmEgcGFydGUgc2UgYyfDqCBzdGF0YSB1bmEgaW5jbHVzaW9uZSBvIGVzY2x1c2lvbmUgZGlyZXR0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JwIEdydXBwbyBkYSBjb250cm9sbGFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7J25vbmUnIHwgJ2V4Y2x1ZGVkJyB8ICdpbmNsdWRlZCd9IFxyXG4gICAgICogJ25vbmUnIHNlIG5vbiBjaSBzb25vIGluZm9ybWF6aW9uaSBzdSBpbmNsdXNpb25pIG8gZXNjbHVzaW9uaSBcclxuICAgICAqICdpbmNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGluY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICogJ2V4Y2x1ZGVkJyBzZSBpbCBncnVwcG8gY29udHJvbGxhdG8gw6ggc3RhdG8gZXNjbHVzbyBpbiBtYW5pZXJhIGVzcGxpY2l0YSBkYWxsJ2FsYmVybyBkZWkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyZW50VHJlZVN0YXR1cyhncnA6IGFueSk6ICdub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnIHtcclxuICAgICAgICBpZiAoIWdycClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudEdyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdycC5fcGFyZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRHcm91cClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhwYXJlbnRHcm91cC5faGFzaCkpXHJcbiAgICAgICAgICAgIHJldHVybiAnZXhjbHVkZWQnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2luY2x1ZGVkJztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VHJlZVN0YXR1cyhwYXJlbnRHcm91cCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIHNlbGV6aW9uZSBkaSBOIGVsZW1lbnRpIHV0aWxpenphbmRvIGxhIENhY2hlIGRpIHNlbGV6aW9uZSBlZCBldmVudHVhbG1lbnRlIGFnZ2lvcm5hbmRvIGlsIGNvbmNldHRvIGRpIFwiYWxsIHNlbGVjdGlvblwiXHJcbiAgICAgKlxyXG4gICAgICogVnVuemlvbmEgc2lhIGluIG1vZGFsaXTDoCBBcnJheSBjaGUgaW4gbW9kYWxpdMOgIFZpZXcgU2VtcGxpY2UgbyBWaWV3IEF2YW56YXRhIChjb24gbGUgQ3VzdG9tIENlbGxzKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGEgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbCBWYWxvcmUgZm9yemF0byBkaSBjaGVjayBkYSBhc3NlZ25hcmUgYWdsaSBvZ2dldHRpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbENoZWNrIFZhbG9yZSBkZWwgY2hlY2sgZ2xvYmFsZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBPZ2dldHRvIGRpIHNlbGV6aW9uZSBhZ2dpb3JuYXRvIGNvbiBsZSBpbmZvcm1hemlvbmkgc3VsbCd1bHRpbWEgb3BlcmF6aW9uZSBlZmZldHR1YXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtczogYW55W10sIGZvcmNlZFZhbDogYm9vbGVhbiA9IG51bGwsIGdsb2JhbENoZWNrOiBib29sZWFuID0gbnVsbCk6IEl0ZW1zU2VsZWN0aW9uPGFueT4ge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGkgc2VsZXppb25lIHNpbmdvbGEgZSBkZXZvIHNlbGV6aW9uYXJlIHVuJ29nZ2V0dG8sIHBlciBwcmltYSBjb3NhIGRldm8gZGVzZWxlemlvbmFyZSB0dXR0aSBnbGkgYWx0cmlcclxuICAgICAgICBpZiAodGhpcy5lc3QuU2luZ2xlU2VsZWN0aW9uICYmIGl0ZW1zWzBdPy5fc2VsZWN0ZWQgJiYgIWl0ZW1zWzBdPy5fZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEgJiYgZm9yY2VkVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBcIlRlbnRhdGl2byBkaSBzZWxlemlvbmFyZSBvIGRlc2VsZXppb25hcmUgcGnDuSBkaSB1biBlbGVtZW50byBjb24gU2luZ2xlU2VsZWN0aW9uIGF0dGl2b1wiO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAxICYmIGZvcmNlZFZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzaSA9IHRoaXMuaGFuZGxlSXRlbXNTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gIXQuX2dyb3VwKSwgZmFsc2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbMF0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBsZXQgdG9DaGFuZ2UgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGl0ZW0uX3NlbGVjdGVkICE9IGZvcmNlZFZhbCA6IGdsb2JhbENoZWNrICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSB0aGlzLmVzdC5nbG9iYWxDaGVjayA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgZGV2J2Vzc2VyZSBvdmVycmlkYXRvIGlsIHZhbG9yZSBkaSBjaGVjayBlZmZldHR1byBsJ292ZXJyaWRlIG8gY29sIHZhbG9yZSBmb3J6YXRvIG8gY29sIHZhbG9yZSBnbG9iYWxlXHJcbiAgICAgICAgICAgIGlmICh0b0NoYW5nZSAmJiAhaXRlbS5sb2NrZWQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9IGZvcmNlZFZhbCAhPSBudWxsID8gZm9yY2VkVmFsIDogdGhpcy5lc3QuZ2xvYmFsQ2hlY2s7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBpbCB2YWxvcmUgbm9uIGRldidlc3NlcmUgdmFyaWF0byBlIHZlbmdvIGRhIHVuYSBzZWxlemlvbmUgZ2xvYmFsZSBzZW1wbGljZW1lbnRlIGV2aXRvIGRpIGVmZmV0dHVhcmUgb3BlcmFpem9uaSBpbnV0aWxpLiBMJ2l0ZW0vZ3J1cHBvIMOoIGdpw6AgbmVsbG8gc3RhdG8gZ2l1c3RvXHJcbiAgICAgICAgICAgIGlmICghdG9DaGFuZ2UgJiYgZ2xvYmFsQ2hlY2sgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFsbFNlbGVjdGlvbiA9IHNpLmFsbDtcclxuICAgICAgICAgICAgbGV0IGlzR3JvdXAgPSBpdGVtLl9ncm91cDtcclxuICAgICAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gaXRlbS5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBudWxsLCBhbGxJdGVtcyA9IG51bGwsIHNlbGVjdGVkSXRlbXMgPSBudWxsLCB1bnNlbGVjdGVkSXRlbXMgPSBudWxsLCBhbGxHcm91cHMgPSBudWxsLCBzZWxlY3RlZEdyb3VwcyA9IG51bGwsIHVuc2VsZWN0ZWRHcm91cHMgPSBudWxsLCBwYXJlbnRHcm91cFNlbGVjdGVkID0gbnVsbCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHRzID0gdGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IHB0cyA9PSAnaW5jbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gcHRzID09ICdleGNsdWRlZCc7XHJcbiAgICAgICAgICAgICAgICBhbGxJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB1bnNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgYWxsR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3Vuc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbUdyb3VwID0gdGhpcy5nZXRJdGVtR3JvdXAoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFNlbGVjdGVkID0gaXRlbUdyb3VwID09IG51bGwgPyBudWxsIDogaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6ICFpdGVtR3JvdXAuX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZXN0LkFycmF5R3JvdXBpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBhbGxTZWxlY3Rpb24sIGlzR3JvdXAsIGlzU2VsZWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCBzZWxlY3RlZEdyb3VwcywgdW5zZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkR3JvdXBzLCBhbGxJdGVtcywgYWxsR3JvdXBzLCBwYXJlbnRHcm91cFNlbGVjdGVkLCBwYXJlbnRHcm91cFVuc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgaXRlbUdyb3VwLCBzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXMsIGFsbEl0ZW1zLCBhbGxHcm91cHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW1wb3N0byBpbCBjaGVjayBnbG9iYWxlIGluIGJhc2UgYSBzZSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBzZWxlemlvbmF0aSBvIG1lbm8uXHJcbiAgICAgICAgLy8gRXZpdG8gZGkgZmFyZSBxdWVzdGUgb3BlcmF6aW9uaSBzZSBsYSBzZWxlemlvbmUgZGVyaXZhIHByb3ByaW8gZGFsIGdsb2JhbCBDaGVja1xyXG4gICAgICAgIGlmIChnbG9iYWxDaGVjayA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9ICF0aGlzLmVzdC5ib3VuZFNvdXJjZS5zb21lKHQgPT4gIXQuX3NlbGVjdGVkICYmICF0Ll9zZXApO1xyXG5cclxuICAgICAgICB0aGlzLmZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExvZ2ljYSBzZW1wbGlmaWNhdGEgcmlzcGV0dG8gYWxsJ29yaWdpbmFsZSAqKnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKiogcGVyIGxhdm9yYXJlIGluIHVuYSBtb2RhbGl0w6AgaW4gY3VpIHR1dHRpIGdsaSBlbGVtZW50aSBzb25vIGNhcmljYXRpICgqKkFycmF5R3JvdXBpbmcqKiA9IHRydWUpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNpbXBsZVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBpdG1fZ3JvdXA6IGFueSwgc2VsX2l0bTogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcblxyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5hZGRJdGVtKGVsLCB0cmlwdGljSXRlbSkgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9pdG0pXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cCAmJiBhbGxfaXRtcyAmJiBhbGxfaXRtcy5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEdyb3VwKGl0bV9ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cClcclxuICAgICAgICAgICAgICAgICAgICBpdG1fZ3JvdXAuX3NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHNlbGV6aW9uYXJlIHVuIGdydXBwbyBlLCByaWNvcnNpdmFtZW50ZSwgc2UgdHV0dGkgaSBncnVwcGkgc290dG9zdGFudGkgYWwgcGFyZW50IHNvbm8gc2VsZXppb25hdGksIHNlbGV6aW9uYXJlIGkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gZGEgc2VsZXppb25hcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RHcm91cChncm91cDogYW55KSB7XHJcbiAgICAgICAgZ3JvdXAuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRHcm91cFBhcmVudChncm91cCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCAmJiB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMobnVsbCwgcGFyZW50LCBudWxsLCB0cnVlKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExhIGxvZ2ljYSBkaSBxdWVzdGEgZnVuemlvbmUgw6ggbmF0YSBlc3NlbnppYWxtZW50ZSBkYSBzcGFtIGRpIHRyaWFsICYgZXJyb3IgZWQgw6ggc3RhdGEgdGVzdGF0YSBzb2xvIGZpbm8gYSBkdWUgbGl2ZWxsaSBkaSByYWdncnVwcGFtZW50byxcclxuICAgICAqIHF1YWxzaWFzaSBjb3NhIHZhZGEgb2x0cmUgbm9uIMOoIDEwMCUgZGV0dG8gY2hlIGZ1bnppb25pLi4uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBhbGw6IGJvb2xlYW4sIGdyb3VwOiBib29sZWFuLCBzZWw6IGJvb2xlYW4sIHNlbF9pdG06IGFueVtdLCBzZWxfZ3JwOiBhbnlbXSwgZGVzZWxfaXRtOiBhbnlbXSwgZGVzZWxfZ3JwOiBhbnlbXSwgYWxsX2l0bXM6IGFueVtdLCBhbGxfZ3JwczogYW55W10sIHBhcmVudF9pbmNsOiBib29sZWFuLCBwYXJlbnRfZXhjbDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCB0cmlwdGljR3JvdXAgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdleGNsdXNpb24nLCBiYXNlKTtcclxuICAgICAgICBsZXQgdHJpcHRpY2dycEV4Y2wgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwX2V4Y2x1c2lvbicsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKSBzZWxfaXRtLmZvckVhY2goZWwgPT4gdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9ncnApIHNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNHcm91cCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9pdG1zKSBhbGxfaXRtcy5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljZ3JwRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9pdG0pIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9ncnApIGRlc2VsX2dycC5mb3JFYWNoKGdyID0+IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2dycHMpIGFsbF9ncnBzLmZvckVhY2goZ3IgPT4geyBnci5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwYXJlbnRfZXhjbCA9PSBudWxsICYmIGFsbCkgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudF9leGNsIHx8ICghYWxsICYmIHBhcmVudF9leGNsID09IG51bGwpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBldml0YXJlIGRpIHJpc2NyaXZlcmUgb2duaSBzYW50YSB2b2x0YSBhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhvZihpdGVtKSwgMSk7ICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogYW55LCB0cmlwdGljPzogQ2FjaGVUcmlwdGljKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5kZWxldGUoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gISFpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBldml0YXJlIGRpIHJpc2NyaXZlcmUgb2duaSBzYW50YSB2b2x0YSBhcnJheS5wdXNoKGl0ZW0pOyBlIGxhIGdlc3Rpb25lIGRlbGxhICAqL1xyXG4gICAgcHJpdmF0ZSBhZGRJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0cmlwdGljLmluZGV4X2NhY2hlLmdldChpdGVtLl9oYXNoKSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gdHJpcHRpYy5hcnJheS5wdXNoKGl0ZW0pIC0gMTtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5zZXQoaXRlbS5faGFzaCwgaXRlbSk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgdHJpdHRpY28gZGkgc2VsZXppb25lLCBjaW/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