igniteui-angular 18.2.4 → 18.2.6
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/calendar/common/calendar-view.directive.mjs +3 -2
- package/esm2022/lib/calendar/common/model.mjs +3 -2
- package/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/core/utils.mjs +23 -11
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +20 -22
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +5 -3
- package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +5 -2
- package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +1 -1
- package/esm2022/lib/grids/grid-base.directive.mjs +7 -2
- package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +6 -8
- package/esm2022/lib/services/animation/angular-animation-player.mjs +4 -2
- package/esm2022/lib/tabs/tabs/tab-header.component.mjs +7 -5
- package/esm2022/lib/tabs/tabs/tabs.component.mjs +14 -10
- package/fesm2022/igniteui-angular.mjs +86 -61
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/styles/components/tree/_tree-theme.scss +7 -1
- package/lib/core/styles/themes/generators/_base.scss +3 -2
- package/lib/core/styles/themes/generators/_bootstrap.scss +9 -6
- package/lib/core/styles/themes/generators/_fluent.scss +9 -6
- package/lib/core/styles/themes/generators/_indigo.scss +9 -6
- package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -0
- package/lib/grids/grid-base.directive.d.ts +1 -0
- package/lib/grids/pivot-grid/pivot-grid.component.d.ts +0 -1
- package/lib/tabs/tabs/tabs.component.d.ts +3 -1
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -756,7 +756,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective {
|
|
|
756
756
|
}
|
|
757
757
|
/** @hidden */
|
|
758
758
|
featureColumnsWidth() {
|
|
759
|
-
return this.pivotRowWidths;
|
|
759
|
+
return this.pivotRowWidths || 0;
|
|
760
760
|
}
|
|
761
761
|
/* blazorSuppress */
|
|
762
762
|
/**
|
|
@@ -876,7 +876,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective {
|
|
|
876
876
|
}
|
|
877
877
|
/** @hidden @internal */
|
|
878
878
|
get pivotPinnedWidth() {
|
|
879
|
-
return this.isPinningToStart ? this.pinnedWidth : this.headerFeaturesWidth;
|
|
879
|
+
return !this._init ? (this.isPinningToStart ? this.pinnedWidth : this.headerFeaturesWidth) : 0;
|
|
880
880
|
}
|
|
881
881
|
/** @hidden @internal */
|
|
882
882
|
get pivotUnpinnedWidth() {
|
|
@@ -912,11 +912,6 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective {
|
|
|
912
912
|
this.toggleRowGroup(col, newState);
|
|
913
913
|
this.reflow();
|
|
914
914
|
}
|
|
915
|
-
getColumnWidthSum() {
|
|
916
|
-
let colSum = super.getColumnWidthSum();
|
|
917
|
-
colSum += this.rowDimensions.map(dim => this.rowDimensionWidthToPixels(dim)).reduce((prev, cur) => prev + cur, 0);
|
|
918
|
-
return colSum;
|
|
919
|
-
}
|
|
920
915
|
/**
|
|
921
916
|
* @hidden @internal
|
|
922
917
|
*/
|
|
@@ -1745,6 +1740,9 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective {
|
|
|
1745
1740
|
dim.autoWidth = maxSize;
|
|
1746
1741
|
}
|
|
1747
1742
|
}
|
|
1743
|
+
if (this.isColumnWidthSum) {
|
|
1744
|
+
this.calcWidth = this.getColumnWidthSum();
|
|
1745
|
+
}
|
|
1748
1746
|
}
|
|
1749
1747
|
/** @hidden @internal */
|
|
1750
1748
|
get hasDimensionsToAutosize() {
|
|
@@ -2235,4 +2233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
2235
2233
|
}], emptyPivotGridTemplate: [{
|
|
2236
2234
|
type: Input
|
|
2237
2235
|
}] } });
|
|
2238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxFQUdULE1BQU0sRUFDTixRQUFRLEVBRVIsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBR1osWUFBWSxFQUNaLGVBQWUsRUFFZixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBR25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0csT0FBTyxFQUF3QixhQUFhLEVBQXFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEgs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QkFEMUIsS0FBSztnQkErQ2MsZ0JBQWdCO3NCQURuQyxLQUFLO2dCQWdDYyxXQUFXO3NCQUQ5QixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVlsQixPQUFPO3NCQUQxQixLQUFLO2dCQVdjLGVBQWU7c0JBRGxDLEtBQUs7Z0JBWWMsc0JBQXNCO3NCQUR6QyxLQUFLO2dCQVljLHFCQUFxQjtzQkFEeEMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkEwQmxCLFlBQVk7c0JBRC9CLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBbU4zQixFQUFFO3NCQUZaLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBa0JLLElBQUk7c0JBRGQsS0FBSztnQkFzTWMsWUFBWTtzQkFEL0IsS0FBSztnQkF5aUNDLDZCQUE2QjtzQkFEbkMsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFZakUsc0JBQXNCO3NCQUQ1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTE9DQUxFX0lELFxuICAgIE5nWm9uZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IGZpcnN0LCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZTeW5jU2VydmljZSwgSWd4Rm9yT2ZTY3JvbGxTeW5jU2VydmljZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UsIElneENvbHVtblRlbXBsYXRlQ29udGV4dCwgUm93VHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX1BJVk9UX0tFWVMsIElEaW1lbnNpb25zQ2hhbmdlLCBJZ3hQaXZvdEdyaWRWYWx1ZVRlbXBsYXRlQ29udGV4dCwgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWRFdmVudEFyZ3MsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIElWYWx1ZXNDaGFuZ2UsIFBpdm90RGltZW5zaW9uVHlwZSwgSVBpdm90VUlTZXR0aW5ncywgUGl2b3RSb3dMYXlvdXRUeXBlLCBQaXZvdFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgRmlsdGVyTW9kZSwgR3JpZFBhZ2luZ01vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uLCBTaXplIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFdhdGNoQ2hhbmdlcyB9IGZyb20gJy4uL3dhdGNoLWNoYW5nZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElHcmlkRWRpdEV2ZW50QXJncyxcbiAgICBJQ2VsbFBvc2l0aW9uLFxuICAgIElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3MsIElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3MsIElDb2x1bW5Nb3ZpbmdTdGFydEV2ZW50QXJncyxcbiAgICBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWRFdmVudEFyZ3MsXG4gICAgSUdyaWRFZGl0RG9uZUV2ZW50QXJncyxcbiAgICBJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3MsXG4gICAgSVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzLFxuICAgIElQaW5Db2x1bW5FdmVudEFyZ3MsXG4gICAgSVBpblJvd0V2ZW50QXJncyxcbiAgICBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgSVJvd0RhdGFFdmVudEFyZ3MsXG4gICAgSVJvd0RyYWdFbmRFdmVudEFyZ3MsXG4gICAgSVJvd0RyYWdTdGFydEV2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wUG9zaXRpb24gfSBmcm9tICcuLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3ksIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9waXZvdC1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1ncmlkLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Bpdm90LWdyaWQvcGl2b3QtcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LCBJZ3hPdmVybGF5U2VydmljZSwgU3RhdGUsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IGNsb25lQXJyYXksIFBsYXRmb3JtVXRpbCwgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4UGl2b3RGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJZ3hHcmlkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvck9mRGF0YUNoYW5naW5nRXZlbnRBcmdzLCBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzaXppbmcvcGl2b3QtZ3JpZC9waXZvdC1yZXNpemVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24sIFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBQaXZvdFNvcnRVdGlsIH0gZnJvbSAnLi9waXZvdC1zb3J0LXV0aWwnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBJZ3hQaXZvdFZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9waXZvdC1ncmlkLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElneEdyaWRWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQvZ3JpZC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dQaXBlLCBJZ3hQaXZvdFJvd0V4cGFuc2lvblBpcGUsIElneFBpdm90QXV0b1RyYW5zZm9ybSwgSWd4UGl2b3RDb2x1bW5QaXBlLCBJZ3hQaXZvdEdyaWRGaWx0ZXJQaXBlLCBJZ3hQaXZvdEdyaWRTb3J0aW5nUGlwZSwgSWd4UGl2b3RHcmlkQ29sdW1uU29ydGluZ1BpcGUsIElneFBpdm90Q2VsbE1lcmdpbmdQaXBlLCBJZ3hQaXZvdEdyaWRIb3Jpem9udGFsUm93R3JvdXBpbmcgfSBmcm9tICcuL3Bpdm90LWdyaWQucGlwZXMnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NsYXNzZXNQaXBlLCBJZ3hHcmlkUm93U3R5bGVzUGlwZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUb2dnbGVEaXJlY3RpdmUsIElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93Q29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS1vdXRsZXQvdGVtcGxhdGVfb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRHJhZ1NlbGVjdERpcmVjdGl2ZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9kcmFnLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4R3JpZEJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERlZmF1bHREYXRhQ2xvbmVTdHJhdGVneSwgSURhdGFDbG9uZVN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtY2xvbmUtc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4VGV4dEhpZ2hsaWdodFNlcnZpY2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RleHQtaGlnaGxpZ2h0L3RleHQtaGlnaGxpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dIZWFkZXJHcm91cENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LWhlYWRlci1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UGl2b3REYXRlRGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkLWRpbWVuc2lvbnMnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dEaW1lbnNpb25NcmxSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LXJvdy1kaW1lbnNpb24tbXJsLXJvdy5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5jb25zdCBNSU5JTVVNX0NPTFVNTl9XSURUSCA9IDIwMDtcbmNvbnN0IE1JTklNVU1fQ09MVU1OX1dJRFRIX1NVUEVSX0NPTVBBQ1QgPSAxMDQ7XG5cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBDb2x1bW4gKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBDb2x1bW5Hcm91cCAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IENvbHVtbkxheW91dCAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRUb29sYmFyICovXG4vKiBibGF6b3JBZGRpdGlvbmFsRGVwZW5kZW5jeTogR3JpZFRvb2xiYXJBY3Rpb25zICovXG4vKiBibGF6b3JBZGRpdGlvbmFsRGVwZW5kZW5jeTogR3JpZFRvb2xiYXJUaXRsZSAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRUb29sYmFyQWR2YW5jZWRGaWx0ZXJpbmcgKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBHcmlkVG9vbGJhckV4cG9ydGVyICovXG4vKiBibGF6b3JBZGRpdGlvbmFsRGVwZW5kZW5jeTogR3JpZFRvb2xiYXJIaWRpbmcgKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBHcmlkVG9vbGJhclBpbm5pbmcgKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBBY3Rpb25TdHJpcCAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRBY3Rpb25zQmFzZURpcmVjdGl2ZSAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRFZGl0aW5nQWN0aW9ucyAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRQaW5uaW5nQWN0aW9ucyAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IFBpdm90RGF0ZURpbWVuc2lvbiAqL1xuLyogYmxhem9ySW5kaXJlY3RSZW5kZXIgKi9cbi8qKlxuICogUGl2b3QgR3JpZCBwcm92aWRlcyBhIHdheSB0byBwcmVzZW50IGFuZCBtYW5pcHVsYXRlIGRhdGEgaW4gYSBwaXZvdCB0YWJsZSB2aWV3LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UGl2b3RHcmlkTW9kdWxlXG4gKiBAaWd4R3JvdXAgR3JpZHMgJiBMaXN0c1xuICogQGlneEtleXdvcmRzIHBpdm90LCBncmlkLCB0YWJsZVxuICogQGlneFRoZW1lIGlneC1ncmlkLXRoZW1lXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBQaXZvdCBHcmlkIGlzIHVzZWQgZm9yIGdyb3VwaW5nIGFuZCBhZ2dyZWdhdGluZyBzaW1wbGUgZmxhdCBkYXRhIGludG8gYSBwaXZvdCB0YWJsZS4gIE9uY2UgZGF0YVxuICogaGFzIGJlZW4gYm91bmQgYW5kIHRoZSBkaW1lbnNpb25zIGFuZCB2YWx1ZXMgY29uZmlndXJlZCBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgdmlhIHNvcnRpbmcgYW5kIGZpbHRlcmluZy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtwaXZvdENvbmZpZ3VyYXRpb25dPVwiY29uZmlndXJhdGlvblwiPlxuICogPC9pZ3gtcGl2b3QtZ3JpZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1waXZvdC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBHcmlkQmFzZUFQSVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0dSSURfQkFTRSwgdXNlRXhpc3Rpbmc6IElneFBpdm90R3JpZENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IElneEZpbHRlcmluZ1NlcnZpY2UsIHVzZUNsYXNzOiBJZ3hQaXZvdEZpbHRlcmluZ1NlcnZpY2UgfSxcbiAgICAgICAgSWd4UGl2b3RHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIElneFBpdm90Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlN5bmNTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkQm9keURpcmVjdGl2ZSxcbiAgICAgICAgSWd4R3JpZERyYWdTZWxlY3REaXJlY3RpdmUsXG4gICAgICAgIElneENvbHVtbk1vdmluZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIElneEdyaWRGb3JPZkRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUsXG4gICAgICAgIElneFBpdm90Um93Q29tcG9uZW50LFxuICAgICAgICBJZ3hUb2dnbGVEaXJlY3RpdmUsXG4gICAgICAgIElneENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgICAgIElneFNuYWNrYmFyQ29tcG9uZW50LFxuICAgICAgICBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LFxuICAgICAgICBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkUm93Q2xhc3Nlc1BpcGUsXG4gICAgICAgIElneEdyaWRSb3dTdHlsZXNQaXBlLFxuICAgICAgICBJZ3hQaXZvdFJvd1BpcGUsXG4gICAgICAgIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSxcbiAgICAgICAgSWd4UGl2b3RBdXRvVHJhbnNmb3JtLFxuICAgICAgICBJZ3hQaXZvdENvbHVtblBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZEZpbHRlclBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZFNvcnRpbmdQaXBlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSxcbiAgICAgICAgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGUsXG4gICAgICAgIElneFBpdm90R3JpZEhvcml6b250YWxSb3dHcm91cGluZyxcbiAgICAgICAgSWd4UGl2b3RSb3dEaW1lbnNpb25NcmxSb3dDb21wb25lbnRcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQgZXh0ZW5kcyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBHcmlkVHlwZSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZGltZW5zaW9uIGNvbGxlY3Rpb24gaXMgY2hhbmdlZCB2aWEgdGhlIGdyaWQgY2hpcCBhcmVhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIHRoZSBuZXcgZGltZW5zaW9uIGNvbGxlY3Rpb24gYW5kIGl0cyB0eXBlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAoZGltZW5zaW9uc0NoYW5nZSk9XCJkaW1lbnNpb25zQ2hhbmdlKCRldmVudClcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkaW1lbnNpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJRGltZW5zaW9uc0NoYW5nZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbnkgb2YgdGhlIHBpdm90Q29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAocGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZCk9XCJjb25maWd1cmF0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJUGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZEV2ZW50QXJncz4oKTtcblxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBkaW1lbnNpb24gaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgZGltZW5zaW9uIHRoYXQgaXMgYWJvdXQgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChkaW1lbnNpb25Jbml0KT1cImRpbWVuc2lvbkluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRpbWVuc2lvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaXZvdERpbWVuc2lvbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgdmFsdWUgdGhhdCBpcyBhYm91dCB0byBiZSBpbml0aWFsaXplZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKHZhbHVlSW5pdCk9XCJ2YWx1ZUluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpdm90VmFsdWU+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhIGRpbWVuc2lvbiBpcyBzb3J0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UpPVwiZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZhbHVlcyBjb2xsZWN0aW9uIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyB0aGUgbmV3IGRpbWVuc2lvblxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAodmFsdWVzQ2hhbmdlKT1cInZhbHVlc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElWYWx1ZXNDaGFuZ2U+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNvcnRpbmcgZXhwcmVzc2lvbnMgZ2VuZXJhdGVkIGZvciB0aGUgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cHJlc3Npb25zID0gdGhpcy5ncmlkLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zKCkge1xuICAgICAgICBjb25zdCBhbGxFbmFibGVkRGltZW5zaW9ucyA9IHRoaXMucm93RGltZW5zaW9ucy5jb25jYXQodGhpcy5jb2x1bW5EaW1lbnNpb25zKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucyA9IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoYWxsRW5hYmxlZERpbWVuc2lvbnMpO1xuICAgICAgICByZXR1cm4gZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSB0aGVhZFJvdzogSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCB2YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneFBpdm90Um93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uSGVhZGVyRGlyZWN0aXZlOiBJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgdmFsdWUgY2hpcHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3ZhbHVlQ2hpcFRlbXBsYXRlXT1cIm15VGVtcGxhdGVcIj48aWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneFBpdm90R3JpZFZhbHVlVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hDb2x1bW5UZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgLyogbXVzdFNldEluQ29kZVBsYXRmb3JtczogV2ViQ29tcG9uZW50cztCbGF6b3I7UmVhY3QgKi9cbiAgICAvKiBAdHNUd29XYXlQcm9wZXJ0eSAodHJ1ZSwgXCJQaXZvdENvbmZpZ3VyYXRpb25DaGFuZ2VcIiwgXCJEZXRhaWwuUGl2b3RDb25maWd1cmF0aW9uXCIsIGZhbHNlKSAqL1xuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcGl2b3QgY29uZmlndXJhdGlvbiB3aXRoIGFsbCByZWxhdGVkIGRpbWVuc2lvbnMgYW5kIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbcGl2b3RDb25maWd1cmF0aW9uXT1cImNvbmZpZ1wiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHBpdm90Q29uZmlndXJhdGlvbih2YWx1ZTogSVBpdm90Q29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lbWl0SW5pdEV2ZW50cyh0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IFBpdm90VXRpbC5idWlsZEV4cHJlc3Npb25UcmVlKHZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiBtdXN0U2V0SW5Db2RlUGxhdGZvcm1zOiBXZWJDb21wb25lbnRzO0JsYXpvciAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RDb25maWd1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RDb25maWd1cmF0aW9uIHx8IHsgcm93czogbnVsbCwgY29sdW1uczogbnVsbCwgdmFsdWVzOiBudWxsLCBmaWx0ZXJzOiBudWxsIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHdoZXRoZXIgdG8gYXV0by1nZW5lcmF0ZSB0aGUgcGl2b3QgY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuIFdoZW4gc2V0IHRvIHRydWUsIGl0IHdpbGwgb3ZlcnJpZGUgYWxsIGRpbWVuc2lvbnMgYW5kIHZhbHVlcyBpbiB0aGUgcGl2b3RDb25maWd1cmF0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZUNvbmZpZ109XCJ0cnVlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgYXV0b0dlbmVyYXRlQ29uZmlnID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcGl2b3QgdWkgc2V0dGluZ3MgZm9yIHRoZSBwaXZvdCBncmlkIC0gY2hpcHMgYW5kIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyBjb250YWluZXJzIGZvciByb3csIGZpbHRlciwgY29sdW1uIGRpbWVuc2lvbnMgYW5kIHZhbHVlc1xuICAgICAqIGFzIHdlbGwgYXMgaGVhZGVycyBmb3IgdGhlIHJvdyBkaW1lbnNpb25zIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3Bpdm90VUldPVwieyBzaG93Um93SGVhZGVyczogdHJ1ZSB9XCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHBpdm90VUkodmFsdWU6IElQaXZvdFVJU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcGl2b3RVSSA9IE9iamVjdC5hc3NpZ24odGhpcy5fcGl2b3RVSSwgdmFsdWUgfHwge30pO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBpdm90VUkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXZvdFVJO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWQnO1xuXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGEgc3VwZXIgY29tcGFjdCB0aGVtZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE92ZXJyaWRlcyB0aGUgZ3JpZCBzaXplIG9wdGlvbiBpZiBvbmUgaXMgc2V0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbc3VwZXJDb21wYWN0TW9kZV09XCJ0cnVlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX19waXZvdC0tc3VwZXItY29tcGFjdCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHN1cGVyQ29tcGFjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdXBlckNvbXBhY3RNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc3VwZXJDb21wYWN0TW9kZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9zdXBlckNvbXBhY3RNb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBncmlkU2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwZXJDb21wYWN0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIFNpemUuU21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdyaWRTaXplO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZXMgY2xvbmUgc3RyYXRlZ3kgb2YgdGhlIHBpdm90IGdyaWQgd2hlbiBhc3NpZ25pbmcgdGhlbSB0byBkaWZmZXJlbnQgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW3Bpdm90VmFsdWVDbG9uZVN0cmF0ZWd5XT1cImN1c3RvbUNsb25lU3RyYXRlZ3lcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5KCk6IElEYXRhQ2xvbmVTdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5KHN0cmF0ZWd5OiBJRGF0YUNsb25lU3RyYXRlZ3kpIHtcbiAgICAgICAgaWYgKHN0cmF0ZWd5KSB7XG4gICAgICAgICAgICB0aGlzLl9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdyZWNvcmRfdGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgcmVjb3JkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlclRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdyb3dEaW1lbnNpb25Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgcm93RGltZW5zaW9uQ29udGFpbmVyOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBvdmVycmlkZSByZXNpemVMaW5lOiBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LCB7IHJlYWQ6IElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50IH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnRzOiBRdWVyeUxpc3Q8SWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudClcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uQ29udGVudENvbGxlY3Rpb246IFF1ZXJ5TGlzdDxJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IG1pbkNvbHVtbldpZHRoKCkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEhfU1VQRVJfQ09NUEFDVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbigndmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55LCBhbnlbXT4+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFBpdm90Um93RGltZW5zaW9uTXJsUm93Q29tcG9uZW50KVxuICAgIHB1YmxpYyByb3dEaW1lbnNpb25NcmxSb3dzQ29sbGVjdGlvbjogUXVlcnlMaXN0PElneFBpdm90Um93RGltZW5zaW9uTXJsUm93Q29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93RW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGF1dG9HZW5lcmF0ZUV4Y2x1ZGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNuYWNrYmFyRGlzcGxheVRpbWUgPSA2MDAwO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RXhpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nU3RhcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5QaW4gPSBuZXcgRXZlbnRFbWl0dGVyPElQaW5Db2x1bW5DYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtblBpbm5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpbkNvbHVtbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhQ2FuY2VsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RyYWdTdGFydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEcmFnRW5kRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0RG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXRFeGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93UGlubmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpblJvd0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd1Bpbm5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpblJvd0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjb2x1bW5Hcm91cFN0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaW1lbnNpb25EYXRhQ29sdW1uczogYW55W107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaXZvdEtleXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5waXZvdEtleXMgfHwgREVGQVVMVF9QSVZPVF9LRVlTO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogR3JpZFR5cGVbXCJ0eXBlXCJdIHtcbiAgICAgICAgcmV0dXJuICdwaXZvdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZHJhZ1Jvd0lEID0gbnVsbDtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm9vdFN1bW1hcmllc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dEaW1lbnNpb25SZXNpemluZyA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9lbXB0eVJvd0RpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0geyBtZW1iZXJOYW1lOiAnJywgZW5hYmxlZDogdHJ1ZSwgbGV2ZWw6IDAgfTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZW1wdHlSb3dEaW1lbnNpb24oKTogSVBpdm90RGltZW5zaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtcHR5Um93RGltZW5zaW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneSA9IG5ldyBEZWZhdWx0RGF0YUNsb25lU3RyYXRlZ3koKTtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZmlsdGVyU3RyYXRlZ3k6IElGaWx0ZXJpbmdTdHJhdGVneSA9IG5ldyBEaW1lbnNpb25WYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSgpO1xuICAgIHByb3RlY3RlZCByZWdyb3VwVHJpZ2dlciA9IDA7XG4gICAgcHJpdmF0ZSBfZGF0YTtcbiAgICBwcml2YXRlIF9waXZvdENvbmZpZ3VyYXRpb246IElQaXZvdENvbmZpZ3VyYXRpb24gPSB7IHJvd3M6IG51bGwsIGNvbHVtbnM6IG51bGwsIHZhbHVlczogbnVsbCwgZmlsdGVyczogbnVsbCB9O1xuICAgIHByaXZhdGUgcF9pZCA9IGBpZ3gtcGl2b3QtZ3JpZC0ke05FWFRfSUQrK31gO1xuICAgIHByaXZhdGUgX3N1cGVyQ29tcGFjdE1vZGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9waXZvdFVJOiBJUGl2b3RVSVNldHRpbmdzID0ge1xuICAgICAgICBzaG93Q29uZmlndXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgc2hvd1Jvd0hlYWRlcnM6IGZhbHNlLFxuICAgICAgICByb3dMYXlvdXQ6IFBpdm90Um93TGF5b3V0VHlwZS5WZXJ0aWNhbCxcbiAgICAgICAgaG9yaXpvbnRhbFN1bW1hcmllc1Bvc2l0aW9uOiBQaXZvdFN1bW1hcnlQb3NpdGlvbi5Cb3R0b21cbiAgICB9O1xuICAgIHByaXZhdGUgX3NvcnRhYmxlQ29sdW1ucyA9IHRydWU7XG4gICAgcHJpdmF0ZSBfdmlzaWJsZVJvd0RpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdID0gW107XG4gICAgcHJpdmF0ZSBfc2hvdWxkVXBkYXRlU2l6ZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICogR2V0cy9TZXRzIHRoZSBkZWZhdWx0IGV4cGFuZCBzdGF0ZSBmb3IgYWxsIHJvd3MuXG4gICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRFeHBhbmRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRFeHBhbmRTdGF0ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBhZ2luZ01vZGUoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBhZ2luZ01vZGUoX3ZhbDogR3JpZFBhZ2luZ01vZGUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBXYXRjaENoYW5nZXMoKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGlkZVJvd1NlbGVjdG9ycygpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgaGlkZVJvd1NlbGVjdG9ycyhfdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhdXRvR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvblN0cmlwKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIGFueTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTguMi4wLiBUaGlzIHByb3BlcnR5IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzaG91bGRHZW5lcmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2hvdWxkR2VuZXJhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvb2xiYXJFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkVG9vbGJhckV4cG9ydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RHJhZ2dhYmxlKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYWxsb3dBZHZhbmNlZEZpbHRlcmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYWxsb3dBZHZhbmNlZEZpbHRlcmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBmaWx0ZXJNb2RlKCkge1xuICAgICAgICByZXR1cm4gRmlsdGVyTW9kZS5xdWlja0ZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGZpbHRlck1vZGUoX3ZhbHVlOiBGaWx0ZXJNb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFsbG93RmlsdGVyaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBhbGxvd0ZpbHRlcmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGFnZShfdmFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwZXJQYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBlclBhZ2UoX3ZhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB1bnBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gc3VwZXIudW5waW5uZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWREYXRhVmlldygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBzdXBlci51bnBpbm5lZERhdGFWaWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGlubmVkV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIucGlubmVkV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVJvd0hlaWdodChfdmFsdWU6IG51bWJlcikge1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeVJvd0hlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdHJhbnNhY3Rpb25zKCk6IFRyYW5zYWN0aW9uU2VydmljZTxUcmFuc2FjdGlvbiwgU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9ucztcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUoX3ZhbDogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFdhdGNoQ2hhbmdlcygpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RWRpdGFibGUoX3ZhbDogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwaW5uaW5nKF92YWx1ZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVBvc2l0aW9uKF92YWx1ZTogR3JpZFN1bW1hcnlQb3NpdGlvbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZShfdmFsdWU6IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJhbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2hvd1N1bW1hcnlPbkNvbGxhcHNlKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzaG93U3VtbWFyeU9uQ29sbGFwc2UoX3ZhbHVlOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhpZGRlbkNvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZENvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJhdGNoRWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYmF0Y2hFZGl0aW5nKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKiBjc1N1cHByZXNzICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWxlY3RlZFJvd3MoKTogYW55W10ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93SWRzID0gW107XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy5yb3dEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlY29yZCwgY3VyckRpbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNQaXZvdFJvd1NlbGVjdGVkKGtleSkgJiYgIXNlbGVjdGVkUm93SWRzLmZpbmQoeCA9PiB4ID09PSByZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvd0lkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyRGltID0gY3VyckRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJEaW0pO1xuICAgICAgICAgICAgICAgIHByZXYucHVzaChkaW0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93SWRzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB2YWxpZGF0aW9uU2VydmljZTogSWd4R3JpZFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LFxuICAgICAgICB0cmFuc2FjdGlvbkZhY3Rvcnk6IElneEZsYXRUcmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgZW52SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIG5hdmlnYXRpb246IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICB0ZXh0SGlnaGxpZ2h0U2VydmljZTogSWd4VGV4dEhpZ2hsaWdodFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSWd4R3JpZFRyYW5zYWN0aW9uKSBfZGlUcmFuc2FjdGlvbnM/OiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPlxuICAgICkge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgZGlmZmVycyxcbiAgICAgICAgICAgIHZpZXdSZWYsXG4gICAgICAgICAgICBpbmplY3RvcixcbiAgICAgICAgICAgIGVudkluamVjdG9yLFxuICAgICAgICAgICAgbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgICAgICB0ZXh0SGlnaGxpZ2h0U2VydmljZSxcbiAgICAgICAgICAgIG92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICAgICAgc3VtbWFyeVNlcnZpY2UsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgICAgX2RpVHJhbnNhY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBwaXZvdCBncmlkIGFsd2F5cyBnZW5lcmF0ZXMgY29sdW1ucyBhdXRvbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLmF1dG9HZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIGlnbm9yZSBhbnkgdXNlciBkZWZpbmVkIGNvbHVtbnMgYW5kIGF1dG8tZ2VuZXJhdGUgYmFzZWQgb24gcGl2b3QgY29uZmlnLlxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoW10pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9HZW5lcmF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb25maWcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy52YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoaXBUZW1wbGF0ZSA9IHRoaXMudmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm93RGltZW5zaW9uSGVhZGVyRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlID0gdGhpcy5yb3dEaW1lbnNpb25IZWFkZXJEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuc3VwZXJDb21wYWN0TW9kZSAmJiAhY2hhbmdlcy5zdXBlckNvbXBhY3RNb2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkVXBkYXRlU2l6ZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmRpc3BsYXlDb250YWluZXIpLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNpemVOb3RpZnkubmV4dCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIGZvciBkaW1lbnNpb24gY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlEaW1lbnNpb25DaGFuZ2UocmVnZW5lcmF0ZUNvbHVtbnMgPSBmYWxzZSkge1xuICAgICAgICBpZiAocmVnZW5lcmF0ZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZnVsbCBsaXN0IG9mIGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiAoY29uZmlnLnJvd3MgfHwgW10pLmNvbmNhdCgoY29uZmlnLmNvbHVtbnMgfHwgW10pKS5jb25jYXQoY29uZmlnLmZpbHRlcnMgfHwgW10pLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGFsbFZpc2libGVEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIGNvbnN0IHVuaXF1ZVZpc2libGVSb3dEaW1zID0gdGhpcy52aXNpYmxlUm93RGltZW5zaW9ucy5maWx0ZXIoZGltID0+ICFjb25maWcucm93cy5maW5kKGNvbmZpZ1JvdyA9PiBjb25maWdSb3cubWVtYmVyTmFtZSA9PT0gZGltLm1lbWJlck5hbWUpKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IChjb25maWcucm93cyB8fCBbXSkuY29uY2F0KC4uLnVuaXF1ZVZpc2libGVSb3dEaW1zKTtcbiAgICAgICAgcmV0dXJuIHJvd3MuY29uY2F0KChjb25maWcuY29sdW1ucyB8fCBbXSkpLmNvbmNhdChjb25maWcuZmlsdGVycyB8fCBbXSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCAmJiB4ICE9PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgc2hvdWxkUmVzaXplKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YVJvd0xpc3QuZmlyc3Q/LmNlbGxzIHx8IHRoaXMuZGF0YVJvd0xpc3QuZmlyc3QuY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaXplUHJvcENoYW5nZWQgPSBzdXBlci5zaG91bGRSZXNpemU7XG4gICAgICAgIGlmIChpc1NpemVQcm9wQ2hhbmdlZCB8fCB0aGlzLl9zaG91bGRVcGRhdGVTaXplcykge1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkVXBkYXRlU2l6ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyRVNGKGRyb3Bkb3duOiBhbnksIGNvbHVtbjogQ29sdW1uVHlwZSwgb3B0aW9uczogT3ZlcmxheVNldHRpbmdzLCBzaG91bGRSZWF0YWNoOiBib29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIGlmIChkcm9wZG93bikge1xuICAgICAgICAgICAgZHJvcGRvd24uaW5pdGlhbGl6ZShjb2x1bW4sIHRoaXMub3ZlcmxheVNlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlYXRhY2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKGRyb3Bkb3duLmVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCA9IGlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCByZWY6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCwgcmVmOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZlYXR1cmVDb2x1bW5zV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Um93V2lkdGhzO1xuICAgIH1cblxuICAgIC8qIGJsYXpvclN1cHByZXNzICovXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbaWRdPVwiJ2lneC1waXZvdC0xJ1wiIFtkYXRhXT1cIkRhdGFcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBfaWQ7XG4gICAgfVxuICAgIC8qIGJsYXpvclN1cHByZXNzICovXG4gICAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucF9pZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qIHRyZWF0QXNSZWYgKi9cbiAgICAvKiBibGF6b3JBbHRlcm5hdGVUeXBlOiBvYmplY3QgKi9cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGFycmF5IG9mIGRhdGEgdGhhdCBwb3B1bGF0ZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtkYXRhXT1cIkRhdGFcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBhbnlbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHZhbHVlIHx8IFtdO1xuICAgICAgICBpZiAoIXRoaXMuX2luaXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9HZW5lcmF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb25maWcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBpZiAodGhpcy5oZWlnaHQgPT09IG51bGwgfHwgdGhpcy5oZWlnaHQuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGhlaWdodCB3aWxsIGNoYW5nZSBiYXNlZCBvbiBob3cgbXVjaCBkYXRhIHRoZXJlIGlzLCByZWNhbGN1bGF0ZSBzaXplcyBpbiBpZ3hGb3JPZi5cbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qIHRyZWF0QXNSZWYgKi9cbiAgICAvKiBibGF6b3JBbHRlcm5hdGVUeXBlOiBvYmplY3QgKi9cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGRhdGEgc2V0IHRvIHRoZSBjb21wb25lbnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29udGV4dChyb3dEYXRhLCByb3dJbmRleCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHJvd0RhdGEsXG4gICAgICAgICAgICB0ZW1wbGF0ZUlEOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGFSb3cnLFxuICAgICAgICAgICAgICAgIGlkOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuZ2V0RGF0YVZpZXdJbmRleChyb3dJbmRleCwgZmFsc2UpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90Um93V2lkdGhzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlUm93RGltZW5zaW9ucy5sZW5ndGggPyB0aGlzLnZpc2libGVSb3dEaW1lbnNpb25zLnJlZHVjZSgoYWNjdW11bGF0b3IsIGRpbSkgPT4gYWNjdW11bGF0b3IgKyB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKSwgMCkgOlxuICAgICAgICAgICAgdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKHRoaXMuZW1wdHlSb3dEaW1lbnNpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJvd0RpbWVuc2lvbldpZHRoKGRpbSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzQXV0byA9IGRpbS53aWR0aCAmJiBkaW0ud2lkdGguaW5kZXhPZignYXV0bycpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzQXV0bykge1xuICAgICAgICAgICAgcmV0dXJuIGRpbS5hdXRvV2lkdGggPyBkaW0uYXV0b1dpZHRoICsgJ3B4JyA6ICdmaXQtY29udGVudCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSkgKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW06IElQaXZvdERpbWVuc2lvbik6IG51bWJlciB7XG4gICAgICAgIGlmICghZGltPy53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIE1JTklNVU1fQ09MVU1OX1dJRFRIO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzUGVyY2VudCA9IGRpbS53aWR0aCAmJiBkaW0ud2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgY29uc3QgaXNBdXRvID0gZGltLndpZHRoICYmIGRpbS53aWR0aC5pbmRleE9mKCdhdXRvJykgIT09IC0xO1xuICAgICAgICBpZiAoaXNQZXJjZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGRpbS53aWR0aCkgLyAxMDAgKiB0aGlzLmNhbGNXaWR0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvKSB7XG4gICAgICAgICAgICByZXR1cm4gZGltLmF1dG9XaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChkaW0ud2lkdGgsIDEwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudCh3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCAqIDEwMCAvIHRoaXMuY2FsY1dpZHRoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90Q29udGVudENhbGNXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgdG90YWxEaW1XaWR0aCA9IHRoaXMucm93RGltZW5zaW9ucy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9ucy5tYXAoKGRpbSkgPT4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSkpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyKSA6XG4gICAgICAgICAgICAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjV2lkdGggLSB0b3RhbERpbVdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RQaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQaW5uaW5nVG9TdGFydCA/IHRoaXMucGlubmVkV2lkdGggOiB0aGlzLmhlYWRlckZlYXR1cmVzV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaXZvdFVucGlubmVkV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVucGlubmVkV2lkdGggfHwgMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0RpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgdmlzaWJsZVJvd0RpbWVuc2lvbnModmFsdWU6IElQaXZvdERpbWVuc2lvbltdKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVSb3dEaW1lbnNpb25zID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmxlUm93RGltZW5zaW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dEaW1lbnNpb25zIHx8IHRoaXMucm93RGltZW5zaW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkRpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVyRGltZW5zaW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUNvbHVtbihjb2w6IElneENvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZ2V0KGNvbC5maWVsZCk7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gIXN0YXRlO1xuICAgICAgICB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLnNldChjb2wuZmllbGQsIG5ld1N0YXRlKTtcbiAgICAgICAgdGhpcy50b2dnbGVSb3dHcm91cChjb2wsIG5ld1N0YXRlKTtcbiAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0Q29sdW1uV2lkdGhTdW0oKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvbFN1bSA9IHN1cGVyLmdldENvbHVtbldpZHRoU3VtKCk7XG4gICAgICAgIGNvbFN1bSArPSB0aGlzLnJvd0RpbWVuc2lvbnMubWFwKGRpbSA9PiB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKSkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIsIDApO1xuICAgICAgICByZXR1cm4gY29sU3VtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGlzUmVjb3JkUGlubmVkQnlJbmRleChfcm93SW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KF9hcmdzOiBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWRFdmVudEFyZ3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGV4cGFuZEFsbCgpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb2xsYXBzZUFsbCgpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBleHBhbmRSb3coX3Jvd0lEOiBhbnkpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb2xsYXBzZVJvdyhfcm93SUQ6IGFueSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRSb3dzKCk6IElneEdyaWRSb3dDb21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgdG90YWxSZWNvcmRzKF90b3RhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW92ZUNvbHVtbihfY29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIF90YXJnZXQ6IElneENvbHVtbkNvbXBvbmVudCwgX3BvczogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLkFmdGVyRHJvcFRhcmdldCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFkZFJvdyhfZGF0YTogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGVsZXRlUm93KF9yb3dTZWxlY3RvcjogYW55KTogYW55IHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1cGRhdGVDZWxsKF92YWx1ZTogYW55LCBfcm93U2VsZWN0b3I6IGFueSwgX2NvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdXBkYXRlUm93KF92YWx1ZTogYW55LCBfcm93U2VsZWN0b3I6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGVuYWJsZVN1bW1hcmllcyguLi5fcmVzdCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc2FibGVTdW1tYXJpZXMoLi4uX3Jlc3QpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBwaW5Db2x1bW4oX2NvbHVtbk5hbWU6IHN0cmluZyB8IElneENvbHVtbkNvbXBvbmVudCwgX2luZGV4Pyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdW5waW5Db2x1bW4oX2NvbHVtbk5hbWU6IHN0cmluZyB8IElneENvbHVtbkNvbXBvbmVudCwgX2luZGV4Pyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcGluUm93KF9yb3dJRDogYW55LCBfaW5kZXg/OiBudW1iZXIsIF9yb3c/OiBSb3dUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1bnBpblJvdyhfcm93SUQ6IGFueSwgX3Jvdz86IFJvd1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRSb3dIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzRWRpdGFibGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhhc1N1bW1hcml6ZWRDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhhc01vdmFibGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZERhdGFWaWV3KCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG9wZW5BZHZhbmNlZEZpbHRlcmluZ0RpYWxvZyhfb3ZlcmxheVNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2xvc2VBZHZhbmNlZEZpbHRlcmluZ0RpYWxvZyhfYXBwbHlDaGFuZ2VzOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5kRWRpdChfY29tbWl0ID0gdHJ1ZSwgX2V2ZW50PzogRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGJlZ2luQWRkUm93QnlJZChfcm93SUQ6IGFueSwgX2FzQ2hpbGQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYmVnaW5BZGRSb3dCeUluZGV4KF9pbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2xlYXJTZWFyY2goKSB7IH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSByZWZyZXNoU2VhcmNoKF91cGRhdGVBY3RpdmVJbmZvPzogYm9vbGVhbiwgX2VuZEVkaXQgPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZpbmROZXh0KF90ZXh0OiBzdHJpbmcsIF9jYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiwgX2V4YWN0TWF0Y2g/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZpbmRQcmV2KF90ZXh0OiBzdHJpbmcsIF9jYXNlU2Vuc2l0aXZlPzogYm9vbGVhbiwgX2V4YWN0TWF0Y2g/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldE5leHRDZWxsKGN1cnJSb3dJbmRleDogbnVtYmVyLCBjdXJWaXNpYmxlQ29sSW5kZXg6IG51bWJlcixcbiAgICAgICAgY2FsbGJhY2s6IChJZ3hDb2x1bW5Db21wb25lbnQpID0+IGJvb2xlYW4gPSBudWxsKTogSUNlbGxQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXROZXh0Q2VsbChjdXJyUm93SW5kZXgsIGN1clZpc2libGVDb2xJbmRleCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXRQcmV2aW91c0NlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLFxuICAgICAgICBjYWxsYmFjazogKElneENvbHVtbkNvbXBvbmVudCkgPT4gYm9vbGVhbiA9IG51bGwpOiBJQ2VsbFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFByZXZpb3VzQ2VsbChjdXJyUm93SW5kZXgsIGN1clZpc2libGVDb2xJbmRleCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXRQaW5uZWRXaWR0aCh0YWtlSGlkZGVuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFBpbm5lZFdpZHRoKHRha2VIaWRkZW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB0b3RhbEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY0hlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sdW1uR3JvdXBFeHBhbmRTdGF0ZShjb2w6IElneENvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZ2V0KGNvbC5maWVsZCk7XG4gICAgICAgIC8vIGNvbHVtbnMgYXJlIGV4cGFuZGVkIGJ5IGRlZmF1bHQ/XG4gICAgICAgIHJldHVybiBzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSBudWxsID8gc3RhdGUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlUm93R3JvdXAoY29sOiBJZ3hDb2x1bW5Db21wb25lbnQsIG5ld1N0YXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghY29sKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb2xzID0gY29sLnBhcmVudCA/IGNvbC5wYXJlbnQuY2hpbGRyZW4udG9BcnJheSgpIDogdGhpcy5fYXV0b0dlbmVyYXRlZENvbHMuZmlsdGVyKHggPT4geC5sZXZlbCA9PT0gMCk7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nQ29sID0gcGFyZW50Q29scy5maWx0ZXIoeCA9PiB4LmhlYWRlciA9PT0gY29sLmhlYWRlciAmJiB4ICE9PSBjb2wpWzBdO1xuICAgICAgICAgICAgY29uc3QgY3VyckluZGV4ID0gcGFyZW50Q29scy5pbmRleE9mKGNvbCk7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nSW5kZXggPSBwYXJlbnRDb2xzLmluZGV4T2Yoc2libGluZ0NvbCk7XG4gICAgICAgICAgICBpZiAoY3VyckluZGV4IDwgc2libGluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tlZCBvbiB0aGUgZnVsbCBoaWVyYXJjaHkgaGVhZGVyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKGNvbCwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgIHNpYmxpbmdDb2wuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2VkIG9uIHN1bW1hcnkgcGFyZW50IGNvbHVtbiB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG1lYXN1cmVzXG4gICAgICAgICAgICAgICAgY29sLmhlYWRlclRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShzaWJsaW5nQ29sLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb2xzID0gY29sLnBhcmVudCA/IGNvbC5wYXJlbnQuY2hpbGRyZW4gOiB0aGlzLl9hdXRvR2VuZXJhdGVkQ29scy5maWx0ZXIoeCA9PiB4LmxldmVsID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkQ29sdW1uID0gcGFyZW50Q29scy5maWx0ZXIoeCA9PiB4LmhlYWRlciA9PT0gY29sLmhlYWRlciAmJiAheC5jb2x1bW5Hcm91cClbMF07XG4gICAgICAgICAgICBjb25zdCBncm91cENvbHVtbiA9IHBhcmVudENvbHMuZmlsdGVyKHggPT4geC5oZWFkZXIgPT09IGNvbC5oZWFkZXIgJiYgeC5jb2x1bW5Hcm91cClbMF07XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoZ3JvdXBDb2x1bW4sIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIGlmIChuZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGZpZWxkQ29sdW1uLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGRDb2x1bW4uaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0dXBDb2x1bW5zKCkge1xuICAgICAgICBzdXBlci5zZXR1cENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGF0YVJlYmluZGluZyhldmVudDogSUZvck9mRGF0YUNoYW5naW5nRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0hvcml6b250YWxMYXlvdXQpIHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uRGF0YUNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlRGltZW5zaW9uQ29sdW1ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIuZGF0YVJlYmluZGluZyhldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXV0by1zaXplcyByb3cgZGltZW5zaW9uIGNlbGxzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBPbmx5IHNpemVzIGJhc2VkIG9uIHRoZSBkaW1lbnNpb24gY2VsbHMgaW4gdmlldy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuYXV0b1NpemVSb3dEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSByb3cgZGltZW5zaW9uIHRvIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGF1dG9TaXplUm93RGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLlJvdykge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERpbXM6IHN0cmluZ1tdID0gUGl2b3RVdGlsLmZsYXR0ZW4oW2RpbWVuc2lvbl0pLm1hcCgoeDogSVBpdm90RGltZW5zaW9uKSA9PiB4Lm1lbWJlck5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29udGVudENvbGxlY3Rpb24gPSAgdGhpcy5nZXRDb250ZW50Q29sbGVjdGlvbihkaW1lbnNpb24pO1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGNvbnRlbnRDb2xsZWN0aW9uLmZpbHRlcih4ID0+IHJlbGF0ZWREaW1zLmluZGV4T2YoeC5kaW1lbnNpb24ubWVtYmVyTmFtZSkgIT09IC0xKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBjb250ZW50Lm1hcCh4ID0+IHguaGVhZGVyR3JvdXBzLnRvQXJyYXkoKSkuZmxhdCgpLm1hcCh4ID0+IHguaGVhZGVyICYmIHguaGVhZGVyLnJlZkluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpdm90VUkuc2hvd1Jvd0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb25IZWFkZXIgPSB0aGlzLnRoZWFkUm93LnJvd0RpbWVuc2lvbkhlYWRlcnMuZmluZCh4ID0+IHguY29sdW1uLmZpZWxkID09PSBkaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKGRpbWVuc2lvbkhlYWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXRvV2lkdGggPSB0aGlzLmdldExhcmdlc0NvbnRlbnRXaWR0aChoZWFkZXJzKTtcbiAgICAgICAgICAgIGlmIChkaW1lbnNpb24ud2lkdGggPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICAgICAgZGltZW5zaW9uLmF1dG9XaWR0aCA9IHBhcnNlRmxvYXQoYXV0b1dpZHRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGltZW5zaW9uLndpZHRoID0gYXV0b1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyBkaW1lbnNpb24gaW4gdGFyZ2V0IGNvbGxlY3Rpb24gYnkgdHlwZSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGNvbGxlY3Rpb24ncyBlbmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuaW5zZXJ0RGltZW5zaW9uQXQoZGltZW5zaW9uLCBQaXZvdERpbWVuc2lvblR5cGUuUm93LCAxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdGhhdCB3aWxsIGJlIGFkZGVkLlxuICAgICAqIEBwYXJhbSB0YXJnZXRDb2xsZWN0aW9uVHlwZSBUaGUgdGFyZ2V0IGNvbGxlY3Rpb24gdHlwZSB0byBhZGQgdG8uIENhbiBiZSBSb3csIENvbHVtbiBvciBGaWx0ZXIuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5zZXJ0RGltZW5zaW9uQXQoZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHRhcmdldENvbGxlY3Rpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldENvbGxlY3Rpb24gPSB0aGlzLmdldERpbWVuc2lvbnNCeVR5cGUodGFyZ2V0Q29sbGVjdGlvblR5cGUpO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFyZ2V0Q29sbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDAsIGRpbWVuc2lvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRDb2xsZWN0aW9uLnB1c2goZGltZW5zaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNDaGFuZ2UuZW1pdCh7IGRpbWVuc2lvbnM6IHRhcmdldENvbGxlY3Rpb24sIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiB0YXJnZXRDb2xsZWN0aW9uVHlwZSB9KTtcbiAgICAgICAgaWYgKHRhcmdldENvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbkRhdGFDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZURpbWVuc2lvbkNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZSBkaW1lbnNpb24gZnJvbSBpdHMgY3VycmVudGx5IGNvbGxlY3Rpb24gdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgY29sbGVjdGlvbiBieSB0eXBlIGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgY29sbGVjdGlvbidzIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKGRpbWVuc2lvbiwgUGl2b3REaW1lbnNpb25UeXBlLlJvdywgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRoYXQgd2lsbCBiZSBtb3ZlZC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0Q29sbGVjdGlvblR5cGUgVGhlIHRhcmdldCBjb2xsZWN0aW9uIHR5cGUgdG8gbW92ZSBpdCB0by4gQ2FuIGJlIFJvdywgQ29sdW1uIG9yIEZpbHRlci5cbiAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluIHRoZSBjb2xsZWN0aW9uIGF0IHdoaWNoIHRvIGFkZC5cbiAgICAgKiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgbm90IHNldCBpdCB3aWxsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB0YXJnZXRDb2xsZWN0aW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAvLyByZW1vdmUgZnJvbSBvbGQgY29sbGVjdGlvblxuICAgICAgICB0aGlzLl9yZW1vdmVEaW1lbnNpb25JbnRlcm5hbChkaW1lbnNpb24pO1xuICAgICAgICAvLyBhZGQgdG8gdGFyZ2V0XG4gICAgICAgIHRoaXMuaW5zZXJ0RGltZW5zaW9uQXQoZGltZW5zaW9uLCB0YXJnZXRDb2xsZWN0aW9uVHlwZSwgaW5kZXgpO1xuXG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGRpbWVuc2lvbiBmcm9tIGl0cyBjdXJyZW50bHkgY29sbGVjdGlvbi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdG9nZ2xlRGltZW5zaW9uIHRoYXQgZW5hYmxlZC9kaXNhYmxlcyB0aGUgZGltZW5zaW9uLlxuICAgICAqIFRoaXMgY29tcGxldGVseSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnJlbW92ZURpbWVuc2lvbihkaW1lbnNpb24pO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0byBiZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgcHJldkNvbGxlY3Rpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIHRoaXMuX3JlbW92ZURpbWVuc2lvbkludGVybmFsKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBkaW1lbnNpb24ncyBlbmFibGVkIHN0YXRlIG9uIG9yIG9mZi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBkaW1lbnNpb24gcmVtYWlucyBpbiBpdHMgY3VycmVudCBjb2xsZWN0aW9uLiBUaGlzIGp1c3QgY2hhbmdlcyBpdHMgZW5hYmxlZCBzdGF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQudG9nZ2xlRGltZW5zaW9uKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBkaW1UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChkaW1UeXBlID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmdldERpbWVuc2lvbnNCeVR5cGUoZGltVHlwZSk7XG4gICAgICAgIGRpbWVuc2lvbi5lbmFibGVkID0gIWRpbWVuc2lvbi5lbmFibGVkO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpbWVuc2lvbi5lbmFibGVkICYmIGRpbWVuc2lvbi5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5jbGVhckZpbHRlcihkaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNDaGFuZ2UuZW1pdCh7IGRpbWVuc2lvbnM6IGNvbGxlY3Rpb24sIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiBkaW1UeXBlIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmIChkaW1UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgdmFsdWUgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuaW5zZXJ0VmFsdWVBdCh2YWx1ZSwgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBkZWZpbml0aW9uIHRoYXQgd2lsbCBiZSBhZGRlZC5cbiAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluIHRoZSBjb2xsZWN0aW9uIGF0IHdoaWNoIHRvIGFkZC5cbiAgICAgKiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgbm90IHNldCBpdCB3aWxsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnRWYWx1ZUF0KHZhbHVlOiBJUGl2b3RWYWx1ZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcztcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UoaW5kZXgsIDAsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2UuZW1pdCh7IHZhbHVlcyB9KTtcbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZSB2YWx1ZSBmcm9tIGl0cyBjdXJyZW50bHkgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQubW92ZVZhbHVlKHZhbHVlLCAxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBtb3ZlZC5cbiAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluIHRoZSBjb2xsZWN0aW9uIGF0IHdoaWNoIHRvIGFkZC5cbiAgICAgKiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgbm90IHNldCBpdCB3aWxsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBtb3ZlVmFsdWUodmFsdWU6IElQaXZvdFZhbHVlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSkgcmV0dXJuO1xuICAgICAgICAvLyByZW1vdmUgZnJvbSBvbGQgaW5kZXhcbiAgICAgICAgdGhpcy5yZW1vdmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIC8vIGFkZCB0byBuZXdcbiAgICAgICAgdGhpcy5pbnNlcnRWYWx1ZUF0KHZhbHVlLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB2YWx1ZSBmcm9tIGNvbGxlY3Rpb24uXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRvZ2dsZVZhbHVlIHRoYXQgZW5hYmxlZC9kaXNhYmxlcyB0aGUgdmFsdWUuXG4gICAgICogVGhpcyBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5yZW1vdmVWYWx1ZShkaW1lbnNpb24pO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlVmFsdWUodmFsdWU6IElQaXZvdFZhbHVlLCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHZhbHVlcy5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHsgdmFsdWVzIH0pO1xuICAgICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2YWx1ZSdzIGVuYWJsZWQgc3RhdGUgb24gb3Igb2ZmLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIHZhbHVlIHJlbWFpbnMgaW4gaXRzIGN1cnJlbnQgY29sbGVjdGlvbi4gVGhpcyBqdXN0IGNoYW5nZXMgaXRzIGVuYWJsZWQgc3RhdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnRvZ2dsZVZhbHVlKHZhbHVlKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSkgcmV0dXJuO1xuICAgICAgICB2YWx1ZS5lbmFibGVkID0gIXZhbHVlLmVuYWJsZWQ7XG4gICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2UuZW1pdCh7IHZhbHVlczogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzIH0pO1xuICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTb3J0IHRoZSBkaW1lbnNpb24gYW5kIGl0cyBjaGlsZHJlbiBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5zb3J0RGltZW5zaW9uKGRpbWVuc2lvbiwgU29ydGluZ0RpcmVjdGlvbi5Bc2MpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc29ydERpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgc29ydERpcmVjdGlvbjogU29ydGluZ0RpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBkaW1lbnNpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uID0gc29ydERpcmVjdGlvbjtcbiAgICAgICAgLy8gYXBwbHkgc2FtZSBzb3J0IGRpcmVjdGlvbiB0byBjaGlsZHJlbi5cbiAgICAgICAgbGV0IGRpbSA9IGRpbWVuc2lvbjtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RVSS5yb3dMYXlvdXQgPT09IFBpdm90Um93TGF5b3V0VHlwZS5WZXJ0aWNhbCkge1xuICAgICAgICAgICAgd2hpbGUgKGRpbS5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICAgICAgZGltLmNoaWxkTGV2ZWwuc29ydERpcmVjdGlvbiA9IGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIGRpbSA9IGRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UuZW1pdCh0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICBpZiAoZGltZW5zaW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgYSBzaW5nbGUgYElQaXZvdERpbWVuc2lvbmAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgZmlsdGVyKCkge1xuICAgICAqICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMScpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMicpO1xuICAgICAqICAgICAgdGhpcy5ncmlkMS5maWx0ZXJEaW1lbnNpb24odGhpcy5waXZvdENvbmZpZ0hpZXJhcmNoeS5yb3dzWzBdLCBzZXQsIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oJ2luJykpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB2YWx1ZTogYW55LCBjb25kaXRpb25PckV4cHJlc3Npb25UcmVlPzogSUZpbHRlcmluZ09wZXJhdGlvbiB8IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcihkaW1lbnNpb24ubWVtYmVyTmFtZSwgdmFsdWUsIGNvbmRpdGlvbk9yRXhwcmVzc2lvblRyZWUpO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChkaW1lbnNpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSb3dEaW1lbnNpb25CeU5hbWUobWVtYmVyTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVSb3dzID0gdGhpcy5waXZvdFVJLnJvd0xheW91dCA9PT0gUGl2b3RSb3dMYXlvdXRUeXBlLlZlcnRpY2FsID9cbiAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MgOlxuICAgICAgICAgUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cyk7XG4gICAgICAgIGNvbnN0IGRpbUluZGV4ID0gdmlzaWJsZVJvd3MuZmluZEluZGV4KCh0YXJnZXQpID0+IHRhcmdldC5tZW1iZXJOYW1lID09PSBtZW1iZXJOYW1lKTtcbiAgICAgICAgY29uc3QgZGltID0gdmlzaWJsZVJvd3NbZGltSW5kZXhdO1xuICAgICAgICByZXR1cm4gZGltO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldERpbWVuc2lvbnNCeVR5cGUoZGltZW5zaW9uOiBQaXZvdERpbWVuc2lvblR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChkaW1lbnNpb24pIHtcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLlJvdzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cztcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbjpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucztcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcjpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNpemVSb3dEaW1lbnNpb25QaXhlbHMoZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIG5ld1dpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaXNQZXJjZW50YWdlV2lkdGggPSBkaW1lbnNpb24ud2lkdGggJiYgdHlwZW9mIGRpbWVuc2lvbi53aWR0aCA9PT0gJ3N0cmluZycgJiYgZGltZW5zaW9uLndpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc1BlcmNlbnRhZ2VXaWR0aCkge1xuICAgICAgICAgICAgZGltZW5zaW9uLndpZHRoID0gdGhpcy5yZXZlcnNlRGltZW5zaW9uV2lkdGhUb1BlcmNlbnQobmV3V2lkdGgpLnRvRml4ZWQoMikgKyAnJSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaW1lbnNpb24ud2lkdGggPSBuZXdXaWR0aCArICdweCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RpZnkgdGhlIGdyaWQgdG8gcmVmbG93LCB0byB1cGRhdGUgaWYgaG9yaXpvbnRhbCBzY3JvbGxiYXIgbmVlZHMgdG8gYmUgcmVuZGVyZWQvcmVtb3ZlZC5cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAqIEBoaWRkZW5cbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHJvdGVjdGVkIF9yZW1vdmVEaW1lbnNpb25JbnRlcm5hbChkaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgcHJldkNvbGxlY3Rpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJldkNvbGxlY3Rpb24gPSB0aGlzLmdldERpbWVuc2lvbnNCeVR5cGUocHJldkNvbGxlY3Rpb25UeXBlKTtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gcHJldkNvbGxlY3Rpb24uaW5kZXhPZihkaW1lbnNpb24pO1xuICAgICAgICBwcmV2Q29sbGVjdGlvbi5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pOiBQaXZvdERpbWVuc2lvblR5cGUge1xuICAgICAgICByZXR1cm4gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cykuaW5kZXhPZihkaW1lbnNpb24pICE9PSAtMSA/IFBpdm90RGltZW5zaW9uVHlwZS5Sb3cgOlxuICAgICAgICAgICAgUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucykuaW5kZXhPZihkaW1lbnNpb24pICE9PSAtMSA/IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4gOlxuICAgICAgICAgICAgICAgICghIXRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMgJiYgUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycykuaW5kZXhPZihkaW1lbnNpb24pICE9PSAtMSkgP1xuICAgICAgICAgICAgICAgICAgICBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGl2b3RSb3dIZWFkZXJDb250ZW50V2lkdGgoaGVhZGVyR3JvdXA6IElneFBpdm90Um93SGVhZGVyR3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyU2l6ZXMgPSB0aGlzLmdldEhlYWRlckNlbGxXaWR0aChoZWFkZXJHcm91cC5oZWFkZXIucmVmSW5zdGFuY2UubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBoZWFkZXJTaXplcy53aWR0aCArIGhlYWRlclNpemVzLnBhZGRpbmc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldExhcmdlc0NvbnRlbnRXaWR0aChjb250ZW50czogRWxlbWVudFJlZltdKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGFyZ2VzdCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsc0NvbnRlbnRXaWR0aHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnRlbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtIGluc3RhbmNlb2YgSWd4UGl2b3RSb3dIZWFkZXJHcm91cENvbXBvbmVudCA/XG4gICAgICAgICAgICAgICAgICAgIGNlbGxzQ29udGVudFdpZHRocy5wdXNoKHRoaXMuZ2V0UGl2b3RSb3dIZWFkZXJDb250ZW50V2lkdGgoZWxlbSkpIDpcbiAgICAgICAgICAgICAgICAgICAgY2VsbHNDb250ZW50V2lkdGhzLnB1c2godGhpcy5nZXRIZWFkZXJDZWxsV2lkdGgoZWxlbS5uYXRpdmVFbGVtZW50KS53aWR0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbHNDb250ZW50V2lkdGhzLmluZGV4T2YoTWF0aC5tYXgoLi4uY2VsbHNDb250ZW50V2lkdGhzKSk7XG4gICAgICAgICAgICBjb25zdCBjZWxsU3R5bGUgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoY29udGVudHNbaW5kZXhdLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFBhZGRpbmcgPSBwYXJzZUZsb2F0KGNlbGxTdHlsZS5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KGNlbGxTdHlsZS5wYWRkaW5nUmlnaHQpICtcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNlbGxTdHlsZS5ib3JkZXJMZWZ0V2lkdGgpICsgcGFyc2VGbG9hdChjZWxsU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCk7XG4gICAgICAgICAgICBsYXJnZXN0LnNldChNYXRoLm1heCguLi5jZWxsc0NvbnRlbnRXaWR0aHMpLCBjZWxsUGFkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFyZ2VzdENlbGwgPSBNYXRoLm1heCguLi5BcnJheS5mcm9tKGxhcmdlc3Qua2V5cygpKSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5jZWlsKGxhcmdlc3RDZWxsICsgbGFyZ2VzdC5nZXQobGFyZ2VzdENlbGwpKTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHdpZHRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBoYXNIb3Jpem9udGFsTGF5b3V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdFVJLnJvd0xheW91dCA9PT0gUGl2b3RSb3dMYXlvdXRUeXBlLkhvcml6b250YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc011bHRpcGxlVmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlck1heEhlaWdodCgpIHtcbiAgICAgICAgLy8gbWF4IDEwIHJvd3MsIHJvdyBzaXplIGRlcGVuZHMgb24gZ3JpZCBzaXplXG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMucmVuZGVyZWRSb3dIZWlnaHQgKiAxMDtcbiAgICAgICAgcmV0dXJuIGAke21heEhlaWdodH1weGA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4Y2VsU3R5bGVGaWx0ZXJNaW5IZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gbWluIDUgcm93cywgcm93IHNpemUgZGVwZW5kcyBvbiBncmlkIHNpemVcbiAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gdGhpcy5yZW5kZXJlZFJvd0hlaWdodCAqIDU7XG4gICAgICAgIHJldHVybiBgJHttaW5IZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYWN0aXZlRGVzY2VuZGFudCgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlRWxlbSA9IHRoaXMubmF2aWdhdGlvbi5hY3RpdmVOb2RlO1xuICAgICAgICBpZiAoKHRoaXMubmF2aWdhdGlvbiBhcyBJZ3hQaXZvdEdyaWROYXZpZ2F0aW9uU2VydmljZSkuaXNSb3dIZWFkZXJBY3RpdmUgfHxcbiAgICAgICAgICAgICh0aGlzLm5hdmlnYXRpb24gYXMgSWd4UGl2b3RHcmlkTmF2aWdhdGlvblNlcnZpY2UpLmlzUm93RGltZW5zaW9uSGVhZGVyQWN0aXZlKSB7XG4gICAgICAgICAgICBpZiAoIWFjdGl2ZUVsZW0gfHwgIU9iamVjdC5rZXlzKGFjdGl2ZUVsZW0pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5pZH1fJHthY3RpdmVFbGVtLnJvd31fJHthY3RpdmVFbGVtLmNvbHVtbn1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmFjdGl2ZURlc2NlbmRhbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVUb2dnbGUoZ3JvdXBDb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFncm91cENvbHVtbikgcmV0dXJuO1xuICAgICAgICBncm91cENvbHVtbi5oaWRkZW4gPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5zZXQoZ3JvdXBDb2x1bW4uZmllbGQsIHN0YXRlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Ub3RhbCA9IHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMgP1xuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCAmJiB4LmNoaWxkcmVuLmZpbHRlcih5ID0+ICF5LmNvbHVtbkdyb3VwKS5sZW5ndGggPT09IHRoaXMudmFsdWVzLmxlbmd0aCkgOlxuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4gIXguY29sdW1uR3JvdXApO1xuICAgICAgICBjb25zdCBjaGlsZHJlblN1Ymdyb3VwcyA9IHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMgP1xuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCAmJiB4LmNoaWxkcmVuLmZpbHRlcih5ID0+ICF5LmNvbHVtbkdyb3VwKS5sZW5ndGggPT09IDApIDpcbiAgICAgICAgICAgIGdyb3VwQ29sdW1uLmNoaWxkcmVuLmZpbHRlcih4ID0+IHguY29sdW1uR3JvdXApO1xuICAgICAgICBjaGlsZHJlblRvdGFsLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChncm91cC5maWVsZCkgfHwgc3RhdGU7XG4gICAgICAgICAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBncm91cC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwLmhlYWRlclRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFncm91cENvbHVtbi5oaWRkZW4gJiYgY2hpbGRyZW5TdWJncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hpbGRyZW5TdWJncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChncm91cC5maWVsZCkgfHwgc3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKGdyb3VwLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBidWlsZERhdGFWaWV3KGRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3ID0gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXREYXRhQmFzZWRCb2R5SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGR2bCA9IHRoaXMuZGF0YVZpZXc/Lmxlbmd0aCB8fCAwO1xuICAgICAgICByZXR1cm4gZHZsIDwgdGhpcy5fZGVmYXVsdFRhcmdldFJlY29yZE51bWJlciA/IDAgOiB0aGlzLmRlZmF1bHRUYXJnZXRCb2R5SGVpZ2h0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBob3Jpem9udGFsU2Nyb2xsSGFuZGxlcihldmVudCkge1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgICAgIHRoaXMudGhlYWRSb3cuaGVhZGVyQ29udGFpbmVycy5mb3JFYWNoKGhlYWRlckZvck9mID0+IHtcbiAgICAgICAgICAgIGhlYWRlckZvck9mLm9uSFNjcm9sbChzY3JvbGxMZWZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLmhvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmVydGljYWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXJzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB4Lm9uU2Nyb2xsKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLnZlcnRpY2FsU2Nyb2xsSGFuZGxlcihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhdXRvZ2VuZXJhdGVDb2x1bW5zKCkge1xuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkQVBJLmZpbHRlckRhdGFCeUV4cHJlc3Npb25zKHRoaXMuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZENvbHVtbnNXaXRoU29ydGluZyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMuY29sdW1uRGltZW5zaW9ucykuZmlsdGVyKGRpbSA9PiBkaW0uc29ydERpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nLmxlbmd0aCA+IDAgPyBQaXZvdFNvcnRVdGlsLmdlbmVyYXRlRGltZW5zaW9uU29ydGluZ0V4cHJlc3Npb25zKGZsYXR0ZW5lZENvbHVtbnNXaXRoU29ydGluZykgOiBbXTtcbiAgICAgICAgbGV0IHNvcnRlZERhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc29ydGVkRGF0YSA9IERhdGFVdGlsLnNvcnQoY2xvbmVBcnJheShkYXRhKSwgZXhwcmVzc2lvbnMsIHRoaXMuc29ydFN0cmF0ZWd5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmllbGRzTWFwO1xuICAgICAgICBpZiAodGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1uU3RyYXRlZ3kgJiYgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1uU3RyYXRlZ3kgaW5zdGFuY2VvZiBOb29wUGl2b3REaW1lbnNpb25zU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2VuZXJhdGVEYXRhRmllbGRzKHNvcnRlZERhdGEpO1xuICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkcyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MpLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrZXlGaWVsZHMgPSBPYmplY3QudmFsdWVzKHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzID0gZmllbGRzLmZpbHRlcih4ID0+IHJvd0ZpZWxkcy5pbmRleE9mKHgpID09PSAtMSAmJiBrZXlGaWVsZHMuaW5kZXhPZih4KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICB4LmluZGV4T2YodGhpcy5waXZvdEtleXMucm93RGltZW5zaW9uU2VwYXJhdG9yICsgdGhpcy5waXZvdEtleXMubGV2ZWwpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHguaW5kZXhPZih0aGlzLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLnBpdm90S2V5cy5yZWNvcmRzKSA9PT0gLTEpO1xuICAgICAgICAgICAgZmllbGRzTWFwID0gdGhpcy5nZW5lcmF0ZUZyb21EYXRhKGZpbHRlcmVkRmllbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkc01hcCA9IFBpdm90VXRpbC5nZXRGaWVsZHNIaWVyYXJjaHkoXG4gICAgICAgICAgICAgICAgc29ydGVkRGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbixcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90S2V5cyxcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KGZpZWxkc01hcCwgc29ydGVkRGF0YSk7XG4gICAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzID0gY29sdW1ucztcbiAgICAgICAgLy8gcmVzZXQgZXhwYW5zaW9uIHN0YXRlcyBpZiBhbnkgYXJlIHN0b3JlZC5cbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltYXJ5Q29sdW1uID0gY29sdW1ucy5maW5kKHggPT4geC5maWVsZCA9PT0ga2V5ICYmIHguaGVhZGVyVGVtcGxhdGUgPT09IHRoaXMuaGVhZGVyVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwU3VtbWFyeUNvbHVtbiA9IGNvbHVtbnMuZmluZCh4ID0+IHguZmllbGQgPT09IGtleSAmJiB4LmhlYWRlclRlbXBsYXRlICE9PSB0aGlzLmhlYWRlclRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVJvd0dyb3VwKHByaW1hcnlDb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwU3VtbWFyeUNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmFsbFZpc2libGVEaW1lbnNpb25zLmZvckVhY2goKGRpbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBkaW0ubWVtYmVyTmFtZTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSBkaW0uZGlzcGxheU5hbWUgfHwgZGltLm1lbWJlck5hbWU7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLnJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnJlc2l6YWJsZSA9IHRoaXMucm93RGltZW5zaW9uUmVzaXppbmc7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSBkaW0uc29ydGFibGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkaW0uc29ydGFibGU7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSB0aGlzLnJvd0RpbWVuc2lvbldpZHRoKGRpbSk7XG4gICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2FsY3VsYXRlR3JpZFNpemVzKHJlY2FsY0ZlYXR1cmVXaWR0aCA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIuY2FsY3VsYXRlR3JpZFNpemVzKHJlY2FsY0ZlYXR1cmVXaWR0aCk7XG4gICAgICAgIGlmICh0aGlzLmhhc0RpbWVuc2lvbnNUb0F1dG9zaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnpvbmUub25TdGFibGUucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NpemVEaW1lbnNpb25zSW5WaWV3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb250ZW50Q29sbGVjdGlvbihkaW1lbnN0aW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgbGV0IGNvbnRlbnRDb2xsZWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5oYXNIb3Jpem9udGFsTGF5b3V0KSB7XG4gICAgICAgICAgICBjb25zdCBhbGxNcmxDb250ZW50cyA9IHRoaXMucm93RGltZW5zaW9uTXJsUm93c0NvbGxlY3Rpb24ubWFwKG1ybFJvdyA9PiBtcmxSb3cuY29udGVudENlbGxzLnRvQXJyYXkoKSkuZmxhdCgpO1xuICAgICAgICAgICAgY29udGVudENvbGxlY3Rpb24gPSBhbGxNcmxDb250ZW50cy5maWx0ZXIoY2VsbCA9PiBjZWxsLnJvb3REaW1lbnNpb24gPT09IGRpbWVuc3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudENvbGxlY3Rpb24gPSB0aGlzLnJvd0RpbWVuc2lvbkNvbnRlbnRDb2xsZWN0aW9uLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudENvbGxlY3Rpb247XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGF1dG9TaXplRGltZW5zaW9uc0luVmlldygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0RpbWVuc2lvbnNUb0F1dG9zaXplKSByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgZGltIG9mIHRoaXMudmlzaWJsZVJvd0RpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChkaW0ud2lkdGggPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aHMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGVkRGltcyA9IFBpdm90VXRpbC5mbGF0dGVuKFtkaW1dKS5tYXAoeCA9PiB4Lm1lbWJlck5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRDb2xsZWN0aW9uID0gdGhpcy5nZXRDb250ZW50Q29sbGVjdGlvbihkaW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50Q29sbGVjdGlvbi5maWx0ZXIoeCA9PiByZWxhdGVkRGltcy5pbmRleE9mKHguZGltZW5zaW9uLm1lbWJlck5hbWUpICE9PSAtMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGNvbnRlbnQubWFwKHggPT4geC5oZWFkZXJHcm91cHMudG9BcnJheSgpKS5mbGF0KCkubWFwKHggPT4geC5oZWFkZXIgJiYgeC5oZWFkZXIucmVmSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiBjb250ZW50V2lkdGhzLnB1c2goaGVhZGVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCB8fCAwKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGl2b3RVSS5zaG93Um93SGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb25IZWFkZXIgPSB0aGlzLnRoZWFkUm93LnJvd0RpbWVuc2lvbkhlYWRlcnMuZmluZCh4ID0+IHguY29sdW1uLmZpZWxkID09PSBkaW0ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRXaWR0aHMucHVzaChwYXJzZUZsb2F0KHRoaXMuZ2V0TGFyZ2VzQ29udGVudFdpZHRoKFtkaW1lbnNpb25IZWFkZXJdKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5jb250ZW50V2lkdGhzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNlbGxzIG5vdCBpbiBET00geWV0Li4uXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTaXplID0gTWF0aC5jZWlsKE1hdGgubWF4KC4uLmNvbnRlbnRXaWR0aHMpKTtcbiAgICAgICAgICAgICAgICBkaW0uYXV0b1dpZHRoID0gbWF4U2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaGFzRGltZW5zaW9uc1RvQXV0b3NpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0RpbWVuc2lvbnMuc29tZSh4ID0+IHgud2lkdGggPT09ICdhdXRvJyAmJiAheC5hdXRvV2lkdGgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUZyb21EYXRhKGZpZWxkczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yO1xuICAgICAgICBjb25zdCBkYXRhQXJyID0gZmllbGRzLm1hcCh4ID0+IHguc3BsaXQoc2VwYXJhdG9yKSkuc29ydCh4ID0+IHgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgY29uc3QgY29sdW1uRGltZW5zaW9ucyA9ICBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLmNvbHVtbkRpbWVuc2lvbnMpO1xuICAgICAgICBkYXRhQXJyLmZvckVhY2goYXJyID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50SGllcmFyY2h5ID0gaGllcmFyY2h5O1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFtdO1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFycikge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0SGllcmFyY2h5ID0gY3VycmVudEhpZXJhcmNoeS5nZXQobmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRIaWVyYXJjaHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbkRpbWVuc2lvbiA9IGNvbHVtbkRpbWVuc2lvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50SGllcmFyY2h5LnNldChuZXdQYXRoLCB7IHZhbHVlOiBuZXdQYXRoLCBleHBhbmRhYmxlOiAhIWN1cnJlbnRDb2x1bW5EaW1lbnNpb24uY2hpbGRMZXZlbCwgY2hpbGRyZW46IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCksIGRpbWVuc2lvbjogY3VycmVudENvbHVtbkRpbWVuc2lvbiB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SGllcmFyY2h5ID0gY3VycmVudEhpZXJhcmNoeS5nZXQobmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIaWVyYXJjaHkgPSB0YXJnZXRIaWVyYXJjaHkuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoaWVyYXJjaHk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KGZpZWxkczogTWFwPHN0cmluZywgYW55PiwgZGF0YSwgcGFyZW50ID0gbnVsbCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgaWYgKGZpZWxkcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSB2YWx1ZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSB2YWx1ZS5tZW1iZXI7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbHVlLmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhLmxlbmd0aCA/IGRhdGFbMF1bdmFsdWUubWVtYmVyXSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWx1ZS5mb3JtYXR0ZXI7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSBmaWVsZHM7XG4gICAgICAgIGN1cnJlbnRGaWVsZHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBzaG91bGRHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlICYmICh2YWx1ZS5jaGlsZHJlbiA9PSBudWxsIHx8IHZhbHVlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5jaGlsZHJlbi5zaXplID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVDaGlsZHJlbiA9IHRoaXMuZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIGNvbCwgZmFsc2UsIHZhbHVlLmRpbWVuc2lvbi53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkR2VuZXJhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2VuZXJhdGVDb2x1bW5IaWVyYXJjaHkodmFsdWUuY2hpbGRyZW4sIGRhdGEsIGNvbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IGNvbC5sZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZWFzdXJlQ2hpbGRyZW4gPSB0aGlzLmdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBjb2wsIHRydWUsIHZhbHVlLmRpbWVuc2lvbi53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZENoaWxkcmVuID0gZmlsdGVyZWRDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zdCBhbGxDaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQobmVzdGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmcgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChzaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZUNoaWxkcmVuID0gdGhpcy5nZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgc2libGluZywgZmFsc2UsIHZhbHVlLmRpbWVuc2lvbj8ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZy5jaGlsZHJlbi5yZXNldChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChmaWx0ZXJlZENoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUNvbmZpZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdlbmVyYXRlRGF0YUZpZWxkcyhkYXRhKTtcbiAgICAgICAgY29uc3QgY29sdW1uRGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qgcm93RGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW10gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdID0gW107XG4gICAgICAgIGxldCBpc0ZpcnN0RGF0ZSA9IHRydWU7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0aGlzLnJlc29sdmVEYXRhVHlwZXMoZGF0YVswXVtmaWVsZF0pO1xuICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IElQaXZvdFZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcjogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBkYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnc3VtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTdW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdG9yTmFtZTogXCJTVU1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24gPSBuZXcgSWd4UGl2b3REYXRlRGltZW5zaW9uKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJOYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGlzRmlyc3REYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGRhdGFUeXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcm93RGltZW5zaW9ucy5wdXNoKGRpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgaXNGaXJzdERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyTmFtZTogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBkYXRhVHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5EaW1lbnNpb25zLnB1c2goZGltZW5zaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sdW1uRGltZW5zaW9ucyxcbiAgICAgICAgICAgIHJvd3M6IHJvd0RpbWVuc2lvbnMsXG4gICAgICAgICAgICB2YWx1ZXM6IHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlOiBhbnksIGRhdGE6IGFueSwgcGFyZW50OiBDb2x1bW5UeXBlLCBpc0dyb3VwOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICBjb25zdCByZWYgPSBpc0dyb3VwID9cbiAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSkgOlxuICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSBwYXJlbnQgIT0gbnVsbCA/IGtleS5zcGxpdChwYXJlbnQuaGVhZGVyICsgdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yKVsxXSA6IGtleTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0ga2V5O1xuICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLndpZHRoKSB7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSB2YWx1ZS5kaW1lbnNpb24ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVEZWZpbml0aW9uID0gdGhpcy52YWx1ZXNbMF07XG4gICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbHVlRGVmaW5pdGlvbj8uZGF0YVR5cGUgfHwgdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bdmFsdWVEZWZpbml0aW9uPy5tZW1iZXJdKTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmZvcm1hdHRlciA9IHZhbHVlRGVmaW5pdGlvbj8uZm9ybWF0dGVyO1xuICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm4gcmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ29sdW1uRGltZW5zaW9uV2lkdGgoZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgaWYgKGRpbS53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpbS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5taW5Db2x1bW5XaWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBwYXJlbnQsIGhpZGRlbiwgcGFyZW50V2lkdGgpIHtcbiAgICAgICAgY29uc3QgY29scyA9IFtdO1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY2hpbGRXaWR0aCA9IHBhcnNlSW50KHBhcmVudFdpZHRoLCAxMCkgLyBjb3VudDtcbiAgICAgICAgY29uc3QgaXNQZXJjZW50ID0gcGFyZW50V2lkdGggJiYgcGFyZW50V2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgY29uc3QgaXNBdXRvID0gcGFyZW50V2lkdGggJiYgcGFyZW50V2lkdGguaW5kZXhPZignYXV0bycpICE9PSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gdmFsLmRpc3BsYXlOYW1lIHx8IHZhbC5tZW1iZXI7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBwYXJlbnQuZmllbGQgKyB0aGlzLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IgKyB2YWwubWVtYmVyO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IGlzQXV0byA/ICdhdXRvJyA6IGlzUGVyY2VudCA/IGNoaWxkV2lkdGggKyAnJScgOiBjaGlsZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0aGlzLl9zb3J0YWJsZUNvbHVtbnM7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZGF0YVR5cGUgPSB2YWwuZGF0YVR5cGUgfHwgdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bdmFsLm1lbWJlcl0pO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZvcm1hdHRlciA9IHZhbC5mb3JtYXR0ZXI7XG4gICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29scy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBAVmlld0NoaWxkKCdlbXB0eVBpdm90R3JpZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGRlZmF1bHRFbXB0eVBpdm90R3JpZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIHRlbXBsYXRlIHdoZW4gcGl2b3QgZ3JpZCBpcyBlbXB0eS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZV09XCJteVRlbXBsYXRlXCI+PGlneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5UGl2b3RHcmlkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgY29uc3QgYWxsRW5hYmxlZERpbWVuc2lvbnMgPSB0aGlzLnJvd0RpbWVuc2lvbnMuY29uY2F0KHRoaXMuY29sdW1uRGltZW5zaW9ucyk7XG4gICAgICAgIGlmIChhbGxFbmFibGVkRGltZW5zaW9ucy5sZW5ndGggPT09IDAgJiYgdGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBubyBlbmFibGVkIHZhbHVlcyBhbmQgZGltZW5zaW9uc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRFbXB0eVBpdm90R3JpZFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci50ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRJbml0RXZlbnRzKHBpdm90Q29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLmFsbERpbWVuc2lvbnMpO1xuICAgICAgICBkaW1lbnNpb25zLmZvckVhY2goZGltID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uSW5pdC5lbWl0KGRpbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBwaXZvdENvbmZpZz8udmFsdWVzO1xuICAgICAgICB2YWx1ZXM/LmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJbml0LmVtaXQodmFsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJvd0RpbWVuc2lvbkJ5TmFtZShtZW1iZXJOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd0RpbWVuc2lvbnMuZmluZCgocm93RGltKSA9PiByb3dEaW0ubWVtYmVyTmFtZSA9PT0gbWVtYmVyTmFtZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNhbGN1bGF0ZVJlc2l6ZXJUb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90VUkuc2hvd1Jvd0hlYWRlcnMgP1xuICAgICAgICAgICAgKHRoaXMudGhlYWRSb3cucGl2b3RGaWx0ZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDApICsgKHRoaXMudGhlYWRSb3cucGl2b3RSb3dDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDApIDpcbiAgICAgICAgICAgIHRoaXMudGhlYWRSb3cubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZURlZmF1bHRSb3dIZWlnaHQoKSB7XG4gICAgICAgIHN1cGVyLnVwZGF0ZURlZmF1bHRSb3dIZWlnaHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzSG9yaXpvbnRhbExheW91dCkge1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBwaXBlcyB0byByZWNhbGMgaGVpZ2h0cyBmb3IgdGhlIGhvcml6b250YWwgbGF5b3V0IG1ybCByb3dzLlxuICAgICAgICAgICAgdGhpcy5yZWdyb3VwVHJpZ2dlcisrO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPCEtLSBUb29sYmFyIGFyZWEgLS0+XG48bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC10b29sYmFyLGlnYy1ncmlkLXRvb2xiYXJcIj48L25nLWNvbnRlbnQ+XG5cbjwhLS0gR3JpZCB0YWJsZSBoZWFkIHJvdyBhcmVhIC0tPlxuPGlneC1waXZvdC1oZWFkZXItcm93IGNsYXNzPVwiaWd4LWdyaWQtdGhlYWQgaWd4LWdyaWQtdGhlYWQtLXBpdm90XCIgdGFiaW5kZXg9XCIwXCJcbiAgICBbZ3JpZF09XCJ0aGlzXCJcbiAgICBbaGFzTVJMXT1cImhhc0NvbHVtbkxheW91dHNcIlxuICAgIFthY3RpdmVEZXNjZW5kYW50XT1cImFjdGl2ZURlc2NlbmRhbnRcIlxuICAgIFt3aWR0aF09XCJjYWxjV2lkdGhcIlxuICAgIFtwaW5uZWRDb2x1bW5Db2xsZWN0aW9uXT1cInBpbm5lZENvbHVtbnNcIlxuICAgIFt1bnBpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwidW5waW5uZWRDb2x1bW5zXCJcbiAgICAoa2V5ZG93bi5tZXRhLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uY29udHJvbC5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGVhZGVyTmF2aWdhdGlvbigkZXZlbnQpXCJcbiAgICAoc2Nyb2xsKT1cInByZXZlbnRIZWFkZXJTY3JvbGwoJGV2ZW50KVwiXG4+XG48L2lneC1waXZvdC1oZWFkZXItcm93PlxuXG48ZGl2IGlneEdyaWRCb2R5IChrZXlkb3duLmNvbnRyb2wuYyk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCIgKGNvcHkpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5XCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0RpbWVuc2lvbnMubGVuZ3RoID8gKGhhc0hvcml6b250YWxMYXlvdXQgPyBob3Jpem9udGFsUm93RGltZW5zaW9uc1RlbXBsYXRlIDogZGVmYXVsdFJvd0RpbWVuc2lvbnNUZW1wbGF0ZSkgOiBlbXB0eVJvd0RpbWVuc2lvbnNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktY29udGVudFwiIHRhYmluZGV4PVwiMFwiIFthdHRyLnJvbGVdPVwiZGF0YVZpZXcubGVuZ3RoID8gbnVsbCA6ICdyb3cnXCIgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIlxuICAgICAgICAoZHJhZ1N0b3ApPVwic2VsZWN0aW9uU2VydmljZS5kcmFnTW9kZSA9ICRldmVudFwiIChzY3JvbGwpPVwicHJldmVudENvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTY3JvbGwpPVwiZHJhZ1Njcm9sbCgkZXZlbnQpXCIgW2lneEdyaWREcmFnU2VsZWN0XT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGVcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCIgW3N0eWxlLndpZHRoLnB4XT1cInBpdm90Q29udGVudENhbGNXaWR0aCB8fCBudWxsXCIgI3Rib2R5IFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoIDw9IDBcIlxuICAgICAgICAgICAgW2lneENvbHVtbk1vdmluZ0Ryb3BdPVwiaGVhZGVyQ29udGFpbmVyXCIgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIiBpZD1cImxlZnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctbGVmdFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJoYXNNb3ZhYmxlQ29sdW1ucyAmJiBjb2x1bW5JbkRyYWcgJiYgcGlubmVkQ29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCIgaWQ9XCJsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLXBpbm5lZFwiIFtzdHlsZS5sZWZ0LnB4XT1cInBpbm5lZFdpZHRoXCI+PC9zcGFuPlxuICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBsZXQtcm93RGF0YSBbaWd4R3JpZEZvck9mXT1cImRhdGFcbiAgICAgICAgfCBwaXZvdEdyaWRGaWx0ZXI6cGl2b3RDb25maWd1cmF0aW9uOmZpbHRlclN0cmF0ZWd5OmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOmZpbHRlcmluZ1BpcGVUcmlnZ2VyOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkU29ydDpwaXZvdENvbmZpZ3VyYXRpb246c29ydFN0cmF0ZWd5OnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkUm93OnBpdm90Q29uZmlndXJhdGlvbjpwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneTpleHBhbnNpb25TdGF0ZXM6cGlwZVRyaWdnZXI6c29ydGluZ0V4cHJlc3Npb25zXG4gICAgICAgIHwgcGl2b3RHcmlkQ29sdW1uOnBpdm90Q29uZmlndXJhdGlvbjpwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneTpleHBhbnNpb25TdGF0ZXM6cGlwZVRyaWdnZXI6c29ydGluZ0V4cHJlc3Npb25zXG4gICAgICAgIHwgcGl2b3RHcmlkQXV0b1RyYW5zZm9ybTpwaXZvdENvbmZpZ3VyYXRpb246cGlwZVRyaWdnZXJcbiAgICAgICAgfCBwaXZvdEdyaWRDb2x1bW5Tb3J0OnNvcnRpbmdFeHByZXNzaW9uczpzb3J0U3RyYXRlZ3k6cGlwZVRyaWdnZXJcbiAgICAgICAgfCBwaXZvdEdyaWRSb3dFeHBhbnNpb246cGl2b3RDb25maWd1cmF0aW9uOmV4cGFuc2lvblN0YXRlczpkZWZhdWx0RXhwYW5kU3RhdGU6cGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBbaWd4Rm9yU2Nyb2xsT3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwidmVydGljYWxTY3JvbGxcIlxuICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPVwiY2FsY0hlaWdodFwiXG4gICAgICAgICAgICBbaWd4Rm9ySXRlbVNpemVdPVwiaGFzQ29sdW1uTGF5b3V0cyA/IHJvd0hlaWdodCAqIG11bHRpUm93TGF5b3V0Um93U2l6ZSArIDEgOiByZW5kZXJlZFJvd0hlaWdodFwiXG4gICAgICAgICAgICBbaWd4R3JpZEZvck9mVmFyaWFibGVTaXplc109XCJmYWxzZVwiXG4gICAgICAgICAgICAjdmVydGljYWxTY3JvbGxDb250YWluZXIgKGRhdGFDaGFuZ2luZyk9XCJkYXRhUmViaW5kaW5nKCRldmVudClcIiAoZGF0YUNoYW5nZWQpPVwiZGF0YVJlYm91bmQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW2lneFRlbXBsYXRlT3V0bGV0XT1cInJlY29yZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbaWd4VGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2FjaGVkVmlld0xvYWRlZCk9XCJjYWNoZWRWaWV3TG9hZGVkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVjb3JkX3RlbXBsYXRlIGxldC1yb3dJbmRleD1cImluZGV4XCIgbGV0LXJvd0RhdGE+XG4gICAgICAgICAgICA8aWd4LXBpdm90LXJvdyBbZ3JpZElEXT1cImlkXCIgW2luZGV4XT1cInJvd0luZGV4XCIgW2RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93Q2xhc3NlcyB8IGlneEdyaWRSb3dDbGFzc2VzOnJvdzpyb3cuaW5FZGl0TW9kZTpyb3cuc2VsZWN0ZWQ6cm93LmRpcnR5OnJvdy5kZWxldGVkOnJvdy5kcmFnZ2luZzpyb3dJbmRleDpoYXNDb2x1bW5MYXlvdXRzOmZhbHNlOnJvd0RhdGE6cGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJvd1N0eWxlcyB8IGlneEdyaWRSb3dTdHlsZXM6cm93RGF0YTpyb3dJbmRleDpwaXBlVHJpZ2dlclwiICNyb3c+XG4gICAgICAgICAgICA8L2lneC1waXZvdC1yb3c+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGhpcyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ2MtdHJpYWwtd2F0ZXJtYXJrPjwvaWdjLXRyaWFsLXdhdGVybWFyaz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlneFRvZ2dsZSAjbG9hZGluZ092ZXJsYXk+XG4gICAgICAgIDxpZ3gtY2lyY3VsYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIiAqbmdJZj1cInNob3VsZE92ZXJsYXlMb2FkaW5nXCI+XG4gICAgICAgIDwvaWd4LWNpcmN1bGFyLWJhcj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cImhhc01vdmFibGVDb2x1bW5zICYmIGNvbHVtbkluRHJhZ1wiIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgaWQ9XCJyaWdodFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLXJpZ2h0XCI+PC9zcGFuPlxuICAgIDxkaXYgW2hpZGRlbl09XCIhaGFzVmVydGljYWxTY3JvbGwoKVwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhclwiIFtzdHlsZS53aWR0aC5weF09XCJzY3JvbGxTaXplXCIgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyLXN0YXJ0XCIgW3N0eWxlLmhlaWdodC5weF09XCIgaXNSb3dQaW5uaW5nVG9Ub3AgPyBwaW5uZWRSb3dIZWlnaHQgOiAwXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyLW1haW5cIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhbGNIZWlnaHRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIFtpZ3hHcmlkRm9yT2ZdPVwiW11cIiAjdmVydGljYWxTY3JvbGxIb2xkZXI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyLWVuZFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiIWlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19hZGRyb3ctc25hY2tiYXJcIj5cbiAgICAgICAgPGlneC1zbmFja2JhciAjYWRkUm93U25hY2tiYXIgW291dGxldF09XCJpZ3hCb2R5T3ZlcmxheU91dGxldFwiIFthY3Rpb25UZXh0XT1cInJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9zbmFja2Jhcl9hZGRyb3dfYWN0aW9udGV4dFwiIFtkaXNwbGF5VGltZV09XCJzbmFja2JhckRpc3BsYXlUaW1lXCI+e3tyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2xhYmVsfX08L2lneC1zbmFja2Jhcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgI2lneEJvZHlPdmVybGF5T3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIiBpZ3hPdmVybGF5T3V0bGV0PjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxTaXplXCIgI3NjciBbaGlkZGVuXT1cImlzSG9yaXpvbnRhbFNjcm9sbEhpZGRlblwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLXN0YXJ0XCIgW3N0eWxlLndpZHRoLnB4XT1cInBpdm90UGlubmVkV2lkdGhcIiBbc3R5bGUubWluLXdpZHRoLnB4XT1cInBpdm90UGlubmVkV2lkdGhcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1tYWluXCIgW3N0eWxlLndpZHRoLnB4XT1cInBpdm90VW5waW5uZWRXaWR0aFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT1cIkVNUFRZX0RBVEFcIiAjc2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLWVuZFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCIgW2hpZGRlbl09XCJwaXZvdFBpbm5lZFdpZHRoID09PSAwIHx8IGlzUGlubmluZ1RvU3RhcnRcIj48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rmb290XCIgcm9sZT1cInJvd2dyb3VwXCIgI3Rmb290PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZm9vdGVyXCIgI2Zvb3Rlcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC1mb290ZXIsaWdjLWdyaWQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXJlZEdyaWQ+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktbWVzc2FnZVwiIHJvbGU9XCJjZWxsXCI+XG4gICAgICAgIDxzcGFuPnt7ZW1wdHlGaWx0ZXJlZEdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHlHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5R3JpZE1lc3NhZ2V9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nR3JpZD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmdcIj5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPGlneC1waXZvdC1ncmlkLWNvbHVtbi1yZXNpemVyIFtyZXN0cmljdFJlc2l6ZXJUb3BdPVwiY2FsY3VsYXRlUmVzaXplclRvcCgpXCIgKm5nSWY9XCJjb2xSZXNpemluZ1NlcnZpY2Uuc2hvd1Jlc2l6ZXJcIj48L2lneC1waXZvdC1ncmlkLWNvbHVtbi1yZXNpemVyPlxuPGRpdiBjbGFzcz1cImlneC1ncmlkX19sb2FkaW5nLW91dGxldFwiICNpZ3hMb2FkaW5nT3ZlcmxheU91dGxldCBpZ3hPdmVybGF5T3V0bGV0PjwvZGl2PlxuPGRpdiBjbGFzcz1cImlneC1ncmlkX19vdXRsZXRcIiAjaWd4RmlsdGVyaW5nT3ZlcmxheU91dGxldCBpZ3hPdmVybGF5T3V0bGV0PjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlIGxldC1jb2x1bW4+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190ci0taGVhZGVyXCI+XG4gICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBbbmFtZV09XCJnZXRDb2x1bW5Hcm91cEV4cGFuZFN0YXRlKGNvbHVtbikgPyAndHJlZV9leHBhbmQnIDogJ3RyZWVfY29sbGFwc2UnXCJcbiAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uKGNvbHVtbilcIj5cbiAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAge3tjb2x1bW4uaGVhZGVyfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd0RpbWVuc2lvbnNUZW1wbGF0ZT5cbiAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIFtzdHlsZS5oZWlnaHQucHhdPVwidG90YWxIZWlnaHRcIiAqbmdGb3I9XCJsZXQgZGltIG9mIHJvd0RpbWVuc2lvbnM7IGxldCBkaW1JbmRleCA9IGluZGV4O1wiICNyb3dEaW1lbnNpb25Db250YWluZXIgcm9sZT1cInJvd2dyb3VwXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktcGl2b3QtZGltZW5zaW9uXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCIgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgW2lneEdyaWRGb3JPZl09XCJkYXRhVmlld1xuICAgICAgICB8IHBpdm90R3JpZENlbGxNZXJnaW5nOnBpdm90Q29uZmlndXJhdGlvbjpkaW06cGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBbaWd4Rm9yU2Nyb2xsT3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwidmVydGljYWxTY3JvbGxcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPVwiY2FsY0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICBbaWd4Rm9ySXRlbVNpemVdPVwicmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvclNpemVQcm9wTmFtZV09XCInaGVpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAgICAjdmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXI+XG4gICAgICAgICAgICA8aWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudCByb2xlPVwicm93XCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZFwiIFtncmlkXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpbWVuc2lvbl09XCJyb3dEYXRhLmRpbWVuc2lvbnNbZGltSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb290RGltZW5zaW9uXT1cImRpbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJlbmRlcmVkUm93SGVpZ2h0ICogKHJvd0RhdGEucm93U3BhbiB8fCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIiBbcm93RGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCJyb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSlcIj5cbiAgICAgICAgICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaG9yaXpvbnRhbFJvd0RpbWVuc2lvbnNUZW1wbGF0ZT5cbiAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LW1ybC1kaW1lbnNpb25cIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIFtzdHlsZS5oZWlnaHQucHhdPVwidG90YWxIZWlnaHRcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIiAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhhbmRsZU5hdmlnYXRpb24oJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVZpZXcgfCBwaXZvdEdyaWRIb3Jpem9udGFsUm93R3JvdXBpbmc6cGl2b3RDb25maWd1cmF0aW9uOnBpcGVUcmlnZ2VyOnJlZ3JvdXBUcmlnZ2VyIGFzIGdyb3VwZWREYXRhXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGlneEdyaWRGb3IgbGV0LXJvd0dyb3VwIGxldC1yb3dJbmRleD1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2lneEdyaWRGb3JPZl09XCJncm91cGVkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCIndmVydGljYWwnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lneEZvclNjcm9sbENvbnRhaW5lcl09XCJ2ZXJ0aWNhbFNjcm9sbFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWd4Rm9ySXRlbVNpemVdPVwicmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWd4Rm9yU2l6ZVByb3BOYW1lXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aWd4LXBpdm90LXJvdy1kaW1lbnNpb24tbXJsLXJvdyBbcm93SW5kZXhdPVwicm93SW5kZXhcIiBbcm93R3JvdXBdPVwicm93R3JvdXBcIiBbZ3JvdXBlZERhdGFdPVwiZ3JvdXBlZERhdGFcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInJlbmRlcmVkUm93SGVpZ2h0ICogcm93R3JvdXAubGVuZ3RoXCI+PC9pZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1tcmwtcm93PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5Um93RGltZW5zaW9uc1RlbXBsYXRlPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgKm5nSWY9XCJjb2x1bW5EaW1lbnNpb25zLmxlbmd0aCA+IDAgfHwgdmFsdWVzLmxlbmd0aCA+IDBcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50IHJvbGU9XCJyb3dcIiBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgW2dyaWRdPVwidGhpc1wiXG4gICAgICAgICAgICBbZGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb290RGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCIwXCIgW3Jvd0RhdGFdPVwiZGF0YVZpZXdbMF1cIlxuICAgICAgICAgICAgW3dpZHRoXT1cInJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZW1wdHlSb3dEaW1lbnNpb24pXCI+XG4gICAgICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZT5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1tZXNzYWdlXCIgcm9sZT1cImNlbGxcIj5cbiAgICAgICAgPHNwYW4+e3tyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfZW1wdHlfbWVzc2FnZX19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgW2hpZGRlbl09XCJ0cnVlXCI+XG4gICAgPGlneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZyBbbWF4SGVpZ2h0XT1cImV4Y2VsU3R5bGVGaWx0ZXJNYXhIZWlnaHRcIiBbbWluSGVpZ2h0XT1cImV4Y2VsU3R5bGVGaWx0ZXJNaW5IZWlnaHRcIj5cbiAgICAgICAgPGRpdiBpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9ucyBbaGlkZGVuXT1cInRydWVcIj48L2Rpdj5cbiAgICAgICAgPGlneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICAgICAgICAgIDxpZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPjwvaWd4LWV4Y2VsLXN0eWxlLXNlYXJjaD5cbiAgICAgICAgPC9pZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnM+XG4gICAgPC9pZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmc+XG48L2Rpdj5cblxuQGlmIChwbGF0Zm9ybS5pc0VsZW1lbnRzKSB7XG4gICAgPGRpdiAjc2luayBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1ncmlkLXN0YXRlLGlnYy1ncmlkLXN0YXRlXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxufVxuIl19
|
|
2236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBRUwsU0FBUyxFQUdULE1BQU0sRUFDTixRQUFRLEVBRVIsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBR1osWUFBWSxFQUNaLGVBQWUsRUFFZixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBR25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0csT0FBTyxFQUF3QixhQUFhLEVBQXFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEgs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O3NCQUQxQixLQUFLO2dCQVdjLGVBQWU7c0JBRGxDLEtBQUs7Z0JBWWMsc0JBQXNCO3NCQUR6QyxLQUFLO2dCQVljLHFCQUFxQjtzQkFEeEMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkEwQmxCLFlBQVk7c0JBRC9CLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBbU4zQixFQUFFO3NCQUZaLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBa0JLLElBQUk7c0JBRGQsS0FBSztnQkFnTWMsWUFBWTtzQkFEL0IsS0FBSztnQkE2aUNDLDZCQUE2QjtzQkFEbkMsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFZakUsc0JBQXNCO3NCQUQ1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTE9DQUxFX0lELFxuICAgIE5nWm9uZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IGZpcnN0LCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZTeW5jU2VydmljZSwgSWd4Rm9yT2ZTY3JvbGxTeW5jU2VydmljZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UsIElneENvbHVtblRlbXBsYXRlQ29udGV4dCwgUm93VHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX1BJVk9UX0tFWVMsIElEaW1lbnNpb25zQ2hhbmdlLCBJZ3hQaXZvdEdyaWRWYWx1ZVRlbXBsYXRlQ29udGV4dCwgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWRFdmVudEFyZ3MsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIElWYWx1ZXNDaGFuZ2UsIFBpdm90RGltZW5zaW9uVHlwZSwgSVBpdm90VUlTZXR0aW5ncywgUGl2b3RSb3dMYXlvdXRUeXBlLCBQaXZvdFN1bW1hcnlQb3NpdGlvbiB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgRmlsdGVyTW9kZSwgR3JpZFBhZ2luZ01vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uLCBTaXplIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFdhdGNoQ2hhbmdlcyB9IGZyb20gJy4uL3dhdGNoLWNoYW5nZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElHcmlkRWRpdEV2ZW50QXJncyxcbiAgICBJQ2VsbFBvc2l0aW9uLFxuICAgIElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3MsIElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3MsIElDb2x1bW5Nb3ZpbmdTdGFydEV2ZW50QXJncyxcbiAgICBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWRFdmVudEFyZ3MsXG4gICAgSUdyaWRFZGl0RG9uZUV2ZW50QXJncyxcbiAgICBJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3MsXG4gICAgSVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzLFxuICAgIElQaW5Db2x1bW5FdmVudEFyZ3MsXG4gICAgSVBpblJvd0V2ZW50QXJncyxcbiAgICBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgSVJvd0RhdGFFdmVudEFyZ3MsXG4gICAgSVJvd0RyYWdFbmRFdmVudEFyZ3MsXG4gICAgSVJvd0RyYWdTdGFydEV2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wUG9zaXRpb24gfSBmcm9tICcuLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3ksIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9waXZvdC1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1ncmlkLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Bpdm90LWdyaWQvcGl2b3QtcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LCBJZ3hPdmVybGF5U2VydmljZSwgU3RhdGUsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IGNsb25lQXJyYXksIFBsYXRmb3JtVXRpbCwgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4UGl2b3RGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJZ3hHcmlkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvck9mRGF0YUNoYW5naW5nRXZlbnRBcmdzLCBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzaXppbmcvcGl2b3QtZ3JpZC9waXZvdC1yZXNpemVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24sIFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBQaXZvdFNvcnRVdGlsIH0gZnJvbSAnLi9waXZvdC1zb3J0LXV0aWwnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBJZ3hQaXZvdFZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9waXZvdC1ncmlkLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElneEdyaWRWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQvZ3JpZC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dQaXBlLCBJZ3hQaXZvdFJvd0V4cGFuc2lvblBpcGUsIElneFBpdm90QXV0b1RyYW5zZm9ybSwgSWd4UGl2b3RDb2x1bW5QaXBlLCBJZ3hQaXZvdEdyaWRGaWx0ZXJQaXBlLCBJZ3hQaXZvdEdyaWRTb3J0aW5nUGlwZSwgSWd4UGl2b3RHcmlkQ29sdW1uU29ydGluZ1BpcGUsIElneFBpdm90Q2VsbE1lcmdpbmdQaXBlLCBJZ3hQaXZvdEdyaWRIb3Jpem9udGFsUm93R3JvdXBpbmcgfSBmcm9tICcuL3Bpdm90LWdyaWQucGlwZXMnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NsYXNzZXNQaXBlLCBJZ3hHcmlkUm93U3R5bGVzUGlwZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUb2dnbGVEaXJlY3RpdmUsIElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93Q29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS1vdXRsZXQvdGVtcGxhdGVfb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRHJhZ1NlbGVjdERpcmVjdGl2ZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9kcmFnLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4R3JpZEJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERlZmF1bHREYXRhQ2xvbmVTdHJhdGVneSwgSURhdGFDbG9uZVN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtY2xvbmUtc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4VGV4dEhpZ2hsaWdodFNlcnZpY2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RleHQtaGlnaGxpZ2h0L3RleHQtaGlnaGxpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dIZWFkZXJHcm91cENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LWhlYWRlci1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UGl2b3REYXRlRGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkLWRpbWVuc2lvbnMnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dEaW1lbnNpb25NcmxSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LXJvdy1kaW1lbnNpb24tbXJsLXJvdy5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5jb25zdCBNSU5JTVVNX0NPTFVNTl9XSURUSCA9IDIwMDtcbmNvbnN0IE1JTklNVU1fQ09MVU1OX1dJRFRIX1NVUEVSX0NPTVBBQ1QgPSAxMDQ7XG5cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBDb2x1bW4gKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBDb2x1bW5Hcm91cCAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IENvbHVtbkxheW91dCAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRUb29sYmFyICovXG4vKiBibGF6b3JBZGRpdGlvbmFsRGVwZW5kZW5jeTogR3JpZFRvb2xiYXJBY3Rpb25zICovXG4vKiBibGF6b3JBZGRpdGlvbmFsRGVwZW5kZW5jeTogR3JpZFRvb2xiYXJUaXRsZSAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRUb29sYmFyQWR2YW5jZWRGaWx0ZXJpbmcgKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBHcmlkVG9vbGJhckV4cG9ydGVyICovXG4vKiBibGF6b3JBZGRpdGlvbmFsRGVwZW5kZW5jeTogR3JpZFRvb2xiYXJIaWRpbmcgKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBHcmlkVG9vbGJhclBpbm5pbmcgKi9cbi8qIGJsYXpvckFkZGl0aW9uYWxEZXBlbmRlbmN5OiBBY3Rpb25TdHJpcCAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRBY3Rpb25zQmFzZURpcmVjdGl2ZSAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRFZGl0aW5nQWN0aW9ucyAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IEdyaWRQaW5uaW5nQWN0aW9ucyAqL1xuLyogYmxhem9yQWRkaXRpb25hbERlcGVuZGVuY3k6IFBpdm90RGF0ZURpbWVuc2lvbiAqL1xuLyogYmxhem9ySW5kaXJlY3RSZW5kZXIgKi9cbi8qKlxuICogUGl2b3QgR3JpZCBwcm92aWRlcyBhIHdheSB0byBwcmVzZW50IGFuZCBtYW5pcHVsYXRlIGRhdGEgaW4gYSBwaXZvdCB0YWJsZSB2aWV3LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UGl2b3RHcmlkTW9kdWxlXG4gKiBAaWd4R3JvdXAgR3JpZHMgJiBMaXN0c1xuICogQGlneEtleXdvcmRzIHBpdm90LCBncmlkLCB0YWJsZVxuICogQGlneFRoZW1lIGlneC1ncmlkLXRoZW1lXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBQaXZvdCBHcmlkIGlzIHVzZWQgZm9yIGdyb3VwaW5nIGFuZCBhZ2dyZWdhdGluZyBzaW1wbGUgZmxhdCBkYXRhIGludG8gYSBwaXZvdCB0YWJsZS4gIE9uY2UgZGF0YVxuICogaGFzIGJlZW4gYm91bmQgYW5kIHRoZSBkaW1lbnNpb25zIGFuZCB2YWx1ZXMgY29uZmlndXJlZCBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgdmlhIHNvcnRpbmcgYW5kIGZpbHRlcmluZy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtwaXZvdENvbmZpZ3VyYXRpb25dPVwiY29uZmlndXJhdGlvblwiPlxuICogPC9pZ3gtcGl2b3QtZ3JpZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1waXZvdC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBHcmlkQmFzZUFQSVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0dSSURfQkFTRSwgdXNlRXhpc3Rpbmc6IElneFBpdm90R3JpZENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IElneEZpbHRlcmluZ1NlcnZpY2UsIHVzZUNsYXNzOiBJZ3hQaXZvdEZpbHRlcmluZ1NlcnZpY2UgfSxcbiAgICAgICAgSWd4UGl2b3RHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIElneFBpdm90Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlN5bmNTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkQm9keURpcmVjdGl2ZSxcbiAgICAgICAgSWd4R3JpZERyYWdTZWxlY3REaXJlY3RpdmUsXG4gICAgICAgIElneENvbHVtbk1vdmluZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIElneEdyaWRGb3JPZkRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUsXG4gICAgICAgIElneFBpdm90Um93Q29tcG9uZW50LFxuICAgICAgICBJZ3hUb2dnbGVEaXJlY3RpdmUsXG4gICAgICAgIElneENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgICAgIElneFNuYWNrYmFyQ29tcG9uZW50LFxuICAgICAgICBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LFxuICAgICAgICBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkUm93Q2xhc3Nlc1BpcGUsXG4gICAgICAgIElneEdyaWRSb3dTdHlsZXNQaXBlLFxuICAgICAgICBJZ3hQaXZvdFJvd1BpcGUsXG4gICAgICAgIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSxcbiAgICAgICAgSWd4UGl2b3RBdXRvVHJhbnNmb3JtLFxuICAgICAgICBJZ3hQaXZvdENvbHVtblBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZEZpbHRlclBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZFNvcnRpbmdQaXBlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSxcbiAgICAgICAgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGUsXG4gICAgICAgIElneFBpdm90R3JpZEhvcml6b250YWxSb3dHcm91cGluZyxcbiAgICAgICAgSWd4UGl2b3RSb3dEaW1lbnNpb25NcmxSb3dDb21wb25lbnRcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQgZXh0ZW5kcyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBHcmlkVHlwZSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZGltZW5zaW9uIGNvbGxlY3Rpb24gaXMgY2hhbmdlZCB2aWEgdGhlIGdyaWQgY2hpcCBhcmVhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIHRoZSBuZXcgZGltZW5zaW9uIGNvbGxlY3Rpb24gYW5kIGl0cyB0eXBlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAoZGltZW5zaW9uc0NoYW5nZSk9XCJkaW1lbnNpb25zQ2hhbmdlKCRldmVudClcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkaW1lbnNpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJRGltZW5zaW9uc0NoYW5nZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbnkgb2YgdGhlIHBpdm90Q29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAocGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZCk9XCJjb25maWd1cmF0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJUGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZEV2ZW50QXJncz4oKTtcblxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBkaW1lbnNpb24gaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgZGltZW5zaW9uIHRoYXQgaXMgYWJvdXQgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChkaW1lbnNpb25Jbml0KT1cImRpbWVuc2lvbkluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRpbWVuc2lvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaXZvdERpbWVuc2lvbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgdmFsdWUgdGhhdCBpcyBhYm91dCB0byBiZSBpbml0aWFsaXplZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKHZhbHVlSW5pdCk9XCJ2YWx1ZUluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpdm90VmFsdWU+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhIGRpbWVuc2lvbiBpcyBzb3J0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UpPVwiZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZhbHVlcyBjb2xsZWN0aW9uIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyB0aGUgbmV3IGRpbWVuc2lvblxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAodmFsdWVzQ2hhbmdlKT1cInZhbHVlc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElWYWx1ZXNDaGFuZ2U+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNvcnRpbmcgZXhwcmVzc2lvbnMgZ2VuZXJhdGVkIGZvciB0aGUgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cHJlc3Npb25zID0gdGhpcy5ncmlkLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zKCkge1xuICAgICAgICBjb25zdCBhbGxFbmFibGVkRGltZW5zaW9ucyA9IHRoaXMucm93RGltZW5zaW9ucy5jb25jYXQodGhpcy5jb2x1bW5EaW1lbnNpb25zKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucyA9IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoYWxsRW5hYmxlZERpbWVuc2lvbnMpO1xuICAgICAgICByZXR1cm4gZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSB0aGVhZFJvdzogSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCB2YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneFBpdm90Um93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uSGVhZGVyRGlyZWN0aXZlOiBJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgdmFsdWUgY2hpcHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3ZhbHVlQ2hpcFRlbXBsYXRlXT1cIm15VGVtcGxhdGVcIj48aWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneFBpdm90R3JpZFZhbHVlVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hDb2x1bW5UZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgLyogbXVzdFNldEluQ29kZVBsYXRmb3JtczogV2ViQ29tcG9uZW50cztCbGF6b3I7UmVhY3QgKi9cbiAgICAvKiBAdHNUd29XYXlQcm9wZXJ0eSAodHJ1ZSwgXCJQaXZvdENvbmZpZ3VyYXRpb25DaGFuZ2VcIiwgXCJEZXRhaWwuUGl2b3RDb25maWd1cmF0aW9uXCIsIGZhbHNlKSAqL1xuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcGl2b3QgY29uZmlndXJhdGlvbiB3aXRoIGFsbCByZWxhdGVkIGRpbWVuc2lvbnMgYW5kIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbcGl2b3RDb25maWd1cmF0aW9uXT1cImNvbmZpZ1wiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHBpdm90Q29uZmlndXJhdGlvbih2YWx1ZTogSVBpdm90Q29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lbWl0SW5pdEV2ZW50cyh0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IFBpdm90VXRpbC5idWlsZEV4cHJlc3Npb25UcmVlKHZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiBtdXN0U2V0SW5Db2RlUGxhdGZvcm1zOiBXZWJDb21wb25lbnRzO0JsYXpvciAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RDb25maWd1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RDb25maWd1cmF0aW9uIHx8IHsgcm93czogbnVsbCwgY29sdW1uczogbnVsbCwgdmFsdWVzOiBudWxsLCBmaWx0ZXJzOiBudWxsIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHdoZXRoZXIgdG8gYXV0by1nZW5lcmF0ZSB0aGUgcGl2b3QgY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuIFdoZW4gc2V0IHRvIHRydWUsIGl0IHdpbGwgb3ZlcnJpZGUgYWxsIGRpbWVuc2lvbnMgYW5kIHZhbHVlcyBpbiB0aGUgcGl2b3RDb25maWd1cmF0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZUNvbmZpZ109XCJ0cnVlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgYXV0b0dlbmVyYXRlQ29uZmlnID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcGl2b3QgdWkgc2V0dGluZ3MgZm9yIHRoZSBwaXZvdCBncmlkIC0gY2hpcHMgYW5kIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyBjb250YWluZXJzIGZvciByb3csIGZpbHRlciwgY29sdW1uIGRpbWVuc2lvbnMgYW5kIHZhbHVlc1xuICAgICAqIGFzIHdlbGwgYXMgaGVhZGVycyBmb3IgdGhlIHJvdyBkaW1lbnNpb25zIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3Bpdm90VUldPVwieyBzaG93Um93SGVhZGVyczogdHJ1ZSB9XCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHBpdm90VUkodmFsdWU6IElQaXZvdFVJU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcGl2b3RVSSA9IE9iamVjdC5hc3NpZ24odGhpcy5fcGl2b3RVSSwgdmFsdWUgfHwge30pO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBpdm90VUkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXZvdFVJO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWQnO1xuXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGEgc3VwZXIgY29tcGFjdCB0aGVtZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE92ZXJyaWRlcyB0aGUgZ3JpZCBzaXplIG9wdGlvbiBpZiBvbmUgaXMgc2V0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbc3VwZXJDb21wYWN0TW9kZV09XCJ0cnVlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX19waXZvdC0tc3VwZXItY29tcGFjdCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHN1cGVyQ29tcGFjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdXBlckNvbXBhY3RNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc3VwZXJDb21wYWN0TW9kZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9zdXBlckNvbXBhY3RNb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBncmlkU2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwZXJDb21wYWN0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIFNpemUuU21hbGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdyaWRTaXplO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZXMgY2xvbmUgc3RyYXRlZ3kgb2YgdGhlIHBpdm90IGdyaWQgd2hlbiBhc3NpZ25pbmcgdGhlbSB0byBkaWZmZXJlbnQgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW3Bpdm90VmFsdWVDbG9uZVN0cmF0ZWd5XT1cImN1c3RvbUNsb25lU3RyYXRlZ3lcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5KCk6IElEYXRhQ2xvbmVTdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5KHN0cmF0ZWd5OiBJRGF0YUNsb25lU3RyYXRlZ3kpIHtcbiAgICAgICAgaWYgKHN0cmF0ZWd5KSB7XG4gICAgICAgICAgICB0aGlzLl9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdyZWNvcmRfdGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgcmVjb3JkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlclRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCdyb3dEaW1lbnNpb25Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgcm93RGltZW5zaW9uQ29udGFpbmVyOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBvdmVycmlkZSByZXNpemVMaW5lOiBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LCB7IHJlYWQ6IElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50IH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnRzOiBRdWVyeUxpc3Q8SWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudClcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uQ29udGVudENvbGxlY3Rpb246IFF1ZXJ5TGlzdDxJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IG1pbkNvbHVtbldpZHRoKCkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEhfU1VQRVJfQ09NUEFDVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbigndmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55LCBhbnlbXT4+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFBpdm90Um93RGltZW5zaW9uTXJsUm93Q29tcG9uZW50KVxuICAgIHB1YmxpYyByb3dEaW1lbnNpb25NcmxSb3dzQ29sbGVjdGlvbjogUXVlcnlMaXN0PElneFBpdm90Um93RGltZW5zaW9uTXJsUm93Q29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93RW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGF1dG9HZW5lcmF0ZUV4Y2x1ZGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNuYWNrYmFyRGlzcGxheVRpbWUgPSA2MDAwO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RXhpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nU3RhcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5QaW4gPSBuZXcgRXZlbnRFbWl0dGVyPElQaW5Db2x1bW5DYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtblBpbm5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpbkNvbHVtbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhQ2FuY2VsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RyYWdTdGFydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEcmFnRW5kRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0RG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXRFeGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93UGlubmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpblJvd0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd1Bpbm5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpblJvd0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjb2x1bW5Hcm91cFN0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaW1lbnNpb25EYXRhQ29sdW1uczogYW55W107XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaXZvdEtleXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5waXZvdEtleXMgfHwgREVGQVVMVF9QSVZPVF9LRVlTO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHR5cGUoKTogR3JpZFR5cGVbXCJ0eXBlXCJdIHtcbiAgICAgICAgcmV0dXJuICdwaXZvdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZHJhZ1Jvd0lEID0gbnVsbDtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm9vdFN1bW1hcmllc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dEaW1lbnNpb25SZXNpemluZyA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9lbXB0eVJvd0RpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0geyBtZW1iZXJOYW1lOiAnJywgZW5hYmxlZDogdHJ1ZSwgbGV2ZWw6IDAgfTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZW1wdHlSb3dEaW1lbnNpb24oKTogSVBpdm90RGltZW5zaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtcHR5Um93RGltZW5zaW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneSA9IG5ldyBEZWZhdWx0RGF0YUNsb25lU3RyYXRlZ3koKTtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZmlsdGVyU3RyYXRlZ3k6IElGaWx0ZXJpbmdTdHJhdGVneSA9IG5ldyBEaW1lbnNpb25WYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSgpO1xuICAgIHByb3RlY3RlZCByZWdyb3VwVHJpZ2dlciA9IDA7XG4gICAgcHJpdmF0ZSBfZGF0YTtcbiAgICBwcml2YXRlIF9waXZvdENvbmZpZ3VyYXRpb246IElQaXZvdENvbmZpZ3VyYXRpb24gPSB7IHJvd3M6IG51bGwsIGNvbHVtbnM6IG51bGwsIHZhbHVlczogbnVsbCwgZmlsdGVyczogbnVsbCB9O1xuICAgIHByaXZhdGUgcF9pZCA9IGBpZ3gtcGl2b3QtZ3JpZC0ke05FWFRfSUQrK31gO1xuICAgIHByaXZhdGUgX3N1cGVyQ29tcGFjdE1vZGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9waXZvdFVJOiBJUGl2b3RVSVNldHRpbmdzID0ge1xuICAgICAgICBzaG93Q29uZmlndXJhdGlvbjogdHJ1ZSxcbiAgICAgICAgc2hvd1Jvd0hlYWRlcnM6IGZhbHNlLFxuICAgICAgICByb3dMYXlvdXQ6IFBpdm90Um93TGF5b3V0VHlwZS5WZXJ0aWNhbCxcbiAgICAgICAgaG9yaXpvbnRhbFN1bW1hcmllc1Bvc2l0aW9uOiBQaXZvdFN1bW1hcnlQb3NpdGlvbi5Cb3R0b21cbiAgICB9O1xuICAgIHByaXZhdGUgX3NvcnRhYmxlQ29sdW1ucyA9IHRydWU7XG4gICAgcHJpdmF0ZSBfdmlzaWJsZVJvd0RpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdID0gW107XG4gICAgcHJpdmF0ZSBfc2hvdWxkVXBkYXRlU2l6ZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICogR2V0cy9TZXRzIHRoZSBkZWZhdWx0IGV4cGFuZCBzdGF0ZSBmb3IgYWxsIHJvd3MuXG4gICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRFeHBhbmRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRFeHBhbmRTdGF0ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBhZ2luZ01vZGUoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBhZ2luZ01vZGUoX3ZhbDogR3JpZFBhZ2luZ01vZGUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBXYXRjaENoYW5nZXMoKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGlkZVJvd1NlbGVjdG9ycygpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgaGlkZVJvd1NlbGVjdG9ycyhfdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhdXRvR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvblN0cmlwKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIGFueTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTguMi4wLiBUaGlzIHByb3BlcnR5IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzaG91bGRHZW5lcmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2hvdWxkR2VuZXJhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvb2xiYXJFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkVG9vbGJhckV4cG9ydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RHJhZ2dhYmxlKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYWxsb3dBZHZhbmNlZEZpbHRlcmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYWxsb3dBZHZhbmNlZEZpbHRlcmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBmaWx0ZXJNb2RlKCkge1xuICAgICAgICByZXR1cm4gRmlsdGVyTW9kZS5xdWlja0ZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGZpbHRlck1vZGUoX3ZhbHVlOiBGaWx0ZXJNb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFsbG93RmlsdGVyaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBhbGxvd0ZpbHRlcmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGFnZShfdmFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwZXJQYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBlclBhZ2UoX3ZhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB1bnBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gc3VwZXIudW5waW5uZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWREYXRhVmlldygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBzdXBlci51bnBpbm5lZERhdGFWaWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGlubmVkV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIucGlubmVkV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVJvd0hlaWdodChfdmFsdWU6IG51bWJlcikge1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeVJvd0hlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdHJhbnNhY3Rpb25zKCk6IFRyYW5zYWN0aW9uU2VydmljZTxUcmFuc2FjdGlvbiwgU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9ucztcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUoX3ZhbDogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFdhdGNoQ2hhbmdlcygpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RWRpdGFibGUoX3ZhbDogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwaW5uaW5nKF92YWx1ZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVBvc2l0aW9uKF92YWx1ZTogR3JpZFN1bW1hcnlQb3NpdGlvbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZShfdmFsdWU6IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJhbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2hvd1N1bW1hcnlPbkNvbGxhcHNlKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzaG93U3VtbWFyeU9uQ29sbGFwc2UoX3ZhbHVlOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhpZGRlbkNvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZENvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJhdGNoRWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYmF0Y2hFZGl0aW5nKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKiBjc1N1cHByZXNzICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWxlY3RlZFJvd3MoKTogYW55W10ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93SWRzID0gW107XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy5yb3dEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlY29yZCwgY3VyckRpbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNQaXZvdFJvd1NlbGVjdGVkKGtleSkgJiYgIXNlbGVjdGVkUm93SWRzLmZpbmQoeCA9PiB4ID09PSByZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvd0lkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyRGltID0gY3VyckRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJEaW0pO1xuICAgICAgICAgICAgICAgIHByZXYucHVzaChkaW0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93SWRzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB2YWxpZGF0aW9uU2VydmljZTogSWd4R3JpZFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LFxuICAgICAgICB0cmFuc2FjdGlvbkZhY3Rvcnk6IElneEZsYXRUcmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgZW52SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIG5hdmlnYXRpb246IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICB0ZXh0SGlnaGxpZ2h0U2VydmljZTogSWd4VGV4dEhpZ2hsaWdodFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSWd4R3JpZFRyYW5zYWN0aW9uKSBfZGlUcmFuc2FjdGlvbnM/OiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPlxuICAgICkge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgZGlmZmVycyxcbiAgICAgICAgICAgIHZpZXdSZWYsXG4gICAgICAgICAgICBpbmplY3RvcixcbiAgICAgICAgICAgIGVudkluamVjdG9yLFxuICAgICAgICAgICAgbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgICAgICB0ZXh0SGlnaGxpZ2h0U2VydmljZSxcbiAgICAgICAgICAgIG92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICAgICAgc3VtbWFyeVNlcnZpY2UsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgICAgX2RpVHJhbnNhY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBwaXZvdCBncmlkIGFsd2F5cyBnZW5lcmF0ZXMgY29sdW1ucyBhdXRvbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLmF1dG9HZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIGlnbm9yZSBhbnkgdXNlciBkZWZpbmVkIGNvbHVtbnMgYW5kIGF1dG8tZ2VuZXJhdGUgYmFzZWQgb24gcGl2b3QgY29uZmlnLlxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoW10pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9HZW5lcmF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb25maWcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy52YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoaXBUZW1wbGF0ZSA9IHRoaXMudmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm93RGltZW5zaW9uSGVhZGVyRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlID0gdGhpcy5yb3dEaW1lbnNpb25IZWFkZXJEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuc3VwZXJDb21wYWN0TW9kZSAmJiAhY2hhbmdlcy5zdXBlckNvbXBhY3RNb2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkVXBkYXRlU2l6ZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmRpc3BsYXlDb250YWluZXIpLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNpemVOb3RpZnkubmV4dCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIGZvciBkaW1lbnNpb24gY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlEaW1lbnNpb25DaGFuZ2UocmVnZW5lcmF0ZUNvbHVtbnMgPSBmYWxzZSkge1xuICAgICAgICBpZiAocmVnZW5lcmF0ZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZnVsbCBsaXN0IG9mIGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiAoY29uZmlnLnJvd3MgfHwgW10pLmNvbmNhdCgoY29uZmlnLmNvbHVtbnMgfHwgW10pKS5jb25jYXQoY29uZmlnLmZpbHRlcnMgfHwgW10pLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGFsbFZpc2libGVEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIGNvbnN0IHVuaXF1ZVZpc2libGVSb3dEaW1zID0gdGhpcy52aXNpYmxlUm93RGltZW5zaW9ucy5maWx0ZXIoZGltID0+ICFjb25maWcucm93cy5maW5kKGNvbmZpZ1JvdyA9PiBjb25maWdSb3cubWVtYmVyTmFtZSA9PT0gZGltLm1lbWJlck5hbWUpKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IChjb25maWcucm93cyB8fCBbXSkuY29uY2F0KC4uLnVuaXF1ZVZpc2libGVSb3dEaW1zKTtcbiAgICAgICAgcmV0dXJuIHJvd3MuY29uY2F0KChjb25maWcuY29sdW1ucyB8fCBbXSkpLmNvbmNhdChjb25maWcuZmlsdGVycyB8fCBbXSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCAmJiB4ICE9PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgc2hvdWxkUmVzaXplKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YVJvd0xpc3QuZmlyc3Q/LmNlbGxzIHx8IHRoaXMuZGF0YVJvd0xpc3QuZmlyc3QuY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaXplUHJvcENoYW5nZWQgPSBzdXBlci5zaG91bGRSZXNpemU7XG4gICAgICAgIGlmIChpc1NpemVQcm9wQ2hhbmdlZCB8fCB0aGlzLl9zaG91bGRVcGRhdGVTaXplcykge1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkVXBkYXRlU2l6ZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyRVNGKGRyb3Bkb3duOiBhbnksIGNvbHVtbjogQ29sdW1uVHlwZSwgb3B0aW9uczogT3ZlcmxheVNldHRpbmdzLCBzaG91bGRSZWF0YWNoOiBib29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIGlmIChkcm9wZG93bikge1xuICAgICAgICAgICAgZHJvcGRvd24uaW5pdGlhbGl6ZShjb2x1bW4sIHRoaXMub3ZlcmxheVNlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlYXRhY2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKGRyb3Bkb3duLmVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCA9IGlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCByZWY6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCwgcmVmOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZlYXR1cmVDb2x1bW5zV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Um93V2lkdGhzIHx8IDA7XG4gICAgfVxuXG4gICAgLyogYmxhem9yU3VwcHJlc3MgKi9cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtpZF09XCInaWd4LXBpdm90LTEnXCIgW2RhdGFdPVwiRGF0YVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucF9pZDtcbiAgICB9XG4gICAgLyogYmxhem9yU3VwcHJlc3MgKi9cbiAgICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyogdHJlYXRBc1JlZiAqL1xuICAgIC8qIGJsYXpvckFsdGVybmF0ZVR5cGU6IG9iamVjdCAqL1xuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgYXJyYXkgb2YgZGF0YSB0aGF0IHBvcHVsYXRlcyB0aGUgY29tcG9uZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiRGF0YVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWUgfHwgW107XG4gICAgICAgIGlmICghdGhpcy5faW5pdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0dlbmVyYXRlQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNvbmZpZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLmhlaWdodC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaGVpZ2h0IHdpbGwgY2hhbmdlIGJhc2VkIG9uIGhvdyBtdWNoIGRhdGEgdGhlcmUgaXMsIHJlY2FsY3VsYXRlIHNpemVzIGluIGlneEZvck9mLlxuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyogdHJlYXRBc1JlZiAqL1xuICAgIC8qIGJsYXpvckFsdGVybmF0ZVR5cGU6IG9iamVjdCAqL1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBzZXQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRhdGEgPSB0aGlzLmdyaWQuZGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55W10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogcm93RGF0YSxcbiAgICAgICAgICAgIHRlbXBsYXRlSUQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0YVJvdycsXG4gICAgICAgICAgICAgICAgaWQ6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleDogdGhpcy5nZXREYXRhVmlld0luZGV4KHJvd0luZGV4LCBmYWxzZSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RSb3dXaWR0aHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dEaW1lbnNpb25zLmxlbmd0aCA/IHRoaXMudmlzaWJsZVJvd0RpbWVuc2lvbnMucmVkdWNlKChhY2N1bXVsYXRvciwgZGltKSA9PiBhY2N1bXVsYXRvciArIHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0pLCAwKSA6XG4gICAgICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHModGhpcy5lbXB0eVJvd0RpbWVuc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uV2lkdGgoZGltKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaXNBdXRvID0gZGltLndpZHRoICYmIGRpbS53aWR0aC5pbmRleE9mKCdhdXRvJykgIT09IC0xO1xuICAgICAgICBpZiAoaXNBdXRvKSB7XG4gICAgICAgICAgICByZXR1cm4gZGltLmF1dG9XaWR0aCA/IGRpbS5hdXRvV2lkdGggKyAncHgnIDogJ2ZpdC1jb250ZW50JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKSArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbTogSVBpdm90RGltZW5zaW9uKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFkaW0/LndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNQZXJjZW50ID0gZGltLndpZHRoICYmIGRpbS53aWR0aC5pbmRleE9mKCclJykgIT09IC0xO1xuICAgICAgICBjb25zdCBpc0F1dG8gPSBkaW0ud2lkdGggJiYgZGltLndpZHRoLmluZGV4T2YoJ2F1dG8nKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc1BlcmNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZGltLndpZHRoKSAvIDEwMCAqIHRoaXMuY2FsY1dpZHRoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0F1dG8pIHtcbiAgICAgICAgICAgIHJldHVybiBkaW0uYXV0b1dpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGRpbS53aWR0aCwgMTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmV2ZXJzZURpbWVuc2lvbldpZHRoVG9QZXJjZW50KHdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHdpZHRoICogMTAwIC8gdGhpcy5jYWxjV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RDb250ZW50Q2FsY1dpZHRoKCkge1xuICAgICAgICBjb25zdCB0b3RhbERpbVdpZHRoID0gdGhpcy5yb3dEaW1lbnNpb25zLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgdGhpcy5yb3dEaW1lbnNpb25zLm1hcCgoZGltKSA9PiB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKSkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIpIDpcbiAgICAgICAgICAgIDA7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGNXaWR0aCAtIHRvdGFsRGltV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaXZvdFBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2luaXQgPyAodGhpcy5pc1Bpbm5pbmdUb1N0YXJ0ID8gdGhpcy5waW5uZWRXaWR0aCA6IHRoaXMuaGVhZGVyRmVhdHVyZXNXaWR0aCkgOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RVbnBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bnBpbm5lZFdpZHRoIHx8IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCByb3dEaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IHZpc2libGVSb3dEaW1lbnNpb25zKHZhbHVlOiBJUGl2b3REaW1lbnNpb25bXSkge1xuICAgICAgICB0aGlzLl92aXNpYmxlUm93RGltZW5zaW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZVJvd0RpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93RGltZW5zaW9ucyB8fCB0aGlzLnJvd0RpbWVuc2lvbnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBjb2x1bW5EaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVDb2x1bW4oY29sOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChjb2wuZmllbGQpO1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9ICFzdGF0ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5zZXQoY29sLmZpZWxkLCBuZXdTdGF0ZSk7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93R3JvdXAoY29sLCBuZXdTdGF0ZSk7XG4gICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgaXNSZWNvcmRQaW5uZWRCeUluZGV4KF9yb3dJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvZ2dsZUNvbHVtblZpc2liaWxpdHkoX2FyZ3M6IElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXhwYW5kQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGV4cGFuZFJvdyhfcm93SUQ6IGFueSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlUm93KF9yb3dJRDogYW55KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd3MoKTogSWd4R3JpZFJvd0NvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB0b3RhbFJlY29yZHMoX3RvdGFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZlQ29sdW1uKF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgX3RhcmdldDogSWd4Q29sdW1uQ29tcG9uZW50LCBfcG9zOiBEcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93KF9kYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkZWxldGVSb3coX3Jvd1NlbGVjdG9yOiBhbnkpOiBhbnkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVwZGF0ZUNlbGwoX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55LCBfY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1cGRhdGVSb3coX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5hYmxlU3VtbWFyaWVzKC4uLl9yZXN0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGlzYWJsZVN1bW1hcmllcyguLi5fcmVzdCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1bnBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBwaW5Sb3coX3Jvd0lEOiBhbnksIF9pbmRleD86IG51bWJlciwgX3Jvdz86IFJvd1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVucGluUm93KF9yb3dJRDogYW55LCBfcm93PzogUm93VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd0hlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoYXNFZGl0YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzU3VtbWFyaXplZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzTW92YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9vdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbG9zZUFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9hcHBseUNoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlbmRFZGl0KF9jb21taXQgPSB0cnVlLCBfZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYmVnaW5BZGRSb3dCeUlkKF9yb3dJRDogYW55LCBfYXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBiZWdpbkFkZFJvd0J5SW5kZXgoX2luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbGVhclNlYXJjaCgpIHsgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZnJlc2hTZWFyY2goX3VwZGF0ZUFjdGl2ZUluZm8/OiBib29sZWFuLCBfZW5kRWRpdCA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZE5leHQoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZFByZXYoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0TmV4dENlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLFxuICAgICAgICBjYWxsYmFjazogKElneENvbHVtbkNvbXBvbmVudCkgPT4gYm9vbGVhbiA9IG51bGwpOiBJQ2VsbFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5leHRDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFByZXZpb3VzQ2VsbChjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyVmlzaWJsZUNvbEluZGV4OiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoSWd4Q29sdW1uQ29tcG9uZW50KSA9PiBib29sZWFuID0gbnVsbCk6IElDZWxsUG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UHJldmlvdXNDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFBpbm5lZFdpZHRoKHRha2VIaWRkZW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UGlubmVkV2lkdGgodGFrZUhpZGRlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjSGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5Hcm91cEV4cGFuZFN0YXRlKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgLy8gY29sdW1ucyBhcmUgZXhwYW5kZWQgYnkgZGVmYXVsdD9cbiAgICAgICAgcmV0dXJuIHN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IG51bGwgPyBzdGF0ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVSb3dHcm91cChjb2w6IElneENvbHVtbkNvbXBvbmVudCwgbmV3U3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbi50b0FycmF5KCkgOiB0aGlzLl9hdXRvR2VuZXJhdGVkQ29scy5maWx0ZXIoeCA9PiB4LmxldmVsID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdDb2wgPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmIHggIT09IGNvbClbMF07XG4gICAgICAgICAgICBjb25zdCBjdXJySW5kZXggPSBwYXJlbnRDb2xzLmluZGV4T2YoY29sKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdJbmRleCA9IHBhcmVudENvbHMuaW5kZXhPZihzaWJsaW5nQ29sKTtcbiAgICAgICAgICAgIGlmIChjdXJySW5kZXggPCBzaWJsaW5nSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2VkIG9uIHRoZSBmdWxsIGhpZXJhcmNoeSBoZWFkZXJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoY29sLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgc2libGluZ0NvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNrZWQgb24gc3VtbWFyeSBwYXJlbnQgY29sdW1uIHRoYXQgY29udGFpbnMganVzdCB0aGUgbWVhc3VyZXNcbiAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKHNpYmxpbmdDb2wsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW4gPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmICF4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gcGFyZW50Q29scy5maWx0ZXIoeCA9PiB4LmhlYWRlciA9PT0gY29sLmhlYWRlciAmJiB4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShncm91cENvbHVtbiwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgZmllbGRDb2x1bW4uaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZENvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXR1cENvbHVtbnMoKSB7XG4gICAgICAgIHN1cGVyLnNldHVwQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkYXRhUmViaW5kaW5nKGV2ZW50OiBJRm9yT2ZEYXRhQ2hhbmdpbmdFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzSG9yaXpvbnRhbExheW91dCkge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5kYXRhUmViaW5kaW5nKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdXRvLXNpemVzIHJvdyBkaW1lbnNpb24gY2VsbHMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE9ubHkgc2l6ZXMgYmFzZWQgb24gdGhlIGRpbWVuc2lvbiBjZWxscyBpbiB2aWV3LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5hdXRvU2l6ZVJvd0RpbWVuc2lvbihkaW1lbnNpb24pO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIHJvdyBkaW1lbnNpb24gdG8gc2l6ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0b1NpemVSb3dEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pID09PSBQaXZvdERpbWVuc2lvblR5cGUuUm93KSB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRGltczogc3RyaW5nW10gPSBQaXZvdFV0aWwuZmxhdHRlbihbZGltZW5zaW9uXSkubWFwKCh4OiBJUGl2b3REaW1lbnNpb24pID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50Q29sbGVjdGlvbiA9ICB0aGlzLmdldENvbnRlbnRDb2xsZWN0aW9uKGRpbWVuc2lvbik7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gY29udGVudENvbGxlY3Rpb24uZmlsdGVyKHggPT4gcmVsYXRlZERpbXMuaW5kZXhPZih4LmRpbWVuc2lvbi5tZW1iZXJOYW1lKSAhPT0gLTEpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGNvbnRlbnQubWFwKHggPT4geC5oZWFkZXJHcm91cHMudG9BcnJheSgpKS5mbGF0KCkubWFwKHggPT4geC5oZWFkZXIgJiYgeC5oZWFkZXIucmVmSW5zdGFuY2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGl2b3RVSS5zaG93Um93SGVhZGVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbkhlYWRlciA9IHRoaXMudGhlYWRSb3cucm93RGltZW5zaW9uSGVhZGVycy5maW5kKHggPT4geC5jb2x1bW4uZmllbGQgPT09IGRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2goZGltZW5zaW9uSGVhZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1dG9XaWR0aCA9IHRoaXMuZ2V0TGFyZ2VzQ29udGVudFdpZHRoKGhlYWRlcnMpO1xuICAgICAgICAgICAgaWYgKGRpbWVuc2lvbi53aWR0aCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb24uYXV0b1dpZHRoID0gcGFyc2VGbG9hdChhdXRvV2lkdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaW1lbnNpb24ud2lkdGggPSBhdXRvV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIGRpbWVuc2lvbiBpbiB0YXJnZXQgY29sbGVjdGlvbiBieSB0eXBlIGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgY29sbGVjdGlvbidzIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5pbnNlcnREaW1lbnNpb25BdChkaW1lbnNpb24sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0aGF0IHdpbGwgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIHRhcmdldENvbGxlY3Rpb25UeXBlIFRoZSB0YXJnZXQgY29sbGVjdGlvbiB0eXBlIHRvIGFkZCB0by4gQ2FuIGJlIFJvdywgQ29sdW1uIG9yIEZpbHRlci5cbiAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluIHRoZSBjb2xsZWN0aW9uIGF0IHdoaWNoIHRvIGFkZC5cbiAgICAgKiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgbm90IHNldCBpdCB3aWxsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnREaW1lbnNpb25BdChkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZSh0YXJnZXRDb2xsZWN0aW9uVHlwZSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2xsZWN0aW9uLnNwbGljZShpbmRleCwgMCwgZGltZW5zaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldENvbGxlY3Rpb24ucHVzaChkaW1lbnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXRDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHsgZGltZW5zaW9uczogdGFyZ2V0Q29sbGVjdGlvbiwgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IHRhcmdldENvbGxlY3Rpb25UeXBlIH0pO1xuICAgICAgICBpZiAodGFyZ2V0Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uRGF0YUNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlRGltZW5zaW9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIGRpbWVuc2lvbiBmcm9tIGl0cyBjdXJyZW50bHkgY29sbGVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIHRhcmdldCBjb2xsZWN0aW9uIGJ5IHR5cGUgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBjb2xsZWN0aW9uJ3MgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24oZGltZW5zaW9uLCBQaXZvdERpbWVuc2lvblR5cGUuUm93LCAxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdGhhdCB3aWxsIGJlIG1vdmVkLlxuICAgICAqIEBwYXJhbSB0YXJnZXRDb2xsZWN0aW9uVHlwZSBUaGUgdGFyZ2V0IGNvbGxlY3Rpb24gdHlwZSB0byBtb3ZlIGl0IHRvLiBDYW4gYmUgUm93LCBDb2x1bW4gb3IgRmlsdGVyLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIG1vdmVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHRhcmdldENvbGxlY3Rpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBjb2xsZWN0aW9uXG4gICAgICAgIHRoaXMuX3JlbW92ZURpbWVuc2lvbkludGVybmFsKGRpbWVuc2lvbik7XG4gICAgICAgIC8vIGFkZCB0byB0YXJnZXRcbiAgICAgICAgdGhpcy5pbnNlcnREaW1lbnNpb25BdChkaW1lbnNpb24sIHRhcmdldENvbGxlY3Rpb25UeXBlLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZGltZW5zaW9uIGZyb20gaXRzIGN1cnJlbnRseSBjb2xsZWN0aW9uLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0b2dnbGVEaW1lbnNpb24gdGhhdCBlbmFibGVkL2Rpc2FibGVzIHRoZSBkaW1lbnNpb24uXG4gICAgICogVGhpcyBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBkaW1lbnNpb24gZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQucmVtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRvIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGRpbWVuc2lvbidzIGVuYWJsZWQgc3RhdGUgb24gb3Igb2ZmLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGRpbWVuc2lvbiByZW1haW5zIGluIGl0cyBjdXJyZW50IGNvbGxlY3Rpb24uIFRoaXMganVzdCBjaGFuZ2VzIGl0cyBlbmFibGVkIHN0YXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC50b2dnbGVEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbVR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1UeXBlKTtcbiAgICAgICAgZGltZW5zaW9uLmVuYWJsZWQgPSAhZGltZW5zaW9uLmVuYWJsZWQ7XG4gICAgICAgIGlmIChkaW1UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGltZW5zaW9uLmVuYWJsZWQgJiYgZGltZW5zaW9uLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKGRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHsgZGltZW5zaW9uczogY29sbGVjdGlvbiwgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IGRpbVR5cGUgfSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyB2YWx1ZSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5pbnNlcnRWYWx1ZUF0KHZhbHVlLCAxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIGRlZmluaXRpb24gdGhhdCB3aWxsIGJlIGFkZGVkLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGluc2VydFZhbHVlQXQodmFsdWU6IElQaXZvdFZhbHVlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWVzLnNwbGljZShpbmRleCwgMCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHsgdmFsdWVzIH0pO1xuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIHZhbHVlIGZyb20gaXRzIGN1cnJlbnRseSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5tb3ZlVmFsdWUodmFsdWUsIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCB3aWxsIGJlIG1vdmVkLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIG1vdmVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSByZXR1cm47XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBpbmRleFxuICAgICAgICB0aGlzLnJlbW92ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgLy8gYWRkIHRvIG5ld1xuICAgICAgICB0aGlzLmluc2VydFZhbHVlQXQodmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHZhbHVlIGZyb20gY29sbGVjdGlvbi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdG9nZ2xlVmFsdWUgdGhhdCBlbmFibGVkL2Rpc2FibGVzIHRoZSB2YWx1ZS5cbiAgICAgKiBUaGlzIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnJlbW92ZVZhbHVlKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcztcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdmFsdWVzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXMgfSk7XG4gICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZhbHVlJ3MgZW5hYmxlZCBzdGF0ZSBvbiBvciBvZmYuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgdmFsdWUgcmVtYWlucyBpbiBpdHMgY3VycmVudCBjb2xsZWN0aW9uLiBUaGlzIGp1c3QgY2hhbmdlcyBpdHMgZW5hYmxlZCBzdGF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQudG9nZ2xlVmFsdWUodmFsdWUpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlVmFsdWUodmFsdWU6IElQaXZvdFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSByZXR1cm47XG4gICAgICAgIHZhbHVlLmVuYWJsZWQgPSAhdmFsdWUuZW5hYmxlZDtcbiAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHsgdmFsdWVzOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgfSk7XG4gICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNvcnQgdGhlIGRpbWVuc2lvbiBhbmQgaXRzIGNoaWxkcmVuIGluIHRoZSBwcm92aWRlZCBkaXJlY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnNvcnREaW1lbnNpb24oZGltZW5zaW9uLCBTb3J0aW5nRGlyZWN0aW9uLkFzYyk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0RGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBzb3J0RGlyZWN0aW9uOiBTb3J0aW5nRGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgZGltZW5zaW9uLnNvcnREaXJlY3Rpb24gPSBzb3J0RGlyZWN0aW9uO1xuICAgICAgICAvLyBhcHBseSBzYW1lIHNvcnQgZGlyZWN0aW9uIHRvIGNoaWxkcmVuLlxuICAgICAgICBsZXQgZGltID0gZGltZW5zaW9uO1xuICAgICAgICBpZiAodGhpcy5waXZvdFVJLnJvd0xheW91dCA9PT0gUGl2b3RSb3dMYXlvdXRUeXBlLlZlcnRpY2FsKSB7XG4gICAgICAgICAgICB3aGlsZSAoZGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBkaW0uY2hpbGRMZXZlbC5zb3J0RGlyZWN0aW9uID0gZGltZW5zaW9uLnNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgZGltID0gZGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZS5lbWl0KHRoaXMuZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGlmIChkaW1lbnNpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVycyBhIHNpbmdsZSBgSVBpdm90RGltZW5zaW9uYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBmaWx0ZXIoKSB7XG4gICAgICogICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KCk7XG4gICAgICogICAgICBzZXQuYWRkKCdWYWx1ZSAxJyk7XG4gICAgICogICAgICBzZXQuYWRkKCdWYWx1ZSAyJyk7XG4gICAgICogICAgICB0aGlzLmdyaWQxLmZpbHRlckRpbWVuc2lvbih0aGlzLnBpdm90Q29uZmlnSGllcmFyY2h5LnJvd3NbMF0sIHNldCwgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpLmNvbmRpdGlvbignaW4nKSk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBmaWx0ZXJEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHZhbHVlOiBhbnksIGNvbmRpdGlvbk9yRXhwcmVzc2lvblRyZWU/OiBJRmlsdGVyaW5nT3BlcmF0aW9uIHwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkge1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyKGRpbWVuc2lvbi5tZW1iZXJOYW1lLCB2YWx1ZSwgY29uZGl0aW9uT3JFeHByZXNzaW9uVHJlZSk7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKGRpbWVuc2lvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFJvd0RpbWVuc2lvbkJ5TmFtZShtZW1iZXJOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVJvd3MgPSB0aGlzLnBpdm90VUkucm93TGF5b3V0ID09PSBQaXZvdFJvd0xheW91dFR5cGUuVmVydGljYWwgP1xuICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cyA6XG4gICAgICAgICBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKTtcbiAgICAgICAgY29uc3QgZGltSW5kZXggPSB2aXNpYmxlUm93cy5maW5kSW5kZXgoKHRhcmdldCkgPT4gdGFyZ2V0Lm1lbWJlck5hbWUgPT09IG1lbWJlck5hbWUpO1xuICAgICAgICBjb25zdCBkaW0gPSB2aXNpYmxlUm93c1tkaW1JbmRleF07XG4gICAgICAgIHJldHVybiBkaW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb246IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGRpbWVuc2lvbikge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlc2l6ZVJvd0RpbWVuc2lvblBpeGVscyhkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgbmV3V2lkdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpc1BlcmNlbnRhZ2VXaWR0aCA9IGRpbWVuc2lvbi53aWR0aCAmJiB0eXBlb2YgZGltZW5zaW9uLndpZHRoID09PSAnc3RyaW5nJyAmJiBkaW1lbnNpb24ud2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzUGVyY2VudGFnZVdpZHRoKSB7XG4gICAgICAgICAgICBkaW1lbnNpb24ud2lkdGggPSB0aGlzLnJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudChuZXdXaWR0aCkudG9GaXhlZCgyKSArICclJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGlmeSB0aGUgZ3JpZCB0byByZWZsb3csIHRvIHVwZGF0ZSBpZiBob3Jpem9udGFsIHNjcm9sbGJhciBuZWVkcyB0byBiZSByZW5kZXJlZC9yZW1vdmVkLlxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwcm90ZWN0ZWQgX3JlbW92ZURpbWVuc2lvbkludGVybmFsKGRpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZShwcmV2Q29sbGVjdGlvblR5cGUpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBwcmV2Q29sbGVjdGlvbi5pbmRleE9mKGRpbWVuc2lvbik7XG4gICAgICAgIHByZXZDb2xsZWN0aW9uLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbik6IFBpdm90RGltZW5zaW9uVHlwZSB7XG4gICAgICAgIHJldHVybiBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xID8gUGl2b3REaW1lbnNpb25UeXBlLlJvdyA6XG4gICAgICAgICAgICBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xID8gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbiA6XG4gICAgICAgICAgICAgICAgKCEhdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycyAmJiBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xKSA/XG4gICAgICAgICAgICAgICAgICAgIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQaXZvdFJvd0hlYWRlckNvbnRlbnRXaWR0aChoZWFkZXJHcm91cDogSWd4UGl2b3RSb3dIZWFkZXJHcm91cENvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBoZWFkZXJTaXplcyA9IHRoaXMuZ2V0SGVhZGVyQ2VsbFdpZHRoKGhlYWRlckdyb3VwLmhlYWRlci5yZWZJbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGhlYWRlclNpemVzLndpZHRoICsgaGVhZGVyU2l6ZXMucGFkZGluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TGFyZ2VzQ29udGVudFdpZHRoKGNvbnRlbnRzOiBFbGVtZW50UmVmW10pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBsYXJnZXN0ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzQ29udGVudFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgY29udGVudHMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0gaW5zdGFuY2VvZiBJZ3hQaXZvdFJvd0hlYWRlckdyb3VwQ29tcG9uZW50ID9cbiAgICAgICAgICAgICAgICAgICAgY2VsbHNDb250ZW50V2lkdGhzLnB1c2godGhpcy5nZXRQaXZvdFJvd0hlYWRlckNvbnRlbnRXaWR0aChlbGVtKSkgOlxuICAgICAgICAgICAgICAgICAgICBjZWxsc0NvbnRlbnRXaWR0aHMucHVzaCh0aGlzLmdldEhlYWRlckNlbGxXaWR0aChlbGVtLm5hdGl2ZUVsZW1lbnQpLndpZHRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsc0NvbnRlbnRXaWR0aHMuaW5kZXhPZihNYXRoLm1heCguLi5jZWxsc0NvbnRlbnRXaWR0aHMpKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxTdHlsZSA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjb250ZW50c1tpbmRleF0ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjZWxsUGFkZGluZyA9IHBhcnNlRmxvYXQoY2VsbFN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoY2VsbFN0eWxlLnBhZGRpbmdSaWdodCkgK1xuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoY2VsbFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgKyBwYXJzZUZsb2F0KGNlbGxTdHlsZS5ib3JkZXJSaWdodFdpZHRoKTtcbiAgICAgICAgICAgIGxhcmdlc3Quc2V0KE1hdGgubWF4KC4uLmNlbGxzQ29udGVudFdpZHRocyksIGNlbGxQYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXJnZXN0Q2VsbCA9IE1hdGgubWF4KC4uLkFycmF5LmZyb20obGFyZ2VzdC5rZXlzKCkpKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmNlaWwobGFyZ2VzdENlbGwgKyBsYXJnZXN0LmdldChsYXJnZXN0Q2VsbCkpO1xuXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4od2lkdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0hvcml6b250YWxMYXlvdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90VUkucm93TGF5b3V0ID09PSBQaXZvdFJvd0xheW91dFR5cGUuSG9yaXpvbnRhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzTXVsdGlwbGVWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBleGNlbFN0eWxlRmlsdGVyTWF4SGVpZ2h0KCkge1xuICAgICAgICAvLyBtYXggMTAgcm93cywgcm93IHNpemUgZGVwZW5kcyBvbiBncmlkIHNpemVcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5yZW5kZXJlZFJvd0hlaWdodCAqIDEwO1xuICAgICAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICAvLyBtaW4gNSByb3dzLCByb3cgc2l6ZSBkZXBlbmRzIG9uIGdyaWQgc2l6ZVxuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSB0aGlzLnJlbmRlcmVkUm93SGVpZ2h0ICogNTtcbiAgICAgICAgcmV0dXJuIGAke21pbkhlaWdodH1weGA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhY3RpdmVEZXNjZW5kYW50KCkge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtID0gdGhpcy5uYXZpZ2F0aW9uLmFjdGl2ZU5vZGU7XG4gICAgICAgIGlmICgodGhpcy5uYXZpZ2F0aW9uIGFzIElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlKS5pc1Jvd0hlYWRlckFjdGl2ZSB8fFxuICAgICAgICAgICAgKHRoaXMubmF2aWdhdGlvbiBhcyBJZ3hQaXZvdEdyaWROYXZpZ2F0aW9uU2VydmljZSkuaXNSb3dEaW1lbnNpb25IZWFkZXJBY3RpdmUpIHtcbiAgICAgICAgICAgIGlmICghYWN0aXZlRWxlbSB8fCAhT2JqZWN0LmtleXMoYWN0aXZlRWxlbSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmlkfV8ke2FjdGl2ZUVsZW0ucm93fV8ke2FjdGl2ZUVsZW0uY29sdW1ufWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuYWN0aXZlRGVzY2VuZGFudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZVRvZ2dsZShncm91cENvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50LCBzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWdyb3VwQ29sdW1uKSByZXR1cm47XG4gICAgICAgIGdyb3VwQ29sdW1uLmhpZGRlbiA9IHN0YXRlO1xuICAgICAgICB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLnNldChncm91cENvbHVtbi5maWVsZCwgc3RhdGUpO1xuICAgICAgICBjb25zdCBjaGlsZHJlblRvdGFsID0gdGhpcy5oYXNNdWx0aXBsZVZhbHVlcyA/XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmNvbHVtbkdyb3VwICYmIHguY2hpbGRyZW4uZmlsdGVyKHkgPT4gIXkuY29sdW1uR3JvdXApLmxlbmd0aCA9PT0gdGhpcy52YWx1ZXMubGVuZ3RoKSA6XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiAheC5jb2x1bW5Hcm91cCk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuU3ViZ3JvdXBzID0gdGhpcy5oYXNNdWx0aXBsZVZhbHVlcyA/XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmNvbHVtbkdyb3VwICYmIHguY2hpbGRyZW4uZmlsdGVyKHkgPT4gIXkuY29sdW1uR3JvdXApLmxlbmd0aCA9PT0gMCkgOlxuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCk7XG4gICAgICAgIGNoaWxkcmVuVG90YWwuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZ2V0KGdyb3VwLmZpZWxkKSB8fCBzdGF0ZTtcbiAgICAgICAgICAgIGlmIChuZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWdyb3VwQ29sdW1uLmhpZGRlbiAmJiBjaGlsZHJlblN1Ymdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGlsZHJlblN1Ymdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZ2V0KGdyb3VwLmZpZWxkKSB8fCBzdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoZ3JvdXAsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGJ1aWxkRGF0YVZpZXcoZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fZGF0YVZpZXcgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldERhdGFCYXNlZEJvZHlIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZHZsID0gdGhpcy5kYXRhVmlldz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHJldHVybiBkdmwgPCB0aGlzLl9kZWZhdWx0VGFyZ2V0UmVjb3JkTnVtYmVyID8gMCA6IHRoaXMuZGVmYXVsdFRhcmdldEJvZHlIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGhvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSBldmVudC50YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy50aGVhZFJvdy5oZWFkZXJDb250YWluZXJzLmZvckVhY2goaGVhZGVyRm9yT2YgPT4ge1xuICAgICAgICAgICAgaGVhZGVyRm9yT2Yub25IU2Nyb2xsKHNjcm9sbExlZnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIuaG9yaXpvbnRhbFNjcm9sbEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2ZXJ0aWNhbFNjcm9sbEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIHgub25TY3JvbGwoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIudmVydGljYWxTY3JvbGxIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGF1dG9nZW5lcmF0ZUNvbHVtbnMoKSB7XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdyaWRBUEkuZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnModGhpcy5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbkRhdGFDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZURpbWVuc2lvbkNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nID0gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5jb2x1bW5EaW1lbnNpb25zKS5maWx0ZXIoZGltID0+IGRpbS5zb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuZWRDb2x1bW5zV2l0aFNvcnRpbmcubGVuZ3RoID4gMCA/IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nKSA6IFtdO1xuICAgICAgICBsZXQgc29ydGVkRGF0YSA9IGRhdGE7XG4gICAgICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzb3J0ZWREYXRhID0gRGF0YVV0aWwuc29ydChjbG9uZUFycmF5KGRhdGEpLCBleHByZXNzaW9ucywgdGhpcy5zb3J0U3RyYXRlZ3ksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWVsZHNNYXA7XG4gICAgICAgIGlmICh0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5TdHJhdGVneSAmJiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5TdHJhdGVneSBpbnN0YW5jZW9mIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5nZW5lcmF0ZURhdGFGaWVsZHMoc29ydGVkRGF0YSk7XG4gICAgICAgICAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgcm93RmllbGRzID0gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cykubWFwKHggPT4geC5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGtleUZpZWxkcyA9IE9iamVjdC52YWx1ZXModGhpcy5waXZvdEtleXMpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKHggPT4gcm93RmllbGRzLmluZGV4T2YoeCkgPT09IC0xICYmIGtleUZpZWxkcy5pbmRleE9mKHgpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHguaW5kZXhPZih0aGlzLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLnBpdm90S2V5cy5sZXZlbCkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgeC5pbmRleE9mKHRoaXMucGl2b3RLZXlzLnJvd0RpbWVuc2lvblNlcGFyYXRvciArIHRoaXMucGl2b3RLZXlzLnJlY29yZHMpID09PSAtMSk7XG4gICAgICAgICAgICBmaWVsZHNNYXAgPSB0aGlzLmdlbmVyYXRlRnJvbURhdGEoZmlsdGVyZWRGaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzTWFwID0gUGl2b3RVdGlsLmdldEZpZWxkc0hpZXJhcmNoeShcbiAgICAgICAgICAgICAgICBzb3J0ZWREYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGltZW5zaW9ucyxcbiAgICAgICAgICAgICAgICBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uLFxuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RLZXlzLFxuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVDb2x1bW5IaWVyYXJjaHkoZmllbGRzTWFwLCBzb3J0ZWREYXRhKTtcbiAgICAgICAgdGhpcy5fYXV0b0dlbmVyYXRlZENvbHMgPSBjb2x1bW5zO1xuICAgICAgICAvLyByZXNldCBleHBhbnNpb24gc3RhdGVzIGlmIGFueSBhcmUgc3RvcmVkLlxuICAgICAgICB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1hcnlDb2x1bW4gPSBjb2x1bW5zLmZpbmQoeCA9PiB4LmZpZWxkID09PSBrZXkgJiYgeC5oZWFkZXJUZW1wbGF0ZSA9PT0gdGhpcy5oZWFkZXJUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBTdW1tYXJ5Q29sdW1uID0gY29sdW1ucy5maW5kKHggPT4geC5maWVsZCA9PT0ga2V5ICYmIHguaGVhZGVyVGVtcGxhdGUgIT09IHRoaXMuaGVhZGVyVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUm93R3JvdXAocHJpbWFyeUNvbHVtbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdW1tYXJ5Q29sdW1uLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpbWVuc2lvbkNvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuYWxsVmlzaWJsZURpbWVuc2lvbnMuZm9yRWFjaCgoZGltKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IGRpbS5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlciA9IGRpbS5kaXNwbGF5TmFtZSB8fCBkaW0ubWVtYmVyTmFtZTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMucm93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UucmVzaXphYmxlID0gdGhpcy5yb3dEaW1lbnNpb25SZXNpemluZztcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5zb3J0YWJsZSA9IGRpbS5zb3J0YWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRpbS5zb3J0YWJsZTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IHRoaXMucm93RGltZW5zaW9uV2lkdGgoZGltKTtcbiAgICAgICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjYWxjdWxhdGVHcmlkU2l6ZXMocmVjYWxjRmVhdHVyZVdpZHRoID0gdHJ1ZSkge1xuICAgICAgICBzdXBlci5jYWxjdWxhdGVHcmlkU2l6ZXMocmVjYWxjRmVhdHVyZVdpZHRoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGltZW5zaW9uc1RvQXV0b3NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuem9uZS5vblN0YWJsZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvU2l6ZURpbWVuc2lvbnNJblZpZXcoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbnRlbnRDb2xsZWN0aW9uKGRpbWVuc3Rpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBsZXQgY29udGVudENvbGxlY3Rpb247XG4gICAgICAgIGlmICh0aGlzLmhhc0hvcml6b250YWxMYXlvdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbE1ybENvbnRlbnRzID0gdGhpcy5yb3dEaW1lbnNpb25NcmxSb3dzQ29sbGVjdGlvbi5tYXAobXJsUm93ID0+IG1ybFJvdy5jb250ZW50Q2VsbHMudG9BcnJheSgpKS5mbGF0KCk7XG4gICAgICAgICAgICBjb250ZW50Q29sbGVjdGlvbiA9IGFsbE1ybENvbnRlbnRzLmZpbHRlcihjZWxsID0+IGNlbGwucm9vdERpbWVuc2lvbiA9PT0gZGltZW5zdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50Q29sbGVjdGlvbiA9IHRoaXMucm93RGltZW5zaW9uQ29udGVudENvbGxlY3Rpb24udG9BcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50Q29sbGVjdGlvbjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXV0b1NpemVEaW1lbnNpb25zSW5WaWV3KCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzRGltZW5zaW9uc1RvQXV0b3NpemUpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy52aXNpYmxlUm93RGltZW5zaW9ucykge1xuICAgICAgICAgICAgaWYgKGRpbS53aWR0aCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREaW1zID0gUGl2b3RVdGlsLmZsYXR0ZW4oW2RpbV0pLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudENvbGxlY3Rpb24gPSB0aGlzLmdldENvbnRlbnRDb2xsZWN0aW9uKGRpbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGNvbnRlbnRDb2xsZWN0aW9uLmZpbHRlcih4ID0+IHJlbGF0ZWREaW1zLmluZGV4T2YoeC5kaW1lbnNpb24ubWVtYmVyTmFtZSkgIT09IC0xKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY29udGVudC5tYXAoeCA9PiB4LmhlYWRlckdyb3Vwcy50b0FycmF5KCkpLmZsYXQoKS5tYXAoeCA9PiB4LmhlYWRlciAmJiB4LmhlYWRlci5yZWZJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IGNvbnRlbnRXaWR0aHMucHVzaChoZWFkZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoIHx8IDApKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waXZvdFVJLnNob3dSb3dIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbkhlYWRlciA9IHRoaXMudGhlYWRSb3cucm93RGltZW5zaW9uSGVhZGVycy5maW5kKHggPT4geC5jb2x1bW4uZmllbGQgPT09IGRpbS5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFdpZHRocy5wdXNoKHBhcnNlRmxvYXQodGhpcy5nZXRMYXJnZXNDb250ZW50V2lkdGgoW2RpbWVuc2lvbkhlYWRlcl0pKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmNvbnRlbnRXaWR0aHMpO1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2VsbHMgbm90IGluIERPTSB5ZXQuLi5cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSBNYXRoLmNlaWwoTWF0aC5tYXgoLi4uY29udGVudFdpZHRocykpO1xuICAgICAgICAgICAgICAgIGRpbS5hdXRvV2lkdGggPSBtYXhTaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5XaWR0aFN1bSkge1xuICAgICAgICAgICAgdGhpcy5jYWxjV2lkdGggPSB0aGlzLmdldENvbHVtbldpZHRoU3VtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0RpbWVuc2lvbnNUb0F1dG9zaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dEaW1lbnNpb25zLnNvbWUoeCA9PiB4LndpZHRoID09PSAnYXV0bycgJiYgIXguYXV0b1dpZHRoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVGcm9tRGF0YShmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMucGl2b3RLZXlzLmNvbHVtbkRpbWVuc2lvblNlcGFyYXRvcjtcbiAgICAgICAgY29uc3QgZGF0YUFyciA9IGZpZWxkcy5tYXAoeCA9PiB4LnNwbGl0KHNlcGFyYXRvcikpLnNvcnQoeCA9PiB4Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbkRpbWVuc2lvbnMgPSAgUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5jb2x1bW5EaW1lbnNpb25zKTtcbiAgICAgICAgZGF0YUFyci5mb3JFYWNoKGFyciA9PiB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEhpZXJhcmNoeSA9IGhpZXJhcmNoeTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBbXTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhcnIpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGF0aC5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldEhpZXJhcmNoeSA9IGN1cnJlbnRIaWVyYXJjaHkuZ2V0KG5ld1BhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0SGllcmFyY2h5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5EaW1lbnNpb24gPSBjb2x1bW5EaW1lbnNpb25zW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEhpZXJhcmNoeS5zZXQobmV3UGF0aCwgeyB2YWx1ZTogbmV3UGF0aCwgZXhwYW5kYWJsZTogISFjdXJyZW50Q29sdW1uRGltZW5zaW9uLmNoaWxkTGV2ZWwsIGNoaWxkcmVuOiBuZXcgTWFwPHN0cmluZywgYW55PigpLCBkaW1lbnNpb246IGN1cnJlbnRDb2x1bW5EaW1lbnNpb24gfSk7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEhpZXJhcmNoeSA9IGN1cnJlbnRIaWVyYXJjaHkuZ2V0KG5ld1BhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50SGllcmFyY2h5ID0gdGFyZ2V0SGllcmFyY2h5LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGllcmFyY2h5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUNvbHVtbkhpZXJhcmNoeShmaWVsZHM6IE1hcDxzdHJpbmcsIGFueT4sIGRhdGEsIHBhcmVudCA9IG51bGwpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGlmIChmaWVsZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gdmFsdWUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0gdmFsdWUubWVtYmVyO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnNvcnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZGF0YVR5cGUgPSB2YWx1ZS5kYXRhVHlwZSB8fCB0aGlzLnJlc29sdmVEYXRhVHlwZXMoZGF0YS5sZW5ndGggPyBkYXRhWzBdW3ZhbHVlLm1lbWJlcl0gOiBudWxsKTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZm9ybWF0dGVyID0gdmFsdWUuZm9ybWF0dGVyO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50RmllbGRzID0gZmllbGRzO1xuICAgICAgICBjdXJyZW50RmllbGRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkR2VuZXJhdGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSAmJiAodmFsdWUuY2hpbGRyZW4gPT0gbnVsbCB8fCB2YWx1ZS5jaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgdmFsdWUuY2hpbGRyZW4uc2l6ZSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0aGlzLmhhc011bHRpcGxlVmFsdWVzKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWFzdXJlQ2hpbGRyZW4gPSB0aGlzLmdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBjb2wsIGZhbHNlLCB2YWx1ZS5kaW1lbnNpb24ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEdlbmVyYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmV4cGFuZGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KHZhbHVlLmNoaWxkcmVuLCBkYXRhLCBjb2wpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmxldmVsID09PSBjb2wubGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVhc3VyZUNoaWxkcmVuID0gdGhpcy5nZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgY29sLCB0cnVlLCB2YWx1ZS5kaW1lbnNpb24ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRDaGlsZHJlbiA9IGZpbHRlcmVkQ2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc3QgYWxsQ2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLnJlc2V0KG5lc3RlZENoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVDaGlsZHJlbiA9IHRoaXMuZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIHNpYmxpbmcsIGZhbHNlLCB2YWx1ZS5kaW1lbnNpb24/LndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuY2hpbGRyZW4ucmVzZXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQoZmlsdGVyZWRDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5kaW1lbnNpb24uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChzaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVDb25maWcoKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5nZW5lcmF0ZURhdGFGaWVsZHMoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNvbHVtbkRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdID0gW107XG4gICAgICAgIGNvbnN0IHJvd0RpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlczogSVBpdm90VmFsdWVbXSA9IFtdO1xuICAgICAgICBsZXQgaXNGaXJzdERhdGUgPSB0cnVlO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bZmllbGRdKTtcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBJUGl2b3RWYWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXI6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3N1bScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU3VtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRvck5hbWU6IFwiU1VNXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0gbmV3IElneFBpdm90RGF0ZURpbWVuc2lvbihcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyTmFtZTogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBpc0ZpcnN0RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBkYXRhVHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHJvd0RpbWVuc2lvbnMucHVzaChkaW1lbnNpb24pO1xuICAgICAgICAgICAgICAgIGlzRmlyc3REYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlck5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogZGF0YVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uRGltZW5zaW9ucy5wdXNoKGRpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbkRpbWVuc2lvbnMsXG4gICAgICAgICAgICByb3dzOiByb3dEaW1lbnNpb25zLFxuICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gPSBjb25maWc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZTogYW55LCBkYXRhOiBhbnksIHBhcmVudDogQ29sdW1uVHlwZSwgaXNHcm91cDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBrZXkgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgY29uc3QgcmVmID0gaXNHcm91cCA/XG4gICAgICAgICAgICBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uR3JvdXBDb21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pIDpcbiAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gcGFyZW50ICE9IG51bGwgPyBrZXkuc3BsaXQocGFyZW50LmhlYWRlciArIHRoaXMucGl2b3RLZXlzLmNvbHVtbkRpbWVuc2lvblNlcGFyYXRvcilbMV0gOiBrZXk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IGtleTtcbiAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi53aWR0aCkge1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLndpZHRoID0gdmFsdWUuZGltZW5zaW9uLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlRGVmaW5pdGlvbiA9IHRoaXMudmFsdWVzWzBdO1xuICAgICAgICByZWYuaW5zdGFuY2UuZGF0YVR5cGUgPSB2YWx1ZURlZmluaXRpb24/LmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbHVlRGVmaW5pdGlvbj8ubWVtYmVyXSk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWx1ZURlZmluaXRpb24/LmZvcm1hdHRlcjtcbiAgICAgICAgcmVmLmluc3RhbmNlLnNvcnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIHJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUNvbHVtbkRpbWVuc2lvbldpZHRoKGRpbTogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGlmIChkaW0ud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaW0ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWluQ29sdW1uV2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgcGFyZW50LCBoaWRkZW4sIHBhcmVudFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbXTtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNoaWxkV2lkdGggPSBwYXJzZUludChwYXJlbnRXaWR0aCwgMTApIC8gY291bnQ7XG4gICAgICAgIGNvbnN0IGlzUGVyY2VudCA9IHBhcmVudFdpZHRoICYmIHBhcmVudFdpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTE7XG4gICAgICAgIGNvbnN0IGlzQXV0byA9IHBhcmVudFdpZHRoICYmIHBhcmVudFdpZHRoLmluZGV4T2YoJ2F1dG8nKSAhPT0gLTE7XG4gICAgICAgIHRoaXMudmFsdWVzLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlciA9IHZhbC5kaXNwbGF5TmFtZSB8fCB2YWwubWVtYmVyO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0gcGFyZW50LmZpZWxkICsgdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yICsgdmFsLm1lbWJlcjtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50V2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSBpc0F1dG8gPyAnYXV0bycgOiBpc1BlcmNlbnQgPyBjaGlsZFdpZHRoICsgJyUnIDogY2hpbGRXaWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGlkZGVuID0gaGlkZGVuO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnNvcnRhYmxlID0gdGhpcy5fc29ydGFibGVDb2x1bW5zO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmRhdGFUeXBlID0gdmFsLmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbC5tZW1iZXJdKTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWwuZm9ybWF0dGVyO1xuICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbHMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgQFZpZXdDaGlsZCgnZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0RW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyBhIGN1c3RvbSB0ZW1wbGF0ZSB3aGVuIHBpdm90IGdyaWQgaXMgZW1wdHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2VtcHR5UGl2b3RHcmlkVGVtcGxhdGVdPVwibXlUZW1wbGF0ZVwiPjxpZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbXB0eVBpdm90R3JpZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGNvbnN0IGFsbEVuYWJsZWREaW1lbnNpb25zID0gdGhpcy5yb3dEaW1lbnNpb25zLmNvbmNhdCh0aGlzLmNvbHVtbkRpbWVuc2lvbnMpO1xuICAgICAgICBpZiAoYWxsRW5hYmxlZERpbWVuc2lvbnMubGVuZ3RoID09PSAwICYmIHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gbm8gZW5hYmxlZCB2YWx1ZXMgYW5kIGRpbWVuc2lvbnNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5UGl2b3RHcmlkVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIudGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0SW5pdEV2ZW50cyhwaXZvdENvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5hbGxEaW1lbnNpb25zKTtcbiAgICAgICAgZGltZW5zaW9ucy5mb3JFYWNoKGRpbSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbkluaXQuZW1pdChkaW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gcGl2b3RDb25maWc/LnZhbHVlcztcbiAgICAgICAgdmFsdWVzPy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlSW5pdC5lbWl0KHZhbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByb3dEaW1lbnNpb25CeU5hbWUobWVtYmVyTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVSb3dEaW1lbnNpb25zLmZpbmQoKHJvd0RpbSkgPT4gcm93RGltLm1lbWJlck5hbWUgPT09IG1lbWJlck5hbWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVSZXNpemVyVG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdFVJLnNob3dSb3dIZWFkZXJzID9cbiAgICAgICAgICAgICh0aGlzLnRoZWFkUm93LnBpdm90RmlsdGVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCB8fCAwKSArICh0aGlzLnRoZWFkUm93LnBpdm90Um93Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCB8fCAwKSA6XG4gICAgICAgICAgICB0aGlzLnRoZWFkUm93Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVEZWZhdWx0Um93SGVpZ2h0KCkge1xuICAgICAgICBzdXBlci51cGRhdGVEZWZhdWx0Um93SGVpZ2h0KCk7XG4gICAgICAgIGlmICh0aGlzLmhhc0hvcml6b250YWxMYXlvdXQpIHtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgcGlwZXMgdG8gcmVjYWxjIGhlaWdodHMgZm9yIHRoZSBob3Jpem9udGFsIGxheW91dCBtcmwgcm93cy5cbiAgICAgICAgICAgIHRoaXMucmVncm91cFRyaWdnZXIrKztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjwhLS0gVG9vbGJhciBhcmVhIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWdyaWQtdG9vbGJhcixpZ2MtZ3JpZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuXG48IS0tIEdyaWQgdGFibGUgaGVhZCByb3cgYXJlYSAtLT5cbjxpZ3gtcGl2b3QtaGVhZGVyLXJvdyBjbGFzcz1cImlneC1ncmlkLXRoZWFkIGlneC1ncmlkLXRoZWFkLS1waXZvdFwiIHRhYmluZGV4PVwiMFwiXG4gICAgW2dyaWRdPVwidGhpc1wiXG4gICAgW2hhc01STF09XCJoYXNDb2x1bW5MYXlvdXRzXCJcbiAgICBbYWN0aXZlRGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCJcbiAgICBbd2lkdGhdPVwiY2FsY1dpZHRoXCJcbiAgICBbcGlubmVkQ29sdW1uQ29sbGVjdGlvbl09XCJwaW5uZWRDb2x1bW5zXCJcbiAgICBbdW5waW5uZWRDb2x1bW5Db2xsZWN0aW9uXT1cInVucGlubmVkQ29sdW1uc1wiXG4gICAgKGtleWRvd24ubWV0YS5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duLmNvbnRyb2wuYyk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoY29weSk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhlYWRlck5hdmlnYXRpb24oJGV2ZW50KVwiXG4gICAgKHNjcm9sbCk9XCJwcmV2ZW50SGVhZGVyU2Nyb2xsKCRldmVudClcIlxuPlxuPC9pZ3gtcGl2b3QtaGVhZGVyLXJvdz5cblxuPGRpdiBpZ3hHcmlkQm9keSAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dEaW1lbnNpb25zLmxlbmd0aCA/IChoYXNIb3Jpem9udGFsTGF5b3V0ID8gaG9yaXpvbnRhbFJvd0RpbWVuc2lvbnNUZW1wbGF0ZSA6IGRlZmF1bHRSb3dEaW1lbnNpb25zVGVtcGxhdGUpIDogZW1wdHlSb3dEaW1lbnNpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHRoaXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LWNvbnRlbnRcIiB0YWJpbmRleD1cIjBcIiBbYXR0ci5yb2xlXT1cImRhdGFWaWV3Lmxlbmd0aCA/IG51bGwgOiAncm93J1wiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTdG9wKT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGUgPSAkZXZlbnRcIiAoc2Nyb2xsKT1cInByZXZlbnRDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU2Nyb2xsKT1cImRyYWdTY3JvbGwoJGV2ZW50KVwiIFtpZ3hHcmlkRHJhZ1NlbGVjdF09XCJzZWxlY3Rpb25TZXJ2aWNlLmRyYWdNb2RlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdENvbnRlbnRDYWxjV2lkdGggfHwgbnVsbFwiICN0Ym9keSBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImhhc01vdmFibGVDb2x1bW5zICYmIGNvbHVtbkluRHJhZyAmJiBwaW5uZWRDb2x1bW5zLmxlbmd0aCA8PSAwXCJcbiAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCIgaWQ9XCJsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiIGlkPVwibGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1waW5uZWRcIiBbc3R5bGUubGVmdC5weF09XCJwaW5uZWRXaWR0aFwiPjwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgW2lneEdyaWRGb3JPZl09XCJkYXRhXG4gICAgICAgIHwgcGl2b3RHcmlkRmlsdGVyOnBpdm90Q29uZmlndXJhdGlvbjpmaWx0ZXJTdHJhdGVneTphZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTpmaWx0ZXJpbmdQaXBlVHJpZ2dlcjpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFNvcnQ6cGl2b3RDb25maWd1cmF0aW9uOnNvcnRTdHJhdGVneTpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFJvdzpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZENvbHVtbjpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZEF1dG9UcmFuc2Zvcm06cGl2b3RDb25maWd1cmF0aW9uOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkQ29sdW1uU29ydDpzb3J0aW5nRXhwcmVzc2lvbnM6c29ydFN0cmF0ZWd5OnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkUm93RXhwYW5zaW9uOnBpdm90Q29uZmlndXJhdGlvbjpleHBhbnNpb25TdGF0ZXM6ZGVmYXVsdEV4cGFuZFN0YXRlOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cImhhc0NvbHVtbkxheW91dHMgPyByb3dIZWlnaHQgKiBtdWx0aVJvd0xheW91dFJvd1NpemUgKyAxIDogcmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEdyaWRGb3JPZlZhcmlhYmxlU2l6ZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgI3ZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyIChkYXRhQ2hhbmdpbmcpPVwiZGF0YVJlYmluZGluZygkZXZlbnQpXCIgKGRhdGFDaGFuZ2VkKT1cImRhdGFSZWJvdW5kKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtpZ3hUZW1wbGF0ZU91dGxldF09XCJyZWNvcmRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lneFRlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgKGNhY2hlZFZpZXdMb2FkZWQpPVwiY2FjaGVkVmlld0xvYWRlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlY29yZF90ZW1wbGF0ZSBsZXQtcm93SW5kZXg9XCJpbmRleFwiIGxldC1yb3dEYXRhPlxuICAgICAgICAgICAgPGlneC1waXZvdC1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtkYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzZXMgfCBpZ3hHcmlkUm93Q2xhc3Nlczpyb3c6cm93LmluRWRpdE1vZGU6cm93LnNlbGVjdGVkOnJvdy5kaXJ0eTpyb3cuZGVsZXRlZDpyb3cuZHJhZ2dpbmc6cm93SW5kZXg6aGFzQ29sdW1uTGF5b3V0czpmYWxzZTpyb3dEYXRhOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZXMgfCBpZ3hHcmlkUm93U3R5bGVzOnJvd0RhdGE6cm93SW5kZXg6cGlwZVRyaWdnZXJcIiAjcm93PlxuICAgICAgICAgICAgPC9pZ3gtcGl2b3Qtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHRoaXMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWdjLXRyaWFsLXdhdGVybWFyaz48L2lnYy10cmlhbC13YXRlcm1hcms+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZ3hUb2dnbGUgI2xvYWRpbmdPdmVybGF5PlxuICAgICAgICA8aWd4LWNpcmN1bGFyLWJhciBbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG91bGRPdmVybGF5TG9hZGluZ1wiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJoYXNNb3ZhYmxlQ29sdW1ucyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGlkPVwicmlnaHRcIiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1yaWdodFwiPjwvc3Bhbj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiIWhhc1ZlcnRpY2FsU2Nyb2xsKClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsU2l6ZVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1zdGFydFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1tYWluXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxjSGVpZ2h0XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT1cIltdXCIgI3ZlcnRpY2FsU2Nyb2xsSG9sZGVyPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1lbmRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIiFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fYWRkcm93LXNuYWNrYmFyXCI+XG4gICAgICAgIDxpZ3gtc25hY2tiYXIgI2FkZFJvd1NuYWNrYmFyIFtvdXRsZXRdPVwiaWd4Qm9keU92ZXJsYXlPdXRsZXRcIiBbYWN0aW9uVGV4dF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2FjdGlvbnRleHRcIiBbZGlzcGxheVRpbWVdPVwic25hY2tiYXJEaXNwbGF5VGltZVwiPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3NuYWNrYmFyX2FkZHJvd19sYWJlbH19PC9pZ3gtc25hY2tiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICNpZ3hCb2R5T3ZlcmxheU91dGxldD1cIm92ZXJsYXktb3V0bGV0XCIgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwic2Nyb2xsU2l6ZVwiICNzY3IgW2hpZGRlbl09XCJpc0hvcml6b250YWxTY3JvbGxIaWRkZW5cIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1zdGFydFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtbWFpblwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFVucGlubmVkV2lkdGhcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgW2lneEdyaWRGb3JPZl09XCJFTVBUWV9EQVRBXCIgI3Njcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1lbmRcIiBbc3R5bGUud2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtoaWRkZW5dPVwicGl2b3RQaW5uZWRXaWR0aCA9PT0gMCB8fCBpc1Bpbm5pbmdUb1N0YXJ0XCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdFwiIHJvbGU9XCJyb3dncm91cFwiICN0Zm9vdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2Zvb3RlclwiICNmb290ZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWdyaWQtZm9vdGVyLGlnYy1ncmlkLWZvb3RlclwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5RmlsdGVyZWRHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5RmlsdGVyZWRHcmlkTWVzc2FnZX19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5R3JpZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1tZXNzYWdlXCIgcm9sZT1cImNlbGxcIj5cbiAgICAgICAgPHNwYW4+e3tlbXB0eUdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZ0dyaWQ+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19sb2FkaW5nXCI+XG4gICAgICAgIDxpZ3gtY2lyY3VsYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIj5cbiAgICAgICAgPC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxpZ3gtcGl2b3QtZ3JpZC1jb2x1bW4tcmVzaXplciBbcmVzdHJpY3RSZXNpemVyVG9wXT1cImNhbGN1bGF0ZVJlc2l6ZXJUb3AoKVwiICpuZ0lmPVwiY29sUmVzaXppbmdTZXJ2aWNlLnNob3dSZXNpemVyXCI+PC9pZ3gtcGl2b3QtZ3JpZC1jb2x1bW4tcmVzaXplcj5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fbG9hZGluZy1vdXRsZXRcIiAjaWd4TG9hZGluZ092ZXJsYXlPdXRsZXQgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fb3V0bGV0XCIgI2lneEZpbHRlcmluZ092ZXJsYXlPdXRsZXQgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1uPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItLWhlYWRlclwiPlxuICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgIGZhbWlseT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgW25hbWVdPVwiZ2V0Q29sdW1uR3JvdXBFeHBhbmRTdGF0ZShjb2x1bW4pID8gJ3RyZWVfZXhwYW5kJyA6ICd0cmVlX2NvbGxhcHNlJ1wiXG4gICAgICAgICAgICBbYXR0ci5kcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbHVtbihjb2x1bW4pXCI+XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgIHt7Y29sdW1uLmhlYWRlcn19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dEaW1lbnNpb25zVGVtcGxhdGU+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCIgKm5nRm9yPVwibGV0IGRpbSBvZiByb3dEaW1lbnNpb25zOyBsZXQgZGltSW5kZXggPSBpbmRleDtcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIGxldC1yb3dEYXRhIFtpZ3hHcmlkRm9yT2ZdPVwiZGF0YVZpZXdcbiAgICAgICAgfCBwaXZvdEdyaWRDZWxsTWVyZ2luZzpwaXZvdENvbmZpZ3VyYXRpb246ZGltOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cInJlbmRlcmVkUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JTaXplUHJvcE5hbWVdPVwiJ2hlaWdodCdcIlxuICAgICAgICAgICAgICAgICAgICAgI3ZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICAgICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQgcm9sZT1cInJvd1wiIGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRcIiBbZ3JpZF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaW1lbnNpb25dPVwicm93RGF0YS5kaW1lbnNpb25zW2RpbUluZGV4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm9vdERpbWVuc2lvbl09XCJkaW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyZW5kZXJlZFJvd0hlaWdodCAqIChyb3dEYXRhLnJvd1NwYW4gfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCIgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwicm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0pXCI+XG4gICAgICAgICAgICA8L2lneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hvcml6b250YWxSb3dEaW1lbnNpb25zVGVtcGxhdGU+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1waXZvdC1tcmwtZGltZW5zaW9uXCIgI3Jvd0RpbWVuc2lvbkNvbnRhaW5lciBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCIgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFWaWV3IHwgcGl2b3RHcmlkSG9yaXpvbnRhbFJvd0dyb3VwaW5nOnBpdm90Q29uZmlndXJhdGlvbjpwaXBlVHJpZ2dlcjpyZWdyb3VwVHJpZ2dlciBhcyBncm91cGVkRGF0YVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lciByb2xlPVwicm93Z3JvdXBcIiBpZ3hHcmlkRm9yIGxldC1yb3dHcm91cCBsZXQtcm93SW5kZXg9XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hHcmlkRm9yT2ZdPVwiZ3JvdXBlZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbaWd4Rm9yU2Nyb2xsT3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwidmVydGljYWxTY3JvbGxcIlxuICAgICAgICAgICAgICAgICAgICBbaWd4Rm9yQ29udGFpbmVyU2l6ZV09XCJjYWxjSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cInJlbmRlcmVkUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lneEZvclNpemVQcm9wTmFtZV09XCInaGVpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLW1ybC1yb3cgW3Jvd0luZGV4XT1cInJvd0luZGV4XCIgW3Jvd0dyb3VwXT1cInJvd0dyb3VwXCIgW2dyb3VwZWREYXRhXT1cImdyb3VwZWREYXRhXCIgW3N0eWxlLmhlaWdodC5weF09XCJyZW5kZXJlZFJvd0hlaWdodCAqIHJvd0dyb3VwLmxlbmd0aFwiPjwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tbXJsLXJvdz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVJvd0RpbWVuc2lvbnNUZW1wbGF0ZT5cbiAgICA8ZGl2IHRhYmluZGV4PVwiMFwiICpuZ0lmPVwiY29sdW1uRGltZW5zaW9ucy5sZW5ndGggPiAwIHx8IHZhbHVlcy5sZW5ndGggPiAwXCIgI3Jvd0RpbWVuc2lvbkNvbnRhaW5lciByb2xlPVwicm93Z3JvdXBcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1waXZvdC1kaW1lbnNpb25cIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIiAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhhbmRsZU5hdmlnYXRpb24oJGV2ZW50KVwiPlxuICAgICAgICA8aWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudCByb2xlPVwicm93XCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZFwiIFtncmlkXT1cInRoaXNcIlxuICAgICAgICAgICAgW2RpbWVuc2lvbl09XCJlbXB0eVJvd0RpbWVuc2lvblwiXG4gICAgICAgICAgICBbcm9vdERpbWVuc2lvbl09XCJlbXB0eVJvd0RpbWVuc2lvblwiXG4gICAgICAgICAgICBbcm93SW5kZXhdPVwiMFwiIFtyb3dEYXRhXT1cImRhdGFWaWV3WzBdXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCJyb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGVtcHR5Um93RGltZW5zaW9uKVwiPlxuICAgICAgICA8L2lneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5UGl2b3RHcmlkVGVtcGxhdGU+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktbWVzc2FnZVwiIHJvbGU9XCJjZWxsXCI+XG4gICAgICAgIDxzcGFuPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpdm90X2VtcHR5X21lc3NhZ2V9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IFtoaWRkZW5dPVwidHJ1ZVwiPlxuICAgIDxpZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmcgW21heEhlaWdodF09XCJleGNlbFN0eWxlRmlsdGVyTWF4SGVpZ2h0XCIgW21pbkhlaWdodF09XCJleGNlbFN0eWxlRmlsdGVyTWluSGVpZ2h0XCI+XG4gICAgICAgIDxkaXYgaWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnMgW2hpZGRlbl09XCJ0cnVlXCI+PC9kaXY+XG4gICAgICAgIDxpZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnM+XG4gICAgICAgICAgICA8aWd4LWV4Y2VsLXN0eWxlLXNlYXJjaD48L2lneC1leGNlbC1zdHlsZS1zZWFyY2g+XG4gICAgICAgIDwvaWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zPlxuICAgIDwvaWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nPlxuPC9kaXY+XG5cbkBpZiAocGxhdGZvcm0uaXNFbGVtZW50cykge1xuICAgIDxkaXYgI3Npbmsgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC1zdGF0ZSxpZ2MtZ3JpZC1zdGF0ZVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==
|