chrv-components 1.8.8 → 1.8.9
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/chrv-components-1.8.9.tgz +0 -0
- package/esm2022/lib/chr-form/chr-form.component.mjs +17 -3
- package/fesm2022/chrv-components.mjs +16 -2
- package/fesm2022/chrv-components.mjs.map +1 -1
- package/lib/chr-form/chr-form.component.d.ts +3 -1
- package/package.json +1 -1
- package/chrv-components-1.8.8.tgz +0 -0
|
Binary file
|
|
@@ -87,19 +87,31 @@ export class ChrFormComponent {
|
|
|
87
87
|
this.isControlRequired = (control) => {
|
|
88
88
|
return control.validations?.find((v) => v.rule.toLowerCase() == "required");
|
|
89
89
|
};
|
|
90
|
+
this.setValue$ = (key, value, dateFormat = null) => {
|
|
91
|
+
if (dateFormat == null)
|
|
92
|
+
this.form.get(key)?.setValue(value);
|
|
93
|
+
else
|
|
94
|
+
this.form.get(key)?.setValue(this.datePipe.transform(value, dateFormat));
|
|
95
|
+
this.changeDetector.detectChanges();
|
|
96
|
+
};
|
|
97
|
+
this.set = (model, dateFormat = null) => {
|
|
98
|
+
for (const key of Object.keys(model)) {
|
|
99
|
+
this.setValue$(key, model[key], dateFormat);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
90
102
|
this.patchValue = (key, value, dateFormat = null) => {
|
|
91
103
|
if (dateFormat == null)
|
|
92
104
|
this.setValue(key, value);
|
|
93
105
|
else
|
|
94
106
|
this.setValue(key, this.datePipe.transform(value, dateFormat));
|
|
95
107
|
this.form.get(key)?.updateValueAndValidity();
|
|
108
|
+
this.modelChange.emit(this.model);
|
|
96
109
|
this.detectChanges();
|
|
97
110
|
};
|
|
98
111
|
this.patch = (model, dateFormat = null) => {
|
|
99
112
|
for (const key of Object.keys(model)) {
|
|
100
113
|
this.patchValue(key, model[key], dateFormat);
|
|
101
114
|
}
|
|
102
|
-
this.detectChanges();
|
|
103
115
|
};
|
|
104
116
|
this.checkValidity = () => {
|
|
105
117
|
for (const control of this.flattenedControls) {
|
|
@@ -108,8 +120,10 @@ export class ChrFormComponent {
|
|
|
108
120
|
this.valid = this.form.valid;
|
|
109
121
|
this.detectChanges();
|
|
110
122
|
};
|
|
111
|
-
this.updateValueAndValidity = () => {
|
|
123
|
+
this.updateValueAndValidity = (touched = false) => {
|
|
112
124
|
this.form.markAsDirty();
|
|
125
|
+
if (touched)
|
|
126
|
+
this.form.markAllAsTouched();
|
|
113
127
|
this.form.updateValueAndValidity({ emitEvent: true });
|
|
114
128
|
};
|
|
115
129
|
this.setValue = (key, value) => {
|
|
@@ -265,4 +279,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
265
279
|
}], tabDisplay: [{
|
|
266
280
|
type: Input
|
|
267
281
|
}] } });
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWix1QkFBdUIsR0FNdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFHTixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWix5QkFBeUIsR0FDekIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLElBQUksRUFDSixzQkFBc0IsR0FDdEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FB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RSx5QkFBeUI7NEJBQ2xDLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUU7eUJBQ3JDO3FCQUNELG1CQUNnQix1QkFBdUIsQ0FBQyxPQUFPO3VJQUd2QyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRSxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdE9uQ2hhbmdlcyxcblx0U2ltcGxlQ2hhbmdlcyxcblx0T25Jbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVmFsaWRhdG9yRm4sIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuXHRGb3JtQnVpbGRlcixcblx0Rm9ybUdyb3VwLFxuXHRWYWxpZGF0b3JzLFxuXHRGb3JtQ29udHJvbCxcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBNYXRFcnJvciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgQ2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Noci1zZWFyY2gtc2VsZWN0L2Noci1zZWFyY2gtc2VsZWN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlXCI7XG5pbXBvcnQge1xuXHREYXRlUGlwZSxcblx0Q29tbW9uTW9kdWxlLFxuXHREQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcbmltcG9ydCB7XG5cdHR5cGUsXG5cdFR5cGVWYWxpZGF0b3JEaXJlY3RpdmUsXG59IGZyb20gXCIuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JcIjtcbmltcG9ydCB7IGRlY2ltYWwgfSBmcm9tIFwiLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL2RlY2ltYWwtdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBtYXhEYXRlIH0gZnJvbSBcIi4uL21vZGVscy9jaHItdmFsaWRhdG9ycy9tYXgtZGF0ZS12YWxpZGF0b3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uIHtcblx0W2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZpbHRlciB7XG5cdGRpc3BsYXk6IHN0cmluZztcblx0Y2FsbGJhY2s/OiBGdW5jdGlvbjtcblx0dG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29udHJvbFZhbGlkYXRpb24ge1xuXHRydWxlOiBzdHJpbmc7XG5cdHZhbHVlPzogYW55O1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250cm9sIHtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0c3Bhbj86IHN0cmluZztcblx0d2lkdGg/OiBcImNvbFwiIHwgXCJyb3dcIjtcblx0Y29sPzogbnVtYmVyO1xuXHRyb3c/OiBudW1iZXI7XG5cdHR5cGU6XG5cdFx0fCBcInRleHRcIlxuXHRcdHwgXCJwYXNzd29yZFwiXG5cdFx0fCBcInRleHRBcmVhXCJcblx0XHR8IFwibnVtYmVyXCJcblx0XHR8IFwiZGF0ZVwiXG5cdFx0fCBcImRhdGV0aW1lXCJcblx0XHR8IFwic2VhcmNoU2VsZWN0XCJcblx0XHR8IFwiY29sb3JcIlxuXHRcdHwgXCJ0b2dnbGVcIjtcblx0dmFsdWU/OiBhbnk7XG5cdGRhdGE/OiBhbnlbXSB8IG51bGw7XG5cdGljb24/OiBzdHJpbmc7XG5cdGljb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuXHRpY29uQ2FsbGJhY2tEaXNhYmxlZD86IGJvb2xlYW47XG5cdGljb25Ub29sdGlwPzogc3RyaW5nO1xuXHRmbj86IChvYmplY3Q6IGFueSkgPT4gc3RyaW5nO1xuXHRmaWx0ZXJzPzogSVNlYXJjaEZpbHRlcltdO1xuXHR2YWxpZGF0aW9ucz86IElDb250cm9sVmFsaWRhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2VjdGlvbiB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRjb250cm9sczogSUNvbnRyb2xbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2wge1xuXHRba2V5OiBzdHJpbmddOiBhbnk7XG59XG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiYXBwLWNoci1mb3JtXCIsXG5cdHRlbXBsYXRlVXJsOiBcIi4vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVVcmxzOiBbXG5cdFx0XCIuL2Noci1mb3JtLmNvbXBvbmVudC5zY3NzXCIsXG5cdFx0XCIuLi8uLi8uLi8uLi8uLi90YWlsd2luZGJ1aWxkLmNzc1wiLFxuXHRcdFwiLi9jaHItZm9ybS5jb21wb25lbnQuc2Nzc1wiLFxuXHRdLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRNYXRUb29sdGlwTW9kdWxlLFxuXHRcdE1hdEljb25Nb2R1bGUsXG5cdFx0TWF0U2xpZGVUb2dnbGVNb2R1bGUsXG5cdFx0TWF0RXJyb3IsXG5cdFx0Q2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50LFxuXHRcdE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcblx0XHREYXRlUGlwZSxcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0VHlwZVZhbGlkYXRvckRpcmVjdGl2ZSxcblx0XHRNYXRUYWJzTW9kdWxlLFxuXHRdLFxuXHRwcm92aWRlcnM6IFtcblx0XHREYXRlUGlwZSxcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxuXHRcdFx0dXNlVmFsdWU6IHsgZGF0ZUZvcm1hdDogXCJzaG9ydERhdGVcIiB9LFxuXHRcdH0sXG5cdF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdEBJbnB1dCgpIHNlY3Rpb25zPzogSUZvcm1TZWN0aW9uW107XG5cdEBJbnB1dCgpIGNvbnRyb2xzPzogSUNvbnRyb2xbXTtcblxuXHRASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cdEBPdXRwdXQoKSB2YWxpZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG5cdEBJbnB1dCgpIG1vZGVsOiBhbnkgPSBudWxsO1xuXHRAT3V0cHV0KCkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblx0QElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuO1xuXHRAT3V0cHV0KCkgdmFsdWVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRASW5wdXQoKSBzdWJtaXQ/OiBGdW5jdGlvbjtcblxuXHRASW5wdXQoKSBjb21wYWN0OiBib29sZWFuID0gZmFsc2U7XG5cblx0QE91dHB1dCgpIGZvcm1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxJRm9ybUNvbnRyb2w+ID1cblx0XHRuZXcgRXZlbnRFbWl0dGVyPElGb3JtQ29udHJvbD4oKTtcblxuXHRASW5wdXQoKSB0YWJEaXNwbGF5OiBib29sZWFuID0gZmFsc2U7XG5cblx0Zm9ybTogRm9ybUdyb3VwID0gdGhpcy5idWlsZGVyLmdyb3VwKHt9KTtcblxuXHRwcml2YXRlIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXHRwcml2YXRlIGNvbnRyb2xUeXBlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXHRwcml2YXRlIGZsYXR0ZW5lZENvbnRyb2xzOiBJQ29udHJvbFtdID0gW107XG5cblx0cHVibGljIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBidWlsZGVyOiBGb3JtQnVpbGRlcixcblx0XHRwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcblx0XHRwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxuXHQpIHtcblx0XHRpZiAodGhpcy5jb250cm9scyAhPSBudWxsICYmIHRoaXMuc2VjdGlvbnMgIT0gbnVsbClcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJZb3UgY2FuJ3QgdXNlIGJvdGggY29udHJvbHMgYW5kIHNlY3Rpb25zIGluIHRoZSBzYW1lIGZvcm1cIlxuXHRcdFx0KTtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuZmxhdHRlbmVkQ29udHJvbHMgPVxuXHRcdFx0dGhpcy5zZWN0aW9uc1xuXHRcdFx0XHQ/Lm1hcCgocykgPT4gcy5jb250cm9scylcblx0XHRcdFx0LmZsYXQoKVxuXHRcdFx0XHQuY29uY2F0KHRoaXMuY29udHJvbHMgPz8gW10pIHx8IFtdO1xuXHRcdHRoaXMuaW5pdE1vZGVsKCk7XG5cdFx0dGhpcy5pbml0VmFsdWVzKCk7XG5cdFx0dGhpcy5pbml0Q29udHJvbHMoKTtcblx0XHR0aGlzLmluaXRMaXN0ZW5lcnMoKTtcblx0XHR0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgaW5pdE1vZGVsID0gKCkgPT4ge1xuXHRcdGlmICh0aGlzLm1vZGVsID09IG51bGwpIHRoaXMubW9kZWwgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoIXRoaXMubW9kZWxbY29udHJvbC5uYW1lXSkgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID0gY29udHJvbC52YWx1ZTtcblx0XHR9XG5cdH07XG5cblx0cHJpdmF0ZSBpbml0VmFsdWVzID0gKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoIXRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0pXG5cdFx0XHRcdHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0gPSB0aGlzLnRvSW5wdXRWYWx1ZShcblx0XHRcdFx0XHRjb250cm9sLFxuXHRcdFx0XHRcdHRoaXMubW9kZWxbY29udHJvbC5uYW1lXVxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIGluaXRDb250cm9scyA9ICgpID0+IHtcblx0XHRjb25zdCBmb3JtQ29udHJvbHMgPSB7fSBhcyBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5fZ2V0VmFsaWRhdG9ycyhjb250cm9sLnZhbGlkYXRpb25zKTtcblx0XHRcdGZvcm1Db250cm9sc1tjb250cm9sLm5hbWVdID0gbmV3IEZvcm1Db250cm9sKFxuXHRcdFx0XHR0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdLFxuXHRcdFx0XHR2YWxpZGF0b3JzXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5jb250cm9sVHlwZXNbY29udHJvbC5uYW1lXSA9IGNvbnRyb2wudHlwZTtcblx0XHR9XG5cblx0XHR0aGlzLmZvcm0gPSB0aGlzLmJ1aWxkZXIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcblx0XHR0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuXHR9O1xuXG5cdHByaXZhdGUgaW5pdExpc3RlbmVycyA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0aWYgKHZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5tb2RlbFtrZXldID0gdmFsdWVzW2tleV07XG5cdFx0XHRcdFx0dGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlc1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuXHRcdFx0dGhpcy52YWxpZENoYW5nZS5lbWl0KHRoaXMudmFsaWQpO1xuXHRcdFx0dGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0fSk7XG5cdH07XG5cblx0dmFsdWUgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHRoaXMuZ2V0VmFsdWUoaW5wdXQpO1xuXG5cdGdldFZhbHVlID0gKGlucHV0Pzogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKGlucHV0KSByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzW2lucHV0XT8udmFsdWU7XG5cdFx0cmV0dXJuIHRoaXMuZm9ybS52YWx1ZTtcblx0fTtcblxuXHRpc1ZhbGlkID0gKGlucHV0Pzogc3RyaW5nKSA9PiB7XG5cdFx0aWYgKGlucHV0KSByZXR1cm4gdGhpcy5mb3JtLmdldChpbnB1dCk/LnZhbGlkO1xuXHRcdHJldHVybiB0aGlzLnZhbGlkO1xuXHR9O1xuXG5cdGlzQ29udHJvbFJlcXVpcmVkID0gKGNvbnRyb2w6IElDb250cm9sKSA9PiB7XG5cdFx0cmV0dXJuIGNvbnRyb2wudmFsaWRhdGlvbnM/LmZpbmQoKHYpID0+IHYucnVsZS50b0xvd2VyQ2FzZSgpID09IFwicmVxdWlyZWRcIik7XG5cdH07XG5cblx0cGF0Y2hWYWx1ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB0aGlzLnNldFZhbHVlKGtleSwgdmFsdWUpO1xuXHRcdGVsc2UgdGhpcy5zZXRWYWx1ZShrZXksIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBkYXRlRm9ybWF0KSk7XG5cdFx0dGhpcy5mb3JtLmdldChrZXkpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdH07XG5cblx0cGF0Y2ggPSAobW9kZWw6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtb2RlbCkpIHtcblx0XHRcdHRoaXMucGF0Y2hWYWx1ZShrZXksIG1vZGVsW2tleV0sIGRhdGVGb3JtYXQpO1xuXHRcdH1cblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHRjaGVja1ZhbGlkaXR5ID0gKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG5cdFx0XHR0aGlzLmZvcm0uZ2V0KGNvbnRyb2wubmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblx0XHR9XG5cdFx0dGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHR1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuXHRcdHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuXHR9O1xuXG5cdHByaXZhdGUgc2V0VmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLmZvcm0uZ2V0KGtleSk/LnBhdGNoVmFsdWUodmFsdWUpO1xuXHRcdHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZTtcblx0fTtcblxuXHRwcml2YXRlIHRvSW5wdXRWYWx1ZSA9IChjb250cm9sOiBJQ29udHJvbCwgdmFsdWU6IGFueSB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0c3dpdGNoIChjb250cm9sLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdD8gdGhpcy50cmFuc2Zvcm1EYXRlKHZhbHVlLCBcInl5eXktTU0tZGRcIilcblx0XHRcdFx0XHQ6IHRoaXMudHJhbnNmb3JtRGF0ZShjb250cm9sLnZhbHVlLCBcInl5eXktTU0tZGRcIik7XG5cdFx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0PyB0aGlzLnRyYW5zZm9ybURhdGUodmFsdWUsIFwieXl5eS1NTS1kZFRISDptbVwiKVxuXHRcdFx0XHRcdDogdGhpcy50cmFuc2Zvcm1EYXRlKGNvbnRyb2wudmFsdWUsIFwieXl5eS1NTS1kZFRISDptbVwiKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSB8fCBjb250cm9sLnZhbHVlO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIHRyYW5zZm9ybURhdGUgPSAodmFsdWU6IGFueSwgZm9ybWF0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG5cdH07XG5cblx0cHVibGljIHJlc2l6ZSA9ICh0ZXh0QXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGluaXRpYWxIZWlnaHQgPSB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQ7XG5cdFx0dGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gaW5pdGlhbEhlaWdodDtcblx0XHR0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSBcIlwiICsgdGV4dEFyZWEuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xuXHR9O1xuXG5cdHB1YmxpYyBkb1N1Ym1pdCA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuXHRcdGlmICh0aGlzLnZhbGlkICYmIHRoaXMuZm9ybS52YWxpZCkgdGhpcy5zdWJtaXQ/Lih0aGlzLmZvcm0udmFsdWUpO1xuXHR9O1xuXG5cdHByaXZhdGUgZGV0ZWN0Q2hhbmdlcyA9ICgpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcblx0XHR0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHRwcml2YXRlIF9nZXRWYWxpZGF0b3JzID0gKHZhbGlkYXRpb25zPzogSUNvbnRyb2xWYWxpZGF0aW9uW10pID0+IHtcblx0XHRjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cdFx0aWYgKCF2YWxpZGF0aW9ucykgcmV0dXJuIHZhbGlkYXRvcnM7XG5cdFx0Ly9Td2l0Y2ggY2FzZSBicmVha3MgdGhlIG1vYmlsZSBhcHAgc28gd2UnbGwgZG8gaWYgc3RhdGVtZW50c1xuXHRcdGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9ucykge1xuXHRcdFx0Y29uc3QgcnVsZSA9IHZhbGlkYXRpb24ucnVsZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtaW5cIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBlc3QgdHJvcCBwZXRpdGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4odmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtYXhcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBlc3QgdHJvcCBncmFuZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJyZXF1aXJlZFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2UgY2hhbXBzIGVzdCByZXF1aXMgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcImVtYWlsXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSBhZHJlc3NlIGVtYWlsIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1pbmxlbmd0aFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1heGxlbmd0aFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIGdyYW5kZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcInR5cGVcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBuJ2VzdCBwYXMgdmFsaWRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKHR5cGUodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJkZWNpbWFsXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gYExlIG5vbWJyZSBkZSBkw6ljaW1hbCBuJ2VzdCBwYXMgdmFsaWRlIChtYXg6ICR7dmFsaWRhdGlvbi52YWx1ZX0pICFgO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goZGVjaW1hbCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1heGRhdGVcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBgQ2V0dGUgZGF0ZSBlc3QgdHJvcCBncmFuZGUgISAobWF4OiAke3ZhbGlkYXRpb24udmFsdWV9KSAhYDtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKG1heERhdGUodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmFsaWRhdG9ycztcblx0fTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIG1pbi1oLTUvNiBtdC0yXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYkRpc3BsYXkgfHwgIXNlY3Rpb25zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2luZ2xlVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sczogY29udHJvbHN9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJEaXNwbGF5ICYmIHNlY3Rpb25zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VjdGlvblRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c2VjdGlvbnM6IHNlY3Rpb25zfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJEaXNwbGF5ICYmIHNlY3Rpb25zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFic1RlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c2VjdHM6IHNlY3Rpb25zfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Zvcm0+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YWJzVGVtcGxhdGUgbGV0LXNlY3Rpb25zPSdzZWN0cyc+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgIEBmb3IgKHNlY3Rpb24gb2Ygc2VjdGlvbnM7IHRyYWNrIHNlY3Rpb247IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgPG1hdC10YWIgW2xhYmVsXT1cInNlY3Rpb24udGl0bGUgfHwgJ8OJdGFwZSAnICsgKGluZGV4ICsgMSlcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImluaXRpYWxpemVkXCIgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICAgICAgQGZvciAoY3RybCBvZiBzZWN0aW9uLmNvbnRyb2xzOyB0cmFjayBpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXRcbiAgICAgICAgICBsYXN0ID1cbiAgICAgICAgICAkbGFzdClcbiAgICAgICAgICB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjdHJsLCBpbmRleDogaW5kZXgsIGxhc3Q6ICRsYXN0fVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC10YWI+XG4gICAgICB9XG4gICAgPC9tYXQtdGFiLWdyb3VwPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVUZW1wbGF0ZSBsZXQtY29udHJvbHM9XCJjb250cm9sc1wiPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPGRpdiAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgIFtuZ0NsYXNzXT1cImNvbXBhY3QgPyAnZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTQnOidncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtMidcIj5cbiAgICAgIEBmb3IgKGNvbnRyb2wgb2YgY29udHJvbHM7IHRyYWNrIGNvbnRyb2w7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2w6IGNvbnRyb2wsIGluZGV4OiBpbmRleCwgbGFzdDogbGFzdH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlY3Rpb25UZW1wbGF0ZSBsZXQtc2VjdGlvbnM9J3NlY3Rpb25zJz5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIEBmb3IgKHNlY3Rpb24gb2Ygc2VjdGlvbnM7IHRyYWNrIHNlY3Rpb247IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgIDxkaXY+XG4gICAgICBAaWYgKHNlY3Rpb24udGl0bGUpIHtcbiAgICAgIDxoMiBjbGFzcz1cIm1iLTIgZm9udC1ib2xkIHRleHQteGwgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGVcIj5cbiAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgPC9oMj5cbiAgICAgIH1cbiAgICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbXBhY3QgPyAnZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTQnOidncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtMidcIj5cbiAgICAgICAgQGZvciAoY29udHJvbCBvZiBzZWN0aW9uLmNvbnRyb2xzOyB0cmFjayBpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXRcbiAgICAgICAgbGFzdCA9XG4gICAgICAgICRsYXN0KVxuICAgICAgICB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2w6IGNvbnRyb2wsIGluZGV4OiBpbmRleCwgbGFzdDogJGxhc3R9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoaW5kZXggIT0gKHNlY3Rpb25zfHxbXSkubGVuZ3RoIC0gMSAmJiAhY29tcGFjdCkge1xuICAgICAgPGRpdiBjbGFzcz1cInB5LTRcIj5cbiAgICAgICAgPGhyIGNsYXNzPVwiXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlIGxldC1jb250cm9sPSdjb250cm9sJyBsZXQtbGFzdD0nbGFzdCcgbGV0LWluZGV4PSdpbmRleCc+XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBoLW1pbiBtdC0yXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgW25nQ2xhc3NdPVwie1xuICAgICdzbTpjb2wtc3Bhbi0yJzogKGNvbnRyb2wud2lkdGggPT0gJ3JvdycgJiYgIWNvbXBhY3QpIHx8IGNvbnRyb2wudHlwZT09J3RleHRBcmVhJyAmJiBjb21wYWN0ICYmIGNvbnRyb2wud2lkdGggIT0gJ3JvdycsXG4gICAgJ3NtOmNvbC1zcGFuLTQnOiBjb250cm9sLndpZHRoID09J3JvdycgJiYgY29tcGFjdCxcbiAgICB9XCI+XG4gICAgQGlmIChjb250cm9sLnR5cGU9PSdzZWFyY2hTZWxlY3QnKSB7XG4gICAgPGRpdiBhcHAtY2hyLXNlYXJjaC1zZWxlY3QgY2xhc3M9XCJyZWxhdGl2ZSBpbnB1dCB6LTAgdy1mdWxsXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIlxuICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgIFtkYXRhXT1cImNvbnRyb2wuZGF0YSB8fCBbXVwiIFtkaXNwbGF5XT1cImNvbnRyb2wuZm4hXCIgW25hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCJcbiAgICAgIFtmaWx0ZXJzXT1cImNvbnRyb2wuZmlsdGVyc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGFic29sdXRlIHRleHQtc20gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIiBbZm9yXT1cImNvbnRyb2wubmFtZVwiPnt7XG4gICAgICAgIGNvbnRyb2wubGFiZWxcbiAgICAgICAgfX1cbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGNvbnRyb2wudmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24pIHtcbiAgICAgICAgQGlmIChcbiAgICAgICAgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmXG4gICAgICAgIGZvcm0uaGFzRXJyb3IodmFsaWRhdGlvbi5ydWxlLnRvTG93ZXJDYXNlKCksIGNvbnRyb2wubmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgei0wIHctZnVsbCBncm91cC9pbnB1dHMgY29udGVudFwiPlxuICAgICAgPCEtLSBIZXJlIHdlIHdpbGwgKm5nSWYgZWFjaCB0eXBlIG9mIGlucHV0IGNhdXNlIGl0J3MgdGhlIGNsZWFuZXN0IHdheSBJIGNhbiBpbWFnaW5lLS0+XG4gICAgICA8IS0tVEVYVC0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RleHQnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiBbdmFsdWVdPVwibW9kZWw/Lltjb250cm9sLm5hbWVdIHx8IGNvbnRyb2wudmFsdWUgfHwgJydcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMi41IHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLVBBU1NXT1JELS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAncGFzc3dvcmQnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1URVhUIEFSRUEtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0ZXh0QXJlYScpIHtcbiAgICAgIDx0ZXh0YXJlYSAjdGV4dEFyZWEgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCJcbiAgICAgICAgKGlucHV0KT1cInJlc2l6ZSh0ZXh0QXJlYSlcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwibm8tc2Nyb2xsYmFyIGlucHV0ICFyZXNpemUtbm9uZSBoZWlnaHQtbm9ybWFsaXplZCBibG9jayBweS0yIHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIj48L3RleHRhcmVhPlxuICAgICAgfVxuICAgICAgPCEtLU5VTUJFUi0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ251bWJlcicpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1EQVRFLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImRhdGVcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yIHB4LTAgdy1mdWxsIGhlaWdodC1ub3JtYWxpemVkIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yIHB4LTAgdy1mdWxsIGhlaWdodC1ub3JtYWxpemVkIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLUNPTE9SLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnY29sb3InKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJjb2xvclwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIiBzdHlsZT1cImhlaWdodDogNDJweDtcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTEuNSBtLTAgcHgtMCB3LWZ1bGwgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndG9nZ2xlJyl7XG4gICAgICA8aW5wdXQgI3RvZ2dsZSB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImhpZGRlbiBjaGVja2JveFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCIgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB0b2dnbGUtd3JhcHBlciBibG9jayBpbnB1dCBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTMwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiPlxuICAgICAgICA8ZGl2IChjbGljayk9XCJ0b2dnbGU/LmNsaWNrKClcIiBjbGFzcz1cInJlbGF0aXZlIGJsb2NrIGlucHV0IHRvZ2dsZVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgIT0gJ3NlYXJjaFNlbGVjdCcpIHtcbiAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGFic29sdXRlIHRleHQtc20gdGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDBcIiBbZm9yXT1cImNvbnRyb2wubmFtZVwiPnt7XG4gICAgICAgIGNvbnRyb2wubGFiZWxcbiAgICAgICAgfX1cbiAgICAgICAgQGlmKGNvbnRyb2wubGFiZWwgJiYgY29udHJvbC5sYWJlbCAhPSAnJyAmJiBjb250cm9sLmxhYmVsICE9ICcgJyl7XG4gICAgICAgIEBpZiAoaXNDb250cm9sUmVxdWlyZWQoY29udHJvbCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIDpcbiAgICAgICAgfVxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGNvbnRyb2wudmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24pIHtcbiAgICAgICAgQGlmIChcbiAgICAgICAgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmXG4gICAgICAgIGZvcm0uaGFzRXJyb3IodmFsaWRhdGlvbi5ydWxlLnRvTG93ZXJDYXNlKCksIGNvbnRyb2wubmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLmljb24gJiYgIWRpc2FibGVkKSB7XG4gICAgICA8c3BhblxuICAgICAgICBbbmdDbGFzc109XCJjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkID8gJ3RleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwJzondGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBwLTIuNSBib3R0b20tMCByaWdodC0wXCIgW21hdFRvb2x0aXBdPVwiY29udHJvbC5pY29uVG9vbHRpcCB8fCAnJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgKGNsaWNrKT1cIiFjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkICYmIGNvbnRyb2wuaWNvbkNhbGxiYWNrPy4oZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy52YWx1ZSlcIj48bWF0LWljb25cbiAgICAgICAgICBjbGFzcz1cImZsZXggaW5wdXQganVzdGlmeS1jZW50ZXIgYWxpZ24tbWlkZGxlIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciB0ZXh0LWxnXCI+e3tjb250cm9sLmljb259fTwvbWF0LWljb24+PC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoY29udHJvbC5zcGFuKSB7XG4gICAgPHNwYW5cbiAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycyB8fCAhZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkID8gJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyA6ICchdGV4dC1yZWQtNTAwIGRhcms6IXRleHQtcmVkLTgwMCdcIlxuICAgICAgY2xhc3M9XCJoLTAgdGV4dC14c1wiPnt7IGNvbnRyb2wuc3BhblxuICAgICAgfX08L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWix1QkFBdUIsR0FNdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFHTixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWix5QkFBeUIsR0FDekIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLElBQUksRUFDSixzQkFBc0IsR0FDdEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FB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QUFRO3NCQUFoQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUUsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdFLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdFZpZXdFbmNhcHN1bGF0aW9uLFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRPbkluaXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBWYWxpZGF0b3JGbiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG5cdEZvcm1CdWlsZGVyLFxuXHRGb3JtR3JvdXAsXG5cdFZhbGlkYXRvcnMsXG5cdEZvcm1Db250cm9sLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1hdEVycm9yIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBDaHJTZWFyY2hTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vY2hyLXNlYXJjaC1zZWxlY3QvY2hyLXNlYXJjaC1zZWxlY3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGVcIjtcbmltcG9ydCB7XG5cdERhdGVQaXBlLFxuXHRDb21tb25Nb2R1bGUsXG5cdERBVEVfUElQRV9ERUZBVUxUX09QVElPTlMsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFic1wiO1xuaW1wb3J0IHtcblx0dHlwZSxcblx0VHlwZVZhbGlkYXRvckRpcmVjdGl2ZSxcbn0gZnJvbSBcIi4uL21vZGVscy9jaHItdmFsaWRhdG9ycy90eXBlLXZhbGlkYXRvclwiO1xuaW1wb3J0IHsgZGVjaW1hbCB9IGZyb20gXCIuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvZGVjaW1hbC12YWxpZGF0b3JcIjtcbmltcG9ydCB7IG1heERhdGUgfSBmcm9tIFwiLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL21heC1kYXRlLXZhbGlkYXRvclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbENvbGxlY3Rpb24ge1xuXHRba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VhcmNoRmlsdGVyIHtcblx0ZGlzcGxheTogc3RyaW5nO1xuXHRjYWxsYmFjaz86IEZ1bmN0aW9uO1xuXHR0b29sdGlwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250cm9sVmFsaWRhdGlvbiB7XG5cdHJ1bGU6IHN0cmluZztcblx0dmFsdWU/OiBhbnk7XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRyb2wge1xuXHRsYWJlbD86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRzcGFuPzogc3RyaW5nO1xuXHR3aWR0aD86IFwiY29sXCIgfCBcInJvd1wiO1xuXHRjb2w/OiBudW1iZXI7XG5cdHJvdz86IG51bWJlcjtcblx0dHlwZTpcblx0XHR8IFwidGV4dFwiXG5cdFx0fCBcInBhc3N3b3JkXCJcblx0XHR8IFwidGV4dEFyZWFcIlxuXHRcdHwgXCJudW1iZXJcIlxuXHRcdHwgXCJkYXRlXCJcblx0XHR8IFwiZGF0ZXRpbWVcIlxuXHRcdHwgXCJzZWFyY2hTZWxlY3RcIlxuXHRcdHwgXCJjb2xvclwiXG5cdFx0fCBcInRvZ2dsZVwiO1xuXHR2YWx1ZT86IGFueTtcblx0ZGF0YT86IGFueVtdIHwgbnVsbDtcblx0aWNvbj86IHN0cmluZztcblx0aWNvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cdGljb25DYWxsYmFja0Rpc2FibGVkPzogYm9vbGVhbjtcblx0aWNvblRvb2x0aXA/OiBzdHJpbmc7XG5cdGZuPzogKG9iamVjdDogYW55KSA9PiBzdHJpbmc7XG5cdGZpbHRlcnM/OiBJU2VhcmNoRmlsdGVyW107XG5cdHZhbGlkYXRpb25zPzogSUNvbnRyb2xWYWxpZGF0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1TZWN0aW9uIHtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGNvbnRyb2xzOiBJQ29udHJvbFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbCB7XG5cdFtrZXk6IHN0cmluZ106IGFueTtcbn1cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJhcHAtY2hyLWZvcm1cIixcblx0dGVtcGxhdGVVcmw6IFwiLi9jaHItZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuXHRzdHlsZVVybHM6IFtcblx0XHRcIi4vY2hyLWZvcm0uY29tcG9uZW50LnNjc3NcIixcblx0XHRcIi4uLy4uLy4uLy4uLy4uL3RhaWx3aW5kYnVpbGQuY3NzXCIsXG5cdFx0XCIuL2Noci1mb3JtLmNvbXBvbmVudC5zY3NzXCIsXG5cdF0sXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1zTW9kdWxlLFxuXHRcdE1hdFRvb2x0aXBNb2R1bGUsXG5cdFx0TWF0SWNvbk1vZHVsZSxcblx0XHRNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcblx0XHRNYXRFcnJvcixcblx0XHRDaHJTZWFyY2hTZWxlY3RDb21wb25lbnQsXG5cdFx0TWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuXHRcdERhdGVQaXBlLFxuXHRcdENvbW1vbk1vZHVsZSxcblx0XHRUeXBlVmFsaWRhdG9yRGlyZWN0aXZlLFxuXHRcdE1hdFRhYnNNb2R1bGUsXG5cdF0sXG5cdHByb3ZpZGVyczogW1xuXHRcdERhdGVQaXBlLFxuXHRcdHtcblx0XHRcdHByb3ZpZGU6IERBVEVfUElQRV9ERUZBVUxUX09QVElPTlMsXG5cdFx0XHR1c2VWYWx1ZTogeyBkYXRlRm9ybWF0OiBcInNob3J0RGF0ZVwiIH0sXG5cdFx0fSxcblx0XSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBDaHJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0QElucHV0KCkgc2VjdGlvbnM/OiBJRm9ybVNlY3Rpb25bXTtcblx0QElucHV0KCkgY29udHJvbHM/OiBJQ29udHJvbFtdO1xuXG5cdEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbjtcblx0QE91dHB1dCgpIHZhbGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblx0QElucHV0KCkgbW9kZWw6IGFueSA9IG51bGw7XG5cdEBPdXRwdXQoKSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXHRASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW47XG5cdEBPdXRwdXQoKSB2YWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdEBJbnB1dCgpIHN1Ym1pdD86IEZ1bmN0aW9uO1xuXG5cdEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgZm9ybUNoYW5nZTogRXZlbnRFbWl0dGVyPElGb3JtQ29udHJvbD4gPVxuXHRcdG5ldyBFdmVudEVtaXR0ZXI8SUZvcm1Db250cm9sPigpO1xuXG5cdEBJbnB1dCgpIHRhYkRpc3BsYXk6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRmb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmJ1aWxkZXIuZ3JvdXAoe30pO1xuXG5cdHByaXZhdGUgdmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cdHByaXZhdGUgY29udHJvbFR5cGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cdHByaXZhdGUgZmxhdHRlbmVkQ29udHJvbHM6IElDb250cm9sW10gPSBbXTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuXHRcdHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuXHRcdHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG5cdCkge1xuXHRcdGlmICh0aGlzLmNvbnRyb2xzICE9IG51bGwgJiYgdGhpcy5zZWN0aW9ucyAhPSBudWxsKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIllvdSBjYW4ndCB1c2UgYm90aCBjb250cm9scyBhbmQgc2VjdGlvbnMgaW4gdGhlIHNhbWUgZm9ybVwiXG5cdFx0XHQpO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5mbGF0dGVuZWRDb250cm9scyA9XG5cdFx0XHR0aGlzLnNlY3Rpb25zXG5cdFx0XHRcdD8ubWFwKChzKSA9PiBzLmNvbnRyb2xzKVxuXHRcdFx0XHQuZmxhdCgpXG5cdFx0XHRcdC5jb25jYXQodGhpcy5jb250cm9scyA/PyBbXSkgfHwgW107XG5cdFx0dGhpcy5pbml0TW9kZWwoKTtcblx0XHR0aGlzLmluaXRWYWx1ZXMoKTtcblx0XHR0aGlzLmluaXRDb250cm9scygpO1xuXHRcdHRoaXMuaW5pdExpc3RlbmVycygpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0TW9kZWwgPSAoKSA9PiB7XG5cdFx0aWYgKHRoaXMubW9kZWwgPT0gbnVsbCkgdGhpcy5tb2RlbCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGlmICghdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdKSB0aGlzLm1vZGVsW2NvbnRyb2wubmFtZV0gPSBjb250cm9sLnZhbHVlO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIGluaXRWYWx1ZXMgPSAoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGlmICghdGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSlcblx0XHRcdFx0dGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSA9IHRoaXMudG9JbnB1dFZhbHVlKFxuXHRcdFx0XHRcdGNvbnRyb2wsXG5cdFx0XHRcdFx0dGhpcy5tb2RlbFtjb250cm9sLm5hbWVdXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgaW5pdENvbnRyb2xzID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZvcm1Db250cm9scyA9IHt9IGFzIElGb3JtQ29udHJvbENvbGxlY3Rpb247XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLl9nZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdGlvbnMpO1xuXHRcdFx0Zm9ybUNvbnRyb2xzW2NvbnRyb2wubmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woXG5cdFx0XHRcdHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0sXG5cdFx0XHRcdHZhbGlkYXRvcnNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmNvbnRyb2xUeXBlc1tjb250cm9sLm5hbWVdID0gY29udHJvbC50eXBlO1xuXHRcdH1cblxuXHRcdHRoaXMuZm9ybSA9IHRoaXMuYnVpbGRlci5ncm91cChmb3JtQ29udHJvbHMpO1xuXHRcdHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG5cdH07XG5cblx0cHJpdmF0ZSBpbml0TGlzdGVuZXJzID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZXMpID0+IHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuXHRcdFx0XHRpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHR0aGlzLm1vZGVsW2tleV0gPSB2YWx1ZXNba2V5XTtcblx0XHRcdFx0XHR0aGlzLnZhbHVlc1trZXldID0gdmFsdWVzW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG5cdFx0XHR0aGlzLnZhbGlkQ2hhbmdlLmVtaXQodGhpcy52YWxpZCk7XG5cdFx0XHR0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG5cdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblx0XHR9KTtcblx0fTtcblxuXHR2YWx1ZSA9IChpbnB1dD86IHN0cmluZykgPT4gdGhpcy5nZXRWYWx1ZShpbnB1dCk7XG5cblx0Z2V0VmFsdWUgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHtcblx0XHRpZiAoaW5wdXQpIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHNbaW5wdXRdPy52YWx1ZTtcblx0XHRyZXR1cm4gdGhpcy5mb3JtLnZhbHVlO1xuXHR9O1xuXG5cdGlzVmFsaWQgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHtcblx0XHRpZiAoaW5wdXQpIHJldHVybiB0aGlzLmZvcm0uZ2V0KGlucHV0KT8udmFsaWQ7XG5cdFx0cmV0dXJuIHRoaXMudmFsaWQ7XG5cdH07XG5cblx0aXNDb250cm9sUmVxdWlyZWQgPSAoY29udHJvbDogSUNvbnRyb2wpID0+IHtcblx0XHRyZXR1cm4gY29udHJvbC52YWxpZGF0aW9ucz8uZmluZCgodikgPT4gdi5ydWxlLnRvTG93ZXJDYXNlKCkgPT0gXCJyZXF1aXJlZFwiKTtcblx0fTtcblxuXHRzZXRWYWx1ZSQgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0aWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkgdGhpcy5mb3JtLmdldChrZXkpPy5zZXRWYWx1ZSh2YWx1ZSk7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5mb3JtLmdldChrZXkpPy5zZXRWYWx1ZSh0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgZGF0ZUZvcm1hdCkpO1xuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9O1xuXG5cdHNldCA9IChtb2RlbDogYW55LCBkYXRlRm9ybWF0OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsKSkge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZSQoa2V5LCBtb2RlbFtrZXldLCBkYXRlRm9ybWF0KTtcblx0XHR9XG5cdH07XG5cblx0cGF0Y2hWYWx1ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB0aGlzLnNldFZhbHVlKGtleSwgdmFsdWUpO1xuXHRcdGVsc2UgdGhpcy5zZXRWYWx1ZShrZXksIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBkYXRlRm9ybWF0KSk7XG5cdFx0dGhpcy5mb3JtLmdldChrZXkpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cdFx0dGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuXHRcdHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9O1xuXG5cdHBhdGNoID0gKG1vZGVsOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG5cdFx0XHR0aGlzLnBhdGNoVmFsdWUoa2V5LCBtb2RlbFtrZXldLCBkYXRlRm9ybWF0KTtcblx0XHR9XG5cdH07XG5cblx0Y2hlY2tWYWxpZGl0eSA9ICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuXHRcdFx0dGhpcy5mb3JtLmdldChjb250cm9sLm5hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cdFx0fVxuXHRcdHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdH07XG5cblx0dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9ICh0b3VjaGVkOiBib29sZWFuID0gZmFsc2UpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcblx0XHRpZiAodG91Y2hlZCkgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHR0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblx0fTtcblxuXHRwcml2YXRlIHNldFZhbHVlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0dGhpcy5mb3JtLmdldChrZXkpPy5wYXRjaFZhbHVlKHZhbHVlKTtcblx0XHR0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7XG5cdH07XG5cblx0cHJpdmF0ZSB0b0lucHV0VmFsdWUgPSAoY29udHJvbDogSUNvbnRyb2wsIHZhbHVlOiBhbnkgfCBudWxsID0gbnVsbCkgPT4ge1xuXHRcdHN3aXRjaCAoY29udHJvbC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiZGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHQ/IHRoaXMudHJhbnNmb3JtRGF0ZSh2YWx1ZSwgXCJ5eXl5LU1NLWRkXCIpXG5cdFx0XHRcdFx0OiB0aGlzLnRyYW5zZm9ybURhdGUoY29udHJvbC52YWx1ZSwgXCJ5eXl5LU1NLWRkXCIpO1xuXHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XG5cdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdD8gdGhpcy50cmFuc2Zvcm1EYXRlKHZhbHVlLCBcInl5eXktTU0tZGRUSEg6bW1cIilcblx0XHRcdFx0XHQ6IHRoaXMudHJhbnNmb3JtRGF0ZShjb250cm9sLnZhbHVlLCBcInl5eXktTU0tZGRUSEg6bW1cIik7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgfHwgY29udHJvbC52YWx1ZTtcblx0XHR9XG5cdH07XG5cblx0cHJpdmF0ZSB0cmFuc2Zvcm1EYXRlID0gKHZhbHVlOiBhbnksIGZvcm1hdDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBmb3JtYXQpO1xuXHR9O1xuXG5cdHB1YmxpYyByZXNpemUgPSAodGV4dEFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBpbml0aWFsSGVpZ2h0ID0gdGV4dEFyZWEuc3R5bGUuaGVpZ2h0O1xuXHRcdHRleHRBcmVhLnN0eWxlLmhlaWdodCA9IGluaXRpYWxIZWlnaHQ7XG5cdFx0dGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gXCJcIiArIHRleHRBcmVhLnNjcm9sbEhlaWdodCArIFwicHhcIjtcblx0fTtcblxuXHRwdWJsaWMgZG9TdWJtaXQgPSAoKSA9PiB7XG5cdFx0dGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHRpZiAodGhpcy52YWxpZCAmJiB0aGlzLmZvcm0udmFsaWQpIHRoaXMuc3VibWl0Py4odGhpcy5mb3JtLnZhbHVlKTtcblx0fTtcblxuXHRwcml2YXRlIGRldGVjdENoYW5nZXMgPSAoKSA9PiB7XG5cdFx0dGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XG5cdFx0dGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cdH07XG5cblx0cHJpdmF0ZSBfZ2V0VmFsaWRhdG9ycyA9ICh2YWxpZGF0aW9ucz86IElDb250cm9sVmFsaWRhdGlvbltdKSA9PiB7XG5cdFx0Y29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXHRcdGlmICghdmFsaWRhdGlvbnMpIHJldHVybiB2YWxpZGF0b3JzO1xuXHRcdC8vU3dpdGNoIGNhc2UgYnJlYWtzIHRoZSBtb2JpbGUgYXBwIHNvIHdlJ2xsIGRvIGlmIHN0YXRlbWVudHNcblx0XHRmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbnMpIHtcblx0XHRcdGNvbnN0IHJ1bGUgPSB2YWxpZGF0aW9uLnJ1bGUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblx0XHRcdGlmIChydWxlID09IFwibWluXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgZXN0IHRyb3AgcGV0aXRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWF4XCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwicmVxdWlyZWRcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNlIGNoYW1wcyBlc3QgcmVxdWlzICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJlbWFpbFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgYWRyZXNzZSBlbWFpbCBuJ2VzdCBwYXMgdmFsaWRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtaW5sZW5ndGhcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBlc3QgdHJvcCBwZXRpdGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtYXhsZW5ndGhcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIHZhbGV1ciBlc3QgdHJvcCBncmFuZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJ0eXBlXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgbidlc3QgcGFzIHZhbGlkZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaCh0eXBlKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwiZGVjaW1hbFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IGBMZSBub21icmUgZGUgZMOpY2ltYWwgbidlc3QgcGFzIHZhbGlkZSAobWF4OiAke3ZhbGlkYXRpb24udmFsdWV9KSAhYDtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKGRlY2ltYWwodmFsaWRhdGlvbi52YWx1ZSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJ1bGUgPT0gXCJtYXhkYXRlXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gYENldHRlIGRhdGUgZXN0IHRyb3AgZ3JhbmRlICEgKG1heDogJHt2YWxpZGF0aW9uLnZhbHVlfSkgIWA7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChtYXhEYXRlKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZhbGlkYXRvcnM7XG5cdH07XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBtaW4taC01LzYgbXQtMlwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cImluaXRpYWxpemVkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJEaXNwbGF5IHx8ICFzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpbmdsZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbHM6IGNvbnRyb2xzfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFiRGlzcGxheSAmJiBzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlY3Rpb25UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlY3Rpb25zOiBzZWN0aW9uc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiRGlzcGxheSAmJiBzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYnNUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlY3RzOiBzZWN0aW9uc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGFic1RlbXBsYXRlIGxldC1zZWN0aW9ucz0nc2VjdHMnPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPG1hdC10YWItZ3JvdXA+XG4gICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxtYXQtdGFiIFtsYWJlbF09XCJzZWN0aW9uLnRpdGxlIHx8ICfDiXRhcGUgJyArIChpbmRleCArIDEpXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiIGNsYXNzPVwibXQtNFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgICAgIEBmb3IgKGN0cmwgb2Ygc2VjdGlvbi5jb250cm9sczsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0XG4gICAgICAgICAgbGFzdCA9XG4gICAgICAgICAgJGxhc3QpXG4gICAgICAgICAge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY3RybCwgaW5kZXg6IGluZGV4LCBsYXN0OiAkbGFzdH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtdGFiPlxuICAgICAgfVxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVGVtcGxhdGUgbGV0LWNvbnRyb2xzPVwiY29udHJvbHNcIj5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICBAZm9yIChjb250cm9sIG9mIGNvbnRyb2xzOyB0cmFjayBjb250cm9sOyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjb250cm9sLCBpbmRleDogaW5kZXgsIGxhc3Q6IGxhc3R9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWN0aW9uVGVtcGxhdGUgbGV0LXNlY3Rpb25zPSdzZWN0aW9ucyc+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICA8ZGl2PlxuICAgICAgQGlmIChzZWN0aW9uLnRpdGxlKSB7XG4gICAgICA8aDIgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LXhsIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlXCI+XG4gICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgIDwvaDI+XG4gICAgICB9XG4gICAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICAgIEBmb3IgKGNvbnRyb2wgb2Ygc2VjdGlvbi5jb250cm9sczsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0XG4gICAgICAgIGxhc3QgPVxuICAgICAgICAkbGFzdClcbiAgICAgICAge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjb250cm9sLCBpbmRleDogaW5kZXgsIGxhc3Q6ICRsYXN0fVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGluZGV4ICE9IChzZWN0aW9uc3x8W10pLmxlbmd0aCAtIDEgJiYgIWNvbXBhY3QpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJweS00XCI+XG4gICAgICAgIDxociBjbGFzcz1cIlwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZSBsZXQtY29udHJvbD0nY29udHJvbCcgbGV0LWxhc3Q9J2xhc3QnIGxldC1pbmRleD0naW5kZXgnPlxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgaC1taW4gbXQtMlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIFtuZ0NsYXNzXT1cIntcbiAgICAnc206Y29sLXNwYW4tMic6IChjb250cm9sLndpZHRoID09ICdyb3cnICYmICFjb21wYWN0KSB8fCBjb250cm9sLnR5cGU9PSd0ZXh0QXJlYScgJiYgY29tcGFjdCAmJiBjb250cm9sLndpZHRoICE9ICdyb3cnLFxuICAgICdzbTpjb2wtc3Bhbi00JzogY29udHJvbC53aWR0aCA9PSdyb3cnICYmIGNvbXBhY3QsXG4gICAgfVwiPlxuICAgIEBpZiAoY29udHJvbC50eXBlPT0nc2VhcmNoU2VsZWN0Jykge1xuICAgIDxkaXYgYXBwLWNoci1zZWFyY2gtc2VsZWN0IGNsYXNzPVwicmVsYXRpdmUgaW5wdXQgei0wIHctZnVsbFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCJcbiAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICBbZGF0YV09XCJjb250cm9sLmRhdGEgfHwgW11cIiBbZGlzcGxheV09XCJjb250cm9sLmZuIVwiIFtuYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICBbZmlsdGVyc109XCJjb250cm9sLmZpbHRlcnNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBhYnNvbHV0ZSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCIgW2Zvcl09XCJjb250cm9sLm5hbWVcIj57e1xuICAgICAgICBjb250cm9sLmxhYmVsXG4gICAgICAgIH19XG4gICAgICAgIEBpZiAoaXNDb250cm9sUmVxdWlyZWQoY29udHJvbCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDBcIj4qPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIDpcbiAgICAgICAgQGZvciAodmFsaWRhdGlvbiBvZiBjb250cm9sLnZhbGlkYXRpb25zOyB0cmFjayB2YWxpZGF0aW9uKSB7XG4gICAgICAgIEBpZiAoXG4gICAgICAgIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJlxuICAgICAgICBmb3JtLmhhc0Vycm9yKHZhbGlkYXRpb24ucnVsZS50b0xvd2VyQ2FzZSgpLCBjb250cm9sLm5hbWUpXG4gICAgICAgICkge1xuICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC1yZWQtNTAwIGRhcms6dGV4dC1yZWQtODAwXCI+e3sgdmFsaWRhdGlvbi5kaXNwbGF5IH19PC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHotMCB3LWZ1bGwgZ3JvdXAvaW5wdXRzIGNvbnRlbnRcIj5cbiAgICAgIDwhLS0gSGVyZSB3ZSB3aWxsICpuZ0lmIGVhY2ggdHlwZSBvZiBpbnB1dCBjYXVzZSBpdCdzIHRoZSBjbGVhbmVzdCB3YXkgSSBjYW4gaW1hZ2luZS0tPlxuICAgICAgPCEtLVRFWFQtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0ZXh0Jykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwidGV4dFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgW3ZhbHVlXT1cIm1vZGVsPy5bY29udHJvbC5uYW1lXSB8fCBjb250cm9sLnZhbHVlIHx8ICcnXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1QQVNTV09SRC0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tVEVYVCBBUkVBLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndGV4dEFyZWEnKSB7XG4gICAgICA8dGV4dGFyZWEgI3RleHRBcmVhIGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIChpbnB1dCk9XCJyZXNpemUodGV4dEFyZWEpXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cIm5vLXNjcm9sbGJhciBpbnB1dCAhcmVzaXplLW5vbmUgaGVpZ2h0LW5vcm1hbGl6ZWQgYmxvY2sgcHktMiBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCI+PC90ZXh0YXJlYT5cbiAgICAgIH1cbiAgICAgIDwhLS1OVU1CRVItLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdudW1iZXInKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tREFURS0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2RhdGUnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJkYXRlXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMiBweC0wIHctZnVsbCBoZWlnaHQtbm9ybWFsaXplZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdkYXRldGltZScpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMiBweC0wIHctZnVsbCBoZWlnaHQtbm9ybWFsaXplZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1DT0xPUi0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2NvbG9yJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiY29sb3JcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCIgc3R5bGU9XCJoZWlnaHQ6IDQycHg7XCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0xLjUgbS0wIHB4LTAgdy1mdWxsIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RvZ2dsZScpe1xuICAgICAgPGlucHV0ICN0b2dnbGUgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJoaWRkZW4gY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgdG9nZ2xlLXdyYXBwZXIgYmxvY2sgaW5wdXQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBib3JkZXItZ3JheS0zMDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlPy5jbGljaygpXCIgY2xhc3M9XCJyZWxhdGl2ZSBibG9jayBpbnB1dCB0b2dnbGVcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlICE9ICdzZWFyY2hTZWxlY3QnKSB7XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBhYnNvbHV0ZSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCIgW2Zvcl09XCJjb250cm9sLm5hbWVcIj57e1xuICAgICAgICBjb250cm9sLmxhYmVsXG4gICAgICAgIH19XG4gICAgICAgIEBpZihjb250cm9sLmxhYmVsICYmIGNvbnRyb2wubGFiZWwgIT0gJycgJiYgY29udHJvbC5sYWJlbCAhPSAnICcpe1xuICAgICAgICBAaWYgKGlzQ29udHJvbFJlcXVpcmVkKGNvbnRyb2wpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAodmFsaWRhdGlvbiBvZiBjb250cm9sLnZhbGlkYXRpb25zOyB0cmFjayB2YWxpZGF0aW9uKSB7XG4gICAgICAgIEBpZiAoXG4gICAgICAgIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJlxuICAgICAgICBmb3JtLmhhc0Vycm9yKHZhbGlkYXRpb24ucnVsZS50b0xvd2VyQ2FzZSgpLCBjb250cm9sLm5hbWUpXG4gICAgICAgICkge1xuICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC1yZWQtNTAwIGRhcms6dGV4dC1yZWQtODAwXCI+e3sgdmFsaWRhdGlvbi5kaXNwbGF5IH19PC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9sYWJlbD5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC5pY29uICYmICFkaXNhYmxlZCkge1xuICAgICAgPHNwYW5cbiAgICAgICAgW25nQ2xhc3NdPVwiY29udHJvbC5pY29uQ2FsbGJhY2tEaXNhYmxlZCA/ICd0ZXh0LWdyYXktNDAwIGRhcms6dGV4dC1ncmF5LTUwMCc6J3RleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlJ1wiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcC0yLjUgYm90dG9tLTAgcmlnaHQtMFwiIFttYXRUb29sdGlwXT1cImNvbnRyb2wuaWNvblRvb2x0aXAgfHwgJydcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgIChjbGljayk9XCIhY29udHJvbC5pY29uQ2FsbGJhY2tEaXNhYmxlZCAmJiBjb250cm9sLmljb25DYWxsYmFjaz8uKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udmFsdWUpXCI+PG1hdC1pY29uXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGlucHV0IGp1c3RpZnktY2VudGVyIGFsaWduLW1pZGRsZSBpdGVtcy1jZW50ZXIgY29udGVudC1jZW50ZXIgdGV4dC1sZ1wiPnt7Y29udHJvbC5pY29ufX08L21hdC1pY29uPjwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGNvbnRyb2wuc3Bhbikge1xuICAgIDxzcGFuXG4gICAgICBbbmdDbGFzc109XCIhZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMgfHwgIWZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCA/ICd0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMCcgOiAnIXRleHQtcmVkLTUwMCBkYXJrOiF0ZXh0LXJlZC04MDAnXCJcbiAgICAgIGNsYXNzPVwiaC0wIHRleHQteHNcIj57eyBjb250cm9sLnNwYW5cbiAgICAgIH19PC9zcGFuPlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -769,19 +769,31 @@ class ChrFormComponent {
|
|
|
769
769
|
this.isControlRequired = (control) => {
|
|
770
770
|
return control.validations?.find((v) => v.rule.toLowerCase() == "required");
|
|
771
771
|
};
|
|
772
|
+
this.setValue$ = (key, value, dateFormat = null) => {
|
|
773
|
+
if (dateFormat == null)
|
|
774
|
+
this.form.get(key)?.setValue(value);
|
|
775
|
+
else
|
|
776
|
+
this.form.get(key)?.setValue(this.datePipe.transform(value, dateFormat));
|
|
777
|
+
this.changeDetector.detectChanges();
|
|
778
|
+
};
|
|
779
|
+
this.set = (model, dateFormat = null) => {
|
|
780
|
+
for (const key of Object.keys(model)) {
|
|
781
|
+
this.setValue$(key, model[key], dateFormat);
|
|
782
|
+
}
|
|
783
|
+
};
|
|
772
784
|
this.patchValue = (key, value, dateFormat = null) => {
|
|
773
785
|
if (dateFormat == null)
|
|
774
786
|
this.setValue(key, value);
|
|
775
787
|
else
|
|
776
788
|
this.setValue(key, this.datePipe.transform(value, dateFormat));
|
|
777
789
|
this.form.get(key)?.updateValueAndValidity();
|
|
790
|
+
this.modelChange.emit(this.model);
|
|
778
791
|
this.detectChanges();
|
|
779
792
|
};
|
|
780
793
|
this.patch = (model, dateFormat = null) => {
|
|
781
794
|
for (const key of Object.keys(model)) {
|
|
782
795
|
this.patchValue(key, model[key], dateFormat);
|
|
783
796
|
}
|
|
784
|
-
this.detectChanges();
|
|
785
797
|
};
|
|
786
798
|
this.checkValidity = () => {
|
|
787
799
|
for (const control of this.flattenedControls) {
|
|
@@ -790,8 +802,10 @@ class ChrFormComponent {
|
|
|
790
802
|
this.valid = this.form.valid;
|
|
791
803
|
this.detectChanges();
|
|
792
804
|
};
|
|
793
|
-
this.updateValueAndValidity = () => {
|
|
805
|
+
this.updateValueAndValidity = (touched = false) => {
|
|
794
806
|
this.form.markAsDirty();
|
|
807
|
+
if (touched)
|
|
808
|
+
this.form.markAllAsTouched();
|
|
795
809
|
this.form.updateValueAndValidity({ emitEvent: true });
|
|
796
810
|
};
|
|
797
811
|
this.setValue = (key, value) => {
|