@decaf-ts/for-angular 0.0.16 → 0.0.18

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 (65) hide show
  1. package/assets/i18n/en.json +9 -69
  2. package/assets/i18n/pt.json +80 -0
  3. package/assets/icons/icon-128.webp +0 -0
  4. package/assets/icons/icon-192.webp +0 -0
  5. package/assets/icons/icon-256.webp +0 -0
  6. package/assets/icons/icon-48.webp +0 -0
  7. package/assets/icons/icon-512.webp +0 -0
  8. package/assets/icons/icon-72.webp +0 -0
  9. package/assets/icons/icon-96.webp +0 -0
  10. package/assets/images/apple-touch-icon.png +0 -0
  11. package/assets/images/favicon.png +0 -0
  12. package/assets/images/favicon.svg +29 -0
  13. package/components/component-renderer/component-renderer.component.d.ts +5 -4
  14. package/components/crud-field/crud-field.component.d.ts +186 -22
  15. package/components/crud-form/crud-form.component.d.ts +194 -8
  16. package/components/empty-state/empty-state.component.d.ts +9 -10
  17. package/components/fieldset/fieldset.component.d.ts +383 -36
  18. package/components/filter/filter.component.d.ts +11 -2
  19. package/components/list/list.component.d.ts +1 -1
  20. package/components/list-item/list-item.component.d.ts +2 -2
  21. package/components/model-renderer/model-renderer.component.d.ts +1 -5
  22. package/directives/collapsable.directive.d.ts +1 -0
  23. package/engine/NgxBaseComponent.d.ts +43 -43
  24. package/engine/NgxCrudFormField.d.ts +7 -3
  25. package/engine/NgxFormService.d.ts +113 -12
  26. package/engine/NgxRenderingEngine.d.ts +178 -25
  27. package/engine/constants.d.ts +11 -6
  28. package/engine/decorators.d.ts +2 -2
  29. package/engine/index.d.ts +4 -2
  30. package/engine/interfaces.d.ts +271 -0
  31. package/engine/types.d.ts +11 -206
  32. package/esm2022/components/component-renderer/component-renderer.component.mjs +13 -11
  33. package/esm2022/components/crud-field/crud-field.component.mjs +213 -8
  34. package/esm2022/components/crud-form/crud-form.component.mjs +133 -13
  35. package/esm2022/components/empty-state/empty-state.component.mjs +13 -12
  36. package/esm2022/components/fieldset/fieldset.component.mjs +485 -43
  37. package/esm2022/components/filter/filter.component.mjs +16 -6
  38. package/esm2022/components/layout/layout.component.mjs +3 -3
  39. package/esm2022/components/list/list.component.mjs +4 -5
  40. package/esm2022/components/list-item/list-item.component.mjs +10 -10
  41. package/esm2022/components/model-renderer/model-renderer.component.mjs +9 -8
  42. package/esm2022/components/pagination/pagination.component.mjs +7 -7
  43. package/esm2022/components/searchbar/searchbar.component.mjs +3 -3
  44. package/esm2022/directives/collapsable.directive.mjs +3 -2
  45. package/esm2022/engine/NgxBaseComponent.mjs +64 -63
  46. package/esm2022/engine/NgxCrudFormField.mjs +14 -4
  47. package/esm2022/engine/NgxFormService.mjs +239 -27
  48. package/esm2022/engine/NgxRenderingEngine.mjs +218 -46
  49. package/esm2022/engine/ValidatorFactory.mjs +6 -4
  50. package/esm2022/engine/constants.mjs +14 -9
  51. package/esm2022/engine/decorators.mjs +6 -6
  52. package/esm2022/engine/index.mjs +5 -3
  53. package/esm2022/engine/interfaces.mjs +4 -0
  54. package/esm2022/engine/types.mjs +1 -3
  55. package/esm2022/helpers/utils.mjs +53 -32
  56. package/esm2022/i18n/Loader.mjs +82 -0
  57. package/fesm2022/decaf-ts-for-angular.mjs +3030 -2097
  58. package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  59. package/helpers/utils.d.ts +42 -16
  60. package/i18n/Loader.d.ts +48 -0
  61. package/package.json +11 -1
  62. package/engine/NgxRenderingEngine2.d.ts +0 -250
  63. package/esm2022/engine/NgxRenderingEngine2.mjs +0 -332
  64. package/esm2022/interfaces.mjs +0 -2
  65. package/interfaces.d.ts +0 -28
@@ -144,7 +144,7 @@ export class PaginationComponent extends NgxBaseComponent {
144
144
  if (page)
145
145
  this.current = page;
146
146
  this.clickEvent.emit({
147
- name: EventConstants.CLICK_EVENT,
147
+ name: EventConstants.CLICK,
148
148
  data: {
149
149
  direction,
150
150
  page: this.current
@@ -179,10 +179,10 @@ export class PaginationComponent extends NgxBaseComponent {
179
179
  if (!current)
180
180
  current = this.current;
181
181
  const pages = [];
182
- function getPage(index, text = '') {
182
+ function getPage(index, text = '', clazz = 'button') {
183
183
  if (pages.some(item => item['index'] === index))
184
184
  return;
185
- pages.push({ index, text: index != null ? index.toString().padStart(2, '0') : text });
185
+ pages.push({ index, text: index != null ? index.toString().padStart(2, '0') : text, class: clazz });
186
186
  }
187
187
  if (total <= 5) {
188
188
  for (let i = 1; i <= total; i++)
@@ -200,7 +200,7 @@ export class PaginationComponent extends NgxBaseComponent {
200
200
  getPage(current);
201
201
  // Adiciona "..." entre os blocos
202
202
  if (current && current < total - 2)
203
- getPage(null, '...');
203
+ getPage(null, '...', 'separator');
204
204
  // Adiciona os dois últimos
205
205
  getPage(total - 1);
206
206
  getPage(total);
@@ -304,14 +304,14 @@ export class PaginationComponent extends NgxBaseComponent {
304
304
  this.handleClick(page > this.current ? 'next' : 'previous', page);
305
305
  }
306
306
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PaginationComponent, isStandalone: true, selector: "ngx-decaf-pagination", inputs: { totalPages: "totalPages", current: "current" }, outputs: { clickEvent: "clickEvent" }, usesInheritance: true, ngImport: i0, template: " <div id=\"dcf-paginator-container\" class=\"dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination aeon-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index'], 'dcf-disabled': page['index'] === ndivl}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: ["#dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:top;color:var(--ion-color-gray-7);font-weight:600;width:36px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem}.dcf-pagination>*:not(.disabled){cursor:pointer}.dcf-pagination>*:hover .page-item{color:var(--ion-color-primary)}.dcf-pagination>* .page-item{color:var(--ion-color-gray-7);font-weight:600}.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--ion-color-primary-rgb),.15)}.dcf-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:var(--ion-color-gray-8);transition:color .1s ease-in-out}.dcf-pagination>*>:hover{color:var(--ion-color-gray-6);text-decoration:none}.dcf-pagination .dcf-disabled>*{opacity:.5;color:var(--ion-color-gray-6)}.dcf-pagination-resume{color:var(--ion-color-gray-8);margin:1rem 0px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
307
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PaginationComponent, isStandalone: true, selector: "ngx-decaf-pagination", inputs: { totalPages: "totalPages", current: "current" }, outputs: { clickEvent: "clickEvent" }, usesInheritance: true, ngImport: i0, template: " <div [id]=\"uid\" class=\"dcf-paginator-container dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" [class]=\"page['class']\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index']}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [".dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:center;text-align:center;font-weight:600;width:34px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}@media (prefers-color-scheme: dark){.dcf-pagination .page-item{color:var(--dcf-color-gray-3)!important}}@media (prefers-color-scheme: light){.dcf-pagination .page-item{color:var(--dcf-color-gray-7)!important}}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem;cursor:pointer}.dcf-pagination>*.dcf-disabled{pointer-events:none;touch-action:none;cursor:text}.dcf-pagination>*.dcf-active{pointer-events:none;touch-action:none}@media (prefers-color-scheme: light){.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--dcf-color-primary-rgb),.15)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}@media (prefers-color-scheme: dark){.dcf-pagination>*.dcf-active .page-item{background:var(--dcf-color-gray-7)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}.dcf-pagination-resume{margin:1rem 0px;text-align:center}@media (prefers-color-scheme: light){.dcf-pagination-resume{color:var(--dcf-color-gray-8)}}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
308
308
  }
309
309
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, decorators: [{
310
310
  type: Component,
311
311
  args: [{ selector: 'ngx-decaf-pagination', imports: [
312
312
  ForAngularModule,
313
313
  IonIcon
314
- ], standalone: true, template: " <div id=\"dcf-paginator-container\" class=\"dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination aeon-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index'], 'dcf-disabled': page['index'] === ndivl}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: ["#dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:top;color:var(--ion-color-gray-7);font-weight:600;width:36px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem}.dcf-pagination>*:not(.disabled){cursor:pointer}.dcf-pagination>*:hover .page-item{color:var(--ion-color-primary)}.dcf-pagination>* .page-item{color:var(--ion-color-gray-7);font-weight:600}.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--ion-color-primary-rgb),.15)}.dcf-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:var(--ion-color-gray-8);transition:color .1s ease-in-out}.dcf-pagination>*>:hover{color:var(--ion-color-gray-6);text-decoration:none}.dcf-pagination .dcf-disabled>*{opacity:.5;color:var(--ion-color-gray-6)}.dcf-pagination-resume{color:var(--ion-color-gray-8);margin:1rem 0px;text-align:center}\n"] }]
314
+ ], standalone: true, template: " <div [id]=\"uid\" class=\"dcf-paginator-container dcf-flex dcf-flex-center\">\n <div class=\"dcf-width-1-1\">\n <div class=\"dcf-pagination-resume\" [innerHTML]=\"locale + '.resume' | translate: {value0: current, value1: last}\"></div>\n <div #paginationComponent class=\"dcf-pagination dcf-flex-center\">\n <div\n aria-label=\"previous\"\n tabindex=\"0\"\n (click)=\"previous()\"\n (keydown.enter)=\"previous()\" [ngClass]=\"{'dcf-disabled': current === 1}\">\n <ion-icon name=\"chevron-back-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n @for(page of pages; track page) {\n <div tabindex=\"0\" [class]=\"page['class']\" (click)=\"navigate(page['index'])\"\n (keydown.enter)=\"navigate(page['index'])\"\n [ngClass]=\"{'dcf-active': current === page['index']}\">\n <span class=\"page-item\">{{ page['text'] }}</span>\n </div>\n }\n <div\n tabindex=\"0\" (click)=\"next()\"\n (keydown.enter)=\"next()\"\n [ngClass]=\"{'dcf-disabled': current === last}\">\n <ion-icon name=\"chevron-forward-outline\" aria-hidden=\"true\"></ion-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [".dcf-paginator-container{margin-bottom:1rem}.dcf-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.dcf-pagination .page-item{display:flex;justify-content:center;align-items:center;text-align:center;font-weight:600;width:34px;line-height:34px;padding:0!important;border-radius:50%;box-sizing:border-box}@media (prefers-color-scheme: dark){.dcf-pagination .page-item{color:var(--dcf-color-gray-3)!important}}@media (prefers-color-scheme: light){.dcf-pagination .page-item{color:var(--dcf-color-gray-7)!important}}.dcf-pagination>*{flex:none;padding-left:0;position:relative;margin:0px .15rem;cursor:pointer}.dcf-pagination>*.dcf-disabled{pointer-events:none;touch-action:none;cursor:text}.dcf-pagination>*.dcf-active{pointer-events:none;touch-action:none}@media (prefers-color-scheme: light){.dcf-pagination>*.dcf-active .page-item{background:rgba(var(--dcf-color-primary-rgb),.15)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}@media (prefers-color-scheme: dark){.dcf-pagination>*.dcf-active .page-item{background:var(--dcf-color-gray-7)}.dcf-pagination>*:hover:not(.dcf-active) *{color:var(--dcf-color-primary)!important}}.dcf-pagination-resume{margin:1rem 0px;text-align:center}@media (prefers-color-scheme: light){.dcf-pagination-resume{color:var(--dcf-color-gray-8)}}\n"] }]
315
315
  }], ctorParameters: () => [], propDecorators: { totalPages: [{
316
316
  type: Input,
317
317
  args: [{ required: true }]
@@ -320,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
320
320
  }], clickEvent: [{
321
321
  type: Output
322
322
  }] } });
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUE2QixNQUFNLGNBQWMsQ0FBQzs7OztBQUd6RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQVlILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBZ0I7SUFvRXZEOzs7O09BSUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBeEUvQjs7Ozs7Ozs7V0FRRztRQUNNLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQWM5Qzs7Ozs7Ozs7V0FRRztRQUVILFlBQU8sR0FBRyxDQUFDLENBQUM7UUFxQlo7Ozs7Ozs7O1dBUUc7UUFFSCxlQUFVLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBU3pGLFFBQVEsQ0FBQyxFQUFDLGtCQUFrQixFQUFF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QUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFhekIsT0FBTztzQkFETixLQUFLO2dCQWdDTixVQUFVO3NCQURULE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZXZyb25CYWNrT3V0bGluZSwgY2hldnJvbkZvcndhcmRPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSB9IGZyb20gJy4uLy4uL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEJhc2VDb21wb25lbnQnO1xuaW1wb3J0IHsgRXZlbnRDb25zdGFudHMsIEtleVZhbHVlLCBTdHJpbmdPckJvb2xlYW4gfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkN1c3RvbUV2ZW50IH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHBhZ2luYXRpb24gY29tcG9uZW50IGZvciBuYXZpZ2F0aW5nIHRocm91Z2ggbXVsdGlwbGUgcGFnZXMgb2YgY29udGVudC5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgdXNlciBpbnRlcmZhY2UgZm9yIHBhZ2luYXRlZCBjb250ZW50IG5hdmlnYXRpb24sXG4gKiBkaXNwbGF5aW5nIHBhZ2UgbnVtYmVycyBhbmQgbmF2aWdhdGlvbiBjb250cm9scy4gSXQgc3VwcG9ydHMgY3VzdG9taXphYmxlIHBhZ2UgY291bnRzLFxuICogY3VycmVudCBwYWdlIHRyYWNraW5nLCBhbmQgZW1pdHMgZXZlbnRzIHdoZW4gdXNlcnMgbmF2aWdhdGUgYmV0d2VlbiBwYWdlcy5cbiAqXG4gKiBUaGUgY29tcG9uZW50IGludGVsbGlnZW50bHkgaGFuZGxlcyBsYXJnZSBudW1iZXJzIG9mIHBhZ2VzIGJ5IHNob3dpbmcgYSBzdWJzZXQgb2YgcGFnZVxuICogbnVtYmVycyB3aXRoIGVsbGlwc2VzIHRvIGluZGljYXRlIHNraXBwZWQgcGFnZXMsIGVuc3VyaW5nIHRoZSBVSSByZW1haW5zIGNsZWFuIGFuZCB1c2FibGVcbiAqIGV2ZW4gd2l0aCBtYW55IHBhZ2VzLlxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICogICBwYXJ0aWNpcGFudCBFIGFzIEV4dGVybmFsIENvbXBvbmVudFxuICpcbiAqICAgVS0+PlA6IENsaWNrIHBhZ2UgbnVtYmVyXG4gKiAgIFAtPj5QOiBuYXZpZ2F0ZShwYWdlKVxuICogICBQLT4+UDogaGFuZGxlQ2xpY2soZGlyZWN0aW9uLCBwYWdlKVxuICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggUGFnaW5hdGlvbkN1c3RvbUV2ZW50XG4gKlxuICogICBVLT4+UDogQ2xpY2sgbmV4dCBidXR0b25cbiAqICAgUC0+PlA6IG5leHQoKVxuICogICBQLT4+UDogaGFuZGxlQ2xpY2soJ25leHQnKVxuICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggUGFnaW5hdGlvbkN1c3RvbUV2ZW50XG4gKlxuICogICBVLT4+UDogQ2xpY2sgcHJldmlvdXMgYnV0dG9uXG4gKiAgIFAtPj5QOiBwcmV2aW91cygpXG4gKiAgIFAtPj5QOiBoYW5kbGVDbGljaygncHJldmlvdXMnKVxuICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggUGFnaW5hdGlvbkN1c3RvbUV2ZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIDxuZ3gtZGVjYWYtcGFnaW5hdGlvblxuICogICBbcGFnZXNdPVwiMTBcIlxuICogICBbY3VycmVudF09XCIzXCJcbiAqICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gKiA8L25neC1kZWNhZi1wYWdpbmF0aW9uPlxuICpcbiAqIEBleHRlbmRzIHtOZ3hCYXNlQ29tcG9uZW50fVxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLXBhZ2luYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIEZvckFuZ3VsYXJNb2R1bGUsXG4gICAgSW9uSWNvblxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB1c2VzIHRyYW5zbGF0aW9uIHNlcnZpY2VzLlxuICAgKiBAc3VtbWFyeSBXaGVuIHNldCB0byB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgYXR0ZW1wdCB0byB1c2UgdHJhbnNsYXRpb24gc2VydmljZXNcbiAgICogZm9yIGFueSB0ZXh0IGNvbnRlbnQuIFRoaXMgYWxsb3dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmdPckJvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG92ZXJyaWRlIHRyYW5zbGF0YWJsZTogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgdG8gZGlzcGxheSBpbiB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBmb3IgbmF2aWdhdGlvbi4gVGhpcyBpcyBhIHJlcXVpcmVkXG4gICAqIGlucHV0IHRoYXQgZGV0ZXJtaW5lcyBob3cgbWFueSBwYWdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYW5kIGRpc3BsYXllZC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHJlcXVpcmVkXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICB0b3RhbFBhZ2VzITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnRseSBhY3RpdmUgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGljaCBwYWdlIGlzIGN1cnJlbnRseSBhY3RpdmUgb3Igc2VsZWN0ZWQuIFRoaXMgdmFsdWUgaXMgdXNlZFxuICAgKiB0byBoaWdobGlnaHQgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgVUkgYW5kIGFzIGEgcmVmZXJlbmNlIHBvaW50IGZvciBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjdXJyZW50ID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHBhZ2Ugb2JqZWN0cyBmb3IgcmVuZGVyaW5nIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdGhlIHByb2Nlc3NlZCBwYWdlIGRhdGEgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKiBFYWNoIG9iamVjdCBpbmNsdWRlcyBhbiBpbmRleCAocGFnZSBudW1iZXIpIGFuZCB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWVbXX1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIHBhZ2VzITogS2V5VmFsdWVbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsYXN0IHBhZ2UgbnVtYmVyIGluIHRoZSBwYWdpbmF0aW9uLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBwYWdlIGZvciBib3VuZGFyeSBjaGVja2luZyBkdXJpbmcgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGxhc3QhOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBwYWdpbmF0aW9uIG5hdmlnYXRpb24gZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBhIGN1c3RvbSBldmVudCB3aGVuIHVzZXJzIG5hdmlnYXRlIGJldHdlZW4gcGFnZXMsIGVpdGhlciBieSBjbGlja2luZ1xuICAgKiBvbiBwYWdlIG51bWJlcnMgb3IgdXNpbmcgdGhlIG5leHQvcHJldmlvdXMgYnV0dG9ucy4gVGhlIGV2ZW50IGNvbnRhaW5zIGluZm9ybWF0aW9uXG4gICAqIGFib3V0IHRoZSBuYXZpZ2F0aW9uIGRpcmVjdGlvbiBhbmQgdGhlIHRhcmdldCBwYWdlIG51bWJlci5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxQYWdpbmF0aW9uQ3VzdG9tRXZlbnQ+fVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uQ3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uQ3VzdG9tRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFBhZ2luYXRpb25Db21wb25lbnQuXG4gICAqIENhbGxzIHRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgY29tcG9uZW50IG5hbWUgZm9yIGdlbmVyYXRlIGJhc2UgbG9jYWxlIHN0cmluZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUGFnaW5hdGlvbkNvbXBvbmVudFwiKTtcbiAgICAgYWRkSWNvbnMoe2NoZXZyb25CYWNrT3V0bGluZSwgY2hldnJvbkZvcndhcmRPdXRsaW5lfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgaW5pdGlhbGl6aW5nIHRoZSBsb2NhbGUgc2V0dGluZ3MgYmFzZWQgb24gdGhlXG4gICAqIHRyYW5zbGF0YWJsZSBwcm9wZXJ0eSwgZ2VuZXJhdGluZyB0aGUgcGFnZSBudW1iZXJzIGJhc2VkIG9uIHRoZSB0b3RhbCBwYWdlcyBhbmRcbiAgICogY3VycmVudCBwYWdlLCBhbmQgc3RvcmluZyB0aGUgbGFzdCBwYWdlIG51bWJlciBmb3IgYm91bmRhcnkgY2hlY2tpbmcuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBBLT4+UDogbmdPbkluaXQoKVxuICAgKiAgIFAtPj5QOiBnZXRMb2NhbGUodHJhbnNsYXRhYmxlKVxuICAgKiAgIFAtPj5QOiBTZXQgbG9jYWxlXG4gICAqICAgUC0+PlA6IGdldFBhZ2VzKGRhdGEsIGN1cnJlbnQpXG4gICAqICAgUC0+PlA6IFNldCBwYWdlcyBhcnJheVxuICAgKiAgIFAtPj5QOiBTZXQgbGFzdCBwYWdlIG51bWJlclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbGUodGhpcy50cmFuc2xhdGFibGUpO1xuICAgIHRoaXMucGFnZXMgPSB0aGlzLmdldFBhZ2VzKHRoaXMudG90YWxQYWdlcywgdGhpcy5jdXJyZW50KSBhcyBLZXlWYWx1ZVtdO1xuICAgIHRoaXMubGFzdCA9IHRoaXMudG90YWxQYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGljayBldmVudHMgb24gcGFnaW5hdGlvbiBjb250cm9scy5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHVzZXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LCB1cGRhdGluZyB0aGVcbiAgICogY3VycmVudCBwYWdlIGlmIHNwZWNpZmllZCBhbmQgZW1pdHRpbmcgYW4gZXZlbnQgd2l0aCBuYXZpZ2F0aW9uIGRldGFpbHMuIFRoaXMgbWV0aG9kXG4gICAqIGlzIGNhbGxlZCB3aGVuIHVzZXJzIGNsaWNrIG9uIHBhZ2UgbnVtYmVycyBvciBuYXZpZ2F0aW9uIGJ1dHRvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7KCduZXh0JyB8ICdwcmV2aW91cycpfSBkaXJlY3Rpb24gLSBUaGUgZGlyZWN0aW9uIG9mIG5hdmlnYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYWdlXSAtIE9wdGlvbmFsIHBhZ2UgbnVtYmVyIHRvIG5hdmlnYXRlIHRvIGRpcmVjdGx5XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEV4dGVybmFsIENvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwYWdpbmF0aW9uIGNvbnRyb2xcbiAgICogICBQLT4+UDogaGFuZGxlQ2xpY2soZGlyZWN0aW9uLCBwYWdlPylcbiAgICogICBhbHQgcGFnZSBpcyBwcm92aWRlZFxuICAgKiAgICAgUC0+PlA6IFVwZGF0ZSBjdXJyZW50IHBhZ2VcbiAgICogICBlbmRcbiAgICogICBQLT4+RTogRW1pdCBjbGlja0V2ZW50IHdpdGggZGlyZWN0aW9uIGFuZCBwYWdlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDbGljayhkaXJlY3Rpb246ICduZXh0JyB8ICdwcmV2aW91cycsIHBhZ2U/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZihwYWdlKVxuICAgICAgdGhpcy5jdXJyZW50ID0gcGFnZTtcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICBuYW1lOiBFdmVudENvbnN0YW50cy5DTElDS19FVkVOVCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBwYWdlOiB0aGlzLmN1cnJlbnRcbiAgICAgIH0sXG4gICAgICBjb21wb25lbnQ6IHRoaXMuY29tcG9uZW50TmFtZVxuICAgIH0gYXMgUGFnaW5hdGlvbkN1c3RvbUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIHRoZSBhcnJheSBvZiBwYWdlIG9iamVjdHMgZm9yIGRpc3BsYXkuXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYW4gYXJyYXkgb2YgcGFnZSBvYmplY3RzIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgYW5kXG4gICAqIHRoZSBjdXJyZW50IHBhZ2UuIEZvciBzbWFsbCBwYWdlIGNvdW50cyAo4omkNSksIGFsbCBwYWdlcyBhcmUgc2hvd24uIEZvciBsYXJnZXIgcGFnZVxuICAgKiBjb3VudHMsIGEgc3Vic2V0IGlzIHNob3duIHdpdGggZWxsaXBzZXMgdG8gaW5kaWNhdGUgc2tpcHBlZCBwYWdlcy4gVGhpcyBlbnN1cmVzXG4gICAqIHRoZSBwYWdpbmF0aW9uIFVJIHJlbWFpbnMgY2xlYW4gYW5kIHVzYWJsZSBldmVuIHdpdGggbWFueSBwYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsIC0gVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW2N1cnJlbnRdIC0gVGhlIGN1cnJlbnQgYWN0aXZlIHBhZ2UgKGRlZmF1bHRzIHRvIHRoaXMuY3VycmVudClcbiAgICogQHJldHVybnMge0tleVZhbHVlW119IEFycmF5IG9mIHBhZ2Ugb2JqZWN0cyB3aXRoIGluZGV4IGFuZCB0ZXh0IHByb3BlcnRpZXNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogZmxvd2NoYXJ0IFREXG4gICAqICAgQVtTdGFydF0gLS0+IEJ7dG90YWwgPD0gNT99XG4gICAqICAgQiAtLT58WWVzfCBDW1Nob3cgYWxsIHBhZ2VzXVxuICAgKiAgIEIgLS0+fE5vfCBEW1Nob3cgZmlyc3QgcGFnZV1cbiAgICogICBEIC0tPiBFW1Nob3cgbGFzdCBwYWdlc11cbiAgICogICBFIC0tPiBGW0FkZCBlbGxpcHNlcyBmb3Igc2tpcHBlZCBwYWdlc11cbiAgICogICBDIC0tPiBHW1JldHVybiBwYWdlcyBhcnJheV1cbiAgICogICBGIC0tPiBHXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBnZXRQYWdlcyh0b3RhbDogbnVtYmVyLCBjdXJyZW50PzogbnVtYmVyKTogS2V5VmFsdWVbXSB7XG4gICAgaWYgKCFjdXJyZW50KSBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgY29uc3QgcGFnZXM6IEtleVZhbHVlW10gPSBbXTtcblxuICAgIGZ1bmN0aW9uIGdldFBhZ2UoaW5kZXg6IG51bWJlciB8IG51bGwsIHRleHQgPSAnJykge1xuICAgICAgICBpZiAocGFnZXMuc29tZShpdGVtID0+IGl0ZW1bJ2luZGV4J10gPT09IGluZGV4KSkgcmV0dXJuO1xuICAgICAgICBwYWdlcy5wdXNoKHsgaW5kZXgsIHRleHQ6IGluZGV4ICE9IG51bGwgPyBpbmRleC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgOiB0ZXh0IH0pO1xuICAgIH1cblxuICAgIGlmICh0b3RhbCA8PSA1KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsOyBpKyspIGdldFBhZ2UoaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkaWNpb25hIG9zIGRvaXMgcHJpbWVpcm9zXG4gICAgICBnZXRQYWdlKDEpO1xuICAgICAgZ2V0UGFnZSgyKTtcblxuICAgICAgLy8gQWRpY2lvbmEgXCIuLi5cIiBlbnRyZSBvcyBibG9jb3NcbiAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgPiAzKSBnZXRQYWdlKG51bGwsICcuLi4nKTtcblxuICAgICAgLy8gQWRpY2lvbmEgYSBww6FnaW5hIGF0dWFsIChzZSBlc3RpdmVyIG5vIG1laW8pXG4gICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50ID4gMiAmJiBjdXJyZW50IDwgdG90YWwgLSAxKSBnZXRQYWdlKGN1cnJlbnQpO1xuXG4gICAgICAvLyBBZGljaW9uYSBcIi4uLlwiIGVudHJlIG9zIGJsb2Nvc1xuICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudCA8IHRvdGFsIC0gMikgZ2V0UGFnZShudWxsLCAnLi4uJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIG9zIGRvaXMgw7psdGltb3NcbiAgICAgIGdldFBhZ2UodG90YWwgLSAxKTtcbiAgICAgIGdldFBhZ2UodG90YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBhY3RpdmUgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgdGhhdCBpcyBhY3RpdmUgaW4gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgcGFnZSBzdGF0ZSBmcm9tIG91dHNpZGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGdldEN1cnJlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcGFnZS5cbiAgICogQHN1bW1hcnkgSW5jcmVtZW50cyB0aGUgY3VycmVudCBwYWdlIG51bWJlciBpZiBub3QgYXQgdGhlIGxhc3QgcGFnZSBhbmQgdHJpZ2dlcnNcbiAgICogdGhlIGNsaWNrIGV2ZW50IGhhbmRsZXIgd2l0aCAnbmV4dCcgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcIm5leHRcIiBidXR0b24gaW4gdGhlIHBhZ2luYXRpb24gVUkuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBVLT4+UDogQ2xpY2sgbmV4dCBidXR0b25cbiAgICogICBQLT4+UDogbmV4dCgpXG4gICAqICAgYWx0IHBhZ2UgPD0gbWF4IHBhZ2VzXG4gICAqICAgICBQLT4+UDogSW5jcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCduZXh0JylcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG5leHQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuY3VycmVudCArIDE7XG4gICAgaWYocGFnZSA8PSBPYmplY3Qua2V5cyh0aGlzLnBhZ2VzKT8ubGVuZ3RoIHx8IDApIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IHBhZ2U7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKCduZXh0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gICAqIEBzdW1tYXJ5IERlY3JlbWVudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaWYgbm90IGF0IHRoZSBmaXJzdCBwYWdlIGFuZCB0cmlnZ2Vyc1xuICAgKiB0aGUgY2xpY2sgZXZlbnQgaGFuZGxlciB3aXRoICdwcmV2aW91cycgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcInByZXZpb3VzXCIgYnV0dG9uIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIHByZXZpb3VzIGJ1dHRvblxuICAgKiAgIFAtPj5QOiBwcmV2aW91cygpXG4gICAqICAgYWx0IHBhZ2UgPiAwXG4gICAqICAgICBQLT4+UDogRGVjcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCdwcmV2aW91cycpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlID0gdGhpcy5jdXJyZW50IC0gMTtcbiAgICBpZihwYWdlID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50ID0gcGFnZTtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soJ3ByZXZpb3VzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBwYWdlIG51bWJlci5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyB0aGUgY3VycmVudCBwYWdlIHRvIHRoZSBzcGVjaWZpZWQgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXJzXG4gICAqIHRoZSBjbGljayBldmVudCBoYW5kbGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5XG4gICAqIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBkaXJlY3RseSBvbiBhIHBhZ2UgbnVtYmVyIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IG51bGx9IHBhZ2UgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwYWdlIG51bWJlclxuICAgKiAgIFAtPj5QOiBuYXZpZ2F0ZShwYWdlKVxuICAgKiAgIGFsdCBwYWdlIGlzIG5vdCBudWxsIGFuZCBkaWZmZXJlbnQgZnJvbSBjdXJyZW50XG4gICAqICAgICBQLT4+UDogRGV0ZXJtaW5lIGRpcmVjdGlvbiAobmV4dC9wcmV2aW91cylcbiAgICogICAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2UpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBuYXZpZ2F0ZShwYWdlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYocGFnZSAhPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnQgIT09IHBhZ2UgYXMgbnVtYmVyKVxuICAgICAgdGhpcy5oYW5kbGVDbGljayhwYWdlID4gdGhpcy5jdXJyZW50ID8gJ25leHQnIDogJ3ByZXZpb3VzJywgcGFnZSk7XG4gIH1cbn1cbiIsIiA8ZGl2IGlkPVwiZGNmLXBhZ2luYXRvci1jb250YWluZXJcIiBjbGFzcz1cImRjZi1mbGV4IGRjZi1mbGV4LWNlbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbi1yZXN1bWVcIiBbaW5uZXJIVE1MXT1cImxvY2FsZSArICcucmVzdW1lJyB8IHRyYW5zbGF0ZToge3ZhbHVlMDogY3VycmVudCwgdmFsdWUxOiBsYXN0fVwiPjwvZGl2PlxuICAgIDxkaXYgI3BhZ2luYXRpb25Db21wb25lbnQgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbiBhZW9uLXBhZ2luYXRpb24gZGNmLWZsZXgtY2VudGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGFyaWEtbGFiZWw9XCJwcmV2aW91c1wiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChjbGljayk9XCJwcmV2aW91cygpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicHJldmlvdXMoKVwiIFtuZ0NsYXNzXT1cInsnZGNmLWRpc2FibGVkJzogY3VycmVudCA9PT0gMX1cIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBmb3IocGFnZSBvZiBwYWdlczsgdHJhY2sgcGFnZSkge1xuICAgICAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJuYXZpZ2F0ZShwYWdlWydpbmRleCddKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibmF2aWdhdGUocGFnZVsnaW5kZXgnXSlcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGNmLWFjdGl2ZSc6IGN1cnJlbnQgPT09IHBhZ2VbJ2luZGV4J10sICdkY2YtZGlzYWJsZWQnOiBwYWdlWydpbmRleCddID09PSBuZGl2bH1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtaXRlbVwiPnt7IHBhZ2VbJ3RleHQnXSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2XG4gICAgICAgIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJuZXh0KClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJuZXh0KClcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2RjZi1kaXNhYmxlZCc6IGN1cnJlbnQgPT09IGxhc3R9XCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUE2QixNQUFNLGNBQWMsQ0FBQzs7OztBQUd6RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQVlILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBZ0I7SUFvRXZEOzs7O09BSUc7SUFDSDtRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBeEUvQjs7Ozs7Ozs7V0FRRztRQUNNLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQWM5Qzs7Ozs7Ozs7V0FRRztRQUVILFlBQU8sR0FBRyxDQUFDLENBQUM7UUFxQlo7Ozs7Ozs7O1dBUUc7UUFFSCxlQUFVLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBU3pGLFFBQVEsQ0FBQyxFQUFDLGtCQUFrQixFQUFF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Qjt3QkFDaEIsT0FBTztxQkFDUixjQUNXLElBQUk7d0RBMEJoQixVQUFVO3NCQURULEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWF6QixPQUFPO3NCQUROLEtBQUs7Z0JBZ0NOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hldnJvbkJhY2tPdXRsaW5lLCBjaGV2cm9uRm9yd2FyZE91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBFdmVudENvbnN0YW50cywgS2V5VmFsdWUsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ3VzdG9tRXZlbnQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgcGFnaW5hdGlvbiBjb21wb25lbnQgZm9yIG5hdmlnYXRpbmcgdGhyb3VnaCBtdWx0aXBsZSBwYWdlcyBvZiBjb250ZW50LlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSB1c2VyIGludGVyZmFjZSBmb3IgcGFnaW5hdGVkIGNvbnRlbnQgbmF2aWdhdGlvbixcbiAqIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIGFuZCBuYXZpZ2F0aW9uIGNvbnRyb2xzLiBJdCBzdXBwb3J0cyBjdXN0b21pemFibGUgcGFnZSBjb3VudHMsXG4gKiBjdXJyZW50IHBhZ2UgdHJhY2tpbmcsIGFuZCBlbWl0cyBldmVudHMgd2hlbiB1c2VycyBuYXZpZ2F0ZSBiZXR3ZWVuIHBhZ2VzLlxuICpcbiAqIFRoZSBjb21wb25lbnQgaW50ZWxsaWdlbnRseSBoYW5kbGVzIGxhcmdlIG51bWJlcnMgb2YgcGFnZXMgYnkgc2hvd2luZyBhIHN1YnNldCBvZiBwYWdlXG4gKiBudW1iZXJzIHdpdGggZWxsaXBzZXMgdG8gaW5kaWNhdGUgc2tpcHBlZCBwYWdlcywgZW5zdXJpbmcgdGhlIFVJIHJlbWFpbnMgY2xlYW4gYW5kIHVzYWJsZVxuICogZXZlbiB3aXRoIG1hbnkgcGFnZXMuXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gKiAgIHBhcnRpY2lwYW50IEUgYXMgRXh0ZXJuYWwgQ29tcG9uZW50XG4gKlxuICogICBVLT4+UDogQ2xpY2sgcGFnZSBudW1iZXJcbiAqICAgUC0+PlA6IG5hdmlnYXRlKHBhZ2UpXG4gKiAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2UpXG4gKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBQYWdpbmF0aW9uQ3VzdG9tRXZlbnRcbiAqXG4gKiAgIFUtPj5QOiBDbGljayBuZXh0IGJ1dHRvblxuICogICBQLT4+UDogbmV4dCgpXG4gKiAgIFAtPj5QOiBoYW5kbGVDbGljaygnbmV4dCcpXG4gKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBQYWdpbmF0aW9uQ3VzdG9tRXZlbnRcbiAqXG4gKiAgIFUtPj5QOiBDbGljayBwcmV2aW91cyBidXR0b25cbiAqICAgUC0+PlA6IHByZXZpb3VzKClcbiAqICAgUC0+PlA6IGhhbmRsZUNsaWNrKCdwcmV2aW91cycpXG4gKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBQYWdpbmF0aW9uQ3VzdG9tRXZlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogPG5neC1kZWNhZi1wYWdpbmF0aW9uXG4gKiAgIFtwYWdlc109XCIxMFwiXG4gKiAgIFtjdXJyZW50XT1cIjNcIlxuICogICAoY2xpY2tFdmVudCk9XCJoYW5kbGVQYWdlQ2hhbmdlKCRldmVudClcIj5cbiAqIDwvbmd4LWRlY2FmLXBhZ2luYXRpb24+XG4gKlxuICogQGV4dGVuZHMge05neEJhc2VDb21wb25lbnR9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgRm9yQW5ndWxhck1vZHVsZSxcbiAgICBJb25JY29uXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG5cbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgY29tcG9uZW50IHVzZXMgdHJhbnNsYXRpb24gc2VydmljZXMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gc2V0IHRvIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBhdHRlbXB0IHRvIHVzZSB0cmFuc2xhdGlvbiBzZXJ2aWNlc1xuICAgKiBmb3IgYW55IHRleHQgY29udGVudC4gVGhpcyBhbGxvd3MgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIG9mIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgb3ZlcnJpZGUgdHJhbnNsYXRhYmxlOiBTdHJpbmdPckJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyB0byBkaXNwbGF5IGluIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgYXZhaWxhYmxlIGZvciBuYXZpZ2F0aW9uLiBUaGlzIGlzIGEgcmVxdWlyZWRcbiAgICogaW5wdXQgdGhhdCBkZXRlcm1pbmVzIGhvdyBtYW55IHBhZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgZGlzcGxheWVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAcmVxdWlyZWRcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHRvdGFsUGFnZXMhOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudGx5IGFjdGl2ZSBwYWdlIG51bWJlci5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoaWNoIHBhZ2UgaXMgY3VycmVudGx5IGFjdGl2ZSBvciBzZWxlY3RlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBVSSBhbmQgYXMgYSByZWZlcmVuY2UgcG9pbnQgZm9yIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGN1cnJlbnQgPSAxO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgcGFnZSBvYmplY3RzIGZvciByZW5kZXJpbmcgaW4gdGhlIHRlbXBsYXRlLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgcHJvY2Vzc2VkIHBhZ2UgZGF0YSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRpb24gVUkuXG4gICAqIEVhY2ggb2JqZWN0IGluY2x1ZGVzIGFuIGluZGV4IChwYWdlIG51bWJlcikgYW5kIHRleHQgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZVtdfVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgcGFnZXMhOiBLZXlWYWx1ZVtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGxhc3QgcGFnZSBudW1iZXIgaW4gdGhlIHBhZ2luYXRpb24uXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IHBhZ2UgZm9yIGJvdW5kYXJ5IGNoZWNraW5nIGR1cmluZyBuYXZpZ2F0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgbGFzdCE6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIHBhZ2luYXRpb24gbmF2aWdhdGlvbiBldmVudHMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIGEgY3VzdG9tIGV2ZW50IHdoZW4gdXNlcnMgbmF2aWdhdGUgYmV0d2VlbiBwYWdlcywgZWl0aGVyIGJ5IGNsaWNraW5nXG4gICAqIG9uIHBhZ2UgbnVtYmVycyBvciB1c2luZyB0aGUgbmV4dC9wcmV2aW91cyBidXR0b25zLiBUaGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb25cbiAgICogYWJvdXQgdGhlIG5hdmlnYXRpb24gZGlyZWN0aW9uIGFuZCB0aGUgdGFyZ2V0IHBhZ2UgbnVtYmVyLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPFBhZ2luYXRpb25DdXN0b21FdmVudD59XG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgY2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPFBhZ2luYXRpb25DdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2luYXRpb25DdXN0b21FdmVudD4oKTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgUGFnaW5hdGlvbkNvbXBvbmVudC5cbiAgICogQ2FsbHMgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgZ2VuZXJhdGUgYmFzZSBsb2NhbGUgc3RyaW5nLlxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJQYWdpbmF0aW9uQ29tcG9uZW50XCIpO1xuICAgICBhZGRJY29ucyh7Y2hldnJvbkJhY2tPdXRsaW5lLCBjaGV2cm9uRm9yd2FyZE91dGxpbmV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIHNldHMgdGhlIGlucHV0IHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBpbml0aWFsaXppbmcgdGhlIGxvY2FsZSBzZXR0aW5ncyBiYXNlZCBvbiB0aGVcbiAgICogdHJhbnNsYXRhYmxlIHByb3BlcnR5LCBnZW5lcmF0aW5nIHRoZSBwYWdlIG51bWJlcnMgYmFzZWQgb24gdGhlIHRvdGFsIHBhZ2VzIGFuZFxuICAgKiBjdXJyZW50IHBhZ2UsIGFuZCBzdG9yaW5nIHRoZSBsYXN0IHBhZ2UgbnVtYmVyIGZvciBib3VuZGFyeSBjaGVja2luZy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5QOiBuZ09uSW5pdCgpXG4gICAqICAgUC0+PlA6IGdldExvY2FsZSh0cmFuc2xhdGFibGUpXG4gICAqICAgUC0+PlA6IFNldCBsb2NhbGVcbiAgICogICBQLT4+UDogZ2V0UGFnZXMoZGF0YSwgY3VycmVudClcbiAgICogICBQLT4+UDogU2V0IHBhZ2VzIGFycmF5XG4gICAqICAgUC0+PlA6IFNldCBsYXN0IHBhZ2UgbnVtYmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5wYWdlcyA9IHRoaXMuZ2V0UGFnZXModGhpcy50b3RhbFBhZ2VzLCB0aGlzLmN1cnJlbnQpIGFzIEtleVZhbHVlW107XG4gICAgdGhpcy5sYXN0ID0gdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBwYWdpbmF0aW9uIGNvbnRyb2xzLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgdXNlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnQsIHVwZGF0aW5nIHRoZVxuICAgKiBjdXJyZW50IHBhZ2UgaWYgc3BlY2lmaWVkIGFuZCBlbWl0dGluZyBhbiBldmVudCB3aXRoIG5hdmlnYXRpb24gZGV0YWlscy4gVGhpcyBtZXRob2RcbiAgICogaXMgY2FsbGVkIHdoZW4gdXNlcnMgY2xpY2sgb24gcGFnZSBudW1iZXJzIG9yIG5hdmlnYXRpb24gYnV0dG9ucy5cbiAgICpcbiAgICogQHBhcmFtIHsoJ25leHQnIHwgJ3ByZXZpb3VzJyl9IGRpcmVjdGlvbiAtIFRoZSBkaXJlY3Rpb24gb2YgbmF2aWdhdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhZ2VdIC0gT3B0aW9uYWwgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG8gZGlyZWN0bHlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRXh0ZXJuYWwgQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIHBhZ2luYXRpb24gY29udHJvbFxuICAgKiAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2U/KVxuICAgKiAgIGFsdCBwYWdlIGlzIHByb3ZpZGVkXG4gICAqICAgICBQLT4+UDogVXBkYXRlIGN1cnJlbnQgcGFnZVxuICAgKiAgIGVuZFxuICAgKiAgIFAtPj5FOiBFbWl0IGNsaWNrRXZlbnQgd2l0aCBkaXJlY3Rpb24gYW5kIHBhZ2VcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsaWNrKGRpcmVjdGlvbjogJ25leHQnIHwgJ3ByZXZpb3VzJywgcGFnZT86IG51bWJlcik6IHZvaWQge1xuICAgIGlmKHBhZ2UpXG4gICAgICB0aGlzLmN1cnJlbnQgPSBwYWdlO1xuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KHtcbiAgICAgIG5hbWU6IEV2ZW50Q29uc3RhbnRzLkNMSUNLLFxuICAgICAgZGF0YToge1xuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudDogdGhpcy5jb21wb25lbnROYW1lXG4gICAgfSBhcyBQYWdpbmF0aW9uQ3VzdG9tRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgdGhlIGFycmF5IG9mIHBhZ2Ugb2JqZWN0cyBmb3IgZGlzcGxheS5cbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhbiBhcnJheSBvZiBwYWdlIG9iamVjdHMgYmFzZWQgb24gdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBhbmRcbiAgICogdGhlIGN1cnJlbnQgcGFnZS4gRm9yIHNtYWxsIHBhZ2UgY291bnRzICjiiaQ1KSwgYWxsIHBhZ2VzIGFyZSBzaG93bi4gRm9yIGxhcmdlciBwYWdlXG4gICAqIGNvdW50cywgYSBzdWJzZXQgaXMgc2hvd24gd2l0aCBlbGxpcHNlcyB0byBpbmRpY2F0ZSBza2lwcGVkIHBhZ2VzLiBUaGlzIGVuc3VyZXNcbiAgICogdGhlIHBhZ2luYXRpb24gVUkgcmVtYWlucyBjbGVhbiBhbmQgdXNhYmxlIGV2ZW4gd2l0aCBtYW55IHBhZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwgLSBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY3VycmVudF0gLSBUaGUgY3VycmVudCBhY3RpdmUgcGFnZSAoZGVmYXVsdHMgdG8gdGhpcy5jdXJyZW50KVxuICAgKiBAcmV0dXJucyB7S2V5VmFsdWVbXX0gQXJyYXkgb2YgcGFnZSBvYmplY3RzIHdpdGggaW5kZXggYW5kIHRleHQgcHJvcGVydGllc1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBmbG93Y2hhcnQgVERcbiAgICogICBBW1N0YXJ0XSAtLT4gQnt0b3RhbCA8PSA1P31cbiAgICogICBCIC0tPnxZZXN8IENbU2hvdyBhbGwgcGFnZXNdXG4gICAqICAgQiAtLT58Tm98IERbU2hvdyBmaXJzdCBwYWdlXVxuICAgKiAgIEQgLS0+IEVbU2hvdyBsYXN0IHBhZ2VzXVxuICAgKiAgIEUgLS0+IEZbQWRkIGVsbGlwc2VzIGZvciBza2lwcGVkIHBhZ2VzXVxuICAgKiAgIEMgLS0+IEdbUmV0dXJuIHBhZ2VzIGFycmF5XVxuICAgKiAgIEYgLS0+IEdcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGdldFBhZ2VzKHRvdGFsOiBudW1iZXIsIGN1cnJlbnQ/OiBudW1iZXIpOiBLZXlWYWx1ZVtdIHtcbiAgICBpZiAoIWN1cnJlbnQpIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICBjb25zdCBwYWdlczogS2V5VmFsdWVbXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gZ2V0UGFnZShpbmRleDogbnVtYmVyIHwgbnVsbCwgdGV4dCA9ICcnLCBjbGF6eiA9ICdidXR0b24nKTogdm9pZCB7XG4gICAgICAgIGlmIChwYWdlcy5zb21lKGl0ZW0gPT4gaXRlbVsnaW5kZXgnXSA9PT0gaW5kZXgpKSByZXR1cm47XG4gICAgICAgIHBhZ2VzLnB1c2goeyBpbmRleCwgdGV4dDogaW5kZXggIT0gbnVsbCA/IGluZGV4LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSA6IHRleHQsIGNsYXNzOiBjbGF6eiB9KTtcbiAgICB9XG5cbiAgICBpZiAodG90YWwgPD0gNSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbDsgaSsrKSBnZXRQYWdlKGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGljaW9uYSBvcyBkb2lzIHByaW1laXJvc1xuICAgICAgZ2V0UGFnZSgxKTtcbiAgICAgIGdldFBhZ2UoMik7XG5cbiAgICAgIC8vIEFkaWNpb25hIFwiLi4uXCIgZW50cmUgb3MgYmxvY29zXG4gICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50ID4gMykgZ2V0UGFnZShudWxsLCAnLi4uJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIGEgcMOhZ2luYSBhdHVhbCAoc2UgZXN0aXZlciBubyBtZWlvKVxuICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudCA+IDIgJiYgY3VycmVudCA8IHRvdGFsIC0gMSkgZ2V0UGFnZShjdXJyZW50KTtcblxuICAgICAgLy8gQWRpY2lvbmEgXCIuLi5cIiBlbnRyZSBvcyBibG9jb3NcbiAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgPCB0b3RhbCAtIDIpIGdldFBhZ2UobnVsbCwgJy4uLicgLCAnc2VwYXJhdG9yJyk7XG5cbiAgICAgIC8vIEFkaWNpb25hIG9zIGRvaXMgw7psdGltb3NcbiAgICAgIGdldFBhZ2UodG90YWwgLSAxKTtcbiAgICAgIGdldFBhZ2UodG90YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY3VycmVudCBhY3RpdmUgcGFnZSBudW1iZXIuXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgdGhhdCBpcyBhY3RpdmUgaW4gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgcGFnZSBzdGF0ZSBmcm9tIG91dHNpZGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIGdldEN1cnJlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcGFnZS5cbiAgICogQHN1bW1hcnkgSW5jcmVtZW50cyB0aGUgY3VycmVudCBwYWdlIG51bWJlciBpZiBub3QgYXQgdGhlIGxhc3QgcGFnZSBhbmQgdHJpZ2dlcnNcbiAgICogdGhlIGNsaWNrIGV2ZW50IGhhbmRsZXIgd2l0aCAnbmV4dCcgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcIm5leHRcIiBidXR0b24gaW4gdGhlIHBhZ2luYXRpb24gVUkuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICpcbiAgICogICBVLT4+UDogQ2xpY2sgbmV4dCBidXR0b25cbiAgICogICBQLT4+UDogbmV4dCgpXG4gICAqICAgYWx0IHBhZ2UgPD0gbWF4IHBhZ2VzXG4gICAqICAgICBQLT4+UDogSW5jcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCduZXh0JylcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFBhZ2luYXRpb25Db21wb25lbnRcbiAgICovXG4gIG5leHQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuY3VycmVudCArIDE7XG4gICAgaWYocGFnZSA8PSBPYmplY3Qua2V5cyh0aGlzLnBhZ2VzKT8ubGVuZ3RoIHx8IDApIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IHBhZ2U7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKCduZXh0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gICAqIEBzdW1tYXJ5IERlY3JlbWVudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaWYgbm90IGF0IHRoZSBmaXJzdCBwYWdlIGFuZCB0cmlnZ2Vyc1xuICAgKiB0aGUgY2xpY2sgZXZlbnQgaGFuZGxlciB3aXRoICdwcmV2aW91cycgZGlyZWN0aW9uLiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkXG4gICAqIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBcInByZXZpb3VzXCIgYnV0dG9uIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PlA6IENsaWNrIHByZXZpb3VzIGJ1dHRvblxuICAgKiAgIFAtPj5QOiBwcmV2aW91cygpXG4gICAqICAgYWx0IHBhZ2UgPiAwXG4gICAqICAgICBQLT4+UDogRGVjcmVtZW50IGN1cnJlbnQgcGFnZVxuICAgKiAgICAgUC0+PlA6IGhhbmRsZUNsaWNrKCdwcmV2aW91cycpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlID0gdGhpcy5jdXJyZW50IC0gMTtcbiAgICBpZihwYWdlID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50ID0gcGFnZTtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2soJ3ByZXZpb3VzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBwYWdlIG51bWJlci5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyB0aGUgY3VycmVudCBwYWdlIHRvIHRoZSBzcGVjaWZpZWQgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXJzXG4gICAqIHRoZSBjbGljayBldmVudCBoYW5kbGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5XG4gICAqIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBkaXJlY3RseSBvbiBhIHBhZ2UgbnVtYmVyIGluIHRoZSBwYWdpbmF0aW9uIFVJLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IG51bGx9IHBhZ2UgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFnaW5hdGlvbkNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5QOiBDbGljayBwYWdlIG51bWJlclxuICAgKiAgIFAtPj5QOiBuYXZpZ2F0ZShwYWdlKVxuICAgKiAgIGFsdCBwYWdlIGlzIG5vdCBudWxsIGFuZCBkaWZmZXJlbnQgZnJvbSBjdXJyZW50XG4gICAqICAgICBQLT4+UDogRGV0ZXJtaW5lIGRpcmVjdGlvbiAobmV4dC9wcmV2aW91cylcbiAgICogICAgIFAtPj5QOiBoYW5kbGVDbGljayhkaXJlY3Rpb24sIHBhZ2UpXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBQYWdpbmF0aW9uQ29tcG9uZW50XG4gICAqL1xuICBuYXZpZ2F0ZShwYWdlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYocGFnZSAhPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnQgIT09IHBhZ2UgYXMgbnVtYmVyKVxuICAgICAgdGhpcy5oYW5kbGVDbGljayhwYWdlID4gdGhpcy5jdXJyZW50ID8gJ25leHQnIDogJ3ByZXZpb3VzJywgcGFnZSk7XG4gIH1cbn1cbiIsIiA8ZGl2IFtpZF09XCJ1aWRcIiBjbGFzcz1cImRjZi1wYWdpbmF0b3ItY29udGFpbmVyIGRjZi1mbGV4IGRjZi1mbGV4LWNlbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbi1yZXN1bWVcIiBbaW5uZXJIVE1MXT1cImxvY2FsZSArICcucmVzdW1lJyB8IHRyYW5zbGF0ZToge3ZhbHVlMDogY3VycmVudCwgdmFsdWUxOiBsYXN0fVwiPjwvZGl2PlxuICAgIDxkaXYgI3BhZ2luYXRpb25Db21wb25lbnQgY2xhc3M9XCJkY2YtcGFnaW5hdGlvbiBkY2YtZmxleC1jZW50ZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgYXJpYS1sYWJlbD1cInByZXZpb3VzXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzKClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJwcmV2aW91cygpXCIgW25nQ2xhc3NdPVwieydkY2YtZGlzYWJsZWQnOiBjdXJyZW50ID09PSAxfVwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGZvcihwYWdlIG9mIHBhZ2VzOyB0cmFjayBwYWdlKSB7XG4gICAgICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgW2NsYXNzXT1cInBhZ2VbJ2NsYXNzJ11cIiAoY2xpY2spPVwibmF2aWdhdGUocGFnZVsnaW5kZXgnXSlcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5hdmlnYXRlKHBhZ2VbJ2luZGV4J10pXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2RjZi1hY3RpdmUnOiBjdXJyZW50ID09PSBwYWdlWydpbmRleCddfVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1pdGVtXCI+e3sgcGFnZVsndGV4dCddIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXZcbiAgICAgICAgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIm5leHQoKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnZGNmLWRpc2FibGVkJzogY3VycmVudCA9PT0gbGFzdH1cIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -435,11 +435,11 @@ export class SearchbarComponent extends NgxBaseComponent {
435
435
  event.preventDefault();
436
436
  }
437
437
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
438
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchbarComponent, isStandalone: true, selector: "ngx-decaf-searchbar", inputs: { autocomplete: "autocomplete", autocorrect: "autocorrect", animated: "animated", buttonCancelText: "buttonCancelText", clearIcon: "clearIcon", color: "color", debounce: "debounce", disabled: "disabled", enterkeyhint: "enterkeyhint", inputmode: "inputmode", placeholder: "placeholder", searchIcon: "searchIcon", showCancelButton: "showCancelButton", showClearButton: "showClearButton", spellcheck: "spellcheck", type: "type", value: "value", queryKeys: "queryKeys", isVisible: "isVisible", wrapper: "wrapper", wrapperColor: "wrapperColor", emitEventToWindow: "emitEventToWindow" }, outputs: { searchEvent: "searchEvent" }, host: { listeners: { "window:toggleSearchbarVisibility": "handleToggleVisibility($event)" } }, usesInheritance: true, ngImport: i0, template: "<ion-searchbar\n ngClass=\"dcf-searchbar\"\n name=\"search\"\n mode=\"ios\"\n (keyup.enter)=\"preventChange($event)\"\n (ionChange)=\"handleChange($event)\"\n (ionInput)=\"handleInput($event)\"\n (ionClear)=\"handleClear()\"\n [autocomplete]=\"autocomplete\"\n [showCancelButton]=\"showCancelButton\"\n [cancelButtonText]=\"buttonCancelText\"\n [clearIcon]=\"clearIcon\"\n [color]=\"color\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n [enterkeyhint]=\"enterkeyhint\"\n [inputmode]=\"inputmode\"\n [placeholder]=\"placeholder\"\n [searchIcon]=\"searchIcon\"\n [showClearButton]=\"showClearButton\"\n [spellcheck]=\"spellcheck\"\n [type]=\"type\"\n #component\n />\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }] }); }
438
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchbarComponent, isStandalone: true, selector: "ngx-decaf-searchbar", inputs: { autocomplete: "autocomplete", autocorrect: "autocorrect", animated: "animated", buttonCancelText: "buttonCancelText", clearIcon: "clearIcon", color: "color", debounce: "debounce", disabled: "disabled", enterkeyhint: "enterkeyhint", inputmode: "inputmode", placeholder: "placeholder", searchIcon: "searchIcon", showCancelButton: "showCancelButton", showClearButton: "showClearButton", spellcheck: "spellcheck", type: "type", value: "value", queryKeys: "queryKeys", isVisible: "isVisible", wrapper: "wrapper", wrapperColor: "wrapperColor", emitEventToWindow: "emitEventToWindow" }, outputs: { searchEvent: "searchEvent" }, host: { listeners: { "window:toggleSearchbarVisibility": "handleToggleVisibility($event)" } }, usesInheritance: true, ngImport: i0, template: "<ion-searchbar\n [id]=\"uid\"\n ngClass=\"dcf-searchbar\"\n name=\"search\"\n mode=\"ios\"\n (keyup.enter)=\"preventChange($event)\"\n (ionChange)=\"handleChange($event)\"\n (ionInput)=\"handleInput($event)\"\n (ionClear)=\"handleClear()\"\n [autocomplete]=\"autocomplete\"\n [showCancelButton]=\"showCancelButton\"\n [cancelButtonText]=\"buttonCancelText\"\n [clearIcon]=\"clearIcon\"\n [color]=\"color\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n [enterkeyhint]=\"enterkeyhint\"\n [inputmode]=\"inputmode\"\n [placeholder]=\"placeholder\"\n [searchIcon]=\"searchIcon\"\n [showClearButton]=\"showClearButton\"\n [spellcheck]=\"spellcheck\"\n [type]=\"type\"\n #component\n />\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }] }); }
439
439
  }
440
440
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchbarComponent, decorators: [{
441
441
  type: Component,
442
- args: [{ selector: 'ngx-decaf-searchbar', standalone: true, imports: [ForAngularModule, IonSearchbar], template: "<ion-searchbar\n ngClass=\"dcf-searchbar\"\n name=\"search\"\n mode=\"ios\"\n (keyup.enter)=\"preventChange($event)\"\n (ionChange)=\"handleChange($event)\"\n (ionInput)=\"handleInput($event)\"\n (ionClear)=\"handleClear()\"\n [autocomplete]=\"autocomplete\"\n [showCancelButton]=\"showCancelButton\"\n [cancelButtonText]=\"buttonCancelText\"\n [clearIcon]=\"clearIcon\"\n [color]=\"color\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n [enterkeyhint]=\"enterkeyhint\"\n [inputmode]=\"inputmode\"\n [placeholder]=\"placeholder\"\n [searchIcon]=\"searchIcon\"\n [showClearButton]=\"showClearButton\"\n [spellcheck]=\"spellcheck\"\n [type]=\"type\"\n #component\n />\n" }]
442
+ args: [{ selector: 'ngx-decaf-searchbar', standalone: true, imports: [ForAngularModule, IonSearchbar], template: "<ion-searchbar\n [id]=\"uid\"\n ngClass=\"dcf-searchbar\"\n name=\"search\"\n mode=\"ios\"\n (keyup.enter)=\"preventChange($event)\"\n (ionChange)=\"handleChange($event)\"\n (ionInput)=\"handleInput($event)\"\n (ionClear)=\"handleClear()\"\n [autocomplete]=\"autocomplete\"\n [showCancelButton]=\"showCancelButton\"\n [cancelButtonText]=\"buttonCancelText\"\n [clearIcon]=\"clearIcon\"\n [color]=\"color\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n [enterkeyhint]=\"enterkeyhint\"\n [inputmode]=\"inputmode\"\n [placeholder]=\"placeholder\"\n [searchIcon]=\"searchIcon\"\n [showClearButton]=\"showClearButton\"\n [spellcheck]=\"spellcheck\"\n [type]=\"type\"\n #component\n />\n" }]
443
443
  }], ctorParameters: () => [], propDecorators: { autocomplete: [{
444
444
  type: Input
445
445
  }], autocorrect: [{
@@ -490,4 +490,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
490
490
  type: HostListener,
491
491
  args: ["window:toggleSearchbarVisibility", ['$event']]
492
492
  }] } });
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUcsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzlGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFFcEM7Ozs7Ozs7Ozs7OztHQVlHO0FBUUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQTRRdEQ7Ozs7Ozs7T0FPRztJQUNIO1FBQ0UsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFuUjlCOzs7OztXQUtHO1FBQ0gsV0FBVztRQUNYLGtEQUFrRDtRQUVsRDs7Ozs7Ozs7OztXQVVHO1FBRUgsaUJBQVksR0FBa0MsS0FBSyxDQUFDO1FBRXBEOzs7Ozs7Ozs7V0FTRztRQUVILGdCQUFXLEdBQWlCLEtBQUssQ0FBQztRQUVsQzs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLElBQUks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QkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBZU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBV04sU0FBUztzQkFEUixLQUFLO2dCQVdOLEtBQUs7c0JBREosS0FBSztnQkFXTixRQUFRO3NCQURQLEtBQUs7Z0JBV04sUUFBUTtzQkFEUCxLQUFLO2dCQVdOLFlBQVk7c0JBRFgsS0FBSztnQkFXTixTQUFTO3NCQURSLEtBQUs7Z0JBV04sV0FBVztzQkFEVixLQUFLO2dCQVdOLFVBQVU7c0JBRFQsS0FBSztnQkFXTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFXTixlQUFlO3NCQURkLEtBQUs7Z0JBV04sVUFBVTtzQkFEVCxLQUFLO2dCQVdOLElBQUk7c0JBREgsS0FBSztnQkFXTixLQUFLO3NCQURKLEtBQUs7Z0JBV04sU0FBUztzQkFEUixLQUFLO2dCQVdOLFNBQVM7c0JBRFIsS0FBSztnQkFXTixPQUFPO3NCQUROLEtBQUs7Z0JBV04sWUFBWTtzQkFEWCxLQUFLO2dCQVdOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkF3Qk4sV0FBVztzQkFEVixNQUFNO2dCQWdGUCxzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsa0NBQWtDLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsICBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVUeXBlcywgUHJlZGVmaW5lZENvbG9yc30gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7d2luZG93RXZlbnRFbWl0dGVyfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgc3RyaW5nVG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEJhc2VDb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uU2VhcmNoYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgKiBhcyBhbGxJY29ucyBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2VhcmNoYmFyIGNvbXBvbmVudCBmb3IgQW5ndWxhciBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgU2VhcmNoYmFyQ29tcG9uZW50IHByb3ZpZGVzIGEgaGlnaGx5IGN1c3RvbWl6YWJsZSBzZWFyY2ggaW5wdXQgZmllbGQgd2l0aCBjb21wcmVoZW5zaXZlXG4gKiBvcHRpb25zIGZvciBhcHBlYXJhbmNlLCBiZWhhdmlvciwgYW5kIGludGVyYWN0aW9uIHBhdHRlcm5zLiBJdCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgdG8gaW5oZXJpdFxuICogY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudHMgT25Jbml0IGZvciBwcm9wZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgY29tcG9uZW50IGZlYXR1cmVzXG4gKiBkZWJvdW5jZWQgaW5wdXQgaGFuZGxpbmcsIHdpbmRvdyBldmVudCBpbnRlZ3JhdGlvbiwgdmlzaWJpbGl0eSBjb250cm9scywgYW5kIGV4dGVuc2l2ZSBzdHlsaW5nIG9wdGlvbnMuXG4gKiBJdCdzIGRlc2lnbmVkIHRvIGJlIGZsZXhpYmxlIGFuZCBhZGFwdGFibGUgdG8gZGlmZmVyZW50IHNlYXJjaCByZXF1aXJlbWVudHMgd2l0aGluIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zLlxuICpcbiAqIEBjbGFzcyBTZWFyY2hiYXJDb21wb25lbnRcbiAqIEBleHRlbmRzIHtOZ3hCYXNlQ29tcG9uZW50fVxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLXNlYXJjaGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2hiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hiYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZvckFuZ3VsYXJNb2R1bGUsIElvblNlYXJjaGJhcl0sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaGJhckNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1vZGUgb2YgdGhlIHNlYXJjaGJhci5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgdmlzdWFsIHN0eWxlIG9mIHRoZSBzZWFyY2hiYXIsIGVpdGhlciBpT1Mgb3IgTWF0ZXJpYWwgRGVzaWduLlxuICAgKiBAdHlwZSB7XCJpb3NcIiB8IFwibWRcIiB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgXCJpb3NcIlxuICAgKi9cbiAgLy8gQElucHV0KClcbiAgLy8gb3ZlcnJpZGUgbW9kZTogXCJpb3NcIiB8IFwibWRcIiB8IHVuZGVmaW5lZCA9IFwibWRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdXRvY29tcGxldGUgYXR0cmlidXRlIGZvciB0aGUgc2VhcmNoYmFyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnJvd3NlciBzaG91bGQgZW5hYmxlIGF1dG9jb21wbGV0ZSBmb3IgdGhlIGlucHV0IGZpZWxkLlxuICAgKiBUaGlzIGNvbnRyb2xzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gYXV0b2NvbXBsZXRlIGZ1bmN0aW9uYWxpdHksIGhlbHBpbmcgdXNlcnMgYnlcbiAgICogc3VnZ2VzdGluZyBwcmV2aW91c2x5IGVudGVyZWQgdmFsdWVzIG9yIGNvbW1vbiBpbnB1dHMuIFNldHRpbmcgdG8gJ29mZicgZGlzYWJsZXNcbiAgICogdGhpcyBmZWF0dXJlIGZvciBwcml2YWN5IG9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtBdXRvY29tcGxldGVUeXBlcyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgXCJvZmZcIlxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhdXRvY29tcGxldGU6IEF1dG9jb21wbGV0ZVR5cGVzIHwgdW5kZWZpbmVkID0gXCJvZmZcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdXRvY29ycmVjdCBhdHRyaWJ1dGUgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHdoZXRoZXIgdGhlIGJyb3dzZXIgc2hvdWxkIGVuYWJsZSBhdXRvY29ycmVjdCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGJyb3dzZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGNvcnJlY3Qgc3BlbGxpbmcgbWlzdGFrZXMgYXMgdGhlIHVzZXIgdHlwZXMuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IGRpc2FibGVkIGZvciBzZWFyY2ggZmllbGRzIHRvIHByZXNlcnZlIHRoZSB1c2VyJ3MgZXhhY3Qgc2VhcmNoIHRlcm1zLlxuICAgKlxuICAgKiBAdHlwZSB7XCJvblwiIHwgXCJvZmZcIn1cbiAgICogQGRlZmF1bHQgXCJvZmZcIlxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhdXRvY29ycmVjdDogXCJvblwiIHwgXCJvZmZcIiA9IFwib2ZmXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRoZSBzZWFyY2hiYXIgc2hvdWxkIGFuaW1hdGUuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSBhbmltYXRpb24gYmVoYXZpb3Igb2YgdGhlIHNlYXJjaGJhciBkdXJpbmcgYXBwZWFyYW5jZSBhbmQgZGlzYXBwZWFyYW5jZSB0cmFuc2l0aW9ucy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgc2VhcmNoYmFyIHdpbGwgdXNlIHNtb290aCBhbmltYXRpb25zIGZvciBzdGF0ZSBjaGFuZ2VzLCBwcm92aWRpbmcgYSBtb3JlXG4gICAqIHBvbGlzaGVkIHVzZXIgZXhwZXJpZW5jZS4gVGhpcyBhZmZlY3RzIHRyYW5zaXRpb25zIGxpa2Ugc2hvd2luZy9oaWRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhbmltYXRlZDogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBsb2NhbGl6ZWQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIHNlYXJjaGJhci5cbiAgICogVGhpcyB0ZXh0IGFwcGVhcnMgd2hlbiB0aGUgY2FuY2VsIGJ1dHRvbiBpcyB2aXNpYmxlIGFuZCBwcm92aWRlcyB1c2VycyB3aXRoIGEgY2xlYXJcbiAgICogaW5kaWNhdGlvbiBvZiBob3cgdG8gZGlzbWlzcyB0aGUgc2VhcmNoIGludGVyZmFjZS4gVGhlIHRleHQgY2FuIGJlIGN1c3RvbWl6ZWQgZm9yXG4gICAqIGRpZmZlcmVudCBsYW5ndWFnZXMgYW5kIGN1bHR1cmFsIGNvbnRleHRzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcIkNhbmNlbFwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNhbmNlbFRleHQ6IHN0cmluZyA9IFwiQ2FuY2VsXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaWNvbiB0byB1c2UgZm9yIHRoZSBjbGVhciBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgaWNvbiB0byBiZSBkaXNwbGF5ZWQgZm9yIHRoZSBjbGVhciBidXR0b24gb2YgdGhlIHNlYXJjaGJhci5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsZWFySWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgdGhlbWUgdG8gYmUgYXBwbGllZCB0byB0aGUgc2VhcmNoYmFyLlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IHRvIHRyaWdnZXIgdGhlIGBpb25DaGFuZ2VgIGV2ZW50IGFmdGVyIGVhY2gga2V5c3Ryb2tlLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgZGVib3VuY2UgdGltZSBmb3IgdGhlIHNlYXJjaCBpbnB1dCB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBldmVudCBlbWlzc2lvbnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBkZWJvdW5jZTogbnVtYmVyID0gNTAwO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0aGUgc2VhcmNoYmFyIGlzIGRpc2FibGVkLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHRoZSBzZWFyY2hiYXIgaXMgaW50ZXJhY3RpdmUgb3Igbm90LlxuICAgKiBAdHlwZSB7U3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogU3RyaW5nT3JCb29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBIGhpbnQgdG8gdGhlIGJyb3dzZXIgZm9yIHdoaWNoIGVudGVyIGtleSB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWN0aW9uIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgZW50ZXIga2V5IGlzIHByZXNzZWQuXG4gICAqIEB0eXBlIHtcInNlYXJjaFwiIHwgXCJlbnRlclwiIHwgXCJkb25lXCIgfCBcImdvXCIgfCBcIm5leHRcIiB8IFwicHJldmlvdXNcIiB8IFwic2VuZFwiIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCBcImVudGVyXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZW50ZXJrZXloaW50OiBcInNlYXJjaFwiIHwgXCJlbnRlclwiIHwgXCJkb25lXCIgfCBcImdvXCIgfCBcIm5leHRcIiB8IFwicHJldmlvdXNcIiB8IFwic2VuZFwiIHwgdW5kZWZpbmVkID0gXCJlbnRlclwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGlucHV0IG1vZGUgZm9yIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgbWlnaHQgYmUgZW50ZXJlZCBieSB0aGUgdXNlciB3aGlsZSBlZGl0aW5nIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cy5cbiAgICogQHR5cGUge1widGV4dFwiIHwgXCJzZWFyY2hcIiB8IFwibm9uZVwiIHwgXCJlbWFpbFwiIHwgXCJ0ZWxcIiB8IFwidXJsXCIgfCBcIm51bWVyaWNcIiB8IFwiZGVjaW1hbFwiIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnc2VhcmNoJ1xuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpbnB1dG1vZGU6IFwidGV4dFwiIHwgXCJzZWFyY2hcIiB8IFwibm9uZVwiIHwgXCJlbWFpbFwiIHwgXCJ0ZWxcIiB8IFwidXJsXCIgfCBcIm51bWVyaWNcIiB8IFwiZGVjaW1hbFwiIHwgdW5kZWZpbmVkID0gJ3NlYXJjaCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgcGxhY2Vob2xkZXIgdGV4dCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNlYXJjaGJhciB3aGVuIGl0J3MgZW1wdHkuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwiU2VhcmNoXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXIgPSBcIlNlYXJjaFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGljb24gdG8gdXNlIGZvciB0aGUgc2VhcmNoIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBpY29uIHRvIGJlIGRpc3BsYXllZCBmb3IgdGhlIHNlYXJjaCBidXR0b24gb2YgdGhlIHNlYXJjaGJhci5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgXCJzZWFyY2gtb3V0bGluZVwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaEljb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwic2VhcmNoLW91dGxpbmVcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZW4gdG8gc2hvdyB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNhbmNlbCBidXR0b24gaW4gZGlmZmVyZW50IHN0YXRlcyBvZiB0aGUgc2VhcmNoYmFyLlxuICAgKiBAdHlwZSB7XCJhbHdheXNcIiB8IFwiZm9jdXNcIiB8IFwibmV2ZXJcIn1cbiAgICogQGRlZmF1bHQgXCJuZXZlclwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dDYW5jZWxCdXR0b246IFwiYWx3YXlzXCIgfCBcImZvY3VzXCIgfCBcIm5ldmVyXCIgPSBcIm5ldmVyXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGVuIHRvIHNob3cgdGhlIGNsZWFyIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNsZWFyIGJ1dHRvbiBpbiBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBzZWFyY2hiYXIuXG4gICAqIEB0eXBlIHtcImFsd2F5c1wiIHwgXCJmb2N1c1wiIHwgXCJuZXZlclwifVxuICAgKiBAZGVmYXVsdCBcImZvY3VzXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0NsZWFyQnV0dG9uOiBcImFsd2F5c1wiIHwgXCJmb2N1c1wiIHwgXCJuZXZlclwiID0gXCJmb2N1c1wiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBlbmFibGUgc3BlbGxjaGVjayBvbiB0aGUgc2VhcmNoYmFyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHRoZSBicm93c2VyJ3Mgc3BlbGxjaGVjayBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzcGVsbGNoZWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiBpbnB1dCB0byB1c2UgZm9yIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBjb250cm9sIHRvIGRpc3BsYXkgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEB0eXBlIHtcIm51bWJlclwiIHwgXCJ0ZXh0XCIgfCBcInNlYXJjaFwiIHwgXCJlbWFpbFwiIHwgXCJwYXNzd29yZFwiIHwgXCJ0ZWxcIiB8IFwidXJsXCIgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0IFwic2VhcmNoXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdHlwZTogXCJudW1iZXJcIiB8IFwidGV4dFwiIHwgXCJzZWFyY2hcIiB8IFwiZW1haWxcIiB8IFwicGFzc3dvcmRcIiB8IFwidGVsXCIgfCBcInVybFwiIHwgdW5kZWZpbmVkID0gXCJzZWFyY2hcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB2YWx1ZSBvZiB0aGUgc2VhcmNoYmFyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlYXJjaGJhciBpbnB1dC5cbiAgICogQHR5cGUge251bGwgfCBzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdmFsdWU6IG51bGwgfCBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGtleXMgdG8gdXNlIGZvciBxdWVyeWluZy5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBrZXlzIHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIHF1ZXJ5LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgc3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFwibmFtZVwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHF1ZXJ5S2V5czogc3RyaW5nIHwgc3RyaW5nW10gPSBcIm5hbWVcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdGhlIHNlYXJjaGJhciBpcyB2aXNpYmxlLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2VhcmNoYmFyIGNvbXBvbmVudC5cbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaXNWaXNpYmxlOiBTdHJpbmdPckJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gd3JhcCB0aGUgc2VhcmNoYmFyIGluIGEgY29udGFpbmVyLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHRoZSBzZWFyY2hiYXIgaXMgd3JhcHBlZCBpbiBhbiBhZGRpdGlvbmFsIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAdHlwZSB7U3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB3cmFwcGVyOiBTdHJpbmdPckJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgd3JhcHBlci5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciB0aGVtZSB0byBiZSBhcHBsaWVkIHRvIHRoZSB3cmFwcGVyIGNvbnRhaW5lciwgaWYgcHJlc2VudC5cbiAgICogQHR5cGUge1ByZWRlZmluZWRDb2xvcnN9XG4gICAqIEBkZWZhdWx0IFwicHJpbWFyeVwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHdyYXBwZXJDb2xvcjogUHJlZGVmaW5lZENvbG9ycyA9IFwicHJpbWFyeVwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBlbWl0IGV2ZW50cyB0byB0aGUgd2luZG93LlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHNlYXJjaCBldmVudHMgc2hvdWxkIGJlIGVtaXR0ZWQgYXMgd2luZG93IGV2ZW50cy5cbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBlbWl0RXZlbnRUb1dpbmRvdzogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2VhcmNoYmFyIGlucHV0IGZvciBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBwcm9jZXNzaW5nLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gdHJhY2sgdGhlIHNlYXJjaCB0ZXJtIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSBhbmRcbiAgICogY29vcmRpbmF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBldmVudCBoYW5kbGVycyBhbmQgbWV0aG9kcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgY3VycmVudFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBzZWFyY2ggZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBzZWFyY2ggZXZlbnRzIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHNlYXJjaGJhciwgcHJvdmlkaW5nIGEgcmVhY3RpdmVcbiAgICogaW50ZXJmYWNlIGZvciBwYXJlbnQgY29tcG9uZW50cyB0byByZXNwb25kIHRvIHNlYXJjaCBhY3Rpb25zLiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBieVxuICAgKiB2YXJpb3VzIHVzZXIgaW50ZXJhY3Rpb25zIGluY2x1ZGluZyB0eXBpbmcsIGNsZWFyaW5nLCBhbmQgZXhwbGljaXQgc2VhcmNoIGFjdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn1cbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaEV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTZWFyY2hiYXJDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIHRoZSBTZWFyY2hiYXJDb21wb25lbnQgd2l0aCBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMuXG4gICAqIER1cmluZyBpbml0aWFsaXphdGlvbiwgaXQgYWRkcyBhbGwgYXZhaWxhYmxlIElvbmljb25zIHRvIHRoZSBhcHBsaWNhdGlvbidzIGljb24gcmVnaXN0cnksXG4gICAqIGVuc3VyaW5nIHRoYXQgc2VhcmNoIGFuZCBjbGVhciBpY29ucyBhcmUgYXZhaWxhYmxlIGZvciB1c2UgdGhyb3VnaG91dCB0aGUgY29tcG9uZW50J3MgbGlmZWN5Y2xlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignU2VhcmNoYmFyQ29tcG9uZW50Jyk7XG4gICAgYWRkSWNvbnMoYWxsSWNvbnMpXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBlc3NlbnRpYWwgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIGJ5IGNvbnZlcnRpbmcgc3RyaW5nLWJhc2VkIGJvb2xlYW4gaW5wdXRzXG4gICAqIHRvIHByb3BlciBib29sZWFuIHZhbHVlcyB1c2luZyB0aGUgc3RyaW5nVG9Cb29sZWFuIHV0aWxpdHkuIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBib29sZWFuXG4gICAqIHByb3BlcnRpZXMgd29yayBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiBob3cgdGhleSB3ZXJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnRzIG9yIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAgKlxuICAgKiAgIEEtPj5TOiBuZ09uSW5pdCgpXG4gICAqICAgUy0+PlU6IHN0cmluZ1RvQm9vbGVhbihlbWl0RXZlbnRUb1dpbmRvdylcbiAgICogICBVLS0+PlM6IGJvb2xlYW4gdmFsdWVcbiAgICogICBTLT4+VTogc3RyaW5nVG9Cb29sZWFuKHdyYXBwZXIpXG4gICAqICAgVS0tPj5TOiBib29sZWFuIHZhbHVlXG4gICAqICAgUy0+PlU6IHN0cmluZ1RvQm9vbGVhbihpc1Zpc2libGUpXG4gICAqICAgVS0tPj5TOiBib29sZWFuIHZhbHVlXG4gICAqICAgUy0+PlU6IHN0cmluZ1RvQm9vbGVhbihkaXNhYmxlZClcbiAgICogICBVLS0+PlM6IGJvb2xlYW4gdmFsdWVcbiAgICogICBTLT4+VTogc3RyaW5nVG9Cb29sZWFuKGFuaW1hdGVkKVxuICAgKiAgIFUtLT4+UzogYm9vbGVhbiB2YWx1ZVxuICAgKiAgIE5vdGUgb3ZlciBTOiBDb21wb25lbnQgcmVhZHkgZm9yIGludGVyYWN0aW9uXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdEV2ZW50VG9XaW5kb3cgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5lbWl0RXZlbnRUb1dpbmRvdyk7XG4gICAgdGhpcy53cmFwcGVyID0gc3RyaW5nVG9Cb29sZWFuKHRoaXMud3JhcHBlcik7XG4gICAgdGhpcy5pc1Zpc2libGUgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5pc1Zpc2libGUpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5kaXNhYmxlZCk7XG4gICAgdGhpcy5hbmltYXRlZCA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLmFuaW1hdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSB0b2dnbGUgb2YgdGhlIHNlYXJjaGJhciBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IExpc3RlbnMgZm9yIGdsb2JhbCB3aW5kb3cgZXZlbnRzIHRvIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgc2VhcmNoYmFyLlxuICAgKiBXaGVuIHRoZSBzZWFyY2hiYXIgYmVjb21lcyB2aXNpYmxlLCBpdCBhdXRvbWF0aWNhbGx5IGZvY3VzZXMgb24gdGhlIGlucHV0IGZpZWxkIGFmdGVyIGEgYnJpZWZcbiAgICogZGVsYXkgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb24gY29tcGxldGlvbi4gVGhpcyBwcm92aWRlcyBhIHNlYW1sZXNzIHVzZXIgZXhwZXJpZW5jZSBmb3JcbiAgICogc2VhcmNoIGFjdGl2YXRpb24gdGhyb3VnaCBrZXlib2FyZCBzaG9ydGN1dHMgb3IgcHJvZ3JhbW1hdGljIHRyaWdnZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBjdXN0b20gZXZlbnQgdHJpZ2dlcmluZyB0aGUgdmlzaWJpbGl0eSB0b2dnbGUgKHVudXNlZCBidXQgcmVxdWlyZWQgYnkgSG9zdExpc3RlbmVyKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvd1xuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBET00gRWxlbWVudFxuICAgKlxuICAgKiAgIFctPj5TOiB0b2dnbGVTZWFyY2hiYXJWaXNpYmlsaXR5IGV2ZW50XG4gICAqICAgUy0+PlM6IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHkoKVxuICAgKiAgIFMtPj5TOiBUb2dnbGUgaXNWaXNpYmxlIHN0YXRlXG4gICAqICAgYWx0IGlzVmlzaWJsZSBpcyB0cnVlIEFORCBjb21wb25lbnQgZXhpc3RzXG4gICAqICAgICBTLT4+Uzogc2V0VGltZW91dCgxMjVtcylcbiAgICogICAgIFMtPj5FOiBzZXRGb2N1cygpIG9uIGlvbi1zZWFyY2hiYXJcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzp0b2dnbGVTZWFyY2hiYXJWaXNpYmlsaXR5XCIsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVRvZ2dsZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XG4gICAgaWYodGhpcy5pc1Zpc2libGUgJiYgISF0aGlzLmNvbXBvbmVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgKHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElvblNlYXJjaGJhckVsZW1lbnQpLnNldEZvY3VzKCk7XG4gICAgICB9LCAxMjUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVHJpZ2dlcnMgYSBtYW51YWwgc2VhcmNoIGV2ZW50IHdpdGggdGhlIGN1cnJlbnQgc2VhcmNoYmFyIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgc2VhcmNoYmFyJ3MgbmF0aXZlIGVsZW1lbnQgYW5kIGVtaXRzIGl0IGFzIGEgc2VhcmNoIGV2ZW50LlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHByb2dyYW1tYXRpYyB3YXkgdG8gdHJpZ2dlciBzZWFyY2ggZnVuY3Rpb25hbGl0eSwgdXNlZnVsIGZvciBleHRlcm5hbFxuICAgKiBjb21wb25lbnRzIG9yIGtleWJvYXJkIHNob3J0Y3V0cyB0aGF0IG5lZWQgdG8gZXhlY3V0ZSBzZWFyY2ggd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIHNlYXJjaGJhciBpdHNlbGYuXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIHNlYXJjaCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW9uU2VhcmNoYmFyRWxlbWVudDtcbiAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQoZWxlbWVudC52YWx1ZSB8fCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHZhbHVlIGNoYW5nZXMgaW4gdGhlIHNlYXJjaGJhciBpbnB1dCBmaWVsZC5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGNoYW5nZSBldmVudHMgZnJvbSB0aGUgSW9uaWMgc2VhcmNoYmFyIGNvbXBvbmVudCBhbmQgZXh0cmFjdHMgdGhlIG5ldyB2YWx1ZVxuICAgKiB0byBlbWl0IGFzIGEgc2VhcmNoIGV2ZW50LiBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBmaW5pc2hlcyBlZGl0aW5nIHRoZSBzZWFyY2hiYXJcbiAgICogdmFsdWUsIHByb3ZpZGluZyBhIHdheSB0byByZWFjdCB0byBjb21wbGV0ZWQgaW5wdXQgY2hhbmdlcyByYXRoZXIgdGhhbiByZWFsLXRpbWUgdHlwaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBjaGFuZ2UgZXZlbnQgZnJvbSB0aGUgSW9uaWMgc2VhcmNoYmFyIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0RXZlbnQoZXZlbnQ/LmRldGFpbD8udmFsdWUgPz8gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGVhcmluZyBvZiB0aGUgc2VhcmNoYmFyIGlucHV0IGZpZWxkLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBhbiB1bmRlZmluZWQgdmFsdWUgYXMgYSBzZWFyY2ggZXZlbnQgd2hlbiB0aGUgc2VhcmNoYmFyIGlzIGNsZWFyZWQgYnkgdGhlIHVzZXIuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGNsZWFyIGJ1dHRvbiBvciB1c2VzIG90aGVyXG4gICAqIGNsZWFyIG1lY2hhbmlzbXMsIHNpZ25hbGluZyB0aGF0IHRoZSBzZWFyY2ggc2hvdWxkIGJlIHJlc2V0IG9yIGNsZWFyZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdEV2ZW50KHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgcmVhbC10aW1lIGlucHV0IGV2ZW50cyBvbiB0aGUgc2VhcmNoYmFyLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgaW5wdXQgZXZlbnRzIGFzIHRoZSB1c2VyIHR5cGVzLCBwcm92aWRpbmcgaW1tZWRpYXRlIGZlZWRiYWNrIGZvciBzZWFyY2ggZnVuY3Rpb25hbGl0eS5cbiAgICogVGhpcyBtZXRob2QgaW1wbGVtZW50cyBzbWFydCBjbGVhcmluZyBiZWhhdmlvciAtIGlmIHRoZSBpbnB1dCBiZWNvbWVzIGVtcHR5LCBpdCBhdXRvbWF0aWNhbGx5XG4gICAqIHRyaWdnZXJzIHRoZSBjbGVhciBoYW5kbGVyLiBPdGhlcndpc2UsIGl0IGVtaXRzIHRoZSBjdXJyZW50IHZhbHVlIGZvciByZWFsLXRpbWUgc2VhcmNoIHN1Z2dlc3Rpb25zXG4gICAqIG9yIGZpbHRlcmluZy4gVGhpcyBlbmFibGVzIHJlc3BvbnNpdmUgc2VhcmNoIGV4cGVyaWVuY2VzIHdpdGggZGVib3VuY2VkIGV2ZW50IGhhbmRsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBpbnB1dCBldmVudCBmcm9tIHRoZSBJb25pYyBzZWFyY2hiYXIgY29udGFpbmluZyB0aGUgY3VycmVudCB2YWx1ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBTIGFzIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRXZlbnQgU3lzdGVtXG4gICAqXG4gICAqICAgVS0+PlM6IFR5cGUgaW4gc2VhcmNoYmFyXG4gICAqICAgUy0+PlM6IGhhbmRsZUlucHV0KGV2ZW50KVxuICAgKiAgIFMtPj5TOiBFeHRyYWN0IHZhbHVlIGZyb20gZXZlbnRcbiAgICogICBhbHQgdmFsdWUgaXMgZW1wdHkgb3IgbnVsbFxuICAgKiAgICAgUy0+PlM6IGhhbmRsZUNsZWFyKClcbiAgICogICAgIFMtPj5FOiBFbWl0IHVuZGVmaW5lZFxuICAgKiAgIGVsc2UgdmFsdWUgaGFzIGNvbnRlbnRcbiAgICogICAgIFMtPj5TOiBlbWl0RXZlbnQodmFsdWUpXG4gICAqICAgICBTLT4+RTogRW1pdCBzZWFyY2ggdmFsdWVcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlSW5wdXQoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudD8uZGV0YWlsPy52YWx1ZTtcbiAgICBpZighdmFsdWUgfHwgIXZhbHVlPy5sZW5ndGgpXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDbGVhcigpO1xuICAgIHRoaXMuZW1pdEV2ZW50KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBibHVyIGV2ZW50cyBvbiB0aGUgc2VhcmNoYmFyLlxuICAgKiBAc3VtbWFyeSBDdXJyZW50bHkgYW4gZW1wdHkgbWV0aG9kLCBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIHNwZWNpZmljIGJsdXIgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGV2ZW50IC0gVGhlIGJsdXIgZXZlbnQgZnJvbSB0aGUgc2VhcmNoYmFyXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICAvLyBoYW5kbGVCbHVyKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEVtaXRzIHNlYXJjaCBldmVudHMgdGhyb3VnaCBtdWx0aXBsZSBjaGFubmVscy5cbiAgICogQHN1bW1hcnkgT3JjaGVzdHJhdGVzIHRoZSBlbWlzc2lvbiBvZiBzZWFyY2ggZXZlbnRzIGJvdGggYXMgY29tcG9uZW50IG91dHB1dCBldmVudHMgYW5kIG9wdGlvbmFsbHlcbiAgICogYXMgZ2xvYmFsIHdpbmRvdyBldmVudHMuIFRoaXMgZHVhbC1jaGFubmVsIGFwcHJvYWNoIGVuYWJsZXMgYm90aCBkaXJlY3QgcGFyZW50LWNoaWxkIGNvbW11bmljYXRpb25cbiAgICogYW5kIGFwcGxpY2F0aW9uLXdpZGUgZXZlbnQgYnJvYWRjYXN0aW5nLCBzdXBwb3J0aW5nIGZsZXhpYmxlIGludGVncmF0aW9uIHBhdHRlcm5zIGFuZCBsb29zZSBjb3VwbGluZ1xuICAgKiBiZXR3ZWVuIGNvbXBvbmVudHMgdGhhdCBuZWVkIHRvIHJlc3BvbmQgdG8gc2VhcmNoIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFRoZSBzZWFyY2ggdmFsdWUgdG8gZW1pdCBhY3Jvc3MgYWxsIGNvbmZpZ3VyZWQgY2hhbm5lbHNcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBTZWFyY2hiYXJDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhcmVudCBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvdyBFdmVudCBTeXN0ZW1cbiAgICpcbiAgICogICBTLT4+UzogZW1pdEV2ZW50KHZhbHVlKVxuICAgKiAgIFMtPj5QOiBzZWFyY2hFdmVudC5lbWl0KHZhbHVlKVxuICAgKiAgIGFsdCBlbWl0RXZlbnRUb1dpbmRvdyBpcyB0cnVlXG4gICAqICAgICBTLT4+Vzogd2luZG93RXZlbnRFbWl0dGVyKCdzZWFyY2hiYXJFdmVudCcsIHt2YWx1ZX0pXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIGVtaXRFdmVudCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHZhbHVlKTtcbiAgICBpZih0aGlzLmVtaXRFdmVudFRvV2luZG93KVxuICAgICAgd2luZG93RXZlbnRFbWl0dGVyKCdzZWFyY2hiYXJFdmVudCcsIHt2YWx1ZTogdmFsdWV9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmV2ZW50cyBkZWZhdWx0IGJlaGF2aW9yIG9mIERPTSBldmVudHMuXG4gICAqIEBzdW1tYXJ5IFV0aWxpdHkgbWV0aG9kIHRvIHByZXZlbnQgdW53YW50ZWQgZGVmYXVsdCBhY3Rpb25zIG9uIERPTSBldmVudHMsIHN1Y2ggYXMgZm9ybSBzdWJtaXNzaW9uc1xuICAgKiBvciBuYXZpZ2F0aW9uIHRyaWdnZXJzLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gZXZlbnQgaGFuZGxlcnMgd2hlcmUgdGhlIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvclxuICAgKiB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgY29tcG9uZW50J3MgY3VzdG9tIGxvZ2ljIG9yIHVzZXIgZXhwZXJpZW5jZSBkZXNpZ24uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIERPTSBldmVudCB3aG9zZSBkZWZhdWx0IGJlaGF2aW9yIHNob3VsZCBiZSBwcmV2ZW50ZWRcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgcHJldmVudENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIiwiPGlvbi1zZWFyY2hiYXJcbiAgbmdDbGFzcz1cImRjZi1zZWFyY2hiYXJcIlxuICBuYW1lPVwic2VhcmNoXCJcbiAgbW9kZT1cImlvc1wiXG4gIChrZXl1cC5lbnRlcik9XCJwcmV2ZW50Q2hhbmdlKCRldmVudClcIlxuICAoaW9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgKGlvbklucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAoaW9uQ2xlYXIpPVwiaGFuZGxlQ2xlYXIoKVwiXG4gIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgW3Nob3dDYW5jZWxCdXR0b25dPVwic2hvd0NhbmNlbEJ1dHRvblwiXG4gIFtjYW5jZWxCdXR0b25UZXh0XT1cImJ1dHRvbkNhbmNlbFRleHRcIlxuICBbY2xlYXJJY29uXT1cImNsZWFySWNvblwiXG4gIFtjb2xvcl09XCJjb2xvclwiXG4gIFtkZWJvdW5jZV09XCJkZWJvdW5jZVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtlbnRlcmtleWhpbnRdPVwiZW50ZXJrZXloaW50XCJcbiAgW2lucHV0bW9kZV09XCJpbnB1dG1vZGVcIlxuICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbc2VhcmNoSWNvbl09XCJzZWFyY2hJY29uXCJcbiAgW3Nob3dDbGVhckJ1dHRvbl09XCJzaG93Q2xlYXJCdXR0b25cIlxuICBbc3BlbGxjaGVja109XCJzcGVsbGNoZWNrXCJcbiAgW3R5cGVdPVwidHlwZVwiXG4gICNjb21wb25lbnRcbiAvPlxuIl19
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUcsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzlGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFFcEM7Ozs7Ozs7Ozs7OztHQVlHO0FBUUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQTRRdEQ7Ozs7Ozs7T0FPRztJQUNIO1FBQ0UsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFuUjlCOzs7OztXQUtHO1FBQ0gsV0FBVztRQUNYLGtEQUFrRDtRQUVsRDs7Ozs7Ozs7OztXQVVHO1FBRUgsaUJBQVksR0FBa0MsS0FBSyxDQUFDO1FBRXBEOzs7Ozs7Ozs7V0FTRztRQUVILGdCQUFXLEdBQWlCLEtBQUssQ0FBQztRQUVsQzs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQW9CLElBQUks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QkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBZU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBV04sU0FBUztzQkFEUixLQUFLO2dCQVdOLEtBQUs7c0JBREosS0FBSztnQkFXTixRQUFRO3NCQURQLEtBQUs7Z0JBV04sUUFBUTtzQkFEUCxLQUFLO2dCQVdOLFlBQVk7c0JBRFgsS0FBSztnQkFXTixTQUFTO3NCQURSLEtBQUs7Z0JBV04sV0FBVztzQkFEVixLQUFLO2dCQVdOLFVBQVU7c0JBRFQsS0FBSztnQkFXTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFXTixlQUFlO3NCQURkLEtBQUs7Z0JBV04sVUFBVTtzQkFEVCxLQUFLO2dCQVdOLElBQUk7c0JBREgsS0FBSztnQkFXTixLQUFLO3NCQURKLEtBQUs7Z0JBV04sU0FBUztzQkFEUixLQUFLO2dCQVdOLFNBQVM7c0JBRFIsS0FBSztnQkFXTixPQUFPO3NCQUROLEtBQUs7Z0JBV04sWUFBWTtzQkFEWCxLQUFLO2dCQVdOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkF3Qk4sV0FBVztzQkFEVixNQUFNO2dCQWdGUCxzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsa0NBQWtDLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsICBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVUeXBlcywgUHJlZGVmaW5lZENvbG9yc30gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgU3RyaW5nT3JCb29sZWFuIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJztcbmltcG9ydCB7d2luZG93RXZlbnRFbWl0dGVyfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V0aWxzJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgc3RyaW5nVG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEJhc2VDb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uU2VhcmNoYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgKiBhcyBhbGxJY29ucyBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2VhcmNoYmFyIGNvbXBvbmVudCBmb3IgQW5ndWxhciBhcHBsaWNhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgU2VhcmNoYmFyQ29tcG9uZW50IHByb3ZpZGVzIGEgaGlnaGx5IGN1c3RvbWl6YWJsZSBzZWFyY2ggaW5wdXQgZmllbGQgd2l0aCBjb21wcmVoZW5zaXZlXG4gKiBvcHRpb25zIGZvciBhcHBlYXJhbmNlLCBiZWhhdmlvciwgYW5kIGludGVyYWN0aW9uIHBhdHRlcm5zLiBJdCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgdG8gaW5oZXJpdFxuICogY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudHMgT25Jbml0IGZvciBwcm9wZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgY29tcG9uZW50IGZlYXR1cmVzXG4gKiBkZWJvdW5jZWQgaW5wdXQgaGFuZGxpbmcsIHdpbmRvdyBldmVudCBpbnRlZ3JhdGlvbiwgdmlzaWJpbGl0eSBjb250cm9scywgYW5kIGV4dGVuc2l2ZSBzdHlsaW5nIG9wdGlvbnMuXG4gKiBJdCdzIGRlc2lnbmVkIHRvIGJlIGZsZXhpYmxlIGFuZCBhZGFwdGFibGUgdG8gZGlmZmVyZW50IHNlYXJjaCByZXF1aXJlbWVudHMgd2l0aGluIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zLlxuICpcbiAqIEBjbGFzcyBTZWFyY2hiYXJDb21wb25lbnRcbiAqIEBleHRlbmRzIHtOZ3hCYXNlQ29tcG9uZW50fVxuICogQGltcGxlbWVudHMge09uSW5pdH1cbiAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLXNlYXJjaGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2hiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hiYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0ZvckFuZ3VsYXJNb2R1bGUsIElvblNlYXJjaGJhcl0sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaGJhckNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1vZGUgb2YgdGhlIHNlYXJjaGJhci5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgdmlzdWFsIHN0eWxlIG9mIHRoZSBzZWFyY2hiYXIsIGVpdGhlciBpT1Mgb3IgTWF0ZXJpYWwgRGVzaWduLlxuICAgKiBAdHlwZSB7XCJpb3NcIiB8IFwibWRcIiB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgXCJpb3NcIlxuICAgKi9cbiAgLy8gQElucHV0KClcbiAgLy8gb3ZlcnJpZGUgbW9kZTogXCJpb3NcIiB8IFwibWRcIiB8IHVuZGVmaW5lZCA9IFwibWRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdXRvY29tcGxldGUgYXR0cmlidXRlIGZvciB0aGUgc2VhcmNoYmFyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnJvd3NlciBzaG91bGQgZW5hYmxlIGF1dG9jb21wbGV0ZSBmb3IgdGhlIGlucHV0IGZpZWxkLlxuICAgKiBUaGlzIGNvbnRyb2xzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gYXV0b2NvbXBsZXRlIGZ1bmN0aW9uYWxpdHksIGhlbHBpbmcgdXNlcnMgYnlcbiAgICogc3VnZ2VzdGluZyBwcmV2aW91c2x5IGVudGVyZWQgdmFsdWVzIG9yIGNvbW1vbiBpbnB1dHMuIFNldHRpbmcgdG8gJ29mZicgZGlzYWJsZXNcbiAgICogdGhpcyBmZWF0dXJlIGZvciBwcml2YWN5IG9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtBdXRvY29tcGxldGVUeXBlcyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgXCJvZmZcIlxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhdXRvY29tcGxldGU6IEF1dG9jb21wbGV0ZVR5cGVzIHwgdW5kZWZpbmVkID0gXCJvZmZcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdXRvY29ycmVjdCBhdHRyaWJ1dGUgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHdoZXRoZXIgdGhlIGJyb3dzZXIgc2hvdWxkIGVuYWJsZSBhdXRvY29ycmVjdCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGJyb3dzZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGNvcnJlY3Qgc3BlbGxpbmcgbWlzdGFrZXMgYXMgdGhlIHVzZXIgdHlwZXMuXG4gICAqIFRoaXMgaXMgdHlwaWNhbGx5IGRpc2FibGVkIGZvciBzZWFyY2ggZmllbGRzIHRvIHByZXNlcnZlIHRoZSB1c2VyJ3MgZXhhY3Qgc2VhcmNoIHRlcm1zLlxuICAgKlxuICAgKiBAdHlwZSB7XCJvblwiIHwgXCJvZmZcIn1cbiAgICogQGRlZmF1bHQgXCJvZmZcIlxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhdXRvY29ycmVjdDogXCJvblwiIHwgXCJvZmZcIiA9IFwib2ZmXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRoZSBzZWFyY2hiYXIgc2hvdWxkIGFuaW1hdGUuXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSBhbmltYXRpb24gYmVoYXZpb3Igb2YgdGhlIHNlYXJjaGJhciBkdXJpbmcgYXBwZWFyYW5jZSBhbmQgZGlzYXBwZWFyYW5jZSB0cmFuc2l0aW9ucy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgc2VhcmNoYmFyIHdpbGwgdXNlIHNtb290aCBhbmltYXRpb25zIGZvciBzdGF0ZSBjaGFuZ2VzLCBwcm92aWRpbmcgYSBtb3JlXG4gICAqIHBvbGlzaGVkIHVzZXIgZXhwZXJpZW5jZS4gVGhpcyBhZmZlY3RzIHRyYW5zaXRpb25zIGxpa2Ugc2hvd2luZy9oaWRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBhbmltYXRlZDogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBsb2NhbGl6ZWQgdGV4dCB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIHNlYXJjaGJhci5cbiAgICogVGhpcyB0ZXh0IGFwcGVhcnMgd2hlbiB0aGUgY2FuY2VsIGJ1dHRvbiBpcyB2aXNpYmxlIGFuZCBwcm92aWRlcyB1c2VycyB3aXRoIGEgY2xlYXJcbiAgICogaW5kaWNhdGlvbiBvZiBob3cgdG8gZGlzbWlzcyB0aGUgc2VhcmNoIGludGVyZmFjZS4gVGhlIHRleHQgY2FuIGJlIGN1c3RvbWl6ZWQgZm9yXG4gICAqIGRpZmZlcmVudCBsYW5ndWFnZXMgYW5kIGN1bHR1cmFsIGNvbnRleHRzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcIkNhbmNlbFwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNhbmNlbFRleHQ6IHN0cmluZyA9IFwiQ2FuY2VsXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaWNvbiB0byB1c2UgZm9yIHRoZSBjbGVhciBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgaWNvbiB0byBiZSBkaXNwbGF5ZWQgZm9yIHRoZSBjbGVhciBidXR0b24gb2YgdGhlIHNlYXJjaGJhci5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsZWFySWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgdGhlbWUgdG8gYmUgYXBwbGllZCB0byB0aGUgc2VhcmNoYmFyLlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IHRvIHRyaWdnZXIgdGhlIGBpb25DaGFuZ2VgIGV2ZW50IGFmdGVyIGVhY2gga2V5c3Ryb2tlLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgZGVib3VuY2UgdGltZSBmb3IgdGhlIHNlYXJjaCBpbnB1dCB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBldmVudCBlbWlzc2lvbnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBkZWJvdW5jZTogbnVtYmVyID0gNTAwO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0aGUgc2VhcmNoYmFyIGlzIGRpc2FibGVkLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHRoZSBzZWFyY2hiYXIgaXMgaW50ZXJhY3RpdmUgb3Igbm90LlxuICAgKiBAdHlwZSB7U3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogU3RyaW5nT3JCb29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBIGhpbnQgdG8gdGhlIGJyb3dzZXIgZm9yIHdoaWNoIGVudGVyIGtleSB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWN0aW9uIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgZW50ZXIga2V5IGlzIHByZXNzZWQuXG4gICAqIEB0eXBlIHtcInNlYXJjaFwiIHwgXCJlbnRlclwiIHwgXCJkb25lXCIgfCBcImdvXCIgfCBcIm5leHRcIiB8IFwicHJldmlvdXNcIiB8IFwic2VuZFwiIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCBcImVudGVyXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZW50ZXJrZXloaW50OiBcInNlYXJjaFwiIHwgXCJlbnRlclwiIHwgXCJkb25lXCIgfCBcImdvXCIgfCBcIm5leHRcIiB8IFwicHJldmlvdXNcIiB8IFwic2VuZFwiIHwgdW5kZWZpbmVkID0gXCJlbnRlclwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGlucHV0IG1vZGUgZm9yIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgbWlnaHQgYmUgZW50ZXJlZCBieSB0aGUgdXNlciB3aGlsZSBlZGl0aW5nIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cy5cbiAgICogQHR5cGUge1widGV4dFwiIHwgXCJzZWFyY2hcIiB8IFwibm9uZVwiIHwgXCJlbWFpbFwiIHwgXCJ0ZWxcIiB8IFwidXJsXCIgfCBcIm51bWVyaWNcIiB8IFwiZGVjaW1hbFwiIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnc2VhcmNoJ1xuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpbnB1dG1vZGU6IFwidGV4dFwiIHwgXCJzZWFyY2hcIiB8IFwibm9uZVwiIHwgXCJlbWFpbFwiIHwgXCJ0ZWxcIiB8IFwidXJsXCIgfCBcIm51bWVyaWNcIiB8IFwiZGVjaW1hbFwiIHwgdW5kZWZpbmVkID0gJ3NlYXJjaCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgcGxhY2Vob2xkZXIgdGV4dCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNlYXJjaGJhciB3aGVuIGl0J3MgZW1wdHkuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwiU2VhcmNoXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXIgPSBcIlNlYXJjaFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGljb24gdG8gdXNlIGZvciB0aGUgc2VhcmNoIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBpY29uIHRvIGJlIGRpc3BsYXllZCBmb3IgdGhlIHNlYXJjaCBidXR0b24gb2YgdGhlIHNlYXJjaGJhci5cbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgXCJzZWFyY2gtb3V0bGluZVwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaEljb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwic2VhcmNoLW91dGxpbmVcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZW4gdG8gc2hvdyB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNhbmNlbCBidXR0b24gaW4gZGlmZmVyZW50IHN0YXRlcyBvZiB0aGUgc2VhcmNoYmFyLlxuICAgKiBAdHlwZSB7XCJhbHdheXNcIiB8IFwiZm9jdXNcIiB8IFwibmV2ZXJcIn1cbiAgICogQGRlZmF1bHQgXCJuZXZlclwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dDYW5jZWxCdXR0b246IFwiYWx3YXlzXCIgfCBcImZvY3VzXCIgfCBcIm5ldmVyXCIgPSBcIm5ldmVyXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGVuIHRvIHNob3cgdGhlIGNsZWFyIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNsZWFyIGJ1dHRvbiBpbiBkaWZmZXJlbnQgc3RhdGVzIG9mIHRoZSBzZWFyY2hiYXIuXG4gICAqIEB0eXBlIHtcImFsd2F5c1wiIHwgXCJmb2N1c1wiIHwgXCJuZXZlclwifVxuICAgKiBAZGVmYXVsdCBcImZvY3VzXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0NsZWFyQnV0dG9uOiBcImFsd2F5c1wiIHwgXCJmb2N1c1wiIHwgXCJuZXZlclwiID0gXCJmb2N1c1wiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBlbmFibGUgc3BlbGxjaGVjayBvbiB0aGUgc2VhcmNoYmFyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHRoZSBicm93c2VyJ3Mgc3BlbGxjaGVjayBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzcGVsbGNoZWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiBpbnB1dCB0byB1c2UgZm9yIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBjb250cm9sIHRvIGRpc3BsYXkgZm9yIHRoZSBzZWFyY2hiYXIgaW5wdXQuXG4gICAqIEB0eXBlIHtcIm51bWJlclwiIHwgXCJ0ZXh0XCIgfCBcInNlYXJjaFwiIHwgXCJlbWFpbFwiIHwgXCJwYXNzd29yZFwiIHwgXCJ0ZWxcIiB8IFwidXJsXCIgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0IFwic2VhcmNoXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdHlwZTogXCJudW1iZXJcIiB8IFwidGV4dFwiIHwgXCJzZWFyY2hcIiB8IFwiZW1haWxcIiB8IFwicGFzc3dvcmRcIiB8IFwidGVsXCIgfCBcInVybFwiIHwgdW5kZWZpbmVkID0gXCJzZWFyY2hcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB2YWx1ZSBvZiB0aGUgc2VhcmNoYmFyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlYXJjaGJhciBpbnB1dC5cbiAgICogQHR5cGUge251bGwgfCBzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdmFsdWU6IG51bGwgfCBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGtleXMgdG8gdXNlIGZvciBxdWVyeWluZy5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBrZXlzIHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoIHF1ZXJ5LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgc3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFwibmFtZVwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHF1ZXJ5S2V5czogc3RyaW5nIHwgc3RyaW5nW10gPSBcIm5hbWVcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdGhlIHNlYXJjaGJhciBpcyB2aXNpYmxlLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2VhcmNoYmFyIGNvbXBvbmVudC5cbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaXNWaXNpYmxlOiBTdHJpbmdPckJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gd3JhcCB0aGUgc2VhcmNoYmFyIGluIGEgY29udGFpbmVyLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHRoZSBzZWFyY2hiYXIgaXMgd3JhcHBlZCBpbiBhbiBhZGRpdGlvbmFsIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAdHlwZSB7U3RyaW5nT3JCb29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB3cmFwcGVyOiBTdHJpbmdPckJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgd3JhcHBlci5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciB0aGVtZSB0byBiZSBhcHBsaWVkIHRvIHRoZSB3cmFwcGVyIGNvbnRhaW5lciwgaWYgcHJlc2VudC5cbiAgICogQHR5cGUge1ByZWRlZmluZWRDb2xvcnN9XG4gICAqIEBkZWZhdWx0IFwicHJpbWFyeVwiXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHdyYXBwZXJDb2xvcjogUHJlZGVmaW5lZENvbG9ycyA9IFwicHJpbWFyeVwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBlbWl0IGV2ZW50cyB0byB0aGUgd2luZG93LlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB3aGV0aGVyIHNlYXJjaCBldmVudHMgc2hvdWxkIGJlIGVtaXR0ZWQgYXMgd2luZG93IGV2ZW50cy5cbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBlbWl0RXZlbnRUb1dpbmRvdzogU3RyaW5nT3JCb29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzZWFyY2hiYXIuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2VhcmNoYmFyIGlucHV0IGZvciBpbnRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBwcm9jZXNzaW5nLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gdHJhY2sgdGhlIHNlYXJjaCB0ZXJtIHRocm91Z2hvdXQgdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSBhbmRcbiAgICogY29vcmRpbmF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBldmVudCBoYW5kbGVycyBhbmQgbWV0aG9kcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgY3VycmVudFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBzZWFyY2ggZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBzZWFyY2ggZXZlbnRzIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHNlYXJjaGJhciwgcHJvdmlkaW5nIGEgcmVhY3RpdmVcbiAgICogaW50ZXJmYWNlIGZvciBwYXJlbnQgY29tcG9uZW50cyB0byByZXNwb25kIHRvIHNlYXJjaCBhY3Rpb25zLiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBieVxuICAgKiB2YXJpb3VzIHVzZXIgaW50ZXJhY3Rpb25zIGluY2x1ZGluZyB0eXBpbmcsIGNsZWFyaW5nLCBhbmQgZXhwbGljaXQgc2VhcmNoIGFjdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn1cbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaEV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTZWFyY2hiYXJDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIHRoZSBTZWFyY2hiYXJDb21wb25lbnQgd2l0aCBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbnMuXG4gICAqIER1cmluZyBpbml0aWFsaXphdGlvbiwgaXQgYWRkcyBhbGwgYXZhaWxhYmxlIElvbmljb25zIHRvIHRoZSBhcHBsaWNhdGlvbidzIGljb24gcmVnaXN0cnksXG4gICAqIGVuc3VyaW5nIHRoYXQgc2VhcmNoIGFuZCBjbGVhciBpY29ucyBhcmUgYXZhaWxhYmxlIGZvciB1c2UgdGhyb3VnaG91dCB0aGUgY29tcG9uZW50J3MgbGlmZWN5Y2xlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignU2VhcmNoYmFyQ29tcG9uZW50Jyk7XG4gICAgYWRkSWNvbnMoYWxsSWNvbnMpXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBlc3NlbnRpYWwgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIGJ5IGNvbnZlcnRpbmcgc3RyaW5nLWJhc2VkIGJvb2xlYW4gaW5wdXRzXG4gICAqIHRvIHByb3BlciBib29sZWFuIHZhbHVlcyB1c2luZyB0aGUgc3RyaW5nVG9Cb29sZWFuIHV0aWxpdHkuIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBib29sZWFuXG4gICAqIHByb3BlcnRpZXMgd29yayBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiBob3cgdGhleSB3ZXJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnRzIG9yIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVdGlsaXR5IEZ1bmN0aW9uc1xuICAgKlxuICAgKiAgIEEtPj5TOiBuZ09uSW5pdCgpXG4gICAqICAgUy0+PlU6IHN0cmluZ1RvQm9vbGVhbihlbWl0RXZlbnRUb1dpbmRvdylcbiAgICogICBVLS0+PlM6IGJvb2xlYW4gdmFsdWVcbiAgICogICBTLT4+VTogc3RyaW5nVG9Cb29sZWFuKHdyYXBwZXIpXG4gICAqICAgVS0tPj5TOiBib29sZWFuIHZhbHVlXG4gICAqICAgUy0+PlU6IHN0cmluZ1RvQm9vbGVhbihpc1Zpc2libGUpXG4gICAqICAgVS0tPj5TOiBib29sZWFuIHZhbHVlXG4gICAqICAgUy0+PlU6IHN0cmluZ1RvQm9vbGVhbihkaXNhYmxlZClcbiAgICogICBVLS0+PlM6IGJvb2xlYW4gdmFsdWVcbiAgICogICBTLT4+VTogc3RyaW5nVG9Cb29sZWFuKGFuaW1hdGVkKVxuICAgKiAgIFUtLT4+UzogYm9vbGVhbiB2YWx1ZVxuICAgKiAgIE5vdGUgb3ZlciBTOiBDb21wb25lbnQgcmVhZHkgZm9yIGludGVyYWN0aW9uXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdEV2ZW50VG9XaW5kb3cgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5lbWl0RXZlbnRUb1dpbmRvdyk7XG4gICAgdGhpcy53cmFwcGVyID0gc3RyaW5nVG9Cb29sZWFuKHRoaXMud3JhcHBlcik7XG4gICAgdGhpcy5pc1Zpc2libGUgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5pc1Zpc2libGUpO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5kaXNhYmxlZCk7XG4gICAgdGhpcy5hbmltYXRlZCA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLmFuaW1hdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSB0b2dnbGUgb2YgdGhlIHNlYXJjaGJhciBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IExpc3RlbnMgZm9yIGdsb2JhbCB3aW5kb3cgZXZlbnRzIHRvIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgc2VhcmNoYmFyLlxuICAgKiBXaGVuIHRoZSBzZWFyY2hiYXIgYmVjb21lcyB2aXNpYmxlLCBpdCBhdXRvbWF0aWNhbGx5IGZvY3VzZXMgb24gdGhlIGlucHV0IGZpZWxkIGFmdGVyIGEgYnJpZWZcbiAgICogZGVsYXkgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb24gY29tcGxldGlvbi4gVGhpcyBwcm92aWRlcyBhIHNlYW1sZXNzIHVzZXIgZXhwZXJpZW5jZSBmb3JcbiAgICogc2VhcmNoIGFjdGl2YXRpb24gdGhyb3VnaCBrZXlib2FyZCBzaG9ydGN1dHMgb3IgcHJvZ3JhbW1hdGljIHRyaWdnZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBjdXN0b20gZXZlbnQgdHJpZ2dlcmluZyB0aGUgdmlzaWJpbGl0eSB0b2dnbGUgKHVudXNlZCBidXQgcmVxdWlyZWQgYnkgSG9zdExpc3RlbmVyKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvd1xuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBET00gRWxlbWVudFxuICAgKlxuICAgKiAgIFctPj5TOiB0b2dnbGVTZWFyY2hiYXJWaXNpYmlsaXR5IGV2ZW50XG4gICAqICAgUy0+PlM6IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHkoKVxuICAgKiAgIFMtPj5TOiBUb2dnbGUgaXNWaXNpYmxlIHN0YXRlXG4gICAqICAgYWx0IGlzVmlzaWJsZSBpcyB0cnVlIEFORCBjb21wb25lbnQgZXhpc3RzXG4gICAqICAgICBTLT4+Uzogc2V0VGltZW91dCgxMjVtcylcbiAgICogICAgIFMtPj5FOiBzZXRGb2N1cygpIG9uIGlvbi1zZWFyY2hiYXJcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzp0b2dnbGVTZWFyY2hiYXJWaXNpYmlsaXR5XCIsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVRvZ2dsZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XG4gICAgaWYodGhpcy5pc1Zpc2libGUgJiYgISF0aGlzLmNvbXBvbmVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgKHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElvblNlYXJjaGJhckVsZW1lbnQpLnNldEZvY3VzKCk7XG4gICAgICB9LCAxMjUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVHJpZ2dlcnMgYSBtYW51YWwgc2VhcmNoIGV2ZW50IHdpdGggdGhlIGN1cnJlbnQgc2VhcmNoYmFyIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgc2VhcmNoYmFyJ3MgbmF0aXZlIGVsZW1lbnQgYW5kIGVtaXRzIGl0IGFzIGEgc2VhcmNoIGV2ZW50LlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHByb2dyYW1tYXRpYyB3YXkgdG8gdHJpZ2dlciBzZWFyY2ggZnVuY3Rpb25hbGl0eSwgdXNlZnVsIGZvciBleHRlcm5hbFxuICAgKiBjb21wb25lbnRzIG9yIGtleWJvYXJkIHNob3J0Y3V0cyB0aGF0IG5lZWQgdG8gZXhlY3V0ZSBzZWFyY2ggd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIHdpdGggdGhlIHNlYXJjaGJhciBpdHNlbGYuXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIHNlYXJjaCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW9uU2VhcmNoYmFyRWxlbWVudDtcbiAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQoZWxlbWVudC52YWx1ZSB8fCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHZhbHVlIGNoYW5nZXMgaW4gdGhlIHNlYXJjaGJhciBpbnB1dCBmaWVsZC5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGNoYW5nZSBldmVudHMgZnJvbSB0aGUgSW9uaWMgc2VhcmNoYmFyIGNvbXBvbmVudCBhbmQgZXh0cmFjdHMgdGhlIG5ldyB2YWx1ZVxuICAgKiB0byBlbWl0IGFzIGEgc2VhcmNoIGV2ZW50LiBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBmaW5pc2hlcyBlZGl0aW5nIHRoZSBzZWFyY2hiYXJcbiAgICogdmFsdWUsIHByb3ZpZGluZyBhIHdheSB0byByZWFjdCB0byBjb21wbGV0ZWQgaW5wdXQgY2hhbmdlcyByYXRoZXIgdGhhbiByZWFsLXRpbWUgdHlwaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBjaGFuZ2UgZXZlbnQgZnJvbSB0aGUgSW9uaWMgc2VhcmNoYmFyIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgU2VhcmNoYmFyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0RXZlbnQoZXZlbnQ/LmRldGFpbD8udmFsdWUgPz8gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGVhcmluZyBvZiB0aGUgc2VhcmNoYmFyIGlucHV0IGZpZWxkLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBhbiB1bmRlZmluZWQgdmFsdWUgYXMgYSBzZWFyY2ggZXZlbnQgd2hlbiB0aGUgc2VhcmNoYmFyIGlzIGNsZWFyZWQgYnkgdGhlIHVzZXIuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGNsZWFyIGJ1dHRvbiBvciB1c2VzIG90aGVyXG4gICAqIGNsZWFyIG1lY2hhbmlzbXMsIHNpZ25hbGluZyB0aGF0IHRoZSBzZWFyY2ggc2hvdWxkIGJlIHJlc2V0IG9yIGNsZWFyZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdEV2ZW50KHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgcmVhbC10aW1lIGlucHV0IGV2ZW50cyBvbiB0aGUgc2VhcmNoYmFyLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgaW5wdXQgZXZlbnRzIGFzIHRoZSB1c2VyIHR5cGVzLCBwcm92aWRpbmcgaW1tZWRpYXRlIGZlZWRiYWNrIGZvciBzZWFyY2ggZnVuY3Rpb25hbGl0eS5cbiAgICogVGhpcyBtZXRob2QgaW1wbGVtZW50cyBzbWFydCBjbGVhcmluZyBiZWhhdmlvciAtIGlmIHRoZSBpbnB1dCBiZWNvbWVzIGVtcHR5LCBpdCBhdXRvbWF0aWNhbGx5XG4gICAqIHRyaWdnZXJzIHRoZSBjbGVhciBoYW5kbGVyLiBPdGhlcndpc2UsIGl0IGVtaXRzIHRoZSBjdXJyZW50IHZhbHVlIGZvciByZWFsLXRpbWUgc2VhcmNoIHN1Z2dlc3Rpb25zXG4gICAqIG9yIGZpbHRlcmluZy4gVGhpcyBlbmFibGVzIHJlc3BvbnNpdmUgc2VhcmNoIGV4cGVyaWVuY2VzIHdpdGggZGVib3VuY2VkIGV2ZW50IGhhbmRsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBpbnB1dCBldmVudCBmcm9tIHRoZSBJb25pYyBzZWFyY2hiYXIgY29udGFpbmluZyB0aGUgY3VycmVudCB2YWx1ZVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBTIGFzIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRXZlbnQgU3lzdGVtXG4gICAqXG4gICAqICAgVS0+PlM6IFR5cGUgaW4gc2VhcmNoYmFyXG4gICAqICAgUy0+PlM6IGhhbmRsZUlucHV0KGV2ZW50KVxuICAgKiAgIFMtPj5TOiBFeHRyYWN0IHZhbHVlIGZyb20gZXZlbnRcbiAgICogICBhbHQgdmFsdWUgaXMgZW1wdHkgb3IgbnVsbFxuICAgKiAgICAgUy0+PlM6IGhhbmRsZUNsZWFyKClcbiAgICogICAgIFMtPj5FOiBFbWl0IHVuZGVmaW5lZFxuICAgKiAgIGVsc2UgdmFsdWUgaGFzIGNvbnRlbnRcbiAgICogICAgIFMtPj5TOiBlbWl0RXZlbnQodmFsdWUpXG4gICAqICAgICBTLT4+RTogRW1pdCBzZWFyY2ggdmFsdWVcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlSW5wdXQoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudD8uZGV0YWlsPy52YWx1ZTtcbiAgICBpZighdmFsdWUgfHwgIXZhbHVlPy5sZW5ndGgpXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDbGVhcigpO1xuICAgIHRoaXMuZW1pdEV2ZW50KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBibHVyIGV2ZW50cyBvbiB0aGUgc2VhcmNoYmFyLlxuICAgKiBAc3VtbWFyeSBDdXJyZW50bHkgYW4gZW1wdHkgbWV0aG9kLCBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIHNwZWNpZmljIGJsdXIgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7Q3VzdG9tRXZlbnR9IGV2ZW50IC0gVGhlIGJsdXIgZXZlbnQgZnJvbSB0aGUgc2VhcmNoYmFyXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICAvLyBoYW5kbGVCbHVyKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEVtaXRzIHNlYXJjaCBldmVudHMgdGhyb3VnaCBtdWx0aXBsZSBjaGFubmVscy5cbiAgICogQHN1bW1hcnkgT3JjaGVzdHJhdGVzIHRoZSBlbWlzc2lvbiBvZiBzZWFyY2ggZXZlbnRzIGJvdGggYXMgY29tcG9uZW50IG91dHB1dCBldmVudHMgYW5kIG9wdGlvbmFsbHlcbiAgICogYXMgZ2xvYmFsIHdpbmRvdyBldmVudHMuIFRoaXMgZHVhbC1jaGFubmVsIGFwcHJvYWNoIGVuYWJsZXMgYm90aCBkaXJlY3QgcGFyZW50LWNoaWxkIGNvbW11bmljYXRpb25cbiAgICogYW5kIGFwcGxpY2F0aW9uLXdpZGUgZXZlbnQgYnJvYWRjYXN0aW5nLCBzdXBwb3J0aW5nIGZsZXhpYmxlIGludGVncmF0aW9uIHBhdHRlcm5zIGFuZCBsb29zZSBjb3VwbGluZ1xuICAgKiBiZXR3ZWVuIGNvbXBvbmVudHMgdGhhdCBuZWVkIHRvIHJlc3BvbmQgdG8gc2VhcmNoIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFRoZSBzZWFyY2ggdmFsdWUgdG8gZW1pdCBhY3Jvc3MgYWxsIGNvbmZpZ3VyZWQgY2hhbm5lbHNcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBTZWFyY2hiYXJDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIFBhcmVudCBDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvdyBFdmVudCBTeXN0ZW1cbiAgICpcbiAgICogICBTLT4+UzogZW1pdEV2ZW50KHZhbHVlKVxuICAgKiAgIFMtPj5QOiBzZWFyY2hFdmVudC5lbWl0KHZhbHVlKVxuICAgKiAgIGFsdCBlbWl0RXZlbnRUb1dpbmRvdyBpcyB0cnVlXG4gICAqICAgICBTLT4+Vzogd2luZG93RXZlbnRFbWl0dGVyKCdzZWFyY2hiYXJFdmVudCcsIHt2YWx1ZX0pXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTZWFyY2hiYXJDb21wb25lbnRcbiAgICovXG4gIGVtaXRFdmVudCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHZhbHVlKTtcbiAgICBpZih0aGlzLmVtaXRFdmVudFRvV2luZG93KVxuICAgICAgd2luZG93RXZlbnRFbWl0dGVyKCdzZWFyY2hiYXJFdmVudCcsIHt2YWx1ZTogdmFsdWV9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmV2ZW50cyBkZWZhdWx0IGJlaGF2aW9yIG9mIERPTSBldmVudHMuXG4gICAqIEBzdW1tYXJ5IFV0aWxpdHkgbWV0aG9kIHRvIHByZXZlbnQgdW53YW50ZWQgZGVmYXVsdCBhY3Rpb25zIG9uIERPTSBldmVudHMsIHN1Y2ggYXMgZm9ybSBzdWJtaXNzaW9uc1xuICAgKiBvciBuYXZpZ2F0aW9uIHRyaWdnZXJzLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gZXZlbnQgaGFuZGxlcnMgd2hlcmUgdGhlIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvclxuICAgKiB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgY29tcG9uZW50J3MgY3VzdG9tIGxvZ2ljIG9yIHVzZXIgZXhwZXJpZW5jZSBkZXNpZ24uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIERPTSBldmVudCB3aG9zZSBkZWZhdWx0IGJlaGF2aW9yIHNob3VsZCBiZSBwcmV2ZW50ZWRcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQG1lbWJlck9mIFNlYXJjaGJhckNvbXBvbmVudFxuICAgKi9cbiAgcHJldmVudENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIiwiPGlvbi1zZWFyY2hiYXJcbiAgW2lkXT1cInVpZFwiXG4gIG5nQ2xhc3M9XCJkY2Ytc2VhcmNoYmFyXCJcbiAgbmFtZT1cInNlYXJjaFwiXG4gIG1vZGU9XCJpb3NcIlxuICAoa2V5dXAuZW50ZXIpPVwicHJldmVudENoYW5nZSgkZXZlbnQpXCJcbiAgKGlvbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiXG4gIChpb25JbnB1dCk9XCJoYW5kbGVJbnB1dCgkZXZlbnQpXCJcbiAgKGlvbkNsZWFyKT1cImhhbmRsZUNsZWFyKClcIlxuICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gIFtzaG93Q2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxuICBbY2FuY2VsQnV0dG9uVGV4dF09XCJidXR0b25DYW5jZWxUZXh0XCJcbiAgW2NsZWFySWNvbl09XCJjbGVhckljb25cIlxuICBbY29sb3JdPVwiY29sb3JcIlxuICBbZGVib3VuY2VdPVwiZGVib3VuY2VcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbZW50ZXJrZXloaW50XT1cImVudGVya2V5aGludFwiXG4gIFtpbnB1dG1vZGVdPVwiaW5wdXRtb2RlXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgW3NlYXJjaEljb25dPVwic2VhcmNoSWNvblwiXG4gIFtzaG93Q2xlYXJCdXR0b25dPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgW3NwZWxsY2hlY2tdPVwic3BlbGxjaGVja1wiXG4gIFt0eXBlXT1cInR5cGVcIlxuICAjY29tcG9uZW50XG4gLz5cbiJdfQ==
@@ -1,8 +1,9 @@
1
- import { Directive, ElementRef, inject } from '@angular/core';
1
+ import { Directive, ElementRef, inject, Injector } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class CollapsableDirective {
4
4
  constructor() {
5
5
  this.element = inject(ElementRef);
6
+ this.injector = inject(Injector);
6
7
  }
7
8
  // constructor() {}
8
9
  ngOnInit() {
@@ -25,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
25
26
  standalone: true
26
27
  }]
27
28
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2FibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3RpdmVzL2NvbGxhcHNhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT3RFLE1BQU0sT0FBTyxvQkFBb0I7SUFKakM7UUFNVSxZQUFPLEdBQTRCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQWEvRDtJQVpDLG1CQUFtQjtJQUVuQixRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7UUFDNUMsSUFBRyxPQUFPLEVBQUUsQ0FBQztZQUNYLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQXdCLENBQUM7WUFDckYsSUFBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQWdCLENBQUM7Z0JBQ3pFLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FkVSxvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RlY2FmQ29sbGFwc2FibGVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb2xsYXBzYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdHtcblxuICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAvLyBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudDtcbiAgICBpZihlbGVtZW50KSB7XG4gICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JlcXVpcmVkXScpIGFzIE5vZGVMaXN0T2Y8RWxlbWVudD47XG4gICAgICBpZihyZXF1aXJlZEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWNjb3JkaW9uID0gZWxlbWVudD8uY2xvc2VzdCgnaW9uLWFjY29yZGlvbi1ncm91cCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBhY2NvcmRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsICdvcGVuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2FibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3RpdmVzL2NvbGxhcHNhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU9oRixNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBTVUsWUFBTyxHQUE0QixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQTBDckM7SUF6Q0MsbUJBQW1CO0lBRW5CLFFBQVE7UUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQztRQUM1QyxJQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ1gsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBd0IsQ0FBQztZQUNyRixJQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxTQUFTLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBZ0IsQ0FBQztnQkFDekUsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQWZVLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RlY2FmQ29sbGFwc2FibGVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb2xsYXBzYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdHtcblxuICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgLy8gY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYoZWxlbWVudCkge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyZXF1aXJlZF0nKSBhcyBOb2RlTGlzdE9mPEVsZW1lbnQ+O1xuICAgICAgaWYocmVxdWlyZWRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFjY29yZGlvbiA9IGVsZW1lbnQ/LmNsb3Nlc3QoJ2lvbi1hY2NvcmRpb24tZ3JvdXAnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgYWNjb3JkaW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnb3BlbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIC8vIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAvLyBuZ09uSW5pdCgpIHtcbiAgLy8gICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuICAvLyAgIGlmKGVsZW1lbnQpIHtcbiAgLy8gICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcmVxdWlyZWRdJykgYXMgTm9kZUxpc3RPZjxFbGVtZW50PjtcblxuICAvLyAgICAgLy8gRmluZCB0aGUgcGFyZW50IGZpZWxkc2V0IGNvbXBvbmVudCBhbmQgc2V0IHJlcXVpcmVkIGF0dHJpYnV0ZSBpZiB0aGVyZSBhcmUgcmVxdWlyZWQgZmllbGRzXG4gIC8vICAgICBjb25zdCBmaWVsZHNldEVsZW1lbnQgPSBlbGVtZW50LmNsb3Nlc3QoJ25neC1kZWNhZi1maWVsZHNldCcpO1xuICAvLyAgICAgaWYgKGZpZWxkc2V0RWxlbWVudCAmJiByZXF1aXJlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIC8vIFNldCBhIGRhdGEgYXR0cmlidXRlIHRoYXQgdGhlIGZpZWxkc2V0IGNvbXBvbmVudCBjYW4gcmVhZFxuICAvLyAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShmaWVsZHNldEVsZW1lbnQsICdkYXRhLWhhcy1yZXF1aXJlZC1maWVsZHMnLCAndHJ1ZScpO1xuXG4gIC8vICAgICAgIC8vIERpc3BhdGNoIGEgY3VzdG9tIGV2ZW50IHRvIG5vdGlmeSB0aGUgZmllbGRzZXQgY29tcG9uZW50XG4gIC8vICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZXF1aXJlZEZpZWxkc0RldGVjdGVkJywge1xuICAvLyAgICAgICAgIGRldGFpbDogeyBoYXNSZXF1aXJlZEZpZWxkczogdHJ1ZSwgY291bnQ6IHJlcXVpcmVkRmllbGRzLmxlbmd0aCB9LFxuICAvLyAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICAgIGZpZWxkc2V0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAvLyAgICAgICBjb25zdCBhY2NvcmRpb24gPSBlbGVtZW50Py5jbG9zZXN0KCdpb24tYWNjb3JkaW9uLWdyb3VwJykgYXMgSFRNTEVsZW1lbnQ7XG4gIC8vICAgICAgIGlmIChhY2NvcmRpb24pIHtcbiAgLy8gICAgICAgICBhY2NvcmRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsICdvcGVuJyk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cbn1cbiJdfQ==