@cqa-lib/cqa-ui 1.1.201 → 1.1.202
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/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +75 -13
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +3 -3
- package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +5 -6
- package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +148 -0
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +7 -5
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +7 -5
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +6 -5
- package/esm2020/lib/ui-kit.module.mjs +6 -6
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/cqa-lib-cqa-ui.mjs +192 -617
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +195 -612
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +10 -2
- package/lib/step-builder/step-builder-group/step-builder-group.component.d.ts +48 -0
- package/lib/ui-kit.module.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/styles.css +1 -1
- package/esm2020/lib/step-builder/step-builder-api/step-builder-api.component.mjs +0 -636
- package/lib/step-builder/step-builder-api/step-builder-api.component.d.ts +0 -121
|
@@ -445,10 +445,12 @@ export class TestCaseConditionStepComponent {
|
|
|
445
445
|
if (typeof event === 'object' && event !== null && 'expanded' in event) {
|
|
446
446
|
// Object format from step-group: {config, expanded}
|
|
447
447
|
step.expanded = event.expanded;
|
|
448
|
-
//
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
448
|
+
// Check if the event's config is a step-group (not the current step)
|
|
449
|
+
// This ensures nested step-group events bubble up correctly
|
|
450
|
+
if (this.isStepGroup(event.config)) {
|
|
451
|
+
// Re-emit the toggleExpanded event with the object format, preserving the original config
|
|
452
|
+
// Cast to satisfy TypeScript - the renderer accepts TestCaseStepConfig which includes StepGroupConfig
|
|
453
|
+
this.toggleExpanded.emit({ config: event.config, expanded: event.expanded });
|
|
452
454
|
}
|
|
453
455
|
}
|
|
454
456
|
else {
|
|
@@ -791,4 +793,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
791
793
|
}], clickAction: [{
|
|
792
794
|
type: Output
|
|
793
795
|
}] } });
|
|
794
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9jb25kaXRpb24tc3RlcC9jb25kaXRpb24tc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2NvbmRpdGlvbi1zdGVwL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXdDLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBMEIsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUErRyxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsSyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFVckUsTUFBTSxPQUFPLDhCQUE4QjtJQThFekMsWUFBb0IsRUFBZSxFQUFVLEdBQXNCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXpFMUQsYUFBUSxHQUFzQixFQUFFLENBQUM7UUFDakMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDcEMsNENBQTRDO1FBQ25DLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUN4QyxnRUFBZ0U7UUFDdkQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlDLHNDQUFzQztRQUM3QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDaEQsNERBQTREO1FBQ25ELDhCQUF5QixHQUFVLEVBQUUsQ0FBQztRQUMv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QUFLO2dCQUVHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBaUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRG5kRHJvcEV2ZW50IH0gZnJvbSAnbmd4LWRyYWctZHJvcCc7XG5pbXBvcnQgeyBDb25kaXRpb25TdGVwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFRlc3RDYXNlU3RlcENvbmZpZywgTm9ybWFsU3RlcENvbmZpZywgTG9vcFN0ZXBDb25maWcsIFN0ZXBHcm91cENvbmZpZywgU3RlcFR5cGVzIH0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcbmltcG9ydCB7IFNURVBfUk9XX0FDVElPTlNfU1RZTEVTIH0gZnJvbSAnLi4vc3RlcC1yb3ctYWN0aW9ucy5zdHlsZXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3FhQXV0b2NvbXBsZXRlT3B0aW9uIH0gZnJvbSAnLi4vLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10ZXN0LWNhc2UtY29uZGl0aW9uLXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIHN0eWxlczogW1NURVBfUk9XX0FDVElPTlNfU1RZTEVTXSxcbn0pXG5leHBvcnQgY2xhc3MgVGVzdENhc2VDb25kaXRpb25TdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb25maWchOiBDb25kaXRpb25TdGVwQ29uZmlnO1xuICBASW5wdXQoKSBpZCE6IHN0cmluZztcbiAgQElucHV0KCkgc3RlcE51bWJlciE6IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KCkgY29uZGl0aW9uITogc3RyaW5nO1xuICBASW5wdXQoKSBicmFuY2hlczogQ29uZGl0aW9uQnJhbmNoW10gPSBbXTtcbiAgQElucHV0KCkgZXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBPcHRpb25zIGZvciB0aGUgZGF0YSBwcm9maWxlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGRhdGFQcm9maWxlT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqIEluZGljYXRlcyBpZiBtb3JlIGRhdGEgcHJvZmlsZXMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlRGF0YVByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBkYXRhIHByb2ZpbGVzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0RhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyBmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24gKi9cbiAgQElucHV0KCkgbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqIEZ1bmN0aW9uIHRvIHByb2Nlc3MgdGVtcGxhdGUgdmFyaWFibGVzIChzaW1pbGFyIHRvIHN0ZXAtYnVpbGRlci1jb25kaXRpb24pICovXG4gIEBJbnB1dCgpIHNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiAodGVtcGxhdGU6IGFueSkgPT4gYW55W10gPSAoKSA9PiBbXTtcblxuICAvKiogV2hlbiB0cnVlLCBoZWFkZXIgc2hvd3MgaW5saW5lIGVkaXQgZm9ybSAoZmllbGRzLCBvcGVyYXRvciBzZWxlY3QsIENhbmNlbC9BcHBseSkgKi9cbiAgaXNFZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEFycmF5IG9mIEVMU0UgSUYgYnJhbmNoZXMgaW4gZWRpdCBtb2RlICovXG4gIGVsc2VJZkJyYW5jaGVzOiBBcnJheTx7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmb3JtOiBGb3JtR3JvdXA7XG4gICAgc2VsZWN0ZWRUZW1wbGF0ZTogYW55O1xuICAgIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm06IEZvcm1Hcm91cDtcbiAgICBzbmFwc2hvdDogeyBjb25kaXRpb25MZWZ0Pzogc3RyaW5nOyBjb25kaXRpb25PcGVyYXRvcj86IHN0cmluZzsgY29uZGl0aW9uUmlnaHQ/OiBzdHJpbmcgfTtcbiAgfT4gPSBbXTtcblxuICAvKiogRm9ybSBmb3IgZWRpdCBtb2RlOyBib3VuZCB0byBjcWEtZHluYW1pYy1zZWxlY3QgYW5kIGNxYS1jdXN0b20taW5wdXQgKi9cbiAgZWRpdEZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIE9wZXJhdG9yIGRyb3Bkb3duIGNvbmZpZyAoSVMsIElTIE5PVCwgQ09OVEFJTlMsIGV0Yy4pICovXG4gIG9wZXJhdG9yU2VsZWN0Q29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICAvKiogQ29uZGl0aW9uIGxlZnQgb3BlcmFuZCBkcm9wZG93biBjb25maWcgKG5hdHVyYWwgdGV4dCBhY3Rpb25zIHdpdGggSUZfQ09ORElUSU9OKSAqL1xuICBjb25kaXRpb25MZWZ0U2VsZWN0Q29uZmlnITogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuXG4gIC8qKiBTbmFwc2hvdCBmb3IgQ2FuY2VsIHJldmVydCAqL1xuICBwcml2YXRlIGVkaXRTbmFwc2hvdDogeyBjb25kaXRpb25MZWZ0Pzogc3RyaW5nOyBjb25kaXRpb25PcGVyYXRvcj86IHN0cmluZzsgY29uZGl0aW9uUmlnaHQ/OiBzdHJpbmcgfSA9IHt9O1xuICBcbiAgLyoqIFNlbGVjdGVkIHRlbXBsYXRlIGZvciBJRiBjb25kaXRpb24gKi9cbiAgc2VsZWN0ZWRUZW1wbGF0ZTogYW55ID0gbnVsbDtcbiAgLyoqIFRlbXBsYXRlIHZhcmlhYmxlcyBmb3IgSUYgY29uZGl0aW9uICovXG4gIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICAvKiogRm9ybSBncm91cCBmb3IgdGVtcGxhdGUgdmFyaWFibGVzICovXG4gIHRlbXBsYXRlVmFyaWFibGVzRm9ybSE6IEZvcm1Hcm91cDtcblxuICBAT3V0cHV0KCkgdG9nZ2xlRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtjb25maWc6IENvbmRpdGlvblN0ZXBDb25maWcsIGV4cGFuZGVkOiBib29sZWFufT4oKTtcbiAgQE91dHB1dCgpIGNvbmRpdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgYnJhbmNoU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBzdGVwSW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaCB9PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFbHNlXCIgc28gdGhlIHBhcmVudCBjYW4gY2FsbCBQT1NUIHRlc3Rfc3RlcHMgd2l0aCBjb25kaXRpb25UeXBlIENPTkRJVElPTl9FTFNFICovXG4gIEBPdXRwdXQoKSBhZGRFbHNlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbmRpdGlvblN0ZXBDb25maWc6IENvbmRpdGlvblN0ZXBDb25maWcgfT4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZUJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uQnJhbmNoPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkbmREcm9wSW5ab25lID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBEbmREcm9wRXZlbnQ7IHRhcmdldExpc3Q6IFRlc3RDYXNlU3RlcENvbmZpZ1tdIH0+KCk7XG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBkYXRhIHByb2ZpbGVzIG5lZWQgdG8gYmUgbG9hZGVkICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZURhdGFQcm9maWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdCB3aGVuIGRhdGEgcHJvZmlsZSBzZWFyY2ggcXVlcnkgY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VhcmNoRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0IHdoZW4gYSBuZXN0ZWQgc3RlcCBpcyB1cGRhdGVkIChlLmcuLCBBcHBseSBidXR0b24gY2xpY2tlZCBpbiBsb29wLXN0ZXAgZWRpdCBtb2RlKSAqL1xuICBAT3V0cHV0KCkgc3RlcFVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VTdGVwQ29uZmlnPigpO1xuICAvKiogUmUtZW1pdCB3aGVuIGEgbmVzdGVkIHN0ZXAgKGUuZy4gbm9ybWFsLXN0ZXApIGVtaXRzIGNsaWNrQWN0aW9uIChlLmcuIGVsZW1lbnQvbGFiZWwgY2xpY2sgZm9yIHBvcHVwKSAqL1xuICBAT3V0cHV0KCkgY2xpY2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQ7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9PigpO1xuXG4gIG9uRG5kRHJvcChldmVudDogRG5kRHJvcEV2ZW50LCBicmFuY2g6IENvbmRpdGlvbkJyYW5jaCk6IHZvaWQge1xuICAgIHRoaXMuZG5kRHJvcEluWm9uZS5lbWl0KHsgZXZlbnQsIHRhcmdldExpc3Q6IGJyYW5jaC5uZXN0ZWRTdGVwcyB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmlkID0gdGhpcy5jb25maWcuaWQ7XG4gICAgICB0aGlzLnN0ZXBOdW1iZXIgPSB0aGlzLmNvbmZpZy5zdGVwTnVtYmVyO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSB0aGlzLmNvbmZpZy5jb25kaXRpb247XG4gICAgICB0aGlzLmJyYW5jaGVzID0gdGhpcy5jb25maWcuYnJhbmNoZXMgfHwgW107XG4gICAgICB0aGlzLmV4cGFuZGVkID0gdGhpcy5jb25maWcuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLmV4cGFuZGVkIDogdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5idWlsZEVkaXRGb3JtKCk7XG4gICAgdGhpcy5idWlsZE9wZXJhdG9yU2VsZWN0Q29uZmlnKCk7XG4gICAgdGhpcy51cGRhdGVDb25kaXRpb25MZWZ0U2VsZWN0Q29uZmlnKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmRpdGlvbkxlZnRTZWxlY3RDb25maWcoKTtcbiAgICAgIC8vIFJlYnVpbGQgZm9ybSB3aGVuIG9wdGlvbnMgYXJlIGxvYWRlZCB0byBwb3B1bGF0ZSBpbml0aWFsIHZhbHVlIGZyb20gbmF0dXJhbFRleHRBY3Rpb25JZFxuICAgICAgaWYgKHRoaXMuZWRpdEZvcm0gJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucmVidWlsZEVkaXRGb3JtV2l0aE5hdHVyYWxUZXh0QWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlYnVpbGQgZWRpdCBmb3JtIHdoZW4gbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyBhcmUgbG9hZGVkIHRvIHBvcHVsYXRlIGZyb20gbmF0dXJhbFRleHRBY3Rpb25JZCAqL1xuICBwcml2YXRlIHJlYnVpbGRFZGl0Rm9ybVdpdGhOYXR1cmFsVGV4dEFjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdEZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnV2l0aElkID0gdGhpcy5jb25maWcgYXMgYW55O1xuICAgIGlmIChjb25maWdXaXRoSWQubmF0dXJhbFRleHRBY3Rpb25JZCAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gU3RyaW5nKG9wdGlvbi5pZCkgPT09IFN0cmluZyhjb25maWdXaXRoSWQubmF0dXJhbFRleHRBY3Rpb25JZClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb24pIHtcbiAgICAgICAgY29uc3QgbmF0dXJhbFRleHQgPSBtYXRjaGluZ09wdGlvbi5uYXR1cmFsVGV4dCA/PyBtYXRjaGluZ09wdGlvbi5uYW1lID8/IG1hdGNoaW5nT3B0aW9uLnZhbHVlID8/ICcnO1xuICAgICAgICBpZiAobmF0dXJhbFRleHQpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnY29uZGl0aW9uTGVmdCcpPy52YWx1ZSA/PyAnJztcbiAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBpZiBjdXJyZW50IHZhbHVlIGlzIGVtcHR5IG9yIGRvZXNuJ3QgbWF0Y2hcbiAgICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZSB8fCBjdXJyZW50VmFsdWUgIT09IG5hdHVyYWxUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRGb3JtLmdldCgnY29uZGl0aW9uTGVmdCcpPy5zZXRWYWx1ZShuYXR1cmFsVGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgZnVsbCB0ZW1wbGF0ZSBvYmplY3QgKE5hdHVyYWxUZXh0QWN0aW9ucykgZnJvbSB0aGUgb3B0aW9uXG4gICAgICAgIGNvbnN0IGZ1bGxUZW1wbGF0ZSA9IG1hdGNoaW5nT3B0aW9uLnRlbXBsYXRlIHx8IG1hdGNoaW5nT3B0aW9uO1xuICAgICAgICAvLyBTdG9yZSBzZWxlY3RlZCB0ZW1wbGF0ZSBhbmQgZ2V0IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgPSBmdWxsVGVtcGxhdGU7XG4gICAgICAgIGlmIChmdWxsVGVtcGxhdGUgJiYgZnVsbFRlbXBsYXRlLnZhcmlhYmxlcykge1xuICAgICAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGZ1bGxUZW1wbGF0ZSk7XG4gICAgICAgICAgdGhpcy5idWlsZFRlbXBsYXRlVmFyaWFibGVzRm9ybSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVkaXRGb3JtKCk6IHZvaWQge1xuICAgIC8vIElmIGNvbmZpZyBoYXMgbmF0dXJhbFRleHRBY3Rpb25JZCwgZmluZCB0aGUgbWF0Y2hpbmcgbmF0dXJhbCB0ZXh0IGFjdGlvblxuICAgIGxldCBjb25kaXRpb25MZWZ0VmFsdWUgPSAnJztcbiAgICBjb25zdCBjb25maWdXaXRoSWQgPSB0aGlzLmNvbmZpZyBhcyBhbnk7XG4gICAgaWYgKGNvbmZpZ1dpdGhJZC5uYXR1cmFsVGV4dEFjdGlvbklkICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMuZmluZChcbiAgICAgICAgKG9wdGlvbjogYW55KSA9PiBTdHJpbmcob3B0aW9uLmlkKSA9PT0gU3RyaW5nKGNvbmZpZ1dpdGhJZC5uYXR1cmFsVGV4dEFjdGlvbklkKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbikge1xuICAgICAgICAvLyBVc2UgbmF0dXJhbFRleHQgZXhhY3RseSBhcyByZWNlaXZlZCBmcm9tIEFQSVxuICAgICAgICBjb25kaXRpb25MZWZ0VmFsdWUgPSBtYXRjaGluZ09wdGlvbi5uYXR1cmFsVGV4dCA/PyBtYXRjaGluZ09wdGlvbi5uYW1lID8/IG1hdGNoaW5nT3B0aW9uLnZhbHVlID8/ICcnO1xuICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgdGVtcGxhdGUgb2JqZWN0IChOYXR1cmFsVGV4dEFjdGlvbnMpIGZyb20gdGhlIG9wdGlvblxuICAgICAgICBjb25zdCBmdWxsVGVtcGxhdGUgPSBtYXRjaGluZ09wdGlvbi50ZW1wbGF0ZSB8fCBtYXRjaGluZ09wdGlvbjtcbiAgICAgICAgLy8gU3RvcmUgc2VsZWN0ZWQgdGVtcGxhdGUgYW5kIGdldCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gZnVsbFRlbXBsYXRlO1xuICAgICAgICBpZiAoZnVsbFRlbXBsYXRlICYmIGZ1bGxUZW1wbGF0ZS52YXJpYWJsZXMpIHtcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhmdWxsVGVtcGxhdGUpO1xuICAgICAgICAgIHRoaXMuYnVpbGRUZW1wbGF0ZVZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiBubyBuYXR1cmFsVGV4dEFjdGlvbklkIG1hdGNoIGZvdW5kLCBwYXJzZSBmcm9tIGNvbmRpdGlvbiBzdHJpbmdcbiAgICBpZiAoIWNvbmRpdGlvbkxlZnRWYWx1ZSkge1xuICAgICAgY29uc3QgeyBsZWZ0IH0gPSB0aGlzLnBhcnNlQ29uZGl0aW9uKHRoaXMuY29uZGl0aW9uKTtcbiAgICAgIGNvbmRpdGlvbkxlZnRWYWx1ZSA9IGxlZnQ7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHsgb3BlcmF0b3IsIHJpZ2h0IH0gPSB0aGlzLnBhcnNlQ29uZGl0aW9uKHRoaXMuY29uZGl0aW9uKTtcbiAgICB0aGlzLmVkaXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb25kaXRpb25MZWZ0OiBbY29uZGl0aW9uTGVmdFZhbHVlXSxcbiAgICAgIGNvbmRpdGlvbk9wZXJhdG9yOiBbb3BlcmF0b3JdLFxuICAgICAgY29uZGl0aW9uUmlnaHQ6IFtyaWdodF0sXG4gICAgfSk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB0ZW1wbGF0ZSB2YXJpYWJsZXMgZm9ybSBpZiBub3QgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgIGlmICghdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0pIHtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXNGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVsc2VJZkJyYW5jaChpbmRleD86IG51bWJlcik6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZvcm06IEZvcm1Hcm91cDtcbiAgICBzZWxlY3RlZFRlbXBsYXRlOiBhbnk7XG4gICAgdGVtcGxhdGVWYXJpYWJsZXM6IGFueVtdO1xuICAgIHRlbXBsYXRlVmFyaWFibGVzRm9ybTogRm9ybUdyb3VwO1xuICAgIHNuYXBzaG90OiB7IGNvbmRpdGlvbkxlZnQ/OiBzdHJpbmc7IGNvbmRpdGlvbk9wZXJhdG9yPzogc3RyaW5nOyBjb25kaXRpb25SaWdodD86IHN0cmluZyB9O1xuICB9IHtcbiAgICAvLyBJbml0aWFsaXplIEVMU0UgSUYgZm9ybSB3aXRoIGVtcHR5IHZhbHVlcyBvciBmcm9tIGV4aXN0aW5nIEVMU0UgSUYgYnJhbmNoIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IGVsc2VJZkJyYW5jaGVzID0gdGhpcy5icmFuY2hlcz8uZmlsdGVyKGIgPT4gYi50eXBlID09PSAnZWxzZS1pZicpIHx8IFtdO1xuICAgIGNvbnN0IGJyYW5jaEluZGV4ID0gaW5kZXggIT09IHVuZGVmaW5lZCA/IGluZGV4IDogZWxzZUlmQnJhbmNoZXMubGVuZ3RoO1xuICAgIGNvbnN0IGVsc2VJZkJyYW5jaCA9IGVsc2VJZkJyYW5jaGVzW2JyYW5jaEluZGV4XTtcbiAgICBjb25zdCBlbHNlQ29uZGl0aW9uID0gZWxzZUlmQnJhbmNoPy5hY3Rpb24gfHwgJyc7XG4gICAgY29uc3QgeyBsZWZ0LCBvcGVyYXRvciwgcmlnaHQgfSA9IHRoaXMucGFyc2VDb25kaXRpb24oZWxzZUNvbmRpdGlvbik7XG4gICAgXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uTGVmdDogW2xlZnRdLFxuICAgICAgY29uZGl0aW9uT3BlcmF0b3I6IFtvcGVyYXRvcl0sXG4gICAgICBjb25kaXRpb25SaWdodDogW3JpZ2h0XSxcbiAgICB9KTtcbiAgICBcbiAgICBjb25zdCB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBlbHNlLWlmLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWAsXG4gICAgICBmb3JtLFxuICAgICAgc2VsZWN0ZWRUZW1wbGF0ZTogbnVsbCxcbiAgICAgIHRlbXBsYXRlVmFyaWFibGVzOiBbXSxcbiAgICAgIHRlbXBsYXRlVmFyaWFibGVzRm9ybSxcbiAgICAgIHNuYXBzaG90OiB7IGNvbmRpdGlvbkxlZnQ6IGxlZnQsIGNvbmRpdGlvbk9wZXJhdG9yOiBvcGVyYXRvciwgY29uZGl0aW9uUmlnaHQ6IHJpZ2h0IH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE9wZXJhdG9yU2VsZWN0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgICAgeyBpZDogJ2lzJywgdmFsdWU6ICdpcycsIG5hbWU6ICdJUycsIGxhYmVsOiAnSVMnIH0sXG4gICAgICB7IGlkOiAnaXMgbm90JywgdmFsdWU6ICdpcyBub3QnLCBuYW1lOiAnSVMgTk9UJywgbGFiZWw6ICdJUyBOT1QnIH0sXG4gICAgICB7IGlkOiAnY29udGFpbnMnLCB2YWx1ZTogJ2NvbnRhaW5zJywgbmFtZTogJ0NPTlRBSU5TJywgbGFiZWw6ICdDT05UQUlOUycgfSxcbiAgICAgIHsgaWQ6ICdlcXVhbHMnLCB2YWx1ZTogJ2VxdWFscycsIG5hbWU6ICdFUVVBTFMnLCBsYWJlbDogJ0VRVUFMUycgfSxcbiAgICAgIHsgaWQ6ICdzdGFydHMgd2l0aCcsIHZhbHVlOiAnc3RhcnRzIHdpdGgnLCBuYW1lOiAnU1RBUlRTIFdJVEgnLCBsYWJlbDogJ1NUQVJUUyBXSVRIJyB9LFxuICAgICAgeyBpZDogJ2VuZHMgd2l0aCcsIHZhbHVlOiAnZW5kcyB3aXRoJywgbmFtZTogJ0VORFMgV0lUSCcsIGxhYmVsOiAnRU5EUyBXSVRIJyB9LFxuICAgIF07XG4gICAgdGhpcy5vcGVyYXRvclNlbGVjdENvbmZpZyA9IHtcbiAgICAgIGtleTogJ2NvbmRpdGlvbk9wZXJhdG9yJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnT3BlcmF0b3InLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvKiogVXBkYXRlIGNvbmRpdGlvbiBsZWZ0IHNlbGVjdCBjb25maWcgd2l0aCBmaWx0ZXJlZCBuYXR1cmFsIHRleHQgYWN0aW9ucyAoSUZfQ09ORElUSU9OIG9ubHkpICovXG4gIHByaXZhdGUgdXBkYXRlQ29uZGl0aW9uTGVmdFNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICAvLyBGaWx0ZXIgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgdG8gb25seSBpbmNsdWRlIHRob3NlIHdpdGggc3RlcEFjdGlvblR5cGUgPT09IFwiSUZfQ09ORElUSU9OXCJcbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSAodGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zIHx8IFtdKS5maWx0ZXIoKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICByZXR1cm4gb3B0aW9uLnN0ZXBBY3Rpb25UeXBlID09PSAnSUZfQ09ORElUSU9OJztcbiAgICB9KTtcblxuICAgIHRoaXMuY29uZGl0aW9uTGVmdFNlbGVjdENvbmZpZyA9IHtcbiAgICAgIGtleTogJ2NvbmRpdGlvbkxlZnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgY29uZGl0aW9uJyxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBPcHRpb25zIGZvciB0aGUgY29uZGl0aW9uIGxlZnQgYXV0b2NvbXBsZXRlIChJRl9DT05ESVRJT04gbmF0dXJhbCB0ZXh0IGFjdGlvbnMpICovXG4gIGdldCBjb25kaXRpb25MZWZ0QXV0b2NvbXBsZXRlT3B0aW9ucygpOiBDcWFBdXRvY29tcGxldGVPcHRpb25bXSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuY29uZGl0aW9uTGVmdFNlbGVjdENvbmZpZz8ub3B0aW9ucyA/PyBbXTtcbiAgICByZXR1cm4gb3B0cy5tYXAoKG9wdGlvbjogYW55KSA9PiB7XG4gICAgICAvLyBVc2UgbmF0dXJhbFRleHQgZXhhY3RseSBhcyByZWNlaXZlZCBmcm9tIEFQSSwgZmFsbGJhY2sgdG8gbmFtZS92YWx1ZS9pZFxuICAgICAgY29uc3QgbmF0dXJhbFRleHQgPSBvcHRpb24ubmF0dXJhbFRleHQgPz8gb3B0aW9uLm5hbWUgPz8gb3B0aW9uLnZhbHVlID8/IFN0cmluZyhvcHRpb24uaWQgPz8gJycpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG5hdHVyYWxUZXh0LFxuICAgICAgICBsYWJlbDogbmF0dXJhbFRleHQsXG4gICAgICAgIC8vIFN0b3JlIHRoZSBmdWxsIHRlbXBsYXRlIG9iamVjdCAoTmF0dXJhbFRleHRBY3Rpb25zKSBmb3IgdGVtcGxhdGUgdmFyaWFibGVzIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gVXNlIG9wdGlvbi50ZW1wbGF0ZSBpZiBhdmFpbGFibGUgKGZ1bGwgTmF0dXJhbFRleHRBY3Rpb25zKSwgb3RoZXJ3aXNlIHVzZSBvcHRpb24gaXRzZWxmXG4gICAgICAgIHRlbXBsYXRlOiBvcHRpb24udGVtcGxhdGUgfHwgb3B0aW9uLFxuICAgICAgfSBhcyBDcWFBdXRvY29tcGxldGVPcHRpb24gJiB7IHRlbXBsYXRlPzogYW55IH07XG4gICAgfSk7XG4gIH1cblxuICBvbkNvbmRpdGlvbkxlZnRTZWxlY3Qob3B0aW9uOiBDcWFBdXRvY29tcGxldGVPcHRpb24gJiB7IHRlbXBsYXRlPzogYW55IH0pOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRGb3JtPy5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8uc2V0VmFsdWUob3B0aW9uLnZhbHVlKTtcbiAgICBcbiAgICAvLyBHZXQgdGVtcGxhdGUgZnJvbSBvcHRpb24gLSBvcHRpb24udGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gdGhlIGZ1bGwgTmF0dXJhbFRleHRBY3Rpb25zIG9iamVjdFxuICAgIGNvbnN0IG1hdGNoaW5nVGVtcGxhdGUgPSBvcHRpb24udGVtcGxhdGU7XG4gICAgXG4gICAgLy8gSWYgdGVtcGxhdGUgbm90IGluIG9wdGlvbiwgdHJ5IHRvIGZpbmQgZnJvbSBuYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zIGJ5IG1hdGNoaW5nIG5hdHVyYWxUZXh0XG4gICAgbGV0IGZ1bGxUZW1wbGF0ZSA9IG1hdGNoaW5nVGVtcGxhdGU7XG4gICAgaWYgKCFmdWxsVGVtcGxhdGUgfHwgIWZ1bGxUZW1wbGF0ZS52YXJpYWJsZXMpIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgIChvcHQ6IGFueSkgPT4gb3B0Lm5hdHVyYWxUZXh0ID09PSBvcHRpb24udmFsdWUgfHwgb3B0Lm5hbWUgPT09IG9wdGlvbi52YWx1ZSB8fCBvcHQudmFsdWUgPT09IG9wdGlvbi52YWx1ZVxuICAgICAgKTtcbiAgICAgIC8vIFVzZSB0ZW1wbGF0ZSBwcm9wZXJ0eSBmcm9tIG9wdGlvbiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgdGhlIG9wdGlvbiBpdHNlbGZcbiAgICAgIGZ1bGxUZW1wbGF0ZSA9IG1hdGNoaW5nT3B0aW9uPy50ZW1wbGF0ZSB8fCBtYXRjaGluZ09wdGlvbjtcbiAgICB9XG4gICAgXG4gICAgaWYgKGZ1bGxUZW1wbGF0ZSAmJiBmdWxsVGVtcGxhdGUudmFyaWFibGVzKSB7XG4gICAgICAvLyBTdG9yZSB0aGUgZnVsbCB0ZW1wbGF0ZSBmb3IgcmVmZXJlbmNlXG4gICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgPSBmdWxsVGVtcGxhdGU7XG4gICAgICBcbiAgICAgIC8vIEdldCB0ZW1wbGF0ZSB2YXJpYWJsZXMgdXNpbmcgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBQYXNzIHRoZSBmdWxsIE5hdHVyYWxUZXh0QWN0aW9ucyBvYmplY3Qgd2hpY2ggaGFzIHRoZSB2YXJpYWJsZXMgcHJvcGVydHlcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMoZnVsbFRlbXBsYXRlKTtcbiAgICAgIGNvbnNvbGUubG9nKCdUZW1wbGF0ZSB2YXJpYWJsZXMgbG9hZGVkOicsIHZhcmlhYmxlcywgJ2Zyb20gdGVtcGxhdGU6JywgZnVsbFRlbXBsYXRlKTtcbiAgICAgIFxuICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcyA9IHZhcmlhYmxlcyB8fCBbXTtcbiAgICAgIC8vIEJ1aWxkIGZvcm0gZm9yIHRlbXBsYXRlIHZhcmlhYmxlc1xuICAgICAgdGhpcy5idWlsZFRlbXBsYXRlVmFyaWFibGVzRm9ybSgpO1xuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdGVtcGxhdGVcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ05vIG1hdGNoaW5nIHRlbXBsYXRlIGZvdW5kIG9yIHRlbXBsYXRlIGhhcyBubyB2YXJpYWJsZXMnLCB7XG4gICAgICAgIGZ1bGxUZW1wbGF0ZSxcbiAgICAgICAgaGFzVmFyaWFibGVzOiBmdWxsVGVtcGxhdGU/LnZhcmlhYmxlcyxcbiAgICAgICAgb3B0aW9uVmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgb3B0aW9uVGVtcGxhdGU6IG9wdGlvbi50ZW1wbGF0ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgPSBudWxsO1xuICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcyA9IFtdO1xuICAgICAgaWYgKCF0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybSkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgICAgfVxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdGVtcGxhdGVcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgYnVpbGRUZW1wbGF0ZVZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBjb250cm9sc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gR2V0IGV4aXN0aW5nIHRlbXBsYXRlIHZhcmlhYmxlcyBkYXRhIGZyb20gY29uZmlnIGlmIGF2YWlsYWJsZVxuICAgIGNvbnN0IGNvbmZpZ1dpdGhEYXRhID0gdGhpcy5jb25maWcgYXMgYW55O1xuICAgIGNvbnN0IGV4aXN0aW5nRGF0YSA9IGNvbmZpZ1dpdGhEYXRhLnRlbXBsYXRlVmFyaWFibGVzRGF0YSB8fCB7fTtcbiAgICBcbiAgICAvLyBBZGQgZm9ybSBjb250cm9scyBmb3IgZWFjaCB2YXJpYWJsZVxuICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHZhbHVlIGZyb20gZXhpc3RpbmcgZGF0YSBmaXJzdCwgdGhlbiBmcm9tIHZhcmlhYmxlIGRlZmF1bHRcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmIChleGlzdGluZ0RhdGEuaGFzT3duUHJvcGVydHkodmFyaWFibGUubmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZXhpc3RpbmdEYXRhW3ZhcmlhYmxlLm5hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICAgID8gKHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDEpXG4gICAgICAgICAgOiAodmFyaWFibGUudmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDb252ZXJ0IGJvb2xlYW4gc3RyaW5nIHRvIGJvb2xlYW5cbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgfHwgZGVmYXVsdFZhbHVlID09PSAnMSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmFkZENvbnRyb2wodmFyaWFibGUubmFtZSwgbmV3IEZvcm1Db250cm9sKGRlZmF1bHRWYWx1ZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgb25FbHNlQ29uZGl0aW9uTGVmdFNlbGVjdChvcHRpb246IENxYUF1dG9jb21wbGV0ZU9wdGlvbiAmIHsgdGVtcGxhdGU/OiBhbnkgfSwgYnJhbmNoSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGJyYW5jaCA9IHRoaXMuZWxzZUlmQnJhbmNoZXMuZmluZChiID0+IGIuaWQgPT09IGJyYW5jaElkKTtcbiAgICBpZiAoIWJyYW5jaCkgcmV0dXJuO1xuICAgIFxuICAgIGJyYW5jaC5mb3JtPy5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8uc2V0VmFsdWUob3B0aW9uLnZhbHVlKTtcbiAgICBcbiAgICAvLyBHZXQgdGVtcGxhdGUgZnJvbSBvcHRpb24gLSBvcHRpb24udGVtcGxhdGUgc2hvdWxkIGNvbnRhaW4gdGhlIGZ1bGwgTmF0dXJhbFRleHRBY3Rpb25zIG9iamVjdFxuICAgIGNvbnN0IG1hdGNoaW5nVGVtcGxhdGUgPSBvcHRpb24udGVtcGxhdGU7XG4gICAgXG4gICAgLy8gSWYgdGVtcGxhdGUgbm90IGluIG9wdGlvbiwgdHJ5IHRvIGZpbmQgZnJvbSBuYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zIGJ5IG1hdGNoaW5nIG5hdHVyYWxUZXh0XG4gICAgbGV0IGZ1bGxUZW1wbGF0ZSA9IG1hdGNoaW5nVGVtcGxhdGU7XG4gICAgaWYgKCFmdWxsVGVtcGxhdGUgfHwgIWZ1bGxUZW1wbGF0ZS52YXJpYWJsZXMpIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgIChvcHQ6IGFueSkgPT4gb3B0Lm5hdHVyYWxUZXh0ID09PSBvcHRpb24udmFsdWUgfHwgb3B0Lm5hbWUgPT09IG9wdGlvbi52YWx1ZSB8fCBvcHQudmFsdWUgPT09IG9wdGlvbi52YWx1ZVxuICAgICAgKTtcbiAgICAgIC8vIFVzZSB0ZW1wbGF0ZSBwcm9wZXJ0eSBmcm9tIG9wdGlvbiBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgdGhlIG9wdGlvbiBpdHNlbGZcbiAgICAgIGZ1bGxUZW1wbGF0ZSA9IG1hdGNoaW5nT3B0aW9uPy50ZW1wbGF0ZSB8fCBtYXRjaGluZ09wdGlvbjtcbiAgICB9XG4gICAgXG4gICAgaWYgKGZ1bGxUZW1wbGF0ZSAmJiBmdWxsVGVtcGxhdGUudmFyaWFibGVzKSB7XG4gICAgICAvLyBTdG9yZSB0aGUgZnVsbCB0ZW1wbGF0ZSBmb3IgcmVmZXJlbmNlXG4gICAgICBicmFuY2guc2VsZWN0ZWRUZW1wbGF0ZSA9IGZ1bGxUZW1wbGF0ZTtcbiAgICAgIC8vIEdldCB0ZW1wbGF0ZSB2YXJpYWJsZXMgdXNpbmcgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGZ1bGxUZW1wbGF0ZSk7XG4gICAgICAvLyBCdWlsZCBmb3JtIGZvciB0ZW1wbGF0ZSB2YXJpYWJsZXNcbiAgICAgIHRoaXMuYnVpbGRFbHNlVGVtcGxhdGVWYXJpYWJsZXNGb3JtKGJyYW5jaCk7XG4gICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB0ZW1wbGF0ZVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmFuY2guc2VsZWN0ZWRUZW1wbGF0ZSA9IG51bGw7XG4gICAgICBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXMgPSBbXTtcbiAgICAgIGlmICghYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybSkge1xuICAgICAgICBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgICB9XG4gICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIHRoZSB0ZW1wbGF0ZVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSBidWlsZEVsc2VUZW1wbGF0ZVZhcmlhYmxlc0Zvcm0oYnJhbmNoOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmb3JtOiBGb3JtR3JvdXA7XG4gICAgc2VsZWN0ZWRUZW1wbGF0ZTogYW55O1xuICAgIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm06IEZvcm1Hcm91cDtcbiAgICBzbmFwc2hvdDogeyBjb25kaXRpb25MZWZ0Pzogc3RyaW5nOyBjb25kaXRpb25PcGVyYXRvcj86IHN0cmluZzsgY29uZGl0aW9uUmlnaHQ/OiBzdHJpbmcgfTtcbiAgfSk6IHZvaWQge1xuICAgIGlmICghYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybSkge1xuICAgICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGNvbnRyb2xzXG4gICAgT2JqZWN0LmtleXMoYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gR2V0IGV4aXN0aW5nIHRlbXBsYXRlIHZhcmlhYmxlcyBkYXRhIGZyb20gY29uZmlnIGlmIGF2YWlsYWJsZSAoZm9yIEVMU0UgSUYgYnJhbmNoKVxuICAgIGNvbnN0IGNvbmZpZ1dpdGhEYXRhID0gdGhpcy5jb25maWcgYXMgYW55O1xuICAgIGNvbnN0IGV4aXN0aW5nRGF0YSA9IGNvbmZpZ1dpdGhEYXRhLmVsc2VUZW1wbGF0ZVZhcmlhYmxlc0RhdGEgfHwge307XG4gICAgXG4gICAgLy8gQWRkIGZvcm0gY29udHJvbHMgZm9yIGVhY2ggdmFyaWFibGVcbiAgICBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHZhbHVlIGZyb20gZXhpc3RpbmcgZGF0YSBmaXJzdCwgdGhlbiBmcm9tIHZhcmlhYmxlIGRlZmF1bHRcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmIChleGlzdGluZ0RhdGEuaGFzT3duUHJvcGVydHkodmFyaWFibGUubmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZXhpc3RpbmdEYXRhW3ZhcmlhYmxlLm5hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICAgID8gKHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDEpXG4gICAgICAgICAgOiAodmFyaWFibGUudmFsdWUgfHwgJycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDb252ZXJ0IGJvb2xlYW4gc3RyaW5nIHRvIGJvb2xlYW5cbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgfHwgZGVmYXVsdFZhbHVlID09PSAnMSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZS5uYW1lLCBuZXcgRm9ybUNvbnRyb2woZGVmYXVsdFZhbHVlKSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkFkZEVsc2UoKTogdm9pZCB7XG4gICAgLy8gQWRkIGEgbmV3IEVMU0UgSUYgYnJhbmNoIChVSSByb3cgb25seTsgQVBJcyBhcmUgY2FsbGVkIHdoZW4gdXNlciBjbGlja3MgQXBwbHkpXG4gICAgY29uc3QgbmV3QnJhbmNoID0gdGhpcy5idWlsZEVsc2VJZkJyYW5jaCgpO1xuICAgIHRoaXMuZWxzZUlmQnJhbmNoZXMucHVzaChuZXdCcmFuY2gpO1xuICB9XG5cbiAgb25BZGRFbHNlQnJhbmNoKCk6IHZvaWQge1xuICAgIC8vIEVtaXQgc28gcGFyZW50IGNhbiBjYWxsIFBPU1QgdGVzdF9zdGVwcyB3aXRoIGNvbmRpdGlvblR5cGUgQ09ORElUSU9OX0VMU0VcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuYWRkRWxzZS5lbWl0KHsgY29uZGl0aW9uU3RlcENvbmZpZzogdGhpcy5jb25maWcgfSk7XG4gICAgfVxuICB9XG5cbiAgb25SZW1vdmVFbHNlKGJyYW5jaElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgdGhlIEVMU0UgSUYgYnJhbmNoIHdpdGggdGhlIGdpdmVuIElEXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVsc2VJZkJyYW5jaGVzLmZpbmRJbmRleChiID0+IGIuaWQgPT09IGJyYW5jaElkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmVsc2VJZkJyYW5jaGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFBhcnNlIGNvbmRpdGlvbiBzdHJpbmcgaW50byBsZWZ0LCBvcGVyYXRvciwgcmlnaHQgKGUuZy4gXCJVc2VydHlwZSBpcyBQcmVtaXVtXCIpICovXG4gIHByaXZhdGUgcGFyc2VDb25kaXRpb24oYzogc3RyaW5nKTogeyBsZWZ0OiBzdHJpbmc7IG9wZXJhdG9yOiBzdHJpbmc7IHJpZ2h0OiBzdHJpbmcgfSB7XG4gICAgaWYgKCFjIHx8IHR5cGVvZiBjICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHsgbGVmdDogJ1VzZXJ0eXBlJywgb3BlcmF0b3I6ICdpcycsIHJpZ2h0OiAnUHJlbWl1bScgfTtcbiAgICB9XG4gICAgY29uc3QgcyA9IGMudHJpbSgpO1xuICAgIGNvbnN0IG9wZXJhdG9ycyA9IFsnIGlzIG5vdCAnLCAnIGlzICcsICcgY29udGFpbnMgJywgJyBlcXVhbHMgJywgJyBzdGFydHMgd2l0aCAnLCAnIGVuZHMgd2l0aCAnXTtcbiAgICBmb3IgKGNvbnN0IG9wIG9mIG9wZXJhdG9ycykge1xuICAgICAgY29uc3QgaSA9IHMudG9Mb3dlckNhc2UoKS5pbmRleE9mKG9wKTtcbiAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlZnQ6IHMuc2xpY2UoMCwgaSkudHJpbSgpLFxuICAgICAgICAgIG9wZXJhdG9yOiBvcC50cmltKCksXG4gICAgICAgICAgcmlnaHQ6IHMuc2xpY2UoaSArIG9wLmxlbmd0aCkudHJpbSgpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBsZWZ0OiBzLCBvcGVyYXRvcjogJ2lzJywgcmlnaHQ6ICcnIH07XG4gIH1cblxuICAvKiogQnVpbGQgY29uZGl0aW9uIHN0cmluZyBmcm9tIGZvcm0gdmFsdWVzICovXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25Gcm9tRm9ybSgpOiBzdHJpbmcge1xuICAgIGxldCBsZWZ0ID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3Qgb3AgPSB0aGlzLmVkaXRGb3JtLmdldCgnY29uZGl0aW9uT3BlcmF0b3InKT8udmFsdWUgPz8gJ2lzJztcbiAgICBjb25zdCByaWdodCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdjb25kaXRpb25SaWdodCcpPy52YWx1ZSA/PyAnJztcbiAgICBcbiAgICAvLyBJZiBsZWZ0IGlzIGFuIElEIChudW1iZXIpLCBmaW5kIHRoZSBuYXR1cmFsVGV4dCBmcm9tIG9wdGlvbnNcbiAgICBpZiAobGVmdCAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IFN0cmluZyhsZWZ0KTtcbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBudW1iZXIgKElEKSBvciBpZiB3ZSBuZWVkIHRvIGZpbmQgdGhlIG5hdHVyYWxUZXh0XG4gICAgICBjb25zdCBpc051bWVyaWNJZCA9ICFpc05hTihOdW1iZXIobGVmdFZhbHVlKSkgJiYgbGVmdFZhbHVlLnRyaW0oKSAhPT0gJyc7XG4gICAgICBcbiAgICAgIGlmIChpc051bWVyaWNJZCkge1xuICAgICAgICAvLyBGaW5kIHRoZSBvcHRpb24gYnkgSUQgYW5kIHVzZSBpdHMgbmF0dXJhbFRleHRcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMuZmluZChcbiAgICAgICAgICAob3B0aW9uOiBhbnkpID0+IFN0cmluZyhvcHRpb24uaWQpID09PSBsZWZ0VmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkQWN0aW9uICYmIHNlbGVjdGVkQWN0aW9uLm5hdHVyYWxUZXh0KSB7XG4gICAgICAgICAgbGVmdCA9IFN0cmluZyhzZWxlY3RlZEFjdGlvbi5uYXR1cmFsVGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYWxyZWFkeSBhIG5hdHVyYWxUZXh0IG9yIG5lZWRzIHRvIGJlIGZvdW5kXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgICAgKG9wdGlvbjogYW55KSA9PiBvcHRpb24ubmF0dXJhbFRleHQgPT09IGxlZnQgfHwgb3B0aW9uLm5hbWUgPT09IGxlZnQgfHwgb3B0aW9uLnZhbHVlID09PSBsZWZ0XG4gICAgICAgICk7XG4gICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbiAmJiBzZWxlY3RlZEFjdGlvbi5uYXR1cmFsVGV4dCkge1xuICAgICAgICAgIGxlZnQgPSBTdHJpbmcoc2VsZWN0ZWRBY3Rpb24ubmF0dXJhbFRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBbbGVmdCwgb3AsIHJpZ2h0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgb25FZGl0Rm9ybUZpZWxkQ2hhbmdlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRGb3JtLmdldChjb250cm9sTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIGdldFN0ZXBzU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFsbFN0ZXBzID0gdGhpcy5icmFuY2hlcy5yZWR1Y2U8VGVzdENhc2VTdGVwQ29uZmlnW10+KFxuICAgICAgKGFjYywgYnJhbmNoKSA9PiBhY2MuY29uY2F0KGJyYW5jaC5uZXN0ZWRTdGVwcyksXG4gICAgICBbXVxuICAgICk7XG4gICAgaWYgKGFsbFN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcwIHN0ZXBzJztcbiAgICB9XG4gICAgY29uc3QgZmlyc3RTdGVwID0gYWxsU3RlcHNbMF07XG4gICAgY29uc3QgbGFzdFN0ZXAgPSBhbGxTdGVwc1thbGxTdGVwcy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdGFydCA9IChmaXJzdFN0ZXAgYXMgYW55KS5zdGVwTnVtYmVyIHx8IDE7XG4gICAgY29uc3QgZW5kID0gKGxhc3RTdGVwIGFzIGFueSkuc3RlcE51bWJlciB8fCBhbGxTdGVwcy5sZW5ndGg7XG4gICAgY29uc3QgY291bnQgPSBhbGxTdGVwcy5sZW5ndGg7XG4gICAgcmV0dXJuIGBTdGVwcyAke3N0YXJ0fS0ke2VuZH0gKCR7Y291bnR9IHN0ZXAke2NvdW50ICE9PSAxID8gJ3MnIDogJyd9KWA7XG4gIH1cblxuICBvblRvZ2dsZUV4cGFuZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQgPSAhdGhpcy5leHBhbmRlZDtcbiAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQoe2NvbmZpZzp0aGlzLmNvbmZpZywgZXhwYW5kZWQ6dGhpcy5leHBhbmRlZH0pO1xuICB9XG5cbiAgb25Db25kaXRpb25DaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZGl0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5jb25kaXRpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoOiBDb25kaXRpb25CcmFuY2gsIHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgc3RlcEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmJyYW5jaFN0ZXBDaGFuZ2UuZW1pdCh7IGJyYW5jaCwgc3RlcCwgc3RlcEluZGV4IH0pO1xuICB9XG5cbiAgb25OZXN0ZWRUb2dnbGVFeHBhbmRlZChldmVudDogYm9vbGVhbiB8IHtjb25maWc6IFRlc3RDYXNlU3RlcENvbmZpZywgZXhwYW5kZWQ6IGJvb2xlYW59LCBicmFuY2g6IENvbmRpdGlvbkJyYW5jaCwgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGJvdGggYm9vbGVhbiBhbmQgb2JqZWN0IGZvcm1hdHNcbiAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnb2JqZWN0JyAmJiBldmVudCAhPT0gbnVsbCAmJiAnZXhwYW5kZWQnIGluIGV2ZW50KSB7XG4gICAgICAvLyBPYmplY3QgZm9ybWF0IGZyb20gc3RlcC1ncm91cDoge2NvbmZpZywgZXhwYW5kZWR9XG4gICAgICAoc3RlcCBhcyBhbnkpLmV4cGFuZGVkID0gZXZlbnQuZXhwYW5kZWQ7XG4gICAgICAvLyBJZiBpdCdzIGEgc3RlcC1ncm91cCwgd2UgbmVlZCB0byBlbWl0IHRoZSBldmVudCB1cCB0aGUgY2hhaW5cbiAgICAgIGlmICh0aGlzLmlzU3RlcEdyb3VwKHN0ZXApKSB7XG4gICAgICAgIC8vIFJlLWVtaXQgdGhlIHRvZ2dsZUV4cGFuZGVkIGV2ZW50IHdpdGggdGhlIG9iamVjdCBmb3JtYXRcbiAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZC5lbWl0KGV2ZW50IGFzIHtjb25maWc6IENvbmRpdGlvblN0ZXBDb25maWcsIGV4cGFuZGVkOiBib29sZWFufSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJvb2xlYW4gZm9ybWF0IGZyb20gb3RoZXIgc3RlcCB0eXBlc1xuICAgICAgKHN0ZXAgYXMgYW55KS5leHBhbmRlZCA9IGV2ZW50IGFzIGJvb2xlYW47XG4gICAgfVxuICAgIHRoaXMub25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaW5kZXgpO1xuICB9XG5cbiAgb25BZGRTdGVwKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRTdGVwLmVtaXQoeyBicmFuY2ggfSk7XG4gIH1cblxuICBvbkRlbGV0ZVN0ZXAoYnJhbmNoOiBDb25kaXRpb25CcmFuY2gsIHN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVTdGVwLmVtaXQoeyBicmFuY2gsIHN0ZXBJbmRleCB9KTtcbiAgfVxuXG4gIG9uQWRkQnJhbmNoKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQnJhbmNoLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlQnJhbmNoKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVCcmFuY2guZW1pdChicmFuY2gpO1xuICB9XG5cbiAgb25OZXN0ZWRDb25kaXRpb25BZGRCcmFuY2gobmVzdGVkU3RlcDogQ29uZGl0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIC8vIEFkZCBhIG5ldyBicmFuY2ggdG8gdGhlIG5lc3RlZCBjb25kaXRpb24gc3RlcFxuICAgIGlmICghbmVzdGVkU3RlcC5icmFuY2hlcykge1xuICAgICAgbmVzdGVkU3RlcC5icmFuY2hlcyA9IFtdO1xuICAgIH1cbiAgICBjb25zdCBuZXdCcmFuY2g6IENvbmRpdGlvbkJyYW5jaCA9IHtcbiAgICAgIHR5cGU6IG5lc3RlZFN0ZXAuYnJhbmNoZXMubGVuZ3RoID09PSAwID8gJ2lmJyA6ICdlbHNlJyxcbiAgICAgIGxhYmVsOiBuZXN0ZWRTdGVwLmJyYW5jaGVzLmxlbmd0aCA9PT0gMCA/ICdJRiBUUlVFJyA6ICdFTFNFJyxcbiAgICAgIHN0ZXBUeXBlOiBTdGVwVHlwZXMuQ09ORElUSU9OX0lGLFxuICAgICAgbmVzdGVkU3RlcHM6IFtdXG4gICAgfTtcbiAgICBuZXN0ZWRTdGVwLmJyYW5jaGVzLnB1c2gobmV3QnJhbmNoKTtcbiAgfVxuXG4gIG9uTmVzdGVkQ29uZGl0aW9uRGVsZXRlQnJhbmNoKG5lc3RlZFN0ZXA6IENvbmRpdGlvblN0ZXBDb25maWcsIGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogdm9pZCB7XG4gICAgLy8gRGVsZXRlIGEgYnJhbmNoIGZyb20gdGhlIG5lc3RlZCBjb25kaXRpb24gc3RlcFxuICAgIGlmIChuZXN0ZWRTdGVwLmJyYW5jaGVzKSB7XG4gICAgICBjb25zdCBpbmRleCA9IG5lc3RlZFN0ZXAuYnJhbmNoZXMuaW5kZXhPZihicmFuY2gpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmVzdGVkU3RlcC5icmFuY2hlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzTm9ybWFsU3RlcChzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIE5vcm1hbFN0ZXBDb25maWcge1xuICAgIHJldHVybiAnZXZlbnRUeXBlJyBpbiBzdGVwO1xuICB9XG5cbiAgaXNMb29wU3RlcChzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIExvb3BTdGVwQ29uZmlnIHtcbiAgICByZXR1cm4gJ2xvb3BUeXBlJyBpbiBzdGVwO1xuICB9XG5cbiAgaXNDb25kaXRpb25TdGVwKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgQ29uZGl0aW9uU3RlcENvbmZpZyB7XG4gICAgcmV0dXJuICdjb25kaXRpb24nIGluIHN0ZXAgJiYgJ2JyYW5jaGVzJyBpbiBzdGVwO1xuICB9XG5cbiAgaXNTdGVwR3JvdXAoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBTdGVwR3JvdXBDb25maWcge1xuICAgIHJldHVybiAnZ3JvdXBOYW1lJyBpbiBzdGVwO1xuICB9XG5cbiAgZ2V0QnJhbmNoTGFiZWwoYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiBzdHJpbmcge1xuICAgIHJldHVybiBicmFuY2gubGFiZWwgfHwgKGJyYW5jaC50eXBlID09PSAnaWYnID8gJ0lGIFRSVUUnIDogYnJhbmNoLnR5cGUgPT09ICdlbHNlLWlmJyA/ICdFTFNFIElGJyA6ICdFTFNFJyk7XG4gIH1cblxuICBnZXRCcmFuY2hDb2xvckNsYXNzKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogc3RyaW5nIHtcbiAgICBpZiAoYnJhbmNoLnR5cGUgPT09ICdpZicpIHtcbiAgICAgIHJldHVybiAnY3FhLWJnLVsjMERCRDdEMUFdJztcbiAgICB9IGVsc2UgaWYgKGJyYW5jaC50eXBlID09PSAnZWxzZS1pZicpIHtcbiAgICAgIHJldHVybiAnY3FhLWJnLXllbGxvdy01MCBjcWEtYm9yZGVyLXllbGxvdy0yMDAnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2NxYS1iZy1yZWQtNTAgY3FhLWJvcmRlci1yZWQtMjAwJztcbiAgICB9XG4gIH1cblxuICBnZXRCcmFuY2hUZXh0Q29sb3IoYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiBzdHJpbmcge1xuICAgIGlmIChicmFuY2gudHlwZSA9PT0gJ2lmJykge1xuICAgICAgcmV0dXJuICdjcWEtdGV4dC1bIzBENTQyQl0nO1xuICAgIH0gZWxzZSBpZiAoYnJhbmNoLnR5cGUgPT09ICdlbHNlLWlmJykge1xuICAgICAgcmV0dXJuICdjcWEtdGV4dC15ZWxsb3ctNzAwJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdjcWEtdGV4dC1yZWQtNzAwJztcbiAgICB9XG4gIH1cblxuICBvbk9wZW5FeHRlcm5hbCgpOiB2b2lkIHtcbiAgICAvLyBOb3QgdXNlZCBpbiBjb25kaXRpb24gc3RlcCwgYnV0IG5lZWRlZCBmb3IgcmVjdXJzaXZlIHN0ZXAgZ3JvdXBzXG4gIH1cblxuICBvbkVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0U25hcHNob3QgPSB7XG4gICAgICBjb25kaXRpb25MZWZ0OiB0aGlzLmVkaXRGb3JtPy5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8udmFsdWUsXG4gICAgICBjb25kaXRpb25PcGVyYXRvcjogdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25PcGVyYXRvcicpPy52YWx1ZSxcbiAgICAgIGNvbmRpdGlvblJpZ2h0OiB0aGlzLmVkaXRGb3JtPy5nZXQoJ2NvbmRpdGlvblJpZ2h0Jyk/LnZhbHVlLFxuICAgIH07XG4gICAgXG4gICAgLy8gSWYgY29uZmlnIGhhcyBuYXR1cmFsVGV4dEFjdGlvbklkLCBmaW5kIHRoZSBtYXRjaGluZyBuYXR1cmFsIHRleHQgYWN0aW9uXG4gICAgbGV0IGNvbmRpdGlvbkxlZnRWYWx1ZSA9ICcnO1xuICAgIGNvbnN0IGNvbmZpZ1dpdGhJZCA9IHRoaXMuY29uZmlnIGFzIGFueTtcbiAgICBpZiAoY29uZmlnV2l0aElkLm5hdHVyYWxUZXh0QWN0aW9uSWQgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ0FjdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uOiBhbnkpID0+IFN0cmluZyhvcHRpb24uaWQpID09PSBTdHJpbmcoY29uZmlnV2l0aElkLm5hdHVyYWxUZXh0QWN0aW9uSWQpXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nQWN0aW9uKSB7XG4gICAgICAgIC8vIFVzZSBuYXR1cmFsVGV4dCBleGFjdGx5IGFzIHJlY2VpdmVkIGZyb20gQVBJXG4gICAgICAgIGNvbmRpdGlvbkxlZnRWYWx1ZSA9IG1hdGNoaW5nQWN0aW9uLm5hdHVyYWxUZXh0ID8/IG1hdGNoaW5nQWN0aW9uLm5hbWUgPz8gbWF0Y2hpbmdBY3Rpb24udmFsdWUgPz8gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIElmIG5vIG5hdHVyYWxUZXh0QWN0aW9uSWQgbWF0Y2ggZm91bmQsIHBhcnNlIGZyb20gY29uZGl0aW9uIHN0cmluZ1xuICAgIGlmICghY29uZGl0aW9uTGVmdFZhbHVlKSB7XG4gICAgICBjb25zdCB7IGxlZnQgfSA9IHRoaXMucGFyc2VDb25kaXRpb24odGhpcy5jb25kaXRpb24pO1xuICAgICAgY29uZGl0aW9uTGVmdFZhbHVlID0gbGVmdDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgeyBvcGVyYXRvciwgcmlnaHQgfSA9IHRoaXMucGFyc2VDb25kaXRpb24odGhpcy5jb25kaXRpb24pO1xuICAgIHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uTGVmdCcpPy5zZXRWYWx1ZShjb25kaXRpb25MZWZ0VmFsdWUpO1xuICAgIHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uT3BlcmF0b3InKT8uc2V0VmFsdWUob3BlcmF0b3IpO1xuICAgIHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uUmlnaHQnKT8uc2V0VmFsdWUocmlnaHQpO1xuICAgIFxuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICAvLyBEbyBub3QgcHJlLXBvcHVsYXRlIEVMU0UgSUYgYnJhbmNoZXMgaW4gZWRpdCBtb2RlOyB0aGV5IGFyZSBzaG93biBvbmx5IHdoZW4gdXNlciBjbGlja3MgXCJBZGQgRUxTRSBJRlwiXG4gICAgdGhpcy5lbHNlSWZCcmFuY2hlcyA9IFtdO1xuICB9XG5cbiAgb25FZGl0Q2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uTGVmdCcpPy5zZXRWYWx1ZSh0aGlzLmVkaXRTbmFwc2hvdC5jb25kaXRpb25MZWZ0ID8/ICcnKTtcbiAgICB0aGlzLmVkaXRGb3JtPy5nZXQoJ2NvbmRpdGlvbk9wZXJhdG9yJyk/LnNldFZhbHVlKHRoaXMuZWRpdFNuYXBzaG90LmNvbmRpdGlvbk9wZXJhdG9yID8/ICdpcycpO1xuICAgIHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uUmlnaHQnKT8uc2V0VmFsdWUodGhpcy5lZGl0U25hcHNob3QuY29uZGl0aW9uUmlnaHQgPz8gJycpO1xuICAgIFxuICAgIC8vIFJlc2V0IGFsbCBFTFNFIElGIGJyYW5jaGVzIHRvIHRoZWlyIHNuYXBzaG90c1xuICAgIHRoaXMuZWxzZUlmQnJhbmNoZXMuZm9yRWFjaChicmFuY2ggPT4ge1xuICAgICAgYnJhbmNoLmZvcm0/LmdldCgnY29uZGl0aW9uTGVmdCcpPy5zZXRWYWx1ZShicmFuY2guc25hcHNob3QuY29uZGl0aW9uTGVmdCA/PyAnJyk7XG4gICAgICBicmFuY2guZm9ybT8uZ2V0KCdjb25kaXRpb25PcGVyYXRvcicpPy5zZXRWYWx1ZShicmFuY2guc25hcHNob3QuY29uZGl0aW9uT3BlcmF0b3IgPz8gJ2lzJyk7XG4gICAgICBicmFuY2guZm9ybT8uZ2V0KCdjb25kaXRpb25SaWdodCcpPy5zZXRWYWx1ZShicmFuY2guc25hcHNob3QuY29uZGl0aW9uUmlnaHQgPz8gJycpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIENsZWFyIGFsbCBFTFNFIElGIGJyYW5jaGVzXG4gICAgdGhpcy5lbHNlSWZCcmFuY2hlcyA9IFtdO1xuICAgIFxuICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgcGF5bG9hZCBmb3Igb25lIEVMU0UgSUYgYnJhbmNoIChhY3Rpb24sIG5hdHVyYWxUZXh0QWN0aW9uSWQsIHRlbXBsYXRlVmFyaWFibGVzRGF0YSwgdGVzdERhdGFMaXN0KVxuICAgKiBzbyB0aGUgcGFyZW50IGNhbiBjcmVhdGUgdGhlIHN0ZXAgdmlhIFBPU1QgdGhlbiBQVVQgd2hlbiBBcHBseSBpcyBjbGlja2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEVsc2VJZkJyYW5jaFBheWxvYWQoYnJhbmNoOiB7XG4gICAgZm9ybTogRm9ybUdyb3VwO1xuICAgIHNlbGVjdGVkVGVtcGxhdGU6IGFueTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W107XG4gICAgdGVtcGxhdGVWYXJpYWJsZXNGb3JtOiBGb3JtR3JvdXA7XG4gIH0pOiB7IGFjdGlvbjogc3RyaW5nOyBuYXR1cmFsVGV4dEFjdGlvbklkPzogbnVtYmVyOyB0ZW1wbGF0ZVZhcmlhYmxlc0RhdGE/OiBhbnk7IHRlc3REYXRhTGlzdD86IEFycmF5PHsgdGVzdERhdGE6IHN0cmluZzsgdGVzdERhdGFUeXBlOiBzdHJpbmcgfT4gfSB7XG4gICAgY29uc3QgY29uZGl0aW9uTGVmdCA9IGJyYW5jaC5mb3JtPy5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgY29uZGl0aW9uT3BlcmF0b3IgPSBicmFuY2guZm9ybT8uZ2V0KCdjb25kaXRpb25PcGVyYXRvcicpPy52YWx1ZSA/PyAnaXMnO1xuICAgIGNvbnN0IGNvbmRpdGlvblJpZ2h0ID0gYnJhbmNoLmZvcm0/LmdldCgnY29uZGl0aW9uUmlnaHQnKT8udmFsdWUgPz8gJyc7XG4gICAgbGV0IG5hdHVyYWxUZXh0QWN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbmF0dXJhbFRleHRWYWx1ZTogc3RyaW5nID0gY29uZGl0aW9uTGVmdDtcbiAgICBpZiAoY29uZGl0aW9uTGVmdCAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IFN0cmluZyhjb25kaXRpb25MZWZ0KTtcbiAgICAgIGNvbnN0IGlzTnVtZXJpY0lkID0gIWlzTmFOKE51bWJlcihsZWZ0VmFsdWUpKSAmJiBsZWZ0VmFsdWUudHJpbSgpICE9PSAnJztcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uOiBhbnkgPSBpc051bWVyaWNJZFxuICAgICAgICA/IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKChvcHQ6IGFueSkgPT4gU3RyaW5nKG9wdC5pZCkgPT09IGxlZnRWYWx1ZSlcbiAgICAgICAgOiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMuZmluZChcbiAgICAgICAgICAgIChvcHQ6IGFueSkgPT4gb3B0Lm5hdHVyYWxUZXh0ID09PSBjb25kaXRpb25MZWZ0IHx8IG9wdC5uYW1lID09PSBjb25kaXRpb25MZWZ0IHx8IG9wdC52YWx1ZSA9PT0gY29uZGl0aW9uTGVmdFxuICAgICAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgbmF0dXJhbFRleHRBY3Rpb25JZCA9IHNlbGVjdGVkQWN0aW9uLmlkO1xuICAgICAgICBuYXR1cmFsVGV4dFZhbHVlID0gc2VsZWN0ZWRBY3Rpb24ubmF0dXJhbFRleHQgfHwgc2VsZWN0ZWRBY3Rpb24ubmFtZSB8fCBzZWxlY3RlZEFjdGlvbi52YWx1ZSB8fCBjb25kaXRpb25MZWZ0O1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZVZhcmlhYmxlc0RhdGE6IGFueSA9IHt9O1xuICAgIGNvbnN0IHRlc3REYXRhTGlzdDogQXJyYXk8eyB0ZXN0RGF0YTogc3RyaW5nOyB0ZXN0RGF0YVR5cGU6IHN0cmluZyB9PiA9IFtdO1xuICAgIGlmIChicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtICYmIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlcyAmJiBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2goKHZhcmlhYmxlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8udmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHRlbXBsYXRlVmFyaWFibGVzRGF0YVt2YXJpYWJsZS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIHRlc3REYXRhTGlzdC5wdXNoKHsgdGVzdERhdGE6IFN0cmluZyh2YWx1ZSksIHRlc3REYXRhVHlwZTogJ3JhdycgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBhY3Rpb24gPSBbbmF0dXJhbFRleHRWYWx1ZSwgY29uZGl0aW9uT3BlcmF0b3IsIGNvbmRpdGlvblJpZ2h0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246IGFjdGlvbiB8fCAoYnJhbmNoLnNlbGVjdGVkVGVtcGxhdGU/Lm5hdHVyYWxUZXh0ID8/ICcnKSxcbiAgICAgIC4uLihuYXR1cmFsVGV4dEFjdGlvbklkICE9PSB1bmRlZmluZWQgJiYgeyBuYXR1cmFsVGV4dEFjdGlvbklkIH0pLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKHRlbXBsYXRlVmFyaWFibGVzRGF0YSkubGVuZ3RoID4gMCAmJiB7IHRlbXBsYXRlVmFyaWFibGVzRGF0YSB9KSxcbiAgICAgIC4uLih0ZXN0RGF0YUxpc3QubGVuZ3RoID4gMCAmJiB7IHRlc3REYXRhTGlzdCB9KSxcbiAgICB9O1xuICB9XG5cbiAgb25FZGl0QXBwbHkoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZWRpdEZvcm0udmFsdWU7XG4gICAgY29uc3QgY29uZGl0aW9uTGVmdCA9IGZvcm1WYWx1ZXMuY29uZGl0aW9uTGVmdCA/PyAnJztcbiAgICBjb25zdCBjb25kaXRpb25PcGVyYXRvciA9IGZvcm1WYWx1ZXMuY29uZGl0aW9uT3BlcmF0b3IgPz8gJ2lzJztcbiAgICBjb25zdCBjb25kaXRpb25SaWdodCA9IGZvcm1WYWx1ZXMuY29uZGl0aW9uUmlnaHQgPz8gJyc7XG4gICAgXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgbmF0dXJhbCB0ZXh0IGFjdGlvbiBhbmQgZ2V0IG5hdHVyYWxUZXh0IChub3QgSUQpXG4gICAgbGV0IG5hdHVyYWxUZXh0QWN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbmF0dXJhbFRleHRWYWx1ZTogc3RyaW5nID0gY29uZGl0aW9uTGVmdDsgLy8gRGVmYXVsdCB0byBjb25kaXRpb25MZWZ0XG4gICAgXG4gICAgaWYgKGNvbmRpdGlvbkxlZnQgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsZWZ0VmFsdWUgPSBTdHJpbmcoY29uZGl0aW9uTGVmdCk7XG4gICAgICBjb25zdCBpc051bWVyaWNJZCA9ICFpc05hTihOdW1iZXIobGVmdFZhbHVlKSkgJiYgbGVmdFZhbHVlLnRyaW0oKSAhPT0gJyc7XG4gICAgICBcbiAgICAgIGxldCBzZWxlY3RlZEFjdGlvbjogYW55O1xuICAgICAgaWYgKGlzTnVtZXJpY0lkKSB7XG4gICAgICAgIC8vIEZpbmQgYnkgSUQgYW5kIGdldCBuYXR1cmFsVGV4dFxuICAgICAgICBzZWxlY3RlZEFjdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAgIChvcHRpb246IGFueSkgPT4gU3RyaW5nKG9wdGlvbi5pZCkgPT09IGxlZnRWYWx1ZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmluZCBieSBuYXR1cmFsVGV4dCwgbmFtZSwgb3IgdmFsdWVcbiAgICAgICAgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMuZmluZChcbiAgICAgICAgICAob3B0aW9uOiBhbnkpID0+IG9wdGlvbi5uYXR1cmFsVGV4dCA9PT0gY29uZGl0aW9uTGVmdCB8fCBvcHRpb24ubmFtZSA9PT0gY29uZGl0aW9uTGVmdCB8fCBvcHRpb24udmFsdWUgPT09IGNvbmRpdGlvbkxlZnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgIG5hdHVyYWxUZXh0QWN0aW9uSWQgPSBzZWxlY3RlZEFjdGlvbi5pZDtcbiAgICAgICAgLy8gVXNlIG5hdHVyYWxUZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBuYW1lIG9yIHZhbHVlXG4gICAgICAgIG5hdHVyYWxUZXh0VmFsdWUgPSBzZWxlY3RlZEFjdGlvbi5uYXR1cmFsVGV4dCB8fCBzZWxlY3RlZEFjdGlvbi5uYW1lIHx8IHNlbGVjdGVkQWN0aW9uLnZhbHVlIHx8IGNvbmRpdGlvbkxlZnQ7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENvbGxlY3QgdGVtcGxhdGUgdmFyaWFibGVzIHZhbHVlcyBmb3IgZXZlbnQgb2JqZWN0XG4gICAgY29uc3QgdGVtcGxhdGVWYXJpYWJsZXNEYXRhOiBhbnkgPSB7fTtcbiAgICAvLyBCdWlsZCB0ZXN0RGF0YUxpc3QgYXJyYXkgaW4gdGhlIG9yZGVyIG9mIHRlbXBsYXRlIHZhcmlhYmxlc1xuICAgIGNvbnN0IHRlc3REYXRhTGlzdDogQXJyYXk8eyB0ZXN0RGF0YTogc3RyaW5nOyB0ZXN0RGF0YVR5cGU6IHN0cmluZyB9PiA9IFtdO1xuICAgIFxuICAgIGlmICh0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybSAmJiB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgLy8gQWRkIHRvIGV2ZW50IG9iamVjdCAoZS5nLiwgc291cmNlX3ZhbHVlLCB0YXJnZXRfdmFsdWUpXG4gICAgICAgICAgdGVtcGxhdGVWYXJpYWJsZXNEYXRhW3ZhcmlhYmxlLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgLy8gQWRkIHRvIHRlc3REYXRhTGlzdCBhcnJheSAob3JkZXIgbWF0dGVycyAtIG1haW50YWluIHRlbXBsYXRlIHZhcmlhYmxlIG9yZGVyKVxuICAgICAgICAgIHRlc3REYXRhTGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHRlc3REYXRhOiBTdHJpbmcodmFsdWUpLFxuICAgICAgICAgICAgdGVzdERhdGFUeXBlOiAncmF3J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gQnVpbGQgY29uZGl0aW9uIHN0cmluZyB1c2luZyBuYXR1cmFsVGV4dCAobm90IElEKVxuICAgIHRoaXMuY29uZGl0aW9uID0gW25hdHVyYWxUZXh0VmFsdWUsIGNvbmRpdGlvbk9wZXJhdG9yLCBjb25kaXRpb25SaWdodF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICBcbiAgICAvLyBCdWlsZCBwYXlsb2FkIGZvciBlYWNoIG5ld2x5IGFkZGVkIEVMU0UgSUYgKHNvIHBhcmVudCBjYW4gY2FsbCBQT1NUIHRoZW4gUFVUIHdoZW4gQXBwbHkgaXMgY2xpY2tlZClcbiAgICBjb25zdCBuZXdFbHNlSWZCcmFuY2hlcyA9IHRoaXMuZWxzZUlmQnJhbmNoZXMubWFwKGIgPT4gdGhpcy5idWlsZEVsc2VJZkJyYW5jaFBheWxvYWQoYikpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBjb25maWcgd2l0aCBuZXcgdmFsdWVzXG4gICAgY29uc3QgdXBkYXRlZENvbmZpZzogQ29uZGl0aW9uU3RlcENvbmZpZyAmIHsgXG4gICAgICBuYXR1cmFsVGV4dEFjdGlvbklkPzogbnVtYmVyOyBcbiAgICAgIHRlbXBsYXRlVmFyaWFibGVzRGF0YT86IGFueTtcbiAgICAgIHRlc3REYXRhTGlzdD86IEFycmF5PHsgdGVzdERhdGE6IHN0cmluZzsgdGVzdERhdGFUeXBlOiBzdHJpbmcgfT47XG4gICAgICBuZXdFbHNlSWZCcmFuY2hlcz86IEFycmF5PHsgYWN0aW9uOiBzdHJpbmc7IG5hdHVyYWxUZXh0QWN0aW9uSWQ/OiBudW1iZXI7IHRlbXBsYXRlVmFyaWFibGVzRGF0YT86IGFueTsgdGVzdERhdGFMaXN0PzogQXJyYXk8eyB0ZXN0RGF0YTogc3RyaW5nOyB0ZXN0RGF0YVR5cGU6IHN0cmluZyB9PiB9PjtcbiAgICB9ID0ge1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICBjb25kaXRpb246IHRoaXMuY29uZGl0aW9uLCAvLyBDb25kaXRpb24gbm93IHVzZXMgbmF0dXJhbFRleHRcbiAgICAgIHN0ZXBUeXBlOiB0aGlzLmNvbmZpZy5zdGVwVHlwZSB8fCBTdGVwVHlwZXMuQ09ORElUSU9OX0lGLCAvLyBFbnN1cmUgc3RlcFR5cGUgaXMgc2V0XG4gICAgICAuLi4obmF0dXJhbFRleHRBY3Rpb25JZCAhPT0gdW5kZWZpbmVkICYmIHsgbmF0dXJhbFRleHRBY3Rpb25JZCB9IGFzIGFueSksXG4gICAgICAuLi4oT2JqZWN0LmtleXModGVtcGxhdGVWYXJpYWJsZXNEYXRhKS5sZW5ndGggPiAwICYmIHsgdGVtcGxhdGVWYXJpYWJsZXNEYXRhIH0gYXMgYW55KSxcbiAgICAgIC4uLih0ZXN0RGF0YUxpc3QubGVuZ3RoID4gMCAmJiB7IHRlc3REYXRhTGlzdCB9IGFzIGFueSksXG4gICAgICAuLi4obmV3RWxzZUlmQnJhbmNoZXMubGVuZ3RoID4gMCAmJiB7IG5ld0Vsc2VJZkJyYW5jaGVzIH0gYXMgYW55KSxcbiAgICB9O1xuICAgIFxuICAgIC8vIEVtaXQgaW5kaXZpZHVhbCBjaGFuZ2UgZXZlbnRcbiAgICB0aGlzLmNvbmRpdGlvbkNoYW5nZS5lbWl0KHRoaXMuY29uZGl0aW9uKTtcbiAgICBcbiAgICAvLyBFbWl0IHN0ZXAgdXBkYXRlIGV2ZW50IHdpdGggZnVsbCBjb25maWcgKGluY2x1ZGVzIG5ld0Vsc2VJZkJyYW5jaGVzIHNvIHBhcmVudCBjYW4gY3JlYXRlIHN0ZXBzIG9uIEFwcGx5KVxuICAgIGNvbnNvbGUubG9nKCdDb25kaXRpb24tc3RlcDogRW1pdHRpbmcgc3RlcFVwZGF0ZSBldmVudCcsIHVwZGF0ZWRDb25maWcpO1xuICAgIHRoaXMuc3RlcFVwZGF0ZS5lbWl0KHVwZGF0ZWRDb25maWcpO1xuICAgIFxuICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkVkaXRJbkRlcHRoKCk6IHZvaWQge1xuICAgIHRoaXMubW9yZU9wdGlvbnMuZW1pdCgpO1xuICB9XG5cbiAgb25MaW5rKCk6IHZvaWQge1xuICAgIC8vIE5vdCB1c2VkIGluIGNvbmRpdGlvbiBzdGVwLCBidXQgbmVlZGVkIGZvciByZWN1cnNpdmUgc3RlcCBncm91cHNcbiAgfVxuXG4gIG9uRHVwbGljYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZHVwbGljYXRlLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIG9uTW9yZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5lbWl0KCk7XG4gIH1cbiAgXG4gIC8qKiBHZXQgc2VsZWN0IGNvbmZpZyBmb3IgYSB0ZW1wbGF0ZSB2YXJpYWJsZSAqL1xuICBnZXRTZWxlY3RDb25maWdGb3JWYXJpYWJsZSh2YXJpYWJsZTogYW55LCBicmFuY2hJZE9ySXNFbHNlOiBzdHJpbmcgfCBib29sZWFuID0gZmFsc2UpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGNvbnN0IG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gKHZhcmlhYmxlLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0OiBzdHJpbmcpID0+ICh7XG4gICAgICBpZDogb3B0LFxuICAgICAgdmFsdWU6IG9wdCxcbiAgICAgIG5hbWU6IG9wdCxcbiAgICAgIGxhYmVsOiBvcHRcbiAgICB9KSk7XG5cbiAgICAvLyBJZiBicmFuY2hJZE9ySXNFbHNlIGlzIGEgc3RyaW5nLCBpdCdzIGEgYnJhbmNoIElEOyBvdGhlcndpc2UgaXQncyBhIGJvb2xlYW4gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBsZXQgZm9ybTogRm9ybUdyb3VwO1xuICAgIGlmICh0eXBlb2YgYnJhbmNoSWRPcklzRWxzZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IHRoaXMuZWxzZUlmQnJhbmNoZXMuZmluZChiID0+IGIuaWQgPT09IGJyYW5jaElkT3JJc0Vsc2UpO1xuICAgICAgZm9ybSA9IGJyYW5jaD8udGVtcGxhdGVWYXJpYWJsZXNGb3JtIHx8IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtID0gYnJhbmNoSWRPcklzRWxzZSA/ICh0aGlzLmVsc2VJZkJyYW5jaGVzWzBdPy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gfHwgdGhpcy5mYi5ncm91cCh7fSkpIDogdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdmFyaWFibGUubmFtZSxcbiAgICAgIHBsYWNlaG9sZGVyOiBgU2VsZWN0ICR7dmFyaWFibGUubGFiZWx9YCxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZm9ybSAmJiBmb3JtLmdldCh2YXJpYWJsZS5uYW1lKSkge1xuICAgICAgICAgIGZvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IFtjbGFzc109XCInY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSAnICsgKGlzTmVzdGVkID8gJyBjcWEtcGwtWzI0cHhdJyA6ICcnKVwiPlxuICA8IS0tIElubGluZSBFZGl0IE1vZGU6IENPTkRJVElPTiB0YWcsIHRocmVlIGZpZWxkcywgSUYvRUxTRSBjaGlwcywgRWRpdCBJbiBkZXB0aCwgQ2FuY2VsL0FwcGx5IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFZGl0aW5nXCIgY2xhc3M9XCJjcWEtcHktMi41IGNxYS1weC00IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICA8IS0tIEZpcnN0IFJvdzogQ09ORElUSU9OIHRhZywgYXV0b2NvbXBsZXRlLCBJRi9FTFNFIGluZGljYXRvcnMsIEVkaXQgSW4gZGVwdGgsIENhbmNlbC9BcHBseSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mbGV4LWdyb3dcIj5cbiAgICAgICAgPCEtLSBDT05ESVRJT04gVGFnIChvcmFuZ2UpIC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtWyNFQTU4MENdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1iZy1bI0ZGRURENV1cIj5cbiAgICAgICAgICBDT05ESVRJT05cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gRmlyc3QgZmllbGQ6IGxlZnQgb3BlcmFuZCAoZS5nLiBVc2VydHlwZSkgLSBhdXRvY29tcGxldGUgd2l0aCBJRl9DT05ESVRJT04gbmF0dXJhbCB0ZXh0IGFjdGlvbnMgLS0+XG4gICAgICAgIDxjcWEtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgKm5nSWY9XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiY29uZGl0aW9uTGVmdEF1dG9jb21wbGV0ZU9wdGlvbnNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJlZGl0Rm9ybS5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkVkaXRGb3JtRmllbGRDaGFuZ2UoJ2NvbmRpdGlvbkxlZnQnLCAkZXZlbnQpXCJcbiAgICAgICAgICAob3B0aW9uU2VsZWN0KT1cIm9uQ29uZGl0aW9uTGVmdFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBjb25kaXRpb25cIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1tYXgtdy1bMjE2cHhdXCI+PC9jcWEtYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgIDwhLS0gU2Vjb25kIFJvdzogVGVtcGxhdGUgVmFyaWFibGVzIFNlY3Rpb24gKHNob3duIHdoZW4gdGVtcGxhdGUgaXMgc2VsZWN0ZWQsIGlubGluZSBiZWZvcmUgRWRpdCBJbiBkZXB0aCkgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRlbXBsYXRlICYmIHRlbXBsYXRlVmFyaWFibGVzICYmIHRlbXBsYXRlVmFyaWFibGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXJvdyBjcWEtZmxleC13cmFwIGNxYS1nYXAtM1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIHRlbXBsYXRlVmFyaWFibGVzXCI+XG4gICAgICAgICAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZSB8fCB2YXJpYWJsZS52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gTm9uLWJvb2xlYW4gdmFyaWFibGVzIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLnR5cGUgIT09ICdib29sZWFuJyAmJiB2YXJpYWJsZS5uYW1lICE9PSAnY3VzdG9tX2NvZGUnXCI+XG4gICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gZm9yIHNlbGVjdCB2YXJpYWJsZXMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS5uYW1lID09PSAndHlwZScgfHwgdmFyaWFibGUubmFtZSA9PT0gJ3Njcm9sbFRvJyB8fCB2YXJpYWJsZS5vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiIHN0eWxlPVwibWluLXdpZHRoOiAxNTBweDtcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFxuICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJ0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZ0ZvclZhcmlhYmxlKHZhcmlhYmxlLCBmYWxzZSlcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPCEtLSBUZXh0IElucHV0IGZvciBvdGhlciB2YXJpYWJsZXMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS5uYW1lICE9PSAndHlwZScgJiYgdmFyaWFibGUubmFtZSAhPT0gJ3Njcm9sbFRvJyAmJiAhdmFyaWFibGUub3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIm1pbi13aWR0aDogMTUwcHg7XCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciAnICsgdmFyaWFibGUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8udmFsdWUgfHwgdmFyaWFibGUudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIElGIC8gRUxTRSBpbmRpY2F0b3JzIC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0yIGNxYS1weS1bMnB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtdGV4dC1bOHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWJnLVsjRENGQ0U3XSBjcWEtdGV4dC1bIzAwODIzNl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNCOUY4Q0ZdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjVcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIiB2aWV3Qm94PVwiMCAwIDggOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNi42NjYzNCAyTDIuOTk5NjcgNS42NjY2N0wxLjMzMzAxIDRcIiBzdHJva2U9XCIjMDA4MjM2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgIElGXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPCEtLSBBZGQgRUxTRSBJRiBidXR0b24gLSBhbHdheXMgdmlzaWJsZSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJvbkFkZEVsc2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWzhweF0gY3FhLWxlYWRpbmctWzEycHhdIGNxYS1iZy1bI0YzRjRGNl0gY3FhLXRleHQtWyM5OUExQUZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtYmctWyNFNUU3RUJdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgIEFkZCBFTFNFIElGXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8IS0tIEFkZCBFbHNlIGJ1dHRvbiAtIGNhbGxzIEFQSSB0byBjcmVhdGUgQ09ORElUSU9OX0VMU0Ugc3RlcCAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJvbkFkZEVsc2VCcmFuY2goKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWzhweF0gY3FhLWxlYWRpbmctWzEycHhdIGNxYS1iZy1bI0YzRjRGNl0gY3FhLXRleHQtWyM5OUExQUZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtYmctWyNFNUU3RUJdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgIEFkZCBFbHNlXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS0gRWRpdCBJbiBkZXB0aCBsaW5rIC0tPlxuICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJvbkVkaXRJbkRlcHRoKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtWzJweF0gY3FhLW5vLXVuZGVybGluZVwiPlxuICAgICAgICAgIEVkaXQgSW4gZGVwdGhcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIiB2aWV3Qm94PVwiMCAwIDggOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMi4wMzgwOSA2Ljc0MzI5TDIuNjI4MDkgNy4zMzMyOUw1Ljk2MTQyIDMuOTk5OTZMMi42MjgwOSAwLjY2NjYyNkwyLjAzODA5IDEuMjU2NjNMNC43ODE0MiAzLjk5OTk2TDIuMDM4MDkgNi43NDMyOVpcIiBmaWxsPVwiIzNGNDNFRVwiLz48L3N2Zz5cbiAgICAgICAgPC9hPiAgICAgIFxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIENhbmNlbCAvIEFwcGx5IGJ1dHRvbnMgLSBzaG93biBvbiBJRiByb3cgd2hlbiBubyBFTFNFIElGIGJyYW5jaGVzIGFyZSBwcmVzZW50IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImVsc2VJZkJyYW5jaGVzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgYnRuU2l6ZT1cImxnXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdJ1wiIFt0ZXh0XT1cIidDYW5jZWwnXCIgKGNsaWNrZWQpPVwib25FZGl0Q2FuY2VsKClcIj48L2NxYS1idXR0b24+XG4gICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0nXCIgW3RleHRdPVwiJ0FwcGx5J1wiIChjbGlja2VkKT1cIm9uRWRpdEFwcGx5KClcIj48L2NxYS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICBcbiAgPC9kaXY+XG5cbiAgPCEtLSBFTFNFIElGIFNlY3Rpb25zIGluIEVkaXQgTW9kZSAtIExvb3AgdGhyb3VnaCBhbGwgRUxTRSBJRiBicmFuY2hlcyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnJhbmNoIG9mIGVsc2VJZkJyYW5jaGVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPGRpdiAqbmdJZj1cImlzRWRpdGluZ1wiIGNsYXNzPVwiY3FhLXB5LTIuNSBjcWEtcHgtNCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdXCI+XG4gICAgICA8IS0tIEZpcnN0IFJvdzogUmVtb3ZlIEVMU0UgSUYgYnV0dG9uLCBhdXRvY29tcGxldGUsIEVkaXQgSW4gZGVwdGgsIENhbmNlbC9BcHBseSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC1ncm93XCI+XG4gICAgICAgICAgPCEtLSBSZW1vdmUgRUxTRSBJRiBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmVFbHNlKGJyYW5jaC5pZClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWzhweF0gY3FhLWxlYWRpbmctWzEycHhdIGNxYS1iZy1bI0YzRjRGNl0gY3FhLXRleHQtWyM5OUExQUZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLWJnLVsjRTVFN0VCXSBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIj5cbiAgICAgICAgICAgIFJlbW92ZSBFTFNFIElGXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIEVMU0UgSUYgYXV0b2NvbXBsZXRlIGZpZWxkOiBzYW1lIGFzIElGIGNvbmRpdGlvbiAtLT5cbiAgICAgICAgICA8Y3FhLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgKm5nSWY9XCJicmFuY2guZm9ybVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJjb25kaXRpb25MZWZ0QXV0b2NvbXBsZXRlT3B0aW9uc1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwiYnJhbmNoLmZvcm0uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJicmFuY2guZm9ybS5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAob3B0aW9uU2VsZWN0KT1cIm9uRWxzZUNvbmRpdGlvbkxlZnRTZWxlY3QoJGV2ZW50LCBicmFuY2guaWQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNvbmRpdGlvblwiXG4gICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1tYXgtdy1bMjE2cHhdXCI+PC9jcWEtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gU2Vjb25kIFJvdzogRUxTRSBJRiBUZW1wbGF0ZSBWYXJpYWJsZXMgU2VjdGlvbiAoc2hvd24gd2hlbiB0ZW1wbGF0ZSBpcyBzZWxlY3RlZCwgaW5saW5lIGJlZm9yZSBFZGl0IEluIGRlcHRoKSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLnNlbGVjdGVkVGVtcGxhdGUgJiYgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzICYmIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1yb3cgY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZSB8fCB2YXJpYWJsZS52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gTm9uLWJvb2xlYW4gdmFyaWFibGVzIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUudHlwZSAhPT0gJ2Jvb2xlYW4nICYmIHZhcmlhYmxlLm5hbWUgIT09ICdjdXN0b21fY29kZSdcIj5cbiAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIGZvciBzZWxlY3QgdmFyaWFibGVzIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS5uYW1lID09PSAndHlwZScgfHwgdmFyaWFibGUubmFtZSA9PT0gJ3Njcm9sbFRvJyB8fCB2YXJpYWJsZS5vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgc3R5bGU9XCJtaW4td2lkdGg6IDE1MHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZ0ZvclZhcmlhYmxlKHZhcmlhYmxlLCBicmFuY2guaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPCEtLSBUZXh0IElucHV0IGZvciBvdGhlciB2YXJpYWJsZXMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLm5hbWUgIT09ICd0eXBlJyAmJiB2YXJpYWJsZS5uYW1lICE9PSAnc2Nyb2xsVG8nICYmICF2YXJpYWJsZS5vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgc3R5bGU9XCJtaW4td2lkdGg6IDE1MHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnZhbHVlIHx8IHZhcmlhYmxlLnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ2YXJpYWJsZS5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRWRpdCBJbiBkZXB0aCBsaW5rIC0tPlxuICAgICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9uRWRpdEluRGVwdGgoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVsycHhdIGNxYS1uby11bmRlcmxpbmVcIj5cbiAgICAgICAgICAgIEVkaXQgSW4gZGVwdGhcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgOCA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0yLjAzODA5IDYuNzQzMjlMMi42MjgwOSA3LjMzMzI5TDUuOTYxNDIgMy45OTk5NkwyLjYyODA5IDAuNjY2NjI2TDIuMDM4MDkgMS4yNTY2M0w0Ljc4MTQyIDMuOTk5OTZMMi4wMzgwOSA2Ljc0MzI5WlwiIGZpbGw9XCIjM0Y0M0VFXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gQ2FuY2VsIC8gQXBwbHkgYnV0dG9ucyAtIHNob3duIGluIGxhc3QgRUxTRSBJRiByb3cgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpID09PSBlbHNlSWZCcmFuY2hlcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSdcIiBbdGV4dF09XCInQ2FuY2VsJ1wiIChjbGlja2VkKT1cIm9uRWRpdENhbmNlbCgpXCI+PC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0nXCIgW3RleHRdPVwiJ0FwcGx5J1wiIChjbGlja2VkKT1cIm9uRWRpdEFwcGx5KClcIj48L2NxYS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gQ29uZGl0aW9uIEhlYWRlciAobm9ybWFsIHZpZXcgd2hlbiBub3QgZWRpdGluZykgLS0+XG4gIDxkaXYgKm5nSWY9XCIhaXNFZGl0aW5nXCIgW2NsYXNzXT1cIidzdGVwLXJvdyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktMiAnICsgKGlzSW5zaWRlTG9vcCA/ICdjcWEtcGwtMTAgY3FhLXByLTQnIDogJ2NxYS1weC00JylcIj5cbiAgICA8IS0tIEV4cGFuZC9Db2xsYXBzZSBJY29uIC0tPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblRvZ2dsZUV4cGFuZGVkKClcIiBjbGFzcz1cImNxYS1wLTBcIj5cbiAgICAgIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cIiFleHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTEyIDEwTDggNkw0IDEwXCIgc3Ryb2tlPVwiIzZCNzI4MFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gSUYvRUxTRSBJY29uIC0tPlxuICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNCAyVjEwXCIgc3Ryb2tlPVwiIzdCMzMwNlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTIgNkMxMy4xMDQ2IDYgMTQgNS4xMDQ1NyAxNCA0QzE0IDIuODk1NDMgMTMuMTA0NiAyIDEyIDJDMTAuODk1NCAyIDEwIDIuODk1NDMgMTAgNEMxMCA1LjEwNDU3IDEwLjg5NTQgNiAxMiA2WlwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzdCMzMwNlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNNCAxNEM1LjEwNDU3IDE0IDYgMTMuMTA0NiA2IDEyQzYgMTAuODk1NCA1LjEwNDU3IDEwIDQgMTBDMi44OTU0MyAxMCAyIDEwLjg5NTQgMiAxMkMyIDEzLjEwNDYgMi44OTU0MyAxNCA0IDE0WlwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzdCMzMwNlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTTEyIDZDMTIgNy41OTEzIDExLjM2NzkgOS4xMTc0MiAxMC4yNDI2IDEwLjI0MjZDOS4xMTc0MiAxMS4zNjc5IDcuNTkxMyAxMiA2IDEyXCIgc3Ryb2tlPVwiIzdCMzMwNlwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICA8L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gSUYvRUxTRSBMYWJlbCAtLT5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjN0IzMzA2XSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctbm9uZVwiPlxuICAgICAgSUYgLyBFTFNFXG4gICAgPC9zcGFuPlxuXG4gICAgPCEtLSBDb25kaXRpb24gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1tbC0yIGNxYS1mbGV4LTFcIj5cbiAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY29uZGl0aW9uXCI+PC9zcGFuPlxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgIElmXG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ11cIj4uc3VjY2Vzcy1tZXNzYWdlPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxOHB4XVwiPlxuICAgICAgICBpcyB2aXNpYmxlXG4gICAgICA8L3NwYW4+IC0tPlxuICAgICAgPCEtLSA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbdmFsdWVdPVwiY29uZGl0aW9uXCJcbiAgICAgICAgKGlucHV0KT1cIm9uQ29uZGl0aW9uQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJlbGVtZW50IGAuc3VjY2Vzcy1tZXNzYWdlYCBpcyB2aXNpYmxlXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHgtMyBjcWEtcHktMS41IGNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1ncmF5LTMwMCBjcWEtYmctd2hpdGUgY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc20gY3FhLWZsZXgtMSBjcWEtbWF4LXctbWQgY3FhLW91dGxpbmUtbm9uZSBmb2N1czpjcWEtcmluZy0yIGZvY3VzOmNxYS1yaW5nLXByaW1hcnkgZm9jdXM6Y3FhLXJpbmctb3BhY2l0eS01MFwiXG4gICAgICAvPiAtLT5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU3RlcHMgU3VtbWFyeSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNxYS1tbC1hdXRvIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFNUU1XSBjcWEtcm91bmRlZC1sZyBjcWEtcHktMC41IGNxYS1weC0yIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+XG4gICAgICB7eyBnZXRTdGVwc1N1bW1hcnkoKSB9fVxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBY3Rpb24gSWNvbnM6IEVkaXQsIExpbmssIER1cGxpY2F0ZSwgRGVsZXRlIChzaG93IG9uIGhvdmVyKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3RlcC1hY3Rpb25zIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC1bN3B4XVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRWRpdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0aXRsZT1cIkVkaXRcIiBjbGFzcz1cImNxYS1wLTAgY3FhLXRleHQtWyM5OUExQWZdIGhvdmVyOmNxYS10ZXh0LVsjMTQ0N0U2XVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTcgMTEuNjY2NkgxMi4yNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk05LjU1MjA4IDIuMTEyOEM5Ljc4NDMgMS44ODA1OCAxMC4wOTkzIDEuNzUwMTIgMTAuNDI3NyAxLjc1MDEyQzEwLjc1NjEgMS43NTAxMiAxMS4wNzEgMS44ODA1OCAxMS4zMDMzIDIuMTEyOEMxMS41MzU1IDIuMzQ1MDIgMTEuNjY1OSAyLjY1OTk4IDExLjY2NTkgMi45ODgzOEMxMS42NjU5IDMuMzE2NzkgMTEuNTM1NSAzLjYzMTc1IDExLjMwMzMgMy44NjM5N0w0LjI5NzQyIDEwLjg3MDRDNC4xNTg2NCAxMS4wMDkyIDMuOTg3MSAxMS4xMTA3IDMuNzk4NjcgMTEuMTY1NkwyLjEyMzMzIDExLjY1NDRDMi4wNzMxNCAxMS42NjkgMi4wMTk5MyAxMS42Njk5IDEuOTY5MjggMTEuNjU2OUMxLjkxODYzIDExLjY0MzkgMS44NzI0IDExLjYxNzYgMS44MzU0MyAxMS41ODA2QzEuNzk4NDYgMTEuNTQzNyAxLjc3MjEgMTEuNDk3NCAxLjc1OTEzIDExLjQ0NjhDMS43NDYxNSAxMS4zOTYxIDEuNzQ3MDMgMTEuMzQyOSAxLjc2MTY3IDExLjI5MjdMMi4yNTA1IDkuNjE3MzhDMi4zMDU0NiA5LjQyOTE2IDIuNDA2OTggOS4yNTc4MyAyLjU0NTY3IDkuMTE5MjJMOS41NTIwOCAyLjExMjhaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uTGluaygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0aXRsZT1cIkxpbmtcIiBjbGFzcz1cImNxYS1wLTAgY3FhLXRleHQtWyM5OUExQWZdIGhvdmVyOmNxYS10ZXh0LVsjMTQ0N0U2XVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMDAwNjUgOS45MTY3MUgzLjY2NzMyQzIuNzgzMjYgOS45MTY3MSAxLjkzNTQyIDkuNjA5NDIgMS4zMTAzIDkuMDYyNDRDMC42ODUxNzQgOC41MTU0NSAwLjMzMzk4NCA3Ljc3MzU5IDAuMzMzOTg0IDcuMDAwMDRDMC4zMzM5ODQgNi4yMjY0OSAwLjY4NTE3NCA1LjQ4NDYzIDEuMzEwMyA0LjkzNzY1QzEuOTM1NDIgNC4zOTA2NiAyLjc4MzI2IDQuMDgzMzcgMy42NjczMiA0LjA4MzM3SDUuMDAwNjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNOSA0LjA4MzM3SDEwLjMzMzNDMTEuMjE3NCA0LjA4MzM3IDEyLjA2NTIgNC4zOTA2NiAxMi42OTA0IDQuOTM3NjVDMTMuMzE1NSA1LjQ4NDYzIDEzLjY2NjcgNi4yMjY0OSAxMy42NjY3IDcuMDAwMDRDMTMuNjY2NyA3Ljc3MzU5IDEzLjMxNTUgOC41MTU0NSAxMi42OTA0IDkuMDYyNDRDMTIuMDY1MiA5LjYwOTQyIDExLjIxNzQgOS45MTY3MSAxMC4zMzMzIDkuOTE2NzFIOVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjMzMzk4IDdIOS42NjczMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkR1cGxpY2F0ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0aXRsZT1cIkR1cGxpY2F0ZVwiIGNsYXNzPVwiY3FhLXAtMCBjcWEtdGV4dC1bIzk5QTFBZl0gaG92ZXI6Y3FhLXRleHQtWyMxNDQ3RTZdXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTEuNjY2IDQuNjY2NjNINS44MzI2OEM1LjE4ODM1IDQuNjY2NjMgNC42NjYwMiA1LjE4ODk2IDQuNjY2MDIgNS44MzMyOVYxMS42NjY2QzQuNjY2MDIgMTIuMzExIDUuMTg4MzUgMTIuODMzMyA1LjgzMjY4IDEyLjgzMzNIMTEuNjY2QzEyLjMxMDMgMTIuODMzMyAxMi44MzI3IDEyLjMxMSAxMi44MzI3IDExLjY2NjZWNS44MzMyOUMxMi44MzI3IDUuMTg4OTYgMTIuMzEwMyA0LjY2NjYzIDExLjY2NiA0LjY2NjYzWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0yLjMzMjY4IDkuMzMzMjlDMS42OTEwMiA5LjMzMzI5IDEuMTY2MDIgOC44MDgyOSAxLjE2NjAyIDguMTY2NjNWMi4zMzMyOUMxLjE2NjAyIDEuNjkxNjMgMS42OTEwMiAxLjE2NjYzIDIuMzMyNjggMS4xNjY2M0g4LjE2NjAyQzguODA3NjggMS4xNjY2MyA5LjMzMjY4IDEuNjkxNjMgOS4zMzI2OCAyLjMzMzI5XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRGVsZXRlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIHRpdGxlPVwiRGVsZXRlXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS10ZXh0LVsjZmY2NDY3XSBob3ZlcjpjcWEtdGV4dC1bI0M2MzUzNV1cIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xLjc1IDMuNUgxMi4yNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMS4wODI3IDMuNVYxMS42NjY3QzExLjA4MjcgMTIuMjUgMTAuNDk5MyAxMi44MzMzIDkuOTE2MDIgMTIuODMzM0g0LjA4MjY4QzMuNDk5MzUgMTIuODMzMyAyLjkxNjAyIDEyLjI1IDIuOTE2MDIgMTEuNjY2N1YzLjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC42NjYwMiAzLjQ5OTk2VjIuMzMzMjlDNC42NjYwMiAxLjc0OTk2IDUuMjQ5MzUgMS4xNjY2MyA1LjgzMjY4IDEuMTY2NjNIOC4xNjYwMkM4Ljc0OTM1IDEuMTY2NjMgOS4zMzI2OCAxLjc0OTk2IDkuMzMyNjggMi4zMzMyOVYzLjQ5OTk2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTUuODMzOTggNi40MTY2M1Y5LjkxNjYzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTguMTY2MDIgNi40MTY2M1Y5LjkxNjYzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgd2l0aCBCcmFuY2hlcyAtLT5cbiAgPGRpdiAqbmdJZj1cImV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8IS0tIEJyYW5jaGVzIChJRiBUUlVFLCBFTFNFIElGLCBFTFNFKSAtLT5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgYnJhbmNoZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPCEtLSBCcmFuY2ggSGVhZGVyIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBbY2xhc3NdPVwiJ2NxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgJyArIGdldEJyYW5jaFRleHRDb2xvcihicmFuY2gpICsgJyAnICsgZ2V0QnJhbmNoQ29sb3JDbGFzcyhicmFuY2gpXCI+XG4gICAgICAgIDxzcGFuPnt7IGdldEJyYW5jaExhYmVsKGJyYW5jaCkgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYnJhbmNoLmFjdGlvblwiIFtpbm5lckhUTUxdPVwiYnJhbmNoLmFjdGlvblwiIGNsYXNzPVwiY3FhLXRleHQtWyMxMTE4MjddXCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQnJhbmNoIENvbnRlbnQgKE5lc3RlZCBTdGVwcyDigJMgcmVuZGVyZXIgZGlzcGF0Y2hlcyBieSBzdGVwIHR5cGUsIG4tbGV2ZWwgbmVzdGluZykgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIWlzUmVvcmRlclwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDxjcWEtdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RlcCBvZiBicmFuY2gubmVzdGVkU3RlcHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgIFtpbmRleF09XCJpXCJcbiAgICAgICAgICBbYnJhbmNoXT1cImJyYW5jaFwiXG4gICAgICAgICAgW2lzTmVzdGVkXT1cInRydWVcIlxuICAgICAgICAgIFtpc1Jlb3JkZXJdPVwiaXNSZW9yZGVyXCJcbiAgICAgICAgICBbZGF0YVByb2ZpbGVPcHRpb25zXT1cImRhdGFQcm9maWxlT3B0aW9uc1wiIFtoYXNNb3JlRGF0YVByb2ZpbGVzXT1cImhhc01vcmVEYXRhUHJvZmlsZXNcIiBbaXNMb2FkaW5nRGF0YVByb2ZpbGVzXT1cImlzTG9hZGluZ0RhdGFQcm9maWxlc1wiXG4gICAgICAgICAgW25hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnNdPVwibmF0dXJhbFRleHRBY3Rpb25zT3B0aW9uc1wiXG4gICAgICAgICAgKGJyYW5jaFN0ZXBDaGFuZ2UpPVwib25CcmFuY2hTdGVwQ2hhbmdlKCRldmVudC5icmFuY2gsICRldmVudC5zdGVwLCAkZXZlbnQuc3RlcEluZGV4KVwiXG4gICAgICAgICAgKGFkZFN0ZXBGb3JCcmFuY2gpPVwib25BZGRTdGVwKCRldmVudC5icmFuY2gpXCJcbiAgICAgICAgICAoZGVsZXRlU3RlcFdpdGhCcmFuY2gpPVwib25EZWxldGVTdGVwKCRldmVudC5icmFuY2gsICRldmVudC5zdGVwSW5kZXgpXCJcbiAgICAgICAgICAodG9nZ2xlRXhwYW5kZWQpPVwib25OZXN0ZWRUb2dnbGVFeHBhbmRlZCgkZXZlbnQsIGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChncm91cE5hbWVDaGFuZ2UpPVwiJGFueShzdGVwKS5ncm91cE5hbWUgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoZGVzY3JpcHRpb25DaGFuZ2UpPVwiJGFueShzdGVwKS5kZXNjcmlwdGlvbiA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChyZXVzYWJsZUNoYW5nZSk9XCIkYW55KHN0ZXApLnJldXNhYmxlID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKG9wZW5FeHRlcm5hbCk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGVkaXQpPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChsaW5rKT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoZHVwbGljYXRlKT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoY29uZGl0aW9uQ2hhbmdlKT1cIiRhbnkoc3RlcCkuY29uZGl0aW9uID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGFkZEJyYW5jaCk9XCJvbk5lc3RlZENvbmRpdGlvbkFkZEJyYW5jaCgkYW55KHN0ZXApKTsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChkZWxldGVCcmFuY2gpPVwib25OZXN0ZWRDb25kaXRpb25EZWxldGVCcmFuY2goJGFueShzdGVwKSwgJGV2ZW50KTsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICh0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UpPVwiJGFueShzdGVwKS50ZXN0RGF0YVByb2ZpbGUgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoc3RhcnRTdGVwQ2hhbmdlKT1cIiRhbnkoc3RlcCkuc3RhcnRTdGVwID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGVuZFN0ZXBDaGFuZ2UpPVwiJGFueShzdGVwKS5lbmRTdGVwID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKG1heEl0ZXJhdGlvbnNDaGFuZ2UpPVwiJGFueShzdGVwKS5tYXhJdGVyYXRpb25zID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGV2ZW50VHlwZUNoYW5nZSk9XCIkYW55KHN0ZXApLmV2ZW50VHlwZSA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChwYXJhbWV0ZXJDaGFuZ2UpPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiJGFueShzdGVwKS5zZWxlY3RlZCA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChsb2FkTW9yZURhdGFQcm9maWxlcyk9XCJsb2FkTW9yZURhdGFQcm9maWxlcy5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzZWFyY2hEYXRhUHJvZmlsZXMpPVwic2VhcmNoRGF0YVByb2ZpbGVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHN0ZXBVcGRhdGUpPVwic3RlcFVwZGF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChkbmREcm9wSW5ab25lKT1cImRuZERyb3BJblpvbmUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2tBY3Rpb24pPVwiY2xpY2tBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2NxYS10ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzUmVvcmRlclwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIG5lc3RlZC1zdGVwLWRyb3AtbGlzdFwiXG4gICAgICAgICAgIFtkbmREcm9wem9uZV09XCJbJ3N0ZXAnXVwiXG4gICAgICAgICAgIGRuZEVmZmVjdEFsbG93ZWQ9XCJtb3ZlXCJcbiAgICAgICAgICAgZG5kRHJhZ292ZXJDbGFzcz1cImRuZERyYWdvdmVyXCJcbiAgICAgICAgICAgKGRuZERyb3ApPVwib25EbmREcm9wKCRldmVudCwgYnJhbmNoKVwiPlxuICAgICAgICA8ZGl2IGRuZFBsYWNlaG9sZGVyUmVmIGNsYXNzPVwic3RlcC1kcmFnLXBsYWNlaG9sZGVyLW5lc3RlZCBjcWEtbXktMSBjcWEtbWluLWgtWzUwcHhdIGNxYS1ib3JkZXItMiBjcWEtYm9yZGVyLWRhc2hlZCBjcWEtYm9yZGVyLVsjM0Y0M0VFXSBjcWEtcm91bmRlZCBjcWEtYmctW3JnYmEoNjMsNjcsMjM4LDAuMDgpXSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQteHNcIj5Ecm9wIGhlcmU8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3RlcCBvZiBicmFuY2gubmVzdGVkU3RlcHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm5lc3RlZC1zdGVwLWRyYWctaXRlbVwiXG4gICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJzdGVwXCJcbiAgICAgICAgICAgICBkbmRFZmZlY3RBbGxvd2VkPVwibW92ZVwiXG4gICAgICAgICAgICAgZG5kVHlwZT1cInN0ZXBcIj5cbiAgICAgICAgICA8Y3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyXG4gICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpXCJcbiAgICAgICAgICAgIFticmFuY2hdPVwiYnJhbmNoXCJcbiAgICAgICAgICAgIFtpc05lc3RlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpc1Jlb3JkZXJdPVwiaXNSZW9yZGVyXCJcbiAgICAgICAgICAgIFtkYXRhUHJvZmlsZU9wdGlvbnNdPVwiZGF0YVByb2ZpbGVPcHRpb25zXCIgW2hhc01vcmVEYXRhUHJvZmlsZXNdPVwiaGFzTW9yZURhdGFQcm9maWxlc1wiIFtpc0xvYWRpbmdEYXRhUHJvZmlsZXNdPVwiaXNMb2FkaW5nRGF0YVByb2ZpbGVzXCJcbiAgICAgICAgICAgIFtuYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zXT1cIm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnNcIlxuICAgICAgICAgICAgKGJyYW5jaFN0ZXBDaGFuZ2UpPVwib25CcmFuY2hTdGVwQ2hhbmdlKCRldmVudC5icmFuY2gsICRldmVudC5zdGVwLCAkZXZlbnQuc3RlcEluZGV4KVwiXG4gICAgICAgICAgICAoYWRkU3RlcEZvckJyYW5jaCk9XCJvbkFkZFN0ZXAoJGV2ZW50LmJyYW5jaClcIlxuICAgICAgICAgICAgKGRlbGV0ZVN0ZXBXaXRoQnJhbmNoKT1cIm9uRGVsZXRlU3RlcCgkZXZlbnQuYnJhbmNoLCAkZXZlbnQuc3RlcEluZGV4KVwiXG4gICAgICAgICAgICAodG9nZ2xlRXhwYW5kZWQpPVwib25OZXN0ZWRUb2dnbGVFeHBhbmRlZCgkZXZlbnQsIGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGdyb3VwTmFtZUNoYW5nZSk9XCIkYW55KHN0ZXApLmdyb3VwTmFtZSA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGRlc2NyaXB0aW9uQ2hhbmdlKT1cIiRhbnkoc3RlcCkuZGVzY3JpcHRpb24gPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChyZXVzYWJsZUNoYW5nZSk9XCIkYW55KHN0ZXApLnJldXNhYmxlID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAob3BlbkV4dGVybmFsKT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChlZGl0KT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChsaW5rKT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChkdXBsaWNhdGUpPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGNvbmRpdGlvbkNoYW5nZSk9XCIkYW55KHN0ZXApLmNvbmRpdGlvbiA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGFkZEJyYW5jaCk9XCJvbk5lc3RlZENvbmRpdGlvbkFkZEJyYW5jaCgkYW55KHN0ZXApKTsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGRlbGV0ZUJyYW5jaCk9XCJvbk5lc3RlZENvbmRpdGlvbkRlbGV0ZUJyYW5jaCgkYW55KHN0ZXApLCAkZXZlbnQpOyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAodGVzdERhdGFQcm9maWxlQ2hhbmdlKT1cIiRhbnkoc3RlcCkudGVzdERhdGFQcm9maWxlID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoc3RhcnRTdGVwQ2hhbmdlKT1cIiRhbnkoc3RlcCkuc3RhcnRTdGVwID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoZW5kU3RlcENoYW5nZSk9XCIkYW55KHN0ZXApLmVuZFN0ZXAgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChtYXhJdGVyYXRpb25zQ2hhbmdlKT1cIiRhbnkoc3RlcCkubWF4SXRlcmF0aW9ucyA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGV2ZW50VHlwZUNoYW5nZSk9XCIkYW55KHN0ZXApLmV2ZW50VHlwZSA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKHBhcmFtZXRlckNoYW5nZSk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIiRhbnkoc3RlcCkuc2VsZWN0ZWQgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZURhdGFQcm9maWxlcyk9XCJsb2FkTW9yZURhdGFQcm9maWxlcy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKHNlYXJjaERhdGFQcm9maWxlcyk9XCJzZWFyY2hEYXRhUHJvZmlsZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzdGVwVXBkYXRlKT1cInN0ZXBVcGRhdGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkbmREcm9wSW5ab25lKT1cImRuZERyb3BJblpvbmUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGlja0FjdGlvbik9XCJjbGlja0FjdGlvbi5lbWl0KCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2NxYS10ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRU5EIElGIE1hcmtlciAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInY3FhLXBsLTQgY3FhLXB5LTEgY3FhLXRleHQtWyM3QjMzMDZdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtJ1wiIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNUU3RUI7XCI+XG4gICAgICBFTkQgSUZcbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
796
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9jb25kaXRpb24tc3RlcC9jb25kaXRpb24tc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2NvbmRpdGlvbi1zdGVwL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXdDLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBMEIsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUErRyxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsSyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFVckUsTUFBTSxPQUFPLDhCQUE4QjtJQThFekMsWUFBb0IsRUFBZSxFQUFVLEdBQXNCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXpFMUQsYUFBUSxHQUFzQixFQUFFLENBQUM7UUFDakMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDcEMsNENBQTRDO1FBQ25DLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUN4QyxnRUFBZ0U7UUFDdkQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlDLHNDQUFzQztRQUM3QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDaEQsNERBQTREO1FBQ25ELDhCQUF5QixHQUFVLEVBQUUsQ0FBQztRQUMv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QUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQWlDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERuZERyb3BFdmVudCB9IGZyb20gJ25neC1kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29uZGl0aW9uU3RlcENvbmZpZywgQ29uZGl0aW9uQnJhbmNoLCBUZXN0Q2FzZVN0ZXBDb25maWcsIE5vcm1hbFN0ZXBDb25maWcsIExvb3BTdGVwQ29uZmlnLCBTdGVwR3JvdXBDb25maWcsIFN0ZXBUeXBlcyB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBTVEVQX1JPV19BQ1RJT05TX1NUWUxFUyB9IGZyb20gJy4uL3N0ZXAtcm93LWFjdGlvbnMuc3R5bGVzJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IENxYUF1dG9jb21wbGV0ZU9wdGlvbiB9IGZyb20gJy4uLy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1jYXNlLWNvbmRpdGlvbi1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBzdHlsZXM6IFtTVEVQX1JPV19BQ1RJT05TX1NUWUxFU10sXG59KVxuZXhwb3J0IGNsYXNzIFRlc3RDYXNlQ29uZGl0aW9uU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnITogQ29uZGl0aW9uU3RlcENvbmZpZztcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbmRpdGlvbiE6IHN0cmluZztcbiAgQElucHV0KCkgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdID0gW107XG4gIEBJbnB1dCgpIGV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNOZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNJbnNpZGVMb29wOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzUmVvcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogT3B0aW9ucyBmb3IgdGhlIGRhdGEgcHJvZmlsZSBkcm9wZG93biAqL1xuICBASW5wdXQoKSBkYXRhUHJvZmlsZU9wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBJbmRpY2F0ZXMgaWYgbW9yZSBkYXRhIHByb2ZpbGVzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZURhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZGF0YSBwcm9maWxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdEYXRhUHJvZmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgZm9yIHdoaWxlIGxvb3AgY29uZGl0aW9uICovXG4gIEBJbnB1dCgpIG5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKiBGdW5jdGlvbiB0byBwcm9jZXNzIHRlbXBsYXRlIHZhcmlhYmxlcyAoc2ltaWxhciB0byBzdGVwLWJ1aWxkZXItY29uZGl0aW9uKSAqL1xuICBASW5wdXQoKSBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlczogKHRlbXBsYXRlOiBhbnkpID0+IGFueVtdID0gKCkgPT4gW107XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgaGVhZGVyIHNob3dzIGlubGluZSBlZGl0IGZvcm0gKGZpZWxkcywgb3BlcmF0b3Igc2VsZWN0LCBDYW5jZWwvQXBwbHkpICovXG4gIGlzRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBcnJheSBvZiBFTFNFIElGIGJyYW5jaGVzIGluIGVkaXQgbW9kZSAqL1xuICBlbHNlSWZCcmFuY2hlczogQXJyYXk8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZm9ybTogRm9ybUdyb3VwO1xuICAgIHNlbGVjdGVkVGVtcGxhdGU6IGFueTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W107XG4gICAgdGVtcGxhdGVWYXJpYWJsZXNGb3JtOiBGb3JtR3JvdXA7XG4gICAgc25hcHNob3Q6IHsgY29uZGl0aW9uTGVmdD86IHN0cmluZzsgY29uZGl0aW9uT3BlcmF0b3I/OiBzdHJpbmc7IGNvbmRpdGlvblJpZ2h0Pzogc3RyaW5nIH07XG4gIH0+ID0gW107XG5cbiAgLyoqIEZvcm0gZm9yIGVkaXQgbW9kZTsgYm91bmQgdG8gY3FhLWR5bmFtaWMtc2VsZWN0IGFuZCBjcWEtY3VzdG9tLWlucHV0ICovXG4gIGVkaXRGb3JtITogRm9ybUdyb3VwO1xuXG4gIC8qKiBPcGVyYXRvciBkcm9wZG93biBjb25maWcgKElTLCBJUyBOT1QsIENPTlRBSU5TLCBldGMuKSAqL1xuICBvcGVyYXRvclNlbGVjdENvbmZpZyE6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgLyoqIENvbmRpdGlvbiBsZWZ0IG9wZXJhbmQgZHJvcGRvd24gY29uZmlnIChuYXR1cmFsIHRleHQgYWN0aW9ucyB3aXRoIElGX0NPTkRJVElPTikgKi9cbiAgY29uZGl0aW9uTGVmdFNlbGVjdENvbmZpZyE6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcblxuICAvKiogU25hcHNob3QgZm9yIENhbmNlbCByZXZlcnQgKi9cbiAgcHJpdmF0ZSBlZGl0U25hcHNob3Q6IHsgY29uZGl0aW9uTGVmdD86IHN0cmluZzsgY29uZGl0aW9uT3BlcmF0b3I/OiBzdHJpbmc7IGNvbmRpdGlvblJpZ2h0Pzogc3RyaW5nIH0gPSB7fTtcbiAgXG4gIC8qKiBTZWxlY3RlZCB0ZW1wbGF0ZSBmb3IgSUYgY29uZGl0aW9uICovXG4gIHNlbGVjdGVkVGVtcGxhdGU6IGFueSA9IG51bGw7XG4gIC8qKiBUZW1wbGF0ZSB2YXJpYWJsZXMgZm9yIElGIGNvbmRpdGlvbiAqL1xuICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgLyoqIEZvcm0gZ3JvdXAgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcyAqL1xuICB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0hOiBGb3JtR3JvdXA7XG5cbiAgQE91dHB1dCgpIHRvZ2dsZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7Y29uZmlnOiBDb25kaXRpb25TdGVwQ29uZmlnLCBleHBhbmRlZDogYm9vbGVhbn0+KCk7XG4gIEBPdXRwdXQoKSBjb25kaXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGJyYW5jaFN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2g7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2ggfT4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2g7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgXCJBZGQgRWxzZVwiIHNvIHRoZSBwYXJlbnQgY2FuIGNhbGwgUE9TVCB0ZXN0X3N0ZXBzIHdpdGggY29uZGl0aW9uVHlwZSBDT05ESVRJT05fRUxTRSAqL1xuICBAT3V0cHV0KCkgYWRkRWxzZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb25kaXRpb25TdGVwQ29uZmlnOiBDb25kaXRpb25TdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIGR1cGxpY2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG1vcmVPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZG5kRHJvcEluWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRG5kRHJvcEV2ZW50OyB0YXJnZXRMaXN0OiBUZXN0Q2FzZVN0ZXBDb25maWdbXSB9PigpO1xuICAvKiogRW1pdCB3aGVuIG1vcmUgZGF0YSBwcm9maWxlcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiBkYXRhIHByb2ZpbGUgc2VhcmNoIHF1ZXJ5IGNoYW5nZXMgKi9cbiAgQE91dHB1dCgpIHNlYXJjaERhdGFQcm9maWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdCB3aGVuIGEgbmVzdGVkIHN0ZXAgaXMgdXBkYXRlZCAoZS5nLiwgQXBwbHkgYnV0dG9uIGNsaWNrZWQgaW4gbG9vcC1zdGVwIGVkaXQgbW9kZSkgKi9cbiAgQE91dHB1dCgpIHN0ZXBVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlU3RlcENvbmZpZz4oKTtcbiAgLyoqIFJlLWVtaXQgd2hlbiBhIG5lc3RlZCBzdGVwIChlLmcuIG5vcm1hbC1zdGVwKSBlbWl0cyBjbGlja0FjdGlvbiAoZS5nLiBlbGVtZW50L2xhYmVsIGNsaWNrIGZvciBwb3B1cCkgKi9cbiAgQE91dHB1dCgpIGNsaWNrQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBNb3VzZUV2ZW50OyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcgfT4oKTtcblxuICBvbkRuZERyb3AoZXZlbnQ6IERuZERyb3BFdmVudCwgYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiB2b2lkIHtcbiAgICB0aGlzLmRuZERyb3BJblpvbmUuZW1pdCh7IGV2ZW50LCB0YXJnZXRMaXN0OiBicmFuY2gubmVzdGVkU3RlcHMgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5pZCA9IHRoaXMuY29uZmlnLmlkO1xuICAgICAgdGhpcy5zdGVwTnVtYmVyID0gdGhpcy5jb25maWcuc3RlcE51bWJlcjtcbiAgICAgIHRoaXMuY29uZGl0aW9uID0gdGhpcy5jb25maWcuY29uZGl0aW9uO1xuICAgICAgdGhpcy5icmFuY2hlcyA9IHRoaXMuY29uZmlnLmJyYW5jaGVzIHx8IFtdO1xuICAgICAgdGhpcy5leHBhbmRlZCA9IHRoaXMuY29uZmlnLmV4cGFuZGVkICE9PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZy5leHBhbmRlZCA6IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRFZGl0Rm9ybSgpO1xuICAgIHRoaXMuYnVpbGRPcGVyYXRvclNlbGVjdENvbmZpZygpO1xuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uTGVmdFNlbGVjdENvbmZpZygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ25hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVDb25kaXRpb25MZWZ0U2VsZWN0Q29uZmlnKCk7XG4gICAgICAvLyBSZWJ1aWxkIGZvcm0gd2hlbiBvcHRpb25zIGFyZSBsb2FkZWQgdG8gcG9wdWxhdGUgaW5pdGlhbCB2YWx1ZSBmcm9tIG5hdHVyYWxUZXh0QWN0aW9uSWRcbiAgICAgIGlmICh0aGlzLmVkaXRGb3JtICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJlYnVpbGRFZGl0Rm9ybVdpdGhOYXR1cmFsVGV4dEFjdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWJ1aWxkIGVkaXQgZm9ybSB3aGVuIG5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgYXJlIGxvYWRlZCB0byBwb3B1bGF0ZSBmcm9tIG5hdHVyYWxUZXh0QWN0aW9uSWQgKi9cbiAgcHJpdmF0ZSByZWJ1aWxkRWRpdEZvcm1XaXRoTmF0dXJhbFRleHRBY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ1dpdGhJZCA9IHRoaXMuY29uZmlnIGFzIGFueTtcbiAgICBpZiAoY29uZmlnV2l0aElkLm5hdHVyYWxUZXh0QWN0aW9uSWQgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ09wdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0aW9uOiBhbnkpID0+IFN0cmluZyhvcHRpb24uaWQpID09PSBTdHJpbmcoY29uZmlnV2l0aElkLm5hdHVyYWxUZXh0QWN0aW9uSWQpXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5hdHVyYWxUZXh0ID0gbWF0Y2hpbmdPcHRpb24ubmF0dXJhbFRleHQgPz8gbWF0Y2hpbmdPcHRpb24ubmFtZSA/PyBtYXRjaGluZ09wdGlvbi52YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKG5hdHVyYWxUZXh0KSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8udmFsdWUgPz8gJyc7XG4gICAgICAgICAgLy8gT25seSB1cGRhdGUgaWYgY3VycmVudCB2YWx1ZSBpcyBlbXB0eSBvciBkb2Vzbid0IG1hdGNoXG4gICAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlICE9PSBuYXR1cmFsVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0Rm9ybS5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8uc2V0VmFsdWUobmF0dXJhbFRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgdGVtcGxhdGUgb2JqZWN0IChOYXR1cmFsVGV4dEFjdGlvbnMpIGZyb20gdGhlIG9wdGlvblxuICAgICAgICBjb25zdCBmdWxsVGVtcGxhdGUgPSBtYXRjaGluZ09wdGlvbi50ZW1wbGF0ZSB8fCBtYXRjaGluZ09wdGlvbjtcbiAgICAgICAgLy8gU3RvcmUgc2VsZWN0ZWQgdGVtcGxhdGUgYW5kIGdldCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gZnVsbFRlbXBsYXRlO1xuICAgICAgICBpZiAoZnVsbFRlbXBsYXRlICYmIGZ1bGxUZW1wbGF0ZS52YXJpYWJsZXMpIHtcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhmdWxsVGVtcGxhdGUpO1xuICAgICAgICAgIHRoaXMuYnVpbGRUZW1wbGF0ZVZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFZGl0Rm9ybSgpOiB2b2lkIHtcbiAgICAvLyBJZiBjb25maWcgaGFzIG5hdHVyYWxUZXh0QWN0aW9uSWQsIGZpbmQgdGhlIG1hdGNoaW5nIG5hdHVyYWwgdGV4dCBhY3Rpb25cbiAgICBsZXQgY29uZGl0aW9uTGVmdFZhbHVlID0gJyc7XG4gICAgY29uc3QgY29uZmlnV2l0aElkID0gdGhpcy5jb25maWcgYXMgYW55O1xuICAgIGlmIChjb25maWdXaXRoSWQubmF0dXJhbFRleHRBY3Rpb25JZCAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gU3RyaW5nKG9wdGlvbi5pZCkgPT09IFN0cmluZyhjb25maWdXaXRoSWQubmF0dXJhbFRleHRBY3Rpb25JZClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb24pIHtcbiAgICAgICAgLy8gVXNlIG5hdHVyYWxUZXh0IGV4YWN0bHkgYXMgcmVjZWl2ZWQgZnJvbSBBUElcbiAgICAgICAgY29uZGl0aW9uTGVmdFZhbHVlID0gbWF0Y2hpbmdPcHRpb24ubmF0dXJhbFRleHQgPz8gbWF0Y2hpbmdPcHRpb24ubmFtZSA/PyBtYXRjaGluZ09wdGlvbi52YWx1ZSA/PyAnJztcbiAgICAgICAgLy8gR2V0IHRoZSBmdWxsIHRlbXBsYXRlIG9iamVjdCAoTmF0dXJhbFRleHRBY3Rpb25zKSBmcm9tIHRoZSBvcHRpb25cbiAgICAgICAgY29uc3QgZnVsbFRlbXBsYXRlID0gbWF0Y2hpbmdPcHRpb24udGVtcGxhdGUgfHwgbWF0Y2hpbmdPcHRpb247XG4gICAgICAgIC8vIFN0b3JlIHNlbGVjdGVkIHRlbXBsYXRlIGFuZCBnZXQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IGZ1bGxUZW1wbGF0ZTtcbiAgICAgICAgaWYgKGZ1bGxUZW1wbGF0ZSAmJiBmdWxsVGVtcGxhdGUudmFyaWFibGVzKSB7XG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMoZnVsbFRlbXBsYXRlKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVtcGxhdGVWYXJpYWJsZXNGb3JtKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbm8gbmF0dXJhbFRleHRBY3Rpb25JZCBtYXRjaCBmb3VuZCwgcGFyc2UgZnJvbSBjb25kaXRpb24gc3RyaW5nXG4gICAgaWYgKCFjb25kaXRpb25MZWZ0VmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgbGVmdCB9ID0gdGhpcy5wYXJzZUNvbmRpdGlvbih0aGlzLmNvbmRpdGlvbik7XG4gICAgICBjb25kaXRpb25MZWZ0VmFsdWUgPSBsZWZ0O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB7IG9wZXJhdG9yLCByaWdodCB9ID0gdGhpcy5wYXJzZUNvbmRpdGlvbih0aGlzLmNvbmRpdGlvbik7XG4gICAgdGhpcy5lZGl0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uTGVmdDogW2NvbmRpdGlvbkxlZnRWYWx1ZV0sXG4gICAgICBjb25kaXRpb25PcGVyYXRvcjogW29wZXJhdG9yXSxcbiAgICAgIGNvbmRpdGlvblJpZ2h0OiBbcmlnaHRdLFxuICAgIH0pO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGVtcGxhdGUgdmFyaWFibGVzIGZvcm0gaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAgICBpZiAoIXRoaXMudGVtcGxhdGVWYXJpYWJsZXNGb3JtKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbHNlSWZCcmFuY2goaW5kZXg/OiBudW1iZXIpOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmb3JtOiBGb3JtR3JvdXA7XG4gICAgc2VsZWN0ZWRUZW1wbGF0ZTogYW55O1xuICAgIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm06IEZvcm1Hcm91cDtcbiAgICBzbmFwc2hvdDogeyBjb25kaXRpb25MZWZ0Pzogc3RyaW5nOyBjb25kaXRpb25PcGVyYXRvcj86IHN0cmluZzsgY29uZGl0aW9uUmlnaHQ/OiBzdHJpbmcgfTtcbiAgfSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBFTFNFIElGIGZvcm0gd2l0aCBlbXB0eSB2YWx1ZXMgb3IgZnJvbSBleGlzdGluZyBFTFNFIElGIGJyYW5jaCBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBlbHNlSWZCcmFuY2hlcyA9IHRoaXMuYnJhbmNoZXM/LmZpbHRlcihiID0+IGIudHlwZSA9PT0gJ2Vsc2UtaWYnKSB8fCBbXTtcbiAgICBjb25zdCBicmFuY2hJbmRleCA9IGluZGV4ICE9PSB1bmRlZmluZWQgPyBpbmRleCA6IGVsc2VJZkJyYW5jaGVzLmxlbmd0aDtcbiAgICBjb25zdCBlbHNlSWZCcmFuY2ggPSBlbHNlSWZCcmFuY2hlc1ticmFuY2hJbmRleF07XG4gICAgY29uc3QgZWxzZUNvbmRpdGlvbiA9IGVsc2VJZkJyYW5jaD8uYWN0aW9uIHx8ICcnO1xuICAgIGNvbnN0IHsgbGVmdCwgb3BlcmF0b3IsIHJpZ2h0IH0gPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGVsc2VDb25kaXRpb24pO1xuICAgIFxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbmRpdGlvbkxlZnQ6IFtsZWZ0XSxcbiAgICAgIGNvbmRpdGlvbk9wZXJhdG9yOiBbb3BlcmF0b3JdLFxuICAgICAgY29uZGl0aW9uUmlnaHQ6IFtyaWdodF0sXG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgdGVtcGxhdGVWYXJpYWJsZXNGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgZWxzZS1pZi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKX1gLFxuICAgICAgZm9ybSxcbiAgICAgIHNlbGVjdGVkVGVtcGxhdGU6IG51bGwsXG4gICAgICB0ZW1wbGF0ZVZhcmlhYmxlczogW10sXG4gICAgICB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0sXG4gICAgICBzbmFwc2hvdDogeyBjb25kaXRpb25MZWZ0OiBsZWZ0LCBjb25kaXRpb25PcGVyYXRvcjogb3BlcmF0b3IsIGNvbmRpdGlvblJpZ2h0OiByaWdodCB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRPcGVyYXRvclNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtcbiAgICAgIHsgaWQ6ICdpcycsIHZhbHVlOiAnaXMnLCBuYW1lOiAnSVMnLCBsYWJlbDogJ0lTJyB9LFxuICAgICAgeyBpZDogJ2lzIG5vdCcsIHZhbHVlOiAnaXMgbm90JywgbmFtZTogJ0lTIE5PVCcsIGxhYmVsOiAnSVMgTk9UJyB9LFxuICAgICAgeyBpZDogJ2NvbnRhaW5zJywgdmFsdWU6ICdjb250YWlucycsIG5hbWU6ICdDT05UQUlOUycsIGxhYmVsOiAnQ09OVEFJTlMnIH0sXG4gICAgICB7IGlkOiAnZXF1YWxzJywgdmFsdWU6ICdlcXVhbHMnLCBuYW1lOiAnRVFVQUxTJywgbGFiZWw6ICdFUVVBTFMnIH0sXG4gICAgICB7IGlkOiAnc3RhcnRzIHdpdGgnLCB2YWx1ZTogJ3N0YXJ0cyB3aXRoJywgbmFtZTogJ1NUQVJUUyBXSVRIJywgbGFiZWw6ICdTVEFSVFMgV0lUSCcgfSxcbiAgICAgIHsgaWQ6ICdlbmRzIHdpdGgnLCB2YWx1ZTogJ2VuZHMgd2l0aCcsIG5hbWU6ICdFTkRTIFdJVEgnLCBsYWJlbDogJ0VORFMgV0lUSCcgfSxcbiAgICBdO1xuICAgIHRoaXMub3BlcmF0b3JTZWxlY3RDb25maWcgPSB7XG4gICAgICBrZXk6ICdjb25kaXRpb25PcGVyYXRvcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ09wZXJhdG9yJyxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBjb25kaXRpb24gbGVmdCBzZWxlY3QgY29uZmlnIHdpdGggZmlsdGVyZWQgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgKElGX0NPTkRJVElPTiBvbmx5KSAqL1xuICBwcml2YXRlIHVwZGF0ZUNvbmRpdGlvbkxlZnRTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgLy8gRmlsdGVyIG5hdHVyYWwgdGV4dCBhY3Rpb25zIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0ZXBBY3Rpb25UeXBlID09PSBcIklGX0NPTkRJVElPTlwiXG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gKHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyB8fCBbXSkuZmlsdGVyKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIG9wdGlvbi5zdGVwQWN0aW9uVHlwZSA9PT0gJ0lGX0NPTkRJVElPTic7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbmRpdGlvbkxlZnRTZWxlY3RDb25maWcgPSB7XG4gICAgICBrZXk6ICdjb25kaXRpb25MZWZ0JyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGNvbmRpdGlvbicsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogZmlsdGVyZWRPcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvKiogT3B0aW9ucyBmb3IgdGhlIGNvbmRpdGlvbiBsZWZ0IGF1dG9jb21wbGV0ZSAoSUZfQ09ORElUSU9OIG5hdHVyYWwgdGV4dCBhY3Rpb25zKSAqL1xuICBnZXQgY29uZGl0aW9uTGVmdEF1dG9jb21wbGV0ZU9wdGlvbnMoKTogQ3FhQXV0b2NvbXBsZXRlT3B0aW9uW10ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmNvbmRpdGlvbkxlZnRTZWxlY3RDb25maWc/Lm9wdGlvbnMgPz8gW107XG4gICAgcmV0dXJuIG9wdHMubWFwKChvcHRpb246IGFueSkgPT4ge1xuICAgICAgLy8gVXNlIG5hdHVyYWxUZXh0IGV4YWN0bHkgYXMgcmVjZWl2ZWQgZnJvbSBBUEksIGZhbGxiYWNrIHRvIG5hbWUvdmFsdWUvaWRcbiAgICAgIGNvbnN0IG5hdHVyYWxUZXh0ID0gb3B0aW9uLm5hdHVyYWxUZXh0ID8/IG9wdGlvbi5uYW1lID8/IG9wdGlvbi52YWx1ZSA/PyBTdHJpbmcob3B0aW9uLmlkID8/ICcnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBuYXR1cmFsVGV4dCxcbiAgICAgICAgbGFiZWw6IG5hdHVyYWxUZXh0LFxuICAgICAgICAvLyBTdG9yZSB0aGUgZnVsbCB0ZW1wbGF0ZSBvYmplY3QgKE5hdHVyYWxUZXh0QWN0aW9ucykgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcyBwcm9jZXNzaW5nXG4gICAgICAgIC8vIFVzZSBvcHRpb24udGVtcGxhdGUgaWYgYXZhaWxhYmxlIChmdWxsIE5hdHVyYWxUZXh0QWN0aW9ucyksIG90aGVyd2lzZSB1c2Ugb3B0aW9uIGl0c2VsZlxuICAgICAgICB0ZW1wbGF0ZTogb3B0aW9uLnRlbXBsYXRlIHx8IG9wdGlvbixcbiAgICAgIH0gYXMgQ3FhQXV0b2NvbXBsZXRlT3B0aW9uICYgeyB0ZW1wbGF0ZT86IGFueSB9O1xuICAgIH0pO1xuICB9XG5cbiAgb25Db25kaXRpb25MZWZ0U2VsZWN0KG9wdGlvbjogQ3FhQXV0b2NvbXBsZXRlT3B0aW9uICYgeyB0ZW1wbGF0ZT86IGFueSB9KTogdm9pZCB7XG4gICAgdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnNldFZhbHVlKG9wdGlvbi52YWx1ZSk7XG4gICAgXG4gICAgLy8gR2V0IHRlbXBsYXRlIGZyb20gb3B0aW9uIC0gb3B0aW9uLnRlbXBsYXRlIHNob3VsZCBjb250YWluIHRoZSBmdWxsIE5hdHVyYWxUZXh0QWN0aW9ucyBvYmplY3RcbiAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gb3B0aW9uLnRlbXBsYXRlO1xuICAgIFxuICAgIC8vIElmIHRlbXBsYXRlIG5vdCBpbiBvcHRpb24sIHRyeSB0byBmaW5kIGZyb20gbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyBieSBtYXRjaGluZyBuYXR1cmFsVGV4dFxuICAgIGxldCBmdWxsVGVtcGxhdGUgPSBtYXRjaGluZ1RlbXBsYXRlO1xuICAgIGlmICghZnVsbFRlbXBsYXRlIHx8ICFmdWxsVGVtcGxhdGUudmFyaWFibGVzKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ09wdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5uYXR1cmFsVGV4dCA9PT0gb3B0aW9uLnZhbHVlIHx8IG9wdC5uYW1lID09PSBvcHRpb24udmFsdWUgfHwgb3B0LnZhbHVlID09PSBvcHRpb24udmFsdWVcbiAgICAgICk7XG4gICAgICAvLyBVc2UgdGVtcGxhdGUgcHJvcGVydHkgZnJvbSBvcHRpb24gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHRoZSBvcHRpb24gaXRzZWxmXG4gICAgICBmdWxsVGVtcGxhdGUgPSBtYXRjaGluZ09wdGlvbj8udGVtcGxhdGUgfHwgbWF0Y2hpbmdPcHRpb247XG4gICAgfVxuICAgIFxuICAgIGlmIChmdWxsVGVtcGxhdGUgJiYgZnVsbFRlbXBsYXRlLnZhcmlhYmxlcykge1xuICAgICAgLy8gU3RvcmUgdGhlIGZ1bGwgdGVtcGxhdGUgZm9yIHJlZmVyZW5jZVxuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gZnVsbFRlbXBsYXRlO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGVtcGxhdGUgdmFyaWFibGVzIHVzaW5nIHRoZSBwcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gUGFzcyB0aGUgZnVsbCBOYXR1cmFsVGV4dEFjdGlvbnMgb2JqZWN0IHdoaWNoIGhhcyB0aGUgdmFyaWFibGVzIHByb3BlcnR5XG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGZ1bGxUZW1wbGF0ZSk7XG4gICAgICBjb25zb2xlLmxvZygnVGVtcGxhdGUgdmFyaWFibGVzIGxvYWRlZDonLCB2YXJpYWJsZXMsICdmcm9tIHRlbXBsYXRlOicsIGZ1bGxUZW1wbGF0ZSk7XG4gICAgICBcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB2YXJpYWJsZXMgfHwgW107XG4gICAgICAvLyBCdWlsZCBmb3JtIGZvciB0ZW1wbGF0ZSB2YXJpYWJsZXNcbiAgICAgIHRoaXMuYnVpbGRUZW1wbGF0ZVZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIHRlbXBsYXRlXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBtYXRjaGluZyB0ZW1wbGF0ZSBmb3VuZCBvciB0ZW1wbGF0ZSBoYXMgbm8gdmFyaWFibGVzJywge1xuICAgICAgICBmdWxsVGVtcGxhdGUsXG4gICAgICAgIGhhc1ZhcmlhYmxlczogZnVsbFRlbXBsYXRlPy52YXJpYWJsZXMsXG4gICAgICAgIG9wdGlvblZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgIG9wdGlvblRlbXBsYXRlOiBvcHRpb24udGVtcGxhdGVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gbnVsbDtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSBbXTtcbiAgICAgIGlmICghdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0pIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIHRlbXBsYXRlXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIGJ1aWxkVGVtcGxhdGVWYXJpYWJsZXNGb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0pIHtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXNGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgfVxuICAgIFxuICAgIC8vIENsZWFyIGV4aXN0aW5nIGZvcm0gY29udHJvbHNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0ucmVtb3ZlQ29udHJvbChrZXkpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEdldCBleGlzdGluZyB0ZW1wbGF0ZSB2YXJpYWJsZXMgZGF0YSBmcm9tIGNvbmZpZyBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBjb25maWdXaXRoRGF0YSA9IHRoaXMuY29uZmlnIGFzIGFueTtcbiAgICBjb25zdCBleGlzdGluZ0RhdGEgPSBjb25maWdXaXRoRGF0YS50ZW1wbGF0ZVZhcmlhYmxlc0RhdGEgfHwge307XG4gICAgXG4gICAgLy8gQWRkIGZvcm0gY29udHJvbHMgZm9yIGVhY2ggdmFyaWFibGVcbiAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgLy8gVHJ5IHRvIGdldCB2YWx1ZSBmcm9tIGV4aXN0aW5nIGRhdGEgZmlyc3QsIHRoZW4gZnJvbSB2YXJpYWJsZSBkZWZhdWx0XG4gICAgICBsZXQgZGVmYXVsdFZhbHVlOiBhbnk7XG4gICAgICBpZiAoZXhpc3RpbmdEYXRhLmhhc093blByb3BlcnR5KHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGV4aXN0aW5nRGF0YVt2YXJpYWJsZS5uYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJyBcbiAgICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICAgIDogKHZhcmlhYmxlLnZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ29udmVydCBib29sZWFuIHN0cmluZyB0byBib29sZWFuXG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSA9PT0gJ3RydWUnIHx8IGRlZmF1bHRWYWx1ZSA9PT0gJzEnO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5hZGRDb250cm9sKHZhcmlhYmxlLm5hbWUsIG5ldyBGb3JtQ29udHJvbChkZWZhdWx0VmFsdWUpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRWxzZUNvbmRpdGlvbkxlZnRTZWxlY3Qob3B0aW9uOiBDcWFBdXRvY29tcGxldGVPcHRpb24gJiB7IHRlbXBsYXRlPzogYW55IH0sIGJyYW5jaElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBicmFuY2ggPSB0aGlzLmVsc2VJZkJyYW5jaGVzLmZpbmQoYiA9PiBiLmlkID09PSBicmFuY2hJZCk7XG4gICAgaWYgKCFicmFuY2gpIHJldHVybjtcbiAgICBcbiAgICBicmFuY2guZm9ybT8uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnNldFZhbHVlKG9wdGlvbi52YWx1ZSk7XG4gICAgXG4gICAgLy8gR2V0IHRlbXBsYXRlIGZyb20gb3B0aW9uIC0gb3B0aW9uLnRlbXBsYXRlIHNob3VsZCBjb250YWluIHRoZSBmdWxsIE5hdHVyYWxUZXh0QWN0aW9ucyBvYmplY3RcbiAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gb3B0aW9uLnRlbXBsYXRlO1xuICAgIFxuICAgIC8vIElmIHRlbXBsYXRlIG5vdCBpbiBvcHRpb24sIHRyeSB0byBmaW5kIGZyb20gbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyBieSBtYXRjaGluZyBuYXR1cmFsVGV4dFxuICAgIGxldCBmdWxsVGVtcGxhdGUgPSBtYXRjaGluZ1RlbXBsYXRlO1xuICAgIGlmICghZnVsbFRlbXBsYXRlIHx8ICFmdWxsVGVtcGxhdGUudmFyaWFibGVzKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ09wdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5uYXR1cmFsVGV4dCA9PT0gb3B0aW9uLnZhbHVlIHx8IG9wdC5uYW1lID09PSBvcHRpb24udmFsdWUgfHwgb3B0LnZhbHVlID09PSBvcHRpb24udmFsdWVcbiAgICAgICk7XG4gICAgICAvLyBVc2UgdGVtcGxhdGUgcHJvcGVydHkgZnJvbSBvcHRpb24gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHRoZSBvcHRpb24gaXRzZWxmXG4gICAgICBmdWxsVGVtcGxhdGUgPSBtYXRjaGluZ09wdGlvbj8udGVtcGxhdGUgfHwgbWF0Y2hpbmdPcHRpb247XG4gICAgfVxuICAgIFxuICAgIGlmIChmdWxsVGVtcGxhdGUgJiYgZnVsbFRlbXBsYXRlLnZhcmlhYmxlcykge1xuICAgICAgLy8gU3RvcmUgdGhlIGZ1bGwgdGVtcGxhdGUgZm9yIHJlZmVyZW5jZVxuICAgICAgYnJhbmNoLnNlbGVjdGVkVGVtcGxhdGUgPSBmdWxsVGVtcGxhdGU7XG4gICAgICAvLyBHZXQgdGVtcGxhdGUgdmFyaWFibGVzIHVzaW5nIHRoZSBwcm92aWRlZCBmdW5jdGlvblxuICAgICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhmdWxsVGVtcGxhdGUpO1xuICAgICAgLy8gQnVpbGQgZm9ybSBmb3IgdGVtcGxhdGUgdmFyaWFibGVzXG4gICAgICB0aGlzLmJ1aWxkRWxzZVRlbXBsYXRlVmFyaWFibGVzRm9ybShicmFuY2gpO1xuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdGVtcGxhdGVcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJhbmNoLnNlbGVjdGVkVGVtcGxhdGUgPSBudWxsO1xuICAgICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzID0gW107XG4gICAgICBpZiAoIWJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0pIHtcbiAgICAgICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xuICAgICAgfVxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgdGVtcGxhdGVcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgYnVpbGRFbHNlVGVtcGxhdGVWYXJpYWJsZXNGb3JtKGJyYW5jaDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZm9ybTogRm9ybUdyb3VwO1xuICAgIHNlbGVjdGVkVGVtcGxhdGU6IGFueTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W107XG4gICAgdGVtcGxhdGVWYXJpYWJsZXNGb3JtOiBGb3JtR3JvdXA7XG4gICAgc25hcHNob3Q6IHsgY29uZGl0aW9uTGVmdD86IHN0cmluZzsgY29uZGl0aW9uT3BlcmF0b3I/OiBzdHJpbmc7IGNvbmRpdGlvblJpZ2h0Pzogc3RyaW5nIH07XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAoIWJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0pIHtcbiAgICAgIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBjb250cm9sc1xuICAgIE9iamVjdC5rZXlzKGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0ucmVtb3ZlQ29udHJvbChrZXkpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEdldCBleGlzdGluZyB0ZW1wbGF0ZSB2YXJpYWJsZXMgZGF0YSBmcm9tIGNvbmZpZyBpZiBhdmFpbGFibGUgKGZvciBFTFNFIElGIGJyYW5jaClcbiAgICBjb25zdCBjb25maWdXaXRoRGF0YSA9IHRoaXMuY29uZmlnIGFzIGFueTtcbiAgICBjb25zdCBleGlzdGluZ0RhdGEgPSBjb25maWdXaXRoRGF0YS5lbHNlVGVtcGxhdGVWYXJpYWJsZXNEYXRhIHx8IHt9O1xuICAgIFxuICAgIC8vIEFkZCBmb3JtIGNvbnRyb2xzIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgLy8gVHJ5IHRvIGdldCB2YWx1ZSBmcm9tIGV4aXN0aW5nIGRhdGEgZmlyc3QsIHRoZW4gZnJvbSB2YXJpYWJsZSBkZWZhdWx0XG4gICAgICBsZXQgZGVmYXVsdFZhbHVlOiBhbnk7XG4gICAgICBpZiAoZXhpc3RpbmdEYXRhLmhhc093blByb3BlcnR5KHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGV4aXN0aW5nRGF0YVt2YXJpYWJsZS5uYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJyBcbiAgICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICAgIDogKHZhcmlhYmxlLnZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ29udmVydCBib29sZWFuIHN0cmluZyB0byBib29sZWFuXG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSA9PT0gJ3RydWUnIHx8IGRlZmF1bHRWYWx1ZSA9PT0gJzEnO1xuICAgICAgfVxuICAgICAgXG4gICAgICBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmFkZENvbnRyb2wodmFyaWFibGUubmFtZSwgbmV3IEZvcm1Db250cm9sKGRlZmF1bHRWYWx1ZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgb25BZGRFbHNlKCk6IHZvaWQge1xuICAgIC8vIEFkZCBhIG5ldyBFTFNFIElGIGJyYW5jaCAoVUkgcm93IG9ubHk7IEFQSXMgYXJlIGNhbGxlZCB3aGVuIHVzZXIgY2xpY2tzIEFwcGx5KVxuICAgIGNvbnN0IG5ld0JyYW5jaCA9IHRoaXMuYnVpbGRFbHNlSWZCcmFuY2goKTtcbiAgICB0aGlzLmVsc2VJZkJyYW5jaGVzLnB1c2gobmV3QnJhbmNoKTtcbiAgfVxuXG4gIG9uQWRkRWxzZUJyYW5jaCgpOiB2b2lkIHtcbiAgICAvLyBFbWl0IHNvIHBhcmVudCBjYW4gY2FsbCBQT1NUIHRlc3Rfc3RlcHMgd2l0aCBjb25kaXRpb25UeXBlIENPTkRJVElPTl9FTFNFXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmFkZEVsc2UuZW1pdCh7IGNvbmRpdGlvblN0ZXBDb25maWc6IHRoaXMuY29uZmlnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlRWxzZShicmFuY2hJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIHRoZSBFTFNFIElGIGJyYW5jaCB3aXRoIHRoZSBnaXZlbiBJRFxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lbHNlSWZCcmFuY2hlcy5maW5kSW5kZXgoYiA9PiBiLmlkID09PSBicmFuY2hJZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5lbHNlSWZCcmFuY2hlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQYXJzZSBjb25kaXRpb24gc3RyaW5nIGludG8gbGVmdCwgb3BlcmF0b3IsIHJpZ2h0IChlLmcuIFwiVXNlcnR5cGUgaXMgUHJlbWl1bVwiKSAqL1xuICBwcml2YXRlIHBhcnNlQ29uZGl0aW9uKGM6IHN0cmluZyk6IHsgbGVmdDogc3RyaW5nOyBvcGVyYXRvcjogc3RyaW5nOyByaWdodDogc3RyaW5nIH0ge1xuICAgIGlmICghYyB8fCB0eXBlb2YgYyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7IGxlZnQ6ICdVc2VydHlwZScsIG9wZXJhdG9yOiAnaXMnLCByaWdodDogJ1ByZW1pdW0nIH07XG4gICAgfVxuICAgIGNvbnN0IHMgPSBjLnRyaW0oKTtcbiAgICBjb25zdCBvcGVyYXRvcnMgPSBbJyBpcyBub3QgJywgJyBpcyAnLCAnIGNvbnRhaW5zICcsICcgZXF1YWxzICcsICcgc3RhcnRzIHdpdGggJywgJyBlbmRzIHdpdGggJ107XG4gICAgZm9yIChjb25zdCBvcCBvZiBvcGVyYXRvcnMpIHtcbiAgICAgIGNvbnN0IGkgPSBzLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihvcCk7XG4gICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZWZ0OiBzLnNsaWNlKDAsIGkpLnRyaW0oKSxcbiAgICAgICAgICBvcGVyYXRvcjogb3AudHJpbSgpLFxuICAgICAgICAgIHJpZ2h0OiBzLnNsaWNlKGkgKyBvcC5sZW5ndGgpLnRyaW0oKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgbGVmdDogcywgb3BlcmF0b3I6ICdpcycsIHJpZ2h0OiAnJyB9O1xuICB9XG5cbiAgLyoqIEJ1aWxkIGNvbmRpdGlvbiBzdHJpbmcgZnJvbSBmb3JtIHZhbHVlcyAqL1xuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uRnJvbUZvcm0oKTogc3RyaW5nIHtcbiAgICBsZXQgbGVmdCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IG9wID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2NvbmRpdGlvbk9wZXJhdG9yJyk/LnZhbHVlID8/ICdpcyc7XG4gICAgY29uc3QgcmlnaHQgPSB0aGlzLmVkaXRGb3JtLmdldCgnY29uZGl0aW9uUmlnaHQnKT8udmFsdWUgPz8gJyc7XG4gICAgXG4gICAgLy8gSWYgbGVmdCBpcyBhbiBJRCAobnVtYmVyKSwgZmluZCB0aGUgbmF0dXJhbFRleHQgZnJvbSBvcHRpb25zXG4gICAgaWYgKGxlZnQgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsZWZ0VmFsdWUgPSBTdHJpbmcobGVmdCk7XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbnVtYmVyIChJRCkgb3IgaWYgd2UgbmVlZCB0byBmaW5kIHRoZSBuYXR1cmFsVGV4dFxuICAgICAgY29uc3QgaXNOdW1lcmljSWQgPSAhaXNOYU4oTnVtYmVyKGxlZnRWYWx1ZSkpICYmIGxlZnRWYWx1ZS50cmltKCkgIT09ICcnO1xuICAgICAgXG4gICAgICBpZiAoaXNOdW1lcmljSWQpIHtcbiAgICAgICAgLy8gRmluZCB0aGUgb3B0aW9uIGJ5IElEIGFuZCB1c2UgaXRzIG5hdHVyYWxUZXh0XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgICAgKG9wdGlvbjogYW55KSA9PiBTdHJpbmcob3B0aW9uLmlkKSA9PT0gbGVmdFZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbiAmJiBzZWxlY3RlZEFjdGlvbi5uYXR1cmFsVGV4dCkge1xuICAgICAgICAgIGxlZnQgPSBTdHJpbmcoc2VsZWN0ZWRBY3Rpb24ubmF0dXJhbFRleHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFscmVhZHkgYSBuYXR1cmFsVGV4dCBvciBuZWVkcyB0byBiZSBmb3VuZFxuICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAgIChvcHRpb246IGFueSkgPT4gb3B0aW9uLm5hdHVyYWxUZXh0ID09PSBsZWZ0IHx8IG9wdGlvbi5uYW1lID09PSBsZWZ0IHx8IG9wdGlvbi52YWx1ZSA9PT0gbGVmdFxuICAgICAgICApO1xuICAgICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24gJiYgc2VsZWN0ZWRBY3Rpb24ubmF0dXJhbFRleHQpIHtcbiAgICAgICAgICBsZWZ0ID0gU3RyaW5nKHNlbGVjdGVkQWN0aW9uLm5hdHVyYWxUZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gW2xlZnQsIG9wLCByaWdodF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIG9uRWRpdEZvcm1GaWVsZENoYW5nZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0Rm9ybS5nZXQoY29udHJvbE5hbWUpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXRTdGVwc1N1bW1hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGxTdGVwcyA9IHRoaXMuYnJhbmNoZXMucmVkdWNlPFRlc3RDYXNlU3RlcENvbmZpZ1tdPihcbiAgICAgIChhY2MsIGJyYW5jaCkgPT4gYWNjLmNvbmNhdChicmFuY2gubmVzdGVkU3RlcHMpLFxuICAgICAgW11cbiAgICApO1xuICAgIGlmIChhbGxTdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnMCBzdGVwcyc7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0U3RlcCA9IGFsbFN0ZXBzWzBdO1xuICAgIGNvbnN0IGxhc3RTdGVwID0gYWxsU3RlcHNbYWxsU3RlcHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgc3RhcnQgPSAoZmlyc3RTdGVwIGFzIGFueSkuc3RlcE51bWJlciB8fCAxO1xuICAgIGNvbnN0IGVuZCA9IChsYXN0U3RlcCBhcyBhbnkpLnN0ZXBOdW1iZXIgfHwgYWxsU3RlcHMubGVuZ3RoO1xuICAgIGNvbnN0IGNvdW50ID0gYWxsU3RlcHMubGVuZ3RoO1xuICAgIHJldHVybiBgU3RlcHMgJHtzdGFydH0tJHtlbmR9ICgke2NvdW50fSBzdGVwJHtjb3VudCAhPT0gMSA/ICdzJyA6ICcnfSlgO1xuICB9XG5cbiAgb25Ub2dnbGVFeHBhbmRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG4gICAgdGhpcy50b2dnbGVFeHBhbmRlZC5lbWl0KHtjb25maWc6dGhpcy5jb25maWcsIGV4cGFuZGVkOnRoaXMuZXhwYW5kZWR9KTtcbiAgfVxuXG4gIG9uQ29uZGl0aW9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuY29uZGl0aW9uQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoLCBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcsIHN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5icmFuY2hTdGVwQ2hhbmdlLmVtaXQoeyBicmFuY2gsIHN0ZXAsIHN0ZXBJbmRleCB9KTtcbiAgfVxuXG4gIG9uTmVzdGVkVG9nZ2xlRXhwYW5kZWQoZXZlbnQ6IGJvb2xlYW4gfCB7Y29uZmlnOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGV4cGFuZGVkOiBib29sZWFufSwgYnJhbmNoOiBDb25kaXRpb25CcmFuY2gsIHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBib3RoIGJvb2xlYW4gYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgZXZlbnQgIT09IG51bGwgJiYgJ2V4cGFuZGVkJyBpbiBldmVudCkge1xuICAgICAgLy8gT2JqZWN0IGZvcm1hdCBmcm9tIHN0ZXAtZ3JvdXA6IHtjb25maWcsIGV4cGFuZGVkfVxuICAgICAgKHN0ZXAgYXMgYW55KS5leHBhbmRlZCA9IGV2ZW50LmV4cGFuZGVkO1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50J3MgY29uZmlnIGlzIGEgc3RlcC1ncm91cCAobm90IHRoZSBjdXJyZW50IHN0ZXApXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgbmVzdGVkIHN0ZXAtZ3JvdXAgZXZlbnRzIGJ1YmJsZSB1cCBjb3JyZWN0bHlcbiAgICAgIGlmICh0aGlzLmlzU3RlcEdyb3VwKGV2ZW50LmNvbmZpZykpIHtcbiAgICAgICAgLy8gUmUtZW1pdCB0aGUgdG9nZ2xlRXhwYW5kZWQgZXZlbnQgd2l0aCB0aGUgb2JqZWN0IGZvcm1hdCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgY29uZmlnXG4gICAgICAgIC8vIENhc3QgdG8gc2F0aXNmeSBUeXBlU2NyaXB0IC0gdGhlIHJlbmRlcmVyIGFjY2VwdHMgVGVzdENhc2VTdGVwQ29uZmlnIHdoaWNoIGluY2x1ZGVzIFN0ZXBHcm91cENvbmZpZ1xuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQoe2NvbmZpZzogZXZlbnQuY29uZmlnIGFzIGFueSBhcyBDb25kaXRpb25TdGVwQ29uZmlnLCBleHBhbmRlZDogZXZlbnQuZXhwYW5kZWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQm9vbGVhbiBmb3JtYXQgZnJvbSBvdGhlciBzdGVwIHR5cGVzXG4gICAgICAoc3RlcCBhcyBhbnkpLmV4cGFuZGVkID0gZXZlbnQgYXMgYm9vbGVhbjtcbiAgICB9XG4gICAgdGhpcy5vbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpbmRleCk7XG4gIH1cblxuICBvbkFkZFN0ZXAoYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiB2b2lkIHtcbiAgICB0aGlzLmFkZFN0ZXAuZW1pdCh7IGJyYW5jaCB9KTtcbiAgfVxuXG4gIG9uRGVsZXRlU3RlcChicmFuY2g6IENvbmRpdGlvbkJyYW5jaCwgc3RlcEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZVN0ZXAuZW1pdCh7IGJyYW5jaCwgc3RlcEluZGV4IH0pO1xuICB9XG5cbiAgb25BZGRCcmFuY2goKTogdm9pZCB7XG4gICAgdGhpcy5hZGRCcmFuY2guZW1pdCgpO1xuICB9XG5cbiAgb25EZWxldGVCcmFuY2goYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZUJyYW5jaC5lbWl0KGJyYW5jaCk7XG4gIH1cblxuICBvbk5lc3RlZENvbmRpdGlvbkFkZEJyYW5jaChuZXN0ZWRTdGVwOiBDb25kaXRpb25TdGVwQ29uZmlnKTogdm9pZCB7XG4gICAgLy8gQWRkIGEgbmV3IGJyYW5jaCB0byB0aGUgbmVzdGVkIGNvbmRpdGlvbiBzdGVwXG4gICAgaWYgKCFuZXN0ZWRTdGVwLmJyYW5jaGVzKSB7XG4gICAgICBuZXN0ZWRTdGVwLmJyYW5jaGVzID0gW107XG4gICAgfVxuICAgIGNvbnN0IG5ld0JyYW5jaDogQ29uZGl0aW9uQnJhbmNoID0ge1xuICAgICAgdHlwZTogbmVzdGVkU3RlcC5icmFuY2hlcy5sZW5ndGggPT09IDAgPyAnaWYnIDogJ2Vsc2UnLFxuICAgICAgbGFiZWw6IG5lc3RlZFN0ZXAuYnJhbmNoZXMubGVuZ3RoID09PSAwID8gJ0lGIFRSVUUnIDogJ0VMU0UnLFxuICAgICAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5DT05ESVRJT05fSUYsXG4gICAgICBuZXN0ZWRTdGVwczogW11cbiAgICB9O1xuICAgIG5lc3RlZFN0ZXAuYnJhbmNoZXMucHVzaChuZXdCcmFuY2gpO1xuICB9XG5cbiAgb25OZXN0ZWRDb25kaXRpb25EZWxldGVCcmFuY2gobmVzdGVkU3RlcDogQ29uZGl0aW9uU3RlcENvbmZpZywgYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiB2b2lkIHtcbiAgICAvLyBEZWxldGUgYSBicmFuY2ggZnJvbSB0aGUgbmVzdGVkIGNvbmRpdGlvbiBzdGVwXG4gICAgaWYgKG5lc3RlZFN0ZXAuYnJhbmNoZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gbmVzdGVkU3RlcC5icmFuY2hlcy5pbmRleE9mKGJyYW5jaCk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBuZXN0ZWRTdGVwLmJyYW5jaGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNOb3JtYWxTdGVwKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgTm9ybWFsU3RlcENvbmZpZyB7XG4gICAgcmV0dXJuICdldmVudFR5cGUnIGluIHN0ZXA7XG4gIH1cblxuICBpc0xvb3BTdGVwKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgTG9vcFN0ZXBDb25maWcge1xuICAgIHJldHVybiAnbG9vcFR5cGUnIGluIHN0ZXA7XG4gIH1cblxuICBpc0NvbmRpdGlvblN0ZXAoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBDb25kaXRpb25TdGVwQ29uZmlnIHtcbiAgICByZXR1cm4gJ2NvbmRpdGlvbicgaW4gc3RlcCAmJiAnYnJhbmNoZXMnIGluIHN0ZXA7XG4gIH1cblxuICBpc1N0ZXBHcm91cChzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIFN0ZXBHcm91cENvbmZpZyB7XG4gICAgcmV0dXJuICdncm91cE5hbWUnIGluIHN0ZXA7XG4gIH1cblxuICBnZXRCcmFuY2hMYWJlbChicmFuY2g6IENvbmRpdGlvbkJyYW5jaCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJyYW5jaC5sYWJlbCB8fCAoYnJhbmNoLnR5cGUgPT09ICdpZicgPyAnSUYgVFJVRScgOiBicmFuY2gudHlwZSA9PT0gJ2Vsc2UtaWYnID8gJ0VMU0UgSUYnIDogJ0VMU0UnKTtcbiAgfVxuXG4gIGdldEJyYW5jaENvbG9yQ2xhc3MoYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiBzdHJpbmcge1xuICAgIGlmIChicmFuY2gudHlwZSA9PT0gJ2lmJykge1xuICAgICAgcmV0dXJuICdjcWEtYmctWyMwREJEN0QxQV0nO1xuICAgIH0gZWxzZSBpZiAoYnJhbmNoLnR5cGUgPT09ICdlbHNlLWlmJykge1xuICAgICAgcmV0dXJuICdjcWEtYmcteWVsbG93LTUwIGNxYS1ib3JkZXIteWVsbG93LTIwMCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnY3FhLWJnLXJlZC01MCBjcWEtYm9yZGVyLXJlZC0yMDAnO1xuICAgIH1cbiAgfVxuXG4gIGdldEJyYW5jaFRleHRDb2xvcihicmFuY2g6IENvbmRpdGlvbkJyYW5jaCk6IHN0cmluZyB7XG4gICAgaWYgKGJyYW5jaC50eXBlID09PSAnaWYnKSB7XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjMEQ1NDJCXSc7XG4gICAgfSBlbHNlIGlmIChicmFuY2gudHlwZSA9PT0gJ2Vsc2UtaWYnKSB7XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LXllbGxvdy03MDAnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LXJlZC03MDAnO1xuICAgIH1cbiAgfVxuXG4gIG9uT3BlbkV4dGVybmFsKCk6IHZvaWQge1xuICAgIC8vIE5vdCB1c2VkIGluIGNvbmRpdGlvbiBzdGVwLCBidXQgbmVlZGVkIGZvciByZWN1cnNpdmUgc3RlcCBncm91cHNcbiAgfVxuXG4gIG9uRWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRTbmFwc2hvdCA9IHtcbiAgICAgIGNvbmRpdGlvbkxlZnQ6IHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uTGVmdCcpPy52YWx1ZSxcbiAgICAgIGNvbmRpdGlvbk9wZXJhdG9yOiB0aGlzLmVkaXRGb3JtPy5nZXQoJ2NvbmRpdGlvbk9wZXJhdG9yJyk/LnZhbHVlLFxuICAgICAgY29uZGl0aW9uUmlnaHQ6IHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uUmlnaHQnKT8udmFsdWUsXG4gICAgfTtcbiAgICBcbiAgICAvLyBJZiBjb25maWcgaGFzIG5hdHVyYWxUZXh0QWN0aW9uSWQsIGZpbmQgdGhlIG1hdGNoaW5nIG5hdHVyYWwgdGV4dCBhY3Rpb25cbiAgICBsZXQgY29uZGl0aW9uTGVmdFZhbHVlID0gJyc7XG4gICAgY29uc3QgY29uZmlnV2l0aElkID0gdGhpcy5jb25maWcgYXMgYW55O1xuICAgIGlmIChjb25maWdXaXRoSWQubmF0dXJhbFRleHRBY3Rpb25JZCAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nQWN0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gU3RyaW5nKG9wdGlvbi5pZCkgPT09IFN0cmluZyhjb25maWdXaXRoSWQubmF0dXJhbFRleHRBY3Rpb25JZClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hpbmdBY3Rpb24pIHtcbiAgICAgICAgLy8gVXNlIG5hdHVyYWxUZXh0IGV4YWN0bHkgYXMgcmVjZWl2ZWQgZnJvbSBBUElcbiAgICAgICAgY29uZGl0aW9uTGVmdFZhbHVlID0gbWF0Y2hpbmdBY3Rpb24ubmF0dXJhbFRleHQgPz8gbWF0Y2hpbmdBY3Rpb24ubmFtZSA/PyBtYXRjaGluZ0FjdGlvbi52YWx1ZSA/PyAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbm8gbmF0dXJhbFRleHRBY3Rpb25JZCBtYXRjaCBmb3VuZCwgcGFyc2UgZnJvbSBjb25kaXRpb24gc3RyaW5nXG4gICAgaWYgKCFjb25kaXRpb25MZWZ0VmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgbGVmdCB9ID0gdGhpcy5wYXJzZUNvbmRpdGlvbih0aGlzLmNvbmRpdGlvbik7XG4gICAgICBjb25kaXRpb25MZWZ0VmFsdWUgPSBsZWZ0O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB7IG9wZXJhdG9yLCByaWdodCB9ID0gdGhpcy5wYXJzZUNvbmRpdGlvbih0aGlzLmNvbmRpdGlvbik7XG4gICAgdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnNldFZhbHVlKGNvbmRpdGlvbkxlZnRWYWx1ZSk7XG4gICAgdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25PcGVyYXRvcicpPy5zZXRWYWx1ZShvcGVyYXRvcik7XG4gICAgdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25SaWdodCcpPy5zZXRWYWx1ZShyaWdodCk7XG4gICAgXG4gICAgdGhpcy5pc0VkaXRpbmcgPSB0cnVlO1xuICAgIC8vIERvIG5vdCBwcmUtcG9wdWxhdGUgRUxTRSBJRiBicmFuY2hlcyBpbiBlZGl0IG1vZGU7IHRoZXkgYXJlIHNob3duIG9ubHkgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFTFNFIElGXCJcbiAgICB0aGlzLmVsc2VJZkJyYW5jaGVzID0gW107XG4gIH1cblxuICBvbkVkaXRDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnNldFZhbHVlKHRoaXMuZWRpdFNuYXBzaG90LmNvbmRpdGlvbkxlZnQgPz8gJycpO1xuICAgIHRoaXMuZWRpdEZvcm0/LmdldCgnY29uZGl0aW9uT3BlcmF0b3InKT8uc2V0VmFsdWUodGhpcy5lZGl0U25hcHNob3QuY29uZGl0aW9uT3BlcmF0b3IgPz8gJ2lzJyk7XG4gICAgdGhpcy5lZGl0Rm9ybT8uZ2V0KCdjb25kaXRpb25SaWdodCcpPy5zZXRWYWx1ZSh0aGlzLmVkaXRTbmFwc2hvdC5jb25kaXRpb25SaWdodCA/PyAnJyk7XG4gICAgXG4gICAgLy8gUmVzZXQgYWxsIEVMU0UgSUYgYnJhbmNoZXMgdG8gdGhlaXIgc25hcHNob3RzXG4gICAgdGhpcy5lbHNlSWZCcmFuY2hlcy5mb3JFYWNoKGJyYW5jaCA9PiB7XG4gICAgICBicmFuY2guZm9ybT8uZ2V0KCdjb25kaXRpb25MZWZ0Jyk/LnNldFZhbHVlKGJyYW5jaC5zbmFwc2hvdC5jb25kaXRpb25MZWZ0ID8/ICcnKTtcbiAgICAgIGJyYW5jaC5mb3JtPy5nZXQoJ2NvbmRpdGlvbk9wZXJhdG9yJyk/LnNldFZhbHVlKGJyYW5jaC5zbmFwc2hvdC5jb25kaXRpb25PcGVyYXRvciA/PyAnaXMnKTtcbiAgICAgIGJyYW5jaC5mb3JtPy5nZXQoJ2NvbmRpdGlvblJpZ2h0Jyk/LnNldFZhbHVlKGJyYW5jaC5zbmFwc2hvdC5jb25kaXRpb25SaWdodCA/PyAnJyk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQ2xlYXIgYWxsIEVMU0UgSUYgYnJhbmNoZXNcbiAgICB0aGlzLmVsc2VJZkJyYW5jaGVzID0gW107XG4gICAgXG4gICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBwYXlsb2FkIGZvciBvbmUgRUxTRSBJRiBicmFuY2ggKGFjdGlvbiwgbmF0dXJhbFRleHRBY3Rpb25JZCwgdGVtcGxhdGVWYXJpYWJsZXNEYXRhLCB0ZXN0RGF0YUxpc3QpXG4gICAqIHNvIHRoZSBwYXJlbnQgY2FuIGNyZWF0ZSB0aGUgc3RlcCB2aWEgUE9TVCB0aGVuIFBVVCB3aGVuIEFwcGx5IGlzIGNsaWNrZWQuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRWxzZUlmQnJhbmNoUGF5bG9hZChicmFuY2g6IHtcbiAgICBmb3JtOiBGb3JtR3JvdXA7XG4gICAgc2VsZWN0ZWRUZW1wbGF0ZTogYW55O1xuICAgIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXTtcbiAgICB0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm06IEZvcm1Hcm91cDtcbiAgfSk6IHsgYWN0aW9uOiBzdHJpbmc7IG5hdHVyYWxUZXh0QWN0aW9uSWQ/OiBudW1iZXI7IHRlbXBsYXRlVmFyaWFibGVzRGF0YT86IGFueTsgdGVzdERhdGFMaXN0PzogQXJyYXk8eyB0ZXN0RGF0YTogc3RyaW5nOyB0ZXN0RGF0YVR5cGU6IHN0cmluZyB9PiB9IHtcbiAgICBjb25zdCBjb25kaXRpb25MZWZ0ID0gYnJhbmNoLmZvcm0/LmdldCgnY29uZGl0aW9uTGVmdCcpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCBjb25kaXRpb25PcGVyYXRvciA9IGJyYW5jaC5mb3JtPy5nZXQoJ2NvbmRpdGlvbk9wZXJhdG9yJyk/LnZhbHVlID8/ICdpcyc7XG4gICAgY29uc3QgY29uZGl0aW9uUmlnaHQgPSBicmFuY2guZm9ybT8uZ2V0KCdjb25kaXRpb25SaWdodCcpPy52YWx1ZSA/PyAnJztcbiAgICBsZXQgbmF0dXJhbFRleHRBY3Rpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCBuYXR1cmFsVGV4dFZhbHVlOiBzdHJpbmcgPSBjb25kaXRpb25MZWZ0O1xuICAgIGlmIChjb25kaXRpb25MZWZ0ICYmIHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGVmdFZhbHVlID0gU3RyaW5nKGNvbmRpdGlvbkxlZnQpO1xuICAgICAgY29uc3QgaXNOdW1lcmljSWQgPSAhaXNOYU4oTnVtYmVyKGxlZnRWYWx1ZSkpICYmIGxlZnRWYWx1ZS50cmltKCkgIT09ICcnO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb246IGFueSA9IGlzTnVtZXJpY0lkXG4gICAgICAgID8gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoKG9wdDogYW55KSA9PiBTdHJpbmcob3B0LmlkKSA9PT0gbGVmdFZhbHVlKVxuICAgICAgICA6IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgKG9wdDogYW55KSA9PiBvcHQubmF0dXJhbFRleHQgPT09IGNvbmRpdGlvbkxlZnQgfHwgb3B0Lm5hbWUgPT09IGNvbmRpdGlvbkxlZnQgfHwgb3B0LnZhbHVlID09PSBjb25kaXRpb25MZWZ0XG4gICAgICAgICAgKTtcbiAgICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgICBuYXR1cmFsVGV4dEFjdGlvbklkID0gc2VsZWN0ZWRBY3Rpb24uaWQ7XG4gICAgICAgIG5hdHVyYWxUZXh0VmFsdWUgPSBzZWxlY3RlZEFjdGlvbi5uYXR1cmFsVGV4dCB8fCBzZWxlY3RlZEFjdGlvbi5uYW1lIHx8IHNlbGVjdGVkQWN0aW9uLnZhbHVlIHx8IGNvbmRpdGlvbkxlZnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRlbXBsYXRlVmFyaWFibGVzRGF0YTogYW55ID0ge307XG4gICAgY29uc3QgdGVzdERhdGFMaXN0OiBBcnJheTx7IHRlc3REYXRhOiBzdHJpbmc7IHRlc3REYXRhVHlwZTogc3RyaW5nIH0+ID0gW107XG4gICAgaWYgKGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gJiYgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzICYmIGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgdGVtcGxhdGVWYXJpYWJsZXNEYXRhW3ZhcmlhYmxlLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgdGVzdERhdGFMaXN0LnB1c2goeyB0ZXN0RGF0YTogU3RyaW5nKHZhbHVlKSwgdGVzdERhdGFUeXBlOiAncmF3JyB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFjdGlvbiA9IFtuYXR1cmFsVGV4dFZhbHVlLCBjb25kaXRpb25PcGVyYXRvciwgY29uZGl0aW9uUmlnaHRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbjogYWN0aW9uIHx8IChicmFuY2guc2VsZWN0ZWRUZW1wbGF0ZT8ubmF0dXJhbFRleHQgPz8gJycpLFxuICAgICAgLi4uKG5hdHVyYWxUZXh0QWN0aW9uSWQgIT09IHVuZGVmaW5lZCAmJiB7IG5hdHVyYWxUZXh0QWN0aW9uSWQgfSksXG4gICAgICAuLi4oT2JqZWN0LmtleXModGVtcGxhdGVWYXJpYWJsZXNEYXRhKS5sZW5ndGggPiAwICYmIHsgdGVtcGxhdGVWYXJpYWJsZXNEYXRhIH0pLFxuICAgICAgLi4uKHRlc3REYXRhTGlzdC5sZW5ndGggPiAwICYmIHsgdGVzdERhdGFMaXN0IH0pLFxuICAgIH07XG4gIH1cblxuICBvbkVkaXRBcHBseSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5lZGl0Rm9ybS52YWx1ZTtcbiAgICBjb25zdCBjb25kaXRpb25MZWZ0ID0gZm9ybVZhbHVlcy5jb25kaXRpb25MZWZ0ID8/ICcnO1xuICAgIGNvbnN0IGNvbmRpdGlvbk9wZXJhdG9yID0gZm9ybVZhbHVlcy5jb25kaXRpb25PcGVyYXRvciA/PyAnaXMnO1xuICAgIGNvbnN0IGNvbmRpdGlvblJpZ2h0ID0gZm9ybVZhbHVlcy5jb25kaXRpb25SaWdodCA/PyAnJztcbiAgICBcbiAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCBuYXR1cmFsIHRleHQgYWN0aW9uIGFuZCBnZXQgbmF0dXJhbFRleHQgKG5vdCBJRClcbiAgICBsZXQgbmF0dXJhbFRleHRBY3Rpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCBuYXR1cmFsVGV4dFZhbHVlOiBzdHJpbmcgPSBjb25kaXRpb25MZWZ0OyAvLyBEZWZhdWx0IHRvIGNvbmRpdGlvbkxlZnRcbiAgICBcbiAgICBpZiAoY29uZGl0aW9uTGVmdCAmJiB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgJiYgdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IFN0cmluZyhjb25kaXRpb25MZWZ0KTtcbiAgICAgIGNvbnN0IGlzTnVtZXJpY0lkID0gIWlzTmFOKE51bWJlcihsZWZ0VmFsdWUpKSAmJiBsZWZ0VmFsdWUudHJpbSgpICE9PSAnJztcbiAgICAgIFxuICAgICAgbGV0IHNlbGVjdGVkQWN0aW9uOiBhbnk7XG4gICAgICBpZiAoaXNOdW1lcmljSWQpIHtcbiAgICAgICAgLy8gRmluZCBieSBJRCBhbmQgZ2V0IG5hdHVyYWxUZXh0XG4gICAgICAgIHNlbGVjdGVkQWN0aW9uID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zLmZpbmQoXG4gICAgICAgICAgKG9wdGlvbjogYW55KSA9PiBTdHJpbmcob3B0aW9uLmlkKSA9PT0gbGVmdFZhbHVlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGaW5kIGJ5IG5hdHVyYWxUZXh0LCBuYW1lLCBvciB2YWx1ZVxuICAgICAgICBzZWxlY3RlZEFjdGlvbiA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucy5maW5kKFxuICAgICAgICAgIChvcHRpb246IGFueSkgPT4gb3B0aW9uLm5hdHVyYWxUZXh0ID09PSBjb25kaXRpb25MZWZ0IHx8IG9wdGlvbi5uYW1lID09PSBjb25kaXRpb25MZWZ0IHx8IG9wdGlvbi52YWx1ZSA9PT0gY29uZGl0aW9uTGVmdFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgbmF0dXJhbFRleHRBY3Rpb25JZCA9IHNlbGVjdGVkQWN0aW9uLmlkO1xuICAgICAgICAvLyBVc2UgbmF0dXJhbFRleHQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIG5hbWUgb3IgdmFsdWVcbiAgICAgICAgbmF0dXJhbFRleHRWYWx1ZSA9IHNlbGVjdGVkQWN0aW9uLm5hdHVyYWxUZXh0IHx8IHNlbGVjdGVkQWN0aW9uLm5hbWUgfHwgc2VsZWN0ZWRBY3Rpb24udmFsdWUgfHwgY29uZGl0aW9uTGVmdDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ29sbGVjdCB0ZW1wbGF0ZSB2YXJpYWJsZXMgdmFsdWVzIGZvciBldmVudCBvYmplY3RcbiAgICBjb25zdCB0ZW1wbGF0ZVZhcmlhYmxlc0RhdGE6IGFueSA9IHt9O1xuICAgIC8vIEJ1aWxkIHRlc3REYXRhTGlzdCBhcnJheSBpbiB0aGUgb3JkZXIgb2YgdGVtcGxhdGUgdmFyaWFibGVzXG4gICAgY29uc3QgdGVzdERhdGFMaXN0OiBBcnJheTx7IHRlc3REYXRhOiBzdHJpbmc7IHRlc3REYXRhVHlwZTogc3RyaW5nIH0+ID0gW107XG4gICAgXG4gICAgaWYgKHRoaXMudGVtcGxhdGVWYXJpYWJsZXNGb3JtICYmIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAvLyBBZGQgdG8gZXZlbnQgb2JqZWN0IChlLmcuLCBzb3VyY2VfdmFsdWUsIHRhcmdldF92YWx1ZSlcbiAgICAgICAgICB0ZW1wbGF0ZVZhcmlhYmxlc0RhdGFbdmFyaWFibGUubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAvLyBBZGQgdG8gdGVzdERhdGFMaXN0IGFycmF5IChvcmRlciBtYXR0ZXJzIC0gbWFpbnRhaW4gdGVtcGxhdGUgdmFyaWFibGUgb3JkZXIpXG4gICAgICAgICAgdGVzdERhdGFMaXN0LnB1c2goe1xuICAgICAgICAgICAgdGVzdERhdGE6IFN0cmluZyh2YWx1ZSksXG4gICAgICAgICAgICB0ZXN0RGF0YVR5cGU6ICdyYXcnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBCdWlsZCBjb25kaXRpb24gc3RyaW5nIHVzaW5nIG5hdHVyYWxUZXh0IChub3QgSUQpXG4gICAgdGhpcy5jb25kaXRpb24gPSBbbmF0dXJhbFRleHRWYWx1ZSwgY29uZGl0aW9uT3BlcmF0b3IsIGNvbmRpdGlvblJpZ2h0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIFxuICAgIC8vIEJ1aWxkIHBheWxvYWQgZm9yIGVhY2ggbmV3bHkgYWRkZWQgRUxTRSBJRiAoc28gcGFyZW50IGNhbiBjYWxsIFBPU1QgdGhlbiBQVVQgd2hlbiBBcHBseSBpcyBjbGlja2VkKVxuICAgIGNvbnN0IG5ld0Vsc2VJZkJyYW5jaGVzID0gdGhpcy5lbHNlSWZCcmFuY2hlcy5tYXAoYiA9PiB0aGlzLmJ1aWxkRWxzZUlmQnJhbmNoUGF5bG9hZChiKSk7XG4gICAgXG4gICAgLy8gVXBkYXRlIGNvbmZpZyB3aXRoIG5ldyB2YWx1ZXNcbiAgICBjb25zdCB1cGRhdGVkQ29uZmlnOiBDb25kaXRpb25TdGVwQ29uZmlnICYgeyBcbiAgICAgIG5hdHVyYWxUZXh0QWN0aW9uSWQ/OiBudW1iZXI7IFxuICAgICAgdGVtcGxhdGVWYXJpYWJsZXNEYXRhPzogYW55O1xuICAgICAgdGVzdERhdGFMaXN0PzogQXJyYXk8eyB0ZXN0RGF0YTogc3RyaW5nOyB0ZXN0RGF0YVR5cGU6IHN0cmluZyB9PjtcbiAgICAgIG5ld0Vsc2VJZkJyYW5jaGVzPzogQXJyYXk8eyBhY3Rpb246IHN0cmluZzsgbmF0dXJhbFRleHRBY3Rpb25JZD86IG51bWJlcjsgdGVtcGxhdGVWYXJpYWJsZXNEYXRhPzogYW55OyB0ZXN0RGF0YUxpc3Q/OiBBcnJheTx7IHRlc3REYXRhOiBzdHJpbmc7IHRlc3REYXRhVHlwZTogc3RyaW5nIH0+IH0+O1xuICAgIH0gPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sIC8vIENvbmRpdGlvbiBub3cgdXNlcyBuYXR1cmFsVGV4dFxuICAgICAgc3RlcFR5cGU6IHRoaXMuY29uZmlnLnN0ZXBUeXBlIHx8IFN0ZXBUeXBlcy5DT05ESVRJT05fSUYsIC8vIEVuc3VyZSBzdGVwVHlwZSBpcyBzZXRcbiAgICAgIC4uLihuYXR1cmFsVGV4dEFjdGlvbklkICE9PSB1bmRlZmluZWQgJiYgeyBuYXR1cmFsVGV4dEFjdGlvbklkIH0gYXMgYW55KSxcbiAgICAgIC4uLihPYmplY3Qua2V5cyh0ZW1wbGF0ZVZhcmlhYmxlc0RhdGEpLmxlbmd0aCA+IDAgJiYgeyB0ZW1wbGF0ZVZhcmlhYmxlc0RhdGEgfSBhcyBhbnkpLFxuICAgICAgLi4uKHRlc3REYXRhTGlzdC5sZW5ndGggPiAwICYmIHsgdGVzdERhdGFMaXN0IH0gYXMgYW55KSxcbiAgICAgIC4uLihuZXdFbHNlSWZCcmFuY2hlcy5sZW5ndGggPiAwICYmIHsgbmV3RWxzZUlmQnJhbmNoZXMgfSBhcyBhbnkpLFxuICAgIH07XG4gICAgXG4gICAgLy8gRW1pdCBpbmRpdmlkdWFsIGNoYW5nZSBldmVudFxuICAgIHRoaXMuY29uZGl0aW9uQ2hhbmdlLmVtaXQodGhpcy5jb25kaXRpb24pO1xuICAgIFxuICAgIC8vIEVtaXQgc3RlcCB1cGRhdGUgZXZlbnQgd2l0aCBmdWxsIGNvbmZpZyAoaW5jbHVkZXMgbmV3RWxzZUlmQnJhbmNoZXMgc28gcGFyZW50IGNhbiBjcmVhdGUgc3RlcHMgb24gQXBwbHkpXG4gICAgY29uc29sZS5sb2coJ0NvbmRpdGlvbi1zdGVwOiBFbWl0dGluZyBzdGVwVXBkYXRlIGV2ZW50JywgdXBkYXRlZENvbmZpZyk7XG4gICAgdGhpcy5zdGVwVXBkYXRlLmVtaXQodXBkYXRlZENvbmZpZyk7XG4gICAgXG4gICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRWRpdEluRGVwdGgoKTogdm9pZCB7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5lbWl0KCk7XG4gIH1cblxuICBvbkxpbmsoKTogdm9pZCB7XG4gICAgLy8gTm90IHVzZWQgaW4gY29uZGl0aW9uIHN0ZXAsIGJ1dCBuZWVkZWQgZm9yIHJlY3Vyc2l2ZSBzdGVwIGdyb3Vwc1xuICB9XG5cbiAgb25EdXBsaWNhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kdXBsaWNhdGUuZW1pdCgpO1xuICB9XG5cbiAgb25EZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUuZW1pdCgpO1xuICB9XG5cbiAgb25Nb3JlT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLm1vcmVPcHRpb25zLmVtaXQoKTtcbiAgfVxuICBcbiAgLyoqIEdldCBzZWxlY3QgY29uZmlnIGZvciBhIHRlbXBsYXRlIHZhcmlhYmxlICovXG4gIGdldFNlbGVjdENvbmZpZ0ZvclZhcmlhYmxlKHZhcmlhYmxlOiBhbnksIGJyYW5jaElkT3JJc0Vsc2U6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZSk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSAodmFyaWFibGUub3B0aW9ucyB8fCBbXSkubWFwKChvcHQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGlkOiBvcHQsXG4gICAgICB2YWx1ZTogb3B0LFxuICAgICAgbmFtZTogb3B0LFxuICAgICAgbGFiZWw6IG9wdFxuICAgIH0pKTtcblxuICAgIC8vIElmIGJyYW5jaElkT3JJc0Vsc2UgaXMgYSBzdHJpbmcsIGl0J3MgYSBicmFuY2ggSUQ7IG90aGVyd2lzZSBpdCdzIGEgYm9vbGVhbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGxldCBmb3JtOiBGb3JtR3JvdXA7XG4gICAgaWYgKHR5cGVvZiBicmFuY2hJZE9ySXNFbHNlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgYnJhbmNoID0gdGhpcy5lbHNlSWZCcmFuY2hlcy5maW5kKGIgPT4gYi5pZCA9PT0gYnJhbmNoSWRPcklzRWxzZSk7XG4gICAgICBmb3JtID0gYnJhbmNoPy50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0gfHwgdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm0gPSBicmFuY2hJZE9ySXNFbHNlID8gKHRoaXMuZWxzZUlmQnJhbmNoZXNbMF0/LnRlbXBsYXRlVmFyaWFibGVzRm9ybSB8fCB0aGlzLmZiLmdyb3VwKHt9KSkgOiB0aGlzLnRlbXBsYXRlVmFyaWFibGVzRm9ybTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB2YXJpYWJsZS5uYW1lLFxuICAgICAgcGxhY2Vob2xkZXI6IGBTZWxlY3QgJHt2YXJpYWJsZS5sYWJlbH1gLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChmb3JtICYmIGZvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgICAgZm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIidjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdICcgKyAoaXNOZXN0ZWQgPyAnIGNxYS1wbC1bMjRweF0nIDogJycpXCI+XG4gIDwhLS0gSW5saW5lIEVkaXQgTW9kZTogQ09ORElUSU9OIHRhZywgdGhyZWUgZmllbGRzLCBJRi9FTFNFIGNoaXBzLCBFZGl0IEluIGRlcHRoLCBDYW5jZWwvQXBwbHkgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0VkaXRpbmdcIiBjbGFzcz1cImNxYS1weS0yLjUgY3FhLXB4LTQgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtM1wiPlxuICAgIDwhLS0gRmlyc3QgUm93OiBDT05ESVRJT04gdGFnLCBhdXRvY29tcGxldGUsIElGL0VMU0UgaW5kaWNhdG9ycywgRWRpdCBJbiBkZXB0aCwgQ2FuY2VsL0FwcGx5IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWZsZXgtZ3Jvd1wiPlxuICAgICAgICA8IS0tIENPTkRJVElPTiBUYWcgKG9yYW5nZSkgLS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1bI0VBNTgwQ10gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLWJnLVsjRkZFREQ1XVwiPlxuICAgICAgICAgIENPTkRJVElPTlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBGaXJzdCBmaWVsZDogbGVmdCBvcGVyYW5kIChlLmcuIFVzZXJ0eXBlKSAtIGF1dG9jb21wbGV0ZSB3aXRoIElGX0NPTkRJVElPTiBuYXR1cmFsIHRleHQgYWN0aW9ucyAtLT5cbiAgICAgICAgPGNxYS1hdXRvY29tcGxldGVcbiAgICAgICAgICAqbmdJZj1cImVkaXRGb3JtXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJjb25kaXRpb25MZWZ0QXV0b2NvbXBsZXRlT3B0aW9uc1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImVkaXRGb3JtLmdldCgnY29uZGl0aW9uTGVmdCcpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRWRpdEZvcm1GaWVsZENoYW5nZSgnY29uZGl0aW9uTGVmdCcsICRldmVudClcIlxuICAgICAgICAgIChvcHRpb25TZWxlY3QpPVwib25Db25kaXRpb25MZWZ0U2VsZWN0KCRldmVudClcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNvbmRpdGlvblwiXG4gICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLW1heC13LVsyMTZweF1cIj48L2NxYS1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgPCEtLSBTZWNvbmQgUm93OiBUZW1wbGF0ZSBWYXJpYWJsZXMgU2VjdGlvbiAoc2hvd24gd2hlbiB0ZW1wbGF0ZSBpcyBzZWxlY3RlZCwgaW5saW5lIGJlZm9yZSBFZGl0IEluIGRlcHRoKSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkVGVtcGxhdGUgJiYgdGVtcGxhdGVWYXJpYWJsZXMgJiYgdGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtcm93IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0zXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgdGVtcGxhdGVWYXJpYWJsZXNcIj5cbiAgICAgICAgICAgIDwhLS0gQm9vbGVhbiB2YXJpYWJsZXMgd2l0aCBtYXQtc2xpZGUtdG9nZ2xlIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnZhbHVlIHx8IHZhcmlhYmxlLnZhbHVlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8uc2V0VmFsdWUoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBOb24tYm9vbGVhbiB2YXJpYWJsZXMgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUudHlwZSAhPT0gJ2Jvb2xlYW4nICYmIHZhcmlhYmxlLm5hbWUgIT09ICdjdXN0b21fY29kZSdcIj5cbiAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBmb3Igc2VsZWN0IHZhcmlhYmxlcyAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLm5hbWUgPT09ICd0eXBlJyB8fCB2YXJpYWJsZS5uYW1lID09PSAnc2Nyb2xsVG8nIHx8IHZhcmlhYmxlLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgc3R5bGU9XCJtaW4td2lkdGg6IDE1MHB4O1wiPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cInRlbXBsYXRlVmFyaWFibGVzRm9ybVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnRm9yVmFyaWFibGUodmFyaWFibGUsIGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8IS0tIFRleHQgSW5wdXQgZm9yIG90aGVyIHZhcmlhYmxlcyAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLm5hbWUgIT09ICd0eXBlJyAmJiB2YXJpYWJsZS5uYW1lICE9PSAnc2Nyb2xsVG8nICYmICF2YXJpYWJsZS5vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiIHN0eWxlPVwibWluLXdpZHRoOiAxNTBweDtcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyICcgKyB2YXJpYWJsZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZSB8fCB2YXJpYWJsZS52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ0ZW1wbGF0ZVZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSUYgLyBFTFNFIGluZGljYXRvcnMgLS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXB4LTIgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS10ZXh0LVs4cHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtYmctWyNEQ0ZDRTddIGNxYS10ZXh0LVsjMDA4MjM2XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0I5RjhDRl0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgOCA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02LjY2NjM0IDJMMi45OTk2NyA1LjY2NjY3TDEuMzMzMDEgNFwiIHN0cm9rZT1cIiMwMDgyMzZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgSUZcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8IS0tIEFkZCBFTFNFIElGIGJ1dHRvbiAtIGFsd2F5cyB2aXNpYmxlIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRWxzZSgpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1weC0yIGNxYS1weS1bMnB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtdGV4dC1bOHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWJnLVsjRjNGNEY2XSBjcWEtdGV4dC1bIzk5QTFBRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1iZy1bI0U1RTdFQl0gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgQWRkIEVMU0UgSUZcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwhLS0gQWRkIEVsc2UgYnV0dG9uIC0gY2FsbHMgQVBJIHRvIGNyZWF0ZSBDT05ESVRJT05fRUxTRSBzdGVwIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRWxzZUJyYW5jaCgpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1weC0yIGNxYS1weS1bMnB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtdGV4dC1bOHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWJnLVsjRjNGNEY2XSBjcWEtdGV4dC1bIzk5QTFBRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1iZy1bI0U1RTdFQl0gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgQWRkIEVsc2VcbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSBFZGl0IEluIGRlcHRoIGxpbmsgLS0+XG4gICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9uRWRpdEluRGVwdGgoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bMnB4XSBjcWEtbm8tdW5kZXJsaW5lXCI+XG4gICAgICAgICAgRWRpdCBJbiBkZXB0aFxuICAgICAgICAgIDxzdmcgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgOCA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0yLjAzODA5IDYuNzQzMjlMMi42MjgwOSA3LjMzMzI5TDUuOTYxNDIgMy45OTk5NkwyLjYyODA5IDAuNjY2NjI2TDIuMDM4MDkgMS4yNTY2M0w0Ljc4MTQyIDMuOTk5OTZMMi4wMzgwOSA2Ljc0MzI5WlwiIGZpbGw9XCIjM0Y0M0VFXCIvPjwvc3ZnPlxuICAgICAgICA8L2E+ICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gQ2FuY2VsIC8gQXBwbHkgYnV0dG9ucyAtIHNob3duIG9uIElGIHJvdyB3aGVuIG5vIEVMU0UgSUYgYnJhbmNoZXMgYXJlIHByZXNlbnQgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZWxzZUlmQnJhbmNoZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiBidG5TaXplPVwibGdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0nXCIgW3RleHRdPVwiJ0NhbmNlbCdcIiAoY2xpY2tlZCk9XCJvbkVkaXRDYW5jZWwoKVwiPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSdcIiBbdGV4dF09XCInQXBwbHknXCIgKGNsaWNrZWQpPVwib25FZGl0QXBwbHkoKVwiPjwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIFxuICA8L2Rpdj5cblxuICA8IS0tIEVMU0UgSUYgU2VjdGlvbnMgaW4gRWRpdCBNb2RlIC0gTG9vcCB0aHJvdWdoIGFsbCBFTFNFIElGIGJyYW5jaGVzIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgZWxzZUlmQnJhbmNoZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0aW5nXCIgY2xhc3M9XCJjcWEtcHktMi41IGNxYS1weC00IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl1cIj5cbiAgICAgIDwhLS0gRmlyc3QgUm93OiBSZW1vdmUgRUxTRSBJRiBidXR0b24sIGF1dG9jb21wbGV0ZSwgRWRpdCBJbiBkZXB0aCwgQ2FuY2VsL0FwcGx5IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mbGV4LWdyb3dcIj5cbiAgICAgICAgICA8IS0tIFJlbW92ZSBFTFNFIElGIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUVsc2UoYnJhbmNoLmlkKVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1weC0yIGNxYS1weS1bMnB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtdGV4dC1bOHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWJnLVsjRjNGNEY2XSBjcWEtdGV4dC1bIzk5QTFBRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtYmctWyNFNUU3RUJdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgUmVtb3ZlIEVMU0UgSUZcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gRUxTRSBJRiBhdXRvY29tcGxldGUgZmllbGQ6IHNhbWUgYXMgSUYgY29uZGl0aW9uIC0tPlxuICAgICAgICAgIDxjcWEtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAqbmdJZj1cImJyYW5jaC5mb3JtXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbmRpdGlvbkxlZnRBdXRvY29tcGxldGVPcHRpb25zXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJicmFuY2guZm9ybS5nZXQoJ2NvbmRpdGlvbkxlZnQnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImJyYW5jaC5mb3JtLmdldCgnY29uZGl0aW9uTGVmdCcpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvcHRpb25TZWxlY3QpPVwib25FbHNlQ29uZGl0aW9uTGVmdFNlbGVjdCgkZXZlbnQsIGJyYW5jaC5pZClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLW1heC13LVsyMTZweF1cIj48L2NxYS1hdXRvY29tcGxldGU+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBTZWNvbmQgUm93OiBFTFNFIElGIFRlbXBsYXRlIFZhcmlhYmxlcyBTZWN0aW9uIChzaG93biB3aGVuIHRlbXBsYXRlIGlzIHNlbGVjdGVkLCBpbmxpbmUgYmVmb3JlIEVkaXQgSW4gZGVwdGgpIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJicmFuY2guc2VsZWN0ZWRUZW1wbGF0ZSAmJiBicmFuY2gudGVtcGxhdGVWYXJpYWJsZXMgJiYgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXJvdyBjcWEtZmxleC13cmFwIGNxYS1nYXAtM1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgIDwhLS0gQm9vbGVhbiB2YXJpYWJsZXMgd2l0aCBtYXQtc2xpZGUtdG9nZ2xlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYnJhbmNoLnRlbXBsYXRlVmFyaWFibGVzRm9ybS5nZXQodmFyaWFibGUubmFtZSk/LnZhbHVlIHx8IHZhcmlhYmxlLnZhbHVlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8uc2V0VmFsdWUoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBOb24tYm9vbGVhbiB2YXJpYWJsZXMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS50eXBlICE9PSAnYm9vbGVhbicgJiYgdmFyaWFibGUubmFtZSAhPT0gJ2N1c3RvbV9jb2RlJ1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gZm9yIHNlbGVjdCB2YXJpYWJsZXMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhYmxlLm5hbWUgPT09ICd0eXBlJyB8fCB2YXJpYWJsZS5uYW1lID09PSAnc2Nyb2xsVG8nIHx8IHZhcmlhYmxlLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIm1pbi13aWR0aDogMTUwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImJyYW5jaC50ZW1wbGF0ZVZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnRm9yVmFyaWFibGUodmFyaWFibGUsIGJyYW5jaC5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8IS0tIFRleHQgSW5wdXQgZm9yIG90aGVyIHZhcmlhYmxlcyAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUubmFtZSAhPT0gJ3R5cGUnICYmIHZhcmlhYmxlLm5hbWUgIT09ICdzY3JvbGxUbycgJiYgIXZhcmlhYmxlLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIm1pbi13aWR0aDogMTUwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8udmFsdWUgfHwgdmFyaWFibGUudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJicmFuY2gudGVtcGxhdGVWYXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZS5uYW1lKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInZhcmlhYmxlLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFZGl0IEluIGRlcHRoIGxpbmsgLS0+XG4gICAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwib25FZGl0SW5EZXB0aCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtWzJweF0gY3FhLW5vLXVuZGVybGluZVwiPlxuICAgICAgICAgICAgRWRpdCBJbiBkZXB0aFxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjhcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCA4IDhcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTIuMDM4MDkgNi43NDMyOUwyLjYyODA5IDcuMzMzMjlMNS45NjE0MiAzLjk5OTk2TDIuNjI4MDkgMC42NjY2MjZMMi4wMzgwOSAxLjI1NjYzTDQuNzgxNDIgMy45OTk5NkwyLjAzODA5IDYuNzQzMjlaXCIgZmlsbD1cIiMzRjQzRUVcIi8+PC9zdmc+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBDYW5jZWwgLyBBcHBseSBidXR0b25zIC0gc2hvd24gaW4gbGFzdCBFTFNFIElGIHJvdyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImkgPT09IGVsc2VJZkJyYW5jaGVzLmxlbmd0aCAtIDFcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgYnRuU2l6ZT1cImxnXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdJ1wiIFt0ZXh0XT1cIidDYW5jZWwnXCIgKGNsaWNrZWQpPVwib25FZGl0Q2FuY2VsKClcIj48L2NxYS1idXR0b24+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSdcIiBbdGV4dF09XCInQXBwbHknXCIgKGNsaWNrZWQpPVwib25FZGl0QXBwbHkoKVwiPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBDb25kaXRpb24gSGVhZGVyIChub3JtYWwgdmlldyB3aGVuIG5vdCBlZGl0aW5nKSAtLT5cbiAgPGRpdiAqbmdJZj1cIiFpc0VkaXRpbmdcIiBbY2xhc3NdPVwiJ3N0ZXAtcm93IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weS0yICcgKyAoaXNJbnNpZGVMb29wID8gJ2NxYS1wbC0xMCBjcWEtcHItNCcgOiAnY3FhLXB4LTQnKVwiPlxuICAgIDwhLS0gRXhwYW5kL0NvbGxhcHNlIEljb24gLS0+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uVG9nZ2xlRXhwYW5kZWQoKVwiIGNsYXNzPVwiY3FhLXAtMFwiPlxuICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiIWV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTIgMTBMOCA2TDQgMTBcIiBzdHJva2U9XCIjNkI3MjgwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBJRi9FTFNFIEljb24gLS0+XG4gICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk00IDJWMTBcIiBzdHJva2U9XCIjN0IzMzA2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMiA2QzEzLjEwNDYgNiAxNCA1LjEwNDU3IDE0IDRDMTQgMi44OTU0MyAxMy4xMDQ2IDIgMTIgMkMxMC44OTU0IDIgMTAgMi44OTU0MyAxMCA0QzEwIDUuMTA0NTcgMTAuODk1NCA2IDEyIDZaXCJcbiAgICAgICAgICBzdHJva2U9XCIjN0IzMzA2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk00IDE0QzUuMTA0NTcgMTQgNiAxMy4xMDQ2IDYgMTJDNiAxMC44OTU0IDUuMTA0NTcgMTAgNCAxMEMyLjg5NTQzIDEwIDIgMTAuODk1NCAyIDEyQzIgMTMuMTA0NiAyLjg5NTQzIDE0IDQgMTRaXCJcbiAgICAgICAgICBzdHJva2U9XCIjN0IzMzA2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTIgNkMxMiA3LjU5MTMgMTEuMzY3OSA5LjExNzQyIDEwLjI0MjYgMTAuMjQyNkM5LjExNzQyIDExLjM2NzkgNy41OTEzIDEyIDYgMTJcIiBzdHJva2U9XCIjN0IzMzA2XCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgIDwvc3ZnPjwvZGl2PlxuXG4gICAgPCEtLSBJRi9FTFNFIExhYmVsIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyM3QjMzMDZdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1ub25lXCI+XG4gICAgICBJRiAvIEVMU0VcbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIENvbmRpdGlvbiBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLW1sLTIgY3FhLWZsZXgtMVwiPlxuICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjb25kaXRpb25cIj48L3NwYW4+XG4gICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF1cIj5cbiAgICAgICAgSWZcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRDhEOUZDXVwiPi5zdWNjZXNzLW1lc3NhZ2U8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgIGlzIHZpc2libGVcbiAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICA8IS0tIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFt2YWx1ZV09XCJjb25kaXRpb25cIlxuICAgICAgICAoaW5wdXQpPVwib25Db25kaXRpb25DaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImVsZW1lbnQgYC5zdWNjZXNzLW1lc3NhZ2VgIGlzIHZpc2libGVcIlxuICAgICAgICBjbGFzcz1cImNxYS1weC0zIGNxYS1weS0xLjUgY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLWdyYXktMzAwIGNxYS1iZy13aGl0ZSBjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC1zbSBjcWEtZmxleC0xIGNxYS1tYXgtdy1tZCBjcWEtb3V0bGluZS1ub25lIGZvY3VzOmNxYS1yaW5nLTIgZm9jdXM6Y3FhLXJpbmctcHJpbWFyeSBmb2N1czpjcWEtcmluZy1vcGFjaXR5LTUwXCJcbiAgICAgIC8+IC0tPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwcyBTdW1tYXJ5IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY3FhLW1sLWF1dG8gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU1RTVdIGNxYS1yb3VuZGVkLWxnIGNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF1cIj5cbiAgICAgIHt7IGdldFN0ZXBzU3VtbWFyeSgpIH19XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFjdGlvbiBJY29uczogRWRpdCwgTGluaywgRHVwbGljYXRlLCBEZWxldGUgKHNob3cgb24gaG92ZXIpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdGVwLWFjdGlvbnMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB4LVs3cHhdXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25FZGl0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIHRpdGxlPVwiRWRpdFwiIGNsYXNzPVwiY3FhLXAtMCBjcWEtdGV4dC1bIzk5QTFBZl0gaG92ZXI6Y3FhLXRleHQtWyMxNDQ3RTZdXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNyAxMS42NjY2SDEyLjI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTkuNTUyMDggMi4xMTI4QzkuNzg0MyAxLjg4MDU4IDEwLjA5OTMgMS43NTAxMiAxMC40Mjc3IDEuNzUwMTJDMTAuNzU2MSAxLjc1MDEyIDExLjA3MSAxLjg4MDU4IDExLjMwMzMgMi4xMTI4QzExLjUzNTUgMi4zNDUwMiAxMS42NjU5IDIuNjU5OTggMTEuNjY1OSAyLjk4ODM4QzExLjY2NTkgMy4zMTY3OSAxMS41MzU1IDMuNjMxNzUgMTEuMzAzMyAzLjg2Mzk3TDQuMjk3NDIgMTAuODcwNEM0LjE1ODY0IDExLjAwOTIgMy45ODcxIDExLjExMDcgMy43OTg2NyAxMS4xNjU2TDIuMTIzMzMgMTEuNjU0NEMyLjA3MzE0IDExLjY2OSAyLjAxOTkzIDExLjY2OTkgMS45NjkyOCAxMS42NTY5QzEuOTE4NjMgMTEuNjQzOSAxLjg3MjQgMTEuNjE3NiAxLjgzNTQzIDExLjU4MDZDMS43OTg0NiAxMS41NDM3IDEuNzcyMSAxMS40OTc0IDEuNzU5MTMgMTEuNDQ2OEMxLjc0NjE1IDExLjM5NjEgMS43NDcwMyAxMS4zNDI5IDEuNzYxNjcgMTEuMjkyN0wyLjI1MDUgOS42MTczOEMyLjMwNTQ2IDkuNDI5MTYgMi40MDY5OCA5LjI1NzgzIDIuNTQ1NjcgOS4xMTkyMkw5LjU1MjA4IDIuMTEyOFpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25MaW5rKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIHRpdGxlPVwiTGlua1wiIGNsYXNzPVwiY3FhLXAtMCBjcWEtdGV4dC1bIzk5QTFBZl0gaG92ZXI6Y3FhLXRleHQtWyMxNDQ3RTZdXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS4wMDA2NSA5LjkxNjcxSDMuNjY3MzJDMi43ODMyNiA5LjkxNjcxIDEuOTM1NDIgOS42MDk0MiAxLjMxMDMgOS4wNjI0NEMwLjY4NTE3NCA4LjUxNTQ1IDAuMzMzOTg0IDcuNzczNTkgMC4zMzM5ODQgNy4wMDAwNEMwLjMzMzk4NCA2LjIyNjQ5IDAuNjg1MTc0IDUuNDg0NjMgMS4zMTAzIDQuOTM3NjVDMS45MzU0MiA0LjM5MDY2IDIuNzgzMjYgNC4wODMzNyAzLjY2NzMyIDQuMDgzMzdINS4wMDA2NVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk05IDQuMDgzMzdIMTAuMzMzM0MxMS4yMTc0IDQuMDgzMzcgMTIuMDY1MiA0LjM5MDY2IDEyLjY5MDQgNC45Mzc2NUMxMy4zMTU1IDUuNDg0NjMgMTMuNjY2NyA2LjIyNjQ5IDEzLjY2NjcgNy4wMDAwNEMxMy42NjY3IDcuNzczNTkgMTMuMzE1NSA4LjUxNTQ1IDEyLjY5MDQgOS4wNjI0NEMxMi4wNjUyIDkuNjA5NDIgMTEuMjE3NCA5LjkxNjcxIDEwLjMzMzMgOS45MTY3MUg5XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuMzMzOTggN0g5LjY2NzMyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRHVwbGljYXRlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIHRpdGxlPVwiRHVwbGljYXRlXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS10ZXh0LVsjOTlBMUFmXSBob3ZlcjpjcWEtdGV4dC1bIzE0NDdFNl1cIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMS42NjYgNC42NjY2M0g1LjgzMjY4QzUuMTg4MzUgNC42NjY2MyA0LjY2NjAyIDUuMTg4OTYgNC42NjYwMiA1LjgzMzI5VjExLjY2NjZDNC42NjYwMiAxMi4zMTEgNS4xODgzNSAxMi44MzMzIDUuODMyNjggMTIuODMzM0gxMS42NjZDMTIuMzEwMyAxMi44MzMzIDEyLjgzMjcgMTIuMzExIDEyLjgzMjcgMTEuNjY2NlY1LjgzMzI5QzEyLjgzMjcgNS4xODg5NiAxMi4zMTAzIDQuNjY2NjMgMTEuNjY2IDQuNjY2NjNaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTIuMzMyNjggOS4zMzMyOUMxLjY5MTAyIDkuMzMzMjkgMS4xNjYwMiA4LjgwODI5IDEuMTY2MDIgOC4xNjY2M1YyLjMzMzI5QzEuMTY2MDIgMS42OTE2MyAxLjY5MTAyIDEuMTY2NjMgMi4zMzI2OCAxLjE2NjYzSDguMTY2MDJDOC44MDc2OCAxLjE2NjYzIDkuMzMyNjggMS42OTE2MyA5LjMzMjY4IDIuMzMzMjlcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EZWxldGUoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgdGl0bGU9XCJEZWxldGVcIiBjbGFzcz1cImNxYS1wLTAgY3FhLXRleHQtWyNmZjY0NjddIGhvdmVyOmNxYS10ZXh0LVsjQzYzNTM1XVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEuNzUgMy41SDEyLjI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTExLjA4MjcgMy41VjExLjY2NjdDMTEuMDgyNyAxMi4yNSAxMC40OTkzIDEyLjgzMzMgOS45MTYwMiAxMi44MzMzSDQuMDgyNjhDMy40OTkzNSAxMi44MzMzIDIuOTE2MDIgMTIuMjUgMi45MTYwMiAxMS42NjY3VjMuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjY2NjAyIDMuNDk5OTZWMi4zMzMyOUM0LjY2NjAyIDEuNzQ5OTYgNS4yNDkzNSAxLjE2NjYzIDUuODMyNjggMS4xNjY2M0g4LjE2NjAyQzguNzQ5MzUgMS4xNjY2MyA5LjMzMjY4IDEuNzQ5OTYgOS4zMzI2OCAyLjMzMzI5VjMuNDk5OTZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNS44MzM5OCA2LjQxNjYzVjkuOTE2NjNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNOC4xNjYwMiA2LjQxNjYzVjkuOTE2NjNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRXhwYW5kZWQgQ29udGVudCB3aXRoIEJyYW5jaGVzIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgIDwhLS0gQnJhbmNoZXMgKElGIFRSVUUsIEVMU0UgSUYsIEVMU0UpIC0tPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGJyYW5jaCBvZiBicmFuY2hlc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICA8IS0tIEJyYW5jaCBIZWFkZXIgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIFtjbGFzc109XCInY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiAnICsgZ2V0QnJhbmNoVGV4dENvbG9yKGJyYW5jaCkgKyAnICcgKyBnZXRCcmFuY2hDb2xvckNsYXNzKGJyYW5jaClcIj5cbiAgICAgICAgPHNwYW4+e3sgZ2V0QnJhbmNoTGFiZWwoYnJhbmNoKSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJicmFuY2guYWN0aW9uXCIgW2lubmVySFRNTF09XCJicmFuY2guYWN0aW9uXCIgY2xhc3M9XCJjcWEtdGV4dC1bIzExMTgyN11cIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBCcmFuY2ggQ29udGVudCAoTmVzdGVkIFN0ZXBzIOKAkyByZW5kZXJlciBkaXNwYXRjaGVzIGJ5IHN0ZXAgdHlwZSwgbi1sZXZlbCBuZXN0aW5nKSAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNSZW9yZGVyXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgICAgPGNxYS10ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzdGVwIG9mIGJyYW5jaC5uZXN0ZWRTdGVwczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgW2luZGV4XT1cImlcIlxuICAgICAgICAgIFticmFuY2hdPVwiYnJhbmNoXCJcbiAgICAgICAgICBbaXNOZXN0ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2lzUmVvcmRlcl09XCJpc1Jlb3JkZXJcIlxuICAgICAgICAgIFtkYXRhUHJvZmlsZU9wdGlvbnNdPVwiZGF0YVByb2ZpbGVPcHRpb25zXCIgW2hhc01vcmVEYXRhUHJvZmlsZXNdPVwiaGFzTW9yZURhdGFQcm9maWxlc1wiIFtpc0xvYWRpbmdEYXRhUHJvZmlsZXNdPVwiaXNMb2FkaW5nRGF0YVByb2ZpbGVzXCJcbiAgICAgICAgICBbbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9uc109XCJuYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zXCJcbiAgICAgICAgICAoYnJhbmNoU3RlcENoYW5nZSk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoJGV2ZW50LmJyYW5jaCwgJGV2ZW50LnN0ZXAsICRldmVudC5zdGVwSW5kZXgpXCJcbiAgICAgICAgICAoYWRkU3RlcEZvckJyYW5jaCk9XCJvbkFkZFN0ZXAoJGV2ZW50LmJyYW5jaClcIlxuICAgICAgICAgIChkZWxldGVTdGVwV2l0aEJyYW5jaCk9XCJvbkRlbGV0ZVN0ZXAoJGV2ZW50LmJyYW5jaCwgJGV2ZW50LnN0ZXBJbmRleClcIlxuICAgICAgICAgICh0b2dnbGVFeHBhbmRlZCk9XCJvbk5lc3RlZFRvZ2dsZUV4cGFuZGVkKCRldmVudCwgYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGdyb3VwTmFtZUNoYW5nZSk9XCIkYW55KHN0ZXApLmdyb3VwTmFtZSA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChkZXNjcmlwdGlvbkNoYW5nZSk9XCIkYW55KHN0ZXApLmRlc2NyaXB0aW9uID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKHJldXNhYmxlQ2hhbmdlKT1cIiRhbnkoc3RlcCkucmV1c2FibGUgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAob3BlbkV4dGVybmFsKT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoZWRpdCk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGxpbmspPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChkdXBsaWNhdGUpPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChjb25kaXRpb25DaGFuZ2UpPVwiJGFueShzdGVwKS5jb25kaXRpb24gPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoYWRkQnJhbmNoKT1cIm9uTmVzdGVkQ29uZGl0aW9uQWRkQnJhbmNoKCRhbnkoc3RlcCkpOyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGRlbGV0ZUJyYW5jaCk9XCJvbk5lc3RlZENvbmRpdGlvbkRlbGV0ZUJyYW5jaCgkYW55KHN0ZXApLCAkZXZlbnQpOyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKHRlc3REYXRhUHJvZmlsZUNoYW5nZSk9XCIkYW55KHN0ZXApLnRlc3REYXRhUHJvZmlsZSA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgIChzdGFydFN0ZXBDaGFuZ2UpPVwiJGFueShzdGVwKS5zdGFydFN0ZXAgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoZW5kU3RlcENoYW5nZSk9XCIkYW55KHN0ZXApLmVuZFN0ZXAgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAobWF4SXRlcmF0aW9uc0NoYW5nZSk9XCIkYW55KHN0ZXApLm1heEl0ZXJhdGlvbnMgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAoZXZlbnRUeXBlQ2hhbmdlKT1cIiRhbnkoc3RlcCkuZXZlbnRUeXBlID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKHBhcmFtZXRlckNoYW5nZSk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCIkYW55KHN0ZXApLnNlbGVjdGVkID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgKGxvYWRNb3JlRGF0YVByb2ZpbGVzKT1cImxvYWRNb3JlRGF0YVByb2ZpbGVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNlYXJjaERhdGFQcm9maWxlcyk9XCJzZWFyY2hEYXRhUHJvZmlsZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc3RlcFVwZGF0ZSk9XCJzdGVwVXBkYXRlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRuZERyb3BJblpvbmUpPVwiZG5kRHJvcEluWm9uZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjbGlja0FjdGlvbik9XCJjbGlja0FjdGlvbi5lbWl0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNSZW9yZGVyXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgbmVzdGVkLXN0ZXAtZHJvcC1saXN0XCJcbiAgICAgICAgICAgW2RuZERyb3B6b25lXT1cIlsnc3RlcCddXCJcbiAgICAgICAgICAgZG5kRWZmZWN0QWxsb3dlZD1cIm1vdmVcIlxuICAgICAgICAgICBkbmREcmFnb3ZlckNsYXNzPVwiZG5kRHJhZ292ZXJcIlxuICAgICAgICAgICAoZG5kRHJvcCk9XCJvbkRuZERyb3AoJGV2ZW50LCBicmFuY2gpXCI+XG4gICAgICAgIDxkaXYgZG5kUGxhY2Vob2xkZXJSZWYgY2xhc3M9XCJzdGVwLWRyYWctcGxhY2Vob2xkZXItbmVzdGVkIGNxYS1teS0xIGNxYS1taW4taC1bNTBweF0gY3FhLWJvcmRlci0yIGNxYS1ib3JkZXItZGFzaGVkIGNxYS1ib3JkZXItWyMzRjQzRUVdIGNxYS1yb3VuZGVkIGNxYS1iZy1bcmdiYSg2Myw2NywyMzgsMC4wOCldIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC14c1wiPkRyb3AgaGVyZTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIGJyYW5jaC5uZXN0ZWRTdGVwczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibmVzdGVkLXN0ZXAtZHJhZy1pdGVtXCJcbiAgICAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInN0ZXBcIlxuICAgICAgICAgICAgIGRuZEVmZmVjdEFsbG93ZWQ9XCJtb3ZlXCJcbiAgICAgICAgICAgICBkbmRUeXBlPVwic3RlcFwiPlxuICAgICAgICAgIDxjcWEtdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXJcbiAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgW2luZGV4XT1cImlcIlxuICAgICAgICAgICAgW2JyYW5jaF09XCJicmFuY2hcIlxuICAgICAgICAgICAgW2lzTmVzdGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW2lzUmVvcmRlcl09XCJpc1Jlb3JkZXJcIlxuICAgICAgICAgICAgW2RhdGFQcm9maWxlT3B0aW9uc109XCJkYXRhUHJvZmlsZU9wdGlvbnNcIiBbaGFzTW9yZURhdGFQcm9maWxlc109XCJoYXNNb3JlRGF0YVByb2ZpbGVzXCIgW2lzTG9hZGluZ0RhdGFQcm9maWxlc109XCJpc0xvYWRpbmdEYXRhUHJvZmlsZXNcIlxuICAgICAgICAgICAgW25hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnNdPVwibmF0dXJhbFRleHRBY3Rpb25zT3B0aW9uc1wiXG4gICAgICAgICAgICAoYnJhbmNoU3RlcENoYW5nZSk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoJGV2ZW50LmJyYW5jaCwgJGV2ZW50LnN0ZXAsICRldmVudC5zdGVwSW5kZXgpXCJcbiAgICAgICAgICAgIChhZGRTdGVwRm9yQnJhbmNoKT1cIm9uQWRkU3RlcCgkZXZlbnQuYnJhbmNoKVwiXG4gICAgICAgICAgICAoZGVsZXRlU3RlcFdpdGhCcmFuY2gpPVwib25EZWxldGVTdGVwKCRldmVudC5icmFuY2gsICRldmVudC5zdGVwSW5kZXgpXCJcbiAgICAgICAgICAgICh0b2dnbGVFeHBhbmRlZCk9XCJvbk5lc3RlZFRvZ2dsZUV4cGFuZGVkKCRldmVudCwgYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoZ3JvdXBOYW1lQ2hhbmdlKT1cIiRhbnkoc3RlcCkuZ3JvdXBOYW1lID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoZGVzY3JpcHRpb25DaGFuZ2UpPVwiJGFueShzdGVwKS5kZXNjcmlwdGlvbiA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKHJldXNhYmxlQ2hhbmdlKT1cIiRhbnkoc3RlcCkucmV1c2FibGUgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChvcGVuRXh0ZXJuYWwpPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGVkaXQpPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGxpbmspPVwib25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGR1cGxpY2F0ZSk9XCJvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoY29uZGl0aW9uQ2hhbmdlKT1cIiRhbnkoc3RlcCkuY29uZGl0aW9uID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoYWRkQnJhbmNoKT1cIm9uTmVzdGVkQ29uZGl0aW9uQWRkQnJhbmNoKCRhbnkoc3RlcCkpOyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoZGVsZXRlQnJhbmNoKT1cIm9uTmVzdGVkQ29uZGl0aW9uRGVsZXRlQnJhbmNoKCRhbnkoc3RlcCksICRldmVudCk7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgICh0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UpPVwiJGFueShzdGVwKS50ZXN0RGF0YVByb2ZpbGUgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChzdGFydFN0ZXBDaGFuZ2UpPVwiJGFueShzdGVwKS5zdGFydFN0ZXAgPSAkZXZlbnQ7IG9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChlbmRTdGVwQ2hhbmdlKT1cIiRhbnkoc3RlcCkuZW5kU3RlcCA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKG1heEl0ZXJhdGlvbnNDaGFuZ2UpPVwiJGFueShzdGVwKS5tYXhJdGVyYXRpb25zID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAoZXZlbnRUeXBlQ2hhbmdlKT1cIiRhbnkoc3RlcCkuZXZlbnRUeXBlID0gJGV2ZW50OyBvbkJyYW5jaFN0ZXBDaGFuZ2UoYnJhbmNoLCBzdGVwLCBpKVwiXG4gICAgICAgICAgICAocGFyYW1ldGVyQ2hhbmdlKT1cIm9uQnJhbmNoU3RlcENoYW5nZShicmFuY2gsIHN0ZXAsIGkpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiJGFueShzdGVwKS5zZWxlY3RlZCA9ICRldmVudDsgb25CcmFuY2hTdGVwQ2hhbmdlKGJyYW5jaCwgc3RlcCwgaSlcIlxuICAgICAgICAgICAgKGxvYWRNb3JlRGF0YVByb2ZpbGVzKT1cImxvYWRNb3JlRGF0YVByb2ZpbGVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VhcmNoRGF0YVByb2ZpbGVzKT1cInNlYXJjaERhdGFQcm9maWxlcy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKHN0ZXBVcGRhdGUpPVwic3RlcFVwZGF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGRuZERyb3BJblpvbmUpPVwiZG5kRHJvcEluWm9uZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrQWN0aW9uKT1cImNsaWNrQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFTkQgSUYgTWFya2VyIC0tPlxuICAgIDxkaXYgW2NsYXNzXT1cIidjcWEtcGwtNCBjcWEtcHktMSBjcWEtdGV4dC1bIzdCMzMwNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0nXCIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgI0U1RTdFQjtcIj5cbiAgICAgIEVORCBJRlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|