valtech-components 2.0.529 → 2.0.530

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.
@@ -1,6 +1,7 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, inject } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
+ import { I18nService } from '../../../services/i18n';
4
5
  import { IonIcon, IonButton, IonBadge, IonTextarea, IonItem, IonSelect, IonSelectOption, IonSpinner, IonInfiniteScroll, IonInfiniteScrollContent, } from '@ionic/angular/standalone';
5
6
  import { addIcons } from 'ionicons';
6
7
  import { chatbubblesOutline, filterOutline, sendOutline, chatbubbleEllipsesOutline, swapVerticalOutline, } from 'ionicons/icons';
@@ -61,6 +62,7 @@ addIcons({
61
62
  */
62
63
  export class CommentSectionComponent {
63
64
  constructor() {
65
+ this.i18n = inject(I18nService);
64
66
  // Section events
65
67
  this.sortChange = new EventEmitter();
66
68
  this.commentSubmit = new EventEmitter();
@@ -84,8 +86,11 @@ export class CommentSectionComponent {
84
86
  this.updateDisplayTexts();
85
87
  }
86
88
  updateDisplayTexts() {
87
- this.displayTitle = this.props.title || 'Comentarios';
88
- this.displayLoadMoreLabel = this.props.loadMoreLabel || 'Cargar más comentarios';
89
+ this.displayTitle = this.props.title || this.i18n.t('comments');
90
+ this.displayLoadMoreLabel = this.props.loadMoreLabel || this.i18n.t('loadMoreComments');
91
+ }
92
+ getSortByLabel() {
93
+ return this.i18n.t('sortBy');
89
94
  }
90
95
  formatCount(count) {
91
96
  if (count >= 1000000) {
@@ -100,16 +105,16 @@ export class CommentSectionComponent {
100
105
  return option.label;
101
106
  }
102
107
  getInputPlaceholder() {
103
- return this.props.inputConfig?.placeholder || 'Escribe un comentario...';
108
+ return this.props.inputConfig?.placeholder || this.i18n.t('writeComment');
104
109
  }
105
110
  getSubmitLabel() {
106
- return this.props.inputConfig?.submitLabel || 'Publicar';
111
+ return this.props.inputConfig?.submitLabel || this.i18n.t('publish');
107
112
  }
108
113
  getEmptyTitle() {
109
- return this.props.emptyState?.title || 'Sin comentarios aún';
114
+ return this.props.emptyState?.title || this.i18n.t('noCommentsYet');
110
115
  }
111
116
  getEmptyMessage() {
112
- return this.props.emptyState?.message || '¡Sé el primero en compartir tu opinión!';
117
+ return this.props.emptyState?.message || this.i18n.t('beFirstToComment');
113
118
  }
114
119
  getSkeletonArray() {
115
120
  const count = this.props.skeletonCount || 3;
@@ -205,7 +210,7 @@ export class CommentSectionComponent {
205
210
  <ion-icon name="swap-vertical-outline" slot="start" class="sort-icon"></ion-icon>
206
211
  <ion-select
207
212
  [value]="props.selectedSort"
208
- [placeholder]="props.sortLabel || 'Sort by'"
213
+ [placeholder]="props.sortLabel || getSortByLabel()"
209
214
  interface="popover"
210
215
  (ionChange)="onSortChange($event)"
211
216
  >
@@ -375,7 +380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
375
380
  <ion-icon name="swap-vertical-outline" slot="start" class="sort-icon"></ion-icon>
376
381
  <ion-select
377
382
  [value]="props.selectedSort"
378
- [placeholder]="props.sortLabel || 'Sort by'"
383
+ [placeholder]="props.sortLabel || getSortByLabel()"
379
384
  interface="popover"
380
385
  (ionChange)="onSortChange($event)"
381
386
  >
@@ -529,4 +534,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
529
534
  }], replyStart: [{
530
535
  type: Output
531
536
  }] } });
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvY29tbWVudC1zZWN0aW9uL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxPQUFPLEVBQ1AsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGlCQUFpQixFQUNqQix3QkFBd0IsR0FDekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLFdBQVcsRUFDWCx5QkFBeUIsRUFDekIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFnQjVFLFFBQVEsQ0FBQztJQUNQLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsV0FBVztJQUNYLHlCQUF5QjtJQUN6QixtQkFBbUI7Q0FDcEIsQ0FBQyxDQUFDO0FBK0tIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNKVDs4QkErQ1EsS0FBSztzQkFBYixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBJb25JY29uLFxuICBJb25CdXR0b24sXG4gIElvbkJhZGdlLFxuICBJb25UZXh0YXJlYSxcbiAgSW9uSXRlbSxcbiAgSW9uU2VsZWN0LFxuICBJb25TZWxlY3RPcHRpb24sXG4gIElvblNwaW5uZXIsXG4gIElvbkluZmluaXRlU2Nyb2xsLFxuICBJb25JbmZpbml0ZVNjcm9sbENvbnRlbnQsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBjaGF0YnViYmxlc091dGxpbmUsXG4gIGZpbHRlck91dGxpbmUsXG4gIHNlbmRPdXRsaW5lLFxuICBjaGF0YnViYmxlRWxsaXBzZXNPdXRsaW5lLFxuICBzd2FwVmVydGljYWxPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IENvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY29tbWVudC9jb21tZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3NrZWxldG9uL3NrZWxldG9uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb21tZW50U2VjdGlvbk1ldGFkYXRhLFxuICBDb21tZW50U29ydE9wdGlvbixcbiAgQ29tbWVudFNvcnRDaGFuZ2VFdmVudCxcbiAgQ29tbWVudFN1Ym1pdEV2ZW50LFxuICBDb21tZW50U2VjdGlvbkxvYWRNb3JlRXZlbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQ29tbWVudEF1dGhvckNsaWNrRXZlbnQsXG4gIENvbW1lbnRSZWFjdGlvbkNsaWNrRXZlbnQsXG4gIENvbW1lbnRBY3Rpb25DbGlja0V2ZW50LFxuICBDb21tZW50TWVudUl0ZW1DbGlja0V2ZW50LFxuICBDb21tZW50TG9hZE1vcmVFdmVudCxcbn0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NvbW1lbnQvdHlwZXMnO1xuXG5hZGRJY29ucyh7XG4gIGNoYXRidWJibGVzT3V0bGluZSxcbiAgZmlsdGVyT3V0bGluZSxcbiAgc2VuZE91dGxpbmUsXG4gIGNoYXRidWJibGVFbGxpcHNlc091dGxpbmUsXG4gIHN3YXBWZXJ0aWNhbE91dGxpbmUsXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNvbW1lbnQtc2VjdGlvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgSW9uSWNvbixcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQmFkZ2UsXG4gICAgSW9uVGV4dGFyZWEsXG4gICAgSW9uSXRlbSxcbiAgICBJb25TZWxlY3QsXG4gICAgSW9uU2VsZWN0T3B0aW9uLFxuICAgIElvblNwaW5uZXIsXG4gICAgSW9uSW5maW5pdGVTY3JvbGwsXG4gICAgSW9uSW5maW5pdGVTY3JvbGxDb250ZW50LFxuICAgIENvbW1lbnRDb21wb25lbnQsXG4gICAgQXZhdGFyQ29tcG9uZW50LFxuICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LXNlY3Rpb25cIiBbY2xhc3MubG9hZGluZ109XCJwcm9wcy5sb2FkaW5nXCI+XG4gICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGF0YnViYmxlcy1vdXRsaW5lXCIgY2xhc3M9XCJ0aXRsZS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJ0aXRsZVwiPnt7IGRpc3BsYXlUaXRsZSB9fTwvaDM+XG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93Q291bnQgIT09IGZhbHNlICYmIHByb3BzLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIDxpb24tYmFkZ2UgY29sb3I9XCJtZWRpdW1cIiBjbGFzcz1cImNvdW50LWJhZGdlXCI+XG4gICAgICAgICAgICAgIHt7IGZvcm1hdENvdW50KHByb3BzLmNvdW50KSB9fVxuICAgICAgICAgICAgPC9pb24tYmFkZ2U+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHByb3BzLnNvcnRPcHRpb25zICYmIHByb3BzLnNvcnRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBjbGFzcz1cInNvcnQtc2VsZWN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzd2FwLXZlcnRpY2FsLW91dGxpbmVcIiBzbG90PVwic3RhcnRcIiBjbGFzcz1cInNvcnQtaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb3BzLnNlbGVjdGVkU29ydFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzLnNvcnRMYWJlbCB8fCAnU29ydCBieSdcIlxuICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHByb3BzLnNvcnRPcHRpb25zOyB0cmFjayBvcHRpb24udG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLnRva2VuXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldFNvcnRPcHRpb25MYWJlbChvcHRpb24pIH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTmV3IENvbW1lbnQgSW5wdXQgLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dJbnB1dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1jb21tZW50LXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgQGlmIChwcm9wcy5pbnB1dENvbmZpZz8uY3VycmVudFVzZXI/LmF2YXRhcikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1hdmF0YXIgW3Byb3BzXT1cInByb3BzLmlucHV0Q29uZmlnLmN1cnJlbnRVc2VyLmF2YXRhclwiPjwvdmFsLWF2YXRhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0YXJlYVxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3Q29tbWVudFRleHRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRJbnB1dFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwicHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCB8fCAyMDAwXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMuaW5wdXRDb25maWc/LmRpc2FibGVkIHx8IHByb3BzLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFthdXRvR3Jvd109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb21tZW50LXRleHRhcmVhXCJcbiAgICAgICAgICAgICAgPjwvaW9uLXRleHRhcmVhPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgQGlmIChwcm9wcy5pbnB1dENvbmZpZz8uc2hvd0NvdW50ZXIgJiYgcHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGFyLWNvdW50ZXJcIiBbY2xhc3Mud2FybmluZ109XCJpc05lYXJMaW1pdCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5ld0NvbW1lbnRUZXh0Lmxlbmd0aCB9fSAvIHt7IHByb3BzLmlucHV0Q29uZmlnLm1heExlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwicHJvcHMuaW5wdXRDb25maWc/LnN1Ym1pdENvbG9yIHx8IHByb3BzLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXRDb21tZW50KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2VuZC1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFN1Ym1pdExhYmVsKCkgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKHByb3BzLmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3RhdGVcIj5cbiAgICAgICAgICBAZm9yIChpIG9mIGdldFNrZWxldG9uQXJyYXkoKTsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNvbW1lbnRcIj5cbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbiBbcHJvcHNdPVwieyB0eXBlOiAnYXZhdGFyJywgd2lkdGg6ICczNnB4JywgaGVpZ2h0OiAnMzZweCcgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24gW3Byb3BzXT1cInsgdHlwZTogJ3RleHQnLCB3aWR0aDogJzEyMHB4JywgaGVpZ2h0OiAnMTRweCcgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24gW3Byb3BzXT1cInsgdHlwZTogJ3BhcmFncmFwaCcsIGxpbmVzOiAyIH1cIj48L3ZhbC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAocHJvcHMuY29tbWVudHMgJiYgcHJvcHMuY29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudHMtbGlzdFwiIFtjbGFzcy53aXRoLWRpdmlkZXJzXT1cInByb3BzLnNob3dEaXZpZGVyc1wiPlxuICAgICAgICAgIEBmb3IgKGNvbW1lbnQgb2YgcHJvcHMuY29tbWVudHM7IHRyYWNrIGNvbW1lbnQudG9rZW4pIHtcbiAgICAgICAgICAgIDx2YWwtY29tbWVudFxuICAgICAgICAgICAgICBbcHJvcHNdPVwiY29tbWVudFwiXG4gICAgICAgICAgICAgIChhdXRob3JDbGljayk9XCJhdXRob3JDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAocmVhY3Rpb25DbGljayk9XCJyZWFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkNvbW1lbnRBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm1lbnVJdGVtQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlQ2xpY2spPVwiY29tbWVudExvYWRNb3JlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2xsYXBzZVRvZ2dsZSk9XCJjb2xsYXBzZVRvZ2dsZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgPjwvdmFsLWNvbW1lbnQ+XG5cbiAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd0RpdmlkZXJzICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChwcm9wcy5oYXNNb3JlICYmIHByb3BzLnBhZ2luYXRpb25Nb2RlICE9PSAnaW5maW5pdGUnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZC1tb3JlLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5sb2FkaW5nTW9yZSkge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiBbY29sb3JdPVwicHJvcHMuY29sb3IgfHwgJ3ByaW1hcnknXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJwcm9wcy5jb2xvciB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTG9hZE1vcmUoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZGlzcGxheUxvYWRNb3JlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChwcm9wcy5wYWdpbmF0aW9uTW9kZSA9PT0gJ2luZmluaXRlJykge1xuICAgICAgICAgIDxpb24taW5maW5pdGUtc2Nyb2xsXG4gICAgICAgICAgICBbdGhyZXNob2xkXT1cInByb3BzLmluZmluaXRlU2Nyb2xsVGhyZXNob2xkIHx8ICcxMDBweCdcIlxuICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInByb3BzLmluZmluaXRlU2Nyb2xsUG9zaXRpb24gfHwgJ2JvdHRvbSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwcm9wcy5oYXNNb3JlXCJcbiAgICAgICAgICAgIChpb25JbmZpbml0ZSk9XCJvbkluZmluaXRlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24taW5maW5pdGUtc2Nyb2xsLWNvbnRlbnRcbiAgICAgICAgICAgICAgW2xvYWRpbmdTcGlubmVyXT1cIidjcmVzY2VudCdcIlxuICAgICAgICAgICAgICBbbG9hZGluZ1RleHRdPVwiZGlzcGxheUxvYWRNb3JlTGFiZWxcIlxuICAgICAgICAgICAgPjwvaW9uLWluZmluaXRlLXNjcm9sbC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWluZmluaXRlLXNjcm9sbD5cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPlxuICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgW25hbWVdPVwicHJvcHMuZW1wdHlTdGF0ZT8uaWNvbiB8fCAnY2hhdGJ1YmJsZS1lbGxpcHNlcy1vdXRsaW5lJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImVtcHR5LWljb25cIlxuICAgICAgICAgID48L2lvbi1pY29uPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImVtcHR5LXRpdGxlXCI+e3sgZ2V0RW1wdHlUaXRsZSgpIH19PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5LW1lc3NhZ2VcIj57eyBnZXRFbXB0eU1lc3NhZ2UoKSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWNvbW1lbnQtc2VjdGlvblxuICpcbiAqIEFuIG9yZ2FuaXNtIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgY29tcGxldGUgY29tbWVudCBzZWN0aW9uIHdpdGg6XG4gKiAtIEhlYWRlciB3aXRoIHRpdGxlIGFuZCBjb3VudFxuICogLSBTb3J0L2ZpbHRlciBvcHRpb25zXG4gKiAtIE5ldyBjb21tZW50IGlucHV0XG4gKiAtIENvbW1lbnRzIGxpc3Qgd2l0aCB2YWwtY29tbWVudFxuICogLSBMb2FkIG1vcmUgcGFnaW5hdGlvblxuICogLSBFbXB0eSBzdGF0ZVxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiA8dmFsLWNvbW1lbnQtc2VjdGlvbiBbcHJvcHNdPVwie1xuICogICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAqICAgY291bnQ6IDQyLFxuICogICBjb21tZW50czogY29tbWVudHNBcnJheSxcbiAqICAgc2hvd0lucHV0OiB0cnVlXG4gKiB9XCI+PC92YWwtY29tbWVudC1zZWN0aW9uPlxuICpcbiAqIEBleGFtcGxlIFdpdGggc29ydGluZ1xuICogPHZhbC1jb21tZW50LXNlY3Rpb24gW3Byb3BzXT1cIntcbiAqICAgdGl0bGU6ICdSZXZpZXdzJyxcbiAqICAgY291bnQ6IDEyOCxcbiAqICAgY29tbWVudHM6IHJldmlld3MsXG4gKiAgIHNvcnRPcHRpb25zOiBbXG4gKiAgICAgeyB0b2tlbjogJ25ld2VzdCcsIGxhYmVsOiAnTmV3ZXN0IGZpcnN0JyB9LFxuICogICAgIHsgdG9rZW46ICdvbGRlc3QnLCBsYWJlbDogJ09sZGVzdCBmaXJzdCcgfSxcbiAqICAgICB7IHRva2VuOiAncG9wdWxhcicsIGxhYmVsOiAnTW9zdCBwb3B1bGFyJyB9XG4gKiAgIF0sXG4gKiAgIHNlbGVjdGVkU29ydDogJ25ld2VzdCdcbiAqIH1cIiAoc29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPjwvdmFsLWNvbW1lbnQtc2VjdGlvbj5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IENvbW1lbnRTZWN0aW9uTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgc2VjdGlvblxuICogQG91dHB1dCBzb3J0Q2hhbmdlIC0gU29ydCBvcHRpb24gY2hhbmdlZFxuICogQG91dHB1dCBjb21tZW50U3VibWl0IC0gTmV3IGNvbW1lbnQgc3VibWl0dGVkXG4gKiBAb3V0cHV0IGxvYWRNb3JlIC0gTG9hZCBtb3JlIGNsaWNrZWRcbiAqIEBvdXRwdXQgYXV0aG9yQ2xpY2sgLSBDb21tZW50IGF1dGhvciBjbGlja2VkIChidWJibGVkIGZyb20gdmFsLWNvbW1lbnQpXG4gKiBAb3V0cHV0IHJlYWN0aW9uQ2xpY2sgLSBSZWFjdGlvbiBjbGlja2VkIChidWJibGVkKVxuICogQG91dHB1dCBhY3Rpb25DbGljayAtIEFjdGlvbiBjbGlja2VkIChidWJibGVkKVxuICogQG91dHB1dCBtZW51SXRlbUNsaWNrIC0gTWVudSBpdGVtIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGNvbW1lbnRMb2FkTW9yZSAtIExvYWQgbW9yZSByZXBsaWVzIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGNvbGxhcHNlVG9nZ2xlIC0gQ29tbWVudCBjb2xsYXBzZSB0b2dnbGVkIChidWJibGVkKVxuICovXG5leHBvcnQgY2xhc3MgQ29tbWVudFNlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogQ29tbWVudFNlY3Rpb25NZXRhZGF0YTtcblxuICAvLyBTZWN0aW9uIGV2ZW50c1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudFNvcnRDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNvbW1lbnRTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRTdWJtaXRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50U2VjdGlvbkxvYWRNb3JlRXZlbnQ+KCk7XG5cbiAgLy8gQnViYmxlZCBldmVudHMgZnJvbSB2YWwtY29tbWVudFxuICBAT3V0cHV0KCkgYXV0aG9yQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRBdXRob3JDbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudFJlYWN0aW9uQ2xpY2tFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50QWN0aW9uQ2xpY2tFdmVudD4oKTtcbiAgQE91dHB1dCgpIG1lbnVJdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRNZW51SXRlbUNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb21tZW50TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRMb2FkTW9yZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY29sbGFwc2VUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdG9rZW46IHN0cmluZzsgY29sbGFwc2VkOiBib29sZWFuIH0+KCk7XG5cbiAgLy8gUmVwbHkgc3RhdGVcbiAgQE91dHB1dCgpIHJlcGx5U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29tbWVudFRva2VuOiBzdHJpbmcgfT4oKTtcblxuICBuZXdDb21tZW50VGV4dCA9ICcnO1xuICByZXBseWluZ1RvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBkaXNwbGF5VGl0bGUgPSAnJztcbiAgZGlzcGxheUxvYWRNb3JlTGFiZWwgPSAnJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlUZXh0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5VGV4dHMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5VGl0bGUgPSB0aGlzLnByb3BzLnRpdGxlIHx8ICdDb21lbnRhcmlvcyc7XG4gICAgdGhpcy5kaXNwbGF5TG9hZE1vcmVMYWJlbCA9IHRoaXMucHJvcHMubG9hZE1vcmVMYWJlbCB8fCAnQ2FyZ2FyIG3DoXMgY29tZW50YXJpb3MnO1xuICB9XG5cbiAgZm9ybWF0Q291bnQoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGNvdW50ID49IDEwMDAwMDApIHtcbiAgICAgIHJldHVybiAoY291bnQgLyAxMDAwMDAwKS50b0ZpeGVkKDEpLnJlcGxhY2UoL1xcLjAkLywgJycpICsgJ00nO1xuICAgIH1cbiAgICBpZiAoY291bnQgPj0gMTAwMCkge1xuICAgICAgcmV0dXJuIChjb3VudCAvIDEwMDApLnRvRml4ZWQoMSkucmVwbGFjZSgvXFwuMCQvLCAnJykgKyAnSyc7XG4gICAgfVxuICAgIHJldHVybiBjb3VudC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0U29ydE9wdGlvbkxhYmVsKG9wdGlvbjogQ29tbWVudFNvcnRPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWw7XG4gIH1cblxuICBnZXRJbnB1dFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5wdXRDb25maWc/LnBsYWNlaG9sZGVyIHx8ICdFc2NyaWJlIHVuIGNvbWVudGFyaW8uLi4nO1xuICB9XG5cbiAgZ2V0U3VibWl0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dENvbmZpZz8uc3VibWl0TGFiZWwgfHwgJ1B1YmxpY2FyJztcbiAgfVxuXG4gIGdldEVtcHR5VGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbXB0eVN0YXRlPy50aXRsZSB8fCAnU2luIGNvbWVudGFyaW9zIGHDum4nO1xuICB9XG5cbiAgZ2V0RW1wdHlNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZW1wdHlTdGF0ZT8ubWVzc2FnZSB8fCAnwqFTw6kgZWwgcHJpbWVybyBlbiBjb21wYXJ0aXIgdHUgb3BpbmnDs24hJztcbiAgfVxuXG4gIGdldFNrZWxldG9uQXJyYXkoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5wcm9wcy5za2VsZXRvbkNvdW50IHx8IDM7XG4gICAgcmV0dXJuIEFycmF5KGNvdW50KS5maWxsKDApLm1hcCgoXywgaSkgPT4gaSk7XG4gIH1cblxuICBjYW5TdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWluTGVuZ3RoID0gdGhpcy5wcm9wcy5pbnB1dENvbmZpZz8ubWluTGVuZ3RoIHx8IDE7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubmV3Q29tbWVudFRleHQudHJpbSgpLmxlbmd0aCA+PSBtaW5MZW5ndGggJiZcbiAgICAgICF0aGlzLnByb3BzLmxvYWRpbmcgJiZcbiAgICAgICF0aGlzLnByb3BzLmlucHV0Q29uZmlnPy5kaXNhYmxlZFxuICAgICk7XG4gIH1cblxuICBpc05lYXJMaW1pdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLnByb3BzLmlucHV0Q29uZmlnPy5tYXhMZW5ndGggfHwgMjAwMDtcbiAgICByZXR1cm4gdGhpcy5uZXdDb21tZW50VGV4dC5sZW5ndGggPiBtYXhMZW5ndGggKiAwLjk7XG4gIH1cblxuICBvblNvcnRDaGFuZ2UoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUb2tlbiA9IGV2ZW50LmRldGFpbC52YWx1ZTtcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLnNvcnRPcHRpb25zPy5maW5kKChvKSA9PiBvLnRva2VuID09PSBzZWxlY3RlZFRva2VuKTtcblxuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHtcbiAgICAgICAgb3B0aW9uLFxuICAgICAgICBwcmV2aW91c1NvcnQ6IHRoaXMucHJvcHMuc2VsZWN0ZWRTb3J0LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TdWJtaXRDb21tZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TdWJtaXQoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb21tZW50U3VibWl0LmVtaXQoe1xuICAgICAgY29udGVudDogdGhpcy5uZXdDb21tZW50VGV4dC50cmltKCksXG4gICAgICBwYXJlbnRUb2tlbjogdGhpcy5yZXBseWluZ1RvIHx8IHVuZGVmaW5lZCxcbiAgICAgIHNlY3Rpb25Ub2tlbjogdGhpcy5wcm9wcy50b2tlbixcbiAgICB9KTtcblxuICAgIHRoaXMubmV3Q29tbWVudFRleHQgPSAnJztcbiAgICB0aGlzLnJlcGx5aW5nVG8gPSBudWxsO1xuICB9XG5cbiAgb25Db21tZW50QWN0aW9uKGV2ZW50OiBDb21tZW50QWN0aW9uQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIGl0J3MgYSByZXBseSBhY3Rpb25cbiAgICBpZiAoZXZlbnQuYWN0aW9uLnRva2VuID09PSAncmVwbHknKSB7XG4gICAgICB0aGlzLnJlcGx5aW5nVG8gPSBldmVudC5jb21tZW50VG9rZW47XG4gICAgICB0aGlzLnJlcGx5U3RhcnQuZW1pdCh7IGNvbW1lbnRUb2tlbjogZXZlbnQuY29tbWVudFRva2VuIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdChldmVudCk7XG4gIH1cblxuICBvbkxvYWRNb3JlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmUuZW1pdCh7XG4gICAgICBzZWN0aW9uVG9rZW46IHRoaXMucHJvcHMudG9rZW4sXG4gICAgICBjdXJyZW50Q291bnQ6IHRoaXMucHJvcHMuY29tbWVudHM/Lmxlbmd0aCB8fCAwLFxuICAgIH0pO1xuICB9XG5cbiAgb25JbmZpbml0ZVNjcm9sbChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRNb3JlLmVtaXQoe1xuICAgICAgc2VjdGlvblRva2VuOiB0aGlzLnByb3BzLnRva2VuLFxuICAgICAgY3VycmVudENvdW50OiB0aGlzLnByb3BzLmNvbW1lbnRzPy5sZW5ndGggfHwgMCxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IHNob3VsZCBjYWxsIGNvbXBsZXRlSW5maW5pdGVTY3JvbGwoKSB3aGVuIGRvbmUgbG9hZGluZ1xuICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBjb21wbGV0ZSB0aGUgaW5maW5pdGUgc2Nyb2xsXG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbEV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICAvLyBDYWxsIHRoaXMgbWV0aG9kIGZyb20gcGFyZW50IGFmdGVyIGxvYWRpbmcgbW9yZSBjb21tZW50c1xuICBjb21wbGV0ZUluZmluaXRlU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsRXZlbnQpIHtcbiAgICAgICh0aGlzLmluZmluaXRlU2Nyb2xsRXZlbnQudGFyZ2V0IGFzIEhUTUxJb25JbmZpbml0ZVNjcm9sbEVsZW1lbnQpLmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsRXZlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5maW5pdGVTY3JvbGxFdmVudDogQ3VzdG9tRXZlbnQgfCBudWxsID0gbnVsbDtcblxuICAvLyBNZXRob2QgdG8gcHJvZ3JhbW1hdGljYWxseSBzdGFydCBhIHJlcGx5XG4gIHN0YXJ0UmVwbHkoY29tbWVudFRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlcGx5aW5nVG8gPSBjb21tZW50VG9rZW47XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2FuY2VsIHJlcGx5XG4gIGNhbmNlbFJlcGx5KCk6IHZvaWQge1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IG51bGw7XG4gIH1cbn1cbiJdfQ==
537
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvY29tbWVudC1zZWN0aW9uL2NvbW1lbnQtc2VjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsV0FBVyxFQUNYLHlCQUF5QixFQUN6QixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQWdCNUUsUUFBUSxDQUFDO0lBQ1Asa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixXQUFXO0lBQ1gseUJBQXlCO0lBQ3pCLG1CQUFtQjtDQUNwQixDQUFD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UyxvUEFDVCxRQUFRLGlGQUNSLFdBQVcsaWFBQ1gsT0FBTywwTkFDUCxTQUFTLGtWQUNULGVBQWUsNkZBQ2YsVUFBVSx5R0FDVixpQkFBaUIsK0dBQ2pCLHdCQUF3QixtSEFDeEIsZ0JBQWdCLHlMQUNoQixlQUFlLGdHQUNmLGlCQUFpQjs7NEZBc01SLHVCQUF1QjtrQkF4Tm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFFBQVE7d0JBQ1IsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsaUJBQWlCO3FCQUNsQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzSlQ7OEJBaURRLEtBQUs7c0JBQWIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHtcbiAgSW9uSWNvbixcbiAgSW9uQnV0dG9uLFxuICBJb25CYWRnZSxcbiAgSW9uVGV4dGFyZWEsXG4gIElvbkl0ZW0sXG4gIElvblNlbGVjdCxcbiAgSW9uU2VsZWN0T3B0aW9uLFxuICBJb25TcGlubmVyLFxuICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgSW9uSW5maW5pdGVTY3JvbGxDb250ZW50LFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgY2hhdGJ1YmJsZXNPdXRsaW5lLFxuICBmaWx0ZXJPdXRsaW5lLFxuICBzZW5kT3V0bGluZSxcbiAgY2hhdGJ1YmJsZUVsbGlwc2VzT3V0bGluZSxcbiAgc3dhcFZlcnRpY2FsT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBDb21tZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2tlbGV0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9za2VsZXRvbi9za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29tbWVudFNlY3Rpb25NZXRhZGF0YSxcbiAgQ29tbWVudFNvcnRPcHRpb24sXG4gIENvbW1lbnRTb3J0Q2hhbmdlRXZlbnQsXG4gIENvbW1lbnRTdWJtaXRFdmVudCxcbiAgQ29tbWVudFNlY3Rpb25Mb2FkTW9yZUV2ZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIENvbW1lbnRBdXRob3JDbGlja0V2ZW50LFxuICBDb21tZW50UmVhY3Rpb25DbGlja0V2ZW50LFxuICBDb21tZW50QWN0aW9uQ2xpY2tFdmVudCxcbiAgQ29tbWVudE1lbnVJdGVtQ2xpY2tFdmVudCxcbiAgQ29tbWVudExvYWRNb3JlRXZlbnQsXG59IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50L3R5cGVzJztcblxuYWRkSWNvbnMoe1xuICBjaGF0YnViYmxlc091dGxpbmUsXG4gIGZpbHRlck91dGxpbmUsXG4gIHNlbmRPdXRsaW5lLFxuICBjaGF0YnViYmxlRWxsaXBzZXNPdXRsaW5lLFxuICBzd2FwVmVydGljYWxPdXRsaW5lLFxufSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jb21tZW50LXNlY3Rpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElvbkljb24sXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkJhZGdlLFxuICAgIElvblRleHRhcmVhLFxuICAgIElvbkl0ZW0sXG4gICAgSW9uU2VsZWN0LFxuICAgIElvblNlbGVjdE9wdGlvbixcbiAgICBJb25TcGlubmVyLFxuICAgIElvbkluZmluaXRlU2Nyb2xsLFxuICAgIElvbkluZmluaXRlU2Nyb2xsQ29udGVudCxcbiAgICBDb21tZW50Q29tcG9uZW50LFxuICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICBTa2VsZXRvbkNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1zZWN0aW9uXCIgW2NsYXNzLmxvYWRpbmddPVwicHJvcHMubG9hZGluZ1wiPlxuICAgICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hhdGJ1YmJsZXMtb3V0bGluZVwiIGNsYXNzPVwidGl0bGUtaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGgzIGNsYXNzPVwidGl0bGVcIj57eyBkaXNwbGF5VGl0bGUgfX08L2gzPlxuICAgICAgICAgIEBpZiAocHJvcHMuc2hvd0NvdW50ICE9PSBmYWxzZSAmJiBwcm9wcy5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICA8aW9uLWJhZGdlIGNvbG9yPVwibWVkaXVtXCIgY2xhc3M9XCJjb3VudC1iYWRnZVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXRDb3VudChwcm9wcy5jb3VudCkgfX1cbiAgICAgICAgICAgIDwvaW9uLWJhZGdlPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChwcm9wcy5zb3J0T3B0aW9ucyAmJiBwcm9wcy5zb3J0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgY2xhc3M9XCJzb3J0LXNlbGVjdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic3dhcC12ZXJ0aWNhbC1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJzb3J0LWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8aW9uLXNlbGVjdFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwcm9wcy5zZWxlY3RlZFNvcnRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcy5zb3J0TGFiZWwgfHwgZ2V0U29ydEJ5TGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgaW50ZXJmYWNlPVwicG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgKGlvbkNoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcHJvcHMuc29ydE9wdGlvbnM7IHRyYWNrIG9wdGlvbi50b2tlbikge1xuICAgICAgICAgICAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udG9rZW5cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0U29ydE9wdGlvbkxhYmVsKG9wdGlvbikgfX1cbiAgICAgICAgICAgICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBOZXcgQ29tbWVudCBJbnB1dCAtLT5cbiAgICAgIEBpZiAocHJvcHMuc2hvd0lucHV0ICE9PSBmYWxzZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibmV3LWNvbW1lbnQtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICBAaWYgKHByb3BzLmlucHV0Q29uZmlnPy5jdXJyZW50VXNlcj8uYXZhdGFyKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWF2YXRhciBbcHJvcHNdPVwicHJvcHMuaW5wdXRDb25maWcuY3VycmVudFVzZXIuYXZhdGFyXCI+PC92YWwtYXZhdGFyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8aW9uLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdDb21tZW50VGV4dFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldElucHV0UGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJwcm9wcy5pbnB1dENvbmZpZz8ubWF4TGVuZ3RoIHx8IDIwMDBcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5pbnB1dENvbmZpZz8uZGlzYWJsZWQgfHwgcHJvcHMubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW2F1dG9Hcm93XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIHJvd3M9XCIyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbW1lbnQtdGV4dGFyZWFcIlxuICAgICAgICAgICAgICA+PC9pb24tdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHByb3BzLmlucHV0Q29uZmlnPy5zaG93Q291bnRlciAmJiBwcm9wcy5pbnB1dENvbmZpZz8ubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoYXItY291bnRlclwiIFtjbGFzcy53YXJuaW5nXT1cImlzTmVhckxpbWl0KClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbmV3Q29tbWVudFRleHQubGVuZ3RoIH19IC8ge3sgcHJvcHMuaW5wdXRDb25maWcubWF4TGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJwcm9wcy5pbnB1dENvbmZpZz8uc3VibWl0Q29sb3IgfHwgcHJvcHMuY29sb3IgfHwgJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdENvbW1lbnQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzZW5kLW91dGxpbmVcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0U3VibWl0TGFiZWwoKSB9fVxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocHJvcHMubG9hZGluZykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zdGF0ZVwiPlxuICAgICAgICAgIEBmb3IgKGkgb2YgZ2V0U2tlbGV0b25BcnJheSgpOyB0cmFjayBpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tY29tbWVudFwiPlxuICAgICAgICAgICAgICA8dmFsLXNrZWxldG9uIFtwcm9wc109XCJ7IHR5cGU6ICdhdmF0YXInLCB3aWR0aDogJzM2cHgnLCBoZWlnaHQ6ICczNnB4JyB9XCI+PC92YWwtc2tlbGV0b24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza2VsZXRvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbiBbcHJvcHNdPVwieyB0eXBlOiAndGV4dCcsIHdpZHRoOiAnMTIwcHgnLCBoZWlnaHQ6ICcxNHB4JyB9XCI+PC92YWwtc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbiBbcHJvcHNdPVwieyB0eXBlOiAncGFyYWdyYXBoJywgbGluZXM6IDIgfVwiPjwvdmFsLXNrZWxldG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChwcm9wcy5jb21tZW50cyAmJiBwcm9wcy5jb21tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50cy1saXN0XCIgW2NsYXNzLndpdGgtZGl2aWRlcnNdPVwicHJvcHMuc2hvd0RpdmlkZXJzXCI+XG4gICAgICAgICAgQGZvciAoY29tbWVudCBvZiBwcm9wcy5jb21tZW50czsgdHJhY2sgY29tbWVudC50b2tlbikge1xuICAgICAgICAgICAgPHZhbC1jb21tZW50XG4gICAgICAgICAgICAgIFtwcm9wc109XCJjb21tZW50XCJcbiAgICAgICAgICAgICAgKGF1dGhvckNsaWNrKT1cImF1dGhvckNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyZWFjdGlvbkNsaWNrKT1cInJlYWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQ29tbWVudEFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwibWVudUl0ZW1DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAobG9hZE1vcmVDbGljayk9XCJjb21tZW50TG9hZE1vcmUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNvbGxhcHNlVG9nZ2xlKT1cImNvbGxhcHNlVG9nZ2xlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC92YWwtY29tbWVudD5cblxuICAgICAgICAgICAgQGlmIChwcm9wcy5zaG93RGl2aWRlcnMgJiYgISRsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHByb3BzLmhhc01vcmUgJiYgcHJvcHMucGFnaW5hdGlvbk1vZGUgIT09ICdpbmZpbml0ZScpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkLW1vcmUtc2VjdGlvblwiPlxuICAgICAgICAgICAgICBAaWYgKHByb3BzLmxvYWRpbmdNb3JlKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIFtjb2xvcl09XCJwcm9wcy5jb2xvciB8fCAncHJpbWFyeSdcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInByb3BzLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Mb2FkTW9yZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TG9hZE1vcmVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHByb3BzLnBhZ2luYXRpb25Nb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGxcbiAgICAgICAgICAgIFt0aHJlc2hvbGRdPVwicHJvcHMuaW5maW5pdGVTY3JvbGxUaHJlc2hvbGQgfHwgJzEwMHB4J1wiXG4gICAgICAgICAgICBbcG9zaXRpb25dPVwicHJvcHMuaW5maW5pdGVTY3JvbGxQb3NpdGlvbiB8fCAnYm90dG9tJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXByb3BzLmhhc01vcmVcIlxuICAgICAgICAgICAgKGlvbkluZmluaXRlKT1cIm9uSW5maW5pdGVTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGwtY29udGVudFxuICAgICAgICAgICAgICBbbG9hZGluZ1NwaW5uZXJdPVwiJ2NyZXNjZW50J1wiXG4gICAgICAgICAgICAgIFtsb2FkaW5nVGV4dF09XCJkaXNwbGF5TG9hZE1vcmVMYWJlbFwiXG4gICAgICAgICAgICA+PC9pb24taW5maW5pdGUtc2Nyb2xsLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24taW5maW5pdGUtc2Nyb2xsPlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgPGlvbi1pY29uXG4gICAgICAgICAgICBbbmFtZV09XCJwcm9wcy5lbXB0eVN0YXRlPy5pY29uIHx8ICdjaGF0YnViYmxlLWVsbGlwc2VzLW91dGxpbmUnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZW1wdHktaWNvblwiXG4gICAgICAgICAgPjwvaW9uLWljb24+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiZW1wdHktdGl0bGVcIj57eyBnZXRFbXB0eVRpdGxlKCkgfX08L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktbWVzc2FnZVwiPnt7IGdldEVtcHR5TWVzc2FnZSgpIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vY29tbWVudC1zZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtY29tbWVudC1zZWN0aW9uXG4gKlxuICogQW4gb3JnYW5pc20gY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgYSBjb21wbGV0ZSBjb21tZW50IHNlY3Rpb24gd2l0aDpcbiAqIC0gSGVhZGVyIHdpdGggdGl0bGUgYW5kIGNvdW50XG4gKiAtIFNvcnQvZmlsdGVyIG9wdGlvbnNcbiAqIC0gTmV3IGNvbW1lbnQgaW5wdXRcbiAqIC0gQ29tbWVudHMgbGlzdCB3aXRoIHZhbC1jb21tZW50XG4gKiAtIExvYWQgbW9yZSBwYWdpbmF0aW9uXG4gKiAtIEVtcHR5IHN0YXRlXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIDx2YWwtY29tbWVudC1zZWN0aW9uIFtwcm9wc109XCJ7XG4gKiAgIHRpdGxlOiAnQ29tbWVudHMnLFxuICogICBjb3VudDogNDIsXG4gKiAgIGNvbW1lbnRzOiBjb21tZW50c0FycmF5LFxuICogICBzaG93SW5wdXQ6IHRydWVcbiAqIH1cIj48L3ZhbC1jb21tZW50LXNlY3Rpb24+XG4gKlxuICogQGV4YW1wbGUgV2l0aCBzb3J0aW5nXG4gKiA8dmFsLWNvbW1lbnQtc2VjdGlvbiBbcHJvcHNdPVwie1xuICogICB0aXRsZTogJ1Jldmlld3MnLFxuICogICBjb3VudDogMTI4LFxuICogICBjb21tZW50czogcmV2aWV3cyxcbiAqICAgc29ydE9wdGlvbnM6IFtcbiAqICAgICB7IHRva2VuOiAnbmV3ZXN0JywgbGFiZWw6ICdOZXdlc3QgZmlyc3QnIH0sXG4gKiAgICAgeyB0b2tlbjogJ29sZGVzdCcsIGxhYmVsOiAnT2xkZXN0IGZpcnN0JyB9LFxuICogICAgIHsgdG9rZW46ICdwb3B1bGFyJywgbGFiZWw6ICdNb3N0IHBvcHVsYXInIH1cbiAqICAgXSxcbiAqICAgc2VsZWN0ZWRTb3J0OiAnbmV3ZXN0J1xuICogfVwiIChzb3J0Q2hhbmdlKT1cIm9uU29ydCgkZXZlbnQpXCI+PC92YWwtY29tbWVudC1zZWN0aW9uPlxuICpcbiAqIEBpbnB1dCBwcm9wczogQ29tbWVudFNlY3Rpb25NZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWN0aW9uXG4gKiBAb3V0cHV0IHNvcnRDaGFuZ2UgLSBTb3J0IG9wdGlvbiBjaGFuZ2VkXG4gKiBAb3V0cHV0IGNvbW1lbnRTdWJtaXQgLSBOZXcgY29tbWVudCBzdWJtaXR0ZWRcbiAqIEBvdXRwdXQgbG9hZE1vcmUgLSBMb2FkIG1vcmUgY2xpY2tlZFxuICogQG91dHB1dCBhdXRob3JDbGljayAtIENvbW1lbnQgYXV0aG9yIGNsaWNrZWQgKGJ1YmJsZWQgZnJvbSB2YWwtY29tbWVudClcbiAqIEBvdXRwdXQgcmVhY3Rpb25DbGljayAtIFJlYWN0aW9uIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IGFjdGlvbkNsaWNrIC0gQWN0aW9uIGNsaWNrZWQgKGJ1YmJsZWQpXG4gKiBAb3V0cHV0IG1lbnVJdGVtQ2xpY2sgLSBNZW51IGl0ZW0gY2xpY2tlZCAoYnViYmxlZClcbiAqIEBvdXRwdXQgY29tbWVudExvYWRNb3JlIC0gTG9hZCBtb3JlIHJlcGxpZXMgY2xpY2tlZCAoYnViYmxlZClcbiAqIEBvdXRwdXQgY29sbGFwc2VUb2dnbGUgLSBDb21tZW50IGNvbGxhcHNlIHRvZ2dsZWQgKGJ1YmJsZWQpXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21tZW50U2VjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgQElucHV0KCkgcHJvcHM6IENvbW1lbnRTZWN0aW9uTWV0YWRhdGE7XG5cbiAgLy8gU2VjdGlvbiBldmVudHNcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRTb3J0Q2hhbmdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjb21tZW50U3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50U3VibWl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudFNlY3Rpb25Mb2FkTW9yZUV2ZW50PigpO1xuXG4gIC8vIEJ1YmJsZWQgZXZlbnRzIGZyb20gdmFsLWNvbW1lbnRcbiAgQE91dHB1dCgpIGF1dGhvckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50QXV0aG9yQ2xpY2tFdmVudD4oKTtcbiAgQE91dHB1dCgpIHJlYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnRSZWFjdGlvbkNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudEFjdGlvbkNsaWNrRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBtZW51SXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50TWVudUl0ZW1DbGlja0V2ZW50PigpO1xuICBAT3V0cHV0KCkgY29tbWVudExvYWRNb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50TG9hZE1vcmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNvbGxhcHNlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRva2VuOiBzdHJpbmc7IGNvbGxhcHNlZDogYm9vbGVhbiB9PigpO1xuXG4gIC8vIFJlcGx5IHN0YXRlXG4gIEBPdXRwdXQoKSByZXBseVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbW1lbnRUb2tlbjogc3RyaW5nIH0+KCk7XG5cbiAgbmV3Q29tbWVudFRleHQgPSAnJztcbiAgcmVwbHlpbmdUbzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgZGlzcGxheVRpdGxlID0gJyc7XG4gIGRpc3BsYXlMb2FkTW9yZUxhYmVsID0gJyc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGlzcGxheVRleHRzKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheVRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSB8fCB0aGlzLmkxOG4udCgnY29tbWVudHMnKTtcbiAgICB0aGlzLmRpc3BsYXlMb2FkTW9yZUxhYmVsID0gdGhpcy5wcm9wcy5sb2FkTW9yZUxhYmVsIHx8IHRoaXMuaTE4bi50KCdsb2FkTW9yZUNvbW1lbnRzJyk7XG4gIH1cblxuICBnZXRTb3J0QnlMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnc29ydEJ5Jyk7XG4gIH1cblxuICBmb3JtYXRDb3VudChjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoY291bnQgPj0gMTAwMDAwMCkge1xuICAgICAgcmV0dXJuIChjb3VudCAvIDEwMDAwMDApLnRvRml4ZWQoMSkucmVwbGFjZSgvXFwuMCQvLCAnJykgKyAnTSc7XG4gICAgfVxuICAgIGlmIChjb3VudCA+PSAxMDAwKSB7XG4gICAgICByZXR1cm4gKGNvdW50IC8gMTAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdLJztcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50LnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRTb3J0T3B0aW9uTGFiZWwob3B0aW9uOiBDb21tZW50U29ydE9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbDtcbiAgfVxuXG4gIGdldElucHV0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dENvbmZpZz8ucGxhY2Vob2xkZXIgfHwgdGhpcy5pMThuLnQoJ3dyaXRlQ29tbWVudCcpO1xuICB9XG5cbiAgZ2V0U3VibWl0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbnB1dENvbmZpZz8uc3VibWl0TGFiZWwgfHwgdGhpcy5pMThuLnQoJ3B1Ymxpc2gnKTtcbiAgfVxuXG4gIGdldEVtcHR5VGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbXB0eVN0YXRlPy50aXRsZSB8fCB0aGlzLmkxOG4udCgnbm9Db21tZW50c1lldCcpO1xuICB9XG5cbiAgZ2V0RW1wdHlNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZW1wdHlTdGF0ZT8ubWVzc2FnZSB8fCB0aGlzLmkxOG4udCgnYmVGaXJzdFRvQ29tbWVudCcpO1xuICB9XG5cbiAgZ2V0U2tlbGV0b25BcnJheSgpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnByb3BzLnNrZWxldG9uQ291bnQgfHwgMztcbiAgICByZXR1cm4gQXJyYXkoY291bnQpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpKTtcbiAgfVxuXG4gIGNhblN1Ym1pdCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBtaW5MZW5ndGggPSB0aGlzLnByb3BzLmlucHV0Q29uZmlnPy5taW5MZW5ndGggfHwgMTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5uZXdDb21tZW50VGV4dC50cmltKCkubGVuZ3RoID49IG1pbkxlbmd0aCAmJlxuICAgICAgIXRoaXMucHJvcHMubG9hZGluZyAmJlxuICAgICAgIXRoaXMucHJvcHMuaW5wdXRDb25maWc/LmRpc2FibGVkXG4gICAgKTtcbiAgfVxuXG4gIGlzTmVhckxpbWl0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1heExlbmd0aCA9IHRoaXMucHJvcHMuaW5wdXRDb25maWc/Lm1heExlbmd0aCB8fCAyMDAwO1xuICAgIHJldHVybiB0aGlzLm5ld0NvbW1lbnRUZXh0Lmxlbmd0aCA+IG1heExlbmd0aCAqIDAuOTtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFRva2VuID0gZXZlbnQuZGV0YWlsLnZhbHVlO1xuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucHJvcHMuc29ydE9wdGlvbnM/LmZpbmQoKG8pID0+IG8udG9rZW4gPT09IHNlbGVjdGVkVG9rZW4pO1xuXG4gICAgaWYgKG9wdGlvbikge1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe1xuICAgICAgICBvcHRpb24sXG4gICAgICAgIHByZXZpb3VzU29ydDogdGhpcy5wcm9wcy5zZWxlY3RlZFNvcnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblN1Ym1pdENvbW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdCgpKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbW1lbnRTdWJtaXQuZW1pdCh7XG4gICAgICBjb250ZW50OiB0aGlzLm5ld0NvbW1lbnRUZXh0LnRyaW0oKSxcbiAgICAgIHBhcmVudFRva2VuOiB0aGlzLnJlcGx5aW5nVG8gfHwgdW5kZWZpbmVkLFxuICAgICAgc2VjdGlvblRva2VuOiB0aGlzLnByb3BzLnRva2VuLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uZXdDb21tZW50VGV4dCA9ICcnO1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IG51bGw7XG4gIH1cblxuICBvbkNvbW1lbnRBY3Rpb24oZXZlbnQ6IENvbW1lbnRBY3Rpb25DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHJlcGx5IGFjdGlvblxuICAgIGlmIChldmVudC5hY3Rpb24udG9rZW4gPT09ICdyZXBseScpIHtcbiAgICAgIHRoaXMucmVwbHlpbmdUbyA9IGV2ZW50LmNvbW1lbnRUb2tlbjtcbiAgICAgIHRoaXMucmVwbHlTdGFydC5lbWl0KHsgY29tbWVudFRva2VuOiBldmVudC5jb21tZW50VG9rZW4gfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkTW9yZS5lbWl0KHtcbiAgICAgIHNlY3Rpb25Ub2tlbjogdGhpcy5wcm9wcy50b2tlbixcbiAgICAgIGN1cnJlbnRDb3VudDogdGhpcy5wcm9wcy5jb21tZW50cz8ubGVuZ3RoIHx8IDAsXG4gICAgfSk7XG4gIH1cblxuICBvbkluZmluaXRlU2Nyb2xsKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmUuZW1pdCh7XG4gICAgICBzZWN0aW9uVG9rZW46IHRoaXMucHJvcHMudG9rZW4sXG4gICAgICBjdXJyZW50Q291bnQ6IHRoaXMucHJvcHMuY29tbWVudHM/Lmxlbmd0aCB8fCAwLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHBhcmVudCBjb21wb25lbnQgc2hvdWxkIGNhbGwgY29tcGxldGVJbmZpbml0ZVNjcm9sbCgpIHdoZW4gZG9uZSBsb2FkaW5nXG4gICAgLy8gU3RvcmUgcmVmZXJlbmNlIHRvIGNvbXBsZXRlIHRoZSBpbmZpbml0ZSBzY3JvbGxcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIC8vIENhbGwgdGhpcyBtZXRob2QgZnJvbSBwYXJlbnQgYWZ0ZXIgbG9hZGluZyBtb3JlIGNvbW1lbnRzXG4gIGNvbXBsZXRlSW5maW5pdGVTY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudCkge1xuICAgICAgKHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudC50YXJnZXQgYXMgSFRNTElvbkluZmluaXRlU2Nyb2xsRWxlbWVudCkuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxFdmVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmZpbml0ZVNjcm9sbEV2ZW50OiBDdXN0b21FdmVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8vIE1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IHN0YXJ0IGEgcmVwbHlcbiAgc3RhcnRSZXBseShjb21tZW50VG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVwbHlpbmdUbyA9IGNvbW1lbnRUb2tlbjtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBjYW5jZWwgcmVwbHlcbiAgY2FuY2VsUmVwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBseWluZ1RvID0gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,5 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, signal, computed, ViewChild, inject, ChangeDetectorRef, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
+ import { I18nService } from '../../../services/i18n';
3
4
  import { IonInfiniteScroll, IonInfiniteScrollContent, IonButton, IonSpinner, IonIcon, IonText, IonList, IonItem, } from '@ionic/angular/standalone';
4
5
  import { firstValueFrom, isObservable } from 'rxjs';
5
6
  import { DEFAULT_INFINITE_LIST_METADATA, } from './types';
@@ -49,6 +50,7 @@ export class InfiniteListComponent {
49
50
  constructor() {
50
51
  this.skeletonService = inject(SkeletonService);
51
52
  this.cdr = inject(ChangeDetectorRef);
53
+ this.i18n = inject(I18nService);
52
54
  // === Events ===
53
55
  this.loadMore = new EventEmitter();
54
56
  this.refresh = new EventEmitter();
@@ -74,11 +76,11 @@ export class InfiniteListComponent {
74
76
  this.statusAnnouncement = computed(() => {
75
77
  switch (this.state()) {
76
78
  case 'loading':
77
- return 'Cargando items...';
79
+ return this.i18n.t('loadingItems');
78
80
  case 'error':
79
- return `Error: ${this.error()?.message || 'Ocurrio un error'}`;
81
+ return `${this.i18n.t('error')}: ${this.error()?.message || this.i18n.t('errorOccurred')}`;
80
82
  case 'complete':
81
- return 'Todos los items han sido cargados';
83
+ return this.i18n.t('allItemsLoaded');
82
84
  default:
83
85
  return '';
84
86
  }
@@ -362,11 +364,11 @@ export class InfiniteListComponent {
362
364
  } @else {
363
365
  <ion-icon name="alert-circle-outline" color="danger" size="large"></ion-icon>
364
366
  }
365
- <h3>{{ mergedProps.errorState?.title || 'Error' }}</h3>
366
- <p>{{ mergedProps.errorState?.message || error()?.message || 'Ocurrio un error' }}</p>
367
+ <h3>{{ mergedProps.errorState?.title || i18n.t('error') }}</h3>
368
+ <p>{{ mergedProps.errorState?.message || error()?.message || i18n.t('errorOccurred') }}</p>
367
369
  @if (mergedProps.errorState?.showRetry !== false) {
368
370
  <ion-button fill="outline" (click)="retry()">
369
- {{ mergedProps.errorState?.retryText || 'Reintentar' }}
371
+ {{ mergedProps.errorState?.retryText || i18n.t('retry') }}
370
372
  </ion-button>
371
373
  }
372
374
  }
@@ -407,10 +409,10 @@ export class InfiniteListComponent {
407
409
  @if (state() === 'loading') {
408
410
  <ion-spinner [name]="mergedProps.spinnerType" slot="start"></ion-spinner>
409
411
  }
410
- {{ mergedProps.loadMoreText || 'Cargar mas' }}
412
+ {{ mergedProps.loadMoreText || i18n.t('loadMore') }}
411
413
  </ion-button>
412
414
  } @else {
413
- <ion-text color="medium">{{ mergedProps.noMoreText || 'No hay mas items' }}</ion-text>
415
+ <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
414
416
  }
415
417
  </div>
416
418
  } @else {
@@ -421,7 +423,7 @@ export class InfiniteListComponent {
421
423
  >
422
424
  <ion-infinite-scroll-content
423
425
  [loadingSpinner]="mergedProps.spinnerType"
424
- [loadingText]="state() === 'loading' ? 'Cargando...' : ''"
426
+ [loadingText]="state() === 'loading' ? i18n.t('loading') : ''"
425
427
  ></ion-infinite-scroll-content>
426
428
  </ion-infinite-scroll>
427
429
  }
@@ -430,7 +432,7 @@ export class InfiniteListComponent {
430
432
  <!-- No more items indicator -->
431
433
  @if (!hasMoreBottom() && items().length > 0 && !mergedProps.useLoadMoreButton) {
432
434
  <div class="infinite-list-end">
433
- <ion-text color="medium">{{ mergedProps.noMoreText || 'No hay mas items' }}</ion-text>
435
+ <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
434
436
  </div>
435
437
  }
436
438
  </div>
@@ -520,11 +522,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
520
522
  } @else {
521
523
  <ion-icon name="alert-circle-outline" color="danger" size="large"></ion-icon>
522
524
  }
523
- <h3>{{ mergedProps.errorState?.title || 'Error' }}</h3>
524
- <p>{{ mergedProps.errorState?.message || error()?.message || 'Ocurrio un error' }}</p>
525
+ <h3>{{ mergedProps.errorState?.title || i18n.t('error') }}</h3>
526
+ <p>{{ mergedProps.errorState?.message || error()?.message || i18n.t('errorOccurred') }}</p>
525
527
  @if (mergedProps.errorState?.showRetry !== false) {
526
528
  <ion-button fill="outline" (click)="retry()">
527
- {{ mergedProps.errorState?.retryText || 'Reintentar' }}
529
+ {{ mergedProps.errorState?.retryText || i18n.t('retry') }}
528
530
  </ion-button>
529
531
  }
530
532
  }
@@ -565,10 +567,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
565
567
  @if (state() === 'loading') {
566
568
  <ion-spinner [name]="mergedProps.spinnerType" slot="start"></ion-spinner>
567
569
  }
568
- {{ mergedProps.loadMoreText || 'Cargar mas' }}
570
+ {{ mergedProps.loadMoreText || i18n.t('loadMore') }}
569
571
  </ion-button>
570
572
  } @else {
571
- <ion-text color="medium">{{ mergedProps.noMoreText || 'No hay mas items' }}</ion-text>
573
+ <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
572
574
  }
573
575
  </div>
574
576
  } @else {
@@ -579,7 +581,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
579
581
  >
580
582
  <ion-infinite-scroll-content
581
583
  [loadingSpinner]="mergedProps.spinnerType"
582
- [loadingText]="state() === 'loading' ? 'Cargando...' : ''"
584
+ [loadingText]="state() === 'loading' ? i18n.t('loading') : ''"
583
585
  ></ion-infinite-scroll-content>
584
586
  </ion-infinite-scroll>
585
587
  }
@@ -588,7 +590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
588
590
  <!-- No more items indicator -->
589
591
  @if (!hasMoreBottom() && items().length > 0 && !mergedProps.useLoadMoreButton) {
590
592
  <div class="infinite-list-end">
591
- <ion-text color="medium">{{ mergedProps.noMoreText || 'No hay mas items' }}</ion-text>
593
+ <ion-text color="medium">{{ mergedProps.noMoreText || i18n.t('noMoreItems') }}</ion-text>
592
594
  </div>
593
595
  }
594
596
  </div>
@@ -615,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
615
617
  }], errorOccurred: [{
616
618
  type: Output
617
619
  }] } });
618
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2luZmluaXRlLWxpc3QvaW5maW5pdGUtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUdSLFNBQVMsRUFDVCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFPLEVBQ1AsT0FBTyxFQUNQLE9BQU8sR0FDUixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFNTCw4QkFBOEIsR0FDL0IsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7QUFHOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUEyT0gsTUFBTSxPQUFPLHFCQUFxQjtJQTFPbEM7UUEyT21CLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQU9qRCxpQkFBaUI7UUFDUCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDN0MsWUFBTyxHQUFHLElBQUksWUFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErSVQ7OEJBZ0Y2QixjQUFjO3NCQUEzQyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFHbkIsS0FBSztzQkFBYixLQUFLO2dCQUdJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgSW9uSW5maW5pdGVTY3JvbGxDb250ZW50LFxuICBJb25CdXR0b24sXG4gIElvblNwaW5uZXIsXG4gIElvbkljb24sXG4gIElvblRleHQsXG4gIElvbkxpc3QsXG4gIElvbkl0ZW0sXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgSW5maW5pdGVMaXN0TWV0YWRhdGEsXG4gIEluZmluaXRlTGlzdFN0YXRlLFxuICBMb2FkTW9yZUV2ZW50LFxuICBMb2FkUGFyYW1zLFxuICBMb2FkUmVzdWx0LFxuICBERUZBVUxUX0lORklOSVRFX0xJU1RfTUVUQURBVEEsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUmVmcmVzaEV2ZW50LCBSZWZyZXNoZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9yZWZyZXNoZXIvdHlwZXMnO1xuaW1wb3J0IHsgUmVmcmVzaGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JlZnJlc2hlci9yZWZyZXNoZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNrZWxldG9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NrZWxldG9uL3NrZWxldG9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2tlbGV0b25UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NrZWxldG9uL3R5cGVzJztcblxuLyoqXG4gKiBDb21wb25lbnRlIHdyYXBwZXIgcGFyYSBsaXN0YXMgY29uIGluZmluaXRlIHNjcm9sbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBVc28gYmFzaWNvIGNvbiBkYXRhIHNvdXJjZSAtLT5cbiAqIDx2YWwtaW5maW5pdGUtbGlzdFxuICogICBbcHJvcHNdPVwie1xuICogICAgIGRhdGFTb3VyY2U6IHsgbG9hZEZuOiBsb2FkVXNlcnMsIHRyYWNrQnk6IHRyYWNrQnlVc2VySWQgfSxcbiAqICAgICBpdGVtVGVtcGxhdGU6IHVzZXJUZW1wbGF0ZSxcbiAqICAgICBwYWdlU2l6ZTogMjAsXG4gKiAgICAgdGhyZXNob2xkOiAnMTUwcHgnXG4gKiAgIH1cIlxuICogPjwvdmFsLWluZmluaXRlLWxpc3Q+XG4gKlxuICogPG5nLXRlbXBsYXRlICN1c2VyVGVtcGxhdGUgbGV0LXVzZXIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAqICAgPHZhbC1jYXJkIFtwcm9wc109XCJ7IHRpdGxlOiB1c2VyLm5hbWUsIHN1YnRpdGxlOiB1c2VyLmVtYWlsIH1cIj5cbiAqICAgICA8cD57eyB1c2VyLmJpbyB9fTwvcD5cbiAqICAgPC92YWwtY2FyZD5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gQ29uIHB1bGwtdG8tcmVmcmVzaCB5IGVzdGFkbyB2YWNpbyBwZXJzb25hbGl6YWRvIC0tPlxuICogPHZhbC1pbmZpbml0ZS1saXN0XG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgZGF0YVNvdXJjZTogeyBsb2FkRm46IGxvYWRNZXNzYWdlcyB9LFxuICogICAgIGl0ZW1UZW1wbGF0ZTogbWVzc2FnZVRlbXBsYXRlLFxuICogICAgIGRpcmVjdGlvbjogJ2JvdGgnLFxuICogICAgIGVuYWJsZVJlZnJlc2g6IHRydWUsXG4gKiAgICAgZW1wdHlTdGF0ZToge1xuICogICAgICAgaWNvbjogJ2NoYXRidWJibGVzLW91dGxpbmUnLFxuICogICAgICAgdGl0bGU6ICdTaW4gbWVuc2FqZXMnLFxuICogICAgICAgbWVzc2FnZTogJ0luaWNpYSB1bmEgY29udmVyc2FjaW9uJ1xuICogICAgIH0sXG4gKiAgICAgc2tlbGV0b246IHsgdGVtcGxhdGU6ICdsaXN0JywgY291bnQ6IDUgfVxuICogICB9XCJcbiAqICAgKHJlZnJlc2gpPVwib25SZWZyZXNoKCRldmVudClcIlxuICogPjwvdmFsLWluZmluaXRlLWxpc3Q+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1pbmZpbml0ZS1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgICBJb25JbmZpbml0ZVNjcm9sbENvbnRlbnQsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvblNwaW5uZXIsXG4gICAgSW9uSWNvbixcbiAgICBJb25UZXh0LFxuICAgIElvbkxpc3QsXG4gICAgSW9uSXRlbSxcbiAgICBSZWZyZXNoZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSBQdWxsIHRvIHJlZnJlc2ggd3JhcHBlciAtLT5cbiAgICBAaWYgKG1lcmdlZFByb3BzLmVuYWJsZVJlZnJlc2gpIHtcbiAgICAgIDx2YWwtcmVmcmVzaGVyIFtwcm9wc109XCJyZWZyZXNoZXJDb25maWdcIiAocmVmcmVzaCk9XCJvblJlZnJlc2hUcmlnZ2VyZWQoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdmFsLXJlZnJlc2hlcj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0Q29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cblxuICAgIDwhLS0gTWFpbiBsaXN0IGNvbnRlbnQgdGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNsaXN0Q29udGVudD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpbmZpbml0ZS1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzc109XCJtZXJnZWRQcm9wcy5jc3NDbGFzc1wiXG4gICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1lcmdlZFByb3BzLm1heEhlaWdodFwiXG4gICAgICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cIm1lcmdlZFByb3BzLm1heEhlaWdodCA/ICdhdXRvJyA6ICd2aXNpYmxlJ1wiXG4gICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cInN0YXRlKCkgPT09ICdsb2FkaW5nJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibWVyZ2VkUHJvcHMuYXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmlwdGlvbl09XCJtZXJnZWRQcm9wcy5hcmlhRGVzY3JpcHRpb25cIlxuICAgICAgPlxuICAgICAgICA8IS0tIExvYWRpbmcgc3RhdGUgKGluaXRpYWwpIC0tPlxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICdsb2FkaW5nJyAmJiBpdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZpbml0ZS1saXN0LXNrZWxldG9uXCI+XG4gICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLnNrZWxldG9uPy5jdXN0b21UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVyZ2VkUHJvcHMuc2tlbGV0b24uY3VzdG9tVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInNrZWxldG9uQ29tcG9uZW50OyBpbnB1dHM6IHNrZWxldG9uSW5wdXRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEVtcHR5IHN0YXRlIC0tPlxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICdpZGxlJyAmJiBpdGVtcygpLmxlbmd0aCA9PT0gMCAmJiAhaXNJbml0aWFsTG9hZCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZmluaXRlLWxpc3QtZW1wdHlcIj5cbiAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZW1wdHlTdGF0ZT8udGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lcmdlZFByb3BzLmVtcHR5U3RhdGUudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLmVtcHR5U3RhdGU/Lmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwibWVyZ2VkUHJvcHMuZW1wdHlTdGF0ZS5pY29uXCIgc2l6ZT1cImxhcmdlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLmVtcHR5U3RhdGU/LnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgzPnt7IG1lcmdlZFByb3BzLmVtcHR5U3RhdGUudGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZW1wdHlTdGF0ZT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIDxwPnt7IG1lcmdlZFByb3BzLmVtcHR5U3RhdGUubWVzc2FnZSB9fTwvcD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBFcnJvciBzdGF0ZSAtLT5cbiAgICAgICAgQGlmIChzdGF0ZSgpID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZmluaXRlLWxpc3QtZXJyb3JcIj5cbiAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZT8udGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZS50ZW1wbGF0ZTsgY29udGV4dDogeyBlcnJvcjogZXJyb3IoKSwgcmV0cnk6IHJldHJ5LmJpbmQodGhpcykgfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLmVycm9yU3RhdGU/Lmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwibWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZS5pY29uXCIgY29sb3I9XCJkYW5nZXJcIiBzaXplPVwibGFyZ2VcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFsZXJ0LWNpcmNsZS1vdXRsaW5lXCIgY29sb3I9XCJkYW5nZXJcIiBzaXplPVwibGFyZ2VcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxoMz57eyBtZXJnZWRQcm9wcy5lcnJvclN0YXRlPy50aXRsZSB8fCAnRXJyb3InIH19PC9oMz5cbiAgICAgICAgICAgICAgPHA+e3sgbWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZT8ubWVzc2FnZSB8fCBlcnJvcigpPy5tZXNzYWdlIHx8ICdPY3VycmlvIHVuIGVycm9yJyB9fTwvcD5cbiAgICAgICAgICAgICAgQGlmIChtZXJnZWRQcm9wcy5lcnJvclN0YXRlPy5zaG93UmV0cnkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiAoY2xpY2spPVwicmV0cnkoKVwiPlxuICAgICAgICAgICAgICAgICAge3sgbWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZT8ucmV0cnlUZXh0IHx8ICdSZWludGVudGFyJyB9fVxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBJdGVtcyBsaXN0IC0tPlxuICAgICAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZpbml0ZS1saXN0LWl0ZW1zXCIgW2NsYXNzLndpdGgtZGl2aWRlcnNdPVwibWVyZ2VkUHJvcHMuc2hvd0RpdmlkZXJzXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIGl0ZW0pOyBsZXQgaSA9ICRpbmRleDsgbGV0IGZpcnN0ID0gJGZpcnN0OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgIDxhcnRpY2xlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZpbml0ZS1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJtZXJnZWRQcm9wcy5kYXRhU291cmNlLnRvdGFsQ291bnQgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wb3NpbnNldF09XCJpICsgMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBtZXJnZWRQcm9wcy5pdGVtVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBpbmRleDogaSwgZmlyc3Q6IGZpcnN0LCBsYXN0OiBsYXN0LCBjb3VudDogaXRlbXMoKS5sZW5ndGggfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gQm90dG9tIGluZmluaXRlIHNjcm9sbCAtLT5cbiAgICAgICAgQGlmIChzaG91bGRTaG93Qm90dG9tU2Nyb2xsKCkpIHtcbiAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLnVzZUxvYWRNb3JlQnV0dG9uKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5maW5pdGUtbGlzdC1sb2FkLW1vcmVcIj5cbiAgICAgICAgICAgICAgQGlmIChoYXNNb3JlQm90dG9tKCkpIHtcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIm1lcmdlZFByb3BzLmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdGF0ZSgpID09PSAnbG9hZGluZydcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRCb3R0b20oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChzdGF0ZSgpID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIFtuYW1lXT1cIm1lcmdlZFByb3BzLnNwaW5uZXJUeXBlXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHt7IG1lcmdlZFByb3BzLmxvYWRNb3JlVGV4dCB8fCAnQ2FyZ2FyIG1hcycgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPnt7IG1lcmdlZFByb3BzLm5vTW9yZVRleHQgfHwgJ05vIGhheSBtYXMgaXRlbXMnIH19PC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW9uLWluZmluaXRlLXNjcm9sbFxuICAgICAgICAgICAgICBbdGhyZXNob2xkXT1cIm1lcmdlZFByb3BzLnRocmVzaG9sZFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzTW9yZUJvdHRvbSgpXCJcbiAgICAgICAgICAgICAgKGlvbkluZmluaXRlKT1cIm9uSW5maW5pdGVTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taW5maW5pdGUtc2Nyb2xsLWNvbnRlbnRcbiAgICAgICAgICAgICAgICBbbG9hZGluZ1NwaW5uZXJdPVwibWVyZ2VkUHJvcHMuc3Bpbm5lclR5cGVcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nVGV4dF09XCJzdGF0ZSgpID09PSAnbG9hZGluZycgPyAnQ2FyZ2FuZG8uLi4nIDogJydcIlxuICAgICAgICAgICAgICA+PC9pb24taW5maW5pdGUtc2Nyb2xsLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2lvbi1pbmZpbml0ZS1zY3JvbGw+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBObyBtb3JlIGl0ZW1zIGluZGljYXRvciAtLT5cbiAgICAgICAgQGlmICghaGFzTW9yZUJvdHRvbSgpICYmIGl0ZW1zKCkubGVuZ3RoID4gMCAmJiAhbWVyZ2VkUHJvcHMudXNlTG9hZE1vcmVCdXR0b24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5maW5pdGUtbGlzdC1lbmRcIj5cbiAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPnt7IG1lcmdlZFByb3BzLm5vTW9yZVRleHQgfHwgJ05vIGhheSBtYXMgaXRlbXMnIH19PC9pb24tdGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gTGl2ZSByZWdpb24gZm9yIGFjY2Vzc2liaWxpdHkgYW5ub3VuY2VtZW50cyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBbYXR0ci5hcmlhLWF0b21pY109XCJ0cnVlXCI+XG4gICAgICB7eyBzdGF0dXNBbm5vdW5jZW1lbnQoKSB9fVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAuaW5maW5pdGUtbGlzdC1jb250YWluZXIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmluZmluaXRlLWxpc3Qtc2tlbGV0b24sXG4gICAgICAuaW5maW5pdGUtbGlzdC1lbXB0eSxcbiAgICAgIC5pbmZpbml0ZS1saXN0LWVycm9yIHtcbiAgICAgICAgcGFkZGluZzogMjRweCAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5pbmZpbml0ZS1saXN0LWVtcHR5IGlvbi1pY29uLFxuICAgICAgLmluZmluaXRlLWxpc3QtZXJyb3IgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgIH1cblxuICAgICAgLmluZmluaXRlLWxpc3QtZW1wdHkgaDMsXG4gICAgICAuaW5maW5pdGUtbGlzdC1lcnJvciBoMyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuXG4gICAgICAuaW5maW5pdGUtbGlzdC1lbXB0eSBwLFxuICAgICAgLmluZmluaXRlLWxpc3QtZXJyb3IgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICB9XG5cbiAgICAgIC5pbmZpbml0ZS1saXN0LWl0ZW1zIHtcbiAgICAgICAgJi53aXRoLWRpdmlkZXJzIC5pbmZpbml0ZS1saXN0LWl0ZW06bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgI2Q3ZDhkYSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmluZmluaXRlLWxpc3QtbG9hZC1tb3JlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICB9XG5cbiAgICAgIC5pbmZpbml0ZS1saXN0LWVuZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICB9XG5cbiAgICAgIC5zci1vbmx5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB3aWR0aDogMXB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAtMXB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5maW5pdGVMaXN0Q29tcG9uZW50PFQgPSB1bmtub3duPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBza2VsZXRvblNlcnZpY2UgPSBpbmplY3QoU2tlbGV0b25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIEBWaWV3Q2hpbGQoSW9uSW5maW5pdGVTY3JvbGwpIGluZmluaXRlU2Nyb2xsPzogSW9uSW5maW5pdGVTY3JvbGw7XG5cbiAgLyoqIENvbmZpZ3VyYWNpb24gZGVsIGNvbXBvbmVudGUgKi9cbiAgQElucHV0KCkgcHJvcHMhOiBJbmZpbml0ZUxpc3RNZXRhZGF0YTxUPjtcblxuICAvLyA9PT0gRXZlbnRzID09PVxuICBAT3V0cHV0KCkgbG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPExvYWRNb3JlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxSZWZyZXNoRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBzdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SW5maW5pdGVMaXN0U3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xuICBAT3V0cHV0KCkgZXJyb3JPY2N1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG5cbiAgLy8gPT09IFJlYWN0aXZlIFN0YXRlID09PVxuICByZWFkb25seSBpdGVtcyA9IHNpZ25hbDxUW10+KFtdKTtcbiAgcmVhZG9ubHkgc3RhdGUgPSBzaWduYWw8SW5maW5pdGVMaXN0U3RhdGU+KCdpZGxlJyk7XG4gIHJlYWRvbmx5IGhhc01vcmVCb3R0b20gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGhhc01vcmVUb3AgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBlcnJvciA9IHNpZ25hbDxFcnJvciB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBpc0luaXRpYWxMb2FkID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgY3VycmVudFBhZ2UgPSAwO1xuICBwcml2YXRlIGN1cnJlbnRDdXJzb3I6IHVua25vd24gPSBudWxsO1xuXG4gIC8qKiBQcm9ncmVzbyBkZSBjYXJnYSAoMC0xIHNpIHRvdGFsQ291bnQgY29ub2NpZG8pICovXG4gIHJlYWRvbmx5IGxvYWRQcm9ncmVzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHM/LmRhdGFTb3VyY2U/LnRvdGFsQ291bnQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLml0ZW1zKCkubGVuZ3RoIC8gdGhpcy5wcm9wcy5kYXRhU291cmNlLnRvdGFsQ291bnQ7XG4gIH0pO1xuXG4gIC8qKiBQcm9wcyBjb21iaW5hZG9zIGNvbiBkZWZhdWx0cyAqL1xuICBnZXQgbWVyZ2VkUHJvcHMoKTogSW5maW5pdGVMaXN0TWV0YWRhdGE8VD4ge1xuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfSU5GSU5JVEVfTElTVF9NRVRBREFUQSwgLi4udGhpcy5wcm9wcyB9IGFzIEluZmluaXRlTGlzdE1ldGFkYXRhPFQ+O1xuICB9XG5cbiAgLyoqIENvbmZpZyBkZWwgcmVmcmVzaGVyICovXG4gIGdldCByZWZyZXNoZXJDb25maWcoKTogUmVmcmVzaGVyTWV0YWRhdGEge1xuICAgIHJldHVybiB0aGlzLm1lcmdlZFByb3BzLnJlZnJlc2hDb25maWcgPz8ge307XG4gIH1cblxuICAvKiogQ29tcG9uZW50ZSBkZSBza2VsZXRvbiBhIHVzYXIgKi9cbiAgZ2V0IHNrZWxldG9uQ29tcG9uZW50KCkge1xuICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IHRoaXMubWVyZ2VkUHJvcHMuc2tlbGV0b24/LnRlbXBsYXRlIHx8ICdsaXN0JztcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuc2tlbGV0b25TZXJ2aWNlLmdldFRlbXBsYXRlKHRlbXBsYXRlTmFtZSk7XG4gICAgcmV0dXJuIHRlbXBsYXRlPy5jb21wb25lbnQgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiBJbnB1dHMgcGFyYSBlbCBza2VsZXRvbiAqL1xuICBnZXQgc2tlbGV0b25JbnB1dHMoKTogeyBjb25maWc6IHVua25vd24gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBjb3VudDogdGhpcy5tZXJnZWRQcm9wcy5za2VsZXRvbj8uY291bnQgPz8gMyxcbiAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgIC4uLnRoaXMubWVyZ2VkUHJvcHMuc2tlbGV0b24/LmNvbmZpZyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBbnVuY2lvIGRlIGVzdGFkbyBwYXJhIGxlY3RvcmVzIGRlIHBhbnRhbGxhICovXG4gIHJlYWRvbmx5IHN0YXR1c0Fubm91bmNlbWVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUoKSkge1xuICAgICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICAgIHJldHVybiAnQ2FyZ2FuZG8gaXRlbXMuLi4nO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gYEVycm9yOiAke3RoaXMuZXJyb3IoKT8ubWVzc2FnZSB8fCAnT2N1cnJpbyB1biBlcnJvcid9YDtcbiAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgcmV0dXJuICdUb2RvcyBsb3MgaXRlbXMgaGFuIHNpZG8gY2FyZ2Fkb3MnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQ2FyZ2FyIGl0ZW1zIGluaWNpYWxlcyBkZWwgZGF0YVNvdXJjZSBzaSBleGlzdGVuXG4gICAgaWYgKHRoaXMucHJvcHMuZGF0YVNvdXJjZS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChbLi4udGhpcy5wcm9wcy5kYXRhU291cmNlLml0ZW1zXSk7XG4gICAgICB0aGlzLmlzSW5pdGlhbExvYWQuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBBdXRvLWNhcmdhciBzaSBlc3RhIGhhYmlsaXRhZG9cbiAgICBpZiAodGhpcy5tZXJnZWRQcm9wcy5hdXRvTG9hZCAmJiAhdGhpcy5pdGVtcygpLmxlbmd0aCkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFudXBcbiAgfVxuXG4gIC8qKiBGdW5jaW9uIGRlIHRyYWNraW5nIHBhcmEgbmdGb3IgKi9cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IFQpOiB1bmtub3duIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kYXRhU291cmNlLnRyYWNrQnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGFTb3VyY2UudHJhY2tCeShpbmRleCwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKiBTaSBkZWJlIG1vc3RyYXIgZWwgc2Nyb2xsIGluZmVyaW9yICovXG4gIHNob3VsZFNob3dCb3R0b21TY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGlyID0gdGhpcy5tZXJnZWRQcm9wcy5kaXJlY3Rpb247XG4gICAgcmV0dXJuIChkaXIgPT09ICdib3R0b20nIHx8IGRpciA9PT0gJ2JvdGgnKSAmJiB0aGlzLml0ZW1zKCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBDYXJnYSBpbmljaWFsIGRlIGRhdG9zICovXG4gIGFzeW5jIGxvYWRJbml0aWFsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5wcm9wcy5kYXRhU291cmNlLmxvYWRGbikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGF0ZS5zZXQoJ2xvYWRpbmcnKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoJ2xvYWRpbmcnKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXM6IExvYWRQYXJhbXMgPSB7XG4gICAgICAgIGRpcmVjdGlvbjogJ2JvdHRvbScsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLm1lcmdlZFByb3BzLnBhZ2VTaXplID8/IDIwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlTG9hZChwYXJhbXMpO1xuXG4gICAgICB0aGlzLml0ZW1zLnNldChyZXN1bHQuaXRlbXMgYXMgVFtdKTtcbiAgICAgIHRoaXMuaGFzTW9yZUJvdHRvbS5zZXQocmVzdWx0Lmhhc01vcmUpO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICB0aGlzLmN1cnJlbnRDdXJzb3IgPSByZXN1bHQuY3Vyc29yO1xuICAgICAgdGhpcy5pc0luaXRpYWxMb2FkLnNldChmYWxzZSk7XG5cbiAgICAgIHRoaXMuc3RhdGUuc2V0KCdpZGxlJyk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoJ2lkbGUnKTtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYXJnYXIgbWFzIGl0ZW1zIGVuIGxhIHBhcnRlIGluZmVyaW9yICovXG4gIGFzeW5jIGxvYWRCb3R0b20oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc01vcmVCb3R0b20oKSB8fCB0aGlzLnN0YXRlKCkgPT09ICdsb2FkaW5nJykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5kYXRhU291cmNlLmxvYWRGbikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGF0ZS5zZXQoJ2xvYWRpbmcnKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoJ2xvYWRpbmcnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXM6IExvYWRQYXJhbXMgPSB7XG4gICAgICAgIGRpcmVjdGlvbjogJ2JvdHRvbScsXG4gICAgICAgIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLm1lcmdlZFByb3BzLnBhZ2VTaXplID8/IDIwLFxuICAgICAgICBjdXJzb3I6IHRoaXMuY3VycmVudEN1cnNvcixcbiAgICAgICAgbGFzdEl0ZW06IHRoaXMuaXRlbXMoKVt0aGlzLml0ZW1zKCkubGVuZ3RoIC0gMV0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVMb2FkKHBhcmFtcyk7XG5cbiAgICAgIHRoaXMuaXRlbXMudXBkYXRlKChjdXJyZW50KSA9PiBbLi4uY3VycmVudCwgLi4uKHJlc3VsdC5pdGVtcyBhcyBUW10pXSk7XG4gICAgICB0aGlzLmhhc01vcmVCb3R0b20uc2V0KHJlc3VsdC5oYXNNb3JlKTtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UrKztcbiAgICAgIHRoaXMuY3VycmVudEN1cnNvciA9IHJlc3VsdC5jdXJzb3I7XG5cbiAgICAgIHRoaXMuc3RhdGUuc2V0KHJlc3VsdC5oYXNNb3JlID8gJ2lkbGUnIDogJ2NvbXBsZXRlJyk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQocmVzdWx0Lmhhc01vcmUgPyAnaWRsZScgOiAnY29tcGxldGUnKTtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYXJnYXIgbWFzIGl0ZW1zIGVuIGxhIHBhcnRlIHN1cGVyaW9yICovXG4gIGFzeW5jIGxvYWRUb3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc01vcmVUb3AoKSB8fCB0aGlzLnN0YXRlKCkgPT09ICdsb2FkaW5nJykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5kYXRhU291cmNlLmxvYWRGbikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdGF0ZS5zZXQoJ2xvYWRpbmcnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXM6IExvYWRQYXJhbXMgPSB7XG4gICAgICAgIGRpcmVjdGlvbjogJ3RvcCcsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLm1lcmdlZFByb3BzLnBhZ2VTaXplID8/IDIwLFxuICAgICAgICBmaXJzdEl0ZW06IHRoaXMuaXRlbXMoKVswXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxvYWQocGFyYW1zKTtcblxuICAgICAgdGhpcy5pdGVtcy51cGRhdGUoKGN1cnJlbnQpID0+IFsuLi4ocmVzdWx0Lml0ZW1zIGFzIFRbXSksIC4uLmN1cnJlbnRdKTtcbiAgICAgIHRoaXMuaGFzTW9yZVRvcC5zZXQocmVzdWx0Lmhhc01vcmUpO1xuXG4gICAgICB0aGlzLnN0YXRlLnNldCgnaWRsZScpO1xuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlZnJlc2ggLSByZWNhcmdhciBkZXNkZSBjZXJvICovXG4gIGFzeW5jIHJlZnJlc2hMaXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMuY3VycmVudEN1cnNvciA9IG51bGw7XG4gICAgdGhpcy5oYXNNb3JlQm90dG9tLnNldCh0cnVlKTtcbiAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbCgpO1xuICB9XG5cbiAgLyoqIFJlaW50ZW50YXIgZGVzcHVlcyBkZSBlcnJvciAqL1xuICBhc3luYyByZXRyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICBpZiAodGhpcy5pdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRCb3R0b20oKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzZXQgY29tcGxldG8gKi9cbiAgYXN5bmMgcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMuY3VycmVudEN1cnNvciA9IG51bGw7XG4gICAgdGhpcy5oYXNNb3JlQm90dG9tLnNldCh0cnVlKTtcbiAgICB0aGlzLmhhc01vcmVUb3Auc2V0KGZhbHNlKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmlzSW5pdGlhbExvYWQuc2V0KHRydWUpO1xuICAgIHRoaXMuc3RhdGUuc2V0KCdpZGxlJyk7XG5cbiAgICBpZiAodGhpcy5tZXJnZWRQcm9wcy5hdXRvTG9hZCkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSW5pdGlhbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBZ3JlZ2FyIGl0ZW1zIGFsIGluaWNpbyAqL1xuICBwcmVwZW5kSXRlbXMobmV3SXRlbXM6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXMudXBkYXRlKChjdXJyZW50KSA9PiBbLi4ubmV3SXRlbXMsIC4uLmN1cnJlbnRdKTtcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcygpKTtcbiAgfVxuXG4gIC8qKiBBZ3JlZ2FyIGl0ZW1zIGFsIGZpbmFsICovXG4gIGFwcGVuZEl0ZW1zKG5ld0l0ZW1zOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnVwZGF0ZSgoY3VycmVudCkgPT4gWy4uLmN1cnJlbnQsIC4uLm5ld0l0ZW1zXSk7XG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gIH1cblxuICAvKiogQWN0dWFsaXphciB1biBpdGVtIHBvciBpbmRpY2UgKi9cbiAgdXBkYXRlSXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBUKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBbLi4uY3VycmVudF07XG4gICAgICB1cGRhdGVkW2luZGV4XSA9IGl0ZW07XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9KTtcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcygpKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmVyIHVuIGl0ZW0gcG9yIGluZGljZSAqL1xuICByZW1vdmVJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnVwZGF0ZSgoY3VycmVudCkgPT4gY3VycmVudC5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KSk7XG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gIH1cblxuICAvKiogSGFuZGxlciBwYXJhIGV2ZW50byBkZSBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgYXN5bmMgb25JbmZpbml0ZVNjcm9sbChldmVudDogQ3VzdG9tRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRCb3R0b20oKTtcbiAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJb25JbmZpbml0ZVNjcm9sbEVsZW1lbnQpLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogSGFuZGxlciBwYXJhIGV2ZW50byBkZSByZWZyZXNoICovXG4gIGFzeW5jIG9uUmVmcmVzaFRyaWdnZXJlZChldmVudDogUmVmcmVzaEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZWZyZXNoLmVtaXQoZXZlbnQpO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaExpc3QoKTtcbiAgICBldmVudC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTG9hZChwYXJhbXM6IExvYWRQYXJhbXMpOiBQcm9taXNlPExvYWRSZXN1bHQ8dW5rbm93bj4+IHtcbiAgICBjb25zdCBsb2FkRm4gPSB0aGlzLnByb3BzLmRhdGFTb3VyY2UubG9hZEZuITtcbiAgICBjb25zdCByZXN1bHQgPSBsb2FkRm4ocGFyYW1zKTtcblxuICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogRXJyb3IpOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yLnNldChlcnIpO1xuICAgIHRoaXMuc3RhdGUuc2V0KCdlcnJvcicpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdCgnZXJyb3InKTtcbiAgICB0aGlzLmVycm9yT2NjdXJyZWQuZW1pdChlcnIpO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tJbmZpbml0ZUxpc3RdIEVycm9yIGxvYWRpbmcgaXRlbXM6JywgZXJyKTtcbiAgfVxufVxuIl19
620
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2luZmluaXRlLWxpc3QvaW5maW5pdGUtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUdSLFNBQVMsRUFDVCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsU0FBUyxFQUNULFVBQVUsRUFDVixPQUFPLEVBQ1AsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLEdBQ1IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBTUwsOEJBQThCLEdBQy9CLE1BQU0sU0FBUyxDQUFDO0FBRWpCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7O0FBRzlFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBMk9ILE1BQU0sT0FBTyxxQkFBcUI7SUExT2xDO1FBMk9tQixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQU85QyxpQkFBaUI7UUFDUCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDN0MsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQzNDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUVwRCx5QkFBeUI7UUFDaEIsVUFBSyxHQUFHLE1BQU0sQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUN4QixVQUFLLEdBQUcsTUFBTSxDQUFvQixNQUFNLENBQUMsQ0FBQztRQUMxQyxrQkFBYSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUN0QyxlQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBRyxNQUFNLENBQWUsSUFBSSxDQUFDLENBQUM7UUFDbkMsa0JBQWEsR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFdkMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFdEMscURBQXFEO1FBQzVDLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBOEJILGtEQUFrRDtRQUN6Qyx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFDLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNyQyxLQUFLLE9BQU87b0JBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDN0YsS0FBSyxVQUFVO29CQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdkM7b0JBQ0UsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7S0F3Tko7SUFoUUMsb0NBQW9DO0lBQ3BDLElBQUksV0FBVztRQUNiLE9BQU8sRUFBRSxHQUFHLDhCQUE4QixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBNkIsQ0FBQztJQUN6RixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLElBQUksaUJBQWlCO1FBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsT0FBTyxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksY0FBYztRQUNoQixPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQztnQkFDNUMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNO2FBQ3JDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFnQkQsUUFBUTtRQUNOLG1EQUFtRDtRQUNuRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULFVBQVU7SUFDWixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBTztRQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLHNCQUFzQjtRQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUUxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBZTtnQkFDekIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLElBQUksRUFBRSxDQUFDO2dCQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxFQUFFO2FBQzFDLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQVksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQVksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssU0FBUztZQUFFLE9BQU87UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFlO2dCQUN6QixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTtnQkFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ2hELENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBSSxNQUFNLENBQUMsS0FBYSxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUVuQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQVksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEtBQUssQ0FBQyxPQUFPO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssU0FBUztZQUFFLE9BQU87UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFlO2dCQUN6QixTQUFTLEVBQUUsS0FBSztnQkFDaEIsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUU7Z0JBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzNCLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBSSxNQUFNLENBQUMsS0FBYSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQVksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLFlBQVksQ0FBQyxRQUFhO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLFdBQVcsQ0FBQyxRQUFhO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lB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d0JBQ2pCLHdCQUF3Qjt3QkFDeEIsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLE9BQU87d0JBQ1Asa0JBQWtCO3FCQUNuQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStJVDs4QkFpRjZCLGNBQWM7c0JBQTNDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUduQixLQUFLO3NCQUFiLEtBQUs7Z0JBR0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQge1xuICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgSW9uSW5maW5pdGVTY3JvbGxDb250ZW50LFxuICBJb25CdXR0b24sXG4gIElvblNwaW5uZXIsXG4gIElvbkljb24sXG4gIElvblRleHQsXG4gIElvbkxpc3QsXG4gIElvbkl0ZW0sXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgSW5maW5pdGVMaXN0TWV0YWRhdGEsXG4gIEluZmluaXRlTGlzdFN0YXRlLFxuICBMb2FkTW9yZUV2ZW50LFxuICBMb2FkUGFyYW1zLFxuICBMb2FkUmVzdWx0LFxuICBERUZBVUxUX0lORklOSVRFX0xJU1RfTUVUQURBVEEsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgUmVmcmVzaEV2ZW50LCBSZWZyZXNoZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9yZWZyZXNoZXIvdHlwZXMnO1xuaW1wb3J0IHsgUmVmcmVzaGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JlZnJlc2hlci9yZWZyZXNoZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNrZWxldG9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NrZWxldG9uL3NrZWxldG9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2tlbGV0b25UZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NrZWxldG9uL3R5cGVzJztcblxuLyoqXG4gKiBDb21wb25lbnRlIHdyYXBwZXIgcGFyYSBsaXN0YXMgY29uIGluZmluaXRlIHNjcm9sbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBVc28gYmFzaWNvIGNvbiBkYXRhIHNvdXJjZSAtLT5cbiAqIDx2YWwtaW5maW5pdGUtbGlzdFxuICogICBbcHJvcHNdPVwie1xuICogICAgIGRhdGFTb3VyY2U6IHsgbG9hZEZuOiBsb2FkVXNlcnMsIHRyYWNrQnk6IHRyYWNrQnlVc2VySWQgfSxcbiAqICAgICBpdGVtVGVtcGxhdGU6IHVzZXJUZW1wbGF0ZSxcbiAqICAgICBwYWdlU2l6ZTogMjAsXG4gKiAgICAgdGhyZXNob2xkOiAnMTUwcHgnXG4gKiAgIH1cIlxuICogPjwvdmFsLWluZmluaXRlLWxpc3Q+XG4gKlxuICogPG5nLXRlbXBsYXRlICN1c2VyVGVtcGxhdGUgbGV0LXVzZXIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAqICAgPHZhbC1jYXJkIFtwcm9wc109XCJ7IHRpdGxlOiB1c2VyLm5hbWUsIHN1YnRpdGxlOiB1c2VyLmVtYWlsIH1cIj5cbiAqICAgICA8cD57eyB1c2VyLmJpbyB9fTwvcD5cbiAqICAgPC92YWwtY2FyZD5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gQ29uIHB1bGwtdG8tcmVmcmVzaCB5IGVzdGFkbyB2YWNpbyBwZXJzb25hbGl6YWRvIC0tPlxuICogPHZhbC1pbmZpbml0ZS1saXN0XG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgZGF0YVNvdXJjZTogeyBsb2FkRm46IGxvYWRNZXNzYWdlcyB9LFxuICogICAgIGl0ZW1UZW1wbGF0ZTogbWVzc2FnZVRlbXBsYXRlLFxuICogICAgIGRpcmVjdGlvbjogJ2JvdGgnLFxuICogICAgIGVuYWJsZVJlZnJlc2g6IHRydWUsXG4gKiAgICAgZW1wdHlTdGF0ZToge1xuICogICAgICAgaWNvbjogJ2NoYXRidWJibGVzLW91dGxpbmUnLFxuICogICAgICAgdGl0bGU6ICdTaW4gbWVuc2FqZXMnLFxuICogICAgICAgbWVzc2FnZTogJ0luaWNpYSB1bmEgY29udmVyc2FjaW9uJ1xuICogICAgIH0sXG4gKiAgICAgc2tlbGV0b246IHsgdGVtcGxhdGU6ICdsaXN0JywgY291bnQ6IDUgfVxuICogICB9XCJcbiAqICAgKHJlZnJlc2gpPVwib25SZWZyZXNoKCRldmVudClcIlxuICogPjwvdmFsLWluZmluaXRlLWxpc3Q+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1pbmZpbml0ZS1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25JbmZpbml0ZVNjcm9sbCxcbiAgICBJb25JbmZpbml0ZVNjcm9sbENvbnRlbnQsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvblNwaW5uZXIsXG4gICAgSW9uSWNvbixcbiAgICBJb25UZXh0LFxuICAgIElvbkxpc3QsXG4gICAgSW9uSXRlbSxcbiAgICBSZWZyZXNoZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSBQdWxsIHRvIHJlZnJlc2ggd3JhcHBlciAtLT5cbiAgICBAaWYgKG1lcmdlZFByb3BzLmVuYWJsZVJlZnJlc2gpIHtcbiAgICAgIDx2YWwtcmVmcmVzaGVyIFtwcm9wc109XCJyZWZyZXNoZXJDb25maWdcIiAocmVmcmVzaCk9XCJvblJlZnJlc2hUcmlnZ2VyZWQoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdmFsLXJlZnJlc2hlcj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0Q29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cblxuICAgIDwhLS0gTWFpbiBsaXN0IGNvbnRlbnQgdGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNsaXN0Q29udGVudD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpbmZpbml0ZS1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzc109XCJtZXJnZWRQcm9wcy5jc3NDbGFzc1wiXG4gICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1lcmdlZFByb3BzLm1heEhlaWdodFwiXG4gICAgICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cIm1lcmdlZFByb3BzLm1heEhlaWdodCA/ICdhdXRvJyA6ICd2aXNpYmxlJ1wiXG4gICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cInN0YXRlKCkgPT09ICdsb2FkaW5nJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibWVyZ2VkUHJvcHMuYXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmlwdGlvbl09XCJtZXJnZWRQcm9wcy5hcmlhRGVzY3JpcHRpb25cIlxuICAgICAgPlxuICAgICAgICA8IS0tIExvYWRpbmcgc3RhdGUgKGluaXRpYWwpIC0tPlxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICdsb2FkaW5nJyAmJiBpdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZpbml0ZS1saXN0LXNrZWxldG9uXCI+XG4gICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLnNrZWxldG9uPy5jdXN0b21UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVyZ2VkUHJvcHMuc2tlbGV0b24uY3VzdG9tVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInNrZWxldG9uQ29tcG9uZW50OyBpbnB1dHM6IHNrZWxldG9uSW5wdXRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEVtcHR5IHN0YXRlIC0tPlxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICdpZGxlJyAmJiBpdGVtcygpLmxlbmd0aCA9PT0gMCAmJiAhaXNJbml0aWFsTG9hZCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZmluaXRlLWxpc3QtZW1wdHlcIj5cbiAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZW1wdHlTdGF0ZT8udGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lcmdlZFByb3BzLmVtcHR5U3RhdGUudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLmVtcHR5U3RhdGU/Lmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwibWVyZ2VkUHJvcHMuZW1wdHlTdGF0ZS5pY29uXCIgc2l6ZT1cImxhcmdlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLmVtcHR5U3RhdGU/LnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgzPnt7IG1lcmdlZFByb3BzLmVtcHR5U3RhdGUudGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZW1wdHlTdGF0ZT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIDxwPnt7IG1lcmdlZFByb3BzLmVtcHR5U3RhdGUubWVzc2FnZSB9fTwvcD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBFcnJvciBzdGF0ZSAtLT5cbiAgICAgICAgQGlmIChzdGF0ZSgpID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZmluaXRlLWxpc3QtZXJyb3JcIj5cbiAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZT8udGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZS50ZW1wbGF0ZTsgY29udGV4dDogeyBlcnJvcjogZXJyb3IoKSwgcmV0cnk6IHJldHJ5LmJpbmQodGhpcykgfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG1lcmdlZFByb3BzLmVycm9yU3RhdGU/Lmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwibWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZS5pY29uXCIgY29sb3I9XCJkYW5nZXJcIiBzaXplPVwibGFyZ2VcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFsZXJ0LWNpcmNsZS1vdXRsaW5lXCIgY29sb3I9XCJkYW5nZXJcIiBzaXplPVwibGFyZ2VcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxoMz57eyBtZXJnZWRQcm9wcy5lcnJvclN0YXRlPy50aXRsZSB8fCBpMThuLnQoJ2Vycm9yJykgfX08L2gzPlxuICAgICAgICAgICAgICA8cD57eyBtZXJnZWRQcm9wcy5lcnJvclN0YXRlPy5tZXNzYWdlIHx8IGVycm9yKCk/Lm1lc3NhZ2UgfHwgaTE4bi50KCdlcnJvck9jY3VycmVkJykgfX08L3A+XG4gICAgICAgICAgICAgIEBpZiAobWVyZ2VkUHJvcHMuZXJyb3JTdGF0ZT8uc2hvd1JldHJ5ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgKGNsaWNrKT1cInJldHJ5KClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IG1lcmdlZFByb3BzLmVycm9yU3RhdGU/LnJldHJ5VGV4dCB8fCBpMThuLnQoJ3JldHJ5JykgfX1cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gSXRlbXMgbGlzdCAtLT5cbiAgICAgICAgQGlmIChpdGVtcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5maW5pdGUtbGlzdC1pdGVtc1wiIFtjbGFzcy53aXRoLWRpdmlkZXJzXT1cIm1lcmdlZFByb3BzLnNob3dEaXZpZGVyc1wiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayB0cmFja0J5Rm4oJGluZGV4LCBpdGVtKTsgbGV0IGkgPSAkaW5kZXg7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8YXJ0aWNsZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5maW5pdGUtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwibWVyZ2VkUHJvcHMuZGF0YVNvdXJjZS50b3RhbENvdW50IHx8IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiaSArIDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VkUHJvcHMuaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGksIGZpcnN0OiBmaXJzdCwgbGFzdDogbGFzdCwgY291bnQ6IGl0ZW1zKCkubGVuZ3RoIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2FydGljbGU+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEJvdHRvbSBpbmZpbml0ZSBzY3JvbGwgLS0+XG4gICAgICAgIEBpZiAoc2hvdWxkU2hvd0JvdHRvbVNjcm9sbCgpKSB7XG4gICAgICAgICAgQGlmIChtZXJnZWRQcm9wcy51c2VMb2FkTW9yZUJ1dHRvbikge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZmluaXRlLWxpc3QtbG9hZC1tb3JlXCI+XG4gICAgICAgICAgICAgIEBpZiAoaGFzTW9yZUJvdHRvbSgpKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJtZXJnZWRQcm9wcy5jb2xvclwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3RhdGUoKSA9PT0gJ2xvYWRpbmcnXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2FkQm90dG9tKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc3RhdGUoKSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBbbmFtZV09XCJtZXJnZWRQcm9wcy5zcGlubmVyVHlwZVwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB7eyBtZXJnZWRQcm9wcy5sb2FkTW9yZVRleHQgfHwgaTE4bi50KCdsb2FkTW9yZScpIH19XG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj57eyBtZXJnZWRQcm9wcy5ub01vcmVUZXh0IHx8IGkxOG4udCgnbm9Nb3JlSXRlbXMnKSB9fTwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi1pbmZpbml0ZS1zY3JvbGxcbiAgICAgICAgICAgICAgW3RocmVzaG9sZF09XCJtZXJnZWRQcm9wcy50aHJlc2hvbGRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc01vcmVCb3R0b20oKVwiXG4gICAgICAgICAgICAgIChpb25JbmZpbml0ZSk9XCJvbkluZmluaXRlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWluZmluaXRlLXNjcm9sbC1jb250ZW50XG4gICAgICAgICAgICAgICAgW2xvYWRpbmdTcGlubmVyXT1cIm1lcmdlZFByb3BzLnNwaW5uZXJUeXBlXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ1RleHRdPVwic3RhdGUoKSA9PT0gJ2xvYWRpbmcnID8gaTE4bi50KCdsb2FkaW5nJykgOiAnJ1wiXG4gICAgICAgICAgICAgID48L2lvbi1pbmZpbml0ZS1zY3JvbGwtY29udGVudD5cbiAgICAgICAgICAgIDwvaW9uLWluZmluaXRlLXNjcm9sbD5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIE5vIG1vcmUgaXRlbXMgaW5kaWNhdG9yIC0tPlxuICAgICAgICBAaWYgKCFoYXNNb3JlQm90dG9tKCkgJiYgaXRlbXMoKS5sZW5ndGggPiAwICYmICFtZXJnZWRQcm9wcy51c2VMb2FkTW9yZUJ1dHRvbikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZpbml0ZS1saXN0LWVuZFwiPlxuICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+e3sgbWVyZ2VkUHJvcHMubm9Nb3JlVGV4dCB8fCBpMThuLnQoJ25vTW9yZUl0ZW1zJykgfX08L2lvbi10ZXh0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBMaXZlIHJlZ2lvbiBmb3IgYWNjZXNzaWJpbGl0eSBhbm5vdW5jZW1lbnRzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzci1vbmx5XCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIFthdHRyLmFyaWEtYXRvbWljXT1cInRydWVcIj5cbiAgICAgIHt7IHN0YXR1c0Fubm91bmNlbWVudCgpIH19XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIC5pbmZpbml0ZS1saXN0LWNvbnRhaW5lciB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuaW5maW5pdGUtbGlzdC1za2VsZXRvbixcbiAgICAgIC5pbmZpbml0ZS1saXN0LWVtcHR5LFxuICAgICAgLmluZmluaXRlLWxpc3QtZXJyb3Ige1xuICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cblxuICAgICAgLmluZmluaXRlLWxpc3QtZW1wdHkgaW9uLWljb24sXG4gICAgICAuaW5maW5pdGUtbGlzdC1lcnJvciBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuXG4gICAgICAuaW5maW5pdGUtbGlzdC1lbXB0eSBoMyxcbiAgICAgIC5pbmZpbml0ZS1saXN0LWVycm9yIGgzIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG5cbiAgICAgIC5pbmZpbml0ZS1saXN0LWVtcHR5IHAsXG4gICAgICAuaW5maW5pdGUtbGlzdC1lcnJvciBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIH1cblxuICAgICAgLmluZmluaXRlLWxpc3QtaXRlbXMge1xuICAgICAgICAmLndpdGgtZGl2aWRlcnMgLmluZmluaXRlLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0LXNoYWRlLCAjZDdkOGRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuaW5maW5pdGUtbGlzdC1sb2FkLW1vcmUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgIH1cblxuICAgICAgLmluZmluaXRlLWxpc3QtZW5kIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIH1cblxuICAgICAgLnNyLW9ubHkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgIGhlaWdodDogMXB4O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IC0xcHg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0ZUxpc3RDb21wb25lbnQ8VCA9IHVua25vd24+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHNrZWxldG9uU2VydmljZSA9IGluamVjdChTa2VsZXRvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCByZWFkb25seSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICBAVmlld0NoaWxkKElvbkluZmluaXRlU2Nyb2xsKSBpbmZpbml0ZVNjcm9sbD86IElvbkluZmluaXRlU2Nyb2xsO1xuXG4gIC8qKiBDb25maWd1cmFjaW9uIGRlbCBjb21wb25lbnRlICovXG4gIEBJbnB1dCgpIHByb3BzITogSW5maW5pdGVMaXN0TWV0YWRhdGE8VD47XG5cbiAgLy8gPT09IEV2ZW50cyA9PT1cbiAgQE91dHB1dCgpIGxvYWRNb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxMb2FkTW9yZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVmcmVzaEV2ZW50PigpO1xuICBAT3V0cHV0KCkgc3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEluZmluaXRlTGlzdFN0YXRlPigpO1xuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcbiAgQE91dHB1dCgpIGVycm9yT2NjdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEVycm9yPigpO1xuXG4gIC8vID09PSBSZWFjdGl2ZSBTdGF0ZSA9PT1cbiAgcmVhZG9ubHkgaXRlbXMgPSBzaWduYWw8VFtdPihbXSk7XG4gIHJlYWRvbmx5IHN0YXRlID0gc2lnbmFsPEluZmluaXRlTGlzdFN0YXRlPignaWRsZScpO1xuICByZWFkb25seSBoYXNNb3JlQm90dG9tID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBoYXNNb3JlVG9wID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBzaWduYWw8RXJyb3IgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgaXNJbml0aWFsTG9hZCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcblxuICBwcml2YXRlIGN1cnJlbnRQYWdlID0gMDtcbiAgcHJpdmF0ZSBjdXJyZW50Q3Vyc29yOiB1bmtub3duID0gbnVsbDtcblxuICAvKiogUHJvZ3Jlc28gZGUgY2FyZ2EgKDAtMSBzaSB0b3RhbENvdW50IGNvbm9jaWRvKSAqL1xuICByZWFkb25seSBsb2FkUHJvZ3Jlc3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLnByb3BzPy5kYXRhU291cmNlPy50b3RhbENvdW50KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLmxlbmd0aCAvIHRoaXMucHJvcHMuZGF0YVNvdXJjZS50b3RhbENvdW50O1xuICB9KTtcblxuICAvKiogUHJvcHMgY29tYmluYWRvcyBjb24gZGVmYXVsdHMgKi9cbiAgZ2V0IG1lcmdlZFByb3BzKCk6IEluZmluaXRlTGlzdE1ldGFkYXRhPFQ+IHtcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX0lORklOSVRFX0xJU1RfTUVUQURBVEEsIC4uLnRoaXMucHJvcHMgfSBhcyBJbmZpbml0ZUxpc3RNZXRhZGF0YTxUPjtcbiAgfVxuXG4gIC8qKiBDb25maWcgZGVsIHJlZnJlc2hlciAqL1xuICBnZXQgcmVmcmVzaGVyQ29uZmlnKCk6IFJlZnJlc2hlck1ldGFkYXRhIHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZWRQcm9wcy5yZWZyZXNoQ29uZmlnID8/IHt9O1xuICB9XG5cbiAgLyoqIENvbXBvbmVudGUgZGUgc2tlbGV0b24gYSB1c2FyICovXG4gIGdldCBza2VsZXRvbkNvbXBvbmVudCgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZU5hbWUgPSB0aGlzLm1lcmdlZFByb3BzLnNrZWxldG9uPy50ZW1wbGF0ZSB8fCAnbGlzdCc7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnNrZWxldG9uU2VydmljZS5nZXRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xuICAgIHJldHVybiB0ZW1wbGF0ZT8uY29tcG9uZW50ID8/IG51bGw7XG4gIH1cblxuICAvKiogSW5wdXRzIHBhcmEgZWwgc2tlbGV0b24gKi9cbiAgZ2V0IHNrZWxldG9uSW5wdXRzKCk6IHsgY29uZmlnOiB1bmtub3duIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgY291bnQ6IHRoaXMubWVyZ2VkUHJvcHMuc2tlbGV0b24/LmNvdW50ID8/IDMsXG4gICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAuLi50aGlzLm1lcmdlZFByb3BzLnNrZWxldG9uPy5jb25maWcsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKiogQW51bmNpbyBkZSBlc3RhZG8gcGFyYSBsZWN0b3JlcyBkZSBwYW50YWxsYSAqL1xuICByZWFkb25seSBzdGF0dXNBbm5vdW5jZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKCkpIHtcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgICByZXR1cm4gdGhpcy5pMThuLnQoJ2xvYWRpbmdJdGVtcycpO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5pMThuLnQoJ2Vycm9yJyl9OiAke3RoaXMuZXJyb3IoKT8ubWVzc2FnZSB8fCB0aGlzLmkxOG4udCgnZXJyb3JPY2N1cnJlZCcpfWA7XG4gICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmkxOG4udCgnYWxsSXRlbXNMb2FkZWQnKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIENhcmdhciBpdGVtcyBpbmljaWFsZXMgZGVsIGRhdGFTb3VyY2Ugc2kgZXhpc3RlblxuICAgIGlmICh0aGlzLnByb3BzLmRhdGFTb3VyY2UuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoWy4uLnRoaXMucHJvcHMuZGF0YVNvdXJjZS5pdGVtc10pO1xuICAgICAgdGhpcy5pc0luaXRpYWxMb2FkLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0by1jYXJnYXIgc2kgZXN0YSBoYWJpbGl0YWRvXG4gICAgaWYgKHRoaXMubWVyZ2VkUHJvcHMuYXV0b0xvYWQgJiYgIXRoaXMuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMubG9hZEluaXRpYWwoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhbnVwXG4gIH1cblxuICAvKiogRnVuY2lvbiBkZSB0cmFja2luZyBwYXJhIG5nRm9yICovXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBUKTogdW5rbm93biB7XG4gICAgaWYgKHRoaXMucHJvcHMuZGF0YVNvdXJjZS50cmFja0J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhU291cmNlLnRyYWNrQnkoaW5kZXgsIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKiogU2kgZGViZSBtb3N0cmFyIGVsIHNjcm9sbCBpbmZlcmlvciAqL1xuICBzaG91bGRTaG93Qm90dG9tU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRpciA9IHRoaXMubWVyZ2VkUHJvcHMuZGlyZWN0aW9uO1xuICAgIHJldHVybiAoZGlyID09PSAnYm90dG9tJyB8fCBkaXIgPT09ICdib3RoJykgJiYgdGhpcy5pdGVtcygpLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQ2FyZ2EgaW5pY2lhbCBkZSBkYXRvcyAqL1xuICBhc3luYyBsb2FkSW5pdGlhbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMuZGF0YVNvdXJjZS5sb2FkRm4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGUuc2V0KCdsb2FkaW5nJyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KCdsb2FkaW5nJyk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zOiBMb2FkUGFyYW1zID0ge1xuICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxuICAgICAgICBwYWdlOiAwLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5tZXJnZWRQcm9wcy5wYWdlU2l6ZSA/PyAyMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxvYWQocGFyYW1zKTtcblxuICAgICAgdGhpcy5pdGVtcy5zZXQocmVzdWx0Lml0ZW1zIGFzIFRbXSk7XG4gICAgICB0aGlzLmhhc01vcmVCb3R0b20uc2V0KHJlc3VsdC5oYXNNb3JlKTtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgdGhpcy5jdXJyZW50Q3Vyc29yID0gcmVzdWx0LmN1cnNvcjtcbiAgICAgIHRoaXMuaXNJbml0aWFsTG9hZC5zZXQoZmFsc2UpO1xuXG4gICAgICB0aGlzLnN0YXRlLnNldCgnaWRsZScpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KCdpZGxlJyk7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcygpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FyZ2FyIG1hcyBpdGVtcyBlbiBsYSBwYXJ0ZSBpbmZlcmlvciAqL1xuICBhc3luYyBsb2FkQm90dG9tKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5oYXNNb3JlQm90dG9tKCkgfHwgdGhpcy5zdGF0ZSgpID09PSAnbG9hZGluZycpIHJldHVybjtcbiAgICBpZiAoIXRoaXMucHJvcHMuZGF0YVNvdXJjZS5sb2FkRm4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGUuc2V0KCdsb2FkaW5nJyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KCdsb2FkaW5nJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zOiBMb2FkUGFyYW1zID0ge1xuICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxuICAgICAgICBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5tZXJnZWRQcm9wcy5wYWdlU2l6ZSA/PyAyMCxcbiAgICAgICAgY3Vyc29yOiB0aGlzLmN1cnJlbnRDdXJzb3IsXG4gICAgICAgIGxhc3RJdGVtOiB0aGlzLml0ZW1zKClbdGhpcy5pdGVtcygpLmxlbmd0aCAtIDFdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlTG9hZChwYXJhbXMpO1xuXG4gICAgICB0aGlzLml0ZW1zLnVwZGF0ZSgoY3VycmVudCkgPT4gWy4uLmN1cnJlbnQsIC4uLihyZXN1bHQuaXRlbXMgYXMgVFtdKV0pO1xuICAgICAgdGhpcy5oYXNNb3JlQm90dG9tLnNldChyZXN1bHQuaGFzTW9yZSk7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlKys7XG4gICAgICB0aGlzLmN1cnJlbnRDdXJzb3IgPSByZXN1bHQuY3Vyc29yO1xuXG4gICAgICB0aGlzLnN0YXRlLnNldChyZXN1bHQuaGFzTW9yZSA/ICdpZGxlJyA6ICdjb21wbGV0ZScpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHJlc3VsdC5oYXNNb3JlID8gJ2lkbGUnIDogJ2NvbXBsZXRlJyk7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcygpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FyZ2FyIG1hcyBpdGVtcyBlbiBsYSBwYXJ0ZSBzdXBlcmlvciAqL1xuICBhc3luYyBsb2FkVG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5oYXNNb3JlVG9wKCkgfHwgdGhpcy5zdGF0ZSgpID09PSAnbG9hZGluZycpIHJldHVybjtcbiAgICBpZiAoIXRoaXMucHJvcHMuZGF0YVNvdXJjZS5sb2FkRm4pIHJldHVybjtcblxuICAgIHRoaXMuc3RhdGUuc2V0KCdsb2FkaW5nJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zOiBMb2FkUGFyYW1zID0ge1xuICAgICAgICBkaXJlY3Rpb246ICd0b3AnLFxuICAgICAgICBwYWdlOiAwLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5tZXJnZWRQcm9wcy5wYWdlU2l6ZSA/PyAyMCxcbiAgICAgICAgZmlyc3RJdGVtOiB0aGlzLml0ZW1zKClbMF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVMb2FkKHBhcmFtcyk7XG5cbiAgICAgIHRoaXMuaXRlbXMudXBkYXRlKChjdXJyZW50KSA9PiBbLi4uKHJlc3VsdC5pdGVtcyBhcyBUW10pLCAuLi5jdXJyZW50XSk7XG4gICAgICB0aGlzLmhhc01vcmVUb3Auc2V0KHJlc3VsdC5oYXNNb3JlKTtcblxuICAgICAgdGhpcy5zdGF0ZS5zZXQoJ2lkbGUnKTtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWZyZXNoIC0gcmVjYXJnYXIgZGVzZGUgY2VybyAqL1xuICBhc3luYyByZWZyZXNoTGlzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmN1cnJlbnRDdXJzb3IgPSBudWxsO1xuICAgIHRoaXMuaGFzTW9yZUJvdHRvbS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWwoKTtcbiAgfVxuXG4gIC8qKiBSZWludGVudGFyIGRlc3B1ZXMgZGUgZXJyb3IgKi9cbiAgYXN5bmMgcmV0cnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgaWYgKHRoaXMuaXRlbXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkQm90dG9tKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc2V0IGNvbXBsZXRvICovXG4gIGFzeW5jIHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXRlbXMuc2V0KFtdKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmN1cnJlbnRDdXJzb3IgPSBudWxsO1xuICAgIHRoaXMuaGFzTW9yZUJvdHRvbS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYXNNb3JlVG9wLnNldChmYWxzZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5pc0luaXRpYWxMb2FkLnNldCh0cnVlKTtcbiAgICB0aGlzLnN0YXRlLnNldCgnaWRsZScpO1xuXG4gICAgaWYgKHRoaXMubWVyZ2VkUHJvcHMuYXV0b0xvYWQpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWwoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWdyZWdhciBpdGVtcyBhbCBpbmljaW8gKi9cbiAgcHJlcGVuZEl0ZW1zKG5ld0l0ZW1zOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnVwZGF0ZSgoY3VycmVudCkgPT4gWy4uLm5ld0l0ZW1zLCAuLi5jdXJyZW50XSk7XG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gIH1cblxuICAvKiogQWdyZWdhciBpdGVtcyBhbCBmaW5hbCAqL1xuICBhcHBlbmRJdGVtcyhuZXdJdGVtczogVFtdKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoKGN1cnJlbnQpID0+IFsuLi5jdXJyZW50LCAuLi5uZXdJdGVtc10pO1xuICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICB9XG5cbiAgLyoqIEFjdHVhbGl6YXIgdW4gaXRlbSBwb3IgaW5kaWNlICovXG4gIHVwZGF0ZUl0ZW0oaW5kZXg6IG51bWJlciwgaXRlbTogVCk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXMudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gWy4uLmN1cnJlbnRdO1xuICAgICAgdXBkYXRlZFtpbmRleF0gPSBpdGVtO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gIH1cblxuICAvKiogUmVtb3ZlciB1biBpdGVtIHBvciBpbmRpY2UgKi9cbiAgcmVtb3ZlSXRlbShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoKGN1cnJlbnQpID0+IGN1cnJlbnQuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpO1xuICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXIgcGFyYSBldmVudG8gZGUgaW5maW5pdGUgc2Nyb2xsICovXG4gIGFzeW5jIG9uSW5maW5pdGVTY3JvbGwoZXZlbnQ6IEN1c3RvbUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkQm90dG9tKCk7XG4gICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MSW9uSW5maW5pdGVTY3JvbGxFbGVtZW50KS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXIgcGFyYSBldmVudG8gZGUgcmVmcmVzaCAqL1xuICBhc3luYyBvblJlZnJlc2hUcmlnZ2VyZWQoZXZlbnQ6IFJlZnJlc2hFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVmcmVzaC5lbWl0KGV2ZW50KTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hMaXN0KCk7XG4gICAgZXZlbnQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxvYWQocGFyYW1zOiBMb2FkUGFyYW1zKTogUHJvbWlzZTxMb2FkUmVzdWx0PHVua25vd24+PiB7XG4gICAgY29uc3QgbG9hZEZuID0gdGhpcy5wcm9wcy5kYXRhU291cmNlLmxvYWRGbiE7XG4gICAgY29uc3QgcmVzdWx0ID0gbG9hZEZuKHBhcmFtcyk7XG5cbiAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbShyZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvci5zZXQoZXJyKTtcbiAgICB0aGlzLnN0YXRlLnNldCgnZXJyb3InKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoJ2Vycm9yJyk7XG4gICAgdGhpcy5lcnJvck9jY3VycmVkLmVtaXQoZXJyKTtcbiAgICBjb25zb2xlLmVycm9yKCdbSW5maW5pdGVMaXN0XSBFcnJvciBsb2FkaW5nIGl0ZW1zOicsIGVycik7XG4gIH1cbn1cbiJdfQ==