@cqa-lib/cqa-ui 1.1.557-delta.8 → 1.1.557-delta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1865,7 +1865,7 @@ export class ApiEditStepComponent {
1865
1865
  */
1866
1866
  onLoadSchema() {
1867
1867
  this.bodyView = 'graphql-schema';
1868
- this.loadSchema.emit({ url: this.url ?? '', headers: this.headers });
1868
+ this.loadSchema.emit({ url: this.url ?? '', headers: this.headers, environment: this.currentEnvironmentValue });
1869
1869
  this.cdr.markForCheck();
1870
1870
  }
1871
1871
  /** Picker → back: drop the picker view and return to the headers/tabs panel. */
@@ -1875,7 +1875,7 @@ export class ApiEditStepComponent {
1875
1875
  }
1876
1876
  /** Picker → re-introspect: forward to parent so it can refetch the schema. */
1877
1877
  onGraphQLPickerReIntrospect() {
1878
- this.loadSchema.emit({ url: this.url ?? '', headers: this.headers });
1878
+ this.loadSchema.emit({ url: this.url ?? '', headers: this.headers, environment: this.currentEnvironmentValue });
1879
1879
  }
1880
1880
  /**
1881
1881
  * Picker → operation selected: patch the GraphQL form (query / variables / operationName)
@@ -2636,4 +2636,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
2636
2636
  }], advancedSettingsVariables: [{
2637
2637
  type: Input
2638
2638
  }] } });
2639
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWVkaXQtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1lZGl0LXN0ZXAvYXBpLWVkaXQtc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1lZGl0LXN0ZXAvYXBpLWVkaXQtc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBZSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNaEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFVBQVUsRUFBRSxZQUFZO0NBQ2hCLENBQUM7QUF3SFgsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFdkQsOEVBQThFO0FBQzlFLE1BQU0sd0JBQXdCLEdBQTJCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBWXBHLFNBQVMsYUFBYSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxLQUFLLFFBQVEsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsU0FBUyxhQUFhLENBQUMsRUFBVTtJQUMvQixPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUks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QixNQUFNO2dCQWdFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBK0JHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBdURJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFHRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFNRSxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkF5UkcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQWlLa0MseUJBQXlCO3NCQUFoRSxTQUFTO3VCQUFDLDJCQUEyQjtnQkFDTCxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CO2dCQStDdEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQXNHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBOENHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFnRUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQThDOEMsa0JBQWtCO3NCQUFyRSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFXekMseUJBQXlCO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IENxYUF1dG9jb21wbGV0ZU9wdGlvbiB9IGZyb20gJy4uLy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUubW9kZWwnO1xuaW1wb3J0IHsgR3JhcGhRTE9wZXJhdGlvbk9wdGlvbiwgR3JhcGhRTFNjaGVtYVNvdXJjZSB9IGZyb20gJy4vZ3JhcGhxbC1vcGVyYXRpb24tcGlja2VyL2dyYXBocWwtb3BlcmF0aW9uLXBpY2tlci5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgQVBJX0VESVRfU1RFUF9MQUJFTFMgPSB7XG4gIFJFUVVFU1RfREVUQUlMUzogJ1JlcXVlc3QgRGV0YWlscycsXG4gIFNUT1JFX1JFU1BPTlNFOiAnU3RvcmUgUmVzcG9uc2UnLFxuICBWQUxJREFUSU9OOiAnVmFsaWRhdGlvbicsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBBcGlFZGl0UGF5bG9hZFRhYiA9ICdoZWFkZXJzJyB8ICdib2R5JyB8ICdwYXJhbXMnIHwgJ2F1dGhvcml6YXRpb24nIHwgJ2dyYXBocWwnO1xuXG4vKiogVG9wLWxldmVsIEFQSSB0eXBlIHRoZSBzdGVwIHRhcmdldHMuIE5ldyB0eXBlcyBiZXlvbmQgUkVTVC9HcmFwaFFMIGFyZSBpbnRlbnRpb25hbGx5IGEgc3RyaW5nIHVuaW9uIChub3QgZW51bSkgc28gYWRkaW5nIFwic29hcFwiL1wid2Vic29ja2V0XCIvXCJncnBjXCIgbGF0ZXIgaXMgYSBvbmUtbGluZSBjaGFuZ2UuICovXG5leHBvcnQgdHlwZSBBcGlFZGl0QXBpVHlwZSA9ICdyZXN0JyB8ICdncmFwaHFsJyB8ICdzb2FwJyB8ICd3ZWJzb2NrZXQnIHwgJ2dycGMnO1xuXG4vKiogR3JhcGhRTCByZXF1ZXN0IGJvZHkgZW1pdHRlZCB0byB0aGUgcGFyZW50ICh2YXJpYWJsZXMgYWxyZWFkeSBwYXJzZWQgd2hlbiB2YWxpZCBKU09OOyByYXcgc3RyaW5nIG90aGVyd2lzZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRHcmFwaFFMUGF5bG9hZCB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIC8qKiBPYmplY3Qgd2hlbiB0aGUgdXNlciB0eXBlZCB2YWxpZCBKU09OLCByYXcgc3RyaW5nIG90aGVyd2lzZS4gRW5naW5lIGFjY2VwdHMgYm90aC4gKi9cbiAgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmc7XG4gIG9wZXJhdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKiBXaGljaCBib2R5IGNvbnRlbnQgYmxvY2sgaXMgdmlzaWJsZTogaGVhZGVycyAodGFicyksIGltcG9ydCBjVVJMIHRleHRhcmVhLCBvciB0aGUgR3JhcGhRTCBvcGVyYXRpb24gcGlja2VyLiAqL1xuZXhwb3J0IHR5cGUgQXBpRWRpdEJvZHlWaWV3ID0gJ2hlYWRlcnMnIHwgJ2ltcG9ydC1jdXJsJyB8ICdncmFwaHFsLXNjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRWRpdEhlYWRlclJvdyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogUGF5bG9hZCBlbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgU2VuZCBSZXF1ZXN0IChlbnZpcm9ubWVudCwgbWV0aG9kLCB1cmwsIGhlYWRlcnMsIGJvZHkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0U2VuZFJlcXVlc3RQYXlsb2FkIHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBoZWFkZXJzOiBBcGlFZGl0SGVhZGVyUm93W107XG4gIHBheWxvYWQ/OiBzdHJpbmc7XG4gIGF1dGhUeXBlPzogc3RyaW5nO1xuICBiZWFyZXJUb2tlbj86IHN0cmluZztcbiAgb2F1dGgyPzogQXBpRWRpdE9BdXRoMlBheWxvYWQ7XG4gIHBheWxvYWRUeXBlPzogJ3JhdycgfCAneC13d3ctZm9ybS11cmxlbmNvZGVkJyB8ICdmb3JtLWRhdGEnO1xuICBwYXlsb2FkRm9ybWF0Pzogc3RyaW5nO1xuICBwYXlsb2FkVGV4dD86IHN0cmluZztcbiAga2V5VmFsdWVSb3dzPzogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W107XG4gIGtleVR5cGVWYWx1ZVJvd3M/OiB7IGtleTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICBwYXJhbXNSb3dzPzogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W107XG4gIC8qKiBBUEkgdHlwZSAoUkVTVCBvciBHcmFwaFFMKS4gQWJzZW50IG9uIGxlZ2FjeSBjYWxsZXJzOyBjb25zdW1lciB0cmVhdHMgdW5kZWZpbmVkIGFzICdyZXN0Jy4gKi9cbiAgYXBpVHlwZT86IEFwaUVkaXRBcGlUeXBlO1xuICAvKiogR3JhcGhRTCBib2R5IHdoZW4gYGFwaVR5cGUgPT09ICdncmFwaHFsJ2AuICovXG4gIGdyYXBoUUw/OiBBcGlFZGl0R3JhcGhRTFBheWxvYWQ7XG59XG5cbi8qKiBPQXV0aCAyLjAgYXV0aCBmaWVsZHMgKHdoZW4gYXV0aCB0eXBlIGlzIE9BdXRoIDIuMCkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRPQXV0aDJQYXlsb2FkIHtcbiAgZ3JhbnRUeXBlOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuVXJsOiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldDogc3RyaW5nO1xuICBzY29wZTogc3RyaW5nO1xuICBjbGllbnRBdXRoZW50aWNhdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU3RlcCAxIHJlcXVlc3QgKyBib2R5IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRTdGVwMVBheWxvYWQge1xuICBzdW1tYXJ5Pzogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBtZXRob2Q6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGhlYWRlcnM6IEFwaUVkaXRIZWFkZXJSb3dbXTtcbiAgLyoqIFNlbGVjdGVkIGF1dGggdHlwZTogZS5nLiAnbm8tYXV0aCcsICdiZWFyZXInLCAnb2F1dGgyJy4gKi9cbiAgYXV0aFR5cGU6IHN0cmluZztcbiAgLyoqIEJlYXJlciB0b2tlbiB2YWx1ZSB3aGVuIGF1dGhUeXBlIGlzICdiZWFyZXInLiAqL1xuICBiZWFyZXJUb2tlbj86IHN0cmluZztcbiAgLyoqIE9BdXRoIDIuMCBmaWVsZHMgd2hlbiBhdXRoVHlwZSBpcyAnb2F1dGgyJy4gKi9cbiAgb2F1dGgyPzogQXBpRWRpdE9BdXRoMlBheWxvYWQ7XG4gIGFjdGl2ZVBheWxvYWRUYWI6IEFwaUVkaXRQYXlsb2FkVGFiO1xuICBwYXlsb2FkVHlwZTogJ3JhdycgfCAneC13d3ctZm9ybS11cmxlbmNvZGVkJyB8ICdmb3JtLWRhdGEnO1xuICBwYXlsb2FkRm9ybWF0OiBzdHJpbmc7XG4gIHBheWxvYWRUZXh0OiBzdHJpbmc7XG4gIGtleVZhbHVlUm93czogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W107XG4gIGtleVR5cGVWYWx1ZVJvd3M6IHsga2V5OiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W107XG4gIHBhcmFtc1Jvd3M6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICAvKiogQVBJIHR5cGUgKFJFU1Qgb3IgR3JhcGhRTCkuIERlZmF1bHRzIHRvICdyZXN0JyB3aGVuIGFic2VudC4gKi9cbiAgYXBpVHlwZT86IEFwaUVkaXRBcGlUeXBlO1xuICAvKiogR3JhcGhRTCBib2R5IHdoZW4gYGFwaVR5cGUgPT09ICdncmFwaHFsJ2AuIEFsd2F5cyBlbWl0dGVkIGFzIGEgY29tcGxldGUgb2JqZWN0IHNvIHRoZSBlbmdpbmUncyBPYmplY3QuYXNzaWduIG1lcmdlIGRvZXNuJ3QgbG9zZSB1bnNlbnQga2V5cy4gKi9cbiAgZ3JhcGhRTD86IEFwaUVkaXRHcmFwaFFMUGF5bG9hZDtcbn1cblxuLyoqIFN0ZXAgMiBzdG9yZS1yZXNwb25zZSBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0U3RlcDJQYXlsb2FkIHtcbiAgdmFyaWFibGVOYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBSZXNwb25zZSBib2R5IHZlcmlmaWNhdGlvbiByb3cuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRSZXNwb25zZUJvZHlWZXJpZmljYXRpb25Sb3cge1xuICBqc29uUGF0aDogc3RyaW5nO1xuICB2ZXJpZmljYXRpb246IHN0cmluZztcbiAgZGF0YVR5cGU6IHN0cmluZztcbiAgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nO1xufVxuXG4vKiogU3RhdHVzIHZlcmlmaWNhdGlvbiByb3cuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRTdGF0dXNWZXJpZmljYXRpb25Sb3cge1xuICB2ZXJpZmljYXRpb246IHN0cmluZztcbiAgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nO1xufVxuXG4vKiogU3RlcCAzIHZhbGlkYXRpb24gcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRWRpdFN0ZXAzUGF5bG9hZCB7XG4gIGFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiOiAncmVzcG9uc2UtYm9keScgfCAnc3RhdHVzJztcbiAgcmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9uczogQXBpRWRpdFJlc3BvbnNlQm9keVZlcmlmaWNhdGlvblJvd1tdO1xuICBzdGF0dXNWZXJpZmljYXRpb25zOiBBcGlFZGl0U3RhdHVzVmVyaWZpY2F0aW9uUm93W107XG59XG5cbi8qKiBGdWxsIHBheWxvYWQgZW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIENyZWF0ZSAoYWxsIHN0ZXBz4oCZIGRhdGEpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0Q3JlYXRlUGF5bG9hZCB7XG4gIHN0ZXAxOiBBcGlFZGl0U3RlcDFQYXlsb2FkO1xuICBzdGVwMjogQXBpRWRpdFN0ZXAyUGF5bG9hZDtcbiAgc3RlcDM6IEFwaUVkaXRTdGVwM1BheWxvYWQ7XG4gIC8qKiBBZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgZm9yIHRoaXMgQVBJIHN0ZXAgKGUuZy4gaXNTdGVwT3B0aW9uYWwsIHNob3VsZFNraXApLiAqL1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzPzogYW55W107XG59XG5cbi8qKiBFbnZpcm9ubWVudCBvcHRpb246IGVpdGhlciBhIHN0cmluZyAoZGlzcGxheSA9IHZhbHVlKSBvciBhbiBvYmplY3Qgd2l0aCBpZCwgbmFtZSwgdmFsdWUsIGxhYmVsLiAqL1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRPcHRpb25JbnB1dCA9IHN0cmluZyB8IFNlbGVjdE9wdGlvbjtcblxuY29uc3QgTUVUSE9EU19XSVRIT1VUX0JPRFkgPSBbJ0dFVCcsICdIRUFEJywgJ0RFTEVURSddO1xuXG4vKiogQXV0by1jbG9zZSBwYWlycyBmb3IgcGF5bG9hZCBKU09OIGVkaXRvcjogb3BlbmluZyBjaGFyIC0+IGNsb3NpbmcgY2hhci4gKi9cbmNvbnN0IFBBWUxPQURfQVVUT19DTE9TRV9QQUlSUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ3snOiAnfScsICdbJzogJ10nLCAnXCInOiAnXCInLCBcIidcIjogXCInXCIgfTtcblxuLyoqIFJlc3VsdCBvZiBwYXJzaW5nIGEgY1VSTCBjb21tYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRDdXJsIHtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBoZWFkZXJzOiBBcGlFZGl0SGVhZGVyUm93W107XG4gIGJvZHk6IHN0cmluZztcbiAgLyoqIEVudHJpZXMgZnJvbSAtRiAvIC0tZm9ybSBmbGFncyAobXVsdGlwYXJ0L2Zvcm0tZGF0YSkuICovXG4gIGZvcm1EYXRhOiB7IGtleTogc3RyaW5nOyB0eXBlOiAndGV4dCcgfCAnZmlsZSc7IHZhbHVlOiBzdHJpbmcgfVtdO1xufVxuXG5mdW5jdGlvbiBpc1NpbmdsZVF1b3RlKGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNoID09PSBcIidcIiB8fCBjaCA9PT0gJ1xcdTIwMTgnIHx8IGNoID09PSAnXFx1MjAxOSc7XG59XG5mdW5jdGlvbiBpc0RvdWJsZVF1b3RlKGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNoID09PSAnXCInIHx8IGNoID09PSAnXFx1MjAxQycgfHwgY2ggPT09ICdcXHUyMDFEJztcbn1cbmZ1bmN0aW9uIGlzQ2xvc2luZ1F1b3RlKGNoOiBzdHJpbmcsIG9wZW5RdW90ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChpc1NpbmdsZVF1b3RlKG9wZW5RdW90ZSkpIHJldHVybiBpc1NpbmdsZVF1b3RlKGNoKTtcbiAgaWYgKGlzRG91YmxlUXVvdGUob3BlblF1b3RlKSkgcmV0dXJuIGlzRG91YmxlUXVvdGUoY2gpO1xuICByZXR1cm4gY2ggPT09IG9wZW5RdW90ZTtcbn1cblxuLyoqXG4gKiBUb2tlbml6ZSBhIGNVUkwgY29tbWFuZCBzdHJpbmcgaW50byBhcmd1bWVudCB0b2tlbnMsIG1hdGNoaW5nIGJhc2ggcXVvdGluZyBydWxlczpcbiAqICAtIFNpbmdsZS1xdW90ZWQgc3RyaW5ncyBhcmUgRlVMTFkgTElURVJBTCDigJQgYmFja3NsYXNoIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcuXG4gKiAgICBUaGlzIHByZXNlcnZlcyBKU09OIGVzY2FwZSBzZXF1ZW5jZXMgKGUuZy4gXFxcIikgaW5zaWRlICctLWRhdGEtcmF3JyBib2RpZXMuXG4gKiAgLSBEb3VibGUtcXVvdGVkIHN0cmluZ3MgdHJlYXQgYmFja3NsYXNoIGFzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgKFxcXCIg4oaSIFwiKS5cbiAqICAgIFRoaXMgaGFuZGxlcyBXaW5kb3dzLUNNRC1ub3JtYWxpc2VkIHZhbHVlcyBhbmQgcGxhaW4gLWQgXCJ7XFxcImtcXFwiOlxcXCJ2XFxcIn1cIiBib2RpZXMuXG4gKiBBbHNvIGhhbmRsZXMgc3RyYWlnaHQgYW5kIGN1cmx5L3NtYXJ0IHF1b3RlIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQ3VybExpbmUobGluZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gIGxldCBpID0gMDtcbiAgY29uc3QgbiA9IGxpbmUubGVuZ3RoO1xuICB3aGlsZSAoaSA8IG4pIHtcbiAgICB3aGlsZSAoaSA8IG4gJiYgL1xccy8udGVzdChsaW5lW2ldKSkgaSsrO1xuICAgIGlmIChpID49IG4pIGJyZWFrO1xuICAgIGNvbnN0IGNoID0gbGluZVtpXTtcbiAgICBpZiAoaXNTaW5nbGVRdW90ZShjaCkgfHwgaXNEb3VibGVRdW90ZShjaCkpIHtcbiAgICAgIGNvbnN0IHF1b3RlID0gY2g7XG4gICAgICBjb25zdCBzaW5nbGVRdW90ZWQgPSBpc1NpbmdsZVF1b3RlKGNoKTtcbiAgICAgIGkrKztcbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgd2hpbGUgKGkgPCBuICYmICFpc0Nsb3NpbmdRdW90ZShsaW5lW2ldLCBxdW90ZSkpIHtcbiAgICAgICAgaWYgKCFzaW5nbGVRdW90ZWQgJiYgbGluZVtpXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGlmIChpIDwgbikgdmFsdWUgKz0gbGluZVtpKytdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlICs9IGxpbmVbaSsrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPCBuKSBpKys7XG4gICAgICB0b2tlbnMucHVzaCh2YWx1ZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IHdvcmQgPSAnJztcbiAgICB3aGlsZSAoaSA8IG4gJiYgIS9cXHMvLnRlc3QobGluZVtpXSkgJiYgIWlzU2luZ2xlUXVvdGUobGluZVtpXSkgJiYgIWlzRG91YmxlUXVvdGUobGluZVtpXSkpIHtcbiAgICAgIHdvcmQgKz0gbGluZVtpKytdO1xuICAgIH1cbiAgICBpZiAod29yZCkgdG9rZW5zLnB1c2god29yZCk7XG4gIH1cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuLyoqIFN0cmlwIG9uZSBsYXllciBvZiBzdXJyb3VuZGluZyBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodXNlZCBmb3IgaW5saW5lIC0tZGF0YT0gdmFsdWVzKS4gKi9cbmZ1bmN0aW9uIHN0cmlwU3Vycm91bmRpbmdRdW90ZXMoczogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHMubGVuZ3RoID49IDIgJiYgKChzLnN0YXJ0c1dpdGgoXCInXCIpICYmIHMuZW5kc1dpdGgoXCInXCIpKSB8fCAocy5zdGFydHNXaXRoKCdcIicpICYmIHMuZW5kc1dpdGgoJ1wiJykpKSkge1xuICAgIHJldHVybiBzLnNsaWNlKDEsIC0xKTtcbiAgfVxuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBGbGFncyB0aGF0IHRha2Ugb25lIGFyZ3VtZW50IHdob3NlIHZhbHVlIHNob3VsZCBiZSBjb25zdW1lZCBidXQgRElTQ0FSREVELlxuICogV2l0aG91dCB0aGlzIGxpc3QsIGZsYWdzIGxpa2UgLS1yZWZlcmVyIG9yIC0tcHJveHkgd291bGQgaGF2ZSB0aGVpciBVUkwtbGlrZVxuICogYXJndW1lbnQgbWlzdGFrZW5seSBjYXB0dXJlZCBhcyB0aGUgcmVxdWVzdCBVUkwgYnkgdGhlIHBhdHRlcm4gbWF0Y2hlciBiZWxvdy5cbiAqL1xuY29uc3QgQ1VSTF9GTEFHU19XSVRIX0lHTk9SRURfQVJHID0gbmV3IFNldChbXG4gICctLXJlZmVyZXInLCAnLWUnLCAnLS1yZWZlcicsXG4gICctLXByb3h5JywgJy14JywgJy0tc29ja3M1JywgJy0tc29ja3M0JywgJy0tc29ja3M0YScsICctLXNvY2tzNS1ob3N0bmFtZScsXG4gICctLXVzZXItYWdlbnQnLCAnLUEnLFxuICAnLS1jb29raWUnLCAnLWInLFxuICAnLS1jb29raWUtamFyJywgJy1jJyxcbiAgJy1vJywgJy0tb3V0cHV0JyxcbiAgJy11JywgJy0tdXNlcicsXG4gICctLWNlcnQnLCAnLS1rZXknLCAnLS1jYWNlcnQnLCAnLS1jYXBhdGgnLFxuICAnLS1jb25uZWN0LXRpbWVvdXQnLCAnLS1tYXgtdGltZScsICctbScsXG4gICctLXJldHJ5JywgJy0tcmV0cnktZGVsYXknLCAnLS1yZXRyeS1tYXgtdGltZScsXG4gICctLW1heC1yZWRpcnMnLCAnLS1pbnRlcmZhY2UnLCAnLS1kbnMtc2VydmVycycsXG4gICctLXByb3h5LXVzZXInLCAnLS1wcm94eS1oZWFkZXInLFxuICAnLS1yZXNvbHZlJywgJy0tbGltaXQtcmF0ZScsXG4gICctLXRsc3Bhc3N3b3JkJywgJy0tdGxzYXV0aHR5cGUnLFxuICAnLS11cGxvYWQtZmlsZScsICctVCcsXG4gICctLXJhbmdlJywgJy1yJyxcbiAgJy0tcGFzcycsICctLWVuZ2luZScsXG4gICctLXBpbm5lZHB1YmtleScsICctLWhvc3RwdWJtZDUnLFxuXSk7XG5cbi8qKiBCb29sZWFuIGZsYWdzIHRoYXQgdGFrZSBubyBhcmd1bWVudCDigJQgc2tpcCB3aXRob3V0IGNvbnN1bWluZyB0aGUgbmV4dCB0b2tlbi4gKi9cbmNvbnN0IENVUkxfTk9fQVJHX0ZMQUdTID0gbmV3IFNldChbXG4gICctLWNvbXByZXNzZWQnLCAnLS1sb2NhdGlvbicsICctTCcsICctLWluc2VjdXJlJywgJy1rJyxcbiAgJy0tc2lsZW50JywgJy1zJywgJy0tdmVyYm9zZScsICctdicsICctLWdldCcsICctRycsXG4gICctLWZhaWwnLCAnLWYnLCAnLS1zaG93LWVycm9yJywgJy1TJyxcbiAgJy0taGVhZCcsICctSScsICctLWluY2x1ZGUnLCAnLWknLFxuICAnLS1yZW1vdGUtbmFtZScsICctTycsICctLXJlbW90ZS1uYW1lLWFsbCcsXG4gICctLWlwdjQnLCAnLTQnLCAnLS1pcHY2JywgJy02JyxcbiAgJy0tYW55YXV0aCcsICctLWJhc2ljJywgJy0tZGlnZXN0JywgJy0tbnRsbScsICctLW5lZ290aWF0ZScsXG4gICctLW5vLWtlZXBhbGl2ZScsICctLW5vLXNlc3Npb25pZCcsICctLWdsb2JvZmYnLCAnLWcnLFxuICAnLS1yZW1vdGUtdGltZScsICctUicsICctLXRjcC1ub2RlbGF5JyxcbiAgJy0taHR0cDEuMCcsICctMCcsICctLWh0dHAxLjEnLCAnLS1odHRwMicsICctLWh0dHAyLXByaW9yLWtub3dsZWRnZScsXG4gICctLWh0dHAzJywgJy0tbm8tYnVmZmVyJywgJy1OJyxcbiAgJy0tdHJhY2UtdGltZScsICctLWNlcnQtc3RhdHVzJywgJy0tZmFsc2Utc3RhcnQnLFxuICAnLS1wYXRoLWFzLWlzJywgJy0tbGlzdC1vbmx5JywgJy1sJyxcbiAgJy0tYXBwZW5kJywgJy1hJywgJy0tdXNlLWFzY2lpJywgJy1CJyxcbiAgJy0taGFwcm94eS1wcm90b2NvbCcsICctLW5ldHJjJywgJy1uJywgJy0tbmV0cmMtb3B0aW9uYWwnLFxuXSk7XG5cbi8qKiBQYXJzZSBhIHNpbmdsZSAtRi8tLWZvcm0gdmFsdWUgKGtleT12YWx1ZSB8IGtleT1AZmlsZSB8IGtleT08ZmlsZSkgaW50byBhIGZvcm1EYXRhIGVudHJ5LiAqL1xuZnVuY3Rpb24gcGFyc2VGb3JtRW50cnkocmF3OiBzdHJpbmcpOiB7IGtleTogc3RyaW5nOyB0eXBlOiAndGV4dCcgfCAnZmlsZSc7IHZhbHVlOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBlcSA9IHJhdy5pbmRleE9mKCc9Jyk7XG4gIGlmIChlcSA9PT0gLTEpIHJldHVybiBudWxsO1xuICBjb25zdCBrZXkgPSByYXcuc2xpY2UoMCwgZXEpLnRyaW0oKTtcbiAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuICBjb25zdCByZXN0ID0gcmF3LnNsaWNlKGVxICsgMSk7XG4gIC8vIFN0cmlwIG9wdGlvbmFsIDt0eXBlPS4uLiBzdWZmaXhcbiAgY29uc3Qgc2VtaSA9IHJlc3QuaW5kZXhPZignOycpO1xuICBjb25zdCB2YWwgPSAoc2VtaSAhPT0gLTEgPyByZXN0LnNsaWNlKDAsIHNlbWkpIDogcmVzdCkudHJpbSgpO1xuICBpZiAodmFsLnN0YXJ0c1dpdGgoJ0AnKSB8fCB2YWwuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgcmV0dXJuIHsga2V5LCB0eXBlOiAnZmlsZScsIHZhbHVlOiB2YWwuc2xpY2UoMSkgfTtcbiAgfVxuICByZXR1cm4geyBrZXksIHR5cGU6ICd0ZXh0JywgdmFsdWU6IHZhbCB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGFueSBjVVJMIGNvbW1hbmQgc3RyaW5nIGFuZCByZXR1cm4gbWV0aG9kLCB1cmwsIGhlYWRlcnMsIGJvZHksIGFuZCBmb3JtRGF0YS5cbiAqXG4gKiBTdXBwb3J0ZWQgZm9ybWF0cyAvIGZlYXR1cmVzOlxuICogIOKAoiBVbml4L01hYyAgOiBzaW5nbGUtcXVvdGUgYXJncywgYmFja3NsYXNoIChcXCkgbGluZSBjb250aW51YXRpb25cbiAqICDigKIgUG93ZXJTaGVsbDogYmFja3RpY2sgKGApIGxpbmUgY29udGludWF0aW9uXG4gKiAg4oCiIFdpbmRvd3MgQ01EOiBeXCIgcXVvdGUgZGVsaW1pdGVycywgXlxcXlwiIGlubmVyIGVzY2FwZWQgcXVvdGUsIF4gbGluZSBjb250aW51YXRpb25cbiAqICDigKIgSFRUUCBtZXRob2QgIDogLVggUE9TVCB8IC0tcmVxdWVzdCBQT1NUIHwgLS1yZXF1ZXN0PVBPU1QgfCAtWFBPU1RcbiAqICDigKIgSGVhZGVycyAgICAgIDogLUggLyAtLWhlYWRlciAvIC0taGVhZGVyPSfigKYnIC8gLUg9J+KApicgaW5saW5lLT0gZm9ybVxuICogIOKAoiBCb2R5ICAgICAgICAgOiAtZCAvIC0tZGF0YSAvIC0tZGF0YS1yYXcgLyAtLWRhdGEtYmluYXJ5IC8gLS1kYXRhLWFzY2lpIC9cbiAqICAgICAgICAgICAgICAgICAgIGlubGluZSAtLWRhdGE9J+KApicgLyBtdWx0aXBsZSAtZCBmbGFncyAoY29uY2F0ZW5hdGVkIHdpdGggJikgL1xuICogICAgICAgICAgICAgICAgICAgLS1kYXRhLXVybGVuY29kZSAvIC0tanNvbiAoY1VSTCA3LjgyKylcbiAqICDigKIgRm9ybS1kYXRhICAgIDogLUYgLyAtLWZvcm0gLyAtLWZvcm0tc3RyaW5nIChtdWx0aXBhcnQvZm9ybS1kYXRhKVxuICogIOKAoiBVUkwgICAgICAgICAgOiBiYXJlIGh0dHBzPzovLyB0b2tlbiBvciBleHBsaWNpdCAtLXVybCBmbGFnXG4gKiAg4oCiIEF1dGggaW5mZXIgICA6IEJlYXJlciB0b2tlbiBleHRyYWN0ZWQgZnJvbSBBdXRob3JpemF0aW9uIGhlYWRlclxuICogIOKAoiBNZXRob2QgaW5mZXIgOiBHRVTihpJQT1NUIHdoZW4gYm9keS9mb3JtLWRhdGEgcHJlc2VudCBhbmQgbm8gZXhwbGljaXQgLVhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDdXJsKGN1cmxTdHJpbmc6IHN0cmluZyk6IFBhcnNlZEN1cmwgfCBudWxsIHtcbiAgY29uc3QgcmF3ID0gKGN1cmxTdHJpbmcgPz8gJycpLnRyaW0oKTtcbiAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuXG4gIGxldCBzID0gcmF3O1xuXG4gIC8vIOKUgOKUgCBXaW5kb3dzIENNRCBmb3JtYXQgKENocm9tZSBEZXZUb29scyBcIkNvcHkgYXMgY1VSTCAoY21kKVwiKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gRGV0ZWN0ZWQgYnkgcHJlc2VuY2Ugb2YgXlwiIChjYXJldCArIGRvdWJsZS1xdW90ZSkgYXMgcXVvdGUgZGVsaW1pdGVyLlxuICAvLyBPbmx5IGFwcGxpZWQgd2hlbiB0aGUgY1VSTCBpcyBOT1QgYWxyZWFkeSB1c2luZyBzaW5nbGUtcXVvdGVzIGFzIHRoZSBwcmltYXJ5XG4gIC8vIHF1b3RpbmcgbWVjaGFuaXNtIChpLmUuIG5vdCBhIFVuaXggY1VSTCB0aGF0IG1lcmVseSBjb250YWlucyBeXCIgaW4gYSBib2R5KS5cbiAgaWYgKC9cXF5cIi8udGVzdChzKSAmJiAhLyg/Ol58XFxzKScvLnRlc3QocykpIHtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHMqXFxeXFxzKlxccj9cXG5cXHMqL2csICcgJyk7ICAvLyBeIGxpbmUtY29udGludWF0aW9uXG4gICAgcyA9IHMucmVwbGFjZSgvXFxeXFxcXFxcXlwiL2csICdcXFxcXCInKTsgICAgICAgICAgIC8vIF5cXF5cIiDihpIgXFxcIiAoaW5uZXIgZXNjYXBlZCBxdW90ZSlcbiAgICBzID0gcy5yZXBsYWNlKC9cXF5cIi9nLCAnXCInKTsgICAgICAgICAgICAgICAgIC8vIF5cIiAg4oaSIFwiICAocXVvdGUgZGVsaW1pdGVyKVxuICB9XG5cbiAgLy8g4pSA4pSAIFBvd2VyU2hlbGwgYmFja3RpY2sgbGluZSBjb250aW51YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHMgPSBzLnJlcGxhY2UoL2BcXHMqXFxyP1xcblxccyovZywgJyAnKTtcblxuICAvLyDilIDilIAgVW5peC9NYWMgYmFja3NsYXNoIGxpbmUgY29udGludWF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBzID0gcy5yZXBsYWNlKC9cXFxcXFxzKlxccj9cXG5cXHMqL2csICcgJyk7XG5cbiAgLy8gQ29sbGFwc2UgcmVtYWluaW5nIGxpdGVyYWwgbmV3bGluZXMgYW5kIHJlZHVuZGFudCBzcGFjZXNcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHMucmVwbGFjZSgvXFxyP1xcbi9nLCAnICcpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgY29uc3QgdG9rZW5zID0gdG9rZW5pemVDdXJsTGluZShub3JtYWxpemVkKTtcblxuICBsZXQgbWV0aG9kID0gJyc7XG4gIGxldCB1cmwgPSAnJztcbiAgY29uc3QgaGVhZGVyczogQXBpRWRpdEhlYWRlclJvd1tdID0gW107XG4gIGxldCBib2R5ID0gJyc7XG4gIGNvbnN0IGZvcm1EYXRhOiB7IGtleTogc3RyaW5nOyB0eXBlOiAndGV4dCcgfCAnZmlsZSc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIGNvbnN0IHVybFBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC8vaTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHQgPSB0b2tlbnNbaV07XG4gICAgY29uc3QgY29uc3VtZU5leHQgPSAoKTogc3RyaW5nID0+IHRva2Vuc1srK2ldID8/ICcnO1xuXG4gICAgLy8g4pSA4pSAIFNraXAgYm9vbGVhbiBuby1hcmcgZmxhZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgaWYgKENVUkxfTk9fQVJHX0ZMQUdTLmhhcyh0KSkgY29udGludWU7XG5cbiAgICAvLyDilIDilIAgQ29uc3VtZS1hbmQtZGlzY2FyZCBmbGFncyAodGhlaXIgYXJnIG11c3Qgbm90IGJlIG1pc3Rha2VuIGZvciB0aGUgVVJMKSDilIDilIBcbiAgICBpZiAoQ1VSTF9GTEFHU19XSVRIX0lHTk9SRURfQVJHLmhhcyh0KSkgeyBjb25zdW1lTmV4dCgpOyBjb250aW51ZTsgfVxuXG4gICAgLy8g4pSA4pSAIEhUVFAgbWV0aG9kIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGlmICh0ID09PSAnLVgnIHx8IHQgPT09ICctLXJlcXVlc3QnKSB7XG4gICAgICBjb25zdCB2ID0gY29uc3VtZU5leHQoKTsgaWYgKHYpIG1ldGhvZCA9IHYudG9VcHBlckNhc2UoKTsgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy0tcmVxdWVzdD0nKSkge1xuICAgICAgY29uc3QgdiA9IHQuc2xpY2UoMTApOyBpZiAodikgbWV0aG9kID0gdi50b1VwcGVyQ2FzZSgpOyBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHQuc3RhcnRzV2l0aCgnLVgnKSAmJiB0Lmxlbmd0aCA+IDIpIHtcbiAgICAgIG1ldGhvZCA9IHQuc2xpY2UoMikudG9VcHBlckNhc2UoKTsgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIEhlYWRlcnM6IC1IIC8gLS1oZWFkZXIgLyBpbmxpbmUgLS1oZWFkZXI9J+KApicgLyAtSD0n4oCmJyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBpZiAodCA9PT0gJy1IJyB8fCB0ID09PSAnLS1oZWFkZXInKSB7XG4gICAgICBjb25zdCB2ID0gY29uc3VtZU5leHQoKTtcbiAgICAgIGNvbnN0IGNvbG9uID0gdi5pbmRleE9mKCc6Jyk7XG4gICAgICBpZiAoY29sb24gIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB2LnNsaWNlKDAsIGNvbG9uKS50cmltKCk7XG4gICAgICAgIGNvbnN0IHZhbCAgPSB2LnNsaWNlKGNvbG9uICsgMSkudHJpbSgpO1xuICAgICAgICBpZiAobmFtZSkgaGVhZGVycy5wdXNoKHsgbmFtZSwgdHlwZTogJ3N0cmluZycsIHZhbHVlOiB2YWwgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gSW5saW5lIC0taGVhZGVyPSdOYW1lOiBWYWx1ZScg4oCUIHRva2VuaXplciBzcGxpdHMgaW50byBbJy0taGVhZGVyPScsICdOYW1lOiBWYWx1ZSddXG4gICAgaWYgKHQuc3RhcnRzV2l0aCgnLS1oZWFkZXI9JykgfHwgdC5zdGFydHNXaXRoKCctSD0nKSkge1xuICAgICAgY29uc3QgcHJlZml4TGVuID0gdC5zdGFydHNXaXRoKCctLWhlYWRlcj0nKSA/IDkgOiAzO1xuICAgICAgY29uc3QgaW5saW5lID0gdC5zbGljZShwcmVmaXhMZW4pIHx8IGNvbnN1bWVOZXh0KCk7XG4gICAgICBjb25zdCBjb2xvbiAgPSBpbmxpbmUuaW5kZXhPZignOicpO1xuICAgICAgaWYgKGNvbG9uICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuYW1lID0gaW5saW5lLnNsaWNlKDAsIGNvbG9uKS50cmltKCk7XG4gICAgICAgIGNvbnN0IHZhbCAgPSBpbmxpbmUuc2xpY2UoY29sb24gKyAxKS50cmltKCk7XG4gICAgICAgIGlmIChuYW1lKSBoZWFkZXJzLnB1c2goeyBuYW1lLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6IHZhbCB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBSZXF1ZXN0IGJvZHkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgLy8gY1VSTCBjb25jYXRlbmF0ZXMgbXVsdGlwbGUgLWQgZmxhZ3Mgd2l0aCAnJic7IHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW91ci5cbiAgICBpZiAodCA9PT0gJy1kJyB8fCB0ID09PSAnLS1kYXRhJyB8fCB0ID09PSAnLS1kYXRhLXJhdycgfHxcbiAgICAgICAgdCA9PT0gJy0tZGF0YS1iaW5hcnknIHx8IHQgPT09ICctLWRhdGEtYXNjaWknKSB7XG4gICAgICBjb25zdCB2ID0gY29uc3VtZU5leHQoKTtcbiAgICAgIGlmICh2ICYmICF2LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgICBjb25zdCBjaHVuayA9IHN0cmlwU3Vycm91bmRpbmdRdW90ZXModik7XG4gICAgICAgIGJvZHkgPSBib2R5ID8gYCR7Ym9keX0mJHtjaHVua31gIDogY2h1bms7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gLS1qc29uIGZsYWcgKGNVUkwgNy44MispOiBzZXRzIENvbnRlbnQtVHlwZSBhcHBsaWNhdGlvbi9qc29uICsgYm9keVxuICAgIGlmICh0ID09PSAnLS1qc29uJykge1xuICAgICAgY29uc3QgdiA9IGNvbnN1bWVOZXh0KCk7XG4gICAgICBpZiAodiAmJiAhdi5zdGFydHNXaXRoKCdAJykpIGJvZHkgPSBzdHJpcFN1cnJvdW5kaW5nUXVvdGVzKHYpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIElubGluZSAtLWRhdGE9J+KApicgLyAtLWRhdGEtcmF3PSfigKYnIOKAlCB0b2tlbml6ZXIgc3BsaXRzIGludG8gWyctLWRhdGE9JywgdmFsdWVdXG4gICAgaWYgKHQuc3RhcnRzV2l0aCgnLS1kYXRhPScpIHx8IHQuc3RhcnRzV2l0aCgnLS1kYXRhLXJhdz0nKSB8fFxuICAgICAgICB0LnN0YXJ0c1dpdGgoJy0tZGF0YS1iaW5hcnk9JykgfHwgdC5zdGFydHNXaXRoKCctLWRhdGEtYXNjaWk9JykpIHtcbiAgICAgIGNvbnN0IGVxSWR4ID0gdC5pbmRleE9mKCc9Jyk7XG4gICAgICBjb25zdCBpbmxpbmUgPSB0LnNsaWNlKGVxSWR4ICsgMSkgfHwgY29uc3VtZU5leHQoKTtcbiAgICAgIGlmIChpbmxpbmUgJiYgIVN0cmluZyhpbmxpbmUpLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgICBjb25zdCBjaHVuayA9IHN0cmlwU3Vycm91bmRpbmdRdW90ZXMoU3RyaW5nKGlubGluZSkpO1xuICAgICAgICBib2R5ID0gYm9keSA/IGAke2JvZHl9JiR7Y2h1bmt9YCA6IGNodW5rO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIElubGluZSBzaG9ydCBmb3JtIC1kVkFMVUUgb3IgLWQ9VkFMVUVcbiAgICBpZiAodC5zdGFydHNXaXRoKCctZCcpICYmIHQubGVuZ3RoID4gMikge1xuICAgICAgY29uc3QgdiA9IHQuc3RhcnRzV2l0aCgnLWQ9JykgPyB0LnNsaWNlKDMpIDogdC5zbGljZSgyKTtcbiAgICAgIGlmICghdi5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSBzdHJpcFN1cnJvdW5kaW5nUXVvdGVzKHYpO1xuICAgICAgICBib2R5ID0gYm9keSA/IGAke2JvZHl9JiR7Y2h1bmt9YCA6IGNodW5rO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIC0tZGF0YS11cmxlbmNvZGUgbmFtZT12YWx1ZSAodHJlYXQgYXMgcGxhaW4gYm9keSBlbnRyeSlcbiAgICBpZiAodCA9PT0gJy0tZGF0YS11cmxlbmNvZGUnKSB7XG4gICAgICBjb25zdCB2ID0gY29uc3VtZU5leHQoKTtcbiAgICAgIGlmICh2ICYmICF2LmluY2x1ZGVzKCdAJykpIGJvZHkgPSBib2R5ID8gYCR7Ym9keX0mJHt2fWAgOiB2O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy0tZGF0YS11cmxlbmNvZGU9JykpIHtcbiAgICAgIGNvbnN0IGlubGluZSA9IHQuc2xpY2UoMTcpIHx8IGNvbnN1bWVOZXh0KCk7XG4gICAgICBpZiAoaW5saW5lICYmICFTdHJpbmcoaW5saW5lKS5pbmNsdWRlcygnQCcpKSB7XG4gICAgICAgIGJvZHkgPSBib2R5ID8gYCR7Ym9keX0mJHtpbmxpbmV9YCA6IFN0cmluZyhpbmxpbmUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIE11bHRpcGFydCBmb3JtLWRhdGE6IC1GIC8gLS1mb3JtIC8gLS1mb3JtLXN0cmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBpZiAodCA9PT0gJy1GJyB8fCB0ID09PSAnLS1mb3JtJyB8fCB0ID09PSAnLS1mb3JtLXN0cmluZycpIHtcbiAgICAgIGNvbnN0IHYgPSBjb25zdW1lTmV4dCgpO1xuICAgICAgaWYgKHYpIHsgY29uc3QgZSA9IHBhcnNlRm9ybUVudHJ5KHYpOyBpZiAoZSkgZm9ybURhdGEucHVzaChlKTsgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy0tZm9ybT0nKSB8fCB0LnN0YXJ0c1dpdGgoJy1GPScpKSB7XG4gICAgICBjb25zdCBwcmVmaXhMZW4gPSB0LnN0YXJ0c1dpdGgoJy0tZm9ybT0nKSA/IDcgOiAzO1xuICAgICAgY29uc3QgaW5saW5lID0gdC5zbGljZShwcmVmaXhMZW4pIHx8IGNvbnN1bWVOZXh0KCk7XG4gICAgICBpZiAoaW5saW5lKSB7IGNvbnN0IGUgPSBwYXJzZUZvcm1FbnRyeShTdHJpbmcoaW5saW5lKSk7IGlmIChlKSBmb3JtRGF0YS5wdXNoKGUpOyB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgVVJMIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGlmICh0ID09PSAnLS11cmwnKSB7XG4gICAgICBjb25zdCB2ID0gY29uc3VtZU5leHQoKTsgaWYgKHYgJiYgIXVybCkgdXJsID0gdjsgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy0tdXJsPScpKSB7XG4gICAgICBjb25zdCB2ID0gdC5zbGljZSg2KSB8fCBjb25zdW1lTmV4dCgpOyBpZiAodiAmJiAhdXJsKSB1cmwgPSB2OyBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHVybFBhdHRlcm4udGVzdCh0KSAmJiAhdXJsKSB7IHVybCA9IHQ7IH1cbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBzY2FuIGFsbCB0b2tlbnMgZm9yIHRoZSBmaXJzdCBVUkwtbGlrZSB2YWx1ZVxuICBpZiAoIXVybCkge1xuICAgIHVybCA9IHRva2Vucy5maW5kKHRvayA9PiB1cmxQYXR0ZXJuLnRlc3QodG9rKSkgPz8gJyc7XG4gIH1cblxuICAvLyBJbmZlciBtZXRob2Q6IGlmIGEgYm9keS9mb3JtLWRhdGEgaXMgcHJlc2VudCBidXQgbm8gZXhwbGljaXQgLVggd2FzIGdpdmVuLFxuICAvLyB1c2UgUE9TVCAobWFueSBicm93c2VyIERldlRvb2xzIGNVUkxzIG9taXQgLVggUE9TVCkuXG4gIGNvbnN0IGZpbmFsTWV0aG9kID0gKG1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgaWYgKChib2R5IHx8IGZvcm1EYXRhLmxlbmd0aCA+IDApICYmIChmaW5hbE1ldGhvZCA9PT0gJ0dFVCcgfHwgZmluYWxNZXRob2QgPT09ICdIRUFEJykpIHtcbiAgICByZXR1cm4geyBtZXRob2Q6ICdQT1NUJywgdXJsLCBoZWFkZXJzLCBib2R5LCBmb3JtRGF0YSB9O1xuICB9XG4gIHJldHVybiB7IG1ldGhvZDogZmluYWxNZXRob2QsIHVybCwgaGVhZGVycywgYm9keSwgZm9ybURhdGEgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFwaS1lZGl0LXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBpLWVkaXQtc3RlcC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBBcGlFZGl0U3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBpbml0aWFsTWV0aG9kPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwPzogbnVtYmVyO1xuICBASW5wdXQoKSBpbml0aWFsVXJsPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsUGF5bG9hZFRhYj86IEFwaUVkaXRQYXlsb2FkVGFiO1xuICAvKiogSW5pdGlhbCBwYXlsb2FkIHR5cGUgKHJhdywgeC13d3ctZm9ybS11cmxlbmNvZGVkLCBmb3JtLWRhdGEpIHdoZW4gZWRpdGluZyBhbiBleGlzdGluZyBzdGVwLiAqL1xuICBASW5wdXQoKSBpbml0aWFsUGF5bG9hZFR5cGU/OiAncmF3JyB8ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnIHwgJ2Zvcm0tZGF0YSc7XG4gIC8qKiBJbml0aWFsIHBheWxvYWQgdGV4dCAoYm9keSkgd2hlbiBlZGl0aW5nIGFuIGV4aXN0aW5nIHN0ZXAuICovXG4gIEBJbnB1dCgpIGluaXRpYWxQYXlsb2FkVGV4dD86IHN0cmluZztcbiAgLyoqIEluaXRpYWwgc3VtbWFyeSB3aGVuIGVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RlcCAobWFwcyB0byBzdGVwIGRlc2NyaXB0aW9uKS4gKi9cbiAgQElucHV0KCkgaW5pdGlhbFN1bW1hcnk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxIZWFkZXJzPzogQXBpRWRpdEhlYWRlclJvd1tdO1xuICBASW5wdXQoKSBpbml0aWFsUmVzcG9uc2VQcmV2aWV3Pzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsVmFyaWFibGVOYW1lPzogc3RyaW5nO1xuICAvKiogSW5pdGlhbCByZXNwb25zZSBib2R5IHZlcmlmaWNhdGlvbnMgd2hlbiBlZGl0aW5nIGFuIGV4aXN0aW5nIHN0ZXAuICovXG4gIEBJbnB1dCgpIGluaXRpYWxSZXNwb25zZUJvZHlWZXJpZmljYXRpb25zPzogQXBpRWRpdFJlc3BvbnNlQm9keVZlcmlmaWNhdGlvblJvd1tdO1xuICAvKiogSW5pdGlhbCBzdGF0dXMgdmVyaWZpY2F0aW9ucyB3aGVuIGVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RlcC4gKi9cbiAgQElucHV0KCkgaW5pdGlhbFN0YXR1c1ZlcmlmaWNhdGlvbnM/OiBBcGlFZGl0U3RhdHVzVmVyaWZpY2F0aW9uUm93W107XG4gIC8qKiBJbml0aWFsIGFjdGl2ZSByZXNwb25zZSB2ZXJpZmljYXRpb24gdGFiIHdoZW4gZWRpdGluZyBhbiBleGlzdGluZyBzdGVwLiAqL1xuICBASW5wdXQoKSBpbml0aWFsQWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWI/OiAncmVzcG9uc2UtYm9keScgfCAnc3RhdHVzJztcbiAgQElucHV0KCkgZWRpdE1vZGU/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGlsZSBwYXJlbnQgaXMgY3JlYXRpbmcgdGhlIHN0ZXAgKEFQSSBpbiBwcm9ncmVzcyk7IHNob3cgbG9hZGVyIG9uIENyZWF0ZS9VcGRhdGUgYnV0dG9uICovXG4gIEBJbnB1dCgpIGlzQ3JlYXRpbmdTdGVwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgQVBJIHR5cGUgKCdyZXN0JyBkZWZhdWx0LCAnZ3JhcGhxbCcgZm9yIEdyYXBoUUwgc3RlcHMpLiBDb21lcyBmcm9tIGBldmVudC50eXBlYCBvbiB0aGUgc2F2ZWQgc3RlcC4gKi9cbiAgQElucHV0KCkgaW5pdGlhbEFwaVR5cGU/OiBBcGlFZGl0QXBpVHlwZTtcbiAgLyoqIEluaXRpYWwgR3JhcGhRTCBib2R5IHdoZW4gZWRpdGluZyBhIEdyYXBoUUwgc3RlcC4gYHZhcmlhYmxlc2AgbWF5IGJlIGFuIG9iamVjdCAocHJlZmVycmVkKSBvciBhIEpTT04gc3RyaW5nLiAqL1xuICBASW5wdXQoKSBpbml0aWFsR3JhcGhRTD86IEFwaUVkaXRHcmFwaFFMUGF5bG9hZDtcbiAgLyoqIFNjaGVtYSBzb3VyY2UgZm9yIHRoZSBHcmFwaFFMIG9wZXJhdGlvbiBwaWNrZXIgKFVSTCArIGNvdW50cykuIFBhcmVudCBwcm92aWRlcyB0aGlzIGFmdGVyIGBsb2FkU2NoZW1hYCByZXNvbHZlcy4gKi9cbiAgQElucHV0KCkgZ3JhcGhRTFNjaGVtYVNvdXJjZT86IEdyYXBoUUxTY2hlbWFTb3VyY2U7XG4gIC8qKiBPcGVyYXRpb25zIGxpc3QgZm9yIHRoZSBwaWNrZXIuIEVtcHR5IHVudGlsIHBhcmVudCBsb2Fkcy9pbnRyb3NwZWN0cyB0aGUgc2NoZW1hLiAqL1xuICBASW5wdXQoKSBncmFwaFFMT3BlcmF0aW9uczogR3JhcGhRTE9wZXJhdGlvbk9wdGlvbltdID0gW107XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBwYXJlbnQgaXMgaW50cm9zcGVjdGluZzsgdGhlIHBpY2tlciBzd2FwcyBpdHMgZW1wdHkgc3RhdGUgZm9yIGEgc3Bpbm5lci4gKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nR3JhcGhRTFNjaGVtYSA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0cyB0aGUgY1VSTCBzdHJpbmcgd2hlbiB1c2VyIGNsaWNrcyBJbXBvcnQgKHZhbHVlIGZyb20gdGhlIHRleHRhcmVhIGNvbnRyb2wpLiAqL1xuICBAT3V0cHV0KCkgaW1wb3J0Q3VybCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHMgd2hlbiB1c2VyIGNhbmNlbHMgdGhlIEltcG9ydCBjVVJMIHBhbmVsIChjbGlja3MgQ2FuY2VsKS4gKi9cbiAgQE91dHB1dCgpIGltcG9ydEN1cmxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHVzZXIgY2xpY2tzIFNlbmQgUmVxdWVzdCwgd2l0aCBlbnZpcm9ubWVudCwgbWV0aG9kLCB1cmwsIGFuZCBoZWFkZXJzLiAqL1xuICBAT3V0cHV0KCkgc2VuZFJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFwaUVkaXRTZW5kUmVxdWVzdFBheWxvYWQ+KCk7XG4gIEBPdXRwdXQoKSBiYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHMgd2hlbiB1c2VyIGNsaWNrcyB0aGUgQ2FuY2VsIGJ1dHRvbiAoc3RlcCAxKS4gKi9cbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG5leHQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHVzZXIgY2xpY2tzIENyZWF0ZSB3aXRoIGFsbCBlbnRlcmVkIGRldGFpbHM6IHN0ZXAxIChlbnZpcm9ubWVudCwgSFRUUCBtZXRob2QsIFVSTCwgaGVhZGVycywgYm9keSksIHN0ZXAyICh2YXJpYWJsZSBuYW1lKSwgc3RlcDMgKHZlcmlmaWNhdGlvbnMpLiAqL1xuICBAT3V0cHV0KCkgY3JlYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxBcGlFZGl0Q3JlYXRlUGF5bG9hZD4oKTtcbiAgLyoqIEVtaXRzIHdoZW5ldmVyIGhlYWRlcnMgY2hhbmdlIChhZGQsIHJlbW92ZSwgb3IgZWRpdCkgc28gdGhlIHBhcmVudCBjYW4gcmVmbGVjdCB0aGVtIGluIHRoZSBjYW52YXMvY29udHJvbHMuICovXG4gIEBPdXRwdXQoKSBoZWFkZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcGlFZGl0SGVhZGVyUm93W10+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBlbnZpcm9ubWVudCBkcm9wZG93biBzZWxlY3Rpb24gY2hhbmdlcyAoc2VsZWN0ZWQgdmFsdWUvaWQgb3IgbnVsbCBmb3IgTm9uZSkgc28gdGhlIHBhcmVudCBjYW4gcHJvdmlkZSB1cmxPcHRpb25zLiAqL1xuICBAT3V0cHV0KCkgZW52aXJvbm1lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlciB8IG51bGw+KCk7XG5cbiAgLyoqIEZvcm0gY29udHJvbCBmb3IgSW1wb3J0IGNVUkwgdGV4dGFyZWE7IHZhbHVlIGlzIGVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBJbXBvcnQuICovXG4gIHJlYWRvbmx5IGltcG9ydEN1cmxDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICB2YXJpYWJsZU5hbWUgPSAnJztcbiAgdmFyaWFibGVOYW1lRXJyb3IgPSAnJztcbiAgdXJsRXJyb3IgPSAnJztcbiAgLyoqIFN0ZXAgc3VtbWFyeSAoZGlzcGxheWVkIGluIEFQSSBzdGVwIHRpdGxlOyBtYXBzIHRvIHN0ZXAgZGVzY3JpcHRpb24pLiAqL1xuICBzdW1tYXJ5ID0gJyc7XG5cbiAgLyoqIENvbnRyb2xzIHdoaWNoIGJvZHkgY29udGVudCBpcyB2aXNpYmxlOiBoZWFkZXJzIChkZWZhdWx0KSBvciBpbXBvcnQtY3VybC4gKi9cbiAgYm9keVZpZXc6IEFwaUVkaXRCb2R5VmlldyA9ICdoZWFkZXJzJztcblxuICByZWFkb25seSBzdGVwTGFiZWxzID0gW1xuICAgIHsgaW5kZXg6IDEsIGxhYmVsOiBBUElfRURJVF9TVEVQX0xBQkVMUy5SRVFVRVNUX0RFVEFJTFMgfSxcbiAgICB7IGluZGV4OiAyLCBsYWJlbDogQVBJX0VESVRfU1RFUF9MQUJFTFMuU1RPUkVfUkVTUE9OU0UgfSxcbiAgICB7IGluZGV4OiAzLCBsYWJlbDogQVBJX0VESVRfU1RFUF9MQUJFTFMuVkFMSURBVElPTiB9LFxuICBdO1xuICBjdXJyZW50U3RlcCA9IDE7XG5cbiAgLyoqIFRoZSBsYWJlbCBmb3IgdGhlIGN1cnJlbnQgc3RlcCBvbmx5ICh1c2VkIHdoZW4gc2hvd2luZyBhIHNpbmdsZSBzdGVwIGluIHRoZSBpbmRpY2F0b3IpLiAqL1xuICBnZXQgYWN0aXZlU3RlcExhYmVsKCk6IHsgaW5kZXg6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwTGFiZWxzW3RoaXMuY3VycmVudFN0ZXAgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWluU3RlcCA9IDE7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U3RlcCA9IDM7XG5cbiAgLyoqIFBlcmNlbnRhZ2UgdG8gdHJhbnNsYXRlIHRoZSBzdGVwIHN0cmlwICgwLCAtMzMuMzMzLCAtNjYuNjY2KSBmb3IgQ1NTIHRyYW5zaXRpb24uICovXG4gIGdldCBzdHJpcFRyYW5zbGF0ZVBlcmNlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuY3VycmVudFN0ZXAgLSAxKSAqIC0zMy4zMzM7XG4gIH1cblxuICBzZXRTdGVwKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzdGVwID49IHRoaXMubWluU3RlcCAmJiBzdGVwIDw9IHRoaXMubWF4U3RlcCkge1xuICAgICAgLy8gVmFsaWRhdGUgY3VycmVudCBzdGVwIGJlZm9yZSBhbGxvd2luZyBmb3J3YXJkIG5hdmlnYXRpb25cbiAgICAgIGlmIChzdGVwID4gdGhpcy5jdXJyZW50U3RlcCkge1xuICAgICAgICAvLyBWYWxpZGF0ZSBVUkwgYmVmb3JlIGFsbG93aW5nIG5hdmlnYXRpb24gYXdheSBmcm9tIHN0ZXAgMVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gMSkge1xuICAgICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVVybCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgdmFyaWFibGUgbmFtZSBiZWZvcmUgYWxsb3dpbmcgbmF2aWdhdGlvbiBhd2F5IGZyb20gc3RlcCAyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwID09PSAyICYmICF0aGlzLnZhcmlhYmxlTmFtZT8udHJpbSgpKSB7XG4gICAgICAgICAgdGhpcy52YXJpYWJsZU5hbWVFcnJvciA9ICdWYXJpYWJsZSBOYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFyaWFibGVOYW1lRXJyb3IgPSAnJztcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSBzdGVwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsU3RlcCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgodGhpcy5taW5TdGVwLCBNYXRoLm1pbih0aGlzLm1heFN0ZXAsIE1hdGguZmxvb3IodmFsdWUpKSk7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IGNsYW1wZWQ7XG4gIH1cblxuICAvKiogSFRUUCBtZXRob2Qgb3B0aW9uczogYXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHdpdGggaWQsIG5hbWUsIHZhbHVlLCBsYWJlbCAocGFzc2VkIGZyb20gcGFyZW50KS4gKi9cbiAgQElucHV0KCkgaHR0cE1ldGhvZE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuXG4gIC8qKiBGb3JtIGZvciBIVFRQIG1ldGhvZCBzZWxlY3QgKGNxYS1keW5hbWljLXNlbGVjdCkgKi9cbiAgbWV0aG9kRm9ybSE6IEZvcm1Hcm91cDtcblxuICAvKiogQ29uZmlnIGZvciBtZXRob2QgZHJvcGRvd24gKHVwZGF0ZWQgd2hlbiBodHRwTWV0aG9kT3B0aW9ucyBjaGFuZ2VzIHRvIGF2b2lkIG5ldyByZWZlcmVuY2UgZXZlcnkgQ0QpICovXG4gIG1ldGhvZFNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgcGxhY2Vob2xkZXI6ICdNZXRob2QnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlTWV0aG9kU2VsZWN0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSAodGhpcy5odHRwTWV0aG9kT3B0aW9ucyA/PyBbXSkubWFwKChtKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC50b1NlbGVjdE9wdGlvbihtKSk7XG4gICAgdGhpcy5tZXRob2RTZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLm1ldGhvZFNlbGVjdENvbmZpZyxcbiAgICAgIG9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0aG9kVmFsdWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnMgPz8gW10pXG4gICAgICAubWFwKChtKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShtKSlcbiAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB2ICE9IG51bGwpO1xuICB9XG5cbiAgLyoqIEZvcm0gZm9yIGVudmlyb25tZW50IHNlbGVjdCAoY3FhLWR5bmFtaWMtc2VsZWN0KSAqL1xuICBlbnZpcm9ubWVudEZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIEVudmlyb25tZW50IG9wdGlvbnM6IGFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB3aXRoIGlkLCBuYW1lLCB2YWx1ZSwgbGFiZWwgKHBhc3NlZCBmcm9tIHBhcmVudCkuICovXG4gIEBJbnB1dCgpIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdID0gW107XG4gIC8qKiBXaGV0aGVyIG1vcmUgZW52aXJvbm1lbnRzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbCAocHJvdmlkZWQgYnkgcGFyZW50KS4gKi9cbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBwYXJlbnQgaXMgbG9hZGluZyBlbnZpcm9ubWVudHMgKHNlYXJjaCBvciBsb2FkIG1vcmUpLiAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFVSTCBmaWVsZCBvcHRpb25zIHdoZW4gYW4gZW52aXJvbm1lbnQgaXMgc2VsZWN0ZWQgKGJhc2UgVVJMICsgcGFyYW1ldGVycyBhcyAqfGtleXwpLiBQYXJlbnQgZmlsbHMgdGhpcyB3aGVuIGVudmlyb25tZW50Q2hhbmdlIGZpcmVzLiAqL1xuICBASW5wdXQoKSB1cmxPcHRpb25zOiBDcWFBdXRvY29tcGxldGVPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBDb25maWcgZm9yIGVudmlyb25tZW50IGRyb3Bkb3duICh1cGRhdGVkIHdoZW4gZW52aXJvbm1lbnRPcHRpb25zIGNoYW5nZXMgdG8gYXZvaWQgbmV3IHJlZmVyZW5jZSBldmVyeSBDRCkgKi9cbiAgZW52aXJvbm1lbnRTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdlbnZpcm9ubWVudCcsXG4gICAgcGxhY2Vob2xkZXI6ICdFbnZpcm9ubWVudCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdG9TZWxlY3RPcHRpb24oaXRlbTogRW52aXJvbm1lbnRPcHRpb25JbnB1dCk6IFNlbGVjdE9wdGlvbiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHsgaWQ6IGl0ZW0sIHZhbHVlOiBpdGVtLCBuYW1lOiBpdGVtLCBsYWJlbDogaXRlbSB9O1xuICAgIH1cbiAgICBjb25zdCBvID0gaXRlbSBhcyBTZWxlY3RPcHRpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBvLmlkID8/IG8udmFsdWUsXG4gICAgICB2YWx1ZTogby52YWx1ZSA/PyBvLmlkLFxuICAgICAgbmFtZTogby5uYW1lID8/IG8ubGFiZWwgPz8gU3RyaW5nKG8udmFsdWUgPz8gby5pZCksXG4gICAgICBsYWJlbDogby5sYWJlbCA/PyBvLm5hbWUgPz8gU3RyaW5nKG8udmFsdWUgPz8gby5pZCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE9wdGlvblZhbHVlKGl0ZW06IEVudmlyb25tZW50T3B0aW9uSW5wdXQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHJldHVybiBpdGVtO1xuICAgIGNvbnN0IG8gPSBpdGVtIGFzIFNlbGVjdE9wdGlvbjtcbiAgICBjb25zdCB2ID0gby52YWx1ZSA/PyBvLmlkO1xuICAgIHJldHVybiB2ICE9IG51bGwgPyBTdHJpbmcodikgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50U2VsZWN0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSAodGhpcy5lbnZpcm9ubWVudE9wdGlvbnMgPz8gW10pLm1hcCgoZSkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24oZSkpO1xuICAgIHRoaXMuZW52aXJvbm1lbnRTZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLmVudmlyb25tZW50U2VsZWN0Q29uZmlnLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVFbnZpcm9ubWVudHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nRW52aXJvbm1lbnRzLFxuICAgICAgb25Mb2FkTW9yZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50TG9hZE1vcmUuZW1pdCgpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50U2VhcmNoLmVtaXQocXVlcnkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnZpcm9ubWVudFZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLmVudmlyb25tZW50T3B0aW9ucyA/PyBbXSlcbiAgICAgIC5tYXAoKGUpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGUpKVxuICAgICAgLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+IHYgIT0gbnVsbCk7XG4gIH1cblxuICAvKiogRW1pdCB3aGVuIHVzZXIgc2VhcmNoZXMgZW52aXJvbm1lbnRzIGZyb20gdGhlIGRyb3Bkb3duLiAqL1xuICBAT3V0cHV0KCkgZW52aXJvbm1lbnRTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUgZW52aXJvbm1lbnRzLiAqL1xuICBAT3V0cHV0KCkgZW52aXJvbm1lbnRMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdCB3aGVuIHVzZXIgY2xpY2tzIFwiTG9hZCBTY2hlbWFcIiBpbiBHcmFwaFFMIG1vZGUuIFBhcmVudCBoYW5kbGVzIHRoZSBzY2hlbWEgZmV0Y2ggKG9yIHNob3dzIGEgXCJjb21pbmcgc29vblwiIHRvYXN0IGZvciBub3cpLiAqL1xuICBAT3V0cHV0KCkgbG9hZFNjaGVtYSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB1cmw6IHN0cmluZzsgaGVhZGVyczogQXBpRWRpdEhlYWRlclJvd1tdIH0+KCk7XG5cbiAgLyoqIEZvcm0gZm9yIEF1dGggVHlwZSBzZWxlY3QgKEF1dGhvcml6YXRpb24gdGFiKSAqL1xuICBhdXRoVHlwZUZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIEF1dGggdHlwZSBvcHRpb25zOiBhcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgd2l0aCBpZCwgbmFtZSwgdmFsdWUsIGxhYmVsIChwYXNzZWQgZnJvbSBwYXJlbnQpLiBGYWxscyBiYWNrIHRvIGJ1aWx0LWluIGxpc3Qgd2hlbiBlbXB0eS4gKi9cbiAgQElucHV0KCkgYXV0aFR5cGVPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbklucHV0W10gPSBbXTtcblxuICAvKiogSW5pdGlhbCBhdXRoIHR5cGUgKHN0cmluZyBvciBvcHRpb24gb2JqZWN0KS4gV2hlbiBub3Qgc2V0LCBmaXJzdCBvZiBhdXRoVHlwZU9wdGlvbnMgb3IgZGVmYXVsdCBcIk5vIEF1dGhcIiBpcyB1c2VkLiAqL1xuICBASW5wdXQoKSBpbml0aWFsQXV0aFR5cGU/OiBzdHJpbmcgfCBFbnZpcm9ubWVudE9wdGlvbklucHV0O1xuXG4gIC8qKiBJbml0aWFsIE9BdXRoIDIuMCBmaWVsZCB2YWx1ZXMgd2hlbiBhdXRoVHlwZSBpcyAnb2F1dGgyJyAoY2FtZWxDYXNlIGtleXMpLiAqL1xuICBASW5wdXQoKSBpbml0aWFsT0F1dGgyPzogQXBpRWRpdE9BdXRoMlBheWxvYWQ7XG5cbiAgLyoqIERlZmF1bHQgb3B0aW9ucyB3aGVuIGF1dGhUeXBlT3B0aW9ucyBpcyBlbXB0eSAoc2FtZSBzaGFwZSBhcyBlbnZpcm9ubWVudCkgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BVVRIX1RZUEVfT1BUSU9OUzogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ25vLWF1dGgnLCB2YWx1ZTogJ25vLWF1dGgnLCBuYW1lOiAnTm8gQXV0aCcsIGxhYmVsOiAnTm8gQXV0aCcgfSxcbiAgICB7IGlkOiAnYmVhcmVyJywgdmFsdWU6ICdiZWFyZXInLCBuYW1lOiAnQmVhcmVyIFRva2VuJywgbGFiZWw6ICdCZWFyZXIgVG9rZW4nIH0sXG4gICAgeyBpZDogJ29hdXRoMicsIHZhbHVlOiAnb2F1dGgyJywgbmFtZTogJ09BdXRoIDIuMCcsIGxhYmVsOiAnT0F1dGggMi4wJyB9LFxuICBdO1xuXG4gIC8qKiBDb25maWcgZm9yIEF1dGggVHlwZSBkcm9wZG93biAodXBkYXRlZCB3aGVuIGF1dGhUeXBlT3B0aW9ucyBjaGFuZ2VzLCBsaWtlIGVudmlyb25tZW50KSAqL1xuICBhdXRoVHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2F1dGhUeXBlJyxcbiAgICBwbGFjZWhvbGRlcjogJ05vIEF1dGgnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlQXV0aFR5cGVTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICB0aGlzLmF1dGhUeXBlT3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuYXV0aFR5cGVPcHRpb25zLm1hcCgoYSkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24oYSkpXG4gICAgICAgIDogWy4uLkFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfQVVUSF9UWVBFX09QVElPTlNdO1xuICAgIHRoaXMuYXV0aFR5cGVTZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLmF1dGhUeXBlU2VsZWN0Q29uZmlnLFxuICAgICAgb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRoVHlwZVZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc291cmNlID1cbiAgICAgIHRoaXMuYXV0aFR5cGVPcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5hdXRoVHlwZU9wdGlvbnNcbiAgICAgICAgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9BVVRIX1RZUEVfT1BUSU9OUyBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0W10pO1xuICAgIHJldHVybiBzb3VyY2VcbiAgICAgIC5tYXAoKGEpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGEgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkpXG4gICAgICAuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPSBudWxsKTtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IGF1dGggdHlwZSB2YWx1ZSAoZS5nLiAnbm8tYXV0aCcpIGZvciB0ZW1wbGF0ZSAqL1xuICBnZXQgc2VsZWN0ZWRBdXRoVHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYgPSB0aGlzLmF1dGhUeXBlRm9ybT8uZ2V0KCdhdXRoVHlwZScpPy52YWx1ZTtcbiAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gJ25vLWF1dGgnO1xuICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyAodj8udmFsdWUgPz8gdj8uaWQgPz8gJ25vLWF1dGgnKSA6IFN0cmluZyh2KTtcbiAgfVxuXG4gIC8qKiBCZWFyZXIgdG9rZW4gdmFsdWUgKEF1dGhvcml6YXRpb24gdGFiLCB3aGVuIGF1dGggdHlwZSBpcyBCZWFyZXIgVG9rZW4pLiAqL1xuICBiZWFyZXJUb2tlbiA9ICcnO1xuXG4gIC8qKiBGb3JtIGZvciBPQXV0aCAyLjAgZmllbGRzIChBdXRob3JpemF0aW9uIHRhYiB3aGVuIGF1dGggdHlwZSBpcyBPQXV0aCAyLjApLiAqL1xuICBvYXV0aDJGb3JtITogRm9ybUdyb3VwO1xuXG4gIC8qKiBHcmFudCB0eXBlIG9wdGlvbnMgZm9yIE9BdXRoIDIuMCAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBPQVVUSF9HUkFOVF9UWVBFX09QVElPTlM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdjbGllbnRfY3JlZGVudGlhbHMnLCB2YWx1ZTogJ2NsaWVudF9jcmVkZW50aWFscycsIG5hbWU6ICdDbGllbnQgQ3JlZGVudGlhbHMnLCBsYWJlbDogJ0NsaWVudCBDcmVkZW50aWFscycgfSxcbiAgICB7IGlkOiAnYXV0aG9yaXphdGlvbl9jb2RlJywgdmFsdWU6ICdhdXRob3JpemF0aW9uX2NvZGUnLCBuYW1lOiAnQXV0aG9yaXphdGlvbiBDb2RlJywgbGFiZWw6ICdBdXRob3JpemF0aW9uIENvZGUnIH0sXG4gICAgeyBpZDogJ3Bhc3N3b3JkJywgdmFsdWU6ICdwYXNzd29yZCcsIG5hbWU6ICdQYXNzd29yZCcsIGxhYmVsOiAnUGFzc3dvcmQnIH0sXG4gICAgeyBpZDogJ2ltcGxpY2l0JywgdmFsdWU6ICdpbXBsaWNpdCcsIG5hbWU6ICdJbXBsaWNpdCcsIGxhYmVsOiAnSW1wbGljaXQnIH0sXG4gIF07XG5cbiAgLyoqIENsaWVudCBhdXRoZW50aWNhdGlvbiBtZXRob2Qgb3B0aW9ucyBmb3IgT0F1dGggMi4wICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE9BVVRIX0NMSUVOVF9BVVRIX09QVElPTlM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdiYXNpYycsIHZhbHVlOiAnYmFzaWMnLCBuYW1lOiAnU2VuZCBhcyBCYXNpYyBBdXRoIGhlYWRlcicsIGxhYmVsOiAnU2VuZCBhcyBCYXNpYyBBdXRoIGhlYWRlcicgfSxcbiAgICB7IGlkOiAnYm9keScsIHZhbHVlOiAnYm9keScsIG5hbWU6ICdTZW5kIGluIGJvZHknLCBsYWJlbDogJ1NlbmQgaW4gYm9keScgfSxcbiAgXTtcblxuICByZWFkb25seSBvYXV0aDJHcmFudFR5cGVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdncmFudFR5cGUnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGdyYW50IHR5cGUnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFsuLi5BcGlFZGl0U3RlcENvbXBvbmVudC5PQVVUSF9HUkFOVF9UWVBFX09QVElPTlNdLFxuICB9O1xuXG4gIHJlYWRvbmx5IG9hdXRoMkNsaWVudEF1dGhTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdjbGllbnRBdXRoZW50aWNhdGlvbicsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgbWV0aG9kJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbLi4uQXBpRWRpdFN0ZXBDb21wb25lbnQuT0FVVEhfQ0xJRU5UX0FVVEhfT1BUSU9OU10sXG4gIH07XG5cbiAgLyoqIEN1cnJlbnQgSFRUUCBtZXRob2QgKGZyb20gZm9ybSBvciBkZWZhdWx0OiBmaXJzdCBvZiBodHRwTWV0aG9kT3B0aW9ucykuIFRyZWF0cyBlbXB0eSBzdHJpbmcgYXMgdW5zZXQuICovXG4gIGdldCBzZWxlY3RlZE1ldGhvZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tZXRob2RGb3JtPy5nZXQoJ21ldGhvZCcpPy52YWx1ZTtcbiAgICBjb25zdCBmaXJzdFZhbHVlID0gdGhpcy5odHRwTWV0aG9kT3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXNvbHZlZCA9IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnID8gKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2YWx1ZSBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA6IFN0cmluZyh2YWx1ZSkpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXNvbHZlZCA/PyBmaXJzdFZhbHVlID8/ICdHRVQnO1xuICB9XG4gIHNldCBzZWxlY3RlZE1ldGhvZCh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1ldGhvZEZvcm0/LnBhdGNoVmFsdWUoeyBtZXRob2Q6IHYgfSk7XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIHRoZSBzZWxlY3RlZCBIVFRQIG1ldGhvZCBpcyBHRVQsIEhFQUQsIG9yIERFTEVURSAobm8gcmVxdWVzdCBib2R5KS4gKi9cbiAgZ2V0IGlzTWV0aG9kV2l0aG91dEJvZHkoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5zZWxlY3RlZE1ldGhvZCAhPSBudWxsID8gU3RyaW5nKHRoaXMuc2VsZWN0ZWRNZXRob2QpLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICByZXR1cm4gTUVUSE9EU19XSVRIT1VUX0JPRFkuaW5jbHVkZXMobWV0aG9kKTtcbiAgfVxuXG4gIC8qKiBDYWNoZWQgZW52aXJvbm1lbnQgdmFsdWUgZnJvbSBsYXN0IHNlbGVjdGlvbiAoc28gQ3JlYXRlIHBheWxvYWQgaGFzIHRoZSBzZWxlY3RlZCB2YWx1ZSkuICovXG4gIHByaXZhdGUgY3VycmVudEVudmlyb25tZW50VmFsdWUgPSAnJztcblxuICAvKiogQ2FjaGVkIEhUVFAgbWV0aG9kIGZyb20gbGFzdCBzZWxlY3Rpb24gKHNvIENyZWF0ZSBwYXlsb2FkIGhhcyB0aGUgc2VsZWN0ZWQgdmFsdWUpLiAqL1xuICBwcml2YXRlIGN1cnJlbnRNZXRob2RWYWx1ZSA9ICcnO1xuXG4gIC8qKiBDdXJyZW50IGVudmlyb25tZW50IChmcm9tIGZvcm0gb3IgZGVmYXVsdDogZmlyc3Qgb2YgZW52aXJvbm1lbnRPcHRpb25zKS4gVHJlYXRzIGVtcHR5IHN0cmluZyBhcyB1bnNldC4gKi9cbiAgZ2V0IHNlbGVjdGVkRW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZW52aXJvbm1lbnRGb3JtPy5nZXQoJ2Vudmlyb25tZW50Jyk/LnZhbHVlO1xuICAgIGNvbnN0IGZpcnN0VmFsdWUgPSB0aGlzLmVudmlyb25tZW50T3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuZW52aXJvbm1lbnRPcHRpb25zWzBdKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJyA/ICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodmFsdWUgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgOiBTdHJpbmcodmFsdWUpKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzb2x2ZWQgPz8gZmlyc3RWYWx1ZSA/PyAnRGV2ZWxvcG1lbnQnO1xuICB9XG4gIHNldCBzZWxlY3RlZEVudmlyb25tZW50KHY6IHN0cmluZykge1xuICAgIHRoaXMuZW52aXJvbm1lbnRGb3JtPy5wYXRjaFZhbHVlKHsgZW52aXJvbm1lbnQ6IHYgfSk7XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBzZWxlY3RzIGFuIGVudmlyb25tZW50OyBrZWVwcyBjdXJyZW50RW52aXJvbm1lbnRWYWx1ZSBpbiBzeW5jLCBzZXRzIHJlcXVlc3QgVVJMIGZyb20gZW52aXJvbm1lbnQgd2hlbiBhdmFpbGFibGUsIGFuZCBub3RpZmllcyBwYXJlbnQgZm9yIHVybE9wdGlvbnMuICovXG4gIG9uRW52aXJvbm1lbnRTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9XG4gICAgICB2ICE9IG51bGxcbiAgICAgICAgPyB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKVxuICAgICAgICAgIDogU3RyaW5nKHYpXG4gICAgICAgIDogJyc7XG5cbiAgICAvLyBDbGVhciBVUkwgZmllbGQgd2hlbiBlbnZpcm9ubWVudCBjaGFuZ2VzXG4gICAgdGhpcy51cmwgPSAnJztcbiAgICB0aGlzLnVybEVycm9yID0gJyc7IC8vIEFsc28gY2xlYXIgYW55IFVSTCB2YWxpZGF0aW9uIGVycm9yc1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gTm90aWZ5IHBhcmVudCBzbyBpdCBjYW4gcHJvdmlkZSB1cmxPcHRpb25zIChlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIGZvciBcIkVudGVyIFVSTCBvciBzZWxlY3QgUGFyYW1ldGVyXCIpXG4gICAgY29uc3QgZW1pdFZhbCA9IHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgPT09ICcnIHx8IHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgPT09ICdub25lJ1xuICAgICAgPyBudWxsXG4gICAgICA6ICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/IHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgOiB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlKTtcbiAgICB0aGlzLmVudmlyb25tZW50Q2hhbmdlLmVtaXQoZW1pdFZhbCA9PT0gJ25vbmUnID8gbnVsbCA6IChlbWl0VmFsIGFzIHN0cmluZyB8IG51bWJlciB8IG51bGwpKTtcbiAgfVxuXG4gIC8qKiBXaGVuIHVzZXIgc2VsZWN0cyBhbiBvcHRpb24gZnJvbSB0aGUgVVJMIGF1dG9jb21wbGV0ZSAoZS5nLiBlbnZpcm9ubWVudCBwYXJhbWV0ZXIgKnxrZXl8KSwgc2V0IHRoZSBVUkwgZmllbGQgdG8gdGhhdCB2YWx1ZS4gKi9cbiAgb25VcmxPcHRpb25TZWxlY3Qob3B0aW9uOiBDcWFBdXRvY29tcGxldGVPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnVybCA9IG9wdGlvbi52YWx1ZSA/PyAnJztcbiAgICB0aGlzLnVybEVycm9yID0gJyc7IC8vIENsZWFyIGVycm9yIHdoZW4gb3B0aW9uIGlzIHNlbGVjdGVkXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcmVxdWVzdCBVUkwgZm9yIHRoZSBzZWxlY3RlZCBlbnZpcm9ubWVudCBvcHRpb24uXG4gICAqIEVudmlyb25tZW50IG9wdGlvbnMgbWF5IGNhcnJ5IGFuIG9wdGlvbmFsIGB1cmxgIChlLmcuIGZyb20gRW52aXJvbm1lbnQgbW9kZWwpOyBcIk5vbmVcIiBoYXMgbm8gdXJsLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEVudmlyb25tZW50VXJsKHNlbGVjdGVkVmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBvYmogPSBzZWxlY3RlZFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHVybFByb3AgPSBvYmpbJ3VybCddO1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdXJsUHJvcCA9PT0gJ3N0cmluZycgJiYgdXJsUHJvcC50cmltKCkgIT09ICcnKSB7XG4gICAgICByZXR1cm4gdXJsUHJvcC50cmltKCk7XG4gICAgfVxuICAgIGNvbnN0IGlkT3JWYWx1ZSA9XG4gICAgICB0eXBlb2Ygc2VsZWN0ZWRWYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgPyAoQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUoc2VsZWN0ZWRWYWx1ZSBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA/PyAnJylcbiAgICAgICAgOiBTdHJpbmcoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgaWYgKCFpZE9yVmFsdWUgfHwgaWRPclZhbHVlID09PSAnbm9uZScpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9wdGlvbiA9ICh0aGlzLmVudmlyb25tZW50T3B0aW9ucyA/PyBbXSkuZmluZChcbiAgICAgIChvcHQpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKG9wdCkgPT09IGlkT3JWYWx1ZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gb3B0aW9uICE9IG51bGwgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgPyAob3B0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsndXJsJ10gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmIHVybC50cmltKCkgIT09ICcnID8gdXJsLnRyaW0oKSA6IG51bGw7XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBzZWxlY3RzIGFuIEhUVFAgbWV0aG9kOyBrZWVwcyBjdXJyZW50TWV0aG9kVmFsdWUgaW4gc3luYyBmb3IgY3JlYXRlIHBheWxvYWQuICovXG4gIG9uTWV0aG9kU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KTogdm9pZCB7XG4gICAgY29uc3QgdiA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuY3VycmVudE1ldGhvZFZhbHVlID1cbiAgICAgIHYgIT0gbnVsbFxuICAgICAgICA/IHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpXG4gICAgICAgICAgOiBTdHJpbmcodilcbiAgICAgICAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3VybCA9ICcnO1xuXG4gIC8qKiBVUkwgZm9yIHRoZSByZXF1ZXN0LiBHZXR0ZXIvc2V0dGVyIHN5bmNzIHF1ZXJ5IHBhcmFtcyB3aXRoIHRoZSBQYXJhbXMgdGFiIChQb3N0bWFuLXN0eWxlKS4gKi9cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cbiAgc2V0IHVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID8/ICcnO1xuICAgIGlmICh0aGlzLl91cmwgPT09IG5leHQpIHJldHVybjtcbiAgICB0aGlzLl91cmwgPSBuZXh0O1xuICAgIC8vIENsZWFyIGVycm9yIHdoZW4gVVJMIGNoYW5nZXNcbiAgICB0aGlzLnVybEVycm9yID0gJyc7XG4gICAgaWYgKHRoaXMucGFyYW1zRm9ybUFycmF5KSB7XG4gICAgICB0aGlzLnBhcmFtc1N5bmNpbmdGcm9tVXJsID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3luY1BhcmFtc0Zyb21VcmwoKTtcbiAgICAgIHRoaXMucGFyYW1zU3luY2luZ0Zyb21VcmwgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hlbiB0cnVlLCBwYXJhbXMgZm9ybSBjaGFuZ2VzIHNob3VsZCBub3QgdXBkYXRlIHRoZSBVUkwgKHdlJ3JlIHN5bmNpbmcgZnJvbSBVUkwpLiAqL1xuICBwcml2YXRlIHBhcmFtc1N5bmNpbmdGcm9tVXJsID0gZmFsc2U7XG5cbiAgLyoqIFBsYWNlaG9sZGVyIGZvciB0aGUgVVJMIGZpZWxkOiBzaG93IFwiRW50ZXIgVVJMIG9yIHNlbGVjdCBQYXJhbWV0ZXIgKlwiIHdoZW4gdXJsT3B0aW9ucyBhcmUgYXZhaWxhYmxlIChlbnZpcm9ubWVudCBzZWxlY3RlZCkuICovXG4gIGdldCB1cmxQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy51cmxPcHRpb25zPy5sZW5ndGggPz8gMCkgPiAwID8gJ0VudGVyIFVSTCBvciBzZWxlY3QgUGFyYW1ldGVyIConIDogJ0VudGVyIFVSTCAqJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHdvIHRhYiBhcnJhbmdlbWVudHMuIFJFU1Qga2VlcHMgdGhlIGxlZ2FjeSBmb3VyLXRhYiBsYXlvdXQuIEdyYXBoUUwgZHJvcHMgQm9keSAmIFBhcmFtc1xuICAgKiBiZWNhdXNlIHRoZSBib2R5IGlzIGEgc2luZ2xlIHsgcXVlcnksIHZhcmlhYmxlcywgb3BlcmF0aW9uTmFtZSB9IG9iamVjdCAocmVuZGVyZWQgaW4gdGhlIG5ld1xuICAgKiBHcmFwaFFMIHRhYiBiZWxvdykgYW5kIHF1ZXJ5IHBhcmFtcyBoYXZlIG5vIG1lYW5pbmcgZm9yIGEgR3JhcGhRTCBQT1NULlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUkVTVF9QQVlMT0FEX1RBQlM6IHsgdmFsdWU6IEFwaUVkaXRQYXlsb2FkVGFiOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtcbiAgICB7IHZhbHVlOiAnYXV0aG9yaXphdGlvbicsIGxhYmVsOiAnQXV0aG9yaXphdGlvbicgfSxcbiAgICB7IHZhbHVlOiAnaGVhZGVycycsIGxhYmVsOiAnSGVhZGVycycgfSxcbiAgICB7IHZhbHVlOiAnYm9keScsIGxhYmVsOiAnQm9keScgfSxcbiAgICB7IHZhbHVlOiAncGFyYW1zJywgbGFiZWw6ICdQYXJhbXMnIH0sXG4gIF07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEdSQVBIUUxfUEFZTE9BRF9UQUJTOiB7IHZhbHVlOiBBcGlFZGl0UGF5bG9hZFRhYjsgbGFiZWw6IHN0cmluZyB9W10gPSBbXG4gICAgeyB2YWx1ZTogJ2F1dGhvcml6YXRpb24nLCBsYWJlbDogJ0F1dGhvcml6YXRpb24nIH0sXG4gICAgeyB2YWx1ZTogJ2hlYWRlcnMnLCBsYWJlbDogJ0hlYWRlcnMnIH0sXG4gICAgeyB2YWx1ZTogJ2dyYXBocWwnLCBsYWJlbDogJ0dyYXBoUUwnIH0sXG4gIF07XG5cbiAgLyoqIFRhYnMgdmlzaWJsZSB1bmRlciB0aGUgcmVxdWVzdCByb3csIHN3YXBwZWQgYmFzZWQgb24gYGFjdGl2ZUFwaVR5cGVgLiAqL1xuICBnZXQgcGF5bG9hZFRhYnMoKTogeyB2YWx1ZTogQXBpRWRpdFBheWxvYWRUYWI7IGxhYmVsOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCdcbiAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuR1JBUEhRTF9QQVlMT0FEX1RBQlNcbiAgICAgIDogQXBpRWRpdFN0ZXBDb21wb25lbnQuUkVTVF9QQVlMT0FEX1RBQlM7XG4gIH1cbiAgYWN0aXZlUGF5bG9hZFRhYjogQXBpRWRpdFBheWxvYWRUYWIgPSAnaGVhZGVycyc7XG5cbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBBUEkgdHlwZS4gUkVTVCBpcyB0aGUgZGVmYXVsdCBhbmQgbWF0Y2hlcyB0b2RheSdzIGJlaGF2aW91ciBleGFjdGx5LiAqL1xuICBhY3RpdmVBcGlUeXBlOiBBcGlFZGl0QXBpVHlwZSA9ICdyZXN0JztcblxuICAvKiogU2VnbWVudHMgcmVuZGVyZWQgYWJvdmUgdGhlIE1ldGhvZC9VUkwgcm93LiBTT0FQL1dlYlNvY2tldC9nUlBDIGFyZSBpbnRlbnRpb25hbGx5IGBkaXNhYmxlZGAgZm9yIG5vdy4gKi9cbiAgcmVhZG9ubHkgYXBpVHlwZVNlZ21lbnRzID0gW1xuICAgIHsgbGFiZWw6ICdSRVNUIEFQSScsICB2YWx1ZTogJ3Jlc3QnIGFzIEFwaUVkaXRBcGlUeXBlIH0sXG4gICAgeyBsYWJlbDogJ0dyYXBoUUwnLCAgIHZhbHVlOiAnZ3JhcGhxbCcgYXMgQXBpRWRpdEFwaVR5cGUgfSxcbiAgICB7IGxhYmVsOiAnU09BUCcsICAgICAgdmFsdWU6ICdzb2FwJyBhcyBBcGlFZGl0QXBpVHlwZSwgICAgICBkaXNhYmxlZDogdHJ1ZSwgdG9vbHRpcDogJ0NvbWluZyBzb29uJyB9LFxuICAgIHsgbGFiZWw6ICdXZWJTb2NrZXQnLCB2YWx1ZTogJ3dlYnNvY2tldCcgYXMgQXBpRWRpdEFwaVR5cGUsIGRpc2FibGVkOiB0cnVlLCB0b29sdGlwOiAnQ29taW5nIHNvb24nIH0sXG4gICAgeyBsYWJlbDogJ2dSUEMnLCAgICAgIHZhbHVlOiAnZ3JwYycgYXMgQXBpRWRpdEFwaVR5cGUsICAgICAgZGlzYWJsZWQ6IHRydWUsIHRvb2x0aXA6ICdDb21pbmcgc29vbicgfSxcbiAgXTtcblxuICAvKiogR3JhcGhRTCBmaWVsZHMgYmFja2luZyB0aGUgbmV3IHRhYiBjb250ZW50LiBWYXJpYWJsZXMgYXJlIHN0b3JlZCBhcyBhIEpTT04gc3RyaW5nIGluIHRoZSBmb3JtIGZvciB0aGUgdGV4dGFyZWEgcm91bmQtdHJpcDsgcGFyc2VkIG9uIGVtaXQuICovXG4gIGdyYXBoUUxGb3JtITogRm9ybUdyb3VwO1xuXG4gIC8qKiBJbmxpbmUgZXJyb3IgZGlzcGxheWVkIHVuZGVyIHRoZSBRdWVyeSB0ZXh0YXJlYSB3aGVuIGVtcHR5L2JsYW5rIG9uIFNhdmUuIENsZWFyZWQgYXMgdGhlIHVzZXIgdHlwZXMuICovXG4gIGdyYXBoUUxRdWVyeUVycm9yID0gJyc7XG5cbiAgLyoqIElubGluZSBlcnJvciBkaXNwbGF5ZWQgdW5kZXIgdGhlIFZhcmlhYmxlcyB0ZXh0YXJlYSB3aGVuIEpTT04gaXMgbWFsZm9ybWVkLiAqL1xuICBncmFwaFFMVmFyaWFibGVzRXJyb3IgPSAnJztcblxuICAvKiogTm9uLWJsb2NraW5nIHdhcm5pbmcgc2hvd24gdW5kZXIgdGhlIE9wZXJhdGlvbiBOYW1lIGZpZWxkIHdoZW4gdGhlIHF1ZXJ5IGRlY2xhcmVzIDIrIG9wZXJhdGlvbnMuICovXG4gIGdyYXBoUUxPcGVyYXRpb25XYXJuaW5nID0gJyc7XG5cbiAgLyoqIFN0ZXAgMzogUmVzcG9uc2UgdmVyaWZpY2F0aW9uIHRhYnMgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VWZXJpZmljYXRpb25UYWJzOiB7IHZhbHVlOiAncmVzcG9uc2UtYm9keScgfCAnc3RhdHVzJzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXG4gICAgeyB2YWx1ZTogJ3Jlc3BvbnNlLWJvZHknLCBsYWJlbDogJ1Jlc3BvbnNlIEJvZHknIH0sXG4gICAgeyB2YWx1ZTogJ3N0YXR1cycsIGxhYmVsOiAnU3RhdHVzJyB9LFxuICBdO1xuICBhY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYjogJ3Jlc3BvbnNlLWJvZHknIHwgJ3N0YXR1cycgPSAncmVzcG9uc2UtYm9keSc7XG5cbiAgLyoqIFBheWxvYWQgdHlwZSBmb3IgQm9keS9QYXJhbXMvQXV0aG9yaXphdGlvbjogcmF3LCB4LXd3dy1mb3JtLXVybGVuY29kZWQsIGZvcm0tZGF0YSAqL1xuICBwYXlsb2FkVHlwZTogJ3JhdycgfCAneC13d3ctZm9ybS11cmxlbmNvZGVkJyB8ICdmb3JtLWRhdGEnID0gJ3Jhdyc7XG5cbiAgLyoqIFNlZ21lbnQgb3B0aW9ucyBmb3IgcGF5bG9hZCB0eXBlICh1c2VkIGJ5IGNxYS1zZWdtZW50LWNvbnRyb2wpICovXG4gIHJlYWRvbmx5IHBheWxvYWRUeXBlU2VnbWVudHMgPSBbXG4gICAgeyBsYWJlbDogJ1JhdycsIHZhbHVlOiAncmF3JyB9LFxuICAgIHsgbGFiZWw6ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnLCB2YWx1ZTogJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICB7IGxhYmVsOiAnRm9ybSBEYXRhJywgdmFsdWU6ICdmb3JtLWRhdGEnIH0sXG4gIF07XG5cbiAgb25QYXlsb2FkVHlwZUNoYW5nZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF5bG9hZFR5cGUgPSB2YWwgYXMgJ3JhdycgfCAneC13d3ctZm9ybS11cmxlbmNvZGVkJyB8ICdmb3JtLWRhdGEnO1xuICB9XG5cbiAgLyoqIEZvcm0gZm9yIEZvcm1hdCBzZWxlY3QgKEJvZHkvUGFyYW1zL0F1dGhvcml6YXRpb24pICovXG4gIHBheWxvYWRGb3JtYXRGb3JtITogRm9ybUdyb3VwO1xuXG4gIC8qKiBGb3JtYXQgb3B0aW9uczogYXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIChwYXNzZWQgZnJvbSBwYXJlbnQpLiBGYWxscyBiYWNrIHRvIEpTT04sIFhNTCwgSFRNTCwgVGV4dCB3aGVuIGVtcHR5LiAqL1xuICBASW5wdXQoKSBmb3JtYXRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbklucHV0W10gPSBbXTtcblxuICBASW5wdXQoKSBpbml0aWFsRm9ybWF0Pzogc3RyaW5nO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfRk9STUFUX09QVElPTlM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdqc29uJywgdmFsdWU6ICdqc29uJywgbmFtZTogJ0pTT04nLCBsYWJlbDogJ0pTT04nIH0sXG4gICAgeyBpZDogJ3htbCcsIHZhbHVlOiAneG1sJywgbmFtZTogJ1hNTCcsIGxhYmVsOiAnWE1MJyB9LFxuICAgIHsgaWQ6ICdodG1sJywgdmFsdWU6ICdodG1sJywgbmFtZTogJ0hUTUwnLCBsYWJlbDogJ0hUTUwnIH0sXG4gICAgeyBpZDogJ3RleHQnLCB2YWx1ZTogJ3RleHQnLCBuYW1lOiAnVGV4dCcsIGxhYmVsOiAnVGV4dCcgfSxcbiAgXTtcblxuICAvKiogQ29uZmlnIGZvciBGb3JtYXQgZHJvcGRvd24gKHVwZGF0ZWQgd2hlbiBmb3JtYXRPcHRpb25zIGNoYW5nZXMsIGxpa2UgTWV0aG9kIGRyb3Bkb3duKSAqL1xuICBwYXlsb2FkRm9ybWF0U2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZm9ybWF0JyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogWy4uLkFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfRk9STUFUX09QVElPTlNdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlUGF5bG9hZEZvcm1hdFNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID1cbiAgICAgIHRoaXMuZm9ybWF0T3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZm9ybWF0T3B0aW9ucy5tYXAoKGYpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LnRvU2VsZWN0T3B0aW9uKGYpKVxuICAgICAgICA6IEFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfRk9STUFUX09QVElPTlM7XG4gICAgdGhpcy5wYXlsb2FkRm9ybWF0U2VsZWN0Q29uZmlnID0ge1xuICAgICAgLi4udGhpcy5wYXlsb2FkRm9ybWF0U2VsZWN0Q29uZmlnLFxuICAgICAgb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JtYXRWYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNvdXJjZSA9XG4gICAgICB0aGlzLmZvcm1hdE9wdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmZvcm1hdE9wdGlvbnNcbiAgICAgICAgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9GT1JNQVRfT1BUSU9OUyBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0W10pO1xuICAgIHJldHVybiBzb3VyY2VcbiAgICAgIC5tYXAoKGYpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkpXG4gICAgICAuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPSBudWxsKTtcbiAgfVxuXG4gIC8qKiBQYXlsb2FkIHRleHQgYXJlYSB2YWx1ZSBmb3IgQm9keS9QYXJhbXMvQXV0aG9yaXphdGlvbiAqL1xuICBwYXlsb2FkVGV4dCA9ICcnO1xuXG4gIC8qKiBKU09OIHBhcnNlIGVycm9yIHdoZW4gZm9ybWF0IGlzIEpTT04gYW5kIHBheWxvYWQgaXMgaW52YWxpZDsgbnVsbCB3aGVuIHZhbGlkIG9yIG5vdCBKU09OLiAqL1xuICBwYXlsb2FkSnNvbkVycm9yOiB7XG4gICAgbGluZTogbnVtYmVyO1xuICAgIGNvbHVtbjogbnVtYmVyO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBleGNlcnB0OiBzdHJpbmc7XG4gICAgY2FyZXRPZmZzZXQ6IG51bWJlcjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBMaW5lIG51bWJlcnMgZm9yIHBheWxvYWQgdGV4dGFyZWEgKDEsIDIsIDMsIC4uLikgYmFzZWQgb24gY3VycmVudCBsaW5lIGNvdW50LiAqL1xuICBnZXQgcGF5bG9hZExpbmVOdW1iZXJzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgKHRoaXMucGF5bG9hZFRleHQgfHwgJycpLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbiB9LCAoXywgaSkgPT4gaSArIDEpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgY3VycmVudCBwYXlsb2FkIGZvcm1hdCBpcyBKU09OIChzbyB3ZSB2YWxpZGF0ZSBhbmQgc2hvdyBKU09OIGVkaXRvciBiZWhhdmlvcikuICovXG4gIGdldCBpc1BheWxvYWRGb3JtYXRKc29uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMucGF5bG9hZEZvcm1hdEZvcm0/LmdldCgnZm9ybWF0Jyk/LnZhbHVlO1xuICAgIHJldHVybiBmb3JtYXQgPT09ICdqc29uJztcbiAgfVxuXG4gIC8qKiBFcnJvciBtZXNzYWdlcyBmb3IgdGhlIHBheWxvYWQgdGV4dGFyZWEgKHJlZCBib3JkZXIgKyBib3R0b20gbGluZSkuICovXG4gIGdldCBwYXlsb2FkSnNvbkVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucGF5bG9hZEpzb25FcnJvciA/IFsnSW52YWxpZCBKU09OIGZvcm1hdC4gUGxlYXNlIGNoZWNrIHlvdXIgc3ludGF4LiddIDogW107XG4gIH1cblxuICAvKiogVG9vbHRpcCBjb250ZW50IGZvciB0aGUgbGluZS1sZXZlbCBlcnJvciBpY29uIChwYXJzZSBlcnJvciBvbiBsaW5lIFgsIGV4Y2VycHQsIGNhcmV0LCBtZXNzYWdlKS4gKi9cbiAgZ2V0IHBheWxvYWRKc29uRXJyb3JUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnBheWxvYWRKc29uRXJyb3IpIHJldHVybiAnJztcbiAgICBjb25zdCBlID0gdGhpcy5wYXlsb2FkSnNvbkVycm9yO1xuICAgIGNvbnN0IGNhcmV0ID0gJyAnLnJlcGVhdChlLmNhcmV0T2Zmc2V0KSArICdeJztcbiAgICByZXR1cm4gYFBhcnNlIGVycm9yIG9uIGxpbmUgJHtlLmxpbmV9OlxcblxcbiR7ZS5leGNlcnB0fVxcbiR7Y2FyZXR9XFxuXFxuJHtlLm1lc3NhZ2V9YDtcbiAgfVxuXG4gIG9uUGF5bG9hZFRleHRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF5bG9hZFRleHQgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbGlkYXRlUGF5bG9hZEpzb24oKTtcbiAgfVxuXG4gIG9uUGF5bG9hZElucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbDtcbiAgICB0aGlzLm9uUGF5bG9hZFRleHRDaGFuZ2UodGFyZ2V0Py52YWx1ZSA/PyAnJyk7XG4gIH1cblxuICBvblBheWxvYWRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUGF5bG9hZEZvcm1hdEpzb24pIHJldHVybjtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgY29uc3QgY2xvc2UgPSBQQVlMT0FEX0FVVE9fQ0xPU0VfUEFJUlNba2V5XTtcbiAgICBpZiAoIWNsb3NlKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBzdGFydCA9IHRhcmdldC5zZWxlY3Rpb25TdGFydCA/PyAwO1xuICAgIGNvbnN0IGVuZCA9IHRhcmdldC5zZWxlY3Rpb25FbmQgPz8gc3RhcnQ7XG4gICAgY29uc3QgYmVmb3JlID0gdGhpcy5wYXlsb2FkVGV4dC5zbGljZSgwLCBzdGFydCk7XG4gICAgY29uc3QgYWZ0ZXIgPSB0aGlzLnBheWxvYWRUZXh0LnNsaWNlKGVuZCk7XG4gICAgY29uc3QgaW5zZXJ0UG9zID0gc3RhcnQgKyAxO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gYmVmb3JlICsga2V5ICsgY2xvc2UgKyBhZnRlcjtcbiAgICB0aGlzLnBheWxvYWRUZXh0ID0gbmV3VmFsdWU7XG4gICAgdGhpcy52YWxpZGF0ZVBheWxvYWRKc29uKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnBheWxvYWRUZXh0YXJlYVJlZj8ubmF0aXZlRWxlbWVudD8uc2V0U2VsZWN0aW9uUmFuZ2UoaW5zZXJ0UG9zLCBpbnNlcnRQb3MpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqIFZhbGlkYXRlIHBheWxvYWQgd2hlbiBmb3JtYXQgaXMgSlNPTjsgc2V0cyBwYXlsb2FkSnNvbkVycm9yIG9yIGNsZWFycyBpdC4gKi9cbiAgdmFsaWRhdGVQYXlsb2FkSnNvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNQYXlsb2FkRm9ybWF0SnNvbikge1xuICAgICAgdGhpcy5wYXlsb2FkSnNvbkVycm9yID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucGF5bG9hZFRleHQgPz8gJyc7XG4gICAgaWYgKHRleHQudHJpbSgpID09PSAnJykge1xuICAgICAgdGhpcy5wYXlsb2FkSnNvbkVycm9yID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB0aGlzLnBheWxvYWRKc29uRXJyb3IgPSBudWxsO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5leHRyYWN0UG9zaXRpb25Gcm9tSnNvbkVycm9yKG1lc3NhZ2UpO1xuICAgICAgY29uc3QgeyBsaW5lLCBjb2x1bW4gfSA9IHRoaXMucG9zaXRpb25Ub0xpbmVDb2x1bW4odGV4dCwgcG9zaXRpb24pO1xuICAgICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICBjb25zdCBsaW5lSW5kZXggPSBNYXRoLm1heCgwLCBsaW5lIC0gMSk7XG4gICAgICBjb25zdCBsaW5lQ29udGVudCA9IGxpbmVzW2xpbmVJbmRleF0gPz8gJyc7XG4gICAgICBjb25zdCBleGNlcnB0ID0gbGluZUNvbnRlbnQgfHwgJyAnO1xuICAgICAgY29uc3QgY2FyZXRPZmZzZXQgPSBsaW5lSW5kZXggPT09IGxpbmUgLSAxID8gTWF0aC5taW4oY29sdW1uIC0gMSwgbGluZUNvbnRlbnQubGVuZ3RoKSA6IDA7XG4gICAgICB0aGlzLnBheWxvYWRKc29uRXJyb3IgPSB7XG4gICAgICAgIGxpbmUsXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgbWVzc2FnZTogdGhpcy5ub3JtYWxpemVKc29uRXJyb3JNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgICBleGNlcnB0LFxuICAgICAgICBjYXJldE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0UG9zaXRpb25Gcm9tSnNvbkVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgbWF0Y2ggPSBtZXNzYWdlLm1hdGNoKC9wb3NpdGlvblxccysoXFxkKykvaSkgfHwgbWVzc2FnZS5tYXRjaCgvYXRcXHMrcG9zaXRpb25cXHMrKFxcZCspL2kpO1xuICAgIHJldHVybiBtYXRjaCA/IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvblRvTGluZUNvbHVtbih0ZXh0OiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB7IGxpbmU6IG51bWJlcjsgY29sdW1uOiBudW1iZXIgfSB7XG4gICAgY29uc3QgYmVmb3JlID0gdGV4dC5zbGljZSgwLCBNYXRoLm1pbihwb3NpdGlvbiwgdGV4dC5sZW5ndGgpKTtcbiAgICBjb25zdCBsaW5lcyA9IGJlZm9yZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIGNvbnN0IGxpbmUgPSBsaW5lcy5sZW5ndGg7XG4gICAgY29uc3QgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA/PyAnJztcbiAgICByZXR1cm4geyBsaW5lLCBjb2x1bW46IGxhc3RMaW5lLmxlbmd0aCArIDEgfTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplSnNvbkVycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdFeHBlY3RpbmcnKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCdleHBlY3RpbmcnKSkgcmV0dXJuIG1lc3NhZ2U7XG4gICAgY29uc3QgdG9rZW5NYXRjaCA9IG1lc3NhZ2UubWF0Y2goL1VuZXhwZWN0ZWQgdG9rZW5cXHMrWydcIl0/KFteJ1wiXSspWydcIl0/L2kpXG4gICAgICB8fCBtZXNzYWdlLm1hdGNoKC91bmV4cGVjdGVkIGNoYXJhY3Rlci4qPyhbXlxcc10rKS9pKTtcbiAgICBjb25zdCB0b2tlbiA9IHRva2VuTWF0Y2ggPyB0b2tlbk1hdGNoWzFdLnRyaW0oKSA6ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiBgRXhwZWN0aW5nICdTVFJJTkcnLCAnTlVNQkVSJywgJ05VTEwnLCAnVFJVRScsICdGQUxTRScsICd7JywgJ1snLCBnb3QgJyR7dG9rZW59J2A7XG4gIH1cblxuICBAVmlld0NoaWxkKCdwYXlsb2FkRWRpdG9yV2l0aExpbmVzUmVmJykgcGF5bG9hZEVkaXRvcldpdGhMaW5lc1JlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdwYXlsb2FkVGV4dGFyZWFSZWYnKSBwYXlsb2FkVGV4dGFyZWFSZWY/OiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSEVBREVSX05BTUVfT1BUSU9OUzogc3RyaW5nW10gPSBbXG4gICAgJ0FjY2VwdCcsXG4gICAgJ0FjY2VwdC1DaGFyc2V0JyxcbiAgICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzJyxcbiAgICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnLFxuICAgICdTY3JpcHRzJyxcbiAgICAnQ2FjaGUtQ29udHJvbCcsXG4gICAgJ0NvbnRlbnQtTUQ1JyxcbiAgICAnQ29udGVudC1MZW5ndGgnLFxuICAgICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJyxcbiAgICAnQ29udGVudC1UeXBlJyxcbiAgICAnQ29va2llJyxcbiAgICAnRGF0ZScsXG4gICAgJ0V4cGVjdCcsXG4gICAgJ0Zyb20nLFxuICAgICdIb3N0JyxcbiAgICAnSWYtTWF0Y2gnLFxuICAgICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICAgJ0lmLU5vbmUtTWF0Y2gnLFxuICAgICdJZi1Vbm1vZGlmaWVkLVNpbmNlJyxcbiAgICAnSWYtUmFuZ2UnLFxuICAgICdLZWVwLUFsaXZlJyxcbiAgICAnTWF4LUZvcndhcmRzJyxcbiAgICAnT3JpZ2luJyxcbiAgICAnUHJhZ21hJyxcbiAgICAnUHJveHktQXV0aG9yaXphdGlvbicsXG4gICAgJ1JhbmdlJyxcbiAgICAnUmVmZXJlcicsXG4gICAgJ1RFJyxcbiAgICAnVHJhaWxlcicsXG4gICAgJ1RyYW5zZmVyLUVuY29kaW5nJyxcbiAgICAnVXBncmFkZScsXG4gICAgJ1VzZXItQWdlbnQnLFxuICAgICdWaWEnLFxuICAgICdXYXJuaW5nJyxcbiAgICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICAgJ1gtRG8tTm90LVRyYWNrJyxcbiAgICAnRE5UJyxcbiAgICAneC1hcGkta2V5JyxcbiAgICAnQ29ubmVjdGlvbicsXG4gIF07XG5cbiAgLyoqIEhlYWRlciBuYW1lIG9wdGlvbnM6IGFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB3aXRoIGlkLCBuYW1lLCB2YWx1ZSwgbGFiZWwgKHBhc3NlZCBmcm9tIHBhcmVudCkuIEZhbGxzIGJhY2sgdG8gYnVpbHQtaW4gbGlzdCB3aGVuIGVtcHR5LiAqL1xuICBASW5wdXQoKSBoZWFkZXJOYW1lT3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdID0gW107XG5cbiAgLyoqIEZvcm0gYXJyYXkgZm9yIGhlYWRlciByb3dzOyBlYWNoIGl0ZW0gaXMgRm9ybUdyb3VwKHsgbmFtZSwgdmFsdWUgfSkgZm9yIGNxYS1keW5hbWljLXNlbGVjdCBhbmQgdmFsdWUgaW5wdXQgKi9cbiAgaGVhZGVyc0Zvcm1BcnJheSE6IEZvcm1BcnJheTtcblxuICAvKiogVHlwZWQgYWNjZXNzb3IgZm9yIHRlbXBsYXRlIChGb3JtQXJyYXkuY29udHJvbHMgaXMgQWJzdHJhY3RDb250cm9sW10pICovXG4gIGdldCBoZWFkZXJSb3dzKCk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gKHRoaXMuaGVhZGVyc0Zvcm1BcnJheT8uY29udHJvbHMgPz8gW10pIGFzIEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgLyoqIENvbmZpZyBmb3IgaGVhZGVyIG5hbWUgZHJvcGRvd24gKHVwZGF0ZWQgd2hlbiBoZWFkZXJOYW1lT3B0aW9ucyBjaGFuZ2VzIHRvIGF2b2lkIG5ldyByZWZlcmVuY2UgZXZlcnkgQ0QpICovXG4gIGhlYWRlck5hbWVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICduYW1lJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBoZWFkZXInLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZSxcbiAgICBvcHRpb25zOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVwZGF0ZUhlYWRlck5hbWVTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlID1cbiAgICAgIHRoaXMuaGVhZGVyTmFtZU9wdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmhlYWRlck5hbWVPcHRpb25zXG4gICAgICAgIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfSEVBREVSX05BTUVfT1BUSU9OUyBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0W10pO1xuICAgIGNvbnN0IGJhc2VPcHRpb25zID0gc291cmNlLm1hcCgoaCkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24oaCkpO1xuICAgIGNvbnN0IGJhc2VWYWx1ZXMgPSBuZXcgU2V0KGJhc2VPcHRpb25zLm1hcCgobykgPT4gU3RyaW5nKG8udmFsdWUgPz8gby5pZCA/PyAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgIGNvbnN0IGN1cnJlbnROYW1lc0Zyb21Gb3JtID0gdGhpcy5nZXRDdXJyZW50SGVhZGVyTmFtZXNGcm9tRm9ybSgpO1xuICAgIGNvbnN0IGV4dHJhT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgY3VycmVudE5hbWVzRnJvbUZvcm0pIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWUudHJpbSgpO1xuICAgICAgaWYgKGtleSAmJiAhYmFzZVZhbHVlcy5oYXMoa2V5KSkge1xuICAgICAgICBiYXNlVmFsdWVzLmFkZChrZXkpO1xuICAgICAgICBleHRyYU9wdGlvbnMucHVzaCh7IGlkOiBrZXksIHZhbHVlOiBrZXksIG5hbWU6IGtleSwgbGFiZWw6IGtleSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IFsuLi5iYXNlT3B0aW9ucywgLi4uZXh0cmFPcHRpb25zXTtcbiAgICB0aGlzLmhlYWRlck5hbWVTZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLmhlYWRlck5hbWVTZWxlY3RDb25maWcsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvKiogQ29sbGVjdHMgZGlzdGluY3Qgbm9uLWVtcHR5IGhlYWRlciBuYW1lcyBjdXJyZW50bHkgaW4gdGhlIGhlYWRlcnMgZm9ybSAoZm9yIGR5bmFtaWMgb3B0aW9ucykuICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudEhlYWRlck5hbWVzRnJvbUZvcm0oKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBpZiAoIXRoaXMuaGVhZGVyc0Zvcm1BcnJheT8uY29udHJvbHM/Lmxlbmd0aCkgcmV0dXJuIG5hbWVzO1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmhlYWRlcnNGb3JtQXJyYXkuY29udHJvbHMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSAoY29udHJvbCBhcyBGb3JtR3JvdXApLmdldCgnbmFtZScpPy52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ciA9IG5hbWUgIT0gbnVsbCA/IFN0cmluZyhuYW1lKS50cmltKCkgOiAnJztcbiAgICAgIGlmIChzdHIgJiYgIXNlZW4uaGFzKHN0cikpIHtcbiAgICAgICAgc2Vlbi5hZGQoc3RyKTtcbiAgICAgICAgbmFtZXMucHVzaChzdHIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmFtZXM7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRIZWFkZXJzOiBBcGlFZGl0SGVhZGVyUm93W10gPSBbXG4gICAgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdHlwZTogJ3N0cmluZycsIHZhbHVlOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgXTtcblxuICAvKiogRm9ybSBhcnJheSBmb3Iga2V5LXZhbHVlIHJvd3MgKEJvZHkgcGF5bG9hZCk7IGVhY2ggaXRlbSBpcyBGb3JtR3JvdXAoeyBrZXksIHZhbHVlIH0pICovXG4gIGtleVZhbHVlRm9ybUFycmF5ITogRm9ybUFycmF5O1xuXG4gIGdldCBrZXlWYWx1ZVJvd3MoKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiAodGhpcy5rZXlWYWx1ZUZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pIGFzIEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgLyoqIEZvcm0gYXJyYXkgZm9yIGtleS10eXBlLXZhbHVlIHJvd3M7IGVhY2ggaXRlbSBpcyBGb3JtR3JvdXAoeyBrZXksIHR5cGUsIHZhbHVlIH0pICovXG4gIGtleVR5cGVWYWx1ZUZvcm1BcnJheSE6IEZvcm1BcnJheTtcblxuICBnZXQga2V5VHlwZVZhbHVlUm93cygpOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuICh0aGlzLmtleVR5cGVWYWx1ZUZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pIGFzIEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgLyoqIEZvcm0gYXJyYXkgZm9yIFBhcmFtcyB0YWIga2V5LXZhbHVlIHJvd3M7IGVhY2ggaXRlbSBpcyBGb3JtR3JvdXAoeyBrZXksIHZhbHVlIH0pICovXG4gIHBhcmFtc0Zvcm1BcnJheSE6IEZvcm1BcnJheTtcblxuICBnZXQgcGFyYW1zUm93cygpOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuICh0aGlzLnBhcmFtc0Zvcm1BcnJheT8uY29udHJvbHMgPz8gW10pIGFzIEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgLyoqIENvbmZpZyBmb3IgVHlwZSBkcm9wZG93biBpbiBrZXktdHlwZS12YWx1ZSByb3dzIChUZXh0LCBGaWxlKSAqL1xuICByZWFkb25seSBrZXlUeXBlVmFsdWVUeXBlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndHlwZScsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXh0JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IGlkOiAndGV4dCcsIHZhbHVlOiAndGV4dCcsIG5hbWU6ICdUZXh0JywgbGFiZWw6ICdUZXh0JyB9LFxuICAgICAgeyBpZDogJ2ZpbGUnLCB2YWx1ZTogJ2ZpbGUnLCBuYW1lOiAnRmlsZScsIGxhYmVsOiAnRmlsZScgfSxcbiAgICBdLFxuICB9O1xuXG4gIC8qKiBGb3JtIGFycmF5IGZvciByZXNwb25zZSBib2R5IHZlcmlmaWNhdGlvbiByb3dzOyBlYWNoIGl0ZW0gaXMgRm9ybUdyb3VwKHsganNvblBhdGgsIHZlcmlmaWNhdGlvbiwgZGF0YVR5cGUsIGV4cGVjdGVkVmFsdWUgfSkgKi9cbiAgdmVyaWZpY2F0aW9uRm9ybUFycmF5ITogRm9ybUFycmF5O1xuXG4gIGdldCB2ZXJpZmljYXRpb25Sb3dzKCk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gKHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkgYXMgRm9ybUdyb3VwW107XG4gIH1cblxuICAvKiogVmVyaWZpY2F0aW9uIG9wdGlvbnM6IGFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyAocGFzc2VkIGZyb20gcGFyZW50KS4gRmFsbHMgYmFjayB0byBidWlsdC1pbiBsaXN0IHdoZW4gZW1wdHkuICovXG4gIEBJbnB1dCgpIHZlcmlmaWNhdGlvbk9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVkVSSUZJQ0FUSU9OX09QVElPTlM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdlcXVhbHMnLCB2YWx1ZTogJ2VxdWFscycsIG5hbWU6ICdFcXVhbHMnLCBsYWJlbDogJ0VxdWFscycgfSxcbiAgICB7IGlkOiAnbm90LWVxdWFsJywgdmFsdWU6ICdub3QtZXF1YWwnLCBuYW1lOiAnTm90IGVxdWFsJywgbGFiZWw6ICdOb3QgZXF1YWwnIH0sXG4gICAgeyBpZDogJ2xlc3MtdGhhbicsIHZhbHVlOiAnbGVzcy10aGFuJywgbmFtZTogJ0xlc3MgdGhhbicsIGxhYmVsOiAnTGVzcyB0aGFuJyB9LFxuICAgIHsgaWQ6ICdncmVhdGVyLXRoYW4nLCB2YWx1ZTogJ2dyZWF0ZXItdGhhbicsIG5hbWU6ICdHcmVhdGVyIHRoYW4nLCBsYWJlbDogJ0dyZWF0ZXIgdGhhbicgfSxcbiAgICB7IGlkOiAnaXMtbnVsbCcsIHZhbHVlOiAnaXMtbnVsbCcsIG5hbWU6ICdJcyBudWxsJywgbGFiZWw6ICdJcyBudWxsJyB9LFxuICAgIHsgaWQ6ICdpcy1ub3QtbnVsbCcsIHZhbHVlOiAnaXMtbm90LW51bGwnLCBuYW1lOiAnSXMgbm90IG51bGwnLCBsYWJlbDogJ0lzIG5vdCBudWxsJyB9LFxuICBdO1xuXG4gIC8qKiBDb25maWcgZm9yIFZlcmlmaWNhdGlvbiBkcm9wZG93biAodXBkYXRlZCB3aGVuIHZlcmlmaWNhdGlvbk9wdGlvbnMgY2hhbmdlcywgbGlrZSBNZXRob2QgZHJvcGRvd24pICovXG4gIHZlcmlmaWNhdGlvblNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3ZlcmlmaWNhdGlvbicsXG4gICAgcGxhY2Vob2xkZXI6ICdFcXVhbHMnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFsuLi5BcGlFZGl0U3RlcENvbXBvbmVudC5ERUZBVUxUX1ZFUklGSUNBVElPTl9PUFRJT05TXSxcbiAgfTtcblxuICBwcml2YXRlIHVwZGF0ZVZlcmlmaWNhdGlvblNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID1cbiAgICAgIHRoaXMudmVyaWZpY2F0aW9uT3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMudmVyaWZpY2F0aW9uT3B0aW9ucy5tYXAoKHYpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LnRvU2VsZWN0T3B0aW9uKHYpKVxuICAgICAgICA6IEFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfVkVSSUZJQ0FUSU9OX09QVElPTlM7XG4gICAgdGhpcy52ZXJpZmljYXRpb25TZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLnZlcmlmaWNhdGlvblNlbGVjdENvbmZpZyxcbiAgICAgIG9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmVyaWZpY2F0aW9uVmFsdWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPVxuICAgICAgdGhpcy52ZXJpZmljYXRpb25PcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy52ZXJpZmljYXRpb25PcHRpb25zXG4gICAgICAgIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfVkVSSUZJQ0FUSU9OX09QVElPTlMgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdKTtcbiAgICByZXR1cm4gc291cmNlXG4gICAgICAubWFwKCh2KSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpKVxuICAgICAgLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+IHYgIT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRWZXJpZmljYXRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZlcmlmaWNhdGlvblZhbHVlcygpO1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IHZhbHVlc1swXSA6ICdlcXVhbHMnO1xuICB9XG5cbiAgLyoqIERhdGEgVHlwZSBvcHRpb25zOiBhcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgKHBhc3NlZCBmcm9tIHBhcmVudCkuIEZhbGxzIGJhY2sgdG8gYnVpbHQtaW4gbGlzdCB3aGVuIGVtcHR5LiAqL1xuICBASW5wdXQoKSB2ZXJpZmljYXRpb25EYXRhVHlwZU9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfREFUQV9UWVBFX09QVElPTlM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdzdHJpbmcnLCB2YWx1ZTogJ3N0cmluZycsIG5hbWU6ICdTdHJpbmcnLCBsYWJlbDogJ1N0cmluZycgfSxcbiAgICB7IGlkOiAnbnVtYmVyJywgdmFsdWU6ICdudW1iZXInLCBuYW1lOiAnTnVtYmVyJywgbGFiZWw6ICdOdW1iZXInIH0sXG4gICAgeyBpZDogJ2Jvb2xlYW4nLCB2YWx1ZTogJ2Jvb2xlYW4nLCBuYW1lOiAnQm9vbGVhbicsIGxhYmVsOiAnQm9vbGVhbicgfSxcbiAgICB7IGlkOiAnYXJyYXknLCB2YWx1ZTogJ2FycmF5JywgbmFtZTogJ0FycmF5JywgbGFiZWw6ICdBcnJheScgfSxcbiAgICB7IGlkOiAnb2JqZWN0JywgdmFsdWU6ICdvYmplY3QnLCBuYW1lOiAnT2JqZWN0JywgbGFiZWw6ICdPYmplY3QnIH0sXG4gIF07XG5cbiAgLyoqIENvbmZpZyBmb3IgRGF0YSBUeXBlIGRyb3Bkb3duICh1cGRhdGVkIHdoZW4gdmVyaWZpY2F0aW9uRGF0YVR5cGVPcHRpb25zIGNoYW5nZXMsIGxpa2UgTWV0aG9kIGRyb3Bkb3duKSAqL1xuICB2ZXJpZmljYXRpb25EYXRhVHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RhdGFUeXBlJyxcbiAgICBwbGFjZWhvbGRlcjogJ1N0cmluZycsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogWy4uLkFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfREFUQV9UWVBFX09QVElPTlNdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlVmVyaWZpY2F0aW9uRGF0YVR5cGVTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICB0aGlzLnZlcmlmaWNhdGlvbkRhdGFUeXBlT3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMudmVyaWZpY2F0aW9uRGF0YVR5cGVPcHRpb25zLm1hcCgoZCkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24oZCkpXG4gICAgICAgIDogQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9EQVRBX1RZUEVfT1BUSU9OUztcbiAgICB0aGlzLnZlcmlmaWNhdGlvbkRhdGFUeXBlU2VsZWN0Q29uZmlnID0ge1xuICAgICAgLi4udGhpcy52ZXJpZmljYXRpb25EYXRhVHlwZVNlbGVjdENvbmZpZyxcbiAgICAgIG9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0YVR5cGVWYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNvdXJjZSA9XG4gICAgICB0aGlzLnZlcmlmaWNhdGlvbkRhdGFUeXBlT3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMudmVyaWZpY2F0aW9uRGF0YVR5cGVPcHRpb25zXG4gICAgICAgIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfREFUQV9UWVBFX09QVElPTlMgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdKTtcbiAgICByZXR1cm4gc291cmNlXG4gICAgICAubWFwKChkKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShkIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpKVxuICAgICAgLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+IHYgIT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHREYXRhVHlwZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0RGF0YVR5cGVWYWx1ZXMoKTtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA+IDAgPyB2YWx1ZXNbMF0gOiAnc3RyaW5nJztcbiAgfVxuXG4gIC8qKiBDb25maWcgZm9yIEV4cGVjdGVkIFZhbHVlIHdoZW4gRGF0YSBUeXBlIGlzIEJvb2xlYW4gKHRydWUvZmFsc2UgZHJvcGRvd24pICovXG4gIHJlYWRvbmx5IHZlcmlmaWNhdGlvbkV4cGVjdGVkVmFsdWVCb29sZWFuU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZXhwZWN0ZWRWYWx1ZScsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgaWQ6ICd0cnVlJywgdmFsdWU6ICd0cnVlJywgbmFtZTogJ3RydWUnLCBsYWJlbDogJ3RydWUnIH0sXG4gICAgICB7IGlkOiAnZmFsc2UnLCB2YWx1ZTogJ2ZhbHNlJywgbmFtZTogJ2ZhbHNlJywgbGFiZWw6ICdmYWxzZScgfSxcbiAgICBdLFxuICB9O1xuXG4gIC8qKiBGb3JtIGFycmF5IGZvciBTdGF0dXMgdGFiIHZlcmlmaWNhdGlvbiByb3dzOyBlYWNoIGl0ZW0gaXMgRm9ybUdyb3VwKHsgdmVyaWZpY2F0aW9uLCBleHBlY3RlZFZhbHVlIH0pICovXG4gIHN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheSE6IEZvcm1BcnJheTtcblxuICBnZXQgc3RhdHVzVmVyaWZpY2F0aW9uUm93cygpOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuICh0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pIGFzIEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgLyoqIENvbmZpZyBmb3IgU3RhdHVzIHRhYiBWZXJpZmljYXRpb24gZHJvcGRvd24gKEVxdWFscywgTm90IGVxdWFsLCBMZXNzIHRoYW4sIEdyZWF0ZXIgdGhhbikgKi9cbiAgLyoqIFN0YXR1cyB0YWIgVmVyaWZpY2F0aW9uIG9wdGlvbnMgKEVxdWFscywgTm90IGVxdWFsLCBldGMuKS4gRmFsbHMgYmFjayB0byBidWlsdC1pbiBsaXN0IHdoZW4gZW1wdHkuICovXG4gIEBJbnB1dCgpIHN0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU1RBVFVTX1ZFUklGSUNBVElPTl9PUFRJT05TOiBTZWxlY3RPcHRpb25bXSA9IFtcbiAgICB7IGlkOiAnZXF1YWxzJywgdmFsdWU6ICdlcXVhbHMnLCBuYW1lOiAnRXF1YWxzJywgbGFiZWw6ICdFcXVhbHMnIH0sXG4gICAgeyBpZDogJ25vdC1lcXVhbCcsIHZhbHVlOiAnbm90LWVxdWFsJywgbmFtZTogJ05vdCBlcXVhbCcsIGxhYmVsOiAnTm90IGVxdWFsJyB9LFxuICAgIHsgaWQ6ICdsZXNzLXRoYW4nLCB2YWx1ZTogJ2xlc3MtdGhhbicsIG5hbWU6ICdMZXNzIHRoYW4nLCBsYWJlbDogJ0xlc3MgdGhhbicgfSxcbiAgICB7IGlkOiAnZ3JlYXRlci10aGFuJywgdmFsdWU6ICdncmVhdGVyLXRoYW4nLCBuYW1lOiAnR3JlYXRlciB0aGFuJywgbGFiZWw6ICdHcmVhdGVyIHRoYW4nIH0sXG4gIF07XG5cbiAgLyoqIENvbmZpZyBmb3IgU3RhdHVzIHRhYiBWZXJpZmljYXRpb24gZHJvcGRvd24gKHVwZGF0ZWQgd2hlbiBzdGF0dXNWZXJpZmljYXRpb25PcHRpb25zIGNoYW5nZXMpLiAqL1xuICBzdGF0dXNWZXJpZmljYXRpb25TZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd2ZXJpZmljYXRpb24nLFxuICAgIHBsYWNlaG9sZGVyOiAnRXF1YWxzJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbLi4uQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9TVEFUVVNfVkVSSUZJQ0FUSU9OX09QVElPTlNdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlU3RhdHVzVmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgdGhpcy5zdGF0dXNWZXJpZmljYXRpb25PcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zdGF0dXNWZXJpZmljYXRpb25PcHRpb25zLm1hcCgobykgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24obykpXG4gICAgICAgIDogQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9TVEFUVVNfVkVSSUZJQ0FUSU9OX09QVElPTlM7XG4gICAgdGhpcy5zdGF0dXNWZXJpZmljYXRpb25TZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLnN0YXR1c1ZlcmlmaWNhdGlvblNlbGVjdENvbmZpZyxcbiAgICAgIG9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdHVzVmVyaWZpY2F0aW9uVmFsdWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPVxuICAgICAgdGhpcy5zdGF0dXNWZXJpZmljYXRpb25PcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zdGF0dXNWZXJpZmljYXRpb25PcHRpb25zXG4gICAgICAgIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfU1RBVFVTX1ZFUklGSUNBVElPTl9PUFRJT05TIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSk7XG4gICAgcmV0dXJuIHNvdXJjZVxuICAgICAgLm1hcCgobykgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUobyBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSlcbiAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB2ICE9IG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0U3RhdHVzVmVyaWZpY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRTdGF0dXNWZXJpZmljYXRpb25WYWx1ZXMoKTtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA+IDAgPyB2YWx1ZXNbMF0gOiAnZXF1YWxzJztcbiAgfVxuXG4gIHJlc3BvbnNlUHJldmlldyA9IGBgO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHJlc3BvbnNlIHByZXZpZXcgc2VjdGlvbiwgdXNlZCB0byBzY3JvbGwgaW50byB2aWV3IGFmdGVyIFNlbmQgUmVxdWVzdCBjb21wbGV0ZXMuICovXG4gIEBWaWV3Q2hpbGQoJ3Jlc3BvbnNlUHJldmlld1JlZicsIHsgc3RhdGljOiBmYWxzZSB9KSByZXNwb25zZVByZXZpZXdSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIG1ldGhvZENoYW5nZXNTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybWF0Q2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBoZWFkZXJOYW1lT3B0aW9uc0NoYW5nZXNTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZW52aXJvbm1lbnRGb3JtQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtZXRob2RGb3JtQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwYXJhbXNGb3JtQXJyYXlDaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIEFkdmFuY2VkIHNldHRpbmdzOiBnZW5lcmljIGFkdmFuY2VkIHZhcmlhYmxlcyBmb3IgdGhpcyBBUEkgc3RlcCAoY2FuIGJlIHByb3ZpZGVkIGJ5IHBhcmVudClcbiAgYWR2YW5jZWRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IGFueVtdID0gW107XG4gIGFkdmFuY2VkVmFyaWFibGVzRm9ybTogRm9ybUFycmF5ID0gbmV3IEZvcm1BcnJheShbXSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseUluaXRpYWxTdGVwKHRoaXMuaW5pdGlhbFN0ZXApO1xuICAgIHRoaXMudXBkYXRlTWV0aG9kU2VsZWN0Q29uZmlnKCk7XG4gICAgdGhpcy51cGRhdGVIZWFkZXJOYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgY29uc3QgZmlyc3RNZXRob2RWYWx1ZSA9IHRoaXMuaHR0cE1ldGhvZE9wdGlvbnM/Lmxlbmd0aFxuICAgICAgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh0aGlzLmh0dHBNZXRob2RPcHRpb25zWzBdKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGVmYXVsdE1ldGhvZCA9IHRoaXMuaW5pdGlhbE1ldGhvZCA/PyBmaXJzdE1ldGhvZFZhbHVlID8/ICdHRVQnO1xuICAgIHRoaXMuY3VycmVudE1ldGhvZFZhbHVlID0gdHlwZW9mIGRlZmF1bHRNZXRob2QgPT09ICdzdHJpbmcnID8gZGVmYXVsdE1ldGhvZCA6IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShkZWZhdWx0TWV0aG9kIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKTtcbiAgICB0aGlzLm1ldGhvZEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG1ldGhvZDogW2RlZmF1bHRNZXRob2RdLFxuICAgIH0pO1xuICAgIGNvbnN0IGZpcnN0VmFsdWUgPSB0aGlzLmVudmlyb25tZW50T3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuZW52aXJvbm1lbnRPcHRpb25zWzBdKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGVmYXVsdEVudiA9IHRoaXMuaW5pdGlhbEVudmlyb25tZW50ID8/IGZpcnN0VmFsdWUgPz8gJ0RldmVsb3BtZW50JztcbiAgICB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlID0gdHlwZW9mIGRlZmF1bHRFbnYgPT09ICdzdHJpbmcnID8gZGVmYXVsdEVudiA6IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShkZWZhdWx0RW52IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKTtcbiAgICB0aGlzLmVudmlyb25tZW50Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZW52aXJvbm1lbnQ6IFtkZWZhdWx0RW52XSxcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUF1dGhUeXBlU2VsZWN0Q29uZmlnKCk7XG4gICAgY29uc3QgZmlyc3RBdXRoVmFsdWUgPSB0aGlzLmdldEF1dGhUeXBlVmFsdWVzKClbMF07XG4gICAgY29uc3QgZGVmYXVsdEF1dGhUeXBlID0gdGhpcy5pbml0aWFsQXV0aFR5cGUgPz8gZmlyc3RBdXRoVmFsdWUgPz8gJ25vLWF1dGgnO1xuICAgIHRoaXMuYXV0aFR5cGVGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBhdXRoVHlwZTogW2RlZmF1bHRBdXRoVHlwZV0sXG4gICAgfSk7XG4gICAgdGhpcy5vYXV0aDJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBncmFudFR5cGU6IFt0aGlzLmluaXRpYWxPQXV0aDI/LmdyYW50VHlwZSA/PyAnY2xpZW50X2NyZWRlbnRpYWxzJ10sXG4gICAgICBhY2Nlc3NUb2tlblVybDogW3RoaXMuaW5pdGlhbE9BdXRoMj8uYWNjZXNzVG9rZW5VcmwgPz8gJyddLFxuICAgICAgY2xpZW50SWQ6IFt0aGlzLmluaXRpYWxPQXV0aDI/LmNsaWVudElkID8/ICcnXSxcbiAgICAgIGNsaWVudFNlY3JldDogW3RoaXMuaW5pdGlhbE9BdXRoMj8uY2xpZW50U2VjcmV0ID8/ICcnXSxcbiAgICAgIHNjb3BlOiBbdGhpcy5pbml0aWFsT0F1dGgyPy5zY29wZSA/PyAnJ10sXG4gICAgICBjbGllbnRBdXRoZW50aWNhdGlvbjogW3RoaXMuaW5pdGlhbE9BdXRoMj8uY2xpZW50QXV0aGVudGljYXRpb24gPz8gJ2Jhc2ljJ10sXG4gICAgfSk7XG4gICAgdGhpcy5lbnZpcm9ubWVudEZvcm1DaGFuZ2VzU3ViID0gdGhpcy5lbnZpcm9ubWVudEZvcm0uZ2V0KCdlbnZpcm9ubWVudCcpPy52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodjogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgcyA9IHYgIT0gbnVsbCAmJiB2ICE9PSAnJyA/ICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpIDogU3RyaW5nKHYpKSA6ICcnO1xuICAgICAgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9IHMgPz8gJyc7XG4gICAgfSk7XG4gICAgdGhpcy5tZXRob2RGb3JtQ2hhbmdlc1N1YiA9IHRoaXMubWV0aG9kRm9ybS5nZXQoJ21ldGhvZCcpPy52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodjogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgcyA9IHYgIT0gbnVsbCAmJiB2ICE9PSAnJyA/ICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpIDogU3RyaW5nKHYpKSA6ICcnO1xuICAgICAgdGhpcy5jdXJyZW50TWV0aG9kVmFsdWUgPSBzID8/ICcnO1xuICAgIH0pO1xuICAgIHRoaXMuYnVpbGRIZWFkZXJzRm9ybUFycmF5KFxuICAgICAgdGhpcy5pbml0aWFsSGVhZGVycyA/PyBbeyBuYW1lOiAnJywgdHlwZTogJ3N0cmluZycsIHZhbHVlOiAnJyB9XVxuICAgICk7XG4gICAgdGhpcy5oZWFkZXJOYW1lT3B0aW9uc0NoYW5nZXNTdWIgPSB0aGlzLmhlYWRlcnNGb3JtQXJyYXk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgICAgdGhpcy5oZWFkZXJzQ2hhbmdlLmVtaXQodGhpcy5oZWFkZXJzKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUhlYWRlck5hbWVTZWxlY3RDb25maWcoKTtcbiAgICB0aGlzLmhlYWRlcnNDaGFuZ2UuZW1pdCh0aGlzLmhlYWRlcnMpO1xuICAgIHRoaXMudXBkYXRlRW52aXJvbm1lbnRTZWxlY3RDb25maWcoKTtcbiAgICB0aGlzLnVwZGF0ZVBheWxvYWRGb3JtYXRTZWxlY3RDb25maWcoKTtcbiAgICBjb25zdCBmaXJzdEZvcm1hdFZhbHVlID0gdGhpcy5nZXRGb3JtYXRWYWx1ZXMoKVswXTtcbiAgICBjb25zdCBkZWZhdWx0Rm9ybWF0ID0gdGhpcy5pbml0aWFsRm9ybWF0ID8/IGZpcnN0Rm9ybWF0VmFsdWUgPz8gJ2pzb24nO1xuICAgIHRoaXMucGF5bG9hZEZvcm1hdEZvcm0gPSB0aGlzLmZiLmdyb3VwKHsgZm9ybWF0OiBbZGVmYXVsdEZvcm1hdF0gfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHBheWxvYWQgdHlwZSBhbmQgdGV4dCBmcm9tIGlucHV0cyB3aGVuIGVkaXRpbmdcbiAgICBpZiAodGhpcy5pbml0aWFsUGF5bG9hZFR5cGUpIHtcbiAgICAgIHRoaXMucGF5bG9hZFR5cGUgPSB0aGlzLmluaXRpYWxQYXlsb2FkVHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5pdGlhbFBheWxvYWRUZXh0ICE9IG51bGwpIHtcbiAgICAgIHRoaXMucGF5bG9hZFRleHQgPSB0aGlzLmluaXRpYWxQYXlsb2FkVGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkS2V5VmFsdWVGb3JtQXJyYXkoKTtcbiAgICB0aGlzLmJ1aWxkS2V5VHlwZVZhbHVlRm9ybUFycmF5KCk7XG4gICAgdGhpcy5idWlsZFBhcmFtc0Zvcm1BcnJheSgpO1xuICAgIHRoaXMucGFyYW1zRm9ybUFycmF5Q2hhbmdlc1N1YiA9IHRoaXMucGFyYW1zRm9ybUFycmF5LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCgpID0+IHRoaXMuc3luY1VybEZyb21QYXJhbXMoKSk7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFVybCAhPSBudWxsICYmIHRoaXMuaW5pdGlhbFVybCAhPT0gJycpIHtcbiAgICAgIHRoaXMuX3VybCA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmRlY29kZVVybEZvckRpc3BsYXkodGhpcy5pbml0aWFsVXJsKTtcbiAgICAgIHRoaXMuc3luY1BhcmFtc0Zyb21VcmwoKTtcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZU5hbWUgZnJvbSBpbml0aWFsVmFyaWFibGVOYW1lXG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhcmlhYmxlTmFtZSAhPSBudWxsICYmIHRoaXMuaW5pdGlhbFZhcmlhYmxlTmFtZSAhPT0gJycpIHtcbiAgICAgIHRoaXMudmFyaWFibGVOYW1lID0gdGhpcy5pbml0aWFsVmFyaWFibGVOYW1lO1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHN1bW1hcnkgZnJvbSBpbml0aWFsU3VtbWFyeSAoc3RlcCBkZXNjcmlwdGlvbilcbiAgICBpZiAodGhpcy5pbml0aWFsU3VtbWFyeSAhPSBudWxsICYmIHRoaXMuaW5pdGlhbFN1bW1hcnkgIT09ICcnKSB7XG4gICAgICB0aGlzLnN1bW1hcnkgPSB0aGlzLmluaXRpYWxTdW1tYXJ5O1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZlcmlmaWNhdGlvblNlbGVjdENvbmZpZygpO1xuICAgIHRoaXMudXBkYXRlVmVyaWZpY2F0aW9uRGF0YVR5cGVTZWxlY3RDb25maWcoKTtcblxuICAgIC8vIEluaXRpYWxpemUgdmVyaWZpY2F0aW9uIHJvd3MgZnJvbSBpbnB1dHMgd2hlbiBwcm92aWRlZDsgb3RoZXJ3aXNlIGJ1aWxkIGRlZmF1bHRzXG4gICAgY29uc3QgYm9keVJvd3MgPVxuICAgICAgdGhpcy5pbml0aWFsUmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9ucyAmJiB0aGlzLmluaXRpYWxSZXNwb25zZUJvZHlWZXJpZmljYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmluaXRpYWxSZXNwb25zZUJvZHlWZXJpZmljYXRpb25zXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuYnVpbGRWZXJpZmljYXRpb25Gb3JtQXJyYXkoYm9keVJvd3MpO1xuXG4gICAgdGhpcy51cGRhdGVTdGF0dXNWZXJpZmljYXRpb25TZWxlY3RDb25maWcoKTtcbiAgICBjb25zdCBzdGF0dXNSb3dzID1cbiAgICAgIHRoaXMuaW5pdGlhbFN0YXR1c1ZlcmlmaWNhdGlvbnMgJiYgdGhpcy5pbml0aWFsU3RhdHVzVmVyaWZpY2F0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5pbml0aWFsU3RhdHVzVmVyaWZpY2F0aW9uc1xuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJ1aWxkU3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5KHN0YXR1c1Jvd3MpO1xuICAgIHRoaXMubWV0aG9kQ2hhbmdlc1N1YiA9IHRoaXMubWV0aG9kRm9ybS5nZXQoJ21ldGhvZCcpPy52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWV0aG9kID0gdmFsdWUgIT0gbnVsbCA/IFN0cmluZyh2YWx1ZSkudG9VcHBlckNhc2UoKSA6ICcnO1xuICAgICAgaWYgKE1FVEhPRFNfV0lUSE9VVF9CT0RZLmluY2x1ZGVzKG1ldGhvZCkgJiYgdGhpcy5hY3RpdmVQYXlsb2FkVGFiICE9PSAnaGVhZGVycycpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVQYXlsb2FkVGFiID0gJ2hlYWRlcnMnO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtYXRDaGFuZ2VzU3ViID0gdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5nZXQoJ2Zvcm1hdCcpPy52YWx1ZUNoYW5nZXM/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlUGF5bG9hZEpzb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRlUGF5bG9hZEpzb24oKTtcblxuICAgIC8vIEluaXRpYWxpemUgYWN0aXZlIHJlc3BvbnNlIHZlcmlmaWNhdGlvbiB0YWIgZnJvbSBpbnB1dCB3aGVuIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuaW5pdGlhbEFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiKSB7XG4gICAgICB0aGlzLmFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiID0gdGhpcy5pbml0aWFsQWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWI7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgYWR2YW5jZWQgc2V0dGluZ3MgZm9ybSBvbmx5IGZyb20gaW5wdXQgdmFyaWFibGVzIChubyBsb2NhbCBpbml0aWFsaXphdGlvbilcbiAgICBpZiAodGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzICYmIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgfVxuXG4gICAgLy8gR3JhcGhRTCBmb3JtICsgaW5pdGlhbCBzdGF0ZS4gSHlkcmF0ZSBmcm9tIGBpbml0aWFsQXBpVHlwZWAgLyBgaW5pdGlhbEdyYXBoUUxgIGlmIHRoZSBwYXJlbnRcbiAgICAvLyBpcyBlZGl0aW5nIGEgR3JhcGhRTCBzdGVwLiBWYXJpYWJsZXMgY29tZSBpbiBhcyBlaXRoZXIgYW4gb2JqZWN0IChwcmVmZXJyZWQpIG9yIGEgSlNPTiBzdHJpbmcg4oCUXG4gICAgLy8gd2UgYWx3YXlzIHN0b3JlIHRoZSBmb3JtIHZhbHVlIGFzIGEgcHJldHR5LXByaW50ZWQgSlNPTiBzdHJpbmcgc28gdGhlIHRleHRhcmVhIHJvdW5kLXRyaXBzIGNsZWFubHkuXG4gICAgdGhpcy5hY3RpdmVBcGlUeXBlID0gdGhpcy5pbml0aWFsQXBpVHlwZSA9PT0gJ2dyYXBocWwnID8gJ2dyYXBocWwnIDogJ3Jlc3QnO1xuICAgIGNvbnN0IGluaXRpYWxRdWVyeSA9IHRoaXMuaW5pdGlhbEdyYXBoUUw/LnF1ZXJ5ID8/ICcnO1xuICAgIGNvbnN0IGluaXRpYWxWYXJzUmF3ID0gdGhpcy5pbml0aWFsR3JhcGhRTD8udmFyaWFibGVzO1xuICAgIGxldCBpbml0aWFsVmFyaWFibGVzU3RyaW5nID0gJyc7XG4gICAgaWYgKGluaXRpYWxWYXJzUmF3ICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFZhcnNSYXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGluaXRpYWxWYXJpYWJsZXNTdHJpbmcgPSBpbml0aWFsVmFyc1JhdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5pdGlhbFZhcmlhYmxlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGluaXRpYWxWYXJzUmF3LCBudWxsLCAyKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgaW5pdGlhbFZhcmlhYmxlc1N0cmluZyA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxPcGVyYXRpb25OYW1lID0gdGhpcy5pbml0aWFsR3JhcGhRTD8ub3BlcmF0aW9uTmFtZSA/PyAnJztcbiAgICB0aGlzLmdyYXBoUUxGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBxdWVyeTogW2luaXRpYWxRdWVyeV0sXG4gICAgICB2YXJpYWJsZXM6IFtpbml0aWFsVmFyaWFibGVzU3RyaW5nXSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IFtpbml0aWFsT3BlcmF0aW9uTmFtZV0sXG4gICAgfSk7XG4gICAgLy8gUmUtdmFsaWRhdGUgYXMgdGhlIHVzZXIgdHlwZXMgc28gaW5saW5lIGVycm9ycyBjbGVhci9yZS1yZW5kZXIgaW4gcmVhbCB0aW1lLlxuICAgIHRoaXMuZ3JhcGhRTEZvcm0uZ2V0KCdxdWVyeScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyYXBoUUxRdWVyeUVycm9yKSB0aGlzLmdyYXBoUUxRdWVyeUVycm9yID0gJyc7XG4gICAgICB0aGlzLnJlY29tcHV0ZUdyYXBoUUxPcGVyYXRpb25XYXJuaW5nKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ncmFwaFFMRm9ybS5nZXQoJ3ZhcmlhYmxlcycpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVHcmFwaFFMVmFyaWFibGVzKGZhbHNlKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyYXBoUUxGb3JtLmdldCgnb3BlcmF0aW9uTmFtZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVjb21wdXRlR3JhcGhRTE9wZXJhdGlvbldhcm5pbmcoKTtcbiAgICB9KTtcbiAgICAvLyBEZWZhdWx0IHRoZSBhY3RpdmUgdGFiIHRvIFwiZ3JhcGhxbFwiIHdoZW4gdGhlIHVzZXIgaXMgZWRpdGluZyBhIEdyYXBoUUwgc3RlcCxcbiAgICAvLyBzbyB0aGUgUXVlcnkgLyBWYXJpYWJsZXMgLyBPcGVyYXRpb24gTmFtZSBmaWVsZHMgYXJlIHZpc2libGUgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHRoaXMuYWN0aXZlQXBpVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnZ3JhcGhxbCc7XG4gICAgfVxuICAgIHRoaXMucmVjb21wdXRlR3JhcGhRTE9wZXJhdGlvbldhcm5pbmcoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwUGF5bG9hZFRleHRhcmVhU2Nyb2xsU3luYygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5tZXRob2RDaGFuZ2VzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9ybWF0Q2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmhlYWRlck5hbWVPcHRpb25zQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVudmlyb25tZW50Rm9ybUNoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5tZXRob2RGb3JtQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnBhcmFtc0Zvcm1BcnJheUNoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKiogU3luYyBsaW5lIG51bWJlcnMgY29sdW1uIHNjcm9sbCB3aXRoIHBheWxvYWQgdGV4dGFyZWEgc2Nyb2xsIChQb3N0bWFuLXN0eWxlKS4gKi9cbiAgcHJpdmF0ZSBzZXR1cFBheWxvYWRUZXh0YXJlYVNjcm9sbFN5bmMoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob3N0ID0gdGhpcy5wYXlsb2FkRWRpdG9yV2l0aExpbmVzUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKCFob3N0KSByZXR1cm47XG4gICAgICBjb25zdCBsaW5lTnVtYmVyc0VsID0gaG9zdC5xdWVyeVNlbGVjdG9yKCcuY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1saW5lLW51bWJlcnMnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBjb25zdCB0ZXh0YXJlYSA9IGhvc3QucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbDtcbiAgICAgIGlmICghbGluZU51bWJlcnNFbCB8fCAhdGV4dGFyZWEpIHJldHVybjtcbiAgICAgIHRleHRhcmVhLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgbGluZU51bWJlcnNFbC5zY3JvbGxUb3AgPSB0ZXh0YXJlYS5zY3JvbGxUb3A7XG4gICAgICB9KTtcbiAgICAgIGxpbmVOdW1iZXJzRWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICB0ZXh0YXJlYS5zY3JvbGxUb3AgPSBsaW5lTnVtYmVyc0VsLnNjcm9sbFRvcDtcbiAgICAgIH0pO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEtleVZhbHVlRm9ybUFycmF5KHJvd3M/OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWwgPSByb3dzID8/IFt7IGtleTogJycsIHZhbHVlOiAnJyB9XTtcbiAgICBjb25zdCBncm91cHMgPSBpbml0aWFsLm1hcCgocikgPT4gdGhpcy5mYi5ncm91cCh7IGtleTogW3Iua2V5XSwgdmFsdWU6IFtyLnZhbHVlXSB9KSk7XG4gICAgdGhpcy5rZXlWYWx1ZUZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoZ3JvdXBzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRLZXlUeXBlVmFsdWVGb3JtQXJyYXkocm93cz86IHsga2V5OiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10pOiB2b2lkIHtcbiAgICBjb25zdCBpbml0aWFsID0gcm93cyA/PyBbeyBrZXk6ICcnLCB0eXBlOiAndGV4dCcsIHZhbHVlOiAnJyB9XTtcbiAgICBjb25zdCBncm91cHMgPSBpbml0aWFsLm1hcCgocikgPT4gdGhpcy5mYi5ncm91cCh7IGtleTogW3Iua2V5XSwgdHlwZTogW3IudHlwZV0sIHZhbHVlOiBbci52YWx1ZV0gfSkpO1xuICAgIHRoaXMua2V5VHlwZVZhbHVlRm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShncm91cHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0Zvcm1BcnJheShyb3dzPzogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10pOiB2b2lkIHtcbiAgICBjb25zdCBpbml0aWFsID0gcm93cyA/PyBbeyBrZXk6ICcnLCB2YWx1ZTogJycgfV07XG4gICAgY29uc3QgZ3JvdXBzID0gaW5pdGlhbC5tYXAoKHIpID0+IHRoaXMuZmIuZ3JvdXAoeyBrZXk6IFtyLmtleV0sIHZhbHVlOiBbci52YWx1ZV0gfSkpO1xuICAgIGlmICh0aGlzLnBhcmFtc0Zvcm1BcnJheSkge1xuICAgICAgdGhpcy5wYXJhbXNGb3JtQXJyYXkuY2xlYXIoKTtcbiAgICAgIGdyb3Vwcy5mb3JFYWNoKChnKSA9PiB0aGlzLnBhcmFtc0Zvcm1BcnJheS5wdXNoKGcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbXNGb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KGdyb3Vwcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgaWYgVVJMIGlzIGEgcGFyYW1ldGVyIHBsYWNlaG9sZGVyIChlLmcuICp8cGFyYW18KTsgbXVzdCBub3QgYmUgcGFyc2VkIHdpdGggVVJMKCkgd2hpY2ggZW5jb2RlcyB8IHRvICU3Qy4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaXNQYXJhbWV0ZXJVcmwodXJsU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXVybFN0ciB8fCB0eXBlb2YgdXJsU3RyICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvKFxcKlxcfFtcXHctXStcXHwoXFwqKT98XFwkXFx8W1xcdy1dK1xcfChcXCopP3xAXFx8W1xcdy1dK1xcfChcXCopP3xcXCRcXHtbXn1dK1xcfSkvLnRlc3QodXJsU3RyLnRyaW0oKSk7XG4gIH1cblxuICAvKiogRGVjb2RlIFVSTCBmb3IgZGlzcGxheS9wYXlsb2FkOiBzdHJpcCAvKiBwcmVmaXggYW5kIGRlY29kZSAlN0MgdG8gfCBzbyAqfHBhcmFtfCBzaG93cyBjb3JyZWN0bHkuICovXG4gIHByaXZhdGUgc3RhdGljIGRlY29kZVVybEZvckRpc3BsYXkocmF3OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgbGV0IHMgPSByYXcudHJpbSgpO1xuICAgIGlmICghcykgcmV0dXJuICcnO1xuICAgIGlmIChzLnN0YXJ0c1dpdGgoJy8qJykpIHMgPSBzLnNsaWNlKDIpLnRyaW0oKTtcbiAgICBpZiAocy5pbmNsdWRlcygnJTdDJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBkZWNvZGVVUklDb21wb25lbnQocyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogbGVhdmUgYXMtaXMgKi9cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICAvKiogUGFyc2UgVVJMIGludG8gYmFzZSAod2l0aG91dCBxdWVyeS9mcmFnbWVudCkgYW5kIHF1ZXJ5IGtleS12YWx1ZSBwYWlycy4gUHJlc2VydmVzIHJlbGF0aXZlIFVSTHMgYW5kIHBhcmFtZXRlciBwbGFjZWhvbGRlcnMuICovXG4gIHByaXZhdGUgcGFyc2VRdWVyeVBhcmFtc0Zyb21VcmwodXJsU3RyOiBzdHJpbmcpOiB7IGJhc2VVcmw6IHN0cmluZzsgcm93czogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gfSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHVybFN0cj8udHJpbSgpID8/ICcnO1xuICAgIGNvbnN0IGVtcHR5ID0geyBiYXNlVXJsOiB0cmltbWVkIHx8IHVybFN0ciwgcm93czogW3sga2V5OiAnJywgdmFsdWU6ICcnIH1dIH07XG4gICAgaWYgKCF0cmltbWVkKSByZXR1cm4gZW1wdHk7XG4gICAgaWYgKEFwaUVkaXRTdGVwQ29tcG9uZW50LmlzUGFyYW1ldGVyVXJsKHVybFN0cikpIHJldHVybiBlbXB0eTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNBYnNvbHV0ZSA9IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QodHJpbW1lZCk7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVybFN0ciwgJ2h0dHA6Ly9sb2NhbGhvc3QnKTtcbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBpc0Fic29sdXRlID8gdXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSA6IHVybC5wYXRobmFtZTtcbiAgICAgIGNvbnN0IHJvd3M6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcm93cy5wdXNoKHsga2V5LCB2YWx1ZSB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByb3dzLnB1c2goeyBrZXk6ICcnLCB2YWx1ZTogJycgfSk7XG4gICAgICByZXR1cm4geyBiYXNlVXJsLCByb3dzIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCBiYXNlIFVSTCAod2l0aG91dCBxdWVyeS9mcmFnbWVudCkgZm9yIGJ1aWxkaW5nIFVSTCBmcm9tIHBhcmFtcy4gUHJlc2VydmVzIHJlbGF0aXZlIFVSTHMgYW5kIHBhcmFtZXRlciBwbGFjZWhvbGRlcnMuICovXG4gIHByaXZhdGUgZ2V0QmFzZVVybCh1cmxTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmxTdHIgfHwgIXVybFN0ci50cmltKCkpIHJldHVybiB1cmxTdHI7XG4gICAgaWYgKEFwaUVkaXRTdGVwQ29tcG9uZW50LmlzUGFyYW1ldGVyVXJsKHVybFN0cikpIHJldHVybiB1cmxTdHIudHJpbSgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0Fic29sdXRlID0gL15odHRwcz86XFwvXFwvL2kudGVzdCh1cmxTdHIudHJpbSgpKTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsU3RyLCAnaHR0cDovL2xvY2FsaG9zdCcpO1xuICAgICAgcmV0dXJuIGlzQWJzb2x1dGUgPyB1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lIDogdXJsLnBhdGhuYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVybFN0cjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwYXlsb2FkIGZvcm1hdCBkcm9wZG93biB1c2luZyB0aGUgQ29udGVudC1UeXBlIGhlYWRlciBmaXJzdCwgdGhlblxuICAgKiBmYWxsIGJhY2sgdG8gaW5zcGVjdGluZyB0aGUgYm9keSBjb250ZW50IChKU09OIGJyYWNlcywgWE1MIHRhZ3MsIEhUTUwgZG9jdHlwZSkuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5Qm9keUZvcm1hdChib2R5OiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXRWYWx1ZXMgPSB0aGlzLmdldEZvcm1hdFZhbHVlcygpO1xuICAgIGlmICghdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybSB8fCBmb3JtYXRWYWx1ZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY3QgPSAoY29udGVudFR5cGUgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgc2V0Rm10ID0gKGZtdDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZm9ybWF0VmFsdWVzLmluY2x1ZGVzKGZtdCkpIHRoaXMucGF5bG9hZEZvcm1hdEZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogZm10IH0pO1xuICAgIH07XG4gICAgLy8gQ29udGVudC1UeXBlIHRha2VzIHByaW9yaXR5XG4gICAgaWYgKGN0LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykgfHwgY3QuaW5jbHVkZXMoJ3RleHQvanNvbicpKSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0Rm10KCdqc29uJyk7XG4gICAgaWYgKGN0LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi94bWwnKSB8fCBjdC5pbmNsdWRlcygndGV4dC94bWwnKSB8fCBjdC5pbmNsdWRlcygneGh0bWwnKSkgcmV0dXJuIHNldEZtdCgneG1sJyk7XG4gICAgaWYgKGN0LmluY2x1ZGVzKCd0ZXh0L2h0bWwnKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGbXQoJ2h0bWwnKTtcbiAgICBpZiAoY3QuaW5jbHVkZXMoJ3RleHQvcGxhaW4nKSB8fCBjdC5pbmNsdWRlcygndGV4dC9jc3YnKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0Rm10KCd0ZXh0Jyk7XG4gICAgLy8gRmFsbCBiYWNrIHRvIGJvZHktY29udGVudCBpbnNwZWN0aW9uXG4gICAgY29uc3QgdCA9IChib2R5ID8/ICcnKS50cmltKCk7XG4gICAgaWYgKCh0LnN0YXJ0c1dpdGgoJ3snKSAmJiB0LmVuZHNXaXRoKCd9JykpIHx8ICh0LnN0YXJ0c1dpdGgoJ1snKSAmJiB0LmVuZHNXaXRoKCddJykpKSAgcmV0dXJuIHNldEZtdCgnanNvbicpO1xuICAgIGlmICh0LnN0YXJ0c1dpdGgoJzw/eG1sJykgfHwgKHQuc3RhcnRzV2l0aCgnPCcpICYmICF0LnN0YXJ0c1dpdGgoJzwhJykgJiYgIXQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCc8IWRvY3R5cGUnKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGbXQoJ3htbCcpO1xuICAgIGlmICh0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnPCFkb2N0eXBlIGh0bWwnKSB8fCB0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnPGh0bWwnKSkgcmV0dXJuIHNldEZtdCgnaHRtbCcpO1xuICB9XG5cbiAgLyoqIFBhcnNlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBib2R5IChrZXk9dmFsdWUmLi4uKSBpbnRvIGtleS12YWx1ZSByb3dzLiAqL1xuICBwcml2YXRlIHBhcnNlRm9ybVVybEVuY29kZWRCb2R5KGJvZHk6IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICBjb25zdCB0cmltbWVkID0gKGJvZHkgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0cmltbWVkKTtcbiAgICAgIGNvbnN0IHJvd3M6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gICAgICBwYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gcm93cy5wdXNoKHsga2V5LCB2YWx1ZSB9KSk7XG4gICAgICByZXR1cm4gcm93cztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgZm9ybSBib2R5IGhhcyBhIHNpbmdsZSBrZXkgd2hvc2UgdmFsdWUgaXMgVVJMLWRlY29kZWQgSlNPTiwgcmV0dXJuIGl0IHByZXR0eS1wcmludGVkIGZvciBSYXcgYm9keS5cbiAgICogT3RoZXJ3aXNlIHJldHVybiBudWxsIChjYWxsZXIga2VlcHMgeC13d3ctZm9ybS11cmxlbmNvZGVkIHZpZXcpLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnlGb3JtQm9keVZhbHVlQXNSYXdKc29uKHJvd3M6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHJvd3MubGVuZ3RoICE9PSAxIHx8ICFyb3dzWzBdLnZhbHVlPy50cmltKCkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHZhbHVlID0gcm93c1swXS52YWx1ZS50cmltKCk7XG4gICAgaWYgKCEodmFsdWUuc3RhcnRzV2l0aCgneycpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSkpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwYXJzZWQsIG51bGwsIDIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFVwZGF0ZSBQYXJhbXMgdGFibGUgZnJvbSBjdXJyZW50IFVSTCBxdWVyeSBzdHJpbmcgKFBvc3RtYW4tc3R5bGUpLiAqL1xuICBwcml2YXRlIHN5bmNQYXJhbXNGcm9tVXJsKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgYmFzZVVybDogX2IsIHJvd3MgfSA9IHRoaXMucGFyc2VRdWVyeVBhcmFtc0Zyb21VcmwodGhpcy5fdXJsKTtcbiAgICB0aGlzLmJ1aWxkUGFyYW1zRm9ybUFycmF5KHJvd3MpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBVUkwgcXVlcnkgc3RyaW5nIGZyb20gUGFyYW1zIHRhYmxlIChQb3N0bWFuLXN0eWxlKS4gKi9cbiAgcHJpdmF0ZSBzeW5jVXJsRnJvbVBhcmFtcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYXJhbXNTeW5jaW5nRnJvbVVybCB8fCAhdGhpcy5wYXJhbXNGb3JtQXJyYXkpIHJldHVybjtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5nZXRCYXNlVXJsKHRoaXMuX3VybCk7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLnBhcmFtc0Zvcm1BcnJheS5jb250cm9scykge1xuICAgICAgY29uc3Qga2V5ID0gKChjIGFzIEZvcm1Hcm91cCkuZ2V0KCdrZXknKT8udmFsdWUgPz8gJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZhbHVlJyk/LnZhbHVlID8/ICcnO1xuICAgICAgaWYgKGtleSAhPT0gJycpIHBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbmV3VXJsID0gcXVlcnlTdHJpbmcgPyBgJHtiYXNlVXJsfT8ke3F1ZXJ5U3RyaW5nfWAgOiBiYXNlVXJsO1xuICAgIGlmICh0aGlzLl91cmwgIT09IG5ld1VybCkge1xuICAgICAgdGhpcy5fdXJsID0gbmV3VXJsO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZlcmlmaWNhdGlvbkZvcm1BcnJheShyb3dzPzogeyBqc29uUGF0aDogc3RyaW5nOyB2ZXJpZmljYXRpb246IHN0cmluZzsgZGF0YVR5cGU6IHN0cmluZzsgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRWZXJpZmljYXRpb24gPSB0aGlzLmdldERlZmF1bHRWZXJpZmljYXRpb24oKTtcbiAgICBjb25zdCBkZWZhdWx0RGF0YVR5cGUgPSB0aGlzLmdldERlZmF1bHREYXRhVHlwZSgpO1xuICAgIGNvbnN0IGluaXRpYWwgPSByb3dzID8/IFt7IGpzb25QYXRoOiAnJywgdmVyaWZpY2F0aW9uOiBkZWZhdWx0VmVyaWZpY2F0aW9uLCBkYXRhVHlwZTogZGVmYXVsdERhdGFUeXBlLCBleHBlY3RlZFZhbHVlOiAnJyB9XTtcbiAgICBjb25zdCBncm91cHMgPSBpbml0aWFsLm1hcCgocikgPT5cbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBqc29uUGF0aDogW3IuanNvblBhdGhdLFxuICAgICAgICB2ZXJpZmljYXRpb246IFtyLnZlcmlmaWNhdGlvbl0sXG4gICAgICAgIGRhdGFUeXBlOiBbci5kYXRhVHlwZV0sXG4gICAgICAgIGV4cGVjdGVkVmFsdWU6IFtyLmV4cGVjdGVkVmFsdWVdLFxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShncm91cHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheShyb3dzPzogeyB2ZXJpZmljYXRpb246IHN0cmluZzsgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRWZXJpZmljYXRpb24gPSB0aGlzLmdldERlZmF1bHRTdGF0dXNWZXJpZmljYXRpb24oKTtcbiAgICBjb25zdCBpbml0aWFsID0gcm93cyA/PyBbeyB2ZXJpZmljYXRpb246IGRlZmF1bHRWZXJpZmljYXRpb24sIGV4cGVjdGVkVmFsdWU6ICcnIH1dO1xuICAgIGNvbnN0IGdyb3VwcyA9IGluaXRpYWwubWFwKChyKSA9PlxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIHZlcmlmaWNhdGlvbjogW3IudmVyaWZpY2F0aW9uXSxcbiAgICAgICAgZXhwZWN0ZWRWYWx1ZTogW3IuZXhwZWN0ZWRWYWx1ZV0sXG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KGdyb3Vwcyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSGVhZGVyc0Zvcm1BcnJheShyb3dzOiBBcGlFZGl0SGVhZGVyUm93W10pOiB2b2lkIHtcbiAgICBjb25zdCBncm91cHMgPSByb3dzLm1hcCgoaCkgPT5cbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbaC5uYW1lXSxcbiAgICAgICAgdmFsdWU6IFtoLnZhbHVlXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBpZiAodGhpcy5oZWFkZXJzRm9ybUFycmF5KSB7XG4gICAgICB0aGlzLmhlYWRlcnNGb3JtQXJyYXkuY2xlYXIoKTtcbiAgICAgIGdyb3Vwcy5mb3JFYWNoKChnKSA9PiB0aGlzLmhlYWRlcnNGb3JtQXJyYXkucHVzaChnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoZ3JvdXBzKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzZXQgYWxsIHRocmVlIHN0ZXBzIGFuZCBhbGwgZW50ZXJlZCBkYXRhIHRvIGluaXRpYWwvZGVmYXVsdCBzdGF0ZS4gVXNlZCB3aGVuIHVzZXIgY2FuY2VscyBvbiBzdGVwIDEuICovXG4gIHByaXZhdGUgcmVzZXRBbGxTdGVwc0FuZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDE7XG5cbiAgICBjb25zdCBmaXJzdE1ldGhvZFZhbHVlID0gdGhpcy5odHRwTWV0aG9kT3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkZWZhdWx0TWV0aG9kID0gdGhpcy5pbml0aWFsTWV0aG9kID8/IGZpcnN0TWV0aG9kVmFsdWUgPz8gJ0dFVCc7XG4gICAgY29uc3QgbWV0aG9kVmFsID0gdHlwZW9mIGRlZmF1bHRNZXRob2QgPT09ICdzdHJpbmcnID8gZGVmYXVsdE1ldGhvZCA6IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShkZWZhdWx0TWV0aG9kIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKTtcbiAgICB0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSA9IG1ldGhvZFZhbCA/PyAnJztcbiAgICBpZiAodGhpcy5tZXRob2RGb3JtKSB0aGlzLm1ldGhvZEZvcm0ucGF0Y2hWYWx1ZSh7IG1ldGhvZDogZGVmYXVsdE1ldGhvZCB9KTtcblxuICAgIGNvbnN0IGZpcnN0RW52VmFsdWUgPSB0aGlzLmVudmlyb25tZW50T3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuZW52aXJvbm1lbnRPcHRpb25zWzBdKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGVmYXVsdEVudiA9IHRoaXMuaW5pdGlhbEVudmlyb25tZW50ID8/IGZpcnN0RW52VmFsdWUgPz8gJ0RldmVsb3BtZW50JztcbiAgICBjb25zdCBlbnZWYWwgPSB0eXBlb2YgZGVmYXVsdEVudiA9PT0gJ3N0cmluZycgPyBkZWZhdWx0RW52IDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGRlZmF1bHRFbnYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpO1xuICAgIHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgPSBlbnZWYWwgPz8gJyc7XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRGb3JtKSB0aGlzLmVudmlyb25tZW50Rm9ybS5wYXRjaFZhbHVlKHsgZW52aXJvbm1lbnQ6IGRlZmF1bHRFbnYgfSk7XG5cbiAgICB0aGlzLnVybCA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmRlY29kZVVybEZvckRpc3BsYXkodGhpcy5pbml0aWFsVXJsID8/ICcnKSB8fCAnJztcbiAgICB0aGlzLmJ1aWxkSGVhZGVyc0Zvcm1BcnJheSh0aGlzLmluaXRpYWxIZWFkZXJzID8/IFt7IG5hbWU6ICcnLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnIH1dKTtcbiAgICB0aGlzLnVwZGF0ZUhlYWRlck5hbWVTZWxlY3RDb25maWcoKTtcbiAgICB0aGlzLmhlYWRlcnNDaGFuZ2UuZW1pdCh0aGlzLmhlYWRlcnMpO1xuXG4gICAgdGhpcy5ib2R5VmlldyA9ICdoZWFkZXJzJztcbiAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnaGVhZGVycyc7XG4gICAgdGhpcy5wYXlsb2FkVHlwZSA9ICdyYXcnO1xuICAgIHRoaXMucGF5bG9hZFRleHQgPSAnJztcbiAgICB0aGlzLnBheWxvYWRKc29uRXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IGRlZmF1bHRGb3JtYXQgPSB0aGlzLmluaXRpYWxGb3JtYXQgPz8gdGhpcy5nZXRGb3JtYXRWYWx1ZXMoKVswXSA/PyAnanNvbic7XG4gICAgaWYgKHRoaXMucGF5bG9hZEZvcm1hdEZvcm0pIHRoaXMucGF5bG9hZEZvcm1hdEZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogZGVmYXVsdEZvcm1hdCB9KTtcbiAgICB0aGlzLmJ1aWxkS2V5VmFsdWVGb3JtQXJyYXkoKTtcbiAgICB0aGlzLmJ1aWxkS2V5VHlwZVZhbHVlRm9ybUFycmF5KCk7XG4gICAgdGhpcy5idWlsZFBhcmFtc0Zvcm1BcnJheSgpO1xuICAgIHRoaXMuaW1wb3J0Q3VybENvbnRyb2wuc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy52YXJpYWJsZU5hbWUgPSAnJztcbiAgICB0aGlzLnZhcmlhYmxlTmFtZUVycm9yID0gJyc7XG4gICAgdGhpcy5zdW1tYXJ5ID0gdGhpcy5pbml0aWFsU3VtbWFyeSA/PyAnJztcblxuICAgIHRoaXMuYnVpbGRWZXJpZmljYXRpb25Gb3JtQXJyYXkoKTtcbiAgICB0aGlzLmJ1aWxkU3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5KCk7XG4gICAgdGhpcy5hY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYiA9ICdyZXNwb25zZS1ib2R5JztcblxuICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVyOiBzaG93IGltcG9ydCBjVVJMIHBhbmVsIChjYWxsZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkltcG9ydCBBUEkgY1VSTFwiKS4gUmVzZXRzIHRleHRhcmVhIHNvIGl0IGlzIGNsZWFyZWQgZWFjaCB0aW1lLiAqL1xuICBvcGVuSW1wb3J0Q3VybFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaW1wb3J0Q3VybENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIHRoaXMuYm9keVZpZXcgPSAnaW1wb3J0LWN1cmwnO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBSZXNldCBVUkwsIG1ldGhvZCwgaGVhZGVycywgYm9keSwgYW5kIHBhcmFtcyB0byBlbXB0eS9kZWZhdWx0IGJlZm9yZSBhcHBseWluZyBpbXBvcnRlZCBjVVJMLiAqL1xuICBwcml2YXRlIHJlc2V0UmVxdWVzdEZpZWxkc0JlZm9yZUN1cmxJbXBvcnQoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RNZXRob2RWYWx1ZSA9IHRoaXMuaHR0cE1ldGhvZE9wdGlvbnM/Lmxlbmd0aFxuICAgICAgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh0aGlzLmh0dHBNZXRob2RPcHRpb25zWzBdKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGVmYXVsdE1ldGhvZCA9IHRoaXMuaW5pdGlhbE1ldGhvZCA/PyBmaXJzdE1ldGhvZFZhbHVlID8/ICdHRVQnO1xuICAgIHRoaXMuc2VsZWN0ZWRNZXRob2QgPSB0eXBlb2YgZGVmYXVsdE1ldGhvZCA9PT0gJ3N0cmluZycgPyBkZWZhdWx0TWV0aG9kIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGRlZmF1bHRNZXRob2QgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpID8/ICdHRVQnO1xuICAgIHRoaXMuY3VycmVudE1ldGhvZFZhbHVlID0gdGhpcy5zZWxlY3RlZE1ldGhvZDtcbiAgICBpZiAodGhpcy5tZXRob2RGb3JtKSB0aGlzLm1ldGhvZEZvcm0ucGF0Y2hWYWx1ZSh7IG1ldGhvZDogZGVmYXVsdE1ldGhvZCB9KTtcblxuICAgIHRoaXMudXJsID0gJyc7XG5cbiAgICAvLyBSZXNldCBhdXRoIHNvIGEgcHJldmlvdXMgQmVhcmVyIHRva2VuIGRvZXNuJ3QgcGVyc2lzdCB3aGVuIHJlLWltcG9ydGluZ1xuICAgIGNvbnN0IGZpcnN0QXV0aFZhbHVlID0gdGhpcy5nZXRBdXRoVHlwZVZhbHVlcygpWzBdID8/ICduby1hdXRoJztcbiAgICBpZiAodGhpcy5hdXRoVHlwZUZvcm0pIHRoaXMuYXV0aFR5cGVGb3JtLnBhdGNoVmFsdWUoeyBhdXRoVHlwZTogZmlyc3RBdXRoVmFsdWUgfSk7XG4gICAgdGhpcy5iZWFyZXJUb2tlbiA9ICcnO1xuXG4gICAgdGhpcy5idWlsZEhlYWRlcnNGb3JtQXJyYXkoW3sgbmFtZTogJycsIHR5cGU6ICdzdHJpbmcnLCB2YWx1ZTogJycgfV0pO1xuICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIHRoaXMuaGVhZGVyc0NoYW5nZS5lbWl0KHRoaXMuaGVhZGVycyk7XG5cbiAgICB0aGlzLnBheWxvYWRUeXBlID0gJ3Jhdyc7XG4gICAgdGhpcy5wYXlsb2FkVGV4dCA9ICcnO1xuICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IG51bGw7XG4gICAgY29uc3QgZGVmYXVsdEZvcm1hdCA9IHRoaXMuaW5pdGlhbEZvcm1hdCA/PyB0aGlzLmdldEZvcm1hdFZhbHVlcygpWzBdID8/ICdqc29uJztcbiAgICBpZiAodGhpcy5wYXlsb2FkRm9ybWF0Rm9ybSkgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBkZWZhdWx0Rm9ybWF0IH0pO1xuICAgIHRoaXMuYnVpbGRLZXlWYWx1ZUZvcm1BcnJheShbeyBrZXk6ICcnLCB2YWx1ZTogJycgfV0pO1xuICAgIHRoaXMuYnVpbGRLZXlUeXBlVmFsdWVGb3JtQXJyYXkoW3sga2V5OiAnJywgdHlwZTogJ3RleHQnLCB2YWx1ZTogJycgfV0pO1xuICAgIHRoaXMuYnVpbGRQYXJhbXNGb3JtQXJyYXkoW3sga2V5OiAnJywgdmFsdWU6ICcnIH1dKTtcblxuICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVyOiBwYXJzZSBjVVJMIGZyb20gY29udHJvbCwgYmluZCB0byBmb3JtIGZpZWxkcywgZW1pdCBhbmQgY2xvc2UgcGFuZWwuICovXG4gIG9uSW1wb3J0Q3VybENvbmZpcm0oKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmltcG9ydEN1cmxDb250cm9sLnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGN1cmxTdHIgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcbiAgICB0aGlzLmltcG9ydEN1cmwuZW1pdChjdXJsU3RyKTtcblxuICAgIHRoaXMucmVzZXRSZXF1ZXN0RmllbGRzQmVmb3JlQ3VybEltcG9ydCgpO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VDdXJsKGN1cmxTdHIpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIC8vIOKUgOKUgCBNZXRob2Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBjb25zdCBtZXRob2RWYWx1ZSA9IHBhcnNlZC5tZXRob2QgJiYgdGhpcy5nZXRNZXRob2RWYWx1ZXMoKS5pbmNsdWRlcyhwYXJzZWQubWV0aG9kKVxuICAgICAgICA/IHBhcnNlZC5tZXRob2RcbiAgICAgICAgOiBwYXJzZWQubWV0aG9kIHx8ICdHRVQnO1xuICAgICAgdGhpcy5zZWxlY3RlZE1ldGhvZCA9IG1ldGhvZFZhbHVlO1xuICAgICAgdGhpcy5jdXJyZW50TWV0aG9kVmFsdWUgPSBtZXRob2RWYWx1ZTtcblxuICAgICAgLy8g4pSA4pSAIFVSTCAoYWxzbyBzeW5jcyBQYXJhbXMgdGFiIGZyb20gcXVlcnkgc3RyaW5nKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIGlmIChwYXJzZWQudXJsKSB0aGlzLnVybCA9IHBhcnNlZC51cmw7XG5cbiAgICAgIC8vIOKUgOKUgCBBdXRob3JpemF0aW9uIGhlYWRlciDihpIgQmVhcmVyIFRva2VuIC8gYXV0aCB0eXBlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgbGV0IGhlYWRlclJvd3M6IEFwaUVkaXRIZWFkZXJSb3dbXSA9IHBhcnNlZC5oZWFkZXJzO1xuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGhlYWRlclJvd3MuZmluZChoID0+IGgubmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYXV0aG9yaXphdGlvbicpO1xuICAgICAgaWYgKGF1dGhIZWFkZXI/LnZhbHVlPy50cmltKCkpIHtcbiAgICAgICAgY29uc3QgYmVhcmVyTWF0Y2ggPSAvXkJlYXJlclxccysoLispJC9pLmV4ZWMoYXV0aEhlYWRlci52YWx1ZS50cmltKCkpO1xuICAgICAgICBpZiAoYmVhcmVyTWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGJlYXJlck1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICBpZiAodGhpcy5nZXRBdXRoVHlwZVZhbHVlcygpLmluY2x1ZGVzKCdiZWFyZXInKSAmJiB0aGlzLmF1dGhUeXBlRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5hdXRoVHlwZUZvcm0ucGF0Y2hWYWx1ZSh7IGF1dGhUeXBlOiAnYmVhcmVyJyB9KTtcbiAgICAgICAgICAgIHRoaXMuYmVhcmVyVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIEF1dGhvcml6YXRpb24gZnJvbSBoZWFkZXJzIHRhYmxlIChpdCBsaXZlcyBpbiB0aGUgQXV0aCB0YWIpXG4gICAgICAgICAgaGVhZGVyUm93cyA9IGhlYWRlclJvd3MuZmlsdGVyKGggPT4gaC5uYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdhdXRob3JpemF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIEhlYWRlcnMgdGFibGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBoZWFkZXJSb3dzID0gaGVhZGVyUm93cy5sZW5ndGggPiAwID8gaGVhZGVyUm93cyA6IFt7IG5hbWU6ICcnLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnIH1dO1xuICAgICAgdGhpcy5idWlsZEhlYWRlcnNGb3JtQXJyYXkoaGVhZGVyUm93cyk7XG4gICAgICB0aGlzLnVwZGF0ZUhlYWRlck5hbWVTZWxlY3RDb25maWcoKTtcbiAgICAgIHRoaXMuaGVhZGVyc0NoYW5nZS5lbWl0KHRoaXMuaGVhZGVycyk7XG5cbiAgICAgIC8vIOKUgOKUgCBEZXRlcm1pbmUgQ29udGVudC1UeXBlIGZvciBib2R5L2Zvcm1hdCBkZWNpc2lvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZC5oZWFkZXJzXG4gICAgICAgIC5maW5kKGggPT4gaC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKVxuICAgICAgICA/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID8/ICcnO1xuXG4gICAgICAvLyDilIDilIAgQm9keSAvIEZvcm0tZGF0YSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIGxldCB0YWJUb0FjdGl2YXRlOiBBcGlFZGl0UGF5bG9hZFRhYiA9ICdoZWFkZXJzJztcblxuICAgICAgaWYgKHBhcnNlZC5mb3JtRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIE11bHRpcGFydCBmb3JtLWRhdGEgKC1GIC8gLS1mb3JtIGVudHJpZXMpXG4gICAgICAgIHRoaXMucGF5bG9hZFR5cGUgPSAnZm9ybS1kYXRhJztcbiAgICAgICAgdGhpcy5idWlsZEtleVR5cGVWYWx1ZUZvcm1BcnJheShcbiAgICAgICAgICBwYXJzZWQuZm9ybURhdGEubWFwKGUgPT4gKHsga2V5OiBlLmtleSwgdHlwZTogZS50eXBlLCB2YWx1ZTogZS52YWx1ZSB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wYXlsb2FkVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnBheWxvYWRKc29uRXJyb3IgPSBudWxsO1xuICAgICAgICB0YWJUb0FjdGl2YXRlID0gJ2JvZHknO1xuXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IGlzRm9ybVVybEVuY29kZWQgPSBjb250ZW50VHlwZS5pbmNsdWRlcygnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG5cbiAgICAgICAgaWYgKGlzRm9ybVVybEVuY29kZWQpIHtcbiAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5wYXJzZUZvcm1VcmxFbmNvZGVkQm9keShwYXJzZWQuYm9keSk7XG4gICAgICAgICAgdGhpcy5idWlsZEtleVZhbHVlRm9ybUFycmF5KHJvd3MubGVuZ3RoID4gMCA/IHJvd3MgOiBbeyBrZXk6ICcnLCB2YWx1ZTogJycgfV0pO1xuICAgICAgICAgIGNvbnN0IGRlY29kZWRBc0pzb24gPSB0aGlzLnRyeUZvcm1Cb2R5VmFsdWVBc1Jhd0pzb24ocm93cyk7XG4gICAgICAgICAgaWYgKGRlY29kZWRBc0pzb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5wYXlsb2FkVHlwZSA9ICdyYXcnO1xuICAgICAgICAgICAgdGhpcy5wYXlsb2FkVGV4dCA9IGRlY29kZWRBc0pzb247XG4gICAgICAgICAgICBpZiAodGhpcy5wYXlsb2FkRm9ybWF0Rm9ybSkgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiAnanNvbicgfSk7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGF5bG9hZEpzb24oKTtcbiAgICAgICAgICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGF5bG9hZFR5cGUgPSAneC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgICAgICAgICAgIHRoaXMucGF5bG9hZFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGF5bG9hZFRleHQgPSBwYXJzZWQuYm9keTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlUGF5bG9hZEpzb24oKTtcbiAgICAgICAgICB0aGlzLmFwcGx5Qm9keUZvcm1hdChwYXJzZWQuYm9keSwgY29udGVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRhYlRvQWN0aXZhdGUgPSAnYm9keSc7XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBBdXRvLXN3aXRjaCB0byB0aGUgbW9zdCByZWxldmFudCB0YWIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBpZiAodGFiVG9BY3RpdmF0ZSA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdib2R5JztcbiAgICAgIH0gZWxzZSBpZiAoYXV0aEhlYWRlcj8udmFsdWU/LnRyaW0oKSkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnYXV0aG9yaXphdGlvbic7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlSW1wb3J0Q3VybFBhbmVsKCk7XG4gIH1cblxuICAvKiogSGFuZGxlcjogZW1pdCBjYW5jZWwgYW5kIGNsb3NlIHBhbmVsLiBDYWxsZWQgd2hlbiB1c2VyIGNsaWNrcyBDYW5jZWwgaW4gaW1wb3J0IGNVUkwgcGFuZWwuICovXG4gIG9uQ2FuY2VsSW1wb3J0Q3VybCgpOiB2b2lkIHtcbiAgICB0aGlzLmltcG9ydEN1cmxDYW5jZWwuZW1pdCgpO1xuICAgIHRoaXMuY2xvc2VJbXBvcnRDdXJsUGFuZWwoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVyOiBzaG93IGhlYWRlcnMgc2VjdGlvbiAoY2FsbGVkIGZyb20gQ2FuY2VsIG9yIGFmdGVyIEltcG9ydCBpbiBpbXBvcnQgcGFuZWwpLiAqL1xuICBjbG9zZUltcG9ydEN1cmxQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHlWaWV3ID0gJ2hlYWRlcnMnO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBVUkw6IG11c3QgYmUgcmVxdWlyZWQgYW5kIG1hdGNoIGh0dHAvaHR0cHMgcGF0dGVyblxuICAgKiBBbHNvIGFsbG93cyBwYXJhbWV0ZXIgcGxhY2Vob2xkZXJzIGxpa2UgQHxwYXJhbU5hbWV8XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVXJsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVybFZhbHVlID0gdGhpcy51cmw/LnRyaW0oKSB8fCAnJztcbiAgICBcbiAgICAvLyBDaGVjayBpZiBVUkwgaXMgZW1wdHlcbiAgICBpZiAoIXVybFZhbHVlKSB7XG4gICAgICB0aGlzLnVybEVycm9yID0gJ1VSTCBpcyByZXF1aXJlZCc7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGlmIGl0J3MgYSBwYXJhbWV0ZXIgcGxhY2Vob2xkZXIgKGZvcm1hdDogQHxwYXJhbU5hbWV8KVxuICAgIGNvbnN0IGlzUGFyYW1ldGVyUGxhY2Vob2xkZXIgPSAvXkBcXHxbXnxdK1xcfCQvLnRlc3QodXJsVmFsdWUpO1xuICAgIGlmIChpc1BhcmFtZXRlclBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnVybEVycm9yID0gJyc7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGFuIGVudmlyb25tZW50IGlzIHNlbGVjdGVkLCBza2lwIHRoZSBodHRwL2h0dHBzIHZhbGlkYXRpb25cbiAgICAvLyBiZWNhdXNlIHRoZSBVUkwgbWF5IGJlIGEgcmVsYXRpdmUgcGF0aCBvciBwYXJhbWV0ZXIgdGhhdCBnZXRzIHJlc29sdmVkIGFnYWluc3QgdGhlIGVudmlyb25tZW50IGJhc2UgVVJMLlxuICAgIGNvbnN0IGhhc0Vudmlyb25tZW50ID0gdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSAhPSBudWxsXG4gICAgICAmJiB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlICE9PSAnJ1xuICAgICAgJiYgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSAhPT0gJ25vbmUnO1xuXG4gICAgaWYgKCFoYXNFbnZpcm9ubWVudCkge1xuICAgICAgLy8gQ2hlY2sgaWYgVVJMIG1hdGNoZXMgaHR0cCBvciBodHRwcyBwYXR0ZXJuXG4gICAgICBjb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvLisvaTtcbiAgICAgIGlmICghdXJsUGF0dGVybi50ZXN0KHVybFZhbHVlKSkge1xuICAgICAgICB0aGlzLnVybEVycm9yID0gJ1VSTCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLyc7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uOiB0cnkgdG8gY3JlYXRlIFVSTCBvYmplY3QgdG8gZW5zdXJlIGl0J3MgdmFsaWRcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBVUkwodXJsVmFsdWUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMudXJsRXJyb3IgPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXJsRXJyb3IgPSAnJztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBVUkwgaXMgdmFsaWQgKGZvciBidXR0b24gZGlzYWJsZWQgc3RhdGUpXG4gICAqL1xuICBnZXQgaXNVcmxWYWxpZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1cmxWYWx1ZSA9IHRoaXMudXJsPy50cmltKCkgfHwgJyc7XG4gICAgXG4gICAgLy8gRW1wdHkgVVJMIGlzIGludmFsaWRcbiAgICBpZiAoIXVybFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIFBhcmFtZXRlciBwbGFjZWhvbGRlciBpcyB2YWxpZFxuICAgIGNvbnN0IGlzUGFyYW1ldGVyUGxhY2Vob2xkZXIgPSAvXkBcXHxbXnxdK1xcfCQvLnRlc3QodXJsVmFsdWUpO1xuICAgIGlmIChpc1BhcmFtZXRlclBsYWNlaG9sZGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGFuIGVudmlyb25tZW50IGlzIHNlbGVjdGVkLCBza2lwIHRoZSBodHRwL2h0dHBzIHZhbGlkYXRpb25cbiAgICBjb25zdCBoYXNFbnZpcm9ubWVudCA9IHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgIT0gbnVsbFxuICAgICAgJiYgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSAhPT0gJydcbiAgICAgICYmIHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgIT09ICdub25lJztcblxuICAgIGlmIChoYXNFbnZpcm9ubWVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gTXVzdCBtYXRjaCBodHRwL2h0dHBzIHBhdHRlcm5cbiAgICBjb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvLisvaTtcbiAgICBpZiAoIXVybFBhdHRlcm4udGVzdCh1cmxWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gY3JlYXRlIFVSTCBvYmplY3QgdG8gZW5zdXJlIGl0J3MgdmFsaWRcbiAgICB0cnkge1xuICAgICAgbmV3IFVSTCh1cmxWYWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWdncmVnYXRlIGRpc2FibGVkIHN0YXRlIGZvciB0aGUgU2VuZCBSZXF1ZXN0IGJ1dHRvbi4gVVJMIHZhbGlkaXR5IGlzXG4gICAqIGFsd2F5cyByZXF1aXJlZDsgaW4gR3JhcGhRTCBtb2RlIHRoZSBRdWVyeSBmaWVsZCBtdXN0IGFsc28gYmUgbm9uLWJsYW5rXG4gICAqICh3aXRob3V0IGl0IHRoZSByZXF1ZXN0IGJvZHkgd291bGQgYmUgYHsgcXVlcnk6IFwiXCIgfWAsIHdoaWNoIHRoZSBlbmdpbmVcbiAgICogcmVqZWN0cyB1cC1mcm9udCBhbnl3YXkpLlxuICAgKi9cbiAgZ2V0IGlzU2VuZFJlcXVlc3REaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNVcmxWYWxpZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuYWN0aXZlQXBpVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgICBjb25zdCBxdWVyeSA9ICgodGhpcy5ncmFwaFFMRm9ybT8uZ2V0KCdxdWVyeScpPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKS50cmltKCk7XG4gICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb25TZW5kUmVxdWVzdCgpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBVUkwgYmVmb3JlIHNlbmRpbmcgcmVxdWVzdFxuICAgIGlmICghdGhpcy52YWxpZGF0ZVVybCgpKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB0aGlzLnNlbGVjdGVkRW52aXJvbm1lbnQgIT0gbnVsbCA/IFN0cmluZyh0aGlzLnNlbGVjdGVkRW52aXJvbm1lbnQpIDogJyc7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5zZWxlY3RlZE1ldGhvZCAhPSBudWxsID8gU3RyaW5nKHRoaXMuc2VsZWN0ZWRNZXRob2QpIDogJyc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZXAxID0gdGhpcy5nZXRDcmVhdGVQYXlsb2FkKCkuc3RlcDE7XG4gICAgICB0aGlzLnNlbmRSZXF1ZXN0LmVtaXQoe1xuICAgICAgICBlbnZpcm9ubWVudDogc3RlcDEuZW52aXJvbm1lbnQgPz8gZW52aXJvbm1lbnQsXG4gICAgICAgIG1ldGhvZDogc3RlcDEubWV0aG9kID8/IG1ldGhvZCxcbiAgICAgICAgdXJsOiBzdGVwMS51cmwgPz8gKHRoaXMudXJsID8/ICcnKSxcbiAgICAgICAgaGVhZGVyczogc3RlcDEuaGVhZGVycyA/PyB0aGlzLmhlYWRlcnMsXG4gICAgICAgIGF1dGhUeXBlOiBzdGVwMS5hdXRoVHlwZSxcbiAgICAgICAgYmVhcmVyVG9rZW46IHN0ZXAxLmJlYXJlclRva2VuLFxuICAgICAgICBvYXV0aDI6IHN0ZXAxLm9hdXRoMixcbiAgICAgICAgcGF5bG9hZFR5cGU6IHN0ZXAxLnBheWxvYWRUeXBlLFxuICAgICAgICBwYXlsb2FkRm9ybWF0OiBzdGVwMS5wYXlsb2FkRm9ybWF0LFxuICAgICAgICBwYXlsb2FkVGV4dDogc3RlcDEucGF5bG9hZFRleHQsXG4gICAgICAgIGtleVZhbHVlUm93czogc3RlcDEua2V5VmFsdWVSb3dzLFxuICAgICAgICBrZXlUeXBlVmFsdWVSb3dzOiBzdGVwMS5rZXlUeXBlVmFsdWVSb3dzLFxuICAgICAgICBwYXJhbXNSb3dzOiBzdGVwMS5wYXJhbXNSb3dzLFxuICAgICAgICAuLi4oc3RlcDEuYXBpVHlwZSAmJiB7IGFwaVR5cGU6IHN0ZXAxLmFwaVR5cGUgfSksXG4gICAgICAgIC4uLihzdGVwMS5ncmFwaFFMICYmIHsgZ3JhcGhRTDogc3RlcDEuZ3JhcGhRTCB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5zZW5kUmVxdWVzdC5lbWl0KHtcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsOiB0aGlzLnVybCA/PyAnJyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICBhdXRoVHlwZTogdGhpcy5zZWxlY3RlZEF1dGhUeXBlLFxuICAgICAgICBiZWFyZXJUb2tlbjogdGhpcy5iZWFyZXJUb2tlbiA/PyAnJyxcbiAgICAgICAgcGF5bG9hZFR5cGU6IHRoaXMucGF5bG9hZFR5cGUsXG4gICAgICAgIHBheWxvYWRGb3JtYXQ6IHRoaXMucGF5bG9hZEZvcm1hdEZvcm0/LmdldCgnZm9ybWF0Jyk/LnZhbHVlID8/ICcnLFxuICAgICAgICBwYXlsb2FkVGV4dDogdGhpcy5wYXlsb2FkVGV4dCA/PyAnJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVmFyaWFibGVOYW1lQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudmFyaWFibGVOYW1lRXJyb3IgPSAnJztcbiAgfVxuXG4gIG9uQmFjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA+IDEpIHtcbiAgICAgIHRoaXMuc2V0U3RlcCh0aGlzLmN1cnJlbnRTdGVwIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRBbGxTdGVwc0FuZERhdGEoKTtcbiAgICAgIHRoaXMuYmFjay5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIHVzZXIgY2xpY2tzIHRoZSBDYW5jZWwgYnV0dG9uIChzdGVwIDEpLiBFbWl0cyBjYW5jZWwgdGhlbiBydW5zIG5vcm1hbCBiYWNrIGZsb3cuICovXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB0aGlzLm9uQmFjaygpO1xuICB9XG5cbiAgb25OZXh0KCk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIFVSTCBvbiBzdGVwIDFcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gMSkge1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlVXJsKCkpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgdmFyaWFibGUgbmFtZSBvbiBzdGVwIDJcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gMiAmJiAhdGhpcy52YXJpYWJsZU5hbWU/LnRyaW0oKSkge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWVFcnJvciA9ICdWYXJpYWJsZSBOYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFyaWFibGVOYW1lRXJyb3IgPSAnJztcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA8IHRoaXMuc3RlcExhYmVscy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2V0U3RlcCh0aGlzLmN1cnJlbnRTdGVwICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmV4dC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGF5bG9hZFRhYih2YWx1ZTogQXBpRWRpdFBheWxvYWRUYWIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgQVBJIFR5cGUgc2VnbWVudCB0b2dnbGUgKFJFU1Qg4oaUIEdyYXBoUUwpLiBXaGVuIHN3aXRjaGluZyB0byBHcmFwaFFMIHdlXG4gICAqIGp1bXAgdG8gdGhlIEdyYXBoUUwgdGFiIHNvIHRoZSBRdWVyeSAvIFZhcmlhYmxlcyAvIE9wZXJhdGlvbiBOYW1lIGZpZWxkcyBhcmVcbiAgICogaW1tZWRpYXRlbHkgdmlzaWJsZS4gV2hlbiBzd2l0Y2hpbmcgYmFjayB0byBSRVNUIHdlIGxhbmQgb24gSGVhZGVycyAoUkVTVCBkZWZhdWx0KS5cbiAgICogRGlzYWJsZWQgc2VnbWVudHMgKFNPQVAvV2ViU29ja2V0L2dSUEMpIGNhbm5vdCBmaXJlIGhlcmUg4oCUIGBjcWEtc2VnbWVudC1jb250cm9sYFxuICAgKiBibG9ja3MgdGhlIGNsaWNrIOKAlCBidXQgd2UgZ3VhcmQgYW55d2F5IGluIGNhc2UgYSBmdXR1cmUgY2FsbGVyIGJ5cGFzc2VzIHRoYXQuXG4gICAqL1xuICBvbkFwaVR5cGVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gJ3Jlc3QnICYmIHZhbHVlICE9PSAnZ3JhcGhxbCcpIHJldHVybjtcbiAgICBpZiAodGhpcy5hY3RpdmVBcGlUeXBlID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlQXBpVHlwZSA9IHZhbHVlIGFzIEFwaUVkaXRBcGlUeXBlO1xuICAgIGlmICh0aGlzLmFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJykge1xuICAgICAgdGhpcy5hY3RpdmVQYXlsb2FkVGFiID0gJ2dyYXBocWwnO1xuICAgICAgLy8gUmUtdmFsaWRhdGUgdmFyaWFibGVzIG9uIGZpcnN0IHN3aXRjaCDigJQgdGhlIHRleHRhcmVhIG1heSBhbHJlYWR5IGhhdmUgY29udGVudFxuICAgICAgLy8gZnJvbSBhIHByZXZpb3VzIGVkaXQgYW5kIHdlIHdhbnQgdGhlIGlubGluZSBlcnJvciB0byBzdXJmYWNlIGltbWVkaWF0ZWx5LlxuICAgICAgdGhpcy52YWxpZGF0ZUdyYXBoUUxWYXJpYWJsZXMoZmFsc2UpO1xuICAgICAgdGhpcy5yZWNvbXB1dGVHcmFwaFFMT3BlcmF0aW9uV2FybmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXR1cm5pbmcgdG8gUkVTVCDigJQgZHJvcCBhbnkgR3JhcGhRTC1vbmx5IGlubGluZSBzdGF0ZSBzbyBpdCBkb2Vzbid0IGxpbmdlci5cbiAgICAgIHRoaXMuZ3JhcGhRTFF1ZXJ5RXJyb3IgPSAnJztcbiAgICAgIHRoaXMuZ3JhcGhRTFZhcmlhYmxlc0Vycm9yID0gJyc7XG4gICAgICB0aGlzLmdyYXBoUUxPcGVyYXRpb25XYXJuaW5nID0gJyc7XG4gICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnaGVhZGVycyc7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBWYXJpYWJsZXMgdGV4dGFyZWEgYXMgSlNPTi4gRW1wdHkgc3RyaW5nIGlzIHZhbGlkICg9IG5vIHZhcmlhYmxlcykuXG4gICAqIFNldHMgYGdyYXBoUUxWYXJpYWJsZXNFcnJvcmAgZm9yIGlubGluZSBkaXNwbGF5OyByZXR1cm5zIHRoZSBwYXJzZWQgb2JqZWN0IG9yXG4gICAqIHRoZSByYXcgc3RyaW5nIHdoZW4gdGhlIHVzZXIgdHlwZWQgc29tZXRoaW5nIG5vbi1lbXB0eSB0aGF0IGRpZG4ndCBwYXJzZS5cbiAgICpcbiAgICogQHBhcmFtIHN0cmljdCBXaGVuIHRydWUgKGNhbGxlZCBmcm9tIGBvbkNyZWF0ZWApLCBhbiBpbnZhbGlkIEpTT04gYmxvY2tzIHNhdmVcbiAgICogICAgICAgICAgICAgICDigJQgd2UgbGVhdmUgdGhlIGVycm9yIHZpc2libGUgYW5kIHJldHVybiBgbnVsbGAgdG8gc2lnbmFsIGFib3J0LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdyYXBoUUxWYXJpYWJsZXMoc3RyaWN0OiBib29sZWFuKTogeyB2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcgfCB1bmRlZmluZWQ7IHZhbGlkOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IHJhdyA9ICgodGhpcy5ncmFwaFFMRm9ybT8uZ2V0KCd2YXJpYWJsZXMnKT8udmFsdWUgYXMgc3RyaW5nKSA/PyAnJykudHJpbSgpO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aGlzLmdyYXBoUUxWYXJpYWJsZXNFcnJvciA9ICcnO1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgdmFsaWQ6IHRydWUgfTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgIHRoaXMuZ3JhcGhRTFZhcmlhYmxlc0Vycm9yID0gJyc7XG4gICAgICByZXR1cm4geyB2YWx1ZTogcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB2YWxpZDogdHJ1ZSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgIHRoaXMuZ3JhcGhRTFZhcmlhYmxlc0Vycm9yID0gYEludmFsaWQgSlNPTjogJHttZXNzYWdlfWA7XG4gICAgICAvLyBJbiBub24tc3RyaWN0IG1vZGUgKGxpdmUgdHlwaW5nKSB3ZSBzdGlsbCBlY2hvIGJhY2sgdGhlIHJhdyBzdHJpbmcgc28gdGhlIHBhcmVudFxuICAgICAgLy8gY2FuIGRlY2lkZSB3aGF0IHRvIGRvOyBpbiBzdHJpY3QgbW9kZSB0aGUgY2FsbGVyIGNoZWNrcyBgdmFsaWRgIHRvIGFib3J0IHNhdmUuXG4gICAgICByZXR1cm4geyB2YWx1ZTogc3RyaWN0ID8gdW5kZWZpbmVkIDogcmF3LCB2YWxpZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IHdoZW4gdGhlIEdyYXBoUUwgcXVlcnkgZGVjbGFyZXMgMisgbmFtZWQgb3BlcmF0aW9ucy4gR3JhcGhRTCByZXF1aXJlcyB0aGVcbiAgICogY2xpZW50IHRvIHNwZWNpZnkgYG9wZXJhdGlvbk5hbWVgIGluIHRoYXQgY2FzZTsgYWJzZW5jZSBpcyBhIHJ1bnRpbWUgZXJyb3IsIG5vdCBhXG4gICAqIHN5bnRheCBvbmUsIHNvIHdlIHN1cmZhY2UgaXQgYXMgYSBub24tYmxvY2tpbmcgd2FybmluZy5cbiAgICovXG4gIHByaXZhdGUgcmVjb21wdXRlR3JhcGhRTE9wZXJhdGlvbldhcm5pbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlQXBpVHlwZSAhPT0gJ2dyYXBocWwnIHx8ICF0aGlzLmdyYXBoUUxGb3JtKSB7XG4gICAgICB0aGlzLmdyYXBoUUxPcGVyYXRpb25XYXJuaW5nID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5ID0gKCh0aGlzLmdyYXBoUUxGb3JtLmdldCgncXVlcnknKT8udmFsdWUgYXMgc3RyaW5nKSA/PyAnJyk7XG4gICAgY29uc3Qgb3BOYW1lID0gKCh0aGlzLmdyYXBoUUxGb3JtLmdldCgnb3BlcmF0aW9uTmFtZScpPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKS50cmltKCk7XG4gICAgaWYgKCFxdWVyeS50cmltKCkgfHwgb3BOYW1lKSB7XG4gICAgICB0aGlzLmdyYXBoUUxPcGVyYXRpb25XYXJuaW5nID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE1hdGNoIGBxdWVyeWAsIGBtdXRhdGlvbmAsIGBzdWJzY3JpcHRpb25gIGFzIHN0YW5kYWxvbmUgdG9rZW5zIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuXG4gICAgLy8gU3RyaXAgYmxvY2svbGluZSBjb21tZW50cyBmaXJzdCBzbyBjb21tZW50ZWQtb3V0IG9wZXJhdGlvbnMgZG9uJ3QgdHJpcCB0aGUgY291bnQuXG4gICAgY29uc3Qgc3RyaXBwZWQgPSBxdWVyeVxuICAgICAgLnJlcGxhY2UoLyNbXlxcbl0qL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1wiXCJcIltcXHNcXFNdKj9cIlwiXCIvZywgJycpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBzdHJpcHBlZC5tYXRjaCgvXltcXHNdKihxdWVyeXxtdXRhdGlvbnxzdWJzY3JpcHRpb24pXFxiL2dtKSB8fCBbXTtcbiAgICB0aGlzLmdyYXBoUUxPcGVyYXRpb25XYXJuaW5nID0gbWF0Y2hlcy5sZW5ndGggPj0gMlxuICAgICAgPyAnTXVsdGlwbGUgb3BlcmF0aW9ucyBkZXRlY3RlZCDigJQgT3BlcmF0aW9uIE5hbWUgaXMgcmVxdWlyZWQuJ1xuICAgICAgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGljayBoYW5kbGVyIGZvciB0aGUgXCJMb2FkIFNjaGVtYVwiIGJ1dHRvbiAoR3JhcGhRTCBtb2RlIG9ubHkpLiBTd2l0Y2hlcyB0aGUgYm9keSB2aWV3XG4gICAqIHRvIHRoZSBvcGVyYXRpb24gcGlja2VyIEFORCBlbWl0cyBgbG9hZFNjaGVtYWAgc28gdGhlIHBhcmVudCBjYW4gZmV0Y2ggLyByZWZyZXNoIHRoZVxuICAgKiBzY2hlbWEgaW4gdGhlIGJhY2tncm91bmQuIFRoZSBwaWNrZXIgcmVuZGVycyB3aGF0ZXZlciBgZ3JhcGhRTFNjaGVtYVNvdXJjZWAgL1xuICAgKiBgZ3JhcGhRTE9wZXJhdGlvbnNgIHRoZSBwYXJlbnQgaGFzIHN1cHBsaWVkIGF0IGFueSBnaXZlbiB0aW1lIOKAlCBlbXB0eSBzdGF0ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgb25Mb2FkU2NoZW1hKCk6IHZvaWQge1xuICAgIHRoaXMuYm9keVZpZXcgPSAnZ3JhcGhxbC1zY2hlbWEnO1xuICAgIHRoaXMubG9hZFNjaGVtYS5lbWl0KHsgdXJsOiB0aGlzLnVybCA/PyAnJywgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFBpY2tlciDihpIgYmFjazogZHJvcCB0aGUgcGlja2VyIHZpZXcgYW5kIHJldHVybiB0byB0aGUgaGVhZGVycy90YWJzIHBhbmVsLiAqL1xuICBvbkdyYXBoUUxQaWNrZXJCYWNrKCk6IHZvaWQge1xuICAgIHRoaXMuYm9keVZpZXcgPSAnaGVhZGVycyc7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogUGlja2VyIOKGkiByZS1pbnRyb3NwZWN0OiBmb3J3YXJkIHRvIHBhcmVudCBzbyBpdCBjYW4gcmVmZXRjaCB0aGUgc2NoZW1hLiAqL1xuICBvbkdyYXBoUUxQaWNrZXJSZUludHJvc3BlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkU2NoZW1hLmVtaXQoeyB1cmw6IHRoaXMudXJsID8/ICcnLCBoZWFkZXJzOiB0aGlzLmhlYWRlcnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGlja2VyIOKGkiBvcGVyYXRpb24gc2VsZWN0ZWQ6IHBhdGNoIHRoZSBHcmFwaFFMIGZvcm0gKHF1ZXJ5IC8gdmFyaWFibGVzIC8gb3BlcmF0aW9uTmFtZSlcbiAgICogYW5kIHBvcCBiYWNrIHRvIHRoZSBtYWluIHZpZXcgd2l0aCB0aGUgR3JhcGhRTCB0YWIgYWN0aXZlIHNvIHRoZSB1c2VyIGNhbiBzZWUgdGhlXG4gICAqIGZpbGxlZC1pbiBmaWVsZHMuXG4gICAqL1xuICBvbkdyYXBoUUxQaWNrZXJPcGVyYXRpb25TZWxlY3RlZChvcDogR3JhcGhRTE9wZXJhdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5ncmFwaFFMRm9ybSkge1xuICAgICAgdGhpcy5ib2R5VmlldyA9ICdoZWFkZXJzJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHZhcmlhYmxlc1N0cmluZyA9ICcnO1xuICAgIGlmIChvcC52YXJpYWJsZXMgIT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyaWFibGVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3AudmFyaWFibGVzLCBudWxsLCAyKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB2YXJpYWJsZXNTdHJpbmcgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ncmFwaFFMRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHF1ZXJ5OiBvcC5xdWVyeSA/PyAnJyxcbiAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzU3RyaW5nLFxuICAgICAgb3BlcmF0aW9uTmFtZTogb3Aub3BlcmF0aW9uTmFtZSA/PyBvcC5uYW1lID8/ICcnLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhcGhRTFF1ZXJ5RXJyb3IgPSAnJztcbiAgICB0aGlzLmdyYXBoUUxWYXJpYWJsZXNFcnJvciA9ICcnO1xuICAgIHRoaXMucmVjb21wdXRlR3JhcGhRTE9wZXJhdGlvbldhcm5pbmcoKTtcbiAgICAvLyBEcm9wIGFueSBzdGFsZSByZXNwb25zZSBmcm9tIGEgcHJldmlvdXNseS1waWNrZWQgb3BlcmF0aW9uLiBUaGUgbmV4dCBTZW5kIFJlcXVlc3RcbiAgICAvLyB3aWxsIHBvcHVsYXRlIHRoZSBwcmV2aWV3IGFnYWluLiBOb3RlOiBuZ09uQ2hhbmdlcyBvbiBgaW5pdGlhbFJlc3BvbnNlUHJldmlld2Agb25seVxuICAgIC8vIHN5bmNzIG5vbi1udWxsIHZhbHVlcyBkb3duLCBzbyBjbGVhcmluZyBoZXJlIGRvZXNuJ3QgZ2V0IGNsb2JiZXJlZCB3aGVuIHRoZSBwYXJlbnRcbiAgICAvLyBhbHNvIGNsZWFycyBpdHMgYGluaXRpYWxSZXNwb25zZVByZXZpZXdgIGZpZWxkLlxuICAgIHRoaXMucmVzcG9uc2VQcmV2aWV3ID0gJyc7XG4gICAgdGhpcy5hY3RpdmVBcGlUeXBlID0gJ2dyYXBocWwnO1xuICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdncmFwaHFsJztcbiAgICB0aGlzLmJvZHlWaWV3ID0gJ2hlYWRlcnMnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0UmVzcG9uc2VWZXJpZmljYXRpb25UYWIodmFsdWU6ICdyZXNwb25zZS1ib2R5JyB8ICdzdGF0dXMnKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYiA9IHZhbHVlO1xuICB9XG5cbiAgYWRkSGVhZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5wdXNoKFxuICAgICAgdGhpcy5mYi5ncm91cCh7IG5hbWU6IFsnJ10sIHZhbHVlOiBbJyddIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZUhlYWRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIC8qKiBXaGVuIHVzZXIgYWRkcyBhIGN1c3RvbSBoZWFkZXIgbmFtZSB2aWEgdGhlIGRyb3Bkb3duIFwiQWRkICfigKYnXCIgb3B0aW9uLCBzZXQgdGhlIGNvbnRyb2wgdmFsdWUuICovXG4gIG9uSGVhZGVyTmFtZUFkZEN1c3RvbVZhbHVlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0sIHJvdzogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHJvdy5nZXQoZXZlbnQua2V5KTtcbiAgICBpZiAoY29udHJvbCAmJiBldmVudC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKGV2ZW50LnZhbHVlLnRyaW0oKSk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeUhlYWRlcihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhZGRLZXlWYWx1ZVJvdygpOiB2b2lkIHtcbiAgICB0aGlzLmtleVZhbHVlRm9ybUFycmF5LnB1c2godGhpcy5mYi5ncm91cCh7IGtleTogWycnXSwgdmFsdWU6IFsnJ10gfSkpO1xuICB9XG5cbiAgcmVtb3ZlS2V5VmFsdWVSb3coaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMua2V5VmFsdWVGb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgdHJhY2tCeUtleVZhbHVlKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFkZEtleVR5cGVWYWx1ZVJvdygpOiB2b2lkIHtcbiAgICB0aGlzLmtleVR5cGVWYWx1ZUZvcm1BcnJheS5wdXNoKHRoaXMuZmIuZ3JvdXAoeyBrZXk6IFsnJ10sIHR5cGU6IFsndGV4dCddLCB2YWx1ZTogWycnXSB9KSk7XG4gIH1cblxuICByZW1vdmVLZXlUeXBlVmFsdWVSb3coaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMua2V5VHlwZVZhbHVlRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHRyYWNrQnlLZXlUeXBlVmFsdWUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgYWRkUGFyYW1zUm93KCk6IHZvaWQge1xuICAgIHRoaXMucGFyYW1zRm9ybUFycmF5LnB1c2godGhpcy5mYi5ncm91cCh7IGtleTogWycnXSwgdmFsdWU6IFsnJ10gfSkpO1xuICB9XG5cbiAgcmVtb3ZlUGFyYW1zUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmFtc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICB0cmFja0J5UGFyYW1zKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFkZFZlcmlmaWNhdGlvblJvdygpOiB2b2lkIHtcbiAgICB0aGlzLnZlcmlmaWNhdGlvbkZvcm1BcnJheS5wdXNoKFxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGpzb25QYXRoOiBbJyddLFxuICAgICAgICB2ZXJpZmljYXRpb246IFt0aGlzLmdldERlZmF1bHRWZXJpZmljYXRpb24oKV0sXG4gICAgICAgIGRhdGFUeXBlOiBbdGhpcy5nZXREZWZhdWx0RGF0YVR5cGUoKV0sXG4gICAgICAgIGV4cGVjdGVkVmFsdWU6IFsnJ10sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZW1vdmVWZXJpZmljYXRpb25Sb3coaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHRyYWNrQnlWZXJpZmljYXRpb24oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqIFdoZW4gRGF0YSBUeXBlIGNoYW5nZXMgaW4gUmVzcG9uc2UgQm9keSB2ZXJpZmljYXRpb24sIHJlc2V0IEV4cGVjdGVkIFZhbHVlIGZvciB0aGF0IHJvdy4gKi9cbiAgb25WZXJpZmljYXRpb25EYXRhVHlwZUNoYW5nZShyb3c6IEZvcm1Hcm91cCwgZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZGF0YVR5cGUnKSB7XG4gICAgICByb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnNldFZhbHVlKCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdHVzVmVyaWZpY2F0aW9uUm93KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5LnB1c2goXG4gICAgICB0aGlzLmZiLmdyb3VwKHsgdmVyaWZpY2F0aW9uOiBbdGhpcy5nZXREZWZhdWx0U3RhdHVzVmVyaWZpY2F0aW9uKCldLCBleHBlY3RlZFZhbHVlOiBbJyddIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZVN0YXR1c1ZlcmlmaWNhdGlvblJvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgdHJhY2tCeVN0YXR1c1ZlcmlmaWNhdGlvbihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgcmVhY3RpdmUgZm9ybSBmb3IgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPVxuICAgICAgICB2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbidcbiAgICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICAgIDogKHZhcmlhYmxlLnZhbHVlIHx8ICcnKTtcblxuICAgICAgY29uc3QgdmFyaWFibGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdmFyaWFibGUubmFtZV0sXG4gICAgICAgIHZhbHVlOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIGJvb2xlYW4gY2hhbmdlcyBhbmQga2VlcCBib3RoIGRhdGEgYW5kIGZvcm0gaW4gc3luYy5cbiAgICovXG4gIG9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBub24tYm9vbGVhbiBhZHZhbmNlZCB2YWx1ZXMgKGtlcHQgZm9yIEFQSSBjb21wYXRpYmlsaXR5OyBjdXJyZW50bHkgdW51c2VkKS5cbiAgICovXG4gIG9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEVtaXQgYWxsIGVudGVyZWQgZGV0YWlscyAoZW52aXJvbm1lbnQsIEhUVFAgbWV0aG9kLCBVUkwsIGhlYWRlcnMsIGJvZHksIHN0ZXAyIHZhcmlhYmxlLCBzdGVwMyB2ZXJpZmljYXRpb25zKSB3aGVuIHVzZXIgY2xpY2tzIENyZWF0ZS4gKi9cbiAgb25DcmVhdGUoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJzk5OTk5OTknKTtcblxuICAgIC8vIEdyYXBoUUwgbW9kZSB2YWxpZGF0aW9uOiBxdWVyeSBpcyByZXF1aXJlZCArIG5vbi1ibGFuaywgdmFyaWFibGVzIChpZiBub24tZW1wdHkpIG11c3QgYmUgdmFsaWQgSlNPTi5cbiAgICBpZiAodGhpcy5hY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCcpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gKCh0aGlzLmdyYXBoUUxGb3JtPy5nZXQoJ3F1ZXJ5Jyk/LnZhbHVlIGFzIHN0cmluZykgPz8gJycpLnRyaW0oKTtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgdGhpcy5ncmFwaFFMUXVlcnlFcnJvciA9ICdRdWVyeSBpcyByZXF1aXJlZC4nO1xuICAgICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnZ3JhcGhxbCc7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLnZhbGlkYXRlR3JhcGhRTFZhcmlhYmxlcyh0cnVlKTtcbiAgICAgIGlmICghdmFyaWFibGVzLnZhbGlkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdncmFwaHFsJztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuZ2V0Q3JlYXRlUGF5bG9hZCgpO1xuICAgICAgY29uc29sZS5sb2coJzk5OTk5OTkgcGF5bG9hZCcsIHBheWxvYWQpO1xuICAgICAgdGhpcy5jcmVhdGUuZW1pdChwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwaUVkaXRTdGVwIGdldENyZWF0ZVBheWxvYWQgZXJyb3I6JywgZXJyKTtcbiAgICAgIHRoaXMuY3JlYXRlLmVtaXQodGhpcy5nZXRDcmVhdGVQYXlsb2FkRmFsbGJhY2soKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1pbmltYWwgcGF5bG9hZCB3aGVuIGdldENyZWF0ZVBheWxvYWQgdGhyb3dzIChzbyBjcmVhdGUgYWx3YXlzIGVtaXRzKS4gKi9cbiAgcHJpdmF0ZSBnZXRDcmVhdGVQYXlsb2FkRmFsbGJhY2soKTogQXBpRWRpdENyZWF0ZVBheWxvYWQge1xuICAgIGNvbnN0IGF1dGhUeXBlID0gdGhpcy5zZWxlY3RlZEF1dGhUeXBlO1xuICAgIGNvbnN0IGJlYXJlclRva2VuID0gYXV0aFR5cGUgPT09ICdiZWFyZXInID8gKHRoaXMuYmVhcmVyVG9rZW4gPz8gJycpIDogdW5kZWZpbmVkO1xuICAgIGxldCBvYXV0aDI6IEFwaUVkaXRPQXV0aDJQYXlsb2FkIHwgdW5kZWZpbmVkO1xuICAgIGlmIChhdXRoVHlwZSA9PT0gJ29hdXRoMicgJiYgdGhpcy5vYXV0aDJGb3JtKSB7XG4gICAgICBjb25zdCBncmFudFR5cGUgPSBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRDb250cm9sVmFsdWUodGhpcy5vYXV0aDJGb3JtLmdldCgnZ3JhbnRUeXBlJykgYXMgeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCk7XG4gICAgICBjb25zdCBjbGllbnRBdXRoID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0Q29udHJvbFZhbHVlKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2NsaWVudEF1dGhlbnRpY2F0aW9uJykgYXMgeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCk7XG4gICAgICBvYXV0aDIgPSB7XG4gICAgICAgIGdyYW50VHlwZTogZ3JhbnRUeXBlICE9PSAnJyA/IGdyYW50VHlwZSA6ICdjbGllbnRfY3JlZGVudGlhbHMnLFxuICAgICAgICBhY2Nlc3NUb2tlblVybDogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2FjY2Vzc1Rva2VuVXJsJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIGNsaWVudElkOiAodGhpcy5vYXV0aDJGb3JtLmdldCgnY2xpZW50SWQnKT8udmFsdWUgPz8gJycpIGFzIHN0cmluZyxcbiAgICAgICAgY2xpZW50U2VjcmV0OiAodGhpcy5vYXV0aDJGb3JtLmdldCgnY2xpZW50U2VjcmV0Jyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIHNjb3BlOiAodGhpcy5vYXV0aDJGb3JtLmdldCgnc2NvcGUnKT8udmFsdWUgPz8gJycpIGFzIHN0cmluZyxcbiAgICAgICAgY2xpZW50QXV0aGVudGljYXRpb246IGNsaWVudEF1dGggIT09ICcnID8gY2xpZW50QXV0aCA6ICdiYXNpYycsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3RlcDE6IHtcbiAgICAgICAgc3VtbWFyeTogdGhpcy5zdW1tYXJ5Py50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgICAgICBlbnZpcm9ubWVudDogJycsXG4gICAgICAgIG1ldGhvZDogJycsXG4gICAgICAgIHVybDogdGhpcy51cmwgPz8gJycsXG4gICAgICAgIGhlYWRlcnM6IFtdLFxuICAgICAgICBhdXRoVHlwZSxcbiAgICAgICAgLi4uKGJlYXJlclRva2VuICE9PSB1bmRlZmluZWQgJiYgeyBiZWFyZXJUb2tlbiB9KSxcbiAgICAgICAgLi4uKG9hdXRoMiAhPT0gdW5kZWZpbmVkICYmIHsgb2F1dGgyIH0pLFxuICAgICAgICBhY3RpdmVQYXlsb2FkVGFiOiB0aGlzLmFjdGl2ZVBheWxvYWRUYWIsXG4gICAgICAgIHBheWxvYWRUeXBlOiB0aGlzLnBheWxvYWRUeXBlLFxuICAgICAgICBwYXlsb2FkRm9ybWF0OiAnJyxcbiAgICAgICAgcGF5bG9hZFRleHQ6IHRoaXMucGF5bG9hZFRleHQgPz8gJycsXG4gICAgICAgIGtleVZhbHVlUm93czogW10sXG4gICAgICAgIGtleVR5cGVWYWx1ZVJvd3M6IFtdLFxuICAgICAgICBwYXJhbXNSb3dzOiBbXSxcbiAgICAgIH0sXG4gICAgICBzdGVwMjogeyB2YXJpYWJsZU5hbWU6IHRoaXMudmFyaWFibGVOYW1lID8/ICcnIH0sXG4gICAgICBzdGVwMzoge1xuICAgICAgICBhY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYjogdGhpcy5hY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYixcbiAgICAgICAgcmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9uczogW10sXG4gICAgICAgIHN0YXR1c1ZlcmlmaWNhdGlvbnM6IFtdLFxuICAgICAgfSxcbiAgICAgIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIE5vcm1hbGl6ZSBmb3JtIGNvbnRyb2wgdmFsdWUgdG8gc3RyaW5nIChoYW5kbGVzIG9iamVjdCBvciBzdHJpbmcpLiAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRDb250cm9sVmFsdWUoY29udHJvbDogeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgY29uc3QgdiA9IGNvbnRyb2w/LnZhbHVlO1xuICAgIGlmICh2ID09IG51bGwgfHwgdiA9PT0gJycpIHJldHVybiAnJztcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnID8gKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpIDogU3RyaW5nKHYpO1xuICB9XG5cbiAgLyoqIEJ1aWxkIGZ1bGwgY3JlYXRlIHBheWxvYWQ6IGVudmlyb25tZW50LCBIVFRQIG1ldGhvZCwgVVJMLCBoZWFkZXJzLCBib2R5IChzdGVwMSksIHZhcmlhYmxlIG5hbWUgKHN0ZXAyKSwgdmVyaWZpY2F0aW9ucyAoc3RlcDMpLiAqL1xuICBwcml2YXRlIGdldENyZWF0ZVBheWxvYWQoKTogQXBpRWRpdENyZWF0ZVBheWxvYWQge1xuICAgIGNvbnN0IGVudkZyb21Gb3JtID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0Q29udHJvbFZhbHVlKHRoaXMuZW52aXJvbm1lbnRGb3JtPy5nZXQoJ2Vudmlyb25tZW50JykgYXMgeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCk7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPVxuICAgICAgZW52RnJvbUZvcm0gIT09ICcnID8gZW52RnJvbUZvcm0gOiAodGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSAhPT0gJycgPyB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlIDogdGhpcy5zZWxlY3RlZEVudmlyb25tZW50KTtcbiAgICBjb25zdCBtZXRob2RGcm9tRm9ybSA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldENvbnRyb2xWYWx1ZSh0aGlzLm1ldGhvZEZvcm0/LmdldCgnbWV0aG9kJykgYXMgeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCk7XG4gICAgY29uc3QgbWV0aG9kID1cbiAgICAgIG1ldGhvZEZyb21Gb3JtICE9PSAnJyA/IG1ldGhvZEZyb21Gb3JtIDogKHRoaXMuY3VycmVudE1ldGhvZFZhbHVlICE9PSAnJyA/IHRoaXMuY3VycmVudE1ldGhvZFZhbHVlIDogdGhpcy5zZWxlY3RlZE1ldGhvZCk7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybT8uZ2V0KCdmb3JtYXQnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3Qga2V5VmFsdWVGb3JtQXJyYXkgPSB0aGlzLmtleVZhbHVlRm9ybUFycmF5O1xuICAgIGNvbnN0IGtleVZhbHVlUm93cyA9IChrZXlWYWx1ZUZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pLm1hcCgoYykgPT4gKHtcbiAgICAgIGtleTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2tleScpPy52YWx1ZSA/PyAnJyxcbiAgICAgIHZhbHVlOiAoYyBhcyBGb3JtR3JvdXApLmdldCgndmFsdWUnKT8udmFsdWUgPz8gJycsXG4gICAgfSkpO1xuICAgIGNvbnN0IGtleVR5cGVWYWx1ZUZvcm1BcnJheSA9IHRoaXMua2V5VHlwZVZhbHVlRm9ybUFycmF5O1xuICAgIGNvbnN0IGtleVR5cGVWYWx1ZVJvd3MgPSAoa2V5VHlwZVZhbHVlRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkubWFwKChjKSA9PiAoe1xuICAgICAga2V5OiAoYyBhcyBGb3JtR3JvdXApLmdldCgna2V5Jyk/LnZhbHVlID8/ICcnLFxuICAgICAgdHlwZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ3R5cGUnKT8udmFsdWUgPz8gJ3RleHQnLFxuICAgICAgdmFsdWU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCd2YWx1ZScpPy52YWx1ZSA/PyAnJyxcbiAgICB9KSk7XG4gICAgY29uc3QgcGFyYW1zRm9ybUFycmF5ID0gdGhpcy5wYXJhbXNGb3JtQXJyYXk7XG4gICAgY29uc3QgcGFyYW1zUm93cyA9IChwYXJhbXNGb3JtQXJyYXk/LmNvbnRyb2xzID8/IFtdKS5tYXAoKGMpID0+ICh7XG4gICAgICBrZXk6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCdrZXknKT8udmFsdWUgPz8gJycsXG4gICAgICB2YWx1ZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZhbHVlJyk/LnZhbHVlID8/ICcnLFxuICAgIH0pKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25Gb3JtQXJyYXkgPSB0aGlzLnZlcmlmaWNhdGlvbkZvcm1BcnJheTtcbiAgICBjb25zdCByZXNwb25zZUJvZHlWZXJpZmljYXRpb25zID0gKHZlcmlmaWNhdGlvbkZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pLm1hcCgoYykgPT4gKHtcbiAgICAgIGpzb25QYXRoOiAoYyBhcyBGb3JtR3JvdXApLmdldCgnanNvblBhdGgnKT8udmFsdWUgPz8gJycsXG4gICAgICB2ZXJpZmljYXRpb246IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCd2ZXJpZmljYXRpb24nKT8udmFsdWUgPz8gJycsXG4gICAgICBkYXRhVHlwZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2RhdGFUeXBlJyk/LnZhbHVlID8/ICcnLFxuICAgICAgZXhwZWN0ZWRWYWx1ZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2V4cGVjdGVkVmFsdWUnKT8udmFsdWUgPz8gJycsXG4gICAgfSkpO1xuICAgIGNvbnN0IHN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheSA9IHRoaXMuc3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5O1xuICAgIGNvbnN0IHN0YXR1c1ZlcmlmaWNhdGlvbnMgPSAoc3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkubWFwKChjKSA9PiAoe1xuICAgICAgdmVyaWZpY2F0aW9uOiAoYyBhcyBGb3JtR3JvdXApLmdldCgndmVyaWZpY2F0aW9uJyk/LnZhbHVlID8/ICcnLFxuICAgICAgZXhwZWN0ZWRWYWx1ZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2V4cGVjdGVkVmFsdWUnKT8udmFsdWUgPz8gJycsXG4gICAgfSkpO1xuICAgIGNvbnN0IGF1dGhUeXBlID0gdGhpcy5zZWxlY3RlZEF1dGhUeXBlO1xuICAgIGNvbnN0IGJlYXJlclRva2VuID0gYXV0aFR5cGUgPT09ICdiZWFyZXInID8gKHRoaXMuYmVhcmVyVG9rZW4gPz8gJycpIDogdW5kZWZpbmVkO1xuICAgIGxldCBvYXV0aDI6IEFwaUVkaXRPQXV0aDJQYXlsb2FkIHwgdW5kZWZpbmVkO1xuICAgIGlmIChhdXRoVHlwZSA9PT0gJ29hdXRoMicgJiYgdGhpcy5vYXV0aDJGb3JtKSB7XG4gICAgICBjb25zdCBncmFudFR5cGUgPSBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRDb250cm9sVmFsdWUodGhpcy5vYXV0aDJGb3JtLmdldCgnZ3JhbnRUeXBlJykgYXMgeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCk7XG4gICAgICBjb25zdCBjbGllbnRBdXRoID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0Q29udHJvbFZhbHVlKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2NsaWVudEF1dGhlbnRpY2F0aW9uJykgYXMgeyB2YWx1ZTogdW5rbm93biB9IHwgbnVsbCk7XG4gICAgICBvYXV0aDIgPSB7XG4gICAgICAgIGdyYW50VHlwZTogZ3JhbnRUeXBlICE9PSAnJyA/IGdyYW50VHlwZSA6ICdjbGllbnRfY3JlZGVudGlhbHMnLFxuICAgICAgICBhY2Nlc3NUb2tlblVybDogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2FjY2Vzc1Rva2VuVXJsJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIGNsaWVudElkOiAodGhpcy5vYXV0aDJGb3JtLmdldCgnY2xpZW50SWQnKT8udmFsdWUgPz8gJycpIGFzIHN0cmluZyxcbiAgICAgICAgY2xpZW50U2VjcmV0OiAodGhpcy5vYXV0aDJGb3JtLmdldCgnY2xpZW50U2VjcmV0Jyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIHNjb3BlOiAodGhpcy5vYXV0aDJGb3JtLmdldCgnc2NvcGUnKT8udmFsdWUgPz8gJycpIGFzIHN0cmluZyxcbiAgICAgICAgY2xpZW50QXV0aGVudGljYXRpb246IGNsaWVudEF1dGggIT09ICcnID8gY2xpZW50QXV0aCA6ICdiYXNpYycsXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBHcmFwaFFMIGV4dGVuc2lvbjogd2hlbiBpbiBHcmFwaFFMIG1vZGUsIHBhY2thZ2UgdGhlIHF1ZXJ5L3ZhcmlhYmxlcy9vcGVyYXRpb25OYW1lIGludG8gYVxuICAgIC8vIHNpbmdsZSBzdWItb2JqZWN0IGFuZCBlbnN1cmUgQ29udGVudC1UeXBlIGRlZmF1bHRzIHRvIGFwcGxpY2F0aW9uL2pzb24gKGVuZ2luZSBzZXRzIGl0IHRvbyxcbiAgICAvLyBidXQgc3VyZmFjaW5nIGl0IG9uIHRoZSBoZWFkZXJzIGxpc3QgaXMgY2xlYW5lciBmb3IgdGhlIHVzZXIpLiBNZXRob2QgaXMgZm9yY2VkIHRvIFBPU1Qgc29cbiAgICAvLyBsZWdhY3kgUkVTVC1mbGF2b3VyZWQgZG93bnN0cmVhbSBjb2RlIHBhdGhzIGtlZXAgd29ya2luZyB3aGVuIHRoZXkgcGVlayBhdCBpdC5cbiAgICBjb25zdCBpc0dyYXBoUUwgPSB0aGlzLmFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJztcbiAgICBsZXQgb3V0cHV0QXBpVHlwZTogQXBpRWRpdEFwaVR5cGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG91dHB1dEdyYXBoUUw6IEFwaUVkaXRHcmFwaFFMUGF5bG9hZCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgb3V0cHV0SGVhZGVycyA9IHRoaXMuaGVhZGVycztcbiAgICBsZXQgb3V0cHV0TWV0aG9kID0gbWV0aG9kO1xuICAgIGlmIChpc0dyYXBoUUwpIHtcbiAgICAgIG91dHB1dEFwaVR5cGUgPSAnZ3JhcGhxbCc7XG4gICAgICBjb25zdCBxdWVyeSA9ICgodGhpcy5ncmFwaFFMRm9ybT8uZ2V0KCdxdWVyeScpPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKS50cmltKCk7XG4gICAgICBjb25zdCBvcGVyYXRpb25OYW1lID0gKCh0aGlzLmdyYXBoUUxGb3JtPy5nZXQoJ29wZXJhdGlvbk5hbWUnKT8udmFsdWUgYXMgc3RyaW5nKSA/PyAnJykudHJpbSgpO1xuICAgICAgY29uc3QgdmFyaWFibGVzUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUdyYXBoUUxWYXJpYWJsZXMoZmFsc2UpO1xuICAgICAgb3V0cHV0R3JhcGhRTCA9IHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLih2YXJpYWJsZXNSZXN1bHQudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB7IHZhcmlhYmxlczogdmFyaWFibGVzUmVzdWx0LnZhbHVlIH0pLFxuICAgICAgICAuLi4ob3BlcmF0aW9uTmFtZSAmJiB7IG9wZXJhdGlvbk5hbWUgfSksXG4gICAgICB9O1xuICAgICAgb3V0cHV0TWV0aG9kID0gJ1BPU1QnO1xuICAgICAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBvdXRwdXRIZWFkZXJzLnNvbWUoaCA9PiAoaC5uYW1lIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpO1xuICAgICAgaWYgKCFoYXNDb250ZW50VHlwZSkge1xuICAgICAgICBvdXRwdXRIZWFkZXJzID0gW3sgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHR5cGU6ICdzdHJpbmcnLCB2YWx1ZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIC4uLm91dHB1dEhlYWRlcnNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGVwMToge1xuICAgICAgICBzdW1tYXJ5OiB0aGlzLnN1bW1hcnk/LnRyaW0oKSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBtZXRob2Q6IG91dHB1dE1ldGhvZCxcbiAgICAgICAgdXJsOiB0aGlzLnVybCA/PyAnJyxcbiAgICAgICAgaGVhZGVyczogb3V0cHV0SGVhZGVycyxcbiAgICAgICAgYXV0aFR5cGUsXG4gICAgICAgIC4uLihiZWFyZXJUb2tlbiAhPT0gdW5kZWZpbmVkICYmIHsgYmVhcmVyVG9rZW4gfSksXG4gICAgICAgIC4uLihvYXV0aDIgIT09IHVuZGVmaW5lZCAmJiB7IG9hdXRoMiB9KSxcbiAgICAgICAgYWN0aXZlUGF5bG9hZFRhYjogdGhpcy5hY3RpdmVQYXlsb2FkVGFiLFxuICAgICAgICBwYXlsb2FkVHlwZTogdGhpcy5wYXlsb2FkVHlwZSxcbiAgICAgICAgcGF5bG9hZEZvcm1hdDogZm9ybWF0LFxuICAgICAgICBwYXlsb2FkVGV4dDogdGhpcy5wYXlsb2FkVGV4dCA/PyAnJyxcbiAgICAgICAga2V5VmFsdWVSb3dzLFxuICAgICAgICBrZXlUeXBlVmFsdWVSb3dzLFxuICAgICAgICBwYXJhbXNSb3dzLFxuICAgICAgICAuLi4ob3V0cHV0QXBpVHlwZSAmJiB7IGFwaVR5cGU6IG91dHB1dEFwaVR5cGUgfSksXG4gICAgICAgIC4uLihvdXRwdXRHcmFwaFFMICYmIHsgZ3JhcGhRTDogb3V0cHV0R3JhcGhRTCB9KSxcbiAgICAgIH0sXG4gICAgICBzdGVwMjoge1xuICAgICAgICB2YXJpYWJsZU5hbWU6IHRoaXMudmFyaWFibGVOYW1lID8/ICcnLFxuICAgICAgfSxcbiAgICAgIHN0ZXAzOiB7XG4gICAgICAgIGFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiOiB0aGlzLmFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiLFxuICAgICAgICByZXNwb25zZUJvZHlWZXJpZmljYXRpb25zLFxuICAgICAgICBzdGF0dXNWZXJpZmljYXRpb25zLFxuICAgICAgfSxcbiAgICAgIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgaGVhZGVyIHJvd3MgZnJvbSBmb3JtIChmb3IgY29uc3VtZXJzIHRoYXQgcmVhZCBoZWFkZXJzKSAqL1xuICBnZXQgaGVhZGVycygpOiBBcGlFZGl0SGVhZGVyUm93W10ge1xuICAgIGlmICghdGhpcy5oZWFkZXJzRm9ybUFycmF5KSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5jb250cm9scy5tYXAoKGMpID0+ICh7XG4gICAgICBuYW1lOiAoYyBhcyBGb3JtR3JvdXApLmdldCgnbmFtZScpPy52YWx1ZSA/PyAnJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgdmFsdWU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCd2YWx1ZScpPy52YWx1ZSA/PyAnJyxcbiAgICB9KSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxNZXRob2QnXT8uY3VycmVudFZhbHVlICE9IG51bGwgJiYgdGhpcy5tZXRob2RGb3JtKSB7XG4gICAgICBjb25zdCB2ID0gY2hhbmdlc1snaW5pdGlhbE1ldGhvZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuY3VycmVudE1ldGhvZFZhbHVlID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKTtcbiAgICAgIHRoaXMubWV0aG9kRm9ybS5wYXRjaFZhbHVlKHsgbWV0aG9kOiB2IH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaHR0cE1ldGhvZE9wdGlvbnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVNZXRob2RTZWxlY3RDb25maWcoKTtcbiAgICAgIGlmICh0aGlzLm1ldGhvZEZvcm0gJiYgdGhpcy5odHRwTWV0aG9kT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLm1ldGhvZEZvcm0uZ2V0KCdtZXRob2QnKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0TWV0aG9kVmFsdWVzKCk7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsdWVzLmluY2x1ZGVzKGN1cnJlbnQpO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnNbMF0pO1xuICAgICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1ldGhvZFZhbHVlID0gZmlyc3RWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kRm9ybS5wYXRjaFZhbHVlKHsgbWV0aG9kOiBmaXJzdFZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbEVudmlyb25tZW50J10/LmN1cnJlbnRWYWx1ZSAhPSBudWxsICYmIHRoaXMuZW52aXJvbm1lbnRGb3JtKSB7XG4gICAgICBjb25zdCB2ID0gY2hhbmdlc1snaW5pdGlhbEVudmlyb25tZW50J10uY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodiBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA/PyAnJyk7XG4gICAgICB0aGlzLmVudmlyb25tZW50Rm9ybS5wYXRjaFZhbHVlKHsgZW52aXJvbm1lbnQ6IHYgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydlbnZpcm9ubWVudE9wdGlvbnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudFNlbGVjdENvbmZpZygpO1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnRGb3JtICYmIHRoaXMuZW52aXJvbm1lbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZW52aXJvbm1lbnRGb3JtLmdldCgnZW52aXJvbm1lbnQnKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRWYWx1ZXMoKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWx1ZXMuaW5jbHVkZXMoY3VycmVudCk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodGhpcy5lbnZpcm9ubWVudE9wdGlvbnNbMF0pO1xuICAgICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgPSBmaXJzdFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudEZvcm0ucGF0Y2hWYWx1ZSh7IGVudmlyb25tZW50OiBmaXJzdFZhbHVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaGFzTW9yZUVudmlyb25tZW50cyddIHx8IGNoYW5nZXNbJ2lzTG9hZGluZ0Vudmlyb25tZW50cyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50U2VsZWN0Q29uZmlnKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsQXV0aFR5cGUnXT8uY3VycmVudFZhbHVlICE9IG51bGwgJiYgdGhpcy5hdXRoVHlwZUZvcm0pIHtcbiAgICAgIGNvbnN0IHYgPSBjaGFuZ2VzWydpbml0aWFsQXV0aFR5cGUnXS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zdCByZXNvbHZlZCA9XG4gICAgICAgIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpO1xuICAgICAgaWYgKHJlc29sdmVkICE9IG51bGwpIHRoaXMuYXV0aFR5cGVGb3JtLnBhdGNoVmFsdWUoeyBhdXRoVHlwZTogdiB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxPQXV0aDInXT8uY3VycmVudFZhbHVlICE9IG51bGwgJiYgdGhpcy5vYXV0aDJGb3JtKSB7XG4gICAgICBjb25zdCB2ID0gY2hhbmdlc1snaW5pdGlhbE9BdXRoMiddLmN1cnJlbnRWYWx1ZSBhcyBBcGlFZGl0T0F1dGgyUGF5bG9hZDtcbiAgICAgIHRoaXMub2F1dGgyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgZ3JhbnRUeXBlOiB2LmdyYW50VHlwZSA/PyAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgICAgYWNjZXNzVG9rZW5Vcmw6IHYuYWNjZXNzVG9rZW5VcmwgPz8gJycsXG4gICAgICAgIGNsaWVudElkOiB2LmNsaWVudElkID8/ICcnLFxuICAgICAgICBjbGllbnRTZWNyZXQ6IHYuY2xpZW50U2VjcmV0ID8/ICcnLFxuICAgICAgICBzY29wZTogdi5zY29wZSA/PyAnJyxcbiAgICAgICAgY2xpZW50QXV0aGVudGljYXRpb246IHYuY2xpZW50QXV0aGVudGljYXRpb24gPz8gJ2Jhc2ljJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snYXV0aFR5cGVPcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlQXV0aFR5cGVTZWxlY3RDb25maWcoKTtcbiAgICAgIGlmICh0aGlzLmF1dGhUeXBlRm9ybSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEF1dGhUeXBlVmFsdWVzKCk7XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmF1dGhUeXBlRm9ybS5nZXQoJ2F1dGhUeXBlJyk/LnZhbHVlO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWwgPVxuICAgICAgICAgICAgY3VycmVudCAhPSBudWxsICYmIGN1cnJlbnQgIT09ICcnXG4gICAgICAgICAgICAgID8gdHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShjdXJyZW50IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcoY3VycmVudClcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gY3VycmVudFZhbCAhPSBudWxsICYmIHZhbHVlcy5pbmNsdWRlcyhjdXJyZW50VmFsKTtcbiAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZhbHVlID0gdmFsdWVzWzBdO1xuICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLmF1dGhUeXBlRm9ybS5wYXRjaFZhbHVlKHsgYXV0aFR5cGU6IGZpcnN0VmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsU3RlcCddKSB7XG4gICAgICB0aGlzLmFwcGx5SW5pdGlhbFN0ZXAoY2hhbmdlc1snaW5pdGlhbFN0ZXAnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFVybCddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy51cmwgPSBBcGlFZGl0U3RlcENvbXBvbmVudC5kZWNvZGVVcmxGb3JEaXNwbGF5KGNoYW5nZXNbJ2luaXRpYWxVcmwnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFBheWxvYWRUYWInXT8uY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9IGNoYW5nZXNbJ2luaXRpYWxQYXlsb2FkVGFiJ10uY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaGVhZGVyTmFtZU9wdGlvbnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVIZWFkZXJOYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsSGVhZGVycyddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5idWlsZEhlYWRlcnNGb3JtQXJyYXkoY2hhbmdlc1snaW5pdGlhbEhlYWRlcnMnXS5jdXJyZW50VmFsdWUgYXMgQXBpRWRpdEhlYWRlclJvd1tdKTtcbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFJlc3BvbnNlUHJldmlldyddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJzk5OTk5OTkgaW5pdGlhbFJlc3BvbnNlUHJldmlldycsIHRoaXMuaW5pdGlhbFJlc3BvbnNlUHJldmlldyk7XG4gICAgICB0aGlzLnJlc3BvbnNlUHJldmlldyA9IGNoYW5nZXNbJ2luaXRpYWxSZXNwb25zZVByZXZpZXcnXS5jdXJyZW50VmFsdWU7XG4gICAgICAvLyBXaGVuIGEgbmV3IHJlc3BvbnNlIHByZXZpZXcgaXMgcHJvdmlkZWQgKGFmdGVyIFNlbmQgUmVxdWVzdCksIHNjcm9sbCBwcmV2aWV3IHNlY3Rpb24gaW50byB2aWV3XG4gICAgICB0aGlzLnNjcm9sbFByZXZpZXdJbnRvVmlldygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbEZvcm1hdCddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCAmJiB0aGlzLnBheWxvYWRGb3JtYXRGb3JtKSB7XG4gICAgICB0aGlzLnBheWxvYWRGb3JtYXRGb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IGNoYW5nZXNbJ2luaXRpYWxGb3JtYXQnXS5jdXJyZW50VmFsdWUgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsVmFyaWFibGVOYW1lJ10/LmN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZSA9IGNoYW5nZXNbJ2luaXRpYWxWYXJpYWJsZU5hbWUnXS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsU3VtbWFyeSddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0gY2hhbmdlc1snaW5pdGlhbFN1bW1hcnknXS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmb3JtYXRPcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlUGF5bG9hZEZvcm1hdFNlbGVjdENvbmZpZygpO1xuICAgICAgaWYgKHRoaXMucGF5bG9hZEZvcm1hdEZvcm0pIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMucGF5bG9hZEZvcm1hdEZvcm0uZ2V0KCdmb3JtYXQnKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0VmFsdWVzKCk7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsdWVzLmluY2x1ZGVzKGN1cnJlbnQpO1xuICAgICAgICBpZiAoIXZhbGlkICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IHZhbHVlc1swXTtcbiAgICAgICAgICB0aGlzLnBheWxvYWRGb3JtYXRGb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IGZpcnN0VmFsdWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3ZlcmlmaWNhdGlvbk9wdGlvbnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVWZXJpZmljYXRpb25TZWxlY3RDb25maWcoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmVyaWZpY2F0aW9uVmFsdWVzKCk7XG4gICAgICBjb25zdCBkZWZhdWx0VmVyaWZpY2F0aW9uID0gdGhpcy5nZXREZWZhdWx0VmVyaWZpY2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXkgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSAoY29udHJvbCBhcyBGb3JtR3JvdXApLmdldCgndmVyaWZpY2F0aW9uJyk/LnZhbHVlO1xuICAgICAgICAgIGlmIChjdXJyZW50ICYmICF2YWx1ZXMuaW5jbHVkZXMoY3VycmVudCkpIHtcbiAgICAgICAgICAgIChjb250cm9sIGFzIEZvcm1Hcm91cCkucGF0Y2hWYWx1ZSh7IHZlcmlmaWNhdGlvbjogZGVmYXVsdFZlcmlmaWNhdGlvbiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sndmVyaWZpY2F0aW9uRGF0YVR5cGVPcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlVmVyaWZpY2F0aW9uRGF0YVR5cGVTZWxlY3RDb25maWcoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0RGF0YVR5cGVWYWx1ZXMoKTtcbiAgICAgIGNvbnN0IGRlZmF1bHREYXRhVHlwZSA9IHRoaXMuZ2V0RGVmYXVsdERhdGFUeXBlKCk7XG4gICAgICBpZiAodGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXkgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSAoY29udHJvbCBhcyBGb3JtR3JvdXApLmdldCgnZGF0YVR5cGUnKT8udmFsdWU7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgJiYgIXZhbHVlcy5pbmNsdWRlcyhjdXJyZW50KSkge1xuICAgICAgICAgICAgKGNvbnRyb2wgYXMgRm9ybUdyb3VwKS5wYXRjaFZhbHVlKHsgZGF0YVR5cGU6IGRlZmF1bHREYXRhVHlwZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc3RhdHVzVmVyaWZpY2F0aW9uT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXR1c1ZlcmlmaWNhdGlvblNlbGVjdENvbmZpZygpO1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRTdGF0dXNWZXJpZmljYXRpb25WYWx1ZXMoKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWZXJpZmljYXRpb24gPSB0aGlzLmdldERlZmF1bHRTdGF0dXNWZXJpZmljYXRpb24oKTtcbiAgICAgIGlmICh0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheSAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IChjb250cm9sIGFzIEZvcm1Hcm91cCkuZ2V0KCd2ZXJpZmljYXRpb24nKT8udmFsdWU7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgJiYgIXZhbHVlcy5pbmNsdWRlcyhjdXJyZW50KSkge1xuICAgICAgICAgICAgKGNvbnRyb2wgYXMgRm9ybUdyb3VwKS5wYXRjaFZhbHVlKHsgdmVyaWZpY2F0aW9uOiBkZWZhdWx0VmVyaWZpY2F0aW9uIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNtb290aGx5IHNjcm9sbHMgdGhlIHJlc3BvbnNlIHByZXZpZXcgc2VjdGlvbiBpbnRvIHZpZXcgd2l0aGluIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lci5cbiAgICogQ2FsbGVkIHdoZW4gYSBmcmVzaCByZXNwb25zZSBwcmV2aWV3IHZhbHVlIGlzIHNldCBmcm9tIHRoZSBwYXJlbnQgKEFQSSBidWlsZGVyKS5cbiAgICovXG4gIHByaXZhdGUgc2Nyb2xsUHJldmlld0ludG9WaWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXNwb25zZVByZXZpZXdSZWYgfHwgIXRoaXMucmVzcG9uc2VQcmV2aWV3UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5yZXNwb25zZVByZXZpZXdSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgYmxvY2s6ICdzdGFydCcsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGxiYWNrOiBtYW51YWxseSBhZGp1c3QgY2xvc2VzdCBzY3JvbGxhYmxlIHBhcmVudCBpZiBuZWVkZWRcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5yZXNwb25zZVByZXZpZXdSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IHNjcm9sbFBhcmVudCA9IGVsLmNsb3Nlc3QoJy5jcWEtYXBpLWVkaXQtc3RlcC1jb250YWluZXInKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGVsLm9mZnNldFRvcCAtIDE2OyAvLyBzbWFsbCBwYWRkaW5nXG4gICAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUbyh7IHRvcDogb2Zmc2V0VG9wIDwgMCA/IDAgOiBvZmZzZXRUb3AsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1jb250YWluZXIgY3FhLWJnLVsjZmZmZmZmXSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXctZnVsbCBjcWEtaC1mdWxsIGNxYS1wLVsxNnB4XSBjcWEtZ2FwLVsxMnB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1vdmVyZmxvdy14LWhpZGRlbiBjcWEtYm94LWJvcmRlclwiPlxuXG4gIDxoMiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXRpdGxlIGNxYS1mb250LWludGVyIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzAwMDAwMF0gY3FhLW0tMFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ1VwZGF0ZSBBUEkgVGVzdCBTdGVwJyA6ICdDcmVhdGUgQVBJIFRlc3QgU3RlcCcgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW5kaWNhdG9yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0wIGNxYS1tYXgtWzc2N3B4XTpjcWEtZmxleC13cmFwIGNxYS1tYXgtWzc2N3B4XTpjcWEtZ2FwLTIgY3FhLW1heC1bNzY3cHhdOmNxYS1qdXN0aWZ5LXN0YXJ0XCJcbiAgICBbY2xhc3MuY3FhLWp1c3RpZnktc3RhcnRdPVwic3RlcExhYmVscy5sZW5ndGggPT09IDFcIlxuICAgIFtjbGFzcy5jcWEtanVzdGlmeS1iZXR3ZWVuXT1cInN0ZXBMYWJlbHMubGVuZ3RoICE9PSAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwTGFiZWxzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInRleHRcIlxuICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWluZGljYXRvci1pdGVtIGNxYS1hcGktZWRpdC1zdGVwLWluZGljYXRvci1pdGVtLS1jbGlja2FibGUgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVsxMHB4XSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWZvbnQtaW5oZXJpdCBjcWEtdGV4dC1pbmhlcml0IGNxYS10ZXh0LWxlZnQgIWNxYS1iZy10cmFuc3BhcmVudFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1N0ZXAgJyArIHN0ZXAuaW5kZXggKyAnOiAnICsgc3RlcC5sYWJlbFwiIFthdHRyLmFyaWEtcHJlc3NlZF09XCJzdGVwLmluZGV4ID09PSBjdXJyZW50U3RlcFwiXG4gICAgICAgIChjbGlja2VkKT1cInNldFN0ZXAoc3RlcC5pbmRleClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbmRpY2F0b3ItY2lyY2xlIGNxYS13LTggY3FhLWgtOCBjcWEtcm91bmRlZC1mdWxsIGNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctbm9uZSBjcWEtYm9yZGVyLW5vbmUgY3FhLXNocmluay0wXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJzdGVwLmluZGV4ID09PSBjdXJyZW50U3RlcCA/ICdjcWEtYmctWyM0RjQ2RTVdIGNxYS10ZXh0LXdoaXRlJyA6ICdjcWEtYmctWyNFMEUwRTBdIGNxYS10ZXh0LVsjNjY2NjY2XSdcIj5cbiAgICAgICAgICB7eyBzdGVwLmluZGV4IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbmRpY2F0b3ItbGFiZWwgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE4cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtbWF4LVs3NjdweF06Y3FhLXRleHQteHNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInN0ZXAuaW5kZXggPT09IGN1cnJlbnRTdGVwID8gJ2NxYS10ZXh0LVsjNEY0NkU1XScgOiAnY3FhLXRleHQtWyM2NjY2NjZdJ1wiPlxuICAgICAgICAgIHt7IHN0ZXAubGFiZWwgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IHN0ZXBMYWJlbHMubGVuZ3RoIC0gMVwiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW5kaWNhdG9yLWxpbmUgY3FhLXctWzk2cHhdIGNxYS1oLVsycHhdIGNxYS1iZy1bI0UwRTBFMF0gY3FhLW15LTAgY3FhLW14LVs2cHhdIGNxYS1zaHJpbmstMCBjcWEtc2VsZi1jZW50ZXIgY3FhLW1heC1bNzY3cHhdOmNxYS13LVsyNHB4XSBjcWEtbWF4LVs3NjdweF06Y3FhLW14LTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTdGVwIGNvbnRlbnQgdmlld3BvcnQ6IG9ubHkgdGhlIGFjdGl2ZSBzdGVwIGJvZHkgaXMgc2hvd24gKCpuZ0lmKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZpZXdwb3J0IGNxYS13LWZ1bGxcIj5cbiAgICA8IS0tIFN0ZXAgMTogRW52aXJvbm1lbnQsIHJlcXVlc3QsIGJvZHksIHJlc3BvbnNlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGFuZWwgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNiBjcWEtYm94LWJvcmRlciBjcWEtdy1mdWxsXCI+XG4gICAgICAgIDwhLS0gQVBJIFR5cGUgc2VnbWVudDogUkVTVCBBUEkgKGRlZmF1bHQpIHwgR3JhcGhRTCB8IFNPQVAvV2ViU29ja2V0L2dSUEMgKGRpc2FibGVkKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFwaS10eXBlLXJvdyBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjVcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hcGktdHlwZS1sYWJlbCBjcWEtbS0wIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbFwiPkFQSSBUeXBlPC9sYWJlbD5cbiAgICAgICAgICA8Y3FhLXNlZ21lbnQtY29udHJvbFxuICAgICAgICAgICAgW3ZhbHVlXT1cImFjdGl2ZUFwaVR5cGVcIlxuICAgICAgICAgICAgW3NlZ21lbnRzXT1cImFwaVR5cGVTZWdtZW50c1wiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25BcGlUeXBlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hcGktdHlwZS1zZWdtZW50XCI+XG4gICAgICAgICAgPC9jcWEtc2VnbWVudC1jb250cm9sPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFN1bW1hcnkgZmllbGQ6IGxhYmVsIG9uIHRvcCwgaW5wdXQgYmVsb3cgKGFib3ZlIEVudmlyb25tZW50KSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN1bW1hcnktcm93IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtaXRlbXMtc3RyZXRjaFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN1bW1hcnktbGFiZWwgY3FhLW0tMCBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWxcIj5TdW1tYXJ5PC9sYWJlbD5cbiAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbKHZhbHVlKV09XCJzdW1tYXJ5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiIHBsYWNlaG9sZGVyPVwiRW50ZXIgUmVxdWVzdCBzdW1tYXJ5XCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIlN1bW1hcnlcIj5cbiAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIEVudmlyb25tZW50IHJvdzogbGFiZWwgb24gdG9wLCBzZWxlY3QgYmVsb3cgKGFsaWduZWQgcmlnaHQgb24gZGVza3RvcCkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1lbnZpcm9ubWVudC1yb3cgY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1nYXAtMS41IGNxYS1pdGVtcy1lbmQgY3FhLW1heC1bNzY3cHhdOmNxYS1pdGVtcy1zdHJldGNoXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJ1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdXJsLXdyYXAgY3FhLWZsZXgtMSBjcWEtbWluLXctWzIwMHB4XSBjcWEtbWF4LVs3NjdweF06Y3FhLW1pbi13LTAgY3FhLW1heC1bNzY3cHhdOmNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJ1cmxcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidXJsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwidXJsT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ1cmxQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkVudGVyIFVSTCBvciBzZWxlY3QgUGFyYW1ldGVyXCJcbiAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdCk9XCJvblVybE9wdGlvblNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2NxYS1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXJsRXJyb3JcIiBjbGFzcz1cImNxYS10ZXh0LXJlZC02MDAgY3FhLXRleHQtc20gY3FhLW10LTFcIj5cbiAgICAgICAgICAgICAge3sgdXJsRXJyb3IgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWF4LVs3NjdweF06Y3FhLWl0ZW1zLXN0cmV0Y2hcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWVudmlyb25tZW50LWxhYmVsIGNxYS1tLTAgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdHJhY2tpbmctbm9ybWFsXCI+RW52aXJvbm1lbnRzPC9sYWJlbD5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgKm5nSWY9XCJlbnZpcm9ubWVudEZvcm1cIlxuICAgICAgICAgICAgICBbZm9ybV09XCJlbnZpcm9ubWVudEZvcm1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImVudmlyb25tZW50U2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1lbnZpcm9ubWVudC1zZWxlY3QgY3FhLXNocmluay0wIGNxYS13LWF1dG8gY3FhLW1pbi13LVszMTVweF0gY3FhLW1heC13LVszMTVweF0gY3FhLW1heC1bNzY3cHhdOmNxYS1taW4tdy0wIGNxYS1tYXgtWzc2N3B4XTpjcWEtbWF4LXctZnVsbCBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbCBbJl8ubWF0LWZvcm0tZmllbGQtd3JhcHBlcl06Y3FhLXBiLTBcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRW52aXJvbm1lbnRcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uRW52aXJvbm1lbnRTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUmVxdWVzdCByb3c6IG1ldGhvZCwgVVJMLCBidXR0b25zIC0tPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnY3FhLWl0ZW1zLXN0YXJ0JzogYWN0aXZlQXBpVHlwZSA9PT0gJ3Jlc3QnLCAnY3FhLWp1c3RpZnktYmV0d2Vlbic6IGFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJ31cIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXJlcXVlc3Qtcm93IGNxYS1mbGV4IGNxYS1nYXAtMyBjcWEtZmxleC13cmFwIGNxYS1tYXgtWzc2N3B4XTpjcWEtZmxleC1jb2wgY3FhLW1heC1bNzY3cHhdOmNxYS1pdGVtcy1zdHJldGNoIGNxYS1tYXgtWzc2N3B4XTpjcWEtZ2FwLTIuNVwiPlxuICAgICAgICAgIDwhLS0gUkVTVCBtb2RlIHNob3dzIHRoZSBIVFRQIE1ldGhvZCBkcm9wZG93bi4gR3JhcGhRTCBwaW5zIG1ldGhvZCB0byBQT1NUIGludGVybmFsbHkgc28gdGhlIGRyb3Bkb3duIGlzIGhpZGRlbi4gLS0+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCAqbmdJZj1cIm1ldGhvZEZvcm0gJiYgYWN0aXZlQXBpVHlwZSA9PT0gJ3Jlc3QnXCIgW2Zvcm1dPVwibWV0aG9kRm9ybVwiIFtjb25maWddPVwibWV0aG9kU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtbWV0aG9kLXNlbGVjdCBjcWEtc2hyaW5rLTAgY3FhLXctYXV0byBjcWEtbWluLXctWzE1MnB4XSBjcWEtbWF4LXctWzE1MnB4XSBjcWEtbWF4LVs3NjdweF06Y3FhLW1pbi13LTAgY3FhLW1heC1bNzY3cHhdOmNxYS1tYXgtdy1mdWxsIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsXCIgYXJpYS1sYWJlbD1cIkhUVFAgbWV0aG9kXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NZXRob2RTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVBcGlUeXBlID09PSAncmVzdCdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXVybC13cmFwIGNxYS1mbGV4LTEgY3FhLW1pbi13LVsyMDBweF0gY3FhLW1heC1bNzY3cHhdOmNxYS1taW4tdy0wIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICBbdmFsdWVdPVwidXJsXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInVybCA9ICRldmVudFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInVybE9wdGlvbnNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidXJsUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJFbnRlciBVUkwgb3Igc2VsZWN0IFBhcmFtZXRlclwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvcHRpb25TZWxlY3QpPVwib25VcmxPcHRpb25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9jcWEtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVybEVycm9yXCIgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNjAwIGNxYS10ZXh0LXNtIGNxYS1tdC0xXCI+XG4gICAgICAgICAgICAgIHt7IHVybEVycm9yIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gSW1wb3J0IEFQSSBjVVJMOiBSRVNULW9ubHkgKHRoZSBjVVJMIHBhcnNlciBwcm9kdWNlcyBSRVNUIHNoYXBlcykuIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVBcGlUeXBlID09PSAncmVzdCdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLXRyaWdnZXIgY3FhLWNvbnRlbnRzIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsIGNxYS1tYXgtWzc2N3B4XTohY3FhLWZsZXhcIiAoY2xpY2spPVwib3BlbkltcG9ydEN1cmxQYW5lbCgpXCI+XG4gICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIkltcG9ydCBBUEkgY1VSTFwiXG4gICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYnRuLW91dGxpbmUgIWNxYS1iZy13aGl0ZSAhY3FhLWJvcmRlciAhY3FhLWJvcmRlci1zb2xpZCAhY3FhLWJvcmRlci1bIzZCNzI4MF0gY3FhLXRleHQtWyM0MTQxNDZdIGNxYS1mb250LWludGVyIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCBob3ZlcjohY3FhLWJnLVsjRjlGQUZCXSBob3ZlcjohY3FhLXRleHQtWyM0MTQxNDZdIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsIGNxYS1tdC0xXCI+XG4gICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLVxuICAgICAgICAgICAgTG9hZCBTY2hlbWE6IEdyYXBoUUwtb25seS4gVXNlcyB0aGUgZWxldmF0ZWQgY3FhLWJ1dHRvbiB2YXJpYW50IHNvIHRoZVxuICAgICAgICAgICAgaW5kaWdvIHN1cmZhY2UgKyB0ZXh0ICsgZWxldmF0aW9uIHNoYWRvdyBjb21lIGZyb20gdGhlIGRlc2lnbiBzeXN0ZW0g4oCUXG4gICAgICAgICAgICBjdXN0b21DbGFzcyBrZWVwcyBvbmx5IHRoZSB0eXBvZ3JhcGh5ICsgcmVzcG9uc2l2ZSBzaXppbmcgdHdlYWtzLlxuICAgICAgICAgICAgRGlzYWJsZWQgLyBibG9ja2VkIHN0eWxpbmcgaXMgaGFuZGxlZCBuYXRpdmVseSBieSB0aGUgZWxldmF0ZWQgdmFyaWFudFxuICAgICAgICAgICAgKGNxYS1iZy1wcmltYXJ5LW11dGVkLCBtdXRlZCB0ZXh0LCBubyBzaGFkb3cpLCBzbyB3ZSBkb24ndCBhZGQgYW5cbiAgICAgICAgICAgIG9wYWNpdHkgb3ZlcnJpZGUgb24gdG9wLlxuICAgICAgICAgIC0tPlxuICAgICAgICAgIDxjcWEtYnV0dG9uICpuZ0lmPVwiYWN0aXZlQXBpVHlwZSA9PT0gJ2dyYXBocWwnXCIgdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJlbGV2YXRlZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJMb2FkIFNjaGVtYVwiXG4gICAgICAgICAgICBpY29uPVwic2NoZW1hXCJcbiAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWZvbnQtaW50ZXIgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsIGNxYS1tdC0xXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXJsIHx8ICF1cmwudHJpbSgpIHx8IGlzTG9hZGluZ0dyYXBoUUxTY2hlbWFcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25Mb2FkU2NoZW1hKClcIj5cbiAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJTZW5kIFJlcXVlc3RcIiAoY2xpY2tlZCk9XCJvblNlbmRSZXF1ZXN0KClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzU2VuZFJlcXVlc3REaXNhYmxlZFwiXG4gICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWJ0bi1wcmltYXJ5IGNxYS1mb250LWludGVyIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCAhY3FhLWJnLVsjM0Y0M0VFXSBjcWEtdGV4dC1bI0ZCRkNGRl0gIWNxYS1ib3JkZXItbm9uZSBjcWEtcHktMi41IGNxYS1weC02IGNxYS1nYXAtMiBjcWEtcm91bmRlZC1sZyBjcWEtbWluLWgtWzM3cHhdIGNxYS1ib3gtYm9yZGVyIGhvdmVyOiFjcWEtYmctWyMxQjFGRUJdIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsIGNxYS1tdC0xXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS1vcGFjaXR5LTUwICFjcWEtY3Vyc29yLW5vdC1hbGxvd2VkJzogaXNTZW5kUmVxdWVzdERpc2FibGVkfVwiPlxuICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cblxuXG4gICAgICAgIDwhLS0gQm9keSBjb250ZW50OiBoZWFkZXIgc2VjdGlvbiAoZGVmYXVsdCkgT1IgaW1wb3J0IGNVUkwgc2VjdGlvbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJvZHlWaWV3ID09PSAnaW1wb3J0LWN1cmwnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLXBhbmVsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS1zaGFkb3ctWzBfMXB4XzNweF9yZ2JhKDAsMCwwLDAuMDgpXSBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW1wb3J0LWN1cmwtaGVhZGVyIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtcHktMyBjcWEtcHgtNSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtYmctWyNGOUZBRkJdIGNxYS1yb3VuZGVkLXQtbGcgY3FhLW1heC1bNzY3cHhdOmNxYS1weC00XCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLXRpdGxlIGNxYS1tLTAgY3FhLXRleHQteHMgY3FhLWZvbnQtYm9sZCBjcWEtbGVhZGluZy1bMThweF0gY3FhLXRleHQtWyMzNzQxNTFdXCI+SW1wb3J0IEFQSSBjVVJMPC9oMz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLXNlcGFyYXRvciBjcWEtaC1weCBjcWEtYmctWyNFMkU4RjBdIGNxYS1teS0wIGNxYS1teC01XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW1wb3J0LWN1cmwtbm90ZSBjcWEtcHgtNSBjcWEtcHQtM1wiPlxuICAgICAgICAgICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiY1VSTCBpcyBzdXBwb3J0ZWQgaW4gQmFzaCBmb3JtYXQgb25seS5cIiBpY29uPVwiaW5mb1wiIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cInNtYWxsXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC1ib2R5XCI+XG4gICAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhIFt2YWx1ZV09XCJpbXBvcnRDdXJsQ29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImltcG9ydEN1cmxDb250cm9sLnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGFzdGUgeW91ciBjVVJMIGNvbW1hbmQgaGVyZSAoZS5nLiwgY3VybCAtWCBQT1NUIGh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3VzZXJzKVwiXG4gICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW3Jvd3NdPVwiOFwiIHJlc2l6ZT1cInZlcnRpY2FsXCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLXRleHRhcmVhXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLWZvb3RlclwiPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIkNhbmNlbFwiXG4gICAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC1idG4tY2FuY2VsXCIgKGNsaWNrZWQpPVwib25DYW5jZWxJbXBvcnRDdXJsKClcIj48L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZmlsbGVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIkltcG9ydFwiXG4gICAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC1idG4taW1wb3J0XCIgKGNsaWNrZWQpPVwib25JbXBvcnRDdXJsQ29uZmlybSgpXCI+PC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gR3JhcGhRTCBvcGVyYXRpb24gcGlja2VyIOKAlCBvcGVuZWQgYnkgdGhlIFwiTG9hZCBTY2hlbWFcIiBidXR0b24gaW4gR3JhcGhRTCBtb2RlLiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJvZHlWaWV3ID09PSAnZ3JhcGhxbC1zY2hlbWEnXCI+XG4gICAgICAgICAgPGNxYS1ncmFwaHFsLW9wZXJhdGlvbi1waWNrZXJcbiAgICAgICAgICAgIFtzY2hlbWFTb3VyY2VdPVwiZ3JhcGhRTFNjaGVtYVNvdXJjZVwiXG4gICAgICAgICAgICBbb3BlcmF0aW9uc109XCJncmFwaFFMT3BlcmF0aW9uc1wiXG4gICAgICAgICAgICBbaW50cm9zcGVjdGVkXT1cIiEhZ3JhcGhRTFNjaGVtYVNvdXJjZVwiXG4gICAgICAgICAgICBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ0dyYXBoUUxTY2hlbWFcIlxuICAgICAgICAgICAgKGJhY2spPVwib25HcmFwaFFMUGlja2VyQmFjaygpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25HcmFwaFFMUGlja2VyQmFjaygpXCJcbiAgICAgICAgICAgIChyZUludHJvc3BlY3QpPVwib25HcmFwaFFMUGlja2VyUmVJbnRyb3NwZWN0KClcIlxuICAgICAgICAgICAgKG9wZXJhdGlvblNlbGVjdGVkKT1cIm9uR3JhcGhRTFBpY2tlck9wZXJhdGlvblNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgICA8L2NxYS1ncmFwaHFsLW9wZXJhdGlvbi1waWNrZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VmlldyA9PT0gJ2hlYWRlcnMnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXRhYnMtd3JhcHBlciBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdGFic1wiPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiAqbmdGb3I9XCJsZXQgdGFiIG9mIHBheWxvYWRUYWJzXCIgdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgW3RleHRdPVwidGFiLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1hcGktZWRpdC1zdGVwLXRhYicgKyAoYWN0aXZlUGF5bG9hZFRhYiA9PT0gdGFiLnZhbHVlID8gJyBjcWEtYXBpLWVkaXQtc3RlcC10YWItLWFjdGl2ZScgOiAnJykgKyAoaXNNZXRob2RXaXRob3V0Qm9keSAmJiAodGFiLnZhbHVlID09PSAnYm9keScgfHwgdGFiLnZhbHVlID09PSAncGFyYW1zJykgPyAnIGNxYS1hcGktZWRpdC1zdGVwLXRhYi0tZGlzYWJsZWQnIDogJycpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNNZXRob2RXaXRob3V0Qm9keSAmJiAodGFiLnZhbHVlID09PSAnYm9keScgfHwgdGFiLnZhbHVlID09PSAncGFyYW1zJylcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldFBheWxvYWRUYWIodGFiLnZhbHVlKVwiPlxuICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBQYXlsb2FkIGNvbnRlbnQgKEF1dGhvcml6YXRpb24pIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVBheWxvYWRUYWIgPT09ICdhdXRob3JpemF0aW9uJ1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZFwiXG4gICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidwYWRkaW5nOiAyMHB4OyBtaW4taGVpZ2h0OiAyMDBweDsnXCI+XG4gICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMjBweDsnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5zdHlsZV09XCInZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA4cHg7IHdpZHRoOiBmaXQtY29udGVudDsnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMXB4OyBmb250LXdlaWdodDogNjAwOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogIzZCNzI4MDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGluZS1oZWlnaHQ6IDEuMjU7J1wiPkFVVEggVFlQRTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgKm5nSWY9XCJhdXRoVHlwZUZvcm1cIiBbZm9ybV09XCJhdXRoVHlwZUZvcm1cIiBbY29uZmlnXT1cImF1dGhUeXBlU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hdXRoLXR5cGUtc2VsZWN0XCIgYXJpYS1sYWJlbD1cIkF1dGggdHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidtaW4td2lkdGg6IDE2MHB4OydcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gTm8gQXV0aDogY2VudGVyZWQgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRBdXRoVHlwZSA9PT0gJ25vLWF1dGgnXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidmbGV4OiAxOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAxMnB4OyBtaW4td2lkdGg6IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyOiAxcHggc29saWQgI0U1RTdFQjsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nLXRvcDogMTZweDsgcGFkZGluZy1ib3R0b206IDE2cHg7J1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHlsZV09XCInd2lkdGg6IDQ4cHg7IGhlaWdodDogNDhweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYmFja2dyb3VuZDogI0YzRjRGNjsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZsZXgtc2hyaW5rOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNVwiIHk9XCIxMVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCIgZmlsbD1cIiM5Q0EzQUZcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzM3NDE1MTsgbGluZS1oZWlnaHQ6IDEuMjU7J1wiPk5vIEF1dGg8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiA2cHg7IGZsZXgtd3JhcDogd3JhcDsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiAjOUNBM0FGOyBsaW5lLWhlaWdodDogMS40OydcIj5UaGlzIHJlcXVlc3QgZG9lcyBub3QgdXNlIGFueSBhdXRob3JpemF0aW9uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9XCJNb3JlIGluZm9ybWF0aW9uXCIgdGl0bGU9XCJUaGlzIHJlcXVlc3QgZG9lcyBub3QgdXNlIGFueSBhdXRob3JpemF0aW9uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgd2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsgY29sb3I6ICM5Q0EzQUY7IGZsZXgtc2hyaW5rOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCA3djRNOCA1di41XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gQmVhcmVyIFRva2VuOiBUb2tlbiBsYWJlbCArIHRleHRhcmVhIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEF1dGhUeXBlID09PSAnYmVhcmVyJ1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5zdHlsZV09XCInZmxleDogMTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxMHB4OyBtaW4td2lkdGg6IDA7J1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5Ub2tlbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhIFsodmFsdWUpXT1cImJlYXJlclRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBiZWFyZXIgdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIiBbcm93c109XCI2XCIgcmVzaXplPVwidmVydGljYWxcIiBzaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWF1dGgtdG9rZW4tdGV4dGFyZWFcIiBhcmlhTGFiZWw9XCJCZWFyZXIgdG9rZW5cIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE9BdXRoIDIuMDogR3JhbnQgVHlwZSwgQWNjZXNzIFRva2VuIFVSTCwgQ2xpZW50IElELCBDbGllbnQgU2VjcmV0LCBTY29wZSwgQ2xpZW50IEF1dGhlbnRpY2F0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEF1dGhUeXBlID09PSAnb2F1dGgyJyAmJiBvYXV0aDJGb3JtXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtb2F1dGgyLWdyaWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAxNnB4IDI0cHg7IHdpZHRoOiAxMDAlOydcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNnB4OyBtaW4td2lkdGg6IDA7J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzM3NDE1MTsgbGluZS1oZWlnaHQ6IDEuMjU7J1wiPkdyYW50IFR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgKm5nSWY9XCJvYXV0aDJGb3JtXCIgW2Zvcm1dPVwib2F1dGgyRm9ybVwiIFtjb25maWddPVwib2F1dGgyR3JhbnRUeXBlU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWF1dGgtb2F1dGgtc2VsZWN0XCIgYXJpYS1sYWJlbD1cIk9BdXRoIGdyYW50IHR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidtaW4td2lkdGg6IDA7IHdpZHRoOiAxMDAlOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDExcHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICM2QjcyODA7IGxpbmUtaGVpZ2h0OiAxLjM7J1wiPk9BdXRoIGdyYW50IHR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNnB4OyBtaW4td2lkdGg6IDA7J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzM3NDE1MTsgbGluZS1oZWlnaHQ6IDEuMjU7J1wiPkFjY2VzcyBUb2tlbiBVUkw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJvYXV0aDJGb3JtLmdldCgnYWNjZXNzVG9rZW5VcmwnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvYXV0aDJGb3JtLmdldCgnYWNjZXNzVG9rZW5VcmwnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPQXV0aCB0b2tlbiBlbmRwb2ludFwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiQWNjZXNzIFRva2VuIFVSTFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDExcHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICM2QjcyODA7IGxpbmUtaGVpZ2h0OiAxLjM7J1wiPk9BdXRoIHRva2VuIGVuZHBvaW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsgbWluLXdpZHRoOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5DbGllbnQgSUQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJvYXV0aDJGb3JtLmdldCgnY2xpZW50SWQnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvYXV0aDJGb3JtLmdldCgnY2xpZW50SWQnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPQXV0aCBjbGllbnQgaWRlbnRpZmllclwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiQ2xpZW50IElEXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTFweDsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzZCNzI4MDsgbGluZS1oZWlnaHQ6IDEuMzsnXCI+T0F1dGggY2xpZW50IGlkZW50aWZpZXI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNnB4OyBtaW4td2lkdGg6IDA7J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzM3NDE1MTsgbGluZS1oZWlnaHQ6IDEuMjU7J1wiPkNsaWVudCBTZWNyZXQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJvYXV0aDJGb3JtLmdldCgnY2xpZW50U2VjcmV0Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib2F1dGgyRm9ybS5nZXQoJ2NsaWVudFNlY3JldCcpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIiBbbGFiZWxdPVwiJydcIiBwbGFjZWhvbGRlcj1cIkVudGVyIE9BdXRoIGNsaWVudCBzZWNyZXRcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkNsaWVudCBTZWNyZXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMXB4OyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjNkI3MjgwOyBsaW5lLWhlaWdodDogMS4zOydcIj5PQXV0aCBjbGllbnQgc2VjcmV0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsgbWluLXdpZHRoOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5TY29wZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgW3ZhbHVlXT1cIm9hdXRoMkZvcm0uZ2V0KCdzY29wZScpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9hdXRoMkZvcm0uZ2V0KCdzY29wZScpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHNwYWNlLXNlcGFyYXRlZCBzY29wZXNcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIlNjb3BlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTFweDsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzZCNzI4MDsgbGluZS1oZWlnaHQ6IDEuMzsnXCI+U3BhY2Utc2VwYXJhdGVkIHNjb3Blczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5zdHlsZV09XCInZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA2cHg7IG1pbi13aWR0aDogMDsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMzc0MTUxOyBsaW5lLWhlaWdodDogMS4yNTsnXCI+Q2xpZW50IEF1dGhlbnRpY2F0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0ICpuZ0lmPVwib2F1dGgyRm9ybVwiIFtmb3JtXT1cIm9hdXRoMkZvcm1cIiBbY29uZmlnXT1cIm9hdXRoMkNsaWVudEF1dGhTZWxlY3RDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYXV0aC1vYXV0aC1zZWxlY3RcIiBhcmlhLWxhYmVsPVwiQ2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3R5bGVdPVwiJ21pbi13aWR0aDogMDsgd2lkdGg6IDEwMCU7J1wiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTFweDsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzZCNzI4MDsgbGluZS1oZWlnaHQ6IDEuMzsnXCI+Q2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFBheWxvYWQgY29udGVudCAoSGVhZGVycykgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlUGF5bG9hZFRhYiA9PT0gJ2hlYWRlcnMnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXJzLWdyaWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWhlYWRlcnMtbGFiZWxcIj5IZWFkZXIgTmFtZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWhlYWRlcnMtbGFiZWxcIj5IZWFkZXIgVmFsdWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXJzLWxhYmVsIGNxYS1hcGktZWRpdC1zdGVwLWhlYWRlcnMtbGFiZWwtLWVtcHR5XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBoZWFkZXJSb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SGVhZGVyXCIgW2Zvcm1Hcm91cF09XCJyb3dcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwicm93XCIgW2NvbmZpZ109XCJoZWFkZXJOYW1lU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgIChhZGRDdXN0b21WYWx1ZSk9XCJvbkhlYWRlck5hbWVBZGRDdXN0b21WYWx1ZSgkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXItdHlwZS1zZWxlY3QgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCd2YWx1ZScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgndmFsdWUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXItdmFsdWUtaW5wdXRcIiBhcmlhTGFiZWw9XCJIZWFkZXIgdmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXItZGVsZXRlJ1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIGhlYWRlcidcIiAoY2xpY2tlZCk9XCJyZW1vdmVIZWFkZXIoaSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXItZGVsZXRlLWljb25cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC42NjYzIDZWMTIuNjY2N0g1LjMzMzAxVjZIMTAuNjY2M1pNOS42NjYzNCAySDYuMzMzMDFMNS42NjYzNCAyLjY2NjY3SDMuMzMzMDFWNEgxMi42NjYzVjIuNjY2NjdIMTAuMzMzTDkuNjY2MzQgMlpNMTEuOTk5NyA0LjY2NjY3SDMuOTk5NjdWMTIuNjY2N0MzLjk5OTY3IDEzLjQgNC41OTk2NyAxNCA1LjMzMzAxIDE0SDEwLjY2NjNDMTEuMzk5NyAxNCAxMS45OTk3IDEzLjQgMTEuOTk5NyAxMi42NjY3VjQuNjY2NjdaXCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0Y5QkZCRlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYWRkLWhlYWRlci13cmFwXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgdGV4dD1cIisgQWRkIEhlYWRlclwiXG4gICAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1hcGktZWRpdC1zdGVwLWFkZC1oZWFkZXItbGluaydcIiAoY2xpY2tlZCk9XCJhZGRIZWFkZXIoKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBQYXlsb2FkIGNvbnRlbnQgKFBhcmFtcyk6IEtleeKAk1ZhbHVlIHRhYmxlIHdpdGggYWRkL2RlbGV0ZSByb3dzLiBSRVNULW9ubHkg4oCUIEdyYXBoUUwgUE9TVCBoYXMgbm8gcXVlcnkgcGFyYW1zLiAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVQYXlsb2FkVGFiID09PSAncGFyYW1zJyAmJiBhY3RpdmVBcGlUeXBlID09PSAncmVzdCdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1ncmlkIGNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbFwiPktleTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbFwiPlZhbHVlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWxhYmVsIGNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbC0tZW1wdHlcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIHBhcmFtc1Jvd3M7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlQYXJhbXNcIiBbZm9ybUdyb3VwXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtcm93XCI+XG4gICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInJvdy5nZXQoJ2tleScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgna2V5Jyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIktleVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1pbnB1dFwiIGFyaWFMYWJlbD1cIktleVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgndmFsdWUnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlZhbHVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWlucHV0XCIgYXJpYUxhYmVsPVwiVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtZGVsZXRlJ1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIHJvdydcIiAoY2xpY2tlZCk9XCJyZW1vdmVQYXJhbXNSb3coaSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtZGVsZXRlLWljb25cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC42NjYzIDZWMTIuNjY2N0g1LjMzMzAxVjZIMTAuNjY2M1pNOS42NjYzNCAySDYuMzMzMDFMNS42NjYzNCAyLjY2NjY3SDMuMzMzMDFWNEgxMi42NjYzVjIuNjY2NjdIMTAuMzMzTDkuNjY2MzQgMlpNMTEuOTk5NyA0LjY2NjY3SDMuOTk5NjdWMTIuNjY2N0MzLjk5OTY3IDEzLjQgNC41OTk2NyAxNCA1LjMzMzAxIDE0SDEwLjY2NjNDMTEuMzk5NyAxNCAxMS45OTk3IDEzLjQgMTEuOTk5NyAxMi42NjY3VjQuNjY2NjdaXCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0Y5QkZCRlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWFkZC13cmFwXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiKyBBZGQgUm93XCJcbiAgICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWFkZC1idG5cIiAoY2xpY2tlZCk9XCJhZGRQYXJhbXNSb3coKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBQYXlsb2FkIGNvbnRlbnQgKEJvZHkgb25seSk6IHR5cGUsIGZvcm1hdCwgdGV4dCBhcmVhLCBCYWNrL05leHQuIFJFU1Qtb25seSDigJQgR3JhcGhRTCB1c2VzIHRoZSBkZWRpY2F0ZWQgdGFiIGJlbG93LiAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVQYXlsb2FkVGFiID09PSAnYm9keScgJiYgYWN0aXZlQXBpVHlwZSA9PT0gJ3Jlc3QnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkIGNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtZWRpdG9yXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXR5cGUtcm93XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXR5cGUtbGFiZWxcIj5UeXBlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXR5cGUtcmFkaW9zXCI+XG4gICAgICAgICAgICAgICAgICA8Y3FhLXNlZ21lbnQtY29udHJvbCBbdmFsdWVdPVwicGF5bG9hZFR5cGVcIiBbc2VnbWVudHNdPVwicGF5bG9hZFR5cGVTZWdtZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblBheWxvYWRUeXBlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtdHlwZS1zZWdtZW50XCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1zZWdtZW50LWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBheWxvYWRUeXBlID09PSAncmF3J1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1mb3JtYXQtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWZvcm1hdC1sYWJlbFwiPkZvcm1hdDo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0ICpuZ0lmPVwicGF5bG9hZEZvcm1hdEZvcm1cIiBbZm9ybV09XCJwYXlsb2FkRm9ybWF0Rm9ybVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwicGF5bG9hZEZvcm1hdFNlbGVjdENvbmZpZ1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1mb3JtYXQtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkZvcm1hdFwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8IS0tIFJhdzogdGV4dCBhcmVhIHdpdGggbGluZSBudW1iZXJzIChQb3N0bWFuLXN0eWxlIHBheWxvYWQgYm9keSkgLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXlsb2FkVHlwZSA9PT0gJ3JhdydcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtYm9keVwiICNwYXlsb2FkRWRpdG9yV2l0aExpbmVzUmVmPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWVkaXRvci13aXRoLWxpbmVzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1saW5lLW51bWJlcnNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IG4gb2YgcGF5bG9hZExpbmVOdW1iZXJzXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWxpbmUtbnVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYXlsb2FkSnNvbkVycm9yICYmIHBheWxvYWRKc29uRXJyb3IubGluZSA9PT0gblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtbGluZS1lcnJvci1pY29uXCIgW3RpdGxlXT1cInBheWxvYWRKc29uRXJyb3JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQYXJzZSBlcnJvciBvbiB0aGlzIGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiN1wiIGN5PVwiN1wiIHI9XCI2XCIgZmlsbD1cIiNFRjQ0NDRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNCA0bDYgNk0xMCA0bC02IDZcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWxpbmUtbnVtLXRleHRcIj57eyBuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXRleHRhcmVhLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtdGV4dGFyZWEgY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi1oLTBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC10ZXh0YXJlYS0tZXJyb3InOiBwYXlsb2FkSnNvbkVycm9yfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAjcGF5bG9hZFRleHRhcmVhUmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtdGV4dGFyZWEtaW5wdXQgY3FhLXctZnVsbCBjcWEtb3V0bGluZS1ub25lIGNxYS1ib3gtYm9yZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC10ZXh0YXJlYS1pbnB1dC0tZXJyb3InOiBwYXlsb2FkSnNvbkVycm9yfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGF5bG9hZFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUGF5bG9hZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIiEhcGF5bG9hZEpzb25FcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25QYXlsb2FkSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblBheWxvYWRLZXlkb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwicGF5bG9hZEpzb25FcnJvclwiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1qc29uLWVycm9yLW1zZ1wiPlxuICAgICAgICAgICAgICAgICAgSW52YWxpZCBKU09OIGZvcm1hdC4gUGxlYXNlIGNoZWNrIHlvdXIgc3ludGF4LlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSB4LXd3dy1mb3JtLXVybGVuY29kZWQ6IEtleeKAk1ZhbHVlIHJvd3MsIGFkZC9yZW1vdmUgZHluYW1pY2FsbHkgLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXlsb2FkVHlwZSA9PT0gJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtZ3JpZCBjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbFwiPktleTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWxhYmVsXCI+VmFsdWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbCBjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtbGFiZWwtLWVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBrZXlWYWx1ZVJvd3M7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlLZXlWYWx1ZVwiIFtmb3JtR3JvdXBdPVwicm93XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInJvdy5nZXQoJ2tleScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCdrZXknKT8uc2V0VmFsdWUoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiS2V5XCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtaW5wdXRcIiBhcmlhTGFiZWw9XCJLZXlcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCd2YWx1ZScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWlucHV0XCIgYXJpYUxhYmVsPVwiVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIFtjdXN0b21DbGFzc109XCInY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWRlbGV0ZSdcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIHJvdydcIiAoY2xpY2tlZCk9XCJyZW1vdmVLZXlWYWx1ZVJvdyhpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWRlbGV0ZS1pY29uXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNjY2MyA2VjEyLjY2NjdINS4zMzMwMVY2SDEwLjY2NjNaTTkuNjY2MzQgMkg2LjMzMzAxTDUuNjY2MzQgMi42NjY2N0gzLjMzMzAxVjRIMTIuNjY2M1YyLjY2NjY3SDEwLjMzM0w5LjY2NjM0IDJaTTExLjk5OTcgNC42NjY2N0gzLjk5OTY3VjEyLjY2NjdDMy45OTk2NyAxMy40IDQuNTk5NjcgMTQgNS4zMzMwMSAxNEgxMC42NjYzQzExLjM5OTcgMTQgMTEuOTk5NyAxMy40IDExLjk5OTcgMTIuNjY2N1Y0LjY2NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0Y5QkZCRlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtYWRkLXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZmlsbGVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIisgQWRkIFJvd1wiXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWFkZC1idG5cIiAoY2xpY2tlZCk9XCJhZGRLZXlWYWx1ZVJvdygpXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gRm9ybSBEYXRhOiBLZXnigJNUeXBl4oCTVmFsdWUgcm93czsgVHlwZSBpcyBhIGRyb3Bkb3duIChUZXh0L0ZpbGUpLCBhZGQvcmVtb3ZlIGR5bmFtaWNhbGx5IC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGF5bG9hZFR5cGUgPT09ICdmb3JtLWRhdGEnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtbGFiZWxcIj5LZXk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWxhYmVsXCI+VHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtbGFiZWxcIj5WYWx1ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtbGFiZWwgY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtbGFiZWwtLWVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBrZXlUeXBlVmFsdWVSb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5S2V5VHlwZVZhbHVlXCIgW2Zvcm1Hcm91cF09XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCdrZXknKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgna2V5Jyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIktleVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtaW5wdXRcIiBhcmlhTGFiZWw9XCJLZXlcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwicm93XCIgW2NvbmZpZ109XCJrZXlUeXBlVmFsdWVUeXBlU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZS10eXBlLXNlbGVjdCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCd2YWx1ZScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtaW5wdXRcIiBhcmlhTGFiZWw9XCJWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZS1kZWxldGUnXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlbW92ZSByb3cnXCIgKGNsaWNrZWQpPVwicmVtb3ZlS2V5VHlwZVZhbHVlUm93KGkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZS1kZWxldGUtaWNvblwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjY2NjMgNlYxMi42NjY3SDUuMzMzMDFWNkgxMC42NjYzWk05LjY2NjM0IDJINi4zMzMwMUw1LjY2NjM0IDIuNjY2NjdIMy4zMzMwMVY0SDEyLjY2NjNWMi42NjY2N0gxMC4zMzNMOS42NjYzNCAyWk0xMS45OTk3IDQuNjY2NjdIMy45OTk2N1YxMi42NjY3QzMuOTk5NjcgMTMuNCA0LjU5OTY3IDE0IDUuMzMzMDEgMTRIMTAuNjY2M0MxMS4zOTk3IDE0IDExLjk5OTcgMTMuNCAxMS45OTk3IDEyLjY2NjdWNC42NjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGOUJGQkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtYWRkLXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZmlsbGVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIisgQWRkIFJvd1wiXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtYWRkLWJ0blwiIChjbGlja2VkKT1cImFkZEtleVR5cGVWYWx1ZVJvdygpXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUGF5bG9hZCBjb250ZW50IChHcmFwaFFMKTogUXVlcnkgKyBWYXJpYWJsZXMgKyBPcGVyYXRpb24gTmFtZS4gQWN0aXZlIG9ubHkgaW4gR3JhcGhRTCBtb2RlLiAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVQYXlsb2FkVGFiID09PSAnZ3JhcGhxbCcgJiYgYWN0aXZlQXBpVHlwZSA9PT0gJ2dyYXBocWwnICYmIGdyYXBoUUxGb3JtXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWdyYXBocWwgY3FhLWFwaS1lZGl0LXN0ZXAtZ3JhcGhxbC10YWIgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNFwiPlxuICAgICAgICAgICAgICA8IS0tXG4gICAgICAgICAgICAgICAgUXVlcnkgLyBWYXJpYWJsZXMgdXNlIHRoZSBkZXNpZ24tc3lzdGVtIGBjcWEtY3VzdG9tLXRleHRhcmVhYCBzb1xuICAgICAgICAgICAgICAgIHN0eWxpbmcsIGxhYmVsLCBlcnJvciByZW5kZXJpbmcsIGFuZCBhY2Nlc3NpYmlsaXR5IGNvbWUgZnJvbSB0aGVcbiAgICAgICAgICAgICAgICBwcmltaXRpdmUuIFdlIGJpbmQgdmlhIFt2YWx1ZV0gLyAodmFsdWVDaGFuZ2UpIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWUgYmVjYXVzZSBjcWEtY3VzdG9tLXRleHRhcmVhIGlzbid0IGEgQ1ZBIOKAlCBjYWxsaW5nXG4gICAgICAgICAgICAgICAgZm9ybS5nZXQoJ+KApicpLnNldFZhbHVlIHN0aWxsIGZpcmVzIHRoZSBleGlzdGluZyB2YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zICh3aGljaCBjbGVhciBpbmxpbmUgZXJyb3JzIGFuZCByZWNvbXB1dGUgdGhlXG4gICAgICAgICAgICAgICAgbXVsdGktb3BlcmF0aW9uIHdhcm5pbmcpLlxuICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICAgICAgPGNxYS1jdXN0b20tdGV4dGFyZWFcbiAgICAgICAgICAgICAgICBsYWJlbD1cIlF1ZXJ5XCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdyYXBoUUxGb3JtLmdldCgncXVlcnknKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJncmFwaFFMRm9ybS5nZXQoJ3F1ZXJ5Jyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwicXVlcnkgR2V0WCgkaWQ6IElEISkgeyYjMTA7ICB4KGlkOiAkaWQpIHsgbmFtZSB9JiMxMDt9XCJcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJHcmFwaFFMIHF1ZXJ5XCJcbiAgICAgICAgICAgICAgICBbZXJyb3JzXT1cImdyYXBoUUxRdWVyeUVycm9yID8gW2dyYXBoUUxRdWVyeUVycm9yXSA6IFtdXCJcbiAgICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjRcIlxuICAgICAgICAgICAgICAgIHJlc2l6ZT1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICBzaXplPVwibWRcIj5cbiAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xXCJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVmFyaWFibGVzIChKU09OKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ3JhcGhRTEZvcm0uZ2V0KCd2YXJpYWJsZXMnKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImdyYXBoUUxGb3JtLmdldCgndmFyaWFibGVzJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3sgXCJpZFwiOiBcImFiY1wiIH0nXG4gICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJHcmFwaFFMIHZhcmlhYmxlc1wiXG4gICAgICAgICAgICAgICAgICBbZXJyb3JzXT1cImdyYXBoUUxWYXJpYWJsZXNFcnJvciA/IFtncmFwaFFMVmFyaWFibGVzRXJyb3JdIDogW11cIlxuICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgcmVzaXplPVwidmVydGljYWxcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1kXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwhLS0gT3BlcmF0aW9uIE5hbWU6IG9wdGlvbmFsIHVubGVzcyAyKyBvcGVyYXRpb25zIGFyZSBkZWNsYXJlZC4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWdyYXBocWwtZmllbGQgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1ncmFwaHFsLWxhYmVsIGNxYS1tLTAgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMzc0MTUxXVwiPk9wZXJhdGlvbiBOYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJncmFwaFFMRm9ybS5nZXQoJ29wZXJhdGlvbk5hbWUnKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZ3JhcGhRTEZvcm0uZ2V0KCdvcGVyYXRpb25OYW1lJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIiBwbGFjZWhvbGRlcj1cImUuZy4gR2V0Qm9va2luZ1wiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkdyYXBoUUwgb3BlcmF0aW9uIG5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmdcIiBjbGFzcz1cImNxYS10ZXh0LVsjQjQ1MzA5XSBjcWEtdGV4dC1bMTJweF0gY3FhLW10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmcgfX1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1yb3cgY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtdGV4dC1bMTJweF0gY3FhLXAtMlwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogOHB4OyBib3JkZXI6IDFweCBzb2xpZCAjRURFOUZFOyBiYWNrZ3JvdW5kOiAjRjVGM0ZGO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImRpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDogNjAwO1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjN0MzQUVEXVwiID5saWdodGJ1bGI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsjN0MzQUVEXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFVzZSA8c3BhbiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBjb2xvcjpibGFjazsgYm9yZGVyLXJhZGl1czogNHB4OyBwYWRkaW5nOiAycHg7XCI+dmFyPC9zcGFuPiBpbiB2YXJpYWJsZXMgdG8gYmluZCBmcm9tIGVhcmxpZXIgc3RlcHMuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gQWR2YW5jZWQgc2V0dGluZ3MgKHN0ZXAtbGV2ZWwpLiBIaWRkZW4gd2hpbGUgdGhlIEdyYXBoUUwgcGlja2VyIGlzIG9wZW4gc28gaXQgZG9lc24ndCBjb21wZXRlIGZvciBmb2N1cyB3aXRoIHRoZSBvcGVyYXRpb24gbGlzdC4gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJib2R5VmlldyAhPT0gJ2dyYXBocWwtc2NoZW1hJ1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0IGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLXB5LTIgY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VkRXhwYW5kZWQgPSAhYWR2YW5jZWRFeHBhbmRlZFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF1cIj5BZHZhbmNlZDwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJhZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgIGV4cGFuZF9tb3JlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZHZhbmNlZEV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtbXQtMlwiPlxuICAgICAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybVxuICAgICAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc1wiXG4gICAgICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJhZHZhbmNlZFZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAodmFyaWFibGVWYWx1ZUNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgPC9jcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gICAgPCEtLSBTdGVwIDI6IFZhcmlhYmxlIE5hbWU6IGlucHV0LCB2YWxpZGF0aW9uLCBCYWNrIC8gTmV4dCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IDJcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBhbmVsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTYgY3FhLWJveC1ib3JkZXIgY3FhLXctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmFyaWFibGUtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12YXJpYWJsZS1pbnB1dC13cmFwXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbKHZhbHVlKV09XCJ2YXJpYWJsZU5hbWVcIiBbbGFiZWxdPVwiJydcIiBwbGFjZWhvbGRlcj1cIlZhcmlhYmxlIE5hbWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBzaXplPVwibWRcIiAodmFsdWVDaGFuZ2UpPVwib25WYXJpYWJsZU5hbWVDaGFuZ2UoKVwiIGFyaWEtbGFiZWw9XCJWYXJpYWJsZSBOYW1lXCI+XG4gICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAgKm5nSWY9XCJ2YXJpYWJsZU5hbWVFcnJvclwiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmFyaWFibGUtZXJyb3JcIiByb2xlPVwiYWxlcnRcIj57eyB2YXJpYWJsZU5hbWVFcnJvciB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBTdGVwIDM6IFJlc3BvbnNlIEJvZHkgLyBTdGF0dXMgdGFicyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IDNcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBhbmVsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTYgY3FhLWJveC1ib3JkZXIgY3FhLXctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdGFicy13cmFwcGVyIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdGFic1wiPlxuICAgICAgICAgICAgPGNxYS1idXR0b24gKm5nRm9yPVwibGV0IHRhYiBvZiByZXNwb25zZVZlcmlmaWNhdGlvblRhYnNcIiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInRleHRcIiBbdGV4dF09XCJ0YWIubGFiZWxcIlxuICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1hcGktZWRpdC1zdGVwLXRhYicgKyAoYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIgPT09IHRhYi52YWx1ZSA/ICcgY3FhLWFwaS1lZGl0LXN0ZXAtdGFiLS1hY3RpdmUnIDogJycpXCJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0UmVzcG9uc2VWZXJpZmljYXRpb25UYWIodGFiLnZhbHVlKVwiPlxuICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSZXNwb25zZSBCb2R5IHRhYiBjb250ZW50OiB2ZXJpZmljYXRpb24gZ3JpZCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIgPT09ICdyZXNwb25zZS1ib2R5J1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtc3RlcDMtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1oZWFkZXItcm93IGNxYS1mbGV4IGNxYS1mbGV4LXJvdyBjcWEtanVzdGlmeS1lbmQgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHQtMCBjcWEtcHItMCBjcWEtcGItMiBjcWEtcGwtMFwiPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIHRleHQ9XCJBZGQgVmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1hZGQtbGlua1wiIChjbGlja2VkKT1cImFkZFZlcmlmaWNhdGlvblJvdygpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWdyaWQgY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWdyaWQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWxcIj5TLm5vPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+SlNPTiBQYXRoPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+VmVyaWZpY2F0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+RGF0YSBUeXBlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+RXhwZWN0ZWQgVmFsdWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWwgY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsLS1lbXB0eVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgdmVyaWZpY2F0aW9uUm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVZlcmlmaWNhdGlvblwiIFtmb3JtR3JvdXBdPVwicm93XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1yb3dcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1zbm9cIj57eyBpICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgnanNvblBhdGgnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ2pzb25QYXRoJyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIkpzb24gUGF0aFwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1pbnB1dFwiIGFyaWFMYWJlbD1cIkpTT04gUGF0aFwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cInJvd1wiIFtjb25maWddPVwidmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLXNlbGVjdCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJyb3dcIiBbY29uZmlnXT1cInZlcmlmaWNhdGlvbkRhdGFUeXBlU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLXNlbGVjdCBjcWEtdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25WZXJpZmljYXRpb25EYXRhVHlwZUNoYW5nZShyb3csICRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8IS0tIEV4cGVjdGVkIFZhbHVlOiB0ZXh0IGZvciBTdHJpbmcvQXJyYXkvT2JqZWN0LCBudW1iZXIgZm9yIE51bWJlciwgZHJvcGRvd24gZm9yIEJvb2xlYW4gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicm93LmdldCgnZGF0YVR5cGUnKT8udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIFtmb3JtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwidmVyaWZpY2F0aW9uRXhwZWN0ZWRWYWx1ZUJvb2xlYW5TZWxlY3RDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1zZWxlY3QgY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWV4cGVjdGVkLXNlbGVjdCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIFt2YWx1ZV09XCJyb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ2V4cGVjdGVkVmFsdWUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiRXhwZWN0ZWQgVmFsdWUgKG51bWJlcilcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24taW5wdXQgY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWV4cGVjdGVkLW51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkV4cGVjdGVkIFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCAqbmdTd2l0Y2hEZWZhdWx0IFt2YWx1ZV09XCJyb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ2V4cGVjdGVkVmFsdWUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRXhwZWN0ZWQgVmFsdWUgaW4gU3RyaW5nXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24taW5wdXRcIiBhcmlhTGFiZWw9XCJFeHBlY3RlZCBWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIFtjdXN0b21DbGFzc109XCInY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWRlbGV0ZSdcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlbW92ZSByb3cnXCIgKGNsaWNrZWQpPVwicmVtb3ZlVmVyaWZpY2F0aW9uUm93KGkpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWRlbGV0ZS1pY29uXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNjY2MyA2VjEyLjY2NjdINS4zMzMwMVY2SDEwLjY2NjNaTTkuNjY2MzQgMkg2LjMzMzAxTDUuNjY2MzQgMi42NjY2N0gzLjMzMzAxVjRIMTIuNjY2M1YyLjY2NjY3SDEwLjMzM0w5LjY2NjM0IDJaTTExLjk5OTcgNC42NjY2N0gzLjk5OTY3VjEyLjY2NjdDMy45OTk2NyAxMy40IDQuNTk5NjcgMTQgNS4zMzMwMSAxNEgxMC42NjYzQzExLjM5OTcgMTQgMTEuOTk5NyAxMy40IDExLjk5OTcgMTIuNjY2N1Y0LjY2NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGOUJGQkZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTdGF0dXMgdGFiIGNvbnRlbnQ6IFMubm8sIFZlcmlmaWNhdGlvbiBkcm9wZG93biwgRXhwZWN0ZWQgVmFsdWUsIGFkZC9yZW1vdmUgcm93cyAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIgPT09ICdzdGF0dXMnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1zdGVwMy1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWhlYWRlci1yb3cgY3FhLWZsZXggY3FhLWZsZXgtcm93IGNxYS1qdXN0aWZ5LWVuZCBjcWEtaXRlbXMtY2VudGVyIGNxYS1wdC0wIGNxYS1wci0wIGNxYS1wYi0yIGNxYS1wbC0wXCI+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgdGV4dD1cIkFkZCBWZXJpZmljYXRpb25cIlxuICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWFkZC1saW5rXCIgKGNsaWNrZWQpPVwiYWRkU3RhdHVzVmVyaWZpY2F0aW9uUm93KClcIj5cbiAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtc3RhdHVzLXZlcmlmaWNhdGlvblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtc3RhdHVzLXZlcmlmaWNhdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbFwiPlMubm88L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWxcIj5WZXJpZmljYXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWxcIj5FeHBlY3RlZCBWYWx1ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbCBjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWwtLWVtcHR5XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdGF0dXNWZXJpZmljYXRpb25Sb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5U3RhdHVzVmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cInJvd1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtc3RhdHVzLXZlcmlmaWNhdGlvbi1yb3dcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1zbm9cIj57eyBpICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cInJvd1wiIFtjb25maWddPVwic3RhdHVzVmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtc3RhdHVzLXZlcmlmaWNhdGlvbi1zZWxlY3QgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIkV4cGVjdGVkIFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwic21cIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJFeHBlY3RlZCBWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInRleHRcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1kZWxldGUnXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidSZW1vdmUgcm93J1wiIChjbGlja2VkKT1cInJlbW92ZVN0YXR1c1ZlcmlmaWNhdGlvblJvdyhpKVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1kZWxldGUtaWNvblwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjY2NjMgNlYxMi42NjY3SDUuMzMzMDFWNkgxMC42NjYzWk05LjY2NjM0IDJINi4zMzMwMUw1LjY2NjM0IDIuNjY2NjdIMy4zMzMwMVY0SDEyLjY2NjNWMi42NjY2N0gxMC4zMzNMOS42NjYzNCAyWk0xMS45OTk3IDQuNjY2NjdIMy45OTk2N1YxMi42NjY3QzMuOTk5NjcgMTMuNCA0LjU5OTY3IDE0IDUuMzMzMDEgMTRIMTAuNjY2M0MxMS4zOTk3IDE0IDExLjk5OTcgMTMuNCAxMS45OTk3IDEyLjY2NjdWNC42NjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjlCRkJGXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVzcG9uc2UgUHJldmlldy4gSGlkZGVuIHdoaWxlIHRoZSBHcmFwaFFMIHBpY2tlciBpcyBvcGVuIOKAlCB0aGUgdXNlciBpcyBpbiBcInBpY2sgYW4gb3BlcmF0aW9uXCIgbW9kZSwgbm90IFwidmlldyBsYXN0IHJlc3BvbnNlXCIgbW9kZSwgc28gc2hvd2luZyBhIHN0YWxlIHByZXZpZXcgYmVsb3cgdGhlIHBpY2tlciBpcyBqdXN0IG5vaXNlLiAtLT5cbiAgPGRpdiAqbmdJZj1cImJvZHlWaWV3ICE9PSAnZ3JhcGhxbC1zY2hlbWEnXCIgI3Jlc3BvbnNlUHJldmlld1JlZiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXJlc3BvbnNlXCI+XG4gICAgPGgzIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcmVzcG9uc2UtdGl0bGUgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LWJvbGQgY3FhLWxlYWRpbmctWzIwcHhdIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtbS0wIGNxYS1tYi1bMTJweF0gY3FhLXNocmluay0wXCI+UmVzcG9uc2UgUHJldmlldzwvaDM+XG4gICAgPHByZSBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXJlc3BvbnNlLWNvbnRlbnRcIj57eyByZXNwb25zZVByZXZpZXcgfX08L3ByZT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTdGVwIGFjdGlvbnM6IG9uZSByb3csIGZ1bGwgd2lkdGguIFN0ZXAgMTogQ2FuY2VsICsgTmV4dDsgU3RlcCAyOiBCYWNrICsgTmV4dDsgU3RlcCAzOiBCYWNrICsgQ3JlYXRlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYm9keVZpZXcgIT09ICdncmFwaHFsLXNjaGVtYSdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFjdGlvbnNcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjdXJyZW50U3RlcFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiMVwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIkNhbmNlbFwiXG4gICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hY3Rpb25zLWJ0bi1jYW5jZWxcIiAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiTmV4dFwiXG4gICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hY3Rpb25zLWJ0bi1uZXh0XCIgKGNsaWNrZWQpPVwib25OZXh0KClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIyXCI+XG4gICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwib3V0bGluZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiQmFja1wiXG4gICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hY3Rpb25zLWJ0bi1iYWNrXCIgKGNsaWNrZWQpPVwib25CYWNrKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJOZXh0XCJcbiAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFjdGlvbnMtYnRuLW5leHRcIiAoY2xpY2tlZCk9XCJvbk5leHQoKVwiPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIjNcIj5cbiAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJCYWNrXCJcbiAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFjdGlvbnMtYnRuLWJhY2tcIiAoY2xpY2tlZCk9XCJvbkJhY2soKVwiPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgIDxjcWEtYnV0dG9uICpuZ0lmPVwiIWlzQ3JlYXRpbmdTdGVwXCIgdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiBbdGV4dF09XCJlZGl0TW9kZSA/ICdVcGRhdGUnIDogJ0NyZWF0ZSdcIlxuICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYWN0aW9ucy1idG4tY3JlYXRlXCIgKGNsaWNrZWQpPVwib25DcmVhdGUoKVwiPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgIDwhLS0gTWF0Y2ggY3FhLWJ1dHRvbiBmbGV4OiBhY3Rpb25zIHJvdyBzdHlsZXMgPiBjcWEtYnV0dG9uIHsgZmxleDogMSAxIDAgfSDigJQgbG9hZGVyIGRpdiBtdXN0IGdyb3cgc2FtZSB3aWR0aCBhcyBDcmVhdGUgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0NyZWF0aW5nU3RlcFwiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYWN0aW9ucy1sb2FkZXIgY3FhLXctZnVsbCBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkNyZWF0aW5n4oCmXCIgaWNvbj1cImF1dG9yZW5ld1wiIFtpc0xvYWRpbmddPVwidHJ1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjZW50ZXJDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgW2lubGluZVN0eWxlc109XCInbWluLWhlaWdodDogMzhweDsgaGVpZ2h0OiAzOHB4OyB3aWR0aDogMTAwJTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgICAgICB2YXJpYW50PVwiaW5mb1wiIHNpemU9XCJtZWRpdW1cIj48L2NxYS1iYWRnZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
2639
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWVkaXQtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1lZGl0LXN0ZXAvYXBpLWVkaXQtc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1lZGl0LXN0ZXAvYXBpLWVkaXQtc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBZSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNaEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFVBQVUsRUFBRSxZQUFZO0NBQ2hCLENBQUM7QUF3SFgsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFdkQsOEVBQThFO0FBQzlFLE1BQU0sd0JBQXdCLEdBQTJCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBWXBHLFNBQVMsYUFBYSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxLQUFLLFFBQVEsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsU0FBUyxhQUFhLENBQUMsRUFBVTtJQUMvQixPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLEtBQUssUUFBUSxDQUFDO0FBQzFELENBQUM7QUFDRCxTQUFTLGNBQWMsQ0FBQyxFQUFVLEVBQUUsU0FBaUI7SUFDbkQsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQUUsT0FBTyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQUUsT0FBTyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsT0FBTyxFQUFFLEtBQUssU0FBUyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO0lBQ3BDLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLEVBQUUsQ0FBQztZQUNKLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDckMsQ0FBQyxFQUFFLENBQUM7b0JBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQzt3QkFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQy9CO3FCQUFNO29CQUNMLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDcEI7YUFDRjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQUUsQ0FBQyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLFNBQVM7U0FDVjtRQUNELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekYsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxJQUFJO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCwrRkFBK0Y7QUFDL0YsU0FBUyxzQkFBc0IsQ0FBQyxDQUFTO0lBQ3ZDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN2RyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMxQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVM7SUFDNUIsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxtQkFBbUI7SUFDekUsY0FBYyxFQUFFLElBQUk7SUFDcEIsVUFBVSxFQUFFLElBQUk7SUFDaEIsY0FBYyxFQUFFLElBQUk7SUFDcEIsSUFBSSxFQUFFLFVBQVU7SUFDaEIsSUFBSSxFQUFFLFFBQVE7SUFDZCxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQ3pDLG1CQUFtQixFQUFFLFlBQVksRUFBRSxJQUFJO0lBQ3ZDLFNBQVMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCO0lBQzlDLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZTtJQUM5QyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFdBQVcsRUFBRSxjQUFjO0lBQzNCLGVBQWUsRUFBRSxlQUFlO0lBQ2hDLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsUUFBUSxFQUFFLFVBQVU7SUFDcEIsZ0JBQWdCLEVBQUUsY0FBYztDQUNqQyxDQUFDLENBQUM7QUFFSCxtRkFBbUY7QUFDbkYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNoQyxjQUFjLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSTtJQUN0RCxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUk7SUFDbEQsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSTtJQUNwQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJO0lBQ2pDLGVBQWUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CO0lBQzFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUk7SUFDOUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWE7SUFDM0QsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLElBQUk7SUFDckQsZUFBZSxFQUFFLElBQUksRUFBRSxlQUFlO0lBQ3RDLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEUsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJO0lBQzlCLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZTtJQUNoRCxjQUFjLEVBQUUsYUFBYSxFQUFFLElBQUk7SUFDbkMsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSTtJQUNyQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGtCQUFrQjtDQUMxRCxDQUFDLENBQUM7QUFFSCxnR0FBZ0c7QUFDaEcsU0FBUyxjQUFjLENBQUMsR0FBVztJQUNqQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0Isa0NBQWtDO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5RCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNuRDtJQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxTQUFTLENBQUMsVUFBa0I7SUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV0QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFFWiw4RUFBOEU7SUFDOUUsd0VBQXdFO0lBQ3hFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFFLHNCQUFzQjtRQUNoRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBVyxrQ0FBa0M7UUFDOUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQWlCLDZCQUE2QjtLQUMxRTtJQUVELDhFQUE4RTtJQUM5RSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFcEMsOEVBQThFO0lBQzlFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLDJEQUEyRDtJQUMzRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixNQUFNLE9BQU8sR0FBdUIsRUFBRSxDQUFDO0lBQ3ZDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLE1BQU0sUUFBUSxHQUE0RCxFQUFFLENBQUM7SUFDN0UsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDO0lBRW5DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLFdBQVcsR0FBRyxHQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFcEQsMEVBQTBFO1FBQzFFLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFFdkMsK0VBQStFO1FBQy9FLElBQUksMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQUUsV0FBVyxFQUFFLENBQUM7WUFBQyxTQUFTO1NBQUU7UUFFcEUseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssV0FBVyxFQUFFO1lBQ25DLE1BQU0sQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQUMsSUFBSSxDQUFDO2dCQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFBQyxTQUFTO1NBQ3BFO1FBQ0QsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUFDLFNBQVM7U0FDbEU7UUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFBQyxTQUFTO1NBQzdDO1FBRUQsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxNQUFNLEdBQUcsR0FBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxJQUFJO29CQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUM5RDtZQUNELFNBQVM7U0FDVjtRQUNELHFGQUFxRjtRQUNyRixJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQyxNQUFNLEdBQUcsR0FBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxJQUFJO29CQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUM5RDtZQUNELFNBQVM7U0FDVjtRQUVELHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLFlBQVk7WUFDbEQsQ0FBQyxLQUFLLGVBQWUsSUFBSSxDQUFDLEtBQUssY0FBYyxFQUFFO1lBQ2pELE1BQU0sQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDMUM7WUFDRCxTQUFTO1NBQ1Y7UUFDRCxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsSUFBSSxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELFNBQVM7U0FDVjtRQUNELGdGQUFnRjtRQUNoRixJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7WUFDdEQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNuRCxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdDLE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQzFDO1lBQ0QsU0FBUztTQUNWO1FBQ0Qsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUMxQztZQUNELFNBQVM7U0FDVjtRQUNELDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsS0FBSyxrQkFBa0IsRUFBRTtZQUM1QixNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsU0FBUztTQUNWO1FBQ0QsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM1QyxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDcEQ7WUFDRCxTQUFTO1NBQ1Y7UUFFRCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLGVBQWUsRUFBRTtZQUN6RCxNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsRUFBRTtnQkFBRSxNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsSUFBSSxDQUFDO29CQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBRTtZQUNoRSxTQUFTO1NBQ1Y7UUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ25ELElBQUksTUFBTSxFQUFFO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFBQyxJQUFJLENBQUM7b0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUFFO1lBQ2xGLFNBQVM7U0FDVjtRQUVELHlFQUF5RTtRQUN6RSxJQUFJLENBQUMsS0FBSyxPQUFPLEVBQUU7WUFDakIsTUFBTSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUM7WUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUFDLFNBQVM7U0FDM0Q7UUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQUMsU0FBUztTQUN6RTtRQUNELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FBRTtLQUM3QztJQUVELHlEQUF5RDtJQUN6RCxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3REO0lBRUQsNkVBQTZFO0lBQzdFLHVEQUF1RDtJQUN2RCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwRCxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxJQUFJLFdBQVcsS0FBSyxNQUFNLENBQUMsRUFBRTtRQUN0RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztLQUN6RDtJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFRRCxNQUFNLE9BQU8sb0JBQW9CO0lBNjlCL0IsWUFDbUIsRUFBZSxFQUNmLEdBQXNCO1FBRHRCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXo4QnpDLG9HQUFvRztRQUMzRixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVF6Qyx1RkFBdUY7UUFDOUUsc0JBQWlCLEdBQTZCLEVBQUUsQ0FBQztRQUMxRCw4RkFBOEY7UUFDckYsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBRXhDLHVGQUF1RjtRQUM3RSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNsRCxxRUFBcUU7UUFDM0QscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0RCx1RkFBdUY7UUFDN0UsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUM1RCxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMxQyx5REFBeUQ7UUFDL0MsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDMUMsa0tBQWtLO1FBQ3hKLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUM1RCxrSEFBa0g7UUFDeEcsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUNqRSx1SUFBdUk7UUFDN0gsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFekUsdUZBQXVGO1FBQzlFLHNCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpELGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsNEVBQTRFO1FBQzVFLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixnRkFBZ0Y7UUFDaEYsYUFBUSxHQUFvQixTQUFTLENBQUM7UUFFN0IsZUFBVSxHQUFHO1lBQ3BCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsZUFBZSxFQUFFO1lBQ3pELEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsY0FBYyxFQUFFO1lBQ3hELEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsVUFBVSxFQUFFO1NBQ3JELENBQUM7UUFDRixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQU9DLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBb0M3Qix5R0FBeUc7UUFDaEcsc0JBQWlCLEdBQTZCLEVBQUUsQ0FBQztRQUsxRCwwR0FBMEc7UUFDMUcsdUJBQWtCLEdBQTZCO1lBQzdDLEdBQUcsRUFBRSxRQUFRO1lBQ2IsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBbUJGLHlHQUF5RztRQUNoRyx1QkFBa0IsR0FBNkIsRUFBRSxDQUFDO1FBQzNELHdGQUF3RjtRQUMvRSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDOUMsdUVBQXVFO1FBQzlELDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUNoRCwySUFBMkk7UUFDbEksZUFBVSxHQUE0QixFQUFFLENBQUM7UUFFbEQsZ0hBQWdIO1FBQ2hILDRCQUF1QixHQUE2QjtZQUNsRCxHQUFHLEVBQUUsYUFBYTtZQUNsQixXQUFXLEVBQUUsYUFBYTtZQUMxQixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUE4Q0YsOERBQThEO1FBQ3BELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFekQsd0RBQXdEO1FBQzlDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekQscUlBQXFJO1FBQzNILGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBc0UsQ0FBQztRQUs5RywrSUFBK0k7UUFDdEksb0JBQWUsR0FBNkIsRUFBRSxDQUFDO1FBZXhELDZGQUE2RjtRQUM3Rix5QkFBb0IsR0FBNkI7WUFDL0MsR0FBRyxFQUFFLFVBQVU7WUFDZixXQUFXLEVBQUUsU0FBUztZQUN0QixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUE4QkYsOEVBQThFO1FBQzlFLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBbUJSLGdDQUEyQixHQUE2QjtZQUMvRCxHQUFHLEVBQUUsV0FBVztZQUNoQixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsd0JBQXdCLENBQUM7U0FDNUQsQ0FBQztRQUVPLGlDQUE0QixHQUE2QjtZQUNoRSxHQUFHLEVBQUUsc0JBQXNCO1lBQzNCLFdBQVcsRUFBRSxlQUFlO1lBQzVCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMseUJBQXlCLENBQUM7U0FDN0QsQ0FBQztRQXFCRiwrRkFBK0Y7UUFDdkYsNEJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBRXJDLHlGQUF5RjtRQUNqRix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUE4RXhCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFtQmxCLHlGQUF5RjtRQUNqRix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUE4QnJDLHFCQUFnQixHQUFzQixTQUFTLENBQUM7UUFFaEQsOEZBQThGO1FBQzlGLGtCQUFhLEdBQW1CLE1BQU0sQ0FBQztRQUV2Qyw0R0FBNEc7UUFDbkcsb0JBQWUsR0FBRztZQUN6QixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUcsS0FBSyxFQUFFLE1BQXdCLEVBQUU7WUFDdkQsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFJLEtBQUssRUFBRSxTQUEyQixFQUFFO1lBQzFELEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBTyxLQUFLLEVBQUUsTUFBd0IsRUFBTyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUU7WUFDcEcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUE2QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRTtZQUNwRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQU8sS0FBSyxFQUFFLE1BQXdCLEVBQU8sUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFO1NBQ3JHLENBQUM7UUFLRiwyR0FBMkc7UUFDM0csc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRXZCLGtGQUFrRjtRQUNsRiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsdUdBQXVHO1FBQ3ZHLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUU3Qix5Q0FBeUM7UUFDaEMsNkJBQXdCLEdBQTJEO1lBQzFGLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQ2xELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUM7UUFDRixrQ0FBNkIsR0FBK0IsZUFBZSxDQUFDO1FBRTVFLHdGQUF3RjtRQUN4RixnQkFBVyxHQUFrRCxLQUFLLENBQUM7UUFFbkUscUVBQXFFO1FBQzVELHdCQUFtQixHQUFHO1lBQzdCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzlCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRTtZQUNsRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtTQUMzQyxDQUFDO1FBU0Ysd0hBQXdIO1FBQy9HLGtCQUFhLEdBQTZCLEVBQUUsQ0FBQztRQVd0RCw0RkFBNEY7UUFDNUYsOEJBQXlCLEdBQTZCO1lBQ3BELEdBQUcsRUFBRSxRQUFRO1lBQ2IsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQztTQUMxRCxDQUFDO1FBdUJGLDREQUE0RDtRQUM1RCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixnR0FBZ0c7UUFDaEcscUJBQWdCLEdBTUwsSUFBSSxDQUFDO1FBZ0toQixpSkFBaUo7UUFDeEksc0JBQWlCLEdBQTZCLEVBQUUsQ0FBQztRQVUxRCwrR0FBK0c7UUFDL0csMkJBQXNCLEdBQTZCO1lBQ2pELEdBQUcsRUFBRSxNQUFNO1lBQ1gsV0FBVyxFQUFFLGVBQWU7WUFDNUIsVUFBVSxFQUFFLElBQUk7WUFDaEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUF5Q2UsbUJBQWMsR0FBdUI7WUFDcEQsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1NBQ3BFLENBQUM7UUF1QkYsbUVBQW1FO1FBQzFELGlDQUE0QixHQUE2QjtZQUNoRSxHQUFHLEVBQUUsTUFBTTtZQUNYLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQzFELEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUMzRDtTQUNGLENBQUM7UUFTRixzSEFBc0g7UUFDN0csd0JBQW1CLEdBQTZCLEVBQUUsQ0FBQztRQVc1RCx3R0FBd0c7UUFDeEcsNkJBQXdCLEdBQTZCO1lBQ25ELEdBQUcsRUFBRSxjQUFjO1lBQ25CLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsNEJBQTRCLENBQUM7U0FDaEUsQ0FBQztRQTRCRixtSEFBbUg7UUFDMUcsZ0NBQTJCLEdBQTZCLEVBQUUsQ0FBQztRQVVwRSw2R0FBNkc7UUFDN0cscUNBQWdDLEdBQTZCO1lBQzNELEdBQUcsRUFBRSxVQUFVO1lBQ2YsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQztTQUM3RCxDQUFDO1FBNEJGLGdGQUFnRjtRQUN2RSxpREFBNEMsR0FBNkI7WUFDaEYsR0FBRyxFQUFFLGVBQWU7WUFDcEIsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDMUQsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2FBQy9EO1NBQ0YsQ0FBQztRQVNGLCtGQUErRjtRQUMvRix5R0FBeUc7UUFDaEcsOEJBQXlCLEdBQTZCLEVBQUUsQ0FBQztRQVNsRSxvR0FBb0c7UUFDcEcsbUNBQThCLEdBQTZCO1lBQ3pELEdBQUcsRUFBRSxjQUFjO1lBQ25CLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsbUNBQW1DLENBQUM7U0FDdkUsQ0FBQztRQTRCRixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQVlyQiw4RkFBOEY7UUFDOUYscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ3hCLDhCQUF5QixHQUFVLEVBQUUsQ0FBQztRQUMvQywwQkFBcUIsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUtsRCxDQUFDO0lBeDVCSiw4RkFBOEY7SUFDOUYsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFLRCx1RkFBdUY7SUFDdkYsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEQsMkRBQTJEO1lBQzNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLDJEQUEyRDtnQkFDM0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTztxQkFDUjtpQkFDRjtnQkFDRCxxRUFBcUU7Z0JBQ3JFLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN4RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsNEJBQTRCLENBQUM7b0JBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3hCLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQXlCO1FBQ2hELElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFPO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQWdCTyx3QkFBd0I7UUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsa0JBQWtCLEdBQUc7WUFDeEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCO1lBQzFCLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQXNCTyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQTRCO1FBQ3hELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDM0Q7UUFDRCxNQUFNLENBQUMsR0FBRyxJQUFvQixDQUFDO1FBQy9CLE9BQU87WUFDTCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSztZQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRTtZQUN0QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUE0QjtRQUN4RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxJQUFvQixDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsdUJBQXVCLEdBQUc7WUFDN0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCO1lBQy9CLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLE9BQU87WUFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNyQyxVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO2FBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFzQ08sMEJBQTBCO1FBQ2hDLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxvQkFBb0IsR0FBRztZQUMxQixHQUFHLElBQUksQ0FBQyxvQkFBb0I7WUFDNUIsT0FBTztTQUNSLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sTUFBTSxHQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQ3RCLENBQUMsQ0FBRSxvQkFBb0IsQ0FBQyx5QkFBc0QsQ0FBQztRQUNuRixPQUFPLE1BQU07YUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUEyQixDQUFDLENBQUM7YUFDNUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxJQUFJLGdCQUFnQjtRQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDNUMsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQW9DRCw0R0FBNEc7SUFDNUcsSUFBSSxjQUFjO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTTtZQUMvQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLEtBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoTCxPQUFPLFFBQVEsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxDQUFTO1FBQzFCLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixJQUFJLG1CQUFtQjtRQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVGLE9BQU8sb0JBQW9CLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFRRCw2R0FBNkc7SUFDN0csSUFBSSxtQkFBbUI7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNO1lBQ2hELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsS0FBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hMLE9BQU8sUUFBUSxJQUFJLFVBQVUsSUFBSSxhQUFhLENBQUM7SUFDakQsQ0FBQztJQUNELElBQUksbUJBQW1CLENBQUMsQ0FBUztRQUMvQixJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCw0S0FBNEs7SUFDNUssNEJBQTRCLENBQUMsS0FBc0M7UUFDakUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsdUJBQXVCO1lBQzFCLENBQUMsSUFBSSxJQUFJO2dCQUNQLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRO29CQUNyQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDMUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVULDJDQUEyQztRQUMzQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsdUNBQXVDO1FBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEIsMEdBQTBHO1FBQzFHLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLHVCQUF1QixLQUFLLE1BQU07WUFDNUYsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUEyQixDQUFDLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM5SixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsT0FBa0MsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxrSUFBa0k7SUFDbEksaUJBQWlCLENBQUMsTUFBNkI7UUFDN0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztRQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSyx5QkFBeUIsQ0FBQyxhQUFzQjtRQUN0RCxJQUFJLGFBQWEsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsYUFBd0MsQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkYsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkI7UUFDRCxNQUFNLFNBQVMsR0FDYixPQUFPLGFBQWEsS0FBSyxRQUFRO1lBQy9CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxhQUF1QyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDakQsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQ2hFLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsTUFBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xILE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFFLENBQUM7SUFFRCxvR0FBb0c7SUFDcEcsdUJBQXVCLENBQUMsS0FBc0M7UUFDNUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLENBQUMsSUFBSSxJQUFJO2dCQUNQLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRO29CQUNyQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDMUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNYLENBQUM7SUFJRCxpR0FBaUc7SUFDakcsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUk7WUFBRSxPQUFPO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLCtCQUErQjtRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUtELGtJQUFrSTtJQUNsSSxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUNoRyxDQUFDO0lBbUJELDRFQUE0RTtJQUM1RSxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUztZQUNyQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CO1lBQzNDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztJQUM3QyxDQUFDO0lBNENELG1CQUFtQixDQUFDLEdBQVc7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFvRCxDQUFDO0lBQzFFLENBQUM7SUF5Qk8sK0JBQStCO1FBQ3JDLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQ2xELElBQUksQ0FBQyx5QkFBeUIsR0FBRztZQUMvQixHQUFHLElBQUksQ0FBQyx5QkFBeUI7WUFDakMsT0FBTztTQUNSLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUNwQixDQUFDLENBQUUsb0JBQW9CLENBQUMsc0JBQW1ELENBQUM7UUFDaEYsT0FBTyxNQUFNO2FBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxDQUFDO2FBQzVFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFjRCxvRkFBb0Y7SUFDcEYsSUFBSSxrQkFBa0I7UUFDcEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELDZGQUE2RjtJQUM3RixJQUFJLG1CQUFtQjtRQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUM1RCxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekYsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxJQUFJLHVCQUF1QjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDOUMsT0FBTyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFvQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUFFLE9BQU87UUFDdEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQW9DLENBQUM7UUFDMUQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixPQUFPO1NBQ1I7UUFDRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQzlCO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixNQUFNLE9BQU8sR0FBRyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLFdBQVcsSUFBSSxHQUFHLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsU0FBUyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsZ0JBQWdCLEdBQUc7Z0JBQ3RCLElBQUk7Z0JBQ0osTUFBTTtnQkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQztnQkFDaEQsT0FBTztnQkFDUCxXQUFXO2FBQ1osQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sNEJBQTRCLENBQUMsT0FBZTtRQUNsRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQVksRUFBRSxRQUFnQjtRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE9BQWU7UUFDL0MsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDbkYsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztlQUNyRSxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM5RCxPQUFPLHlFQUF5RSxLQUFLLEdBQUcsQ0FBQztJQUMzRixDQUFDO0lBdURELDRFQUE0RTtJQUM1RSxJQUFJLFVBQVU7UUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsSUFBSSxFQUFFLENBQWdCLENBQUM7SUFDaEUsQ0FBQztJQVdPLDRCQUE0QjtRQUNsQyxNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFDeEIsQ0FBQyxDQUFFLG9CQUFvQixDQUFDLDJCQUF3RCxDQUFDO1FBQ3JGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN6RyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sWUFBWSxHQUFtQixFQUFFLENBQUM7UUFDeEMsS0FBSyxNQUFNLElBQUksSUFBSSxvQkFBb0IsRUFBRTtZQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDbkU7U0FDRjtRQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsc0JBQXNCLEdBQUc7WUFDNUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCO1lBQzlCLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELG9HQUFvRztJQUM1Riw2QkFBNkI7UUFDbkMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUNwRCxNQUFNLElBQUksR0FBSSxPQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEQsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVNELElBQUksWUFBWTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBZ0IsQ0FBQztJQUNqRSxDQUFDO0lBS0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFnQixDQUFDO0lBQ3JFLENBQUM7SUFLRCxJQUFJLFVBQVU7UUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFnQixDQUFDO0lBQy9ELENBQUM7SUFnQkQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFnQixDQUFDO0lBQ3JFLENBQUM7SUFzQk8sOEJBQThCO1FBQ3BDLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEdBQUcsQ0FBQztZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQztRQUN4RCxJQUFJLENBQUMsd0JBQXdCLEdBQUc7WUFDOUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCO1lBQ2hDLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFDMUIsQ0FBQyxDQUFFLG9CQUFvQixDQUFDLDRCQUF5RCxDQUFDO1FBQ3RGLE9BQU8sTUFBTTthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQTJCLENBQUMsQ0FBQzthQUM1RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2xELENBQUM7SUFxQk8sc0NBQXNDO1FBQzVDLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQywyQkFBMkIsRUFBRSxNQUFNLEdBQUcsQ0FBQztZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQztRQUNyRCxJQUFJLENBQUMsZ0NBQWdDLEdBQUc7WUFDdEMsR0FBRyxJQUFJLENBQUMsZ0NBQWdDO1lBQ3hDLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkI7WUFDbEMsQ0FBQyxDQUFFLG9CQUFvQixDQUFDLHlCQUFzRCxDQUFDO1FBQ25GLE9BQU8sTUFBTTthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQTJCLENBQUMsQ0FBQzthQUM1RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2xELENBQUM7SUFnQkQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFnQixDQUFDO0lBQzNFLENBQUM7SUFxQk8sb0NBQW9DO1FBQzFDLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxNQUFNLEdBQUcsQ0FBQztZQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxtQ0FBbUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsOEJBQThCLEdBQUc7WUFDcEMsR0FBRyxJQUFJLENBQUMsOEJBQThCO1lBQ3RDLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMseUJBQXlCLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUI7WUFDaEMsQ0FBQyxDQUFFLG9CQUFvQixDQUFDLG1DQUFnRSxDQUFDO1FBQzdGLE9BQU8sTUFBTTthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQTJCLENBQUMsQ0FBQzthQUM1RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sNEJBQTRCO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2xELENBQUM7SUF3QkQsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTTtZQUNyRCxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFDdEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sYUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxhQUF1QyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkssSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUM5QixNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU07WUFDaEQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxVQUFVLElBQUksYUFBYSxDQUFDO1FBQzFFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsVUFBb0MsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9KLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQzFCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksY0FBYyxJQUFJLFNBQVMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hDLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztTQUM1QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzlCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxJQUFJLG9CQUFvQixDQUFDO1lBQ2xFLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDOUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ3RELEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLElBQUksT0FBTyxDQUFDO1NBQzVFLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDL0csTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5SSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUU7WUFDaEcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5SSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FDeEIsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUNqRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNyRixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUM7UUFDdkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUM1QztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUM1QztRQUVELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM5RyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssRUFBRSxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQzlDO1FBQ0QsNERBQTREO1FBQzVELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7UUFFOUMsbUZBQW1GO1FBQ25GLE1BQU0sUUFBUSxHQUNaLElBQUksQ0FBQyxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDdkYsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0M7WUFDdkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLDBCQUEwQixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMzRSxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQjtZQUNqQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQy9GLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksb0JBQW9CLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsdUVBQXVFO1FBQ3ZFLElBQUksSUFBSSxDQUFDLG9DQUFvQyxFQUFFO1lBQzdDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUM7U0FDaEY7UUFFRCxtRkFBbUY7UUFDbkYsSUFBSSxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0UsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7U0FDbkM7UUFFRCwrRkFBK0Y7UUFDL0Ysa0dBQWtHO1FBQ2xHLHNHQUFzRztRQUN0RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUM7UUFDdEQsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFO1lBQzFCLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFO2dCQUN0QyxzQkFBc0IsR0FBRyxjQUFjLENBQUM7YUFDekM7aUJBQU07Z0JBQ0wsSUFBSTtvQkFDRixzQkFBc0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2xFO2dCQUFDLE1BQU07b0JBQ04sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO2lCQUM3QjthQUNGO1NBQ0Y7UUFDRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQy9CLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQztZQUNyQixTQUFTLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNuQyxhQUFhLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFDSCwrRUFBK0U7UUFDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekQsSUFBSSxJQUFJLENBQUMsaUJBQWlCO2dCQUFFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqRSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILCtFQUErRTtRQUMvRSw0RUFBNEU7UUFDNUUsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxvRkFBb0Y7SUFDNUUsOEJBQThCO1FBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsYUFBYSxDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5Q0FBeUMsQ0FBdUIsQ0FBQztZQUMxRyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBK0IsQ0FBQztZQUM5RSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQ3hDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUN2QyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDNUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQXVDO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTywwQkFBMEIsQ0FBQyxJQUFxRDtRQUN0RixNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBdUM7UUFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUVELG9IQUFvSDtJQUM1RyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEQsT0FBTyxvRUFBb0UsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELHVHQUF1RztJQUMvRixNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBVztRQUM1QyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUk7Z0JBQ0YsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNCO1lBQUMsTUFBTTtnQkFDTixpQkFBaUI7YUFDbEI7U0FDRjtRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGtJQUFrSTtJQUMxSCx1QkFBdUIsQ0FBQyxNQUFjO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNCLElBQUksb0JBQW9CLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzlELElBQUk7WUFDRixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxHQUFxQyxFQUFFLENBQUM7WUFDbEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDMUI7UUFBQyxNQUFNO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCw4SEFBOEg7SUFDdEgsVUFBVSxDQUFDLE1BQWM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUM3QyxJQUFJLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RSxJQUFJO1lBQ0YsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNoRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQzlEO1FBQUMsTUFBTTtZQUNOLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLElBQVksRUFBRSxXQUFtQjtRQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ2pFLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDO1FBQ0YsOEJBQThCO1FBQzlCLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQXVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQTRELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUErQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3Ryx1Q0FBdUM7UUFDdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUcsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELHdGQUF3RjtJQUNoRix1QkFBdUIsQ0FBQyxJQUFZO1FBQzFDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxHQUFxQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxNQUFNO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyx5QkFBeUIsQ0FBQyxJQUFzQztRQUN0RSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ25FLElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO1FBQUMsTUFBTTtZQUNOLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQseUVBQXlFO0lBQ2pFLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpRUFBaUU7SUFDekQsaUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUM3QyxNQUFNLEdBQUcsR0FBRyxDQUFFLENBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlELE1BQU0sS0FBSyxHQUFJLENBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxJQUFJLEdBQUcsS0FBSyxFQUFFO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsSUFBNEY7UUFDN0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUgsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ1osUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN0QixZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzlCLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztTQUNqQyxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsSUFBd0Q7UUFDL0YsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDWixZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzlCLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7U0FDakMsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQXdCO1FBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNaLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDZCxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVELDZHQUE2RztJQUNyRyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFckIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTTtZQUNyRCxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFDdEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGFBQXVDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzSixJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUUzRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTTtZQUNuRCxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUM7UUFDN0UsTUFBTSxNQUFNLEdBQUcsT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFVBQW9DLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvSSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUMsR0FBRyxHQUFHLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUNoRixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLGVBQWUsQ0FBQztRQUVyRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCwrSEFBK0g7SUFDL0gsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsbUdBQW1HO0lBQzNGLGtDQUFrQztRQUN4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNO1lBQ3JELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLGdCQUFnQixJQUFJLEtBQUssQ0FBQztRQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sYUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxhQUF1QyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3hLLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWQsMEVBQTBFO1FBQzFFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNoRSxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUNoRixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsbUJBQW1CO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7UUFFMUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksTUFBTSxFQUFFO1lBQ1YsdUVBQXVFO1lBQ3ZFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNqRixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUM7WUFFdEMsd0VBQXdFO1lBQ3hFLElBQUksTUFBTSxDQUFDLEdBQUc7Z0JBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBRXRDLHVFQUF1RTtZQUN2RSxJQUFJLFVBQVUsR0FBdUIsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxlQUFlLENBQUMsQ0FBQztZQUNsRixJQUFJLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQzdCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksV0FBVyxFQUFFO29CQUNmLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTt3QkFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzt3QkFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7cUJBQzFCO29CQUNELHFFQUFxRTtvQkFDckUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQyxDQUFDO2lCQUMvRTthQUNGO1lBRUQsd0VBQXdFO1lBQ3hFLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFdEMsd0VBQXdFO1lBQ3hFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPO2lCQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLGNBQWMsQ0FBQztnQkFDbkQsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1lBRS9CLHdFQUF3RTtZQUN4RSxJQUFJLGFBQWEsR0FBc0IsU0FBUyxDQUFDO1lBRWpELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM5Qiw0Q0FBNEM7Z0JBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMvQixJQUFJLENBQUMsMEJBQTBCLENBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUN6RSxDQUFDO2dCQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixhQUFhLEdBQUcsTUFBTSxDQUFDO2FBRXhCO2lCQUFNLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBRW5GLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNELElBQUksYUFBYSxJQUFJLElBQUksRUFBRTt3QkFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO3dCQUNqQyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7NEJBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3dCQUNsRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztxQkFDOUI7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7cUJBQzlCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDL0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDaEQ7Z0JBQ0QsYUFBYSxHQUFHLE1BQU0sQ0FBQzthQUN4QjtZQUVELHdFQUF3RTtZQUN4RSxJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO2FBQ3pDO1lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxpR0FBaUc7SUFDakcsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLG9CQUFvQjtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztZQUNsQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsK0RBQStEO1FBQy9ELE1BQU0sc0JBQXNCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLHNCQUFzQixFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxrRUFBa0U7UUFDbEUsMkdBQTJHO1FBQzNHLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJO2VBQ3RELElBQUksQ0FBQyx1QkFBdUIsS0FBSyxFQUFFO2VBQ25DLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxNQUFNLENBQUM7UUFFN0MsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQiw2Q0FBNkM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcseUNBQXlDLENBQUM7Z0JBQzFELE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCx1RUFBdUU7WUFDdkUsSUFBSTtnQkFDRixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNuQjtZQUFDLE1BQU07Z0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRywwQkFBMEIsQ0FBQztnQkFDM0MsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDWixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUV4Qyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxpQ0FBaUM7UUFDakMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksc0JBQXNCLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELGtFQUFrRTtRQUNsRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLElBQUksSUFBSTtlQUN0RCxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBRTtlQUNuQyxJQUFJLENBQUMsdUJBQXVCLEtBQUssTUFBTSxDQUFDO1FBRTdDLElBQUksY0FBYyxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxnQ0FBZ0M7UUFDaEMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELGdEQUFnRDtRQUNoRCxJQUFJO1lBQ0YsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxxQkFBcUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDekI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhO1FBQ1gsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixPQUFPO1NBQ1I7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlFLElBQUk7WUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVc7Z0JBQzdDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLE1BQU07Z0JBQzlCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPO2dCQUN0QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzlCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDbEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQ2hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoRCxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDakQsQ0FBQyxDQUFDO1NBQ0o7UUFBQyxNQUFNO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLFdBQVc7Z0JBQ1gsTUFBTTtnQkFDTixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUMvQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNuQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNqRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO2FBQ3BDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsbUdBQW1HO0lBQ25HLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNKLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU87YUFDUjtTQUNGO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyw0QkFBNEIsQ0FBQztZQUN0RCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXdCO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU87UUFDcEQsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUs7WUFBRSxPQUFPO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBdUIsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7WUFDbEMsZ0ZBQWdGO1lBQ2hGLDRFQUE0RTtZQUM1RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7U0FDekM7YUFBTTtZQUNMLCtFQUErRTtZQUMvRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLHdCQUF3QixDQUFDLE1BQWU7UUFDOUMsTUFBTSxHQUFHLEdBQUcsQ0FBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pGLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUMxQztRQUNELElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFpQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNsRTtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxpQkFBaUIsT0FBTyxFQUFFLENBQUM7WUFDeEQsbUZBQW1GO1lBQ25GLGlGQUFpRjtZQUNqRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQ0FBZ0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1NBQ1I7UUFDRCxNQUFNLEtBQUssR0FBRyxDQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsTUFBTSxNQUFNLEdBQUcsQ0FBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQzNCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7WUFDbEMsT0FBTztTQUNSO1FBQ0QseUZBQXlGO1FBQ3pGLG9GQUFvRjtRQUNwRixNQUFNLFFBQVEsR0FBRyxLQUFLO2FBQ25CLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDaEQsQ0FBQyxDQUFDLDREQUE0RDtZQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLG1CQUFtQjtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsMkJBQTJCO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0NBQWdDLENBQUMsRUFBMEI7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7WUFDMUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksRUFBRSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDeEIsSUFBSTtnQkFDRixlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN6RDtZQUFDLE1BQU07Z0JBQ04sZUFBZSxHQUFHLEVBQUUsQ0FBQzthQUN0QjtTQUNGO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFDMUIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNyQixTQUFTLEVBQUUsZUFBZTtZQUMxQixhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUU7U0FDakQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQ3hDLG9GQUFvRjtRQUNwRixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELDBCQUEwQixDQUFDLEtBQWlDO1FBQzFELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUM7SUFDN0MsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxvR0FBb0c7SUFDcEcsMEJBQTBCLENBQUMsS0FBcUMsRUFBRSxHQUFjO1FBQzlFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ1osUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2QsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDN0MsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDckMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBYTtRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsNEJBQTRCLENBQUMsR0FBYyxFQUFFLEtBQXNDO1FBQ2pGLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDOUQ7SUFDSCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQ25DLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQzVGLENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQTJCLENBQUMsS0FBYTtRQUN2QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QztRQUVELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEQsTUFBTSxZQUFZLEdBQ2hCLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE9BQU8sUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTO2dCQUNoRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDaEYsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU3QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDbEMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDckIsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQztnQkFDakMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILCtCQUErQixDQUFDLFlBQW9CLEVBQUUsS0FBYztRQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztRQUNuRixJQUFJLFFBQVEsRUFBRTtZQUNaLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQ2pFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUssWUFBWSxDQUN2RCxDQUFDO1FBQ0YsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ2xHO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsNkJBQTZCLENBQUMsWUFBb0IsRUFBRSxLQUFVO1FBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO1FBQ25GLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDeEI7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDakUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssS0FBSyxZQUFZLENBQ3ZELENBQUM7UUFDRixJQUFJLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDbEc7SUFDSCxDQUFDO0lBRUQsNElBQTRJO0lBQzVJLFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZCLHVHQUF1RztRQUN2RyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsT0FBTzthQUNSO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QixPQUFPO2FBQ1I7U0FDRjtRQUVELElBQUk7WUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNCO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQ3JFLHdCQUF3QjtRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakYsSUFBSSxNQUF3QyxDQUFDO1FBQzdDLElBQUksUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzVDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQThCLENBQUMsQ0FBQztZQUN0SCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQThCLENBQUMsQ0FBQztZQUNsSSxNQUFNLEdBQUc7Z0JBQ1AsU0FBUyxFQUFFLFNBQVMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO2dCQUM5RCxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQVc7Z0JBQzlFLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQVc7Z0JBQ2xFLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQVc7Z0JBQzFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQVc7Z0JBQzVELG9CQUFvQixFQUFFLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTzthQUMvRCxDQUFDO1NBQ0g7UUFDRCxPQUFPO1lBQ0wsS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7Z0JBQzFDLFdBQVcsRUFBRSxFQUFFO2dCQUNmLE1BQU0sRUFBRSxFQUFFO2dCQUNWLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVE7Z0JBQ1IsR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDakQsR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDdkMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRTtnQkFDbkMsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7WUFDRCxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUU7WUFDaEQsS0FBSyxFQUFFO2dCQUNMLDZCQUE2QixFQUFFLElBQUksQ0FBQyw2QkFBNkI7Z0JBQ2pFLHlCQUF5QixFQUFFLEVBQUU7Z0JBQzdCLG1CQUFtQixFQUFFLEVBQUU7YUFDeEI7WUFDRCx5QkFBeUIsRUFBRSxJQUFJLENBQUMseUJBQXlCO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRUQseUVBQXlFO0lBQ2pFLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBOEM7UUFDM0UsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELHFJQUFxSTtJQUM3SCxnQkFBZ0I7UUFDdEIsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBOEIsQ0FBQyxDQUFDO1FBQ2hJLE1BQU0sV0FBVyxHQUNmLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JJLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQThCLENBQUMsQ0FBQztRQUN6SCxNQUFNLE1BQU0sR0FDVixjQUFjLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxHQUFHLEVBQUcsQ0FBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3QyxLQUFLLEVBQUcsQ0FBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtTQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLEdBQUcsRUFBRyxDQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdDLElBQUksRUFBRyxDQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxNQUFNO1lBQ25ELEtBQUssRUFBRyxDQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ2xELENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLGVBQWUsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELEdBQUcsRUFBRyxDQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdDLEtBQUssRUFBRyxDQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1NBQ2xELENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDekQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLHFCQUFxQixFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsUUFBUSxFQUFHLENBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsWUFBWSxFQUFHLENBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0QsUUFBUSxFQUFHLENBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsYUFBYSxFQUFHLENBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7U0FDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUNyRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsMkJBQTJCLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRixZQUFZLEVBQUcsQ0FBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvRCxhQUFhLEVBQUcsQ0FBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtTQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBRyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNqRixJQUFJLE1BQXdDLENBQUM7UUFDN0MsSUFBSSxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDNUMsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBOEIsQ0FBQyxDQUFDO1lBQ3RILE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBOEIsQ0FBQyxDQUFDO1lBQ2xJLE1BQU0sR0FBRztnQkFDUCxTQUFTLEVBQUUsU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7Z0JBQzlELGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBVztnQkFDOUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBVztnQkFDbEUsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBVztnQkFDMUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBVztnQkFDNUQsb0JBQW9CLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPO2FBQy9ELENBQUM7U0FDSDtRQUNELDRGQUE0RjtRQUM1Riw4RkFBOEY7UUFDOUYsNkZBQTZGO1FBQzdGLGlGQUFpRjtRQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQztRQUNuRCxJQUFJLGFBQXlDLENBQUM7UUFDOUMsSUFBSSxhQUFnRCxDQUFDO1FBQ3JELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQzFCLElBQUksU0FBUyxFQUFFO1lBQ2IsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxDQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0UsTUFBTSxhQUFhLEdBQUcsQ0FBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9GLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3RCxhQUFhLEdBQUc7Z0JBQ2QsS0FBSztnQkFDTCxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoRixHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDeEMsQ0FBQztZQUNGLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDdEIsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixhQUFhLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO2FBQ3pHO1NBQ0Y7UUFFRCxPQUFPO1lBQ0wsS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7Z0JBQzFDLFdBQVc7Z0JBQ1gsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixRQUFRO2dCQUNSLEdBQUcsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ2pELEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsYUFBYSxFQUFFLE1BQU07Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUU7Z0JBQ25DLFlBQVk7Z0JBQ1osZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQ2hELEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDakQ7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRTthQUN0QztZQUNELEtBQUssRUFBRTtnQkFDTCw2QkFBNkIsRUFBRSxJQUFJLENBQUMsNkJBQTZCO2dCQUNqRSx5QkFBeUI7Z0JBQ3pCLG1CQUFtQjthQUNwQjtZQUNELHlCQUF5QixFQUFFLElBQUksQ0FBQyx5QkFBeUI7U0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsSUFBSSxPQUFPO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELElBQUksRUFBRyxDQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQy9DLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFHLENBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7U0FDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2hELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ILElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFO2dCQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xGLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztxQkFDcEQ7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0UsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ3JELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFO2dCQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkYsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO3dCQUN0QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO3FCQUM5RDtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1lBQ3RFLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDekUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUNaLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBMkIsQ0FBQyxDQUFDO1lBQy9GLElBQUksUUFBUSxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyRTtRQUNELElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBb0MsQ0FBQztZQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztnQkFDekIsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksb0JBQW9CO2dCQUM5QyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWMsSUFBSSxFQUFFO2dCQUN0QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFO2dCQUMxQixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFO2dCQUNsQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixvQkFBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CLElBQUksT0FBTzthQUN4RCxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDO29CQUN6RCxNQUFNLFVBQVUsR0FDZCxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxFQUFFO3dCQUMvQixDQUFDLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUTs0QkFDM0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxPQUFpQyxDQUFDOzRCQUN4RSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDWCxNQUFNLEtBQUssR0FBRyxVQUFVLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ1YsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7NEJBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7eUJBQ3hEO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQy9DLElBQUksQ0FBQyxHQUFHLEdBQUcsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3pGO1FBQ0QsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDbkU7UUFDRCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ25ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxZQUFrQyxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7U0FDckM7UUFDRCxJQUFJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUN0RSxpR0FBaUc7WUFDakcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDOUI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUM1RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ3RGO1FBQ0QsSUFBSSxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO2dCQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2lCQUMzRDthQUNGO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3RELE1BQU0sT0FBTyxHQUFJLE9BQXFCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQztvQkFDbEUsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUN2QyxPQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7cUJBQzFFO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUNELElBQUksT0FBTyxDQUFDLDZCQUE2QixDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDeEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3RELE1BQU0sT0FBTyxHQUFJLE9BQXFCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQztvQkFDOUQsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUN2QyxPQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO3FCQUNsRTtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ2xELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDaEUsSUFBSSxJQUFJLENBQUMsMkJBQTJCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzVELE1BQU0sT0FBTyxHQUFJLE9BQXFCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQztvQkFDbEUsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUN2QyxPQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7cUJBQzFFO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUU7WUFDdEUsT0FBTztTQUNSO1FBRUQsSUFBSTtZQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO2dCQUNuRCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsS0FBSyxFQUFFLE9BQU87YUFDZixDQUFDLENBQUM7U0FDSjtRQUFDLE1BQU07WUFDTixnRUFBZ0U7WUFDaEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUNqRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUF1QixDQUFDO1lBQ3RGLElBQUksWUFBWSxFQUFFO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtnQkFDckQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNuRjtTQUNGO0lBQ0gsQ0FBQzs7QUF0c0VELGdGQUFnRjtBQUN4RCw4Q0FBeUIsR0FBbUI7SUFDbEUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3RFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtJQUM5RSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Q0FDeEUsQ0FBQTtBQTRDRix1Q0FBdUM7QUFDZiw2Q0FBd0IsR0FBbUI7SUFDakUsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7SUFDbEgsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7SUFDbEgsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO0lBQzFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtDQUMxRSxDQUFBO0FBRUYseURBQXlEO0FBQ2pDLDhDQUF5QixHQUFtQjtJQUNsRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFO0lBQ3RHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtDQUMxRSxDQUFBO0FBZ0pGOzs7O0dBSUc7QUFDcUIsc0NBQWlCLEdBQWtEO0lBQ3pGLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3RDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0lBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0NBQ3BDLENBQUE7QUFDc0IseUNBQW9CLEdBQWtEO0lBQzVGLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3RDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQ3RDLENBQUE7QUErRHNCLDJDQUFzQixHQUFtQjtJQUMvRCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDMUQsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQ3RELEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUMxRCxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Q0FDMUQsQ0FBQTtBQTZKc0IsZ0RBQTJCLEdBQWE7SUFDOUQsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGdDQUFnQztJQUNoQywrQkFBK0I7SUFDL0IsU0FBUztJQUNULGVBQWU7SUFDZixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLDJCQUEyQjtJQUMzQixjQUFjO0lBQ2QsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLE1BQU07SUFDTixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsVUFBVTtJQUNWLFlBQVk7SUFDWixjQUFjO0lBQ2QsUUFBUTtJQUNSLFFBQVE7SUFDUixxQkFBcUI7SUFDckIsT0FBTztJQUNQLFNBQVM7SUFDVCxJQUFJO0lBQ0osU0FBUztJQUNULG1CQUFtQjtJQUNuQixTQUFTO0lBQ1QsWUFBWTtJQUNaLEtBQUs7SUFDTCxTQUFTO0lBQ1Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixLQUFLO0lBQ0wsV0FBVztJQUNYLFlBQVk7Q0FDWixDQUFBO0FBMkdzQixpREFBNEIsR0FBbUI7SUFDckUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ2xFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtJQUM5RSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7SUFDOUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFO0lBQzFGLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUN0RSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7Q0FDdEYsQ0FBQTtBQXVDc0IsOENBQXlCLEdBQW1CO0lBQ2xFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNsRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7SUFDbEUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3RFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtJQUM5RCxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Q0FDbEUsQ0FBQTtBQTBEc0Isd0RBQW1DLEdBQW1CO0lBQzVFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUNsRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7SUFDOUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO0lBQzlFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtDQUMxRixDQUFBO2lIQXg2QlMsb0JBQW9CO3FHQUFwQixvQkFBb0IsOHhFQ3hkakMsaW5yREFtdUJNOzJGRDNRTyxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0UsbUJBQW1CLFFBRXZCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxtQkFDYix1QkFBdUIsQ0FBQyxPQUFPO2tJQUd2QyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsZ0NBQWdDO3NCQUF4QyxLQUFLO2dCQUVHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFFRyxvQ0FBb0M7c0JBQTVDLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFnRUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQStCRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQXVESSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUUsZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBeVJHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFpS2tDLHlCQUF5QjtzQkFBaEUsU0FBUzt1QkFBQywyQkFBMkI7Z0JBQ0wsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQjtnQkErQ3RCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFzR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQThDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBZ0VHLHlCQUF5QjtzQkFBakMsS0FBSztnQkE4QzhDLGtCQUFrQjtzQkFBckUsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV3pDLHlCQUF5QjtzQkFBakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcWFBdXRvY29tcGxldGVPcHRpb24gfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLm1vZGVsJztcbmltcG9ydCB7IEdyYXBoUUxPcGVyYXRpb25PcHRpb24sIEdyYXBoUUxTY2hlbWFTb3VyY2UgfSBmcm9tICcuL2dyYXBocWwtb3BlcmF0aW9uLXBpY2tlci9ncmFwaHFsLW9wZXJhdGlvbi1waWNrZXIuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IEFQSV9FRElUX1NURVBfTEFCRUxTID0ge1xuICBSRVFVRVNUX0RFVEFJTFM6ICdSZXF1ZXN0IERldGFpbHMnLFxuICBTVE9SRV9SRVNQT05TRTogJ1N0b3JlIFJlc3BvbnNlJyxcbiAgVkFMSURBVElPTjogJ1ZhbGlkYXRpb24nLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQXBpRWRpdFBheWxvYWRUYWIgPSAnaGVhZGVycycgfCAnYm9keScgfCAncGFyYW1zJyB8ICdhdXRob3JpemF0aW9uJyB8ICdncmFwaHFsJztcblxuLyoqIFRvcC1sZXZlbCBBUEkgdHlwZSB0aGUgc3RlcCB0YXJnZXRzLiBOZXcgdHlwZXMgYmV5b25kIFJFU1QvR3JhcGhRTCBhcmUgaW50ZW50aW9uYWxseSBhIHN0cmluZyB1bmlvbiAobm90IGVudW0pIHNvIGFkZGluZyBcInNvYXBcIi9cIndlYnNvY2tldFwiL1wiZ3JwY1wiIGxhdGVyIGlzIGEgb25lLWxpbmUgY2hhbmdlLiAqL1xuZXhwb3J0IHR5cGUgQXBpRWRpdEFwaVR5cGUgPSAncmVzdCcgfCAnZ3JhcGhxbCcgfCAnc29hcCcgfCAnd2Vic29ja2V0JyB8ICdncnBjJztcblxuLyoqIEdyYXBoUUwgcmVxdWVzdCBib2R5IGVtaXR0ZWQgdG8gdGhlIHBhcmVudCAodmFyaWFibGVzIGFscmVhZHkgcGFyc2VkIHdoZW4gdmFsaWQgSlNPTjsgcmF3IHN0cmluZyBvdGhlcndpc2UpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0R3JhcGhRTFBheWxvYWQge1xuICBxdWVyeTogc3RyaW5nO1xuICAvKiogT2JqZWN0IHdoZW4gdGhlIHVzZXIgdHlwZWQgdmFsaWQgSlNPTiwgcmF3IHN0cmluZyBvdGhlcndpc2UuIEVuZ2luZSBhY2NlcHRzIGJvdGguICovXG4gIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nO1xuICBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xufVxuXG4vKiogV2hpY2ggYm9keSBjb250ZW50IGJsb2NrIGlzIHZpc2libGU6IGhlYWRlcnMgKHRhYnMpLCBpbXBvcnQgY1VSTCB0ZXh0YXJlYSwgb3IgdGhlIEdyYXBoUUwgb3BlcmF0aW9uIHBpY2tlci4gKi9cbmV4cG9ydCB0eXBlIEFwaUVkaXRCb2R5VmlldyA9ICdoZWFkZXJzJyB8ICdpbXBvcnQtY3VybCcgfCAnZ3JhcGhxbC1zY2hlbWEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRIZWFkZXJSb3cge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIFBheWxvYWQgZW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIFNlbmQgUmVxdWVzdCAoZW52aXJvbm1lbnQsIG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBib2R5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRWRpdFNlbmRSZXF1ZXN0UGF5bG9hZCB7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgaGVhZGVyczogQXBpRWRpdEhlYWRlclJvd1tdO1xuICBwYXlsb2FkPzogc3RyaW5nO1xuICBhdXRoVHlwZT86IHN0cmluZztcbiAgYmVhcmVyVG9rZW4/OiBzdHJpbmc7XG4gIG9hdXRoMj86IEFwaUVkaXRPQXV0aDJQYXlsb2FkO1xuICBwYXlsb2FkVHlwZT86ICdyYXcnIHwgJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfCAnZm9ybS1kYXRhJztcbiAgcGF5bG9hZEZvcm1hdD86IHN0cmluZztcbiAgcGF5bG9hZFRleHQ/OiBzdHJpbmc7XG4gIGtleVZhbHVlUm93cz86IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICBrZXlUeXBlVmFsdWVSb3dzPzogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXTtcbiAgcGFyYW1zUm93cz86IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICAvKiogQVBJIHR5cGUgKFJFU1Qgb3IgR3JhcGhRTCkuIEFic2VudCBvbiBsZWdhY3kgY2FsbGVyczsgY29uc3VtZXIgdHJlYXRzIHVuZGVmaW5lZCBhcyAncmVzdCcuICovXG4gIGFwaVR5cGU/OiBBcGlFZGl0QXBpVHlwZTtcbiAgLyoqIEdyYXBoUUwgYm9keSB3aGVuIGBhcGlUeXBlID09PSAnZ3JhcGhxbCdgLiAqL1xuICBncmFwaFFMPzogQXBpRWRpdEdyYXBoUUxQYXlsb2FkO1xufVxuXG4vKiogT0F1dGggMi4wIGF1dGggZmllbGRzICh3aGVuIGF1dGggdHlwZSBpcyBPQXV0aCAyLjApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0T0F1dGgyUGF5bG9hZCB7XG4gIGdyYW50VHlwZTogc3RyaW5nO1xuICBhY2Nlc3NUb2tlblVybDogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ6IHN0cmluZztcbiAgc2NvcGU6IHN0cmluZztcbiAgY2xpZW50QXV0aGVudGljYXRpb246IHN0cmluZztcbn1cblxuLyoqIFN0ZXAgMSByZXF1ZXN0ICsgYm9keSBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0U3RlcDFQYXlsb2FkIHtcbiAgc3VtbWFyeT86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBoZWFkZXJzOiBBcGlFZGl0SGVhZGVyUm93W107XG4gIC8qKiBTZWxlY3RlZCBhdXRoIHR5cGU6IGUuZy4gJ25vLWF1dGgnLCAnYmVhcmVyJywgJ29hdXRoMicuICovXG4gIGF1dGhUeXBlOiBzdHJpbmc7XG4gIC8qKiBCZWFyZXIgdG9rZW4gdmFsdWUgd2hlbiBhdXRoVHlwZSBpcyAnYmVhcmVyJy4gKi9cbiAgYmVhcmVyVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBPQXV0aCAyLjAgZmllbGRzIHdoZW4gYXV0aFR5cGUgaXMgJ29hdXRoMicuICovXG4gIG9hdXRoMj86IEFwaUVkaXRPQXV0aDJQYXlsb2FkO1xuICBhY3RpdmVQYXlsb2FkVGFiOiBBcGlFZGl0UGF5bG9hZFRhYjtcbiAgcGF5bG9hZFR5cGU6ICdyYXcnIHwgJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfCAnZm9ybS1kYXRhJztcbiAgcGF5bG9hZEZvcm1hdDogc3RyaW5nO1xuICBwYXlsb2FkVGV4dDogc3RyaW5nO1xuICBrZXlWYWx1ZVJvd3M6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICBrZXlUeXBlVmFsdWVSb3dzOiB7IGtleTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdO1xuICBwYXJhbXNSb3dzOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXTtcbiAgLyoqIEFQSSB0eXBlIChSRVNUIG9yIEdyYXBoUUwpLiBEZWZhdWx0cyB0byAncmVzdCcgd2hlbiBhYnNlbnQuICovXG4gIGFwaVR5cGU/OiBBcGlFZGl0QXBpVHlwZTtcbiAgLyoqIEdyYXBoUUwgYm9keSB3aGVuIGBhcGlUeXBlID09PSAnZ3JhcGhxbCdgLiBBbHdheXMgZW1pdHRlZCBhcyBhIGNvbXBsZXRlIG9iamVjdCBzbyB0aGUgZW5naW5lJ3MgT2JqZWN0LmFzc2lnbiBtZXJnZSBkb2Vzbid0IGxvc2UgdW5zZW50IGtleXMuICovXG4gIGdyYXBoUUw/OiBBcGlFZGl0R3JhcGhRTFBheWxvYWQ7XG59XG5cbi8qKiBTdGVwIDIgc3RvcmUtcmVzcG9uc2UgcGF5bG9hZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRWRpdFN0ZXAyUGF5bG9hZCB7XG4gIHZhcmlhYmxlTmFtZTogc3RyaW5nO1xufVxuXG4vKiogUmVzcG9uc2UgYm9keSB2ZXJpZmljYXRpb24gcm93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0UmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9uUm93IHtcbiAganNvblBhdGg6IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uOiBzdHJpbmc7XG4gIGRhdGFUeXBlOiBzdHJpbmc7XG4gIGV4cGVjdGVkVmFsdWU6IHN0cmluZztcbn1cblxuLyoqIFN0YXR1cyB2ZXJpZmljYXRpb24gcm93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFZGl0U3RhdHVzVmVyaWZpY2F0aW9uUm93IHtcbiAgdmVyaWZpY2F0aW9uOiBzdHJpbmc7XG4gIGV4cGVjdGVkVmFsdWU6IHN0cmluZztcbn1cblxuLyoqIFN0ZXAgMyB2YWxpZGF0aW9uIHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVkaXRTdGVwM1BheWxvYWQge1xuICBhY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYjogJ3Jlc3BvbnNlLWJvZHknIHwgJ3N0YXR1cyc7XG4gIHJlc3BvbnNlQm9keVZlcmlmaWNhdGlvbnM6IEFwaUVkaXRSZXNwb25zZUJvZHlWZXJpZmljYXRpb25Sb3dbXTtcbiAgc3RhdHVzVmVyaWZpY2F0aW9uczogQXBpRWRpdFN0YXR1c1ZlcmlmaWNhdGlvblJvd1tdO1xufVxuXG4vKiogRnVsbCBwYXlsb2FkIGVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBDcmVhdGUgKGFsbCBzdGVwc+KAmSBkYXRhKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRWRpdENyZWF0ZVBheWxvYWQge1xuICBzdGVwMTogQXBpRWRpdFN0ZXAxUGF5bG9hZDtcbiAgc3RlcDI6IEFwaUVkaXRTdGVwMlBheWxvYWQ7XG4gIHN0ZXAzOiBBcGlFZGl0U3RlcDNQYXlsb2FkO1xuICAvKiogQWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGZvciB0aGlzIEFQSSBzdGVwIChlLmcuIGlzU3RlcE9wdGlvbmFsLCBzaG91bGRTa2lwKS4gKi9cbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG4vKiogRW52aXJvbm1lbnQgb3B0aW9uOiBlaXRoZXIgYSBzdHJpbmcgKGRpc3BsYXkgPSB2YWx1ZSkgb3IgYW4gb2JqZWN0IHdpdGggaWQsIG5hbWUsIHZhbHVlLCBsYWJlbC4gKi9cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50T3B0aW9uSW5wdXQgPSBzdHJpbmcgfCBTZWxlY3RPcHRpb247XG5cbmNvbnN0IE1FVEhPRFNfV0lUSE9VVF9CT0RZID0gWydHRVQnLCAnSEVBRCcsICdERUxFVEUnXTtcblxuLyoqIEF1dG8tY2xvc2UgcGFpcnMgZm9yIHBheWxvYWQgSlNPTiBlZGl0b3I6IG9wZW5pbmcgY2hhciAtPiBjbG9zaW5nIGNoYXIuICovXG5jb25zdCBQQVlMT0FEX0FVVE9fQ0xPU0VfUEFJUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7ICd7JzogJ30nLCAnWyc6ICddJywgJ1wiJzogJ1wiJywgXCInXCI6IFwiJ1wiIH07XG5cbi8qKiBSZXN1bHQgb2YgcGFyc2luZyBhIGNVUkwgY29tbWFuZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkQ3VybCB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgaGVhZGVyczogQXBpRWRpdEhlYWRlclJvd1tdO1xuICBib2R5OiBzdHJpbmc7XG4gIC8qKiBFbnRyaWVzIGZyb20gLUYgLyAtLWZvcm0gZmxhZ3MgKG11bHRpcGFydC9mb3JtLWRhdGEpLiAqL1xuICBmb3JtRGF0YTogeyBrZXk6IHN0cmluZzsgdHlwZTogJ3RleHQnIHwgJ2ZpbGUnOyB2YWx1ZTogc3RyaW5nIH1bXTtcbn1cblxuZnVuY3Rpb24gaXNTaW5nbGVRdW90ZShjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaCA9PT0gXCInXCIgfHwgY2ggPT09ICdcXHUyMDE4JyB8fCBjaCA9PT0gJ1xcdTIwMTknO1xufVxuZnVuY3Rpb24gaXNEb3VibGVRdW90ZShjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gJ1xcdTIwMUMnIHx8IGNoID09PSAnXFx1MjAxRCc7XG59XG5mdW5jdGlvbiBpc0Nsb3NpbmdRdW90ZShjaDogc3RyaW5nLCBvcGVuUXVvdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoaXNTaW5nbGVRdW90ZShvcGVuUXVvdGUpKSByZXR1cm4gaXNTaW5nbGVRdW90ZShjaCk7XG4gIGlmIChpc0RvdWJsZVF1b3RlKG9wZW5RdW90ZSkpIHJldHVybiBpc0RvdWJsZVF1b3RlKGNoKTtcbiAgcmV0dXJuIGNoID09PSBvcGVuUXVvdGU7XG59XG5cbi8qKlxuICogVG9rZW5pemUgYSBjVVJMIGNvbW1hbmQgc3RyaW5nIGludG8gYXJndW1lbnQgdG9rZW5zLCBtYXRjaGluZyBiYXNoIHF1b3RpbmcgcnVsZXM6XG4gKiAgLSBTaW5nbGUtcXVvdGVkIHN0cmluZ3MgYXJlIEZVTExZIExJVEVSQUwg4oCUIGJhY2tzbGFzaCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nLlxuICogICAgVGhpcyBwcmVzZXJ2ZXMgSlNPTiBlc2NhcGUgc2VxdWVuY2VzIChlLmcuIFxcXCIpIGluc2lkZSAnLS1kYXRhLXJhdycgYm9kaWVzLlxuICogIC0gRG91YmxlLXF1b3RlZCBzdHJpbmdzIHRyZWF0IGJhY2tzbGFzaCBhcyBhbiBlc2NhcGUgY2hhcmFjdGVyIChcXFwiIOKGkiBcIikuXG4gKiAgICBUaGlzIGhhbmRsZXMgV2luZG93cy1DTUQtbm9ybWFsaXNlZCB2YWx1ZXMgYW5kIHBsYWluIC1kIFwie1xcXCJrXFxcIjpcXFwidlxcXCJ9XCIgYm9kaWVzLlxuICogQWxzbyBoYW5kbGVzIHN0cmFpZ2h0IGFuZCBjdXJseS9zbWFydCBxdW90ZSBjaGFyYWN0ZXJzLlxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUN1cmxMaW5lKGxpbmU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG4gIGNvbnN0IG4gPSBsaW5lLmxlbmd0aDtcbiAgd2hpbGUgKGkgPCBuKSB7XG4gICAgd2hpbGUgKGkgPCBuICYmIC9cXHMvLnRlc3QobGluZVtpXSkpIGkrKztcbiAgICBpZiAoaSA+PSBuKSBicmVhaztcbiAgICBjb25zdCBjaCA9IGxpbmVbaV07XG4gICAgaWYgKGlzU2luZ2xlUXVvdGUoY2gpIHx8IGlzRG91YmxlUXVvdGUoY2gpKSB7XG4gICAgICBjb25zdCBxdW90ZSA9IGNoO1xuICAgICAgY29uc3Qgc2luZ2xlUXVvdGVkID0gaXNTaW5nbGVRdW90ZShjaCk7XG4gICAgICBpKys7XG4gICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgIHdoaWxlIChpIDwgbiAmJiAhaXNDbG9zaW5nUXVvdGUobGluZVtpXSwgcXVvdGUpKSB7XG4gICAgICAgIGlmICghc2luZ2xlUXVvdGVkICYmIGxpbmVbaV0gPT09ICdcXFxcJykge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBpZiAoaSA8IG4pIHZhbHVlICs9IGxpbmVbaSsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSArPSBsaW5lW2krK107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpIDwgbikgaSsrO1xuICAgICAgdG9rZW5zLnB1c2godmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCB3b3JkID0gJyc7XG4gICAgd2hpbGUgKGkgPCBuICYmICEvXFxzLy50ZXN0KGxpbmVbaV0pICYmICFpc1NpbmdsZVF1b3RlKGxpbmVbaV0pICYmICFpc0RvdWJsZVF1b3RlKGxpbmVbaV0pKSB7XG4gICAgICB3b3JkICs9IGxpbmVbaSsrXTtcbiAgICB9XG4gICAgaWYgKHdvcmQpIHRva2Vucy5wdXNoKHdvcmQpO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbi8qKiBTdHJpcCBvbmUgbGF5ZXIgb2Ygc3Vycm91bmRpbmcgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKHVzZWQgZm9yIGlubGluZSAtLWRhdGE9IHZhbHVlcykuICovXG5mdW5jdGlvbiBzdHJpcFN1cnJvdW5kaW5nUXVvdGVzKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChzLmxlbmd0aCA+PSAyICYmICgocy5zdGFydHNXaXRoKFwiJ1wiKSAmJiBzLmVuZHNXaXRoKFwiJ1wiKSkgfHwgKHMuc3RhcnRzV2l0aCgnXCInKSAmJiBzLmVuZHNXaXRoKCdcIicpKSkpIHtcbiAgICByZXR1cm4gcy5zbGljZSgxLCAtMSk7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogRmxhZ3MgdGhhdCB0YWtlIG9uZSBhcmd1bWVudCB3aG9zZSB2YWx1ZSBzaG91bGQgYmUgY29uc3VtZWQgYnV0IERJU0NBUkRFRC5cbiAqIFdpdGhvdXQgdGhpcyBsaXN0LCBmbGFncyBsaWtlIC0tcmVmZXJlciBvciAtLXByb3h5IHdvdWxkIGhhdmUgdGhlaXIgVVJMLWxpa2VcbiAqIGFyZ3VtZW50IG1pc3Rha2VubHkgY2FwdHVyZWQgYXMgdGhlIHJlcXVlc3QgVVJMIGJ5IHRoZSBwYXR0ZXJuIG1hdGNoZXIgYmVsb3cuXG4gKi9cbmNvbnN0IENVUkxfRkxBR1NfV0lUSF9JR05PUkVEX0FSRyA9IG5ldyBTZXQoW1xuICAnLS1yZWZlcmVyJywgJy1lJywgJy0tcmVmZXInLFxuICAnLS1wcm94eScsICcteCcsICctLXNvY2tzNScsICctLXNvY2tzNCcsICctLXNvY2tzNGEnLCAnLS1zb2NrczUtaG9zdG5hbWUnLFxuICAnLS11c2VyLWFnZW50JywgJy1BJyxcbiAgJy0tY29va2llJywgJy1iJyxcbiAgJy0tY29va2llLWphcicsICctYycsXG4gICctbycsICctLW91dHB1dCcsXG4gICctdScsICctLXVzZXInLFxuICAnLS1jZXJ0JywgJy0ta2V5JywgJy0tY2FjZXJ0JywgJy0tY2FwYXRoJyxcbiAgJy0tY29ubmVjdC10aW1lb3V0JywgJy0tbWF4LXRpbWUnLCAnLW0nLFxuICAnLS1yZXRyeScsICctLXJldHJ5LWRlbGF5JywgJy0tcmV0cnktbWF4LXRpbWUnLFxuICAnLS1tYXgtcmVkaXJzJywgJy0taW50ZXJmYWNlJywgJy0tZG5zLXNlcnZlcnMnLFxuICAnLS1wcm94eS11c2VyJywgJy0tcHJveHktaGVhZGVyJyxcbiAgJy0tcmVzb2x2ZScsICctLWxpbWl0LXJhdGUnLFxuICAnLS10bHNwYXNzd29yZCcsICctLXRsc2F1dGh0eXBlJyxcbiAgJy0tdXBsb2FkLWZpbGUnLCAnLVQnLFxuICAnLS1yYW5nZScsICctcicsXG4gICctLXBhc3MnLCAnLS1lbmdpbmUnLFxuICAnLS1waW5uZWRwdWJrZXknLCAnLS1ob3N0cHVibWQ1Jyxcbl0pO1xuXG4vKiogQm9vbGVhbiBmbGFncyB0aGF0IHRha2Ugbm8gYXJndW1lbnQg4oCUIHNraXAgd2l0aG91dCBjb25zdW1pbmcgdGhlIG5leHQgdG9rZW4uICovXG5jb25zdCBDVVJMX05PX0FSR19GTEFHUyA9IG5ldyBTZXQoW1xuICAnLS1jb21wcmVzc2VkJywgJy0tbG9jYXRpb24nLCAnLUwnLCAnLS1pbnNlY3VyZScsICctaycsXG4gICctLXNpbGVudCcsICctcycsICctLXZlcmJvc2UnLCAnLXYnLCAnLS1nZXQnLCAnLUcnLFxuICAnLS1mYWlsJywgJy1mJywgJy0tc2hvdy1lcnJvcicsICctUycsXG4gICctLWhlYWQnLCAnLUknLCAnLS1pbmNsdWRlJywgJy1pJyxcbiAgJy0tcmVtb3RlLW5hbWUnLCAnLU8nLCAnLS1yZW1vdGUtbmFtZS1hbGwnLFxuICAnLS1pcHY0JywgJy00JywgJy0taXB2NicsICctNicsXG4gICctLWFueWF1dGgnLCAnLS1iYXNpYycsICctLWRpZ2VzdCcsICctLW50bG0nLCAnLS1uZWdvdGlhdGUnLFxuICAnLS1uby1rZWVwYWxpdmUnLCAnLS1uby1zZXNzaW9uaWQnLCAnLS1nbG9ib2ZmJywgJy1nJyxcbiAgJy0tcmVtb3RlLXRpbWUnLCAnLVInLCAnLS10Y3Atbm9kZWxheScsXG4gICctLWh0dHAxLjAnLCAnLTAnLCAnLS1odHRwMS4xJywgJy0taHR0cDInLCAnLS1odHRwMi1wcmlvci1rbm93bGVkZ2UnLFxuICAnLS1odHRwMycsICctLW5vLWJ1ZmZlcicsICctTicsXG4gICctLXRyYWNlLXRpbWUnLCAnLS1jZXJ0LXN0YXR1cycsICctLWZhbHNlLXN0YXJ0JyxcbiAgJy0tcGF0aC1hcy1pcycsICctLWxpc3Qtb25seScsICctbCcsXG4gICctLWFwcGVuZCcsICctYScsICctLXVzZS1hc2NpaScsICctQicsXG4gICctLWhhcHJveHktcHJvdG9jb2wnLCAnLS1uZXRyYycsICctbicsICctLW5ldHJjLW9wdGlvbmFsJyxcbl0pO1xuXG4vKiogUGFyc2UgYSBzaW5nbGUgLUYvLS1mb3JtIHZhbHVlIChrZXk9dmFsdWUgfCBrZXk9QGZpbGUgfCBrZXk9PGZpbGUpIGludG8gYSBmb3JtRGF0YSBlbnRyeS4gKi9cbmZ1bmN0aW9uIHBhcnNlRm9ybUVudHJ5KHJhdzogc3RyaW5nKTogeyBrZXk6IHN0cmluZzsgdHlwZTogJ3RleHQnIHwgJ2ZpbGUnOyB2YWx1ZTogc3RyaW5nIH0gfCBudWxsIHtcbiAgY29uc3QgZXEgPSByYXcuaW5kZXhPZignPScpO1xuICBpZiAoZXEgPT09IC0xKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5ID0gcmF3LnNsaWNlKDAsIGVxKS50cmltKCk7XG4gIGlmICgha2V5KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmVzdCA9IHJhdy5zbGljZShlcSArIDEpO1xuICAvLyBTdHJpcCBvcHRpb25hbCA7dHlwZT0uLi4gc3VmZml4XG4gIGNvbnN0IHNlbWkgPSByZXN0LmluZGV4T2YoJzsnKTtcbiAgY29uc3QgdmFsID0gKHNlbWkgIT09IC0xID8gcmVzdC5zbGljZSgwLCBzZW1pKSA6IHJlc3QpLnRyaW0oKTtcbiAgaWYgKHZhbC5zdGFydHNXaXRoKCdAJykgfHwgdmFsLnN0YXJ0c1dpdGgoJzwnKSkge1xuICAgIHJldHVybiB7IGtleSwgdHlwZTogJ2ZpbGUnLCB2YWx1ZTogdmFsLnNsaWNlKDEpIH07XG4gIH1cbiAgcmV0dXJuIHsga2V5LCB0eXBlOiAndGV4dCcsIHZhbHVlOiB2YWwgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhbnkgY1VSTCBjb21tYW5kIHN0cmluZyBhbmQgcmV0dXJuIG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBib2R5LCBhbmQgZm9ybURhdGEuXG4gKlxuICogU3VwcG9ydGVkIGZvcm1hdHMgLyBmZWF0dXJlczpcbiAqICDigKIgVW5peC9NYWMgIDogc2luZ2xlLXF1b3RlIGFyZ3MsIGJhY2tzbGFzaCAoXFwpIGxpbmUgY29udGludWF0aW9uXG4gKiAg4oCiIFBvd2VyU2hlbGw6IGJhY2t0aWNrIChgKSBsaW5lIGNvbnRpbnVhdGlvblxuICogIOKAoiBXaW5kb3dzIENNRDogXlwiIHF1b3RlIGRlbGltaXRlcnMsIF5cXF5cIiBpbm5lciBlc2NhcGVkIHF1b3RlLCBeIGxpbmUgY29udGludWF0aW9uXG4gKiAg4oCiIEhUVFAgbWV0aG9kICA6IC1YIFBPU1QgfCAtLXJlcXVlc3QgUE9TVCB8IC0tcmVxdWVzdD1QT1NUIHwgLVhQT1NUXG4gKiAg4oCiIEhlYWRlcnMgICAgICA6IC1IIC8gLS1oZWFkZXIgLyAtLWhlYWRlcj0n4oCmJyAvIC1IPSfigKYnIGlubGluZS09IGZvcm1cbiAqICDigKIgQm9keSAgICAgICAgIDogLWQgLyAtLWRhdGEgLyAtLWRhdGEtcmF3IC8gLS1kYXRhLWJpbmFyeSAvIC0tZGF0YS1hc2NpaSAvXG4gKiAgICAgICAgICAgICAgICAgICBpbmxpbmUgLS1kYXRhPSfigKYnIC8gbXVsdGlwbGUgLWQgZmxhZ3MgKGNvbmNhdGVuYXRlZCB3aXRoICYpIC9cbiAqICAgICAgICAgICAgICAgICAgIC0tZGF0YS11cmxlbmNvZGUgLyAtLWpzb24gKGNVUkwgNy44MispXG4gKiAg4oCiIEZvcm0tZGF0YSAgICA6IC1GIC8gLS1mb3JtIC8gLS1mb3JtLXN0cmluZyAobXVsdGlwYXJ0L2Zvcm0tZGF0YSlcbiAqICDigKIgVVJMICAgICAgICAgIDogYmFyZSBodHRwcz86Ly8gdG9rZW4gb3IgZXhwbGljaXQgLS11cmwgZmxhZ1xuICogIOKAoiBBdXRoIGluZmVyICAgOiBCZWFyZXIgdG9rZW4gZXh0cmFjdGVkIGZyb20gQXV0aG9yaXphdGlvbiBoZWFkZXJcbiAqICDigKIgTWV0aG9kIGluZmVyIDogR0VU4oaSUE9TVCB3aGVuIGJvZHkvZm9ybS1kYXRhIHByZXNlbnQgYW5kIG5vIGV4cGxpY2l0IC1YXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ3VybChjdXJsU3RyaW5nOiBzdHJpbmcpOiBQYXJzZWRDdXJsIHwgbnVsbCB7XG4gIGNvbnN0IHJhdyA9IChjdXJsU3RyaW5nID8/ICcnKS50cmltKCk7XG4gIGlmICghcmF3KSByZXR1cm4gbnVsbDtcblxuICBsZXQgcyA9IHJhdztcblxuICAvLyDilIDilIAgV2luZG93cyBDTUQgZm9ybWF0IChDaHJvbWUgRGV2VG9vbHMgXCJDb3B5IGFzIGNVUkwgKGNtZClcIikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIERldGVjdGVkIGJ5IHByZXNlbmNlIG9mIF5cIiAoY2FyZXQgKyBkb3VibGUtcXVvdGUpIGFzIHF1b3RlIGRlbGltaXRlci5cbiAgLy8gT25seSBhcHBsaWVkIHdoZW4gdGhlIGNVUkwgaXMgTk9UIGFscmVhZHkgdXNpbmcgc2luZ2xlLXF1b3RlcyBhcyB0aGUgcHJpbWFyeVxuICAvLyBxdW90aW5nIG1lY2hhbmlzbSAoaS5lLiBub3QgYSBVbml4IGNVUkwgdGhhdCBtZXJlbHkgY29udGFpbnMgXlwiIGluIGEgYm9keSkuXG4gIGlmICgvXFxeXCIvLnRlc3QocykgJiYgIS8oPzpefFxccyknLy50ZXN0KHMpKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxzKlxcXlxccypcXHI/XFxuXFxzKi9nLCAnICcpOyAgLy8gXiBsaW5lLWNvbnRpbnVhdGlvblxuICAgIHMgPSBzLnJlcGxhY2UoL1xcXlxcXFxcXF5cIi9nLCAnXFxcXFwiJyk7ICAgICAgICAgICAvLyBeXFxeXCIg4oaSIFxcXCIgKGlubmVyIGVzY2FwZWQgcXVvdGUpXG4gICAgcyA9IHMucmVwbGFjZSgvXFxeXCIvZywgJ1wiJyk7ICAgICAgICAgICAgICAgICAvLyBeXCIgIOKGkiBcIiAgKHF1b3RlIGRlbGltaXRlcilcbiAgfVxuXG4gIC8vIOKUgOKUgCBQb3dlclNoZWxsIGJhY2t0aWNrIGxpbmUgY29udGludWF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBzID0gcy5yZXBsYWNlKC9gXFxzKlxccj9cXG5cXHMqL2csICcgJyk7XG5cbiAgLy8g4pSA4pSAIFVuaXgvTWFjIGJhY2tzbGFzaCBsaW5lIGNvbnRpbnVhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcyA9IHMucmVwbGFjZSgvXFxcXFxccypcXHI/XFxuXFxzKi9nLCAnICcpO1xuXG4gIC8vIENvbGxhcHNlIHJlbWFpbmluZyBsaXRlcmFsIG5ld2xpbmVzIGFuZCByZWR1bmRhbnQgc3BhY2VzXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBzLnJlcGxhY2UoL1xccj9cXG4vZywgJyAnKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gIGNvbnN0IHRva2VucyA9IHRva2VuaXplQ3VybExpbmUobm9ybWFsaXplZCk7XG5cbiAgbGV0IG1ldGhvZCA9ICcnO1xuICBsZXQgdXJsID0gJyc7XG4gIGNvbnN0IGhlYWRlcnM6IEFwaUVkaXRIZWFkZXJSb3dbXSA9IFtdO1xuICBsZXQgYm9keSA9ICcnO1xuICBjb25zdCBmb3JtRGF0YTogeyBrZXk6IHN0cmluZzsgdHlwZTogJ3RleHQnIHwgJ2ZpbGUnOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuICBjb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvL2k7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0ID0gdG9rZW5zW2ldO1xuICAgIGNvbnN0IGNvbnN1bWVOZXh0ID0gKCk6IHN0cmluZyA9PiB0b2tlbnNbKytpXSA/PyAnJztcblxuICAgIC8vIOKUgOKUgCBTa2lwIGJvb2xlYW4gbm8tYXJnIGZsYWdzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGlmIChDVVJMX05PX0FSR19GTEFHUy5oYXModCkpIGNvbnRpbnVlO1xuXG4gICAgLy8g4pSA4pSAIENvbnN1bWUtYW5kLWRpc2NhcmQgZmxhZ3MgKHRoZWlyIGFyZyBtdXN0IG5vdCBiZSBtaXN0YWtlbiBmb3IgdGhlIFVSTCkg4pSA4pSAXG4gICAgaWYgKENVUkxfRkxBR1NfV0lUSF9JR05PUkVEX0FSRy5oYXModCkpIHsgY29uc3VtZU5leHQoKTsgY29udGludWU7IH1cblxuICAgIC8vIOKUgOKUgCBIVFRQIG1ldGhvZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBpZiAodCA9PT0gJy1YJyB8fCB0ID09PSAnLS1yZXF1ZXN0Jykge1xuICAgICAgY29uc3QgdiA9IGNvbnN1bWVOZXh0KCk7IGlmICh2KSBtZXRob2QgPSB2LnRvVXBwZXJDYXNlKCk7IGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodC5zdGFydHNXaXRoKCctLXJlcXVlc3Q9JykpIHtcbiAgICAgIGNvbnN0IHYgPSB0LnNsaWNlKDEwKTsgaWYgKHYpIG1ldGhvZCA9IHYudG9VcHBlckNhc2UoKTsgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy1YJykgJiYgdC5sZW5ndGggPiAyKSB7XG4gICAgICBtZXRob2QgPSB0LnNsaWNlKDIpLnRvVXBwZXJDYXNlKCk7IGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBIZWFkZXJzOiAtSCAvIC0taGVhZGVyIC8gaW5saW5lIC0taGVhZGVyPSfigKYnIC8gLUg9J+KApicg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgaWYgKHQgPT09ICctSCcgfHwgdCA9PT0gJy0taGVhZGVyJykge1xuICAgICAgY29uc3QgdiA9IGNvbnN1bWVOZXh0KCk7XG4gICAgICBjb25zdCBjb2xvbiA9IHYuaW5kZXhPZignOicpO1xuICAgICAgaWYgKGNvbG9uICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdi5zbGljZSgwLCBjb2xvbikudHJpbSgpO1xuICAgICAgICBjb25zdCB2YWwgID0gdi5zbGljZShjb2xvbiArIDEpLnRyaW0oKTtcbiAgICAgICAgaWYgKG5hbWUpIGhlYWRlcnMucHVzaCh7IG5hbWUsIHR5cGU6ICdzdHJpbmcnLCB2YWx1ZTogdmFsIH0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIElubGluZSAtLWhlYWRlcj0nTmFtZTogVmFsdWUnIOKAlCB0b2tlbml6ZXIgc3BsaXRzIGludG8gWyctLWhlYWRlcj0nLCAnTmFtZTogVmFsdWUnXVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy0taGVhZGVyPScpIHx8IHQuc3RhcnRzV2l0aCgnLUg9JykpIHtcbiAgICAgIGNvbnN0IHByZWZpeExlbiA9IHQuc3RhcnRzV2l0aCgnLS1oZWFkZXI9JykgPyA5IDogMztcbiAgICAgIGNvbnN0IGlubGluZSA9IHQuc2xpY2UocHJlZml4TGVuKSB8fCBjb25zdW1lTmV4dCgpO1xuICAgICAgY29uc3QgY29sb24gID0gaW5saW5lLmluZGV4T2YoJzonKTtcbiAgICAgIGlmIChjb2xvbiAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGlubGluZS5zbGljZSgwLCBjb2xvbikudHJpbSgpO1xuICAgICAgICBjb25zdCB2YWwgID0gaW5saW5lLnNsaWNlKGNvbG9uICsgMSkudHJpbSgpO1xuICAgICAgICBpZiAobmFtZSkgaGVhZGVycy5wdXNoKHsgbmFtZSwgdHlwZTogJ3N0cmluZycsIHZhbHVlOiB2YWwgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgUmVxdWVzdCBib2R5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIGNVUkwgY29uY2F0ZW5hdGVzIG11bHRpcGxlIC1kIGZsYWdzIHdpdGggJyYnOyByZXBsaWNhdGUgdGhhdCBiZWhhdmlvdXIuXG4gICAgaWYgKHQgPT09ICctZCcgfHwgdCA9PT0gJy0tZGF0YScgfHwgdCA9PT0gJy0tZGF0YS1yYXcnIHx8XG4gICAgICAgIHQgPT09ICctLWRhdGEtYmluYXJ5JyB8fCB0ID09PSAnLS1kYXRhLWFzY2lpJykge1xuICAgICAgY29uc3QgdiA9IGNvbnN1bWVOZXh0KCk7XG4gICAgICBpZiAodiAmJiAhdi5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSBzdHJpcFN1cnJvdW5kaW5nUXVvdGVzKHYpO1xuICAgICAgICBib2R5ID0gYm9keSA/IGAke2JvZHl9JiR7Y2h1bmt9YCA6IGNodW5rO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIC0tanNvbiBmbGFnIChjVVJMIDcuODIrKTogc2V0cyBDb250ZW50LVR5cGUgYXBwbGljYXRpb24vanNvbiArIGJvZHlcbiAgICBpZiAodCA9PT0gJy0tanNvbicpIHtcbiAgICAgIGNvbnN0IHYgPSBjb25zdW1lTmV4dCgpO1xuICAgICAgaWYgKHYgJiYgIXYuc3RhcnRzV2l0aCgnQCcpKSBib2R5ID0gc3RyaXBTdXJyb3VuZGluZ1F1b3Rlcyh2KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBJbmxpbmUgLS1kYXRhPSfigKYnIC8gLS1kYXRhLXJhdz0n4oCmJyDigJQgdG9rZW5pemVyIHNwbGl0cyBpbnRvIFsnLS1kYXRhPScsIHZhbHVlXVxuICAgIGlmICh0LnN0YXJ0c1dpdGgoJy0tZGF0YT0nKSB8fCB0LnN0YXJ0c1dpdGgoJy0tZGF0YS1yYXc9JykgfHxcbiAgICAgICAgdC5zdGFydHNXaXRoKCctLWRhdGEtYmluYXJ5PScpIHx8IHQuc3RhcnRzV2l0aCgnLS1kYXRhLWFzY2lpPScpKSB7XG4gICAgICBjb25zdCBlcUlkeCA9IHQuaW5kZXhPZignPScpO1xuICAgICAgY29uc3QgaW5saW5lID0gdC5zbGljZShlcUlkeCArIDEpIHx8IGNvbnN1bWVOZXh0KCk7XG4gICAgICBpZiAoaW5saW5lICYmICFTdHJpbmcoaW5saW5lKS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSBzdHJpcFN1cnJvdW5kaW5nUXVvdGVzKFN0cmluZyhpbmxpbmUpKTtcbiAgICAgICAgYm9keSA9IGJvZHkgPyBgJHtib2R5fSYke2NodW5rfWAgOiBjaHVuaztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBJbmxpbmUgc2hvcnQgZm9ybSAtZFZBTFVFIG9yIC1kPVZBTFVFXG4gICAgaWYgKHQuc3RhcnRzV2l0aCgnLWQnKSAmJiB0Lmxlbmd0aCA+IDIpIHtcbiAgICAgIGNvbnN0IHYgPSB0LnN0YXJ0c1dpdGgoJy1kPScpID8gdC5zbGljZSgzKSA6IHQuc2xpY2UoMik7XG4gICAgICBpZiAoIXYuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gc3RyaXBTdXJyb3VuZGluZ1F1b3Rlcyh2KTtcbiAgICAgICAgYm9keSA9IGJvZHkgPyBgJHtib2R5fSYke2NodW5rfWAgOiBjaHVuaztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyAtLWRhdGEtdXJsZW5jb2RlIG5hbWU9dmFsdWUgKHRyZWF0IGFzIHBsYWluIGJvZHkgZW50cnkpXG4gICAgaWYgKHQgPT09ICctLWRhdGEtdXJsZW5jb2RlJykge1xuICAgICAgY29uc3QgdiA9IGNvbnN1bWVOZXh0KCk7XG4gICAgICBpZiAodiAmJiAhdi5pbmNsdWRlcygnQCcpKSBib2R5ID0gYm9keSA/IGAke2JvZHl9JiR7dn1gIDogdjtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodC5zdGFydHNXaXRoKCctLWRhdGEtdXJsZW5jb2RlPScpKSB7XG4gICAgICBjb25zdCBpbmxpbmUgPSB0LnNsaWNlKDE3KSB8fCBjb25zdW1lTmV4dCgpO1xuICAgICAgaWYgKGlubGluZSAmJiAhU3RyaW5nKGlubGluZSkuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICBib2R5ID0gYm9keSA/IGAke2JvZHl9JiR7aW5saW5lfWAgOiBTdHJpbmcoaW5saW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBNdWx0aXBhcnQgZm9ybS1kYXRhOiAtRiAvIC0tZm9ybSAvIC0tZm9ybS1zdHJpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgaWYgKHQgPT09ICctRicgfHwgdCA9PT0gJy0tZm9ybScgfHwgdCA9PT0gJy0tZm9ybS1zdHJpbmcnKSB7XG4gICAgICBjb25zdCB2ID0gY29uc3VtZU5leHQoKTtcbiAgICAgIGlmICh2KSB7IGNvbnN0IGUgPSBwYXJzZUZvcm1FbnRyeSh2KTsgaWYgKGUpIGZvcm1EYXRhLnB1c2goZSk7IH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodC5zdGFydHNXaXRoKCctLWZvcm09JykgfHwgdC5zdGFydHNXaXRoKCctRj0nKSkge1xuICAgICAgY29uc3QgcHJlZml4TGVuID0gdC5zdGFydHNXaXRoKCctLWZvcm09JykgPyA3IDogMztcbiAgICAgIGNvbnN0IGlubGluZSA9IHQuc2xpY2UocHJlZml4TGVuKSB8fCBjb25zdW1lTmV4dCgpO1xuICAgICAgaWYgKGlubGluZSkgeyBjb25zdCBlID0gcGFyc2VGb3JtRW50cnkoU3RyaW5nKGlubGluZSkpOyBpZiAoZSkgZm9ybURhdGEucHVzaChlKTsgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIFVSTCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBpZiAodCA9PT0gJy0tdXJsJykge1xuICAgICAgY29uc3QgdiA9IGNvbnN1bWVOZXh0KCk7IGlmICh2ICYmICF1cmwpIHVybCA9IHY7IGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodC5zdGFydHNXaXRoKCctLXVybD0nKSkge1xuICAgICAgY29uc3QgdiA9IHQuc2xpY2UoNikgfHwgY29uc3VtZU5leHQoKTsgaWYgKHYgJiYgIXVybCkgdXJsID0gdjsgY29udGludWU7XG4gICAgfVxuICAgIGlmICh1cmxQYXR0ZXJuLnRlc3QodCkgJiYgIXVybCkgeyB1cmwgPSB0OyB9XG4gIH1cblxuICAvLyBGYWxsYmFjazogc2NhbiBhbGwgdG9rZW5zIGZvciB0aGUgZmlyc3QgVVJMLWxpa2UgdmFsdWVcbiAgaWYgKCF1cmwpIHtcbiAgICB1cmwgPSB0b2tlbnMuZmluZCh0b2sgPT4gdXJsUGF0dGVybi50ZXN0KHRvaykpID8/ICcnO1xuICB9XG5cbiAgLy8gSW5mZXIgbWV0aG9kOiBpZiBhIGJvZHkvZm9ybS1kYXRhIGlzIHByZXNlbnQgYnV0IG5vIGV4cGxpY2l0IC1YIHdhcyBnaXZlbixcbiAgLy8gdXNlIFBPU1QgKG1hbnkgYnJvd3NlciBEZXZUb29scyBjVVJMcyBvbWl0IC1YIFBPU1QpLlxuICBjb25zdCBmaW5hbE1ldGhvZCA9IChtZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGlmICgoYm9keSB8fCBmb3JtRGF0YS5sZW5ndGggPiAwKSAmJiAoZmluYWxNZXRob2QgPT09ICdHRVQnIHx8IGZpbmFsTWV0aG9kID09PSAnSEVBRCcpKSB7XG4gICAgcmV0dXJuIHsgbWV0aG9kOiAnUE9TVCcsIHVybCwgaGVhZGVycywgYm9keSwgZm9ybURhdGEgfTtcbiAgfVxuICByZXR1cm4geyBtZXRob2Q6IGZpbmFsTWV0aG9kLCB1cmwsIGhlYWRlcnMsIGJvZHksIGZvcm1EYXRhIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1hcGktZWRpdC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwaS1lZGl0LXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgQXBpRWRpdFN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgaW5pdGlhbE1ldGhvZD86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbEVudmlyb25tZW50Pzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsU3RlcD86IG51bWJlcjtcbiAgQElucHV0KCkgaW5pdGlhbFVybD86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFBheWxvYWRUYWI/OiBBcGlFZGl0UGF5bG9hZFRhYjtcbiAgLyoqIEluaXRpYWwgcGF5bG9hZCB0eXBlIChyYXcsIHgtd3d3LWZvcm0tdXJsZW5jb2RlZCwgZm9ybS1kYXRhKSB3aGVuIGVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RlcC4gKi9cbiAgQElucHV0KCkgaW5pdGlhbFBheWxvYWRUeXBlPzogJ3JhdycgfCAneC13d3ctZm9ybS11cmxlbmNvZGVkJyB8ICdmb3JtLWRhdGEnO1xuICAvKiogSW5pdGlhbCBwYXlsb2FkIHRleHQgKGJvZHkpIHdoZW4gZWRpdGluZyBhbiBleGlzdGluZyBzdGVwLiAqL1xuICBASW5wdXQoKSBpbml0aWFsUGF5bG9hZFRleHQ/OiBzdHJpbmc7XG4gIC8qKiBJbml0aWFsIHN1bW1hcnkgd2hlbiBlZGl0aW5nIGFuIGV4aXN0aW5nIHN0ZXAgKG1hcHMgdG8gc3RlcCBkZXNjcmlwdGlvbikuICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdW1tYXJ5Pzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsSGVhZGVycz86IEFwaUVkaXRIZWFkZXJSb3dbXTtcbiAgQElucHV0KCkgaW5pdGlhbFJlc3BvbnNlUHJldmlldz86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFZhcmlhYmxlTmFtZT86IHN0cmluZztcbiAgLyoqIEluaXRpYWwgcmVzcG9uc2UgYm9keSB2ZXJpZmljYXRpb25zIHdoZW4gZWRpdGluZyBhbiBleGlzdGluZyBzdGVwLiAqL1xuICBASW5wdXQoKSBpbml0aWFsUmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9ucz86IEFwaUVkaXRSZXNwb25zZUJvZHlWZXJpZmljYXRpb25Sb3dbXTtcbiAgLyoqIEluaXRpYWwgc3RhdHVzIHZlcmlmaWNhdGlvbnMgd2hlbiBlZGl0aW5nIGFuIGV4aXN0aW5nIHN0ZXAuICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGF0dXNWZXJpZmljYXRpb25zPzogQXBpRWRpdFN0YXR1c1ZlcmlmaWNhdGlvblJvd1tdO1xuICAvKiogSW5pdGlhbCBhY3RpdmUgcmVzcG9uc2UgdmVyaWZpY2F0aW9uIHRhYiB3aGVuIGVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RlcC4gKi9cbiAgQElucHV0KCkgaW5pdGlhbEFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiPzogJ3Jlc3BvbnNlLWJvZHknIHwgJ3N0YXR1cyc7XG4gIEBJbnB1dCgpIGVkaXRNb2RlPzogYm9vbGVhbjtcbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUvVXBkYXRlIGJ1dHRvbiAqL1xuICBASW5wdXQoKSBpc0NyZWF0aW5nU3RlcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBJbml0aWFsIEFQSSB0eXBlICgncmVzdCcgZGVmYXVsdCwgJ2dyYXBocWwnIGZvciBHcmFwaFFMIHN0ZXBzKS4gQ29tZXMgZnJvbSBgZXZlbnQudHlwZWAgb24gdGhlIHNhdmVkIHN0ZXAuICovXG4gIEBJbnB1dCgpIGluaXRpYWxBcGlUeXBlPzogQXBpRWRpdEFwaVR5cGU7XG4gIC8qKiBJbml0aWFsIEdyYXBoUUwgYm9keSB3aGVuIGVkaXRpbmcgYSBHcmFwaFFMIHN0ZXAuIGB2YXJpYWJsZXNgIG1heSBiZSBhbiBvYmplY3QgKHByZWZlcnJlZCkgb3IgYSBKU09OIHN0cmluZy4gKi9cbiAgQElucHV0KCkgaW5pdGlhbEdyYXBoUUw/OiBBcGlFZGl0R3JhcGhRTFBheWxvYWQ7XG4gIC8qKiBTY2hlbWEgc291cmNlIGZvciB0aGUgR3JhcGhRTCBvcGVyYXRpb24gcGlja2VyIChVUkwgKyBjb3VudHMpLiBQYXJlbnQgcHJvdmlkZXMgdGhpcyBhZnRlciBgbG9hZFNjaGVtYWAgcmVzb2x2ZXMuICovXG4gIEBJbnB1dCgpIGdyYXBoUUxTY2hlbWFTb3VyY2U/OiBHcmFwaFFMU2NoZW1hU291cmNlO1xuICAvKiogT3BlcmF0aW9ucyBsaXN0IGZvciB0aGUgcGlja2VyLiBFbXB0eSB1bnRpbCBwYXJlbnQgbG9hZHMvaW50cm9zcGVjdHMgdGhlIHNjaGVtYS4gKi9cbiAgQElucHV0KCkgZ3JhcGhRTE9wZXJhdGlvbnM6IEdyYXBoUUxPcGVyYXRpb25PcHRpb25bXSA9IFtdO1xuICAvKiogVHJ1ZSB3aGlsZSB0aGUgcGFyZW50IGlzIGludHJvc3BlY3Rpbmc7IHRoZSBwaWNrZXIgc3dhcHMgaXRzIGVtcHR5IHN0YXRlIGZvciBhIHNwaW5uZXIuICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0dyYXBoUUxTY2hlbWEgPSBmYWxzZTtcblxuICAvKiogRW1pdHMgdGhlIGNVUkwgc3RyaW5nIHdoZW4gdXNlciBjbGlja3MgSW1wb3J0ICh2YWx1ZSBmcm9tIHRoZSB0ZXh0YXJlYSBjb250cm9sKS4gKi9cbiAgQE91dHB1dCgpIGltcG9ydEN1cmwgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdXNlciBjYW5jZWxzIHRoZSBJbXBvcnQgY1VSTCBwYW5lbCAoY2xpY2tzIENhbmNlbCkuICovXG4gIEBPdXRwdXQoKSBpbXBvcnRDdXJsQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHMgd2hlbiB1c2VyIGNsaWNrcyBTZW5kIFJlcXVlc3QsIHdpdGggZW52aXJvbm1lbnQsIG1ldGhvZCwgdXJsLCBhbmQgaGVhZGVycy4gKi9cbiAgQE91dHB1dCgpIHNlbmRSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcGlFZGl0U2VuZFJlcXVlc3RQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgYmFjayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXRzIHdoZW4gdXNlciBjbGlja3MgdGhlIENhbmNlbCBidXR0b24gKHN0ZXAgMSkuICovXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBuZXh0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHMgd2hlbiB1c2VyIGNsaWNrcyBDcmVhdGUgd2l0aCBhbGwgZW50ZXJlZCBkZXRhaWxzOiBzdGVwMSAoZW52aXJvbm1lbnQsIEhUVFAgbWV0aG9kLCBVUkwsIGhlYWRlcnMsIGJvZHkpLCBzdGVwMiAodmFyaWFibGUgbmFtZSksIHN0ZXAzICh2ZXJpZmljYXRpb25zKS4gKi9cbiAgQE91dHB1dCgpIGNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXBpRWRpdENyZWF0ZVBheWxvYWQ+KCk7XG4gIC8qKiBFbWl0cyB3aGVuZXZlciBoZWFkZXJzIGNoYW5nZSAoYWRkLCByZW1vdmUsIG9yIGVkaXQpIHNvIHRoZSBwYXJlbnQgY2FuIHJlZmxlY3QgdGhlbSBpbiB0aGUgY2FudmFzL2NvbnRyb2xzLiAqL1xuICBAT3V0cHV0KCkgaGVhZGVyc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXBpRWRpdEhlYWRlclJvd1tdPigpO1xuICAvKiogRW1pdHMgd2hlbiB0aGUgZW52aXJvbm1lbnQgZHJvcGRvd24gc2VsZWN0aW9uIGNoYW5nZXMgKHNlbGVjdGVkIHZhbHVlL2lkIG9yIG51bGwgZm9yIE5vbmUpIHNvIHRoZSBwYXJlbnQgY2FuIHByb3ZpZGUgdXJsT3B0aW9ucy4gKi9cbiAgQE91dHB1dCgpIGVudmlyb25tZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudW1iZXIgfCBudWxsPigpO1xuXG4gIC8qKiBGb3JtIGNvbnRyb2wgZm9yIEltcG9ydCBjVVJMIHRleHRhcmVhOyB2YWx1ZSBpcyBlbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgSW1wb3J0LiAqL1xuICByZWFkb25seSBpbXBvcnRDdXJsQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgdmFyaWFibGVOYW1lID0gJyc7XG4gIHZhcmlhYmxlTmFtZUVycm9yID0gJyc7XG4gIHVybEVycm9yID0gJyc7XG4gIC8qKiBTdGVwIHN1bW1hcnkgKGRpc3BsYXllZCBpbiBBUEkgc3RlcCB0aXRsZTsgbWFwcyB0byBzdGVwIGRlc2NyaXB0aW9uKS4gKi9cbiAgc3VtbWFyeSA9ICcnO1xuXG4gIC8qKiBDb250cm9scyB3aGljaCBib2R5IGNvbnRlbnQgaXMgdmlzaWJsZTogaGVhZGVycyAoZGVmYXVsdCkgb3IgaW1wb3J0LWN1cmwuICovXG4gIGJvZHlWaWV3OiBBcGlFZGl0Qm9keVZpZXcgPSAnaGVhZGVycyc7XG5cbiAgcmVhZG9ubHkgc3RlcExhYmVscyA9IFtcbiAgICB7IGluZGV4OiAxLCBsYWJlbDogQVBJX0VESVRfU1RFUF9MQUJFTFMuUkVRVUVTVF9ERVRBSUxTIH0sXG4gICAgeyBpbmRleDogMiwgbGFiZWw6IEFQSV9FRElUX1NURVBfTEFCRUxTLlNUT1JFX1JFU1BPTlNFIH0sXG4gICAgeyBpbmRleDogMywgbGFiZWw6IEFQSV9FRElUX1NURVBfTEFCRUxTLlZBTElEQVRJT04gfSxcbiAgXTtcbiAgY3VycmVudFN0ZXAgPSAxO1xuXG4gIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjdXJyZW50IHN0ZXAgb25seSAodXNlZCB3aGVuIHNob3dpbmcgYSBzaW5nbGUgc3RlcCBpbiB0aGUgaW5kaWNhdG9yKS4gKi9cbiAgZ2V0IGFjdGl2ZVN0ZXBMYWJlbCgpOiB7IGluZGV4OiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcExhYmVsc1t0aGlzLmN1cnJlbnRTdGVwIC0gMV07XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG1pblN0ZXAgPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heFN0ZXAgPSAzO1xuXG4gIC8qKiBQZXJjZW50YWdlIHRvIHRyYW5zbGF0ZSB0aGUgc3RlcCBzdHJpcCAoMCwgLTMzLjMzMywgLTY2LjY2NikgZm9yIENTUyB0cmFuc2l0aW9uLiAqL1xuICBnZXQgc3RyaXBUcmFuc2xhdGVQZXJjZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmN1cnJlbnRTdGVwIC0gMSkgKiAtMzMuMzMzO1xuICB9XG5cbiAgc2V0U3RlcChzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoc3RlcCA+PSB0aGlzLm1pblN0ZXAgJiYgc3RlcCA8PSB0aGlzLm1heFN0ZXApIHtcbiAgICAgIC8vIFZhbGlkYXRlIGN1cnJlbnQgc3RlcCBiZWZvcmUgYWxsb3dpbmcgZm9yd2FyZCBuYXZpZ2F0aW9uXG4gICAgICBpZiAoc3RlcCA+IHRoaXMuY3VycmVudFN0ZXApIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgVVJMIGJlZm9yZSBhbGxvd2luZyBuYXZpZ2F0aW9uIGF3YXkgZnJvbSBzdGVwIDFcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXAgPT09IDEpIHtcbiAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVVcmwoKSkge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFZhbGlkYXRlIHZhcmlhYmxlIG5hbWUgYmVmb3JlIGFsbG93aW5nIG5hdmlnYXRpb24gYXdheSBmcm9tIHN0ZXAgMlxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gMiAmJiAhdGhpcy52YXJpYWJsZU5hbWU/LnRyaW0oKSkge1xuICAgICAgICAgIHRoaXMudmFyaWFibGVOYW1lRXJyb3IgPSAnVmFyaWFibGUgTmFtZSBpcyByZXF1aXJlZC4nO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhcmlhYmxlTmFtZUVycm9yID0gJyc7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwID0gc3RlcDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbFN0ZXAodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KHRoaXMubWluU3RlcCwgTWF0aC5taW4odGhpcy5tYXhTdGVwLCBNYXRoLmZsb29yKHZhbHVlKSkpO1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBjbGFtcGVkO1xuICB9XG5cbiAgLyoqIEhUVFAgbWV0aG9kIG9wdGlvbnM6IGFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB3aXRoIGlkLCBuYW1lLCB2YWx1ZSwgbGFiZWwgKHBhc3NlZCBmcm9tIHBhcmVudCkuICovXG4gIEBJbnB1dCgpIGh0dHBNZXRob2RPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbklucHV0W10gPSBbXTtcblxuICAvKiogRm9ybSBmb3IgSFRUUCBtZXRob2Qgc2VsZWN0IChjcWEtZHluYW1pYy1zZWxlY3QpICovXG4gIG1ldGhvZEZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIENvbmZpZyBmb3IgbWV0aG9kIGRyb3Bkb3duICh1cGRhdGVkIHdoZW4gaHR0cE1ldGhvZE9wdGlvbnMgY2hhbmdlcyB0byBhdm9pZCBuZXcgcmVmZXJlbmNlIGV2ZXJ5IENEKSAqL1xuICBtZXRob2RTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIHBsYWNlaG9sZGVyOiAnTWV0aG9kJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVwZGF0ZU1ldGhvZFNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnMgPz8gW10pLm1hcCgobSkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24obSkpO1xuICAgIHRoaXMubWV0aG9kU2VsZWN0Q29uZmlnID0ge1xuICAgICAgLi4udGhpcy5tZXRob2RTZWxlY3RDb25maWcsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGhvZFZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLmh0dHBNZXRob2RPcHRpb25zID8/IFtdKVxuICAgICAgLm1hcCgobSkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUobSkpXG4gICAgICAuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPSBudWxsKTtcbiAgfVxuXG4gIC8qKiBGb3JtIGZvciBlbnZpcm9ubWVudCBzZWxlY3QgKGNxYS1keW5hbWljLXNlbGVjdCkgKi9cbiAgZW52aXJvbm1lbnRGb3JtITogRm9ybUdyb3VwO1xuXG4gIC8qKiBFbnZpcm9ubWVudCBvcHRpb25zOiBhcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgd2l0aCBpZCwgbmFtZSwgdmFsdWUsIGxhYmVsIChwYXNzZWQgZnJvbSBwYXJlbnQpLiAqL1xuICBASW5wdXQoKSBlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuICAvKiogV2hldGhlciBtb3JlIGVudmlyb25tZW50cyBhcmUgYXZhaWxhYmxlIGZvciBpbmZpbml0ZSBzY3JvbGwgKHByb3ZpZGVkIGJ5IHBhcmVudCkuICovXG4gIEBJbnB1dCgpIGhhc01vcmVFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGxvYWRpbmcgZW52aXJvbm1lbnRzIChzZWFyY2ggb3IgbG9hZCBtb3JlKS4gKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nRW52aXJvbm1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBVUkwgZmllbGQgb3B0aW9ucyB3aGVuIGFuIGVudmlyb25tZW50IGlzIHNlbGVjdGVkIChiYXNlIFVSTCArIHBhcmFtZXRlcnMgYXMgKnxrZXl8KS4gUGFyZW50IGZpbGxzIHRoaXMgd2hlbiBlbnZpcm9ubWVudENoYW5nZSBmaXJlcy4gKi9cbiAgQElucHV0KCkgdXJsT3B0aW9uczogQ3FhQXV0b2NvbXBsZXRlT3B0aW9uW10gPSBbXTtcblxuICAvKiogQ29uZmlnIGZvciBlbnZpcm9ubWVudCBkcm9wZG93biAodXBkYXRlZCB3aGVuIGVudmlyb25tZW50T3B0aW9ucyBjaGFuZ2VzIHRvIGF2b2lkIG5ldyByZWZlcmVuY2UgZXZlcnkgQ0QpICovXG4gIGVudmlyb25tZW50U2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZW52aXJvbm1lbnQnLFxuICAgIHBsYWNlaG9sZGVyOiAnRW52aXJvbm1lbnQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHRvU2VsZWN0T3B0aW9uKGl0ZW06IEVudmlyb25tZW50T3B0aW9uSW5wdXQpOiBTZWxlY3RPcHRpb24ge1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7IGlkOiBpdGVtLCB2YWx1ZTogaXRlbSwgbmFtZTogaXRlbSwgbGFiZWw6IGl0ZW0gfTtcbiAgICB9XG4gICAgY29uc3QgbyA9IGl0ZW0gYXMgU2VsZWN0T3B0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogby5pZCA/PyBvLnZhbHVlLFxuICAgICAgdmFsdWU6IG8udmFsdWUgPz8gby5pZCxcbiAgICAgIG5hbWU6IG8ubmFtZSA/PyBvLmxhYmVsID8/IFN0cmluZyhvLnZhbHVlID8/IG8uaWQpLFxuICAgICAgbGFiZWw6IG8ubGFiZWwgPz8gby5uYW1lID8/IFN0cmluZyhvLnZhbHVlID8/IG8uaWQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRPcHRpb25WYWx1ZShpdGVtOiBFbnZpcm9ubWVudE9wdGlvbklucHV0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSByZXR1cm4gaXRlbTtcbiAgICBjb25zdCBvID0gaXRlbSBhcyBTZWxlY3RPcHRpb247XG4gICAgY29uc3QgdiA9IG8udmFsdWUgPz8gby5pZDtcbiAgICByZXR1cm4gdiAhPSBudWxsID8gU3RyaW5nKHYpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFbnZpcm9ubWVudFNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gKHRoaXMuZW52aXJvbm1lbnRPcHRpb25zID8/IFtdKS5tYXAoKGUpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LnRvU2VsZWN0T3B0aW9uKGUpKTtcbiAgICB0aGlzLmVudmlyb25tZW50U2VsZWN0Q29uZmlnID0ge1xuICAgICAgLi4udGhpcy5lbnZpcm9ubWVudFNlbGVjdENvbmZpZyxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBvcHRpb25zLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRW52aXJvbm1lbnRzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ0Vudmlyb25tZW50cyxcbiAgICAgIG9uTG9hZE1vcmU6ICgpID0+IHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudExvYWRNb3JlLmVtaXQoKTtcbiAgICAgIH0sXG4gICAgICBvblNlYXJjaDogKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudFNlYXJjaC5lbWl0KHF1ZXJ5KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW52aXJvbm1lbnRWYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5lbnZpcm9ubWVudE9wdGlvbnMgPz8gW10pXG4gICAgICAubWFwKChlKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShlKSlcbiAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB2ICE9IG51bGwpO1xuICB9XG5cbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHNlYXJjaGVzIGVudmlyb25tZW50cyBmcm9tIHRoZSBkcm9wZG93bi4gKi9cbiAgQE91dHB1dCgpIGVudmlyb25tZW50U2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50cy4gKi9cbiAgQE91dHB1dCgpIGVudmlyb25tZW50TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiB1c2VyIGNsaWNrcyBcIkxvYWQgU2NoZW1hXCIgaW4gR3JhcGhRTCBtb2RlLiBQYXJlbnQgaGFuZGxlcyB0aGUgc2NoZW1hIGZldGNoIChvciBzaG93cyBhIFwiY29taW5nIHNvb25cIiB0b2FzdCBmb3Igbm93KS4gKi9cbiAgQE91dHB1dCgpIGxvYWRTY2hlbWEgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdXJsOiBzdHJpbmc7IGhlYWRlcnM6IEFwaUVkaXRIZWFkZXJSb3dbXTsgZW52aXJvbm1lbnQ/OiBzdHJpbmcgfT4oKTtcblxuICAvKiogRm9ybSBmb3IgQXV0aCBUeXBlIHNlbGVjdCAoQXV0aG9yaXphdGlvbiB0YWIpICovXG4gIGF1dGhUeXBlRm9ybSE6IEZvcm1Hcm91cDtcblxuICAvKiogQXV0aCB0eXBlIG9wdGlvbnM6IGFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB3aXRoIGlkLCBuYW1lLCB2YWx1ZSwgbGFiZWwgKHBhc3NlZCBmcm9tIHBhcmVudCkuIEZhbGxzIGJhY2sgdG8gYnVpbHQtaW4gbGlzdCB3aGVuIGVtcHR5LiAqL1xuICBASW5wdXQoKSBhdXRoVHlwZU9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIGF1dGggdHlwZSAoc3RyaW5nIG9yIG9wdGlvbiBvYmplY3QpLiBXaGVuIG5vdCBzZXQsIGZpcnN0IG9mIGF1dGhUeXBlT3B0aW9ucyBvciBkZWZhdWx0IFwiTm8gQXV0aFwiIGlzIHVzZWQuICovXG4gIEBJbnB1dCgpIGluaXRpYWxBdXRoVHlwZT86IHN0cmluZyB8IEVudmlyb25tZW50T3B0aW9uSW5wdXQ7XG5cbiAgLyoqIEluaXRpYWwgT0F1dGggMi4wIGZpZWxkIHZhbHVlcyB3aGVuIGF1dGhUeXBlIGlzICdvYXV0aDInIChjYW1lbENhc2Uga2V5cykuICovXG4gIEBJbnB1dCgpIGluaXRpYWxPQXV0aDI/OiBBcGlFZGl0T0F1dGgyUGF5bG9hZDtcblxuICAvKiogRGVmYXVsdCBvcHRpb25zIHdoZW4gYXV0aFR5cGVPcHRpb25zIGlzIGVtcHR5IChzYW1lIHNoYXBlIGFzIGVudmlyb25tZW50KSAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FVVEhfVFlQRV9PUFRJT05TOiBTZWxlY3RPcHRpb25bXSA9IFtcbiAgICB7IGlkOiAnbm8tYXV0aCcsIHZhbHVlOiAnbm8tYXV0aCcsIG5hbWU6ICdObyBBdXRoJywgbGFiZWw6ICdObyBBdXRoJyB9LFxuICAgIHsgaWQ6ICdiZWFyZXInLCB2YWx1ZTogJ2JlYXJlcicsIG5hbWU6ICdCZWFyZXIgVG9rZW4nLCBsYWJlbDogJ0JlYXJlciBUb2tlbicgfSxcbiAgICB7IGlkOiAnb2F1dGgyJywgdmFsdWU6ICdvYXV0aDInLCBuYW1lOiAnT0F1dGggMi4wJywgbGFiZWw6ICdPQXV0aCAyLjAnIH0sXG4gIF07XG5cbiAgLyoqIENvbmZpZyBmb3IgQXV0aCBUeXBlIGRyb3Bkb3duICh1cGRhdGVkIHdoZW4gYXV0aFR5cGVPcHRpb25zIGNoYW5nZXMsIGxpa2UgZW52aXJvbm1lbnQpICovXG4gIGF1dGhUeXBlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnYXV0aFR5cGUnLFxuICAgIHBsYWNlaG9sZGVyOiAnTm8gQXV0aCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1cGRhdGVBdXRoVHlwZVNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID1cbiAgICAgIHRoaXMuYXV0aFR5cGVPcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5hdXRoVHlwZU9wdGlvbnMubWFwKChhKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC50b1NlbGVjdE9wdGlvbihhKSlcbiAgICAgICAgOiBbLi4uQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9BVVRIX1RZUEVfT1BUSU9OU107XG4gICAgdGhpcy5hdXRoVHlwZVNlbGVjdENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuYXV0aFR5cGVTZWxlY3RDb25maWcsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEF1dGhUeXBlVmFsdWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPVxuICAgICAgdGhpcy5hdXRoVHlwZU9wdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmF1dGhUeXBlT3B0aW9uc1xuICAgICAgICA6IChBcGlFZGl0U3RlcENvbXBvbmVudC5ERUZBVUxUX0FVVEhfVFlQRV9PUFRJT05TIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSk7XG4gICAgcmV0dXJuIHNvdXJjZVxuICAgICAgLm1hcCgoYSkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUoYSBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSlcbiAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB2ICE9IG51bGwpO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgYXV0aCB0eXBlIHZhbHVlIChlLmcuICduby1hdXRoJykgZm9yIHRlbXBsYXRlICovXG4gIGdldCBzZWxlY3RlZEF1dGhUeXBlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdiA9IHRoaXMuYXV0aFR5cGVGb3JtPy5nZXQoJ2F1dGhUeXBlJyk/LnZhbHVlO1xuICAgIGlmICh2ID09IG51bGwgfHwgdiA9PT0gJycpIHJldHVybiAnbm8tYXV0aCc7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/ICh2Py52YWx1ZSA/PyB2Py5pZCA/PyAnbm8tYXV0aCcpIDogU3RyaW5nKHYpO1xuICB9XG5cbiAgLyoqIEJlYXJlciB0b2tlbiB2YWx1ZSAoQXV0aG9yaXphdGlvbiB0YWIsIHdoZW4gYXV0aCB0eXBlIGlzIEJlYXJlciBUb2tlbikuICovXG4gIGJlYXJlclRva2VuID0gJyc7XG5cbiAgLyoqIEZvcm0gZm9yIE9BdXRoIDIuMCBmaWVsZHMgKEF1dGhvcml6YXRpb24gdGFiIHdoZW4gYXV0aCB0eXBlIGlzIE9BdXRoIDIuMCkuICovXG4gIG9hdXRoMkZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIEdyYW50IHR5cGUgb3B0aW9ucyBmb3IgT0F1dGggMi4wICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE9BVVRIX0dSQU5UX1RZUEVfT1BUSU9OUzogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ2NsaWVudF9jcmVkZW50aWFscycsIHZhbHVlOiAnY2xpZW50X2NyZWRlbnRpYWxzJywgbmFtZTogJ0NsaWVudCBDcmVkZW50aWFscycsIGxhYmVsOiAnQ2xpZW50IENyZWRlbnRpYWxzJyB9LFxuICAgIHsgaWQ6ICdhdXRob3JpemF0aW9uX2NvZGUnLCB2YWx1ZTogJ2F1dGhvcml6YXRpb25fY29kZScsIG5hbWU6ICdBdXRob3JpemF0aW9uIENvZGUnLCBsYWJlbDogJ0F1dGhvcml6YXRpb24gQ29kZScgfSxcbiAgICB7IGlkOiAncGFzc3dvcmQnLCB2YWx1ZTogJ3Bhc3N3b3JkJywgbmFtZTogJ1Bhc3N3b3JkJywgbGFiZWw6ICdQYXNzd29yZCcgfSxcbiAgICB7IGlkOiAnaW1wbGljaXQnLCB2YWx1ZTogJ2ltcGxpY2l0JywgbmFtZTogJ0ltcGxpY2l0JywgbGFiZWw6ICdJbXBsaWNpdCcgfSxcbiAgXTtcblxuICAvKiogQ2xpZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBvcHRpb25zIGZvciBPQXV0aCAyLjAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgT0FVVEhfQ0xJRU5UX0FVVEhfT1BUSU9OUzogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ2Jhc2ljJywgdmFsdWU6ICdiYXNpYycsIG5hbWU6ICdTZW5kIGFzIEJhc2ljIEF1dGggaGVhZGVyJywgbGFiZWw6ICdTZW5kIGFzIEJhc2ljIEF1dGggaGVhZGVyJyB9LFxuICAgIHsgaWQ6ICdib2R5JywgdmFsdWU6ICdib2R5JywgbmFtZTogJ1NlbmQgaW4gYm9keScsIGxhYmVsOiAnU2VuZCBpbiBib2R5JyB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IG9hdXRoMkdyYW50VHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2dyYW50VHlwZScsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgZ3JhbnQgdHlwZScsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogWy4uLkFwaUVkaXRTdGVwQ29tcG9uZW50Lk9BVVRIX0dSQU5UX1RZUEVfT1BUSU9OU10sXG4gIH07XG5cbiAgcmVhZG9ubHkgb2F1dGgyQ2xpZW50QXV0aFNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2NsaWVudEF1dGhlbnRpY2F0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBtZXRob2QnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFsuLi5BcGlFZGl0U3RlcENvbXBvbmVudC5PQVVUSF9DTElFTlRfQVVUSF9PUFRJT05TXSxcbiAgfTtcblxuICAvKiogQ3VycmVudCBIVFRQIG1ldGhvZCAoZnJvbSBmb3JtIG9yIGRlZmF1bHQ6IGZpcnN0IG9mIGh0dHBNZXRob2RPcHRpb25zKS4gVHJlYXRzIGVtcHR5IHN0cmluZyBhcyB1bnNldC4gKi9cbiAgZ2V0IHNlbGVjdGVkTWV0aG9kKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm1ldGhvZEZvcm0/LmdldCgnbWV0aG9kJyk/LnZhbHVlO1xuICAgIGNvbnN0IGZpcnN0VmFsdWUgPSB0aGlzLmh0dHBNZXRob2RPcHRpb25zPy5sZW5ndGhcbiAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodGhpcy5odHRwTWV0aG9kT3B0aW9uc1swXSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc29sdmVkID0gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycgPyAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHZhbHVlIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpIDogU3RyaW5nKHZhbHVlKSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVkID8/IGZpcnN0VmFsdWUgPz8gJ0dFVCc7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTWV0aG9kKHY6IHN0cmluZykge1xuICAgIHRoaXMubWV0aG9kRm9ybT8ucGF0Y2hWYWx1ZSh7IG1ldGhvZDogdiB9KTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gdGhlIHNlbGVjdGVkIEhUVFAgbWV0aG9kIGlzIEdFVCwgSEVBRCwgb3IgREVMRVRFIChubyByZXF1ZXN0IGJvZHkpLiAqL1xuICBnZXQgaXNNZXRob2RXaXRob3V0Qm9keSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLnNlbGVjdGVkTWV0aG9kICE9IG51bGwgPyBTdHJpbmcodGhpcy5zZWxlY3RlZE1ldGhvZCkudG9VcHBlckNhc2UoKSA6ICcnO1xuICAgIHJldHVybiBNRVRIT0RTX1dJVEhPVVRfQk9EWS5pbmNsdWRlcyhtZXRob2QpO1xuICB9XG5cbiAgLyoqIENhY2hlZCBlbnZpcm9ubWVudCB2YWx1ZSBmcm9tIGxhc3Qgc2VsZWN0aW9uIChzbyBDcmVhdGUgcGF5bG9hZCBoYXMgdGhlIHNlbGVjdGVkIHZhbHVlKS4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9ICcnO1xuXG4gIC8qKiBDYWNoZWQgSFRUUCBtZXRob2QgZnJvbSBsYXN0IHNlbGVjdGlvbiAoc28gQ3JlYXRlIHBheWxvYWQgaGFzIHRoZSBzZWxlY3RlZCB2YWx1ZSkuICovXG4gIHByaXZhdGUgY3VycmVudE1ldGhvZFZhbHVlID0gJyc7XG5cbiAgLyoqIEN1cnJlbnQgZW52aXJvbm1lbnQgKGZyb20gZm9ybSBvciBkZWZhdWx0OiBmaXJzdCBvZiBlbnZpcm9ubWVudE9wdGlvbnMpLiBUcmVhdHMgZW1wdHkgc3RyaW5nIGFzIHVuc2V0LiAqL1xuICBnZXQgc2VsZWN0ZWRFbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5lbnZpcm9ubWVudEZvcm0/LmdldCgnZW52aXJvbm1lbnQnKT8udmFsdWU7XG4gICAgY29uc3QgZmlyc3RWYWx1ZSA9IHRoaXMuZW52aXJvbm1lbnRPcHRpb25zPy5sZW5ndGhcbiAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodGhpcy5lbnZpcm9ubWVudE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXNvbHZlZCA9IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnID8gKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2YWx1ZSBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA6IFN0cmluZyh2YWx1ZSkpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXNvbHZlZCA/PyBmaXJzdFZhbHVlID8/ICdEZXZlbG9wbWVudCc7XG4gIH1cbiAgc2V0IHNlbGVjdGVkRW52aXJvbm1lbnQodjogc3RyaW5nKSB7XG4gICAgdGhpcy5lbnZpcm9ubWVudEZvcm0/LnBhdGNoVmFsdWUoeyBlbnZpcm9ubWVudDogdiB9KTtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgd2hlbiB1c2VyIHNlbGVjdHMgYW4gZW52aXJvbm1lbnQ7IGtlZXBzIGN1cnJlbnRFbnZpcm9ubWVudFZhbHVlIGluIHN5bmMsIHNldHMgcmVxdWVzdCBVUkwgZnJvbSBlbnZpcm9ubWVudCB3aGVuIGF2YWlsYWJsZSwgYW5kIG5vdGlmaWVzIHBhcmVudCBmb3IgdXJsT3B0aW9ucy4gKi9cbiAgb25FbnZpcm9ubWVudFNlbGVjdGlvbkNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSk6IHZvaWQge1xuICAgIGNvbnN0IHYgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlID1cbiAgICAgIHYgIT0gbnVsbFxuICAgICAgICA/IHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpXG4gICAgICAgICAgOiBTdHJpbmcodilcbiAgICAgICAgOiAnJztcblxuICAgIC8vIENsZWFyIFVSTCBmaWVsZCB3aGVuIGVudmlyb25tZW50IGNoYW5nZXNcbiAgICB0aGlzLnVybCA9ICcnO1xuICAgIHRoaXMudXJsRXJyb3IgPSAnJzsgLy8gQWxzbyBjbGVhciBhbnkgVVJMIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBOb3RpZnkgcGFyZW50IHNvIGl0IGNhbiBwcm92aWRlIHVybE9wdGlvbnMgKGVudmlyb25tZW50IHBhcmFtZXRlcnMgZm9yIFwiRW50ZXIgVVJMIG9yIHNlbGVjdCBQYXJhbWV0ZXJcIilcbiAgICBjb25zdCBlbWl0VmFsID0gdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9PT0gJycgfHwgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9PT0gJ25vbmUnXG4gICAgICA/IG51bGxcbiAgICAgIDogKHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA6IHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUpO1xuICAgIHRoaXMuZW52aXJvbm1lbnRDaGFuZ2UuZW1pdChlbWl0VmFsID09PSAnbm9uZScgPyBudWxsIDogKGVtaXRWYWwgYXMgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCkpO1xuICB9XG5cbiAgLyoqIFdoZW4gdXNlciBzZWxlY3RzIGFuIG9wdGlvbiBmcm9tIHRoZSBVUkwgYXV0b2NvbXBsZXRlIChlLmcuIGVudmlyb25tZW50IHBhcmFtZXRlciAqfGtleXwpLCBzZXQgdGhlIFVSTCBmaWVsZCB0byB0aGF0IHZhbHVlLiAqL1xuICBvblVybE9wdGlvblNlbGVjdChvcHRpb246IENxYUF1dG9jb21wbGV0ZU9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMudXJsID0gb3B0aW9uLnZhbHVlID8/ICcnO1xuICAgIHRoaXMudXJsRXJyb3IgPSAnJzsgLy8gQ2xlYXIgZXJyb3Igd2hlbiBvcHRpb24gaXMgc2VsZWN0ZWRcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSByZXF1ZXN0IFVSTCBmb3IgdGhlIHNlbGVjdGVkIGVudmlyb25tZW50IG9wdGlvbi5cbiAgICogRW52aXJvbm1lbnQgb3B0aW9ucyBtYXkgY2FycnkgYW4gb3B0aW9uYWwgYHVybGAgKGUuZy4gZnJvbSBFbnZpcm9ubWVudCBtb2RlbCk7IFwiTm9uZVwiIGhhcyBubyB1cmwuXG4gICAqL1xuICBwcml2YXRlIGdldFNlbGVjdGVkRW52aXJvbm1lbnRVcmwoc2VsZWN0ZWRWYWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzZWxlY3RlZFZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9iaiA9IHNlbGVjdGVkVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgdXJsUHJvcCA9IG9ialsndXJsJ107XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiB1cmxQcm9wID09PSAnc3RyaW5nJyAmJiB1cmxQcm9wLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgIHJldHVybiB1cmxQcm9wLnRyaW0oKTtcbiAgICB9XG4gICAgY29uc3QgaWRPclZhbHVlID1cbiAgICAgIHR5cGVvZiBzZWxlY3RlZFZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICA/IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShzZWxlY3RlZFZhbHVlIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKVxuICAgICAgICA6IFN0cmluZyhzZWxlY3RlZFZhbHVlKTtcbiAgICBpZiAoIWlkT3JWYWx1ZSB8fCBpZE9yVmFsdWUgPT09ICdub25lJykgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgb3B0aW9uID0gKHRoaXMuZW52aXJvbm1lbnRPcHRpb25zID8/IFtdKS5maW5kKFxuICAgICAgKG9wdCkgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUob3B0KSA9PT0gaWRPclZhbHVlXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBvcHRpb24gIT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyA/IChvcHRpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWyd1cmwnXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgJiYgdXJsLnRyaW0oKSAhPT0gJycgPyB1cmwudHJpbSgpIDogbnVsbDtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgd2hlbiB1c2VyIHNlbGVjdHMgYW4gSFRUUCBtZXRob2Q7IGtlZXBzIGN1cnJlbnRNZXRob2RWYWx1ZSBpbiBzeW5jIGZvciBjcmVhdGUgcGF5bG9hZC4gKi9cbiAgb25NZXRob2RTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5jdXJyZW50TWV0aG9kVmFsdWUgPVxuICAgICAgdiAhPSBudWxsXG4gICAgICAgID8gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyAoQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodiBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA/PyAnJylcbiAgICAgICAgICA6IFN0cmluZyh2KVxuICAgICAgICA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXJsID0gJyc7XG5cbiAgLyoqIFVSTCBmb3IgdGhlIHJlcXVlc3QuIEdldHRlci9zZXR0ZXIgc3luY3MgcXVlcnkgcGFyYW1zIHdpdGggdGhlIFBhcmFtcyB0YWIgKFBvc3RtYW4tc3R5bGUpLiAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuICBzZXQgdXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXh0ID0gdmFsdWUgPz8gJyc7XG4gICAgaWYgKHRoaXMuX3VybCA9PT0gbmV4dCkgcmV0dXJuO1xuICAgIHRoaXMuX3VybCA9IG5leHQ7XG4gICAgLy8gQ2xlYXIgZXJyb3Igd2hlbiBVUkwgY2hhbmdlc1xuICAgIHRoaXMudXJsRXJyb3IgPSAnJztcbiAgICBpZiAodGhpcy5wYXJhbXNGb3JtQXJyYXkpIHtcbiAgICAgIHRoaXMucGFyYW1zU3luY2luZ0Zyb21VcmwgPSB0cnVlO1xuICAgICAgdGhpcy5zeW5jUGFyYW1zRnJvbVVybCgpO1xuICAgICAgdGhpcy5wYXJhbXNTeW5jaW5nRnJvbVVybCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGVuIHRydWUsIHBhcmFtcyBmb3JtIGNoYW5nZXMgc2hvdWxkIG5vdCB1cGRhdGUgdGhlIFVSTCAod2UncmUgc3luY2luZyBmcm9tIFVSTCkuICovXG4gIHByaXZhdGUgcGFyYW1zU3luY2luZ0Zyb21VcmwgPSBmYWxzZTtcblxuICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBVUkwgZmllbGQ6IHNob3cgXCJFbnRlciBVUkwgb3Igc2VsZWN0IFBhcmFtZXRlciAqXCIgd2hlbiB1cmxPcHRpb25zIGFyZSBhdmFpbGFibGUgKGVudmlyb25tZW50IHNlbGVjdGVkKS4gKi9cbiAgZ2V0IHVybFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLnVybE9wdGlvbnM/Lmxlbmd0aCA/PyAwKSA+IDAgPyAnRW50ZXIgVVJMIG9yIHNlbGVjdCBQYXJhbWV0ZXIgKicgOiAnRW50ZXIgVVJMIConO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0d28gdGFiIGFycmFuZ2VtZW50cy4gUkVTVCBrZWVwcyB0aGUgbGVnYWN5IGZvdXItdGFiIGxheW91dC4gR3JhcGhRTCBkcm9wcyBCb2R5ICYgUGFyYW1zXG4gICAqIGJlY2F1c2UgdGhlIGJvZHkgaXMgYSBzaW5nbGUgeyBxdWVyeSwgdmFyaWFibGVzLCBvcGVyYXRpb25OYW1lIH0gb2JqZWN0IChyZW5kZXJlZCBpbiB0aGUgbmV3XG4gICAqIEdyYXBoUUwgdGFiIGJlbG93KSBhbmQgcXVlcnkgcGFyYW1zIGhhdmUgbm8gbWVhbmluZyBmb3IgYSBHcmFwaFFMIFBPU1QuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBSRVNUX1BBWUxPQURfVEFCUzogeyB2YWx1ZTogQXBpRWRpdFBheWxvYWRUYWI7IGxhYmVsOiBzdHJpbmcgfVtdID0gW1xuICAgIHsgdmFsdWU6ICdhdXRob3JpemF0aW9uJywgbGFiZWw6ICdBdXRob3JpemF0aW9uJyB9LFxuICAgIHsgdmFsdWU6ICdoZWFkZXJzJywgbGFiZWw6ICdIZWFkZXJzJyB9LFxuICAgIHsgdmFsdWU6ICdib2R5JywgbGFiZWw6ICdCb2R5JyB9LFxuICAgIHsgdmFsdWU6ICdwYXJhbXMnLCBsYWJlbDogJ1BhcmFtcycgfSxcbiAgXTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR1JBUEhRTF9QQVlMT0FEX1RBQlM6IHsgdmFsdWU6IEFwaUVkaXRQYXlsb2FkVGFiOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtcbiAgICB7IHZhbHVlOiAnYXV0aG9yaXphdGlvbicsIGxhYmVsOiAnQXV0aG9yaXphdGlvbicgfSxcbiAgICB7IHZhbHVlOiAnaGVhZGVycycsIGxhYmVsOiAnSGVhZGVycycgfSxcbiAgICB7IHZhbHVlOiAnZ3JhcGhxbCcsIGxhYmVsOiAnR3JhcGhRTCcgfSxcbiAgXTtcblxuICAvKiogVGFicyB2aXNpYmxlIHVuZGVyIHRoZSByZXF1ZXN0IHJvdywgc3dhcHBlZCBiYXNlZCBvbiBgYWN0aXZlQXBpVHlwZWAuICovXG4gIGdldCBwYXlsb2FkVGFicygpOiB7IHZhbHVlOiBBcGlFZGl0UGF5bG9hZFRhYjsgbGFiZWw6IHN0cmluZyB9W10ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJ1xuICAgICAgPyBBcGlFZGl0U3RlcENvbXBvbmVudC5HUkFQSFFMX1BBWUxPQURfVEFCU1xuICAgICAgOiBBcGlFZGl0U3RlcENvbXBvbmVudC5SRVNUX1BBWUxPQURfVEFCUztcbiAgfVxuICBhY3RpdmVQYXlsb2FkVGFiOiBBcGlFZGl0UGF5bG9hZFRhYiA9ICdoZWFkZXJzJztcblxuICAvKiogQ3VycmVudGx5IHNlbGVjdGVkIEFQSSB0eXBlLiBSRVNUIGlzIHRoZSBkZWZhdWx0IGFuZCBtYXRjaGVzIHRvZGF5J3MgYmVoYXZpb3VyIGV4YWN0bHkuICovXG4gIGFjdGl2ZUFwaVR5cGU6IEFwaUVkaXRBcGlUeXBlID0gJ3Jlc3QnO1xuXG4gIC8qKiBTZWdtZW50cyByZW5kZXJlZCBhYm92ZSB0aGUgTWV0aG9kL1VSTCByb3cuIFNPQVAvV2ViU29ja2V0L2dSUEMgYXJlIGludGVudGlvbmFsbHkgYGRpc2FibGVkYCBmb3Igbm93LiAqL1xuICByZWFkb25seSBhcGlUeXBlU2VnbWVudHMgPSBbXG4gICAgeyBsYWJlbDogJ1JFU1QgQVBJJywgIHZhbHVlOiAncmVzdCcgYXMgQXBpRWRpdEFwaVR5cGUgfSxcbiAgICB7IGxhYmVsOiAnR3JhcGhRTCcsICAgdmFsdWU6ICdncmFwaHFsJyBhcyBBcGlFZGl0QXBpVHlwZSB9LFxuICAgIHsgbGFiZWw6ICdTT0FQJywgICAgICB2YWx1ZTogJ3NvYXAnIGFzIEFwaUVkaXRBcGlUeXBlLCAgICAgIGRpc2FibGVkOiB0cnVlLCB0b29sdGlwOiAnQ29taW5nIHNvb24nIH0sXG4gICAgeyBsYWJlbDogJ1dlYlNvY2tldCcsIHZhbHVlOiAnd2Vic29ja2V0JyBhcyBBcGlFZGl0QXBpVHlwZSwgZGlzYWJsZWQ6IHRydWUsIHRvb2x0aXA6ICdDb21pbmcgc29vbicgfSxcbiAgICB7IGxhYmVsOiAnZ1JQQycsICAgICAgdmFsdWU6ICdncnBjJyBhcyBBcGlFZGl0QXBpVHlwZSwgICAgICBkaXNhYmxlZDogdHJ1ZSwgdG9vbHRpcDogJ0NvbWluZyBzb29uJyB9LFxuICBdO1xuXG4gIC8qKiBHcmFwaFFMIGZpZWxkcyBiYWNraW5nIHRoZSBuZXcgdGFiIGNvbnRlbnQuIFZhcmlhYmxlcyBhcmUgc3RvcmVkIGFzIGEgSlNPTiBzdHJpbmcgaW4gdGhlIGZvcm0gZm9yIHRoZSB0ZXh0YXJlYSByb3VuZC10cmlwOyBwYXJzZWQgb24gZW1pdC4gKi9cbiAgZ3JhcGhRTEZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIElubGluZSBlcnJvciBkaXNwbGF5ZWQgdW5kZXIgdGhlIFF1ZXJ5IHRleHRhcmVhIHdoZW4gZW1wdHkvYmxhbmsgb24gU2F2ZS4gQ2xlYXJlZCBhcyB0aGUgdXNlciB0eXBlcy4gKi9cbiAgZ3JhcGhRTFF1ZXJ5RXJyb3IgPSAnJztcblxuICAvKiogSW5saW5lIGVycm9yIGRpc3BsYXllZCB1bmRlciB0aGUgVmFyaWFibGVzIHRleHRhcmVhIHdoZW4gSlNPTiBpcyBtYWxmb3JtZWQuICovXG4gIGdyYXBoUUxWYXJpYWJsZXNFcnJvciA9ICcnO1xuXG4gIC8qKiBOb24tYmxvY2tpbmcgd2FybmluZyBzaG93biB1bmRlciB0aGUgT3BlcmF0aW9uIE5hbWUgZmllbGQgd2hlbiB0aGUgcXVlcnkgZGVjbGFyZXMgMisgb3BlcmF0aW9ucy4gKi9cbiAgZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmcgPSAnJztcblxuICAvKiogU3RlcCAzOiBSZXNwb25zZSB2ZXJpZmljYXRpb24gdGFicyAqL1xuICByZWFkb25seSByZXNwb25zZVZlcmlmaWNhdGlvblRhYnM6IHsgdmFsdWU6ICdyZXNwb25zZS1ib2R5JyB8ICdzdGF0dXMnOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtcbiAgICB7IHZhbHVlOiAncmVzcG9uc2UtYm9keScsIGxhYmVsOiAnUmVzcG9uc2UgQm9keScgfSxcbiAgICB7IHZhbHVlOiAnc3RhdHVzJywgbGFiZWw6ICdTdGF0dXMnIH0sXG4gIF07XG4gIGFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiOiAncmVzcG9uc2UtYm9keScgfCAnc3RhdHVzJyA9ICdyZXNwb25zZS1ib2R5JztcblxuICAvKiogUGF5bG9hZCB0eXBlIGZvciBCb2R5L1BhcmFtcy9BdXRob3JpemF0aW9uOiByYXcsIHgtd3d3LWZvcm0tdXJsZW5jb2RlZCwgZm9ybS1kYXRhICovXG4gIHBheWxvYWRUeXBlOiAncmF3JyB8ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnIHwgJ2Zvcm0tZGF0YScgPSAncmF3JztcblxuICAvKiogU2VnbWVudCBvcHRpb25zIGZvciBwYXlsb2FkIHR5cGUgKHVzZWQgYnkgY3FhLXNlZ21lbnQtY29udHJvbCkgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZFR5cGVTZWdtZW50cyA9IFtcbiAgICB7IGxhYmVsOiAnUmF3JywgdmFsdWU6ICdyYXcnIH0sXG4gICAgeyBsYWJlbDogJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIHZhbHVlOiAneC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgIHsgbGFiZWw6ICdGb3JtIERhdGEnLCB2YWx1ZTogJ2Zvcm0tZGF0YScgfSxcbiAgXTtcblxuICBvblBheWxvYWRUeXBlQ2hhbmdlKHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXlsb2FkVHlwZSA9IHZhbCBhcyAncmF3JyB8ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnIHwgJ2Zvcm0tZGF0YSc7XG4gIH1cblxuICAvKiogRm9ybSBmb3IgRm9ybWF0IHNlbGVjdCAoQm9keS9QYXJhbXMvQXV0aG9yaXphdGlvbikgKi9cbiAgcGF5bG9hZEZvcm1hdEZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIEZvcm1hdCBvcHRpb25zOiBhcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgKHBhc3NlZCBmcm9tIHBhcmVudCkuIEZhbGxzIGJhY2sgdG8gSlNPTiwgWE1MLCBIVE1MLCBUZXh0IHdoZW4gZW1wdHkuICovXG4gIEBJbnB1dCgpIGZvcm1hdE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGluaXRpYWxGb3JtYXQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9GT1JNQVRfT1BUSU9OUzogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ2pzb24nLCB2YWx1ZTogJ2pzb24nLCBuYW1lOiAnSlNPTicsIGxhYmVsOiAnSlNPTicgfSxcbiAgICB7IGlkOiAneG1sJywgdmFsdWU6ICd4bWwnLCBuYW1lOiAnWE1MJywgbGFiZWw6ICdYTUwnIH0sXG4gICAgeyBpZDogJ2h0bWwnLCB2YWx1ZTogJ2h0bWwnLCBuYW1lOiAnSFRNTCcsIGxhYmVsOiAnSFRNTCcgfSxcbiAgICB7IGlkOiAndGV4dCcsIHZhbHVlOiAndGV4dCcsIG5hbWU6ICdUZXh0JywgbGFiZWw6ICdUZXh0JyB9LFxuICBdO1xuXG4gIC8qKiBDb25maWcgZm9yIEZvcm1hdCBkcm9wZG93biAodXBkYXRlZCB3aGVuIGZvcm1hdE9wdGlvbnMgY2hhbmdlcywgbGlrZSBNZXRob2QgZHJvcGRvd24pICovXG4gIHBheWxvYWRGb3JtYXRTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdmb3JtYXQnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbLi4uQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9GT1JNQVRfT1BUSU9OU10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXlsb2FkRm9ybWF0U2VsZWN0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgdGhpcy5mb3JtYXRPcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5mb3JtYXRPcHRpb25zLm1hcCgoZikgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24oZikpXG4gICAgICAgIDogQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9GT1JNQVRfT1BUSU9OUztcbiAgICB0aGlzLnBheWxvYWRGb3JtYXRTZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLnBheWxvYWRGb3JtYXRTZWxlY3RDb25maWcsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1hdFZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc291cmNlID1cbiAgICAgIHRoaXMuZm9ybWF0T3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZm9ybWF0T3B0aW9uc1xuICAgICAgICA6IChBcGlFZGl0U3RlcENvbXBvbmVudC5ERUZBVUxUX0ZPUk1BVF9PUFRJT05TIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSk7XG4gICAgcmV0dXJuIHNvdXJjZVxuICAgICAgLm1hcCgoZikgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUoZiBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSlcbiAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB2ICE9IG51bGwpO1xuICB9XG5cbiAgLyoqIFBheWxvYWQgdGV4dCBhcmVhIHZhbHVlIGZvciBCb2R5L1BhcmFtcy9BdXRob3JpemF0aW9uICovXG4gIHBheWxvYWRUZXh0ID0gJyc7XG5cbiAgLyoqIEpTT04gcGFyc2UgZXJyb3Igd2hlbiBmb3JtYXQgaXMgSlNPTiBhbmQgcGF5bG9hZCBpcyBpbnZhbGlkOyBudWxsIHdoZW4gdmFsaWQgb3Igbm90IEpTT04uICovXG4gIHBheWxvYWRKc29uRXJyb3I6IHtcbiAgICBsaW5lOiBudW1iZXI7XG4gICAgY29sdW1uOiBudW1iZXI7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGV4Y2VycHQ6IHN0cmluZztcbiAgICBjYXJldE9mZnNldDogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIExpbmUgbnVtYmVycyBmb3IgcGF5bG9hZCB0ZXh0YXJlYSAoMSwgMiwgMywgLi4uKSBiYXNlZCBvbiBjdXJyZW50IGxpbmUgY291bnQuICovXG4gIGdldCBwYXlsb2FkTGluZU51bWJlcnMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG4gPSBNYXRoLm1heCgxLCAodGhpcy5wYXlsb2FkVGV4dCB8fCAnJykuc3BsaXQoL1xccj9cXG4vKS5sZW5ndGgpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBuIH0sIChfLCBpKSA9PiBpICsgMSk7XG4gIH1cblxuICAvKiogV2hldGhlciBjdXJyZW50IHBheWxvYWQgZm9ybWF0IGlzIEpTT04gKHNvIHdlIHZhbGlkYXRlIGFuZCBzaG93IEpTT04gZWRpdG9yIGJlaGF2aW9yKS4gKi9cbiAgZ2V0IGlzUGF5bG9hZEZvcm1hdEpzb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybT8uZ2V0KCdmb3JtYXQnKT8udmFsdWU7XG4gICAgcmV0dXJuIGZvcm1hdCA9PT0gJ2pzb24nO1xuICB9XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2VzIGZvciB0aGUgcGF5bG9hZCB0ZXh0YXJlYSAocmVkIGJvcmRlciArIGJvdHRvbSBsaW5lKS4gKi9cbiAgZ2V0IHBheWxvYWRKc29uRXJyb3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wYXlsb2FkSnNvbkVycm9yID8gWydJbnZhbGlkIEpTT04gZm9ybWF0LiBQbGVhc2UgY2hlY2sgeW91ciBzeW50YXguJ10gOiBbXTtcbiAgfVxuXG4gIC8qKiBUb29sdGlwIGNvbnRlbnQgZm9yIHRoZSBsaW5lLWxldmVsIGVycm9yIGljb24gKHBhcnNlIGVycm9yIG9uIGxpbmUgWCwgZXhjZXJwdCwgY2FyZXQsIG1lc3NhZ2UpLiAqL1xuICBnZXQgcGF5bG9hZEpzb25FcnJvclRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucGF5bG9hZEpzb25FcnJvcikgcmV0dXJuICcnO1xuICAgIGNvbnN0IGUgPSB0aGlzLnBheWxvYWRKc29uRXJyb3I7XG4gICAgY29uc3QgY2FyZXQgPSAnICcucmVwZWF0KGUuY2FyZXRPZmZzZXQpICsgJ14nO1xuICAgIHJldHVybiBgUGFyc2UgZXJyb3Igb24gbGluZSAke2UubGluZX06XFxuXFxuJHtlLmV4Y2VycHR9XFxuJHtjYXJldH1cXG5cXG4ke2UubWVzc2FnZX1gO1xuICB9XG5cbiAgb25QYXlsb2FkVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXlsb2FkVGV4dCA9IHZhbHVlO1xuICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuICB9XG5cbiAgb25QYXlsb2FkSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuICAgIHRoaXMub25QYXlsb2FkVGV4dENoYW5nZSh0YXJnZXQ/LnZhbHVlID8/ICcnKTtcbiAgfVxuXG4gIG9uUGF5bG9hZEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNQYXlsb2FkRm9ybWF0SnNvbikgcmV0dXJuO1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICBjb25zdCBjbG9zZSA9IFBBWUxPQURfQVVUT19DTE9TRV9QQUlSU1trZXldO1xuICAgIGlmICghY2xvc2UpIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID8/IDA7XG4gICAgY29uc3QgZW5kID0gdGFyZ2V0LnNlbGVjdGlvbkVuZCA/PyBzdGFydDtcbiAgICBjb25zdCBiZWZvcmUgPSB0aGlzLnBheWxvYWRUZXh0LnNsaWNlKDAsIHN0YXJ0KTtcbiAgICBjb25zdCBhZnRlciA9IHRoaXMucGF5bG9hZFRleHQuc2xpY2UoZW5kKTtcbiAgICBjb25zdCBpbnNlcnRQb3MgPSBzdGFydCArIDE7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBiZWZvcmUgKyBrZXkgKyBjbG9zZSArIGFmdGVyO1xuICAgIHRoaXMucGF5bG9hZFRleHQgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnZhbGlkYXRlUGF5bG9hZEpzb24oKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucGF5bG9hZFRleHRhcmVhUmVmPy5uYXRpdmVFbGVtZW50Py5zZXRTZWxlY3Rpb25SYW5nZShpbnNlcnRQb3MsIGluc2VydFBvcyk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKiogVmFsaWRhdGUgcGF5bG9hZCB3aGVuIGZvcm1hdCBpcyBKU09OOyBzZXRzIHBheWxvYWRKc29uRXJyb3Igb3IgY2xlYXJzIGl0LiAqL1xuICB2YWxpZGF0ZVBheWxvYWRKc29uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1BheWxvYWRGb3JtYXRKc29uKSB7XG4gICAgICB0aGlzLnBheWxvYWRKc29uRXJyb3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5wYXlsb2FkVGV4dCA/PyAnJztcbiAgICBpZiAodGV4dC50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aGlzLnBheWxvYWRKc29uRXJyb3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmV4dHJhY3RQb3NpdGlvbkZyb21Kc29uRXJyb3IobWVzc2FnZSk7XG4gICAgICBjb25zdCB7IGxpbmUsIGNvbHVtbiB9ID0gdGhpcy5wb3NpdGlvblRvTGluZUNvbHVtbih0ZXh0LCBwb3NpdGlvbik7XG4gICAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgIGNvbnN0IGxpbmVJbmRleCA9IE1hdGgubWF4KDAsIGxpbmUgLSAxKTtcbiAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gbGluZXNbbGluZUluZGV4XSA/PyAnJztcbiAgICAgIGNvbnN0IGV4Y2VycHQgPSBsaW5lQ29udGVudCB8fCAnICc7XG4gICAgICBjb25zdCBjYXJldE9mZnNldCA9IGxpbmVJbmRleCA9PT0gbGluZSAtIDEgPyBNYXRoLm1pbihjb2x1bW4gLSAxLCBsaW5lQ29udGVudC5sZW5ndGgpIDogMDtcbiAgICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IHtcbiAgICAgICAgbGluZSxcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLm5vcm1hbGl6ZUpzb25FcnJvck1lc3NhZ2UobWVzc2FnZSksXG4gICAgICAgIGV4Y2VycHQsXG4gICAgICAgIGNhcmV0T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RQb3NpdGlvbkZyb21Kc29uRXJyb3IobWVzc2FnZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBtYXRjaCA9IG1lc3NhZ2UubWF0Y2goL3Bvc2l0aW9uXFxzKyhcXGQrKS9pKSB8fCBtZXNzYWdlLm1hdGNoKC9hdFxccytwb3NpdGlvblxccysoXFxkKykvaSk7XG4gICAgcmV0dXJuIG1hdGNoID8gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSA6IDA7XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uVG9MaW5lQ29sdW1uKHRleHQ6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHsgbGluZTogbnVtYmVyOyBjb2x1bW46IG51bWJlciB9IHtcbiAgICBjb25zdCBiZWZvcmUgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWluKHBvc2l0aW9uLCB0ZXh0Lmxlbmd0aCkpO1xuICAgIGNvbnN0IGxpbmVzID0gYmVmb3JlLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgY29uc3QgbGluZSA9IGxpbmVzLmxlbmd0aDtcbiAgICBjb25zdCBsYXN0TGluZSA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID8/ICcnO1xuICAgIHJldHVybiB7IGxpbmUsIGNvbHVtbjogbGFzdExpbmUubGVuZ3RoICsgMSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVKc29uRXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ0V4cGVjdGluZycpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ2V4cGVjdGluZycpKSByZXR1cm4gbWVzc2FnZTtcbiAgICBjb25zdCB0b2tlbk1hdGNoID0gbWVzc2FnZS5tYXRjaCgvVW5leHBlY3RlZCB0b2tlblxccytbJ1wiXT8oW14nXCJdKylbJ1wiXT8vaSlcbiAgICAgIHx8IG1lc3NhZ2UubWF0Y2goL3VuZXhwZWN0ZWQgY2hhcmFjdGVyLio/KFteXFxzXSspL2kpO1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5NYXRjaCA/IHRva2VuTWF0Y2hbMV0udHJpbSgpIDogJ3VuZGVmaW5lZCc7XG4gICAgcmV0dXJuIGBFeHBlY3RpbmcgJ1NUUklORycsICdOVU1CRVInLCAnTlVMTCcsICdUUlVFJywgJ0ZBTFNFJywgJ3snLCAnWycsIGdvdCAnJHt0b2tlbn0nYDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3BheWxvYWRFZGl0b3JXaXRoTGluZXNSZWYnKSBwYXlsb2FkRWRpdG9yV2l0aExpbmVzUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BheWxvYWRUZXh0YXJlYVJlZicpIHBheWxvYWRUZXh0YXJlYVJlZj86IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9IRUFERVJfTkFNRV9PUFRJT05TOiBzdHJpbmdbXSA9IFtcbiAgICAnQWNjZXB0JyxcbiAgICAnQWNjZXB0LUNoYXJzZXQnLFxuICAgICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAgICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMnLFxuICAgICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICAgJ1NjcmlwdHMnLFxuICAgICdDYWNoZS1Db250cm9sJyxcbiAgICAnQ29udGVudC1NRDUnLFxuICAgICdDb250ZW50LUxlbmd0aCcsXG4gICAgJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnLFxuICAgICdDb250ZW50LVR5cGUnLFxuICAgICdDb29raWUnLFxuICAgICdEYXRlJyxcbiAgICAnRXhwZWN0JyxcbiAgICAnRnJvbScsXG4gICAgJ0hvc3QnLFxuICAgICdJZi1NYXRjaCcsXG4gICAgJ0lmLU1vZGlmaWVkLVNpbmNlJyxcbiAgICAnSWYtTm9uZS1NYXRjaCcsXG4gICAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAgICdJZi1SYW5nZScsXG4gICAgJ0tlZXAtQWxpdmUnLFxuICAgICdNYXgtRm9yd2FyZHMnLFxuICAgICdPcmlnaW4nLFxuICAgICdQcmFnbWEnLFxuICAgICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgICAnUmFuZ2UnLFxuICAgICdSZWZlcmVyJyxcbiAgICAnVEUnLFxuICAgICdUcmFpbGVyJyxcbiAgICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAgICdVcGdyYWRlJyxcbiAgICAnVXNlci1BZ2VudCcsXG4gICAgJ1ZpYScsXG4gICAgJ1dhcm5pbmcnLFxuICAgICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgICAnWC1Eby1Ob3QtVHJhY2snLFxuICAgICdETlQnLFxuICAgICd4LWFwaS1rZXknLFxuICAgICdDb25uZWN0aW9uJyxcbiAgXTtcblxuICAvKiogSGVhZGVyIG5hbWUgb3B0aW9uczogYXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHdpdGggaWQsIG5hbWUsIHZhbHVlLCBsYWJlbCAocGFzc2VkIGZyb20gcGFyZW50KS4gRmFsbHMgYmFjayB0byBidWlsdC1pbiBsaXN0IHdoZW4gZW1wdHkuICovXG4gIEBJbnB1dCgpIGhlYWRlck5hbWVPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbklucHV0W10gPSBbXTtcblxuICAvKiogRm9ybSBhcnJheSBmb3IgaGVhZGVyIHJvd3M7IGVhY2ggaXRlbSBpcyBGb3JtR3JvdXAoeyBuYW1lLCB2YWx1ZSB9KSBmb3IgY3FhLWR5bmFtaWMtc2VsZWN0IGFuZCB2YWx1ZSBpbnB1dCAqL1xuICBoZWFkZXJzRm9ybUFycmF5ITogRm9ybUFycmF5O1xuXG4gIC8qKiBUeXBlZCBhY2Nlc3NvciBmb3IgdGVtcGxhdGUgKEZvcm1BcnJheS5jb250cm9scyBpcyBBYnN0cmFjdENvbnRyb2xbXSkgKi9cbiAgZ2V0IGhlYWRlclJvd3MoKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiAodGhpcy5oZWFkZXJzRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkgYXMgRm9ybUdyb3VwW107XG4gIH1cblxuICAvKiogQ29uZmlnIGZvciBoZWFkZXIgbmFtZSBkcm9wZG93biAodXBkYXRlZCB3aGVuIGhlYWRlck5hbWVPcHRpb25zIGNoYW5nZXMgdG8gYXZvaWQgbmV3IHJlZmVyZW5jZSBldmVyeSBDRCkgKi9cbiAgaGVhZGVyTmFtZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ25hbWUnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGhlYWRlcicsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBhbGxvd0N1c3RvbVZhbHVlOiB0cnVlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2UgPVxuICAgICAgdGhpcy5oZWFkZXJOYW1lT3B0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuaGVhZGVyTmFtZU9wdGlvbnNcbiAgICAgICAgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9IRUFERVJfTkFNRV9PUFRJT05TIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXRbXSk7XG4gICAgY29uc3QgYmFzZU9wdGlvbnMgPSBzb3VyY2UubWFwKChoKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC50b1NlbGVjdE9wdGlvbihoKSk7XG4gICAgY29uc3QgYmFzZVZhbHVlcyA9IG5ldyBTZXQoYmFzZU9wdGlvbnMubWFwKChvKSA9PiBTdHJpbmcoby52YWx1ZSA/PyBvLmlkID8/ICcnKS50cmltKCkpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgY29uc3QgY3VycmVudE5hbWVzRnJvbUZvcm0gPSB0aGlzLmdldEN1cnJlbnRIZWFkZXJOYW1lc0Zyb21Gb3JtKCk7XG4gICAgY29uc3QgZXh0cmFPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBjdXJyZW50TmFtZXNGcm9tRm9ybSkge1xuICAgICAgY29uc3Qga2V5ID0gbmFtZS50cmltKCk7XG4gICAgICBpZiAoa2V5ICYmICFiYXNlVmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICAgIGJhc2VWYWx1ZXMuYWRkKGtleSk7XG4gICAgICAgIGV4dHJhT3B0aW9ucy5wdXNoKHsgaWQ6IGtleSwgdmFsdWU6IGtleSwgbmFtZToga2V5LCBsYWJlbDoga2V5IH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gWy4uLmJhc2VPcHRpb25zLCAuLi5leHRyYU9wdGlvbnNdO1xuICAgIHRoaXMuaGVhZGVyTmFtZVNlbGVjdENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuaGVhZGVyTmFtZVNlbGVjdENvbmZpZyxcbiAgICAgIG9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDb2xsZWN0cyBkaXN0aW5jdCBub24tZW1wdHkgaGVhZGVyIG5hbWVzIGN1cnJlbnRseSBpbiB0aGUgaGVhZGVycyBmb3JtIChmb3IgZHluYW1pYyBvcHRpb25zKS4gKi9cbiAgcHJpdmF0ZSBnZXRDdXJyZW50SGVhZGVyTmFtZXNGcm9tRm9ybSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmICghdGhpcy5oZWFkZXJzRm9ybUFycmF5Py5jb250cm9scz8ubGVuZ3RoKSByZXR1cm4gbmFtZXM7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5jb250cm9scykge1xuICAgICAgY29uc3QgbmFtZSA9IChjb250cm9sIGFzIEZvcm1Hcm91cCkuZ2V0KCduYW1lJyk/LnZhbHVlO1xuICAgICAgY29uc3Qgc3RyID0gbmFtZSAhPSBudWxsID8gU3RyaW5nKG5hbWUpLnRyaW0oKSA6ICcnO1xuICAgICAgaWYgKHN0ciAmJiAhc2Vlbi5oYXMoc3RyKSkge1xuICAgICAgICBzZWVuLmFkZChzdHIpO1xuICAgICAgICBuYW1lcy5wdXNoKHN0cik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEhlYWRlcnM6IEFwaUVkaXRIZWFkZXJSb3dbXSA9IFtcbiAgICB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICBdO1xuXG4gIC8qKiBGb3JtIGFycmF5IGZvciBrZXktdmFsdWUgcm93cyAoQm9keSBwYXlsb2FkKTsgZWFjaCBpdGVtIGlzIEZvcm1Hcm91cCh7IGtleSwgdmFsdWUgfSkgKi9cbiAga2V5VmFsdWVGb3JtQXJyYXkhOiBGb3JtQXJyYXk7XG5cbiAgZ2V0IGtleVZhbHVlUm93cygpOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuICh0aGlzLmtleVZhbHVlRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkgYXMgRm9ybUdyb3VwW107XG4gIH1cblxuICAvKiogRm9ybSBhcnJheSBmb3Iga2V5LXR5cGUtdmFsdWUgcm93czsgZWFjaCBpdGVtIGlzIEZvcm1Hcm91cCh7IGtleSwgdHlwZSwgdmFsdWUgfSkgKi9cbiAga2V5VHlwZVZhbHVlRm9ybUFycmF5ITogRm9ybUFycmF5O1xuXG4gIGdldCBrZXlUeXBlVmFsdWVSb3dzKCk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gKHRoaXMua2V5VHlwZVZhbHVlRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkgYXMgRm9ybUdyb3VwW107XG4gIH1cblxuICAvKiogRm9ybSBhcnJheSBmb3IgUGFyYW1zIHRhYiBrZXktdmFsdWUgcm93czsgZWFjaCBpdGVtIGlzIEZvcm1Hcm91cCh7IGtleSwgdmFsdWUgfSkgKi9cbiAgcGFyYW1zRm9ybUFycmF5ITogRm9ybUFycmF5O1xuXG4gIGdldCBwYXJhbXNSb3dzKCk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gKHRoaXMucGFyYW1zRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkgYXMgRm9ybUdyb3VwW107XG4gIH1cblxuICAvKiogQ29uZmlnIGZvciBUeXBlIGRyb3Bkb3duIGluIGtleS10eXBlLXZhbHVlIHJvd3MgKFRleHQsIEZpbGUpICovXG4gIHJlYWRvbmx5IGtleVR5cGVWYWx1ZVR5cGVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBwbGFjZWhvbGRlcjogJ1RleHQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgaWQ6ICd0ZXh0JywgdmFsdWU6ICd0ZXh0JywgbmFtZTogJ1RleHQnLCBsYWJlbDogJ1RleHQnIH0sXG4gICAgICB7IGlkOiAnZmlsZScsIHZhbHVlOiAnZmlsZScsIG5hbWU6ICdGaWxlJywgbGFiZWw6ICdGaWxlJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqIEZvcm0gYXJyYXkgZm9yIHJlc3BvbnNlIGJvZHkgdmVyaWZpY2F0aW9uIHJvd3M7IGVhY2ggaXRlbSBpcyBGb3JtR3JvdXAoeyBqc29uUGF0aCwgdmVyaWZpY2F0aW9uLCBkYXRhVHlwZSwgZXhwZWN0ZWRWYWx1ZSB9KSAqL1xuICB2ZXJpZmljYXRpb25Gb3JtQXJyYXkhOiBGb3JtQXJyYXk7XG5cbiAgZ2V0IHZlcmlmaWNhdGlvblJvd3MoKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiAodGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXk/LmNvbnRyb2xzID8/IFtdKSBhcyBGb3JtR3JvdXBbXTtcbiAgfVxuXG4gIC8qKiBWZXJpZmljYXRpb24gb3B0aW9uczogYXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIChwYXNzZWQgZnJvbSBwYXJlbnQpLiBGYWxscyBiYWNrIHRvIGJ1aWx0LWluIGxpc3Qgd2hlbiBlbXB0eS4gKi9cbiAgQElucHV0KCkgdmVyaWZpY2F0aW9uT3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdID0gW107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9WRVJJRklDQVRJT05fT1BUSU9OUzogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ2VxdWFscycsIHZhbHVlOiAnZXF1YWxzJywgbmFtZTogJ0VxdWFscycsIGxhYmVsOiAnRXF1YWxzJyB9LFxuICAgIHsgaWQ6ICdub3QtZXF1YWwnLCB2YWx1ZTogJ25vdC1lcXVhbCcsIG5hbWU6ICdOb3QgZXF1YWwnLCBsYWJlbDogJ05vdCBlcXVhbCcgfSxcbiAgICB7IGlkOiAnbGVzcy10aGFuJywgdmFsdWU6ICdsZXNzLXRoYW4nLCBuYW1lOiAnTGVzcyB0aGFuJywgbGFiZWw6ICdMZXNzIHRoYW4nIH0sXG4gICAgeyBpZDogJ2dyZWF0ZXItdGhhbicsIHZhbHVlOiAnZ3JlYXRlci10aGFuJywgbmFtZTogJ0dyZWF0ZXIgdGhhbicsIGxhYmVsOiAnR3JlYXRlciB0aGFuJyB9LFxuICAgIHsgaWQ6ICdpcy1udWxsJywgdmFsdWU6ICdpcy1udWxsJywgbmFtZTogJ0lzIG51bGwnLCBsYWJlbDogJ0lzIG51bGwnIH0sXG4gICAgeyBpZDogJ2lzLW5vdC1udWxsJywgdmFsdWU6ICdpcy1ub3QtbnVsbCcsIG5hbWU6ICdJcyBub3QgbnVsbCcsIGxhYmVsOiAnSXMgbm90IG51bGwnIH0sXG4gIF07XG5cbiAgLyoqIENvbmZpZyBmb3IgVmVyaWZpY2F0aW9uIGRyb3Bkb3duICh1cGRhdGVkIHdoZW4gdmVyaWZpY2F0aW9uT3B0aW9ucyBjaGFuZ2VzLCBsaWtlIE1ldGhvZCBkcm9wZG93bikgKi9cbiAgdmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndmVyaWZpY2F0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ0VxdWFscycsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogWy4uLkFwaUVkaXRTdGVwQ29tcG9uZW50LkRFRkFVTFRfVkVSSUZJQ0FUSU9OX09QVElPTlNdLFxuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlVmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgdGhpcy52ZXJpZmljYXRpb25PcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy52ZXJpZmljYXRpb25PcHRpb25zLm1hcCgodikgPT4gQXBpRWRpdFN0ZXBDb21wb25lbnQudG9TZWxlY3RPcHRpb24odikpXG4gICAgICAgIDogQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9WRVJJRklDQVRJT05fT1BUSU9OUztcbiAgICB0aGlzLnZlcmlmaWNhdGlvblNlbGVjdENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMudmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnLFxuICAgICAgb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWZXJpZmljYXRpb25WYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNvdXJjZSA9XG4gICAgICB0aGlzLnZlcmlmaWNhdGlvbk9wdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnZlcmlmaWNhdGlvbk9wdGlvbnNcbiAgICAgICAgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9WRVJJRklDQVRJT05fT1BUSU9OUyBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0W10pO1xuICAgIHJldHVybiBzb3VyY2VcbiAgICAgIC5tYXAoKHYpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkpXG4gICAgICAuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPSBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZlcmlmaWNhdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmVyaWZpY2F0aW9uVmFsdWVzKCk7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPiAwID8gdmFsdWVzWzBdIDogJ2VxdWFscyc7XG4gIH1cblxuICAvKiogRGF0YSBUeXBlIG9wdGlvbnM6IGFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyAocGFzc2VkIGZyb20gcGFyZW50KS4gRmFsbHMgYmFjayB0byBidWlsdC1pbiBsaXN0IHdoZW4gZW1wdHkuICovXG4gIEBJbnB1dCgpIHZlcmlmaWNhdGlvbkRhdGFUeXBlT3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdID0gW107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9EQVRBX1RZUEVfT1BUSU9OUzogU2VsZWN0T3B0aW9uW10gPSBbXG4gICAgeyBpZDogJ3N0cmluZycsIHZhbHVlOiAnc3RyaW5nJywgbmFtZTogJ1N0cmluZycsIGxhYmVsOiAnU3RyaW5nJyB9LFxuICAgIHsgaWQ6ICdudW1iZXInLCB2YWx1ZTogJ251bWJlcicsIG5hbWU6ICdOdW1iZXInLCBsYWJlbDogJ051bWJlcicgfSxcbiAgICB7IGlkOiAnYm9vbGVhbicsIHZhbHVlOiAnYm9vbGVhbicsIG5hbWU6ICdCb29sZWFuJywgbGFiZWw6ICdCb29sZWFuJyB9LFxuICAgIHsgaWQ6ICdhcnJheScsIHZhbHVlOiAnYXJyYXknLCBuYW1lOiAnQXJyYXknLCBsYWJlbDogJ0FycmF5JyB9LFxuICAgIHsgaWQ6ICdvYmplY3QnLCB2YWx1ZTogJ29iamVjdCcsIG5hbWU6ICdPYmplY3QnLCBsYWJlbDogJ09iamVjdCcgfSxcbiAgXTtcblxuICAvKiogQ29uZmlnIGZvciBEYXRhIFR5cGUgZHJvcGRvd24gKHVwZGF0ZWQgd2hlbiB2ZXJpZmljYXRpb25EYXRhVHlwZU9wdGlvbnMgY2hhbmdlcywgbGlrZSBNZXRob2QgZHJvcGRvd24pICovXG4gIHZlcmlmaWNhdGlvbkRhdGFUeXBlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZGF0YVR5cGUnLFxuICAgIHBsYWNlaG9sZGVyOiAnU3RyaW5nJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbLi4uQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9EQVRBX1RZUEVfT1BUSU9OU10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1cGRhdGVWZXJpZmljYXRpb25EYXRhVHlwZVNlbGVjdENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID1cbiAgICAgIHRoaXMudmVyaWZpY2F0aW9uRGF0YVR5cGVPcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy52ZXJpZmljYXRpb25EYXRhVHlwZU9wdGlvbnMubWFwKChkKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC50b1NlbGVjdE9wdGlvbihkKSlcbiAgICAgICAgOiBBcGlFZGl0U3RlcENvbXBvbmVudC5ERUZBVUxUX0RBVEFfVFlQRV9PUFRJT05TO1xuICAgIHRoaXMudmVyaWZpY2F0aW9uRGF0YVR5cGVTZWxlY3RDb25maWcgPSB7XG4gICAgICAuLi50aGlzLnZlcmlmaWNhdGlvbkRhdGFUeXBlU2VsZWN0Q29uZmlnLFxuICAgICAgb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhVHlwZVZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc291cmNlID1cbiAgICAgIHRoaXMudmVyaWZpY2F0aW9uRGF0YVR5cGVPcHRpb25zPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy52ZXJpZmljYXRpb25EYXRhVHlwZU9wdGlvbnNcbiAgICAgICAgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9EQVRBX1RZUEVfT1BUSU9OUyBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0W10pO1xuICAgIHJldHVybiBzb3VyY2VcbiAgICAgIC5tYXAoKGQpID0+IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGQgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkpXG4gICAgICAuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPSBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdERhdGFUeXBlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXREYXRhVHlwZVZhbHVlcygpO1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IHZhbHVlc1swXSA6ICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqIENvbmZpZyBmb3IgRXhwZWN0ZWQgVmFsdWUgd2hlbiBEYXRhIFR5cGUgaXMgQm9vbGVhbiAodHJ1ZS9mYWxzZSBkcm9wZG93bikgKi9cbiAgcmVhZG9ubHkgdmVyaWZpY2F0aW9uRXhwZWN0ZWRWYWx1ZUJvb2xlYW5TZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdleHBlY3RlZFZhbHVlJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyBpZDogJ3RydWUnLCB2YWx1ZTogJ3RydWUnLCBuYW1lOiAndHJ1ZScsIGxhYmVsOiAndHJ1ZScgfSxcbiAgICAgIHsgaWQ6ICdmYWxzZScsIHZhbHVlOiAnZmFsc2UnLCBuYW1lOiAnZmFsc2UnLCBsYWJlbDogJ2ZhbHNlJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqIEZvcm0gYXJyYXkgZm9yIFN0YXR1cyB0YWIgdmVyaWZpY2F0aW9uIHJvd3M7IGVhY2ggaXRlbSBpcyBGb3JtR3JvdXAoeyB2ZXJpZmljYXRpb24sIGV4cGVjdGVkVmFsdWUgfSkgKi9cbiAgc3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5ITogRm9ybUFycmF5O1xuXG4gIGdldCBzdGF0dXNWZXJpZmljYXRpb25Sb3dzKCk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gKHRoaXMuc3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkgYXMgRm9ybUdyb3VwW107XG4gIH1cblxuICAvKiogQ29uZmlnIGZvciBTdGF0dXMgdGFiIFZlcmlmaWNhdGlvbiBkcm9wZG93biAoRXF1YWxzLCBOb3QgZXF1YWwsIExlc3MgdGhhbiwgR3JlYXRlciB0aGFuKSAqL1xuICAvKiogU3RhdHVzIHRhYiBWZXJpZmljYXRpb24gb3B0aW9ucyAoRXF1YWxzLCBOb3QgZXF1YWwsIGV0Yy4pLiBGYWxscyBiYWNrIHRvIGJ1aWx0LWluIGxpc3Qgd2hlbiBlbXB0eS4gKi9cbiAgQElucHV0KCkgc3RhdHVzVmVyaWZpY2F0aW9uT3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdID0gW107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9TVEFUVVNfVkVSSUZJQ0FUSU9OX09QVElPTlM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdlcXVhbHMnLCB2YWx1ZTogJ2VxdWFscycsIG5hbWU6ICdFcXVhbHMnLCBsYWJlbDogJ0VxdWFscycgfSxcbiAgICB7IGlkOiAnbm90LWVxdWFsJywgdmFsdWU6ICdub3QtZXF1YWwnLCBuYW1lOiAnTm90IGVxdWFsJywgbGFiZWw6ICdOb3QgZXF1YWwnIH0sXG4gICAgeyBpZDogJ2xlc3MtdGhhbicsIHZhbHVlOiAnbGVzcy10aGFuJywgbmFtZTogJ0xlc3MgdGhhbicsIGxhYmVsOiAnTGVzcyB0aGFuJyB9LFxuICAgIHsgaWQ6ICdncmVhdGVyLXRoYW4nLCB2YWx1ZTogJ2dyZWF0ZXItdGhhbicsIG5hbWU6ICdHcmVhdGVyIHRoYW4nLCBsYWJlbDogJ0dyZWF0ZXIgdGhhbicgfSxcbiAgXTtcblxuICAvKiogQ29uZmlnIGZvciBTdGF0dXMgdGFiIFZlcmlmaWNhdGlvbiBkcm9wZG93biAodXBkYXRlZCB3aGVuIHN0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnMgY2hhbmdlcykuICovXG4gIHN0YXR1c1ZlcmlmaWNhdGlvblNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3ZlcmlmaWNhdGlvbicsXG4gICAgcGxhY2Vob2xkZXI6ICdFcXVhbHMnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFsuLi5BcGlFZGl0U3RlcENvbXBvbmVudC5ERUZBVUxUX1NUQVRVU19WRVJJRklDQVRJT05fT1BUSU9OU10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0dXNWZXJpZmljYXRpb25TZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnMubWFwKChvKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC50b1NlbGVjdE9wdGlvbihvKSlcbiAgICAgICAgOiBBcGlFZGl0U3RlcENvbXBvbmVudC5ERUZBVUxUX1NUQVRVU19WRVJJRklDQVRJT05fT1BUSU9OUztcbiAgICB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvblNlbGVjdENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdHVzVmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnLFxuICAgICAgb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdGF0dXNWZXJpZmljYXRpb25WYWx1ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNvdXJjZSA9XG4gICAgICB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnNcbiAgICAgICAgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuREVGQVVMVF9TVEFUVVNfVkVSSUZJQ0FUSU9OX09QVElPTlMgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dFtdKTtcbiAgICByZXR1cm4gc291cmNlXG4gICAgICAubWFwKChvKSA9PiBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZShvIGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpKVxuICAgICAgLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+IHYgIT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRTdGF0dXNWZXJpZmljYXRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFN0YXR1c1ZlcmlmaWNhdGlvblZhbHVlcygpO1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IHZhbHVlc1swXSA6ICdlcXVhbHMnO1xuICB9XG5cbiAgcmVzcG9uc2VQcmV2aWV3ID0gYGA7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgcmVzcG9uc2UgcHJldmlldyBzZWN0aW9uLCB1c2VkIHRvIHNjcm9sbCBpbnRvIHZpZXcgYWZ0ZXIgU2VuZCBSZXF1ZXN0IGNvbXBsZXRlcy4gKi9cbiAgQFZpZXdDaGlsZCgncmVzcG9uc2VQcmV2aWV3UmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIHJlc3BvbnNlUHJldmlld1JlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgbWV0aG9kQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtYXRDaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGhlYWRlck5hbWVPcHRpb25zQ2hhbmdlc1N1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudEZvcm1DaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG1ldGhvZEZvcm1DaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBhcmFtc0Zvcm1BcnJheUNoYW5nZXNTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLy8gQWR2YW5jZWQgc2V0dGluZ3M6IGdlbmVyaWMgYWR2YW5jZWQgdmFyaWFibGVzIGZvciB0aGlzIEFQSSBzdGVwIChjYW4gYmUgcHJvdmlkZWQgYnkgcGFyZW50KVxuICBhZHZhbmNlZEV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgYWR2YW5jZWRWYXJpYWJsZXNGb3JtOiBGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGx5SW5pdGlhbFN0ZXAodGhpcy5pbml0aWFsU3RlcCk7XG4gICAgdGhpcy51cGRhdGVNZXRob2RTZWxlY3RDb25maWcoKTtcbiAgICB0aGlzLnVwZGF0ZUhlYWRlck5hbWVTZWxlY3RDb25maWcoKTtcbiAgICBjb25zdCBmaXJzdE1ldGhvZFZhbHVlID0gdGhpcy5odHRwTWV0aG9kT3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkZWZhdWx0TWV0aG9kID0gdGhpcy5pbml0aWFsTWV0aG9kID8/IGZpcnN0TWV0aG9kVmFsdWUgPz8gJ0dFVCc7XG4gICAgdGhpcy5jdXJyZW50TWV0aG9kVmFsdWUgPSB0eXBlb2YgZGVmYXVsdE1ldGhvZCA9PT0gJ3N0cmluZycgPyBkZWZhdWx0TWV0aG9kIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGRlZmF1bHRNZXRob2QgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpO1xuICAgIHRoaXMubWV0aG9kRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgbWV0aG9kOiBbZGVmYXVsdE1ldGhvZF0sXG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3RWYWx1ZSA9IHRoaXMuZW52aXJvbm1lbnRPcHRpb25zPy5sZW5ndGhcbiAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodGhpcy5lbnZpcm9ubWVudE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkZWZhdWx0RW52ID0gdGhpcy5pbml0aWFsRW52aXJvbm1lbnQgPz8gZmlyc3RWYWx1ZSA/PyAnRGV2ZWxvcG1lbnQnO1xuICAgIHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgPSB0eXBlb2YgZGVmYXVsdEVudiA9PT0gJ3N0cmluZycgPyBkZWZhdWx0RW52IDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGRlZmF1bHRFbnYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpO1xuICAgIHRoaXMuZW52aXJvbm1lbnRGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBlbnZpcm9ubWVudDogW2RlZmF1bHRFbnZdLFxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQXV0aFR5cGVTZWxlY3RDb25maWcoKTtcbiAgICBjb25zdCBmaXJzdEF1dGhWYWx1ZSA9IHRoaXMuZ2V0QXV0aFR5cGVWYWx1ZXMoKVswXTtcbiAgICBjb25zdCBkZWZhdWx0QXV0aFR5cGUgPSB0aGlzLmluaXRpYWxBdXRoVHlwZSA/PyBmaXJzdEF1dGhWYWx1ZSA/PyAnbm8tYXV0aCc7XG4gICAgdGhpcy5hdXRoVHlwZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGF1dGhUeXBlOiBbZGVmYXVsdEF1dGhUeXBlXSxcbiAgICB9KTtcbiAgICB0aGlzLm9hdXRoMkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGdyYW50VHlwZTogW3RoaXMuaW5pdGlhbE9BdXRoMj8uZ3JhbnRUeXBlID8/ICdjbGllbnRfY3JlZGVudGlhbHMnXSxcbiAgICAgIGFjY2Vzc1Rva2VuVXJsOiBbdGhpcy5pbml0aWFsT0F1dGgyPy5hY2Nlc3NUb2tlblVybCA/PyAnJ10sXG4gICAgICBjbGllbnRJZDogW3RoaXMuaW5pdGlhbE9BdXRoMj8uY2xpZW50SWQgPz8gJyddLFxuICAgICAgY2xpZW50U2VjcmV0OiBbdGhpcy5pbml0aWFsT0F1dGgyPy5jbGllbnRTZWNyZXQgPz8gJyddLFxuICAgICAgc2NvcGU6IFt0aGlzLmluaXRpYWxPQXV0aDI/LnNjb3BlID8/ICcnXSxcbiAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uOiBbdGhpcy5pbml0aWFsT0F1dGgyPy5jbGllbnRBdXRoZW50aWNhdGlvbiA/PyAnYmFzaWMnXSxcbiAgICB9KTtcbiAgICB0aGlzLmVudmlyb25tZW50Rm9ybUNoYW5nZXNTdWIgPSB0aGlzLmVudmlyb25tZW50Rm9ybS5nZXQoJ2Vudmlyb25tZW50Jyk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCh2OiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBzID0gdiAhPSBudWxsICYmIHYgIT09ICcnID8gKHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgOiBTdHJpbmcodikpIDogJyc7XG4gICAgICB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlID0gcyA/PyAnJztcbiAgICB9KTtcbiAgICB0aGlzLm1ldGhvZEZvcm1DaGFuZ2VzU3ViID0gdGhpcy5tZXRob2RGb3JtLmdldCgnbWV0aG9kJyk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCh2OiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBzID0gdiAhPSBudWxsICYmIHYgIT09ICcnID8gKHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgOiBTdHJpbmcodikpIDogJyc7XG4gICAgICB0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSA9IHMgPz8gJyc7XG4gICAgfSk7XG4gICAgdGhpcy5idWlsZEhlYWRlcnNGb3JtQXJyYXkoXG4gICAgICB0aGlzLmluaXRpYWxIZWFkZXJzID8/IFt7IG5hbWU6ICcnLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnIH1dXG4gICAgKTtcbiAgICB0aGlzLmhlYWRlck5hbWVPcHRpb25zQ2hhbmdlc1N1YiA9IHRoaXMuaGVhZGVyc0Zvcm1BcnJheT8udmFsdWVDaGFuZ2VzPy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVIZWFkZXJOYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgICB0aGlzLmhlYWRlcnNDaGFuZ2UuZW1pdCh0aGlzLmhlYWRlcnMpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIHRoaXMuaGVhZGVyc0NoYW5nZS5lbWl0KHRoaXMuaGVhZGVycyk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudFNlbGVjdENvbmZpZygpO1xuICAgIHRoaXMudXBkYXRlUGF5bG9hZEZvcm1hdFNlbGVjdENvbmZpZygpO1xuICAgIGNvbnN0IGZpcnN0Rm9ybWF0VmFsdWUgPSB0aGlzLmdldEZvcm1hdFZhbHVlcygpWzBdO1xuICAgIGNvbnN0IGRlZmF1bHRGb3JtYXQgPSB0aGlzLmluaXRpYWxGb3JtYXQgPz8gZmlyc3RGb3JtYXRWYWx1ZSA/PyAnanNvbic7XG4gICAgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoeyBmb3JtYXQ6IFtkZWZhdWx0Rm9ybWF0XSB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgcGF5bG9hZCB0eXBlIGFuZCB0ZXh0IGZyb20gaW5wdXRzIHdoZW4gZWRpdGluZ1xuICAgIGlmICh0aGlzLmluaXRpYWxQYXlsb2FkVHlwZSkge1xuICAgICAgdGhpcy5wYXlsb2FkVHlwZSA9IHRoaXMuaW5pdGlhbFBheWxvYWRUeXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsUGF5bG9hZFRleHQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5wYXlsb2FkVGV4dCA9IHRoaXMuaW5pdGlhbFBheWxvYWRUZXh0O1xuICAgIH1cblxuICAgIHRoaXMuYnVpbGRLZXlWYWx1ZUZvcm1BcnJheSgpO1xuICAgIHRoaXMuYnVpbGRLZXlUeXBlVmFsdWVGb3JtQXJyYXkoKTtcbiAgICB0aGlzLmJ1aWxkUGFyYW1zRm9ybUFycmF5KCk7XG4gICAgdGhpcy5wYXJhbXNGb3JtQXJyYXlDaGFuZ2VzU3ViID0gdGhpcy5wYXJhbXNGb3JtQXJyYXkudmFsdWVDaGFuZ2VzPy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zeW5jVXJsRnJvbVBhcmFtcygpKTtcbiAgICBpZiAodGhpcy5pbml0aWFsVXJsICE9IG51bGwgJiYgdGhpcy5pbml0aWFsVXJsICE9PSAnJykge1xuICAgICAgdGhpcy5fdXJsID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZGVjb2RlVXJsRm9yRGlzcGxheSh0aGlzLmluaXRpYWxVcmwpO1xuICAgICAgdGhpcy5zeW5jUGFyYW1zRnJvbVVybCgpO1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlTmFtZSBmcm9tIGluaXRpYWxWYXJpYWJsZU5hbWVcbiAgICBpZiAodGhpcy5pbml0aWFsVmFyaWFibGVOYW1lICE9IG51bGwgJiYgdGhpcy5pbml0aWFsVmFyaWFibGVOYW1lICE9PSAnJykge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWUgPSB0aGlzLmluaXRpYWxWYXJpYWJsZU5hbWU7XG4gICAgfVxuICAgIC8vIEluaXRpYWxpemUgc3VtbWFyeSBmcm9tIGluaXRpYWxTdW1tYXJ5IChzdGVwIGRlc2NyaXB0aW9uKVxuICAgIGlmICh0aGlzLmluaXRpYWxTdW1tYXJ5ICE9IG51bGwgJiYgdGhpcy5pbml0aWFsU3VtbWFyeSAhPT0gJycpIHtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IHRoaXMuaW5pdGlhbFN1bW1hcnk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnKCk7XG4gICAgdGhpcy51cGRhdGVWZXJpZmljYXRpb25EYXRhVHlwZVNlbGVjdENvbmZpZygpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJpZmljYXRpb24gcm93cyBmcm9tIGlucHV0cyB3aGVuIHByb3ZpZGVkOyBvdGhlcndpc2UgYnVpbGQgZGVmYXVsdHNcbiAgICBjb25zdCBib2R5Um93cyA9XG4gICAgICB0aGlzLmluaXRpYWxSZXNwb25zZUJvZHlWZXJpZmljYXRpb25zICYmIHRoaXMuaW5pdGlhbFJlc3BvbnNlQm9keVZlcmlmaWNhdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuaW5pdGlhbFJlc3BvbnNlQm9keVZlcmlmaWNhdGlvbnNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5idWlsZFZlcmlmaWNhdGlvbkZvcm1BcnJheShib2R5Um93cyk7XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1c1ZlcmlmaWNhdGlvblNlbGVjdENvbmZpZygpO1xuICAgIGNvbnN0IHN0YXR1c1Jvd3MgPVxuICAgICAgdGhpcy5pbml0aWFsU3RhdHVzVmVyaWZpY2F0aW9ucyAmJiB0aGlzLmluaXRpYWxTdGF0dXNWZXJpZmljYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmluaXRpYWxTdGF0dXNWZXJpZmljYXRpb25zXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuYnVpbGRTdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkoc3RhdHVzUm93cyk7XG4gICAgdGhpcy5tZXRob2RDaGFuZ2VzU3ViID0gdGhpcy5tZXRob2RGb3JtLmdldCgnbWV0aG9kJyk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXRob2QgPSB2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpIDogJyc7XG4gICAgICBpZiAoTUVUSE9EU19XSVRIT1VUX0JPRFkuaW5jbHVkZXMobWV0aG9kKSAmJiB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgIT09ICdoZWFkZXJzJykge1xuICAgICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnaGVhZGVycyc7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1hdENoYW5nZXNTdWIgPSB0aGlzLnBheWxvYWRGb3JtYXRGb3JtLmdldCgnZm9ybWF0Jyk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuICAgIH0pO1xuICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhY3RpdmUgcmVzcG9uc2UgdmVyaWZpY2F0aW9uIHRhYiBmcm9tIGlucHV0IHdoZW4gcHJvdmlkZWRcbiAgICBpZiAodGhpcy5pbml0aWFsQWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIpIHtcbiAgICAgIHRoaXMuYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIgPSB0aGlzLmluaXRpYWxBY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYjtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBhZHZhbmNlZCBzZXR0aW5ncyBmb3JtIG9ubHkgZnJvbSBpbnB1dCB2YXJpYWJsZXMgKG5vIGxvY2FsIGluaXRpYWxpemF0aW9uKVxuICAgIGlmICh0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgJiYgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBHcmFwaFFMIGZvcm0gKyBpbml0aWFsIHN0YXRlLiBIeWRyYXRlIGZyb20gYGluaXRpYWxBcGlUeXBlYCAvIGBpbml0aWFsR3JhcGhRTGAgaWYgdGhlIHBhcmVudFxuICAgIC8vIGlzIGVkaXRpbmcgYSBHcmFwaFFMIHN0ZXAuIFZhcmlhYmxlcyBjb21lIGluIGFzIGVpdGhlciBhbiBvYmplY3QgKHByZWZlcnJlZCkgb3IgYSBKU09OIHN0cmluZyDigJRcbiAgICAvLyB3ZSBhbHdheXMgc3RvcmUgdGhlIGZvcm0gdmFsdWUgYXMgYSBwcmV0dHktcHJpbnRlZCBKU09OIHN0cmluZyBzbyB0aGUgdGV4dGFyZWEgcm91bmQtdHJpcHMgY2xlYW5seS5cbiAgICB0aGlzLmFjdGl2ZUFwaVR5cGUgPSB0aGlzLmluaXRpYWxBcGlUeXBlID09PSAnZ3JhcGhxbCcgPyAnZ3JhcGhxbCcgOiAncmVzdCc7XG4gICAgY29uc3QgaW5pdGlhbFF1ZXJ5ID0gdGhpcy5pbml0aWFsR3JhcGhRTD8ucXVlcnkgPz8gJyc7XG4gICAgY29uc3QgaW5pdGlhbFZhcnNSYXcgPSB0aGlzLmluaXRpYWxHcmFwaFFMPy52YXJpYWJsZXM7XG4gICAgbGV0IGluaXRpYWxWYXJpYWJsZXNTdHJpbmcgPSAnJztcbiAgICBpZiAoaW5pdGlhbFZhcnNSYXcgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsVmFyc1JhdyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5pdGlhbFZhcmlhYmxlc1N0cmluZyA9IGluaXRpYWxWYXJzUmF3O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbml0aWFsVmFyaWFibGVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFZhcnNSYXcsIG51bGwsIDIpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBpbml0aWFsVmFyaWFibGVzU3RyaW5nID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbE9wZXJhdGlvbk5hbWUgPSB0aGlzLmluaXRpYWxHcmFwaFFMPy5vcGVyYXRpb25OYW1lID8/ICcnO1xuICAgIHRoaXMuZ3JhcGhRTEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHF1ZXJ5OiBbaW5pdGlhbFF1ZXJ5XSxcbiAgICAgIHZhcmlhYmxlczogW2luaXRpYWxWYXJpYWJsZXNTdHJpbmddLFxuICAgICAgb3BlcmF0aW9uTmFtZTogW2luaXRpYWxPcGVyYXRpb25OYW1lXSxcbiAgICB9KTtcbiAgICAvLyBSZS12YWxpZGF0ZSBhcyB0aGUgdXNlciB0eXBlcyBzbyBpbmxpbmUgZXJyb3JzIGNsZWFyL3JlLXJlbmRlciBpbiByZWFsIHRpbWUuXG4gICAgdGhpcy5ncmFwaFFMRm9ybS5nZXQoJ3F1ZXJ5Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JhcGhRTFF1ZXJ5RXJyb3IpIHRoaXMuZ3JhcGhRTFF1ZXJ5RXJyb3IgPSAnJztcbiAgICAgIHRoaXMucmVjb21wdXRlR3JhcGhRTE9wZXJhdGlvbldhcm5pbmcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmdyYXBoUUxGb3JtLmdldCgndmFyaWFibGVzJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZUdyYXBoUUxWYXJpYWJsZXMoZmFsc2UpO1xuICAgIH0pO1xuICAgIHRoaXMuZ3JhcGhRTEZvcm0uZ2V0KCdvcGVyYXRpb25OYW1lJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbXB1dGVHcmFwaFFMT3BlcmF0aW9uV2FybmluZygpO1xuICAgIH0pO1xuICAgIC8vIERlZmF1bHQgdGhlIGFjdGl2ZSB0YWIgdG8gXCJncmFwaHFsXCIgd2hlbiB0aGUgdXNlciBpcyBlZGl0aW5nIGEgR3JhcGhRTCBzdGVwLFxuICAgIC8vIHNvIHRoZSBRdWVyeSAvIFZhcmlhYmxlcyAvIE9wZXJhdGlvbiBOYW1lIGZpZWxkcyBhcmUgdmlzaWJsZSBpbW1lZGlhdGVseS5cbiAgICBpZiAodGhpcy5hY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCcpIHtcbiAgICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdncmFwaHFsJztcbiAgICB9XG4gICAgdGhpcy5yZWNvbXB1dGVHcmFwaFFMT3BlcmF0aW9uV2FybmluZygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBQYXlsb2FkVGV4dGFyZWFTY3JvbGxTeW5jKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGhvZENoYW5nZXNTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5mb3JtYXRDaGFuZ2VzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaGVhZGVyTmFtZU9wdGlvbnNDaGFuZ2VzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZW52aXJvbm1lbnRGb3JtQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1ldGhvZEZvcm1DaGFuZ2VzU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGFyYW1zRm9ybUFycmF5Q2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKiBTeW5jIGxpbmUgbnVtYmVycyBjb2x1bW4gc2Nyb2xsIHdpdGggcGF5bG9hZCB0ZXh0YXJlYSBzY3JvbGwgKFBvc3RtYW4tc3R5bGUpLiAqL1xuICBwcml2YXRlIHNldHVwUGF5bG9hZFRleHRhcmVhU2Nyb2xsU3luYygpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLnBheWxvYWRFZGl0b3JXaXRoTGluZXNSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWhvc3QpIHJldHVybjtcbiAgICAgIGNvbnN0IGxpbmVOdW1iZXJzRWwgPSBob3N0LnF1ZXJ5U2VsZWN0b3IoJy5jcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWxpbmUtbnVtYmVycycpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGNvbnN0IHRleHRhcmVhID0gaG9zdC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKCFsaW5lTnVtYmVyc0VsIHx8ICF0ZXh0YXJlYSkgcmV0dXJuO1xuICAgICAgdGV4dGFyZWEuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICBsaW5lTnVtYmVyc0VsLnNjcm9sbFRvcCA9IHRleHRhcmVhLnNjcm9sbFRvcDtcbiAgICAgIH0pO1xuICAgICAgbGluZU51bWJlcnNFbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIHRleHRhcmVhLnNjcm9sbFRvcCA9IGxpbmVOdW1iZXJzRWwuc2Nyb2xsVG9wO1xuICAgICAgfSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkS2V5VmFsdWVGb3JtQXJyYXkocm93cz86IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbCA9IHJvd3MgPz8gW3sga2V5OiAnJywgdmFsdWU6ICcnIH1dO1xuICAgIGNvbnN0IGdyb3VwcyA9IGluaXRpYWwubWFwKChyKSA9PiB0aGlzLmZiLmdyb3VwKHsga2V5OiBbci5rZXldLCB2YWx1ZTogW3IudmFsdWVdIH0pKTtcbiAgICB0aGlzLmtleVZhbHVlRm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShncm91cHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEtleVR5cGVWYWx1ZUZvcm1BcnJheShyb3dzPzogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWwgPSByb3dzID8/IFt7IGtleTogJycsIHR5cGU6ICd0ZXh0JywgdmFsdWU6ICcnIH1dO1xuICAgIGNvbnN0IGdyb3VwcyA9IGluaXRpYWwubWFwKChyKSA9PiB0aGlzLmZiLmdyb3VwKHsga2V5OiBbci5rZXldLCB0eXBlOiBbci50eXBlXSwgdmFsdWU6IFtyLnZhbHVlXSB9KSk7XG4gICAgdGhpcy5rZXlUeXBlVmFsdWVGb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KGdyb3Vwcyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9ybUFycmF5KHJvd3M/OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWwgPSByb3dzID8/IFt7IGtleTogJycsIHZhbHVlOiAnJyB9XTtcbiAgICBjb25zdCBncm91cHMgPSBpbml0aWFsLm1hcCgocikgPT4gdGhpcy5mYi5ncm91cCh7IGtleTogW3Iua2V5XSwgdmFsdWU6IFtyLnZhbHVlXSB9KSk7XG4gICAgaWYgKHRoaXMucGFyYW1zRm9ybUFycmF5KSB7XG4gICAgICB0aGlzLnBhcmFtc0Zvcm1BcnJheS5jbGVhcigpO1xuICAgICAgZ3JvdXBzLmZvckVhY2goKGcpID0+IHRoaXMucGFyYW1zRm9ybUFycmF5LnB1c2goZykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmFtc0Zvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoZ3JvdXBzKTtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSBpZiBVUkwgaXMgYSBwYXJhbWV0ZXIgcGxhY2Vob2xkZXIgKGUuZy4gKnxwYXJhbXwpOyBtdXN0IG5vdCBiZSBwYXJzZWQgd2l0aCBVUkwoKSB3aGljaCBlbmNvZGVzIHwgdG8gJTdDLiAqL1xuICBwcml2YXRlIHN0YXRpYyBpc1BhcmFtZXRlclVybCh1cmxTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdXJsU3RyIHx8IHR5cGVvZiB1cmxTdHIgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIC8oXFwqXFx8W1xcdy1dK1xcfChcXCopP3xcXCRcXHxbXFx3LV0rXFx8KFxcKik/fEBcXHxbXFx3LV0rXFx8KFxcKik/fFxcJFxce1tefV0rXFx9KS8udGVzdCh1cmxTdHIudHJpbSgpKTtcbiAgfVxuXG4gIC8qKiBEZWNvZGUgVVJMIGZvciBkaXNwbGF5L3BheWxvYWQ6IHN0cmlwIC8qIHByZWZpeCBhbmQgZGVjb2RlICU3QyB0byB8IHNvICp8cGFyYW18IHNob3dzIGNvcnJlY3RseS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZGVjb2RlVXJsRm9yRGlzcGxheShyYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBsZXQgcyA9IHJhdy50cmltKCk7XG4gICAgaWYgKCFzKSByZXR1cm4gJyc7XG4gICAgaWYgKHMuc3RhcnRzV2l0aCgnLyonKSkgcyA9IHMuc2xpY2UoMikudHJpbSgpO1xuICAgIGlmIChzLmluY2x1ZGVzKCclN0MnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IGRlY29kZVVSSUNvbXBvbmVudChzKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBsZWF2ZSBhcy1pcyAqL1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIC8qKiBQYXJzZSBVUkwgaW50byBiYXNlICh3aXRob3V0IHF1ZXJ5L2ZyYWdtZW50KSBhbmQgcXVlcnkga2V5LXZhbHVlIHBhaXJzLiBQcmVzZXJ2ZXMgcmVsYXRpdmUgVVJMcyBhbmQgcGFyYW1ldGVyIHBsYWNlaG9sZGVycy4gKi9cbiAgcHJpdmF0ZSBwYXJzZVF1ZXJ5UGFyYW1zRnJvbVVybCh1cmxTdHI6IHN0cmluZyk6IHsgYmFzZVVybDogc3RyaW5nOyByb3dzOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB9IHtcbiAgICBjb25zdCB0cmltbWVkID0gdXJsU3RyPy50cmltKCkgPz8gJyc7XG4gICAgY29uc3QgZW1wdHkgPSB7IGJhc2VVcmw6IHRyaW1tZWQgfHwgdXJsU3RyLCByb3dzOiBbeyBrZXk6ICcnLCB2YWx1ZTogJycgfV0gfTtcbiAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBlbXB0eTtcbiAgICBpZiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuaXNQYXJhbWV0ZXJVcmwodXJsU3RyKSkgcmV0dXJuIGVtcHR5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpc0Fic29sdXRlID0gL15odHRwcz86XFwvXFwvL2kudGVzdCh0cmltbWVkKTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsU3RyLCAnaHR0cDovL2xvY2FsaG9zdCcpO1xuICAgICAgY29uc3QgYmFzZVVybCA9IGlzQWJzb2x1dGUgPyB1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lIDogdXJsLnBhdGhuYW1lO1xuICAgICAgY29uc3Qgcm93czogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICByb3dzLnB1c2goeyBrZXksIHZhbHVlIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJvd3MucHVzaCh7IGtleTogJycsIHZhbHVlOiAnJyB9KTtcbiAgICAgIHJldHVybiB7IGJhc2VVcmwsIHJvd3MgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9XG4gIH1cblxuICAvKiogR2V0IGJhc2UgVVJMICh3aXRob3V0IHF1ZXJ5L2ZyYWdtZW50KSBmb3IgYnVpbGRpbmcgVVJMIGZyb20gcGFyYW1zLiBQcmVzZXJ2ZXMgcmVsYXRpdmUgVVJMcyBhbmQgcGFyYW1ldGVyIHBsYWNlaG9sZGVycy4gKi9cbiAgcHJpdmF0ZSBnZXRCYXNlVXJsKHVybFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybFN0ciB8fCAhdXJsU3RyLnRyaW0oKSkgcmV0dXJuIHVybFN0cjtcbiAgICBpZiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuaXNQYXJhbWV0ZXJVcmwodXJsU3RyKSkgcmV0dXJuIHVybFN0ci50cmltKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlzQWJzb2x1dGUgPSAvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHVybFN0ci50cmltKCkpO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmxTdHIsICdodHRwOi8vbG9jYWxob3N0Jyk7XG4gICAgICByZXR1cm4gaXNBYnNvbHV0ZSA/IHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUgOiB1cmwucGF0aG5hbWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdXJsU3RyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBheWxvYWQgZm9ybWF0IGRyb3Bkb3duIHVzaW5nIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGZpcnN0LCB0aGVuXG4gICAqIGZhbGwgYmFjayB0byBpbnNwZWN0aW5nIHRoZSBib2R5IGNvbnRlbnQgKEpTT04gYnJhY2VzLCBYTUwgdGFncywgSFRNTCBkb2N0eXBlKS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlCb2R5Rm9ybWF0KGJvZHk6IHN0cmluZywgY29udGVudFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdFZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0VmFsdWVzKCk7XG4gICAgaWYgKCF0aGlzLnBheWxvYWRGb3JtYXRGb3JtIHx8IGZvcm1hdFZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjdCA9IChjb250ZW50VHlwZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzZXRGbXQgPSAoZm10OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChmb3JtYXRWYWx1ZXMuaW5jbHVkZXMoZm10KSkgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmbXQgfSk7XG4gICAgfTtcbiAgICAvLyBDb250ZW50LVR5cGUgdGFrZXMgcHJpb3JpdHlcbiAgICBpZiAoY3QuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSB8fCBjdC5pbmNsdWRlcygndGV4dC9qc29uJykpICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGbXQoJ2pzb24nKTtcbiAgICBpZiAoY3QuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL3htbCcpIHx8IGN0LmluY2x1ZGVzKCd0ZXh0L3htbCcpIHx8IGN0LmluY2x1ZGVzKCd4aHRtbCcpKSByZXR1cm4gc2V0Rm10KCd4bWwnKTtcbiAgICBpZiAoY3QuaW5jbHVkZXMoJ3RleHQvaHRtbCcpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZtdCgnaHRtbCcpO1xuICAgIGlmIChjdC5pbmNsdWRlcygndGV4dC9wbGFpbicpIHx8IGN0LmluY2x1ZGVzKCd0ZXh0L2NzdicpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGbXQoJ3RleHQnKTtcbiAgICAvLyBGYWxsIGJhY2sgdG8gYm9keS1jb250ZW50IGluc3BlY3Rpb25cbiAgICBjb25zdCB0ID0gKGJvZHkgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoKHQuc3RhcnRzV2l0aCgneycpICYmIHQuZW5kc1dpdGgoJ30nKSkgfHwgKHQuc3RhcnRzV2l0aCgnWycpICYmIHQuZW5kc1dpdGgoJ10nKSkpICByZXR1cm4gc2V0Rm10KCdqc29uJyk7XG4gICAgaWYgKHQuc3RhcnRzV2l0aCgnPD94bWwnKSB8fCAodC5zdGFydHNXaXRoKCc8JykgJiYgIXQuc3RhcnRzV2l0aCgnPCEnKSAmJiAhdC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJzwhZG9jdHlwZScpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZtdCgneG1sJyk7XG4gICAgaWYgKHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCc8IWRvY3R5cGUgaHRtbCcpIHx8IHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCc8aHRtbCcpKSByZXR1cm4gc2V0Rm10KCdodG1sJyk7XG4gIH1cblxuICAvKiogUGFyc2UgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIGJvZHkgKGtleT12YWx1ZSYuLi4pIGludG8ga2V5LXZhbHVlIHJvd3MuICovXG4gIHByaXZhdGUgcGFyc2VGb3JtVXJsRW5jb2RlZEJvZHkoYm9keTogc3RyaW5nKTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10ge1xuICAgIGNvbnN0IHRyaW1tZWQgPSAoYm9keSA/PyAnJykudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZCkgcmV0dXJuIFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRyaW1tZWQpO1xuICAgICAgY29uc3Qgcm93czogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgIHBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiByb3dzLnB1c2goeyBrZXksIHZhbHVlIH0pKTtcbiAgICAgIHJldHVybiByb3dzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBmb3JtIGJvZHkgaGFzIGEgc2luZ2xlIGtleSB3aG9zZSB2YWx1ZSBpcyBVUkwtZGVjb2RlZCBKU09OLCByZXR1cm4gaXQgcHJldHR5LXByaW50ZWQgZm9yIFJhdyBib2R5LlxuICAgKiBPdGhlcndpc2UgcmV0dXJuIG51bGwgKGNhbGxlciBrZWVwcyB4LXd3dy1mb3JtLXVybGVuY29kZWQgdmlldykuXG4gICAqL1xuICBwcml2YXRlIHRyeUZvcm1Cb2R5VmFsdWVBc1Jhd0pzb24ocm93czogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAocm93cy5sZW5ndGggIT09IDEgfHwgIXJvd3NbMF0udmFsdWU/LnRyaW0oKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdmFsdWUgPSByb3dzWzBdLnZhbHVlLnRyaW0oKTtcbiAgICBpZiAoISh2YWx1ZS5zdGFydHNXaXRoKCd7JykgfHwgdmFsdWUuc3RhcnRzV2l0aCgnWycpKSkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogVXBkYXRlIFBhcmFtcyB0YWJsZSBmcm9tIGN1cnJlbnQgVVJMIHF1ZXJ5IHN0cmluZyAoUG9zdG1hbi1zdHlsZSkuICovXG4gIHByaXZhdGUgc3luY1BhcmFtc0Zyb21VcmwoKTogdm9pZCB7XG4gICAgY29uc3QgeyBiYXNlVXJsOiBfYiwgcm93cyB9ID0gdGhpcy5wYXJzZVF1ZXJ5UGFyYW1zRnJvbVVybCh0aGlzLl91cmwpO1xuICAgIHRoaXMuYnVpbGRQYXJhbXNGb3JtQXJyYXkocm93cyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogVXBkYXRlIFVSTCBxdWVyeSBzdHJpbmcgZnJvbSBQYXJhbXMgdGFibGUgKFBvc3RtYW4tc3R5bGUpLiAqL1xuICBwcml2YXRlIHN5bmNVcmxGcm9tUGFyYW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmFtc1N5bmNpbmdGcm9tVXJsIHx8ICF0aGlzLnBhcmFtc0Zvcm1BcnJheSkgcmV0dXJuO1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmdldEJhc2VVcmwodGhpcy5fdXJsKTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMucGFyYW1zRm9ybUFycmF5LmNvbnRyb2xzKSB7XG4gICAgICBjb25zdCBrZXkgPSAoKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2tleScpPy52YWx1ZSA/PyAnJykudHJpbSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSAoYyBhcyBGb3JtR3JvdXApLmdldCgndmFsdWUnKT8udmFsdWUgPz8gJyc7XG4gICAgICBpZiAoa2V5ICE9PSAnJykgcGFyYW1zLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCBuZXdVcmwgPSBxdWVyeVN0cmluZyA/IGAke2Jhc2VVcmx9PyR7cXVlcnlTdHJpbmd9YCA6IGJhc2VVcmw7XG4gICAgaWYgKHRoaXMuX3VybCAhPT0gbmV3VXJsKSB7XG4gICAgICB0aGlzLl91cmwgPSBuZXdVcmw7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVmVyaWZpY2F0aW9uRm9ybUFycmF5KHJvd3M/OiB7IGpzb25QYXRoOiBzdHJpbmc7IHZlcmlmaWNhdGlvbjogc3RyaW5nOyBkYXRhVHlwZTogc3RyaW5nOyBleHBlY3RlZFZhbHVlOiBzdHJpbmcgfVtdKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFZlcmlmaWNhdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFZlcmlmaWNhdGlvbigpO1xuICAgIGNvbnN0IGRlZmF1bHREYXRhVHlwZSA9IHRoaXMuZ2V0RGVmYXVsdERhdGFUeXBlKCk7XG4gICAgY29uc3QgaW5pdGlhbCA9IHJvd3MgPz8gW3sganNvblBhdGg6ICcnLCB2ZXJpZmljYXRpb246IGRlZmF1bHRWZXJpZmljYXRpb24sIGRhdGFUeXBlOiBkZWZhdWx0RGF0YVR5cGUsIGV4cGVjdGVkVmFsdWU6ICcnIH1dO1xuICAgIGNvbnN0IGdyb3VwcyA9IGluaXRpYWwubWFwKChyKSA9PlxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGpzb25QYXRoOiBbci5qc29uUGF0aF0sXG4gICAgICAgIHZlcmlmaWNhdGlvbjogW3IudmVyaWZpY2F0aW9uXSxcbiAgICAgICAgZGF0YVR5cGU6IFtyLmRhdGFUeXBlXSxcbiAgICAgICAgZXhwZWN0ZWRWYWx1ZTogW3IuZXhwZWN0ZWRWYWx1ZV0sXG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KGdyb3Vwcyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5KHJvd3M/OiB7IHZlcmlmaWNhdGlvbjogc3RyaW5nOyBleHBlY3RlZFZhbHVlOiBzdHJpbmcgfVtdKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFZlcmlmaWNhdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFN0YXR1c1ZlcmlmaWNhdGlvbigpO1xuICAgIGNvbnN0IGluaXRpYWwgPSByb3dzID8/IFt7IHZlcmlmaWNhdGlvbjogZGVmYXVsdFZlcmlmaWNhdGlvbiwgZXhwZWN0ZWRWYWx1ZTogJycgfV07XG4gICAgY29uc3QgZ3JvdXBzID0gaW5pdGlhbC5tYXAoKHIpID0+XG4gICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgdmVyaWZpY2F0aW9uOiBbci52ZXJpZmljYXRpb25dLFxuICAgICAgICBleHBlY3RlZFZhbHVlOiBbci5leHBlY3RlZFZhbHVlXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoZ3JvdXBzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzRm9ybUFycmF5KHJvd3M6IEFwaUVkaXRIZWFkZXJSb3dbXSk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwcyA9IHJvd3MubWFwKChoKSA9PlxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFtoLm5hbWVdLFxuICAgICAgICB2YWx1ZTogW2gudmFsdWVdLFxuICAgICAgfSlcbiAgICApO1xuICAgIGlmICh0aGlzLmhlYWRlcnNGb3JtQXJyYXkpIHtcbiAgICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5jbGVhcigpO1xuICAgICAgZ3JvdXBzLmZvckVhY2goKGcpID0+IHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5wdXNoKGcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzRm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShncm91cHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNldCBhbGwgdGhyZWUgc3RlcHMgYW5kIGFsbCBlbnRlcmVkIGRhdGEgdG8gaW5pdGlhbC9kZWZhdWx0IHN0YXRlLiBVc2VkIHdoZW4gdXNlciBjYW5jZWxzIG9uIHN0ZXAgMS4gKi9cbiAgcHJpdmF0ZSByZXNldEFsbFN0ZXBzQW5kRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gMTtcblxuICAgIGNvbnN0IGZpcnN0TWV0aG9kVmFsdWUgPSB0aGlzLmh0dHBNZXRob2RPcHRpb25zPy5sZW5ndGhcbiAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodGhpcy5odHRwTWV0aG9kT3B0aW9uc1swXSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlZmF1bHRNZXRob2QgPSB0aGlzLmluaXRpYWxNZXRob2QgPz8gZmlyc3RNZXRob2RWYWx1ZSA/PyAnR0VUJztcbiAgICBjb25zdCBtZXRob2RWYWwgPSB0eXBlb2YgZGVmYXVsdE1ldGhvZCA9PT0gJ3N0cmluZycgPyBkZWZhdWx0TWV0aG9kIDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKGRlZmF1bHRNZXRob2QgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpO1xuICAgIHRoaXMuY3VycmVudE1ldGhvZFZhbHVlID0gbWV0aG9kVmFsID8/ICcnO1xuICAgIGlmICh0aGlzLm1ldGhvZEZvcm0pIHRoaXMubWV0aG9kRm9ybS5wYXRjaFZhbHVlKHsgbWV0aG9kOiBkZWZhdWx0TWV0aG9kIH0pO1xuXG4gICAgY29uc3QgZmlyc3RFbnZWYWx1ZSA9IHRoaXMuZW52aXJvbm1lbnRPcHRpb25zPy5sZW5ndGhcbiAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodGhpcy5lbnZpcm9ubWVudE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkZWZhdWx0RW52ID0gdGhpcy5pbml0aWFsRW52aXJvbm1lbnQgPz8gZmlyc3RFbnZWYWx1ZSA/PyAnRGV2ZWxvcG1lbnQnO1xuICAgIGNvbnN0IGVudlZhbCA9IHR5cGVvZiBkZWZhdWx0RW52ID09PSAnc3RyaW5nJyA/IGRlZmF1bHRFbnYgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUoZGVmYXVsdEVudiBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA/PyAnJyk7XG4gICAgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA9IGVudlZhbCA/PyAnJztcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudEZvcm0pIHRoaXMuZW52aXJvbm1lbnRGb3JtLnBhdGNoVmFsdWUoeyBlbnZpcm9ubWVudDogZGVmYXVsdEVudiB9KTtcblxuICAgIHRoaXMudXJsID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZGVjb2RlVXJsRm9yRGlzcGxheSh0aGlzLmluaXRpYWxVcmwgPz8gJycpIHx8ICcnO1xuICAgIHRoaXMuYnVpbGRIZWFkZXJzRm9ybUFycmF5KHRoaXMuaW5pdGlhbEhlYWRlcnMgPz8gW3sgbmFtZTogJycsIHR5cGU6ICdzdHJpbmcnLCB2YWx1ZTogJycgfV0pO1xuICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIHRoaXMuaGVhZGVyc0NoYW5nZS5lbWl0KHRoaXMuaGVhZGVycyk7XG5cbiAgICB0aGlzLmJvZHlWaWV3ID0gJ2hlYWRlcnMnO1xuICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdoZWFkZXJzJztcbiAgICB0aGlzLnBheWxvYWRUeXBlID0gJ3Jhdyc7XG4gICAgdGhpcy5wYXlsb2FkVGV4dCA9ICcnO1xuICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IG51bGw7XG4gICAgY29uc3QgZGVmYXVsdEZvcm1hdCA9IHRoaXMuaW5pdGlhbEZvcm1hdCA/PyB0aGlzLmdldEZvcm1hdFZhbHVlcygpWzBdID8/ICdqc29uJztcbiAgICBpZiAodGhpcy5wYXlsb2FkRm9ybWF0Rm9ybSkgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBkZWZhdWx0Rm9ybWF0IH0pO1xuICAgIHRoaXMuYnVpbGRLZXlWYWx1ZUZvcm1BcnJheSgpO1xuICAgIHRoaXMuYnVpbGRLZXlUeXBlVmFsdWVGb3JtQXJyYXkoKTtcbiAgICB0aGlzLmJ1aWxkUGFyYW1zRm9ybUFycmF5KCk7XG4gICAgdGhpcy5pbXBvcnRDdXJsQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgICB0aGlzLnZhcmlhYmxlTmFtZSA9ICcnO1xuICAgIHRoaXMudmFyaWFibGVOYW1lRXJyb3IgPSAnJztcbiAgICB0aGlzLnN1bW1hcnkgPSB0aGlzLmluaXRpYWxTdW1tYXJ5ID8/ICcnO1xuXG4gICAgdGhpcy5idWlsZFZlcmlmaWNhdGlvbkZvcm1BcnJheSgpO1xuICAgIHRoaXMuYnVpbGRTdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkoKTtcbiAgICB0aGlzLmFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiID0gJ3Jlc3BvbnNlLWJvZHknO1xuXG4gICAgdGhpcy52YWxpZGF0ZVBheWxvYWRKc29uKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXI6IHNob3cgaW1wb3J0IGNVUkwgcGFuZWwgKGNhbGxlZCB3aGVuIHVzZXIgY2xpY2tzIFwiSW1wb3J0IEFQSSBjVVJMXCIpLiBSZXNldHMgdGV4dGFyZWEgc28gaXQgaXMgY2xlYXJlZCBlYWNoIHRpbWUuICovXG4gIG9wZW5JbXBvcnRDdXJsUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pbXBvcnRDdXJsQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5ib2R5VmlldyA9ICdpbXBvcnQtY3VybCc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIFJlc2V0IFVSTCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5LCBhbmQgcGFyYW1zIHRvIGVtcHR5L2RlZmF1bHQgYmVmb3JlIGFwcGx5aW5nIGltcG9ydGVkIGNVUkwuICovXG4gIHByaXZhdGUgcmVzZXRSZXF1ZXN0RmllbGRzQmVmb3JlQ3VybEltcG9ydCgpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdE1ldGhvZFZhbHVlID0gdGhpcy5odHRwTWV0aG9kT3B0aW9ucz8ubGVuZ3RoXG4gICAgICA/IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuaHR0cE1ldGhvZE9wdGlvbnNbMF0pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkZWZhdWx0TWV0aG9kID0gdGhpcy5pbml0aWFsTWV0aG9kID8/IGZpcnN0TWV0aG9kVmFsdWUgPz8gJ0dFVCc7XG4gICAgdGhpcy5zZWxlY3RlZE1ldGhvZCA9IHR5cGVvZiBkZWZhdWx0TWV0aG9kID09PSAnc3RyaW5nJyA/IGRlZmF1bHRNZXRob2QgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUoZGVmYXVsdE1ldGhvZCBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA/PyAnJykgPz8gJ0dFVCc7XG4gICAgdGhpcy5jdXJyZW50TWV0aG9kVmFsdWUgPSB0aGlzLnNlbGVjdGVkTWV0aG9kO1xuICAgIGlmICh0aGlzLm1ldGhvZEZvcm0pIHRoaXMubWV0aG9kRm9ybS5wYXRjaFZhbHVlKHsgbWV0aG9kOiBkZWZhdWx0TWV0aG9kIH0pO1xuXG4gICAgdGhpcy51cmwgPSAnJztcblxuICAgIC8vIFJlc2V0IGF1dGggc28gYSBwcmV2aW91cyBCZWFyZXIgdG9rZW4gZG9lc24ndCBwZXJzaXN0IHdoZW4gcmUtaW1wb3J0aW5nXG4gICAgY29uc3QgZmlyc3RBdXRoVmFsdWUgPSB0aGlzLmdldEF1dGhUeXBlVmFsdWVzKClbMF0gPz8gJ25vLWF1dGgnO1xuICAgIGlmICh0aGlzLmF1dGhUeXBlRm9ybSkgdGhpcy5hdXRoVHlwZUZvcm0ucGF0Y2hWYWx1ZSh7IGF1dGhUeXBlOiBmaXJzdEF1dGhWYWx1ZSB9KTtcbiAgICB0aGlzLmJlYXJlclRva2VuID0gJyc7XG5cbiAgICB0aGlzLmJ1aWxkSGVhZGVyc0Zvcm1BcnJheShbeyBuYW1lOiAnJywgdHlwZTogJ3N0cmluZycsIHZhbHVlOiAnJyB9XSk7XG4gICAgdGhpcy51cGRhdGVIZWFkZXJOYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgdGhpcy5oZWFkZXJzQ2hhbmdlLmVtaXQodGhpcy5oZWFkZXJzKTtcblxuICAgIHRoaXMucGF5bG9hZFR5cGUgPSAncmF3JztcbiAgICB0aGlzLnBheWxvYWRUZXh0ID0gJyc7XG4gICAgdGhpcy5wYXlsb2FkSnNvbkVycm9yID0gbnVsbDtcbiAgICBjb25zdCBkZWZhdWx0Rm9ybWF0ID0gdGhpcy5pbml0aWFsRm9ybWF0ID8/IHRoaXMuZ2V0Rm9ybWF0VmFsdWVzKClbMF0gPz8gJ2pzb24nO1xuICAgIGlmICh0aGlzLnBheWxvYWRGb3JtYXRGb3JtKSB0aGlzLnBheWxvYWRGb3JtYXRGb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IGRlZmF1bHRGb3JtYXQgfSk7XG4gICAgdGhpcy5idWlsZEtleVZhbHVlRm9ybUFycmF5KFt7IGtleTogJycsIHZhbHVlOiAnJyB9XSk7XG4gICAgdGhpcy5idWlsZEtleVR5cGVWYWx1ZUZvcm1BcnJheShbeyBrZXk6ICcnLCB0eXBlOiAndGV4dCcsIHZhbHVlOiAnJyB9XSk7XG4gICAgdGhpcy5idWlsZFBhcmFtc0Zvcm1BcnJheShbeyBrZXk6ICcnLCB2YWx1ZTogJycgfV0pO1xuXG4gICAgdGhpcy52YWxpZGF0ZVBheWxvYWRKc29uKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXI6IHBhcnNlIGNVUkwgZnJvbSBjb250cm9sLCBiaW5kIHRvIGZvcm0gZmllbGRzLCBlbWl0IGFuZCBjbG9zZSBwYW5lbC4gKi9cbiAgb25JbXBvcnRDdXJsQ29uZmlybSgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW1wb3J0Q3VybENvbnRyb2wudmFsdWUgPz8gJyc7XG4gICAgY29uc3QgY3VybFN0ciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6ICcnO1xuICAgIHRoaXMuaW1wb3J0Q3VybC5lbWl0KGN1cmxTdHIpO1xuXG4gICAgdGhpcy5yZXNldFJlcXVlc3RGaWVsZHNCZWZvcmVDdXJsSW1wb3J0KCk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUN1cmwoY3VybFN0cik7XG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgLy8g4pSA4pSAIE1ldGhvZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIGNvbnN0IG1ldGhvZFZhbHVlID0gcGFyc2VkLm1ldGhvZCAmJiB0aGlzLmdldE1ldGhvZFZhbHVlcygpLmluY2x1ZGVzKHBhcnNlZC5tZXRob2QpXG4gICAgICAgID8gcGFyc2VkLm1ldGhvZFxuICAgICAgICA6IHBhcnNlZC5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICB0aGlzLnNlbGVjdGVkTWV0aG9kID0gbWV0aG9kVmFsdWU7XG4gICAgICB0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSA9IG1ldGhvZFZhbHVlO1xuXG4gICAgICAvLyDilIDilIAgVVJMIChhbHNvIHN5bmNzIFBhcmFtcyB0YWIgZnJvbSBxdWVyeSBzdHJpbmcpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgaWYgKHBhcnNlZC51cmwpIHRoaXMudXJsID0gcGFyc2VkLnVybDtcblxuICAgICAgLy8g4pSA4pSAIEF1dGhvcml6YXRpb24gaGVhZGVyIOKGkiBCZWFyZXIgVG9rZW4gLyBhdXRoIHR5cGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBsZXQgaGVhZGVyUm93czogQXBpRWRpdEhlYWRlclJvd1tdID0gcGFyc2VkLmhlYWRlcnM7XG4gICAgICBjb25zdCBhdXRoSGVhZGVyID0gaGVhZGVyUm93cy5maW5kKGggPT4gaC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRob3JpemF0aW9uJyk7XG4gICAgICBpZiAoYXV0aEhlYWRlcj8udmFsdWU/LnRyaW0oKSkge1xuICAgICAgICBjb25zdCBiZWFyZXJNYXRjaCA9IC9eQmVhcmVyXFxzKyguKykkL2kuZXhlYyhhdXRoSGVhZGVyLnZhbHVlLnRyaW0oKSk7XG4gICAgICAgIGlmIChiZWFyZXJNYXRjaCkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gYmVhcmVyTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICAgIGlmICh0aGlzLmdldEF1dGhUeXBlVmFsdWVzKCkuaW5jbHVkZXMoJ2JlYXJlcicpICYmIHRoaXMuYXV0aFR5cGVGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhUeXBlRm9ybS5wYXRjaFZhbHVlKHsgYXV0aFR5cGU6ICdiZWFyZXInIH0pO1xuICAgICAgICAgICAgdGhpcy5iZWFyZXJUb2tlbiA9IHRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZW1vdmUgQXV0aG9yaXphdGlvbiBmcm9tIGhlYWRlcnMgdGFibGUgKGl0IGxpdmVzIGluIHRoZSBBdXRoIHRhYilcbiAgICAgICAgICBoZWFkZXJSb3dzID0gaGVhZGVyUm93cy5maWx0ZXIoaCA9PiBoLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2F1dGhvcml6YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgSGVhZGVycyB0YWJsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIGhlYWRlclJvd3MgPSBoZWFkZXJSb3dzLmxlbmd0aCA+IDAgPyBoZWFkZXJSb3dzIDogW3sgbmFtZTogJycsIHR5cGU6ICdzdHJpbmcnLCB2YWx1ZTogJycgfV07XG4gICAgICB0aGlzLmJ1aWxkSGVhZGVyc0Zvcm1BcnJheShoZWFkZXJSb3dzKTtcbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgICAgdGhpcy5oZWFkZXJzQ2hhbmdlLmVtaXQodGhpcy5oZWFkZXJzKTtcblxuICAgICAgLy8g4pSA4pSAIERldGVybWluZSBDb250ZW50LVR5cGUgZm9yIGJvZHkvZm9ybWF0IGRlY2lzaW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkLmhlYWRlcnNcbiAgICAgICAgLmZpbmQoaCA9PiBoLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpXG4gICAgICAgID8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPz8gJyc7XG5cbiAgICAgIC8vIOKUgOKUgCBCb2R5IC8gRm9ybS1kYXRhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgbGV0IHRhYlRvQWN0aXZhdGU6IEFwaUVkaXRQYXlsb2FkVGFiID0gJ2hlYWRlcnMnO1xuXG4gICAgICBpZiAocGFyc2VkLmZvcm1EYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTXVsdGlwYXJ0IGZvcm0tZGF0YSAoLUYgLyAtLWZvcm0gZW50cmllcylcbiAgICAgICAgdGhpcy5wYXlsb2FkVHlwZSA9ICdmb3JtLWRhdGEnO1xuICAgICAgICB0aGlzLmJ1aWxkS2V5VHlwZVZhbHVlRm9ybUFycmF5KFxuICAgICAgICAgIHBhcnNlZC5mb3JtRGF0YS5tYXAoZSA9PiAoeyBrZXk6IGUua2V5LCB0eXBlOiBlLnR5cGUsIHZhbHVlOiBlLnZhbHVlIH0pKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBheWxvYWRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMucGF5bG9hZEpzb25FcnJvciA9IG51bGw7XG4gICAgICAgIHRhYlRvQWN0aXZhdGUgPSAnYm9keSc7XG5cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLmJvZHkpIHtcbiAgICAgICAgY29uc3QgaXNGb3JtVXJsRW5jb2RlZCA9IGNvbnRlbnRUeXBlLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcblxuICAgICAgICBpZiAoaXNGb3JtVXJsRW5jb2RlZCkge1xuICAgICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnBhcnNlRm9ybVVybEVuY29kZWRCb2R5KHBhcnNlZC5ib2R5KTtcbiAgICAgICAgICB0aGlzLmJ1aWxkS2V5VmFsdWVGb3JtQXJyYXkocm93cy5sZW5ndGggPiAwID8gcm93cyA6IFt7IGtleTogJycsIHZhbHVlOiAnJyB9XSk7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZEFzSnNvbiA9IHRoaXMudHJ5Rm9ybUJvZHlWYWx1ZUFzUmF3SnNvbihyb3dzKTtcbiAgICAgICAgICBpZiAoZGVjb2RlZEFzSnNvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnBheWxvYWRUeXBlID0gJ3Jhdyc7XG4gICAgICAgICAgICB0aGlzLnBheWxvYWRUZXh0ID0gZGVjb2RlZEFzSnNvbjtcbiAgICAgICAgICAgIGlmICh0aGlzLnBheWxvYWRGb3JtYXRGb3JtKSB0aGlzLnBheWxvYWRGb3JtYXRGb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6ICdqc29uJyB9KTtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuICAgICAgICAgICAgdGhpcy5wYXlsb2FkSnNvbkVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXlsb2FkVHlwZSA9ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICAgICAgICAgICAgdGhpcy5wYXlsb2FkVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5wYXlsb2FkSnNvbkVycm9yID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wYXlsb2FkVGV4dCA9IHBhcnNlZC5ib2R5O1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXlsb2FkSnNvbigpO1xuICAgICAgICAgIHRoaXMuYXBwbHlCb2R5Rm9ybWF0KHBhcnNlZC5ib2R5LCBjb250ZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFiVG9BY3RpdmF0ZSA9ICdib2R5JztcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIEF1dG8tc3dpdGNoIHRvIHRoZSBtb3N0IHJlbGV2YW50IHRhYiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIGlmICh0YWJUb0FjdGl2YXRlID09PSAnYm9keScpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVQYXlsb2FkVGFiID0gJ2JvZHknO1xuICAgICAgfSBlbHNlIGlmIChhdXRoSGVhZGVyPy52YWx1ZT8udHJpbSgpKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdhdXRob3JpemF0aW9uJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VJbXBvcnRDdXJsUGFuZWwoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVyOiBlbWl0IGNhbmNlbCBhbmQgY2xvc2UgcGFuZWwuIENhbGxlZCB3aGVuIHVzZXIgY2xpY2tzIENhbmNlbCBpbiBpbXBvcnQgY1VSTCBwYW5lbC4gKi9cbiAgb25DYW5jZWxJbXBvcnRDdXJsKCk6IHZvaWQge1xuICAgIHRoaXMuaW1wb3J0Q3VybENhbmNlbC5lbWl0KCk7XG4gICAgdGhpcy5jbG9zZUltcG9ydEN1cmxQYW5lbCgpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXI6IHNob3cgaGVhZGVycyBzZWN0aW9uIChjYWxsZWQgZnJvbSBDYW5jZWwgb3IgYWZ0ZXIgSW1wb3J0IGluIGltcG9ydCBwYW5lbCkuICovXG4gIGNsb3NlSW1wb3J0Q3VybFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuYm9keVZpZXcgPSAnaGVhZGVycyc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFVSTDogbXVzdCBiZSByZXF1aXJlZCBhbmQgbWF0Y2ggaHR0cC9odHRwcyBwYXR0ZXJuXG4gICAqIEFsc28gYWxsb3dzIHBhcmFtZXRlciBwbGFjZWhvbGRlcnMgbGlrZSBAfHBhcmFtTmFtZXxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVVcmwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXJsVmFsdWUgPSB0aGlzLnVybD8udHJpbSgpIHx8ICcnO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIFVSTCBpcyBlbXB0eVxuICAgIGlmICghdXJsVmFsdWUpIHtcbiAgICAgIHRoaXMudXJsRXJyb3IgPSAnVVJMIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHBhcmFtZXRlciBwbGFjZWhvbGRlciAoZm9ybWF0OiBAfHBhcmFtTmFtZXwpXG4gICAgY29uc3QgaXNQYXJhbWV0ZXJQbGFjZWhvbGRlciA9IC9eQFxcfFtefF0rXFx8JC8udGVzdCh1cmxWYWx1ZSk7XG4gICAgaWYgKGlzUGFyYW1ldGVyUGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMudXJsRXJyb3IgPSAnJztcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gYW4gZW52aXJvbm1lbnQgaXMgc2VsZWN0ZWQsIHNraXAgdGhlIGh0dHAvaHR0cHMgdmFsaWRhdGlvblxuICAgIC8vIGJlY2F1c2UgdGhlIFVSTCBtYXkgYmUgYSByZWxhdGl2ZSBwYXRoIG9yIHBhcmFtZXRlciB0aGF0IGdldHMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgZW52aXJvbm1lbnQgYmFzZSBVUkwuXG4gICAgY29uc3QgaGFzRW52aXJvbm1lbnQgPSB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlICE9IG51bGxcbiAgICAgICYmIHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgIT09ICcnXG4gICAgICAmJiB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlICE9PSAnbm9uZSc7XG5cbiAgICBpZiAoIWhhc0Vudmlyb25tZW50KSB7XG4gICAgICAvLyBDaGVjayBpZiBVUkwgbWF0Y2hlcyBodHRwIG9yIGh0dHBzIHBhdHRlcm5cbiAgICAgIGNvbnN0IHVybFBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC8uKy9pO1xuICAgICAgaWYgKCF1cmxQYXR0ZXJuLnRlc3QodXJsVmFsdWUpKSB7XG4gICAgICAgIHRoaXMudXJsRXJyb3IgPSAnVVJMIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vJztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb246IHRyeSB0byBjcmVhdGUgVVJMIG9iamVjdCB0byBlbnN1cmUgaXQncyB2YWxpZFxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IFVSTCh1cmxWYWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy51cmxFcnJvciA9ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBVUkwnO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cmxFcnJvciA9ICcnO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIFVSTCBpcyB2YWxpZCAoZm9yIGJ1dHRvbiBkaXNhYmxlZCBzdGF0ZSlcbiAgICovXG4gIGdldCBpc1VybFZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVybFZhbHVlID0gdGhpcy51cmw/LnRyaW0oKSB8fCAnJztcbiAgICBcbiAgICAvLyBFbXB0eSBVUkwgaXMgaW52YWxpZFxuICAgIGlmICghdXJsVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gUGFyYW1ldGVyIHBsYWNlaG9sZGVyIGlzIHZhbGlkXG4gICAgY29uc3QgaXNQYXJhbWV0ZXJQbGFjZWhvbGRlciA9IC9eQFxcfFtefF0rXFx8JC8udGVzdCh1cmxWYWx1ZSk7XG4gICAgaWYgKGlzUGFyYW1ldGVyUGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gYW4gZW52aXJvbm1lbnQgaXMgc2VsZWN0ZWQsIHNraXAgdGhlIGh0dHAvaHR0cHMgdmFsaWRhdGlvblxuICAgIGNvbnN0IGhhc0Vudmlyb25tZW50ID0gdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSAhPSBudWxsXG4gICAgICAmJiB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlICE9PSAnJ1xuICAgICAgJiYgdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSAhPT0gJ25vbmUnO1xuXG4gICAgaWYgKGhhc0Vudmlyb25tZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBNdXN0IG1hdGNoIGh0dHAvaHR0cHMgcGF0dGVyblxuICAgIGNvbnN0IHVybFBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC8uKy9pO1xuICAgIGlmICghdXJsUGF0dGVybi50ZXN0KHVybFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBjcmVhdGUgVVJMIG9iamVjdCB0byBlbnN1cmUgaXQncyB2YWxpZFxuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKHVybFZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgZGlzYWJsZWQgc3RhdGUgZm9yIHRoZSBTZW5kIFJlcXVlc3QgYnV0dG9uLiBVUkwgdmFsaWRpdHkgaXNcbiAgICogYWx3YXlzIHJlcXVpcmVkOyBpbiBHcmFwaFFMIG1vZGUgdGhlIFF1ZXJ5IGZpZWxkIG11c3QgYWxzbyBiZSBub24tYmxhbmtcbiAgICogKHdpdGhvdXQgaXQgdGhlIHJlcXVlc3QgYm9keSB3b3VsZCBiZSBgeyBxdWVyeTogXCJcIiB9YCwgd2hpY2ggdGhlIGVuZ2luZVxuICAgKiByZWplY3RzIHVwLWZyb250IGFueXdheSkuXG4gICAqL1xuICBnZXQgaXNTZW5kUmVxdWVzdERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc1VybFZhbGlkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5hY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCcpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gKCh0aGlzLmdyYXBoUUxGb3JtPy5nZXQoJ3F1ZXJ5Jyk/LnZhbHVlIGFzIHN0cmluZykgPz8gJycpLnRyaW0oKTtcbiAgICAgIGlmICghcXVlcnkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvblNlbmRSZXF1ZXN0KCk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIFVSTCBiZWZvcmUgc2VuZGluZyByZXF1ZXN0XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlVXJsKCkpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuc2VsZWN0ZWRFbnZpcm9ubWVudCAhPSBudWxsID8gU3RyaW5nKHRoaXMuc2VsZWN0ZWRFbnZpcm9ubWVudCkgOiAnJztcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLnNlbGVjdGVkTWV0aG9kICE9IG51bGwgPyBTdHJpbmcodGhpcy5zZWxlY3RlZE1ldGhvZCkgOiAnJztcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RlcDEgPSB0aGlzLmdldENyZWF0ZVBheWxvYWQoKS5zdGVwMTtcbiAgICAgIHRoaXMuc2VuZFJlcXVlc3QuZW1pdCh7XG4gICAgICAgIGVudmlyb25tZW50OiBzdGVwMS5lbnZpcm9ubWVudCA/PyBlbnZpcm9ubWVudCxcbiAgICAgICAgbWV0aG9kOiBzdGVwMS5tZXRob2QgPz8gbWV0aG9kLFxuICAgICAgICB1cmw6IHN0ZXAxLnVybCA/PyAodGhpcy51cmwgPz8gJycpLFxuICAgICAgICBoZWFkZXJzOiBzdGVwMS5oZWFkZXJzID8/IHRoaXMuaGVhZGVycyxcbiAgICAgICAgYXV0aFR5cGU6IHN0ZXAxLmF1dGhUeXBlLFxuICAgICAgICBiZWFyZXJUb2tlbjogc3RlcDEuYmVhcmVyVG9rZW4sXG4gICAgICAgIG9hdXRoMjogc3RlcDEub2F1dGgyLFxuICAgICAgICBwYXlsb2FkVHlwZTogc3RlcDEucGF5bG9hZFR5cGUsXG4gICAgICAgIHBheWxvYWRGb3JtYXQ6IHN0ZXAxLnBheWxvYWRGb3JtYXQsXG4gICAgICAgIHBheWxvYWRUZXh0OiBzdGVwMS5wYXlsb2FkVGV4dCxcbiAgICAgICAga2V5VmFsdWVSb3dzOiBzdGVwMS5rZXlWYWx1ZVJvd3MsXG4gICAgICAgIGtleVR5cGVWYWx1ZVJvd3M6IHN0ZXAxLmtleVR5cGVWYWx1ZVJvd3MsXG4gICAgICAgIHBhcmFtc1Jvd3M6IHN0ZXAxLnBhcmFtc1Jvd3MsXG4gICAgICAgIC4uLihzdGVwMS5hcGlUeXBlICYmIHsgYXBpVHlwZTogc3RlcDEuYXBpVHlwZSB9KSxcbiAgICAgICAgLi4uKHN0ZXAxLmdyYXBoUUwgJiYgeyBncmFwaFFMOiBzdGVwMS5ncmFwaFFMIH0pLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnNlbmRSZXF1ZXN0LmVtaXQoe1xuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmw6IHRoaXMudXJsID8/ICcnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgIGF1dGhUeXBlOiB0aGlzLnNlbGVjdGVkQXV0aFR5cGUsXG4gICAgICAgIGJlYXJlclRva2VuOiB0aGlzLmJlYXJlclRva2VuID8/ICcnLFxuICAgICAgICBwYXlsb2FkVHlwZTogdGhpcy5wYXlsb2FkVHlwZSxcbiAgICAgICAgcGF5bG9hZEZvcm1hdDogdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybT8uZ2V0KCdmb3JtYXQnKT8udmFsdWUgPz8gJycsXG4gICAgICAgIHBheWxvYWRUZXh0OiB0aGlzLnBheWxvYWRUZXh0ID8/ICcnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25WYXJpYWJsZU5hbWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy52YXJpYWJsZU5hbWVFcnJvciA9ICcnO1xuICB9XG5cbiAgb25CYWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwID4gMSkge1xuICAgICAgdGhpcy5zZXRTdGVwKHRoaXMuY3VycmVudFN0ZXAgLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldEFsbFN0ZXBzQW5kRGF0YSgpO1xuICAgICAgdGhpcy5iYWNrLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBjbGlja3MgdGhlIENhbmNlbCBidXR0b24gKHN0ZXAgMSkuIEVtaXRzIGNhbmNlbCB0aGVuIHJ1bnMgbm9ybWFsIGJhY2sgZmxvdy4gKi9cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIHRoaXMub25CYWNrKCk7XG4gIH1cblxuICBvbk5leHQoKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgVVJMIG9uIHN0ZXAgMVxuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwID09PSAxKSB7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVVcmwoKSkge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBWYWxpZGF0ZSB2YXJpYWJsZSBuYW1lIG9uIHN0ZXAgMlxuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwID09PSAyICYmICF0aGlzLnZhcmlhYmxlTmFtZT8udHJpbSgpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZUVycm9yID0gJ1ZhcmlhYmxlIE5hbWUgaXMgcmVxdWlyZWQuJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YXJpYWJsZU5hbWVFcnJvciA9ICcnO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwIDwgdGhpcy5zdGVwTGFiZWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRTdGVwKHRoaXMuY3VycmVudFN0ZXAgKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXh0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBzZXRQYXlsb2FkVGFiKHZhbHVlOiBBcGlFZGl0UGF5bG9hZFRhYik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBBUEkgVHlwZSBzZWdtZW50IHRvZ2dsZSAoUkVTVCDihpQgR3JhcGhRTCkuIFdoZW4gc3dpdGNoaW5nIHRvIEdyYXBoUUwgd2VcbiAgICoganVtcCB0byB0aGUgR3JhcGhRTCB0YWIgc28gdGhlIFF1ZXJ5IC8gVmFyaWFibGVzIC8gT3BlcmF0aW9uIE5hbWUgZmllbGRzIGFyZVxuICAgKiBpbW1lZGlhdGVseSB2aXNpYmxlLiBXaGVuIHN3aXRjaGluZyBiYWNrIHRvIFJFU1Qgd2UgbGFuZCBvbiBIZWFkZXJzIChSRVNUIGRlZmF1bHQpLlxuICAgKiBEaXNhYmxlZCBzZWdtZW50cyAoU09BUC9XZWJTb2NrZXQvZ1JQQykgY2Fubm90IGZpcmUgaGVyZSDigJQgYGNxYS1zZWdtZW50LWNvbnRyb2xgXG4gICAqIGJsb2NrcyB0aGUgY2xpY2sg4oCUIGJ1dCB3ZSBndWFyZCBhbnl3YXkgaW4gY2FzZSBhIGZ1dHVyZSBjYWxsZXIgYnlwYXNzZXMgdGhhdC5cbiAgICovXG4gIG9uQXBpVHlwZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSAncmVzdCcgJiYgdmFsdWUgIT09ICdncmFwaHFsJykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmFjdGl2ZUFwaVR5cGUgPT09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5hY3RpdmVBcGlUeXBlID0gdmFsdWUgYXMgQXBpRWRpdEFwaVR5cGU7XG4gICAgaWYgKHRoaXMuYWN0aXZlQXBpVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnZ3JhcGhxbCc7XG4gICAgICAvLyBSZS12YWxpZGF0ZSB2YXJpYWJsZXMgb24gZmlyc3Qgc3dpdGNoIOKAlCB0aGUgdGV4dGFyZWEgbWF5IGFscmVhZHkgaGF2ZSBjb250ZW50XG4gICAgICAvLyBmcm9tIGEgcHJldmlvdXMgZWRpdCBhbmQgd2Ugd2FudCB0aGUgaW5saW5lIGVycm9yIHRvIHN1cmZhY2UgaW1tZWRpYXRlbHkuXG4gICAgICB0aGlzLnZhbGlkYXRlR3JhcGhRTFZhcmlhYmxlcyhmYWxzZSk7XG4gICAgICB0aGlzLnJlY29tcHV0ZUdyYXBoUUxPcGVyYXRpb25XYXJuaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldHVybmluZyB0byBSRVNUIOKAlCBkcm9wIGFueSBHcmFwaFFMLW9ubHkgaW5saW5lIHN0YXRlIHNvIGl0IGRvZXNuJ3QgbGluZ2VyLlxuICAgICAgdGhpcy5ncmFwaFFMUXVlcnlFcnJvciA9ICcnO1xuICAgICAgdGhpcy5ncmFwaFFMVmFyaWFibGVzRXJyb3IgPSAnJztcbiAgICAgIHRoaXMuZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmcgPSAnJztcbiAgICAgIHRoaXMuYWN0aXZlUGF5bG9hZFRhYiA9ICdoZWFkZXJzJztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdGhlIFZhcmlhYmxlcyB0ZXh0YXJlYSBhcyBKU09OLiBFbXB0eSBzdHJpbmcgaXMgdmFsaWQgKD0gbm8gdmFyaWFibGVzKS5cbiAgICogU2V0cyBgZ3JhcGhRTFZhcmlhYmxlc0Vycm9yYCBmb3IgaW5saW5lIGRpc3BsYXk7IHJldHVybnMgdGhlIHBhcnNlZCBvYmplY3Qgb3JcbiAgICogdGhlIHJhdyBzdHJpbmcgd2hlbiB0aGUgdXNlciB0eXBlZCBzb21ldGhpbmcgbm9uLWVtcHR5IHRoYXQgZGlkbid0IHBhcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gc3RyaWN0IFdoZW4gdHJ1ZSAoY2FsbGVkIGZyb20gYG9uQ3JlYXRlYCksIGFuIGludmFsaWQgSlNPTiBibG9ja3Mgc2F2ZVxuICAgKiAgICAgICAgICAgICAgIOKAlCB3ZSBsZWF2ZSB0aGUgZXJyb3IgdmlzaWJsZSBhbmQgcmV0dXJuIGBudWxsYCB0byBzaWduYWwgYWJvcnQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlR3JhcGhRTFZhcmlhYmxlcyhzdHJpY3Q6IGJvb2xlYW4pOiB7IHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHN0cmluZyB8IHVuZGVmaW5lZDsgdmFsaWQ6IGJvb2xlYW4gfSB7XG4gICAgY29uc3QgcmF3ID0gKCh0aGlzLmdyYXBoUUxGb3JtPy5nZXQoJ3ZhcmlhYmxlcycpPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKS50cmltKCk7XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHRoaXMuZ3JhcGhRTFZhcmlhYmxlc0Vycm9yID0gJyc7XG4gICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCB2YWxpZDogdHJ1ZSB9O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgdGhpcy5ncmFwaFFMVmFyaWFibGVzRXJyb3IgPSAnJztcbiAgICAgIHJldHVybiB7IHZhbHVlOiBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHZhbGlkOiB0cnVlIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgdGhpcy5ncmFwaFFMVmFyaWFibGVzRXJyb3IgPSBgSW52YWxpZCBKU09OOiAke21lc3NhZ2V9YDtcbiAgICAgIC8vIEluIG5vbi1zdHJpY3QgbW9kZSAobGl2ZSB0eXBpbmcpIHdlIHN0aWxsIGVjaG8gYmFjayB0aGUgcmF3IHN0cmluZyBzbyB0aGUgcGFyZW50XG4gICAgICAvLyBjYW4gZGVjaWRlIHdoYXQgdG8gZG87IGluIHN0cmljdCBtb2RlIHRoZSBjYWxsZXIgY2hlY2tzIGB2YWxpZGAgdG8gYWJvcnQgc2F2ZS5cbiAgICAgIHJldHVybiB7IHZhbHVlOiBzdHJpY3QgPyB1bmRlZmluZWQgOiByYXcsIHZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3Qgd2hlbiB0aGUgR3JhcGhRTCBxdWVyeSBkZWNsYXJlcyAyKyBuYW1lZCBvcGVyYXRpb25zLiBHcmFwaFFMIHJlcXVpcmVzIHRoZVxuICAgKiBjbGllbnQgdG8gc3BlY2lmeSBgb3BlcmF0aW9uTmFtZWAgaW4gdGhhdCBjYXNlOyBhYnNlbmNlIGlzIGEgcnVudGltZSBlcnJvciwgbm90IGFcbiAgICogc3ludGF4IG9uZSwgc28gd2Ugc3VyZmFjZSBpdCBhcyBhIG5vbi1ibG9ja2luZyB3YXJuaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSByZWNvbXB1dGVHcmFwaFFMT3BlcmF0aW9uV2FybmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVBcGlUeXBlICE9PSAnZ3JhcGhxbCcgfHwgIXRoaXMuZ3JhcGhRTEZvcm0pIHtcbiAgICAgIHRoaXMuZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmcgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcXVlcnkgPSAoKHRoaXMuZ3JhcGhRTEZvcm0uZ2V0KCdxdWVyeScpPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKTtcbiAgICBjb25zdCBvcE5hbWUgPSAoKHRoaXMuZ3JhcGhRTEZvcm0uZ2V0KCdvcGVyYXRpb25OYW1lJyk/LnZhbHVlIGFzIHN0cmluZykgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIXF1ZXJ5LnRyaW0oKSB8fCBvcE5hbWUpIHtcbiAgICAgIHRoaXMuZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmcgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTWF0Y2ggYHF1ZXJ5YCwgYG11dGF0aW9uYCwgYHN1YnNjcmlwdGlvbmAgYXMgc3RhbmRhbG9uZSB0b2tlbnMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS5cbiAgICAvLyBTdHJpcCBibG9jay9saW5lIGNvbW1lbnRzIGZpcnN0IHNvIGNvbW1lbnRlZC1vdXQgb3BlcmF0aW9ucyBkb24ndCB0cmlwIHRoZSBjb3VudC5cbiAgICBjb25zdCBzdHJpcHBlZCA9IHF1ZXJ5XG4gICAgICAucmVwbGFjZSgvI1teXFxuXSovZywgJycpXG4gICAgICAucmVwbGFjZSgvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi9nLCAnJyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHN0cmlwcGVkLm1hdGNoKC9eW1xcc10qKHF1ZXJ5fG11dGF0aW9ufHN1YnNjcmlwdGlvbilcXGIvZ20pIHx8IFtdO1xuICAgIHRoaXMuZ3JhcGhRTE9wZXJhdGlvbldhcm5pbmcgPSBtYXRjaGVzLmxlbmd0aCA+PSAyXG4gICAgICA/ICdNdWx0aXBsZSBvcGVyYXRpb25zIGRldGVjdGVkIOKAlCBPcGVyYXRpb24gTmFtZSBpcyByZXF1aXJlZC4nXG4gICAgICA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIGhhbmRsZXIgZm9yIHRoZSBcIkxvYWQgU2NoZW1hXCIgYnV0dG9uIChHcmFwaFFMIG1vZGUgb25seSkuIFN3aXRjaGVzIHRoZSBib2R5IHZpZXdcbiAgICogdG8gdGhlIG9wZXJhdGlvbiBwaWNrZXIgQU5EIGVtaXRzIGBsb2FkU2NoZW1hYCBzbyB0aGUgcGFyZW50IGNhbiBmZXRjaCAvIHJlZnJlc2ggdGhlXG4gICAqIHNjaGVtYSBpbiB0aGUgYmFja2dyb3VuZC4gVGhlIHBpY2tlciByZW5kZXJzIHdoYXRldmVyIGBncmFwaFFMU2NoZW1hU291cmNlYCAvXG4gICAqIGBncmFwaFFMT3BlcmF0aW9uc2AgdGhlIHBhcmVudCBoYXMgc3VwcGxpZWQgYXQgYW55IGdpdmVuIHRpbWUg4oCUIGVtcHR5IHN0YXRlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBvbkxvYWRTY2hlbWEoKTogdm9pZCB7XG4gICAgdGhpcy5ib2R5VmlldyA9ICdncmFwaHFsLXNjaGVtYSc7XG4gICAgdGhpcy5sb2FkU2NoZW1hLmVtaXQoeyB1cmw6IHRoaXMudXJsID8/ICcnLCBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsIGVudmlyb25tZW50OiB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFBpY2tlciDihpIgYmFjazogZHJvcCB0aGUgcGlja2VyIHZpZXcgYW5kIHJldHVybiB0byB0aGUgaGVhZGVycy90YWJzIHBhbmVsLiAqL1xuICBvbkdyYXBoUUxQaWNrZXJCYWNrKCk6IHZvaWQge1xuICAgIHRoaXMuYm9keVZpZXcgPSAnaGVhZGVycyc7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogUGlja2VyIOKGkiByZS1pbnRyb3NwZWN0OiBmb3J3YXJkIHRvIHBhcmVudCBzbyBpdCBjYW4gcmVmZXRjaCB0aGUgc2NoZW1hLiAqL1xuICBvbkdyYXBoUUxQaWNrZXJSZUludHJvc3BlY3QoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkU2NoZW1hLmVtaXQoeyB1cmw6IHRoaXMudXJsID8/ICcnLCBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsIGVudmlyb25tZW50OiB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBpY2tlciDihpIgb3BlcmF0aW9uIHNlbGVjdGVkOiBwYXRjaCB0aGUgR3JhcGhRTCBmb3JtIChxdWVyeSAvIHZhcmlhYmxlcyAvIG9wZXJhdGlvbk5hbWUpXG4gICAqIGFuZCBwb3AgYmFjayB0byB0aGUgbWFpbiB2aWV3IHdpdGggdGhlIEdyYXBoUUwgdGFiIGFjdGl2ZSBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZVxuICAgKiBmaWxsZWQtaW4gZmllbGRzLlxuICAgKi9cbiAgb25HcmFwaFFMUGlja2VyT3BlcmF0aW9uU2VsZWN0ZWQob3A6IEdyYXBoUUxPcGVyYXRpb25PcHRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZ3JhcGhRTEZvcm0pIHtcbiAgICAgIHRoaXMuYm9keVZpZXcgPSAnaGVhZGVycyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB2YXJpYWJsZXNTdHJpbmcgPSAnJztcbiAgICBpZiAob3AudmFyaWFibGVzICE9IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhcmlhYmxlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KG9wLnZhcmlhYmxlcywgbnVsbCwgMik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdmFyaWFibGVzU3RyaW5nID0gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ3JhcGhRTEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBxdWVyeTogb3AucXVlcnkgPz8gJycsXG4gICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlc1N0cmluZyxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IG9wLm9wZXJhdGlvbk5hbWUgPz8gb3AubmFtZSA/PyAnJyxcbiAgICB9KTtcbiAgICB0aGlzLmdyYXBoUUxRdWVyeUVycm9yID0gJyc7XG4gICAgdGhpcy5ncmFwaFFMVmFyaWFibGVzRXJyb3IgPSAnJztcbiAgICB0aGlzLnJlY29tcHV0ZUdyYXBoUUxPcGVyYXRpb25XYXJuaW5nKCk7XG4gICAgLy8gRHJvcCBhbnkgc3RhbGUgcmVzcG9uc2UgZnJvbSBhIHByZXZpb3VzbHktcGlja2VkIG9wZXJhdGlvbi4gVGhlIG5leHQgU2VuZCBSZXF1ZXN0XG4gICAgLy8gd2lsbCBwb3B1bGF0ZSB0aGUgcHJldmlldyBhZ2Fpbi4gTm90ZTogbmdPbkNoYW5nZXMgb24gYGluaXRpYWxSZXNwb25zZVByZXZpZXdgIG9ubHlcbiAgICAvLyBzeW5jcyBub24tbnVsbCB2YWx1ZXMgZG93biwgc28gY2xlYXJpbmcgaGVyZSBkb2Vzbid0IGdldCBjbG9iYmVyZWQgd2hlbiB0aGUgcGFyZW50XG4gICAgLy8gYWxzbyBjbGVhcnMgaXRzIGBpbml0aWFsUmVzcG9uc2VQcmV2aWV3YCBmaWVsZC5cbiAgICB0aGlzLnJlc3BvbnNlUHJldmlldyA9ICcnO1xuICAgIHRoaXMuYWN0aXZlQXBpVHlwZSA9ICdncmFwaHFsJztcbiAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnZ3JhcGhxbCc7XG4gICAgdGhpcy5ib2R5VmlldyA9ICdoZWFkZXJzJztcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldFJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiKHZhbHVlOiAncmVzcG9uc2UtYm9keScgfCAnc3RhdHVzJyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIgPSB2YWx1ZTtcbiAgfVxuXG4gIGFkZEhlYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlcnNGb3JtQXJyYXkucHVzaChcbiAgICAgIHRoaXMuZmIuZ3JvdXAoeyBuYW1lOiBbJyddLCB2YWx1ZTogWycnXSB9KVxuICAgICk7XG4gIH1cblxuICByZW1vdmVIZWFkZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVyc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICAvKiogV2hlbiB1c2VyIGFkZHMgYSBjdXN0b20gaGVhZGVyIG5hbWUgdmlhIHRoZSBkcm9wZG93biBcIkFkZCAn4oCmJ1wiIG9wdGlvbiwgc2V0IHRoZSBjb250cm9sIHZhbHVlLiAqL1xuICBvbkhlYWRlck5hbWVBZGRDdXN0b21WYWx1ZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9LCByb3c6IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSByb3cuZ2V0KGV2ZW50LmtleSk7XG4gICAgaWYgKGNvbnRyb2wgJiYgZXZlbnQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShldmVudC52YWx1ZS50cmltKCkpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlIZWFkZXIoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgYWRkS2V5VmFsdWVSb3coKTogdm9pZCB7XG4gICAgdGhpcy5rZXlWYWx1ZUZvcm1BcnJheS5wdXNoKHRoaXMuZmIuZ3JvdXAoeyBrZXk6IFsnJ10sIHZhbHVlOiBbJyddIH0pKTtcbiAgfVxuXG4gIHJlbW92ZUtleVZhbHVlUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmtleVZhbHVlRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHRyYWNrQnlLZXlWYWx1ZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhZGRLZXlUeXBlVmFsdWVSb3coKTogdm9pZCB7XG4gICAgdGhpcy5rZXlUeXBlVmFsdWVGb3JtQXJyYXkucHVzaCh0aGlzLmZiLmdyb3VwKHsga2V5OiBbJyddLCB0eXBlOiBbJ3RleHQnXSwgdmFsdWU6IFsnJ10gfSkpO1xuICB9XG5cbiAgcmVtb3ZlS2V5VHlwZVZhbHVlUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmtleVR5cGVWYWx1ZUZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICB0cmFja0J5S2V5VHlwZVZhbHVlKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFkZFBhcmFtc1JvdygpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmFtc0Zvcm1BcnJheS5wdXNoKHRoaXMuZmIuZ3JvdXAoeyBrZXk6IFsnJ10sIHZhbHVlOiBbJyddIH0pKTtcbiAgfVxuXG4gIHJlbW92ZVBhcmFtc1JvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYXJhbXNGb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgdHJhY2tCeVBhcmFtcyhpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhZGRWZXJpZmljYXRpb25Sb3coKTogdm9pZCB7XG4gICAgdGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXkucHVzaChcbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBqc29uUGF0aDogWycnXSxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiBbdGhpcy5nZXREZWZhdWx0VmVyaWZpY2F0aW9uKCldLFxuICAgICAgICBkYXRhVHlwZTogW3RoaXMuZ2V0RGVmYXVsdERhdGFUeXBlKCldLFxuICAgICAgICBleHBlY3RlZFZhbHVlOiBbJyddLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlVmVyaWZpY2F0aW9uUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZlcmlmaWNhdGlvbkZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICB0cmFja0J5VmVyaWZpY2F0aW9uKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKiBXaGVuIERhdGEgVHlwZSBjaGFuZ2VzIGluIFJlc3BvbnNlIEJvZHkgdmVyaWZpY2F0aW9uLCByZXNldCBFeHBlY3RlZCBWYWx1ZSBmb3IgdGhhdCByb3cuICovXG4gIG9uVmVyaWZpY2F0aW9uRGF0YVR5cGVDaGFuZ2Uocm93OiBGb3JtR3JvdXAsIGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2RhdGFUeXBlJykge1xuICAgICAgcm93LmdldCgnZXhwZWN0ZWRWYWx1ZScpPy5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXR1c1ZlcmlmaWNhdGlvblJvdygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheS5wdXNoKFxuICAgICAgdGhpcy5mYi5ncm91cCh7IHZlcmlmaWNhdGlvbjogW3RoaXMuZ2V0RGVmYXVsdFN0YXR1c1ZlcmlmaWNhdGlvbigpXSwgZXhwZWN0ZWRWYWx1ZTogWycnXSB9KVxuICAgICk7XG4gIH1cblxuICByZW1vdmVTdGF0dXNWZXJpZmljYXRpb25Sb3coaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzVmVyaWZpY2F0aW9uRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHRyYWNrQnlTdGF0dXNWZXJpZmljYXRpb24oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHJlYWN0aXZlIGZvcm0gZm9yIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID1cbiAgICAgICAgdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgPyAodmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMSlcbiAgICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG5cbiAgICAgIGNvbnN0IHZhcmlhYmxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbmFtZTogW3ZhcmlhYmxlLm5hbWVdLFxuICAgICAgICB2YWx1ZTogW2RlZmF1bHRWYWx1ZV0sXG4gICAgICAgIHR5cGU6IFt2YXJpYWJsZS50eXBlIHx8ICdzdHJpbmcnXSxcbiAgICAgICAgbGFiZWw6IFt2YXJpYWJsZS5sYWJlbCB8fCAnJ11cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZHZhbmNlZCBib29sZWFuIGNoYW5nZXMgYW5kIGtlZXAgYm90aCBkYXRhIGFuZCBmb3JtIGluIHN5bmMuXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbm9uLWJvb2xlYW4gYWR2YW5jZWQgdmFsdWVzIChrZXB0IGZvciBBUEkgY29tcGF0aWJpbGl0eTsgY3VycmVudGx5IHVudXNlZCkuXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbWl0IGFsbCBlbnRlcmVkIGRldGFpbHMgKGVudmlyb25tZW50LCBIVFRQIG1ldGhvZCwgVVJMLCBoZWFkZXJzLCBib2R5LCBzdGVwMiB2YXJpYWJsZSwgc3RlcDMgdmVyaWZpY2F0aW9ucykgd2hlbiB1c2VyIGNsaWNrcyBDcmVhdGUuICovXG4gIG9uQ3JlYXRlKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCc5OTk5OTk5Jyk7XG5cbiAgICAvLyBHcmFwaFFMIG1vZGUgdmFsaWRhdGlvbjogcXVlcnkgaXMgcmVxdWlyZWQgKyBub24tYmxhbmssIHZhcmlhYmxlcyAoaWYgbm9uLWVtcHR5KSBtdXN0IGJlIHZhbGlkIEpTT04uXG4gICAgaWYgKHRoaXMuYWN0aXZlQXBpVHlwZSA9PT0gJ2dyYXBocWwnKSB7XG4gICAgICBjb25zdCBxdWVyeSA9ICgodGhpcy5ncmFwaFFMRm9ybT8uZ2V0KCdxdWVyeScpPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnKS50cmltKCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFF1ZXJ5RXJyb3IgPSAnUXVlcnkgaXMgcmVxdWlyZWQuJztcbiAgICAgICAgdGhpcy5hY3RpdmVQYXlsb2FkVGFiID0gJ2dyYXBocWwnO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy52YWxpZGF0ZUdyYXBoUUxWYXJpYWJsZXModHJ1ZSk7XG4gICAgICBpZiAoIXZhcmlhYmxlcy52YWxpZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSAnZ3JhcGhxbCc7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmdldENyZWF0ZVBheWxvYWQoKTtcbiAgICAgIGNvbnNvbGUubG9nKCc5OTk5OTk5IHBheWxvYWQnLCBwYXlsb2FkKTtcbiAgICAgIHRoaXMuY3JlYXRlLmVtaXQocGF5bG9hZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdBcGlFZGl0U3RlcCBnZXRDcmVhdGVQYXlsb2FkIGVycm9yOicsIGVycik7XG4gICAgICB0aGlzLmNyZWF0ZS5lbWl0KHRoaXMuZ2V0Q3JlYXRlUGF5bG9hZEZhbGxiYWNrKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNaW5pbWFsIHBheWxvYWQgd2hlbiBnZXRDcmVhdGVQYXlsb2FkIHRocm93cyAoc28gY3JlYXRlIGFsd2F5cyBlbWl0cykuICovXG4gIHByaXZhdGUgZ2V0Q3JlYXRlUGF5bG9hZEZhbGxiYWNrKCk6IEFwaUVkaXRDcmVhdGVQYXlsb2FkIHtcbiAgICBjb25zdCBhdXRoVHlwZSA9IHRoaXMuc2VsZWN0ZWRBdXRoVHlwZTtcbiAgICBjb25zdCBiZWFyZXJUb2tlbiA9IGF1dGhUeXBlID09PSAnYmVhcmVyJyA/ICh0aGlzLmJlYXJlclRva2VuID8/ICcnKSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgb2F1dGgyOiBBcGlFZGl0T0F1dGgyUGF5bG9hZCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoYXV0aFR5cGUgPT09ICdvYXV0aDInICYmIHRoaXMub2F1dGgyRm9ybSkge1xuICAgICAgY29uc3QgZ3JhbnRUeXBlID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0Q29udHJvbFZhbHVlKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2dyYW50VHlwZScpIGFzIHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwpO1xuICAgICAgY29uc3QgY2xpZW50QXV0aCA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldENvbnRyb2xWYWx1ZSh0aGlzLm9hdXRoMkZvcm0uZ2V0KCdjbGllbnRBdXRoZW50aWNhdGlvbicpIGFzIHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwpO1xuICAgICAgb2F1dGgyID0ge1xuICAgICAgICBncmFudFR5cGU6IGdyYW50VHlwZSAhPT0gJycgPyBncmFudFR5cGUgOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgICAgYWNjZXNzVG9rZW5Vcmw6ICh0aGlzLm9hdXRoMkZvcm0uZ2V0KCdhY2Nlc3NUb2tlblVybCcpPy52YWx1ZSA/PyAnJykgYXMgc3RyaW5nLFxuICAgICAgICBjbGllbnRJZDogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2NsaWVudElkJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIGNsaWVudFNlY3JldDogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2NsaWVudFNlY3JldCcpPy52YWx1ZSA/PyAnJykgYXMgc3RyaW5nLFxuICAgICAgICBzY29wZTogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ3Njb3BlJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uOiBjbGllbnRBdXRoICE9PSAnJyA/IGNsaWVudEF1dGggOiAnYmFzaWMnLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0ZXAxOiB7XG4gICAgICAgIHN1bW1hcnk6IHRoaXMuc3VtbWFyeT8udHJpbSgpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6ICcnLFxuICAgICAgICBtZXRob2Q6ICcnLFxuICAgICAgICB1cmw6IHRoaXMudXJsID8/ICcnLFxuICAgICAgICBoZWFkZXJzOiBbXSxcbiAgICAgICAgYXV0aFR5cGUsXG4gICAgICAgIC4uLihiZWFyZXJUb2tlbiAhPT0gdW5kZWZpbmVkICYmIHsgYmVhcmVyVG9rZW4gfSksXG4gICAgICAgIC4uLihvYXV0aDIgIT09IHVuZGVmaW5lZCAmJiB7IG9hdXRoMiB9KSxcbiAgICAgICAgYWN0aXZlUGF5bG9hZFRhYjogdGhpcy5hY3RpdmVQYXlsb2FkVGFiLFxuICAgICAgICBwYXlsb2FkVHlwZTogdGhpcy5wYXlsb2FkVHlwZSxcbiAgICAgICAgcGF5bG9hZEZvcm1hdDogJycsXG4gICAgICAgIHBheWxvYWRUZXh0OiB0aGlzLnBheWxvYWRUZXh0ID8/ICcnLFxuICAgICAgICBrZXlWYWx1ZVJvd3M6IFtdLFxuICAgICAgICBrZXlUeXBlVmFsdWVSb3dzOiBbXSxcbiAgICAgICAgcGFyYW1zUm93czogW10sXG4gICAgICB9LFxuICAgICAgc3RlcDI6IHsgdmFyaWFibGVOYW1lOiB0aGlzLnZhcmlhYmxlTmFtZSA/PyAnJyB9LFxuICAgICAgc3RlcDM6IHtcbiAgICAgICAgYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWI6IHRoaXMuYWN0aXZlUmVzcG9uc2VWZXJpZmljYXRpb25UYWIsXG4gICAgICAgIHJlc3BvbnNlQm9keVZlcmlmaWNhdGlvbnM6IFtdLFxuICAgICAgICBzdGF0dXNWZXJpZmljYXRpb25zOiBbXSxcbiAgICAgIH0sXG4gICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBOb3JtYWxpemUgZm9ybSBjb250cm9sIHZhbHVlIHRvIHN0cmluZyAoaGFuZGxlcyBvYmplY3Qgb3Igc3RyaW5nKS4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29udHJvbFZhbHVlKGNvbnRyb2w6IHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYgPSBjb250cm9sPy52YWx1ZTtcbiAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/IChBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh2IGFzIEVudmlyb25tZW50T3B0aW9uSW5wdXQpID8/ICcnKSA6IFN0cmluZyh2KTtcbiAgfVxuXG4gIC8qKiBCdWlsZCBmdWxsIGNyZWF0ZSBwYXlsb2FkOiBlbnZpcm9ubWVudCwgSFRUUCBtZXRob2QsIFVSTCwgaGVhZGVycywgYm9keSAoc3RlcDEpLCB2YXJpYWJsZSBuYW1lIChzdGVwMiksIHZlcmlmaWNhdGlvbnMgKHN0ZXAzKS4gKi9cbiAgcHJpdmF0ZSBnZXRDcmVhdGVQYXlsb2FkKCk6IEFwaUVkaXRDcmVhdGVQYXlsb2FkIHtcbiAgICBjb25zdCBlbnZGcm9tRm9ybSA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldENvbnRyb2xWYWx1ZSh0aGlzLmVudmlyb25tZW50Rm9ybT8uZ2V0KCdlbnZpcm9ubWVudCcpIGFzIHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwpO1xuICAgIGNvbnN0IGVudmlyb25tZW50ID1cbiAgICAgIGVudkZyb21Gb3JtICE9PSAnJyA/IGVudkZyb21Gb3JtIDogKHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgIT09ICcnID8gdGhpcy5jdXJyZW50RW52aXJvbm1lbnRWYWx1ZSA6IHRoaXMuc2VsZWN0ZWRFbnZpcm9ubWVudCk7XG4gICAgY29uc3QgbWV0aG9kRnJvbUZvcm0gPSBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRDb250cm9sVmFsdWUodGhpcy5tZXRob2RGb3JtPy5nZXQoJ21ldGhvZCcpIGFzIHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwpO1xuICAgIGNvbnN0IG1ldGhvZCA9XG4gICAgICBtZXRob2RGcm9tRm9ybSAhPT0gJycgPyBtZXRob2RGcm9tRm9ybSA6ICh0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSAhPT0gJycgPyB0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSA6IHRoaXMuc2VsZWN0ZWRNZXRob2QpO1xuICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMucGF5bG9hZEZvcm1hdEZvcm0/LmdldCgnZm9ybWF0Jyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGtleVZhbHVlRm9ybUFycmF5ID0gdGhpcy5rZXlWYWx1ZUZvcm1BcnJheTtcbiAgICBjb25zdCBrZXlWYWx1ZVJvd3MgPSAoa2V5VmFsdWVGb3JtQXJyYXk/LmNvbnRyb2xzID8/IFtdKS5tYXAoKGMpID0+ICh7XG4gICAgICBrZXk6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCdrZXknKT8udmFsdWUgPz8gJycsXG4gICAgICB2YWx1ZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZhbHVlJyk/LnZhbHVlID8/ICcnLFxuICAgIH0pKTtcbiAgICBjb25zdCBrZXlUeXBlVmFsdWVGb3JtQXJyYXkgPSB0aGlzLmtleVR5cGVWYWx1ZUZvcm1BcnJheTtcbiAgICBjb25zdCBrZXlUeXBlVmFsdWVSb3dzID0gKGtleVR5cGVWYWx1ZUZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pLm1hcCgoYykgPT4gKHtcbiAgICAgIGtleTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2tleScpPy52YWx1ZSA/PyAnJyxcbiAgICAgIHR5cGU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCd0eXBlJyk/LnZhbHVlID8/ICd0ZXh0JyxcbiAgICAgIHZhbHVlOiAoYyBhcyBGb3JtR3JvdXApLmdldCgndmFsdWUnKT8udmFsdWUgPz8gJycsXG4gICAgfSkpO1xuICAgIGNvbnN0IHBhcmFtc0Zvcm1BcnJheSA9IHRoaXMucGFyYW1zRm9ybUFycmF5O1xuICAgIGNvbnN0IHBhcmFtc1Jvd3MgPSAocGFyYW1zRm9ybUFycmF5Py5jb250cm9scyA/PyBbXSkubWFwKChjKSA9PiAoe1xuICAgICAga2V5OiAoYyBhcyBGb3JtR3JvdXApLmdldCgna2V5Jyk/LnZhbHVlID8/ICcnLFxuICAgICAgdmFsdWU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCd2YWx1ZScpPy52YWx1ZSA/PyAnJyxcbiAgICB9KSk7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uRm9ybUFycmF5ID0gdGhpcy52ZXJpZmljYXRpb25Gb3JtQXJyYXk7XG4gICAgY29uc3QgcmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9ucyA9ICh2ZXJpZmljYXRpb25Gb3JtQXJyYXk/LmNvbnRyb2xzID8/IFtdKS5tYXAoKGMpID0+ICh7XG4gICAgICBqc29uUGF0aDogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ2pzb25QYXRoJyk/LnZhbHVlID8/ICcnLFxuICAgICAgdmVyaWZpY2F0aW9uOiAoYyBhcyBGb3JtR3JvdXApLmdldCgndmVyaWZpY2F0aW9uJyk/LnZhbHVlID8/ICcnLFxuICAgICAgZGF0YVR5cGU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCdkYXRhVHlwZScpPy52YWx1ZSA/PyAnJyxcbiAgICAgIGV4cGVjdGVkVmFsdWU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnZhbHVlID8/ICcnLFxuICAgIH0pKTtcbiAgICBjb25zdCBzdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkgPSB0aGlzLnN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheTtcbiAgICBjb25zdCBzdGF0dXNWZXJpZmljYXRpb25zID0gKHN0YXR1c1ZlcmlmaWNhdGlvbkZvcm1BcnJheT8uY29udHJvbHMgPz8gW10pLm1hcCgoYykgPT4gKHtcbiAgICAgIHZlcmlmaWNhdGlvbjogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZlcmlmaWNhdGlvbicpPy52YWx1ZSA/PyAnJyxcbiAgICAgIGV4cGVjdGVkVmFsdWU6IChjIGFzIEZvcm1Hcm91cCkuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnZhbHVlID8/ICcnLFxuICAgIH0pKTtcbiAgICBjb25zdCBhdXRoVHlwZSA9IHRoaXMuc2VsZWN0ZWRBdXRoVHlwZTtcbiAgICBjb25zdCBiZWFyZXJUb2tlbiA9IGF1dGhUeXBlID09PSAnYmVhcmVyJyA/ICh0aGlzLmJlYXJlclRva2VuID8/ICcnKSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgb2F1dGgyOiBBcGlFZGl0T0F1dGgyUGF5bG9hZCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoYXV0aFR5cGUgPT09ICdvYXV0aDInICYmIHRoaXMub2F1dGgyRm9ybSkge1xuICAgICAgY29uc3QgZ3JhbnRUeXBlID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0Q29udHJvbFZhbHVlKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2dyYW50VHlwZScpIGFzIHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwpO1xuICAgICAgY29uc3QgY2xpZW50QXV0aCA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldENvbnRyb2xWYWx1ZSh0aGlzLm9hdXRoMkZvcm0uZ2V0KCdjbGllbnRBdXRoZW50aWNhdGlvbicpIGFzIHsgdmFsdWU6IHVua25vd24gfSB8IG51bGwpO1xuICAgICAgb2F1dGgyID0ge1xuICAgICAgICBncmFudFR5cGU6IGdyYW50VHlwZSAhPT0gJycgPyBncmFudFR5cGUgOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgICAgYWNjZXNzVG9rZW5Vcmw6ICh0aGlzLm9hdXRoMkZvcm0uZ2V0KCdhY2Nlc3NUb2tlblVybCcpPy52YWx1ZSA/PyAnJykgYXMgc3RyaW5nLFxuICAgICAgICBjbGllbnRJZDogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2NsaWVudElkJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIGNsaWVudFNlY3JldDogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ2NsaWVudFNlY3JldCcpPy52YWx1ZSA/PyAnJykgYXMgc3RyaW5nLFxuICAgICAgICBzY29wZTogKHRoaXMub2F1dGgyRm9ybS5nZXQoJ3Njb3BlJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmcsXG4gICAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uOiBjbGllbnRBdXRoICE9PSAnJyA/IGNsaWVudEF1dGggOiAnYmFzaWMnLFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gR3JhcGhRTCBleHRlbnNpb246IHdoZW4gaW4gR3JhcGhRTCBtb2RlLCBwYWNrYWdlIHRoZSBxdWVyeS92YXJpYWJsZXMvb3BlcmF0aW9uTmFtZSBpbnRvIGFcbiAgICAvLyBzaW5nbGUgc3ViLW9iamVjdCBhbmQgZW5zdXJlIENvbnRlbnQtVHlwZSBkZWZhdWx0cyB0byBhcHBsaWNhdGlvbi9qc29uIChlbmdpbmUgc2V0cyBpdCB0b28sXG4gICAgLy8gYnV0IHN1cmZhY2luZyBpdCBvbiB0aGUgaGVhZGVycyBsaXN0IGlzIGNsZWFuZXIgZm9yIHRoZSB1c2VyKS4gTWV0aG9kIGlzIGZvcmNlZCB0byBQT1NUIHNvXG4gICAgLy8gbGVnYWN5IFJFU1QtZmxhdm91cmVkIGRvd25zdHJlYW0gY29kZSBwYXRocyBrZWVwIHdvcmtpbmcgd2hlbiB0aGV5IHBlZWsgYXQgaXQuXG4gICAgY29uc3QgaXNHcmFwaFFMID0gdGhpcy5hY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCc7XG4gICAgbGV0IG91dHB1dEFwaVR5cGU6IEFwaUVkaXRBcGlUeXBlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBvdXRwdXRHcmFwaFFMOiBBcGlFZGl0R3JhcGhRTFBheWxvYWQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IG91dHB1dEhlYWRlcnMgPSB0aGlzLmhlYWRlcnM7XG4gICAgbGV0IG91dHB1dE1ldGhvZCA9IG1ldGhvZDtcbiAgICBpZiAoaXNHcmFwaFFMKSB7XG4gICAgICBvdXRwdXRBcGlUeXBlID0gJ2dyYXBocWwnO1xuICAgICAgY29uc3QgcXVlcnkgPSAoKHRoaXMuZ3JhcGhRTEZvcm0/LmdldCgncXVlcnknKT8udmFsdWUgYXMgc3RyaW5nKSA/PyAnJykudHJpbSgpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uTmFtZSA9ICgodGhpcy5ncmFwaFFMRm9ybT8uZ2V0KCdvcGVyYXRpb25OYW1lJyk/LnZhbHVlIGFzIHN0cmluZykgPz8gJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHZhcmlhYmxlc1Jlc3VsdCA9IHRoaXMudmFsaWRhdGVHcmFwaFFMVmFyaWFibGVzKGZhbHNlKTtcbiAgICAgIG91dHB1dEdyYXBoUUwgPSB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAuLi4odmFyaWFibGVzUmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyB2YXJpYWJsZXM6IHZhcmlhYmxlc1Jlc3VsdC52YWx1ZSB9KSxcbiAgICAgICAgLi4uKG9wZXJhdGlvbk5hbWUgJiYgeyBvcGVyYXRpb25OYW1lIH0pLFxuICAgICAgfTtcbiAgICAgIG91dHB1dE1ldGhvZCA9ICdQT1NUJztcbiAgICAgIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gb3V0cHV0SGVhZGVycy5zb21lKGggPT4gKGgubmFtZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKTtcbiAgICAgIGlmICghaGFzQ29udGVudFR5cGUpIHtcbiAgICAgICAgb3V0cHV0SGVhZGVycyA9IFt7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCAuLi5vdXRwdXRIZWFkZXJzXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RlcDE6IHtcbiAgICAgICAgc3VtbWFyeTogdGhpcy5zdW1tYXJ5Py50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbWV0aG9kOiBvdXRwdXRNZXRob2QsXG4gICAgICAgIHVybDogdGhpcy51cmwgPz8gJycsXG4gICAgICAgIGhlYWRlcnM6IG91dHB1dEhlYWRlcnMsXG4gICAgICAgIGF1dGhUeXBlLFxuICAgICAgICAuLi4oYmVhcmVyVG9rZW4gIT09IHVuZGVmaW5lZCAmJiB7IGJlYXJlclRva2VuIH0pLFxuICAgICAgICAuLi4ob2F1dGgyICE9PSB1bmRlZmluZWQgJiYgeyBvYXV0aDIgfSksXG4gICAgICAgIGFjdGl2ZVBheWxvYWRUYWI6IHRoaXMuYWN0aXZlUGF5bG9hZFRhYixcbiAgICAgICAgcGF5bG9hZFR5cGU6IHRoaXMucGF5bG9hZFR5cGUsXG4gICAgICAgIHBheWxvYWRGb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgcGF5bG9hZFRleHQ6IHRoaXMucGF5bG9hZFRleHQgPz8gJycsXG4gICAgICAgIGtleVZhbHVlUm93cyxcbiAgICAgICAga2V5VHlwZVZhbHVlUm93cyxcbiAgICAgICAgcGFyYW1zUm93cyxcbiAgICAgICAgLi4uKG91dHB1dEFwaVR5cGUgJiYgeyBhcGlUeXBlOiBvdXRwdXRBcGlUeXBlIH0pLFxuICAgICAgICAuLi4ob3V0cHV0R3JhcGhRTCAmJiB7IGdyYXBoUUw6IG91dHB1dEdyYXBoUUwgfSksXG4gICAgICB9LFxuICAgICAgc3RlcDI6IHtcbiAgICAgICAgdmFyaWFibGVOYW1lOiB0aGlzLnZhcmlhYmxlTmFtZSA/PyAnJyxcbiAgICAgIH0sXG4gICAgICBzdGVwMzoge1xuICAgICAgICBhY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYjogdGhpcy5hY3RpdmVSZXNwb25zZVZlcmlmaWNhdGlvblRhYixcbiAgICAgICAgcmVzcG9uc2VCb2R5VmVyaWZpY2F0aW9ucyxcbiAgICAgICAgc3RhdHVzVmVyaWZpY2F0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IGhlYWRlciByb3dzIGZyb20gZm9ybSAoZm9yIGNvbnN1bWVycyB0aGF0IHJlYWQgaGVhZGVycykgKi9cbiAgZ2V0IGhlYWRlcnMoKTogQXBpRWRpdEhlYWRlclJvd1tdIHtcbiAgICBpZiAoIXRoaXMuaGVhZGVyc0Zvcm1BcnJheSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLmhlYWRlcnNGb3JtQXJyYXkuY29udHJvbHMubWFwKChjKSA9PiAoe1xuICAgICAgbmFtZTogKGMgYXMgRm9ybUdyb3VwKS5nZXQoJ25hbWUnKT8udmFsdWUgPz8gJycsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIHZhbHVlOiAoYyBhcyBGb3JtR3JvdXApLmdldCgndmFsdWUnKT8udmFsdWUgPz8gJycsXG4gICAgfSkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsTWV0aG9kJ10/LmN1cnJlbnRWYWx1ZSAhPSBudWxsICYmIHRoaXMubWV0aG9kRm9ybSkge1xuICAgICAgY29uc3QgdiA9IGNoYW5nZXNbJ2luaXRpYWxNZXRob2QnXS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiAoQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodiBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KSA/PyAnJyk7XG4gICAgICB0aGlzLm1ldGhvZEZvcm0ucGF0Y2hWYWx1ZSh7IG1ldGhvZDogdiB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2h0dHBNZXRob2RPcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlTWV0aG9kU2VsZWN0Q29uZmlnKCk7XG4gICAgICBpZiAodGhpcy5tZXRob2RGb3JtICYmIHRoaXMuaHR0cE1ldGhvZE9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5tZXRob2RGb3JtLmdldCgnbWV0aG9kJyk/LnZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldE1ldGhvZFZhbHVlcygpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IHZhbHVlcy5pbmNsdWRlcyhjdXJyZW50KTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBBcGlFZGl0U3RlcENvbXBvbmVudC5nZXRPcHRpb25WYWx1ZSh0aGlzLmh0dHBNZXRob2RPcHRpb25zWzBdKTtcbiAgICAgICAgICBpZiAoZmlyc3RWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNZXRob2RWYWx1ZSA9IGZpcnN0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLm1ldGhvZEZvcm0ucGF0Y2hWYWx1ZSh7IG1ldGhvZDogZmlyc3RWYWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxFbnZpcm9ubWVudCddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCAmJiB0aGlzLmVudmlyb25tZW50Rm9ybSkge1xuICAgICAgY29uc3QgdiA9IGNoYW5nZXNbJ2luaXRpYWxFbnZpcm9ubWVudCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuY3VycmVudEVudmlyb25tZW50VmFsdWUgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogKEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHYgYXMgRW52aXJvbm1lbnRPcHRpb25JbnB1dCkgPz8gJycpO1xuICAgICAgdGhpcy5lbnZpcm9ubWVudEZvcm0ucGF0Y2hWYWx1ZSh7IGVudmlyb25tZW50OiB2IH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZW52aXJvbm1lbnRPcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlRW52aXJvbm1lbnRTZWxlY3RDb25maWcoKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50Rm9ybSAmJiB0aGlzLmVudmlyb25tZW50T3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmVudmlyb25tZW50Rm9ybS5nZXQoJ2Vudmlyb25tZW50Jyk/LnZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEVudmlyb25tZW50VmFsdWVzKCk7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsdWVzLmluY2x1ZGVzKGN1cnJlbnQpO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IEFwaUVkaXRTdGVwQ29tcG9uZW50LmdldE9wdGlvblZhbHVlKHRoaXMuZW52aXJvbm1lbnRPcHRpb25zWzBdKTtcbiAgICAgICAgICBpZiAoZmlyc3RWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnZpcm9ubWVudFZhbHVlID0gZmlyc3RWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRGb3JtLnBhdGNoVmFsdWUoeyBlbnZpcm9ubWVudDogZmlyc3RWYWx1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2hhc01vcmVFbnZpcm9ubWVudHMnXSB8fCBjaGFuZ2VzWydpc0xvYWRpbmdFbnZpcm9ubWVudHMnXSkge1xuICAgICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudFNlbGVjdENvbmZpZygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbEF1dGhUeXBlJ10/LmN1cnJlbnRWYWx1ZSAhPSBudWxsICYmIHRoaXMuYXV0aFR5cGVGb3JtKSB7XG4gICAgICBjb25zdCB2ID0gY2hhbmdlc1snaW5pdGlhbEF1dGhUeXBlJ10uY3VycmVudFZhbHVlO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPVxuICAgICAgICB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUodiBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KTtcbiAgICAgIGlmIChyZXNvbHZlZCAhPSBudWxsKSB0aGlzLmF1dGhUeXBlRm9ybS5wYXRjaFZhbHVlKHsgYXV0aFR5cGU6IHYgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydpbml0aWFsT0F1dGgyJ10/LmN1cnJlbnRWYWx1ZSAhPSBudWxsICYmIHRoaXMub2F1dGgyRm9ybSkge1xuICAgICAgY29uc3QgdiA9IGNoYW5nZXNbJ2luaXRpYWxPQXV0aDInXS5jdXJyZW50VmFsdWUgYXMgQXBpRWRpdE9BdXRoMlBheWxvYWQ7XG4gICAgICB0aGlzLm9hdXRoMkZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGdyYW50VHlwZTogdi5ncmFudFR5cGUgPz8gJ2NsaWVudF9jcmVkZW50aWFscycsXG4gICAgICAgIGFjY2Vzc1Rva2VuVXJsOiB2LmFjY2Vzc1Rva2VuVXJsID8/ICcnLFxuICAgICAgICBjbGllbnRJZDogdi5jbGllbnRJZCA/PyAnJyxcbiAgICAgICAgY2xpZW50U2VjcmV0OiB2LmNsaWVudFNlY3JldCA/PyAnJyxcbiAgICAgICAgc2NvcGU6IHYuc2NvcGUgPz8gJycsXG4gICAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uOiB2LmNsaWVudEF1dGhlbnRpY2F0aW9uID8/ICdiYXNpYycsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2F1dGhUeXBlT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUF1dGhUeXBlU2VsZWN0Q29uZmlnKCk7XG4gICAgICBpZiAodGhpcy5hdXRoVHlwZUZvcm0pIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRBdXRoVHlwZVZhbHVlcygpO1xuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5hdXRoVHlwZUZvcm0uZ2V0KCdhdXRoVHlwZScpPy52YWx1ZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsID1cbiAgICAgICAgICAgIGN1cnJlbnQgIT0gbnVsbCAmJiBjdXJyZW50ICE9PSAnJ1xuICAgICAgICAgICAgICA/IHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gQXBpRWRpdFN0ZXBDb21wb25lbnQuZ2V0T3B0aW9uVmFsdWUoY3VycmVudCBhcyBFbnZpcm9ubWVudE9wdGlvbklucHV0KVxuICAgICAgICAgICAgICAgIDogU3RyaW5nKGN1cnJlbnQpXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGN1cnJlbnRWYWwgIT0gbnVsbCAmJiB2YWx1ZXMuaW5jbHVkZXMoY3VycmVudFZhbCk7XG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IHZhbHVlc1swXTtcbiAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRoVHlwZUZvcm0ucGF0Y2hWYWx1ZSh7IGF1dGhUeXBlOiBmaXJzdFZhbHVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXAnXSkge1xuICAgICAgdGhpcy5hcHBseUluaXRpYWxTdGVwKGNoYW5nZXNbJ2luaXRpYWxTdGVwJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxVcmwnXT8uY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMudXJsID0gQXBpRWRpdFN0ZXBDb21wb25lbnQuZGVjb2RlVXJsRm9yRGlzcGxheShjaGFuZ2VzWydpbml0aWFsVXJsJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxQYXlsb2FkVGFiJ10/LmN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBheWxvYWRUYWIgPSBjaGFuZ2VzWydpbml0aWFsUGF5bG9hZFRhYiddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2hlYWRlck5hbWVPcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbEhlYWRlcnMnXT8uY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuYnVpbGRIZWFkZXJzRm9ybUFycmF5KGNoYW5nZXNbJ2luaXRpYWxIZWFkZXJzJ10uY3VycmVudFZhbHVlIGFzIEFwaUVkaXRIZWFkZXJSb3dbXSk7XG4gICAgICB0aGlzLnVwZGF0ZUhlYWRlck5hbWVTZWxlY3RDb25maWcoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxSZXNwb25zZVByZXZpZXcnXT8uY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCc5OTk5OTk5IGluaXRpYWxSZXNwb25zZVByZXZpZXcnLCB0aGlzLmluaXRpYWxSZXNwb25zZVByZXZpZXcpO1xuICAgICAgdGhpcy5yZXNwb25zZVByZXZpZXcgPSBjaGFuZ2VzWydpbml0aWFsUmVzcG9uc2VQcmV2aWV3J10uY3VycmVudFZhbHVlO1xuICAgICAgLy8gV2hlbiBhIG5ldyByZXNwb25zZSBwcmV2aWV3IGlzIHByb3ZpZGVkIChhZnRlciBTZW5kIFJlcXVlc3QpLCBzY3JvbGwgcHJldmlldyBzZWN0aW9uIGludG8gdmlld1xuICAgICAgdGhpcy5zY3JvbGxQcmV2aWV3SW50b1ZpZXcoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxGb3JtYXQnXT8uY3VycmVudFZhbHVlICE9IG51bGwgJiYgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybSkge1xuICAgICAgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBjaGFuZ2VzWydpbml0aWFsRm9ybWF0J10uY3VycmVudFZhbHVlIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFZhcmlhYmxlTmFtZSddPy5jdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy52YXJpYWJsZU5hbWUgPSBjaGFuZ2VzWydpbml0aWFsVmFyaWFibGVOYW1lJ10uY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN1bW1hcnknXT8uY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IGNoYW5nZXNbJ2luaXRpYWxTdW1tYXJ5J10uY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZm9ybWF0T3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVBheWxvYWRGb3JtYXRTZWxlY3RDb25maWcoKTtcbiAgICAgIGlmICh0aGlzLnBheWxvYWRGb3JtYXRGb3JtKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnBheWxvYWRGb3JtYXRGb3JtLmdldCgnZm9ybWF0Jyk/LnZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldEZvcm1hdFZhbHVlcygpO1xuICAgICAgICBjb25zdCB2YWxpZCA9IHZhbHVlcy5pbmNsdWRlcyhjdXJyZW50KTtcbiAgICAgICAgaWYgKCF2YWxpZCAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0VmFsdWUgPSB2YWx1ZXNbMF07XG4gICAgICAgICAgdGhpcy5wYXlsb2FkRm9ybWF0Rm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmaXJzdFZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd2ZXJpZmljYXRpb25PcHRpb25zJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlVmVyaWZpY2F0aW9uU2VsZWN0Q29uZmlnKCk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZlcmlmaWNhdGlvblZhbHVlcygpO1xuICAgICAgY29uc3QgZGVmYXVsdFZlcmlmaWNhdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFZlcmlmaWNhdGlvbigpO1xuICAgICAgaWYgKHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5ICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gKGNvbnRyb2wgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZlcmlmaWNhdGlvbicpPy52YWx1ZTtcbiAgICAgICAgICBpZiAoY3VycmVudCAmJiAhdmFsdWVzLmluY2x1ZGVzKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAoY29udHJvbCBhcyBGb3JtR3JvdXApLnBhdGNoVmFsdWUoeyB2ZXJpZmljYXRpb246IGRlZmF1bHRWZXJpZmljYXRpb24gfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3ZlcmlmaWNhdGlvbkRhdGFUeXBlT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZlcmlmaWNhdGlvbkRhdGFUeXBlU2VsZWN0Q29uZmlnKCk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldERhdGFUeXBlVmFsdWVzKCk7XG4gICAgICBjb25zdCBkZWZhdWx0RGF0YVR5cGUgPSB0aGlzLmdldERlZmF1bHREYXRhVHlwZSgpO1xuICAgICAgaWYgKHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5ICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudmVyaWZpY2F0aW9uRm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gKGNvbnRyb2wgYXMgRm9ybUdyb3VwKS5nZXQoJ2RhdGFUeXBlJyk/LnZhbHVlO1xuICAgICAgICAgIGlmIChjdXJyZW50ICYmICF2YWx1ZXMuaW5jbHVkZXMoY3VycmVudCkpIHtcbiAgICAgICAgICAgIChjb250cm9sIGFzIEZvcm1Hcm91cCkucGF0Y2hWYWx1ZSh7IGRhdGFUeXBlOiBkZWZhdWx0RGF0YVR5cGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3N0YXR1c1ZlcmlmaWNhdGlvbk9wdGlvbnMnXSkge1xuICAgICAgdGhpcy51cGRhdGVTdGF0dXNWZXJpZmljYXRpb25TZWxlY3RDb25maWcoKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0U3RhdHVzVmVyaWZpY2F0aW9uVmFsdWVzKCk7XG4gICAgICBjb25zdCBkZWZhdWx0VmVyaWZpY2F0aW9uID0gdGhpcy5nZXREZWZhdWx0U3RhdHVzVmVyaWZpY2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy5zdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zdGF0dXNWZXJpZmljYXRpb25Gb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSAoY29udHJvbCBhcyBGb3JtR3JvdXApLmdldCgndmVyaWZpY2F0aW9uJyk/LnZhbHVlO1xuICAgICAgICAgIGlmIChjdXJyZW50ICYmICF2YWx1ZXMuaW5jbHVkZXMoY3VycmVudCkpIHtcbiAgICAgICAgICAgIChjb250cm9sIGFzIEZvcm1Hcm91cCkucGF0Y2hWYWx1ZSh7IHZlcmlmaWNhdGlvbjogZGVmYXVsdFZlcmlmaWNhdGlvbiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTbW9vdGhseSBzY3JvbGxzIHRoZSByZXNwb25zZSBwcmV2aWV3IHNlY3Rpb24gaW50byB2aWV3IHdpdGhpbiB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIuXG4gICAqIENhbGxlZCB3aGVuIGEgZnJlc2ggcmVzcG9uc2UgcHJldmlldyB2YWx1ZSBpcyBzZXQgZnJvbSB0aGUgcGFyZW50IChBUEkgYnVpbGRlcikuXG4gICAqL1xuICBwcml2YXRlIHNjcm9sbFByZXZpZXdJbnRvVmlldygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzcG9uc2VQcmV2aWV3UmVmIHx8ICF0aGlzLnJlc3BvbnNlUHJldmlld1JlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzcG9uc2VQcmV2aWV3UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnc3RhcnQnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGYWxsYmFjazogbWFudWFsbHkgYWRqdXN0IGNsb3Nlc3Qgc2Nyb2xsYWJsZSBwYXJlbnQgaWYgbmVlZGVkXG4gICAgICBjb25zdCBlbCA9IHRoaXMucmVzcG9uc2VQcmV2aWV3UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzY3JvbGxQYXJlbnQgPSBlbC5jbG9zZXN0KCcuY3FhLWFwaS1lZGl0LXN0ZXAtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgaWYgKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSBlbC5vZmZzZXRUb3AgLSAxNjsgLy8gc21hbGwgcGFkZGluZ1xuICAgICAgICBzY3JvbGxQYXJlbnQuc2Nyb2xsVG8oeyB0b3A6IG9mZnNldFRvcCA8IDAgPyAwIDogb2Zmc2V0VG9wLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtY29udGFpbmVyIGNxYS1iZy1bI2ZmZmZmZl0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGwgY3FhLWgtZnVsbCBjcWEtcC1bMTZweF0gY3FhLWdhcC1bMTJweF0gY3FhLW92ZXJmbG93LXktYXV0byBjcWEtb3ZlcmZsb3cteC1oaWRkZW4gY3FhLWJveC1ib3JkZXJcIj5cblxuICA8aDIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC10aXRsZSBjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwMDAwMDBdIGNxYS1tLTBcIj5cbiAgICB7eyBlZGl0TW9kZSA/ICdVcGRhdGUgQVBJIFRlc3QgU3RlcCcgOiAnQ3JlYXRlIEFQSSBUZXN0IFN0ZXAnIH19XG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWluZGljYXRvciBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMCBjcWEtbWF4LVs3NjdweF06Y3FhLWZsZXgtd3JhcCBjcWEtbWF4LVs3NjdweF06Y3FhLWdhcC0yIGNxYS1tYXgtWzc2N3B4XTpjcWEtanVzdGlmeS1zdGFydFwiXG4gICAgW2NsYXNzLmNxYS1qdXN0aWZ5LXN0YXJ0XT1cInN0ZXBMYWJlbHMubGVuZ3RoID09PSAxXCJcbiAgICBbY2xhc3MuY3FhLWp1c3RpZnktYmV0d2Vlbl09XCJzdGVwTGFiZWxzLmxlbmd0aCAhPT0gMVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcExhYmVsczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbmRpY2F0b3ItaXRlbSBjcWEtYXBpLWVkaXQtc3RlcC1pbmRpY2F0b3ItaXRlbS0tY2xpY2thYmxlIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bMTBweF0gY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1mb250LWluaGVyaXQgY3FhLXRleHQtaW5oZXJpdCBjcWEtdGV4dC1sZWZ0ICFjcWEtYmctdHJhbnNwYXJlbnRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTdGVwICcgKyBzdGVwLmluZGV4ICsgJzogJyArIHN0ZXAubGFiZWxcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwic3RlcC5pbmRleCA9PT0gY3VycmVudFN0ZXBcIlxuICAgICAgICAoY2xpY2tlZCk9XCJzZXRTdGVwKHN0ZXAuaW5kZXgpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW5kaWNhdG9yLWNpcmNsZSBjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQtZnVsbCBjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJvcmRlci1ub25lIGNxYS1zaHJpbmstMFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic3RlcC5pbmRleCA9PT0gY3VycmVudFN0ZXAgPyAnY3FhLWJnLVsjNEY0NkU1XSBjcWEtdGV4dC13aGl0ZScgOiAnY3FhLWJnLVsjRTBFMEUwXSBjcWEtdGV4dC1bIzY2NjY2Nl0nXCI+XG4gICAgICAgICAge3sgc3RlcC5pbmRleCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW5kaWNhdG9yLWxhYmVsIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOHB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLW1heC1bNzY3cHhdOmNxYS10ZXh0LXhzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJzdGVwLmluZGV4ID09PSBjdXJyZW50U3RlcCA/ICdjcWEtdGV4dC1bIzRGNDZFNV0nIDogJ2NxYS10ZXh0LVsjNjY2NjY2XSdcIj5cbiAgICAgICAgICB7eyBzdGVwLmxhYmVsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImkgPCBzdGVwTGFiZWxzLmxlbmd0aCAtIDFcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWluZGljYXRvci1saW5lIGNxYS13LVs5NnB4XSBjcWEtaC1bMnB4XSBjcWEtYmctWyNFMEUwRTBdIGNxYS1teS0wIGNxYS1teC1bNnB4XSBjcWEtc2hyaW5rLTAgY3FhLXNlbGYtY2VudGVyIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1bMjRweF0gY3FhLW1heC1bNzY3cHhdOmNxYS1teC0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU3RlcCBjb250ZW50IHZpZXdwb3J0OiBvbmx5IHRoZSBhY3RpdmUgc3RlcCBib2R5IGlzIHNob3duICgqbmdJZikgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12aWV3cG9ydCBjcWEtdy1mdWxsXCI+XG4gICAgPCEtLSBTdGVwIDE6IEVudmlyb25tZW50LCByZXF1ZXN0LCBib2R5LCByZXNwb25zZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IDFcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBhbmVsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTYgY3FhLWJveC1ib3JkZXIgY3FhLXctZnVsbFwiPlxuICAgICAgICA8IS0tIEFQSSBUeXBlIHNlZ21lbnQ6IFJFU1QgQVBJIChkZWZhdWx0KSB8IEdyYXBoUUwgfCBTT0FQL1dlYlNvY2tldC9nUlBDIChkaXNhYmxlZCkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hcGktdHlwZS1yb3cgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYXBpLXR5cGUtbGFiZWwgY3FhLW0tMCBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWxcIj5BUEkgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1zZWdtZW50LWNvbnRyb2xcbiAgICAgICAgICAgIFt2YWx1ZV09XCJhY3RpdmVBcGlUeXBlXCJcbiAgICAgICAgICAgIFtzZWdtZW50c109XCJhcGlUeXBlU2VnbWVudHNcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQXBpVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYXBpLXR5cGUtc2VnbWVudFwiPlxuICAgICAgICAgIDwvY3FhLXNlZ21lbnQtY29udHJvbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBTdW1tYXJ5IGZpZWxkOiBsYWJlbCBvbiB0b3AsIGlucHV0IGJlbG93IChhYm92ZSBFbnZpcm9ubWVudCkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1zdW1tYXJ5LXJvdyBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLWl0ZW1zLXN0cmV0Y2hcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1zdW1tYXJ5LWxhYmVsIGNxYS1tLTAgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdHJhY2tpbmctbm9ybWFsXCI+U3VtbWFyeTwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgWyh2YWx1ZSldPVwic3VtbWFyeVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJydcIiBwbGFjZWhvbGRlcj1cIkVudGVyIFJlcXVlc3Qgc3VtbWFyeVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJtZFwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJTdW1tYXJ5XCI+XG4gICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSBFbnZpcm9ubWVudCByb3c6IGxhYmVsIG9uIHRvcCwgc2VsZWN0IGJlbG93IChhbGlnbmVkIHJpZ2h0IG9uIGRlc2t0b3ApIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtZW52aXJvbm1lbnQtcm93IGNxYS1mbGV4IGNxYS1qdXN0aWZ5LWVuZCBjcWEtZ2FwLTEuNSBjcWEtaXRlbXMtZW5kIGNxYS1tYXgtWzc2N3B4XTpjcWEtaXRlbXMtc3RyZXRjaFwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXVybC13cmFwIGNxYS1mbGV4LTEgY3FhLW1pbi13LVsyMDBweF0gY3FhLW1heC1bNzY3cHhdOmNxYS1taW4tdy0wIGNxYS1tYXgtWzc2N3B4XTpjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICBbdmFsdWVdPVwidXJsXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInVybCA9ICRldmVudFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInVybE9wdGlvbnNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidXJsUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJFbnRlciBVUkwgb3Igc2VsZWN0IFBhcmFtZXRlclwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvcHRpb25TZWxlY3QpPVwib25VcmxPcHRpb25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9jcWEtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVybEVycm9yXCIgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNjAwIGNxYS10ZXh0LXNtIGNxYS1tdC0xXCI+XG4gICAgICAgICAgICAgIHt7IHVybEVycm9yIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1heC1bNzY3cHhdOmNxYS1pdGVtcy1zdHJldGNoXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1lbnZpcm9ubWVudC1sYWJlbCBjcWEtbS0wIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbFwiPkVudmlyb25tZW50czwvbGFiZWw+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0ICpuZ0lmPVwiZW52aXJvbm1lbnRGb3JtXCJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiZW52aXJvbm1lbnRGb3JtXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJlbnZpcm9ubWVudFNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtZW52aXJvbm1lbnQtc2VsZWN0IGNxYS1zaHJpbmstMCBjcWEtdy1hdXRvIGNxYS1taW4tdy1bMzE1cHhdIGNxYS1tYXgtdy1bMzE1cHhdIGNxYS1tYXgtWzc2N3B4XTpjcWEtbWluLXctMCBjcWEtbWF4LVs3NjdweF06Y3FhLW1heC13LWZ1bGwgY3FhLW1heC1bNzY3cHhdOmNxYS13LWZ1bGwgWyZfLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJdOmNxYS1wYi0wXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVudmlyb25tZW50XCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkVudmlyb25tZW50U2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJlcXVlc3Qgcm93OiBtZXRob2QsIFVSTCwgYnV0dG9ucyAtLT5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2NxYS1pdGVtcy1zdGFydCc6IGFjdGl2ZUFwaVR5cGUgPT09ICdyZXN0JywgJ2NxYS1qdXN0aWZ5LWJldHdlZW4nOiBhY3RpdmVBcGlUeXBlID09PSAnZ3JhcGhxbCd9XCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1yZXF1ZXN0LXJvdyBjcWEtZmxleCBjcWEtZ2FwLTMgY3FhLWZsZXgtd3JhcCBjcWEtbWF4LVs3NjdweF06Y3FhLWZsZXgtY29sIGNxYS1tYXgtWzc2N3B4XTpjcWEtaXRlbXMtc3RyZXRjaCBjcWEtbWF4LVs3NjdweF06Y3FhLWdhcC0yLjVcIj5cbiAgICAgICAgICA8IS0tIFJFU1QgbW9kZSBzaG93cyB0aGUgSFRUUCBNZXRob2QgZHJvcGRvd24uIEdyYXBoUUwgcGlucyBtZXRob2QgdG8gUE9TVCBpbnRlcm5hbGx5IHNvIHRoZSBkcm9wZG93biBpcyBoaWRkZW4uIC0tPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgKm5nSWY9XCJtZXRob2RGb3JtICYmIGFjdGl2ZUFwaVR5cGUgPT09ICdyZXN0J1wiIFtmb3JtXT1cIm1ldGhvZEZvcm1cIiBbY29uZmlnXT1cIm1ldGhvZFNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLW1ldGhvZC1zZWxlY3QgY3FhLXNocmluay0wIGNxYS13LWF1dG8gY3FhLW1pbi13LVsxNTJweF0gY3FhLW1heC13LVsxNTJweF0gY3FhLW1heC1bNzY3cHhdOmNxYS1taW4tdy0wIGNxYS1tYXgtWzc2N3B4XTpjcWEtbWF4LXctZnVsbCBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbFwiIGFyaWEtbGFiZWw9XCJIVFRQIG1ldGhvZFwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWV0aG9kU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlQXBpVHlwZSA9PT0gJ3Jlc3QnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC11cmwtd3JhcCBjcWEtZmxleC0xIGNxYS1taW4tdy1bMjAwcHhdIGNxYS1tYXgtWzc2N3B4XTpjcWEtbWluLXctMCBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInVybFwiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ1cmwgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1cmxPcHRpb25zXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInVybFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiRW50ZXIgVVJMIG9yIHNlbGVjdCBQYXJhbWV0ZXJcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0KT1cIm9uVXJsT3B0aW9uU2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvY3FhLWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cmxFcnJvclwiIGNsYXNzPVwiY3FhLXRleHQtcmVkLTYwMCBjcWEtdGV4dC1zbSBjcWEtbXQtMVwiPlxuICAgICAgICAgICAgICB7eyB1cmxFcnJvciB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEltcG9ydCBBUEkgY1VSTDogUkVTVC1vbmx5ICh0aGUgY1VSTCBwYXJzZXIgcHJvZHVjZXMgUkVTVCBzaGFwZXMpLiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlQXBpVHlwZSA9PT0gJ3Jlc3QnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC10cmlnZ2VyIGNxYS1jb250ZW50cyBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbCBjcWEtbWF4LVs3NjdweF06IWNxYS1mbGV4XCIgKGNsaWNrKT1cIm9wZW5JbXBvcnRDdXJsUGFuZWwoKVwiPlxuICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJJbXBvcnQgQVBJIGNVUkxcIlxuICAgICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWJ0bi1vdXRsaW5lICFjcWEtYmctd2hpdGUgIWNxYS1ib3JkZXIgIWNxYS1ib3JkZXItc29saWQgIWNxYS1ib3JkZXItWyM2QjcyODBdIGNxYS10ZXh0LVsjNDE0MTQ2XSBjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgaG92ZXI6IWNxYS1iZy1bI0Y5RkFGQl0gaG92ZXI6IWNxYS10ZXh0LVsjNDE0MTQ2XSBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbCBjcWEtbXQtMVwiPlxuICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgIExvYWQgU2NoZW1hOiBHcmFwaFFMLW9ubHkuIFVzZXMgdGhlIGVsZXZhdGVkIGNxYS1idXR0b24gdmFyaWFudCBzbyB0aGVcbiAgICAgICAgICAgIGluZGlnbyBzdXJmYWNlICsgdGV4dCArIGVsZXZhdGlvbiBzaGFkb3cgY29tZSBmcm9tIHRoZSBkZXNpZ24gc3lzdGVtIOKAlFxuICAgICAgICAgICAgY3VzdG9tQ2xhc3Mga2VlcHMgb25seSB0aGUgdHlwb2dyYXBoeSArIHJlc3BvbnNpdmUgc2l6aW5nIHR3ZWFrcy5cbiAgICAgICAgICAgIERpc2FibGVkIC8gYmxvY2tlZCBzdHlsaW5nIGlzIGhhbmRsZWQgbmF0aXZlbHkgYnkgdGhlIGVsZXZhdGVkIHZhcmlhbnRcbiAgICAgICAgICAgIChjcWEtYmctcHJpbWFyeS1tdXRlZCwgbXV0ZWQgdGV4dCwgbm8gc2hhZG93KSwgc28gd2UgZG9uJ3QgYWRkIGFuXG4gICAgICAgICAgICBvcGFjaXR5IG92ZXJyaWRlIG9uIHRvcC5cbiAgICAgICAgICAtLT5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiAqbmdJZj1cImFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJ1wiIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZWxldmF0ZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiTG9hZCBTY2hlbWFcIlxuICAgICAgICAgICAgaWNvbj1cInNjaGVtYVwiXG4gICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1mb250LWludGVyIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbCBjcWEtbXQtMVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXVybCB8fCAhdXJsLnRyaW0oKSB8fCBpc0xvYWRpbmdHcmFwaFFMU2NoZW1hXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cIm9uTG9hZFNjaGVtYSgpXCI+XG4gICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiU2VuZCBSZXF1ZXN0XCIgKGNsaWNrZWQpPVwib25TZW5kUmVxdWVzdCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NlbmRSZXF1ZXN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1idG4tcHJpbWFyeSBjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgIWNxYS1iZy1bIzNGNDNFRV0gY3FhLXRleHQtWyNGQkZDRkZdICFjcWEtYm9yZGVyLW5vbmUgY3FhLXB5LTIuNSBjcWEtcHgtNiBjcWEtZ2FwLTIgY3FhLXJvdW5kZWQtbGcgY3FhLW1pbi1oLVszN3B4XSBjcWEtYm94LWJvcmRlciBob3ZlcjohY3FhLWJnLVsjMUIxRkVCXSBjcWEtbWF4LVs3NjdweF06Y3FhLXctZnVsbCBjcWEtbXQtMVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7JyFjcWEtb3BhY2l0eS01MCAhY3FhLWN1cnNvci1ub3QtYWxsb3dlZCc6IGlzU2VuZFJlcXVlc3REaXNhYmxlZH1cIj5cbiAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICA8IS0tIEJvZHkgY29udGVudDogaGVhZGVyIHNlY3Rpb24gKGRlZmF1bHQpIE9SIGltcG9ydCBjVVJMIHNlY3Rpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VmlldyA9PT0gJ2ltcG9ydC1jdXJsJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC1wYW5lbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtc2hhZG93LVswXzFweF8zcHhfcmdiYSgwLDAsMCwwLjA4KV0gY3FhLW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLWhlYWRlciBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXB5LTMgY3FhLXB4LTUgY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLWJnLVsjRjlGQUZCXSBjcWEtcm91bmRlZC10LWxnIGNxYS1tYXgtWzc2N3B4XTpjcWEtcHgtNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC10aXRsZSBjcWEtbS0wIGNxYS10ZXh0LXhzIGNxYS1mb250LWJvbGQgY3FhLWxlYWRpbmctWzE4cHhdIGNxYS10ZXh0LVsjMzc0MTUxXVwiPkltcG9ydCBBUEkgY1VSTDwvaDM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC1zZXBhcmF0b3IgY3FhLWgtcHggY3FhLWJnLVsjRTJFOEYwXSBjcWEtbXktMCBjcWEtbXgtNVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWltcG9ydC1jdXJsLW5vdGUgY3FhLXB4LTUgY3FhLXB0LTNcIj5cbiAgICAgICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cImNVUkwgaXMgc3VwcG9ydGVkIGluIEJhc2ggZm9ybWF0IG9ubHkuXCIgaWNvbj1cImluZm9cIiB2YXJpYW50PVwiaW5mb1wiIHNpemU9XCJzbWFsbFwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW1wb3J0LWN1cmwtYm9keVwiPlxuICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYSBbdmFsdWVdPVwiaW1wb3J0Q3VybENvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJpbXBvcnRDdXJsQ29udHJvbC5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3RlIHlvdXIgY1VSTCBjb21tYW5kIGhlcmUgKGUuZy4sIGN1cmwgLVggUE9TVCBodHRwczovL2FwaS5leGFtcGxlLmNvbS91c2VycylcIlxuICAgICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtyb3dzXT1cIjhcIiByZXNpemU9XCJ2ZXJ0aWNhbFwiIHNpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC10ZXh0YXJlYVwiPlxuICAgICAgICAgICAgICA8L2NxYS1jdXN0b20tdGV4dGFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1pbXBvcnQtY3VybC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW1wb3J0LWN1cmwtYnRuLWNhbmNlbFwiIChjbGlja2VkKT1cIm9uQ2FuY2VsSW1wb3J0Q3VybCgpXCI+PC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJJbXBvcnRcIlxuICAgICAgICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaW1wb3J0LWN1cmwtYnRuLWltcG9ydFwiIChjbGlja2VkKT1cIm9uSW1wb3J0Q3VybENvbmZpcm0oKVwiPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEdyYXBoUUwgb3BlcmF0aW9uIHBpY2tlciDigJQgb3BlbmVkIGJ5IHRoZSBcIkxvYWQgU2NoZW1hXCIgYnV0dG9uIGluIEdyYXBoUUwgbW9kZS4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VmlldyA9PT0gJ2dyYXBocWwtc2NoZW1hJ1wiPlxuICAgICAgICAgIDxjcWEtZ3JhcGhxbC1vcGVyYXRpb24tcGlja2VyXG4gICAgICAgICAgICBbc2NoZW1hU291cmNlXT1cImdyYXBoUUxTY2hlbWFTb3VyY2VcIlxuICAgICAgICAgICAgW29wZXJhdGlvbnNdPVwiZ3JhcGhRTE9wZXJhdGlvbnNcIlxuICAgICAgICAgICAgW2ludHJvc3BlY3RlZF09XCIhIWdyYXBoUUxTY2hlbWFTb3VyY2VcIlxuICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdHcmFwaFFMU2NoZW1hXCJcbiAgICAgICAgICAgIChiYWNrKT1cIm9uR3JhcGhRTFBpY2tlckJhY2soKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uR3JhcGhRTFBpY2tlckJhY2soKVwiXG4gICAgICAgICAgICAocmVJbnRyb3NwZWN0KT1cIm9uR3JhcGhRTFBpY2tlclJlSW50cm9zcGVjdCgpXCJcbiAgICAgICAgICAgIChvcGVyYXRpb25TZWxlY3RlZCk9XCJvbkdyYXBoUUxQaWNrZXJPcGVyYXRpb25TZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9jcWEtZ3JhcGhxbC1vcGVyYXRpb24tcGlja2VyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYm9keVZpZXcgPT09ICdoZWFkZXJzJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC10YWJzLXdyYXBwZXIgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXRhYnNcIj5cbiAgICAgICAgICAgICAgPGNxYS1idXR0b24gKm5nRm9yPVwibGV0IHRhYiBvZiBwYXlsb2FkVGFic1wiIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIFt0ZXh0XT1cInRhYi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC10YWInICsgKGFjdGl2ZVBheWxvYWRUYWIgPT09IHRhYi52YWx1ZSA/ICcgY3FhLWFwaS1lZGl0LXN0ZXAtdGFiLS1hY3RpdmUnIDogJycpICsgKGlzTWV0aG9kV2l0aG91dEJvZHkgJiYgKHRhYi52YWx1ZSA9PT0gJ2JvZHknIHx8IHRhYi52YWx1ZSA9PT0gJ3BhcmFtcycpID8gJyBjcWEtYXBpLWVkaXQtc3RlcC10YWItLWRpc2FibGVkJyA6ICcnKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTWV0aG9kV2l0aG91dEJvZHkgJiYgKHRhYi52YWx1ZSA9PT0gJ2JvZHknIHx8IHRhYi52YWx1ZSA9PT0gJ3BhcmFtcycpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRQYXlsb2FkVGFiKHRhYi52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUGF5bG9hZCBjb250ZW50IChBdXRob3JpemF0aW9uKSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVQYXlsb2FkVGFiID09PSAnYXV0aG9yaXphdGlvbidcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWRcIlxuICAgICAgICAgICAgICBbYXR0ci5zdHlsZV09XCIncGFkZGluZzogMjBweDsgbWluLWhlaWdodDogMjAwcHg7J1wiPlxuICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDIwcHg7J1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogOHB4OyB3aWR0aDogZml0LWNvbnRlbnQ7J1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTFweDsgZm9udC13ZWlnaHQ6IDYwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6ICM2QjcyODA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5BVVRIIFRZUEU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0ICpuZ0lmPVwiYXV0aFR5cGVGb3JtXCIgW2Zvcm1dPVwiYXV0aFR5cGVGb3JtXCIgW2NvbmZpZ109XCJhdXRoVHlwZVNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYXV0aC10eXBlLXNlbGVjdFwiIGFyaWEtbGFiZWw9XCJBdXRoIHR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHlsZV09XCInbWluLXdpZHRoOiAxNjBweDsnXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE5vIEF1dGg6IGNlbnRlcmVkIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQXV0aFR5cGUgPT09ICduby1hdXRoJ1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5zdHlsZV09XCInZmxleDogMTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogMTJweDsgbWluLXdpZHRoOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJvcmRlcjogMXB4IHNvbGlkICNFNUU3RUI7IGJvcmRlci1yYWRpdXM6IDhweDsgcGFkZGluZy10b3A6IDE2cHg7IHBhZGRpbmctYm90dG9tOiAxNnB4OydcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3R5bGVdPVwiJ3dpZHRoOiA0OHB4OyBoZWlnaHQ6IDQ4cHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJhY2tncm91bmQ6ICNGM0Y0RjY7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBmbGV4LXNocmluazogMDsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjVcIiB5PVwiMTFcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiIGZpbGw9XCIjOUNBM0FGXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5ObyBBdXRoPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5zdHlsZV09XCInZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogNnB4OyBmbGV4LXdyYXA6IHdyYXA7J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwOyBjb2xvcjogIzlDQTNBRjsgbGluZS1oZWlnaHQ6IDEuNDsnXCI+VGhpcyByZXF1ZXN0IGRvZXMgbm90IHVzZSBhbnkgYXV0aG9yaXphdGlvbi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwiTW9yZSBpbmZvcm1hdGlvblwiIHRpdGxlPVwiVGhpcyByZXF1ZXN0IGRvZXMgbm90IHVzZSBhbnkgYXV0aG9yaXphdGlvbi5cIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHdpZHRoOiAxOHB4OyBoZWlnaHQ6IDE4cHg7IGNvbG9yOiAjOUNBM0FGOyBmbGV4LXNocmluazogMDsnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggN3Y0TTggNXYuNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEJlYXJlciBUb2tlbjogVG9rZW4gbGFiZWwgKyB0ZXh0YXJlYSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRBdXRoVHlwZSA9PT0gJ2JlYXJlcidcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuc3R5bGVdPVwiJ2ZsZXg6IDE7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMTBweDsgbWluLXdpZHRoOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMzc0MTUxOyBsaW5lLWhlaWdodDogMS4yNTsnXCI+VG9rZW48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYSBbKHZhbHVlKV09XCJiZWFyZXJUb2tlblwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgYmVhcmVyIHRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW3Jvd3NdPVwiNlwiIHJlc2l6ZT1cInZlcnRpY2FsXCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hdXRoLXRva2VuLXRleHRhcmVhXCIgYXJpYUxhYmVsPVwiQmVhcmVyIHRva2VuXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20tdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBPQXV0aCAyLjA6IEdyYW50IFR5cGUsIEFjY2VzcyBUb2tlbiBVUkwsIENsaWVudCBJRCwgQ2xpZW50IFNlY3JldCwgU2NvcGUsIENsaWVudCBBdXRoZW50aWNhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRBdXRoVHlwZSA9PT0gJ29hdXRoMicgJiYgb2F1dGgyRm9ybVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLW9hdXRoMi1ncmlkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogMTZweCAyNHB4OyB3aWR0aDogMTAwJTsnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsgbWluLXdpZHRoOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5HcmFudCBUeXBlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0ICpuZ0lmPVwib2F1dGgyRm9ybVwiIFtmb3JtXT1cIm9hdXRoMkZvcm1cIiBbY29uZmlnXT1cIm9hdXRoMkdyYW50VHlwZVNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hdXRoLW9hdXRoLXNlbGVjdFwiIGFyaWEtbGFiZWw9XCJPQXV0aCBncmFudCB0eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHlsZV09XCInbWluLXdpZHRoOiAwOyB3aWR0aDogMTAwJTsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMXB4OyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjNkI3MjgwOyBsaW5lLWhlaWdodDogMS4zOydcIj5PQXV0aCBncmFudCB0eXBlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsgbWluLXdpZHRoOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5BY2Nlc3MgVG9rZW4gVVJMPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwib2F1dGgyRm9ybS5nZXQoJ2FjY2Vzc1Rva2VuVXJsJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib2F1dGgyRm9ybS5nZXQoJ2FjY2Vzc1Rva2VuVXJsJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiIHBsYWNlaG9sZGVyPVwiRW50ZXIgT0F1dGggdG9rZW4gZW5kcG9pbnRcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkFjY2VzcyBUb2tlbiBVUkxcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMXB4OyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjNkI3MjgwOyBsaW5lLWhlaWdodDogMS4zOydcIj5PQXV0aCB0b2tlbiBlbmRwb2ludDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5zdHlsZV09XCInZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA2cHg7IG1pbi13aWR0aDogMDsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMzc0MTUxOyBsaW5lLWhlaWdodDogMS4yNTsnXCI+Q2xpZW50IElEPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwib2F1dGgyRm9ybS5nZXQoJ2NsaWVudElkJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib2F1dGgyRm9ybS5nZXQoJ2NsaWVudElkJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiIHBsYWNlaG9sZGVyPVwiRW50ZXIgT0F1dGggY2xpZW50IGlkZW50aWZpZXJcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cIkNsaWVudCBJRFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDExcHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICM2QjcyODA7IGxpbmUtaGVpZ2h0OiAxLjM7J1wiPk9BdXRoIGNsaWVudCBpZGVudGlmaWVyPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLnN0eWxlXT1cIidkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDZweDsgbWluLXdpZHRoOiAwOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMzNzQxNTE7IGxpbmUtaGVpZ2h0OiAxLjI1OydcIj5DbGllbnQgU2VjcmV0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwib2F1dGgyRm9ybS5nZXQoJ2NsaWVudFNlY3JldCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9hdXRoMkZvcm0uZ2V0KCdjbGllbnRTZWNyZXQnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCIgW2xhYmVsXT1cIicnXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBPQXV0aCBjbGllbnQgc2VjcmV0XCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJDbGllbnQgU2VjcmV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuc3R5bGVdPVwiJ2ZvbnQtc2l6ZTogMTFweDsgZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzZCNzI4MDsgbGluZS1oZWlnaHQ6IDEuMzsnXCI+T0F1dGggY2xpZW50IHNlY3JldDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5zdHlsZV09XCInZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA2cHg7IG1pbi13aWR0aDogMDsnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMzc0MTUxOyBsaW5lLWhlaWdodDogMS4yNTsnXCI+U2NvcGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJvYXV0aDJGb3JtLmdldCgnc2NvcGUnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvYXV0aDJGb3JtLmdldCgnc2NvcGUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBzcGFjZS1zZXBhcmF0ZWQgc2NvcGVzXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJTY29wZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDExcHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICM2QjcyODA7IGxpbmUtaGVpZ2h0OiAxLjM7J1wiPlNwYWNlLXNlcGFyYXRlZCBzY29wZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuc3R5bGVdPVwiJ2Rpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNnB4OyBtaW4td2lkdGg6IDA7J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5zdHlsZV09XCInZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzM3NDE1MTsgbGluZS1oZWlnaHQ6IDEuMjU7J1wiPkNsaWVudCBBdXRoZW50aWNhdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCAqbmdJZj1cIm9hdXRoMkZvcm1cIiBbZm9ybV09XCJvYXV0aDJGb3JtXCIgW2NvbmZpZ109XCJvYXV0aDJDbGllbnRBdXRoU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWF1dGgtb2F1dGgtc2VsZWN0XCIgYXJpYS1sYWJlbD1cIkNsaWVudCBhdXRoZW50aWNhdGlvbiBtZXRob2RcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cIidtaW4td2lkdGg6IDA7IHdpZHRoOiAxMDAlOydcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLnN0eWxlXT1cIidmb250LXNpemU6IDExcHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICM2QjcyODA7IGxpbmUtaGVpZ2h0OiAxLjM7J1wiPkNsaWVudCBhdXRoZW50aWNhdGlvbiBtZXRob2Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBQYXlsb2FkIGNvbnRlbnQgKEhlYWRlcnMpIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVBheWxvYWRUYWIgPT09ICdoZWFkZXJzJ1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVycy1ncmlkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXJzLWxhYmVsXCI+SGVhZGVyIE5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXJzLWxhYmVsXCI+SGVhZGVyIFZhbHVlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVycy1sYWJlbCBjcWEtYXBpLWVkaXQtc3RlcC1oZWFkZXJzLWxhYmVsLS1lbXB0eVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgaGVhZGVyUm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUhlYWRlclwiIFtmb3JtR3JvdXBdPVwicm93XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cInJvd1wiIFtjb25maWddPVwiaGVhZGVyTmFtZVNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAoYWRkQ3VzdG9tVmFsdWUpPVwib25IZWFkZXJOYW1lQWRkQ3VzdG9tVmFsdWUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVyLXR5cGUtc2VsZWN0IGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgndmFsdWUnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlZhbHVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVyLXZhbHVlLWlucHV0XCIgYXJpYUxhYmVsPVwiSGVhZGVyIHZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIFtjdXN0b21DbGFzc109XCInY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVyLWRlbGV0ZSdcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlbW92ZSBoZWFkZXInXCIgKGNsaWNrZWQpPVwicmVtb3ZlSGVhZGVyKGkpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtaGVhZGVyLWRlbGV0ZS1pY29uXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNjY2MyA2VjEyLjY2NjdINS4zMzMwMVY2SDEwLjY2NjNaTTkuNjY2MzQgMkg2LjMzMzAxTDUuNjY2MzQgMi42NjY2N0gzLjMzMzAxVjRIMTIuNjY2M1YyLjY2NjY3SDEwLjMzM0w5LjY2NjM0IDJaTTExLjk5OTcgNC42NjY2N0gzLjk5OTY3VjEyLjY2NjdDMy45OTk2NyAxMy40IDQuNTk5NjcgMTQgNS4zMzMwMSAxNEgxMC42NjYzQzExLjM5OTcgMTQgMTEuOTk5NyAxMy40IDExLjk5OTcgMTIuNjY2N1Y0LjY2NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGOUJGQkZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFkZC1oZWFkZXItd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIHRleHQ9XCIrIEFkZCBIZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC1hZGQtaGVhZGVyLWxpbmsnXCIgKGNsaWNrZWQpPVwiYWRkSGVhZGVyKClcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUGF5bG9hZCBjb250ZW50IChQYXJhbXMpOiBLZXnigJNWYWx1ZSB0YWJsZSB3aXRoIGFkZC9kZWxldGUgcm93cy4gUkVTVC1vbmx5IOKAlCBHcmFwaFFMIFBPU1QgaGFzIG5vIHF1ZXJ5IHBhcmFtcy4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlUGF5bG9hZFRhYiA9PT0gJ3BhcmFtcycgJiYgYWN0aXZlQXBpVHlwZSA9PT0gJ3Jlc3QnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtZ3JpZCBjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtbGFiZWxcIj5LZXk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtbGFiZWxcIj5WYWx1ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbCBjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtbGFiZWwtLWVtcHR5XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBwYXJhbXNSb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5UGFyYW1zXCIgW2Zvcm1Hcm91cF09XCJyb3dcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCdrZXknKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ2tleScpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJLZXlcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtaW5wdXRcIiBhcmlhTGFiZWw9XCJLZXlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInJvdy5nZXQoJ3ZhbHVlJyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1pbnB1dFwiIGFyaWFMYWJlbD1cIlZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIFtjdXN0b21DbGFzc109XCInY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWRlbGV0ZSdcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlbW92ZSByb3cnXCIgKGNsaWNrZWQpPVwicmVtb3ZlUGFyYW1zUm93KGkpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWRlbGV0ZS1pY29uXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNjY2MyA2VjEyLjY2NjdINS4zMzMwMVY2SDEwLjY2NjNaTTkuNjY2MzQgMkg2LjMzMzAxTDUuNjY2MzQgMi42NjY2N0gzLjMzMzAxVjRIMTIuNjY2M1YyLjY2NjY3SDEwLjMzM0w5LjY2NjM0IDJaTTExLjk5OTcgNC42NjY2N0gzLjk5OTY3VjEyLjY2NjdDMy45OTk2NyAxMy40IDQuNTk5NjcgMTQgNS4zMzMwMSAxNEgxMC42NjYzQzExLjM5OTcgMTQgMTEuOTk5NyAxMy40IDExLjk5OTcgMTIuNjY2N1Y0LjY2NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGOUJGQkZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1hZGQtd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZmlsbGVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIisgQWRkIFJvd1wiXG4gICAgICAgICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1hZGQtYnRuXCIgKGNsaWNrZWQpPVwiYWRkUGFyYW1zUm93KClcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUGF5bG9hZCBjb250ZW50IChCb2R5IG9ubHkpOiB0eXBlLCBmb3JtYXQsIHRleHQgYXJlYSwgQmFjay9OZXh0LiBSRVNULW9ubHkg4oCUIEdyYXBoUUwgdXNlcyB0aGUgZGVkaWNhdGVkIHRhYiBiZWxvdy4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlUGF5bG9hZFRhYiA9PT0gJ2JvZHknICYmIGFjdGl2ZUFwaVR5cGUgPT09ICdyZXN0J1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZCBjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWVkaXRvclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC10eXBlLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC10eXBlLWxhYmVsXCI+VHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC10eXBlLXJhZGlvc1wiPlxuICAgICAgICAgICAgICAgICAgPGNxYS1zZWdtZW50LWNvbnRyb2wgW3ZhbHVlXT1cInBheWxvYWRUeXBlXCIgW3NlZ21lbnRzXT1cInBheWxvYWRUeXBlU2VnbWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25QYXlsb2FkVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXR5cGUtc2VnbWVudFwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtc2VnbWVudC1jb250cm9sPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXlsb2FkVHlwZSA9PT0gJ3JhdydcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtZm9ybWF0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1mb3JtYXQtbGFiZWxcIj5Gb3JtYXQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCAqbmdJZj1cInBheWxvYWRGb3JtYXRGb3JtXCIgW2Zvcm1dPVwicGF5bG9hZEZvcm1hdEZvcm1cIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInBheWxvYWRGb3JtYXRTZWxlY3RDb25maWdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtZm9ybWF0LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGb3JtYXRcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSBSYXc6IHRleHQgYXJlYSB3aXRoIGxpbmUgbnVtYmVycyAoUG9zdG1hbi1zdHlsZSBwYXlsb2FkIGJvZHkpIC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGF5bG9hZFR5cGUgPT09ICdyYXcnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWJvZHlcIiAjcGF5bG9hZEVkaXRvcldpdGhMaW5lc1JlZj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1lZGl0b3Itd2l0aC1saW5lc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtbGluZS1udW1iZXJzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBuIG9mIHBheWxvYWRMaW5lTnVtYmVyc1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1saW5lLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGF5bG9hZEpzb25FcnJvciAmJiBwYXlsb2FkSnNvbkVycm9yLmxpbmUgPT09IG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLWxpbmUtZXJyb3ItaWNvblwiIFt0aXRsZV09XCJwYXlsb2FkSnNvbkVycm9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUGFyc2UgZXJyb3Igb24gdGhpcyBsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiNlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNGw2IDZNMTAgNGwtNiA2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1saW5lLW51bS10ZXh0XCI+e3sgbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC10ZXh0YXJlYS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXRleHRhcmVhIGNxYS13LWZ1bGwgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4taC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtdGV4dGFyZWEtLWVycm9yJzogcGF5bG9hZEpzb25FcnJvcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgI3BheWxvYWRUZXh0YXJlYVJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYXlsb2FkLXRleHRhcmVhLWlucHV0IGNxYS13LWZ1bGwgY3FhLW91dGxpbmUtbm9uZSBjcWEtYm94LWJvcmRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtdGV4dGFyZWEtaW5wdXQtLWVycm9yJzogcGF5bG9hZEpzb25FcnJvcn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBheWxvYWRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1BheWxvYWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCIhIXBheWxvYWRKc29uRXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uUGF5bG9hZElucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25QYXlsb2FkS2V5ZG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInBheWxvYWRKc29uRXJyb3JcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXBheWxvYWQtanNvbi1lcnJvci1tc2dcIj5cbiAgICAgICAgICAgICAgICAgIEludmFsaWQgSlNPTiBmb3JtYXQuIFBsZWFzZSBjaGVjayB5b3VyIHN5bnRheC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0geC13d3ctZm9ybS11cmxlbmNvZGVkOiBLZXnigJNWYWx1ZSByb3dzLCBhZGQvcmVtb3ZlIGR5bmFtaWNhbGx5IC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGF5bG9hZFR5cGUgPT09ICd4LXd3dy1mb3JtLXVybGVuY29kZWQnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWdyaWQgY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtbGFiZWxcIj5LZXk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1sYWJlbFwiPlZhbHVlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdmFsdWUtbGFiZWwgY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWxhYmVsLS1lbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Yga2V5VmFsdWVSb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5S2V5VmFsdWVcIiBbZm9ybUdyb3VwXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJyb3cuZ2V0KCdrZXknKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgna2V5Jyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIktleVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWlucHV0XCIgYXJpYUxhYmVsPVwiS2V5XCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgndmFsdWUnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgndmFsdWUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1pbnB1dFwiIGFyaWFMYWJlbD1cIlZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInRleHRcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1kZWxldGUnXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlbW92ZSByb3cnXCIgKGNsaWNrZWQpPVwicmVtb3ZlS2V5VmFsdWVSb3coaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1kZWxldGUtaWNvblwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjY2NjMgNlYxMi42NjY3SDUuMzMzMDFWNkgxMC42NjYzWk05LjY2NjM0IDJINi4zMzMwMUw1LjY2NjM0IDIuNjY2NjdIMy4zMzMwMVY0SDEyLjY2NjNWMi42NjY2N0gxMC4zMzNMOS42NjYzNCAyWk0xMS45OTk3IDQuNjY2NjdIMy45OTk2N1YxMi42NjY3QzMuOTk5NjcgMTMuNCA0LjU5OTY3IDE0IDUuMzMzMDEgMTRIMTAuNjY2M0MxMS4zOTk3IDE0IDExLjk5OTcgMTMuNCAxMS45OTk3IDEyLjY2NjdWNC42NjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGOUJGQkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXZhbHVlLWFkZC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCIrIEFkZCBSb3dcIlxuICAgICAgICAgICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS12YWx1ZS1hZGQtYnRuXCIgKGNsaWNrZWQpPVwiYWRkS2V5VmFsdWVSb3coKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEZvcm0gRGF0YTogS2V54oCTVHlwZeKAk1ZhbHVlIHJvd3M7IFR5cGUgaXMgYSBkcm9wZG93biAoVGV4dC9GaWxlKSwgYWRkL3JlbW92ZSBkeW5hbWljYWxseSAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBheWxvYWRUeXBlID09PSAnZm9ybS1kYXRhJ1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWxhYmVsXCI+S2V5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1rZXktdHlwZS12YWx1ZS1sYWJlbFwiPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWxhYmVsXCI+VmFsdWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWxhYmVsIGNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWxhYmVsLS1lbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Yga2V5VHlwZVZhbHVlUm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUtleVR5cGVWYWx1ZVwiIFtmb3JtR3JvdXBdPVwicm93XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtcm93XCI+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgna2V5Jyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJvdy5nZXQoJ2tleScpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJLZXlcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWlucHV0XCIgYXJpYUxhYmVsPVwiS2V5XCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cInJvd1wiIFtjb25maWddPVwia2V5VHlwZVZhbHVlVHlwZVNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtdHlwZS1zZWxlY3QgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgndmFsdWUnKT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgndmFsdWUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWlucHV0XCIgYXJpYUxhYmVsPVwiVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIFtjdXN0b21DbGFzc109XCInY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtZGVsZXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidSZW1vdmUgcm93J1wiIChjbGlja2VkKT1cInJlbW92ZUtleVR5cGVWYWx1ZVJvdyhpKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAta2V5LXR5cGUtdmFsdWUtZGVsZXRlLWljb25cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC42NjYzIDZWMTIuNjY2N0g1LjMzMzAxVjZIMTAuNjY2M1pNOS42NjYzNCAySDYuMzMzMDFMNS42NjYzNCAyLjY2NjY3SDMuMzMzMDFWNEgxMi42NjYzVjIuNjY2NjdIMTAuMzMzTDkuNjY2MzQgMlpNMTEuOTk5NyA0LjY2NjY3SDMuOTk5NjdWMTIuNjY2N0MzLjk5OTY3IDEzLjQgNC41OTk2NyAxNCA1LjMzMzAxIDE0SDEwLjY2NjNDMTEuMzk5NyAxNCAxMS45OTk3IDEzLjQgMTEuOTk5NyAxMi42NjY3VjQuNjY2NjdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjlCRkJGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWFkZC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImZpbGxlZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCIrIEFkZCBSb3dcIlxuICAgICAgICAgICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWtleS10eXBlLXZhbHVlLWFkZC1idG5cIiAoY2xpY2tlZCk9XCJhZGRLZXlUeXBlVmFsdWVSb3coKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFBheWxvYWQgY29udGVudCAoR3JhcGhRTCk6IFF1ZXJ5ICsgVmFyaWFibGVzICsgT3BlcmF0aW9uIE5hbWUuIEFjdGl2ZSBvbmx5IGluIEdyYXBoUUwgbW9kZS4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlUGF5bG9hZFRhYiA9PT0gJ2dyYXBocWwnICYmIGFjdGl2ZUFwaVR5cGUgPT09ICdncmFwaHFsJyAmJiBncmFwaFFMRm9ybVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtcGF5bG9hZC1ncmFwaHFsIGNxYS1hcGktZWRpdC1zdGVwLWdyYXBocWwtdGFiIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgICAgIFF1ZXJ5IC8gVmFyaWFibGVzIHVzZSB0aGUgZGVzaWduLXN5c3RlbSBgY3FhLWN1c3RvbS10ZXh0YXJlYWAgc29cbiAgICAgICAgICAgICAgICBzdHlsaW5nLCBsYWJlbCwgZXJyb3IgcmVuZGVyaW5nLCBhbmQgYWNjZXNzaWJpbGl0eSBjb21lIGZyb20gdGhlXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlLiBXZSBiaW5kIHZpYSBbdmFsdWVdIC8gKHZhbHVlQ2hhbmdlKSBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lIGJlY2F1c2UgY3FhLWN1c3RvbS10ZXh0YXJlYSBpc24ndCBhIENWQSDigJQgY2FsbGluZ1xuICAgICAgICAgICAgICAgIGZvcm0uZ2V0KCfigKYnKS5zZXRWYWx1ZSBzdGlsbCBmaXJlcyB0aGUgZXhpc3RpbmcgdmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucyAod2hpY2ggY2xlYXIgaW5saW5lIGVycm9ycyBhbmQgcmVjb21wdXRlIHRoZVxuICAgICAgICAgICAgICAgIG11bHRpLW9wZXJhdGlvbiB3YXJuaW5nKS5cbiAgICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJRdWVyeVwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJncmFwaFFMRm9ybS5nZXQoJ3F1ZXJ5Jyk/LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZ3JhcGhRTEZvcm0uZ2V0KCdxdWVyeScpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInF1ZXJ5IEdldFgoJGlkOiBJRCEpIHsmIzEwOyAgeChpZDogJGlkKSB7IG5hbWUgfSYjMTA7fVwiXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiR3JhcGhRTCBxdWVyeVwiXG4gICAgICAgICAgICAgICAgW2Vycm9yc109XCJncmFwaFFMUXVlcnlFcnJvciA/IFtncmFwaFFMUXVlcnlFcnJvcl0gOiBbXVwiXG4gICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcm93c109XCI0XCJcbiAgICAgICAgICAgICAgICByZXNpemU9XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIm1kXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgICAgICAgPGNxYS1jdXN0b20tdGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtMVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIlZhcmlhYmxlcyAoSlNPTilcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdyYXBoUUxGb3JtLmdldCgndmFyaWFibGVzJyk/LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJncmFwaFFMRm9ybS5nZXQoJ3ZhcmlhYmxlcycpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7IFwiaWRcIjogXCJhYmNcIiB9J1xuICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiR3JhcGhRTCB2YXJpYWJsZXNcIlxuICAgICAgICAgICAgICAgICAgW2Vycm9yc109XCJncmFwaFFMVmFyaWFibGVzRXJyb3IgPyBbZ3JhcGhRTFZhcmlhYmxlc0Vycm9yXSA6IFtdXCJcbiAgICAgICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbcm93c109XCIzXCJcbiAgICAgICAgICAgICAgICAgIHJlc2l6ZT1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtZFwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8IS0tIE9wZXJhdGlvbiBOYW1lOiBvcHRpb25hbCB1bmxlc3MgMisgb3BlcmF0aW9ucyBhcmUgZGVjbGFyZWQuIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1ncmFwaHFsLWZpZWxkIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtZ3JhcGhxbC1sYWJlbCBjcWEtbS0wIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzM3NDE1MV1cIj5PcGVyYXRpb24gTmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ3JhcGhRTEZvcm0uZ2V0KCdvcGVyYXRpb25OYW1lJyk/LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImdyYXBoUUxGb3JtLmdldCgnb3BlcmF0aW9uTmFtZScpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCIgcGxhY2Vob2xkZXI9XCJlLmcuIEdldEJvb2tpbmdcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBzaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJHcmFwaFFMIG9wZXJhdGlvbiBuYW1lXCI+XG4gICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImdyYXBoUUxPcGVyYXRpb25XYXJuaW5nXCIgY2xhc3M9XCJjcWEtdGV4dC1bI0I0NTMwOV0gY3FhLXRleHQtWzEycHhdIGNxYS1tdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyYXBoUUxPcGVyYXRpb25XYXJuaW5nIH19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtcm93IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLXRleHQtWzEycHhdIGNxYS1wLTJcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDhweDsgYm9yZGVyOiAxcHggc29saWQgI0VERTlGRTsgYmFja2dyb3VuZDogI0Y1RjNGRjtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6IDYwMDtcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzdDM0FFRF1cIiA+bGlnaHRidWxiPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bIzdDM0FFRF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICBVc2UgPHNwYW4gc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgY29sb3I6YmxhY2s7IGJvcmRlci1yYWRpdXM6IDRweDsgcGFkZGluZzogMnB4O1wiPnZhcjwvc3Bhbj4gaW4gdmFyaWFibGVzIHRvIGJpbmQgZnJvbSBlYXJsaWVyIHN0ZXBzLlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEFkdmFuY2VkIHNldHRpbmdzIChzdGVwLWxldmVsKS4gSGlkZGVuIHdoaWxlIHRoZSBHcmFwaFFMIHBpY2tlciBpcyBvcGVuIHNvIGl0IGRvZXNuJ3QgY29tcGV0ZSBmb3IgZm9jdXMgd2l0aCB0aGUgb3BlcmF0aW9uIGxpc3QuIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYm9keVZpZXcgIT09ICdncmFwaHFsLXNjaGVtYSdcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZHZhbmNlZEV4cGFuZGVkID0gIWFkdmFuY2VkRXhwYW5kZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdXCI+QWR2YW5jZWQ8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiYWR2YW5jZWRFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm1cbiAgICAgICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcIlxuICAgICAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZUZvcm1dPVwiYWR2YW5jZWRWYXJpYWJsZXNGb3JtXCJcbiAgICAgICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuICAgIDwhLS0gU3RlcCAyOiBWYXJpYWJsZSBOYW1lOiBpbnB1dCwgdmFsaWRhdGlvbiwgQmFjayAvIE5leHQgLS0+XG4gICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTdGVwID09PSAyXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYW5lbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC02IGNxYS1ib3gtYm9yZGVyIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZhcmlhYmxlLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmFyaWFibGUtaW5wdXQtd3JhcFwiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgWyh2YWx1ZSldPVwidmFyaWFibGVOYW1lXCIgW2xhYmVsXT1cIicnXCIgcGxhY2Vob2xkZXI9XCJWYXJpYWJsZSBOYW1lXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1kXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFyaWFibGVOYW1lQ2hhbmdlKClcIiBhcmlhLWxhYmVsPVwiVmFyaWFibGUgTmFtZVwiPlxuICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwICpuZ0lmPVwidmFyaWFibGVOYW1lRXJyb3JcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZhcmlhYmxlLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgdmFyaWFibGVOYW1lRXJyb3IgfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gU3RlcCAzOiBSZXNwb25zZSBCb2R5IC8gU3RhdHVzIHRhYnMgLS0+XG4gICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTdGVwID09PSAzXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1wYW5lbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC02IGNxYS1ib3gtYm9yZGVyIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXRhYnMtd3JhcHBlciBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXRhYnNcIj5cbiAgICAgICAgICAgIDxjcWEtYnV0dG9uICpuZ0Zvcj1cImxldCB0YWIgb2YgcmVzcG9uc2VWZXJpZmljYXRpb25UYWJzXCIgdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgW3RleHRdPVwidGFiLmxhYmVsXCJcbiAgICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC10YWInICsgKGFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiID09PSB0YWIudmFsdWUgPyAnIGNxYS1hcGktZWRpdC1zdGVwLXRhYi0tYWN0aXZlJyA6ICcnKVwiXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cInNldFJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiKHRhYi52YWx1ZSlcIj5cbiAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gUmVzcG9uc2UgQm9keSB0YWIgY29udGVudDogdmVyaWZpY2F0aW9uIGdyaWQgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiID09PSAncmVzcG9uc2UtYm9keSdcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN0ZXAzLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24taGVhZGVyLXJvdyBjcWEtZmxleCBjcWEtZmxleC1yb3cgY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB0LTAgY3FhLXByLTAgY3FhLXBiLTIgY3FhLXBsLTBcIj5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInRleHRcIiB0ZXh0PVwiQWRkIFZlcmlmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tYWRkLWxpbmtcIiAoY2xpY2tlZCk9XCJhZGRWZXJpZmljYXRpb25Sb3coKVwiPlxuICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1ncmlkIGNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1ncmlkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+Uy5ubzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbFwiPkpTT04gUGF0aDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbFwiPlZlcmlmaWNhdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbFwiPkRhdGEgVHlwZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbFwiPkV4cGVjdGVkIFZhbHVlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsIGNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1sYWJlbC0tZW1wdHlcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIHZlcmlmaWNhdGlvblJvd3M7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlWZXJpZmljYXRpb25cIiBbZm9ybUdyb3VwXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tcm93XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tc25vXCI+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInJvdy5nZXQoJ2pzb25QYXRoJyk/LnZhbHVlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCdqc29uUGF0aCcpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJKc29uIFBhdGhcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24taW5wdXRcIiBhcmlhTGFiZWw9XCJKU09OIFBhdGhcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJyb3dcIiBbY29uZmlnXT1cInZlcmlmaWNhdGlvblNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1zZWxlY3QgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwicm93XCIgW2NvbmZpZ109XCJ2ZXJpZmljYXRpb25EYXRhVHlwZVNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1zZWxlY3QgY3FhLXctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVmVyaWZpY2F0aW9uRGF0YVR5cGVDaGFuZ2Uocm93LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPCEtLSBFeHBlY3RlZCBWYWx1ZTogdGV4dCBmb3IgU3RyaW5nL0FycmF5L09iamVjdCwgbnVtYmVyIGZvciBOdW1iZXIsIGRyb3Bkb3duIGZvciBCb29sZWFuIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInJvdy5nZXQoJ2RhdGFUeXBlJyk/LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0ICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIiBbZm9ybV09XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInZlcmlmaWNhdGlvbkV4cGVjdGVkVmFsdWVCb29sZWFuU2VsZWN0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tc2VsZWN0IGNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1leHBlY3RlZC1zZWxlY3QgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBbdmFsdWVdPVwicm93LmdldCgnZXhwZWN0ZWRWYWx1ZScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnNldFZhbHVlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIkV4cGVjdGVkIFZhbHVlIChudW1iZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWlucHV0IGNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1leHBlY3RlZC1udW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJFeHBlY3RlZCBWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgKm5nU3dpdGNoRGVmYXVsdCBbdmFsdWVdPVwicm93LmdldCgnZXhwZWN0ZWRWYWx1ZScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyb3cuZ2V0KCdleHBlY3RlZFZhbHVlJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkV4cGVjdGVkIFZhbHVlIGluIFN0cmluZ1wiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWlucHV0XCIgYXJpYUxhYmVsPVwiRXhwZWN0ZWQgVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cInRleHRcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1kZWxldGUnXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidSZW1vdmUgcm93J1wiIChjbGlja2VkKT1cInJlbW92ZVZlcmlmaWNhdGlvblJvdyhpKVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1kZWxldGUtaWNvblwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjY2NjMgNlYxMi42NjY3SDUuMzMzMDFWNkgxMC42NjYzWk05LjY2NjM0IDJINi4zMzMwMUw1LjY2NjM0IDIuNjY2NjdIMy4zMzMwMVY0SDEyLjY2NjNWMi42NjY2N0gxMC4zMzNMOS42NjYzNCAyWk0xMS45OTk3IDQuNjY2NjdIMy45OTk2N1YxMi42NjY3QzMuOTk5NjcgMTMuNCA0LjU5OTY3IDE0IDUuMzMzMDEgMTRIMTAuNjY2M0MxMS4zOTk3IDE0IDExLjk5OTcgMTMuNCAxMS45OTk3IDEyLjY2NjdWNC42NjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjlCRkJGXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU3RhdHVzIHRhYiBjb250ZW50OiBTLm5vLCBWZXJpZmljYXRpb24gZHJvcGRvd24sIEV4cGVjdGVkIFZhbHVlLCBhZGQvcmVtb3ZlIHJvd3MgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVJlc3BvbnNlVmVyaWZpY2F0aW9uVGFiID09PSAnc3RhdHVzJ1wiIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtc3RlcDMtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1oZWFkZXItcm93IGNxYS1mbGV4IGNxYS1mbGV4LXJvdyBjcWEtanVzdGlmeS1lbmQgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHQtMCBjcWEtcHItMCBjcWEtcGItMiBjcWEtcGwtMFwiPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwidGV4dFwiIHRleHQ9XCJBZGQgVmVyaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXZlcmlmaWNhdGlvbi1hZGQtbGlua1wiIChjbGlja2VkKT1cImFkZFN0YXR1c1ZlcmlmaWNhdGlvblJvdygpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN0YXR1cy12ZXJpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN0YXR1cy12ZXJpZmljYXRpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWxcIj5TLm5vPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+VmVyaWZpY2F0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsXCI+RXhwZWN0ZWQgVmFsdWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tbGFiZWwgY3FhLWFwaS1lZGl0LXN0ZXAtdmVyaWZpY2F0aW9uLWxhYmVsLS1lbXB0eVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2Ygc3RhdHVzVmVyaWZpY2F0aW9uUm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVN0YXR1c1ZlcmlmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJyb3dcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN0YXR1cy12ZXJpZmljYXRpb24tcm93XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tc25vXCI+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJyb3dcIiBbY29uZmlnXT1cInN0YXR1c1ZlcmlmaWNhdGlvblNlbGVjdENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXN0YXR1cy12ZXJpZmljYXRpb24tc2VsZWN0IGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBbdmFsdWVdPVwicm93LmdldCgnZXhwZWN0ZWRWYWx1ZScpPy52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicm93LmdldCgnZXhwZWN0ZWRWYWx1ZScpPy5zZXRWYWx1ZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJFeHBlY3RlZCBWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgc2l6ZT1cInNtXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24taW5wdXRcIlxuICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiRXhwZWN0ZWQgVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJ0ZXh0XCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tZGVsZXRlJ1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIHJvdydcIiAoY2xpY2tlZCk9XCJyZW1vdmVTdGF0dXNWZXJpZmljYXRpb25Sb3coaSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC12ZXJpZmljYXRpb24tZGVsZXRlLWljb25cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC42NjYzIDZWMTIuNjY2N0g1LjMzMzAxVjZIMTAuNjY2M1pNOS42NjYzNCAySDYuMzMzMDFMNS42NjYzNCAyLjY2NjY3SDMuMzMzMDFWNEgxMi42NjYzVjIuNjY2NjdIMTAuMzMzTDkuNjY2MzQgMlpNMTEuOTk5NyA0LjY2NjY3SDMuOTk5NjdWMTIuNjY2N0MzLjk5OTY3IDEzLjQgNC41OTk2NyAxNCA1LjMzMzAxIDE0SDEwLjY2NjNDMTEuMzk5NyAxNCAxMS45OTk3IDEzLjQgMTEuOTk5NyAxMi42NjY3VjQuNjY2NjdaXCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0Y5QkZCRlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJlc3BvbnNlIFByZXZpZXcuIEhpZGRlbiB3aGlsZSB0aGUgR3JhcGhRTCBwaWNrZXIgaXMgb3BlbiDigJQgdGhlIHVzZXIgaXMgaW4gXCJwaWNrIGFuIG9wZXJhdGlvblwiIG1vZGUsIG5vdCBcInZpZXcgbGFzdCByZXNwb25zZVwiIG1vZGUsIHNvIHNob3dpbmcgYSBzdGFsZSBwcmV2aWV3IGJlbG93IHRoZSBwaWNrZXIgaXMganVzdCBub2lzZS4gLS0+XG4gIDxkaXYgKm5nSWY9XCJib2R5VmlldyAhPT0gJ2dyYXBocWwtc2NoZW1hJ1wiICNyZXNwb25zZVByZXZpZXdSZWYgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1yZXNwb25zZVwiPlxuICAgIDxoMyBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLXJlc3BvbnNlLXRpdGxlIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1ib2xkIGNxYS1sZWFkaW5nLVsyMHB4XSBjcWEtdGV4dC1bIzExMTgyN10gY3FhLW0tMCBjcWEtbWItWzEycHhdIGNxYS1zaHJpbmstMFwiPlJlc3BvbnNlIFByZXZpZXc8L2gzPlxuICAgIDxwcmUgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1yZXNwb25zZS1jb250ZW50XCI+e3sgcmVzcG9uc2VQcmV2aWV3IH19PC9wcmU+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU3RlcCBhY3Rpb25zOiBvbmUgcm93LCBmdWxsIHdpZHRoLiBTdGVwIDE6IENhbmNlbCArIE5leHQ7IFN0ZXAgMjogQmFjayArIE5leHQ7IFN0ZXAgMzogQmFjayArIENyZWF0ZSAtLT5cbiAgPGRpdiAqbmdJZj1cImJvZHlWaWV3ICE9PSAnZ3JhcGhxbC1zY2hlbWEnXCIgY2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hY3Rpb25zXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY3VycmVudFN0ZXBcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIjFcIj5cbiAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYWN0aW9ucy1idG4tY2FuY2VsXCIgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZmlsbGVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIk5leHRcIlxuICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYWN0aW9ucy1idG4tbmV4dFwiIChjbGlja2VkKT1cIm9uTmV4dCgpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiMlwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgYnRuU2l6ZT1cImxnXCIgdGV4dD1cIkJhY2tcIlxuICAgICAgICAgIGN1c3RvbUNsYXNzPVwiY3FhLWFwaS1lZGl0LXN0ZXAtYWN0aW9ucy1idG4tYmFja1wiIChjbGlja2VkKT1cIm9uQmFjaygpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPGNxYS1idXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiTmV4dFwiXG4gICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hY3Rpb25zLWJ0bi1uZXh0XCIgKGNsaWNrZWQpPVwib25OZXh0KClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIzXCI+XG4gICAgICAgIDxjcWEtYnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwib3V0bGluZWRcIiBidG5TaXplPVwibGdcIiB0ZXh0PVwiQmFja1wiXG4gICAgICAgICAgY3VzdG9tQ2xhc3M9XCJjcWEtYXBpLWVkaXQtc3RlcC1hY3Rpb25zLWJ0bi1iYWNrXCIgKGNsaWNrZWQpPVwib25CYWNrKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWJ1dHRvbiAqbmdJZj1cIiFpc0NyZWF0aW5nU3RlcFwiIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwiZmlsbGVkXCIgYnRuU2l6ZT1cImxnXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlJyA6ICdDcmVhdGUnXCJcbiAgICAgICAgICBjdXN0b21DbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFjdGlvbnMtYnRuLWNyZWF0ZVwiIChjbGlja2VkKT1cIm9uQ3JlYXRlKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8IS0tIE1hdGNoIGNxYS1idXR0b24gZmxleDogYWN0aW9ucyByb3cgc3R5bGVzID4gY3FhLWJ1dHRvbiB7IGZsZXg6IDEgMSAwIH0g4oCUIGxvYWRlciBkaXYgbXVzdCBncm93IHNhbWUgd2lkdGggYXMgQ3JlYXRlIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1hcGktZWRpdC1zdGVwLWFjdGlvbnMtbG9hZGVyIGNxYS13LWZ1bGwgY3FhLW1pbi1oLVszOHB4XSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxjcWEtYmFkZ2UgbGFiZWw9XCJDcmVhdGluZ+KAplwiIGljb249XCJhdXRvcmVuZXdcIiBbaXNMb2FkaW5nXT1cInRydWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBbY2VudGVyQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOydcIlxuICAgICAgICAgICAgdmFyaWFudD1cImluZm9cIiBzaXplPVwibWVkaXVtXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19