@esfaenza/es-table 15.2.26 → 15.2.27

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.
@@ -308,7 +308,19 @@ export class ColumnMetadataHandler {
308
308
  let newColset = [];
309
309
  if (!this.est.ColumnsList || this.est.ColumnsList.length == 0)
310
310
  return;
311
- let columns = this.est.viewMode ? ([...(this.est.DynamicRowColumnsDefinition?.map(t => t.PropertyName) || []), ...(this.est.DynamicOperations?.map(t => t.id) || [])] || view.columns) : this.est.arrayColumns;
311
+ let columns = [];
312
+ // Modlaità view ->
313
+ if (this.est.viewMode) {
314
+ // colonne dinamiche -> prendo l'insieme delle colonne e operazioni dinamiche definite
315
+ // standard -> prendo le colonne della view
316
+ if (this.est.DynamicRowColumnsDefinition)
317
+ columns = [...(this.est.DynamicRowColumnsDefinition?.map(t => t.PropertyName) || []), ...(this.est.DynamicOperations?.map(t => t.id) || [])];
318
+ else
319
+ columns = view.columns;
320
+ }
321
+ // Modalità array -> prendo le colonne array
322
+ else
323
+ columns = this.est.arrayColumns;
312
324
  this.est.ColumnsList.forEach(c => {
313
325
  // Se la colonna è pinnata mi arriva col simoleon, ma anche se è una composizione di più colonne
314
326
  let exCl = columns.filter(cc => (cc.startsWith('§') ? cc.substring(1) : cc) == c.id);
@@ -814,4 +826,4 @@ export class ColumnMetadataHandler {
814
826
  });
815
827
  }
816
828
  }
817
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sdW1uTWV0YWRhdGFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTWpFLFVBQVU7QUFDVixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3JFLDZIQUE2SDtBQUM3SCxNQUFNLE9BQU8scUJBQXFCO0lBRTlCLHlCQUF5QjtJQUN6QixZQUFvQixHQUFxQixFQUFVLFNBQTJCLEVBQVUsT0FBdUIsRUFBVSxXQUErQixFQUFVLEdBQXVCO1FBQXJLLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW9CO0lBQUksQ0FBQztJQUU5TDs7Ozs7T0FLRztJQUNJLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxLQUFxQjtRQUN4RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakcsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElB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SUFDSSxXQUFXLENBQUMsRUFBVTtRQUN6QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCw4SEFBOEg7SUFDdkgsd0JBQXdCO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gTGlic1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcblxyXG4vLyBDb21wb25lbnRpIC8gRGlyZXR0aXZlXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5pbXBvcnQgeyBFc1RkRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZXNfdGQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEVzVGhEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9lc190aC5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IFV0aWxpdGllc0hhbmRsZXIgfSBmcm9tIFwiLi9VdGlsaXRpZXNIYW5kbGVyXCI7XHJcbmltcG9ydCB7IFJvd0dyb3VwaW5nSGFuZGxlciB9IGZyb20gXCIuL1Jvd0dyb3VwaW5nSGFuZGxlclwiO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBPcmRlcmluZyB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBPcmRlcmluZ1wiO1xyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwU2VhcmNoXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9Fc1RhYmxlQ29sdW1uXCI7XHJcbmltcG9ydCB7IEVzVGFibGVNdWx0aVZhbHVlIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0VzVGFibGVNdWx0aVZhbHVlXCI7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBnZXN0aXNjZSB0dXR0ZSBsZSBpbmZvcm1haXpvbmkgcmVsYXRpdmUgYWxsZSBjb2xvbm5lOiB2aXNpYmlsaXTDoCwgcG9zaXppb25lLCBzdGF0byBkaSBwaW4vdW5waW4sIGVjYyBlY2MuLi4gKi9cclxuZXhwb3J0IGNsYXNzIENvbHVtbk1ldGFkYXRhSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgdXRpbGl0aWVzOiBVdGlsaXRpZXNIYW5kbGVyLCBwcml2YXRlIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIHByZWZTZXJ2aWNlOiBQcmVmZXJlbmNlc1NlcnZpY2UsIHByaXZhdGUgcmdIOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBnZXN0aXNjZSBpbCBjYW1iaW8gZGkgT3JkaW5hbWVudG8gZGkgdW5hIGNvbG9ubmFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgZGVsbGEgY29sb25uYSBpbCBjdWkgb3JpZG5hbWVudG8gw6ggY2FtYmlhdG9cclxuICAgICAqIEBwYXJhbSB7J0RFU0MnIHwgJ0FTQyd9IG9yZGVyIE51b3ZvIG9yZGluZSBzZWxlemlvbmF0byBwZXIgbGEgY29sb25uYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlVEhPcmRlckNoYW5nZShpZDogc3RyaW5nLCBvcmRlcjogJ0RFU0MnIHwgJ0FTQycpIHtcclxuICAgICAgICBsZXQgb3JkZXJzID0gdGhpcy5lc3Qudmlld01vZGUgPyAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pikub3JkZXJzIDogdGhpcy5lc3QuYXJyYXlPcmRlcnM7XHJcbiAgICAgICAgbGV0IG9yZGVyVG9BZGQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvcmRlclRvUmVtb3ZlOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBTZSBwZXIgcXVhbGNoZSBtb3Rpdm8gaWwgY29zdHJ1dHRvcmUgbm9uIMOoIHBhc3NhdG8gKGNhY2hlIHRhcnBhdGUgbyBzaW1pbGEpIGZpeG9cclxuICAgICAgICBpZiAoIW9yZGVycyAmJiB0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgKHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLm9yZGVycyA9IFtdO1xyXG4gICAgICAgIGVsc2UgaWYgKCFvcmRlcnMgJiYgdGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheU9yZGVycyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IG9yZGVyc1tpXTtcclxuICAgICAgICAgICAgaWYgKHQuaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHQub3JkZXIgPSBvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlclRvQWRkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJUb1JlbW92ZSA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcmRlclRvUmVtb3ZlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb3JkZXJzLnNwbGljZShvcmRlclRvUmVtb3ZlLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3JkZXJUb0FkZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuTXVsdGlwbGVPcmRlcmluZ0RpcmVjdGl2ZXMpXHJcbiAgICAgICAgICAgICAgICBvcmRlcnMucHVzaChuZXcgQXBwT3JkZXJpbmcoaWQsIG9yZGVyKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5vcmRlcnMgPSBbbmV3IEFwcE9yZGVyaW5nKGlkLCBvcmRlcildO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5T3JkZXJzID0gW25ldyBBcHBPcmRlcmluZyhpZCwgb3JkZXIpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TYWx2byBsZSBwcmVmZXJlbmNlcyBkaSBxdWVzdGEgdmlld1xyXG4gICAgICAgIC8vRGkgZGVmYXVsdCByZWdpc3RybyBvcmRpbmFtZW50byBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmUgbmVsbGEgdmlzdGEuIFNvbG8gbGUgY29zZSBkaSBVSVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5TYXZlUHJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC52aWV3TW9kZSA/ICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3IHx8IHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pIDogbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclZpZXdQcmVmZXJlbmNlcyhjYXN0ZWRWaWV3KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uT3JkZXJDaGFuZ2VkLmVtaXQoeyBpZCwgb3JkZXIgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJnSC5lbWl0Um93R3JvdXBpbmdTZWFyY2hlcyhpZCwgb3JkZXJzKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0cmEgbGUgcHJlZmVyZW5jZSByZWxhdGl2ZSBhbGxhIHZpZXcgcGFzc2F0YSBjb21lIHBhcmFtZXRyb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gY2FzdGVkVmlldyBWaWV3IGRpIGN1aSBzYWx2YXJlIGNvbG9ubmUgZSBvcmRpbmFtZW50byBjb2xvbm5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3RlclZpZXdQcmVmZXJlbmNlcyhjYXN0ZWRWaWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGlmICghdGhpcy5lc3QubmdDb250cm9sLm5hbWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgYXZlcmUgdW4gJ25hbWUnIHBlciBsYSB0YWJlbGxhXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucHJlZlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgY2hlIGlsIHBhY2NoZXR0byBAZXNmYWVuemEvcHJlZmVyZW5jZXMgc2lhIGluc3RhbGxhdG9cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zID0gdGhpcy5lc3QuYXJyYXlNb2RlID8gdGhpcy5lc3QuYXJyYXlDb2x1bW5zIDogY2FzdGVkVmlldy5jb2x1bW5zO1xyXG4gICAgICAgIGxldCBjb2x1bW5zT3JkZXJpbmdzID0gdGhpcy5lc3QuYXJyYXlNb2RlID8gdGhpcy5lc3QuYXJyYXlDb2x1bW5PcmRlcmluZyA6IGNhc3RlZFZpZXcuY29sdW1uX29yZGVyaW5nO1xyXG4gICAgICAgIGxldCBjb2x1bW5PcmRlcnMgPSB0aGlzLmVzdC5hcnJheU1vZGUgPyBbXSA6IGNhc3RlZFZpZXcub3JkZXJzO1xyXG4gICAgICAgIHZhciB0b1N0b3JlID0ge1xyXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnV0aUV4dHMuZGVlcENsb25lKGNvbHVtbnMpIGFzIHN0cmluZ1tdLFxyXG4gICAgICAgICAgICBjb2x1bW5fb3JkZXJpbmc6IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUoY29sdW1uc09yZGVyaW5ncykgYXMgc3RyaW5nW10sXHJcbiAgICAgICAgICAgIG9yZGVyczogdGhpcy51dGlFeHRzLmRlZXBDbG9uZShjb2x1bW5PcmRlcnMpIGFzIHN0cmluZ1tdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnByZWZTZXJ2aWNlLnNldEl0ZW0oPHN0cmluZz50aGlzLmVzdC5uZ0NvbnRyb2wubmFtZSwgdG9TdG9yZSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0ZW5kbyBkYWdsaSAqKkVzVGhzKiogZXN0cmFwcG9sbyBsYSBsaXN0YSBkaSAqKkVzVGFibGVDb2x1bW4qKiBjaGUgcXVlc3RhIHRhYmVsbGEgZG92csOgIGV2ZW50dWFsbWVudGUgZ2VzdGlyZSBwZXIgVmlzaWJpbGl0w6AgZSBPcmRpbmVcclxuICAgICAqXHJcbiAgICAgKiBDb3N0bzogMSBzY2FuIEVzVGhzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBDb2xvbm5lIGRlbGxhIHRhYmVsbGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJldmlld0NvbHVtbnNMaXN0KHRoczogRXNUaERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSBbXTtcclxuICAgICAgICBpZiAodGhzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEFwcGVuYSBpbCBjb250ZW50Q2hpbGRyZW4gw6ggdmFsb3JpenphdG8gc2NvcnJvIHR1dHRpIGdsaSBoZWFkZXJcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGgudGg7XHJcbiAgICAgICAgICAgIC8vIFNlIG5vbiBobyB1biBpZCBpbCB0aCDDqCBjb25zaWRlcmF0byBpbmVydGVcclxuICAgICAgICAgICAgaWYgKCFjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNhbHZvIGxlIGluZm9ybWF6aW9uaSBkZWxsJ2hlYWRlciBwZXIgZmFyIHBhcnRlIGRlbGxhIGxpc3RhIGRhIGN1aSBzY2VnbGllcmUgcXVhbGkgY29sb25uZSB2aXN1YWxpenphcmUvbmFzY29uZGVyZVxyXG4gICAgICAgICAgICAvLyBEaSBkZWZhdWx0IGxhIHZpc2liaWxpdMOgIMOoIHF1ZWxsYSBpbXBvc3RhdGEgbmVsIGNvbXBvbmVudGVcclxuICAgICAgICAgICAgaWYgKCh0aGlzLmVzdC5IaWRkZW5Db2x1bW5zIHx8IHRoLnRoVmlzaWJsZSkgJiYgdGgudGhJZikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzbHlQaW5uZWQgPSAhdGhpcy5lc3QuQ29sdW1uc0xpc3QgfHwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoID09IDAgPyBudWxsIDogdGhpcy5lc3QuQ29sdW1uc0xpc3QuZmluZCh0ID0+IHQuaWQgPT0gY29sdW1uKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvQWRkID0gbmV3IEVzVGFibGVDb2x1bW4oY29sdW1uLCB0aC50aFN0YXRpY0NvbnRlbnQsIHRoLnRoVmlzaWJsZSwgKHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cCksIHByZXZpb3VzbHlQaW5uZWQgPT0gbnVsbCA/IHRoLnRoUGlubmVkIDogcHJldmlvdXNseVBpbm5lZC5waW5uZWQsIHRoLnRoUGlubmFibGUsIHRoLnRoUGlubmVkV2lkdGgsIHRoLlRlbXBsYXRlLCB0aC5fdGhQYXJlbnRzLCB0aC5fbXVsdGksIHRoLl9tdWx0aV9jb250ZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c2x5UGlubmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHRvQWRkLnByZXZfaW5kZXggPSBwcmV2aW91c2x5UGlubmVkLnByZXZfaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5wdXNoKHRvQWRkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRoaXMuZXN0LkNvbHVtbnNMaXN0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgYykpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSW4gY2FzbyBzaWFubyBjb25maWd1cmF0aSBkZWkgdGggXCJNdWx0aVwiICh2ZWRlcmUgbGEgZGVzY3JpemlvbmUgZGVsIGNhbXBvICoqdGhNdWx0aSoqIGRpICoqRXNUaERpcmVjdGl2ZSoqKSBxdWVzdG8gbWV0b2RvIGxpIFwic3JvdG9sYVwiIGluIHR1dHRpIGkgdGgvdGQgY2hlIGRldm9ubyBlZmZldHRpdmFtZW50ZSBkaXZlbnRhcmUgKi9cclxuICAgIHB1YmxpYyBleHBhbmRNdWx0aVRoc0FuZFRkcyh0aHM6IEVzVGhEaXJlY3RpdmVbXSwgdGRzOiBFc1RkRGlyZWN0aXZlW10sIGl0ZW1zOiBhbnlbXSk6IHtleHBUaHM6IEVzVGhEaXJlY3RpdmVbXSwgZXhwVGRzOiBFc1RkRGlyZWN0aXZlW119IHtcclxuXHJcbiAgICAgICAgLy8gUmVnaXN0cm8gbGUgaW5mbyBzdWkgbXVsdGlwcm92aWRlclxyXG4gICAgICAgIGxldCBtdWx0aURlZnM6IHsgW2lkOiBzdHJpbmddOiB7IE9uPzogc3RyaW5nLCB0aHJlZjogRXNUaERpcmVjdGl2ZSwgdGRyZWY6IEVzVGREaXJlY3RpdmUsIHRoZ2VuOiB7IFtpZDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZSB9LCB0ZGdlbjogeyBbaWQ6IHN0cmluZ106IEVzVGREaXJlY3RpdmUgfSB9IH0gPSB7IH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoLnRoTXVsdGkpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIG11bHRpRGVmc1t0aC50aF0gPSB7IE9uOiB0aC50aCwgdGRyZWY6IG51bGwsIHRocmVmOiB0aCwgdGhnZW46IHt9LCB0ZGdlbjoge30gfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFzc2Vnbm8gbGUgaW5mbyBhbmNoZSBhaSB0ZFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1tpXTtcclxuICAgICAgICAgICAgdGQuX211bHRpID0gISFtdWx0aURlZnNbdGQudGRdO1xyXG4gICAgICAgICAgICBpZih0ZC5fbXVsdGkpXHJcbiAgICAgICAgICAgICAgICBtdWx0aURlZnNbdGQudGRdLnRkcmVmID0gdGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSaW11b3ZvIGkgbXVsdGl0ZW1wbGF0ZSBkYWxsZSBiYWxsZVxyXG4gICAgICAgIC8vIE4uQjogRGF0byBjaGUgbGEgcHJpbWEgb3BlcmF6aW9uZSBzdSB0aCBlIHRkIMOoIHF1ZXN0YSBpbCByaWZlcmltZW50byBvcmlnaW5hbGUgdmllbmUgc292cmFzY3JpdHRvLCBxdWVzdG8gc2lnbmlmaWNhIGNoZSBkZXZvIHJpLWVtZXR0ZXJlIGkgZHVlIG51b3ZpIGFycmF5XHJcbiAgICAgICAgdGhzID0gdGhzLmZpbHRlcih0ID0+ICF0LnRoTXVsdGkpO1xyXG4gICAgICAgIHRkcyA9IHRkcy5maWx0ZXIodCA9PiAhdC5fbXVsdGkpO1xyXG5cclxuICAgICAgICBsZXQgcGFyZW50VGhzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHsgfTtcclxuICAgICAgICBsZXQgYWRkZWRIZWFkZXJzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHsgfTtcclxuICAgICAgICBsZXQgdGRzVG9BZGQ6IHsgW2lkOiBzdHJpbmddIDogRXNUZERpcmVjdGl2ZX0gPSB7IH07XHJcbiAgICAgICAgbGV0IHRoc1RvQWRkOiBFc1RoRGlyZWN0aXZlW10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUGVyIG9nbmkgaXRlbSB2ZWRvIHNlIGNpIHNvbm8gZGVpIG11bHRpIHBlciBsZSBwcm9wcmlldMOgIGNoZSBsaSBkZWZpbmlzY29ub1xyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gbXVsdGlEZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZSBsYSBwcm9wcmlldMOgIGRlbCBtdWx0aSBlc2lzdGUgbmVsbCdvZ2dldHRvIGVkIGhhIHVuYSBsdW5naGV6emFcclxuICAgICAgICAgICAgICAgIGlmIChpdG1bcHJvcF0gJiYgaXRtW3Byb3BdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtdWx0aVJlZiA9IG11bHRpRGVmc1twcm9wXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVmdGQgPSBtdWx0aVJlZi50ZHJlZjtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVmdGggPSBtdWx0aVJlZi50aHJlZjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGl0bVtwcm9wXS5sZW5ndGg7IGlpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlYWRlciBnacOgIGFnZ2l1bnRvLCBub24gZGV2byBpbnNlcmlyZSBhbHRyaSB0ZW1wbGF0ZSBkaSBoZWFkZXIvY29sb25uYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXN0bXYgPSA8RXNUYWJsZU11bHRpVmFsdWU+aXRtW3Byb3BdW2lpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3Rtdi5faGVhZGVyc0hpZXJhcmNoeSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdG12Ll9oZWFkZXJzSGllcmFyY2h5ID0gZXN0bXYuaGVhZGVyX2dyb3VwID8gZXN0bXYuaGVhZGVyX2dyb3VwLnNwbGl0KFwiPlwiKS5tYXAodCA9PiB0LnRyaW0oKSkgOiBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJWYWx1ZSA9IGVzdG12LmhlYWRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGVzdG12LmhlYWRlcl9ncm91cCB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50c0hpZXIgPSBlc3Rtdi5faGVhZGVyc0hpZXJhcmNoeTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRlZEhlYWRlcnNbYCR7cGFyZW50fV8ke2hlYWRlclZhbHVlfWBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkSGVhZGVyc1tgJHtwYXJlbnR9XyR7aGVhZGVyVmFsdWV9YF0gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyIG9nbmkgdmFsb3JlIGRpdmVyc28gZGVsbGUgcHJvcHJpZXTDoCBkZXZvIGFnZ2l1bmdlcmUgdW4gdGQgZSB1biB0aCwgcXVlc3QndWx0aW1vIGRldidlc3NlcmUgZXZlbnR1YWxtZW50ZSBjb2xsZWdhdG8gYWQgdW4gaGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXd0SCA9IG5ldyBFc1RoRGlyZWN0aXZlKHJlZnRoLlRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEguX211bHRpID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEguX211bHRpX2NvbnRlbnQgPSBoZWFkZXJWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGggPSBgJHtwcm9wfV8ke2lpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoQ2xhc3MgPSByZWZ0aC50aENsYXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aFNocmluayA9IHJlZnRoLnRoU2hyaW5rO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aElmID0gcmVmdGgudGhJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhWaXNpYmxlID0gcmVmdGgudGhWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aFdyYXAgPSByZWZ0aC50aFdyYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsIHBhcmVudCDDqCBzZW1wcmUgbCd1bHRpbW8gbmVsbGEgZ2VyYXJjaGlhIGRpIHBhZHJpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoUGFyZW50ID0gcGFyZW50c0hpZXJbcGFyZW50c0hpZXIubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoT3JkZXJhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHNIaWVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyID0gcGFyZW50c0hpZXJbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFRoc1twYXJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFRoc1twYXJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGhQYXJlbnQgPSBuZXcgRXNUaERpcmVjdGl2ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoUGFyZW50LnRoID0gcGFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhQYXJlbnQuX211bHRpX2NvbnRlbnQgPSBwYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aFBhcmVudC50aFBhcmVudCA9IGkgPiAwID8gcGFyZW50c0hpZXJbaSAtIDFdIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoc1RvQWRkLnB1c2godGhQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHNUb0FkZC5wdXNoKG5ld3RIKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUZCA9IG5ldyBFc1RkRGlyZWN0aXZlKHJlZnRkLlRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQuX211bHRpID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQudGQgPSBgJHtwcm9wfV8ke2lpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RkLnRkQ2xhc3MgPSByZWZ0ZC50ZENsYXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC50ZElmID0gcmVmdGQudGRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQudGRWaXNpYmxlID0gcmVmdGQudGRWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZHNUb0FkZFtuZXdUZC50ZF0gPSBuZXdUZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE9yZGlubyBnbGkgaGVhZGVyIGFnZ2l1bnRpIGluIGJhc2UgYWwgUGFyZW50LCBzZSBwcmVzZW50ZSwgZSBsaSBhZ2dpdW5nbyBhbGxhIGxpc3RhIGRlaSB0aCwgZG9wb2RpY2jDqSBpbiBiYXNlIGFsbG8gc3Rlc3NvIG9yZGluYW1lbnRvIGFnZ2l1bmdvIGkgcmVsYXRpdmkgdGRcclxuICAgICAgICBsZXQgb3JkZXJlZFRocyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBQcmltYSBtZXR0byB0dXR0aSBpIHRoIHNlbnphIHBhcmVudCwgcG9pIHBlciBvZ25pIHBhcmVudCBwcmVuZG8gaSB0aCBvcmRpbmF0aSBjb21lIGxpIHRyb3ZvIG5lbGxhIGxpc3RhXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoc1RvQWRkLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgaWYoIXRoc1RvQWRkW2ldLnRoUGFyZW50KVxyXG4gICAgICAgICAgICAgICAgb3JkZXJlZFRocy5wdXNoKHRoc1RvQWRkW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBwcm9wIGluIHBhcmVudFRocyl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aHNUb0FkZC5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aHNUb0FkZFtpXTtcclxuICAgICAgICAgICAgICAgIGlmKHRoLnRoUGFyZW50ICYmIHRoLnRoUGFyZW50ID09IHByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJlZFRocy5wdXNoKHRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhzID0gWy4uLnRocywgLi4udGhzVG9BZGRdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzVG9BZGQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gU2UgaWwgdGggw6ggdW4gaGVhZGVyIHRkIHZlcnJlYmJlIHVuZGVmaW5lZC4gTG8gYWdnaXVuZ28gc29sbyBzZSDDqCBlZmZldHRpdmFtZW50ZSBwcmVzZW50ZVxyXG4gICAgICAgICAgICBsZXQgdGQgPSB0ZHNUb0FkZFt0aHNUb0FkZFtpXS50aF07XHJcbiAgICAgICAgICAgIGlmICh0ZClcclxuICAgICAgICAgICAgICAgIHRkcy5wdXNoKHRkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGV4cFRkczogdGRzLCBleHBUaHM6IHRocyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlbmRlIGkgdGggZSBpIHRkIGluIG1vZGFsaXTDoCBkaXJldGl2ZSBlIGxpIG9yZGluYSBpbiBiYXNlIGEgc2UgY2kgc29ubyBjb2xvbm5lIGZpeGVkIG8gbWVub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZUZpeGVkQ29sdW1uc0F0VGhlQmVnaW5uaW5nKHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSkge1xyXG5cclxuICAgICAgICBsZXQgZml4ZWRzID0gMCwgcGlubmVkcyA9IDA7XHJcbiAgICAgICAgbGV0IGNvbHVtbnNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGFibGVDb2x1bW47IH0gPSB7fTtcclxuICAgICAgICBsZXQgY29sdW1uc0luZGV4Q2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBudW1iZXI7IH0gPSB7fTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyBsYSBjYWNoZSBkZWxsZSBjb2xvbm5lXHJcbiAgICAgICAgZm9yIChsZXQgY29saSA9IDA7IGNvbGkgPCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5lc3QuQ29sdW1uc0xpc3RbY29saV07XHJcbiAgICAgICAgICAgIGNvbHVtbnNDYWNoZVtjb2wuaWRdID0gY29sO1xyXG5cclxuICAgICAgICAgICAgLy8gQW5jaGUgcGVyIGxlIGNvbHVtbnNsaXN0IHNwb3N0byBsZSBwaW5uYXRlIG8gbGUgZml4ZWQgYWxsJ2luaXppb1xyXG4gICAgICAgICAgICBpZiAoY29sLnBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGkgIT0gcGlubmVkcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhpcy5lc3QuQ29sdW1uc0xpc3QsIGNvbGksIHBpbm5lZHMpO1xyXG4gICAgICAgICAgICAgICAgcGlubmVkcysrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZSB1bmEgY29sb25uYSDDqCBzaWEgcGlubmF0YSBjaGUgZml4YXRhIGxhIGNvbnNpZGVybyB1bmljYW1lbnRlIHBpbm5hdGFcclxuICAgICAgICAgICAgaWYgKGNvbC5maXhlZCAmJiAhY29sLnBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGkgIT0gcGlubmVkcyArIGZpeGVkcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhzLCBjb2xpLCBwaW5uZWRzICsgZml4ZWRzKTtcclxuICAgICAgICAgICAgICAgIGZpeGVkcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwaW5uZWRzID0gZml4ZWRzID0gMDtcclxuXHJcbiAgICAgICAgLy8gU3Bvc3RvIHR1dHRpIGdsaSBoZWFkZXIgZml4ZWQgbyBwaW5uZWQgYWxsJ2luaXppb1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJpYXNzZWdubyBzZW1wcmUgcGVyIHJpcHVsaXJlIHZhbG9yaSBkaSBwYXJ0ZW56YSBvIHBlciBhZ2dpb3JuYXJsaSBpbiBjYXNvIGRpIG1vZGlmaWNoZSB1dGVudGVcclxuICAgICAgICAgICAgdGgudGhQaW5uZWQgPSAoIWNvbHVtbnNDYWNoZVt0aC50aF0gJiYgdGgudGhQaW5uZWQpIHx8IChjb2x1bW5zQ2FjaGVbdGgudGhdICYmIGNvbHVtbnNDYWNoZVt0aC50aF0ucGlubmVkKTtcclxuICAgICAgICAgICAgaWYgKHRoLnRoUGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBwaW5uZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aHMsIGksIHBpbm5lZHMpO1xyXG4gICAgICAgICAgICAgICAgcGlubmVkcysrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL0luIHF1ZXN0byBjYXNvIHNvbm8gaW5mb3JtYXppb25pIHN0YXRpY2hlIGludmVjZSwgbm9uIG1vZGlmaWNhYmlsaSBkYWxsJ3V0ZW50ZSwgcXVpbmRpIG5vbiBtaSBkw7IgcHJlb2NjdXBhemlvbmlcclxuICAgICAgICAgICAgaWYgKCh0aC50aEZpeGVkIHx8IHRoLnRoR3JvdXApICYmICF0aC50aFBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gcGlubmVkcyArIGZpeGVkcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhzLCBpLCBwaW5uZWRzICsgZml4ZWRzKTtcclxuICAgICAgICAgICAgICAgIGZpeGVkcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWNoZSBkZWdsaSBpbmRpY2kgcGVyIHJpcG9zaXppb25hcmUgaSB0ZCBjb21lIGkgdGhcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgY29sdW1uc0luZGV4Q2FjaGVbKDxFc1RoRGlyZWN0aXZlPnRoc1tpXSkudGhdID0gaTtcclxuXHJcbiAgICAgICAgLy8gUmlvcmRpbm8gbGUgY2VsbGUgcGVyIGZhcmdsaSBtYW50ZW5lcmUgbGEgc3Rlc3NhIHN0cnV0dHVyYSBkZWkgdGhcclxuICAgICAgICBsZXQgbmV3VGRzID0gbmV3IEFycmF5KHRocy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IHRkc1tpXSBhcyBFc1RkRGlyZWN0aXZlO1xyXG4gICAgICAgICAgICBuZXdUZHNbY29sdW1uc0luZGV4Q2FjaGVbaXRlbS50ZF1dID0gaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMgPSBwaW5uZWRzID4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSW4gYmFzZSBhbGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgY2FsY29sYSBsZSBkaW1lbmlvbmkgZGVsbGUgY29sb25uZSBwaW5uYXRlICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVQaW5uZWRDb2x1bW5zV2lkdGgoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5IYXNQaW5uZWRDb2x1bW5zKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZXN0LlBpbm5lZENvbnRhaW5lcldpZHRoID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2wgPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGNvbC5waW5uZWQgJiYgY29sLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5QaW5uZWRDb250YWluZXJXaWR0aCArPSBjb2wucGlubmVkV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXN0LlBpbm5lZENvbnRhaW5lcldpZHRoICs9IHRoaXMuZXN0LlNlbGVjdGlvbiA/IDI1IDogMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlcm1pbmF0byBpbCBiaW5kaW5nIGRlbGxlIGNvbG9ubmUgZGEgKipyZXZpZXdDb2x1bW5zTGlzdCoqIGUgZGVsbGEgKipWaWV3KiogZGFsICoqd3JpdGVWYWx1ZSoqIHF1ZXN0byBtZXRvZG8gc2kgb2NjdXBhXHJcbiAgICAgKiBkZWxsJ2FsbGluZWFtZW50byBkZWxsZSBpbmZvcm1hemlvbmkgZnJhIGxlIGNvbG9ubmUgY2FsY29sYXRlIGludGVybmFtZW50ZSBlIGxlIGluZm9ybWF6aW9uaSBzdWxsZSBjb2xvbm5lIGNoZSBhcnJpdmFubyBkYWxsJ0FwcFNlYXJjaFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgQXBwU2VhcmNoIGRhIHV0aWxpenphcmUgcGVyIHF1ZXN0YSBvcGVyYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUxvY2FsVmlzaWJpbGl0eSBJbmRpY2EgZGkgdXRpbGl6emFyZSBsZSBpbXBvc3RhemlvbmkgZGkgdmlzaWJpbGl0w6AgbG9jYWxpIHNlbnphIGFsbGluZWFybGUgYWxsYSB2aWV3XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGlnbkNvbHVtbnNJZkxvYWRlZFZpZXcodmlldzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBsZXQgZW1pdENoYW5nZWQgPSB0aGlzLmVzdC52aWV3TW9kZSAmJiB2aWV3LnNhdmVkc3RhdGU7XHJcbiAgICAgICAgbGV0IG5ld0NvbHNldCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZXN0LkNvbHVtbnNMaXN0IHx8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zID0gdGhpcy5lc3Qudmlld01vZGUgPyAoWy4uLih0aGlzLmVzdC5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24/Lm1hcCh0ID0+IHQuUHJvcGVydHlOYW1lKSB8fCBbXSksIC4uLih0aGlzLmVzdC5EeW5hbWljT3BlcmF0aW9ucz8ubWFwKHQgPT4gdC5pZCkgfHwgW10pXSB8fCB2aWV3LmNvbHVtbnMpOiB0aGlzLmVzdC5hcnJheUNvbHVtbnM7XHJcbiAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgLy8gU2UgbGEgY29sb25uYSDDqCBwaW5uYXRhIG1pIGFycml2YSBjb2wgc2ltb2xlb24sIG1hIGFuY2hlIHNlIMOoIHVuYSBjb21wb3NpemlvbmUgZGkgcGnDuSBjb2xvbm5lXHJcbiAgICAgICAgICAgIGxldCBleENsID0gY29sdW1ucy5maWx0ZXIoY2MgPT4gKGNjLnN0YXJ0c1dpdGgoJ8KnJykgPyBjYy5zdWJzdHJpbmcoMSkgOiBjYykgPT0gYy5pZCk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsYSBjb2xvbm5hIMOoIHBpbm5hdGEgYWdnaW9ybm8gbCdpbmZvcm1hemlvbmUgbmVsbGEgdmlld1xyXG4gICAgICAgICAgICBpZiAoZXhDbC5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgICAgIGMucGlubmVkID0gZXhDbFswXS5zdGFydHNXaXRoKCfCpycpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgbCdhcHBzZWFyY2ggdmllbmUgZGEgdW5vIHN0YXRvIHByZWNlZGVudGUsIHVzbyBsZSBpbmZvcm1hemlvbmkgc3VsbGUgY29sb25uZSBjaGUgaGEgZGVudHJvLCBhbHRyaW1lbnRpIHNvdnJhc2NyaXZvIHR1dHRvICAqKlxyXG4gICAgICAgICAgICBpZiAoYy52aXNpYmxlICYmIGNvbHVtbnMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICBuZXdDb2xzZXQucHVzaChjLmlkKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGhvIHVuYSBjb2xvbm5hIGxhdG8gQXBwU2VhcmNoIGUgbmVsbGEgQ29sdW1uTGlzdCBub24gw6ggdmlzaWJpbGUsIGFsbGluZW8gYWxsJ0FwcFNlYXJjaFxyXG4gICAgICAgICAgICBlbHNlIGlmIChleENsLmxlbmd0aCA9PSAxICYmICFjLnZpc2libGUgJiYgIXRoaXMuZXN0LnVzZUxvY2FsVmlzaWJpbGl0eSlcclxuICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBBbGxpbmVhbWVudG8gc3VsbCdBcHBTZWFyY2ggcGVyIGNhc2lzdGljaGUgaW52ZXJzZSBhbCBkaSBzb3ByYVxyXG4gICAgICAgICAgICBlbHNlIGlmIChleENsLmxlbmd0aCA9PSAwICYmIGMudmlzaWJsZSAgJiYgIXRoaXMuZXN0LnVzZUxvY2FsVmlzaWJpbGl0eSlcclxuICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBOb24gaG8gY29sb25uZSBuZWxsYSBhcHBzZWFyY2gsIHZ1b2wgZGlyZSBjaGUgc29ubyBhbCBwcmltbyBiaW5kaW5nXHJcbiAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAgICAgdmlldy5jb2x1bW5zID0gbmV3Q29sc2V0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5hcnJheUNvbHVtbnMgPSBuZXdDb2xzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMuZXN0LnZpZXdNb2RlICYmIHZpZXcuc2F2ZWRzdGF0ZSkgJiYgdGhpcy5lc3QuQ29sdW1uc09yZGVyaW5nICYmIHZpZXcuY29sdW1uX29yZGVyaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gU2NvcnJvIGdsaSBvcmRpbmFtZW50aSBjaGUgYXZldm8gc2FsdmF0byBlIHJpY3JlbyBsYSBDb2x1bW5zTGlzdCBpbiBiYXNlIGEgbG9yb1xyXG4gICAgICAgICAgICBsZXQgbmV3Q29sTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB2aWV3LmNvbHVtbl9vcmRlcmluZy5mb3JFYWNoKGNvID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuaWQgPT0gY28pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbExpc3QucHVzaChjKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlY3VwZXJvIGFuY2hlIGNhbXBpIG51b3ZpIGNoZSBuZWxsJ2l0ZXJhemlvbmUgdmVjY2hpYSBub24gYydlcmFubyAoc2VydmUgZHVyYW50ZSBsbyBzdmlsdXBwbyBpbiBtb2RvIGRhIG5vbiBwZXJkZXJzaSBmcmEgdW4gRURJVCArIEY1IGUgbCdhbHRybylcclxuICAgICAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghbmV3Q29sTGlzdC5maW5kKHQgPT4gdCA9PSBjLmlkKSlcclxuICAgICAgICAgICAgICAgICAgICBuZXdDb2xMaXN0LnB1c2goYyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QgPSBuZXdDb2xMaXN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW4gb2duaSBjYXNvIHF1ZXN0byBub24gbWkgc2VydmUgcGnDuSwgbG8gcmVzZXR0byAgKipcclxuICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgIHZpZXcuc2F2ZWRzdGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBkaSBxdWVzdGEgdmFyaWFiaWxlIHVzYXRhIG9uZS1iaW5kXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnVzZUxvY2FsVmlzaWJpbGl0eSlcclxuICAgICAgICAgICAgdGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChlbWl0Q2hhbmdlZClcclxuICAgICAgICAgICAgdGhpcy5lc3QuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gYmFzZSBhbGxhIHZpc2liaWxpdMOgIHJlZ2lzdHJhdGEgbmVsbGUgKipDb2x1bW5zTGlzdCoqIHF1ZXN0byBtZXRvZG8gc2kgb2NjdXBhIGRpIHByZW5kZXJlIHR1dHRpIGkgKipFc1RoRGlyZWN0aXZlKiogZWQgKipFc1RkRGlyZWN0aXZlKiogcmVsYXRpdmkgZSBuYXNvbmRlcmxpL21vc3RyYXJsaVxyXG4gICAgICpcclxuICAgICAqIENvc3RvOiAxIHNjYW4gQ29sdW1uc0xpc3QsIDEgc2NhbiBFc1RoRGlyZWN0aXZlcywgMSBzY2FuIEVzVGREaXJlY3RpdmVzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBIZWFkZXIgZGVsbGEgdGFiZWxsYVxyXG4gICAgICogQHBhcmFtIHtFc1RkRGlyZWN0aXZlW119IHRkcyBDZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IEFwcFNlYXJjaCBkYSB1dGlsaXp6YXJlIHBlciBxdWVzdGEgb3BlcmF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSwgdmlldzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBsZXQgbmV3Q29sc2V0ID0gW107XHJcbiAgICAgICAgbGV0IGZpeGVkVGhzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xyXG4gICAgICAgIGxldCBjb2x1bW5zQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RhYmxlQ29sdW1uOyB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgY29saSA9IDA7IGNvbGkgPCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5lc3QuQ29sdW1uc0xpc3RbY29saV07XHJcbiAgICAgICAgICAgIGNvbHVtbnNDYWNoZVtjb2wuaWRdID0gY29sO1xyXG4gICAgICAgICAgICBpZiAoY29sLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICBuZXdDb2xzZXQucHVzaCgoY29sLnBpbm5lZCA/IFwiwqdcIiA6IFwiXCIpICsgY29sLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXcpXHJcbiAgICAgICAgICAgIHZpZXcuY29sdW1ucyA9IG5ld0NvbHNldDtcclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheUNvbHVtbnMgPSBuZXdDb2xzZXQ7XHJcblxyXG4gICAgICAgIC8vIERhIHF1aSBpbiBwb2kgZGV2b25vIGVzc2VyZSBlc2VndWl0aSBTT0xPIGluIGZhc2UgZGkgd3JpdGVWYWx1ZSBxdWluZGkgZGV2byBhc3NpY3VyYXJtaSBkaSBwYXNzYXJsaSBudWxsIGluIHR1dHRpIGkgcGFzc2FnZ2kgZGl2ZXJzaSBkYSBxdWVsbG9cclxuICAgICAgICBpZiAodGhzKSB7XHJcbiAgICAgICAgICAgIC8vIERlZmluaXNjbyBzZSBsYSBjb2xvbm5hIMOoIHZpc2liaWxlIGluIGJhc2UgYWxsYSBzdWEgcmFwcHJlc2VudGF6aW9uZSBsb2NhbGUgaW4gQ29sdW1uc0xpc3RcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aC50aFZpc2libGUgPSB0aC50aEZpeGVkIHx8IChjb2x1bW5zQ2FjaGVbdGgudGhdID8gY29sdW1uc0NhY2hlW3RoLnRoXS52aXNpYmxlIDogdGgudGhWaXNpYmxlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aC50aEZpeGVkIHx8IHRoLnRoR3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgZml4ZWRUaHNbdGgudGhdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRkcykge1xyXG4gICAgICAgICAgICAvLyBEZWZpbmlzY28gc2UgbGEgY2VsbGEgw6ggdmlzaWJpbGUgaW4gYmFzZSBhbGxhIHN1YSByYXBwcmVzZW50YXppb25lIGxvY2FsZSBpbiBDb2x1bW5zTGlzdFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRkID0gdGRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGQudGRWaXNpYmxlID0gZml4ZWRUaHNbdGQudGRdIHx8IChjb2x1bW5zQ2FjaGVbdGQudGRdID8gY29sdW1uc0NhY2hlW3RkLnRkXS52aXNpYmxlIDogdGQudGRWaXNpYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lc3QuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsaW5lYSBnbGkgb3JkaW5hbWVudGkgZGF0aSBmcmEgbGUgKipFc1RocyoqIGUgbGUgaW5mb3JtYXppb25pIGFsbCdpbnRlcm5vIGRlbGxhIFZpZXcgYmluZGF0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgQXBwU2VhcmNoIGRhIHV0aWxpenphcmUgcGVyIHF1ZXN0YSBvcGVyYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxpZ25IZWFkZXJzT3JkZXJpbmcodGhzOiBFc1RoRGlyZWN0aXZlW10sIHZpZXc6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgbGV0IG9yZGVycyA9IHZpZXcgPyB2aWV3Lm9yZGVycyA6IHRoaXMuZXN0LmFycmF5T3JkZXJzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHRoLnRoT3JkZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9yID0gb3JkZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9yLmlkID09IHRoLnRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoLnRoT3JkZXIgPSBvci5vcmRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYSB0dXR0ZSBsZSBpbmZvcm1hemlvbmkgY2hlIHNlcnZvbm8gcGVyIGdlc3RpcmUgaWwgcmFnZ3J1cHBhbWVudG8gZGVnbGkgaGVhZGVyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBDb2xvbm5lIGRlbGxhIHRhYmVsbGFcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7eyBsZWFmczogRXNUaERpcmVjdGl2ZVtdLCBncm91cGluZ0xldmVsOiBudW1iZXIsIHBhcmVudHNDYWNoZTogYW55LCB0aHNDYWNoZTogYW55IH19IE9nZ2V0dG8gY29udGVuZW50ZSBsYSBsaXN0YSBkZWxsZSBmb2dsaWUgKGhlYWRlciBiYXNlKSwgaWwgbGl2ZWxsb1xyXG4gICAgICogbWFzc2ltbyBkaSByYWdncnVwcGFtZW50byByYWdnaXVudG8sIHVuYSBjYWNoZSBpbiBjdWkgdmVuZ29ubyBpbmRpY2F0aSB0dXR0aSBpIGdydXBwaSBjaGUgc29ubyBcInBhcmVudFwiIChxdWluZGkgY2hlIHJhZ2dydXBwYW5vIGFsbWVubyAxIGhlYWRlcikgZSBsYSBjYWNoZSBkZWdsaSBoZWFkZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV2YWx1YXRlSGVhZGVyc0dyb3VwaW5nSW5mb3ModGhzOiBFc1RoRGlyZWN0aXZlW10pOiB7IGxlYWZzOiBFc1RoRGlyZWN0aXZlW107IGdyb3VwaW5nTGV2ZWw6IG51bWJlcjsgcGFyZW50c0NhY2hlOiBhbnk7IHRoc0NhY2hlOiBhbnk7IH0ge1xyXG4gICAgICAgIC8vIFByZWdpcm8gcGVyIHRyb3ZhcmUgaSBwYXJlbnRcclxuICAgICAgICBsZXQgcGFyZW50c0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xyXG4gICAgICAgIGxldCB0aHNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGhEaXJlY3RpdmU7IH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcblxyXG4gICAgICAgICAgICB0aHNDYWNoZVt0aC50aF0gPSB0aDtcclxuICAgICAgICAgICAgaWYgKHRoLnRoUGFyZW50ICYmICFwYXJlbnRzQ2FjaGVbdGgudGhQYXJlbnRdKVxyXG4gICAgICAgICAgICAgICAgcGFyZW50c0NhY2hlW3RoLnRoUGFyZW50XSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZWNvbmRvIGdpcm8gcGVyIGJlY2NhcmUgaWwgbGl2ZWxsbyBtYXNzaW1vIGUgbGEgbGlzdGEgZGkgZm9nbGllICh0aCBzZW56YSBwYXJlbnQpXHJcbiAgICAgICAgbGV0IGhNYXhMZXZlbCA9IDA7XHJcbiAgICAgICAgbGV0IGxlYWZzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIHNvbm8gdW5hIGZvZ2xpYSB2ZWRvIHF1YW50aSBsaXZlbGxpIGNpIHNvbm8gc29wcmFcclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRzQ2FjaGVbdGgudGhdKSB7XHJcbiAgICAgICAgICAgICAgICBsZWFmcy5wdXNoKHRoKTtcclxuICAgICAgICAgICAgICAgIGxldCB0bXAgPSB0aGlzLmp1bXBzVG9GaW5hbFBhcmVudCh0aCwgdGhzQ2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaE1heExldmVsID0gdG1wID4gaE1heExldmVsID8gdG1wIDogaE1heExldmVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBsZWFmczogbGVhZnMsIGdyb3VwaW5nTGV2ZWw6IGhNYXhMZXZlbCwgcGFyZW50c0NhY2hlOiBwYXJlbnRzQ2FjaGUsIHRoc0NhY2hlOiB0aHNDYWNoZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhIGdsaSBoZWFkZXIgZ3JvdXBzIGRhIHVuYSBsaXN0YSBkaSBpbmZvIHN1aSB0aCBhbGwnaW50ZXJubyBkZWxsYSB2YXJpYWJpbGUgKipUTVBSb3dUaEdyb3VwcyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHt7IGxlYWZzOiBFc1RoRGlyZWN0aXZlW10sIGdyb3VwaW5nTGV2ZWw6IG51bWJlciwgcGFyZW50c0NhY2hlOiBhbnksIHRoc0NhY2hlOiBhbnkgfX0gaW5mb3MgSW5mb3JtYXppb25pIGRpIHJhZ2dydXBwYW1lbnRvIHZhbHV0YXRlIHByZWNlZGVudGVtZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVIZWFkZXJHcm91cHMoaW5mb3M6IHsgbGVhZnM6IEVzVGhEaXJlY3RpdmVbXTsgZ3JvdXBpbmdMZXZlbDogbnVtYmVyOyBwYXJlbnRzQ2FjaGU6IGFueTsgdGhzQ2FjaGU6IHsgW2luZGV4OnN0cmluZ106IEVzVGhEaXJlY3RpdmV9OyB9KSB7XHJcbiAgICAgICAgaWYgKGluZm9zLmdyb3VwaW5nTGV2ZWwgPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgMTogQ3JlbyBsJ291dHB1dCBkZWkgcmFnZ3J1cHBhbWVudGkgcGVyIGhlYWRlciBpbiBtb2RvIGRhIG5vbiBkb3Zlcm1pIHByZW9jY3VwYXJlIGRpIGNlbGxlIG5vbiBpbml6aWFsaXp6YXRlICoqKioqKi9cclxuXHJcbiAgICAgICAgbGV0IGV4cGFuZGVkR3JvdXBzID0gW107XHJcbiAgICAgICAgbGV0IHZpc2libGVVbnBpbm5lZExlYWZzOiBFc1RoRGlyZWN0aXZlW10gPSAoPGFueVtdPmluZm9zLmxlYWZzKS5maWx0ZXIoKHQ6IEVzVGhEaXJlY3RpdmUpID0+IHQudGhWaXNpYmxlICYmIHQudGhJZiAmJiAhdC50aFBpbm5lZCk7XHJcbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBpbmZvcy5ncm91cGluZ0xldmVsOyBsKyspIHtcclxuICAgICAgICAgICAgZXhwYW5kZWRHcm91cHMucHVzaChbXSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlzaWJsZVVucGlubmVkTGVhZnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBleHBhbmRlZEdyb3Vwc1tsXS5wdXNoKFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDI6IE9yZGlubyBsZSBmb2dsaWUgaW4gYmFzZSBhZ2xpIG9yZGluYW1lbnRpIGRlbGxlIGNvbG9ubmUgKioqKioqL1xyXG4gICAgICAgIGxldCBvcmRlcmVkTGVhZnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgbGVhZjogRXNUaERpcmVjdGl2ZSA9IGluZm9zLnRoc0NhY2hlW3RoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlc1tpXV07XHJcbiAgICAgICAgICAgIGlmIChsZWFmLnRoVmlzaWJsZSAmJiBsZWFmLnRoSWYgJiYgIWxlYWYudGhQaW5uZWQpXHJcbiAgICAgICAgICAgICAgICBvcmRlcmVkTGVhZnMucHVzaChsZWFmKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKioqKiogU1RFUCAzOiBDcmVvIGwnYXJyYXkgZ3JvdXAgY29uIHR1dHRpIGkgcmlmZXJpbWVudGkgZGVsIGNhc28gKioqKioqL1xyXG4gICAgICAgIGxldCBjdXJyZW50UGFyZW50ID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyZWRMZWFmcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgcmVmVGg6IEVzVGhEaXJlY3RpdmUgPSBvcmRlcmVkTGVhZnNbaV07XHJcbiAgICAgICAgICAgIGxldCBwcmV2VGg6IEVzVGhEaXJlY3RpdmUgPSBpIC0gMSA+PSAwID8gb3JkZXJlZExlYWZzW2kgLSAxXSA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXJlbnQgZGl2ZXJzbyBkYSBwcmltYSwgbWV0dG8gaWwgYm9yZG8gYSBzaW5pc3RyYSBlIGEgZGVzdHJhIGRlbGxhIGNlbGxhIHByZWNlZGVudGUgKHNlIGMnw6gpXHJcbiAgICAgICAgICAgIC8vIEFsbCd1bHRpbW8gZ2lybyBtZXR0byBpbCBib3JkbyBhIGRlc3RyYS4gVHV0dG8gcXVlc3RvIGxvIHJpZXNlZ3VvIHBlciBvZ25pIGNlbGxhIGluIG1vZG8gZGEgcmlwdWxpcmUgZXZlbnR1YWxpIGEgY3VpIGF2ZXZvIGFzc2VnbmF0byB0YWcgcHJlY2VkZW50ZW1lbnRlXHJcbiAgICAgICAgICAgICg8YW55PnJlZlRoKS5fbGJvcmQgPSByZWZUaC50aFBhcmVudCAhPSBjdXJyZW50UGFyZW50O1xyXG4gICAgICAgICAgICAoPGFueT5yZWZUaCkuX3Jib3JkID0gdmlzaWJsZVVucGlubmVkTGVhZnMubGVuZ3RoID09IGkgKyAxO1xyXG4gICAgICAgICAgICBpZiAocHJldlRoKVxyXG4gICAgICAgICAgICAgICAgKDxhbnk+cHJldlRoKS5fcmJvcmQgPSByZWZUaC50aFBhcmVudCAhPSBjdXJyZW50UGFyZW50O1xyXG5cclxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHJlZlRoLnRoUGFyZW50O1xyXG5cclxuICAgICAgICAgICAgLy8gUGVyIG9nbmkgZ3J1cHBvIHNyb3RvbG8gaWwgcGFyZW50IG5lbGxhIG1hdHJpY2UgZGVpIHJhZ2dydXBwYW1lbnRpXHJcbiAgICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgaW5mb3MuZ3JvdXBpbmdMZXZlbDsgbCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gcmVmVGgudGhQYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICYmICFyZWZUaC50aFBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkR3JvdXBzW2xdW2ldID0gcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZlRoID0gaW5mb3MudGhzQ2FjaGVbcGFyZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDQ6IENvbXBhdHRvIG5lbGwnZWxlbWVudG8gZmluYWxlIHN1IGN1aSBiaW5kYXJtaS4gTCdJRCBhc3NlZ25hdG8gw6ggU09MTyBwZXIgb3R0aW1penphcmUgZ2xpIG5nRm9yICoqKioqKi9cclxuXHJcbiAgICAgICAgY3VycmVudFBhcmVudCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTcGFuID0gMDtcclxuICAgICAgICBsZXQgZmluYWxIZWFkZXJzOiB7IElEOiBzdHJpbmcsIFNwYW46IG51bWJlcjsgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IENvbnRlbnQ/OiBzdHJpbmcsIFBpbm5lZD86IGJvb2xlYW47IEJvcmRlcnM/OiBib29sZWFuOyB9W11bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgZXhwYW5kZWRHcm91cHMubGVuZ3RoOyBsKyspIHtcclxuICAgICAgICAgICAgbGV0IGxldmVsQXJyYXk6IHsgSUQ6c3RyaW5nLCBTcGFuOiBudW1iZXI7IFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyBDb250ZW50Pzogc3RyaW5nLCBQaW5uZWQ/OiBib29sZWFuOyBCb3JkZXJzPzogYm9vbGVhbjsgfVtdID0gW107XHJcbiAgICAgICAgICAgIGZpbmFsSGVhZGVycy5wdXNoKGxldmVsQXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LlNlbGVjdGlvbiB8fCB0aGlzLmVzdC5IYXNQaW5uZWRDb2x1bW5zKVxyXG4gICAgICAgICAgICAgICAgbGV2ZWxBcnJheS5wdXNoKHsgSUQ6IFwiX2Jhc2Vfc2VsX3Bpbm5lZFwiLCBTcGFuOiAxLCBUZW1wbGF0ZTogbnVsbCwgUGlubmVkOiB0aGlzLmVzdC5IYXNQaW5uZWRDb2x1bW5zIH0pO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaCA9IDA7IGggPCBleHBhbmRlZEdyb3Vwc1tsXS5sZW5ndGg7IGgrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBleHBhbmRlZEdyb3Vwc1tsXVtoXTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09IGN1cnJlbnRQYXJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYW4rKztcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3BhbiA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBgJHtjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0udGggOiAnbm90aCd9XyR7Y3VycmVudFNwYW59YCwgU3BhbjogY3VycmVudFNwYW4sIFRlbXBsYXRlOiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uVGVtcGxhdGUgOiBudWxsLCBDb250ZW50OiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uX211bHRpX2NvbnRlbnQgOiBudWxsLCBCb3JkZXJzOiAhIWN1cnJlbnRQYXJlbnQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYW4gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBVbHRpbWEgYWdnaXVudGEgY2hlIGFsdHJpbWVudGkgbWkgcmltYXJyZWJiZSBpbiBjYWNoZVxyXG4gICAgICAgICAgICBsZXZlbEFycmF5LnB1c2goeyBJRDogYCR7Y3VycmVudFBhcmVudCA/IGluZm9zLnRoc0NhY2hlW2N1cnJlbnRQYXJlbnRdLnRoIDogJ25vdGgnfV8ke2N1cnJlbnRTcGFufWAsIFNwYW46IGN1cnJlbnRTcGFuLCBUZW1wbGF0ZTogY3VycmVudFBhcmVudCA/IGluZm9zLnRoc0NhY2hlW2N1cnJlbnRQYXJlbnRdLlRlbXBsYXRlIDogbnVsbCwgQ29udGVudDogY3VycmVudFBhcmVudCA/IGluZm9zLnRoc0NhY2hlW2N1cnJlbnRQYXJlbnRdLl9tdWx0aV9jb250ZW50IDogbnVsbCAsIEJvcmRlcnM6ICEhY3VycmVudFBhcmVudCB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGkgcGV6emV0dGluaSBwZXIgbGEgcmltb3ppb25lIGUgZ2xpIGV4cG9ydCwgc2UgcHJlc2VudGlcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LlJlbW92YWwpXHJcbiAgICAgICAgICAgICAgICBsZXZlbEFycmF5LnB1c2goeyBJRDogXCJfYmFzZV9yZW1vdmFsXCIsIFNwYW46IDEsIFRlbXBsYXRlOiBudWxsIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LkV4cG9ydCB8fCB0aGlzLmVzdC5IaWRkZW5Db2x1bW5zIHx8IHRoaXMuZXN0LkNvbHVtbnNPcmRlcmluZyB8fCB0aGlzLmVzdC5Db3JuZXJNZW51T3B0aW9ucylcclxuICAgICAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBcIl9iYXNlX2V4dHJhX29wdHNcIiwgU3BhbjogMSwgVGVtcGxhdGU6IG51bGwgfSk7XHJcblxyXG4gICAgICAgICAgICBjdXJyZW50U3BhbiA9IDA7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDU6IFNlY2NvIGxlIHJpZ2hlIGluIGN1aSBub24gYyfDqCBudWxsYSAqKioqKiovXHJcblxyXG4gICAgICAgIHRoaXMuZXN0LlRNUFJvd1RoR3JvdXBzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluYWxIZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBsZXZlbCA9IGZpbmFsSGVhZGVyc1tpXTtcclxuICAgICAgICAgICAgbGV0IGVtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXZlbC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBsZXZlbFtqXTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLlRlbXBsYXRlIHx8IGl0ZW0uQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZW1wdHkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5UTVBSb3dUaEdyb3Vwcy5wdXNoKGxldmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjb2xhIGlsIG51bWVybyBkaSBzYWx0aSBkYSB1biBoZWFkZXIgZm9nbGlhIGFsbCd1bHRpbW8gcGFyZW50IGRlbGxhIGNhdGVuYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZX0gdGggSGVhZGVyIGRhIGN1aSBzY29ycmVyZSBpIHBhZHJpIHBlciBjYXBpcmUgcXVhbnRpIGxpdmVsbGkgY2kgc29ubyBzb3ByYVxyXG4gICAgICogQHBhcmFtIHt7IFtpbmRleDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZSB9fSB0aHNDYWNoZSBDYWNoZSBkZWdsaSBoZWFkZXJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBqdW1wc1RvRmluYWxQYXJlbnQodGg6IEVzVGhEaXJlY3RpdmUsIHRoc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZTsgfSkge1xyXG4gICAgICAgIGxldCBqdW1wcyA9IDA7IGxldCBwYXJlbnQgPSBudWxsOyBsZXQgcGFyZW50c1ByZXBlbmQ6IHsgaWQ6IHN0cmluZywgdG1wbD86IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRlbnQ/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgICAgICAgbGV0IGJhc2VUaFJlZiA9IHRoO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gdGgudGhQYXJlbnQ7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoID0gdGhzQ2FjaGVbcGFyZW50XTtcclxuICAgICAgICAgICAgICAgIGlmICghdGgudGhFbXB0eSAmJiAhdGguX211bHRpX2NvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c1ByZXBlbmQudW5zaGlmdCh7IGlkOiB0aC50aCwgdG1wbDogdGguVGVtcGxhdGUgfSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGgudGhFbXB0eSAmJiB0aC5fbXVsdGlfY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzUHJlcGVuZC51bnNoaWZ0KHsgaWQ6IHRoLnRoLCBjb250ZW50OiB0aC5fbXVsdGlfY29udGVudCB9KTtcclxuICAgICAgICAgICAgICAgIGp1bXBzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwYXJlbnQpO1xyXG4gICAgICAgIGJhc2VUaFJlZi5fdGhQYXJlbnRzID0gcGFyZW50c1ByZXBlbmQ7XHJcbiAgICAgICAgcmV0dXJuIGp1bXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBnZW5lcmEgbCdvcmRpbmUgZGkgZGVmYXVsdCBkZWxsZSBjb2xvbm5lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdlbmVyYXRlRGVmYXVsdE9yZGVyKHRoczogRXNUaERpcmVjdGl2ZVtdLCB2aWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGlmICh0aHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9yZGVyaW5ncyA9IHRoaXMuZXN0LnZpZXdNb2RlID8gdmlldy5jb2x1bW5fb3JkZXJpbmcgOiB0aGlzLmVzdC5hcnJheUNvbHVtbk9yZGVyaW5nO1xyXG4gICAgICAgIC8vIEdlbmVybyBvcmRpbmFtZW50byBkaSBkZWZhdWx0IGRhIDAgZmlubyBhIGRvdmUgZGV2ZSBhcnJpdmFyZS4gU2l0dWF6aW9uZSBhdHR1YWxlIHNlbnphIGhvdHBvdGF0b1xyXG4gICAgICAgIGlmICghb3JkZXJpbmdzIHx8IG9yZGVyaW5ncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gdGgudGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMucHVzaChvcmRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcyA9IG9yZGVyaW5ncztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCB0aElkID0gdGgudGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5maW5kKG8gPT4gbyA9PSB0aElkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMucHVzaCh0aElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpY2EgbCdvcmRpbmUgc3BlY2lmaWNhdG8gYWxsZSB2YXJpZSBjb2xvbm5lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluYWxpemUgU2UgKip0cnVlKiogc2lnbmlmaWNhIGNoZSBub24gbWkgYXNwZXR0byBkaSBkb3ZlciBlZmZldHR1YXJlIGFsdHJlIG9wZXJhemlvbmkgZSBwb3NzbyByZW5kZXJpenphcmUgbGEgc2l0dWF6aW9uZSBpbiBiYXNlIGFpIFJvd0NvbnRleHRcclxuICAgICAqIFNlbnphIGZpbmFsaXplIHNpZ25pZmljYSBjaGUgbWkgYXNwZXR0byBhbHRyZSBvcGVyYXppb25pIGNoZSBwcmltYSBvIHBvaSByaWNoaWFtZXJhbm5vIHF1ZXN0YSBmdW56aW9uZSBjb2wgZmluYWxpemUuXHJcbiAgICAgKlxyXG4gICAgICogQWQgZXNlbXBpbywgdW5hIHZvbHRhIHNlbGV6aW9uYXRvIG9yZGluYW1lbnRvIGZpc2ljby9sb2dpY28gZGVsbGUgY29sb25uZSBzbyBjaGUgcGFydGUgdW4gYWx0cmEgcmljZXJjYSBjaGUgbWkgcml2YWxvcml6emVyw6AgZGEgXCJ3cml0ZVZhbHVlXCIsIGNoZSBnacOgIGNoaWFtYSBxdWVzdGEgZnVuemlvbmUuXHJcbiAgICAgKiBNZXR0ZW5kbyBzb2xvIGxhIGNoaWFtYXRhIGRhIFwid3JpdGVWYWx1ZVwiIGNvbWUgXCJmaW5hbGl6emFudGVcIiBtaSBhc3NpY3VybyBjaGUgc21hbmF0dGFtZW50aSBhIGZyb250ZW5kIG5vbiBjYXVzaW5vIGZsaWNrZXJpbmcgZmlubyBhIHF1YW5kbyBub24gc2Vydm9ub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXBwbHlPcmRlcmluZyh2aWV3OiBBcHBTZWFyY2g8YW55PiwgZmluYWxpemU6IGJvb2xlYW4pIHtcclxuICAgICAgICAvLyBHZW5lcm8gb3JkaW5hbWVudG8gcGVyIGdsaSBoZWFkZXJcclxuICAgICAgICBsZXQgbmV3SGVhZGVycyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBTZSBkZXZvIGZpbmFsaXp6YXJlIGFnZ2FuY2lvIHR1dHRlIGxlIHZhcmlhYmlsaSBkaSBiaW5kXHJcbiAgICAgICAgaWYgKGZpbmFsaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYWVkckl0ZW0gPSB0aGlzLmVzdC5UTVBSb3dUSHMuZmlsdGVyKHQgPT4gdC5JRCA9PSBvKVswXTtcclxuICAgICAgICAgICAgICAgIGlmIChoZWFlZHJJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0hlYWRlcnMucHVzaChoZWFlZHJJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUFJvd1RIcyA9IG5ld0hlYWRlcnM7XHJcblxyXG4gICAgICAgICAgICAvLyBHZW5lcm8gb3JkaW5hbWVudG8gcGVyIGxlIGNlbGxlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuUm93Q29udGV4dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gdGhpcy5lc3QuVE1QUm93VERzW3RoaXMuZXN0LlJvd0NvbnRleHRzW2ldXTtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdDb250ZXh0ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRleHRJdGVtID0gY29udGV4dC5maWx0ZXIodCA9PiB0LklEID09IG8pWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBvdHJlYmJlIGVzc2VyIHVuZGVmaW5lZCBuZWwgY2FzbyBjaSBmb3NzZXJvIGNvbG9ubmUgc290dG8gdGhJZlxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbnRleHRJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LnB1c2goY29udGV4dEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuVE1QUm93VERzW3RoaXMuZXN0LlJvd0NvbnRleHRzW2ldXSA9IG5ld0NvbnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgdmlldy5jb2x1bW5fb3JkZXJpbmcgPSB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXM7XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXlDb2x1bW5PcmRlcmluZyA9IHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcztcclxuXHJcbiAgICAgICAgdGhpcy5lc3QuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICogQWxsJ2ludGVybm8gZGVsbGEgZGlhbG9nIFwiT3JkaW5hbWVudG8gZSBWaXNpYmlsaXTDoCBDb2xvbm5lXCIgbWV0dGUgbGEgY29sb25uYSBzcGVjaWZpY2F0YSBwcmltYSBkZWxsYSBjb2xvbm5hIHByZWNlZGVudGVcclxuICAqXHJcbiAgKiBAcGFyYW0ge0VzVGFibGVDb2x1bW59IGNvbHVtbkl0ZW0gQ29sb25uYSBkYSBzcG9zdGFyZVxyXG4gICovXHJcbiAgICBwdWJsaWMgc2VuZFVwKGNvbHVtbkl0ZW06IEVzVGFibGVDb2x1bW4pIHtcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuaW5kZXhPZihjb2x1bW5JdGVtKTtcclxuICAgICAgICBpZiAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaXRlbUluZGV4IC0gMV0uZml4ZWQgfHwgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaXRlbUluZGV4IC0gMV0ucGlubmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy51dGlFeHRzLnN3YXAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QsIGl0ZW1JbmRleCwgaXRlbUluZGV4IC0gMSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiBwb3NzbyBmYXJlIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Db2x1bW5zTGlzdCkpIHBlcmNow6kgY29udGllbmUgcmlmZXJpbWVudGkgYSBUZW1wbGF0ZVJlZlxyXG4gICAgICAgIGxldCB0bXAgPSBbXTtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4geyB0bXAucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gdG1wO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsJ2ludGVybm8gZGVsbGEgZGlhbG9nIFwiT3JkaW5hbWVudG8gZSBWaXNpYmlsaXTDoCBDb2xvbm5lXCIgbWV0dGUgbGEgY29sb25uYSBzcGVjaWZpY2F0YSBkb3BvIGxhIGNvbG9ubmEgc3VjY2Vzc2l2YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUYWJsZUNvbHVtbn0gY29sdW1uSXRlbSBDb2xvbm5hIGRhIHNwb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZW5kRG93bihjb2x1bW5JdGVtOiBFc1RhYmxlQ29sdW1uKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmluZGV4T2YoY29sdW1uSXRlbSk7XHJcbiAgICAgICAgdGhpcy51dGlFeHRzLnN3YXAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QsIGl0ZW1JbmRleCwgaXRlbUluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiBwb3NzbyBmYXJlIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Db2x1bW5zTGlzdCkpIHBlcmNow6kgY29udGllbmUgcmlmZXJpbWVudGkgYSBUZW1wbGF0ZVJlZlxyXG4gICAgICAgIGxldCB0bXAgPSBbXTtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4geyB0bXAucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gdG1wO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsJ2ludGVybm8gZGVsbGEgZGlhbG9nIFwiT3JkaW5hbWVudG8gZSBWaXNpYmlsaXTDoCBDb2xvbm5lXCIgcGlubmEgbGEgY29sb25uYSBzcGVjaWZpY2F0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUYWJsZUNvbHVtbn0gY29sdW1uSXRlbSBDb2xvbm5hIGRhIHNwb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaW5PclVucGluQ29sdW1uKGNvbHVtbkl0ZW06IEVzVGFibGVDb2x1bW4pIHtcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuaW5kZXhPZihjb2x1bW5JdGVtKTtcclxuICAgICAgICBpZiAoIWNvbHVtbkl0ZW0ucGlubmVkKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbkl0ZW0ucHJldl9pbmRleCA9IGl0ZW1JbmRleDtcclxuXHJcbiAgICAgICAgICAgIC8vUXVhbmRvIHBpbm5vIGRldm8gc3Bvc3RhcmUgbCdlbGVtZW50byBjb21lIHVsdGltYSBjb2xvbm5hIHBpbm5hdGEgbyBjb21lIHByaW1hIGNvbG9ubmEgc2Ugbm9uIGNlIG5lIHNvbm8gZGkgcGlubmF0ZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXN0LlRNUENvbHVtbnNMaXN0W2ldLnBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy9RdWFuZG8gc3Bpbm5vIHJpcG9ydG8gbCdlbGVtZW50byBhbGxvIHN0ZXNzbyBpbmRpY2UgaW4gY3VpIGVyYSBwcmltYSAoc2Ugc29ubyBzdGF0aSBmYXR0aSBzcG9zdGFtZW50aSBuZWwgbWV6em8gY2F6emkgZGVsbCd1dGVudGUpXHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5JdGVtLnByZXZfaW5kZXggIT0gbnVsbCAmJiBjb2x1bW5JdGVtLnByZXZfaW5kZXggIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LCBpdGVtSW5kZXgsIGNvbHVtbkl0ZW0ucHJldl9pbmRleCk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gU2Ugc3Bpbm5vIHNlbnphIHVuIHByZXZfaW5kZXggdnVvbCBkaXJlIGNoZSBsYSBjb2xvbm5hIGVyYSBwaW5uYXRhIGRhIGNvbmZpZ3VyYXppb25lLiBMYSBzcG9zdG8gbmVsIHByaW1vIHB1bnRvIGRpc3BvbmliaWxlXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdFtpXS5waW5uZWQgJiYgIXRoaXMuZXN0LlRNUENvbHVtbnNMaXN0W2ldLmZpeGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29sdW1uSXRlbS5waW5uZWQgPSAhY29sdW1uSXRlbS5waW5uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBpbnZlcnRlIGxlIGltcG9zdGF6aW9uaSBkaSB2aXNpYmlsaXTDoCBkZWxsYSBjb2xvbm5hXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RhYmxlQ29sdW1ufSBjb2x1bW5JdGVtIENvbG9ubmEgZGEgc3Bvc3RhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbHVtbkNsaWNrZWQoaXRlbTogRXNUYWJsZUNvbHVtbikge1xyXG4gICAgICAgIHRoaXMuZXN0Lmxhc3RTZWxlY3RlZEl0ZW1JRCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5IaWRkZW5Db2x1bW5zIHx8IGl0ZW0uZml4ZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gIWl0ZW0udmlzaWJsZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbENvbFZpc0NoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFsbCdhcGVydHVyYSBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiByaWNhcmljYSBsZSBpbmZvcm1hemlvbmkgYXR0dWFsaSBwZXIgcGVybWV0dGVyZSBsYSBtb2RpZmljYSAqL1xyXG4gICAgcHVibGljIHJlc2V0Q29sdW1uVmlzU2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gW107XHJcbiAgICAgICAgLy8gTm9uIHBvc3NvIGZhcmUgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkNvbHVtbnNMaXN0KSkgcGVyY2jDqSBjb250aWVuZSByaWZlcmltZW50aSBhIFRlbXBsYXRlUmVmXHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4geyB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGMpKTsgfSk7XHJcblxyXG4gICAgICAgIGxldCByZW9yZGVyZWRDb2xMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5Db2x1bW5zT3JkZXJpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZmlsdGVyKHQgPT4gdC5pZCA9PSBvKVswXTtcclxuICAgICAgICAgICAgICAgIC8vIFBvdHJlaSBub24gYXZlcm5lIG5lbCBjYXNvIGNpIHNpYSBpbCBmbGFnIEhpZGRlbkNvbHVtbnMgYSBmYWxzZSwgZXZpdG8gZGkgaW5zZXJpcmUgZGVnbGkgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbExpc3QucHVzaChjb2x1bW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gcmVvcmRlcmVkQ29sTGlzdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmlhZ2dpb3JuYSBsZSAqKk9yZGVyRGlyZWN0aXZlcyoqIGNvbiBsZSBpbmZvcm1hemlvbmkgaW4gICoqQ29sdW1uc0xpc3QqKiAqL1xyXG4gICAgcHJpdmF0ZSByZWZyZXNoQ29sdW1uT3JkZXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoOyBjKyspXHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5wdXNoKHRoaXMuZXN0LkNvbHVtbnNMaXN0W2NdLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgbGEgc2VsZXppb25lIG8gbWVubyBkZWwgY2hlY2sgZ2xvYmFsZSAoKipnbG9iYWxDb2xWaXNDaGVjayoqKSBkaSB2aXNpYmlsaXTDoCBpbiBiYXNlIGEgc2UgdHV0dGUgbGUgKipUTVBDb2x1bW5zTGlzdCoqIHNvbm8gdmlzaWJpbGkgbyBubyAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUdsb2JhbENvbFZpc0NoZWNrKCkge1xyXG4gICAgICAgIC8vIFRNUENvbExpc3QgdmllbmUgcmllbXBpdGEgZGkgdW5kZWZpbmVkIG5lbCBjYXNvIGluIGN1aSBzaWEgZGlzYXR0aXZhdGEgbGEgc2VsZXppb25lIGRlbGxlIGNvbG9ubmUgbmFzY29zdGVcclxuICAgICAgICB0aGlzLmVzdC5nbG9iYWxDb2xWaXNDaGVjayA9IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmV2ZXJ5KHQgPT4gdC52aXNpYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoaWFtYXRvIHF1YW5kbyB1bmEgY29sb25uYSB2aWVuZSByaW9yZGluYXRhIGFsbCdpbnRlcm5vIGRlbGxhIGxpc3RhIGRlbGxlIHZpc2liaWxpdMOgL3Bvc2l6aW9uaSBjb2xvbm5lXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Q2RrRHJhZ0Ryb3A8RXNUYWJsZUNvbHVtbltdPn0gZXZlbnQgRXZlbnRvIGRpIGRyb3AgZGVsbGEgbGlzdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbHVtblJlb3JkZXJlZChldmVudDogQ2RrRHJhZ0Ryb3A8RXNUYWJsZUNvbHVtbltdPikge1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoaWFtYXRvIHF1YW5kbyB1bmEgY29sb25uYSB2aWVuZSByaW9yZGluYXRhIGFsbCdpbnRlcm5vIGRlbGxhIGxpc3RhIGRlbGxlIHZpc2liaWxpdMOgL3Bvc2l6aW9uaSBjb2xvbm5lXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRpY2UgaW4gY3VpIHZvZ2xpbyBkcm9wcGFyZSBsJ2VsZW1lbnRvIGRyYWdnYXRvXHJcbiAgICAgKiBAcGFyYW0ge0Nka0RyYWc8RXNUYWJsZUNvbHVtbj59IGl0ZW0gT2dnZXR0byBjaGUgc3RvIGRyYWdnYW5kb1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgbGEgY29sb25uYSBwdcOyIGVzc2VyZSBzcG9zdGF0YSBzdWxsJ2luZGljZSAqKmluZGV4KiosICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzb3J0UHJlZGljYXRlKGluZGV4OiBudW1iZXIsIGl0ZW06IENka0RyYWc8RXNUYWJsZUNvbHVtbj4pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgaXRlbUF0SW5kZXggPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtpbmRleF07XHJcbiAgICAgICAgcmV0dXJuICFpdGVtQXRJbmRleC5maXhlZCAmJiAhaXRlbUF0SW5kZXgucGlubmVkICYmICFpdGVtLmRhdGEucGlubmVkICYmICFpdGVtLmRhdGEucGlubmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgY2hlIGVmZmV0dHVhIGxhIGNvbmZlcm1hIGRlbGxhIHZpc2liaWxpdMOgIGUgZGVsbCdvcmRpbmUgZGVsbGUgY29sb25uZS5cclxuICAgICAqXHJcbiAgICAgKiBRdWVzdGEgc2VsZXppb25lIHZpZW5lIGlub2x0cmUgc2FsdmF0YSBuZWxsZSBwcmVmZXJlbnplICgqKkBlc2ZhZW56YS9wcmVmZXJlbmNlcyoqKSwgcXVhbG9yYSBsJ0lucHV0ICoqU2F2ZVByZWZlcmVuY2VzKiogZm9zc2UgdmFsb3JpenphdG9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2Ugbm9uIGNpIHNvbm8gcHJvYmxlbWksICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25maXJtQ29sdW1uVmlzaWJpbGl0eVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBOb24gcGVybWV0dG8gZGkgbm9uIHNlbGV6aW9uYXJlIG51bGxhXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmV2ZXJ5KHQgPT4gIXQudmlzaWJsZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC52aWV3TW9kZSA/ICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3IHx8IHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pIDogbnVsbDtcclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRoaXMuZXN0LkNvbHVtbnNMaXN0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgYykpOyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29sdW1uT3JkZXJpbmcoKTtcclxuICAgICAgICB0aGlzLmFwcGx5T3JkZXJpbmcoY2FzdGVkVmlldywgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZnJlc2hDb2x1bW5zVmlzaWJpbGl0eShudWxsLCBudWxsLCBjYXN0ZWRWaWV3KTtcclxuXHJcbiAgICAgICAgLy9TYWx2byBsZSBwcmVmZXJlbmNlcyBkaSBxdWVzdGEgdmlld1xyXG4gICAgICAgIC8vRGkgZGVmYXVsdCByZWdpc3RybyBvcmRpbmFtZW50byBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmUgbmVsbGEgdmlzdGEuIFNvbG8gbGUgY29zZSBkaSBVSVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5TYXZlUHJlZmVyZW5jZXMpIFxyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVmlld1ByZWZlcmVuY2VzKGNhc3RlZFZpZXcpO1xyXG5cclxuICAgICAgICAvLyBSaWVzZWd1byBsJ3VsdGltYSByaWNlcmNhIGJpbmRhdGEgYWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gTWkgYXNzaWN1cm8gZGkgZmFybG8gZG9wbyBsJ2VzcGFuc2lvbmUgZGVsIGNoYW5nZWQgbyByaXNjaGlvIGNoZSBsYSByaWNlcmNhIG1pIHJpZGlhIGNvbG9ubmUgY2hlIGluIHJlYWx0w6Agbm9uIGVzaXN0b25vXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuTWFpbkdyb3VwVmlldyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZpZXcgPSB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGVbaV0udmlldztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5jb2x1bW5zID0gdGhpcy5lc3QuTWFpbkdyb3VwVmlldy5jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbHVtbl9vcmRlcmluZyA9IHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcuY29sdW1uX29yZGVyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlLCB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGVbaV0udmlldyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5lc3QuaW50ZXJuYWxXcml0ZVZhbHVlKCk7IH0pO1xyXG5cclxuICAgICAgICAvLyBMbyB2b3JyZWkgbWV0dGVyZSBsYXRvIHRlbXBsYXRlIG1hIG5vXHJcbiAgICAgICAgdGhpcy5lc3QubGFzdFNlbGVjdGVkSXRlbUlEID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVvIGwndW5waW5uaW5nIGRpIHVuYSBjb2xvbm5hIGluIG1hbmllcmEgcHJvZ3JhbW1hdGljYSBzZW1wbGljZW1lbnRlIGVzZWd1ZW5kbyB1bmEgcGVyIHVuYSBsZSBvcGVyYXppb25pIGNoZSB2ZXJyZWJiZXJvIGVzZWd1aXRlIGFsdHJpbWVudGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29kaWNlIGRlbGxhIGNvbG9ubmEgZGEgc3Bpbm5hcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVucGluQ29sdW1uKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q29sdW1uVmlzU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5waW5PclVucGluQ29sdW1uKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZpbmQodCA9PiB0LmlkID09IGlkKSk7XHJcbiAgICAgICAgdGhpcy5jb25maXJtQ29sdW1uVmlzaWJpbGl0eVNlbGVjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTdWwgY2xpY2sgbmVsbGEgY2hlY2tib3ggZGkgc2VsZXppb25lIGdsb2JhbGUgc2kgc2NvcnJvbm8gdHV0dGUgbGUgY29sb25uZSBlIHNpIGltcG9zdGFubyBhbCB2YWxvcmUgZGVsbGEgY2hlY2sgZ2xvYmFsZSAqL1xyXG4gICAgcHVibGljIGdsb2JhbENvbFZpc0NoZWNrQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXQuZml4ZWQpXHJcbiAgICAgICAgICAgICAgICB0LnZpc2libGUgPSB0aGlzLmVzdC5nbG9iYWxDb2xWaXNDaGVjaztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
829
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sdW1uTWV0YWRhdGFIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTWpFLFVBQVU7QUFDVixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3JFLDZIQUE2SDtBQUM3SCxNQUFNLE9BQU8scUJBQXFCO0lBRTlCLHlCQUF5QjtJQUN6QixZQUFvQixHQUFxQixFQUFVLFNBQTJCLEVBQVUsT0FBdUIsRUFBVSxXQUErQixFQUFVLEdBQXVCO1FBQXJLLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW9CO0lBQUksQ0FBQztJQUU5TDs7Ozs7T0FLRztJQUNJLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxLQUFxQjtRQUN4RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakcsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElB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QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsRUFBVTtRQUN6QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCw4SEFBOEg7SUFDdkgsd0JBQXdCO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gTGlic1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcblxyXG4vLyBDb21wb25lbnRpIC8gRGlyZXR0aXZlXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5pbXBvcnQgeyBFc1RkRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZXNfdGQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEVzVGhEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9lc190aC5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IFV0aWxpdGllc0hhbmRsZXIgfSBmcm9tIFwiLi9VdGlsaXRpZXNIYW5kbGVyXCI7XHJcbmltcG9ydCB7IFJvd0dyb3VwaW5nSGFuZGxlciB9IGZyb20gXCIuL1Jvd0dyb3VwaW5nSGFuZGxlclwiO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBPcmRlcmluZyB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBPcmRlcmluZ1wiO1xyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwU2VhcmNoXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9Fc1RhYmxlQ29sdW1uXCI7XHJcbmltcG9ydCB7IEVzVGFibGVNdWx0aVZhbHVlIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0VzVGFibGVNdWx0aVZhbHVlXCI7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBnZXN0aXNjZSB0dXR0ZSBsZSBpbmZvcm1haXpvbmkgcmVsYXRpdmUgYWxsZSBjb2xvbm5lOiB2aXNpYmlsaXTDoCwgcG9zaXppb25lLCBzdGF0byBkaSBwaW4vdW5waW4sIGVjYyBlY2MuLi4gKi9cclxuZXhwb3J0IGNsYXNzIENvbHVtbk1ldGFkYXRhSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgdXRpbGl0aWVzOiBVdGlsaXRpZXNIYW5kbGVyLCBwcml2YXRlIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIHByZWZTZXJ2aWNlOiBQcmVmZXJlbmNlc1NlcnZpY2UsIHByaXZhdGUgcmdIOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBnZXN0aXNjZSBpbCBjYW1iaW8gZGkgT3JkaW5hbWVudG8gZGkgdW5hIGNvbG9ubmFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgZGVsbGEgY29sb25uYSBpbCBjdWkgb3JpZG5hbWVudG8gw6ggY2FtYmlhdG9cclxuICAgICAqIEBwYXJhbSB7J0RFU0MnIHwgJ0FTQyd9IG9yZGVyIE51b3ZvIG9yZGluZSBzZWxlemlvbmF0byBwZXIgbGEgY29sb25uYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlVEhPcmRlckNoYW5nZShpZDogc3RyaW5nLCBvcmRlcjogJ0RFU0MnIHwgJ0FTQycpIHtcclxuICAgICAgICBsZXQgb3JkZXJzID0gdGhpcy5lc3Qudmlld01vZGUgPyAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pikub3JkZXJzIDogdGhpcy5lc3QuYXJyYXlPcmRlcnM7XHJcbiAgICAgICAgbGV0IG9yZGVyVG9BZGQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBvcmRlclRvUmVtb3ZlOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBTZSBwZXIgcXVhbGNoZSBtb3Rpdm8gaWwgY29zdHJ1dHRvcmUgbm9uIMOoIHBhc3NhdG8gKGNhY2hlIHRhcnBhdGUgbyBzaW1pbGEpIGZpeG9cclxuICAgICAgICBpZiAoIW9yZGVycyAmJiB0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgKHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLm9yZGVycyA9IFtdO1xyXG4gICAgICAgIGVsc2UgaWYgKCFvcmRlcnMgJiYgdGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheU9yZGVycyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IG9yZGVyc1tpXTtcclxuICAgICAgICAgICAgaWYgKHQuaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHQub3JkZXIgPSBvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlclRvQWRkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJUb1JlbW92ZSA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcmRlclRvUmVtb3ZlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb3JkZXJzLnNwbGljZShvcmRlclRvUmVtb3ZlLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3JkZXJUb0FkZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuTXVsdGlwbGVPcmRlcmluZ0RpcmVjdGl2ZXMpXHJcbiAgICAgICAgICAgICAgICBvcmRlcnMucHVzaChuZXcgQXBwT3JkZXJpbmcoaWQsIG9yZGVyKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5vcmRlcnMgPSBbbmV3IEFwcE9yZGVyaW5nKGlkLCBvcmRlcildO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LmFycmF5T3JkZXJzID0gW25ldyBBcHBPcmRlcmluZyhpZCwgb3JkZXIpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TYWx2byBsZSBwcmVmZXJlbmNlcyBkaSBxdWVzdGEgdmlld1xyXG4gICAgICAgIC8vRGkgZGVmYXVsdCByZWdpc3RybyBvcmRpbmFtZW50byBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmUgbmVsbGEgdmlzdGEuIFNvbG8gbGUgY29zZSBkaSBVSVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5TYXZlUHJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC52aWV3TW9kZSA/ICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3IHx8IHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pIDogbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclZpZXdQcmVmZXJlbmNlcyhjYXN0ZWRWaWV3KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uT3JkZXJDaGFuZ2VkLmVtaXQoeyBpZCwgb3JkZXIgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJnSC5lbWl0Um93R3JvdXBpbmdTZWFyY2hlcyhpZCwgb3JkZXJzKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0cmEgbGUgcHJlZmVyZW5jZSByZWxhdGl2ZSBhbGxhIHZpZXcgcGFzc2F0YSBjb21lIHBhcmFtZXRyb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gY2FzdGVkVmlldyBWaWV3IGRpIGN1aSBzYWx2YXJlIGNvbG9ubmUgZSBvcmRpbmFtZW50byBjb2xvbm5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3RlclZpZXdQcmVmZXJlbmNlcyhjYXN0ZWRWaWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGlmICghdGhpcy5lc3QubmdDb250cm9sLm5hbWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgYXZlcmUgdW4gJ25hbWUnIHBlciBsYSB0YWJlbGxhXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucHJlZlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgY2hlIGlsIHBhY2NoZXR0byBAZXNmYWVuemEvcHJlZmVyZW5jZXMgc2lhIGluc3RhbGxhdG9cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zID0gdGhpcy5lc3QuYXJyYXlNb2RlID8gdGhpcy5lc3QuYXJyYXlDb2x1bW5zIDogY2FzdGVkVmlldy5jb2x1bW5zO1xyXG4gICAgICAgIGxldCBjb2x1bW5zT3JkZXJpbmdzID0gdGhpcy5lc3QuYXJyYXlNb2RlID8gdGhpcy5lc3QuYXJyYXlDb2x1bW5PcmRlcmluZyA6IGNhc3RlZFZpZXcuY29sdW1uX29yZGVyaW5nO1xyXG4gICAgICAgIGxldCBjb2x1bW5PcmRlcnMgPSB0aGlzLmVzdC5hcnJheU1vZGUgPyBbXSA6IGNhc3RlZFZpZXcub3JkZXJzO1xyXG4gICAgICAgIHZhciB0b1N0b3JlID0ge1xyXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnV0aUV4dHMuZGVlcENsb25lKGNvbHVtbnMpIGFzIHN0cmluZ1tdLFxyXG4gICAgICAgICAgICBjb2x1bW5fb3JkZXJpbmc6IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUoY29sdW1uc09yZGVyaW5ncykgYXMgc3RyaW5nW10sXHJcbiAgICAgICAgICAgIG9yZGVyczogdGhpcy51dGlFeHRzLmRlZXBDbG9uZShjb2x1bW5PcmRlcnMpIGFzIHN0cmluZ1tdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnByZWZTZXJ2aWNlLnNldEl0ZW0oPHN0cmluZz50aGlzLmVzdC5uZ0NvbnRyb2wubmFtZSwgdG9TdG9yZSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0ZW5kbyBkYWdsaSAqKkVzVGhzKiogZXN0cmFwcG9sbyBsYSBsaXN0YSBkaSAqKkVzVGFibGVDb2x1bW4qKiBjaGUgcXVlc3RhIHRhYmVsbGEgZG92csOgIGV2ZW50dWFsbWVudGUgZ2VzdGlyZSBwZXIgVmlzaWJpbGl0w6AgZSBPcmRpbmVcclxuICAgICAqXHJcbiAgICAgKiBDb3N0bzogMSBzY2FuIEVzVGhzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBDb2xvbm5lIGRlbGxhIHRhYmVsbGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJldmlld0NvbHVtbnNMaXN0KHRoczogRXNUaERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSBbXTtcclxuICAgICAgICBpZiAodGhzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEFwcGVuYSBpbCBjb250ZW50Q2hpbGRyZW4gw6ggdmFsb3JpenphdG8gc2NvcnJvIHR1dHRpIGdsaSBoZWFkZXJcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcblxyXG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGgudGg7XHJcbiAgICAgICAgICAgIC8vIFNlIG5vbiBobyB1biBpZCBpbCB0aCDDqCBjb25zaWRlcmF0byBpbmVydGVcclxuICAgICAgICAgICAgaWYgKCFjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNhbHZvIGxlIGluZm9ybWF6aW9uaSBkZWxsJ2hlYWRlciBwZXIgZmFyIHBhcnRlIGRlbGxhIGxpc3RhIGRhIGN1aSBzY2VnbGllcmUgcXVhbGkgY29sb25uZSB2aXN1YWxpenphcmUvbmFzY29uZGVyZVxyXG4gICAgICAgICAgICAvLyBEaSBkZWZhdWx0IGxhIHZpc2liaWxpdMOgIMOoIHF1ZWxsYSBpbXBvc3RhdGEgbmVsIGNvbXBvbmVudGVcclxuICAgICAgICAgICAgaWYgKCh0aGlzLmVzdC5IaWRkZW5Db2x1bW5zIHx8IHRoLnRoVmlzaWJsZSkgJiYgdGgudGhJZikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzbHlQaW5uZWQgPSAhdGhpcy5lc3QuQ29sdW1uc0xpc3QgfHwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoID09IDAgPyBudWxsIDogdGhpcy5lc3QuQ29sdW1uc0xpc3QuZmluZCh0ID0+IHQuaWQgPT0gY29sdW1uKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvQWRkID0gbmV3IEVzVGFibGVDb2x1bW4oY29sdW1uLCB0aC50aFN0YXRpY0NvbnRlbnQsIHRoLnRoVmlzaWJsZSwgKHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cCksIHByZXZpb3VzbHlQaW5uZWQgPT0gbnVsbCA/IHRoLnRoUGlubmVkIDogcHJldmlvdXNseVBpbm5lZC5waW5uZWQsIHRoLnRoUGlubmFibGUsIHRoLnRoUGlubmVkV2lkdGgsIHRoLlRlbXBsYXRlLCB0aC5fdGhQYXJlbnRzLCB0aC5fbXVsdGksIHRoLl9tdWx0aV9jb250ZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c2x5UGlubmVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHRvQWRkLnByZXZfaW5kZXggPSBwcmV2aW91c2x5UGlubmVkLnByZXZfaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5wdXNoKHRvQWRkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRoaXMuZXN0LkNvbHVtbnNMaXN0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgYykpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSW4gY2FzbyBzaWFubyBjb25maWd1cmF0aSBkZWkgdGggXCJNdWx0aVwiICh2ZWRlcmUgbGEgZGVzY3JpemlvbmUgZGVsIGNhbXBvICoqdGhNdWx0aSoqIGRpICoqRXNUaERpcmVjdGl2ZSoqKSBxdWVzdG8gbWV0b2RvIGxpIFwic3JvdG9sYVwiIGluIHR1dHRpIGkgdGgvdGQgY2hlIGRldm9ubyBlZmZldHRpdmFtZW50ZSBkaXZlbnRhcmUgKi9cclxuICAgIHB1YmxpYyBleHBhbmRNdWx0aVRoc0FuZFRkcyh0aHM6IEVzVGhEaXJlY3RpdmVbXSwgdGRzOiBFc1RkRGlyZWN0aXZlW10sIGl0ZW1zOiBhbnlbXSk6IHtleHBUaHM6IEVzVGhEaXJlY3RpdmVbXSwgZXhwVGRzOiBFc1RkRGlyZWN0aXZlW119IHtcclxuXHJcbiAgICAgICAgLy8gUmVnaXN0cm8gbGUgaW5mbyBzdWkgbXVsdGlwcm92aWRlclxyXG4gICAgICAgIGxldCBtdWx0aURlZnM6IHsgW2lkOiBzdHJpbmddOiB7IE9uPzogc3RyaW5nLCB0aHJlZjogRXNUaERpcmVjdGl2ZSwgdGRyZWY6IEVzVGREaXJlY3RpdmUsIHRoZ2VuOiB7IFtpZDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZSB9LCB0ZGdlbjogeyBbaWQ6IHN0cmluZ106IEVzVGREaXJlY3RpdmUgfSB9IH0gPSB7IH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoLnRoTXVsdGkpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIG11bHRpRGVmc1t0aC50aF0gPSB7IE9uOiB0aC50aCwgdGRyZWY6IG51bGwsIHRocmVmOiB0aCwgdGhnZW46IHt9LCB0ZGdlbjoge30gfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFzc2Vnbm8gbGUgaW5mbyBhbmNoZSBhaSB0ZFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1tpXTtcclxuICAgICAgICAgICAgdGQuX211bHRpID0gISFtdWx0aURlZnNbdGQudGRdO1xyXG4gICAgICAgICAgICBpZih0ZC5fbXVsdGkpXHJcbiAgICAgICAgICAgICAgICBtdWx0aURlZnNbdGQudGRdLnRkcmVmID0gdGQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSaW11b3ZvIGkgbXVsdGl0ZW1wbGF0ZSBkYWxsZSBiYWxsZVxyXG4gICAgICAgIC8vIE4uQjogRGF0byBjaGUgbGEgcHJpbWEgb3BlcmF6aW9uZSBzdSB0aCBlIHRkIMOoIHF1ZXN0YSBpbCByaWZlcmltZW50byBvcmlnaW5hbGUgdmllbmUgc292cmFzY3JpdHRvLCBxdWVzdG8gc2lnbmlmaWNhIGNoZSBkZXZvIHJpLWVtZXR0ZXJlIGkgZHVlIG51b3ZpIGFycmF5XHJcbiAgICAgICAgdGhzID0gdGhzLmZpbHRlcih0ID0+ICF0LnRoTXVsdGkpO1xyXG4gICAgICAgIHRkcyA9IHRkcy5maWx0ZXIodCA9PiAhdC5fbXVsdGkpO1xyXG5cclxuICAgICAgICBsZXQgcGFyZW50VGhzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHsgfTtcclxuICAgICAgICBsZXQgYWRkZWRIZWFkZXJzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHsgfTtcclxuICAgICAgICBsZXQgdGRzVG9BZGQ6IHsgW2lkOiBzdHJpbmddIDogRXNUZERpcmVjdGl2ZX0gPSB7IH07XHJcbiAgICAgICAgbGV0IHRoc1RvQWRkOiBFc1RoRGlyZWN0aXZlW10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUGVyIG9nbmkgaXRlbSB2ZWRvIHNlIGNpIHNvbm8gZGVpIG11bHRpIHBlciBsZSBwcm9wcmlldMOgIGNoZSBsaSBkZWZpbmlzY29ub1xyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gbXVsdGlEZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZSBsYSBwcm9wcmlldMOgIGRlbCBtdWx0aSBlc2lzdGUgbmVsbCdvZ2dldHRvIGVkIGhhIHVuYSBsdW5naGV6emFcclxuICAgICAgICAgICAgICAgIGlmIChpdG1bcHJvcF0gJiYgaXRtW3Byb3BdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtdWx0aVJlZiA9IG11bHRpRGVmc1twcm9wXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVmdGQgPSBtdWx0aVJlZi50ZHJlZjtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVmdGggPSBtdWx0aVJlZi50aHJlZjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGl0bVtwcm9wXS5sZW5ndGg7IGlpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlYWRlciBnacOgIGFnZ2l1bnRvLCBub24gZGV2byBpbnNlcmlyZSBhbHRyaSB0ZW1wbGF0ZSBkaSBoZWFkZXIvY29sb25uYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXN0bXYgPSA8RXNUYWJsZU11bHRpVmFsdWU+aXRtW3Byb3BdW2lpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3Rtdi5faGVhZGVyc0hpZXJhcmNoeSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdG12Ll9oZWFkZXJzSGllcmFyY2h5ID0gZXN0bXYuaGVhZGVyX2dyb3VwID8gZXN0bXYuaGVhZGVyX2dyb3VwLnNwbGl0KFwiPlwiKS5tYXAodCA9PiB0LnRyaW0oKSkgOiBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJWYWx1ZSA9IGVzdG12LmhlYWRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGVzdG12LmhlYWRlcl9ncm91cCB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50c0hpZXIgPSBlc3Rtdi5faGVhZGVyc0hpZXJhcmNoeTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRlZEhlYWRlcnNbYCR7cGFyZW50fV8ke2hlYWRlclZhbHVlfWBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkSGVhZGVyc1tgJHtwYXJlbnR9XyR7aGVhZGVyVmFsdWV9YF0gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyIG9nbmkgdmFsb3JlIGRpdmVyc28gZGVsbGUgcHJvcHJpZXTDoCBkZXZvIGFnZ2l1bmdlcmUgdW4gdGQgZSB1biB0aCwgcXVlc3QndWx0aW1vIGRldidlc3NlcmUgZXZlbnR1YWxtZW50ZSBjb2xsZWdhdG8gYWQgdW4gaGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXd0SCA9IG5ldyBFc1RoRGlyZWN0aXZlKHJlZnRoLlRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEguX211bHRpID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEguX211bHRpX2NvbnRlbnQgPSBoZWFkZXJWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGggPSBgJHtwcm9wfV8ke2lpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoQ2xhc3MgPSByZWZ0aC50aENsYXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aFNocmluayA9IHJlZnRoLnRoU2hyaW5rO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aElmID0gcmVmdGgudGhJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3dEgudGhWaXNpYmxlID0gcmVmdGgudGhWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXd0SC50aFdyYXAgPSByZWZ0aC50aFdyYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsIHBhcmVudCDDqCBzZW1wcmUgbCd1bHRpbW8gbmVsbGEgZ2VyYXJjaGlhIGRpIHBhZHJpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoUGFyZW50ID0gcGFyZW50c0hpZXJbcGFyZW50c0hpZXIubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld3RILnRoT3JkZXJhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHNIaWVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyID0gcGFyZW50c0hpZXJbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFRoc1twYXJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFRoc1twYXJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGhQYXJlbnQgPSBuZXcgRXNUaERpcmVjdGl2ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoUGFyZW50LnRoID0gcGFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhQYXJlbnQuX211bHRpX2NvbnRlbnQgPSBwYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aFBhcmVudC50aFBhcmVudCA9IGkgPiAwID8gcGFyZW50c0hpZXJbaSAtIDFdIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoc1RvQWRkLnB1c2godGhQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHNUb0FkZC5wdXNoKG5ld3RIKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUZCA9IG5ldyBFc1RkRGlyZWN0aXZlKHJlZnRkLlRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQuX211bHRpID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQudGQgPSBgJHtwcm9wfV8ke2lpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RkLnRkQ2xhc3MgPSByZWZ0ZC50ZENsYXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZC50ZElmID0gcmVmdGQudGRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGQudGRWaXNpYmxlID0gcmVmdGQudGRWaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZHNUb0FkZFtuZXdUZC50ZF0gPSBuZXdUZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE9yZGlubyBnbGkgaGVhZGVyIGFnZ2l1bnRpIGluIGJhc2UgYWwgUGFyZW50LCBzZSBwcmVzZW50ZSwgZSBsaSBhZ2dpdW5nbyBhbGxhIGxpc3RhIGRlaSB0aCwgZG9wb2RpY2jDqSBpbiBiYXNlIGFsbG8gc3Rlc3NvIG9yZGluYW1lbnRvIGFnZ2l1bmdvIGkgcmVsYXRpdmkgdGRcclxuICAgICAgICBsZXQgb3JkZXJlZFRocyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBQcmltYSBtZXR0byB0dXR0aSBpIHRoIHNlbnphIHBhcmVudCwgcG9pIHBlciBvZ25pIHBhcmVudCBwcmVuZG8gaSB0aCBvcmRpbmF0aSBjb21lIGxpIHRyb3ZvIG5lbGxhIGxpc3RhXHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoc1RvQWRkLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgaWYoIXRoc1RvQWRkW2ldLnRoUGFyZW50KVxyXG4gICAgICAgICAgICAgICAgb3JkZXJlZFRocy5wdXNoKHRoc1RvQWRkW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBwcm9wIGluIHBhcmVudFRocyl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aHNUb0FkZC5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aHNUb0FkZFtpXTtcclxuICAgICAgICAgICAgICAgIGlmKHRoLnRoUGFyZW50ICYmIHRoLnRoUGFyZW50ID09IHByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJlZFRocy5wdXNoKHRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhzID0gWy4uLnRocywgLi4udGhzVG9BZGRdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzVG9BZGQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gU2UgaWwgdGggw6ggdW4gaGVhZGVyIHRkIHZlcnJlYmJlIHVuZGVmaW5lZC4gTG8gYWdnaXVuZ28gc29sbyBzZSDDqCBlZmZldHRpdmFtZW50ZSBwcmVzZW50ZVxyXG4gICAgICAgICAgICBsZXQgdGQgPSB0ZHNUb0FkZFt0aHNUb0FkZFtpXS50aF07XHJcbiAgICAgICAgICAgIGlmICh0ZClcclxuICAgICAgICAgICAgICAgIHRkcy5wdXNoKHRkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7IGV4cFRkczogdGRzLCBleHBUaHM6IHRocyB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlbmRlIGkgdGggZSBpIHRkIGluIG1vZGFsaXTDoCBkaXJldGl2ZSBlIGxpIG9yZGluYSBpbiBiYXNlIGEgc2UgY2kgc29ubyBjb2xvbm5lIGZpeGVkIG8gbWVub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZUZpeGVkQ29sdW1uc0F0VGhlQmVnaW5uaW5nKHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSkge1xyXG5cclxuICAgICAgICBsZXQgZml4ZWRzID0gMCwgcGlubmVkcyA9IDA7XHJcbiAgICAgICAgbGV0IGNvbHVtbnNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGFibGVDb2x1bW47IH0gPSB7fTtcclxuICAgICAgICBsZXQgY29sdW1uc0luZGV4Q2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBudW1iZXI7IH0gPSB7fTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyBsYSBjYWNoZSBkZWxsZSBjb2xvbm5lXHJcbiAgICAgICAgZm9yIChsZXQgY29saSA9IDA7IGNvbGkgPCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5lc3QuQ29sdW1uc0xpc3RbY29saV07XHJcbiAgICAgICAgICAgIGNvbHVtbnNDYWNoZVtjb2wuaWRdID0gY29sO1xyXG5cclxuICAgICAgICAgICAgLy8gQW5jaGUgcGVyIGxlIGNvbHVtbnNsaXN0IHNwb3N0byBsZSBwaW5uYXRlIG8gbGUgZml4ZWQgYWxsJ2luaXppb1xyXG4gICAgICAgICAgICBpZiAoY29sLnBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGkgIT0gcGlubmVkcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhpcy5lc3QuQ29sdW1uc0xpc3QsIGNvbGksIHBpbm5lZHMpO1xyXG4gICAgICAgICAgICAgICAgcGlubmVkcysrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZSB1bmEgY29sb25uYSDDqCBzaWEgcGlubmF0YSBjaGUgZml4YXRhIGxhIGNvbnNpZGVybyB1bmljYW1lbnRlIHBpbm5hdGFcclxuICAgICAgICAgICAgaWYgKGNvbC5maXhlZCAmJiAhY29sLnBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGkgIT0gcGlubmVkcyArIGZpeGVkcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhzLCBjb2xpLCBwaW5uZWRzICsgZml4ZWRzKTtcclxuICAgICAgICAgICAgICAgIGZpeGVkcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwaW5uZWRzID0gZml4ZWRzID0gMDtcclxuXHJcbiAgICAgICAgLy8gU3Bvc3RvIHR1dHRpIGdsaSBoZWFkZXIgZml4ZWQgbyBwaW5uZWQgYWxsJ2luaXppb1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJpYXNzZWdubyBzZW1wcmUgcGVyIHJpcHVsaXJlIHZhbG9yaSBkaSBwYXJ0ZW56YSBvIHBlciBhZ2dpb3JuYXJsaSBpbiBjYXNvIGRpIG1vZGlmaWNoZSB1dGVudGVcclxuICAgICAgICAgICAgdGgudGhQaW5uZWQgPSAoIWNvbHVtbnNDYWNoZVt0aC50aF0gJiYgdGgudGhQaW5uZWQpIHx8IChjb2x1bW5zQ2FjaGVbdGgudGhdICYmIGNvbHVtbnNDYWNoZVt0aC50aF0ucGlubmVkKTtcclxuICAgICAgICAgICAgaWYgKHRoLnRoUGlubmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBwaW5uZWRzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aHMsIGksIHBpbm5lZHMpO1xyXG4gICAgICAgICAgICAgICAgcGlubmVkcysrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL0luIHF1ZXN0byBjYXNvIHNvbm8gaW5mb3JtYXppb25pIHN0YXRpY2hlIGludmVjZSwgbm9uIG1vZGlmaWNhYmlsaSBkYWxsJ3V0ZW50ZSwgcXVpbmRpIG5vbiBtaSBkw7IgcHJlb2NjdXBhemlvbmlcclxuICAgICAgICAgICAgaWYgKCh0aC50aEZpeGVkIHx8IHRoLnRoR3JvdXApICYmICF0aC50aFBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgIT0gcGlubmVkcyArIGZpeGVkcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5hcnJheU1vdmUodGhzLCBpLCBwaW5uZWRzICsgZml4ZWRzKTtcclxuICAgICAgICAgICAgICAgIGZpeGVkcysrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWNoZSBkZWdsaSBpbmRpY2kgcGVyIHJpcG9zaXppb25hcmUgaSB0ZCBjb21lIGkgdGhcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgY29sdW1uc0luZGV4Q2FjaGVbKDxFc1RoRGlyZWN0aXZlPnRoc1tpXSkudGhdID0gaTtcclxuXHJcbiAgICAgICAgLy8gUmlvcmRpbm8gbGUgY2VsbGUgcGVyIGZhcmdsaSBtYW50ZW5lcmUgbGEgc3Rlc3NhIHN0cnV0dHVyYSBkZWkgdGhcclxuICAgICAgICBsZXQgbmV3VGRzID0gbmV3IEFycmF5KHRocy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IHRkc1tpXSBhcyBFc1RkRGlyZWN0aXZlO1xyXG4gICAgICAgICAgICBuZXdUZHNbY29sdW1uc0luZGV4Q2FjaGVbaXRlbS50ZF1dID0gaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lkhhc1Bpbm5lZENvbHVtbnMgPSBwaW5uZWRzID4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSW4gYmFzZSBhbGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgY2FsY29sYSBsZSBkaW1lbmlvbmkgZGVsbGUgY29sb25uZSBwaW5uYXRlICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVQaW5uZWRDb2x1bW5zV2lkdGgoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5IYXNQaW5uZWRDb2x1bW5zKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZXN0LlBpbm5lZENvbnRhaW5lcldpZHRoID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2wgPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGNvbC5waW5uZWQgJiYgY29sLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5QaW5uZWRDb250YWluZXJXaWR0aCArPSBjb2wucGlubmVkV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXN0LlBpbm5lZENvbnRhaW5lcldpZHRoICs9IHRoaXMuZXN0LlNlbGVjdGlvbiA/IDI1IDogMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlcm1pbmF0byBpbCBiaW5kaW5nIGRlbGxlIGNvbG9ubmUgZGEgKipyZXZpZXdDb2x1bW5zTGlzdCoqIGUgZGVsbGEgKipWaWV3KiogZGFsICoqd3JpdGVWYWx1ZSoqIHF1ZXN0byBtZXRvZG8gc2kgb2NjdXBhXHJcbiAgICAgKiBkZWxsJ2FsbGluZWFtZW50byBkZWxsZSBpbmZvcm1hemlvbmkgZnJhIGxlIGNvbG9ubmUgY2FsY29sYXRlIGludGVybmFtZW50ZSBlIGxlIGluZm9ybWF6aW9uaSBzdWxsZSBjb2xvbm5lIGNoZSBhcnJpdmFubyBkYWxsJ0FwcFNlYXJjaFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgQXBwU2VhcmNoIGRhIHV0aWxpenphcmUgcGVyIHF1ZXN0YSBvcGVyYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUxvY2FsVmlzaWJpbGl0eSBJbmRpY2EgZGkgdXRpbGl6emFyZSBsZSBpbXBvc3RhemlvbmkgZGkgdmlzaWJpbGl0w6AgbG9jYWxpIHNlbnphIGFsbGluZWFybGUgYWxsYSB2aWV3XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGlnbkNvbHVtbnNJZkxvYWRlZFZpZXcodmlldzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBsZXQgZW1pdENoYW5nZWQgPSB0aGlzLmVzdC52aWV3TW9kZSAmJiB2aWV3LnNhdmVkc3RhdGU7XHJcbiAgICAgICAgbGV0IG5ld0NvbHNldCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZXN0LkNvbHVtbnNMaXN0IHx8IHRoaXMuZXN0LkNvbHVtbnNMaXN0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XHJcblxyXG4gICAgICAgIC8vIE1vZGxhaXTDoCB2aWV3IC0+XHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbG9ubmUgZGluYW1pY2hlIC0+IHByZW5kbyBsJ2luc2llbWUgZGVsbGUgY29sb25uZSBlIG9wZXJhemlvbmkgZGluYW1pY2hlIGRlZmluaXRlXHJcbiAgICAgICAgICAgIC8vIHN0YW5kYXJkIC0+IHByZW5kbyBsZSBjb2xvbm5lIGRlbGxhIHZpZXdcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbilcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uKHRoaXMuZXN0LkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbj8ubWFwKHQgPT4gdC5Qcm9wZXJ0eU5hbWUpIHx8IFtdKSwgLi4uKHRoaXMuZXN0LkR5bmFtaWNPcGVyYXRpb25zPy5tYXAodCA9PiB0LmlkKSB8fCBbXSldO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zID0gdmlldy5jb2x1bW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNb2RhbGl0w6AgYXJyYXkgLT4gcHJlbmRvIGxlIGNvbG9ubmUgYXJyYXlcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmVzdC5hcnJheUNvbHVtbnNcclxuXHJcbiAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgLy8gU2UgbGEgY29sb25uYSDDqCBwaW5uYXRhIG1pIGFycml2YSBjb2wgc2ltb2xlb24sIG1hIGFuY2hlIHNlIMOoIHVuYSBjb21wb3NpemlvbmUgZGkgcGnDuSBjb2xvbm5lXHJcbiAgICAgICAgICAgIGxldCBleENsID0gY29sdW1ucy5maWx0ZXIoY2MgPT4gKGNjLnN0YXJ0c1dpdGgoJ8KnJykgPyBjYy5zdWJzdHJpbmcoMSkgOiBjYykgPT0gYy5pZCk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsYSBjb2xvbm5hIMOoIHBpbm5hdGEgYWdnaW9ybm8gbCdpbmZvcm1hemlvbmUgbmVsbGEgdmlld1xyXG4gICAgICAgICAgICBpZiAoZXhDbC5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgICAgIGMucGlubmVkID0gZXhDbFswXS5zdGFydHNXaXRoKCfCpycpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgbCdhcHBzZWFyY2ggdmllbmUgZGEgdW5vIHN0YXRvIHByZWNlZGVudGUsIHVzbyBsZSBpbmZvcm1hemlvbmkgc3VsbGUgY29sb25uZSBjaGUgaGEgZGVudHJvLCBhbHRyaW1lbnRpIHNvdnJhc2NyaXZvIHR1dHRvICAqKlxyXG4gICAgICAgICAgICBpZiAoYy52aXNpYmxlICYmIGNvbHVtbnMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICBuZXdDb2xzZXQucHVzaChjLmlkKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGhvIHVuYSBjb2xvbm5hIGxhdG8gQXBwU2VhcmNoIGUgbmVsbGEgQ29sdW1uTGlzdCBub24gw6ggdmlzaWJpbGUsIGFsbGluZW8gYWxsJ0FwcFNlYXJjaFxyXG4gICAgICAgICAgICBlbHNlIGlmIChleENsLmxlbmd0aCA9PSAxICYmICFjLnZpc2libGUgJiYgIXRoaXMuZXN0LnVzZUxvY2FsVmlzaWJpbGl0eSlcclxuICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBBbGxpbmVhbWVudG8gc3VsbCdBcHBTZWFyY2ggcGVyIGNhc2lzdGljaGUgaW52ZXJzZSBhbCBkaSBzb3ByYVxyXG4gICAgICAgICAgICBlbHNlIGlmIChleENsLmxlbmd0aCA9PSAwICYmIGMudmlzaWJsZSAgJiYgIXRoaXMuZXN0LnVzZUxvY2FsVmlzaWJpbGl0eSlcclxuICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBOb24gaG8gY29sb25uZSBuZWxsYSBhcHBzZWFyY2gsIHZ1b2wgZGlyZSBjaGUgc29ubyBhbCBwcmltbyBiaW5kaW5nXHJcbiAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAgICAgdmlldy5jb2x1bW5zID0gbmV3Q29sc2V0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5hcnJheUNvbHVtbnMgPSBuZXdDb2xzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMuZXN0LnZpZXdNb2RlICYmIHZpZXcuc2F2ZWRzdGF0ZSkgJiYgdGhpcy5lc3QuQ29sdW1uc09yZGVyaW5nICYmIHZpZXcuY29sdW1uX29yZGVyaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gU2NvcnJvIGdsaSBvcmRpbmFtZW50aSBjaGUgYXZldm8gc2FsdmF0byBlIHJpY3JlbyBsYSBDb2x1bW5zTGlzdCBpbiBiYXNlIGEgbG9yb1xyXG4gICAgICAgICAgICBsZXQgbmV3Q29sTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB2aWV3LmNvbHVtbl9vcmRlcmluZy5mb3JFYWNoKGNvID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LkNvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuaWQgPT0gY28pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbExpc3QucHVzaChjKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlY3VwZXJvIGFuY2hlIGNhbXBpIG51b3ZpIGNoZSBuZWxsJ2l0ZXJhemlvbmUgdmVjY2hpYSBub24gYydlcmFubyAoc2VydmUgZHVyYW50ZSBsbyBzdmlsdXBwbyBpbiBtb2RvIGRhIG5vbiBwZXJkZXJzaSBmcmEgdW4gRURJVCArIEY1IGUgbCdhbHRybylcclxuICAgICAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QuZm9yRWFjaChjID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghbmV3Q29sTGlzdC5maW5kKHQgPT4gdCA9PSBjLmlkKSlcclxuICAgICAgICAgICAgICAgICAgICBuZXdDb2xMaXN0LnB1c2goYyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lc3QuQ29sdW1uc0xpc3QgPSBuZXdDb2xMaXN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW4gb2duaSBjYXNvIHF1ZXN0byBub24gbWkgc2VydmUgcGnDuSwgbG8gcmVzZXR0byAgKipcclxuICAgICAgICBpZiAodGhpcy5lc3Qudmlld01vZGUpXHJcbiAgICAgICAgICAgIHZpZXcuc2F2ZWRzdGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBSZXNldCBkaSBxdWVzdGEgdmFyaWFiaWxlIHVzYXRhIG9uZS1iaW5kXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnVzZUxvY2FsVmlzaWJpbGl0eSlcclxuICAgICAgICAgICAgdGhpcy5lc3QudXNlTG9jYWxWaXNpYmlsaXR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChlbWl0Q2hhbmdlZClcclxuICAgICAgICAgICAgdGhpcy5lc3QuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gYmFzZSBhbGxhIHZpc2liaWxpdMOgIHJlZ2lzdHJhdGEgbmVsbGUgKipDb2x1bW5zTGlzdCoqIHF1ZXN0byBtZXRvZG8gc2kgb2NjdXBhIGRpIHByZW5kZXJlIHR1dHRpIGkgKipFc1RoRGlyZWN0aXZlKiogZWQgKipFc1RkRGlyZWN0aXZlKiogcmVsYXRpdmkgZSBuYXNvbmRlcmxpL21vc3RyYXJsaVxyXG4gICAgICpcclxuICAgICAqIENvc3RvOiAxIHNjYW4gQ29sdW1uc0xpc3QsIDEgc2NhbiBFc1RoRGlyZWN0aXZlcywgMSBzY2FuIEVzVGREaXJlY3RpdmVzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBIZWFkZXIgZGVsbGEgdGFiZWxsYVxyXG4gICAgICogQHBhcmFtIHtFc1RkRGlyZWN0aXZlW119IHRkcyBDZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IEFwcFNlYXJjaCBkYSB1dGlsaXp6YXJlIHBlciBxdWVzdGEgb3BlcmF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSwgdmlldzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBsZXQgbmV3Q29sc2V0ID0gW107XHJcbiAgICAgICAgbGV0IGZpeGVkVGhzOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xyXG4gICAgICAgIGxldCBjb2x1bW5zQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RhYmxlQ29sdW1uOyB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgY29saSA9IDA7IGNvbGkgPCB0aGlzLmVzdC5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5lc3QuQ29sdW1uc0xpc3RbY29saV07XHJcbiAgICAgICAgICAgIGNvbHVtbnNDYWNoZVtjb2wuaWRdID0gY29sO1xyXG4gICAgICAgICAgICBpZiAoY29sLnZpc2libGUpXHJcbiAgICAgICAgICAgICAgICBuZXdDb2xzZXQucHVzaCgoY29sLnBpbm5lZCA/IFwiwqdcIiA6IFwiXCIpICsgY29sLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXcpXHJcbiAgICAgICAgICAgIHZpZXcuY29sdW1ucyA9IG5ld0NvbHNldDtcclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5hcnJheUNvbHVtbnMgPSBuZXdDb2xzZXQ7XHJcblxyXG4gICAgICAgIC8vIERhIHF1aSBpbiBwb2kgZGV2b25vIGVzc2VyZSBlc2VndWl0aSBTT0xPIGluIGZhc2UgZGkgd3JpdGVWYWx1ZSBxdWluZGkgZGV2byBhc3NpY3VyYXJtaSBkaSBwYXNzYXJsaSBudWxsIGluIHR1dHRpIGkgcGFzc2FnZ2kgZGl2ZXJzaSBkYSBxdWVsbG9cclxuICAgICAgICBpZiAodGhzKSB7XHJcbiAgICAgICAgICAgIC8vIERlZmluaXNjbyBzZSBsYSBjb2xvbm5hIMOoIHZpc2liaWxlIGluIGJhc2UgYWxsYSBzdWEgcmFwcHJlc2VudGF6aW9uZSBsb2NhbGUgaW4gQ29sdW1uc0xpc3RcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aC50aFZpc2libGUgPSB0aC50aEZpeGVkIHx8IChjb2x1bW5zQ2FjaGVbdGgudGhdID8gY29sdW1uc0NhY2hlW3RoLnRoXS52aXNpYmxlIDogdGgudGhWaXNpYmxlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aC50aEZpeGVkIHx8IHRoLnRoR3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgZml4ZWRUaHNbdGgudGhdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRkcykge1xyXG4gICAgICAgICAgICAvLyBEZWZpbmlzY28gc2UgbGEgY2VsbGEgw6ggdmlzaWJpbGUgaW4gYmFzZSBhbGxhIHN1YSByYXBwcmVzZW50YXppb25lIGxvY2FsZSBpbiBDb2x1bW5zTGlzdFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRkID0gdGRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGQudGRWaXNpYmxlID0gZml4ZWRUaHNbdGQudGRdIHx8IChjb2x1bW5zQ2FjaGVbdGQudGRdID8gY29sdW1uc0NhY2hlW3RkLnRkXS52aXNpYmxlIDogdGQudGRWaXNpYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lc3QuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsaW5lYSBnbGkgb3JkaW5hbWVudGkgZGF0aSBmcmEgbGUgKipFc1RocyoqIGUgbGUgaW5mb3JtYXppb25pIGFsbCdpbnRlcm5vIGRlbGxhIFZpZXcgYmluZGF0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgQXBwU2VhcmNoIGRhIHV0aWxpenphcmUgcGVyIHF1ZXN0YSBvcGVyYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxpZ25IZWFkZXJzT3JkZXJpbmcodGhzOiBFc1RoRGlyZWN0aXZlW10sIHZpZXc6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgbGV0IG9yZGVycyA9IHZpZXcgPyB2aWV3Lm9yZGVycyA6IHRoaXMuZXN0LmFycmF5T3JkZXJzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIHRoLnRoT3JkZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9yID0gb3JkZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9yLmlkID09IHRoLnRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoLnRoT3JkZXIgPSBvci5vcmRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYSB0dXR0ZSBsZSBpbmZvcm1hemlvbmkgY2hlIHNlcnZvbm8gcGVyIGdlc3RpcmUgaWwgcmFnZ3J1cHBhbWVudG8gZGVnbGkgaGVhZGVyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBDb2xvbm5lIGRlbGxhIHRhYmVsbGFcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7eyBsZWFmczogRXNUaERpcmVjdGl2ZVtdLCBncm91cGluZ0xldmVsOiBudW1iZXIsIHBhcmVudHNDYWNoZTogYW55LCB0aHNDYWNoZTogYW55IH19IE9nZ2V0dG8gY29udGVuZW50ZSBsYSBsaXN0YSBkZWxsZSBmb2dsaWUgKGhlYWRlciBiYXNlKSwgaWwgbGl2ZWxsb1xyXG4gICAgICogbWFzc2ltbyBkaSByYWdncnVwcGFtZW50byByYWdnaXVudG8sIHVuYSBjYWNoZSBpbiBjdWkgdmVuZ29ubyBpbmRpY2F0aSB0dXR0aSBpIGdydXBwaSBjaGUgc29ubyBcInBhcmVudFwiIChxdWluZGkgY2hlIHJhZ2dydXBwYW5vIGFsbWVubyAxIGhlYWRlcikgZSBsYSBjYWNoZSBkZWdsaSBoZWFkZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV2YWx1YXRlSGVhZGVyc0dyb3VwaW5nSW5mb3ModGhzOiBFc1RoRGlyZWN0aXZlW10pOiB7IGxlYWZzOiBFc1RoRGlyZWN0aXZlW107IGdyb3VwaW5nTGV2ZWw6IG51bWJlcjsgcGFyZW50c0NhY2hlOiBhbnk7IHRoc0NhY2hlOiBhbnk7IH0ge1xyXG4gICAgICAgIC8vIFByZWdpcm8gcGVyIHRyb3ZhcmUgaSBwYXJlbnRcclxuICAgICAgICBsZXQgcGFyZW50c0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xyXG4gICAgICAgIGxldCB0aHNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGhEaXJlY3RpdmU7IH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcblxyXG4gICAgICAgICAgICB0aHNDYWNoZVt0aC50aF0gPSB0aDtcclxuICAgICAgICAgICAgaWYgKHRoLnRoUGFyZW50ICYmICFwYXJlbnRzQ2FjaGVbdGgudGhQYXJlbnRdKVxyXG4gICAgICAgICAgICAgICAgcGFyZW50c0NhY2hlW3RoLnRoUGFyZW50XSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZWNvbmRvIGdpcm8gcGVyIGJlY2NhcmUgaWwgbGl2ZWxsbyBtYXNzaW1vIGUgbGEgbGlzdGEgZGkgZm9nbGllICh0aCBzZW56YSBwYXJlbnQpXHJcbiAgICAgICAgbGV0IGhNYXhMZXZlbCA9IDA7XHJcbiAgICAgICAgbGV0IGxlYWZzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIHNvbm8gdW5hIGZvZ2xpYSB2ZWRvIHF1YW50aSBsaXZlbGxpIGNpIHNvbm8gc29wcmFcclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRzQ2FjaGVbdGgudGhdKSB7XHJcbiAgICAgICAgICAgICAgICBsZWFmcy5wdXNoKHRoKTtcclxuICAgICAgICAgICAgICAgIGxldCB0bXAgPSB0aGlzLmp1bXBzVG9GaW5hbFBhcmVudCh0aCwgdGhzQ2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaE1heExldmVsID0gdG1wID4gaE1heExldmVsID8gdG1wIDogaE1heExldmVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBsZWFmczogbGVhZnMsIGdyb3VwaW5nTGV2ZWw6IGhNYXhMZXZlbCwgcGFyZW50c0NhY2hlOiBwYXJlbnRzQ2FjaGUsIHRoc0NhY2hlOiB0aHNDYWNoZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhIGdsaSBoZWFkZXIgZ3JvdXBzIGRhIHVuYSBsaXN0YSBkaSBpbmZvIHN1aSB0aCBhbGwnaW50ZXJubyBkZWxsYSB2YXJpYWJpbGUgKipUTVBSb3dUaEdyb3VwcyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHt7IGxlYWZzOiBFc1RoRGlyZWN0aXZlW10sIGdyb3VwaW5nTGV2ZWw6IG51bWJlciwgcGFyZW50c0NhY2hlOiBhbnksIHRoc0NhY2hlOiBhbnkgfX0gaW5mb3MgSW5mb3JtYXppb25pIGRpIHJhZ2dydXBwYW1lbnRvIHZhbHV0YXRlIHByZWNlZGVudGVtZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVIZWFkZXJHcm91cHMoaW5mb3M6IHsgbGVhZnM6IEVzVGhEaXJlY3RpdmVbXTsgZ3JvdXBpbmdMZXZlbDogbnVtYmVyOyBwYXJlbnRzQ2FjaGU6IGFueTsgdGhzQ2FjaGU6IHsgW2luZGV4OnN0cmluZ106IEVzVGhEaXJlY3RpdmV9OyB9KSB7XHJcbiAgICAgICAgaWYgKGluZm9zLmdyb3VwaW5nTGV2ZWwgPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvKioqKioqIFNURVAgMTogQ3JlbyBsJ291dHB1dCBkZWkgcmFnZ3J1cHBhbWVudGkgcGVyIGhlYWRlciBpbiBtb2RvIGRhIG5vbiBkb3Zlcm1pIHByZW9jY3VwYXJlIGRpIGNlbGxlIG5vbiBpbml6aWFsaXp6YXRlICoqKioqKi9cclxuXHJcbiAgICAgICAgbGV0IGV4cGFuZGVkR3JvdXBzID0gW107XHJcbiAgICAgICAgbGV0IHZpc2libGVVbnBpbm5lZExlYWZzOiBFc1RoRGlyZWN0aXZlW10gPSAoPGFueVtdPmluZm9zLmxlYWZzKS5maWx0ZXIoKHQ6IEVzVGhEaXJlY3RpdmUpID0+IHQudGhWaXNpYmxlICYmIHQudGhJZiAmJiAhdC50aFBpbm5lZCk7XHJcbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBpbmZvcy5ncm91cGluZ0xldmVsOyBsKyspIHtcclxuICAgICAgICAgICAgZXhwYW5kZWRHcm91cHMucHVzaChbXSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlzaWJsZVVucGlubmVkTGVhZnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBleHBhbmRlZEdyb3Vwc1tsXS5wdXNoKFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDI6IE9yZGlubyBsZSBmb2dsaWUgaW4gYmFzZSBhZ2xpIG9yZGluYW1lbnRpIGRlbGxlIGNvbG9ubmUgKioqKioqL1xyXG4gICAgICAgIGxldCBvcmRlcmVkTGVhZnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgbGVhZjogRXNUaERpcmVjdGl2ZSA9IGluZm9zLnRoc0NhY2hlW3RoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlc1tpXV07XHJcbiAgICAgICAgICAgIGlmIChsZWFmLnRoVmlzaWJsZSAmJiBsZWFmLnRoSWYgJiYgIWxlYWYudGhQaW5uZWQpXHJcbiAgICAgICAgICAgICAgICBvcmRlcmVkTGVhZnMucHVzaChsZWFmKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKioqKiogU1RFUCAzOiBDcmVvIGwnYXJyYXkgZ3JvdXAgY29uIHR1dHRpIGkgcmlmZXJpbWVudGkgZGVsIGNhc28gKioqKioqL1xyXG4gICAgICAgIGxldCBjdXJyZW50UGFyZW50ID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyZWRMZWFmcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgcmVmVGg6IEVzVGhEaXJlY3RpdmUgPSBvcmRlcmVkTGVhZnNbaV07XHJcbiAgICAgICAgICAgIGxldCBwcmV2VGg6IEVzVGhEaXJlY3RpdmUgPSBpIC0gMSA+PSAwID8gb3JkZXJlZExlYWZzW2kgLSAxXSA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXJlbnQgZGl2ZXJzbyBkYSBwcmltYSwgbWV0dG8gaWwgYm9yZG8gYSBzaW5pc3RyYSBlIGEgZGVzdHJhIGRlbGxhIGNlbGxhIHByZWNlZGVudGUgKHNlIGMnw6gpXHJcbiAgICAgICAgICAgIC8vIEFsbCd1bHRpbW8gZ2lybyBtZXR0byBpbCBib3JkbyBhIGRlc3RyYS4gVHV0dG8gcXVlc3RvIGxvIHJpZXNlZ3VvIHBlciBvZ25pIGNlbGxhIGluIG1vZG8gZGEgcmlwdWxpcmUgZXZlbnR1YWxpIGEgY3VpIGF2ZXZvIGFzc2VnbmF0byB0YWcgcHJlY2VkZW50ZW1lbnRlXHJcbiAgICAgICAgICAgICg8YW55PnJlZlRoKS5fbGJvcmQgPSByZWZUaC50aFBhcmVudCAhPSBjdXJyZW50UGFyZW50O1xyXG4gICAgICAgICAgICAoPGFueT5yZWZUaCkuX3Jib3JkID0gdmlzaWJsZVVucGlubmVkTGVhZnMubGVuZ3RoID09IGkgKyAxO1xyXG4gICAgICAgICAgICBpZiAocHJldlRoKVxyXG4gICAgICAgICAgICAgICAgKDxhbnk+cHJldlRoKS5fcmJvcmQgPSByZWZUaC50aFBhcmVudCAhPSBjdXJyZW50UGFyZW50O1xyXG5cclxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHJlZlRoLnRoUGFyZW50O1xyXG5cclxuICAgICAgICAgICAgLy8gUGVyIG9nbmkgZ3J1cHBvIHNyb3RvbG8gaWwgcGFyZW50IG5lbGxhIG1hdHJpY2UgZGVpIHJhZ2dydXBwYW1lbnRpXHJcbiAgICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgaW5mb3MuZ3JvdXBpbmdMZXZlbDsgbCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gcmVmVGgudGhQYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICYmICFyZWZUaC50aFBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkR3JvdXBzW2xdW2ldID0gcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlZlRoID0gaW5mb3MudGhzQ2FjaGVbcGFyZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDQ6IENvbXBhdHRvIG5lbGwnZWxlbWVudG8gZmluYWxlIHN1IGN1aSBiaW5kYXJtaS4gTCdJRCBhc3NlZ25hdG8gw6ggU09MTyBwZXIgb3R0aW1penphcmUgZ2xpIG5nRm9yICoqKioqKi9cclxuXHJcbiAgICAgICAgY3VycmVudFBhcmVudCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTcGFuID0gMDtcclxuICAgICAgICBsZXQgZmluYWxIZWFkZXJzOiB7IElEOiBzdHJpbmcsIFNwYW46IG51bWJlcjsgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IENvbnRlbnQ/OiBzdHJpbmcsIFBpbm5lZD86IGJvb2xlYW47IEJvcmRlcnM/OiBib29sZWFuOyB9W11bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgZXhwYW5kZWRHcm91cHMubGVuZ3RoOyBsKyspIHtcclxuICAgICAgICAgICAgbGV0IGxldmVsQXJyYXk6IHsgSUQ6c3RyaW5nLCBTcGFuOiBudW1iZXI7IFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyBDb250ZW50Pzogc3RyaW5nLCBQaW5uZWQ/OiBib29sZWFuOyBCb3JkZXJzPzogYm9vbGVhbjsgfVtdID0gW107XHJcbiAgICAgICAgICAgIGZpbmFsSGVhZGVycy5wdXNoKGxldmVsQXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LlNlbGVjdGlvbiB8fCB0aGlzLmVzdC5IYXNQaW5uZWRDb2x1bW5zKVxyXG4gICAgICAgICAgICAgICAgbGV2ZWxBcnJheS5wdXNoKHsgSUQ6IFwiX2Jhc2Vfc2VsX3Bpbm5lZFwiLCBTcGFuOiAxLCBUZW1wbGF0ZTogbnVsbCwgUGlubmVkOiB0aGlzLmVzdC5IYXNQaW5uZWRDb2x1bW5zIH0pO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaCA9IDA7IGggPCBleHBhbmRlZEdyb3Vwc1tsXS5sZW5ndGg7IGgrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBleHBhbmRlZEdyb3Vwc1tsXVtoXTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09IGN1cnJlbnRQYXJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYW4rKztcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3BhbiA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBgJHtjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0udGggOiAnbm90aCd9XyR7Y3VycmVudFNwYW59YCwgU3BhbjogY3VycmVudFNwYW4sIFRlbXBsYXRlOiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uVGVtcGxhdGUgOiBudWxsLCBDb250ZW50OiBjdXJyZW50UGFyZW50ID8gaW5mb3MudGhzQ2FjaGVbY3VycmVudFBhcmVudF0uX211bHRpX2NvbnRlbnQgOiBudWxsLCBCb3JkZXJzOiAhIWN1cnJlbnRQYXJlbnQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYW4gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBVbHRpbWEgYWdnaXVudGEgY2hlIGFsdHJpbWVudGkgbWkgcmltYXJyZWJiZSBpbiBjYWNoZVxyXG4gICAgICAgICAgICBsZXZlbEFycmF5LnB1c2goeyBJRDogYCR7Y3VycmVudFBhcmVudCA/IGluZm9zLnRoc0NhY2hlW2N1cnJlbnRQYXJlbnRdLnRoIDogJ25vdGgnfV8ke2N1cnJlbnRTcGFufWAsIFNwYW46IGN1cnJlbnRTcGFuLCBUZW1wbGF0ZTogY3VycmVudFBhcmVudCA/IGluZm9zLnRoc0NhY2hlW2N1cnJlbnRQYXJlbnRdLlRlbXBsYXRlIDogbnVsbCwgQ29udGVudDogY3VycmVudFBhcmVudCA/IGluZm9zLnRoc0NhY2hlW2N1cnJlbnRQYXJlbnRdLl9tdWx0aV9jb250ZW50IDogbnVsbCAsIEJvcmRlcnM6ICEhY3VycmVudFBhcmVudCB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGkgcGV6emV0dGluaSBwZXIgbGEgcmltb3ppb25lIGUgZ2xpIGV4cG9ydCwgc2UgcHJlc2VudGlcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LlJlbW92YWwpXHJcbiAgICAgICAgICAgICAgICBsZXZlbEFycmF5LnB1c2goeyBJRDogXCJfYmFzZV9yZW1vdmFsXCIsIFNwYW46IDEsIFRlbXBsYXRlOiBudWxsIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LkV4cG9ydCB8fCB0aGlzLmVzdC5IaWRkZW5Db2x1bW5zIHx8IHRoaXMuZXN0LkNvbHVtbnNPcmRlcmluZyB8fCB0aGlzLmVzdC5Db3JuZXJNZW51T3B0aW9ucylcclxuICAgICAgICAgICAgICAgIGxldmVsQXJyYXkucHVzaCh7IElEOiBcIl9iYXNlX2V4dHJhX29wdHNcIiwgU3BhbjogMSwgVGVtcGxhdGU6IG51bGwgfSk7XHJcblxyXG4gICAgICAgICAgICBjdXJyZW50U3BhbiA9IDA7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKiBTVEVQIDU6IFNlY2NvIGxlIHJpZ2hlIGluIGN1aSBub24gYyfDqCBudWxsYSAqKioqKiovXHJcblxyXG4gICAgICAgIHRoaXMuZXN0LlRNUFJvd1RoR3JvdXBzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluYWxIZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBsZXZlbCA9IGZpbmFsSGVhZGVyc1tpXTtcclxuICAgICAgICAgICAgbGV0IGVtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXZlbC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBsZXZlbFtqXTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLlRlbXBsYXRlIHx8IGl0ZW0uQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtcHR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZW1wdHkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5UTVBSb3dUaEdyb3Vwcy5wdXNoKGxldmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjb2xhIGlsIG51bWVybyBkaSBzYWx0aSBkYSB1biBoZWFkZXIgZm9nbGlhIGFsbCd1bHRpbW8gcGFyZW50IGRlbGxhIGNhdGVuYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZX0gdGggSGVhZGVyIGRhIGN1aSBzY29ycmVyZSBpIHBhZHJpIHBlciBjYXBpcmUgcXVhbnRpIGxpdmVsbGkgY2kgc29ubyBzb3ByYVxyXG4gICAgICogQHBhcmFtIHt7IFtpbmRleDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZSB9fSB0aHNDYWNoZSBDYWNoZSBkZWdsaSBoZWFkZXJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBqdW1wc1RvRmluYWxQYXJlbnQodGg6IEVzVGhEaXJlY3RpdmUsIHRoc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUaERpcmVjdGl2ZTsgfSkge1xyXG4gICAgICAgIGxldCBqdW1wcyA9IDA7IGxldCBwYXJlbnQgPSBudWxsOyBsZXQgcGFyZW50c1ByZXBlbmQ6IHsgaWQ6IHN0cmluZywgdG1wbD86IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRlbnQ/OiBzdHJpbmcgfVtdID0gW107XHJcbiAgICAgICAgbGV0IGJhc2VUaFJlZiA9IHRoO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gdGgudGhQYXJlbnQ7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoID0gdGhzQ2FjaGVbcGFyZW50XTtcclxuICAgICAgICAgICAgICAgIGlmICghdGgudGhFbXB0eSAmJiAhdGguX211bHRpX2NvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c1ByZXBlbmQudW5zaGlmdCh7IGlkOiB0aC50aCwgdG1wbDogdGguVGVtcGxhdGUgfSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGgudGhFbXB0eSAmJiB0aC5fbXVsdGlfY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzUHJlcGVuZC51bnNoaWZ0KHsgaWQ6IHRoLnRoLCBjb250ZW50OiB0aC5fbXVsdGlfY29udGVudCB9KTtcclxuICAgICAgICAgICAgICAgIGp1bXBzKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwYXJlbnQpO1xyXG4gICAgICAgIGJhc2VUaFJlZi5fdGhQYXJlbnRzID0gcGFyZW50c1ByZXBlbmQ7XHJcbiAgICAgICAgcmV0dXJuIGp1bXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBnZW5lcmEgbCdvcmRpbmUgZGkgZGVmYXVsdCBkZWxsZSBjb2xvbm5lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdlbmVyYXRlRGVmYXVsdE9yZGVyKHRoczogRXNUaERpcmVjdGl2ZVtdLCB2aWV3OiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGlmICh0aHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG9yZGVyaW5ncyA9IHRoaXMuZXN0LnZpZXdNb2RlID8gdmlldy5jb2x1bW5fb3JkZXJpbmcgOiB0aGlzLmVzdC5hcnJheUNvbHVtbk9yZGVyaW5nO1xyXG4gICAgICAgIC8vIEdlbmVybyBvcmRpbmFtZW50byBkaSBkZWZhdWx0IGRhIDAgZmlubyBhIGRvdmUgZGV2ZSBhcnJpdmFyZS4gU2l0dWF6aW9uZSBhdHR1YWxlIHNlbnphIGhvdHBvdGF0b1xyXG4gICAgICAgIGlmICghb3JkZXJpbmdzIHx8IG9yZGVyaW5ncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9yZGVyID0gdGgudGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMucHVzaChvcmRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcyA9IG9yZGVyaW5ncztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCB0aElkID0gdGgudGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5maW5kKG8gPT4gbyA9PSB0aElkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXMucHVzaCh0aElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpY2EgbCdvcmRpbmUgc3BlY2lmaWNhdG8gYWxsZSB2YXJpZSBjb2xvbm5lXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBBcHBTZWFyY2ggZGEgdXRpbGl6emFyZSBwZXIgcXVlc3RhIG9wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluYWxpemUgU2UgKip0cnVlKiogc2lnbmlmaWNhIGNoZSBub24gbWkgYXNwZXR0byBkaSBkb3ZlciBlZmZldHR1YXJlIGFsdHJlIG9wZXJhemlvbmkgZSBwb3NzbyByZW5kZXJpenphcmUgbGEgc2l0dWF6aW9uZSBpbiBiYXNlIGFpIFJvd0NvbnRleHRcclxuICAgICAqIFNlbnphIGZpbmFsaXplIHNpZ25pZmljYSBjaGUgbWkgYXNwZXR0byBhbHRyZSBvcGVyYXppb25pIGNoZSBwcmltYSBvIHBvaSByaWNoaWFtZXJhbm5vIHF1ZXN0YSBmdW56aW9uZSBjb2wgZmluYWxpemUuXHJcbiAgICAgKlxyXG4gICAgICogQWQgZXNlbXBpbywgdW5hIHZvbHRhIHNlbGV6aW9uYXRvIG9yZGluYW1lbnRvIGZpc2ljby9sb2dpY28gZGVsbGUgY29sb25uZSBzbyBjaGUgcGFydGUgdW4gYWx0cmEgcmljZXJjYSBjaGUgbWkgcml2YWxvcml6emVyw6AgZGEgXCJ3cml0ZVZhbHVlXCIsIGNoZSBnacOgIGNoaWFtYSBxdWVzdGEgZnVuemlvbmUuXHJcbiAgICAgKiBNZXR0ZW5kbyBzb2xvIGxhIGNoaWFtYXRhIGRhIFwid3JpdGVWYWx1ZVwiIGNvbWUgXCJmaW5hbGl6emFudGVcIiBtaSBhc3NpY3VybyBjaGUgc21hbmF0dGFtZW50aSBhIGZyb250ZW5kIG5vbiBjYXVzaW5vIGZsaWNrZXJpbmcgZmlubyBhIHF1YW5kbyBub24gc2Vydm9ub1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXBwbHlPcmRlcmluZyh2aWV3OiBBcHBTZWFyY2g8YW55PiwgZmluYWxpemU6IGJvb2xlYW4pIHtcclxuICAgICAgICAvLyBHZW5lcm8gb3JkaW5hbWVudG8gcGVyIGdsaSBoZWFkZXJcclxuICAgICAgICBsZXQgbmV3SGVhZGVycyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBTZSBkZXZvIGZpbmFsaXp6YXJlIGFnZ2FuY2lvIHR1dHRlIGxlIHZhcmlhYmlsaSBkaSBiaW5kXHJcbiAgICAgICAgaWYgKGZpbmFsaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYWVkckl0ZW0gPSB0aGlzLmVzdC5UTVBSb3dUSHMuZmlsdGVyKHQgPT4gdC5JRCA9PSBvKVswXTtcclxuICAgICAgICAgICAgICAgIGlmIChoZWFlZHJJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0hlYWRlcnMucHVzaChoZWFlZHJJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUFJvd1RIcyA9IG5ld0hlYWRlcnM7XHJcblxyXG4gICAgICAgICAgICAvLyBHZW5lcm8gb3JkaW5hbWVudG8gcGVyIGxlIGNlbGxlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lc3QuUm93Q29udGV4dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gdGhpcy5lc3QuVE1QUm93VERzW3RoaXMuZXN0LlJvd0NvbnRleHRzW2ldXTtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdDb250ZXh0ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRleHRJdGVtID0gY29udGV4dC5maWx0ZXIodCA9PiB0LklEID09IG8pWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBvdHJlYmJlIGVzc2VyIHVuZGVmaW5lZCBuZWwgY2FzbyBjaSBmb3NzZXJvIGNvbG9ubmUgc290dG8gdGhJZlxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbnRleHRJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LnB1c2goY29udGV4dEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuVE1QUm93VERzW3RoaXMuZXN0LlJvd0NvbnRleHRzW2ldXSA9IG5ld0NvbnRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC52aWV3TW9kZSlcclxuICAgICAgICAgICAgdmlldy5jb2x1bW5fb3JkZXJpbmcgPSB0aGlzLmVzdC5PcmRlckRpcmVjdGl2ZXM7XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5lc3QuYXJyYXlDb2x1bW5PcmRlcmluZyA9IHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcztcclxuXHJcbiAgICAgICAgdGhpcy5lc3QuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICogQWxsJ2ludGVybm8gZGVsbGEgZGlhbG9nIFwiT3JkaW5hbWVudG8gZSBWaXNpYmlsaXTDoCBDb2xvbm5lXCIgbWV0dGUgbGEgY29sb25uYSBzcGVjaWZpY2F0YSBwcmltYSBkZWxsYSBjb2xvbm5hIHByZWNlZGVudGVcclxuICAqXHJcbiAgKiBAcGFyYW0ge0VzVGFibGVDb2x1bW59IGNvbHVtbkl0ZW0gQ29sb25uYSBkYSBzcG9zdGFyZVxyXG4gICovXHJcbiAgICBwdWJsaWMgc2VuZFVwKGNvbHVtbkl0ZW06IEVzVGFibGVDb2x1bW4pIHtcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuaW5kZXhPZihjb2x1bW5JdGVtKTtcclxuICAgICAgICBpZiAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaXRlbUluZGV4IC0gMV0uZml4ZWQgfHwgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3RbaXRlbUluZGV4IC0gMV0ucGlubmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy51dGlFeHRzLnN3YXAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QsIGl0ZW1JbmRleCwgaXRlbUluZGV4IC0gMSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiBwb3NzbyBmYXJlIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Db2x1bW5zTGlzdCkpIHBlcmNow6kgY29udGllbmUgcmlmZXJpbWVudGkgYSBUZW1wbGF0ZVJlZlxyXG4gICAgICAgIGxldCB0bXAgPSBbXTtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4geyB0bXAucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gdG1wO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsJ2ludGVybm8gZGVsbGEgZGlhbG9nIFwiT3JkaW5hbWVudG8gZSBWaXNpYmlsaXTDoCBDb2xvbm5lXCIgbWV0dGUgbGEgY29sb25uYSBzcGVjaWZpY2F0YSBkb3BvIGxhIGNvbG9ubmEgc3VjY2Vzc2l2YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUYWJsZUNvbHVtbn0gY29sdW1uSXRlbSBDb2xvbm5hIGRhIHNwb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZW5kRG93bihjb2x1bW5JdGVtOiBFc1RhYmxlQ29sdW1uKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmluZGV4T2YoY29sdW1uSXRlbSk7XHJcbiAgICAgICAgdGhpcy51dGlFeHRzLnN3YXAodGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QsIGl0ZW1JbmRleCwgaXRlbUluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiBwb3NzbyBmYXJlIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Db2x1bW5zTGlzdCkpIHBlcmNow6kgY29udGllbmUgcmlmZXJpbWVudGkgYSBUZW1wbGF0ZVJlZlxyXG4gICAgICAgIGxldCB0bXAgPSBbXTtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4geyB0bXAucHVzaChPYmplY3QuYXNzaWduKHt9LCBjKSk7IH0pO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gdG1wO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsJ2ludGVybm8gZGVsbGEgZGlhbG9nIFwiT3JkaW5hbWVudG8gZSBWaXNpYmlsaXTDoCBDb2xvbm5lXCIgcGlubmEgbGEgY29sb25uYSBzcGVjaWZpY2F0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUYWJsZUNvbHVtbn0gY29sdW1uSXRlbSBDb2xvbm5hIGRhIHNwb3N0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwaW5PclVucGluQ29sdW1uKGNvbHVtbkl0ZW06IEVzVGFibGVDb2x1bW4pIHtcclxuICAgICAgICBsZXQgaXRlbUluZGV4ID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuaW5kZXhPZihjb2x1bW5JdGVtKTtcclxuICAgICAgICBpZiAoIWNvbHVtbkl0ZW0ucGlubmVkKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbkl0ZW0ucHJldl9pbmRleCA9IGl0ZW1JbmRleDtcclxuXHJcbiAgICAgICAgICAgIC8vUXVhbmRvIHBpbm5vIGRldm8gc3Bvc3RhcmUgbCdlbGVtZW50byBjb21lIHVsdGltYSBjb2xvbm5hIHBpbm5hdGEgbyBjb21lIHByaW1hIGNvbG9ubmEgc2Ugbm9uIGNlIG5lIHNvbm8gZGkgcGlubmF0ZVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXN0LlRNUENvbHVtbnNMaXN0W2ldLnBpbm5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy9RdWFuZG8gc3Bpbm5vIHJpcG9ydG8gbCdlbGVtZW50byBhbGxvIHN0ZXNzbyBpbmRpY2UgaW4gY3VpIGVyYSBwcmltYSAoc2Ugc29ubyBzdGF0aSBmYXR0aSBzcG9zdGFtZW50aSBuZWwgbWV6em8gY2F6emkgZGVsbCd1dGVudGUpXHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5JdGVtLnByZXZfaW5kZXggIT0gbnVsbCAmJiBjb2x1bW5JdGVtLnByZXZfaW5kZXggIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsaXRpZXMuYXJyYXlNb3ZlKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LCBpdGVtSW5kZXgsIGNvbHVtbkl0ZW0ucHJldl9pbmRleCk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gU2Ugc3Bpbm5vIHNlbnphIHVuIHByZXZfaW5kZXggdnVvbCBkaXJlIGNoZSBsYSBjb2xvbm5hIGVyYSBwaW5uYXRhIGRhIGNvbmZpZ3VyYXppb25lLiBMYSBzcG9zdG8gbmVsIHByaW1vIHB1bnRvIGRpc3BvbmliaWxlXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdFtpXS5waW5uZWQgJiYgIXRoaXMuZXN0LlRNUENvbHVtbnNMaXN0W2ldLmZpeGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmFycmF5TW92ZSh0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdCwgaXRlbUluZGV4LCBpIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29sdW1uSXRlbS5waW5uZWQgPSAhY29sdW1uSXRlbS5waW5uZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGwnaW50ZXJubyBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiBpbnZlcnRlIGxlIGltcG9zdGF6aW9uaSBkaSB2aXNpYmlsaXTDoCBkZWxsYSBjb2xvbm5hXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RhYmxlQ29sdW1ufSBjb2x1bW5JdGVtIENvbG9ubmEgZGEgc3Bvc3RhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbHVtbkNsaWNrZWQoaXRlbTogRXNUYWJsZUNvbHVtbikge1xyXG4gICAgICAgIHRoaXMuZXN0Lmxhc3RTZWxlY3RlZEl0ZW1JRCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVzdC5IaWRkZW5Db2x1bW5zIHx8IGl0ZW0uZml4ZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gIWl0ZW0udmlzaWJsZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbENvbFZpc0NoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFsbCdhcGVydHVyYSBkZWxsYSBkaWFsb2cgXCJPcmRpbmFtZW50byBlIFZpc2liaWxpdMOgIENvbG9ubmVcIiByaWNhcmljYSBsZSBpbmZvcm1hemlvbmkgYXR0dWFsaSBwZXIgcGVybWV0dGVyZSBsYSBtb2RpZmljYSAqL1xyXG4gICAgcHVibGljIHJlc2V0Q29sdW1uVmlzU2VsZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gW107XHJcbiAgICAgICAgLy8gTm9uIHBvc3NvIGZhcmUgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkNvbHVtbnNMaXN0KSkgcGVyY2jDqSBjb250aWVuZSByaWZlcmltZW50aSBhIFRlbXBsYXRlUmVmXHJcbiAgICAgICAgdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdC5mb3JFYWNoKGMgPT4geyB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGMpKTsgfSk7XHJcblxyXG4gICAgICAgIGxldCByZW9yZGVyZWRDb2xMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5Db2x1bW5zT3JkZXJpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uID0gdGhpcy5lc3QuVE1QQ29sdW1uc0xpc3QuZmlsdGVyKHQgPT4gdC5pZCA9PSBvKVswXTtcclxuICAgICAgICAgICAgICAgIC8vIFBvdHJlaSBub24gYXZlcm5lIG5lbCBjYXNvIGNpIHNpYSBpbCBmbGFnIEhpZGRlbkNvbHVtbnMgYSBmYWxzZSwgZXZpdG8gZGkgaW5zZXJpcmUgZGVnbGkgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbExpc3QucHVzaChjb2x1bW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0ID0gcmVvcmRlcmVkQ29sTGlzdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmlhZ2dpb3JuYSBsZSAqKk9yZGVyRGlyZWN0aXZlcyoqIGNvbiBsZSBpbmZvcm1hemlvbmkgaW4gICoqQ29sdW1uc0xpc3QqKiAqL1xyXG4gICAgcHJpdmF0ZSByZWZyZXNoQ29sdW1uT3JkZXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5lc3QuT3JkZXJEaXJlY3RpdmVzID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5lc3QuQ29sdW1uc0xpc3QubGVuZ3RoOyBjKyspXHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk9yZGVyRGlyZWN0aXZlcy5wdXNoKHRoaXMuZXN0LkNvbHVtbnNMaXN0W2NdLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgbGEgc2VsZXppb25lIG8gbWVubyBkZWwgY2hlY2sgZ2xvYmFsZSAoKipnbG9iYWxDb2xWaXNDaGVjayoqKSBkaSB2aXNpYmlsaXTDoCBpbiBiYXNlIGEgc2UgdHV0dGUgbGUgKipUTVBDb2x1bW5zTGlzdCoqIHNvbm8gdmlzaWJpbGkgbyBubyAqL1xyXG4gICAgcHVibGljIHVwZGF0ZUdsb2JhbENvbFZpc0NoZWNrKCkge1xyXG4gICAgICAgIC8vIFRNUENvbExpc3QgdmllbmUgcmllbXBpdGEgZGkgdW5kZWZpbmVkIG5lbCBjYXNvIGluIGN1aSBzaWEgZGlzYXR0aXZhdGEgbGEgc2VsZXppb25lIGRlbGxlIGNvbG9ubmUgbmFzY29zdGVcclxuICAgICAgICB0aGlzLmVzdC5nbG9iYWxDb2xWaXNDaGVjayA9IHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmV2ZXJ5KHQgPT4gdC52aXNpYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoaWFtYXRvIHF1YW5kbyB1bmEgY29sb25uYSB2aWVuZSByaW9yZGluYXRhIGFsbCdpbnRlcm5vIGRlbGxhIGxpc3RhIGRlbGxlIHZpc2liaWxpdMOgL3Bvc2l6aW9uaSBjb2xvbm5lXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Q2RrRHJhZ0Ryb3A8RXNUYWJsZUNvbHVtbltdPn0gZXZlbnQgRXZlbnRvIGRpIGRyb3AgZGVsbGEgbGlzdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbHVtblJlb3JkZXJlZChldmVudDogQ2RrRHJhZ0Ryb3A8RXNUYWJsZUNvbHVtbltdPikge1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoaWFtYXRvIHF1YW5kbyB1bmEgY29sb25uYSB2aWVuZSByaW9yZGluYXRhIGFsbCdpbnRlcm5vIGRlbGxhIGxpc3RhIGRlbGxlIHZpc2liaWxpdMOgL3Bvc2l6aW9uaSBjb2xvbm5lXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRpY2UgaW4gY3VpIHZvZ2xpbyBkcm9wcGFyZSBsJ2VsZW1lbnRvIGRyYWdnYXRvXHJcbiAgICAgKiBAcGFyYW0ge0Nka0RyYWc8RXNUYWJsZUNvbHVtbj59IGl0ZW0gT2dnZXR0byBjaGUgc3RvIGRyYWdnYW5kb1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgbGEgY29sb25uYSBwdcOyIGVzc2VyZSBzcG9zdGF0YSBzdWxsJ2luZGljZSAqKmluZGV4KiosICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzb3J0UHJlZGljYXRlKGluZGV4OiBudW1iZXIsIGl0ZW06IENka0RyYWc8RXNUYWJsZUNvbHVtbj4pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgaXRlbUF0SW5kZXggPSB0aGlzLmVzdC5Db2x1bW5zTGlzdFtpbmRleF07XHJcbiAgICAgICAgcmV0dXJuICFpdGVtQXRJbmRleC5maXhlZCAmJiAhaXRlbUF0SW5kZXgucGlubmVkICYmICFpdGVtLmRhdGEucGlubmVkICYmICFpdGVtLmRhdGEucGlubmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgY2hlIGVmZmV0dHVhIGxhIGNvbmZlcm1hIGRlbGxhIHZpc2liaWxpdMOgIGUgZGVsbCdvcmRpbmUgZGVsbGUgY29sb25uZS5cclxuICAgICAqXHJcbiAgICAgKiBRdWVzdGEgc2VsZXppb25lIHZpZW5lIGlub2x0cmUgc2FsdmF0YSBuZWxsZSBwcmVmZXJlbnplICgqKkBlc2ZhZW56YS9wcmVmZXJlbmNlcyoqKSwgcXVhbG9yYSBsJ0lucHV0ICoqU2F2ZVByZWZlcmVuY2VzKiogZm9zc2UgdmFsb3JpenphdG9cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2Ugbm9uIGNpIHNvbm8gcHJvYmxlbWksICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25maXJtQ29sdW1uVmlzaWJpbGl0eVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBOb24gcGVybWV0dG8gZGkgbm9uIHNlbGV6aW9uYXJlIG51bGxhXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmV2ZXJ5KHQgPT4gIXQudmlzaWJsZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSB0aGlzLmVzdC52aWV3TW9kZSA/ICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3IHx8IHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pIDogbnVsbDtcclxuICAgICAgICB0aGlzLmVzdC5Db2x1bW5zTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZvckVhY2goYyA9PiB7IHRoaXMuZXN0LkNvbHVtbnNMaXN0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgYykpOyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29sdW1uT3JkZXJpbmcoKTtcclxuICAgICAgICB0aGlzLmFwcGx5T3JkZXJpbmcoY2FzdGVkVmlldywgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZnJlc2hDb2x1bW5zVmlzaWJpbGl0eShudWxsLCBudWxsLCBjYXN0ZWRWaWV3KTtcclxuXHJcbiAgICAgICAgLy9TYWx2byBsZSBwcmVmZXJlbmNlcyBkaSBxdWVzdGEgdmlld1xyXG4gICAgICAgIC8vRGkgZGVmYXVsdCByZWdpc3RybyBvcmRpbmFtZW50byBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmUgbmVsbGEgdmlzdGEuIFNvbG8gbGUgY29zZSBkaSBVSVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5TYXZlUHJlZmVyZW5jZXMpIFxyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVmlld1ByZWZlcmVuY2VzKGNhc3RlZFZpZXcpO1xyXG5cclxuICAgICAgICAvLyBSaWVzZWd1byBsJ3VsdGltYSByaWNlcmNhIGJpbmRhdGEgYWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gTWkgYXNzaWN1cm8gZGkgZmFybG8gZG9wbyBsJ2VzcGFuc2lvbmUgZGVsIGNoYW5nZWQgbyByaXNjaGlvIGNoZSBsYSByaWNlcmNhIG1pIHJpZGlhIGNvbG9ubmUgY2hlIGluIHJlYWx0w6Agbm9uIGVzaXN0b25vXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LnZpZXdNb2RlKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVzdC5NYWluR3JvdXBWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuTWFpbkdyb3VwVmlldyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZpZXcgPSB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGVbaV0udmlldztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5jb2x1bW5zID0gdGhpcy5lc3QuTWFpbkdyb3VwVmlldy5jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmNvbHVtbl9vcmRlcmluZyA9IHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcuY29sdW1uX29yZGVyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlLCB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGVbaV0udmlldyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVzdC5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5lc3QuaW50ZXJuYWxXcml0ZVZhbHVlKCk7IH0pO1xyXG5cclxuICAgICAgICAvLyBMbyB2b3JyZWkgbWV0dGVyZSBsYXRvIHRlbXBsYXRlIG1hIG5vXHJcbiAgICAgICAgdGhpcy5lc3QubGFzdFNlbGVjdGVkSXRlbUlEID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVvIGwndW5waW5uaW5nIGRpIHVuYSBjb2xvbm5hIGluIG1hbmllcmEgcHJvZ3JhbW1hdGljYSBzZW1wbGljZW1lbnRlIGVzZWd1ZW5kbyB1bmEgcGVyIHVuYSBsZSBvcGVyYXppb25pIGNoZSB2ZXJyZWJiZXJvIGVzZWd1aXRlIGFsdHJpbWVudGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29kaWNlIGRlbGxhIGNvbG9ubmEgZGEgc3Bpbm5hcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVucGluQ29sdW1uKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q29sdW1uVmlzU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5waW5PclVucGluQ29sdW1uKHRoaXMuZXN0LlRNUENvbHVtbnNMaXN0LmZpbmQodCA9PiB0LmlkID09IGlkKSk7XHJcbiAgICAgICAgdGhpcy5jb25maXJtQ29sdW1uVmlzaWJpbGl0eVNlbGVjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTdWwgY2xpY2sgbmVsbGEgY2hlY2tib3ggZGkgc2VsZXppb25lIGdsb2JhbGUgc2kgc2NvcnJvbm8gdHV0dGUgbGUgY29sb25uZSBlIHNpIGltcG9zdGFubyBhbCB2YWxvcmUgZGVsbGEgY2hlY2sgZ2xvYmFsZSAqL1xyXG4gICAgcHVibGljIGdsb2JhbENvbFZpc0NoZWNrQ2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLmVzdC5UTVBDb2x1bW5zTGlzdC5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXQuZml4ZWQpXHJcbiAgICAgICAgICAgICAgICB0LnZpc2libGUgPSB0aGlzLmVzdC5nbG9iYWxDb2xWaXNDaGVjaztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -951,7 +951,19 @@ class ColumnMetadataHandler {
951
951
  let newColset = [];
952
952
  if (!this.est.ColumnsList || this.est.ColumnsList.length == 0)
953
953
  return;
954
- let columns = this.est.viewMode ? ([...(((_a = this.est.DynamicRowColumnsDefinition) === null || _a === void 0 ? void 0 : _a.map(t => t.PropertyName)) || []), ...(((_b = this.est.DynamicOperations) === null || _b === void 0 ? void 0 : _b.map(t => t.id)) || [])] || view.columns) : this.est.arrayColumns;
954
+ let columns = [];
955
+ // Modlaità view ->
956
+ if (this.est.viewMode) {
957
+ // colonne dinamiche -> prendo l'insieme delle colonne e operazioni dinamiche definite
958
+ // standard -> prendo le colonne della view
959
+ if (this.est.DynamicRowColumnsDefinition)
960
+ columns = [...(((_a = this.est.DynamicRowColumnsDefinition) === null || _a === void 0 ? void 0 : _a.map(t => t.PropertyName)) || []), ...(((_b = this.est.DynamicOperations) === null || _b === void 0 ? void 0 : _b.map(t => t.id)) || [])];
961
+ else
962
+ columns = view.columns;
963
+ }
964
+ // Modalità array -> prendo le colonne array
965
+ else
966
+ columns = this.est.arrayColumns;
955
967
  this.est.ColumnsList.forEach(c => {
956
968
  // Se la colonna è pinnata mi arriva col simoleon, ma anche se è una composizione di più colonne
957
969
  let exCl = columns.filter(cc => (cc.startsWith('§') ? cc.substring(1) : cc) == c.id);