chrv-components 1.8.8 → 1.8.10
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.10.tgz +0 -0
- package/esm2022/lib/chr-form/chr-form.component.mjs +42 -6
- package/fesm2022/chrv-components.mjs +41 -5
- package/fesm2022/chrv-components.mjs.map +1 -1
- package/lib/chr-form/chr-form.component.d.ts +26 -2
- package/package.json +1 -1
- package/chrv-components-1.8.8.tgz +0 -0
|
Binary file
|
|
@@ -87,19 +87,53 @@ export class ChrFormComponent {
|
|
|
87
87
|
this.isControlRequired = (control) => {
|
|
88
88
|
return control.validations?.find((v) => v.rule.toLowerCase() == "required");
|
|
89
89
|
};
|
|
90
|
+
/**
|
|
91
|
+
* Update the value of a control WITHOUT triggering the modelChange event
|
|
92
|
+
* @param key input key (control name)
|
|
93
|
+
* @param value value to set
|
|
94
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
95
|
+
*/
|
|
96
|
+
this.setValue = (key, value, dateFormat = null) => {
|
|
97
|
+
if (dateFormat == null)
|
|
98
|
+
this.form.get(key)?.setValue(value);
|
|
99
|
+
else
|
|
100
|
+
this.form.get(key)?.setValue(this.datePipe.transform(value, dateFormat));
|
|
101
|
+
this.changeDetector.detectChanges();
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Update the value of the form's model WITHOUT triggering the modelChange event
|
|
105
|
+
* @param model the model to set
|
|
106
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
107
|
+
*/
|
|
108
|
+
this.set = (model, dateFormat = null) => {
|
|
109
|
+
for (const key of Object.keys(model)) {
|
|
110
|
+
this.setValue(key, model[key], dateFormat);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Updates the value of a control. This WILL trigger the modelChange event
|
|
115
|
+
* @param key input key (control name)
|
|
116
|
+
* @param value value to set
|
|
117
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
118
|
+
*/
|
|
90
119
|
this.patchValue = (key, value, dateFormat = null) => {
|
|
91
120
|
if (dateFormat == null)
|
|
92
|
-
this.setValue(key, value);
|
|
121
|
+
this.setValue$(key, value);
|
|
93
122
|
else
|
|
94
|
-
this.setValue(key, this.datePipe.transform(value, dateFormat));
|
|
123
|
+
this.setValue$(key, this.datePipe.transform(value, dateFormat));
|
|
95
124
|
this.form.get(key)?.updateValueAndValidity();
|
|
125
|
+
this.modelChange.emit(this.model);
|
|
96
126
|
this.detectChanges();
|
|
97
127
|
};
|
|
128
|
+
/**
|
|
129
|
+
* Updates the value of the form's model. This WILL trigger the modelChange event once for each input
|
|
130
|
+
* @param model model to set
|
|
131
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
132
|
+
*/
|
|
98
133
|
this.patch = (model, dateFormat = null) => {
|
|
99
134
|
for (const key of Object.keys(model)) {
|
|
100
135
|
this.patchValue(key, model[key], dateFormat);
|
|
101
136
|
}
|
|
102
|
-
this.detectChanges();
|
|
103
137
|
};
|
|
104
138
|
this.checkValidity = () => {
|
|
105
139
|
for (const control of this.flattenedControls) {
|
|
@@ -108,11 +142,13 @@ export class ChrFormComponent {
|
|
|
108
142
|
this.valid = this.form.valid;
|
|
109
143
|
this.detectChanges();
|
|
110
144
|
};
|
|
111
|
-
this.updateValueAndValidity = () => {
|
|
145
|
+
this.updateValueAndValidity = (touched = false) => {
|
|
112
146
|
this.form.markAsDirty();
|
|
147
|
+
if (touched)
|
|
148
|
+
this.form.markAllAsTouched();
|
|
113
149
|
this.form.updateValueAndValidity({ emitEvent: true });
|
|
114
150
|
};
|
|
115
|
-
this.setValue = (key, value) => {
|
|
151
|
+
this.setValue$ = (key, value) => {
|
|
116
152
|
this.form.get(key)?.patchValue(value);
|
|
117
153
|
this.values[key] = value;
|
|
118
154
|
};
|
|
@@ -265,4 +301,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
265
301
|
}], tabDisplay: [{
|
|
266
302
|
type: Input
|
|
267
303
|
}] } });
|
|
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
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWix1QkFBdUIsR0FNdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFlLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFHTixVQUFVLEVBQ1YsV0FBVyxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWix5QkFBeUIsR0FDekIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLElBQUksRUFDSixzQkFBc0IsR0FDdEIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FB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TTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUUsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdFLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdFZpZXdFbmNhcHN1bGF0aW9uLFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRPbkluaXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBWYWxpZGF0b3JGbiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG5cdEZvcm1CdWlsZGVyLFxuXHRGb3JtR3JvdXAsXG5cdFZhbGlkYXRvcnMsXG5cdEZvcm1Db250cm9sLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1hdEVycm9yIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XG5pbXBvcnQgeyBDaHJTZWFyY2hTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vY2hyLXNlYXJjaC1zZWxlY3QvY2hyLXNlYXJjaC1zZWxlY3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGVcIjtcbmltcG9ydCB7XG5cdERhdGVQaXBlLFxuXHRDb21tb25Nb2R1bGUsXG5cdERBVEVfUElQRV9ERUZBVUxUX09QVElPTlMsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFic1wiO1xuaW1wb3J0IHtcblx0dHlwZSxcblx0VHlwZVZhbGlkYXRvckRpcmVjdGl2ZSxcbn0gZnJvbSBcIi4uL21vZGVscy9jaHItdmFsaWRhdG9ycy90eXBlLXZhbGlkYXRvclwiO1xuaW1wb3J0IHsgZGVjaW1hbCB9IGZyb20gXCIuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvZGVjaW1hbC12YWxpZGF0b3JcIjtcbmltcG9ydCB7IG1heERhdGUgfSBmcm9tIFwiLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL21heC1kYXRlLXZhbGlkYXRvclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbENvbGxlY3Rpb24ge1xuXHRba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VhcmNoRmlsdGVyIHtcblx0ZGlzcGxheTogc3RyaW5nO1xuXHRjYWxsYmFjaz86IEZ1bmN0aW9uO1xuXHR0b29sdGlwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250cm9sVmFsaWRhdGlvbiB7XG5cdHJ1bGU6IHN0cmluZztcblx0dmFsdWU/OiBhbnk7XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRyb2wge1xuXHRsYWJlbD86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRzcGFuPzogc3RyaW5nO1xuXHR3aWR0aD86IFwiY29sXCIgfCBcInJvd1wiO1xuXHRjb2w/OiBudW1iZXI7XG5cdHJvdz86IG51bWJlcjtcblx0dHlwZTpcblx0XHR8IFwidGV4dFwiXG5cdFx0fCBcInBhc3N3b3JkXCJcblx0XHR8IFwidGV4dEFyZWFcIlxuXHRcdHwgXCJudW1iZXJcIlxuXHRcdHwgXCJkYXRlXCJcblx0XHR8IFwiZGF0ZXRpbWVcIlxuXHRcdHwgXCJzZWFyY2hTZWxlY3RcIlxuXHRcdHwgXCJjb2xvclwiXG5cdFx0fCBcInRvZ2dsZVwiO1xuXHR2YWx1ZT86IGFueTtcblx0ZGF0YT86IGFueVtdIHwgbnVsbDtcblx0aWNvbj86IHN0cmluZztcblx0aWNvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cdGljb25DYWxsYmFja0Rpc2FibGVkPzogYm9vbGVhbjtcblx0aWNvblRvb2x0aXA/OiBzdHJpbmc7XG5cdGZuPzogKG9iamVjdDogYW55KSA9PiBzdHJpbmc7XG5cdGZpbHRlcnM/OiBJU2VhcmNoRmlsdGVyW107XG5cdHZhbGlkYXRpb25zPzogSUNvbnRyb2xWYWxpZGF0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1TZWN0aW9uIHtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdGNvbnRyb2xzOiBJQ29udHJvbFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtQ29udHJvbCB7XG5cdFtrZXk6IHN0cmluZ106IGFueTtcbn1cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJhcHAtY2hyLWZvcm1cIixcblx0dGVtcGxhdGVVcmw6IFwiLi9jaHItZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuXHRzdHlsZVVybHM6IFtcblx0XHRcIi4vY2hyLWZvcm0uY29tcG9uZW50LnNjc3NcIixcblx0XHRcIi4uLy4uLy4uLy4uLy4uL3RhaWx3aW5kYnVpbGQuY3NzXCIsXG5cdFx0XCIuL2Noci1mb3JtLmNvbXBvbmVudC5zY3NzXCIsXG5cdF0sXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1zTW9kdWxlLFxuXHRcdE1hdFRvb2x0aXBNb2R1bGUsXG5cdFx0TWF0SWNvbk1vZHVsZSxcblx0XHRNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcblx0XHRNYXRFcnJvcixcblx0XHRDaHJTZWFyY2hTZWxlY3RDb21wb25lbnQsXG5cdFx0TWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuXHRcdERhdGVQaXBlLFxuXHRcdENvbW1vbk1vZHVsZSxcblx0XHRUeXBlVmFsaWRhdG9yRGlyZWN0aXZlLFxuXHRcdE1hdFRhYnNNb2R1bGUsXG5cdF0sXG5cdHByb3ZpZGVyczogW1xuXHRcdERhdGVQaXBlLFxuXHRcdHtcblx0XHRcdHByb3ZpZGU6IERBVEVfUElQRV9ERUZBVUxUX09QVElPTlMsXG5cdFx0XHR1c2VWYWx1ZTogeyBkYXRlRm9ybWF0OiBcInNob3J0RGF0ZVwiIH0sXG5cdFx0fSxcblx0XSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBDaHJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0QElucHV0KCkgc2VjdGlvbnM/OiBJRm9ybVNlY3Rpb25bXTtcblx0QElucHV0KCkgY29udHJvbHM/OiBJQ29udHJvbFtdO1xuXG5cdEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbjtcblx0QE91dHB1dCgpIHZhbGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cblx0QElucHV0KCkgbW9kZWw6IGFueSA9IG51bGw7XG5cdEBPdXRwdXQoKSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXHRASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW47XG5cdEBPdXRwdXQoKSB2YWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdEBJbnB1dCgpIHN1Ym1pdD86IEZ1bmN0aW9uO1xuXG5cdEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgZm9ybUNoYW5nZTogRXZlbnRFbWl0dGVyPElGb3JtQ29udHJvbD4gPVxuXHRcdG5ldyBFdmVudEVtaXR0ZXI8SUZvcm1Db250cm9sPigpO1xuXG5cdEBJbnB1dCgpIHRhYkRpc3BsYXk6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRmb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmJ1aWxkZXIuZ3JvdXAoe30pO1xuXG5cdHByaXZhdGUgdmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cdHByaXZhdGUgY29udHJvbFR5cGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cdHByaXZhdGUgZmxhdHRlbmVkQ29udHJvbHM6IElDb250cm9sW10gPSBbXTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuXHRcdHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuXHRcdHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG5cdCkge1xuXHRcdGlmICh0aGlzLmNvbnRyb2xzICE9IG51bGwgJiYgdGhpcy5zZWN0aW9ucyAhPSBudWxsKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIllvdSBjYW4ndCB1c2UgYm90aCBjb250cm9scyBhbmQgc2VjdGlvbnMgaW4gdGhlIHNhbWUgZm9ybVwiXG5cdFx0XHQpO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5mbGF0dGVuZWRDb250cm9scyA9XG5cdFx0XHR0aGlzLnNlY3Rpb25zXG5cdFx0XHRcdD8ubWFwKChzKSA9PiBzLmNvbnRyb2xzKVxuXHRcdFx0XHQuZmxhdCgpXG5cdFx0XHRcdC5jb25jYXQodGhpcy5jb250cm9scyA/PyBbXSkgfHwgW107XG5cdFx0dGhpcy5pbml0TW9kZWwoKTtcblx0XHR0aGlzLmluaXRWYWx1ZXMoKTtcblx0XHR0aGlzLmluaXRDb250cm9scygpO1xuXHRcdHRoaXMuaW5pdExpc3RlbmVycygpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBpbml0TW9kZWwgPSAoKSA9PiB7XG5cdFx0aWYgKHRoaXMubW9kZWwgPT0gbnVsbCkgdGhpcy5tb2RlbCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGlmICghdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdKSB0aGlzLm1vZGVsW2NvbnRyb2wubmFtZV0gPSBjb250cm9sLnZhbHVlO1xuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIGluaXRWYWx1ZXMgPSAoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGlmICghdGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSlcblx0XHRcdFx0dGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSA9IHRoaXMudG9JbnB1dFZhbHVlKFxuXHRcdFx0XHRcdGNvbnRyb2wsXG5cdFx0XHRcdFx0dGhpcy5tb2RlbFtjb250cm9sLm5hbWVdXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgaW5pdENvbnRyb2xzID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZvcm1Db250cm9scyA9IHt9IGFzIElGb3JtQ29udHJvbENvbGxlY3Rpb247XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcblx0XHRcdGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLl9nZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdGlvbnMpO1xuXHRcdFx0Zm9ybUNvbnRyb2xzW2NvbnRyb2wubmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woXG5cdFx0XHRcdHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0sXG5cdFx0XHRcdHZhbGlkYXRvcnNcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmNvbnRyb2xUeXBlc1tjb250cm9sLm5hbWVdID0gY29udHJvbC50eXBlO1xuXHRcdH1cblxuXHRcdHRoaXMuZm9ybSA9IHRoaXMuYnVpbGRlci5ncm91cChmb3JtQ29udHJvbHMpO1xuXHRcdHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG5cdH07XG5cblx0cHJpdmF0ZSBpbml0TGlzdGVuZXJzID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZXMpID0+IHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuXHRcdFx0XHRpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHR0aGlzLm1vZGVsW2tleV0gPSB2YWx1ZXNba2V5XTtcblx0XHRcdFx0XHR0aGlzLnZhbHVlc1trZXldID0gdmFsdWVzW2tleV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG5cdFx0XHR0aGlzLnZhbGlkQ2hhbmdlLmVtaXQodGhpcy52YWxpZCk7XG5cdFx0XHR0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG5cdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblx0XHR9KTtcblx0fTtcblxuXHR2YWx1ZSA9IChpbnB1dD86IHN0cmluZykgPT4gdGhpcy5nZXRWYWx1ZShpbnB1dCk7XG5cblx0Z2V0VmFsdWUgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHtcblx0XHRpZiAoaW5wdXQpIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHNbaW5wdXRdPy52YWx1ZTtcblx0XHRyZXR1cm4gdGhpcy5mb3JtLnZhbHVlO1xuXHR9O1xuXG5cdGlzVmFsaWQgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHtcblx0XHRpZiAoaW5wdXQpIHJldHVybiB0aGlzLmZvcm0uZ2V0KGlucHV0KT8udmFsaWQ7XG5cdFx0cmV0dXJuIHRoaXMudmFsaWQ7XG5cdH07XG5cblx0aXNDb250cm9sUmVxdWlyZWQgPSAoY29udHJvbDogSUNvbnRyb2wpID0+IHtcblx0XHRyZXR1cm4gY29udHJvbC52YWxpZGF0aW9ucz8uZmluZCgodikgPT4gdi5ydWxlLnRvTG93ZXJDYXNlKCkgPT0gXCJyZXF1aXJlZFwiKTtcblx0fTtcblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgV0lUSE9VVCB0cmlnZ2VyaW5nIHRoZSBtb2RlbENoYW5nZSBldmVudFxuXHQgKiBAcGFyYW0ga2V5IGlucHV0IGtleSAoY29udHJvbCBuYW1lKVxuXHQgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gc2V0XG5cdCAqIEBwYXJhbSBkYXRlRm9ybWF0IG9wdGlvbmFsIGRhdGUgZm9ybWF0IGZvciBkYXRlIGFuZCBkYXRldGltZSBpbnB1dHNcblx0ICovXG5cdHNldFZhbHVlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkYXRlRm9ybWF0OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuXHRcdGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0VmFsdWUodmFsdWUpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0VmFsdWUodGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGRhdGVGb3JtYXQpKTtcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblx0fTtcblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSdzIG1vZGVsIFdJVEhPVVQgdHJpZ2dlcmluZyB0aGUgbW9kZWxDaGFuZ2UgZXZlbnRcblx0ICogQHBhcmFtIG1vZGVsIHRoZSBtb2RlbCB0byBzZXRcblx0ICogQHBhcmFtIGRhdGVGb3JtYXQgb3B0aW9uYWwgZGF0ZSBmb3JtYXQgZm9yIGRhdGUgYW5kIGRhdGV0aW1lIGlucHV0c1xuXHQgKi9cblx0c2V0ID0gKG1vZGVsOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG5cdFx0XHR0aGlzLnNldFZhbHVlKGtleSwgbW9kZWxba2V5XSwgZGF0ZUZvcm1hdCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wuIFRoaXMgV0lMTCB0cmlnZ2VyIHRoZSBtb2RlbENoYW5nZSBldmVudFxuXHQgKiBAcGFyYW0ga2V5IGlucHV0IGtleSAoY29udHJvbCBuYW1lKVxuXHQgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gc2V0XG5cdCAqIEBwYXJhbSBkYXRlRm9ybWF0IG9wdGlvbmFsIGRhdGUgZm9ybWF0IGZvciBkYXRlIGFuZCBkYXRldGltZSBpbnB1dHNcblx0ICovXG5cdHBhdGNoVmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0aWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkgdGhpcy5zZXRWYWx1ZSQoa2V5LCB2YWx1ZSk7XG5cdFx0ZWxzZSB0aGlzLnNldFZhbHVlJChrZXksIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCBkYXRlRm9ybWF0KSk7XG5cdFx0dGhpcy5mb3JtLmdldChrZXkpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cdFx0dGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuXHRcdHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSdzIG1vZGVsLiBUaGlzIFdJTEwgdHJpZ2dlciB0aGUgbW9kZWxDaGFuZ2UgZXZlbnQgb25jZSBmb3IgZWFjaCBpbnB1dFxuXHQgKiBAcGFyYW0gbW9kZWwgbW9kZWwgdG8gc2V0XG5cdCAqIEBwYXJhbSBkYXRlRm9ybWF0IG9wdGlvbmFsIGRhdGUgZm9ybWF0IGZvciBkYXRlIGFuZCBkYXRldGltZSBpbnB1dHNcblx0ICovXG5cdHBhdGNoID0gKG1vZGVsOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG5cdFx0XHR0aGlzLnBhdGNoVmFsdWUoa2V5LCBtb2RlbFtrZXldLCBkYXRlRm9ybWF0KTtcblx0XHR9XG5cdH07XG5cblx0Y2hlY2tWYWxpZGl0eSA9ICgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuXHRcdFx0dGhpcy5mb3JtLmdldChjb250cm9sLm5hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cdFx0fVxuXHRcdHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdH07XG5cblx0dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9ICh0b3VjaGVkOiBib29sZWFuID0gZmFsc2UpID0+IHtcblx0XHR0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcblx0XHRpZiAodG91Y2hlZCkgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblx0XHR0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblx0fTtcblxuXHRwcml2YXRlIHNldFZhbHVlJCA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdHRoaXMuZm9ybS5nZXQoa2V5KT8ucGF0Y2hWYWx1ZSh2YWx1ZSk7XG5cdFx0dGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlO1xuXHR9O1xuXG5cdHByaXZhdGUgdG9JbnB1dFZhbHVlID0gKGNvbnRyb2w6IElDb250cm9sLCB2YWx1ZTogYW55IHwgbnVsbCA9IG51bGwpID0+IHtcblx0XHRzd2l0Y2ggKGNvbnRyb2wudHlwZSkge1xuXHRcdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0PyB0aGlzLnRyYW5zZm9ybURhdGUodmFsdWUsIFwieXl5eS1NTS1kZFwiKVxuXHRcdFx0XHRcdDogdGhpcy50cmFuc2Zvcm1EYXRlKGNvbnRyb2wudmFsdWUsIFwieXl5eS1NTS1kZFwiKTtcblx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHQ/IHRoaXMudHJhbnNmb3JtRGF0ZSh2YWx1ZSwgXCJ5eXl5LU1NLWRkVEhIOm1tXCIpXG5cdFx0XHRcdFx0OiB0aGlzLnRyYW5zZm9ybURhdGUoY29udHJvbC52YWx1ZSwgXCJ5eXl5LU1NLWRkVEhIOm1tXCIpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIHx8IGNvbnRyb2wudmFsdWU7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgdHJhbnNmb3JtRGF0ZSA9ICh2YWx1ZTogYW55LCBmb3JtYXQ6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgZm9ybWF0KTtcblx0fTtcblxuXHRwdWJsaWMgcmVzaXplID0gKHRleHRBcmVhOiBIVE1MVGV4dEFyZWFFbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgaW5pdGlhbEhlaWdodCA9IHRleHRBcmVhLnN0eWxlLmhlaWdodDtcblx0XHR0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSBpbml0aWFsSGVpZ2h0O1xuXHRcdHRleHRBcmVhLnN0eWxlLmhlaWdodCA9IFwiXCIgKyB0ZXh0QXJlYS5zY3JvbGxIZWlnaHQgKyBcInB4XCI7XG5cdH07XG5cblx0cHVibGljIGRvU3VibWl0ID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0aWYgKHRoaXMudmFsaWQgJiYgdGhpcy5mb3JtLnZhbGlkKSB0aGlzLnN1Ym1pdD8uKHRoaXMuZm9ybS52YWx1ZSk7XG5cdH07XG5cblx0cHJpdmF0ZSBkZXRlY3RDaGFuZ2VzID0gKCkgPT4ge1xuXHRcdHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuXHRcdHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9O1xuXG5cdHByaXZhdGUgX2dldFZhbGlkYXRvcnMgPSAodmFsaWRhdGlvbnM/OiBJQ29udHJvbFZhbGlkYXRpb25bXSkgPT4ge1xuXHRcdGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcblx0XHRpZiAoIXZhbGlkYXRpb25zKSByZXR1cm4gdmFsaWRhdG9ycztcblx0XHQvL1N3aXRjaCBjYXNlIGJyZWFrcyB0aGUgbW9iaWxlIGFwcCBzbyB3ZSdsbCBkbyBpZiBzdGF0ZW1lbnRzXG5cdFx0Zm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zKSB7XG5cdFx0XHRjb25zdCBydWxlID0gdmFsaWRhdGlvbi5ydWxlLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1pblwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbih2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcIm1heFwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIGdyYW5kZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heCh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcInJlcXVpcmVkXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZSBjaGFtcHMgZXN0IHJlcXVpcyAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwiZW1haWxcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBcIkNldHRlIGFkcmVzc2UgZW1haWwgbidlc3QgcGFzIHZhbGlkZSAhXCI7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWlubGVuZ3RoXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgZXN0IHRyb3AgcGV0aXRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWF4bGVuZ3RoXCIpIHtcblx0XHRcdFx0dmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICFcIjtcblx0XHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwidHlwZVwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2godHlwZSh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocnVsZSA9PSBcImRlY2ltYWxcIikge1xuXHRcdFx0XHR2YWxpZGF0aW9uLmRpc3BsYXkgPSBgTGUgbm9tYnJlIGRlIGTDqWNpbWFsIG4nZXN0IHBhcyB2YWxpZGUgKG1heDogJHt2YWxpZGF0aW9uLnZhbHVlfSkgIWA7XG5cdFx0XHRcdHZhbGlkYXRvcnMucHVzaChkZWNpbWFsKHZhbGlkYXRpb24udmFsdWUpKTtcblx0XHRcdH1cblx0XHRcdGlmIChydWxlID09IFwibWF4ZGF0ZVwiKSB7XG5cdFx0XHRcdHZhbGlkYXRpb24uZGlzcGxheSA9IGBDZXR0ZSBkYXRlIGVzdCB0cm9wIGdyYW5kZSAhIChtYXg6ICR7dmFsaWRhdGlvbi52YWx1ZX0pICFgO1xuXHRcdFx0XHR2YWxpZGF0b3JzLnB1c2gobWF4RGF0ZSh2YWxpZGF0aW9uLnZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2YWxpZGF0b3JzO1xuXHR9O1xufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgbWluLWgtNS82IG10LTJcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCJpbml0aWFsaXplZFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFiRGlzcGxheSB8fCAhc2VjdGlvbnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzaW5nbGVUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2xzOiBjb250cm9sc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYkRpc3BsYXkgJiYgc2VjdGlvbnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWN0aW9uVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzZWN0aW9uczogc2VjdGlvbnN9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYkRpc3BsYXkgJiYgc2VjdGlvbnNcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJzVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzZWN0czogc2VjdGlvbnN9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RhYnNUZW1wbGF0ZSBsZXQtc2VjdGlvbnM9J3NlY3RzJz5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9uczsgdHJhY2sgc2VjdGlvbjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICA8bWF0LXRhYiBbbGFiZWxdPVwic2VjdGlvbi50aXRsZSB8fCAnw4l0YXBlICcgKyAoaW5kZXggKyAxKVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIiBjbGFzcz1cIm10LTRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbXBhY3QgPyAnZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTQnOidncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtMidcIj5cbiAgICAgICAgICBAZm9yIChjdHJsIG9mIHNlY3Rpb24uY29udHJvbHM7IHRyYWNrIGluZGV4OyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldFxuICAgICAgICAgIGxhc3QgPVxuICAgICAgICAgICRsYXN0KVxuICAgICAgICAgIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2NvbnRyb2w6IGN0cmwsIGluZGV4OiBpbmRleCwgbGFzdDogJGxhc3R9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIH1cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZVRlbXBsYXRlIGxldC1jb250cm9scz1cImNvbnRyb2xzXCI+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgQGZvciAoY29udHJvbCBvZiBjb250cm9sczsgdHJhY2sgY29udHJvbDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY29udHJvbCwgaW5kZXg6IGluZGV4LCBsYXN0OiBsYXN0fVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VjdGlvblRlbXBsYXRlIGxldC1zZWN0aW9ucz0nc2VjdGlvbnMnPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgQGZvciAoc2VjdGlvbiBvZiBzZWN0aW9uczsgdHJhY2sgc2VjdGlvbjsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgPGRpdj5cbiAgICAgIEBpZiAoc2VjdGlvbi50aXRsZSkge1xuICAgICAgPGgyIGNsYXNzPVwibWItMiBmb250LWJvbGQgdGV4dC14bCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZVwiPlxuICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICA8L2gyPlxuICAgICAgfVxuICAgICAgPGRpdiAqbmdJZj1cImluaXRpYWxpemVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgICBAZm9yIChjb250cm9sIG9mIHNlY3Rpb24uY29udHJvbHM7IHRyYWNrIGluZGV4OyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldFxuICAgICAgICBsYXN0ID1cbiAgICAgICAgJGxhc3QpXG4gICAgICAgIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY29udHJvbCwgaW5kZXg6IGluZGV4LCBsYXN0OiAkbGFzdH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChpbmRleCAhPSAoc2VjdGlvbnN8fFtdKS5sZW5ndGggLSAxICYmICFjb21wYWN0KSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicHktNFwiPlxuICAgICAgICA8aHIgY2xhc3M9XCJcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgfVxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGUgbGV0LWNvbnRyb2w9J2NvbnRyb2wnIGxldC1sYXN0PSdsYXN0JyBsZXQtaW5kZXg9J2luZGV4Jz5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGgtbWluIG10LTJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBbbmdDbGFzc109XCJ7XG4gICAgJ3NtOmNvbC1zcGFuLTInOiAoY29udHJvbC53aWR0aCA9PSAncm93JyAmJiAhY29tcGFjdCkgfHwgY29udHJvbC50eXBlPT0ndGV4dEFyZWEnICYmIGNvbXBhY3QgJiYgY29udHJvbC53aWR0aCAhPSAncm93JyxcbiAgICAnc206Y29sLXNwYW4tNCc6IGNvbnRyb2wud2lkdGggPT0ncm93JyAmJiBjb21wYWN0LFxuICAgIH1cIj5cbiAgICBAaWYgKGNvbnRyb2wudHlwZT09J3NlYXJjaFNlbGVjdCcpIHtcbiAgICA8ZGl2IGFwcC1jaHItc2VhcmNoLXNlbGVjdCBjbGFzcz1cInJlbGF0aXZlIGlucHV0IHotMCB3LWZ1bGxcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiXG4gICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgW2RhdGFdPVwiY29udHJvbC5kYXRhIHx8IFtdXCIgW2Rpc3BsYXldPVwiY29udHJvbC5mbiFcIiBbbmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgW2ZpbHRlcnNdPVwiY29udHJvbC5maWx0ZXJzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgYWJzb2x1dGUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMFwiIFtmb3JdPVwiY29udHJvbC5uYW1lXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYgKGlzQ29udHJvbFJlcXVpcmVkKGNvbnRyb2wpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiZcbiAgICAgICAgZm9ybS5oYXNFcnJvcih2YWxpZGF0aW9uLnJ1bGUudG9Mb3dlckNhc2UoKSwgY29udHJvbC5uYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cInRleHQtcmVkLTUwMCBkYXJrOnRleHQtcmVkLTgwMFwiPnt7IHZhbGlkYXRpb24uZGlzcGxheSB9fTwvbWF0LWVycm9yPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB6LTAgdy1mdWxsIGdyb3VwL2lucHV0cyBjb250ZW50XCI+XG4gICAgICA8IS0tIEhlcmUgd2Ugd2lsbCAqbmdJZiBlYWNoIHR5cGUgb2YgaW5wdXQgY2F1c2UgaXQncyB0aGUgY2xlYW5lc3Qgd2F5IEkgY2FuIGltYWdpbmUtLT5cbiAgICAgIDwhLS1URVhULS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cInRleHRcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIFt2YWx1ZV09XCJtb2RlbD8uW2NvbnRyb2wubmFtZV0gfHwgY29udHJvbC52YWx1ZSB8fCAnJ1wiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tUEFTU1dPUkQtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdwYXNzd29yZCcpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMi41IHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLVRFWFQgQVJFQS0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RleHRBcmVhJykge1xuICAgICAgPHRleHRhcmVhICN0ZXh0QXJlYSBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgICAoaW5wdXQpPVwicmVzaXplKHRleHRBcmVhKVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJuby1zY3JvbGxiYXIgaW5wdXQgIXJlc2l6ZS1ub25lIGhlaWdodC1ub3JtYWxpemVkIGJsb2NrIHB5LTIgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiPjwvdGV4dGFyZWE+XG4gICAgICB9XG4gICAgICA8IS0tTlVNQkVSLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnbnVtYmVyJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgcGxhY2Vob2xkZXI9XCIgXCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMi41IHB4LTAgdy1mdWxsIHRleHQtc20gdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBhcHBlYXJhbmNlLW5vbmUgZGFyazpib3JkZXItZ3JheS02MDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLURBVEUtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdkYXRlJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiZGF0ZVwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIgcHgtMCB3LWZ1bGwgaGVpZ2h0LW5vcm1hbGl6ZWQgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAnZGF0ZXRpbWUnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIgcHgtMCB3LWZ1bGwgaGVpZ2h0LW5vcm1hbGl6ZWQgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tQ09MT1ItLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdjb2xvcicpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImNvbG9yXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiIHN0eWxlPVwiaGVpZ2h0OiA0MnB4O1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMS41IG0tMCBweC0wIHctZnVsbCBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0b2dnbGUnKXtcbiAgICAgIDxpbnB1dCAjdG9nZ2xlIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiaGlkZGVuIGNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIiAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHRvZ2dsZS13cmFwcGVyIGJsb2NrIGlucHV0IGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMzAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCI+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInRvZ2dsZT8uY2xpY2soKVwiIGNsYXNzPVwicmVsYXRpdmUgYmxvY2sgaW5wdXQgdG9nZ2xlXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSAhPSAnc2VhcmNoU2VsZWN0Jykge1xuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgYWJzb2x1dGUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMFwiIFtmb3JdPVwiY29udHJvbC5uYW1lXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYoY29udHJvbC5sYWJlbCAmJiBjb250cm9sLmxhYmVsICE9ICcnICYmIGNvbnRyb2wubGFiZWwgIT0gJyAnKXtcbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiZcbiAgICAgICAgZm9ybS5oYXNFcnJvcih2YWxpZGF0aW9uLnJ1bGUudG9Mb3dlckNhc2UoKSwgY29udHJvbC5uYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cInRleHQtcmVkLTUwMCBkYXJrOnRleHQtcmVkLTgwMFwiPnt7IHZhbGlkYXRpb24uZGlzcGxheSB9fTwvbWF0LWVycm9yPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbnRyb2wuaWNvbiAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIDxzcGFuXG4gICAgICAgIFtuZ0NsYXNzXT1cImNvbnRyb2wuaWNvbkNhbGxiYWNrRGlzYWJsZWQgPyAndGV4dC1ncmF5LTQwMCBkYXJrOnRleHQtZ3JheS01MDAnOid0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSdcIlxuICAgICAgICBjbGFzcz1cImFic29sdXRlIHAtMi41IGJvdHRvbS0wIHJpZ2h0LTBcIiBbbWF0VG9vbHRpcF09XCJjb250cm9sLmljb25Ub29sdGlwIHx8ICcnXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAoY2xpY2spPVwiIWNvbnRyb2wuaWNvbkNhbGxiYWNrRGlzYWJsZWQgJiYgY29udHJvbC5pY29uQ2FsbGJhY2s/Lihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnZhbHVlKVwiPjxtYXQtaWNvblxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpbnB1dCBqdXN0aWZ5LWNlbnRlciBhbGlnbi1taWRkbGUgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyIHRleHQtbGdcIj57e2NvbnRyb2wuaWNvbn19PC9tYXQtaWNvbj48L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgQGlmIChjb250cm9sLnNwYW4pIHtcbiAgICA8c3BhblxuICAgICAgW25nQ2xhc3NdPVwiIWZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzIHx8ICFmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgPyAndGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS0zMDAnIDogJyF0ZXh0LXJlZC01MDAgZGFyazohdGV4dC1yZWQtODAwJ1wiXG4gICAgICBjbGFzcz1cImgtMCB0ZXh0LXhzXCI+e3sgY29udHJvbC5zcGFuXG4gICAgICB9fTwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -769,19 +769,53 @@ class ChrFormComponent {
|
|
|
769
769
|
this.isControlRequired = (control) => {
|
|
770
770
|
return control.validations?.find((v) => v.rule.toLowerCase() == "required");
|
|
771
771
|
};
|
|
772
|
+
/**
|
|
773
|
+
* Update the value of a control WITHOUT triggering the modelChange event
|
|
774
|
+
* @param key input key (control name)
|
|
775
|
+
* @param value value to set
|
|
776
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
777
|
+
*/
|
|
778
|
+
this.setValue = (key, value, dateFormat = null) => {
|
|
779
|
+
if (dateFormat == null)
|
|
780
|
+
this.form.get(key)?.setValue(value);
|
|
781
|
+
else
|
|
782
|
+
this.form.get(key)?.setValue(this.datePipe.transform(value, dateFormat));
|
|
783
|
+
this.changeDetector.detectChanges();
|
|
784
|
+
};
|
|
785
|
+
/**
|
|
786
|
+
* Update the value of the form's model WITHOUT triggering the modelChange event
|
|
787
|
+
* @param model the model to set
|
|
788
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
789
|
+
*/
|
|
790
|
+
this.set = (model, dateFormat = null) => {
|
|
791
|
+
for (const key of Object.keys(model)) {
|
|
792
|
+
this.setValue(key, model[key], dateFormat);
|
|
793
|
+
}
|
|
794
|
+
};
|
|
795
|
+
/**
|
|
796
|
+
* Updates the value of a control. This WILL trigger the modelChange event
|
|
797
|
+
* @param key input key (control name)
|
|
798
|
+
* @param value value to set
|
|
799
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
800
|
+
*/
|
|
772
801
|
this.patchValue = (key, value, dateFormat = null) => {
|
|
773
802
|
if (dateFormat == null)
|
|
774
|
-
this.setValue(key, value);
|
|
803
|
+
this.setValue$(key, value);
|
|
775
804
|
else
|
|
776
|
-
this.setValue(key, this.datePipe.transform(value, dateFormat));
|
|
805
|
+
this.setValue$(key, this.datePipe.transform(value, dateFormat));
|
|
777
806
|
this.form.get(key)?.updateValueAndValidity();
|
|
807
|
+
this.modelChange.emit(this.model);
|
|
778
808
|
this.detectChanges();
|
|
779
809
|
};
|
|
810
|
+
/**
|
|
811
|
+
* Updates the value of the form's model. This WILL trigger the modelChange event once for each input
|
|
812
|
+
* @param model model to set
|
|
813
|
+
* @param dateFormat optional date format for date and datetime inputs
|
|
814
|
+
*/
|
|
780
815
|
this.patch = (model, dateFormat = null) => {
|
|
781
816
|
for (const key of Object.keys(model)) {
|
|
782
817
|
this.patchValue(key, model[key], dateFormat);
|
|
783
818
|
}
|
|
784
|
-
this.detectChanges();
|
|
785
819
|
};
|
|
786
820
|
this.checkValidity = () => {
|
|
787
821
|
for (const control of this.flattenedControls) {
|
|
@@ -790,11 +824,13 @@ class ChrFormComponent {
|
|
|
790
824
|
this.valid = this.form.valid;
|
|
791
825
|
this.detectChanges();
|
|
792
826
|
};
|
|
793
|
-
this.updateValueAndValidity = () => {
|
|
827
|
+
this.updateValueAndValidity = (touched = false) => {
|
|
794
828
|
this.form.markAsDirty();
|
|
829
|
+
if (touched)
|
|
830
|
+
this.form.markAllAsTouched();
|
|
795
831
|
this.form.updateValueAndValidity({ emitEvent: true });
|
|
796
832
|
};
|
|
797
|
-
this.setValue = (key, value) => {
|
|
833
|
+
this.setValue$ = (key, value) => {
|
|
798
834
|
this.form.get(key)?.patchValue(value);
|
|
799
835
|
this.values[key] = value;
|
|
800
836
|
};
|