@messaia/cdk 18.2.3-rc11 → 18.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +33 -27
- package/esm2022/lib/dialogs/dialogs.module.mjs +10 -10
- package/esm2022/lib/table/components/dynamic-table/dynamic-table.component.mjs +7 -1
- package/fesm2022/messaia-cdk.mjs +45 -35
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/common/styles/_layout.scss +8 -8
- package/lib/dialogs/confirm-dialog/confirm-dialog.component.d.ts +26 -6
- package/lib/dialogs/dialogs.module.d.ts +2 -1
- package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +6 -0
- package/package.json +1 -1
|
@@ -276,27 +276,33 @@ export class VdDynamicTableComponent {
|
|
|
276
276
|
rowMenuItems = [];
|
|
277
277
|
/**
|
|
278
278
|
* Input for a single row action to be applied when interacting with a row.
|
|
279
|
+
* @property {ActionItem} rowAction
|
|
279
280
|
*/
|
|
280
281
|
rowAction;
|
|
281
282
|
/**
|
|
282
283
|
* Input for specifying which columns should be excluded from display in the table.
|
|
284
|
+
* @property {string[]} excludedColumns
|
|
283
285
|
*/
|
|
284
286
|
excludedColumns = [];
|
|
285
287
|
/**
|
|
286
288
|
* QueryList to reference all MatMenuTriggers associated with row context menus.
|
|
287
289
|
* Used for handling the context menu interactions on table rows.
|
|
290
|
+
* @property {QueryList<MatMenuTrigger>} rowContextMenuTriggers
|
|
288
291
|
*/
|
|
289
292
|
rowContextMenuTriggers;
|
|
290
293
|
/**
|
|
291
294
|
* Column type enum reference, mapping table columns to their types for rendering.
|
|
295
|
+
* @property {typeof TableColumnType} ColumnType
|
|
292
296
|
*/
|
|
293
297
|
ColumnType = TableColumnType;
|
|
294
298
|
/**
|
|
295
299
|
* Grid enum reference, representing the type of grid used in the table.
|
|
300
|
+
* @property {typeof Grid} Grid
|
|
296
301
|
*/
|
|
297
302
|
Grid = Grid;
|
|
298
303
|
/**
|
|
299
304
|
* Reference to the currently expanded row, used for handling row expansion logic.
|
|
305
|
+
* @property {any} expandedRow
|
|
300
306
|
*/
|
|
301
307
|
expandedRow;
|
|
302
308
|
/**
|
|
@@ -801,4 +807,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
801
807
|
type: ViewChild,
|
|
802
808
|
args: ['scrollContainer', { static: true }]
|
|
803
809
|
}] } });
|
|
804
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqTixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNB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Z0JBU0MsZUFBZTtzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBVVRPX1NUWUxFLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgRHluYW1pY0J1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vaGVscGVycy9keW5hbWljLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL21vZGVscy9hY3Rpb24taXRlbSc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi8uLi9lbnVtcy9ncmlkJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvdGFibGUtY29sdW1uLXR5cGUnO1xyXG5pbXBvcnQgeyBnZXRUYWJsZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29sdW1uJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBUYWJsZVN0YXRpY0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi90YWJsZS5zdGF0aWMtZGF0YS1zb3VyY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICd2ZC1keW5hbWljLXRhYmxlJyxcclxuXHR0ZW1wbGF0ZVVybDogJ2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWydkeW5hbWljLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0YW5pbWF0aW9uczogW1xyXG5cdFx0dHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG5cdFx0XHRzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXHJcblx0XHRcdHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFIH0pKSxcclxuXHRcdFx0dHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuXHRcdF0pLFxyXG5cdF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZER5bmFtaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcblx0LyoqXHJcblx0ICogUmVmZXJlbmNlIHRvIHRoZSB0YWJsZSBjb21wb25lbnQsIHVzZWQgZm9yIGFjY2Vzc2luZyBNYXRUYWJsZSBmdW5jdGlvbmFsaXRpZXMuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgndGFibGUnKVxyXG5cdHB1YmxpYyB0YWJsZT86IE1hdFRhYmxlPGFueT47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZmVyZW5jZXMgdG8gdGhlIGNvbnRhaW5lciBlbGVtZW50cyBmb3IgZGV0YWlsIHRlbXBsYXRlcywgd2l0aCBWaWV3Q29udGFpbmVyUmVmIFxyXG5cdCAqIGFsbG93aW5nIGR5bmFtaWMgaW5zZXJ0aW9uIG9mIHZpZXdzLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oJ2RldGFpbHNUZW1wbGF0ZScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG5cdHB1YmxpYyBkZXRhaWxzVGVtcGxhdGVSZWY/OiBRdWVyeUxpc3Q8YW55PjtcclxuXHJcblx0LyoqXHJcblx0ICogUmVmZXJlbmNlIHRvIGEgY29udGVudCBjaGlsZCB0ZW1wbGF0ZSAoZGV0YWlscyB0ZW1wbGF0ZSkgb2YgdHlwZSBUZW1wbGF0ZVJlZiwgXHJcblx0ICogdXNlZCBmb3IgcmVuZGVyaW5nIGN1c3RvbSB0ZW1wbGF0ZXMgaW4gdGhlIHRhYmxlLlxyXG5cdCAqL1xyXG5cdEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXHJcblx0cHVibGljIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YSBzb3VyY2UgZm9yIHRoZSB0YWJsZSwgd2hpY2ggY2FuIGVpdGhlciBiZSBhIGN1c3RvbSBUYWJsZURhdGFTb3VyY2UgXHJcblx0ICogaW1wbGVtZW50YXRpb24gb3IgYSBkeW5hbWljIG9iamVjdC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkYXRhU291cmNlOiBUYWJsZURhdGFTb3VyY2U8YW55LCBhbnk+IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBJbnB1dCBkYXRhIGZvciB0aGUgdGFibGUsIHdoaWNoIGlzIHNldCBhcyBhIHN0YXRpYyBkYXRhIHNvdXJjZS5cclxuXHQgKiBUaGlzIG1ldGhvZCBhbHNvIGluaXRpYWxpemVzIHNvcnRpbmcgYW5kIHBhZ2luYXRpb24gZm9yIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBUYWJsZVN0YXRpY0RhdGFTb3VyY2UoZGF0YSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMubWF0U29ydDtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLl9wYWdpbmF0b3I7XHJcblx0XHR0aGlzLnBhZ2luYWJsZSA9IHRydWU7XHJcblx0XHR0aGlzLnN0YXRpYyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWFjdGl2ZSBGb3JtQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBmb3JtIGRhdGEsIHdoaWNoIGlzIHVzZWQgdG8gdHJhY2sgXHJcblx0ICogZm9ybSBjb250cm9scyBhbmQgc3luY2hyb25pemUgdGFibGUgZGF0YSB3aXRoIGZvcm0gY2hhbmdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgX2Zvcm1BcnJheT86IEZvcm1BcnJheTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgRm9ybUFycmF5IGZvciBtYW5hZ2luZyBmb3JtIGNvbnRyb2xzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuIFxyXG5cdCAqIEl0IHNldHMgdGhlIHRhYmxlIGRhdGEgYW5kIHN1YnNjcmliZXMgdG8gY2hhbmdlcyBpbiB0aGUgZm9ybSB2YWx1ZXMgdG8gXHJcblx0ICogdXBkYXRlIHRoZSB0YWJsZSBkeW5hbWljYWxseS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBnZXQgZm9ybUFycmF5KCk6IEZvcm1BcnJheSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9mb3JtQXJyYXk7IH1cclxuXHRwdWJsaWMgc2V0IGZvcm1BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSkge1xyXG5cdFx0dGhpcy5fZm9ybUFycmF5ID0gZm9ybUFycmF5O1xyXG5cdFx0dGhpcy5kYXRhID0gdGhpcy5fZm9ybUFycmF5Py52YWx1ZTtcclxuXHJcblx0XHQvKiBVcGRhdGUgdGhlIHRhYmxlIGRhdGEgd2hlbiB0aGUgZm9ybSBhcnJheSB2YWx1ZXMgY2hhbmdlICovXHJcblx0XHR0aGlzLl9mb3JtQXJyYXk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRpZiAoeC5sZW5ndGggIT09IHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLl9mb3JtQXJyYXk/LnZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHRlciBmb3IgcmV0cmlldmluZyB0aGUgcmF3IHZhbHVlIG9mIHRoZSBmb3JtLCB3aXRob3V0IGFwcGx5aW5nIGFueSB0cmFuc2Zvcm1hdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIGdldCBmb3JtVmFsdWUoKTogYW55IHsgcmV0dXJuIHRoaXMuZm9ybUFycmF5Py5nZXRSYXdWYWx1ZSgpOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgZGVidWcgbW9kZSBmb3IgbG9nZ2luZyBhbmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkZWJ1Z1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IHJlcHJlc2VudGluZyB0aGUgY2xhc3MgdHlwZSB1c2VkIGluIHRoaXMgY29tcG9uZW50LCBcclxuXHQgKiB0eXBpY2FsbHkgZGVmaW5pbmcgdGhlIHN0cnVjdHVyZSBvciBtb2RlbCBvZiB0aGUgZGF0YS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBjbGFzc1R5cGU6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgb3IgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIHRhYmxlIGlzIGJlaW5nIHVzZWQuXHJcblx0ICogVGhpcyBhbGxvd3MgcGFzc2luZyBhZGRpdGlvbmFsIG1ldGFkYXRhIG9yIHNldHRpbmdzLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGNvbnRleHQ6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIGFwcGx5aW5nIGZpbHRlcnMgdG8gdGhlIGRhdGEgc291cmNlLiBJdCBkZWZpbmVzIGNyaXRlcmlhIG9yIGNvbmRpdGlvbnMgXHJcblx0ICogdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSB0YWJsZSBkYXRhLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGRhdGFTb3VyY2VGaWx0ZXI6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGFibGUgdXNlcyBhIHN0YXRpYyBkYXRhIHNvdXJjZS4gXHJcblx0ICogV2hlbiB0cnVlLCB0aGUgdGFibGUgZG9lcyBub3QgcmVseSBvbiBkeW5hbWljIGRhdGEgY2hhbmdlcy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzdGF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB0YWJsZSBkYXRhIGlzIGZpbHRlcmFibGUgYnkgdGhlIHVzZXIuXHJcblx0ICogSWYgdHJ1ZSwgZmlsdGVyaW5nIG9wdGlvbnMgYXJlIHByb3ZpZGVkLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGZpbHRlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHRhYmxlIGhlYWRlcnMgb3IgY29sdW1ucyBzaG91bGQgc3RpY2sgXHJcblx0ICogdG8gdGhlIHZpZXdwb3J0IGR1cmluZyBzY3JvbGxpbmcuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc3RpY2t5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmluZXMgdGhlIG92ZXJhbGwgd2lkdGggb2YgdGhlIHRhYmxlLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHRhYmxlV2lkdGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIG9wZXJhdG9yIGlzIHVzZWQgaW4gdGFibGUgZmlsdGVyaW5nLlxyXG5cdCAqIElmIHRydWUsIGZpbHRlcmluZyBsb2dpYyB3aWxsIGFwcGx5IG9wZXJhdG9ycyBzdWNoIGFzIGVxdWFscywgY29udGFpbnMsIGV0Yy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyB1c2VGaWx0ZXJPcGVyYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc3VwcG9ydHMgcGFnaW5hdGlvbi5cclxuXHQgKiBJZiB0cnVlLCBwYWdpbmF0aW9uIGNvbnRyb2xzIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIGRhdGEuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcGFnaW5hYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgJ0NoZWNrYm94JyBjb2x1bW4gaXMgc2hvd24gZm9yIHJvdyBzZWxlY3Rpb24uXHJcblx0ICogSWYgdHJ1ZSwgYSBjaGVja2JveCBjb2x1bW4gd2lsbCBiZSBkaXNwbGF5ZWQgYWxsb3dpbmcgdXNlcnMgdG8gc2VsZWN0IHJvd3MuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTcGVjaWZpZXMgdGhlIGFjdGl2ZSBjb2x1bW4gdXNlZCBmb3Igc29ydGluZyB0aGUgdGFibGUgZGF0YS5cclxuXHQgKiBUaGlzIGlucHV0IGRldGVybWluZXMgd2hpY2ggY29sdW1uIHRoZSBzb3J0aW5nIGlzIGFwcGxpZWQgdG8uXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc29ydEFjdGl2ZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogU3BlY2lmaWVzIHRoZSBkaXJlY3Rpb24gb2Ygc29ydGluZyAoYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcpLlxyXG5cdCAqIERlZmF1bHQgaXMgJ2FzYycgKGFzY2VuZGluZykuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRhYmxlIGhlYWRlciBzaG91bGQgcmVtYWluIHN0aWNreSAoZml4ZWQpIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0IFxyXG5cdCAqIHdoZW4gdGhlIHRhYmxlIHNjcm9sbHMuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2VjdGlvbiBvZiB0aGUgdGFibGUgc2hvdWxkIHJlbWFpbiBzdGlja3kgKGZpeGVkKSBcclxuXHQgKiBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydCB3aGVuIHNjcm9sbGluZy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzdGlja3lGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBQcml2YXRlIGJhY2tpbmcgZmllbGQgZm9yIHRoZSBjb2x1bW5TZXRzIGlucHV0IHByb3BlcnR5LlxyXG5cdCAqIFRoaXMgZmllbGQgc3RvcmVzIHRoZSBzZXRzIG9mIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZSxcclxuXHQgKiBlbmFibGluZyBjb250cm9sIG92ZXIgaG93IHRoZSB2YWx1ZSBpcyBhY2Nlc3NlZCBvciBtb2RpZmllZCB0aHJvdWdoXHJcblx0ICogdGhlIHB1YmxpYyBnZXR0ZXIgYW5kIHNldHRlci5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgX2NvbHVtblNldHM/OiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBkaXNwbGF5IHNwZWNpZmljIGNvbHVtbnMgaW4gdGhlIHRhYmxlLlxyXG5cdCAqIFRoaXMgYXJyYXkgZGVmaW5lcyBzZXRzIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc2hvd25cclxuXHQgKiBiYXNlZCBvbiB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24sIGFsbG93aW5nIGZvciBkeW5hbWljIHRhYmxlXHJcblx0ICogY29sdW1uIGN1c3RvbWl6YXRpb24uXHJcblx0ICogQHByb3BlcnR5XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGNvbHVtblNldHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fY29sdW1uU2V0czsgfVxyXG5cdHB1YmxpYyBzZXQgY29sdW1uU2V0cyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHsgdGhpcy5fY29sdW1uU2V0cyA9IHZhbHVlOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZXIgZm9yIHJvdyBjbGljayBldmVudHMuIEl0IGVtaXRzIHRoZSBjbGlja2VkIHJvdydzIGRhdGEgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZC5cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZ1bmN0aW9uIHVzZWQgdG8gZHluYW1pY2FsbHkgYXNzaWduIENTUyBjbGFzc2VzIHRvIHRhYmxlIHJvd3MgYmFzZWQgb24gY3VzdG9tIGxvZ2ljLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHJvd05nQ2xhc3M/OiBGdW5jdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogVGVtcGxhdGUgZm9yIHJlbmRlcmluZyBhZGRpdGlvbmFsIGRldGFpbHMgYmVsb3cgZWFjaCByb3cuIFxyXG5cdCAqIEl0IGFjY2VwdHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0ZW1wbGF0ZSBrZXkgb3IgaWRlbnRpZmllci5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkZXRhaWxzVGVtcGxhdGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgdGFibGUgaXMgaW4gYSByZWFkb25seSBzdGF0ZS5cclxuXHQgKiBJZiB0cnVlLCBubyBjaGFuZ2VzIGNhbiBiZSBtYWRlIHRvIHRoZSB0YWJsZSBkYXRhLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcbiAqIElucHV0IHByb3BlcnR5IHRvIGRldGVybWluZSBpZiB0aGUgdGFibGUgaXMgcmVhZG9ubHkuIFxyXG4gKiBVc2VzIGBjb2VyY2VCb29sZWFuUHJvcGVydHlgIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgdHJlYXRlZCBhcyBhIGJvb2xlYW4uXHJcbiAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCByZWFkb25seSgpIHsgcmV0dXJuIHRoaXMuX3JlYWRvbmx5OyB9XHJcblx0cHVibGljIHNldCByZWFkb25seShyZWFkb25seTogYW55KSB7XHJcblx0XHR0aGlzLl9yZWFkb25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZWFkb25seSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGdW5jdGlvbiB0byBmaWx0ZXIgaXRlbXMgd2hlbiBzZWxlY3RpbmcgYWxsIHJvd3MuIFxyXG5cdCAqIEl0IHRha2VzIHZhbHVlLCBpbmRleCwgYW5kIGFycmF5IGFzIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGJvb2xlYW4gb3IgdW5rbm93biB0eXBlLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHNlbGVjdEFsbEZpbHRlcj86ICh2YWx1ZTogYW55LCBpbmRleDogbnVtYmVyLCBhcnJheTogYW55W10pID0+IHVua25vd247XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUgTWF0U29ydCBkaXJlY3RpdmUgdXNlZCBmb3IgYXBwbHlpbmcgc29ydGluZyBvbiB0aGUgdGFibGUuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBtYXRTb3J0PzogTWF0U29ydDtcclxuXHJcblx0LyoqXHJcblx0ICogUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIE1hdFBhZ2luYXRvciB1c2VkIHRvIHBhZ2luYXRlIHRoZSB0YWJsZSBkYXRhLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgX3BhZ2luYXRvcj86IE1hdFBhZ2luYXRvcjtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgc2V0dGVyIGZvciB0aGUgTWF0UGFnaW5hdG9yLiBXaGVuIHRoZSBwYWdpbmF0b3IgaXMgc2V0LCBpdCBhc3NpZ25zIGl0IFxyXG5cdCAqIHRvIHRoZSBkYXRhIHNvdXJjZSBmb3IgcGFnaW5hdGlvbiBjb250cm9sLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxyXG5cdHB1YmxpYyBzZXQgcGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XHJcblx0XHRpZiAocGFnaW5hdG9yKSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcml2YXRlIGFycmF5IHN0b3JpbmcgdGhlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRwcml2YXRlIF9jb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IGdldHRlciBhbmQgc2V0dGVyIGZvciB0aGUgdGFibGUgY29sdW1ucy4gXHJcblx0ICogSXQgYWxsb3dzIHRoZSBjb2x1bW5zIHRvIGJlIGN1c3RvbWl6ZWQgYW5kIHVwZGF0ZWQgZHluYW1pY2FsbHkuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7IHJldHVybiB0aGlzLl9jb2x1bW5zOyB9XHJcblx0cHVibGljIHNldCBjb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHsgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQmVoYXZpb3JTdWJqZWN0IHRvIG1hbmFnZSBhbmQgZW1pdCBjaGFuZ2VzIHRvIHRoZSBjb2x1bW5zIGR5bmFtaWNhbGx5LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPihbXSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9ic2VydmFibGUgdGhhdCB0cmFja3MgYW5kIGVtaXRzIGNoYW5nZXMgdG8gdGhlIGNvbHVtbnMuXHJcblx0ICovXHJcblx0cHVibGljIGNvbHVtbnMkOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+ID0gdGhpcy5jb2x1bW5zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcblx0LyoqXHJcblx0ICogT2JzZXJ2YWJsZSB0cmFja2luZyB0aGUgY29sdW1ucyBjdXJyZW50bHkgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGlzcGxheWVkQ29sdW1ucyQ/OiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuXHJcblx0LyoqXHJcblx0ICogT2JzZXJ2YWJsZSB0cmFja2luZyB0aGUgZmlsdGVyYWJsZSBjb2x1bW5zIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXHJcblx0ICovXHJcblx0cHVibGljIGRpc3BsYXllZEZpbHRlckNvbHVtbnMkPzogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IHByb3BlcnR5IGZvciByb3ctc3BlY2lmaWMgYWN0aW9uIG1lbnUgaXRlbXMuIFxyXG5cdCAqIERlZmluZXMgYWN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQgbWVudSBmb3IgZWFjaCByb3cuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcm93TWVudUl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIGEgc2luZ2xlIHJvdyBhY3Rpb24gdG8gYmUgYXBwbGllZCB3aGVuIGludGVyYWN0aW5nIHdpdGggYSByb3cuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcm93QWN0aW9uPzogQWN0aW9uSXRlbTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIHNwZWNpZnlpbmcgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBkaXNwbGF5IGluIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBleGNsdWRlZENvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFF1ZXJ5TGlzdCB0byByZWZlcmVuY2UgYWxsIE1hdE1lbnVUcmlnZ2VycyBhc3NvY2lhdGVkIHdpdGggcm93IGNvbnRleHQgbWVudXMuXHJcblx0ICogVXNlZCBmb3IgaGFuZGxpbmcgdGhlIGNvbnRleHQgbWVudSBpbnRlcmFjdGlvbnMgb24gdGFibGUgcm93cy5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKE1hdE1lbnVUcmlnZ2VyKVxyXG5cdHB1YmxpYyByb3dDb250ZXh0TWVudVRyaWdnZXJzPzogUXVlcnlMaXN0PE1hdE1lbnVUcmlnZ2VyPjtcclxuXHJcblx0LyoqXHJcblx0ICogQ29sdW1uIHR5cGUgZW51bSByZWZlcmVuY2UsIG1hcHBpbmcgdGFibGUgY29sdW1ucyB0byB0aGVpciB0eXBlcyBmb3IgcmVuZGVyaW5nLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBDb2x1bW5UeXBlOiB0eXBlb2YgVGFibGVDb2x1bW5UeXBlID0gVGFibGVDb2x1bW5UeXBlO1xyXG5cclxuXHQvKipcclxuXHQgKiBHcmlkIGVudW0gcmVmZXJlbmNlLCByZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YgZ3JpZCB1c2VkIGluIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgR3JpZDogdHlwZW9mIEdyaWQgPSBHcmlkO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBleHBhbmRlZCByb3csIHVzZWQgZm9yIGhhbmRsaW5nIHJvdyBleHBhbnNpb24gbG9naWMuXHJcblx0ICovXHJcblx0cHVibGljIGV4cGFuZGVkUm93OiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IGZvciBzZXR0aW5nIHRoZSBkZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgcGFnaW5hdGlvbi4gXHJcblx0ICogRGVmYXVsdCB2YWx1ZSBpcyAxNS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IGZvciBzZXR0aW5nIGF2YWlsYWJsZSBwYWdlIHNpemUgb3B0aW9ucyBpbiB0aGUgcGFnaW5hdG9yLlxyXG5cdCAqIERlZmF1bHQgb3B0aW9ucyBpbmNsdWRlIFs1LCAxMCwgMTUsIDIwLCAzMCwgNTAsIDEwMCwgMjAwXS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwYWdlU2l6ZU9wdGlvbnM6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDE1LCAyMCwgMzAsIDUwLCAxMDAsIDIwMF07XHJcblxyXG5cdC8qIFxyXG5cdCAqIFRoaXMgZGVjb3JhdG9yIGJpbmRzIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciBlbGVtZW50IGJ5IGl0cyB0ZW1wbGF0ZSByZWZlcmVuY2UuXHJcblx0ICogVGhlIGBzY3JvbGxDb250YWluZXJgIHdpbGwgcmVmZXJlbmNlIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgdGVtcGxhdGUgd2l0aCBgI3Njcm9sbENvbnRhaW5lcmAuXHJcblx0ICogSXQgd2lsbCBhbGxvdyBhY2Nlc3MgdG8gdGhlIG5hdGl2ZSBET00gZWxlbWVudCBmb3IgbWFuYWdpbmcgc2Nyb2xsIG9wZXJhdGlvbnMuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgc2Nyb2xsQ29udGFpbmVyPzogRWxlbWVudFJlZjtcclxuXHJcblx0LyogXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyBhY3RpdmVseSBkcmFnZ2luZyB0aGUgc2Nyb2xsIGNvbnRhaW5lci5cclxuXHQgKiBUaGlzIGZsYWcgZW5zdXJlcyB0aGF0IHNjcm9sbGluZyBvbmx5IG9jY3VycyB3aGVuIGEgZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsXHJcblx0ICogcHJvdmlkaW5nIGEgc21vb3RoZXIgYW5kIG1vcmUgY29udHJvbGxlZCB1c2VyIGV4cGVyaWVuY2UgZHVyaW5nIGludGVyYWN0aW9ucy5cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0YXJ0RHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcblx0LyogXHJcblx0ICogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSByaWdodCBtb3VzZSBidXR0b24gaXMgYWN0aXZlbHkgZHJhZ2dpbmcgdGhlIHNjcm9sbCBjb250YWluZXIuXHJcblx0ICogSXQgZW5zdXJlcyB0aGF0IHNjcm9sbGluZyBvY2N1cnMgb25seSBkdXJpbmcgYWN0aXZlIGRyYWdnaW5nLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuXHQvKiBcclxuXHQgKiBTdG9yZXMgdGhlIGluaXRpYWwgWCBjb29yZGluYXRlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLlxyXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG1vdmVkIGR1cmluZyBkcmFnZ2luZywgZW5hYmxpbmcgc21vb3RoIHNjcm9sbGluZy5cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0YXJ0WDogbnVtYmVyID0gMDtcclxuXHJcblx0LyogXHJcblx0ICogS2VlcHMgdHJhY2sgb2YgdGhlIGNvbnRhaW5lcuKAmXMgc2Nyb2xsIHBvc2l0aW9uIGJlZm9yZSB0aGUgZHJhZyBiZWdpbnMuXHJcblx0ICogVGhpcyBhbGxvd3MgdXBkYXRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiByZWFsLXRpbWUgYXMgdGhlIHVzZXIgbW92ZXMgdGhlIG1vdXNlLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2Nyb2xsTGVmdDogbnVtYmVyID0gMDtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3IgZm9yIHRoZSBjb21wb25lbnQsIGluamVjdGluZyBzZXJ2aWNlcyBuZWVkZWQgZm9yIGZvcm0gYnVpbGRpbmcsXHJcblx0ICogZHluYW1pYyBjb250ZW50IGhhbmRsaW5nLCBhbmQgY2hhbmdlIGRldGVjdGlvbi5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZm9ybUJ1aWxkZXIgU2VydmljZSBmb3IgY3JlYXRpbmcgZm9ybSBjb250cm9scyBhbmQgbWFuYWdpbmcgZm9ybSBsb2dpYy5cclxuXHQgKiBAcGFyYW0gZHluYW1pY0J1aWxkZXIgU2VydmljZSBmb3IgZHluYW1pY2FsbHkgY29uc3RydWN0aW5nIHRhYmxlIGNvbXBvbmVudHMuXHJcblx0ICogQHBhcmFtIGNoYW5nZURldGVjdG9yIFNlcnZpY2UgZm9yIGRldGVjdGluZyBhbmQgdHJpZ2dlcmluZyBVSSBjaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBkeW5hbWljQnVpbGRlcjogRHluYW1pY0J1aWxkZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgaXMgaW52b2tlZCBpbW1lZGlhdGVseSBhZnRlciB0aGVcclxuXHQgKiBkZWZhdWx0IGNoYW5nZSBkZXRlY3RvciBoYXMgY2hlY2tlZCB0aGUgZGlyZWN0aXZlJ3NcclxuXHQgKiBkYXRhLWJvdW5kIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCB0aW1lLFxyXG5cdCAqIGFuZCBiZWZvcmUgYW55IG9mIHRoZSB2aWV3IG9yIGNvbnRlbnQgY2hpbGRyZW4gaGF2ZSBiZWVuIGNoZWNrZWQuXHJcblx0ICogSXQgaXMgaW52b2tlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgZGlyZWN0aXZlIGlzIGluc3RhbnRpYXRlZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmNsYXNzVHlwZSkge1xyXG5cdFx0XHQvKiBHZXQgdGhlIHRhYmxlIGRlZmluaXRpb24gdXNpbmcgdGhlIGNsYXNzIHR5cGUgKi9cclxuXHRcdFx0dmFyIHRhYmxlRGVmaW5pdGlvbiA9IGdldFRhYmxlRGVmaW5pdGlvbih0aGlzLmNsYXNzVHlwZSk7XHJcblx0XHRcdGlmICh0YWJsZURlZmluaXRpb24pIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSBbLi4udGFibGVEZWZpbml0aW9uIS5jb2x1bW5zID8/IFtdXTtcclxuXHRcdFx0XHRpZiAodGhpcy5yb3dNZW51SXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdC8qIENoZWNrIGlmIHRoZSBhY3Rpb24gY29sdW1uIGFscmVhZHkgZXhpc3RzICovXHJcblx0XHRcdFx0XHR2YXIgYWN0aW9uQ29sbXVuID0gdGhpcy5fY29sdW1ucz8uZmluZCh4ID0+IHgubmFtZSA9PSAnYWN0aW9uJyk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgc28sIGp1c3QgYWRkIHRoZSBtZW51IGl0ZW1zIHRvIGl0ICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uQ29sbXVuICE9IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0YWN0aW9uQ29sbXVuLm1lbnUgfHw9IHsgaWNvbjogJ21vcmVfdmVydCcgfTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yb3dNZW51SXRlbXMuZm9yRWFjaCh5ID0+IGFjdGlvbkNvbG11biEubWVudSEuaXRlbXM/LnVuc2hpZnQoeSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIE90aGVyd2lzZSBhZGQgYSBuZXcgb25lICovXHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fY29sdW1ucy5wdXNoKG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0XHRcdFx0aW5kZXg6IDIwMDAsXHJcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2FjdGlvbicsXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0czogWydhY3Rpb24nLCAnY29tbW9uJ10sXHJcblx0XHRcdFx0XHRcdFx0dHlwZTogVGFibGVDb2x1bW5UeXBlLkFjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRtZW51OiB7IGljb246ICdtb3JlX3ZlcnQnLCBpdGVtczogdGhpcy5yb3dNZW51SXRlbXMgfSxcclxuXHRcdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdHN0aWNreUVuZDogdHJ1ZVxyXG5cdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnJvd0FjdGlvbikge1xyXG5cdFx0XHRcdFx0dGhpcy5fY29sdW1ucy5wdXNoKG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0XHRcdGluZGV4OiAyMDAwLFxyXG5cdFx0XHRcdFx0XHRuYW1lOiAnYWN0aW9uJyxcclxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0czogWydhY3Rpb24nLCAnY29tbW9uJ10sXHJcblx0XHRcdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5BY3Rpb24sXHJcblx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRtZW51OiB0aGlzLnJvd0FjdGlvbixcclxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0c3RpY2t5RW5kOiB0cnVlXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBBZGQgY2hlY2tib3ggY29sdW1uICovXHJcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0YWJsZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zLnVuc2hpZnQobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogJ3NlbGVjdCcsXHJcblx0XHRcdFx0XHRcdGNvbHVtblNldHM6IFsnc2VsZWN0JywgJ2NvbW1vbiddLFxyXG5cdFx0XHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQ2hlY2tib3gsXHJcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcblx0XHRcdFx0XHRcdHN0aWNreTogdHJ1ZVxyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEJ1aWxkIGRpc3BsYXllZCBjb2x1bW5zICYgZmlsdGVyICovXHJcblx0XHR0aGlzLmNvbHVtbnMkPy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdC8qIEZpbHRlciB0aGUgY29sdW1ucyBiYXNlZCBvbiB0aGUgaW5kaXZpZHVhbCBjb2x1bW4ncyBjb2x1bW5TZXRzIHByb3BlcnR5IGFuZCB0aGUgZ2xvYmFsIGNvbHVtblNldHMgKi9cclxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gKHRoaXMuY29sdW1uU2V0cz8ubGVuZ3RoID8/IDApID4gMFxyXG5cdFx0XHRcdD8gdGhpcy5jb2x1bW5zPy5maWx0ZXIoYyA9PiB0aGlzLmNvbHVtblNldHM/LnNvbWUoc2V0ID0+IGMuY29sdW1uU2V0cz8uaW5jbHVkZXMoc2V0KSkpXHJcblx0XHRcdFx0OiB0aGlzLmNvbHVtbnM7XHJcblxyXG5cdFx0XHQvKiBCdWlsZCB0aGUgZGlzcGxheWVkIGNvbHVtbnMgYnkgZmlsdGVyaW5nIG91dCB0aGUgZXhjbHVkZWQgY29sdW1ucyBhbmQgbWFwcGluZyB0byB0aGVpciBuYW1lcyAqL1xyXG5cdFx0XHR0aGlzLmRpc3BsYXllZENvbHVtbnMkID0gb2Yoc2VsZWN0ZWRDb2x1bW5zXHJcblx0XHRcdFx0LyogRXhjbHVkZSBjb2x1bW5zIHRoYXQgYXJlIGluIHRoZSBleGNsdWRlZENvbHVtbnMgbGlzdCAqL1xyXG5cdFx0XHRcdD8uZmlsdGVyKHggPT4gIXRoaXMuZXhjbHVkZWRDb2x1bW5zPy5pbmNsdWRlcyh4Lm5hbWUpKVxyXG5cdFx0XHRcdC8qIE1hcCB0aGUgcmVtYWluaW5nIGNvbHVtbnMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSAqL1xyXG5cdFx0XHRcdD8ubWFwKGMgPT4gYy5uYW1lKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0LyogQnVpbGQgdGhlIGRpc3BsYXllZCBmaWx0ZXIgY29sdW1ucyBieSBmaWx0ZXJpbmcgb3V0IHRoZSBleGNsdWRlZCBjb2x1bW5zIGFuZCBwcmVmaXhpbmcgd2l0aCAnZmlsdGVyLicgKi9cclxuXHRcdFx0dGhpcy5kaXNwbGF5ZWRGaWx0ZXJDb2x1bW5zJCA9IG9mKHNlbGVjdGVkQ29sdW1uc1xyXG5cdFx0XHRcdC8qIEV4Y2x1ZGUgY29sdW1ucyB0aGF0IGFyZSBpbiB0aGUgZXhjbHVkZWRDb2x1bW5zIGxpc3QgKi9cclxuXHRcdFx0XHQ/LmZpbHRlcih4ID0+ICF0aGlzLmV4Y2x1ZGVkQ29sdW1ucz8uaW5jbHVkZXMoeC5uYW1lKSlcclxuXHRcdFx0XHQvKiBNYXAgdGhlIHJlbWFpbmluZyBjb2x1bW5zIHRvIGEgZmlsdGVyLWZyaWVuZGx5IHN0cmluZyB3aXRoICdmaWx0ZXIuJyBwcmVmaXggKi9cclxuXHRcdFx0XHQ/Lm1hcChjID0+IGBmaWx0ZXIuJHsoYy5maWx0ZXIgfHwgYy5uYW1lKX1gKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogU2V0IHRoZSB0YWJsZSBjb2x1bW5zICovXHJcblx0XHR0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcclxuXHJcblx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLnNjcm9sbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuXHRcdGlmIChjb250YWluZXIpIHtcclxuXHRcdFx0LyogXHJcblx0XHRcdCAqIERpc2FibGUgdGhlIGNvbnRleHQgbWVudSBvbiByaWdodC1jbGljayB0byBhbGxvdyBzbW9vdGggc2Nyb2xsaW5nIFxyXG5cdFx0XHQgKiB3aXRob3V0IGludGVyZmVyZW5jZSBmcm9tIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSBiZWhhdmlvci5cclxuXHRcdFx0ICovXHJcblx0XHRcdGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlOiBNb3VzZUV2ZW50KSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xyXG5cclxuXHRcdFx0LyogXHJcblx0XHRcdCAqIFN0YXJ0IGRyYWdnaW5nIHdoZW4gdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIChidXR0b24gPT09IDIpLlxyXG5cdFx0XHQgKiBUaGlzIHNhdmVzIHRoZSBpbml0aWFsIHBvc2l0aW9uIGFuZCBzY3JvbGwgc3RhdGUgZm9yIGxhdGVyIHVzZSBkdXJpbmcgbW92ZW1lbnQuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuXHRcdFx0XHRpZiAoZS5idXR0b24gPT09IDIgJiYgdGhpcy5zY3JvbGxDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdC8qIFByZXZlbnRzIGFueSBkZWZhdWx0IGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCByaWdodC1jbGljayAqL1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEFjdGl2YXRlIHRoZSBkcmFnZ2luZyBtb2RlLCBhbGxvd2luZyBob3Jpem9udGFsIHNjcm9sbGluZyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zdGFydERyYWdnaW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHQvKiBTdG9yZSB0aGUgaW5pdGlhbCBYIHBvc2l0aW9uICovXHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0WCA9IGUucGFnZVggLSBjb250YWluZXIub2Zmc2V0TGVmdDtcclxuXHJcblx0XHRcdFx0XHQvKiBTYXZlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIFxyXG5cdFx0XHQgKiBTdG9wIGRyYWdnaW5nIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgY29udGFpbmVyLlxyXG5cdFx0XHQgKiBUaGlzIGVuc3VyZXMgdGhlIHNjcm9sbGluZyBzdG9wcyBldmVuIGlmIHRoZSB1c2VyIG1vdmVzIHRoZSBjdXJzb3Igb3V0c2lkZSB0aGUgYm91bmRhcmllcy5cclxuXHRcdFx0ICovXHJcblx0XHRcdGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKGU6IE1vdXNlRXZlbnQpID0+IHRoaXMuc3RvcERyYWdnaW5nKGUpKTtcclxuXHJcblx0XHRcdC8qIFxyXG5cdFx0XHQgKiBTdG9wIGRyYWdnaW5nIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCAob24gbW91c2UgdXApLlxyXG5cdFx0XHQgKiBUaGlzIHByZXZlbnRzIGZ1cnRoZXIgc2Nyb2xsIG1vdmVtZW50cyBhZnRlciB0aGUgdXNlciByZWxlYXNlcyB0aGUgbW91c2UuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLnN0b3BEcmFnZ2luZyhlKSk7XHJcblxyXG5cdFx0XHQvKiBcclxuXHRcdFx0ICogSGFuZGxlIHRoZSBhY3R1YWwgZHJhZ2dpbmcgKHNjcm9sbGluZykgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQuXHJcblx0XHRcdCAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW92ZW1lbnQgYW5kIHVwZGF0ZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBhY2NvcmRpbmdseS5cclxuXHRcdFx0ICovXHJcblx0XHRcdGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZTogTW91c2VFdmVudCkgPT4ge1xyXG5cdFx0XHRcdC8qIElmIGRyYWdnaW5nIGlzIG5vdCBhY3RpdmUgb3Igc2Nyb2xsIGNvbnRhaW5lciBpcyB1bmRlZmluZWQsIGV4aXQgKi9cclxuXHRcdFx0XHRpZiAoIXRoaXMuc3RhcnREcmFnZ2luZyB8fCAhdGhpcy5zY3JvbGxDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIEFjdGl2YXRlIHRoZSBkcmFnZ2luZyBtb2RlLCBhbGxvd2luZyBob3Jpem9udGFsIHNjcm9sbGluZyAqL1xyXG5cdFx0XHRcdHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XHJcblxyXG5cdFx0XHRcdC8qIFByZXZlbnQgZGVmYXVsdCBhY3Rpb24gdG8gZW5zdXJlIHNtb290aCBiZWhhdmlvciAqL1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0LyogQ2FsY3VsYXRlIHRoZSBjdXJyZW50IG1vdXNlIFggcG9zaXRpb24gKi9cclxuXHRcdFx0XHRjb25zdCB4ID0gZS5wYWdlWCAtIGNvbnRhaW5lci5vZmZzZXRMZWZ0O1xyXG5cclxuXHRcdFx0XHQvKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG1vdmVkIChhbXBsaWZpZWQgZm9yIHNwZWVkKSAqL1xyXG5cdFx0XHRcdGNvbnN0IHdhbGsgPSAoeCAtIHRoaXMuc3RhcnRYKSAqIDI7XHJcblxyXG5cdFx0XHRcdC8qIFVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIG1vdmVtZW50ICovXHJcblx0XHRcdFx0Y29udGFpbmVyLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQgLSB3YWxrO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbHVtbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgdXBkYXRlQ29sdW1ucygpOiB2b2lkIHtcclxuXHRcdC8qIFNvcnQgdGhlIGNvbHVtbnMgYnkgaW5kZXggKi9cclxuXHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLmNvbHVtbnMgfHwgW10sICdpbmRleCcpO1xyXG5cclxuXHRcdC8qIFRyaWdnZXIgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5jb2x1bW5zU3ViamVjdC5uZXh0KHRoaXMuY29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb3VudHMgdmlzaWJsZSBhY3Rpb24gbWVudXNcclxuXHQgKiBAcGFyYW0gcm93IFxyXG5cdCAqIEBwYXJhbSBjb2x1bW4gXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGhhc1Zpc2libGVSb3dNZW51SXRlbXMocm93OiBhbnksIGNvbHVtbjogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoY29sdW1uPy5yb3dNZW51SXRlbXM/LmZpbHRlcih4ID0+ICF4LmhpZGUgfHwgIXguaGlkZShyb3cpKT8ubGVuZ3RoID8/IC0xKSA+IDA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGZ1bmN0aW9uIHRvIHRvIGNvbXB1dGUgdGhlIGlkZW50aXR5IG9mIGl0ZW1zIGluIGFuIGl0ZXJhYmxlLlxyXG5cdCAqIEBwYXJhbSBpbmRleCBcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke2l0ZW0uaWR9YDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZnVuY3Rpb24gdG8gdG8gY29tcHV0ZSB0aGUgaWRlbnRpdHkgb2YgaXRlbXMgaW4gYW4gaXRlcmFibGUuXHJcblx0ICogQHBhcmFtIGluZGV4IFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zVHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGl0ZW0ubmFtZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgcm93IGNsaWNrIGV2ZW50XHJcblx0ICogQHBhcmFtIGluZGV4IFxyXG5cdCAqIEBwYXJhbSByb3cgXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZVJvd0NsaWNrKGluZGV4OiBhbnksIHJvdzogYW55KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy50ZW1wbGF0ZVJlZikge1xyXG5cdFx0XHR0aGlzLmV4cGFuZGVkUm93ID0gdGhpcy5leHBhbmRlZFJvdyA9PT0gcm93ID8gbnVsbCA6IHJvdztcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHRoaXMuZGV0YWlsc1RlbXBsYXRlKSB7XHJcblx0XHRcdHRoaXMuZXhwYW5kZWRSb3cgPSB0aGlzLmV4cGFuZGVkUm93ID09PSByb3cgPyBudWxsIDogcm93O1xyXG5cdFx0XHRpZiAodGhpcy5kZXRhaWxzVGVtcGxhdGVSZWYpIHtcclxuXHRcdFx0XHR0aGlzLmR5bmFtaWNCdWlsZGVyLmNvbXBpbGVIdG1sKHRoaXMuZGV0YWlsc1RlbXBsYXRlUmVmLmdldChpbmRleCksIHRoaXMuZGV0YWlsc1RlbXBsYXRlLCByb3cpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0dGhpcy5yb3dDbGljay5lbWl0KHJvdyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2sgd2l0aCB0aGUgcmlnaHQgYnV0dG9uXHJcblx0ICogQHBhcmFtIGV2ZW50IE1vdXNlRXZlbnQsIGl0IGNvbnRhaW5zIHRoZSBjb29yZGluYXRlc1xyXG5cdCAqIEBwYXJhbSBpdGVtIE91ciBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcm93IG9mIHRoZSB0YWJsZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVSb3dSaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucm93Q29udGV4dE1lbnVUcmlnZ2Vycz8udG9BcnJheSgpPy5mb3JFYWNoKHggPT4geC5jbG9zZU1lbnUoKSk7XHJcblx0XHR2YXIgbWVudVRyaWdnZXIgPSB0aGlzLnJvd0NvbnRleHRNZW51VHJpZ2dlcnM/LnRvQXJyYXkoKT8uZmlsdGVyKHggPT4geFsnX2VsZW1lbnQnXT8ubmF0aXZlRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdpZCcpID09IGBtZW51LSR7aXRlbS5pZH1gKVswXTtcclxuXHRcdGlmIChtZW51VHJpZ2dlciAhPSBudWxsKSB7XHJcblx0XHRcdC8qIEF2b2lkcyB0byBzaG93IHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSByaWdodC1jbGljayBtZW51IG9mIHRoZSBicm93c2VyICovXHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHQvKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51ICovXHJcblx0XHRcdG1lbnVUcmlnZ2VyWydfZWxlbWVudCddPy5uYXRpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHBvc2l0aW9uOiBmaXhlZDsgbGVmdDogJHtldmVudC5jbGllbnRYfXB4OyB0b3A6ICR7ZXZlbnQuY2xpZW50WX1weGApO1xyXG5cclxuXHRcdFx0LyogUGFzcyB0byB0aGUgbWVudSB0aGUgY3VycmVudCBvYmplY3QgKi9cclxuXHRcdFx0bWVudVRyaWdnZXIubWVudURhdGEgPSB7IGl0ZW06IGl0ZW0gfVxyXG5cclxuXHRcdFx0LyogT3BlbiB0aGUgbWVudSAqL1xyXG5cdFx0XHRtZW51VHJpZ2dlci5vcGVuTWVudSgpO1xyXG5cclxuXHRcdFx0LyogSGFuZGxlIGNsaWNrcyBvbiB0aGUgbWVudSBvdmVybGF5ICovXHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay1vdmVybGF5LWNvbnRhaW5lcicpWzBdPy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChvZmZFdmVudDogYW55KSA9PiB7XHJcblx0XHRcdFx0b2ZmRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRtZW51VHJpZ2dlciEuY2xvc2VNZW51KCk7XHJcblx0XHRcdH0sIHsgb25jZTogdHJ1ZSB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgbW9kZWwgY2hhbmdlc1xyXG5cdCAqIEBwYXJhbSBjb2x1bW4gXHJcblx0ICogQHBhcmFtIHJvdyBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlTW9kZWxDaGFuZ2UoY29sdW1uOiBUYWJsZUNvbHVtbiwgcm93OiBhbnksIGZvcm1Hcm91cD86IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0aWYgKHR5cGVvZiBjb2x1bW4/LmV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGNvbHVtbi5ldmVudChyb3csIGZvcm1Hcm91cCwgY29sdW1uLmV2ZW50QXJncyA/PyB0aGlzLmNvbnRleHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyBrZXlkb3duIGVudGVyIG9mIDxpbnB1dD4gYW5kIDx2ZC1zZWxlY3Q+XHJcblx0ICogQHBhcmFtICRldmVudCBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlS2V5ZG93bkVudGVyKCRldmVudDogRXZlbnQpOiBib29sZWFuIHtcclxuXHRcdCgkZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uYmx1cigpO1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyBhbiBlbnRpdHlcclxuXHQgKiBAcGFyYW0gcm93IFxyXG5cdCAqIEBwYXJhbSBmaWVsZE5hbWUgXHJcblx0ICogQHBhcmFtIHBhdGggXHJcblx0ICovXHJcblx0cHVibGljIHBhdGNoKHJvdzogYW55LCBmaWVsZHM6IEFycmF5PHN0cmluZz4sIHZhbHVlOiBhbnksIGluY2x1ZGVzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBlbnRpdHkgYnkgSUQgKi9cclxuXHRcdGxldCBlbnRpdHkgPSB0aGlzLmRhdGFTb3VyY2UuaXRlbXM/LmZpbHRlcigoeDogYW55KSA9PiAoPGFueT54KS5pZCA9PT0gcm93LmlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2Uuc2VydmljZVxyXG5cdFx0XHRcdC5wYXRjaChyb3cuaWQsIHBhdGNoZXMsIG51bGwsIHsgaGVhZGVyczogeyAnU2hvdy1NZXNzYWdlJzogJ1llcycgfSwgcGFyYW1zOiBpbmNsdWRlcyA/IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiBpbmNsdWRlcyB9KSA6IG51bGwgfSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKChfOiBhbnkpID0+IHRoaXMuZGF0YVNvdXJjZS5yZWxvYWQoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW5kZXJzIHJvd3MgYmFzZWQgb24gdGhlIHRhYmxlJ3MgbGF0ZXN0IHNldCBvZiBkYXRhLCB3aGljaCB3YXMgZWl0aGVyIHByb3ZpZGVkIGRpcmVjdGx5IGFzIGFuXHJcblx0ICogaW5wdXQgb3IgcmV0cmlldmVkIHRocm91Z2ggYW4gT2JzZXJ2YWJsZSBzdHJlYW0gKGRpcmVjdGx5IG9yIGZyb20gYSBEYXRhU291cmNlKS5cclxuXHQgKiBDaGVja3MgZm9yIGRpZmZlcmVuY2VzIGluIHRoZSBkYXRhIHNpbmNlIHRoZSBsYXN0IGRpZmYgdG8gcGVyZm9ybSBvbmx5IHRoZSBuZWNlc3NhcnlcclxuXHQgKiBjaGFuZ2VzIChhZGQvcmVtb3ZlL21vdmUgcm93cykuXHJcblx0ICovXHJcblx0cHVibGljIHJlbmRlclJvd3MoKTogdm9pZCB7XHJcblx0XHR0aGlzLnRhYmxlPy5yZW5kZXJSb3dzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIGEgc3RyaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24uXHJcblx0ICogXHJcblx0ICogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIGFuIGlucHV0IGV4cHJlc3Npb24gdGhhdCBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24uIFxyXG5cdCAqIElmIGl0J3MgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHByb3ZpZGVkIGl0ZW0gYW5kIGNvbnRleHQuIFxyXG5cdCAqIElmIGl0J3MgYSBzdHJpbmcsIGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMtaXMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgZXhwcmVzc2lvbiB0byBoYW5kbGUsIHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uLlxyXG5cdCAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBmdW5jdGlvbi5cclxuXHQgKiBAcmV0dXJucyAtIFRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZW0gYW5kIGNvbnRleHQsIG9yIHRoZSBzdHJpbmcgZXhwcmVzc2lvbiBpdHNlbGYuXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nIHwgRnVuY3Rpb24sIGl0ZW06IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcblx0XHQvKiBDaGVjayBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzeSAoZS5nLiwgbnVsbCwgdW5kZWZpbmVkLCBvciBlbXB0eSkgKi9cclxuXHRcdGlmICghZXhwcmVzc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIElmIHRoZSBleHByZXNzaW9uIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgd2l0aCB0aGUgaXRlbSBhbmQgY29udGV4dCAqL1xyXG5cdFx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdHJldHVybiBleHByZXNzaW9uKGl0ZW0sIHRoaXMuY29udGV4dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgdGhlIGV4cHJlc3Npb24gaXMgbm90IGEgZnVuY3Rpb24sIGFzc3VtZSBpdCdzIGEgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi9cclxuXHRcdHJldHVybiBleHByZXNzaW9uO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBhIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBpbiBhbiBvYmplY3QgYmFzZWQgb24gYSBkb3Qtc2VwYXJhdGVkIHBhdGguXHJcblx0ICogQHBhcmFtIHJvdyAtIFRoZSBvYmplY3QgaW4gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGJlaW5nIHNldC5cclxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIC0gQSBkb3Qtc2VwYXJhdGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIG5lc3RlZCBwcm9wZXJ0eS5cclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBzcGVjaWZpZWQgbmVzdGVkIHByb3BlcnR5LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXROZXN0ZWRQcm9wZXJ0eShyb3c6IGFueSwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIFNwbGl0IHRoZSBwcm9wZXJ0eVBhdGggaW50byBhbiBhcnJheSBvZiBrZXlzICovXHJcblx0XHRjb25zdCBrZXlzID0gcHJvcGVydHlQYXRoLnNwbGl0KCcuJyk7XHJcblxyXG5cdFx0LyogVXNlIHNsaWNlIHRvIGdldCBhbGwga2V5cyBleGNlcHQgdGhlIGxhc3Qgb25lIGFuZCByZWR1Y2UgdG8gdHJhdmVyc2UgdG8gdGhlIHNlY29uZC10by1sYXN0IGxldmVsICovXHJcblx0XHRrZXlzLnNsaWNlKDAsIC0xKS5yZWR1Y2UoKGFjYywga2V5KSA9PiBhY2MgJiYgYWNjW2tleV0sIHJvdylba2V5c1trZXlzLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyByb3cgY2xhc3Nlc1xyXG5cdCAqIEBwYXJhbSBjb2x1bW4gXHJcblx0ICogQHBhcmFtIHJvdyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0Um93Q2xhc3Nlcyhjb2x1bW46IFRhYmxlQ29sdW1uLCByb3c6IGFueSk6IGFueSB7XHJcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7XHJcblx0XHRcdCdndC14cyc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuWHMsXHJcblx0XHRcdCdndC1zbSc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuU20sXHJcblx0XHRcdCdndC1tZCc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuTWQsXHJcblx0XHRcdCdndC1sZyc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuTGcsXHJcblx0XHRcdCdndC14bCc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuWGwsXHJcblx0XHRcdCdndC14eGwnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlh4bCxcclxuXHRcdFx0J2hpZGRlbic6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuTm9uZSxcclxuXHRcdFx0J3RleHQtcmlnaHQnOiBjb2x1bW4uYXJyb3dCZWZvcmVcclxuXHRcdH0sIGNvbHVtbi5jZWxsTmdDbGFzcyA/IGNvbHVtbi5jZWxsTmdDbGFzcyhyb3csIHRoaXMuY29udGV4dCkgOiB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgdG8gY29uc29sZVxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9nKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSB7XHJcblx0XHRjb25zb2xlLmxvZyhtZXNzYWdlLCBvcHRpb25hbFBhcmFtcyk7XHJcblx0fVxyXG5cclxuXHQvKiBcclxuXHQgKiBUZXJtaW5hdGVzIHRoZSBkcmFnZ2luZyBhY3Rpb24gYnkgcmVzZXR0aW5nIHRoZSBgaXNEcmFnZ2luZ2AgZmxhZyBhZnRlciBhIGJyaWVmIGRlbGF5LlxyXG5cdCAqIElmIHRoZSBgc2Nyb2xsQ29udGFpbmVyYCBpcyBkZWZpbmVkLCBpdCBhbHNvIHJlbW92ZXMgdGhlICdncmFiYmluZycgY2xhc3MgXHJcblx0ICogZnJvbSB0aGUgY29udGFpbmVyIGVsZW1lbnQsIHdoaWNoIHJldmVydHMgdGhlIGN1cnNvciBiYWNrIHRvIGl0cyBkZWZhdWx0IHN0YXRlLlxyXG5cdCAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2aXN1YWwgZmVlZGJhY2sgKGdyYWJiaW5nIGN1cnNvcikgaXMgb25seSBhY3RpdmUgZHVyaW5nIFxyXG5cdCAqIHRoZSBkcmFnIG9wZXJhdGlvbiBhbmQgaXMgcHJvcGVybHkgcmVtb3ZlZCB3aGVuIHRoZSB1c2VyIHN0b3BzIGludGVyYWN0aW5nLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3RvcERyYWdnaW5nKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcblx0XHQvKiBSZXNldCBkcmFnZ2luZyBzdGF0ZSB0byBzdG9wIHRoZSBzY3JvbGwgaW50ZXJhY3Rpb24gKi9cclxuXHRcdHRoaXMuc3RhcnREcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogSW50cm9kdWNlIGEgc2xpZ2h0IGRlbGF5IGJlZm9yZSByZXNldHRpbmcgdGhlIGRyYWdnaW5nIHN0YXRlLlxyXG5cdFx0ICogVGhpcyBhbGxvd3MgZm9yIHNtb290aGVyIHRyYW5zaXRpb25zIGFuZCBlbnN1cmVzIHRoYXQgYW55IGZpbmFsIHNjcm9sbCBhZGp1c3RtZW50c1xyXG5cdFx0ICogYXJlIGFwcGxpZWQgYmVmb3JlIG1hcmtpbmcgdGhlIGRyYWdnaW5nIG9wZXJhdGlvbiBhcyBjb21wbGV0ZS5cclxuXHRcdCAqL1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdC8qIFJlc2V0IGRyYWdnaW5nIHN0YXRlIHRvIHN0b3AgdGhlIHNjcm9sbCBpbnRlcmFjdGlvbiAqL1xyXG5cdFx0XHR0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdC8qIFJlc3RvcmUgdGhlIGRlZmF1bHQgY3Vyc29yICovXHJcblx0XHRcdGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xyXG5cdFx0XHRcdHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZ3JhYmJpbmcnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSwgMjAwKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgaXMgaW52b2tlZCBpbW1lZGlhdGVseSBhZnRlciB0aGVcclxuXHQgKiBkZWZhdWx0IGNoYW5nZSBkZXRlY3RvciBoYXMgY29tcGxldGVkIG9uZSBjaGFuZ2UtY2hlY2sgY3ljbGVcclxuXHQgKiBmb3IgYSBjb21wb25lbnQncyB2aWV3LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcbn0iLCI8ZGl2IGNsYXNzPVwibG9hZGluZy1wcm9ncmVzc1wiICpuZ0lmPVwiIXN0YXRpY1wiPlxyXG5cdDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJkYXRhU291cmNlPy5pc0xvYWRpbmdcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSAjcmVnaW9uIERhdGEgdGFibGUgLS0+XHJcbjxkaXYgY2xhc3M9XCJtYXQtdGFibGUtY29udGFpbmVyIHNjcm9sbGJhci1zZWNvbmRhcnlcIiBbbmdDbGFzc109XCJ7J21hdC10YWJsZS1zdGlja3knOiBzdGlja3l9XCIgI3Njcm9sbENvbnRhaW5lcj5cclxuXHQ8dGFibGUgbWF0LXRhYmxlICN0YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW2RhdGFTb3VyY2VGaWx0ZXJdPVwiZGF0YVNvdXJjZUZpbHRlclwiIFtuZ0NsYXNzXT1cInsndGFibGUtZml4ZWQnOiAhc3RpY2t5ICYmICFkZXRhaWxzVGVtcGxhdGUgJiYgIXRlbXBsYXRlUmVmLCAndGFibGUtc3RpY2snOiBzdGlja3l9XCIgW3RyYWNrQnldPVwidHJhY2tCeVwiIG1hdFNvcnQgbWF0U29ydERpc2FibGVDbGVhciBbbWF0U29ydEFjdGl2ZV09XCJzb3J0QWN0aXZlfHwnaWQnXCIgW21hdFNvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiIG11bHRpVGVtcGxhdGVEYXRhUm93cz5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zJCB8IGFzeW5jOyB0cmFja0J5OmNvbHVtbnNUcmFja0J5XCI+XHJcblx0XHRcdDwhLS0gI3JlZ2lvbiBDb2x1bW4gZGVmIC0tPlxyXG5cdFx0XHQ8bmctY29udGFpbmVyIFtjZGtDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIiBbc3RpY2t5XT1cImNvbHVtbi5zdGlja3lcIiBbc3RpY2t5RW5kXT1cImNvbHVtbi5zdGlja3lFbmRcIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgI2hlYWRlciBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJcIiBsZXQtaGVhZGVyVGV4dD1cImhlYWRlclRleHRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2hlYWRlclRleHQ6IGNvbHVtbi5oZWFkZXIgfCBmdW5jOmNvbnRleHR9XCI+XHJcblx0XHRcdFx0XHQ8dGggbWF0LWhlYWRlci1jZWxsICpjZGtIZWFkZXJDZWxsRGVmIFttYXQtc29ydC1oZWFkZXJdPVwiY29sdW1uLnNvcnRCeSB8fCBjb2x1bW4ubmFtZVwiIFtoaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiIFtuZ1N0eWxlXT1cInttYXhXaWR0aDpjb2x1bW4ubWF4V2lkdGg/KGNvbHVtbi5tYXhXaWR0aCsoY29sdW1uLm1heFdpZHRoVW5pdCB8fCAncHgnKSk6bnVsbCxtaW5XaWR0aDpjb2x1bW4ubWluV2lkdGg/KGNvbHVtbi5taW5XaWR0aCsoY29sdW1uLm1pbldpZHRoVW5pdCB8fCAncHgnKSk6bnVsbCx3aWR0aDpjb2x1bW4ud2lkdGg/KGNvbHVtbi53aWR0aCsoY29sdW1uLndpZHRoVW5pdCB8fCAncHgnKSk6bnVsbH1cIiBbZGlzYWJsZWRdPVwiY29sdW1uLnR5cGUgPT0gQ29sdW1uVHlwZS5DaGVja2JveCB8fCBjb2x1bW4uZGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7J2d0LXhzJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5YcywgJ2d0LXNtJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5TbSwgJ2d0LW1kJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5NZCwgJ2d0LWxnJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5MZywgJ2d0LXhsJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5YbCwgJ2d0LXh4bCc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuWHhsLCAnaGlkZGVuJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5Ob25lfVwiIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi5hcnJvd0JlZm9yZT8nYmVmb3JlJzonYWZ0ZXInXCI+XHJcblx0XHRcdFx0XHRcdDxtYXQtY2hlY2tib3ggKm5nSWY9XCJjb2x1bW4udHlwZSA9PSBDb2x1bW5UeXBlLkNoZWNrYm94XCIgKGNoYW5nZSk9XCIkZXZlbnQgPyBkYXRhU291cmNlLnRvZ2dsZVNlbGVjdCgkZXZlbnQsIHNlbGVjdEFsbEZpbHRlcikgOiBudWxsXCIgW2Rpc2FibGVkXT1cIiFkYXRhU291cmNlLnBhZ2luYXRvcj8ubGVuZ3RoXCIgW2NoZWNrZWRdPVwiZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpICYmIGRhdGFTb3VyY2UuaXNBbGxTZWxlY3RlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwiZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpICYmICFkYXRhU291cmNlLmlzQWxsU2VsZWN0ZWQoKVwiPjwvbWF0LWNoZWNrYm94PlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNvbHVtbi50eXBlICE9IENvbHVtblR5cGUuQ2hlY2tib3hcIiBbbWF0VG9vbHRpcF09XCJoZWFkZXJUZXh0XCI+e3toZWFkZXJUZXh0fX08L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3RoPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PHRkIG1hdC1jZWxsICpjZGtDZWxsRGVmPVwibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXA/Y29sdW1uLnRvb2x0aXAocm93LCB1bmRlZmluZWQsIGNvbnRleHQpOm51bGxcIiBbbWF0VG9vbHRpcENsYXNzXT1cImNvbHVtbi50b29sdGlwQ2xhc3M/PycnXCIgW2hpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3Nlcyhjb2x1bW4sIHJvdylcIiBbbmdTdHlsZV09XCJ7bWF4V2lkdGg6Y29sdW1uLm1heFdpZHRoPyhjb2x1bW4ubWF4V2lkdGgrKGNvbHVtbi5tYXhXaWR0aFVuaXQgfHwgJ3B4JykpOm51bGwsbWluV2lkdGg6Y29sdW1uLm1pbldpZHRoPyhjb2x1bW4ubWluV2lkdGgrKGNvbHVtbi5taW5XaWR0aFVuaXQgfHwgJ3B4JykpOm51bGwsd2lkdGg6Y29sdW1uLndpZHRoPyhjb2x1bW4ud2lkdGgrKGNvbHVtbi53aWR0aFVuaXQgfHwgJ3B4JykpOm51bGx9XCI+XHJcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI3Jvd1ZhbCBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dWYWxcIiBsZXQtcm93VmFsdWUgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGNvbHVtbj8uY29udGVudCAmJiBjb2x1bW4/LmNvbnRlbnQocm93LCB1bmRlZmluZWQsIGNvbnRleHQpfVwiPlxyXG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBDaGVja2JveCBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1jaGVja2JveCAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5DaGVja2JveFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IGRhdGFTb3VyY2Uuc2VsZWN0aW9uTW9kZWwudG9nZ2xlKHJvdykgOiBudWxsXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5IHx8IChjb2x1bW4uZGlzYWJsZWQgfHwgKGNvbHVtbi5kaXNhYmxlICYmIGNvbHVtbi5kaXNhYmxlKHJvdywgdW5kZWZpbmVkLCBjb250ZXh0KSkpXCIgW2NoZWNrZWRdPVwiZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvdylcIj48L21hdC1jaGVja2JveD5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBFbnVtIGNvbHVtbiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5FbnVtXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmVudW1NZXRhZGF0YTsgZWxzZSBub0VudW1NZXRhZGF0YVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm11bHRpcGxlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93VmFsdWU7IGxldCBpID0gaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpIDwgMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgbGV0LWRpc3BsYXlWYWx1ZT1cImRpc3BsYXlWYWx1ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGlzcGxheVZhbHVlOiBjb2x1bW4uZW51bU1ldGFkYXRhW2l0ZW1dLmRpc3BsYXkgfVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNtYWxsICpuZ0lmPVwiaSA9PT0gMSAmJiByb3dWYWx1ZT8ubGVuZ3RoID4gMlwiIFttYXRUb29sdGlwXT1cIihyb3dWYWx1ZSB8IHNsaWNlOjIgfCBtYXA6Y29sdW1uLmVudW1NZXRhZGF0YSB8IG1hcDonZGlzcGxheScpIHwgam9pbjonXFxuJ1wiIG1hdFRvb2x0aXBDbGFzcz1cIm1hdC10b29sdGlwLW11bHRpbGluZVwiPi4uLjwvc21hbGw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtZGlzcGxheVZhbHVlPVwiZGlzcGxheVZhbHVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWF0LWNoaXAtcm93IGRpc2FibGVSaXBwbGU9XCJ0cnVlXCIgc2VsZWN0YWJsZT1cImZhbHNlXCIgW21hdFRvb2x0aXBdPVwiZGlzcGxheVZhbHVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPnt7IGRpc3BsYXlWYWx1ZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWF0LWNoaXAtcm93PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInJvd1ZhbHVlID49IDBcIiBjbGFzcz1cIm5hXCIgW2lubmVySHRtbF09XCIoY29sdW1uLmVudW1NZXRhZGF0YVtyb3dWYWx1ZV18fHt9KS5kaXNwbGF5XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI25vRW51bU1ldGFkYXRhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm11bHRpcGxlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93VmFsdWU7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNtYWxsICpuZ0lmPVwiaTwyXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e2l0ZW0gfCBlbnVtOmNvbHVtbi5lbnVtVHlwZTpjb2x1bW4uZW51bVByZWZpeCwgc2VsZWN0LCB0eXBlIHt0eXBlfSBvdGhlciB7e3tpdGVtIHwgZW51bTpjb2x1bW4uZW51bVR5cGU6Y29sdW1uLmVudW1QcmVmaXh9fX19PC9zbWFsbD48c21hbGwgKm5nSWY9XCJpPT0xICYmIHJvd1ZhbHVlPy5sZW5ndGggPiAyXCI+LCAuLi48L3NtYWxsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJyb3dWYWx1ZSA+PSAwXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e3Jvd1ZhbHVlIHwgZW51bTpjb2x1bW4uZW51bVR5cGU6Y29sdW1uLmVudW1QcmVmaXgsIHNlbGVjdCwgdHlwZSB7dHlwZX0gb3RoZXIge3t7cm93VmFsdWUgfCBlbnVtOmNvbHVtbi5lbnVtVHlwZTpjb2x1bW4uZW51bVByZWZpeH19fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjcmVjdXJzaXZlQ29udGFpbmVyIGxldC1jb2x1bW5OYW1lU2VnbWVudHM9XCJzZWdtZW50c1wiIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtcGFyZW50Rm9ybUdyb3VwPVwicGFyZW50Rm9ybUdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBJZiB0aGUgY29sdW1uTmFtZVNlZ21lbnRzIGFycmF5IGlzIGVtcHR5LCB3ZSdyZSBhdCB0aGUgbGVhZiBub2RlIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbk5hbWVTZWdtZW50cy5sZW5ndGg7IGVsc2Ugbm90TGFzdFNlZ21lbnRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gVG9nZ2xlIGNvbHVtbiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJDb2x1bW5UeXBlLlRvZ2dsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hdC1zbGlkZS10b2dnbGUgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgKGNoYW5nZSk9XCJjb2x1bW4uY2hhbmdlP2NvbHVtbi5jaGFuZ2UocGFyZW50Rm9ybUdyb3VwLnZhbHVlLCBwYXJlbnRGb3JtR3JvdXAsIGNvbnRleHQpOmhhbmRsZU1vZGVsQ2hhbmdlKGNvbHVtbiwgcGFyZW50Rm9ybUdyb3VwLnZhbHVlLCBwYXJlbnRGb3JtR3JvdXApXCIgW2Rpc2FibGVDb250cm9sXT1cInJlYWRvbmx5IHx8IChjb2x1bW4uZGlzYWJsZWQgfHwgKGNvbHVtbi5kaXNhYmxlICYmIGNvbHVtbi5kaXNhYmxlKHBhcmVudEZvcm1Hcm91cC52YWx1ZSwgcGFyZW50Rm9ybUdyb3VwLCBjb250ZXh0KSkpXCIgY29sb3I9XCJhY2NlbnRcIj48L21hdC1zbGlkZS10b2dnbGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gVGV4dCBJbnB1dCBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCJDb2x1bW5UeXBlLlRleHRJbnB1dFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGRlbnNlLTMgbGF5b3V0PVwiY29sdW1uXCIgbGF5b3V0LWFsaWduPVwiY2VudGVyIHN0YXJ0XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwXCIgdHlwZT1cInt7Y29sdW1uLmlucHV0VHlwZX19XCIgYXV0b2NvbXBsZXRlPVwibm9uZVwiIFtkaXNhYmxlQ29udHJvbF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCkpKVwiIFttaW5dPVwiY29sdW1uLmlucHV0TWluP2NvbHVtbi5pbnB1dE1pbihwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCk6bnVsbFwiIFttYXhdPVwiY29sdW1uLmlucHV0TWF4P2NvbHVtbi5pbnB1dE1heChwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCk6bnVsbFwiIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUtleWRvd25FbnRlcigkZXZlbnQpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBWRC1TZWxlY3QgY29sdW1uIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5TZWxlY3RcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBkZW5zZS0zIGxheW91dD1cImNvbHVtblwiIGxheW91dC1hbGlnbj1cImNlbnRlciBzdGFydFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXBcIiBbZW51bV09XCJjb2x1bW4uZW51bVR5cGVcIiBbZW51bU1ldGFkYXRhXT1cImNvbHVtbi5lbnVtTWV0YWRhdGFcIiBbZW51bUZpbHRlcl09XCJjb2x1bW4uZW51bUZpbHRlciB8IGZ1bmM6cGFyZW50Rm9ybUdyb3VwLnZhbHVlOmNvbnRleHRcIiBbcHJlZml4XT1cImNvbHVtbi5lbnVtUHJlZml4XCIgW29wdGlvbnNdPVwiY29sdW1uLm9wdGlvbnNcIiBbZGVmYXVsdE9wdGlvbl09XCJjb2x1bW4uZGVmYXVsdE9wdGlvbj8/dHJ1ZVwiIFtkaXNhYmxlQ29udHJvbF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCkpKVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiY29sdW1uLmNoYW5nZT9jb2x1bW4uY2hhbmdlKHBhcmVudEZvcm1Hcm91cC52YWx1ZSwgcGFyZW50Rm9ybUdyb3VwLCBjb250ZXh0KTpwYXRjaChwYXJlbnRGb3JtR3JvdXAudmFsdWUsIFtjb2x1bW4ubmFtZV0sIHJvd1ZhbHVlLCBjb2x1bW4ucGF0Y2hJbmNsdWRlcylcIiAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVLZXlkb3duRW50ZXIoJGV2ZW50KVwiPjwvdmQtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNub3RMYXN0U2VnbWVudD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIElmIG5vdCB0aGUgbGFzdCBzZWdtZW50LCBjcmVhdGUgYSBuZXN0ZWQgZm9ybSBncm91cCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT1cImNvbHVtbk5hbWVTZWdtZW50c1swXVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBSZWN1cnNpdmUgY2FsbCB0byBoYW5kbGUgbmVzdGVkIHNlZ21lbnRzIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWN1cnNpdmVDb250YWluZXJcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlZ21lbnRzOiBjb2x1bW5OYW1lU2VnbWVudHMuc2xpY2UoMSksIHBhcmVudEZvcm1Hcm91cDpmb3JtR3JvdXAsIGZvcm1Hcm91cDogZm9ybUdyb3VwLmdldChjb2x1bW5OYW1lU2VnbWVudHNbMF0pfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFRvZ2dsZSBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5Ub2dnbGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9ybUFycmF5XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxtYXQtc2xpZGUtdG9nZ2xlIFtuZ01vZGVsXT1cInJvdyB8IHByb3BlcnR5OmNvbHVtbi5uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0TmVzdGVkUHJvcGVydHkocm93LCBjb2x1bW4ubmFtZSwgJGV2ZW50KTtoYW5kbGVNb2RlbENoYW5nZShjb2x1bW4sIHJvdywgdW5kZWZpbmVkKTtcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShyb3csIHVuZGVmaW5lZCwgY29udGV4dCkpKVwiIGNvbG9yPVwiYWNjZW50XCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUFycmF5XCIgW2Zvcm1Hcm91cF09XCIkYW55KGZvcm1BcnJheS5jb250cm9scylbcm93SW5kZXhdIHwgZm9ybUdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicmVjdXJzaXZlQ29udGFpbmVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzZWdtZW50czogY29sdW1uLm5hbWUuc3BsaXQoJy4nKSwgZm9ybUdyb3VwOiBmb3JtQXJyYXkuY29udHJvbHNbcm93SW5kZXhdfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gRGF0ZSBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuRGF0ZVwiPnt7cm93VmFsdWUgfCBkYXRlOmNvbHVtbi5zaG9ydERhdGU/J2RkLk1NLnl5eXknOidkZC5NTS55eXl5IEhIOm1tOnNzJ319PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFRleHQgSW5wdXQgY29sdW1uIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuVGV4dElucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhZm9ybUFycmF5XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBsYXlvdXQ9XCJjb2x1bW5cIiBsYXlvdXQtYWxpZ249XCJjZW50ZXIgc3RhcnRcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgZGVuc2UtMyAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgbWF0SW5wdXQgKm5nSWY9XCIhZm9ybUFycmF5XCIgdHlwZT1cInt7Y29sdW1uLmlucHV0VHlwZX19XCIgYXV0b2NvbXBsZXRlPVwibm9uZVwiIG5hbWU9XCJ7e2NvbHVtbi5uYW1lfX17e3Jvd0luZGV4fX1cIiBbbmdNb2RlbF09XCJyb3cgfCBwcm9wZXJ0eTpjb2x1bW4ubmFtZVwiIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShyb3csIHVuZGVmaW5lZCwgY29udGV4dCkpKVwiIFttaW5dPVwiY29sdW1uLmlucHV0TWluP2NvbHVtbi5pbnB1dE1pbihyb3csIHVuZGVmaW5lZCwgY29udGV4dCk6bnVsbFwiIFttYXhdPVwiY29sdW1uLmlucHV0TWF4P2NvbHVtbi5pbnB1dE1heChyb3csIHVuZGVmaW5lZCwgY29udGV4dCk6bnVsbFwiIChuZ01vZGVsQ2hhbmdlKT1cInNldE5lc3RlZFByb3BlcnR5KHJvdywgY29sdW1uLm5hbWUsICRldmVudCk7KGNvbHVtbi5jaGFuZ2U/Y29sdW1uLmNoYW5nZShyb3csIHVuZGVmaW5lZCwgY29udGV4dCk6cGF0Y2gocm93LCBbY29sdW1uLm5hbWVdLCAkZXZlbnQsIGNvbHVtbi5wYXRjaEluY2x1ZGVzKSk7XCIgW25nTW9kZWxPcHRpb25zXT1cInt1cGRhdGVPbjogJ2JsdXInfVwiIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUtleWRvd25FbnRlcigkZXZlbnQpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1BcnJheVwiIFtmb3JtR3JvdXBdPVwiJGFueShmb3JtQXJyYXkuY29udHJvbHMpW3Jvd0luZGV4XSB8IGZvcm1Hcm91cFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlY3Vyc2l2ZUNvbnRhaW5lclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c2VnbWVudHM6IGNvbHVtbi5uYW1lLnNwbGl0KCcuJyksIGZvcm1Hcm91cDogZm9ybUFycmF5LmNvbnRyb2xzW3Jvd0luZGV4XX1cIj48L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFZELVNlbGVjdCBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5TZWxlY3RcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFmb3JtQXJyYXlcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGxheW91dD1cImNvbHVtblwiIGxheW91dC1hbGlnbj1cImNlbnRlciBzdGFydFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBkZW5zZS0zIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx2ZC1zZWxlY3QgKm5nSWY9XCIhZm9ybUFycmF5XCIgbmFtZT1cInt7Y29sdW1uLm5hbWV9fXt7cm93SW5kZXh9fVwiIFtlbnVtXT1cImNvbHVtbi5lbnVtVHlwZVwiIFtlbnVtTWV0YWRhdGFdPVwiY29sdW1uLmVudW1NZXRhZGF0YVwiIFtlbnVtRmlsdGVyXT1cImNvbHVtbj8uZW51bUZpbHRlciAgfCBmdW5jOnJvdzpjb250ZXh0XCIgW3ByZWZpeF09XCJjb2x1bW4uZW51bVByZWZpeFwiIFtvcHRpb25zXT1cImNvbHVtbi5vcHRpb25zXCIgW2RlZmF1bHRPcHRpb25dPVwiY29sdW1uLmRlZmF1bHRPcHRpb24/P3RydWVcIiBbbmdNb2RlbF09XCJyb3cgfCBwcm9wZXJ0eTpjb2x1bW4ubmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInNldE5lc3RlZFByb3BlcnR5KHJvdywgY29sdW1uLm5hbWUsICRldmVudCk7XCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5IHx8IChjb2x1bW4uZGlzYWJsZWQgfHwgKGNvbHVtbi5kaXNhYmxlICYmIGNvbHVtbi5kaXNhYmxlKHJvdywgdW5kZWZpbmVkLCBjb250ZXh0KSkpXCIgKGNoYW5nZSk9XCJjb2x1bW4uY2hhbmdlP2NvbHVtbi5jaGFuZ2Uocm93LCB1bmRlZmluZWQsIGNvbnRleHQpOnBhdGNoKHJvdywgW2NvbHVtbi5uYW1lXSwgJGV2ZW50LnZhbHVlLCBjb2x1bW4ucGF0Y2hJbmNsdWRlcylcIiAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVLZXlkb3duRW50ZXIoJGV2ZW50KVwiPjwvdmQtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtQXJyYXlcIiBbZm9ybUdyb3VwXT1cIiRhbnkoZm9ybUFycmF5LmNvbnRyb2xzKVtyb3dJbmRleF0gfCBmb3JtR3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWN1cnNpdmVDb250YWluZXJcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlZ21lbnRzOiBjb2x1bW4ubmFtZS5zcGxpdCgnLicpLCBmb3JtR3JvdXA6IGZvcm1BcnJheS5jb250cm9sc1tyb3dJbmRleF19XCI+PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBBY3Rpb24gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5BY3Rpb25cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubWVudVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGlkPVwibWVudS17e3Jvdy5pZH19XCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBmaXhlZDtcIiAjY29udGV4dE1lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudS5tYXRNZW51IVwiICpuZ0lmPVwibWVudT8ubWF0TWVudSAmJiAhcm93LmxvY2tlZCAmJiBoYXNWaXNpYmxlUm93TWVudUl0ZW1zKHJvdywgY29sdW1uKVwiPjwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmQtZHluYW1pYy1tZW51IFtpdGVtc109XCJbY29sdW1uLm1lbnVdXCIgW2RhdGFdPVwicm93XCIgW2NvbnRleHRdPVwiY29udGV4dFwiICNtZW51PjwvdmQtZHluYW1pYy1tZW51PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gTWVudSAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1lbnVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2ZC1keW5hbWljLW1lbnUgKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuTWVudVwiIFtpdGVtc109XCJbY29sdW1uLm1lbnVdXCIgW2RhdGFdPVwicm93XCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvdmQtZHluYW1pYy1tZW51PlxyXG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIGljb24gLS0+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuSWNvblwiIGxheW91dD1cInJvd1wiIGxheW91dC1hbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmljb24/Lm1hdEljb25cIiBmb250U2V0PVwie3tjb2x1bW4uaWNvbj8uZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCd9fVwiIFtjbGFzc109XCJoYW5kbGVFeHByZXNzaW9uKGNvbHVtbi5pY29uPy5jc3NDbGFzcz8/JycsIHJvdylcIj57e2hhbmRsZUV4cHJlc3Npb24oY29sdW1uLmljb24/Lm1hdEljb24hLCByb3cpfX08L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmljb24/LnN2Z0ljb25cIiBmb250U2V0PVwie3tjb2x1bW4uaWNvbj8uZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCd9fVwiIFtjbGFzc109XCJoYW5kbGVFeHByZXNzaW9uKGNvbHVtbi5pY29uPy5jc3NDbGFzcz8/JycsIHJvdylcIiBbc3ZnSWNvbl09XCJoYW5kbGVFeHByZXNzaW9uKGNvbHVtbi5pY29uPy5zdmdJY29uISwgcm93KSFcIj48L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmljb24/LmZvbnRJY29uXCIgZm9udFNldD1cInt7Y29sdW1uLmljb24/LmZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwiaGFuZGxlRXhwcmVzc2lvbihjb2x1bW4uaWNvbj8uY3NzQ2xhc3M/PycnLCByb3cpXCIgW2ZvbnRJY29uXT1cImhhbmRsZUV4cHJlc3Npb24oY29sdW1uLmljb24/LmZvbnRJY29uISwgcm93KSFcIj48L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBpY29uIGJ1dHRvbiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8YSBtYXQtaWNvbi1idXR0b24gKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuSWNvbkJ1dHRvblwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sdW1uLmljb25CdXR0b24/LmV2ZW50P2NvbHVtbi5pY29uQnV0dG9uPy5ldmVudChyb3csIGNvbnRleHQpOm51bGxcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtaWNvbiBmb250U2V0PVwie3tjb2x1bW4uaWNvbkJ1dHRvbj8uaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwiaGFuZGxlRXhwcmVzc2lvbihjb2x1bW4uaWNvbkJ1dHRvbj8uaWNvbkNsYXNzPz8nJywgcm93KVwiPnt7aGFuZGxlRXhwcmVzc2lvbihjb2x1bW4uaWNvbkJ1dHRvbj8uaWNvbj8/J3JhZGlvX2J1dHRvbl9jaGVja2VkJywgcm93KSB8fCAncmFkaW9fYnV0dG9uX2NoZWNrZWQnfX08L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBPdGhlciBjb2x1bW4gdHlwZXMgLS0+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nU3dpdGNoRGVmYXVsdCBbaW5uZXJIdG1sXT1cInJvd1ZhbHVlPz8nJ1wiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0PCEtLSAjcmVnaW9uIEZpbHRlciByb3cgLS0+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiBmaWx0ZXJhYmxlXCI+XHJcblx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zJCB8IGFzeW5jXCI+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lciBjZGtDb2x1bW5EZWY9XCJmaWx0ZXIue3tjb2x1bW4uZmlsdGVyIHx8IGNvbHVtbi5uYW1lfX1cIiBbc3RpY2t5XT1cImNvbHVtbi5zdGlja3lcIiBbc3RpY2t5RW5kXT1cImNvbHVtbi5zdGlja3lFbmRcIj5cclxuXHRcdFx0XHRcdDx0aCBtYXQtaGVhZGVyLWNlbGwgKmNka0hlYWRlckNlbGxEZWYgW2hpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCIgW25nU3R5bGVdPVwie21heFdpZHRoOmNvbHVtbi5tYXhXaWR0aD8oY29sdW1uLm1heFdpZHRoKyhjb2x1bW4ubWF4V2lkdGhVbml0IHx8ICdweCcpKTpudWxsLG1pbldpZHRoOmNvbHVtbi5taW5XaWR0aD8oY29sdW1uLm1pbldpZHRoKyhjb2x1bW4ubWluV2lkdGhVbml0IHx8ICdweCcpKTpudWxsLHdpZHRoOmNvbHVtbi53aWR0aD8oY29sdW1uLndpZHRoKyhjb2x1bW4ud2lkdGhVbml0IHx8ICdweCcpKTpudWxsfVwiIFtuZ0NsYXNzXT1cInsnZ3QteHMnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlhzLCAnZ3Qtc20nOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlNtLCAnZ3QtbWQnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLk1kLCAnZ3QtbGcnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLkxnLCAnZ3QteGwnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlhsLCAnZ3QteHhsJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5YeGwsICdoaWRkZW4nOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLk5vbmV9XCI+XHJcblx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBTZWxlY3QgZmlsdGVyIC0tPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cIihjb2x1bW4uZW5kcG9pbnQgfHwgY29sdW1uLmVudW1UeXBlIHx8IGNvbHVtbi5vcHRpb25zKSBlbHNlIG5vdFNlbGVjdEZpbHRlclwiIGZpbHRlci1zZWxlY3QgW2VuZHBvaW50XT1cImNvbHVtbi5lbmRwb2ludFwiIFtlbnVtXT1cImNvbHVtbi5lbnVtVHlwZVwiIFtlbnVtTWV0YWRhdGFdPVwiY29sdW1uLmVudW1NZXRhZGF0YVwiIFtlbnVtRmlsdGVyXT1cImNvbHVtbi5lbnVtRmlsdGVyIHwgZnVuYzp7fTpjb250ZXh0XCIgW3ByZWZpeF09XCJjb2x1bW4uZW51bVByZWZpeFwiIFtvcHRpb25zXT1cImNvbHVtbi5vcHRpb25zXCIgW3RleHRdPVwiY29sdW1uLmZpbHRlck9wdGlvblRleHQgfHwgJ25hbWUnXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gVGV4dCBmaWx0ZXIgLS0+XHJcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbm90U2VsZWN0RmlsdGVyPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibm90U2VsZWN0RmlsdGVyICYmIChjb2x1bW4udHlwZSA9PSBDb2x1bW5UeXBlLlRleHQgfHwgY29sdW1uLnR5cGUgPT0gQ29sdW1uVHlwZS5UZXh0SW5wdXQgfHwgY29sdW1uLnR5cGUgPT0gQ29sdW1uVHlwZS5OdW1iZXIpIGVsc2Ugbm90SW5wdXRGaWx0ZXJcIiBmaWx0ZXItaW5wdXQgW29ubHlOdW1iZXJdPVwiY29sdW1uLmZpbHRlcklucHV0TnVtYmVyPz9mYWxzZVwiIFtvcGVyYXRvcl09XCIhdXNlRmlsdGVyT3BlcmF0b3IgPyB1bmRlZmluZWQgOiBjb2x1bW4uZmlsdGVyT3BlcmF0b3JcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBEYXRlIGZpbHRlciAtLT5cclxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNub3RJbnB1dEZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNvbHVtbi50eXBlID09IENvbHVtblR5cGUuRGF0ZSBlbHNlIG5vdERhdGVGaWx0ZXJcIiBmaWx0ZXItZGF0ZT48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBBY3Rpb24gZmlsdGVyIChjbGVhcikgLS0+XHJcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbm90RGF0ZUZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNvbHVtbi50eXBlID09IENvbHVtblR5cGUuQWN0aW9uXCIgZmlsdGVyLWNsZWFyPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0XHRcdFx0PC90aD5cclxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHQ8IS0tICNyZWdpb24gRGV0YWlscyBjb2x1bW4gLS0+XHJcblx0XHQ8bmctY29udGFpbmVyIGNka0NvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcblx0XHRcdDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4XCIgW2F0dHIuY29sc3Bhbl09XCIoZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luYyk/Lmxlbmd0aFwiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJyb3ctZGV0YWlsXCIgW0BkZXRhaWxFeHBhbmRdPVwicm93ID09IGV4cGFuZGVkUm93ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCIgI2RldGFpbHNUZW1wbGF0ZT5cclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZVJlZiAmJiByb3cgPT09IGV4cGFuZGVkUm93XCI+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZjsgY29udGV4dDp7cm93OiByb3csIGluZGV4OiBpbmRleCwgY29udGV4dDogY29udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L3RkPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0PCEtLSAjcmVnaW9uIEZpbHRlciBoZWFkZXIgLS0+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyYWJsZVwiPlxyXG5cdFx0XHQ8dHIgbWF0LWhlYWRlci1yb3cgKmNka0hlYWRlclJvd0RlZj1cImRpc3BsYXllZEZpbHRlckNvbHVtbnMkIHwgYXN5bmNcIj48L3RyPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0PHRyIG1hdC1oZWFkZXItcm93ICpjZGtIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jOyBzdGlja3k6IHN0aWNreUZpbHRlclwiPjwvdHI+XHJcblx0XHQ8dHIgbWF0LXJvdyAqY2RrUm93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luYzsgbGV0IGluZGV4ID0gZGF0YUluZGV4XCIgW25nQ2xhc3NdPVwicm93TmdDbGFzcz9yb3dOZ0NsYXNzKHJvdywgY29udGV4dCk6bnVsbFwiIFtjbGFzcy5leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3cgPT09IHJvd1wiIChjbGljayk9XCJoYW5kbGVSb3dDbGljayhpbmRleCwgcm93KVwiIChjb250ZXh0bWVudSk9XCJoYW5kbGVSb3dSaWdodENsaWNrKCRldmVudCwgcm93KVwiPjwvdHI+XHJcblxyXG5cdFx0PCEtLSAjcmVnaW9uIERldHJhaWxzIHJvdyAtLT5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxzVGVtcGxhdGUgfHwgdGVtcGxhdGVSZWZcIj5cclxuXHRcdFx0PHRyIG1hdC1yb3cgKmNka1Jvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiZGV0YWlsLXJvd1wiIFtuZ0NsYXNzXT1cInJvd05nQ2xhc3M/cm93TmdDbGFzcyhyb3csIGNvbnRleHQpOm51bGxcIj48L3RyPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblx0PC90YWJsZT5cclxuPC9kaXY+XHJcbjwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbjwhLS0gI3JlZ2lvbiBSb3cgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBkYXRhLi0tPlxyXG48ZGl2IGNsYXNzPVwibWF0LWNlbGwgcGFkIHRhYmxlLWVtcHR5IHR4dC1pdGFsaWNcIiAqbmdJZj1cIiFkYXRhU291cmNlPy5maWx0ZXJlZERhdGE/Lmxlbmd0aCAmJiAhZGF0YVNvdXJjZT8udG90YWxcIiBpMThuPVwiQEBub1Jlc3VsdHNGb3VuZFwiPk5vIHJlc3VsdHMgd2VyZSBmb3VuZC48L2Rpdj5cclxuPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuPCEtLSAjcmVnaW9uIERlYnVnIHZhbHVlIC0tPlxyXG48Y29kZSAqbmdJZj1cImRlYnVnVmFsdWVcIj5cclxuXHQ8cHJlPnt7Zm9ybVZhbHVlIHwganNvbn19PC9wcmU+XHJcbjwvY29kZT5cclxuPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuPGRpdiBjbGFzcz1cInRhYmxlLWZvb3RlclwiIGxheW91dD1cInJvd1wiPlxyXG5cdDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJsZS1mb290ZXJdXCI+PC9uZy1jb250ZW50PlxyXG5cdDxzcGFuIGZsZXg+PC9zcGFuPlxyXG5cdDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hYmxlXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBzaG93Rmlyc3RMYXN0QnV0dG9ucz1cInRydWVcIj48L21hdC1wYWdpbmF0b3I+XHJcbjwvZGl2PiJdfQ==
|
|
810
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi90YWJsZS9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqTixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNB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LEtBQUs7Z0JBU0MsZUFBZTtzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBVVRPX1NUWUxFLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgRHluYW1pY0J1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vaGVscGVycy9keW5hbWljLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL21vZGVscy9hY3Rpb24taXRlbSc7XHJcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi8uLi9lbnVtcy9ncmlkJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvdGFibGUtY29sdW1uLXR5cGUnO1xyXG5pbXBvcnQgeyBnZXRUYWJsZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29sdW1uJztcclxuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vdGFibGUuZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBUYWJsZVN0YXRpY0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi90YWJsZS5zdGF0aWMtZGF0YS1zb3VyY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICd2ZC1keW5hbWljLXRhYmxlJyxcclxuXHR0ZW1wbGF0ZVVybDogJ2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWydkeW5hbWljLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0YW5pbWF0aW9uczogW1xyXG5cdFx0dHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG5cdFx0XHRzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXHJcblx0XHRcdHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFIH0pKSxcclxuXHRcdFx0dHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuXHRcdF0pLFxyXG5cdF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZER5bmFtaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcblx0LyoqXHJcblx0ICogUmVmZXJlbmNlIHRvIHRoZSB0YWJsZSBjb21wb25lbnQsIHVzZWQgZm9yIGFjY2Vzc2luZyBNYXRUYWJsZSBmdW5jdGlvbmFsaXRpZXMuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgndGFibGUnKVxyXG5cdHB1YmxpYyB0YWJsZT86IE1hdFRhYmxlPGFueT47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZmVyZW5jZXMgdG8gdGhlIGNvbnRhaW5lciBlbGVtZW50cyBmb3IgZGV0YWlsIHRlbXBsYXRlcywgd2l0aCBWaWV3Q29udGFpbmVyUmVmIFxyXG5cdCAqIGFsbG93aW5nIGR5bmFtaWMgaW5zZXJ0aW9uIG9mIHZpZXdzLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oJ2RldGFpbHNUZW1wbGF0ZScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG5cdHB1YmxpYyBkZXRhaWxzVGVtcGxhdGVSZWY/OiBRdWVyeUxpc3Q8YW55PjtcclxuXHJcblx0LyoqXHJcblx0ICogUmVmZXJlbmNlIHRvIGEgY29udGVudCBjaGlsZCB0ZW1wbGF0ZSAoZGV0YWlscyB0ZW1wbGF0ZSkgb2YgdHlwZSBUZW1wbGF0ZVJlZiwgXHJcblx0ICogdXNlZCBmb3IgcmVuZGVyaW5nIGN1c3RvbSB0ZW1wbGF0ZXMgaW4gdGhlIHRhYmxlLlxyXG5cdCAqL1xyXG5cdEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXHJcblx0cHVibGljIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0YSBzb3VyY2UgZm9yIHRoZSB0YWJsZSwgd2hpY2ggY2FuIGVpdGhlciBiZSBhIGN1c3RvbSBUYWJsZURhdGFTb3VyY2UgXHJcblx0ICogaW1wbGVtZW50YXRpb24gb3IgYSBkeW5hbWljIG9iamVjdC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkYXRhU291cmNlOiBUYWJsZURhdGFTb3VyY2U8YW55LCBhbnk+IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBJbnB1dCBkYXRhIGZvciB0aGUgdGFibGUsIHdoaWNoIGlzIHNldCBhcyBhIHN0YXRpYyBkYXRhIHNvdXJjZS5cclxuXHQgKiBUaGlzIG1ldGhvZCBhbHNvIGluaXRpYWxpemVzIHNvcnRpbmcgYW5kIHBhZ2luYXRpb24gZm9yIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBUYWJsZVN0YXRpY0RhdGFTb3VyY2UoZGF0YSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMubWF0U29ydDtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLl9wYWdpbmF0b3I7XHJcblx0XHR0aGlzLnBhZ2luYWJsZSA9IHRydWU7XHJcblx0XHR0aGlzLnN0YXRpYyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWFjdGl2ZSBGb3JtQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBmb3JtIGRhdGEsIHdoaWNoIGlzIHVzZWQgdG8gdHJhY2sgXHJcblx0ICogZm9ybSBjb250cm9scyBhbmQgc3luY2hyb25pemUgdGFibGUgZGF0YSB3aXRoIGZvcm0gY2hhbmdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgX2Zvcm1BcnJheT86IEZvcm1BcnJheTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgRm9ybUFycmF5IGZvciBtYW5hZ2luZyBmb3JtIGNvbnRyb2xzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuIFxyXG5cdCAqIEl0IHNldHMgdGhlIHRhYmxlIGRhdGEgYW5kIHN1YnNjcmliZXMgdG8gY2hhbmdlcyBpbiB0aGUgZm9ybSB2YWx1ZXMgdG8gXHJcblx0ICogdXBkYXRlIHRoZSB0YWJsZSBkeW5hbWljYWxseS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBnZXQgZm9ybUFycmF5KCk6IEZvcm1BcnJheSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9mb3JtQXJyYXk7IH1cclxuXHRwdWJsaWMgc2V0IGZvcm1BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSkge1xyXG5cdFx0dGhpcy5fZm9ybUFycmF5ID0gZm9ybUFycmF5O1xyXG5cdFx0dGhpcy5kYXRhID0gdGhpcy5fZm9ybUFycmF5Py52YWx1ZTtcclxuXHJcblx0XHQvKiBVcGRhdGUgdGhlIHRhYmxlIGRhdGEgd2hlbiB0aGUgZm9ybSBhcnJheSB2YWx1ZXMgY2hhbmdlICovXHJcblx0XHR0aGlzLl9mb3JtQXJyYXk/LnZhbHVlQ2hhbmdlcz8uc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRpZiAoeC5sZW5ndGggIT09IHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLl9mb3JtQXJyYXk/LnZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHRlciBmb3IgcmV0cmlldmluZyB0aGUgcmF3IHZhbHVlIG9mIHRoZSBmb3JtLCB3aXRob3V0IGFwcGx5aW5nIGFueSB0cmFuc2Zvcm1hdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIGdldCBmb3JtVmFsdWUoKTogYW55IHsgcmV0dXJuIHRoaXMuZm9ybUFycmF5Py5nZXRSYXdWYWx1ZSgpOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgZGVidWcgbW9kZSBmb3IgbG9nZ2luZyBhbmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkZWJ1Z1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IHJlcHJlc2VudGluZyB0aGUgY2xhc3MgdHlwZSB1c2VkIGluIHRoaXMgY29tcG9uZW50LCBcclxuXHQgKiB0eXBpY2FsbHkgZGVmaW5pbmcgdGhlIHN0cnVjdHVyZSBvciBtb2RlbCBvZiB0aGUgZGF0YS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBjbGFzc1R5cGU6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgb3IgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIHRhYmxlIGlzIGJlaW5nIHVzZWQuXHJcblx0ICogVGhpcyBhbGxvd3MgcGFzc2luZyBhZGRpdGlvbmFsIG1ldGFkYXRhIG9yIHNldHRpbmdzLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGNvbnRleHQ6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIGFwcGx5aW5nIGZpbHRlcnMgdG8gdGhlIGRhdGEgc291cmNlLiBJdCBkZWZpbmVzIGNyaXRlcmlhIG9yIGNvbmRpdGlvbnMgXHJcblx0ICogdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSB0YWJsZSBkYXRhLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGRhdGFTb3VyY2VGaWx0ZXI6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGFibGUgdXNlcyBhIHN0YXRpYyBkYXRhIHNvdXJjZS4gXHJcblx0ICogV2hlbiB0cnVlLCB0aGUgdGFibGUgZG9lcyBub3QgcmVseSBvbiBkeW5hbWljIGRhdGEgY2hhbmdlcy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzdGF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB0YWJsZSBkYXRhIGlzIGZpbHRlcmFibGUgYnkgdGhlIHVzZXIuXHJcblx0ICogSWYgdHJ1ZSwgZmlsdGVyaW5nIG9wdGlvbnMgYXJlIHByb3ZpZGVkLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGZpbHRlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHRhYmxlIGhlYWRlcnMgb3IgY29sdW1ucyBzaG91bGQgc3RpY2sgXHJcblx0ICogdG8gdGhlIHZpZXdwb3J0IGR1cmluZyBzY3JvbGxpbmcuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc3RpY2t5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlZmluZXMgdGhlIG92ZXJhbGwgd2lkdGggb2YgdGhlIHRhYmxlLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHRhYmxlV2lkdGg/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIG9wZXJhdG9yIGlzIHVzZWQgaW4gdGFibGUgZmlsdGVyaW5nLlxyXG5cdCAqIElmIHRydWUsIGZpbHRlcmluZyBsb2dpYyB3aWxsIGFwcGx5IG9wZXJhdG9ycyBzdWNoIGFzIGVxdWFscywgY29udGFpbnMsIGV0Yy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyB1c2VGaWx0ZXJPcGVyYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc3VwcG9ydHMgcGFnaW5hdGlvbi5cclxuXHQgKiBJZiB0cnVlLCBwYWdpbmF0aW9uIGNvbnRyb2xzIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIGRhdGEuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcGFnaW5hYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgJ0NoZWNrYm94JyBjb2x1bW4gaXMgc2hvd24gZm9yIHJvdyBzZWxlY3Rpb24uXHJcblx0ICogSWYgdHJ1ZSwgYSBjaGVja2JveCBjb2x1bW4gd2lsbCBiZSBkaXNwbGF5ZWQgYWxsb3dpbmcgdXNlcnMgdG8gc2VsZWN0IHJvd3MuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTcGVjaWZpZXMgdGhlIGFjdGl2ZSBjb2x1bW4gdXNlZCBmb3Igc29ydGluZyB0aGUgdGFibGUgZGF0YS5cclxuXHQgKiBUaGlzIGlucHV0IGRldGVybWluZXMgd2hpY2ggY29sdW1uIHRoZSBzb3J0aW5nIGlzIGFwcGxpZWQgdG8uXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc29ydEFjdGl2ZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogU3BlY2lmaWVzIHRoZSBkaXJlY3Rpb24gb2Ygc29ydGluZyAoYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcpLlxyXG5cdCAqIERlZmF1bHQgaXMgJ2FzYycgKGFzY2VuZGluZykuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9ICdhc2MnO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRhYmxlIGhlYWRlciBzaG91bGQgcmVtYWluIHN0aWNreSAoZml4ZWQpIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0IFxyXG5cdCAqIHdoZW4gdGhlIHRhYmxlIHNjcm9sbHMuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2VjdGlvbiBvZiB0aGUgdGFibGUgc2hvdWxkIHJlbWFpbiBzdGlja3kgKGZpeGVkKSBcclxuXHQgKiBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydCB3aGVuIHNjcm9sbGluZy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBzdGlja3lGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBQcml2YXRlIGJhY2tpbmcgZmllbGQgZm9yIHRoZSBjb2x1bW5TZXRzIGlucHV0IHByb3BlcnR5LlxyXG5cdCAqIFRoaXMgZmllbGQgc3RvcmVzIHRoZSBzZXRzIG9mIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZSxcclxuXHQgKiBlbmFibGluZyBjb250cm9sIG92ZXIgaG93IHRoZSB2YWx1ZSBpcyBhY2Nlc3NlZCBvciBtb2RpZmllZCB0aHJvdWdoXHJcblx0ICogdGhlIHB1YmxpYyBnZXR0ZXIgYW5kIHNldHRlci5cclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgX2NvbHVtblNldHM/OiBzdHJpbmdbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXNlZCB0byBkaXNwbGF5IHNwZWNpZmljIGNvbHVtbnMgaW4gdGhlIHRhYmxlLlxyXG5cdCAqIFRoaXMgYXJyYXkgZGVmaW5lcyBzZXRzIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc2hvd25cclxuXHQgKiBiYXNlZCBvbiB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24sIGFsbG93aW5nIGZvciBkeW5hbWljIHRhYmxlXHJcblx0ICogY29sdW1uIGN1c3RvbWl6YXRpb24uXHJcblx0ICogQHByb3BlcnR5XHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGNvbHVtblNldHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fY29sdW1uU2V0czsgfVxyXG5cdHB1YmxpYyBzZXQgY29sdW1uU2V0cyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHsgdGhpcy5fY29sdW1uU2V0cyA9IHZhbHVlOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZXIgZm9yIHJvdyBjbGljayBldmVudHMuIEl0IGVtaXRzIHRoZSBjbGlja2VkIHJvdydzIGRhdGEgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZC5cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZ1bmN0aW9uIHVzZWQgdG8gZHluYW1pY2FsbHkgYXNzaWduIENTUyBjbGFzc2VzIHRvIHRhYmxlIHJvd3MgYmFzZWQgb24gY3VzdG9tIGxvZ2ljLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHJvd05nQ2xhc3M/OiBGdW5jdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogVGVtcGxhdGUgZm9yIHJlbmRlcmluZyBhZGRpdGlvbmFsIGRldGFpbHMgYmVsb3cgZWFjaCByb3cuIFxyXG5cdCAqIEl0IGFjY2VwdHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0ZW1wbGF0ZSBrZXkgb3IgaWRlbnRpZmllci5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkZXRhaWxzVGVtcGxhdGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgdGFibGUgaXMgaW4gYSByZWFkb25seSBzdGF0ZS5cclxuXHQgKiBJZiB0cnVlLCBubyBjaGFuZ2VzIGNhbiBiZSBtYWRlIHRvIHRoZSB0YWJsZSBkYXRhLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcbiAqIElucHV0IHByb3BlcnR5IHRvIGRldGVybWluZSBpZiB0aGUgdGFibGUgaXMgcmVhZG9ubHkuIFxyXG4gKiBVc2VzIGBjb2VyY2VCb29sZWFuUHJvcGVydHlgIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgdHJlYXRlZCBhcyBhIGJvb2xlYW4uXHJcbiAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCByZWFkb25seSgpIHsgcmV0dXJuIHRoaXMuX3JlYWRvbmx5OyB9XHJcblx0cHVibGljIHNldCByZWFkb25seShyZWFkb25seTogYW55KSB7XHJcblx0XHR0aGlzLl9yZWFkb25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZWFkb25seSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGdW5jdGlvbiB0byBmaWx0ZXIgaXRlbXMgd2hlbiBzZWxlY3RpbmcgYWxsIHJvd3MuIFxyXG5cdCAqIEl0IHRha2VzIHZhbHVlLCBpbmRleCwgYW5kIGFycmF5IGFzIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGJvb2xlYW4gb3IgdW5rbm93biB0eXBlLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHNlbGVjdEFsbEZpbHRlcj86ICh2YWx1ZTogYW55LCBpbmRleDogbnVtYmVyLCBhcnJheTogYW55W10pID0+IHVua25vd247XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUgTWF0U29ydCBkaXJlY3RpdmUgdXNlZCBmb3IgYXBwbHlpbmcgc29ydGluZyBvbiB0aGUgdGFibGUuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG5cdHB1YmxpYyBtYXRTb3J0PzogTWF0U29ydDtcclxuXHJcblx0LyoqXHJcblx0ICogUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIE1hdFBhZ2luYXRvciB1c2VkIHRvIHBhZ2luYXRlIHRoZSB0YWJsZSBkYXRhLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgX3BhZ2luYXRvcj86IE1hdFBhZ2luYXRvcjtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgc2V0dGVyIGZvciB0aGUgTWF0UGFnaW5hdG9yLiBXaGVuIHRoZSBwYWdpbmF0b3IgaXMgc2V0LCBpdCBhc3NpZ25zIGl0IFxyXG5cdCAqIHRvIHRoZSBkYXRhIHNvdXJjZSBmb3IgcGFnaW5hdGlvbiBjb250cm9sLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxyXG5cdHB1YmxpYyBzZXQgcGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XHJcblx0XHRpZiAocGFnaW5hdG9yKSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQcml2YXRlIGFycmF5IHN0b3JpbmcgdGhlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRwcml2YXRlIF9jb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IGdldHRlciBhbmQgc2V0dGVyIGZvciB0aGUgdGFibGUgY29sdW1ucy4gXHJcblx0ICogSXQgYWxsb3dzIHRoZSBjb2x1bW5zIHRvIGJlIGN1c3RvbWl6ZWQgYW5kIHVwZGF0ZWQgZHluYW1pY2FsbHkuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7IHJldHVybiB0aGlzLl9jb2x1bW5zOyB9XHJcblx0cHVibGljIHNldCBjb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHsgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQmVoYXZpb3JTdWJqZWN0IHRvIG1hbmFnZSBhbmQgZW1pdCBjaGFuZ2VzIHRvIHRoZSBjb2x1bW5zIGR5bmFtaWNhbGx5LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFRhYmxlQ29sdW1uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNvbHVtbltdPihbXSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9ic2VydmFibGUgdGhhdCB0cmFja3MgYW5kIGVtaXRzIGNoYW5nZXMgdG8gdGhlIGNvbHVtbnMuXHJcblx0ICovXHJcblx0cHVibGljIGNvbHVtbnMkOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+ID0gdGhpcy5jb2x1bW5zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcblx0LyoqXHJcblx0ICogT2JzZXJ2YWJsZSB0cmFja2luZyB0aGUgY29sdW1ucyBjdXJyZW50bHkgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGlzcGxheWVkQ29sdW1ucyQ/OiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuXHJcblx0LyoqXHJcblx0ICogT2JzZXJ2YWJsZSB0cmFja2luZyB0aGUgZmlsdGVyYWJsZSBjb2x1bW5zIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXHJcblx0ICovXHJcblx0cHVibGljIGRpc3BsYXllZEZpbHRlckNvbHVtbnMkPzogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IHByb3BlcnR5IGZvciByb3ctc3BlY2lmaWMgYWN0aW9uIG1lbnUgaXRlbXMuIFxyXG5cdCAqIERlZmluZXMgYWN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQgbWVudSBmb3IgZWFjaCByb3cuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcm93TWVudUl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5wdXQgZm9yIGEgc2luZ2xlIHJvdyBhY3Rpb24gdG8gYmUgYXBwbGllZCB3aGVuIGludGVyYWN0aW5nIHdpdGggYSByb3cuXHJcblx0ICogQHByb3BlcnR5IHtBY3Rpb25JdGVtfSByb3dBY3Rpb25cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyByb3dBY3Rpb24/OiBBY3Rpb25JdGVtO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbnB1dCBmb3Igc3BlY2lmeWluZyB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGRpc3BsYXkgaW4gdGhlIHRhYmxlLlxyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGV4Y2x1ZGVkQ29sdW1uc1xyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGV4Y2x1ZGVkQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogUXVlcnlMaXN0IHRvIHJlZmVyZW5jZSBhbGwgTWF0TWVudVRyaWdnZXJzIGFzc29jaWF0ZWQgd2l0aCByb3cgY29udGV4dCBtZW51cy5cclxuXHQgKiBVc2VkIGZvciBoYW5kbGluZyB0aGUgY29udGV4dCBtZW51IGludGVyYWN0aW9ucyBvbiB0YWJsZSByb3dzLlxyXG5cdCAqIEBwcm9wZXJ0eSB7UXVlcnlMaXN0PE1hdE1lbnVUcmlnZ2VyPn0gcm93Q29udGV4dE1lbnVUcmlnZ2Vyc1xyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oTWF0TWVudVRyaWdnZXIpXHJcblx0cHVibGljIHJvd0NvbnRleHRNZW51VHJpZ2dlcnM/OiBRdWVyeUxpc3Q8TWF0TWVudVRyaWdnZXI+O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb2x1bW4gdHlwZSBlbnVtIHJlZmVyZW5jZSwgbWFwcGluZyB0YWJsZSBjb2x1bW5zIHRvIHRoZWlyIHR5cGVzIGZvciByZW5kZXJpbmcuXHJcblx0ICogQHByb3BlcnR5IHt0eXBlb2YgVGFibGVDb2x1bW5UeXBlfSBDb2x1bW5UeXBlXHJcblx0ICovXHJcblx0cHVibGljIENvbHVtblR5cGU6IHR5cGVvZiBUYWJsZUNvbHVtblR5cGUgPSBUYWJsZUNvbHVtblR5cGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdyaWQgZW51bSByZWZlcmVuY2UsIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiBncmlkIHVzZWQgaW4gdGhlIHRhYmxlLlxyXG5cdCAqIEBwcm9wZXJ0eSB7dHlwZW9mIEdyaWR9IEdyaWRcclxuXHQgKi9cclxuXHRwdWJsaWMgR3JpZDogdHlwZW9mIEdyaWQgPSBHcmlkO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBleHBhbmRlZCByb3csIHVzZWQgZm9yIGhhbmRsaW5nIHJvdyBleHBhbnNpb24gbG9naWMuXHJcblx0ICogQHByb3BlcnR5IHthbnl9IGV4cGFuZGVkUm93XHJcblx0ICovXHJcblx0cHVibGljIGV4cGFuZGVkUm93OiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IGZvciBzZXR0aW5nIHRoZSBkZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgcGFnaW5hdGlvbi4gXHJcblx0ICogRGVmYXVsdCB2YWx1ZSBpcyAxNS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwYWdlU2l6ZTogbnVtYmVyID0gMTU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElucHV0IGZvciBzZXR0aW5nIGF2YWlsYWJsZSBwYWdlIHNpemUgb3B0aW9ucyBpbiB0aGUgcGFnaW5hdG9yLlxyXG5cdCAqIERlZmF1bHQgb3B0aW9ucyBpbmNsdWRlIFs1LCAxMCwgMTUsIDIwLCAzMCwgNTAsIDEwMCwgMjAwXS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwYWdlU2l6ZU9wdGlvbnM6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDE1LCAyMCwgMzAsIDUwLCAxMDAsIDIwMF07XHJcblxyXG5cdC8qIFxyXG5cdCAqIFRoaXMgZGVjb3JhdG9yIGJpbmRzIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciBlbGVtZW50IGJ5IGl0cyB0ZW1wbGF0ZSByZWZlcmVuY2UuXHJcblx0ICogVGhlIGBzY3JvbGxDb250YWluZXJgIHdpbGwgcmVmZXJlbmNlIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgdGVtcGxhdGUgd2l0aCBgI3Njcm9sbENvbnRhaW5lcmAuXHJcblx0ICogSXQgd2lsbCBhbGxvdyBhY2Nlc3MgdG8gdGhlIG5hdGl2ZSBET00gZWxlbWVudCBmb3IgbWFuYWdpbmcgc2Nyb2xsIG9wZXJhdGlvbnMuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuXHRwdWJsaWMgc2Nyb2xsQ29udGFpbmVyPzogRWxlbWVudFJlZjtcclxuXHJcblx0LyogXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyBhY3RpdmVseSBkcmFnZ2luZyB0aGUgc2Nyb2xsIGNvbnRhaW5lci5cclxuXHQgKiBUaGlzIGZsYWcgZW5zdXJlcyB0aGF0IHNjcm9sbGluZyBvbmx5IG9jY3VycyB3aGVuIGEgZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsXHJcblx0ICogcHJvdmlkaW5nIGEgc21vb3RoZXIgYW5kIG1vcmUgY29udHJvbGxlZCB1c2VyIGV4cGVyaWVuY2UgZHVyaW5nIGludGVyYWN0aW9ucy5cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0YXJ0RHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcblx0LyogXHJcblx0ICogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSByaWdodCBtb3VzZSBidXR0b24gaXMgYWN0aXZlbHkgZHJhZ2dpbmcgdGhlIHNjcm9sbCBjb250YWluZXIuXHJcblx0ICogSXQgZW5zdXJlcyB0aGF0IHNjcm9sbGluZyBvY2N1cnMgb25seSBkdXJpbmcgYWN0aXZlIGRyYWdnaW5nLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuXHQvKiBcclxuXHQgKiBTdG9yZXMgdGhlIGluaXRpYWwgWCBjb29yZGluYXRlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLlxyXG5cdCAqIFRoaXMgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG1vdmVkIGR1cmluZyBkcmFnZ2luZywgZW5hYmxpbmcgc21vb3RoIHNjcm9sbGluZy5cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0YXJ0WDogbnVtYmVyID0gMDtcclxuXHJcblx0LyogXHJcblx0ICogS2VlcHMgdHJhY2sgb2YgdGhlIGNvbnRhaW5lcuKAmXMgc2Nyb2xsIHBvc2l0aW9uIGJlZm9yZSB0aGUgZHJhZyBiZWdpbnMuXHJcblx0ICogVGhpcyBhbGxvd3MgdXBkYXRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiByZWFsLXRpbWUgYXMgdGhlIHVzZXIgbW92ZXMgdGhlIG1vdXNlLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2Nyb2xsTGVmdDogbnVtYmVyID0gMDtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3IgZm9yIHRoZSBjb21wb25lbnQsIGluamVjdGluZyBzZXJ2aWNlcyBuZWVkZWQgZm9yIGZvcm0gYnVpbGRpbmcsXHJcblx0ICogZHluYW1pYyBjb250ZW50IGhhbmRsaW5nLCBhbmQgY2hhbmdlIGRldGVjdGlvbi5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZm9ybUJ1aWxkZXIgU2VydmljZSBmb3IgY3JlYXRpbmcgZm9ybSBjb250cm9scyBhbmQgbWFuYWdpbmcgZm9ybSBsb2dpYy5cclxuXHQgKiBAcGFyYW0gZHluYW1pY0J1aWxkZXIgU2VydmljZSBmb3IgZHluYW1pY2FsbHkgY29uc3RydWN0aW5nIHRhYmxlIGNvbXBvbmVudHMuXHJcblx0ICogQHBhcmFtIGNoYW5nZURldGVjdG9yIFNlcnZpY2UgZm9yIGRldGVjdGluZyBhbmQgdHJpZ2dlcmluZyBVSSBjaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBkeW5hbWljQnVpbGRlcjogRHluYW1pY0J1aWxkZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgaXMgaW52b2tlZCBpbW1lZGlhdGVseSBhZnRlciB0aGVcclxuXHQgKiBkZWZhdWx0IGNoYW5nZSBkZXRlY3RvciBoYXMgY2hlY2tlZCB0aGUgZGlyZWN0aXZlJ3NcclxuXHQgKiBkYXRhLWJvdW5kIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCB0aW1lLFxyXG5cdCAqIGFuZCBiZWZvcmUgYW55IG9mIHRoZSB2aWV3IG9yIGNvbnRlbnQgY2hpbGRyZW4gaGF2ZSBiZWVuIGNoZWNrZWQuXHJcblx0ICogSXQgaXMgaW52b2tlZCBvbmx5IG9uY2Ugd2hlbiB0aGUgZGlyZWN0aXZlIGlzIGluc3RhbnRpYXRlZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmNsYXNzVHlwZSkge1xyXG5cdFx0XHQvKiBHZXQgdGhlIHRhYmxlIGRlZmluaXRpb24gdXNpbmcgdGhlIGNsYXNzIHR5cGUgKi9cclxuXHRcdFx0dmFyIHRhYmxlRGVmaW5pdGlvbiA9IGdldFRhYmxlRGVmaW5pdGlvbih0aGlzLmNsYXNzVHlwZSk7XHJcblx0XHRcdGlmICh0YWJsZURlZmluaXRpb24pIHtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbnMgPSBbLi4udGFibGVEZWZpbml0aW9uIS5jb2x1bW5zID8/IFtdXTtcclxuXHRcdFx0XHRpZiAodGhpcy5yb3dNZW51SXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdC8qIENoZWNrIGlmIHRoZSBhY3Rpb24gY29sdW1uIGFscmVhZHkgZXhpc3RzICovXHJcblx0XHRcdFx0XHR2YXIgYWN0aW9uQ29sbXVuID0gdGhpcy5fY29sdW1ucz8uZmluZCh4ID0+IHgubmFtZSA9PSAnYWN0aW9uJyk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgc28sIGp1c3QgYWRkIHRoZSBtZW51IGl0ZW1zIHRvIGl0ICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uQ29sbXVuICE9IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0YWN0aW9uQ29sbXVuLm1lbnUgfHw9IHsgaWNvbjogJ21vcmVfdmVydCcgfTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yb3dNZW51SXRlbXMuZm9yRWFjaCh5ID0+IGFjdGlvbkNvbG11biEubWVudSEuaXRlbXM/LnVuc2hpZnQoeSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIE90aGVyd2lzZSBhZGQgYSBuZXcgb25lICovXHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fY29sdW1ucy5wdXNoKG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0XHRcdFx0aW5kZXg6IDIwMDAsXHJcblx0XHRcdFx0XHRcdFx0bmFtZTogJ2FjdGlvbicsXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0czogWydhY3Rpb24nLCAnY29tbW9uJ10sXHJcblx0XHRcdFx0XHRcdFx0dHlwZTogVGFibGVDb2x1bW5UeXBlLkFjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRtZW51OiB7IGljb246ICdtb3JlX3ZlcnQnLCBpdGVtczogdGhpcy5yb3dNZW51SXRlbXMgfSxcclxuXHRcdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdHN0aWNreUVuZDogdHJ1ZVxyXG5cdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnJvd0FjdGlvbikge1xyXG5cdFx0XHRcdFx0dGhpcy5fY29sdW1ucy5wdXNoKG5ldyBUYWJsZUNvbHVtbih7XHJcblx0XHRcdFx0XHRcdGluZGV4OiAyMDAwLFxyXG5cdFx0XHRcdFx0XHRuYW1lOiAnYWN0aW9uJyxcclxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0czogWydhY3Rpb24nLCAnY29tbW9uJ10sXHJcblx0XHRcdFx0XHRcdHR5cGU6IFRhYmxlQ29sdW1uVHlwZS5BY3Rpb24sXHJcblx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRtZW51OiB0aGlzLnJvd0FjdGlvbixcclxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0c3RpY2t5RW5kOiB0cnVlXHJcblx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBBZGQgY2hlY2tib3ggY29sdW1uICovXHJcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0YWJsZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zLnVuc2hpZnQobmV3IFRhYmxlQ29sdW1uKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogJ3NlbGVjdCcsXHJcblx0XHRcdFx0XHRcdGNvbHVtblNldHM6IFsnc2VsZWN0JywgJ2NvbW1vbiddLFxyXG5cdFx0XHRcdFx0XHR0eXBlOiBUYWJsZUNvbHVtblR5cGUuQ2hlY2tib3gsXHJcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcblx0XHRcdFx0XHRcdHN0aWNreTogdHJ1ZVxyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEJ1aWxkIGRpc3BsYXllZCBjb2x1bW5zICYgZmlsdGVyICovXHJcblx0XHR0aGlzLmNvbHVtbnMkPy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdC8qIEZpbHRlciB0aGUgY29sdW1ucyBiYXNlZCBvbiB0aGUgaW5kaXZpZHVhbCBjb2x1bW4ncyBjb2x1bW5TZXRzIHByb3BlcnR5IGFuZCB0aGUgZ2xvYmFsIGNvbHVtblNldHMgKi9cclxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gKHRoaXMuY29sdW1uU2V0cz8ubGVuZ3RoID8/IDApID4gMFxyXG5cdFx0XHRcdD8gdGhpcy5jb2x1bW5zPy5maWx0ZXIoYyA9PiB0aGlzLmNvbHVtblNldHM/LnNvbWUoc2V0ID0+IGMuY29sdW1uU2V0cz8uaW5jbHVkZXMoc2V0KSkpXHJcblx0XHRcdFx0OiB0aGlzLmNvbHVtbnM7XHJcblxyXG5cdFx0XHQvKiBCdWlsZCB0aGUgZGlzcGxheWVkIGNvbHVtbnMgYnkgZmlsdGVyaW5nIG91dCB0aGUgZXhjbHVkZWQgY29sdW1ucyBhbmQgbWFwcGluZyB0byB0aGVpciBuYW1lcyAqL1xyXG5cdFx0XHR0aGlzLmRpc3BsYXllZENvbHVtbnMkID0gb2Yoc2VsZWN0ZWRDb2x1bW5zXHJcblx0XHRcdFx0LyogRXhjbHVkZSBjb2x1bW5zIHRoYXQgYXJlIGluIHRoZSBleGNsdWRlZENvbHVtbnMgbGlzdCAqL1xyXG5cdFx0XHRcdD8uZmlsdGVyKHggPT4gIXRoaXMuZXhjbHVkZWRDb2x1bW5zPy5pbmNsdWRlcyh4Lm5hbWUpKVxyXG5cdFx0XHRcdC8qIE1hcCB0aGUgcmVtYWluaW5nIGNvbHVtbnMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSAqL1xyXG5cdFx0XHRcdD8ubWFwKGMgPT4gYy5uYW1lKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0LyogQnVpbGQgdGhlIGRpc3BsYXllZCBmaWx0ZXIgY29sdW1ucyBieSBmaWx0ZXJpbmcgb3V0IHRoZSBleGNsdWRlZCBjb2x1bW5zIGFuZCBwcmVmaXhpbmcgd2l0aCAnZmlsdGVyLicgKi9cclxuXHRcdFx0dGhpcy5kaXNwbGF5ZWRGaWx0ZXJDb2x1bW5zJCA9IG9mKHNlbGVjdGVkQ29sdW1uc1xyXG5cdFx0XHRcdC8qIEV4Y2x1ZGUgY29sdW1ucyB0aGF0IGFyZSBpbiB0aGUgZXhjbHVkZWRDb2x1bW5zIGxpc3QgKi9cclxuXHRcdFx0XHQ/LmZpbHRlcih4ID0+ICF0aGlzLmV4Y2x1ZGVkQ29sdW1ucz8uaW5jbHVkZXMoeC5uYW1lKSlcclxuXHRcdFx0XHQvKiBNYXAgdGhlIHJlbWFpbmluZyBjb2x1bW5zIHRvIGEgZmlsdGVyLWZyaWVuZGx5IHN0cmluZyB3aXRoICdmaWx0ZXIuJyBwcmVmaXggKi9cclxuXHRcdFx0XHQ/Lm1hcChjID0+IGBmaWx0ZXIuJHsoYy5maWx0ZXIgfHwgYy5uYW1lKX1gKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogU2V0IHRoZSB0YWJsZSBjb2x1bW5zICovXHJcblx0XHR0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcclxuXHJcblx0XHRjb25zdCBjb250YWluZXIgPSB0aGlzLnNjcm9sbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuXHRcdGlmIChjb250YWluZXIpIHtcclxuXHRcdFx0LyogXHJcblx0XHRcdCAqIERpc2FibGUgdGhlIGNvbnRleHQgbWVudSBvbiByaWdodC1jbGljayB0byBhbGxvdyBzbW9vdGggc2Nyb2xsaW5nIFxyXG5cdFx0XHQgKiB3aXRob3V0IGludGVyZmVyZW5jZSBmcm9tIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSBiZWhhdmlvci5cclxuXHRcdFx0ICovXHJcblx0XHRcdGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlOiBNb3VzZUV2ZW50KSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xyXG5cclxuXHRcdFx0LyogXHJcblx0XHRcdCAqIFN0YXJ0IGRyYWdnaW5nIHdoZW4gdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkIChidXR0b24gPT09IDIpLlxyXG5cdFx0XHQgKiBUaGlzIHNhdmVzIHRoZSBpbml0aWFsIHBvc2l0aW9uIGFuZCBzY3JvbGwgc3RhdGUgZm9yIGxhdGVyIHVzZSBkdXJpbmcgbW92ZW1lbnQuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuXHRcdFx0XHRpZiAoZS5idXR0b24gPT09IDIgJiYgdGhpcy5zY3JvbGxDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdC8qIFByZXZlbnRzIGFueSBkZWZhdWx0IGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCByaWdodC1jbGljayAqL1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEFjdGl2YXRlIHRoZSBkcmFnZ2luZyBtb2RlLCBhbGxvd2luZyBob3Jpem9udGFsIHNjcm9sbGluZyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zdGFydERyYWdnaW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHQvKiBTdG9yZSB0aGUgaW5pdGlhbCBYIHBvc2l0aW9uICovXHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0WCA9IGUucGFnZVggLSBjb250YWluZXIub2Zmc2V0TGVmdDtcclxuXHJcblx0XHRcdFx0XHQvKiBTYXZlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdC8qIFxyXG5cdFx0XHQgKiBTdG9wIGRyYWdnaW5nIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgY29udGFpbmVyLlxyXG5cdFx0XHQgKiBUaGlzIGVuc3VyZXMgdGhlIHNjcm9sbGluZyBzdG9wcyBldmVuIGlmIHRoZSB1c2VyIG1vdmVzIHRoZSBjdXJzb3Igb3V0c2lkZSB0aGUgYm91bmRhcmllcy5cclxuXHRcdFx0ICovXHJcblx0XHRcdGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKGU6IE1vdXNlRXZlbnQpID0+IHRoaXMuc3RvcERyYWdnaW5nKGUpKTtcclxuXHJcblx0XHRcdC8qIFxyXG5cdFx0XHQgKiBTdG9wIGRyYWdnaW5nIHdoZW4gdGhlIG1vdXNlIGJ1dHRvbiBpcyByZWxlYXNlZCAob24gbW91c2UgdXApLlxyXG5cdFx0XHQgKiBUaGlzIHByZXZlbnRzIGZ1cnRoZXIgc2Nyb2xsIG1vdmVtZW50cyBhZnRlciB0aGUgdXNlciByZWxlYXNlcyB0aGUgbW91c2UuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLnN0b3BEcmFnZ2luZyhlKSk7XHJcblxyXG5cdFx0XHQvKiBcclxuXHRcdFx0ICogSGFuZGxlIHRoZSBhY3R1YWwgZHJhZ2dpbmcgKHNjcm9sbGluZykgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQuXHJcblx0XHRcdCAqIFRoaXMgY2FsY3VsYXRlcyB0aGUgbW92ZW1lbnQgYW5kIHVwZGF0ZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBhY2NvcmRpbmdseS5cclxuXHRcdFx0ICovXHJcblx0XHRcdGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZTogTW91c2VFdmVudCkgPT4ge1xyXG5cdFx0XHRcdC8qIElmIGRyYWdnaW5nIGlzIG5vdCBhY3RpdmUgb3Igc2Nyb2xsIGNvbnRhaW5lciBpcyB1bmRlZmluZWQsIGV4aXQgKi9cclxuXHRcdFx0XHRpZiAoIXRoaXMuc3RhcnREcmFnZ2luZyB8fCAhdGhpcy5zY3JvbGxDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIEFjdGl2YXRlIHRoZSBkcmFnZ2luZyBtb2RlLCBhbGxvd2luZyBob3Jpem9udGFsIHNjcm9sbGluZyAqL1xyXG5cdFx0XHRcdHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XHJcblxyXG5cdFx0XHRcdC8qIFByZXZlbnQgZGVmYXVsdCBhY3Rpb24gdG8gZW5zdXJlIHNtb290aCBiZWhhdmlvciAqL1xyXG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0LyogQ2FsY3VsYXRlIHRoZSBjdXJyZW50IG1vdXNlIFggcG9zaXRpb24gKi9cclxuXHRcdFx0XHRjb25zdCB4ID0gZS5wYWdlWCAtIGNvbnRhaW5lci5vZmZzZXRMZWZ0O1xyXG5cclxuXHRcdFx0XHQvKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG1vdmVkIChhbXBsaWZpZWQgZm9yIHNwZWVkKSAqL1xyXG5cdFx0XHRcdGNvbnN0IHdhbGsgPSAoeCAtIHRoaXMuc3RhcnRYKSAqIDI7XHJcblxyXG5cdFx0XHRcdC8qIFVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGJhc2VkIG9uIG1vdmVtZW50ICovXHJcblx0XHRcdFx0Y29udGFpbmVyLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQgLSB3YWxrO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbHVtbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgdXBkYXRlQ29sdW1ucygpOiB2b2lkIHtcclxuXHRcdC8qIFNvcnQgdGhlIGNvbHVtbnMgYnkgaW5kZXggKi9cclxuXHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLmNvbHVtbnMgfHwgW10sICdpbmRleCcpO1xyXG5cclxuXHRcdC8qIFRyaWdnZXIgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5jb2x1bW5zU3ViamVjdC5uZXh0KHRoaXMuY29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb3VudHMgdmlzaWJsZSBhY3Rpb24gbWVudXNcclxuXHQgKiBAcGFyYW0gcm93IFxyXG5cdCAqIEBwYXJhbSBjb2x1bW4gXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHVibGljIGhhc1Zpc2libGVSb3dNZW51SXRlbXMocm93OiBhbnksIGNvbHVtbjogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoY29sdW1uPy5yb3dNZW51SXRlbXM/LmZpbHRlcih4ID0+ICF4LmhpZGUgfHwgIXguaGlkZShyb3cpKT8ubGVuZ3RoID8/IC0xKSA+IDA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBIGZ1bmN0aW9uIHRvIHRvIGNvbXB1dGUgdGhlIGlkZW50aXR5IG9mIGl0ZW1zIGluIGFuIGl0ZXJhYmxlLlxyXG5cdCAqIEBwYXJhbSBpbmRleCBcclxuXHQgKiBAcGFyYW0gaXRlbSBcclxuXHQgKi9cclxuXHRwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke2l0ZW0uaWR9YDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZnVuY3Rpb24gdG8gdG8gY29tcHV0ZSB0aGUgaWRlbnRpdHkgb2YgaXRlbXMgaW4gYW4gaXRlcmFibGUuXHJcblx0ICogQHBhcmFtIGluZGV4IFxyXG5cdCAqIEBwYXJhbSBpdGVtIFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb2x1bW5zVHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGl0ZW0ubmFtZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgcm93IGNsaWNrIGV2ZW50XHJcblx0ICogQHBhcmFtIGluZGV4IFxyXG5cdCAqIEBwYXJhbSByb3cgXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZVJvd0NsaWNrKGluZGV4OiBhbnksIHJvdzogYW55KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy50ZW1wbGF0ZVJlZikge1xyXG5cdFx0XHR0aGlzLmV4cGFuZGVkUm93ID0gdGhpcy5leHBhbmRlZFJvdyA9PT0gcm93ID8gbnVsbCA6IHJvdztcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKHRoaXMuZGV0YWlsc1RlbXBsYXRlKSB7XHJcblx0XHRcdHRoaXMuZXhwYW5kZWRSb3cgPSB0aGlzLmV4cGFuZGVkUm93ID09PSByb3cgPyBudWxsIDogcm93O1xyXG5cdFx0XHRpZiAodGhpcy5kZXRhaWxzVGVtcGxhdGVSZWYpIHtcclxuXHRcdFx0XHR0aGlzLmR5bmFtaWNCdWlsZGVyLmNvbXBpbGVIdG1sKHRoaXMuZGV0YWlsc1RlbXBsYXRlUmVmLmdldChpbmRleCksIHRoaXMuZGV0YWlsc1RlbXBsYXRlLCByb3cpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0dGhpcy5yb3dDbGljay5lbWl0KHJvdyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2sgd2l0aCB0aGUgcmlnaHQgYnV0dG9uXHJcblx0ICogQHBhcmFtIGV2ZW50IE1vdXNlRXZlbnQsIGl0IGNvbnRhaW5zIHRoZSBjb29yZGluYXRlc1xyXG5cdCAqIEBwYXJhbSBpdGVtIE91ciBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcm93IG9mIHRoZSB0YWJsZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBoYW5kbGVSb3dSaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucm93Q29udGV4dE1lbnVUcmlnZ2Vycz8udG9BcnJheSgpPy5mb3JFYWNoKHggPT4geC5jbG9zZU1lbnUoKSk7XHJcblx0XHR2YXIgbWVudVRyaWdnZXIgPSB0aGlzLnJvd0NvbnRleHRNZW51VHJpZ2dlcnM/LnRvQXJyYXkoKT8uZmlsdGVyKHggPT4geFsnX2VsZW1lbnQnXT8ubmF0aXZlRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdpZCcpID09IGBtZW51LSR7aXRlbS5pZH1gKVswXTtcclxuXHRcdGlmIChtZW51VHJpZ2dlciAhPSBudWxsKSB7XHJcblx0XHRcdC8qIEF2b2lkcyB0byBzaG93IHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSByaWdodC1jbGljayBtZW51IG9mIHRoZSBicm93c2VyICovXHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHQvKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51ICovXHJcblx0XHRcdG1lbnVUcmlnZ2VyWydfZWxlbWVudCddPy5uYXRpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHBvc2l0aW9uOiBmaXhlZDsgbGVmdDogJHtldmVudC5jbGllbnRYfXB4OyB0b3A6ICR7ZXZlbnQuY2xpZW50WX1weGApO1xyXG5cclxuXHRcdFx0LyogUGFzcyB0byB0aGUgbWVudSB0aGUgY3VycmVudCBvYmplY3QgKi9cclxuXHRcdFx0bWVudVRyaWdnZXIubWVudURhdGEgPSB7IGl0ZW06IGl0ZW0gfVxyXG5cclxuXHRcdFx0LyogT3BlbiB0aGUgbWVudSAqL1xyXG5cdFx0XHRtZW51VHJpZ2dlci5vcGVuTWVudSgpO1xyXG5cclxuXHRcdFx0LyogSGFuZGxlIGNsaWNrcyBvbiB0aGUgbWVudSBvdmVybGF5ICovXHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay1vdmVybGF5LWNvbnRhaW5lcicpWzBdPy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChvZmZFdmVudDogYW55KSA9PiB7XHJcblx0XHRcdFx0b2ZmRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRtZW51VHJpZ2dlciEuY2xvc2VNZW51KCk7XHJcblx0XHRcdH0sIHsgb25jZTogdHJ1ZSB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEhhbmRsZXMgbW9kZWwgY2hhbmdlc1xyXG5cdCAqIEBwYXJhbSBjb2x1bW4gXHJcblx0ICogQHBhcmFtIHJvdyBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlTW9kZWxDaGFuZ2UoY29sdW1uOiBUYWJsZUNvbHVtbiwgcm93OiBhbnksIGZvcm1Hcm91cD86IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0aWYgKHR5cGVvZiBjb2x1bW4/LmV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGNvbHVtbi5ldmVudChyb3csIGZvcm1Hcm91cCwgY29sdW1uLmV2ZW50QXJncyA/PyB0aGlzLmNvbnRleHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyBrZXlkb3duIGVudGVyIG9mIDxpbnB1dD4gYW5kIDx2ZC1zZWxlY3Q+XHJcblx0ICogQHBhcmFtICRldmVudCBcclxuXHQgKi9cclxuXHRwdWJsaWMgaGFuZGxlS2V5ZG93bkVudGVyKCRldmVudDogRXZlbnQpOiBib29sZWFuIHtcclxuXHRcdCgkZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uYmx1cigpO1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyBhbiBlbnRpdHlcclxuXHQgKiBAcGFyYW0gcm93IFxyXG5cdCAqIEBwYXJhbSBmaWVsZE5hbWUgXHJcblx0ICogQHBhcmFtIHBhdGggXHJcblx0ICovXHJcblx0cHVibGljIHBhdGNoKHJvdzogYW55LCBmaWVsZHM6IEFycmF5PHN0cmluZz4sIHZhbHVlOiBhbnksIGluY2x1ZGVzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBlbnRpdHkgYnkgSUQgKi9cclxuXHRcdGxldCBlbnRpdHkgPSB0aGlzLmRhdGFTb3VyY2UuaXRlbXM/LmZpbHRlcigoeDogYW55KSA9PiAoPGFueT54KS5pZCA9PT0gcm93LmlkKVswXTtcclxuXHRcdGlmIChlbnRpdHkpIHtcclxuXHRcdFx0LyogQnVpbGQgcGF0Y2ggbWV0aG9kcyAqL1xyXG5cdFx0XHRsZXQgcGF0Y2hlcyA9IGZpZWxkcy5tYXAoeCA9PiB7IHJldHVybiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvJHt4fWAsIHZhbHVlOiB2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6IGVudGl0eVt4XSB9OyB9KTtcclxuXHJcblx0XHRcdC8qIFNlbmQgcmVxdWVzdCAqL1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2Uuc2VydmljZVxyXG5cdFx0XHRcdC5wYXRjaChyb3cuaWQsIHBhdGNoZXMsIG51bGwsIHsgaGVhZGVyczogeyAnU2hvdy1NZXNzYWdlJzogJ1llcycgfSwgcGFyYW1zOiBpbmNsdWRlcyA/IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiBpbmNsdWRlcyB9KSA6IG51bGwgfSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKChfOiBhbnkpID0+IHRoaXMuZGF0YVNvdXJjZS5yZWxvYWQoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW5kZXJzIHJvd3MgYmFzZWQgb24gdGhlIHRhYmxlJ3MgbGF0ZXN0IHNldCBvZiBkYXRhLCB3aGljaCB3YXMgZWl0aGVyIHByb3ZpZGVkIGRpcmVjdGx5IGFzIGFuXHJcblx0ICogaW5wdXQgb3IgcmV0cmlldmVkIHRocm91Z2ggYW4gT2JzZXJ2YWJsZSBzdHJlYW0gKGRpcmVjdGx5IG9yIGZyb20gYSBEYXRhU291cmNlKS5cclxuXHQgKiBDaGVja3MgZm9yIGRpZmZlcmVuY2VzIGluIHRoZSBkYXRhIHNpbmNlIHRoZSBsYXN0IGRpZmYgdG8gcGVyZm9ybSBvbmx5IHRoZSBuZWNlc3NhcnlcclxuXHQgKiBjaGFuZ2VzIChhZGQvcmVtb3ZlL21vdmUgcm93cykuXHJcblx0ICovXHJcblx0cHVibGljIHJlbmRlclJvd3MoKTogdm9pZCB7XHJcblx0XHR0aGlzLnRhYmxlPy5yZW5kZXJSb3dzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIGEgc3RyaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24uXHJcblx0ICogXHJcblx0ICogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIGFuIGlucHV0IGV4cHJlc3Npb24gdGhhdCBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24uIFxyXG5cdCAqIElmIGl0J3MgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHByb3ZpZGVkIGl0ZW0gYW5kIGNvbnRleHQuIFxyXG5cdCAqIElmIGl0J3MgYSBzdHJpbmcsIGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMtaXMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgZXhwcmVzc2lvbiB0byBoYW5kbGUsIHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uLlxyXG5cdCAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBmdW5jdGlvbi5cclxuXHQgKiBAcmV0dXJucyAtIFRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZW0gYW5kIGNvbnRleHQsIG9yIHRoZSBzdHJpbmcgZXhwcmVzc2lvbiBpdHNlbGYuXHJcblx0ICovXHJcblx0cHVibGljIGhhbmRsZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nIHwgRnVuY3Rpb24sIGl0ZW06IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcblx0XHQvKiBDaGVjayBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzeSAoZS5nLiwgbnVsbCwgdW5kZWZpbmVkLCBvciBlbXB0eSkgKi9cclxuXHRcdGlmICghZXhwcmVzc2lvbikge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIElmIHRoZSBleHByZXNzaW9uIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgd2l0aCB0aGUgaXRlbSBhbmQgY29udGV4dCAqL1xyXG5cdFx0aWYgKHR5cGVvZiBleHByZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdHJldHVybiBleHByZXNzaW9uKGl0ZW0sIHRoaXMuY29udGV4dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgdGhlIGV4cHJlc3Npb24gaXMgbm90IGEgZnVuY3Rpb24sIGFzc3VtZSBpdCdzIGEgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi9cclxuXHRcdHJldHVybiBleHByZXNzaW9uO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBhIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBpbiBhbiBvYmplY3QgYmFzZWQgb24gYSBkb3Qtc2VwYXJhdGVkIHBhdGguXHJcblx0ICogQHBhcmFtIHJvdyAtIFRoZSBvYmplY3QgaW4gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGJlaW5nIHNldC5cclxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIC0gQSBkb3Qtc2VwYXJhdGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIG5lc3RlZCBwcm9wZXJ0eS5cclxuXHQgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBzcGVjaWZpZWQgbmVzdGVkIHByb3BlcnR5LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXROZXN0ZWRQcm9wZXJ0eShyb3c6IGFueSwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIFNwbGl0IHRoZSBwcm9wZXJ0eVBhdGggaW50byBhbiBhcnJheSBvZiBrZXlzICovXHJcblx0XHRjb25zdCBrZXlzID0gcHJvcGVydHlQYXRoLnNwbGl0KCcuJyk7XHJcblxyXG5cdFx0LyogVXNlIHNsaWNlIHRvIGdldCBhbGwga2V5cyBleGNlcHQgdGhlIGxhc3Qgb25lIGFuZCByZWR1Y2UgdG8gdHJhdmVyc2UgdG8gdGhlIHNlY29uZC10by1sYXN0IGxldmVsICovXHJcblx0XHRrZXlzLnNsaWNlKDAsIC0xKS5yZWR1Y2UoKGFjYywga2V5KSA9PiBhY2MgJiYgYWNjW2tleV0sIHJvdylba2V5c1trZXlzLmxlbmd0aCAtIDFdXSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyByb3cgY2xhc3Nlc1xyXG5cdCAqIEBwYXJhbSBjb2x1bW4gXHJcblx0ICogQHBhcmFtIHJvdyBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0Um93Q2xhc3Nlcyhjb2x1bW46IFRhYmxlQ29sdW1uLCByb3c6IGFueSk6IGFueSB7XHJcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7XHJcblx0XHRcdCdndC14cyc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuWHMsXHJcblx0XHRcdCdndC1zbSc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuU20sXHJcblx0XHRcdCdndC1tZCc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuTWQsXHJcblx0XHRcdCdndC1sZyc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuTGcsXHJcblx0XHRcdCdndC14bCc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuWGwsXHJcblx0XHRcdCdndC14eGwnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlh4bCxcclxuXHRcdFx0J2hpZGRlbic6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuTm9uZSxcclxuXHRcdFx0J3RleHQtcmlnaHQnOiBjb2x1bW4uYXJyb3dCZWZvcmVcclxuXHRcdH0sIGNvbHVtbi5jZWxsTmdDbGFzcyA/IGNvbHVtbi5jZWxsTmdDbGFzcyhyb3csIHRoaXMuY29udGV4dCkgOiB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgdG8gY29uc29sZVxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9nKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSB7XHJcblx0XHRjb25zb2xlLmxvZyhtZXNzYWdlLCBvcHRpb25hbFBhcmFtcyk7XHJcblx0fVxyXG5cclxuXHQvKiBcclxuXHQgKiBUZXJtaW5hdGVzIHRoZSBkcmFnZ2luZyBhY3Rpb24gYnkgcmVzZXR0aW5nIHRoZSBgaXNEcmFnZ2luZ2AgZmxhZyBhZnRlciBhIGJyaWVmIGRlbGF5LlxyXG5cdCAqIElmIHRoZSBgc2Nyb2xsQ29udGFpbmVyYCBpcyBkZWZpbmVkLCBpdCBhbHNvIHJlbW92ZXMgdGhlICdncmFiYmluZycgY2xhc3MgXHJcblx0ICogZnJvbSB0aGUgY29udGFpbmVyIGVsZW1lbnQsIHdoaWNoIHJldmVydHMgdGhlIGN1cnNvciBiYWNrIHRvIGl0cyBkZWZhdWx0IHN0YXRlLlxyXG5cdCAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2aXN1YWwgZmVlZGJhY2sgKGdyYWJiaW5nIGN1cnNvcikgaXMgb25seSBhY3RpdmUgZHVyaW5nIFxyXG5cdCAqIHRoZSBkcmFnIG9wZXJhdGlvbiBhbmQgaXMgcHJvcGVybHkgcmVtb3ZlZCB3aGVuIHRoZSB1c2VyIHN0b3BzIGludGVyYWN0aW5nLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3RvcERyYWdnaW5nKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcblx0XHQvKiBSZXNldCBkcmFnZ2luZyBzdGF0ZSB0byBzdG9wIHRoZSBzY3JvbGwgaW50ZXJhY3Rpb24gKi9cclxuXHRcdHRoaXMuc3RhcnREcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogSW50cm9kdWNlIGEgc2xpZ2h0IGRlbGF5IGJlZm9yZSByZXNldHRpbmcgdGhlIGRyYWdnaW5nIHN0YXRlLlxyXG5cdFx0ICogVGhpcyBhbGxvd3MgZm9yIHNtb290aGVyIHRyYW5zaXRpb25zIGFuZCBlbnN1cmVzIHRoYXQgYW55IGZpbmFsIHNjcm9sbCBhZGp1c3RtZW50c1xyXG5cdFx0ICogYXJlIGFwcGxpZWQgYmVmb3JlIG1hcmtpbmcgdGhlIGRyYWdnaW5nIG9wZXJhdGlvbiBhcyBjb21wbGV0ZS5cclxuXHRcdCAqL1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdC8qIFJlc2V0IGRyYWdnaW5nIHN0YXRlIHRvIHN0b3AgdGhlIHNjcm9sbCBpbnRlcmFjdGlvbiAqL1xyXG5cdFx0XHR0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdC8qIFJlc3RvcmUgdGhlIGRlZmF1bHQgY3Vyc29yICovXHJcblx0XHRcdGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xyXG5cdFx0XHRcdHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZ3JhYmJpbmcnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSwgMjAwKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgaXMgaW52b2tlZCBpbW1lZGlhdGVseSBhZnRlciB0aGVcclxuXHQgKiBkZWZhdWx0IGNoYW5nZSBkZXRlY3RvciBoYXMgY29tcGxldGVkIG9uZSBjaGFuZ2UtY2hlY2sgY3ljbGVcclxuXHQgKiBmb3IgYSBjb21wb25lbnQncyB2aWV3LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcbn0iLCI8ZGl2IGNsYXNzPVwibG9hZGluZy1wcm9ncmVzc1wiICpuZ0lmPVwiIXN0YXRpY1wiPlxyXG5cdDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJkYXRhU291cmNlPy5pc0xvYWRpbmdcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSAjcmVnaW9uIERhdGEgdGFibGUgLS0+XHJcbjxkaXYgY2xhc3M9XCJtYXQtdGFibGUtY29udGFpbmVyIHNjcm9sbGJhci1zZWNvbmRhcnlcIiBbbmdDbGFzc109XCJ7J21hdC10YWJsZS1zdGlja3knOiBzdGlja3l9XCIgI3Njcm9sbENvbnRhaW5lcj5cclxuXHQ8dGFibGUgbWF0LXRhYmxlICN0YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW2RhdGFTb3VyY2VGaWx0ZXJdPVwiZGF0YVNvdXJjZUZpbHRlclwiIFtuZ0NsYXNzXT1cInsndGFibGUtZml4ZWQnOiAhc3RpY2t5ICYmICFkZXRhaWxzVGVtcGxhdGUgJiYgIXRlbXBsYXRlUmVmLCAndGFibGUtc3RpY2snOiBzdGlja3l9XCIgW3RyYWNrQnldPVwidHJhY2tCeVwiIG1hdFNvcnQgbWF0U29ydERpc2FibGVDbGVhciBbbWF0U29ydEFjdGl2ZV09XCJzb3J0QWN0aXZlfHwnaWQnXCIgW21hdFNvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiIG11bHRpVGVtcGxhdGVEYXRhUm93cz5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zJCB8IGFzeW5jOyB0cmFja0J5OmNvbHVtbnNUcmFja0J5XCI+XHJcblx0XHRcdDwhLS0gI3JlZ2lvbiBDb2x1bW4gZGVmIC0tPlxyXG5cdFx0XHQ8bmctY29udGFpbmVyIFtjZGtDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIiBbc3RpY2t5XT1cImNvbHVtbi5zdGlja3lcIiBbc3RpY2t5RW5kXT1cImNvbHVtbi5zdGlja3lFbmRcIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgI2hlYWRlciBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJcIiBsZXQtaGVhZGVyVGV4dD1cImhlYWRlclRleHRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2hlYWRlclRleHQ6IGNvbHVtbi5oZWFkZXIgfCBmdW5jOmNvbnRleHR9XCI+XHJcblx0XHRcdFx0XHQ8dGggbWF0LWhlYWRlci1jZWxsICpjZGtIZWFkZXJDZWxsRGVmIFttYXQtc29ydC1oZWFkZXJdPVwiY29sdW1uLnNvcnRCeSB8fCBjb2x1bW4ubmFtZVwiIFtoaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiIFtuZ1N0eWxlXT1cInttYXhXaWR0aDpjb2x1bW4ubWF4V2lkdGg/KGNvbHVtbi5tYXhXaWR0aCsoY29sdW1uLm1heFdpZHRoVW5pdCB8fCAncHgnKSk6bnVsbCxtaW5XaWR0aDpjb2x1bW4ubWluV2lkdGg/KGNvbHVtbi5taW5XaWR0aCsoY29sdW1uLm1pbldpZHRoVW5pdCB8fCAncHgnKSk6bnVsbCx3aWR0aDpjb2x1bW4ud2lkdGg/KGNvbHVtbi53aWR0aCsoY29sdW1uLndpZHRoVW5pdCB8fCAncHgnKSk6bnVsbH1cIiBbZGlzYWJsZWRdPVwiY29sdW1uLnR5cGUgPT0gQ29sdW1uVHlwZS5DaGVja2JveCB8fCBjb2x1bW4uZGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7J2d0LXhzJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5YcywgJ2d0LXNtJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5TbSwgJ2d0LW1kJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5NZCwgJ2d0LWxnJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5MZywgJ2d0LXhsJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5YbCwgJ2d0LXh4bCc6IGNvbHVtbi5kaXNwbGF5ID09IEdyaWQuWHhsLCAnaGlkZGVuJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5Ob25lfVwiIFthcnJvd1Bvc2l0aW9uXT1cImNvbHVtbi5hcnJvd0JlZm9yZT8nYmVmb3JlJzonYWZ0ZXInXCI+XHJcblx0XHRcdFx0XHRcdDxtYXQtY2hlY2tib3ggKm5nSWY9XCJjb2x1bW4udHlwZSA9PSBDb2x1bW5UeXBlLkNoZWNrYm94XCIgKGNoYW5nZSk9XCIkZXZlbnQgPyBkYXRhU291cmNlLnRvZ2dsZVNlbGVjdCgkZXZlbnQsIHNlbGVjdEFsbEZpbHRlcikgOiBudWxsXCIgW2Rpc2FibGVkXT1cIiFkYXRhU291cmNlLnBhZ2luYXRvcj8ubGVuZ3RoXCIgW2NoZWNrZWRdPVwiZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpICYmIGRhdGFTb3VyY2UuaXNBbGxTZWxlY3RlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwiZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5oYXNWYWx1ZSgpICYmICFkYXRhU291cmNlLmlzQWxsU2VsZWN0ZWQoKVwiPjwvbWF0LWNoZWNrYm94PlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNvbHVtbi50eXBlICE9IENvbHVtblR5cGUuQ2hlY2tib3hcIiBbbWF0VG9vbHRpcF09XCJoZWFkZXJUZXh0XCI+e3toZWFkZXJUZXh0fX08L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3RoPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PHRkIG1hdC1jZWxsICpjZGtDZWxsRGVmPVwibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXA/Y29sdW1uLnRvb2x0aXAocm93LCB1bmRlZmluZWQsIGNvbnRleHQpOm51bGxcIiBbbWF0VG9vbHRpcENsYXNzXT1cImNvbHVtbi50b29sdGlwQ2xhc3M/PycnXCIgW2hpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3Nlcyhjb2x1bW4sIHJvdylcIiBbbmdTdHlsZV09XCJ7bWF4V2lkdGg6Y29sdW1uLm1heFdpZHRoPyhjb2x1bW4ubWF4V2lkdGgrKGNvbHVtbi5tYXhXaWR0aFVuaXQgfHwgJ3B4JykpOm51bGwsbWluV2lkdGg6Y29sdW1uLm1pbldpZHRoPyhjb2x1bW4ubWluV2lkdGgrKGNvbHVtbi5taW5XaWR0aFVuaXQgfHwgJ3B4JykpOm51bGwsd2lkdGg6Y29sdW1uLndpZHRoPyhjb2x1bW4ud2lkdGgrKGNvbHVtbi53aWR0aFVuaXQgfHwgJ3B4JykpOm51bGx9XCI+XHJcblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI3Jvd1ZhbCBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dWYWxcIiBsZXQtcm93VmFsdWUgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGNvbHVtbj8uY29udGVudCAmJiBjb2x1bW4/LmNvbnRlbnQocm93LCB1bmRlZmluZWQsIGNvbnRleHQpfVwiPlxyXG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBDaGVja2JveCBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1jaGVja2JveCAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5DaGVja2JveFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IGRhdGFTb3VyY2Uuc2VsZWN0aW9uTW9kZWwudG9nZ2xlKHJvdykgOiBudWxsXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5IHx8IChjb2x1bW4uZGlzYWJsZWQgfHwgKGNvbHVtbi5kaXNhYmxlICYmIGNvbHVtbi5kaXNhYmxlKHJvdywgdW5kZWZpbmVkLCBjb250ZXh0KSkpXCIgW2NoZWNrZWRdPVwiZGF0YVNvdXJjZS5zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHJvdylcIj48L21hdC1jaGVja2JveD5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBFbnVtIGNvbHVtbiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5FbnVtXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmVudW1NZXRhZGF0YTsgZWxzZSBub0VudW1NZXRhZGF0YVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm11bHRpcGxlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93VmFsdWU7IGxldCBpID0gaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpIDwgMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgbGV0LWRpc3BsYXlWYWx1ZT1cImRpc3BsYXlWYWx1ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGlzcGxheVZhbHVlOiBjb2x1bW4uZW51bU1ldGFkYXRhW2l0ZW1dLmRpc3BsYXkgfVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNtYWxsICpuZ0lmPVwiaSA9PT0gMSAmJiByb3dWYWx1ZT8ubGVuZ3RoID4gMlwiIFttYXRUb29sdGlwXT1cIihyb3dWYWx1ZSB8IHNsaWNlOjIgfCBtYXA6Y29sdW1uLmVudW1NZXRhZGF0YSB8IG1hcDonZGlzcGxheScpIHwgam9pbjonXFxuJ1wiIG1hdFRvb2x0aXBDbGFzcz1cIm1hdC10b29sdGlwLW11bHRpbGluZVwiPi4uLjwvc21hbGw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtZGlzcGxheVZhbHVlPVwiZGlzcGxheVZhbHVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWF0LWNoaXAtcm93IGRpc2FibGVSaXBwbGU9XCJ0cnVlXCIgc2VsZWN0YWJsZT1cImZhbHNlXCIgW21hdFRvb2x0aXBdPVwiZGlzcGxheVZhbHVlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPnt7IGRpc3BsYXlWYWx1ZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWF0LWNoaXAtcm93PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInJvd1ZhbHVlID49IDBcIiBjbGFzcz1cIm5hXCIgW2lubmVySHRtbF09XCIoY29sdW1uLmVudW1NZXRhZGF0YVtyb3dWYWx1ZV18fHt9KS5kaXNwbGF5XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI25vRW51bU1ldGFkYXRhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm11bHRpcGxlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93VmFsdWU7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNtYWxsICpuZ0lmPVwiaTwyXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e2l0ZW0gfCBlbnVtOmNvbHVtbi5lbnVtVHlwZTpjb2x1bW4uZW51bVByZWZpeCwgc2VsZWN0LCB0eXBlIHt0eXBlfSBvdGhlciB7e3tpdGVtIHwgZW51bTpjb2x1bW4uZW51bVR5cGU6Y29sdW1uLmVudW1QcmVmaXh9fX19PC9zbWFsbD48c21hbGwgKm5nSWY9XCJpPT0xICYmIHJvd1ZhbHVlPy5sZW5ndGggPiAyXCI+LCAuLi48L3NtYWxsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJyb3dWYWx1ZSA+PSAwXCIgaTE4bj1cIkBAc2VsZWN0aW9uXCI+e3Jvd1ZhbHVlIHwgZW51bTpjb2x1bW4uZW51bVR5cGU6Y29sdW1uLmVudW1QcmVmaXgsIHNlbGVjdCwgdHlwZSB7dHlwZX0gb3RoZXIge3t7cm93VmFsdWUgfCBlbnVtOmNvbHVtbi5lbnVtVHlwZTpjb2x1bW4uZW51bVByZWZpeH19fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjcmVjdXJzaXZlQ29udGFpbmVyIGxldC1jb2x1bW5OYW1lU2VnbWVudHM9XCJzZWdtZW50c1wiIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtcGFyZW50Rm9ybUdyb3VwPVwicGFyZW50Rm9ybUdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBJZiB0aGUgY29sdW1uTmFtZVNlZ21lbnRzIGFycmF5IGlzIGVtcHR5LCB3ZSdyZSBhdCB0aGUgbGVhZiBub2RlIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbk5hbWVTZWdtZW50cy5sZW5ndGg7IGVsc2Ugbm90TGFzdFNlZ21lbnRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gVG9nZ2xlIGNvbHVtbiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJDb2x1bW5UeXBlLlRvZ2dsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hdC1zbGlkZS10b2dnbGUgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgKGNoYW5nZSk9XCJjb2x1bW4uY2hhbmdlP2NvbHVtbi5jaGFuZ2UocGFyZW50Rm9ybUdyb3VwLnZhbHVlLCBwYXJlbnRGb3JtR3JvdXAsIGNvbnRleHQpOmhhbmRsZU1vZGVsQ2hhbmdlKGNvbHVtbiwgcGFyZW50Rm9ybUdyb3VwLnZhbHVlLCBwYXJlbnRGb3JtR3JvdXApXCIgW2Rpc2FibGVDb250cm9sXT1cInJlYWRvbmx5IHx8IChjb2x1bW4uZGlzYWJsZWQgfHwgKGNvbHVtbi5kaXNhYmxlICYmIGNvbHVtbi5kaXNhYmxlKHBhcmVudEZvcm1Hcm91cC52YWx1ZSwgcGFyZW50Rm9ybUdyb3VwLCBjb250ZXh0KSkpXCIgY29sb3I9XCJhY2NlbnRcIj48L21hdC1zbGlkZS10b2dnbGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gVGV4dCBJbnB1dCBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkICpuZ1N3aXRjaENhc2U9XCJDb2x1bW5UeXBlLlRleHRJbnB1dFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGRlbnNlLTMgbGF5b3V0PVwiY29sdW1uXCIgbGF5b3V0LWFsaWduPVwiY2VudGVyIHN0YXJ0XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwXCIgdHlwZT1cInt7Y29sdW1uLmlucHV0VHlwZX19XCIgYXV0b2NvbXBsZXRlPVwibm9uZVwiIFtkaXNhYmxlQ29udHJvbF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCkpKVwiIFttaW5dPVwiY29sdW1uLmlucHV0TWluP2NvbHVtbi5pbnB1dE1pbihwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCk6bnVsbFwiIFttYXhdPVwiY29sdW1uLmlucHV0TWF4P2NvbHVtbi5pbnB1dE1heChwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCk6bnVsbFwiIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUtleWRvd25FbnRlcigkZXZlbnQpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBWRC1TZWxlY3QgY29sdW1uIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5TZWxlY3RcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBkZW5zZS0zIGxheW91dD1cImNvbHVtblwiIGxheW91dC1hbGlnbj1cImNlbnRlciBzdGFydFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dmQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXBcIiBbZW51bV09XCJjb2x1bW4uZW51bVR5cGVcIiBbZW51bU1ldGFkYXRhXT1cImNvbHVtbi5lbnVtTWV0YWRhdGFcIiBbZW51bUZpbHRlcl09XCJjb2x1bW4uZW51bUZpbHRlciB8IGZ1bmM6cGFyZW50Rm9ybUdyb3VwLnZhbHVlOmNvbnRleHRcIiBbcHJlZml4XT1cImNvbHVtbi5lbnVtUHJlZml4XCIgW29wdGlvbnNdPVwiY29sdW1uLm9wdGlvbnNcIiBbZGVmYXVsdE9wdGlvbl09XCJjb2x1bW4uZGVmYXVsdE9wdGlvbj8/dHJ1ZVwiIFtkaXNhYmxlQ29udHJvbF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShwYXJlbnRGb3JtR3JvdXAudmFsdWUsIHBhcmVudEZvcm1Hcm91cCwgY29udGV4dCkpKVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiY29sdW1uLmNoYW5nZT9jb2x1bW4uY2hhbmdlKHBhcmVudEZvcm1Hcm91cC52YWx1ZSwgcGFyZW50Rm9ybUdyb3VwLCBjb250ZXh0KTpwYXRjaChwYXJlbnRGb3JtR3JvdXAudmFsdWUsIFtjb2x1bW4ubmFtZV0sIHJvd1ZhbHVlLCBjb2x1bW4ucGF0Y2hJbmNsdWRlcylcIiAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVLZXlkb3duRW50ZXIoJGV2ZW50KVwiPjwvdmQtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNub3RMYXN0U2VnbWVudD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIElmIG5vdCB0aGUgbGFzdCBzZWdtZW50LCBjcmVhdGUgYSBuZXN0ZWQgZm9ybSBncm91cCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT1cImNvbHVtbk5hbWVTZWdtZW50c1swXVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBSZWN1cnNpdmUgY2FsbCB0byBoYW5kbGUgbmVzdGVkIHNlZ21lbnRzIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWN1cnNpdmVDb250YWluZXJcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlZ21lbnRzOiBjb2x1bW5OYW1lU2VnbWVudHMuc2xpY2UoMSksIHBhcmVudEZvcm1Hcm91cDpmb3JtR3JvdXAsIGZvcm1Hcm91cDogZm9ybUdyb3VwLmdldChjb2x1bW5OYW1lU2VnbWVudHNbMF0pfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFRvZ2dsZSBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5Ub2dnbGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9ybUFycmF5XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxtYXQtc2xpZGUtdG9nZ2xlIFtuZ01vZGVsXT1cInJvdyB8IHByb3BlcnR5OmNvbHVtbi5uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0TmVzdGVkUHJvcGVydHkocm93LCBjb2x1bW4ubmFtZSwgJGV2ZW50KTtoYW5kbGVNb2RlbENoYW5nZShjb2x1bW4sIHJvdywgdW5kZWZpbmVkKTtcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShyb3csIHVuZGVmaW5lZCwgY29udGV4dCkpKVwiIGNvbG9yPVwiYWNjZW50XCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUFycmF5XCIgW2Zvcm1Hcm91cF09XCIkYW55KGZvcm1BcnJheS5jb250cm9scylbcm93SW5kZXhdIHwgZm9ybUdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicmVjdXJzaXZlQ29udGFpbmVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntzZWdtZW50czogY29sdW1uLm5hbWUuc3BsaXQoJy4nKSwgZm9ybUdyb3VwOiBmb3JtQXJyYXkuY29udHJvbHNbcm93SW5kZXhdfVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gRGF0ZSBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuRGF0ZVwiPnt7cm93VmFsdWUgfCBkYXRlOmNvbHVtbi5zaG9ydERhdGU/J2RkLk1NLnl5eXknOidkZC5NTS55eXl5IEhIOm1tOnNzJ319PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFRleHQgSW5wdXQgY29sdW1uIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuVGV4dElucHV0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhZm9ybUFycmF5XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBsYXlvdXQ9XCJjb2x1bW5cIiBsYXlvdXQtYWxpZ249XCJjZW50ZXIgc3RhcnRcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgZGVuc2UtMyAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgbWF0SW5wdXQgKm5nSWY9XCIhZm9ybUFycmF5XCIgdHlwZT1cInt7Y29sdW1uLmlucHV0VHlwZX19XCIgYXV0b2NvbXBsZXRlPVwibm9uZVwiIG5hbWU9XCJ7e2NvbHVtbi5uYW1lfX17e3Jvd0luZGV4fX1cIiBbbmdNb2RlbF09XCJyb3cgfCBwcm9wZXJ0eTpjb2x1bW4ubmFtZVwiIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCAoY29sdW1uLmRpc2FibGVkIHx8IChjb2x1bW4uZGlzYWJsZSAmJiBjb2x1bW4uZGlzYWJsZShyb3csIHVuZGVmaW5lZCwgY29udGV4dCkpKVwiIFttaW5dPVwiY29sdW1uLmlucHV0TWluP2NvbHVtbi5pbnB1dE1pbihyb3csIHVuZGVmaW5lZCwgY29udGV4dCk6bnVsbFwiIFttYXhdPVwiY29sdW1uLmlucHV0TWF4P2NvbHVtbi5pbnB1dE1heChyb3csIHVuZGVmaW5lZCwgY29udGV4dCk6bnVsbFwiIChuZ01vZGVsQ2hhbmdlKT1cInNldE5lc3RlZFByb3BlcnR5KHJvdywgY29sdW1uLm5hbWUsICRldmVudCk7KGNvbHVtbi5jaGFuZ2U/Y29sdW1uLmNoYW5nZShyb3csIHVuZGVmaW5lZCwgY29udGV4dCk6cGF0Y2gocm93LCBbY29sdW1uLm5hbWVdLCAkZXZlbnQsIGNvbHVtbi5wYXRjaEluY2x1ZGVzKSk7XCIgW25nTW9kZWxPcHRpb25zXT1cInt1cGRhdGVPbjogJ2JsdXInfVwiIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUtleWRvd25FbnRlcigkZXZlbnQpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1BcnJheVwiIFtmb3JtR3JvdXBdPVwiJGFueShmb3JtQXJyYXkuY29udHJvbHMpW3Jvd0luZGV4XSB8IGZvcm1Hcm91cFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlY3Vyc2l2ZUNvbnRhaW5lclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7c2VnbWVudHM6IGNvbHVtbi5uYW1lLnNwbGl0KCcuJyksIGZvcm1Hcm91cDogZm9ybUFycmF5LmNvbnRyb2xzW3Jvd0luZGV4XX1cIj48L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFZELVNlbGVjdCBjb2x1bW4gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5TZWxlY3RcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFmb3JtQXJyYXlcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGxheW91dD1cImNvbHVtblwiIGxheW91dC1hbGlnbj1cImNlbnRlciBzdGFydFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBkZW5zZS0zIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDx2ZC1zZWxlY3QgKm5nSWY9XCIhZm9ybUFycmF5XCIgbmFtZT1cInt7Y29sdW1uLm5hbWV9fXt7cm93SW5kZXh9fVwiIFtlbnVtXT1cImNvbHVtbi5lbnVtVHlwZVwiIFtlbnVtTWV0YWRhdGFdPVwiY29sdW1uLmVudW1NZXRhZGF0YVwiIFtlbnVtRmlsdGVyXT1cImNvbHVtbj8uZW51bUZpbHRlciAgfCBmdW5jOnJvdzpjb250ZXh0XCIgW3ByZWZpeF09XCJjb2x1bW4uZW51bVByZWZpeFwiIFtvcHRpb25zXT1cImNvbHVtbi5vcHRpb25zXCIgW2RlZmF1bHRPcHRpb25dPVwiY29sdW1uLmRlZmF1bHRPcHRpb24/P3RydWVcIiBbbmdNb2RlbF09XCJyb3cgfCBwcm9wZXJ0eTpjb2x1bW4ubmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInNldE5lc3RlZFByb3BlcnR5KHJvdywgY29sdW1uLm5hbWUsICRldmVudCk7XCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5IHx8IChjb2x1bW4uZGlzYWJsZWQgfHwgKGNvbHVtbi5kaXNhYmxlICYmIGNvbHVtbi5kaXNhYmxlKHJvdywgdW5kZWZpbmVkLCBjb250ZXh0KSkpXCIgKGNoYW5nZSk9XCJjb2x1bW4uY2hhbmdlP2NvbHVtbi5jaGFuZ2Uocm93LCB1bmRlZmluZWQsIGNvbnRleHQpOnBhdGNoKHJvdywgW2NvbHVtbi5uYW1lXSwgJGV2ZW50LnZhbHVlLCBjb2x1bW4ucGF0Y2hJbmNsdWRlcylcIiAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVLZXlkb3duRW50ZXIoJGV2ZW50KVwiPjwvdmQtc2VsZWN0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtQXJyYXlcIiBbZm9ybUdyb3VwXT1cIiRhbnkoZm9ybUFycmF5LmNvbnRyb2xzKVtyb3dJbmRleF0gfCBmb3JtR3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWN1cnNpdmVDb250YWluZXJcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlZ21lbnRzOiBjb2x1bW4ubmFtZS5zcGxpdCgnLicpLCBmb3JtR3JvdXA6IGZvcm1BcnJheS5jb250cm9sc1tyb3dJbmRleF19XCI+PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBBY3Rpb24gLS0+XHJcblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQ29sdW1uVHlwZS5BY3Rpb25cIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubWVudVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGlkPVwibWVudS17e3Jvdy5pZH19XCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvc2l0aW9uOiBmaXhlZDtcIiAjY29udGV4dE1lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudS5tYXRNZW51IVwiICpuZ0lmPVwibWVudT8ubWF0TWVudSAmJiAhcm93LmxvY2tlZCAmJiBoYXNWaXNpYmxlUm93TWVudUl0ZW1zKHJvdywgY29sdW1uKVwiPjwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dmQtZHluYW1pYy1tZW51IFtpdGVtc109XCJbY29sdW1uLm1lbnVdXCIgW2RhdGFdPVwicm93XCIgW2NvbnRleHRdPVwiY29udGV4dFwiICNtZW51PjwvdmQtZHluYW1pYy1tZW51PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gTWVudSAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLm1lbnVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDx2ZC1keW5hbWljLW1lbnUgKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuTWVudVwiIFtpdGVtc109XCJbY29sdW1uLm1lbnVdXCIgW2RhdGFdPVwicm93XCIgW2NvbnRleHRdPVwiY29udGV4dFwiPjwvdmQtZHluYW1pYy1tZW51PlxyXG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdFx0PCEtLSAjcmVnaW9uIGljb24gLS0+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuSWNvblwiIGxheW91dD1cInJvd1wiIGxheW91dC1hbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmljb24/Lm1hdEljb25cIiBmb250U2V0PVwie3tjb2x1bW4uaWNvbj8uZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCd9fVwiIFtjbGFzc109XCJoYW5kbGVFeHByZXNzaW9uKGNvbHVtbi5pY29uPy5jc3NDbGFzcz8/JycsIHJvdylcIj57e2hhbmRsZUV4cHJlc3Npb24oY29sdW1uLmljb24/Lm1hdEljb24hLCByb3cpfX08L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmljb24/LnN2Z0ljb25cIiBmb250U2V0PVwie3tjb2x1bW4uaWNvbj8uZm9udFNldCB8fCAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCd9fVwiIFtjbGFzc109XCJoYW5kbGVFeHByZXNzaW9uKGNvbHVtbi5pY29uPy5jc3NDbGFzcz8/JycsIHJvdylcIiBbc3ZnSWNvbl09XCJoYW5kbGVFeHByZXNzaW9uKGNvbHVtbi5pY29uPy5zdmdJY29uISwgcm93KSFcIj48L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLmljb24/LmZvbnRJY29uXCIgZm9udFNldD1cInt7Y29sdW1uLmljb24/LmZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwiaGFuZGxlRXhwcmVzc2lvbihjb2x1bW4uaWNvbj8uY3NzQ2xhc3M/PycnLCByb3cpXCIgW2ZvbnRJY29uXT1cImhhbmRsZUV4cHJlc3Npb24oY29sdW1uLmljb24/LmZvbnRJY29uISwgcm93KSFcIj48L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBpY29uIGJ1dHRvbiAtLT5cclxuXHRcdFx0XHRcdFx0XHQ8YSBtYXQtaWNvbi1idXR0b24gKm5nU3dpdGNoQ2FzZT1cIkNvbHVtblR5cGUuSWNvbkJ1dHRvblwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sdW1uLmljb25CdXR0b24/LmV2ZW50P2NvbHVtbi5pY29uQnV0dG9uPy5ldmVudChyb3csIGNvbnRleHQpOm51bGxcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtaWNvbiBmb250U2V0PVwie3tjb2x1bW4uaWNvbkJ1dHRvbj8uaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwiaGFuZGxlRXhwcmVzc2lvbihjb2x1bW4uaWNvbkJ1dHRvbj8uaWNvbkNsYXNzPz8nJywgcm93KVwiPnt7aGFuZGxlRXhwcmVzc2lvbihjb2x1bW4uaWNvbkJ1dHRvbj8uaWNvbj8/J3JhZGlvX2J1dHRvbl9jaGVja2VkJywgcm93KSB8fCAncmFkaW9fYnV0dG9uX2NoZWNrZWQnfX08L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBPdGhlciBjb2x1bW4gdHlwZXMgLS0+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nU3dpdGNoRGVmYXVsdCBbaW5uZXJIdG1sXT1cInJvd1ZhbHVlPz8nJ1wiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0PCEtLSAjcmVnaW9uIEZpbHRlciByb3cgLS0+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVNvdXJjZSAmJiBmaWx0ZXJhYmxlXCI+XHJcblx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zJCB8IGFzeW5jXCI+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lciBjZGtDb2x1bW5EZWY9XCJmaWx0ZXIue3tjb2x1bW4uZmlsdGVyIHx8IGNvbHVtbi5uYW1lfX1cIiBbc3RpY2t5XT1cImNvbHVtbi5zdGlja3lcIiBbc3RpY2t5RW5kXT1cImNvbHVtbi5zdGlja3lFbmRcIj5cclxuXHRcdFx0XHRcdDx0aCBtYXQtaGVhZGVyLWNlbGwgKmNka0hlYWRlckNlbGxEZWYgW2hpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCIgW25nU3R5bGVdPVwie21heFdpZHRoOmNvbHVtbi5tYXhXaWR0aD8oY29sdW1uLm1heFdpZHRoKyhjb2x1bW4ubWF4V2lkdGhVbml0IHx8ICdweCcpKTpudWxsLG1pbldpZHRoOmNvbHVtbi5taW5XaWR0aD8oY29sdW1uLm1pbldpZHRoKyhjb2x1bW4ubWluV2lkdGhVbml0IHx8ICdweCcpKTpudWxsLHdpZHRoOmNvbHVtbi53aWR0aD8oY29sdW1uLndpZHRoKyhjb2x1bW4ud2lkdGhVbml0IHx8ICdweCcpKTpudWxsfVwiIFtuZ0NsYXNzXT1cInsnZ3QteHMnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlhzLCAnZ3Qtc20nOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlNtLCAnZ3QtbWQnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLk1kLCAnZ3QtbGcnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLkxnLCAnZ3QteGwnOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLlhsLCAnZ3QteHhsJzogY29sdW1uLmRpc3BsYXkgPT0gR3JpZC5YeGwsICdoaWRkZW4nOiBjb2x1bW4uZGlzcGxheSA9PSBHcmlkLk5vbmV9XCI+XHJcblx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBTZWxlY3QgZmlsdGVyIC0tPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cIihjb2x1bW4uZW5kcG9pbnQgfHwgY29sdW1uLmVudW1UeXBlIHx8IGNvbHVtbi5vcHRpb25zKSBlbHNlIG5vdFNlbGVjdEZpbHRlclwiIGZpbHRlci1zZWxlY3QgW2VuZHBvaW50XT1cImNvbHVtbi5lbmRwb2ludFwiIFtlbnVtXT1cImNvbHVtbi5lbnVtVHlwZVwiIFtlbnVtTWV0YWRhdGFdPVwiY29sdW1uLmVudW1NZXRhZGF0YVwiIFtlbnVtRmlsdGVyXT1cImNvbHVtbi5lbnVtRmlsdGVyIHwgZnVuYzp7fTpjb250ZXh0XCIgW3ByZWZpeF09XCJjb2x1bW4uZW51bVByZWZpeFwiIFtvcHRpb25zXT1cImNvbHVtbi5vcHRpb25zXCIgW3RleHRdPVwiY29sdW1uLmZpbHRlck9wdGlvblRleHQgfHwgJ25hbWUnXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0XHQ8IS0tICNyZWdpb24gVGV4dCBmaWx0ZXIgLS0+XHJcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbm90U2VsZWN0RmlsdGVyPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibm90U2VsZWN0RmlsdGVyICYmIChjb2x1bW4udHlwZSA9PSBDb2x1bW5UeXBlLlRleHQgfHwgY29sdW1uLnR5cGUgPT0gQ29sdW1uVHlwZS5UZXh0SW5wdXQgfHwgY29sdW1uLnR5cGUgPT0gQ29sdW1uVHlwZS5OdW1iZXIpIGVsc2Ugbm90SW5wdXRGaWx0ZXJcIiBmaWx0ZXItaW5wdXQgW29ubHlOdW1iZXJdPVwiY29sdW1uLmZpbHRlcklucHV0TnVtYmVyPz9mYWxzZVwiIFtvcGVyYXRvcl09XCIhdXNlRmlsdGVyT3BlcmF0b3IgPyB1bmRlZmluZWQgOiBjb2x1bW4uZmlsdGVyT3BlcmF0b3JcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBEYXRlIGZpbHRlciAtLT5cclxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNub3RJbnB1dEZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNvbHVtbi50eXBlID09IENvbHVtblR5cGUuRGF0ZSBlbHNlIG5vdERhdGVGaWx0ZXJcIiBmaWx0ZXItZGF0ZT48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBBY3Rpb24gZmlsdGVyIChjbGVhcikgLS0+XHJcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbm90RGF0ZUZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cImNvbHVtbi50eXBlID09IENvbHVtblR5cGUuQWN0aW9uXCIgZmlsdGVyLWNsZWFyPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0XHRcdFx0PC90aD5cclxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHQ8IS0tICNyZWdpb24gRGV0YWlscyBjb2x1bW4gLS0+XHJcblx0XHQ8bmctY29udGFpbmVyIGNka0NvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcblx0XHRcdDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4XCIgW2F0dHIuY29sc3Bhbl09XCIoZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luYyk/Lmxlbmd0aFwiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJyb3ctZGV0YWlsXCIgW0BkZXRhaWxFeHBhbmRdPVwicm93ID09IGV4cGFuZGVkUm93ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCIgI2RldGFpbHNUZW1wbGF0ZT5cclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZVJlZiAmJiByb3cgPT09IGV4cGFuZGVkUm93XCI+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZjsgY29udGV4dDp7cm93OiByb3csIGluZGV4OiBpbmRleCwgY29udGV4dDogY29udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L3RkPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0PCEtLSAjcmVnaW9uIEZpbHRlciBoZWFkZXIgLS0+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyYWJsZVwiPlxyXG5cdFx0XHQ8dHIgbWF0LWhlYWRlci1yb3cgKmNka0hlYWRlclJvd0RlZj1cImRpc3BsYXllZEZpbHRlckNvbHVtbnMkIHwgYXN5bmNcIj48L3RyPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0PHRyIG1hdC1oZWFkZXItcm93ICpjZGtIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zJCB8IGFzeW5jOyBzdGlja3k6IHN0aWNreUZpbHRlclwiPjwvdHI+XHJcblx0XHQ8dHIgbWF0LXJvdyAqY2RrUm93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucyQgfCBhc3luYzsgbGV0IGluZGV4ID0gZGF0YUluZGV4XCIgW25nQ2xhc3NdPVwicm93TmdDbGFzcz9yb3dOZ0NsYXNzKHJvdywgY29udGV4dCk6bnVsbFwiIFtjbGFzcy5leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3cgPT09IHJvd1wiIChjbGljayk9XCJoYW5kbGVSb3dDbGljayhpbmRleCwgcm93KVwiIChjb250ZXh0bWVudSk9XCJoYW5kbGVSb3dSaWdodENsaWNrKCRldmVudCwgcm93KVwiPjwvdHI+XHJcblxyXG5cdFx0PCEtLSAjcmVnaW9uIERldHJhaWxzIHJvdyAtLT5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxzVGVtcGxhdGUgfHwgdGVtcGxhdGVSZWZcIj5cclxuXHRcdFx0PHRyIG1hdC1yb3cgKmNka1Jvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiZGV0YWlsLXJvd1wiIFtuZ0NsYXNzXT1cInJvd05nQ2xhc3M/cm93TmdDbGFzcyhyb3csIGNvbnRleHQpOm51bGxcIj48L3RyPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblx0PC90YWJsZT5cclxuPC9kaXY+XHJcbjwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbjwhLS0gI3JlZ2lvbiBSb3cgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBkYXRhLi0tPlxyXG48ZGl2IGNsYXNzPVwibWF0LWNlbGwgcGFkIHRhYmxlLWVtcHR5IHR4dC1pdGFsaWNcIiAqbmdJZj1cIiFkYXRhU291cmNlPy5maWx0ZXJlZERhdGE/Lmxlbmd0aCAmJiAhZGF0YVNvdXJjZT8udG90YWxcIiBpMThuPVwiQEBub1Jlc3VsdHNGb3VuZFwiPk5vIHJlc3VsdHMgd2VyZSBmb3VuZC48L2Rpdj5cclxuPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuPCEtLSAjcmVnaW9uIERlYnVnIHZhbHVlIC0tPlxyXG48Y29kZSAqbmdJZj1cImRlYnVnVmFsdWVcIj5cclxuXHQ8cHJlPnt7Zm9ybVZhbHVlIHwganNvbn19PC9wcmU+XHJcbjwvY29kZT5cclxuPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuPGRpdiBjbGFzcz1cInRhYmxlLWZvb3RlclwiIGxheW91dD1cInJvd1wiPlxyXG5cdDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJsZS1mb290ZXJdXCI+PC9uZy1jb250ZW50PlxyXG5cdDxzcGFuIGZsZXg+PC9zcGFuPlxyXG5cdDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hYmxlXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBzaG93Rmlyc3RMYXN0QnV0dG9ucz1cInRydWVcIj48L21hdC1wYWdpbmF0b3I+XHJcbjwvZGl2PiJdfQ==
|
package/fesm2022/messaia-cdk.mjs
CHANGED
|
@@ -15455,27 +15455,33 @@ class VdDynamicTableComponent {
|
|
|
15455
15455
|
rowMenuItems = [];
|
|
15456
15456
|
/**
|
|
15457
15457
|
* Input for a single row action to be applied when interacting with a row.
|
|
15458
|
+
* @property {ActionItem} rowAction
|
|
15458
15459
|
*/
|
|
15459
15460
|
rowAction;
|
|
15460
15461
|
/**
|
|
15461
15462
|
* Input for specifying which columns should be excluded from display in the table.
|
|
15463
|
+
* @property {string[]} excludedColumns
|
|
15462
15464
|
*/
|
|
15463
15465
|
excludedColumns = [];
|
|
15464
15466
|
/**
|
|
15465
15467
|
* QueryList to reference all MatMenuTriggers associated with row context menus.
|
|
15466
15468
|
* Used for handling the context menu interactions on table rows.
|
|
15469
|
+
* @property {QueryList<MatMenuTrigger>} rowContextMenuTriggers
|
|
15467
15470
|
*/
|
|
15468
15471
|
rowContextMenuTriggers;
|
|
15469
15472
|
/**
|
|
15470
15473
|
* Column type enum reference, mapping table columns to their types for rendering.
|
|
15474
|
+
* @property {typeof TableColumnType} ColumnType
|
|
15471
15475
|
*/
|
|
15472
15476
|
ColumnType = TableColumnType;
|
|
15473
15477
|
/**
|
|
15474
15478
|
* Grid enum reference, representing the type of grid used in the table.
|
|
15479
|
+
* @property {typeof Grid} Grid
|
|
15475
15480
|
*/
|
|
15476
15481
|
Grid = Grid;
|
|
15477
15482
|
/**
|
|
15478
15483
|
* Reference to the currently expanded row, used for handling row expansion logic.
|
|
15484
|
+
* @property {any} expandedRow
|
|
15479
15485
|
*/
|
|
15480
15486
|
expandedRow;
|
|
15481
15487
|
/**
|
|
@@ -16512,51 +16518,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
16512
16518
|
}], ctorParameters: () => [{ type: i1$5.MatDialogRef }] });
|
|
16513
16519
|
|
|
16514
16520
|
class VdConfirmDialogComponent {
|
|
16515
|
-
|
|
16521
|
+
dialogRef;
|
|
16522
|
+
/**
|
|
16523
|
+
* @property title
|
|
16524
|
+
* @description The title to be displayed at the top of the dialog.
|
|
16525
|
+
* @type {string | undefined}
|
|
16526
|
+
*/
|
|
16516
16527
|
title;
|
|
16528
|
+
/**
|
|
16529
|
+
* @property message
|
|
16530
|
+
* @description The message to be displayed in the dialog body.
|
|
16531
|
+
* @type {string | undefined}
|
|
16532
|
+
*/
|
|
16517
16533
|
message;
|
|
16534
|
+
/**
|
|
16535
|
+
* @property cancelButton
|
|
16536
|
+
* @description The text for the cancel button. Default is 'Cancel'.
|
|
16537
|
+
* @type {string}
|
|
16538
|
+
*/
|
|
16518
16539
|
cancelButton = $localize `:@@cancel:Cancel`;
|
|
16540
|
+
/**
|
|
16541
|
+
* @property acceptButton
|
|
16542
|
+
* @description The text for the accept button. Default is 'Accept'.
|
|
16543
|
+
* @type {string}
|
|
16544
|
+
*/
|
|
16519
16545
|
acceptButton = $localize `:@@accept:Accept`;
|
|
16520
16546
|
/**
|
|
16521
|
-
* Constructor
|
|
16522
|
-
* @param
|
|
16547
|
+
* Constructor Initializes the dialog reference to control dialog behavior.
|
|
16548
|
+
* @param dialogRef The dialog reference to control dialog behavior.
|
|
16523
16549
|
*/
|
|
16524
|
-
constructor(
|
|
16525
|
-
this.
|
|
16550
|
+
constructor(dialogRef) {
|
|
16551
|
+
this.dialogRef = dialogRef;
|
|
16526
16552
|
}
|
|
16527
16553
|
/**
|
|
16528
|
-
*
|
|
16554
|
+
* Cancels the dialog and returns 'false' to indicate cancellation.
|
|
16529
16555
|
*/
|
|
16530
16556
|
cancel() {
|
|
16531
|
-
this.
|
|
16557
|
+
this.dialogRef.close(false);
|
|
16532
16558
|
}
|
|
16533
16559
|
/**
|
|
16534
|
-
*
|
|
16560
|
+
* Accepts the dialog and returns 'true' to indicate acceptance.
|
|
16535
16561
|
*/
|
|
16536
16562
|
accept() {
|
|
16537
|
-
this.
|
|
16563
|
+
this.dialogRef.close(true);
|
|
16538
16564
|
}
|
|
16539
16565
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdConfirmDialogComponent, deps: [{ token: i1$5.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
16540
|
-
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VdConfirmDialogComponent, selector: "vd-confirm-dialog", ngImport: i0, template:
|
|
16541
|
-
<h1 mat-dialog-title *ngIf="title">{{title}}</h1>
|
|
16542
|
-
<mat-dialog-content class="md-subhead" [innerHtml]="message"></mat-dialog-content>
|
|
16543
|
-
<mat-dialog-actions align="end">
|
|
16544
|
-
<button mat-button #closeBtn (keydown.arrowright)="acceptBtn.focus()" (click)="cancel()">{{cancelButton}}</button>
|
|
16545
|
-
<button mat-button color="accent" #acceptBtn (keydown.arrowleft)="closeBtn.focus()" (click)="accept()">{{acceptButton}}</button>
|
|
16546
|
-
</mat-dialog-actions>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
|
|
16566
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VdConfirmDialogComponent, selector: "vd-confirm-dialog", ngImport: i0, template: "<h2 mat-dialog-title *ngIf=\"title\" class=\"push-top-sm\" layout=\"row\" layout-align=\"start center\" flex>\r\n <mat-icon fontSet=\"material-symbols-outlined\" class=\"push-right-sm tc-blue-400\">help</mat-icon>\r\n <span>{{title}}</span>\r\n</h2>\r\n<mat-dialog-content class=\"md-subhead\" [innerHtml]=\"message\"></mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n <button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" (click)=\"accept()\">{{acceptButton}}</button>\r\n</mat-dialog-actions>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$5.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$5.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
16547
16567
|
}
|
|
16548
16568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdConfirmDialogComponent, decorators: [{
|
|
16549
16569
|
type: Component,
|
|
16550
|
-
args: [{
|
|
16551
|
-
selector: 'vd-confirm-dialog',
|
|
16552
|
-
template: `
|
|
16553
|
-
<h1 mat-dialog-title *ngIf="title">{{title}}</h1>
|
|
16554
|
-
<mat-dialog-content class="md-subhead" [innerHtml]="message"></mat-dialog-content>
|
|
16555
|
-
<mat-dialog-actions align="end">
|
|
16556
|
-
<button mat-button #closeBtn (keydown.arrowright)="acceptBtn.focus()" (click)="cancel()">{{cancelButton}}</button>
|
|
16557
|
-
<button mat-button color="accent" #acceptBtn (keydown.arrowleft)="closeBtn.focus()" (click)="accept()">{{acceptButton}}</button>
|
|
16558
|
-
</mat-dialog-actions>`
|
|
16559
|
-
}]
|
|
16570
|
+
args: [{ selector: 'vd-confirm-dialog', template: "<h2 mat-dialog-title *ngIf=\"title\" class=\"push-top-sm\" layout=\"row\" layout-align=\"start center\" flex>\r\n <mat-icon fontSet=\"material-symbols-outlined\" class=\"push-right-sm tc-blue-400\">help</mat-icon>\r\n <span>{{title}}</span>\r\n</h2>\r\n<mat-dialog-content class=\"md-subhead\" [innerHtml]=\"message\"></mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n <button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" (click)=\"accept()\">{{acceptButton}}</button>\r\n</mat-dialog-actions>" }]
|
|
16560
16571
|
}], ctorParameters: () => [{ type: i1$5.MatDialogRef }] });
|
|
16561
16572
|
|
|
16562
16573
|
class VdDialogTitleDirective {
|
|
@@ -25206,7 +25217,8 @@ class VdDialogsModule {
|
|
|
25206
25217
|
CommonModule,
|
|
25207
25218
|
MatDialogModule,
|
|
25208
25219
|
MatInputModule,
|
|
25209
|
-
MatButtonModule
|
|
25220
|
+
MatButtonModule,
|
|
25221
|
+
MatIconModule], exports: [VdAlertDialogComponent,
|
|
25210
25222
|
VdConfirmDialogComponent,
|
|
25211
25223
|
VdPromptDialogComponent,
|
|
25212
25224
|
VdDialogComponent,
|
|
@@ -25219,7 +25231,8 @@ class VdDialogsModule {
|
|
|
25219
25231
|
CommonModule,
|
|
25220
25232
|
MatDialogModule,
|
|
25221
25233
|
MatInputModule,
|
|
25222
|
-
MatButtonModule
|
|
25234
|
+
MatButtonModule,
|
|
25235
|
+
MatIconModule] });
|
|
25223
25236
|
}
|
|
25224
25237
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdDialogsModule, decorators: [{
|
|
25225
25238
|
type: NgModule,
|
|
@@ -25229,14 +25242,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
25229
25242
|
CommonModule,
|
|
25230
25243
|
MatDialogModule,
|
|
25231
25244
|
MatInputModule,
|
|
25232
|
-
MatButtonModule
|
|
25233
|
-
|
|
25234
|
-
declarations: [
|
|
25235
|
-
VD_DIALOGS,
|
|
25236
|
-
],
|
|
25237
|
-
exports: [
|
|
25238
|
-
VD_DIALOGS,
|
|
25245
|
+
MatButtonModule,
|
|
25246
|
+
MatIconModule
|
|
25239
25247
|
],
|
|
25248
|
+
declarations: [VD_DIALOGS],
|
|
25249
|
+
exports: [VD_DIALOGS],
|
|
25240
25250
|
providers: [
|
|
25241
25251
|
DIALOG_PROVIDER
|
|
25242
25252
|
]
|