qms-angular 2.0.14 → 2.0.15
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.
|
@@ -33,6 +33,7 @@ export class QMSNavDrawerComponent {
|
|
|
33
33
|
this.guidHelper = {
|
|
34
34
|
empty: '00000000-0000-0000-0000-000000000000'
|
|
35
35
|
};
|
|
36
|
+
this.activeRootId = null;
|
|
36
37
|
this.hasChild = (_, node) => node.expandable;
|
|
37
38
|
this.iterableDiffer = iterableDiffers.find([]).create(null);
|
|
38
39
|
}
|
|
@@ -116,12 +117,55 @@ export class QMSNavDrawerComponent {
|
|
|
116
117
|
}
|
|
117
118
|
});
|
|
118
119
|
}
|
|
120
|
+
// --- ADD THIS LOGIC ---
|
|
121
|
+
// Set the initial active root based on the opened nodes.
|
|
122
|
+
const activeNodeId = this.openNodes[this.openNodes.length - 1];
|
|
123
|
+
const activeNode = this.treeControl.dataNodes.find(n => n.id === activeNodeId);
|
|
124
|
+
if (activeNode) {
|
|
125
|
+
const root = this._findRootOfNode(activeNode);
|
|
126
|
+
if (root) {
|
|
127
|
+
this.activeRootId = root.id;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ----------------------
|
|
119
131
|
this._activeNode();
|
|
120
132
|
this.cdRef.detectChanges();
|
|
121
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Traces back from a given node to find its root-level (level 0) ancestor.
|
|
136
|
+
*/
|
|
137
|
+
_findRootOfNode(node) {
|
|
138
|
+
const allNodes = this.treeControl.dataNodes;
|
|
139
|
+
const nodeIndex = allNodes.findIndex(n => n.id === node.id && n.parentId === node.parentId);
|
|
140
|
+
if (nodeIndex < 0) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
if (node.level === 0) {
|
|
144
|
+
return node;
|
|
145
|
+
}
|
|
146
|
+
let currentLevel = node.level - 1;
|
|
147
|
+
for (let i = nodeIndex - 1; i >= 0; i--) {
|
|
148
|
+
if (allNodes[i].level === currentLevel) {
|
|
149
|
+
if (currentLevel === 0) {
|
|
150
|
+
return allNodes[i]; // Found the root
|
|
151
|
+
}
|
|
152
|
+
currentLevel--; // Look for the next parent up
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return null; // Should not happen in a well-formed tree
|
|
156
|
+
}
|
|
122
157
|
onClickNode(node) {
|
|
158
|
+
const rootOfClickedNode = this._findRootOfNode(node);
|
|
159
|
+
// --- CORE LOGIC ---
|
|
160
|
+
// Only collapse the tree if the new node belongs to a different root branch.
|
|
161
|
+
if (rootOfClickedNode && this.activeRootId && this.activeRootId !== rootOfClickedNode.id) {
|
|
162
|
+
this.treeControl.collapseAll();
|
|
163
|
+
}
|
|
164
|
+
// ------------------
|
|
165
|
+
if (rootOfClickedNode) {
|
|
166
|
+
this.activeRootId = rootOfClickedNode.id;
|
|
167
|
+
}
|
|
123
168
|
this.activeNode = this.getActiveNode(node.id, node.parentId);
|
|
124
|
-
this.treeControl.collapseAll();
|
|
125
169
|
this.onClickNodeEvent.emit(node);
|
|
126
170
|
this.scrollIntoNode$.next(this.activeNode);
|
|
127
171
|
}
|
|
@@ -221,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
221
265
|
}], moveLocationEvent: [{
|
|
222
266
|
type: Output
|
|
223
267
|
}] } });
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLW5hdi1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3Ftcy1uYXYtZHJhd2VyL3Ftcy1uYXYtZHJhd2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9xbXMtbmF2LWRyYXdlci9xbXMtbmF2LWRyYXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBa0UsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNsTSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFVM0MsTUFBTSxPQUFPLHFCQUFxQjtJQTRCaEMsWUFBbUIsbUJBQXlDLEVBQVUsS0FBd0IsRUFBVSxlQUFnQztRQUFySCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXNCO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUExQi9ILG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0Qsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzNCLGFBQVEsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFLeEIsb0JBQWUsR0FB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ZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgSXRlcmFibGVDaGFuZ2VzLCBJdGVyYWJsZURpZmZlcnMsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRmxhdE5vZGVOYXZEcmF3ZXIsIFRyZWVOb2RlTmF2RHJhd2VyIH0gZnJvbSAnLi9tb2RlbHMvcW1zLW5hdi1kcmF3ZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNUcmVlR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Ftcy10cmVlLWdsb2JhbC5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtbmF2LWRyYXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Ftcy1uYXYtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9xbXMtbmF2LWRyYXdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgUU1TTmF2RHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIHJlYWRvbmx5IHNjcm9sbEludG9Ob2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgQElucHV0KCkgdHJlZURhdGE6IEFycmF5PFRyZWVOb2RlTmF2RHJhd2VyPiA9IFtdO1xyXG4gIEBJbnB1dCgpIG9wZW5Ob2Rlczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBmYXZvcml0ZUFjdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIGFkZExvY2F0aW9uQWN0aW9uOiBhbnk7XHJcbiAgQElucHV0KCkgbW92ZUxvY2F0aW9uTW9kZTogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgbm9kZUV4cGFuZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DbGlja05vZGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUZhdm9yaXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhZGRMb2NhdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbW92ZUxvY2F0aW9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgdHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEZsYXROb2RlTmF2RHJhd2VyPihub2RlID0+IG5vZGUubGV2ZWwsIG5vZGUgPT4gbm9kZS5leHBhbmRhYmxlKTtcclxuICB0cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIodGhpcy5fdHJhbnNmb3JtZXIsIG5vZGUgPT4gbm9kZS5sZXZlbCwgbm9kZSA9PiBub2RlLmV4cGFuZGFibGUsIG5vZGUgPT4gbm9kZS5jaGlsZHJlbik7XHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuICBleHBhbmRpbmdOb2RlczogRmxhdE5vZGVOYXZEcmF3ZXJbXSA9IFtdO1xyXG4gIGFjdGl2ZU5vZGU6IHN0cmluZztcclxuICBndWlkSGVscGVyID0ge1xyXG4gICAgZW1wdHk6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnXHJcbiAgfTtcclxuXHJcbiAgaXRlcmFibGVEaWZmZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBxbXNOYXZEcmF3ZXJTZXJ2aWNlOiBRTVNUcmVlR2xvYmFsU2VydmljZSwgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMpIHtcclxuICAgIHRoaXMuaXRlcmFibGVEaWZmZXIgPSBpdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgX3RyYW5zZm9ybWVyKG5vZGU6IFRyZWVOb2RlTmF2RHJhd2VyLCBsZXZlbDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHBhbmRhYmxlOiAoISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSxcclxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICBsZXZlbCxcclxuICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICBpdGVtSWNvbjogbm9kZS5pdGVtSWNvbixcclxuICAgICAgaXRlbU1hdEljb246IG5vZGUuaXRlbU1hdEljb24sXHJcbiAgICAgIGl0ZW1JY29uU3ZnOiBub2RlLml0ZW1JY29uU3ZnLFxyXG4gICAgICBpc0ZpbGU6IG5vZGUuaXNGaWxlLFxyXG4gICAgICBtYXJrZWRHZXRDaGlsZHJlbjogbm9kZS5tYXJrZWRHZXRDaGlsZHJlbixcclxuICAgICAgaXNGYXZvcml0ZTogbm9kZS5pc0Zhdm9yaXRlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBGbGF0Tm9kZU5hdkRyYXdlcikgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblxyXG4gICAgaWYgKGNoYW5nZXMudHJlZURhdGEgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy50cmVlRGF0YS5jdXJyZW50VmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzLnRyZWVEYXRhLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy50cmVlRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5vcGVuTm9kZXMgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy5vcGVuTm9kZXMuY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy5vcGVuTm9kZXMucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5maW5kQW5kRXhwYW5kTm9kZXMoKTtcclxuICAgICAgdGhpcy5fYWN0aXZlTm9kZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnFtc05hdkRyYXdlclNlcnZpY2UuZ2V0SXRlbXNDaGlsZHJlbiQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgbGV0IG5ld05vZGVzQ2hpbGRyZW4gPSBbXTtcclxuXHJcbiAgICAgICAgcmVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZURhdGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0uaWQgPT09IHguaWQgJiYgaXRlbS5wYXJlbnRJZCA9PT0geC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIG5ld05vZGVzQ2hpbGRyZW4ucHVzaCh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQWRkIGNoaWxkcmVuIHRvIHRyZWVEYXRhXHJcbiAgICAgICAgaWYgKG5ld05vZGVzQ2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVEYXRhID0gWy4uLnRoaXMudHJlZURhdGEsIC4uLm5ld05vZGVzQ2hpbGRyZW5dO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmNvbnZlcnRUcmVlRGF0YSh0aGlzLnRyZWVEYXRhKTtcclxuICAgICAgICAgIHRoaXMuZmluZEFuZEV4cGFuZE5vZGVzKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmRJbmRleCh4ID0+IHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQgJiYgeC5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpbmRleF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMuc2Nyb2xsSW50b05vZGUkLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXRyZWUtbm9kZS5hY3RpdmUnKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjAwKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWN0aXZlTm9kZSgpIHtcclxuICAgIGNvbnN0IGN1cnJOb2RlID0gdGhpcy5vcGVuTm9kZXNbdGhpcy5vcGVuTm9kZXMubGVuZ3RoIC0gMV07XHJcbiAgICBjb25zdCBpZHhQYXJlbnQgPSB0aGlzLm9wZW5Ob2Rlcy5sZW5ndGggPj0gMiA/IHRoaXMub3Blbk5vZGVzLmxlbmd0aCAtIDIgOiAnJztcclxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBpZHhQYXJlbnQgIT09ICcnID8gdGhpcy5vcGVuTm9kZXNbaWR4UGFyZW50XSA6ICcnO1xyXG4gICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5nZXRBY3RpdmVOb2RlKGN1cnJOb2RlLCBwYXJlbnROb2RlKTtcclxuICAgIHRoaXMuc2Nyb2xsSW50b05vZGUkLm5leHQodGhpcy5hY3RpdmVOb2RlKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZU5vZGUoaWQsIHBhcmVudElkKSB7XHJcbiAgICBjb25zdCBfaWQgPSBpZCA/IGlkIDogJyc7XHJcbiAgICBjb25zdCBfcGFyZW50SWQgPSBwYXJlbnRJZCAmJiAocGFyZW50SWQgIT09IHRoaXMuZ3VpZEhlbHBlci5lbXB0eSkgPyBwYXJlbnRJZCA6ICcnO1xyXG4gICAgcmV0dXJuIGAke19pZH0tJHtfcGFyZW50SWR9YDtcclxuICB9XHJcblxyXG4gIGZpbmRBbmRFeHBhbmROb2RlcyhleHBhbmROZXdDaGlsZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMub3Blbk5vZGVzLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXS5pZCA9PT0gZWwpIHtcclxuICAgICAgICAgIHRoaXMuZXhwYW5kaW5nTm9kZXMucHVzaCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hY3RpdmVOb2RlKCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tOb2RlKG5vZGU6IEZsYXROb2RlTmF2RHJhd2VyKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU5vZGUgPSB0aGlzLmdldEFjdGl2ZU5vZGUobm9kZS5pZCwgbm9kZS5wYXJlbnRJZCk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlQWxsKCk7XHJcblxyXG4gICAgdGhpcy5vbkNsaWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgICB0aGlzLnNjcm9sbEludG9Ob2RlJC5uZXh0KHRoaXMuYWN0aXZlTm9kZSk7XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZE5vZGUobm9kZTogRmxhdE5vZGVOYXZEcmF3ZXIpIHtcclxuICAgIHRoaXMub3Blbk5vZGVzID0gW107XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKG5vZGUpO1xyXG4gICAgICB0aGlzLl9hZGRFeHBhbmRpbmdOb2RlKG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5jb2xsYXBzZShub2RlKTtcclxuICAgICAgdGhpcy5fcmVtb3ZlRXhwYW5kaW5nTm9kZXMobm9kZS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgIG5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmICh4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkICYmIHguaWQgPT09IG5vZGUuaWQpIHtcclxuICAgICAgICAgIHgubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubm9kZUV4cGFuZEV2ZW50LmVtaXQoeyBub2RlLCBpc0V4cGFuZDogdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmF2b3JpdGUobm9kZTogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBub2RlLmlzRmF2b3JpdGUgPSAhbm9kZS5pc0Zhdm9yaXRlO1xyXG4gICAgdGhpcy51cGRhdGVGYXZvcml0ZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBhZGRMb2NhdGlvbihub2RlOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuYWRkTG9jYXRpb25FdmVudC5lbWl0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgbW92ZUxvY2F0aW9uKG5vZGU6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5tb3ZlTG9jYXRpb25FdmVudC5lbWl0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkRXhwYW5kaW5nTm9kZShub2RlOiBGbGF0Tm9kZU5hdkRyYXdlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZGluZ05vZGVzLnNvbWUoeCA9PiB4LmlkID09PSBub2RlLmlkKSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVFeHBhbmRpbmdOb2Rlcyhub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRpbmdOb2RlcyA9IHRoaXMuZXhwYW5kaW5nTm9kZXMuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZUlkKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRyZWVEYXRhKGxpc3QpIHtcclxuICAgIGxldCBtYXAgPSB7fSwgbm9kZSwgcm9vdHMgPSBbXSwgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIG1hcFtgJHtsaXN0W2ldLmlkfS0ke2xpc3RbaV0ucGFyZW50SWR9YF0gPSBpIC8vIGluaXRpYWxpemUgdGhlIG1hcFxyXG4gICAgICBsaXN0W2ldLmNoaWxkcmVuID0gW107IC8vIGluaXRpYWxpemUgdGhlIGNoaWxkcmVuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIG5vZGUgPSBsaXN0W2ldO1xyXG4gICAgICBjb25zdCBzdHJLZXkgPSBgJHtsaXN0W2ldLmlkfS0ke2xpc3RbaV0ucGFyZW50SWR9YDtcclxuXHJcbiAgICAgIGlmIChub2RlLnBhcmVudElkICYmIChub2RlLnBhcmVudElkICE9PSB0aGlzLmd1aWRIZWxwZXIuZW1wdHkpICYmIGxpc3RbbWFwW3N0cktleV1dKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbGlzdC5maWx0ZXIoeCA9PiB4LmlkID09PSBub2RlLnBhcmVudElkICYmICF4LmlzRmlsZSlbMF1cclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJvb3RzLnB1c2gobm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvb3RzO1xyXG4gIH1cclxuXHJcbn0iLCI8bWF0LXRyZWUgY2xhc3M9XCJxbXMtbmF2LWRyYXdlci1jb250YWluZXJcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XHJcbiAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XHJcbiAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZSBtYXRUcmVlTm9kZVBhZGRpbmcgW25nQ2xhc3NdPVwie1xyXG4gICAgICBhY3RpdmU6IGFjdGl2ZU5vZGUgPT09IGdldEFjdGl2ZU5vZGUobm9kZS5pZCwgbm9kZS5wYXJlbnRJZClcclxuICAgIH1cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICA8YnV0dG9uIGFyaWEtbGFiZWw9XCJkaXNhYmxlZFwiIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD48L2J1dHRvbj5cclxuICAgICAgPGltZyAqbmdJZj1cIm5vZGUuaXRlbUljb25TdmdcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHR5cGUtaWNvbiBjdXJzb3ItcG9pbnRlclwiIFtzcmNdPVwibm9kZS5pdGVtSWNvblN2Z1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tOb2RlKG5vZGUpXCIgYWx0PVwiSW1hZ2UgaWNvblwiIC8+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pdGVtSWNvblwiIFtjbGFzc109XCJub2RlLml0ZW1JY29uXCIgW3Ftc1RyYW5zZm9ybUljb25dPVwibm9kZS5pdGVtSWNvblwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCB0eXBlLWljb24gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25DbGlja05vZGUobm9kZSlcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pdGVtTWF0SWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgdHlwZS1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAoY2xpY2spPVwib25DbGlja05vZGUobm9kZSlcIj57e1xyXG4gICAgICAgIG5vZGUuaXRlbU1hdEljb24gfX1cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW5hbWUgY3Vyc29yLXBvaW50ZXIgbXgtMlwiIChjbGljayk9XCJvbkNsaWNrTm9kZShub2RlKVwiPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vdmVMb2NhdGlvbk1vZGVcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFjdGlvblwiIGFyaWEtbGFiZWw9XCJNb3ZlIGxvY2F0aW9uXCIgKGNsaWNrKT1cIm1vdmVMb2NhdGlvbihub2RlLCAkZXZlbnQpXCIgcW1zLWJ0bi1pY29uXHJcbiAgICAgICAgICBjb2xvcj1cImxpZ2h0XCIgcW1zLXRvb2wtdGlwPVwie3ttb3ZlTG9jYXRpb25Nb2RlLnRvb2x0aXB9fVwiIG1vZGU9XCJkYXJrXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+XHJcbiAgICAgICAgICAgIHN3YXBfdmVydFxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmYXZvcml0ZUFjdGlvblwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYWN0aW9uXCIgYXJpYS1sYWJlbD1cIkFkZCBvciByZW1vdmUgZmF2b3JpdGVcIiAoY2xpY2spPVwidXBkYXRlRmF2b3JpdGUobm9kZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiXHJcbiAgICAgICAgICBxbXMtdG9vbC10aXA9XCJ7e25vZGUuaXNGYXZvcml0ZSA/IGZhdm9yaXRlQWN0aW9uLnRvb2x0aXBSZW1vdmVGYXZvcml0ZSA6IGZhdm9yaXRlQWN0aW9uLnRvb2x0aXBBZGRGYXZvcml0ZX19XCJcclxuICAgICAgICAgIG1vZGU9XCJkYXJrXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtuZ0NsYXNzXT1cInsncHJpbWFyeSc6IG5vZGUuaXNGYXZvcml0ZX1cIj5cclxuICAgICAgICAgICAge3tub2RlLmlzRmF2b3JpdGUgPyAnc3RhcicgOiAnc3Rhcl9vdXRsaW5lJyB9fVxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkTG9jYXRpb25BY3Rpb25cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFjdGlvblwiIGFyaWEtbGFiZWw9XCJBZGQgbG9jYXRpb25cIiAoY2xpY2spPVwiYWRkTG9jYXRpb24obm9kZSwgJGV2ZW50KVwiIHFtcy1idG4taWNvblxyXG4gICAgICAgICAgY29sb3I9XCJsaWdodFwiIHFtcy10b29sLXRpcD1cInt7YWRkTG9jYXRpb25BY3Rpb24udG9vbHRpcEFkZExvY2F0aW9ufX1cIiBtb2RlPVwiZGFya1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgYWRkXHJcbiAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvbWF0LXRyZWUtbm9kZT5cclxuICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cclxuICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIiBtYXRUcmVlTm9kZVBhZGRpbmcgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnZXhwYW5kLW5vZGUnOiB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpLFxyXG4gICAgICAnY29sbGFwc2Utbm9kZSc6ICF0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpLFxyXG4gICAgICBhY3RpdmU6IGFjdGl2ZU5vZGUgPT09IGdldEFjdGl2ZU5vZGUobm9kZS5pZCwgbm9kZS5wYXJlbnRJZClcclxuICAgIH1cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiVG9nZ2xlIGV4cGFuZFwiIChjbGljayk9XCJvbkV4cGFuZE5vZGUobm9kZSlcIiBtYXRUcmVlTm9kZVRvZ2dsZT5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICB7eyB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gXCJleHBhbmRfbW9yZVwiIDogXCJjaGV2cm9uX3JpZ2h0XCIgfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxpbWcgKm5nSWY9XCJub2RlLml0ZW1JY29uU3ZnXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyB0eXBlLWljb24gY3Vyc29yLXBvaW50ZXJcIiBbc3JjXT1cIm5vZGUuaXRlbUljb25TdmdcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrTm9kZShub2RlKVwiIGFsdD1cIkltYWdlIGljb25cIiAvPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIm5vZGUuaXRlbUljb25cIiBbY2xhc3NdPVwibm9kZS5pdGVtSWNvblwiIFtxbXNUcmFuc2Zvcm1JY29uXT1cIm5vZGUuaXRlbUljb25cIlxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgdHlwZS1pY29uIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uQ2xpY2tOb2RlKG5vZGUpXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIm5vZGUuaXRlbU1hdEljb25cIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHR5cGUtaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tOb2RlKG5vZGUpXCI+e3tcclxuICAgICAgICBub2RlLml0ZW1NYXRJY29uIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1uYW1lIGN1cnNvci1wb2ludGVyIG14LTJcIiAoY2xpY2spPVwib25DbGlja05vZGUobm9kZSlcIj57eyBub2RlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb3ZlTG9jYXRpb25Nb2RlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hY3Rpb25cIiBhcmlhLWxhYmVsPVwiTW92ZSBsb2NhdGlvblwiIChjbGljayk9XCJtb3ZlTG9jYXRpb24obm9kZSwgJGV2ZW50KVwiIHFtcy1idG4taWNvblxyXG4gICAgICAgICAgY29sb3I9XCJsaWdodFwiIHFtcy10b29sLXRpcD1cInt7bW92ZUxvY2F0aW9uTW9kZS50b29sdGlwfX1cIiBtb2RlPVwiZGFya1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPlxyXG4gICAgICAgICAgICBzd2FwX3ZlcnRcclxuICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmF2b3JpdGVBY3Rpb25cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFjdGlvblwiIGFyaWEtbGFiZWw9XCJBZGQgb3IgcmVtb3ZlIGZhdm9yaXRlXCIgKGNsaWNrKT1cInVwZGF0ZUZhdm9yaXRlKG5vZGUsICRldmVudClcIlxyXG4gICAgICAgICAgcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgcW1zLXRvb2wtdGlwPVwie3tub2RlLmlzRmF2b3JpdGUgPyBmYXZvcml0ZUFjdGlvbi50b29sdGlwUmVtb3ZlRmF2b3JpdGUgOiBmYXZvcml0ZUFjdGlvbi50b29sdGlwQWRkRmF2b3JpdGV9fVwiXHJcbiAgICAgICAgICBtb2RlPVwiZGFya1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBbbmdDbGFzc109XCJ7J3ByaW1hcnknOiBub2RlLmlzRmF2b3JpdGV9XCI+XHJcbiAgICAgICAgICAgIHt7bm9kZS5pc0Zhdm9yaXRlID8gJ3N0YXInIDogJ3N0YXJfb3V0bGluZScgfX1cclxuICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkZExvY2F0aW9uQWN0aW9uXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hY3Rpb25cIiBhcmlhLWxhYmVsPVwiQWRkIGxvY2F0aW9uXCIgKGNsaWNrKT1cImFkZExvY2F0aW9uKG5vZGUsICRldmVudClcIiBxbXMtYnRuLWljb25cclxuICAgICAgICAgIGNvbG9yPVwibGlnaHRcIiBxbXMtdG9vbC10aXA9XCJ7e2FkZExvY2F0aW9uQWN0aW9uLnRvb2x0aXBBZGRMb2NhdGlvbn19XCIgbW9kZT1cImRhcmtcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgIGFkZFxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC10cmVlLW5vZGU+XHJcbjwvbWF0LXRyZWU+Il19
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLW5hdi1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3Ftcy1uYXYtZHJhd2VyL3Ftcy1uYXYtZHJhd2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9xbXMtbmF2LWRyYXdlci9xbXMtbmF2LWRyYXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBa0UsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNsTSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFVM0MsTUFBTSxPQUFPLHFCQUFxQjtJQTZCaEMsWUFBbUIsbUJBQXlDLEVBQVUsS0FBd0IsRUFBVSxlQUFnQztRQUFySCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXNCO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUEzQi9ILG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0Qsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzNCLGFBQVEsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFLeEIsb0JBQWUsR0FB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QTtnQkFDdkUsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztZQUVILENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFFSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQTdRVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixzY0NkbEMscTNLQXVHVzs7NEZEekZFLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTt1SkFPdEMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIEl0ZXJhYmxlQ2hhbmdlcywgSXRlcmFibGVEaWZmZXJzLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEZsYXROb2RlTmF2RHJhd2VyLCBUcmVlTm9kZU5hdkRyYXdlciB9IGZyb20gJy4vbW9kZWxzL3Ftcy1uYXYtZHJhd2VyLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TVHJlZUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xbXMtdHJlZS1nbG9iYWwuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLW5hdi1kcmF3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9xbXMtbmF2LWRyYXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcW1zLW5hdi1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFFNU05hdkRyYXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICByZWFkb25seSBzY3JvbGxJbnRvTm9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBJbnB1dCgpIHRyZWVEYXRhOiBBcnJheTxUcmVlTm9kZU5hdkRyYXdlcj4gPSBbXTtcclxuICBASW5wdXQoKSBvcGVuTm9kZXM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgZmF2b3JpdGVBY3Rpb246IGFueTtcclxuICBASW5wdXQoKSBhZGRMb2NhdGlvbkFjdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIG1vdmVMb2NhdGlvbk1vZGU6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIG5vZGVFeHBhbmRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ2xpY2tOb2RlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVGYXZvcml0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWRkTG9jYXRpb25FdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG1vdmVMb2NhdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIHRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZU5hdkRyYXdlcj4obm9kZSA9PiBub2RlLmxldmVsLCBub2RlID0+IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgdHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCBub2RlID0+IG5vZGUubGV2ZWwsIG5vZGUgPT4gbm9kZS5leHBhbmRhYmxlLCBub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgZXhwYW5kaW5nTm9kZXM6IEZsYXROb2RlTmF2RHJhd2VyW10gPSBbXTtcclxuICBhY3RpdmVOb2RlOiBzdHJpbmc7XHJcbiAgZ3VpZEhlbHBlciA9IHtcclxuICAgIGVtcHR5OiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJ1xyXG4gIH07XHJcblxyXG4gIGl0ZXJhYmxlRGlmZmVyO1xyXG4gIGFjdGl2ZVJvb3RJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBxbXNOYXZEcmF3ZXJTZXJ2aWNlOiBRTVNUcmVlR2xvYmFsU2VydmljZSwgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMpIHtcclxuICAgIHRoaXMuaXRlcmFibGVEaWZmZXIgPSBpdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgX3RyYW5zZm9ybWVyKG5vZGU6IFRyZWVOb2RlTmF2RHJhd2VyLCBsZXZlbDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHBhbmRhYmxlOiAoISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSxcclxuICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICBsZXZlbCxcclxuICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICBpdGVtSWNvbjogbm9kZS5pdGVtSWNvbixcclxuICAgICAgaXRlbU1hdEljb246IG5vZGUuaXRlbU1hdEljb24sXHJcbiAgICAgIGl0ZW1JY29uU3ZnOiBub2RlLml0ZW1JY29uU3ZnLFxyXG4gICAgICBpc0ZpbGU6IG5vZGUuaXNGaWxlLFxyXG4gICAgICBtYXJrZWRHZXRDaGlsZHJlbjogbm9kZS5tYXJrZWRHZXRDaGlsZHJlbixcclxuICAgICAgaXNGYXZvcml0ZTogbm9kZS5pc0Zhdm9yaXRlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBGbGF0Tm9kZU5hdkRyYXdlcikgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblxyXG4gICAgaWYgKGNoYW5nZXMudHJlZURhdGEgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy50cmVlRGF0YS5jdXJyZW50VmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzLnRyZWVEYXRhLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy50cmVlRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5vcGVuTm9kZXMgJiYgSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy5vcGVuTm9kZXMuY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlcy5vcGVuTm9kZXMucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5maW5kQW5kRXhwYW5kTm9kZXMoKTtcclxuICAgICAgdGhpcy5fYWN0aXZlTm9kZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnFtc05hdkRyYXdlclNlcnZpY2UuZ2V0SXRlbXNDaGlsZHJlbiQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgbGV0IG5ld05vZGVzQ2hpbGRyZW4gPSBbXTtcclxuXHJcbiAgICAgICAgcmVzLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZURhdGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0uaWQgPT09IHguaWQgJiYgaXRlbS5wYXJlbnRJZCA9PT0geC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIG5ld05vZGVzQ2hpbGRyZW4ucHVzaCh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQWRkIGNoaWxkcmVuIHRvIHRyZWVEYXRhXHJcbiAgICAgICAgaWYgKG5ld05vZGVzQ2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVEYXRhID0gWy4uLnRoaXMudHJlZURhdGEsIC4uLm5ld05vZGVzQ2hpbGRyZW5dO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmNvbnZlcnRUcmVlRGF0YSh0aGlzLnRyZWVEYXRhKTtcclxuICAgICAgICAgIHRoaXMuZmluZEFuZEV4cGFuZE5vZGVzKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmRJbmRleCh4ID0+IHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQgJiYgeC5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpbmRleF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMuc2Nyb2xsSW50b05vZGUkLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXRyZWUtbm9kZS5hY3RpdmUnKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjAwKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWN0aXZlTm9kZSgpIHtcclxuICAgIGNvbnN0IGN1cnJOb2RlID0gdGhpcy5vcGVuTm9kZXNbdGhpcy5vcGVuTm9kZXMubGVuZ3RoIC0gMV07XHJcbiAgICBjb25zdCBpZHhQYXJlbnQgPSB0aGlzLm9wZW5Ob2Rlcy5sZW5ndGggPj0gMiA/IHRoaXMub3Blbk5vZGVzLmxlbmd0aCAtIDIgOiAnJztcclxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBpZHhQYXJlbnQgIT09ICcnID8gdGhpcy5vcGVuTm9kZXNbaWR4UGFyZW50XSA6ICcnO1xyXG4gICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5nZXRBY3RpdmVOb2RlKGN1cnJOb2RlLCBwYXJlbnROb2RlKTtcclxuICAgIHRoaXMuc2Nyb2xsSW50b05vZGUkLm5leHQodGhpcy5hY3RpdmVOb2RlKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZU5vZGUoaWQsIHBhcmVudElkKSB7XHJcbiAgICBjb25zdCBfaWQgPSBpZCA/IGlkIDogJyc7XHJcbiAgICBjb25zdCBfcGFyZW50SWQgPSBwYXJlbnRJZCAmJiAocGFyZW50SWQgIT09IHRoaXMuZ3VpZEhlbHBlci5lbXB0eSkgPyBwYXJlbnRJZCA6ICcnO1xyXG4gICAgcmV0dXJuIGAke19pZH0tJHtfcGFyZW50SWR9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZEFuZEV4cGFuZE5vZGVzKGV4cGFuZE5ld0NoaWxkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5vcGVuTm9kZXMuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldLmlkID09PSBlbCkge1xyXG4gICAgICAgICAgdGhpcy5leHBhbmRpbmdOb2Rlcy5wdXNoKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBBREQgVEhJUyBMT0dJQyAtLS1cclxuICAgIC8vIFNldCB0aGUgaW5pdGlhbCBhY3RpdmUgcm9vdCBiYXNlZCBvbiB0aGUgb3BlbmVkIG5vZGVzLlxyXG4gICAgY29uc3QgYWN0aXZlTm9kZUlkID0gdGhpcy5vcGVuTm9kZXNbdGhpcy5vcGVuTm9kZXMubGVuZ3RoIC0gMV07XHJcbiAgICBjb25zdCBhY3RpdmVOb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChuID0+IG4uaWQgPT09IGFjdGl2ZU5vZGVJZCk7XHJcbiAgICBpZiAoYWN0aXZlTm9kZSkge1xyXG4gICAgICBjb25zdCByb290ID0gdGhpcy5fZmluZFJvb3RPZk5vZGUoYWN0aXZlTm9kZSk7XHJcbiAgICAgIGlmIChyb290KSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVSb290SWQgPSByb290LmlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgdGhpcy5fYWN0aXZlTm9kZSgpO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFRyYWNlcyBiYWNrIGZyb20gYSBnaXZlbiBub2RlIHRvIGZpbmQgaXRzIHJvb3QtbGV2ZWwgKGxldmVsIDApIGFuY2VzdG9yLlxyXG4gICovXHJcbiAgcHJpdmF0ZSBfZmluZFJvb3RPZk5vZGUobm9kZTogRmxhdE5vZGVOYXZEcmF3ZXIpOiBGbGF0Tm9kZU5hdkRyYXdlciB8IG51bGwge1xyXG4gICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcztcclxuICAgIGNvbnN0IG5vZGVJbmRleCA9IGFsbE5vZGVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IG5vZGUuaWQgJiYgbi5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCk7XHJcblxyXG4gICAgaWYgKG5vZGVJbmRleCA8IDApIHsgcmV0dXJuIG51bGw7IH1cclxuICAgIGlmIChub2RlLmxldmVsID09PSAwKSB7IHJldHVybiBub2RlOyB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRMZXZlbCA9IG5vZGUubGV2ZWwgLSAxO1xyXG4gICAgZm9yIChsZXQgaSA9IG5vZGVJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChhbGxOb2Rlc1tpXS5sZXZlbCA9PT0gY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRMZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIGFsbE5vZGVzW2ldOyAvLyBGb3VuZCB0aGUgcm9vdFxyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50TGV2ZWwtLTsgLy8gTG9vayBmb3IgdGhlIG5leHQgcGFyZW50IHVwXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsOyAvLyBTaG91bGQgbm90IGhhcHBlbiBpbiBhIHdlbGwtZm9ybWVkIHRyZWVcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tOb2RlKG5vZGU6IEZsYXROb2RlTmF2RHJhd2VyKSB7XHJcbiAgICBjb25zdCByb290T2ZDbGlja2VkTm9kZSA9IHRoaXMuX2ZpbmRSb290T2ZOb2RlKG5vZGUpO1xyXG5cclxuICAgIC8vIC0tLSBDT1JFIExPR0lDIC0tLVxyXG4gICAgLy8gT25seSBjb2xsYXBzZSB0aGUgdHJlZSBpZiB0aGUgbmV3IG5vZGUgYmVsb25ncyB0byBhIGRpZmZlcmVudCByb290IGJyYW5jaC5cclxuICAgIGlmIChyb290T2ZDbGlja2VkTm9kZSAmJiB0aGlzLmFjdGl2ZVJvb3RJZCAmJiB0aGlzLmFjdGl2ZVJvb3RJZCAhPT0gcm9vdE9mQ2xpY2tlZE5vZGUuaWQpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5jb2xsYXBzZUFsbCgpO1xyXG4gICAgfVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgaWYgKHJvb3RPZkNsaWNrZWROb2RlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlUm9vdElkID0gcm9vdE9mQ2xpY2tlZE5vZGUuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5nZXRBY3RpdmVOb2RlKG5vZGUuaWQsIG5vZGUucGFyZW50SWQpO1xyXG4gICAgdGhpcy5vbkNsaWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgICB0aGlzLnNjcm9sbEludG9Ob2RlJC5uZXh0KHRoaXMuYWN0aXZlTm9kZSk7XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZE5vZGUobm9kZTogRmxhdE5vZGVOYXZEcmF3ZXIpIHtcclxuICAgIHRoaXMub3Blbk5vZGVzID0gW107XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKG5vZGUpO1xyXG4gICAgICB0aGlzLl9hZGRFeHBhbmRpbmdOb2RlKG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5jb2xsYXBzZShub2RlKTtcclxuICAgICAgdGhpcy5fcmVtb3ZlRXhwYW5kaW5nTm9kZXMobm9kZS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgIG5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGlmICh4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkICYmIHguaWQgPT09IG5vZGUuaWQpIHtcclxuICAgICAgICAgIHgubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubm9kZUV4cGFuZEV2ZW50LmVtaXQoeyBub2RlLCBpc0V4cGFuZDogdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRmF2b3JpdGUobm9kZTogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBub2RlLmlzRmF2b3JpdGUgPSAhbm9kZS5pc0Zhdm9yaXRlO1xyXG4gICAgdGhpcy51cGRhdGVGYXZvcml0ZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBhZGRMb2NhdGlvbihub2RlOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuYWRkTG9jYXRpb25FdmVudC5lbWl0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgbW92ZUxvY2F0aW9uKG5vZGU6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5tb3ZlTG9jYXRpb25FdmVudC5lbWl0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkRXhwYW5kaW5nTm9kZShub2RlOiBGbGF0Tm9kZU5hdkRyYXdlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZGluZ05vZGVzLnNvbWUoeCA9PiB4LmlkID09PSBub2RlLmlkKSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGluZ05vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVFeHBhbmRpbmdOb2Rlcyhub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRpbmdOb2RlcyA9IHRoaXMuZXhwYW5kaW5nTm9kZXMuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZUlkKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRyZWVEYXRhKGxpc3QpIHtcclxuICAgIGxldCBtYXAgPSB7fSwgbm9kZSwgcm9vdHMgPSBbXSwgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIG1hcFtgJHtsaXN0W2ldLmlkfS0ke2xpc3RbaV0ucGFyZW50SWR9YF0gPSBpIC8vIGluaXRpYWxpemUgdGhlIG1hcFxyXG4gICAgICBsaXN0W2ldLmNoaWxkcmVuID0gW107IC8vIGluaXRpYWxpemUgdGhlIGNoaWxkcmVuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIG5vZGUgPSBsaXN0W2ldO1xyXG4gICAgICBjb25zdCBzdHJLZXkgPSBgJHtsaXN0W2ldLmlkfS0ke2xpc3RbaV0ucGFyZW50SWR9YDtcclxuXHJcbiAgICAgIGlmIChub2RlLnBhcmVudElkICYmIChub2RlLnBhcmVudElkICE9PSB0aGlzLmd1aWRIZWxwZXIuZW1wdHkpICYmIGxpc3RbbWFwW3N0cktleV1dKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbGlzdC5maWx0ZXIoeCA9PiB4LmlkID09PSBub2RlLnBhcmVudElkICYmICF4LmlzRmlsZSlbMF1cclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJvb3RzLnB1c2gobm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvb3RzO1xyXG4gIH1cclxuXHJcbn0iLCI8bWF0LXRyZWUgY2xhc3M9XCJxbXMtbmF2LWRyYXdlci1jb250YWluZXJcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XHJcbiAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XHJcbiAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZSBtYXRUcmVlTm9kZVBhZGRpbmcgW25nQ2xhc3NdPVwie1xyXG4gICAgICBhY3RpdmU6IGFjdGl2ZU5vZGUgPT09IGdldEFjdGl2ZU5vZGUobm9kZS5pZCwgbm9kZS5wYXJlbnRJZClcclxuICAgIH1cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICA8YnV0dG9uIGFyaWEtbGFiZWw9XCJkaXNhYmxlZFwiIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD48L2J1dHRvbj5cclxuICAgICAgPGltZyAqbmdJZj1cIm5vZGUuaXRlbUljb25TdmdcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHR5cGUtaWNvbiBjdXJzb3ItcG9pbnRlclwiIFtzcmNdPVwibm9kZS5pdGVtSWNvblN2Z1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tOb2RlKG5vZGUpXCIgYWx0PVwiSW1hZ2UgaWNvblwiIC8+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pdGVtSWNvblwiIFtjbGFzc109XCJub2RlLml0ZW1JY29uXCIgW3Ftc1RyYW5zZm9ybUljb25dPVwibm9kZS5pdGVtSWNvblwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCB0eXBlLWljb24gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25DbGlja05vZGUobm9kZSlcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pdGVtTWF0SWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgdHlwZS1pY29uIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAoY2xpY2spPVwib25DbGlja05vZGUobm9kZSlcIj57e1xyXG4gICAgICAgIG5vZGUuaXRlbU1hdEljb24gfX1cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW5hbWUgY3Vyc29yLXBvaW50ZXIgbXgtMlwiIChjbGljayk9XCJvbkNsaWNrTm9kZShub2RlKVwiPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vdmVMb2NhdGlvbk1vZGVcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFjdGlvblwiIGFyaWEtbGFiZWw9XCJNb3ZlIGxvY2F0aW9uXCIgKGNsaWNrKT1cIm1vdmVMb2NhdGlvbihub2RlLCAkZXZlbnQpXCIgcW1zLWJ0bi1pY29uXHJcbiAgICAgICAgICBjb2xvcj1cImxpZ2h0XCIgcW1zLXRvb2wtdGlwPVwie3ttb3ZlTG9jYXRpb25Nb2RlLnRvb2x0aXB9fVwiIG1vZGU9XCJkYXJrXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+XHJcbiAgICAgICAgICAgIHN3YXBfdmVydFxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmYXZvcml0ZUFjdGlvblwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYWN0aW9uXCIgYXJpYS1sYWJlbD1cIkFkZCBvciByZW1vdmUgZmF2b3JpdGVcIiAoY2xpY2spPVwidXBkYXRlRmF2b3JpdGUobm9kZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiXHJcbiAgICAgICAgICBxbXMtdG9vbC10aXA9XCJ7e25vZGUuaXNGYXZvcml0ZSA/IGZhdm9yaXRlQWN0aW9uLnRvb2x0aXBSZW1vdmVGYXZvcml0ZSA6IGZhdm9yaXRlQWN0aW9uLnRvb2x0aXBBZGRGYXZvcml0ZX19XCJcclxuICAgICAgICAgIG1vZGU9XCJkYXJrXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtuZ0NsYXNzXT1cInsncHJpbWFyeSc6IG5vZGUuaXNGYXZvcml0ZX1cIj5cclxuICAgICAgICAgICAge3tub2RlLmlzRmF2b3JpdGUgPyAnc3RhcicgOiAnc3Rhcl9vdXRsaW5lJyB9fVxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkTG9jYXRpb25BY3Rpb25cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFjdGlvblwiIGFyaWEtbGFiZWw9XCJBZGQgbG9jYXRpb25cIiAoY2xpY2spPVwiYWRkTG9jYXRpb24obm9kZSwgJGV2ZW50KVwiIHFtcy1idG4taWNvblxyXG4gICAgICAgICAgY29sb3I9XCJsaWdodFwiIHFtcy10b29sLXRpcD1cInt7YWRkTG9jYXRpb25BY3Rpb24udG9vbHRpcEFkZExvY2F0aW9ufX1cIiBtb2RlPVwiZGFya1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgYWRkXHJcbiAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDwvbWF0LXRyZWUtbm9kZT5cclxuICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cclxuICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIiBtYXRUcmVlTm9kZVBhZGRpbmcgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnZXhwYW5kLW5vZGUnOiB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpLFxyXG4gICAgICAnY29sbGFwc2Utbm9kZSc6ICF0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpLFxyXG4gICAgICBhY3RpdmU6IGFjdGl2ZU5vZGUgPT09IGdldEFjdGl2ZU5vZGUobm9kZS5pZCwgbm9kZS5wYXJlbnRJZClcclxuICAgIH1cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiVG9nZ2xlIGV4cGFuZFwiIChjbGljayk9XCJvbkV4cGFuZE5vZGUobm9kZSlcIiBtYXRUcmVlTm9kZVRvZ2dsZT5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICB7eyB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gXCJleHBhbmRfbW9yZVwiIDogXCJjaGV2cm9uX3JpZ2h0XCIgfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxpbWcgKm5nSWY9XCJub2RlLml0ZW1JY29uU3ZnXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyB0eXBlLWljb24gY3Vyc29yLXBvaW50ZXJcIiBbc3JjXT1cIm5vZGUuaXRlbUljb25TdmdcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrTm9kZShub2RlKVwiIGFsdD1cIkltYWdlIGljb25cIiAvPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIm5vZGUuaXRlbUljb25cIiBbY2xhc3NdPVwibm9kZS5pdGVtSWNvblwiIFtxbXNUcmFuc2Zvcm1JY29uXT1cIm5vZGUuaXRlbUljb25cIlxyXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgdHlwZS1pY29uIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uQ2xpY2tOb2RlKG5vZGUpXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIm5vZGUuaXRlbU1hdEljb25cIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHR5cGUtaWNvbiBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tOb2RlKG5vZGUpXCI+e3tcclxuICAgICAgICBub2RlLml0ZW1NYXRJY29uIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1uYW1lIGN1cnNvci1wb2ludGVyIG14LTJcIiAoY2xpY2spPVwib25DbGlja05vZGUobm9kZSlcIj57eyBub2RlLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb3ZlTG9jYXRpb25Nb2RlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hY3Rpb25cIiBhcmlhLWxhYmVsPVwiTW92ZSBsb2NhdGlvblwiIChjbGljayk9XCJtb3ZlTG9jYXRpb24obm9kZSwgJGV2ZW50KVwiIHFtcy1idG4taWNvblxyXG4gICAgICAgICAgY29sb3I9XCJsaWdodFwiIHFtcy10b29sLXRpcD1cInt7bW92ZUxvY2F0aW9uTW9kZS50b29sdGlwfX1cIiBtb2RlPVwiZGFya1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPlxyXG4gICAgICAgICAgICBzd2FwX3ZlcnRcclxuICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmF2b3JpdGVBY3Rpb25cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFjdGlvblwiIGFyaWEtbGFiZWw9XCJBZGQgb3IgcmVtb3ZlIGZhdm9yaXRlXCIgKGNsaWNrKT1cInVwZGF0ZUZhdm9yaXRlKG5vZGUsICRldmVudClcIlxyXG4gICAgICAgICAgcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIlxyXG4gICAgICAgICAgcW1zLXRvb2wtdGlwPVwie3tub2RlLmlzRmF2b3JpdGUgPyBmYXZvcml0ZUFjdGlvbi50b29sdGlwUmVtb3ZlRmF2b3JpdGUgOiBmYXZvcml0ZUFjdGlvbi50b29sdGlwQWRkRmF2b3JpdGV9fVwiXHJcbiAgICAgICAgICBtb2RlPVwiZGFya1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBbbmdDbGFzc109XCJ7J3ByaW1hcnknOiBub2RlLmlzRmF2b3JpdGV9XCI+XHJcbiAgICAgICAgICAgIHt7bm9kZS5pc0Zhdm9yaXRlID8gJ3N0YXInIDogJ3N0YXJfb3V0bGluZScgfX1cclxuICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkZExvY2F0aW9uQWN0aW9uXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hY3Rpb25cIiBhcmlhLWxhYmVsPVwiQWRkIGxvY2F0aW9uXCIgKGNsaWNrKT1cImFkZExvY2F0aW9uKG5vZGUsICRldmVudClcIiBxbXMtYnRuLWljb25cclxuICAgICAgICAgIGNvbG9yPVwibGlnaHRcIiBxbXMtdG9vbC10aXA9XCJ7e2FkZExvY2F0aW9uQWN0aW9uLnRvb2x0aXBBZGRMb2NhdGlvbn19XCIgbW9kZT1cImRhcmtcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgIGFkZFxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC10cmVlLW5vZGU+XHJcbjwvbWF0LXRyZWU+Il19
|
package/fesm2022/qms-angular.mjs
CHANGED
|
@@ -35487,6 +35487,7 @@ class QMSNavDrawerComponent {
|
|
|
35487
35487
|
this.guidHelper = {
|
|
35488
35488
|
empty: '00000000-0000-0000-0000-000000000000'
|
|
35489
35489
|
};
|
|
35490
|
+
this.activeRootId = null;
|
|
35490
35491
|
this.hasChild = (_, node) => node.expandable;
|
|
35491
35492
|
this.iterableDiffer = iterableDiffers.find([]).create(null);
|
|
35492
35493
|
}
|
|
@@ -35570,12 +35571,55 @@ class QMSNavDrawerComponent {
|
|
|
35570
35571
|
}
|
|
35571
35572
|
});
|
|
35572
35573
|
}
|
|
35574
|
+
// --- ADD THIS LOGIC ---
|
|
35575
|
+
// Set the initial active root based on the opened nodes.
|
|
35576
|
+
const activeNodeId = this.openNodes[this.openNodes.length - 1];
|
|
35577
|
+
const activeNode = this.treeControl.dataNodes.find(n => n.id === activeNodeId);
|
|
35578
|
+
if (activeNode) {
|
|
35579
|
+
const root = this._findRootOfNode(activeNode);
|
|
35580
|
+
if (root) {
|
|
35581
|
+
this.activeRootId = root.id;
|
|
35582
|
+
}
|
|
35583
|
+
}
|
|
35584
|
+
// ----------------------
|
|
35573
35585
|
this._activeNode();
|
|
35574
35586
|
this.cdRef.detectChanges();
|
|
35575
35587
|
}
|
|
35588
|
+
/**
|
|
35589
|
+
* Traces back from a given node to find its root-level (level 0) ancestor.
|
|
35590
|
+
*/
|
|
35591
|
+
_findRootOfNode(node) {
|
|
35592
|
+
const allNodes = this.treeControl.dataNodes;
|
|
35593
|
+
const nodeIndex = allNodes.findIndex(n => n.id === node.id && n.parentId === node.parentId);
|
|
35594
|
+
if (nodeIndex < 0) {
|
|
35595
|
+
return null;
|
|
35596
|
+
}
|
|
35597
|
+
if (node.level === 0) {
|
|
35598
|
+
return node;
|
|
35599
|
+
}
|
|
35600
|
+
let currentLevel = node.level - 1;
|
|
35601
|
+
for (let i = nodeIndex - 1; i >= 0; i--) {
|
|
35602
|
+
if (allNodes[i].level === currentLevel) {
|
|
35603
|
+
if (currentLevel === 0) {
|
|
35604
|
+
return allNodes[i]; // Found the root
|
|
35605
|
+
}
|
|
35606
|
+
currentLevel--; // Look for the next parent up
|
|
35607
|
+
}
|
|
35608
|
+
}
|
|
35609
|
+
return null; // Should not happen in a well-formed tree
|
|
35610
|
+
}
|
|
35576
35611
|
onClickNode(node) {
|
|
35612
|
+
const rootOfClickedNode = this._findRootOfNode(node);
|
|
35613
|
+
// --- CORE LOGIC ---
|
|
35614
|
+
// Only collapse the tree if the new node belongs to a different root branch.
|
|
35615
|
+
if (rootOfClickedNode && this.activeRootId && this.activeRootId !== rootOfClickedNode.id) {
|
|
35616
|
+
this.treeControl.collapseAll();
|
|
35617
|
+
}
|
|
35618
|
+
// ------------------
|
|
35619
|
+
if (rootOfClickedNode) {
|
|
35620
|
+
this.activeRootId = rootOfClickedNode.id;
|
|
35621
|
+
}
|
|
35577
35622
|
this.activeNode = this.getActiveNode(node.id, node.parentId);
|
|
35578
|
-
this.treeControl.collapseAll();
|
|
35579
35623
|
this.onClickNodeEvent.emit(node);
|
|
35580
35624
|
this.scrollIntoNode$.next(this.activeNode);
|
|
35581
35625
|
}
|