mmhglobal-dynamicform 2.15.0 → 2.15.1
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.
- package/README.md +2 -0
- package/esm2020/lib/ztree/ztree.component.mjs +13 -12
- package/fesm2015/mmhglobal-dynamicform.mjs +12 -11
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +12 -11
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/ztree/ztree.component.d.ts +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
|
|
4
4
|
|
|
5
5
|
## Changelog
|
|
6
|
+
`2.15.1`<br/>
|
|
7
|
+
[ztree] - Fix isChecked not able to retrieve field data scope.
|
|
6
8
|
|
|
7
9
|
`2.15.0`<br/>
|
|
8
10
|
[ztree] - Modify checkOnClick to default false and configurable by setting ToggleCheckboxOnNodeClick property using boolean. <br/>
|
|
@@ -88,6 +88,18 @@ export class ZtreeComponent extends DataListingFieldBase {
|
|
|
88
88
|
this.collapseAll = () => {
|
|
89
89
|
this.state.expandedkeys = [];
|
|
90
90
|
};
|
|
91
|
+
// Custom logic handling Indeterminate state when custom data item property is persisted
|
|
92
|
+
this.isChecked = (dataItem, index) => {
|
|
93
|
+
if (this.data.TreeViewCheckboxConfiguration) {
|
|
94
|
+
if (this.containsItem(dataItem)) {
|
|
95
|
+
return "checked";
|
|
96
|
+
}
|
|
97
|
+
if (this.isIndeterminate(dataItem.Value)) {
|
|
98
|
+
return "indeterminate";
|
|
99
|
+
}
|
|
100
|
+
return "none";
|
|
101
|
+
}
|
|
102
|
+
};
|
|
91
103
|
}
|
|
92
104
|
ngOnInit() {
|
|
93
105
|
super.initComponent().subscribe(() => {
|
|
@@ -488,17 +500,6 @@ export class ZtreeComponent extends DataListingFieldBase {
|
|
|
488
500
|
}
|
|
489
501
|
return [];
|
|
490
502
|
}
|
|
491
|
-
isChecked(dataItem, index) {
|
|
492
|
-
if (this.data.TreeViewCheckboxConfiguration) {
|
|
493
|
-
if (this.containsItem(dataItem)) {
|
|
494
|
-
return "checked";
|
|
495
|
-
}
|
|
496
|
-
if (this.isIndeterminate(dataItem.Value)) {
|
|
497
|
-
return "indeterminate";
|
|
498
|
-
}
|
|
499
|
-
return "none";
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
503
|
containsItem(item) {
|
|
503
504
|
return this.checkedKeys.indexOf(item[this.data.SelectOptions]) > -1;
|
|
504
505
|
}
|
|
@@ -523,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
523
524
|
type: ViewChild,
|
|
524
525
|
args: ["nodetemplate", { static: true }]
|
|
525
526
|
}] } });
|
|
526
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU94RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUE2QyxnQkFBZ0IsRUFBOEQsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBUzFKLE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBZ0J0RCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUZoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBZDVDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNaLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIseUJBQW9CLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLGNBQVMsR0FBdUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNWLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFHLElB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QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9ELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzJHQXhrQlUsY0FBYzsrRkFBZCxjQUFjLG9NQ3BCM0IsNHdIQWtFQTsyRkQ5Q2EsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXO3dHQU13QixZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBUcmVlSXRlbURyb3BFdmVudCwgVHJlZUl0ZW1EcmFnRXZlbnQsIFNlbGVjdGFibGVTZXR0aW5ncywgQ2hlY2thYmxlU2V0dGluZ3MsIENoZWNrZWRTdGF0ZSB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24sIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXMgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96dHJlZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFp0cmVlQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJub2RldGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSkgbm9kZXRlbXBsYXRlOiBFbGVtZW50UmVmO1xyXG5cclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG9yaWdpbmFsSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBpc05vZGVEcm9wID0gZmFsc2U7XHJcbiAgcHVibGljIHN0YXRlID0geyBleHBhbmRlZGtleXM6IFtdIH07XHJcbiAgcHVibGljIGl0ZW1JbmRleCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGNoZWNrZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBkaXNhYmxlZENoZWNrQm94S2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3RhYmxlU2V0dGluZ3MgPSB7IG1vZGU6IFwic2luZ2xlXCIgfTtcclxuICBwdWJsaWMgbm9kZXMgPSBbXTtcclxuICBwcml2YXRlIGFsbE5vZGVzV2l0b3V0SGllcmFjaHkgPSBbXTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ID0gW107XHJcbiAgICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkodGhpcy5ub2Rlcyk7XHJcbiAgICAgIHRoaXMuaW5pdFNldFNlbGVjdGVkVmFsdWVzKCk7XHJcbiAgICAgIHRoaXMuaW5pdE5vZGVDaGVja2JveCgpO1xyXG4gICAgICB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIHx8ICdJZCc7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLm1vZGUgPSB0aGlzLmRhdGEuTXVsdGlwbGUgPyBcIm11bHRpcGxlXCIgOiBcInNpbmdsZVwiO1xyXG5cclxuICAgICAgY29uc3QgaXNFeHBhbmRBbGxOb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuVHJlZXZpZXdFeHBhbmRBbGwgYXMgYW55LCB0aGlzLmdyb3VwKTtcclxuICAgICAgaWYgKGlzRXhwYW5kQWxsTm9kZXMpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxBZGROb2RlID8/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlID8/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5zZXREZWZhdWx0RXhwYW5kYWJsZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkobm9kZXM6IGFueSkge1xyXG4gICAgaWYgKG5vZGVzICYmIEFycmF5LmlzQXJyYXkobm9kZXMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgIGlmICghdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LnNvbWUoeCA9PiB4LklkID09IG5vZGUuSWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkucHVzaChub2RlKTtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUuVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVBbGxOb2Rlc1dpdG91dEhpZXJhY2h5KG5vZGUuVmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG4gICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgdGhpcy5ub2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLlR5cGUgPT0gXCJ6dHJlZVwiKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkodGhpcy5ub2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgICB0aGlzLm5vZGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubm9kZXM7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZShkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmIChkYXRhLkl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBnZXRUZW1wbGF0ZUZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBkYXRhLkl0ZW1UZW1wbGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWdldFRlbXBsYXRlRnVuYykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlRoZSAoXCIgKyBkYXRhLkl0ZW1UZW1wbGF0ZSArIFwiKSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIFZhbHVlIGNvbnRhaW5zOiBcIiwgZ2V0VGVtcGxhdGVGdW5jKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBnZXRUZW1wbGF0ZUZ1bmMoe1xyXG4gICAgICAgIGRhdGFJdGVtLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgZ3JvdXBcclxuICAgICAgfSBhcyBaVHJlZVRlbXBsYXRlUGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRhdGFJdGVtKVxyXG4gICAgICAgIC5maWx0ZXIoZGF0YSA9PiB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvVHJlZUl0ZW1zKGRhdGFTZXQ6IGFueVtdKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJUaGlzIG1ldGhvZCBpcyB0byBiZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFpDb21wb25lbnRIZWxwZXIuY29udmVydFRvVHJlZUl0ZW1zKClcIik7XHJcblxyXG4gICAgY29uc3QgdG9UcmVlSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCB0cmVlSW5kZXg6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgcGVuZGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgZGF0YVNldC5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkLlBhcmVudElkKSB7XHJcbiAgICAgICAgdG9UcmVlSXRlbXMucHVzaChkKTtcclxuICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uVmFsdWUpIHtcclxuICAgICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGVuZGluZ0l0ZW1zLmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvVHJlZUl0ZW1zO1xyXG4gIH1cclxuICAgXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldE5hbWU6IGJvb2xlYW4gfCBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ0FkZE5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PbkFkZE5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdSZW1vdmVOb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25SZW1vdmVOb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRhcmdldE5hbWUpIHtcclxuICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5Pbkl0ZW1DbGljaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWVfb25TZWxlY3Rpb25DaGFuZ2VcIixcclxuICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICBkYXRhOiBldmVudC5kYXRhSXRlbSxcclxuICAgICAgZXZlbnQ6IGV2ZW50LmluZGV4XHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogQXJyYXk8YW55PiB7XHJcbiAgICBpZiAodGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ICYmIHRoaXMuc2VsZWN0ZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyh4W3RoaXMuZGF0YS5TZWxlY3RPcHRpb25zXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGVkVmFsdWVzKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0U2V0U2VsZWN0ZWRWYWx1ZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhzZWxlY3RlZE5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vcHVibGljIHNldFJvd0hlaWdodERvdWJsZSh2YWx1ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAvLyAgY29uc29sZS53YXJuKCdEZXByZWNhdGVkIC0gbm8gbG9uZGVyIG5lZWQgdG8gc2V0IHRoZSBoZWlnaHQnKTtcclxuICAvLyAgLy8gdGhpcy5kYXRhLmRvdWJsZUhlaWdodCA9IHZhbHVlO1xyXG4gIC8vfVxyXG5cclxuICAvLyNyZWdpb24gRXhwYW5kICYgQ29sbGFwc2VcclxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IChkYXRhSXRlbTogYW55LCBpbmRleDogc3RyaW5nKSA9PiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuaW5kZXhPZihpbmRleCkgPiAtMTtcclxuICAgIC8vIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZE5vZGUgPSAoZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgc2V0QXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleCh0aGlzLm5vZGVzLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgaWYgKHNldEFzU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBpbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4QXJyID0gW107XHJcbiAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICBpbmRleEFyci5wdXNoKGluZGV4cy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChpbmRleEFycik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VOb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNvbGxhcHNlUGFyZW50OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoTm9kZUluZGV4KHRoaXMubm9kZXMsIHZhbHVlLCAnJywgZmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtSW5kZXg7XHJcbiAgICBsZXQgaW5kZXhBcnIgPSBbXTtcclxuICAgIGlmIChjb2xsYXBzZVBhcmVudCkge1xyXG4gICAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBhcnIgPSBpLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4QXJyID0gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIodiA9PiB7XHJcbiAgICAgIHJldHVybiAhaW5kZXhBcnIuaW5jbHVkZXModik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hOb2RlSW5kZXgobm9kZTogYW55LCB2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChkW2ZpZWxkXSA9PT0gTnVtYmVyKHZhbHVlKSB8fCBkW2ZpZWxkXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW1JbmRleCA9IHRoaXMuaXRlbUluZGV4LmNvbmNhdChrZXkgKyAnJyArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChkLlZhbHVlLCB2YWx1ZSwgaywgZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICBpZiAodGhpcy5ub2Rlcykge1xyXG4gICAgICB0aGlzLmV4cGFuZEFsbE5vZGUodGhpcy5ub2RlcywgJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kQWxsTm9kZShub2RlOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGtleSA9IGtleSArICdfJztcclxuICAgIH1cclxuICAgIG5vZGUuZm9yRWFjaCgoZDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCBrID0ga2V5ICsgJycgKyBpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KGspO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZShkLlZhbHVlLCBrKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ29sbGFwc2Uobm9kZSkge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIoayA9PiBrICE9PSBub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFeHBhbmQobm9kZSkge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQobm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdEV4cGFuZGFibGUoKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZERhdGFJZHMgPSB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHM7XHJcblxyXG4gICAgaWYgKGV4cGFuZGVkRGF0YUlkcykge1xyXG4gICAgICBjb25zdCBpZExpc3QgPSB0eXBlb2YgZXhwYW5kZWREYXRhSWRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV4cGFuZGVkRGF0YUlkcywgdGhpcy5ncm91cClcclxuICAgICAgICA6IGV4cGFuZGVkRGF0YUlkcztcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkTGlzdCkpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IGlkTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE5vZGUgSGFuZGxpbmdcclxuICBvbkVkaXROb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25FZGl0Tm9kZSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkVkaXROb2RlKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFkZE5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdBZGROb2RlJztcclxuICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gaWYgKHRoaXMuZGF0YS5PbkFkZE5vZGUpIHtcclxuICAgIC8vICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25BZGROb2RlKTtcclxuICAgIC8vICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAvLyAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgLy8gICAgIGNhbGxGdW5jKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgZXZlbnQuaW5kZXgpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ1JlbW92ZU5vZGUnO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyb3AoZXZlbnQ6IFRyZWVJdGVtRHJvcEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkRyYWdnYWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRyb3BIYW5kbGVyID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICB0aGlzLmRhdGEuT25Ecm9wXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiBkcm9wSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZHJvcEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgZHJvcCBpZiBhdHRlbXB0aW5nIHRvIGFkZCB0byBmaWxlXHJcbiAgICAvLyBpZiAoaXNGaWxlKGV2ZW50LmRlc3RpbmF0aW9uSXRlbS5pdGVtLmRhdGFJdGVtLnRleHQpICYmIGV2ZW50LmRyb3BQb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk92ZXIpIHtcclxuICAgIC8vICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJhZ0VuZChldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc05vZGVEcm9wKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0l0ZW1zOiAnLCB0aGlzLml0ZW1zKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IFtdO1xyXG4gICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQodGhpcy5ub2RlcywgdGFyZ2V0KTtcclxuICAgIC8vIHRoaXMuZGF0YVNldCA9IHRhcmdldDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRhcmdldCwgdGhpcy5ncm91cCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWUtb25UcmVlTm9kZURyYWdFbmRcIixcclxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25DaGFuZ2UsXHJcbiAgICAgIGRhdGE6IHRhcmdldFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDaGFuZ2VUb0RhdGFTZXQoc291cmNlOiBBcnJheTxhbnk+LCB0YXJnZXQ6IEFycmF5PGFueT4pIHtcclxuICAgIHNvdXJjZS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKTtcclxuICAgICAgICB0LlZhbHVlID0gW107XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQoZC5WYWx1ZSwgdC5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdCA9IE9iamVjdC5hc3NpZ24oe30sIGQpO1xyXG4gICAgICAgIHQuVmFsdWUgPSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUFkZE5vZGUoaXNIaWRkZW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IGlzSGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVSZW1vdmVOb2RlKGlzSGlkZGVuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgPSBpc0hpZGRlbjtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBTZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxuICBwdWJsaWMgY2xlYXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBbXTtcclxuICB9XHJcbiAgIFxyXG4gIHB1YmxpYyBoYW5kbGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgaWYgKHRoaXMub3JpZ2luYWxJdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmRlZXBDbG9uZSh0aGlzLml0ZW1zKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFpDb21wb25lbnRIZWxwZXIuZGVlcENsb25lKHRoaXMub3JpZ2luYWxJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5maWx0ZXJQcmVmaXgodGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXSA9IHRoaXMuc2VhcmNoKHRoaXMuaXRlbXMsIHZhbHVlKTtcclxuXHJcbiAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJQcmVmaXgodmFsdWVOYW1lOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSgxMik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaChpdGVtczogYW55W10sIHRlcm06IHN0cmluZyk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb250YWlucyhpdGVtLk5hbWUsIHRlcm0pKSB7XHJcbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5WYWx1ZSAmJiBpdGVtLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuc2VhcmNoKGl0ZW0uVmFsdWUsIHRlcm0pO1xyXG5cclxuICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFyIGZpbHRlckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgICAgZmlsdGVySXRlbS5WYWx1ZSA9IG5ld0l0ZW1zO1xyXG4gICAgICAgICAgYWNjLnB1c2goZmlsdGVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoKHRlcm0gfHwgXCJcIikudG9Mb3dlckNhc2UoKSkgPj0gMDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBDaGVja2JveFxyXG4gIHByaXZhdGUgaW5pdE5vZGVDaGVja2JveCgpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICAgaWYgKGNoZWNrYm94Q29uZmlndXJhdGlvbi5TZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjaGVja2JveENvbmZpZ3VyYXRpb24uU2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2hlY2tlZFZhbHVlcyhjaGVja2VkTm9kZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hlY2tib3hDb25maWd1cmF0aW9uLkRpc2FibGVkVmFsdWVzKSB7XHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjaGVja2JveENvbmZpZ3VyYXRpb24uRGlzYWJsZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWRDaGVja0JveChkaXNhYmxlZE5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGVja2JveENvbmZpZ3VyYXRpb24oKTogVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24ge1xyXG4gICAgbGV0IGNoZWNrYm94Q29uZmlndXJhdGlvbjogVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIC8vIElmIENoZWNrYm94Q29uZmlndXJhdGlvbiBpcyBhIHN0cmluZywgcmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBncm91cCBcclxuICAgICAgY2hlY2tib3hDb25maWd1cmF0aW9uID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbiwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gSWYgQ2hlY2tib3hDb25maWd1cmF0aW9uIGlzIGFuIG9iamVjdCwgdXNlIGl0IGRpcmVjdGx5XHJcbiAgICAgIGNoZWNrYm94Q29uZmlndXJhdGlvbiA9IHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hlY2tib3hDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZhbHVlcyhkYXRhOiBhbnksIHRhcmdldEFycmF5OiBhbnlbXSwgZGVmYXVsdFZhbHVlOiBhbnlbXSA9IFtdKSB7XHJcbiAgICB0YXJnZXRBcnJheSA9IGRhdGEgPyAoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pIDogZGVmYXVsdFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoZWNrZWRWYWx1ZXMoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNldFZhbHVlcyhkYXRhLCB0aGlzLmNoZWNrZWRLZXlzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREaXNhYmxlZENoZWNrQm94KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZXMoZGF0YSwgdGhpcy5kaXNhYmxlZENoZWNrQm94S2V5cyk7XHJcbiAgfVxyXG4gICBcclxuICBwdWJsaWMgZ2V0IGNoZWNrYWJsZVNldHRpbmdzKCk6IENoZWNrYWJsZVNldHRpbmdzIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICBjb25zdCBjaGVja2FibGVTZXR0aW5ncyA9IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGNoZWNrUGFyZW50czogIWNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlUGFyZW50QXV0b1NlbGVjdE9uQWxsQ2hpbGRyZW4sXHJcbiAgICAgICAgY2hlY2tDaGlsZHJlbjogIWNoZWNrYm94Q29uZmlndXJhdGlvbi5EaXNhYmxlUGFyZW50U2VsZWN0c0FsbENoaWxkcmVuLFxyXG4gICAgICAgIGNoZWNrRGlzYWJsZWRDaGlsZHJlbjogY2hlY2tib3hDb25maWd1cmF0aW9uLkVuYWJsZURpc2FibGVkQ2hpbGRyZW5TZWxlY3Rpb24sXHJcbiAgICAgICAgbW9kZTogY2hlY2tib3hDb25maWd1cmF0aW9uLlNlbGVjdE11bHRpcGxlID8gJ211bHRpcGxlJyA6ICdzaW5nbGUnLFxyXG4gICAgICAgIGNoZWNrT25DbGljazogY2hlY2tib3hDb25maWd1cmF0aW9uLlRvZ2dsZUNoZWNrYm94T25Ob2RlQ2xpY2ssXHJcbiAgICAgIH0gYXMgQ2hlY2thYmxlU2V0dGluZ3M7XHJcblxyXG4gICAgICByZXR1cm4gY2hlY2thYmxlU2V0dGluZ3M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGVja2VkQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGNoZWNrYm94Q29uZmlndXJhdGlvbi5PbkNoYW5nZTtcclxuICAgICAgY29uc3QgaXNDaGVja2VkID0gdGhpcy5jaGVja2VkS2V5cy5pbmRleE9mKGV2ZW50Lml0ZW0uZGF0YUl0ZW0uSWQpID4gLTE7XHJcblxyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6dHJlZV9PbkNoZWNrYm94Q2hhbmdlXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICAgIGV2ZW50LFxyXG4gICAgICAgIGRhdGE6IHsgY2hlY2tlZFZhbHVlOiBpc0NoZWNrZWQsIHNlbGVjdGVkSXRlbTogZXZlbnQuaXRlbS5kYXRhSXRlbSwgZmllbGQ6IHRoaXMuZGF0YSwgY29tcDogdGhpcyB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDaGVja2VkVmFsdWVzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgaWYgKHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeSAmJiB0aGlzLmNoZWNrZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuY2hlY2tlZEtleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RPcHRpb25zS2V5ID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkuZmlsdGVyKG5vZGUgPT4gdGhpcy5jaGVja2VkS2V5cy5pbmNsdWRlcyhub2RlW3NlbGVjdE9wdGlvbnNLZXldKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNDaGVja2VkKGRhdGFJdGVtOiBhbnksIGluZGV4OiBzdHJpbmcpOiBDaGVja2VkU3RhdGUge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5jb250YWluc0l0ZW0oZGF0YUl0ZW0pKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiY2hlY2tlZFwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luZGV0ZXJtaW5hdGUoZGF0YUl0ZW0uVmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaW5kZXRlcm1pbmF0ZVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zSXRlbShpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrZWRLZXlzLmluZGV4T2YoaXRlbVt0aGlzLmRhdGEuU2VsZWN0T3B0aW9uc10pID4gLTE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW5kZXRlcm1pbmF0ZShpdGVtczogYW55W10gPSBbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlkeCA9IDA7XHJcbiAgICBsZXQgaXRlbTtcclxuXHJcbiAgICB3aGlsZSAoKGl0ZW0gPSBpdGVtc1tpZHhdKSkge1xyXG4gICAgICBpZiAodGhpcy5pc0luZGV0ZXJtaW5hdGUoaXRlbS5WYWx1ZSkgfHwgdGhpcy5jb250YWluc0l0ZW0oaXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWR4ICs9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCIgY2xhc3M9XCJlMXRhZy1zdHlsZVwiXHJcbiAgICAgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8a2VuZG8tdHJlZXZpZXcgW25vZGVzXT1cImdldEl0ZW1zKClcIlxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RXhwYW5kYWJsZVxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9UcmVlVmlld1NlbGVjdGFibGVdPVwic2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcEVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2xsYXBzZSk9XCJoYW5kbGVDb2xsYXBzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGV4cGFuZCk9XCJoYW5kbGVFeHBhbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJvcCk9XCJoYW5kbGVOb2RlRHJvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcmFnRW5kKT1cImhhbmRsZU5vZGVEcmFnRW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwic2VsZWN0ZWRLZXlzXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0hpZXJhcmNoeUJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW5GaWVsZD1cIlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwiTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RCeV09XCJkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLkZpbHRlcmFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZVZpZXdDaGVja2FibGVdPVwiY2hlY2thYmxlU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tCeV09XCJkYXRhLlNlbGVjdE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGNoZWNrZWRLZXlzKV09XCJjaGVja2VkS2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2hlY2tlZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZVZpZXdEaXNhYmxlXT1cImRhdGEuU2VsZWN0T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgWyhkaXNhYmxlZEtleXMpXT1cImRpc2FibGVkQ2hlY2tCb3hLZXlzXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVQYXJlbnROb2Rlc09ubHldPVwiZGF0YS5EaXNhYmxlUGFyZW50Tm9kZXNPbmx5XCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlVmlld05vZGVUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gI25vZGV0ZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRyZWUtY29udGVudC1jb250YWluZXJcIj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PbkFkZE5vZGUgJiYgIWRhdGEuaXNIaWRlQWxsQWRkTm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDAgMCAwIDJweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEhZGF0YUl0ZW0uT25BZGROb2RlVmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlMlwiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3BsdXMnXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PblJlbW92ZU5vZGUgJiYgIWRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDAgMCAwIDEwcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiEhZGF0YUl0ZW0uT25SZW1vdmVOb2RlVmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlM1wiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ21pbnVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tc2VwZXJhdG9yIGUxdGFnLXN0eWxlN1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgaWNvbiBvZiBkYXRhSXRlbS5JY29uTGlzdFwiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJlMXRhZy1zdHlsZTUgbGVmdC1pY29uXCIgW2ljb25dPVwiaWNvblwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGlvbi1sYWJlbCBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIiBjbGFzcz1cImUxdGFnLXN0eWxlNFwiIFtuZ0NsYXNzXT1cImRhdGFJdGVtLmNsYXNzXCI+XHJcbiAgICAgICAgICA8ZGl2IFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNlwiIGNsYXNzPVwiZTF0YWctc3R5bGU2XCIgW2lubmVySFRNTF09XCJnZXRUZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXApIHwgaHRtbFNhbml0aXplXCI+PC9kaXY+XHJcbiAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLXRyZWV2aWV3PlxyXG48L2Rpdj5cclxuIl19
|
|
527
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQU94RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUE2QyxnQkFBZ0IsRUFBOEQsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBUzFKLE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBZ0J0RCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUZoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBZDVDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNaLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIseUJBQW9CLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLGNBQVMsR0FBdUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDbkQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNWLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFHLElB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QUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9ELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzJHQXprQlUsY0FBYzsrRkFBZCxjQUFjLG9NQ3BCM0IsNHdIQWtFQTsyRkQ5Q2EsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXO3dHQU13QixZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBUcmVlSXRlbURyb3BFdmVudCwgVHJlZUl0ZW1EcmFnRXZlbnQsIFNlbGVjdGFibGVTZXR0aW5ncywgQ2hlY2thYmxlU2V0dGluZ3MsIENoZWNrZWRTdGF0ZSB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24sIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXMgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96dHJlZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFp0cmVlQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJub2RldGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSkgbm9kZXRlbXBsYXRlOiBFbGVtZW50UmVmO1xyXG5cclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG9yaWdpbmFsSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBpc05vZGVEcm9wID0gZmFsc2U7XHJcbiAgcHVibGljIHN0YXRlID0geyBleHBhbmRlZGtleXM6IFtdIH07XHJcbiAgcHVibGljIGl0ZW1JbmRleCA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEtleXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGNoZWNrZWRLZXlzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBkaXNhYmxlZENoZWNrQm94S2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3RhYmxlU2V0dGluZ3MgPSB7IG1vZGU6IFwic2luZ2xlXCIgfTtcclxuICBwdWJsaWMgbm9kZXMgPSBbXTtcclxuICBwcml2YXRlIGFsbE5vZGVzV2l0b3V0SGllcmFjaHkgPSBbXTtcclxuICBwcml2YXRlIGNsaWNrQWN0TmFtZSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ID0gW107XHJcbiAgICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkodGhpcy5ub2Rlcyk7XHJcbiAgICAgIHRoaXMuaW5pdFNldFNlbGVjdGVkVmFsdWVzKCk7XHJcbiAgICAgIHRoaXMuaW5pdE5vZGVDaGVja2JveCgpO1xyXG4gICAgICB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIHx8ICdJZCc7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLm1vZGUgPSB0aGlzLmRhdGEuTXVsdGlwbGUgPyBcIm11bHRpcGxlXCIgOiBcInNpbmdsZVwiO1xyXG5cclxuICAgICAgY29uc3QgaXNFeHBhbmRBbGxOb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuVHJlZXZpZXdFeHBhbmRBbGwgYXMgYW55LCB0aGlzLmdyb3VwKTtcclxuICAgICAgaWYgKGlzRXhwYW5kQWxsTm9kZXMpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxBZGROb2RlID8/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSA9IHRoaXMuZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlID8/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuaXNIaWRlQWxsUmVtb3ZlTm9kZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5zZXREZWZhdWx0RXhwYW5kYWJsZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkobm9kZXM6IGFueSkge1xyXG4gICAgaWYgKG5vZGVzICYmIEFycmF5LmlzQXJyYXkobm9kZXMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgIGlmICghdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LnNvbWUoeCA9PiB4LklkID09IG5vZGUuSWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkucHVzaChub2RlKTtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUuVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVBbGxOb2Rlc1dpdG91dEhpZXJhY2h5KG5vZGUuVmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG4gICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgdGhpcy5ub2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLlR5cGUgPT0gXCJ6dHJlZVwiKSB7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFsbE5vZGVzV2l0b3V0SGllcmFjaHkodGhpcy5ub2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgICB0aGlzLm5vZGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubm9kZXM7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZShkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmIChkYXRhLkl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBnZXRUZW1wbGF0ZUZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBkYXRhLkl0ZW1UZW1wbGF0ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWdldFRlbXBsYXRlRnVuYykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlRoZSAoXCIgKyBkYXRhLkl0ZW1UZW1wbGF0ZSArIFwiKSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIFZhbHVlIGNvbnRhaW5zOiBcIiwgZ2V0VGVtcGxhdGVGdW5jKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBnZXRUZW1wbGF0ZUZ1bmMoe1xyXG4gICAgICAgIGRhdGFJdGVtLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgZ3JvdXBcclxuICAgICAgfSBhcyBaVHJlZVRlbXBsYXRlUGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGRhdGFJdGVtKVxyXG4gICAgICAgIC5maWx0ZXIoZGF0YSA9PiB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvVHJlZUl0ZW1zKGRhdGFTZXQ6IGFueVtdKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJUaGlzIG1ldGhvZCBpcyB0byBiZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFpDb21wb25lbnRIZWxwZXIuY29udmVydFRvVHJlZUl0ZW1zKClcIik7XHJcblxyXG4gICAgY29uc3QgdG9UcmVlSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCB0cmVlSW5kZXg6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgcGVuZGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgZGF0YVNldC5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkLlBhcmVudElkKSB7XHJcbiAgICAgICAgdG9UcmVlSXRlbXMucHVzaChkKTtcclxuICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uVmFsdWUpIHtcclxuICAgICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGVuZGluZ0l0ZW1zLmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvVHJlZUl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldE5hbWU6IGJvb2xlYW4gfCBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5jbGlja0FjdE5hbWUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ0FkZE5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PbkFkZE5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdSZW1vdmVOb2RlJzpcclxuICAgICAgICAgIHRhcmdldE5hbWUgPSB0aGlzLmRhdGEuT25SZW1vdmVOb2RlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRhcmdldE5hbWUpIHtcclxuICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5Pbkl0ZW1DbGljaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWVfb25TZWxlY3Rpb25DaGFuZ2VcIixcclxuICAgICAgdGFyZ2V0OiB0YXJnZXROYW1lLFxyXG4gICAgICBkYXRhOiBldmVudC5kYXRhSXRlbSxcclxuICAgICAgZXZlbnQ6IGV2ZW50LmluZGV4XHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogQXJyYXk8YW55PiB7XHJcbiAgICBpZiAodGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5ICYmIHRoaXMuc2VsZWN0ZWRLZXlzICYmIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWxsTm9kZXNXaXRvdXRIaWVyYWNoeS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyh4W3RoaXMuZGF0YS5TZWxlY3RPcHRpb25zXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNlbGVjdGVkVmFsdWVzKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0U2V0U2VsZWN0ZWRWYWx1ZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhzZWxlY3RlZE5vZGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vcHVibGljIHNldFJvd0hlaWdodERvdWJsZSh2YWx1ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAvLyAgY29uc29sZS53YXJuKCdEZXByZWNhdGVkIC0gbm8gbG9uZGVyIG5lZWQgdG8gc2V0IHRoZSBoZWlnaHQnKTtcclxuICAvLyAgLy8gdGhpcy5kYXRhLmRvdWJsZUhlaWdodCA9IHZhbHVlO1xyXG4gIC8vfVxyXG5cclxuICAvLyNyZWdpb24gRXhwYW5kICYgQ29sbGFwc2VcclxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IChkYXRhSXRlbTogYW55LCBpbmRleDogc3RyaW5nKSA9PiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuaW5kZXhPZihpbmRleCkgPiAtMTtcclxuICAgIC8vIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZE5vZGUgPSAoZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgc2V0QXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIHRoaXMuZ2V0SXRlbXMoKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaE5vZGVJbmRleCh0aGlzLm5vZGVzLCB2YWx1ZSwgJycsIGZpZWxkKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbUluZGV4O1xyXG4gICAgaWYgKHNldEFzU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBpbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4QXJyID0gW107XHJcbiAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIGluZGV4cyA9IGluZGV4cy5jb25jYXQoXCJfXCIpLmNvbmNhdCh4KTtcclxuICAgICAgICBpbmRleEFyci5wdXNoKGluZGV4cy5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChpbmRleEFycik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VOb2RlID0gKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGNvbGxhcHNlUGFyZW50OiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1JbmRleCA9IFtdO1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoTm9kZUluZGV4KHRoaXMubm9kZXMsIHZhbHVlLCAnJywgZmllbGQpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtSW5kZXg7XHJcbiAgICBsZXQgaW5kZXhBcnIgPSBbXTtcclxuICAgIGlmIChjb2xsYXBzZVBhcmVudCkge1xyXG4gICAgICBpbmRleC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBhcnIgPSBpLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgbGV0IGluZGV4cyA9IFwiXCI7XHJcbiAgICAgICAgYXJyLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4QXJyID0gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIodiA9PiB7XHJcbiAgICAgIHJldHVybiAhaW5kZXhBcnIuaW5jbHVkZXModik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hOb2RlSW5kZXgobm9kZTogYW55LCB2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChkW2ZpZWxkXSA9PT0gTnVtYmVyKHZhbHVlKSB8fCBkW2ZpZWxkXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW1JbmRleCA9IHRoaXMuaXRlbUluZGV4LmNvbmNhdChrZXkgKyAnJyArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChkLlZhbHVlLCB2YWx1ZSwgaywgZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICBpZiAodGhpcy5ub2Rlcykge1xyXG4gICAgICB0aGlzLmV4cGFuZEFsbE5vZGUodGhpcy5ub2RlcywgJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxhcHNlQWxsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kQWxsTm9kZShub2RlOiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGtleSA9IGtleSArICdfJztcclxuICAgIH1cclxuICAgIG5vZGUuZm9yRWFjaCgoZDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC5WYWx1ZSkpIHtcclxuICAgICAgICBjb25zdCBrID0ga2V5ICsgJycgKyBpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KGspO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kQWxsTm9kZShkLlZhbHVlLCBrKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ29sbGFwc2Uobm9kZSkge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIoayA9PiBrICE9PSBub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFeHBhbmQobm9kZSkge1xyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5jb25jYXQobm9kZS5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdEV4cGFuZGFibGUoKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZERhdGFJZHMgPSB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHM7XHJcblxyXG4gICAgaWYgKGV4cGFuZGVkRGF0YUlkcykge1xyXG4gICAgICBjb25zdCBpZExpc3QgPSB0eXBlb2YgZXhwYW5kZWREYXRhSWRzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGV4cGFuZGVkRGF0YUlkcywgdGhpcy5ncm91cClcclxuICAgICAgICA6IGV4cGFuZGVkRGF0YUlkcztcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkTGlzdCkpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IGlkTGlzdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE5vZGUgSGFuZGxpbmdcclxuICBvbkVkaXROb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25FZGl0Tm9kZSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkVkaXROb2RlKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFkZE5vZGUoZXZlbnQ6IGFueSwgZGF0YUl0ZW06IGFueSwgZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKSB7XHJcbiAgICB0aGlzLmNsaWNrQWN0TmFtZSA9ICdBZGROb2RlJztcclxuICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gaWYgKHRoaXMuZGF0YS5PbkFkZE5vZGUpIHtcclxuICAgIC8vICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25BZGROb2RlKTtcclxuICAgIC8vICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAvLyAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgLy8gICAgIGNhbGxGdW5jKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgZXZlbnQuaW5kZXgpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ1JlbW92ZU5vZGUnO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlTm9kZURyb3AoZXZlbnQ6IFRyZWVJdGVtRHJvcEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkRyYWdnYWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRyb3BIYW5kbGVyID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICB0aGlzLmRhdGEuT25Ecm9wXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiBkcm9wSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZHJvcEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgZHJvcCBpZiBhdHRlbXB0aW5nIHRvIGFkZCB0byBmaWxlXHJcbiAgICAvLyBpZiAoaXNGaWxlKGV2ZW50LmRlc3RpbmF0aW9uSXRlbS5pdGVtLmRhdGFJdGVtLnRleHQpICYmIGV2ZW50LmRyb3BQb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk92ZXIpIHtcclxuICAgIC8vICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJhZ0VuZChldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc05vZGVEcm9wKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0l0ZW1zOiAnLCB0aGlzLml0ZW1zKTtcclxuICAgIGNvbnN0IHRhcmdldCA9IFtdO1xyXG4gICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQodGhpcy5ub2RlcywgdGFyZ2V0KTtcclxuICAgIC8vIHRoaXMuZGF0YVNldCA9IHRhcmdldDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRhcmdldCwgdGhpcy5ncm91cCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWUtb25UcmVlTm9kZURyYWdFbmRcIixcclxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25DaGFuZ2UsXHJcbiAgICAgIGRhdGE6IHRhcmdldFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDaGFuZ2VUb0RhdGFTZXQoc291cmNlOiBBcnJheTxhbnk+LCB0YXJnZXQ6IEFycmF5PGFueT4pIHtcclxuICAgIHNvdXJjZS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKTtcclxuICAgICAgICB0LlZhbHVlID0gW107XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQoZC5WYWx1ZSwgdC5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdCA9IE9iamVjdC5hc3NpZ24oe30sIGQpO1xyXG4gICAgICAgIHQuVmFsdWUgPSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUFkZE5vZGUoaXNIaWRkZW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLmRhdGEuaXNIaWRlQWxsQWRkTm9kZSA9IGlzSGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVSZW1vdmVOb2RlKGlzSGlkZGVuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kYXRhLmlzSGlkZUFsbFJlbW92ZU5vZGUgPSBpc0hpZGRlbjtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBTZWFyY2ggZmVhdHVyZSAtIGZpbHRlcmFibGU6IHRydWVcclxuICBwdWJsaWMgY2xlYXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgaWYgKHRoaXMub3JpZ2luYWxJdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmRlZXBDbG9uZSh0aGlzLml0ZW1zKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFpDb21wb25lbnRIZWxwZXIuZGVlcENsb25lKHRoaXMub3JpZ2luYWxJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5maWx0ZXJQcmVmaXgodGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXSA9IHRoaXMuc2VhcmNoKHRoaXMuaXRlbXMsIHZhbHVlKTtcclxuXHJcbiAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJQcmVmaXgodmFsdWVOYW1lOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSg2KTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU5hbWUuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlTmFtZS5zbGljZSgxMik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaChpdGVtczogYW55W10sIHRlcm06IHN0cmluZyk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb250YWlucyhpdGVtLk5hbWUsIHRlcm0pKSB7XHJcbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5WYWx1ZSAmJiBpdGVtLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuc2VhcmNoKGl0ZW0uVmFsdWUsIHRlcm0pO1xyXG5cclxuICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdmFyIGZpbHRlckl0ZW0gPSBpdGVtO1xyXG4gICAgICAgICAgZmlsdGVySXRlbS5WYWx1ZSA9IG5ld0l0ZW1zO1xyXG4gICAgICAgICAgYWNjLnB1c2goZmlsdGVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoKHRlcm0gfHwgXCJcIikudG9Mb3dlckNhc2UoKSkgPj0gMDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBDaGVja2JveFxyXG4gIHByaXZhdGUgaW5pdE5vZGVDaGVja2JveCgpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbikge1xyXG4gICAgICBjb25zdCBjaGVja2JveENvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENoZWNrYm94Q29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICAgaWYgKGNoZWNrYm94Q29uZmlndXJhdGlvbi5TZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjaGVja2JveENvbmZpZ3VyYXRpb24uU2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2hlY2tlZFZhbHVlcyhjaGVja2VkTm9kZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hlY2tib3hDb25maWd1cmF0aW9uLkRpc2FibGVkVmFsdWVzKSB7XHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWROb2RlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBjaGVja2JveENvbmZpZ3VyYXRpb24uRGlzYWJsZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWRDaGVja0JveChkaXNhYmxlZE5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGVja2JveENvbmZpZ3VyYXRpb24oKTogVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24ge1xyXG4gICAgbGV0IGNoZWNrYm94Q29uZmlndXJhdGlvbjogVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIC8vIElmIENoZWNrYm94Q29uZmlndXJhdGlvbiBpcyBhIHN0cmluZywgcmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBncm91cCBcclxuICAgICAgY2hlY2tib3hDb25maWd1cmF0aW9uID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbiwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gSWYgQ2hlY2tib3hDb25maWd1cmF0aW9uIGlzIGFuIG9iamVjdCwgdXNlIGl0IGRpcmVjdGx5XHJcbiAgICAgIGNoZWNrYm94Q29uZmlndXJhdGlvbiA9IHRoaXMuZGF0YS5UcmVlVmlld0NoZWNrYm94Q29uZmlndXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hlY2tib3hDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZXMoZGF0YTogYW55LCB0YXJnZXRBcnJheTogYW55W10sIGRlZmF1bHRWYWx1ZTogYW55W10gPSBbXSkge1xyXG4gICAgdGFyZ2V0QXJyYXkgPSBkYXRhID8gKEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdKSA6IGRlZmF1bHRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDaGVja2VkVmFsdWVzKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZXMoZGF0YSwgdGhpcy5jaGVja2VkS2V5cyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRDaGVja0JveChkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0VmFsdWVzKGRhdGEsIHRoaXMuZGlzYWJsZWRDaGVja0JveEtleXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjaGVja2FibGVTZXR0aW5ncygpOiBDaGVja2FibGVTZXR0aW5ncyB7XHJcbiAgICBpZiAoISF0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgY29uc3QgY2hlY2tib3hDb25maWd1cmF0aW9uID0gdGhpcy5nZXRDaGVja2JveENvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgY29uc3QgY2hlY2thYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBjaGVja1BhcmVudHM6ICFjaGVja2JveENvbmZpZ3VyYXRpb24uRGlzYWJsZVBhcmVudEF1dG9TZWxlY3RPbkFsbENoaWxkcmVuLFxyXG4gICAgICAgIGNoZWNrQ2hpbGRyZW46ICFjaGVja2JveENvbmZpZ3VyYXRpb24uRGlzYWJsZVBhcmVudFNlbGVjdHNBbGxDaGlsZHJlbixcclxuICAgICAgICBjaGVja0Rpc2FibGVkQ2hpbGRyZW46IGNoZWNrYm94Q29uZmlndXJhdGlvbi5FbmFibGVEaXNhYmxlZENoaWxkcmVuU2VsZWN0aW9uLFxyXG4gICAgICAgIG1vZGU6IGNoZWNrYm94Q29uZmlndXJhdGlvbi5TZWxlY3RNdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnc2luZ2xlJyxcclxuICAgICAgICBjaGVja09uQ2xpY2s6IGNoZWNrYm94Q29uZmlndXJhdGlvbi5Ub2dnbGVDaGVja2JveE9uTm9kZUNsaWNrLFxyXG4gICAgICB9IGFzIENoZWNrYWJsZVNldHRpbmdzO1xyXG5cclxuICAgICAgcmV0dXJuIGNoZWNrYWJsZVNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hlY2tlZENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoISF0aGlzLmRhdGEuVHJlZVZpZXdDaGVja2JveENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgY29uc3QgY2hlY2tib3hDb25maWd1cmF0aW9uID0gdGhpcy5nZXRDaGVja2JveENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBjaGVja2JveENvbmZpZ3VyYXRpb24uT25DaGFuZ2U7XHJcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IHRoaXMuY2hlY2tlZEtleXMuaW5kZXhPZihldmVudC5pdGVtLmRhdGFJdGVtLklkKSA+IC0xO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwienRyZWVfT25DaGVja2JveENoYW5nZVwiLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0TmFtZSxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IGNoZWNrZWRWYWx1ZTogaXNDaGVja2VkLCBzZWxlY3RlZEl0ZW06IGV2ZW50Lml0ZW0uZGF0YUl0ZW0sIGZpZWxkOiB0aGlzLmRhdGEsIGNvbXA6IHRoaXMgfVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2hlY2tlZFZhbHVlcygpOiBBcnJheTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkgJiYgdGhpcy5jaGVja2VkS2V5cyAmJiB0aGlzLmFsbE5vZGVzV2l0b3V0SGllcmFjaHkubGVuZ3RoID4gMCAmJiB0aGlzLmNoZWNrZWRLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc0tleSA9IHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zO1xyXG4gICAgICByZXR1cm4gdGhpcy5hbGxOb2Rlc1dpdG91dEhpZXJhY2h5LmZpbHRlcihub2RlID0+IHRoaXMuY2hlY2tlZEtleXMuaW5jbHVkZXMobm9kZVtzZWxlY3RPcHRpb25zS2V5XSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgLy8gQ3VzdG9tIGxvZ2ljIGhhbmRsaW5nIEluZGV0ZXJtaW5hdGUgc3RhdGUgd2hlbiBjdXN0b20gZGF0YSBpdGVtIHByb3BlcnR5IGlzIHBlcnNpc3RlZFxyXG4gIHB1YmxpYyBpc0NoZWNrZWQgPSAoZGF0YUl0ZW06IGFueSwgaW5kZXg6IHN0cmluZyk6IENoZWNrZWRTdGF0ZSA9PiB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlRyZWVWaWV3Q2hlY2tib3hDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zSXRlbShkYXRhSXRlbSkpIHtcclxuICAgICAgICByZXR1cm4gXCJjaGVja2VkXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzSW5kZXRlcm1pbmF0ZShkYXRhSXRlbS5WYWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gXCJpbmRldGVybWluYXRlXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnNJdGVtKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZEtleXMuaW5kZXhPZihpdGVtW3RoaXMuZGF0YS5TZWxlY3RPcHRpb25zXSkgPiAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbmRldGVybWluYXRlKGl0ZW1zOiBhbnlbXSA9IFtdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaWR4ID0gMDtcclxuICAgIGxldCBpdGVtO1xyXG5cclxuICAgIHdoaWxlICgoaXRlbSA9IGl0ZW1zW2lkeF0pKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzSW5kZXRlcm1pbmF0ZShpdGVtLlZhbHVlKSB8fCB0aGlzLmNvbnRhaW5zSXRlbShpdGVtKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZHggKz0gMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIiBjbGFzcz1cImUxdGFnLXN0eWxlXCJcclxuICAgICAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiPlxyXG4gIDxrZW5kby10cmVldmlldyBbbm9kZXNdPVwiZ2V0SXRlbXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb1RyZWVWaWV3U2VsZWN0YWJsZV09XCJzZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3RHJhZ0FuZERyb3BcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wRWRpdGluZ1xyXG4gICAgICAgICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbGxhcHNlKT1cImhhbmRsZUNvbGxhcHNlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZXhwYW5kKT1cImhhbmRsZUV4cGFuZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcm9wKT1cImhhbmRsZU5vZGVEcm9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAobm9kZURyYWdFbmQpPVwiaGFuZGxlTm9kZURyYWdFbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRLZXlzKV09XCJzZWxlY3RlZEtleXNcIlxyXG4gICAgICAgICAgICAgICAgICBrZW5kb1RyZWVWaWV3SGllcmFyY2h5QmluZGluZ1xyXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbkZpZWxkPVwiVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICB0ZXh0RmllbGQ9XCJOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdEJ5XT1cImRhdGEuU2VsZWN0T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImRhdGEuRmlsdGVyYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9UcmVlVmlld0NoZWNrYWJsZV09XCJjaGVja2FibGVTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja0J5XT1cImRhdGEuU2VsZWN0T3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoY2hlY2tlZEtleXMpXT1cImNoZWNrZWRLZXlzXCJcclxuICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25DaGVja2VkQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9UcmVlVmlld0Rpc2FibGVdPVwiZGF0YS5TZWxlY3RPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgW2lzQ2hlY2tlZF09XCJpc0NoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICBbKGRpc2FibGVkS2V5cyldPVwiZGlzYWJsZWRDaGVja0JveEtleXNcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZVBhcmVudE5vZGVzT25seV09XCJkYXRhLkRpc2FibGVQYXJlbnROb2Rlc09ubHlcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVWaWV3Tm9kZVRlbXBsYXRlIGxldC1kYXRhSXRlbSAjbm9kZXRlbXBsYXRlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJlZS1jb250ZW50LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiISFkYXRhLk9uQWRkTm9kZSAmJiAhZGF0YS5pc0hpZGVBbGxBZGROb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGROb2RlKCRldmVudCwgZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ6b29tOiAwLjY7IG1hcmdpbjogMCAwIDAgMnB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISFkYXRhSXRlbS5PbkFkZE5vZGVWaXNpYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGUyXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiISFkYXRhLk9uUmVtb3ZlTm9kZSAmJiAhZGF0YS5pc0hpZGVBbGxSZW1vdmVOb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmVOb2RlKCRldmVudCwgZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ6b29tOiAwLjY7IG1hcmdpbjogMCAwIDAgMTBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISFkYXRhSXRlbS5PblJlbW92ZU5vZGVWaXNpYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGUzXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCInbWludXMnXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1zZXBlcmF0b3IgZTF0YWctc3R5bGU3XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU3XCI+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBpY29uIG9mIGRhdGFJdGVtLkljb25MaXN0XCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cImUxdGFnLXN0eWxlNSBsZWZ0LWljb25cIiBbaWNvbl09XCJpY29uXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8aW9uLWxhYmVsIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNFwiIGNsYXNzPVwiZTF0YWctc3R5bGU0XCIgW25nQ2xhc3NdPVwiZGF0YUl0ZW0uY2xhc3NcIj5cclxuICAgICAgICAgIDxkaXYgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIiBbaW5uZXJIVE1MXT1cImdldFRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCkgfCBodG1sU2FuaXRpemVcIj48L2Rpdj5cclxuICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tdHJlZXZpZXc+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -11038,6 +11038,18 @@ class ZtreeComponent extends DataListingFieldBase {
|
|
|
11038
11038
|
this.collapseAll = () => {
|
|
11039
11039
|
this.state.expandedkeys = [];
|
|
11040
11040
|
};
|
|
11041
|
+
// Custom logic handling Indeterminate state when custom data item property is persisted
|
|
11042
|
+
this.isChecked = (dataItem, index) => {
|
|
11043
|
+
if (this.data.TreeViewCheckboxConfiguration) {
|
|
11044
|
+
if (this.containsItem(dataItem)) {
|
|
11045
|
+
return "checked";
|
|
11046
|
+
}
|
|
11047
|
+
if (this.isIndeterminate(dataItem.Value)) {
|
|
11048
|
+
return "indeterminate";
|
|
11049
|
+
}
|
|
11050
|
+
return "none";
|
|
11051
|
+
}
|
|
11052
|
+
};
|
|
11041
11053
|
}
|
|
11042
11054
|
ngOnInit() {
|
|
11043
11055
|
super.initComponent().subscribe(() => {
|
|
@@ -11439,17 +11451,6 @@ class ZtreeComponent extends DataListingFieldBase {
|
|
|
11439
11451
|
}
|
|
11440
11452
|
return [];
|
|
11441
11453
|
}
|
|
11442
|
-
isChecked(dataItem, index) {
|
|
11443
|
-
if (this.data.TreeViewCheckboxConfiguration) {
|
|
11444
|
-
if (this.containsItem(dataItem)) {
|
|
11445
|
-
return "checked";
|
|
11446
|
-
}
|
|
11447
|
-
if (this.isIndeterminate(dataItem.Value)) {
|
|
11448
|
-
return "indeterminate";
|
|
11449
|
-
}
|
|
11450
|
-
return "none";
|
|
11451
|
-
}
|
|
11452
|
-
}
|
|
11453
11454
|
containsItem(item) {
|
|
11454
11455
|
return this.checkedKeys.indexOf(item[this.data.SelectOptions]) > -1;
|
|
11455
11456
|
}
|