igniteui-angular 18.2.9 → 18.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/esm2022/lib/core/i18n/grid-resources.mjs +3 -3
  2. package/esm2022/lib/grids/columns/column.component.mjs +5 -2
  3. package/esm2022/lib/grids/common/grid.interface.mjs +1 -1
  4. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +2 -1
  5. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +3 -2
  6. package/esm2022/lib/grids/grid-base.directive.mjs +9 -3
  7. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +2 -1
  8. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +1 -1
  9. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +3 -3
  10. package/esm2022/lib/grids/resizing/resizer.component.mjs +3 -3
  11. package/esm2022/lib/grids/resizing/resizer.directive.mjs +12 -3
  12. package/esm2022/lib/grids/resizing/resizing.service.mjs +4 -4
  13. package/fesm2022/igniteui-angular.mjs +36 -15
  14. package/fesm2022/igniteui-angular.mjs.map +1 -1
  15. package/lib/core/styles/components/checkbox/_checkbox-component.scss +8 -4
  16. package/lib/core/styles/components/checkbox/_checkbox-theme.scss +7 -1
  17. package/lib/core/styles/components/chip/_chip-theme.scss +1 -1
  18. package/lib/core/styles/components/combo/_combo-theme.scss +2 -2
  19. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +3 -7
  20. package/lib/core/styles/components/grid/_grid-theme.scss +19 -15
  21. package/lib/core/styles/components/progress/_progress-theme.scss +55 -7
  22. package/lib/grids/common/grid.interface.d.ts +4 -0
  23. package/lib/grids/grid-base.directive.d.ts +5 -2
  24. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +1 -1
  25. package/lib/grids/resizing/resizer.directive.d.ts +2 -0
  26. package/lib/grids/resizing/resizing.service.d.ts +2 -2
  27. package/package.json +1 -1
  28. package/styles/igniteui-angular-dark.css +1 -1
  29. package/styles/igniteui-angular.css +1 -1
  30. package/styles/igniteui-bootstrap-dark.css +1 -1
  31. package/styles/igniteui-bootstrap-light.css +1 -1
  32. package/styles/igniteui-dark-green.css +1 -1
  33. package/styles/igniteui-fluent-dark-excel.css +1 -1
  34. package/styles/igniteui-fluent-dark-word.css +1 -1
  35. package/styles/igniteui-fluent-dark.css +1 -1
  36. package/styles/igniteui-fluent-light-excel.css +1 -1
  37. package/styles/igniteui-fluent-light-word.css +1 -1
  38. package/styles/igniteui-fluent-light.css +1 -1
  39. package/styles/igniteui-indigo-dark.css +1 -1
  40. package/styles/igniteui-indigo-light.css +1 -1
  41. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  42. package/styles/maps/igniteui-angular.css.map +1 -1
  43. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  44. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  45. package/styles/maps/igniteui-dark-green.css.map +1 -1
  46. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  47. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  50. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  51. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  52. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  53. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -2233,4 +2233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
2233
2233
  }], emptyPivotGridTemplate: [{
2234
2234
  type: Input
2235
2235
  }] } });
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==
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+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IG1pbkNvbHVtbldpZHRoKCkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEhfU1VQRVJfQ09NUEFDVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbigndmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55LCBhbnlbXT4+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==