@annalib/anna-core 20.3.0 → 20.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +28 -24
  2. package/{esm2020 → esm2022}/annalib-anna-core.mjs +4 -4
  3. package/esm2022/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +12 -0
  4. package/esm2022/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +11 -0
  5. package/esm2022/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +11 -0
  6. package/esm2022/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +46 -0
  7. package/esm2022/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +12 -0
  8. package/esm2022/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -0
  9. package/esm2022/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +11 -0
  10. package/esm2022/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +20 -0
  11. package/esm2022/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +12 -0
  12. package/esm2022/lib/anna-core-shared-lib/constants/shared.constant.mjs +47 -0
  13. package/esm2022/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +266 -0
  14. package/esm2022/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +46 -0
  15. package/esm2022/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +41 -0
  16. package/esm2022/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +2 -0
  17. package/esm2022/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +2 -0
  18. package/esm2022/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +22 -0
  19. package/esm2022/lib/anna-core-shared-lib/models/anna-sort.model.mjs +7 -0
  20. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +30 -30
  21. package/esm2022/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +39 -0
  22. package/esm2022/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +27 -0
  23. package/esm2022/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +21 -0
  24. package/esm2022/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +53 -0
  25. package/esm2022/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +27 -0
  26. package/esm2022/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +17 -0
  27. package/esm2022/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +229 -0
  28. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +1265 -0
  29. package/esm2022/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +149 -0
  30. package/esm2022/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +135 -0
  31. package/esm2022/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +59 -0
  32. package/esm2022/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +64 -0
  33. package/esm2022/lib/anna-core-shared-lib/services/anna-sort.service.mjs +176 -0
  34. package/esm2022/lib/anna-core.module.mjs +222 -0
  35. package/esm2022/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +160 -0
  36. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +359 -0
  37. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +256 -0
  38. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +186 -0
  39. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +316 -0
  40. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +295 -0
  41. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +870 -0
  42. package/esm2022/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +68 -0
  43. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +353 -0
  44. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +204 -0
  45. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +1 -1
  46. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +186 -0
  47. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +1 -1
  48. package/esm2022/public-api.mjs +59 -0
  49. package/fesm2022/annalib-anna-core.mjs +6111 -0
  50. package/fesm2022/annalib-anna-core.mjs.map +1 -0
  51. package/index.d.ts +5 -5
  52. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +5 -8
  53. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +5 -8
  54. package/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.d.ts +5 -0
  55. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +15 -17
  56. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +5 -8
  57. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -11
  58. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +5 -8
  59. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +9 -12
  60. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +5 -8
  61. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +45 -41
  62. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +34 -34
  63. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +16 -16
  64. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +10 -10
  65. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +16 -16
  66. package/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +97 -97
  67. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +128 -118
  68. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +11 -11
  69. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +25 -25
  70. package/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.d.ts +9 -0
  71. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +9 -9
  72. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +7 -8
  73. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -9
  74. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +9 -9
  75. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +7 -7
  76. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +30 -28
  77. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +154 -154
  78. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +27 -27
  79. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -21
  80. package/lib/anna-core-shared-lib/services/anna-number-format.service.d.ts +8 -8
  81. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +8 -9
  82. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +18 -18
  83. package/lib/anna-core.module.d.ts +45 -43
  84. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +45 -45
  85. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +70 -70
  86. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +60 -60
  87. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +53 -53
  88. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +65 -65
  89. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +83 -83
  90. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +175 -174
  91. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +17 -17
  92. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -141
  93. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -89
  94. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -1
  95. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -45
  96. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -1
  97. package/package.json +13 -18
  98. package/public-api.d.ts +42 -41
  99. package/src/lib/anna-common-scss/_animate.scss +27 -27
  100. package/src/lib/anna-common-scss/_application-spacing.scss +7 -6
  101. package/src/lib/anna-common-scss/_bootstrap-tooltip.scss +27 -25
  102. package/src/lib/anna-common-scss/_button.scss +18 -18
  103. package/src/lib/anna-common-scss/_colors.scss +107 -107
  104. package/src/lib/anna-common-scss/_common-order-listing-table.scss +176 -165
  105. package/src/lib/anna-common-scss/_custom-anna-datepicker.scss +14 -14
  106. package/src/lib/anna-common-scss/_customDropdown.scss +123 -122
  107. package/src/lib/anna-common-scss/_dashboard-partials.scss +106 -104
  108. package/src/lib/anna-common-scss/_date-picker-form.scss +87 -87
  109. package/src/lib/anna-common-scss/_easy-filter.scss +138 -158
  110. package/src/lib/anna-common-scss/_edit-filter-popup.scss +70 -71
  111. package/src/lib/anna-common-scss/_filters.scss +724 -713
  112. package/src/lib/anna-common-scss/_font.scss +9 -10
  113. package/src/lib/anna-common-scss/_fonts.scss +86 -86
  114. package/src/lib/anna-common-scss/_generic-modal.scss +63 -59
  115. package/src/lib/anna-common-scss/_generic-table-common.scss +198 -203
  116. package/src/lib/anna-common-scss/_gt-table.scss +425 -434
  117. package/src/lib/anna-common-scss/_icons.scss +3 -0
  118. package/src/lib/anna-common-scss/_legend.scss +11 -11
  119. package/src/lib/anna-common-scss/_mat-button-toggle.scss +38 -38
  120. package/src/lib/anna-common-scss/_mat-menu.scss +17 -17
  121. package/src/lib/anna-common-scss/_mixins.scss +187 -188
  122. package/src/lib/anna-common-scss/_modal.scss +37 -37
  123. package/src/lib/anna-common-scss/_popup-filter-toggle-button.scss +36 -0
  124. package/src/lib/anna-common-scss/_scrollbar.scss +14 -14
  125. package/src/lib/anna-common-scss/_sort.scss +30 -30
  126. package/src/lib/anna-common-scss/_toggle.scss +86 -84
  127. package/src/lib/anna-common-scss/style.scss +1 -1
  128. package/src/lib/anna-common-scss/third-party-lib/_angular-material-mat-radio.scss +25 -21
  129. package/src/lib/anna-common-scss/third-party-lib/_anna-mat-button-toggle-group-size-lg.scss +34 -0
  130. package/src/lib/anna-common-scss/third-party-lib/_mat-autocomplete.scss +31 -28
  131. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +0 -15
  132. package/esm2020/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +0 -14
  133. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +0 -36
  134. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +0 -15
  135. package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +0 -22
  136. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +0 -14
  137. package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +0 -23
  138. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +0 -15
  139. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -43
  140. package/esm2020/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +0 -284
  141. package/esm2020/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +0 -43
  142. package/esm2020/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +0 -36
  143. package/esm2020/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +0 -2
  144. package/esm2020/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +0 -2
  145. package/esm2020/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +0 -11
  146. package/esm2020/lib/anna-core-shared-lib/models/anna-sort.model.mjs +0 -7
  147. package/esm2020/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +0 -26
  148. package/esm2020/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +0 -22
  149. package/esm2020/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +0 -53
  150. package/esm2020/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +0 -25
  151. package/esm2020/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +0 -16
  152. package/esm2020/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +0 -208
  153. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -1145
  154. package/esm2020/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +0 -151
  155. package/esm2020/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +0 -132
  156. package/esm2020/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +0 -53
  157. package/esm2020/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +0 -66
  158. package/esm2020/lib/anna-core-shared-lib/services/anna-sort.service.mjs +0 -175
  159. package/esm2020/lib/anna-core.module.mjs +0 -213
  160. package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +0 -151
  161. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -364
  162. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +0 -237
  163. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +0 -180
  164. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +0 -306
  165. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +0 -291
  166. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -781
  167. package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +0 -64
  168. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  169. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -189
  170. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -178
  171. package/esm2020/public-api.mjs +0 -57
  172. package/fesm2015/annalib-anna-core.mjs +0 -5782
  173. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  174. package/fesm2020/annalib-anna-core.mjs +0 -5774
  175. package/fesm2020/annalib-anna-core.mjs.map +0 -1
@@ -1,64 +0,0 @@
1
- // Angular import statements
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { SortTypeEnum } from '../../../anna-core-shared-lib/models/anna-sort.model';
4
- import { AnnaSortService } from '../../../anna-core-shared-lib/services/anna-sort.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../../anna-core-shared-lib/services/anna-sort.service";
7
- import * as i2 from "@angular/common";
8
- //Add onChange push change detection
9
- export class AnnaSortComponent {
10
- constructor(annaSortService) {
11
- this.annaSortService = annaSortService;
12
- this.sortOptionClicked = new EventEmitter();
13
- this.sortOptions = [
14
- {
15
- sortType: SortTypeEnum.ASC,
16
- isOptionActive: false,
17
- text: 'A to Z',
18
- },
19
- {
20
- sortType: SortTypeEnum.DESC,
21
- isOptionActive: false,
22
- text: 'Z to A',
23
- },
24
- {
25
- sortType: SortTypeEnum.DEFAULT,
26
- isOptionActive: false,
27
- text: 'Default',
28
- },
29
- ];
30
- }
31
- ngOnChanges(changes) {
32
- if (changes["sortObjectKey"] && changes["sortObjectKey"].currentValue) {
33
- let sortType = this.annaSortService.columnSortState.get(this.sortObjectKey);
34
- this.setSortType(sortType);
35
- }
36
- }
37
- sortOptionChanged(index, sortType) {
38
- this.sortOptions.forEach((item) => (item.isOptionActive = false));
39
- this.sortOptions[index].isOptionActive = true;
40
- this.sortOptionClicked.emit(sortType);
41
- }
42
- ngOnInit() {
43
- this.annaSortService.updateSortTypeSubject.subscribe((item) => {
44
- this.setSortType(item);
45
- });
46
- }
47
- setSortType(option) {
48
- option = option ? option : SortTypeEnum.DEFAULT;
49
- this.sortOptions.forEach(item => item.isOptionActive = false);
50
- let index = this.sortOptions.findIndex(item => item.sortType == option);
51
- this.sortOptions[index].isOptionActive = true;
52
- }
53
- }
54
- AnnaSortComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AnnaSortComponent, deps: [{ token: i1.AnnaSortService }], target: i0.ɵɵFactoryTarget.Component });
55
- AnnaSortComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AnnaSortComponent, selector: "anna-core-sort-lib", inputs: { sortObjectKey: "sortObjectKey" }, outputs: { sortOptionClicked: "sortOptionClicked" }, usesOnChanges: true, ngImport: i0, template: "<p class=\"sort-container\">\r\n <button\r\n class=\"sort-btn\"\r\n *ngFor=\"let option of sortOptions; let i = index\"\r\n (click)=\"sortOptionChanged(i, option.sortType)\"\r\n [ngClass]=\"{ active: option.isOptionActive }\"\r\n >\r\n {{option.text}}\r\n </button>\r\n</p>", styles: [".sort-btn{background:white;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AnnaSortComponent, decorators: [{
57
- type: Component,
58
- args: [{ selector: 'anna-core-sort-lib', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p class=\"sort-container\">\r\n <button\r\n class=\"sort-btn\"\r\n *ngFor=\"let option of sortOptions; let i = index\"\r\n (click)=\"sortOptionChanged(i, option.sortType)\"\r\n [ngClass]=\"{ active: option.isOptionActive }\"\r\n >\r\n {{option.text}}\r\n </button>\r\n</p>", styles: [".sort-btn{background:white;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}\n"] }]
59
- }], ctorParameters: function () { return [{ type: i1.AnnaSortService }]; }, propDecorators: { sortObjectKey: [{
60
- type: Input
61
- }], sortOptionClicked: [{
62
- type: Output
63
- }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1zb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLXNvcnQvYW5uYS1zb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLXNvcnQvYW5uYS1zb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQXdCLFlBQVksRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7OztBQUUzRixvQ0FBb0M7QUFPcEMsTUFBTSxPQUFPLGlCQUFpQjtJQXVCNUIsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBcEIxQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRTNELGdCQUFXLEdBQWlCO1lBQzFCO2dCQUNFLFFBQVEsRUFBRSxZQUFZLENBQUMsR0FBRztnQkFDMUIsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCLElBQUksRUFBRSxRQUFRO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUk7Z0JBQzNCLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixJQUFJLEVBQUUsUUFBUTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFlBQVksQ0FBQyxPQUFPO2dCQUM5QixjQUFjLEVBQUUsS0FBSztnQkFDckIsSUFBSSxFQUFFLFNBQVM7YUFDaEI7U0FDRixDQUFDO0lBRXFELENBQUM7SUFFeEQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUFZLEVBQUM7WUFDbkUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVCO0lBRUgsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWEsRUFBRSxRQUFrQjtRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWM7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ2hELENBQUM7OzhHQWxEVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnTENaOUIsK1RBU0k7MkZER1MsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNO3NHQUl0QyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU29ydE9wdGlvbiwgU29ydFR5cGUsIFNvcnRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXNvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZSc7XHJcblxyXG4vL0FkZCBvbkNoYW5nZSBwdXNoIGNoYW5nZSBkZXRlY3Rpb25cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbm5hLWNvcmUtc29ydC1saWInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbm5hLXNvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FubmEtc29ydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hU29ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcclxuICBcclxuICBASW5wdXQoKSBzb3J0T2JqZWN0S2V5OiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHNvcnRPcHRpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0VHlwZT4oKTtcclxuXHJcbiAgc29ydE9wdGlvbnM6IFNvcnRPcHRpb25bXSA9IFtcclxuICAgIHtcclxuICAgICAgc29ydFR5cGU6IFNvcnRUeXBlRW51bS5BU0MsXHJcbiAgICAgIGlzT3B0aW9uQWN0aXZlOiBmYWxzZSxcclxuICAgICAgdGV4dDogJ0EgdG8gWicsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzb3J0VHlwZTogU29ydFR5cGVFbnVtLkRFU0MsXHJcbiAgICAgIGlzT3B0aW9uQWN0aXZlOiBmYWxzZSxcclxuICAgICAgdGV4dDogJ1ogdG8gQScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBzb3J0VHlwZTogU29ydFR5cGVFbnVtLkRFRkFVTFQsXHJcbiAgICAgIGlzT3B0aW9uQWN0aXZlOiBmYWxzZSxcclxuICAgICAgdGV4dDogJ0RlZmF1bHQnLFxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlKSB7fVxyXG4gIFxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmKGNoYW5nZXNbXCJzb3J0T2JqZWN0S2V5XCJdICYmIGNoYW5nZXNbXCJzb3J0T2JqZWN0S2V5XCJdLmN1cnJlbnRWYWx1ZSl7XHJcbiAgICAgIGxldCBzb3J0VHlwZSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5nZXQodGhpcy5zb3J0T2JqZWN0S2V5KTtcclxuICAgICAgdGhpcy5zZXRTb3J0VHlwZShzb3J0VHlwZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgc29ydE9wdGlvbkNoYW5nZWQoaW5kZXg6IG51bWJlciwgc29ydFR5cGU6IFNvcnRUeXBlKSB7XHJcbiAgICB0aGlzLnNvcnRPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLmlzT3B0aW9uQWN0aXZlID0gZmFsc2UpKTtcclxuICAgIHRoaXMuc29ydE9wdGlvbnNbaW5kZXhdLmlzT3B0aW9uQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuc29ydE9wdGlvbkNsaWNrZWQuZW1pdChzb3J0VHlwZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnVwZGF0ZVNvcnRUeXBlU3ViamVjdC5zdWJzY3JpYmUoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnNldFNvcnRUeXBlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTb3J0VHlwZShvcHRpb246IHN0cmluZyl7XHJcbiAgICBvcHRpb24gPSBvcHRpb24gPyBvcHRpb24gOlNvcnRUeXBlRW51bS5ERUZBVUxUO1xyXG4gICAgdGhpcy5zb3J0T3B0aW9ucy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5pc09wdGlvbkFjdGl2ZSA9IGZhbHNlKTtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuc29ydE9wdGlvbnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5zb3J0VHlwZSA9PSBvcHRpb24pO1xyXG4gICAgdGhpcy5zb3J0T3B0aW9uc1tpbmRleF0uaXNPcHRpb25BY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxufVxyXG4iLCI8cCBjbGFzcz1cInNvcnQtY29udGFpbmVyXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJzb3J0LWJ0blwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzb3J0T3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNvcnRPcHRpb25DaGFuZ2VkKGksIG9wdGlvbi5zb3J0VHlwZSlcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBvcHRpb24uaXNPcHRpb25BY3RpdmUgfVwiXHJcbiAgICA+XHJcbiAgICAgICAge3tvcHRpb24udGV4dH19XHJcbiAgICA8L2J1dHRvbj5cclxuPC9wPiJdfQ==
@@ -1,357 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { Directionality } from "@angular/cdk/bidi";
9
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, Input, NgZone, Optional, Output, ViewChild, ViewEncapsulation } from "@angular/core";
10
- import { animationFrameScheduler, asapScheduler, Observable, Subject, Subscription } from "rxjs";
11
- import { auditTime, startWith, takeUntil } from "rxjs/operators";
12
- import { CdkVirtualScrollViewport, CdkScrollable, VIRTUAL_SCROLL_STRATEGY, ScrollDispatcher, ViewportRuler } from "@angular/cdk/scrolling";
13
- import { AnnaGtHelperService } from '../../../anna-core-shared-lib/services/anna-generic-table.service';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@angular/cdk/bidi";
16
- import * as i2 from "@angular/cdk/scrolling";
17
- import * as i3 from "../../../anna-core-shared-lib/services/anna-generic-table.service";
18
- /** Checks if the given ranges are equal. */
19
- function rangesEqual(r1, r2) {
20
- return r1.start == r2.start && r1.end == r2.end;
21
- }
22
- /**
23
- * Scheduler to be used for scroll events. Needs to fall back to
24
- * something that doesn't rely on requestAnimationFrame on environments
25
- * that don't support it (e.g. server-side rendering).
26
- */
27
- const SCROLL_SCHEDULER = typeof requestAnimationFrame !== "undefined"
28
- ? animationFrameScheduler
29
- : asapScheduler;
30
- /**
31
- * A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`.
32
- * Uses `top: #px` instead of `transform: translateY(#px)` like the cdk virtual scroll viewport does
33
- * which avoids flickering of elements in the transformed container with `position: sticky`.
34
- */
35
- export class AnnaTableVirtualScrollViewportComponent extends CdkScrollable {
36
- constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler, annaGtService) {
37
- super(elementRef, scrollDispatcher, ngZone, dir);
38
- this.elementRef = elementRef;
39
- this._changeDetectorRef = _changeDetectorRef;
40
- this._scrollStrategy = _scrollStrategy;
41
- this.annaGtService = annaGtService;
42
- /** Emits when the viewport is detached from a CdkVirtualForOf. */
43
- this._detachedSubject = new Subject();
44
- /** Emits when the rendered range changes. */
45
- this._renderedRangeSubject = new Subject();
46
- this._orientation = "vertical";
47
- // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll
48
- // strategy lazily (i.e. only if the user is actually listening to the events). We do this because
49
- // depending on how the strategy calculates the scrolled index, it may come at a cost to
50
- // performance.
51
- /** Emits when the index of the first element visible in the viewport changes. */
52
- this.scrolledIndexChange = new Observable((observer) => this._scrollStrategy.scrolledIndexChange.subscribe(index => Promise.resolve().then(() => this.ngZone.run(() => observer.next(index)))));
53
- /** A stream that emits whenever the rendered range changes. */
54
- this.renderedRangeStream = this._renderedRangeSubject;
55
- /**
56
- * The total size of all content (in pixels), including content that is not currently rendered.
57
- */
58
- this._totalContentSize = 0;
59
- /** A string representing the `style.width` property value to be used for the spacer element. */
60
- this._totalContentWidth = "";
61
- /** A string representing the `style.height` property value to be used for the spacer element. */
62
- this._totalContentHeight = "";
63
- /** The currently rendered range of indices. */
64
- this._renderedRange = { start: 0, end: 0 };
65
- /** The length of the data bound to this viewport (in number of items). */
66
- this._dataLength = 0;
67
- /** The size of the viewport (in pixels). */
68
- this._viewportSize = 0;
69
- /** The last rendered content offset that was set. */
70
- this._renderedContentOffset = 0;
71
- /**
72
- * Whether the last rendered content offset was to the end of the content (and therefore needs to
73
- * be rewritten as an offset to the start of the content).
74
- */
75
- this._renderedContentOffsetNeedsRewrite = false;
76
- /** Whether there is a pending change detection cycle. */
77
- this._isChangeDetectionPending = false;
78
- /** A list of functions to run after the next change detection cycle. */
79
- this._runAfterChangeDetection = [];
80
- /** Subscription to changes in the viewport size. */
81
- this._viewportChanges = Subscription.EMPTY;
82
- if (!_scrollStrategy) {
83
- throw Error('Error: cdk-virtual-scroll-viewport requires the "itemSize" property to be set.');
84
- }
85
- this._viewportChanges = viewportRuler.change().subscribe(() => {
86
- this.checkViewportSize();
87
- });
88
- }
89
- /** The direction the viewport scrolls. */
90
- get orientation() {
91
- return this._orientation;
92
- }
93
- set orientation(orientation) {
94
- if (this._orientation !== orientation) {
95
- this._orientation = orientation;
96
- this._calculateSpacerSize();
97
- }
98
- }
99
- ngOnInit() {
100
- super.ngOnInit();
101
- // It's still too early to measure the viewport at this point. Deferring with a promise allows
102
- // the Viewport to be rendered with the correct size before we measure. We run this outside the
103
- // zone to avoid causing more change detection cycles. We handle the change detection loop
104
- // ourselves instead.
105
- this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {
106
- this._measureViewportSize();
107
- this._scrollStrategy.attach(this);
108
- this.elementScrolled()
109
- .pipe(
110
- // Start off with a fake scroll event so we properly detect our initial position.
111
- startWith(null),
112
- // Collect multiple events into one until the next animation frame. This way if
113
- // there are multiple scroll events in the same frame we only need to recheck
114
- // our layout once.
115
- auditTime(0, SCROLL_SCHEDULER))
116
- .subscribe(() => { this._scrollStrategy.onContentScrolled(); this.annaGtService.virtualScrollSubject.next(true); });
117
- this._markChangeDetectionNeeded();
118
- }));
119
- }
120
- ngOnDestroy() {
121
- this.detach();
122
- this._scrollStrategy.detach();
123
- // Complete all subjects
124
- this._renderedRangeSubject.complete();
125
- this._detachedSubject.complete();
126
- this._viewportChanges.unsubscribe();
127
- super.ngOnDestroy();
128
- }
129
- /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */
130
- attach(forOf) {
131
- if (this._forOf) {
132
- throw Error("CdkVirtualScrollViewport is already attached.");
133
- }
134
- // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length
135
- // changes. Run outside the zone to avoid triggering change detection, since we're managing the
136
- // change detection loop ourselves.
137
- this.ngZone.runOutsideAngular(() => {
138
- this._forOf = forOf;
139
- this._forOf.dataStream
140
- .pipe(takeUntil(this._detachedSubject))
141
- .subscribe(data => {
142
- const newLength = data.length;
143
- if (newLength !== this._dataLength) {
144
- this._dataLength = newLength;
145
- this._scrollStrategy.onDataLengthChanged();
146
- }
147
- this._doChangeDetection();
148
- });
149
- });
150
- }
151
- /** Detaches the current `CdkVirtualForOf`. */
152
- detach() {
153
- this._forOf = null;
154
- this._detachedSubject.next();
155
- }
156
- /** Gets the length of the data bound to this viewport (in number of items). */
157
- getDataLength() {
158
- return this._dataLength;
159
- }
160
- /** Gets the size of the viewport (in pixels). */
161
- getViewportSize() {
162
- return this._viewportSize;
163
- }
164
- // TODO(mmalerba): This is technically out of sync with what's really rendered until a render
165
- // cycle happens. I'm being careful to only call it after the render cycle is complete and before
166
- // setting it to something else, but its error prone and should probably be split into
167
- // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.
168
- /** Get the current rendered range of items. */
169
- getRenderedRange() {
170
- return this._renderedRange;
171
- }
172
- /**
173
- * Sets the total size of all content (in pixels), including content that is not currently
174
- * rendered.
175
- */
176
- setTotalContentSize(size) {
177
- if (this._totalContentSize !== size) {
178
- this._totalContentSize = size;
179
- this._calculateSpacerSize();
180
- this._markChangeDetectionNeeded();
181
- }
182
- }
183
- /** Sets the currently rendered range of indices. */
184
- setRenderedRange(range) {
185
- if (!rangesEqual(this._renderedRange, range)) {
186
- this._renderedRangeSubject.next((this._renderedRange = range));
187
- this._markChangeDetectionNeeded(() => this._scrollStrategy.onContentRendered());
188
- }
189
- }
190
- /**
191
- * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).
192
- */
193
- getOffsetToRenderedContentStart() {
194
- return this._renderedContentOffsetNeedsRewrite
195
- ? null
196
- : this._renderedContentOffset;
197
- }
198
- /**
199
- * Sets the offset from the start of the viewport to either the start or end of the rendered data
200
- * (in pixels).
201
- */
202
- setRenderedContentOffset(offset) {
203
- let top = `${Number(offset)}px`;
204
- this._renderedContentOffset = offset;
205
- if (this._renderedContentTransform != top) {
206
- // We know this value is safe because we parse `offset` with `Number()` before passing it
207
- // into the string.
208
- this._renderedContentTransform = top;
209
- this._markChangeDetectionNeeded(() => {
210
- if (this._renderedContentOffsetNeedsRewrite) {
211
- this._renderedContentOffset -= this.measureRenderedContentSize();
212
- this._renderedContentOffsetNeedsRewrite = false;
213
- this.setRenderedContentOffset(this._renderedContentOffset);
214
- }
215
- else {
216
- this._scrollStrategy.onRenderedOffsetChanged();
217
- }
218
- });
219
- }
220
- }
221
- /**
222
- * Scrolls to the given offset from the start of the viewport. Please note that this is not always
223
- * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left
224
- * direction, this would be the equivalent of setting a fictional `scrollRight` property.
225
- * @param offset The offset to scroll to.
226
- * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
227
- */
228
- scrollToOffset(offset, behavior = "auto") {
229
- const options = { behavior, top: offset };
230
- this.scrollTo(options);
231
- }
232
- /**
233
- * Scrolls to the offset for the given index.
234
- * @param index The index of the element to scroll to.
235
- * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.
236
- */
237
- scrollToIndex(index, behavior = "auto") {
238
- this._scrollStrategy.scrollToIndex(index, behavior);
239
- }
240
- /**
241
- * Gets the current scroll offset from the start of the viewport (in pixels).
242
- * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'
243
- * in horizontal mode.
244
- */
245
- // CHANGES@ANNALIB added override to functions
246
- measureScrollOffset(from) {
247
- return from
248
- ? super.measureScrollOffset(from)
249
- : super.measureScrollOffset("top");
250
- }
251
- /** Measure the combined size of all of the rendered items. */
252
- measureRenderedContentSize() {
253
- const contentEl = this._contentWrapper.nativeElement;
254
- return contentEl.offsetHeight;
255
- }
256
- /**
257
- * Measure the total combined size of the given range. Throws if the range includes items that are
258
- * not rendered.
259
- */
260
- measureRangeSize(range) {
261
- if (!this._forOf) {
262
- return 0;
263
- }
264
- return this._forOf.measureRangeSize(range, this.orientation);
265
- }
266
- /** Update the viewport dimensions and re-render. */
267
- checkViewportSize() {
268
- // TODO: Cleanup later when add logic for handling content resize
269
- this._measureViewportSize();
270
- this._scrollStrategy.onDataLengthChanged();
271
- }
272
- /** Measure the viewport size. */
273
- _measureViewportSize() {
274
- const viewportEl = this.elementRef.nativeElement;
275
- this._viewportSize = viewportEl.clientHeight;
276
- }
277
- /** Queue up change detection to run. */
278
- _markChangeDetectionNeeded(runAfter) {
279
- if (runAfter) {
280
- this._runAfterChangeDetection.push(runAfter);
281
- }
282
- // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of
283
- // properties sequentially we only have to run `_doChangeDetection` once at the end.
284
- if (!this._isChangeDetectionPending) {
285
- this._isChangeDetectionPending = true;
286
- this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {
287
- this._doChangeDetection();
288
- }));
289
- }
290
- }
291
- /** Run change detection. */
292
- _doChangeDetection() {
293
- this._isChangeDetectionPending = false;
294
- // Apply the content transform. The transform can't be set via an Angular binding because
295
- // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of
296
- // string literals, a variable that can only be 'X' or 'Y', and user input that is run through
297
- // the `Number` function first to coerce it to a numeric value.
298
- this._contentWrapper.nativeElement.style.top = this._renderedContentTransform;
299
- // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection
300
- // from the root, since the repeated items are content projected in. Calling `detectChanges`
301
- // instead does not properly check the projected content.
302
- this.ngZone.run(() => this._changeDetectorRef.markForCheck());
303
- const runAfterChangeDetection = this._runAfterChangeDetection;
304
- this._runAfterChangeDetection = [];
305
- for (const fn of runAfterChangeDetection) {
306
- fn();
307
- }
308
- }
309
- /** Calculates the `style.width` and `style.height` for the spacer element. */
310
- _calculateSpacerSize() {
311
- this._totalContentHeight = `${this._totalContentSize}px`;
312
- this._totalContentWidth = "";
313
- }
314
- }
315
- AnnaTableVirtualScrollViewportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AnnaTableVirtualScrollViewportComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: VIRTUAL_SCROLL_STRATEGY, optional: true }, { token: i1.Directionality, optional: true }, { token: i2.ScrollDispatcher }, { token: i2.ViewportRuler }, { token: i3.AnnaGtHelperService }], target: i0.ɵɵFactoryTarget.Component });
316
- AnnaTableVirtualScrollViewportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AnnaTableVirtualScrollViewportComponent, selector: "anna-table-virtual-scroll-viewport", inputs: { orientation: "orientation" }, outputs: { scrolledIndexChange: "scrolledIndexChange" }, host: { properties: { "class.anna-table-virtual-scroll-orientation-horizontal": "orientation === \"horizontal\"", "class.anna-table-virtual-scroll-orientation-vertical": "orientation !== \"horizontal\"" }, classAttribute: "anna-table-virtual-scroll-viewport" }, providers: [
317
- {
318
- provide: CdkScrollable,
319
- useExisting: AnnaTableVirtualScrollViewportComponent
320
- },
321
- {
322
- provide: CdkVirtualScrollViewport,
323
- useExisting: AnnaTableVirtualScrollViewportComponent
324
- }
325
- ], viewQueries: [{ propertyName: "_contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\r\n Wrap the rendered content in an element that will be used to offset it based on the scroll\r\n position.\r\n-->\r\n<div #contentWrapper class=\"anna-table-virtual-scroll-content-wrapper\">\r\n\t<ng-content></ng-content>\r\n</div>\r\n<!--\r\n Spacer used to force the scrolling container to the correct size for the *total* number of items\r\n so that the scrollbar captures the size of the entire data set.\r\n-->\r\n<div class=\"app-table-virtual-scroll-spacer\" [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\">\r\n</div>", styles: ["anna-table-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;will-change:scroll-position;-webkit-overflow-scrolling:touch}.anna-table-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .anna-table-virtual-scroll-content-wrapper{right:0;left:auto}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper{min-height:100%}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper{min-width:100%}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.app-table-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .app-table-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AnnaTableVirtualScrollViewportComponent, decorators: [{
327
- type: Component,
328
- args: [{ selector: "anna-table-virtual-scroll-viewport", host: {
329
- class: "anna-table-virtual-scroll-viewport",
330
- "[class.anna-table-virtual-scroll-orientation-horizontal]": 'orientation === "horizontal"',
331
- "[class.anna-table-virtual-scroll-orientation-vertical]": 'orientation !== "horizontal"'
332
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
333
- {
334
- provide: CdkScrollable,
335
- useExisting: AnnaTableVirtualScrollViewportComponent
336
- },
337
- {
338
- provide: CdkVirtualScrollViewport,
339
- useExisting: AnnaTableVirtualScrollViewportComponent
340
- }
341
- ], template: "<!--\r\n Wrap the rendered content in an element that will be used to offset it based on the scroll\r\n position.\r\n-->\r\n<div #contentWrapper class=\"anna-table-virtual-scroll-content-wrapper\">\r\n\t<ng-content></ng-content>\r\n</div>\r\n<!--\r\n Spacer used to force the scrolling container to the correct size for the *total* number of items\r\n so that the scrollbar captures the size of the entire data set.\r\n-->\r\n<div class=\"app-table-virtual-scroll-spacer\" [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\">\r\n</div>", styles: ["anna-table-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;will-change:scroll-position;-webkit-overflow-scrolling:touch}.anna-table-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .anna-table-virtual-scroll-content-wrapper{right:0;left:auto}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper{min-height:100%}.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-horizontal .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper{min-width:100%}.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.app-table-virtual-scroll-orientation-vertical .anna-table-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.app-table-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .app-table-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}\n"] }]
342
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
343
- type: Optional
344
- }, {
345
- type: Inject,
346
- args: [VIRTUAL_SCROLL_STRATEGY]
347
- }] }, { type: i1.Directionality, decorators: [{
348
- type: Optional
349
- }] }, { type: i2.ScrollDispatcher }, { type: i2.ViewportRuler }, { type: i3.AnnaGtHelperService }]; }, propDecorators: { orientation: [{
350
- type: Input
351
- }], scrolledIndexChange: [{
352
- type: Output
353
- }], _contentWrapper: [{
354
- type: ViewChild,
355
- args: ["contentWrapper", { static: true }]
356
- }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC9hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0L2FubmEtdGFibGUtdmlydHVhbC1zY3JvbGwtdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsYUFBYSxFQUNiLFVBQVUsRUFDVixPQUFPLEVBRVAsWUFBWSxFQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBRWIsdUJBQXVCLEVBRXZCLGdCQUFnQixFQUNoQixhQUFhLEVBRWQsTUFBTSx3QkFBd0IsQ0FB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QUNUO1lBQ0UsT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLHVDQUF1QztTQUNyRDtRQUNEO1lBQ0UsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxXQUFXLEVBQUUsdUNBQXVDO1NBQ3JEO0tBQ0Ysa0xDeEZKLHFqQkFZTTsyRkQ4RVEsdUNBQXVDO2tCQXhCbkQsU0FBUzsrQkFDRSxvQ0FBb0MsUUFHeEM7d0JBQ0osS0FBSyxFQUFFLG9DQUFvQzt3QkFDM0MsMERBQTBELEVBQ3hELDhCQUE4Qjt3QkFDaEMsd0RBQXdELEVBQ3RELDhCQUE4QjtxQkFDakMsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyx5Q0FBeUM7eUJBQ3JEO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSx3QkFBd0I7NEJBQ2pDLFdBQVcseUNBQXlDO3lCQUNyRDtxQkFDRjs7MEJBZ0dFLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsdUJBQXVCOzswQkFFOUIsUUFBUTt5SUF2RlAsV0FBVztzQkFEZCxLQUFLO2dCQWlCSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBVXdDLGVBQWU7c0JBQTdELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcclxuICovXHJcblxyXG4gaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2JpZGlcIjtcclxuIGltcG9ydCB7IExpc3RSYW5nZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIjtcclxuIGltcG9ydCB7XHJcbiAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgQ29tcG9uZW50LFxyXG4gICBFbGVtZW50UmVmLFxyXG4gICBJbmplY3QsXHJcbiAgIElucHV0LFxyXG4gICBOZ1pvbmUsXHJcbiAgIE9uRGVzdHJveSxcclxuICAgT25Jbml0LFxyXG4gICBPcHRpb25hbCxcclxuICAgT3V0cHV0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdFbmNhcHN1bGF0aW9uXHJcbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbiBpbXBvcnQge1xyXG4gICBhbmltYXRpb25GcmFtZVNjaGVkdWxlcixcclxuICAgYXNhcFNjaGVkdWxlcixcclxuICAgT2JzZXJ2YWJsZSxcclxuICAgU3ViamVjdCxcclxuICAgT2JzZXJ2ZXIsXHJcbiAgIFN1YnNjcmlwdGlvblxyXG4gfSBmcm9tIFwicnhqc1wiO1xyXG4gaW1wb3J0IHsgYXVkaXRUaW1lLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG4gaW1wb3J0IHtcclxuICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxyXG4gICBDZGtTY3JvbGxhYmxlLFxyXG4gICBDZGtWaXJ0dWFsU2Nyb2xsUmVwZWF0ZXIsXHJcbiAgIFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLFxyXG4gICBWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3ksXHJcbiAgIFNjcm9sbERpc3BhdGNoZXIsXHJcbiAgIFZpZXdwb3J0UnVsZXIsXHJcbiAgIEV4dGVuZGVkU2Nyb2xsVG9PcHRpb25zXHJcbiB9IGZyb20gXCJAYW5ndWxhci9jZGsvc2Nyb2xsaW5nXCI7XHJcbmltcG9ydCB7IEFubmFHdEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWdlbmVyaWMtdGFibGUuc2VydmljZSc7XHJcbiBcclxuIC8qKiBDaGVja3MgaWYgdGhlIGdpdmVuIHJhbmdlcyBhcmUgZXF1YWwuICovXHJcbiBmdW5jdGlvbiByYW5nZXNFcXVhbChyMTogTGlzdFJhbmdlLCByMjogTGlzdFJhbmdlKTogYm9vbGVhbiB7XHJcbiAgIHJldHVybiByMS5zdGFydCA9PSByMi5zdGFydCAmJiByMS5lbmQgPT0gcjIuZW5kO1xyXG4gfVxyXG4gXHJcbiAvKipcclxuICAqIFNjaGVkdWxlciB0byBiZSB1c2VkIGZvciBzY3JvbGwgZXZlbnRzLiBOZWVkcyB0byBmYWxsIGJhY2sgdG9cclxuICAqIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgcmVseSBvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgb24gZW52aXJvbm1lbnRzXHJcbiAgKiB0aGF0IGRvbid0IHN1cHBvcnQgaXQgKGUuZy4gc2VydmVyLXNpZGUgcmVuZGVyaW5nKS5cclxuICAqL1xyXG4gY29uc3QgU0NST0xMX1NDSEVEVUxFUiA9XHJcbiAgIHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09IFwidW5kZWZpbmVkXCJcclxuICAgICA/IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyXHJcbiAgICAgOiBhc2FwU2NoZWR1bGVyO1xyXG4gXHJcbiAvKipcclxuICAqIEEgdmlld3BvcnQgdGhhdCB2aXJ0dWFsaXplcyBpdHMgc2Nyb2xsaW5nIHdpdGggdGhlIGhlbHAgb2YgYENka1ZpcnR1YWxGb3JPZmAuXHJcbiAgKiBVc2VzIGB0b3A6ICNweGAgaW5zdGVhZCBvZiBgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCNweClgIGxpa2UgdGhlIGNkayB2aXJ0dWFsIHNjcm9sbCB2aWV3cG9ydCBkb2VzXHJcbiAgKiB3aGljaCBhdm9pZHMgZmxpY2tlcmluZyBvZiBlbGVtZW50cyBpbiB0aGUgdHJhbnNmb3JtZWQgY29udGFpbmVyIHdpdGggYHBvc2l0aW9uOiBzdGlja3lgLlxyXG4gICovXHJcbiBAQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwiYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFwiLFxyXG4gICB0ZW1wbGF0ZVVybDogXCJhbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiYW5uYS10YWJsZS12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgaG9zdDoge1xyXG4gICAgIGNsYXNzOiBcImFubmEtdGFibGUtdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIixcclxuICAgICBcIltjbGFzcy5hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWxdXCI6XHJcbiAgICAgICAnb3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiJyxcclxuICAgICBcIltjbGFzcy5hbm5hLXRhYmxlLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsXVwiOlxyXG4gICAgICAgJ29yaWVudGF0aW9uICE9PSBcImhvcml6b250YWxcIidcclxuICAgfSxcclxuICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgIHByb3ZpZGVyczogW1xyXG4gICAgIHtcclxuICAgICAgIHByb3ZpZGU6IENka1Njcm9sbGFibGUsXHJcbiAgICAgICB1c2VFeGlzdGluZzogQW5uYVRhYmxlVmlydHVhbFNjcm9sbFZpZXdwb3J0Q29tcG9uZW50XHJcbiAgICAgfSxcclxuICAgICB7XHJcbiAgICAgICBwcm92aWRlOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXHJcbiAgICAgICB1c2VFeGlzdGluZzogQW5uYVRhYmxlVmlydHVhbFNjcm9sbFZpZXdwb3J0Q29tcG9uZW50XHJcbiAgICAgfVxyXG4gICBdXHJcbiB9KVxyXG4gZXhwb3J0IGNsYXNzIEFubmFUYWJsZVZpcnR1YWxTY3JvbGxWaWV3cG9ydENvbXBvbmVudCBleHRlbmRzIENka1Njcm9sbGFibGVcclxuICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgIC8qKiBFbWl0cyB3aGVuIHRoZSB2aWV3cG9ydCBpcyBkZXRhY2hlZCBmcm9tIGEgQ2RrVmlydHVhbEZvck9mLiAqL1xyXG4gICBwcml2YXRlIF9kZXRhY2hlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gXHJcbiAgIC8qKiBFbWl0cyB3aGVuIHRoZSByZW5kZXJlZCByYW5nZSBjaGFuZ2VzLiAqL1xyXG4gICBwcml2YXRlIF9yZW5kZXJlZFJhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PExpc3RSYW5nZT4oKTtcclxuIFxyXG4gICAvKiogVGhlIGRpcmVjdGlvbiB0aGUgdmlld3BvcnQgc2Nyb2xscy4gKi9cclxuICAgQElucHV0KClcclxuICAgZ2V0IG9yaWVudGF0aW9uKCkge1xyXG4gICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbjtcclxuICAgfVxyXG4gICBzZXQgb3JpZW50YXRpb24ob3JpZW50YXRpb246IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgaWYgKHRoaXMuX29yaWVudGF0aW9uICE9PSBvcmllbnRhdGlvbikge1xyXG4gICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcclxuICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKTtcclxuICAgICB9XHJcbiAgIH1cclxuICAgcHJpdmF0ZSBfb3JpZW50YXRpb246IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiID0gXCJ2ZXJ0aWNhbFwiO1xyXG4gXHJcbiAgIC8vIE5vdGU6IHdlIGRvbid0IHVzZSB0aGUgdHlwaWNhbCBFdmVudEVtaXR0ZXIgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gc3Vic2NyaWJlIHRvIHRoZSBzY3JvbGxcclxuICAgLy8gc3RyYXRlZ3kgbGF6aWx5IChpLmUuIG9ubHkgaWYgdGhlIHVzZXIgaXMgYWN0dWFsbHkgbGlzdGVuaW5nIHRvIHRoZSBldmVudHMpLiBXZSBkbyB0aGlzIGJlY2F1c2VcclxuICAgLy8gZGVwZW5kaW5nIG9uIGhvdyB0aGUgc3RyYXRlZ3kgY2FsY3VsYXRlcyB0aGUgc2Nyb2xsZWQgaW5kZXgsIGl0IG1heSBjb21lIGF0IGEgY29zdCB0b1xyXG4gICAvLyBwZXJmb3JtYW5jZS5cclxuICAgLyoqIEVtaXRzIHdoZW4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0IGNoYW5nZXMuICovXHJcbiAgIEBPdXRwdXQoKSBzY3JvbGxlZEluZGV4Q2hhbmdlOiBPYnNlcnZhYmxlPG51bWJlcj4gPSBuZXcgT2JzZXJ2YWJsZShcclxuICAgICAob2JzZXJ2ZXI6IE9ic2VydmVyPG51bWJlcj4pID0+XHJcbiAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShpbmRleCA9PlxyXG4gICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+XHJcbiAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQoaW5kZXgpKVxyXG4gICAgICAgICApXHJcbiAgICAgICApXHJcbiAgICk7XHJcbiBcclxuICAgLyoqIFRoZSBlbGVtZW50IHRoYXQgd3JhcHMgdGhlIHJlbmRlcmVkIGNvbnRlbnQuICovXHJcbiAgIEBWaWV3Q2hpbGQoXCJjb250ZW50V3JhcHBlclwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBfY29udGVudFdyYXBwZXI6IEVsZW1lbnRSZWY8XHJcbiAgICAgSFRNTEVsZW1lbnRcclxuICAgPjtcclxuIFxyXG4gICAvKiogQSBzdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgcmVuZGVyZWQgcmFuZ2UgY2hhbmdlcy4gKi9cclxuICAgcmVuZGVyZWRSYW5nZVN0cmVhbTogT2JzZXJ2YWJsZTxMaXN0UmFuZ2U+ID0gdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q7XHJcbiBcclxuICAgLyoqXHJcbiAgICAqIFRoZSB0b3RhbCBzaXplIG9mIGFsbCBjb250ZW50IChpbiBwaXhlbHMpLCBpbmNsdWRpbmcgY29udGVudCB0aGF0IGlzIG5vdCBjdXJyZW50bHkgcmVuZGVyZWQuXHJcbiAgICAqL1xyXG4gICBwcml2YXRlIF90b3RhbENvbnRlbnRTaXplID0gMDtcclxuIFxyXG4gICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgc3R5bGUud2lkdGhgIHByb3BlcnR5IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBzcGFjZXIgZWxlbWVudC4gKi9cclxuICAgX3RvdGFsQ29udGVudFdpZHRoID0gXCJcIjtcclxuIFxyXG4gICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgc3R5bGUuaGVpZ2h0YCBwcm9wZXJ0eSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgc3BhY2VyIGVsZW1lbnQuICovXHJcbiAgIF90b3RhbENvbnRlbnRIZWlnaHQgPSBcIlwiO1xyXG4gXHJcbiAgIC8qKlxyXG4gICAgKiBUaGUgQ1NTIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSByZW5kZXJlZCBzdWJzZXQgb2YgaXRlbXMgc28gdGhhdCB0aGV5IGFwcGVhciB3aXRoaW4gdGhlIGJvdW5kc1xyXG4gICAgKiBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC5cclxuICAgICovXHJcbiAgIHByaXZhdGUgX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybTogc3RyaW5nO1xyXG4gXHJcbiAgIC8qKiBUaGUgY3VycmVudGx5IHJlbmRlcmVkIHJhbmdlIG9mIGluZGljZXMuICovXHJcbiAgIHByaXZhdGUgX3JlbmRlcmVkUmFuZ2U6IExpc3RSYW5nZSA9IHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xyXG4gXHJcbiAgIC8qKiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGJvdW5kIHRvIHRoaXMgdmlld3BvcnQgKGluIG51bWJlciBvZiBpdGVtcykuICovXHJcbiAgIHByaXZhdGUgX2RhdGFMZW5ndGggPSAwO1xyXG4gXHJcbiAgIC8qKiBUaGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQgKGluIHBpeGVscykuICovXHJcbiAgIHByaXZhdGUgX3ZpZXdwb3J0U2l6ZSA9IDA7XHJcbiBcclxuICAgLyoqIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgQ2RrVmlydHVhbFNjcm9sbFJlcGVhdGVyLiAqL1xyXG4gICBwcml2YXRlIF9mb3JPZjogQ2RrVmlydHVhbFNjcm9sbFJlcGVhdGVyPGFueT4gfCBudWxsO1xyXG4gXHJcbiAgIC8qKiBUaGUgbGFzdCByZW5kZXJlZCBjb250ZW50IG9mZnNldCB0aGF0IHdhcyBzZXQuICovXHJcbiAgIHByaXZhdGUgX3JlbmRlcmVkQ29udGVudE9mZnNldCA9IDA7XHJcbiBcclxuICAgLyoqXHJcbiAgICAqIFdoZXRoZXIgdGhlIGxhc3QgcmVuZGVyZWQgY29udGVudCBvZmZzZXQgd2FzIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgKGFuZCB0aGVyZWZvcmUgbmVlZHMgdG9cclxuICAgICogYmUgcmV3cml0dGVuIGFzIGFuIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbnRlbnQpLlxyXG4gICAgKi9cclxuICAgcHJpdmF0ZSBfcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlID0gZmFsc2U7XHJcbiBcclxuICAgLyoqIFdoZXRoZXIgdGhlcmUgaXMgYSBwZW5kaW5nIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuICovXHJcbiAgIHByaXZhdGUgX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZyA9IGZhbHNlO1xyXG4gXHJcbiAgIC8qKiBBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHJ1biBhZnRlciB0aGUgbmV4dCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLiAqL1xyXG4gICBwcml2YXRlIF9ydW5BZnRlckNoYW5nZURldGVjdGlvbjogRnVuY3Rpb25bXSA9IFtdO1xyXG4gXHJcbiAgIC8qKiBTdWJzY3JpcHRpb24gdG8gY2hhbmdlcyBpbiB0aGUgdmlld3BvcnQgc2l6ZS4gKi9cclxuICAgcHJpdmF0ZSBfdmlld3BvcnRDaGFuZ2VzID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xyXG4gXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgIHB1YmxpYyBvdmVycmlkZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgQE9wdGlvbmFsKClcclxuICAgICBASW5qZWN0KFZJUlRVQUxfU0NST0xMX1NUUkFURUdZKVxyXG4gICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiBWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3ksXHJcbiAgICAgQE9wdGlvbmFsKCkgZGlyOiBEaXJlY3Rpb25hbGl0eSxcclxuICAgICBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxyXG4gICAgIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXHJcbiAgICAgcHJpdmF0ZSBhbm5hR3RTZXJ2aWNlOiBBbm5hR3RIZWxwZXJTZXJ2aWNlXHJcbiAgICkge1xyXG4gICAgIHN1cGVyKGVsZW1lbnRSZWYsIHNjcm9sbERpc3BhdGNoZXIsIG5nWm9uZSwgZGlyKTtcclxuIFxyXG4gICAgIGlmICghX3Njcm9sbFN0cmF0ZWd5KSB7XHJcbiAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgJ0Vycm9yOiBjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgcmVxdWlyZXMgdGhlIFwiaXRlbVNpemVcIiBwcm9wZXJ0eSB0byBiZSBzZXQuJ1xyXG4gICAgICAgKTtcclxuICAgICB9XHJcbiBcclxuICAgICB0aGlzLl92aWV3cG9ydENoYW5nZXMgPSB2aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XHJcbiAgICAgfSk7XHJcbiAgIH1cclxuIFxyXG4gICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gXHJcbiAgICAgLy8gSXQncyBzdGlsbCB0b28gZWFybHkgdG8gbWVhc3VyZSB0aGUgdmlld3BvcnQgYXQgdGhpcyBwb2ludC4gRGVmZXJyaW5nIHdpdGggYSBwcm9taXNlIGFsbG93c1xyXG4gICAgIC8vIHRoZSBWaWV3cG9ydCB0byBiZSByZW5kZXJlZCB3aXRoIHRoZSBjb3JyZWN0IHNpemUgYmVmb3JlIHdlIG1lYXN1cmUuIFdlIHJ1biB0aGlzIG91dHNpZGUgdGhlXHJcbiAgICAgLy8gem9uZSB0byBhdm9pZCBjYXVzaW5nIG1vcmUgY2hhbmdlIGRldGVjdGlvbiBjeWNsZXMuIFdlIGhhbmRsZSB0aGUgY2hhbmdlIGRldGVjdGlvbiBsb29wXHJcbiAgICAgLy8gb3Vyc2VsdmVzIGluc3RlYWQuXHJcbiAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cclxuICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICB0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCk7XHJcbiAgICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzIGFzIGFueSk7XHJcbiBcclxuICAgICAgICAgdGhpcy5lbGVtZW50U2Nyb2xsZWQoKVxyXG4gICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgLy8gU3RhcnQgb2ZmIHdpdGggYSBmYWtlIHNjcm9sbCBldmVudCBzbyB3ZSBwcm9wZXJseSBkZXRlY3Qgb3VyIGluaXRpYWwgcG9zaXRpb24uXHJcbiAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCksXHJcbiAgICAgICAgICAgICAvLyBDb2xsZWN0IG11bHRpcGxlIGV2ZW50cyBpbnRvIG9uZSB1bnRpbCB0aGUgbmV4dCBhbmltYXRpb24gZnJhbWUuIFRoaXMgd2F5IGlmXHJcbiAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbXVsdGlwbGUgc2Nyb2xsIGV2ZW50cyBpbiB0aGUgc2FtZSBmcmFtZSB3ZSBvbmx5IG5lZWQgdG8gcmVjaGVja1xyXG4gICAgICAgICAgICAgLy8gb3VyIGxheW91dCBvbmNlLlxyXG4gICAgICAgICAgICAgYXVkaXRUaW1lKDAsIFNDUk9MTF9TQ0hFRFVMRVIpXHJcbiAgICAgICAgICAgKVxyXG4gICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpOyB0aGlzLmFubmFHdFNlcnZpY2UudmlydHVhbFNjcm9sbFN1YmplY3QubmV4dCh0cnVlKTt9KTtcclxuIFxyXG4gICAgICAgICB0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCk7XHJcbiAgICAgICB9KVxyXG4gICAgICk7XHJcbiAgIH1cclxuIFxyXG4gICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcclxuICAgICB0aGlzLmRldGFjaCgpO1xyXG4gICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpO1xyXG4gXHJcbiAgICAgLy8gQ29tcGxldGUgYWxsIHN1YmplY3RzXHJcbiAgICAgdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICB0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKTtcclxuICAgICB0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKTtcclxuIFxyXG4gICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgIH1cclxuIFxyXG4gICAvKiogQXR0YWNoZXMgYSBgQ2RrVmlydHVhbFNjcm9sbFJlcGVhdGVyYCB0byB0aGlzIHZpZXdwb3J0LiAqL1xyXG4gICBhdHRhY2goZm9yT2Y6IENka1ZpcnR1YWxTY3JvbGxSZXBlYXRlcjxhbnk+KSB7XHJcbiAgICAgaWYgKHRoaXMuX2Zvck9mKSB7XHJcbiAgICAgICB0aHJvdyBFcnJvcihcIkNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCBpcyBhbHJlYWR5IGF0dGFjaGVkLlwiKTtcclxuICAgICB9XHJcbiBcclxuICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIGRhdGEgc3RyZWFtIG9mIHRoZSBDZGtWaXJ0dWFsRm9yT2YgdG8ga2VlcCB0cmFjayBvZiB3aGVuIHRoZSBkYXRhIGxlbmd0aFxyXG4gICAgIC8vIGNoYW5nZXMuIFJ1biBvdXRzaWRlIHRoZSB6b25lIHRvIGF2b2lkIHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvbiwgc2luY2Ugd2UncmUgbWFuYWdpbmcgdGhlXHJcbiAgICAgLy8gY2hhbmdlIGRldGVjdGlvbiBsb29wIG91cnNlbHZlcy5cclxuICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICB0aGlzLl9mb3JPZiA9IGZvck9mO1xyXG4gICAgICAgdGhpcy5fZm9yT2YuZGF0YVN0cmVhbVxyXG4gICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSlcclxuICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSBkYXRhLmxlbmd0aDtcclxuICAgICAgICAgICBpZiAobmV3TGVuZ3RoICE9PSB0aGlzLl9kYXRhTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICB0aGlzLl9kYXRhTGVuZ3RoID0gbmV3TGVuZ3RoO1xyXG4gICAgICAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICB0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpO1xyXG4gICAgICAgICB9KTtcclxuICAgICB9KTtcclxuICAgfVxyXG4gXHJcbiAgIC8qKiBEZXRhY2hlcyB0aGUgY3VycmVudCBgQ2RrVmlydHVhbEZvck9mYC4gKi9cclxuICAgZGV0YWNoKCkge1xyXG4gICAgIHRoaXMuX2Zvck9mID0gbnVsbDtcclxuICAgICB0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpO1xyXG4gICB9XHJcbiBcclxuICAgLyoqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBib3VuZCB0byB0aGlzIHZpZXdwb3J0IChpbiBudW1iZXIgb2YgaXRlbXMpLiAqL1xyXG4gICBnZXREYXRhTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICAgcmV0dXJuIHRoaXMuX2RhdGFMZW5ndGg7XHJcbiAgIH1cclxuIFxyXG4gICAvKiogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQgKGluIHBpeGVscykuICovXHJcbiAgIGdldFZpZXdwb3J0U2l6ZSgpOiBudW1iZXIge1xyXG4gICAgIHJldHVybiB0aGlzLl92aWV3cG9ydFNpemU7XHJcbiAgIH1cclxuIFxyXG4gICAvLyBUT0RPKG1tYWxlcmJhKTogVGhpcyBpcyB0ZWNobmljYWxseSBvdXQgb2Ygc3luYyB3aXRoIHdoYXQncyByZWFsbHkgcmVuZGVyZWQgdW50aWwgYSByZW5kZXJcclxuICAgLy8gY3ljbGUgaGFwcGVucy4gSSdtIGJlaW5nIGNhcmVmdWwgdG8gb25seSBjYWxsIGl0IGFmdGVyIHRoZSByZW5kZXIgY3ljbGUgaXMgY29tcGxldGUgYW5kIGJlZm9yZVxyXG4gICAvLyBzZXR0aW5nIGl0IHRvIHNvbWV0aGluZyBlbHNlLCBidXQgaXRzIGVycm9yIHByb25lIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgc3BsaXQgaW50b1xyXG4gICAvLyBgcGVuZGluZ1JhbmdlYCBhbmQgYHJlbmRlcmVkUmFuZ2VgLCB0aGUgbGF0dGVyIHJlZmxlY3Rpbmcgd2hhdHMgYWN0dWFsbHkgaW4gdGhlIERPTS5cclxuIFxyXG4gICAvKiogR2V0IHRoZSBjdXJyZW50IHJlbmRlcmVkIHJhbmdlIG9mIGl0ZW1zLiAqL1xyXG4gICBnZXRSZW5kZXJlZFJhbmdlKCk6IExpc3RSYW5nZSB7XHJcbiAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2U7XHJcbiAgIH1cclxuIFxyXG4gICAvKipcclxuICAgICogU2V0cyB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgY29udGVudCAoaW4gcGl4ZWxzKSwgaW5jbHVkaW5nIGNvbnRlbnQgdGhhdCBpcyBub3QgY3VycmVudGx5XHJcbiAgICAqIHJlbmRlcmVkLlxyXG4gICAgKi9cclxuICAgc2V0VG90YWxDb250ZW50U2l6ZShzaXplOiBudW1iZXIpIHtcclxuICAgICBpZiAodGhpcy5fdG90YWxDb250ZW50U2l6ZSAhPT0gc2l6ZSkge1xyXG4gICAgICAgdGhpcy5fdG90YWxDb250ZW50U2l6ZSA9IHNpemU7XHJcbiAgICAgICB0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCk7XHJcbiAgICAgICB0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiBcclxuICAgLyoqIFNldHMgdGhlIGN1cnJlbnRseSByZW5kZXJlZCByYW5nZSBvZiBpbmRpY2VzLiAqL1xyXG4gICBzZXRSZW5kZXJlZFJhbmdlKHJhbmdlOiBMaXN0UmFuZ2UpIHtcclxuICAgICBpZiAoIXJhbmdlc0VxdWFsKHRoaXMuX3JlbmRlcmVkUmFuZ2UsIHJhbmdlKSkge1xyXG4gICAgICAgdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCgodGhpcy5fcmVuZGVyZWRSYW5nZSA9IHJhbmdlKSk7XHJcbiAgICAgICB0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpID0+XHJcbiAgICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKClcclxuICAgICAgICk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiBcclxuICAgLyoqXHJcbiAgICAqIEdldHMgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdmlld3BvcnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSByZW5kZXJlZCBkYXRhIChpbiBwaXhlbHMpLlxyXG4gICAgKi9cclxuICAgZ2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICByZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlXHJcbiAgICAgICA/IG51bGxcclxuICAgICAgIDogdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0O1xyXG4gICB9XHJcbiBcclxuICAgLyoqXHJcbiAgICAqIFNldHMgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdmlld3BvcnQgdG8gZWl0aGVyIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlcmVkIGRhdGFcclxuICAgICogKGluIHBpeGVscykuXHJcbiAgICAqL1xyXG4gICBzZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQob2Zmc2V0OiBudW1iZXIpIHtcclxuICAgICBsZXQgdG9wID0gYCR7TnVtYmVyKG9mZnNldCl9cHhgO1xyXG4gICAgIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCA9IG9mZnNldDtcclxuICAgICBpZiAodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtICE9IHRvcCkge1xyXG4gICAgICAgLy8gV2Uga25vdyB0aGlzIHZhbHVlIGlzIHNhZmUgYmVjYXVzZSB3ZSBwYXJzZSBgb2Zmc2V0YCB3aXRoIGBOdW1iZXIoKWAgYmVmb3JlIHBhc3NpbmcgaXRcclxuICAgICAgIC8vIGludG8gdGhlIHN0cmluZy5cclxuICAgICAgIHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSA9IHRvcDtcclxuICAgICAgIHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCkgPT4ge1xyXG4gICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlKSB7XHJcbiAgICAgICAgICAgdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0IC09IHRoaXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKTtcclxuICAgICAgICAgICB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGUgPSBmYWxzZTtcclxuICAgICAgICAgICB0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpO1xyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH0pO1xyXG4gICAgIH1cclxuICAgfVxyXG4gXHJcbiAgIC8qKlxyXG4gICAgKiBTY3JvbGxzIHRvIHRoZSBnaXZlbiBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHZpZXdwb3J0LiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgbm90IGFsd2F5c1xyXG4gICAgKiB0aGUgc2FtZSBhcyBzZXR0aW5nIGBzY3JvbGxUb3BgIG9yIGBzY3JvbGxMZWZ0YC4gSW4gYSBob3Jpem9udGFsIHZpZXdwb3J0IHdpdGggcmlnaHQtdG8tbGVmdFxyXG4gICAgKiBkaXJlY3Rpb24sIHRoaXMgd291bGQgYmUgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyBhIGZpY3Rpb25hbCBgc2Nyb2xsUmlnaHRgIHByb3BlcnR5LlxyXG4gICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBvZmZzZXQgdG8gc2Nyb2xsIHRvLlxyXG4gICAgKiBAcGFyYW0gYmVoYXZpb3IgVGhlIFNjcm9sbEJlaGF2aW9yIHRvIHVzZSB3aGVuIHNjcm9sbGluZy4gRGVmYXVsdCBpcyBiZWhhdmlvciBpcyBgYXV0b2AuXHJcbiAgICAqL1xyXG4gICBzY3JvbGxUb09mZnNldChvZmZzZXQ6IG51bWJlciwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpIHtcclxuICAgICBjb25zdCBvcHRpb25zOiBFeHRlbmRlZFNjcm9sbFRvT3B0aW9ucyA9IHsgYmVoYXZpb3IsIHRvcDogb2Zmc2V0IH07XHJcbiAgICAgdGhpcy5zY3JvbGxUbyhvcHRpb25zKTtcclxuICAgfVxyXG4gXHJcbiAgIC8qKlxyXG4gICAgKiBTY3JvbGxzIHRvIHRoZSBvZmZzZXQgZm9yIHRoZSBnaXZlbiBpbmRleC5cclxuICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBzY3JvbGwgdG8uXHJcbiAgICAqIEBwYXJhbSBiZWhhdmlvciBUaGUgU2Nyb2xsQmVoYXZpb3IgdG8gdXNlIHdoZW4gc2Nyb2xsaW5nLiBEZWZhdWx0IGlzIGJlaGF2aW9yIGlzIGBhdXRvYC5cclxuICAgICovXHJcbiAgIHNjcm9sbFRvSW5kZXgoaW5kZXg6IG51bWJlciwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpIHtcclxuICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGluZGV4LCBiZWhhdmlvcik7XHJcbiAgIH1cclxuIFxyXG4gICAvKipcclxuICAgICogR2V0cyB0aGUgY3VycmVudCBzY3JvbGwgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB2aWV3cG9ydCAoaW4gcGl4ZWxzKS5cclxuICAgICogQHBhcmFtIGZyb20gVGhlIGVkZ2UgdG8gbWVhc3VyZSB0aGUgb2Zmc2V0IGZyb20uIERlZmF1bHRzIHRvICd0b3AnIGluIHZlcnRpY2FsIG1vZGUgYW5kICdzdGFydCdcclxuICAgICogICAgIGluIGhvcml6b250YWwgbW9kZS5cclxuICAgICovXHJcbiAgLy8gIENIQU5HRVNAQU5OQUxJQiBhZGRlZCBvdmVycmlkZSB0byBmdW5jdGlvbnNcclxuICAgb3ZlcnJpZGUgbWVhc3VyZVNjcm9sbE9mZnNldChcclxuICAgICBmcm9tPzogXCJ0b3BcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwic3RhcnRcIiB8IFwiZW5kXCJcclxuICAgKTogbnVtYmVyIHtcclxuICAgICByZXR1cm4gZnJvbVxyXG4gICAgICAgPyBzdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KGZyb20pXHJcbiAgICAgICA6IHN1cGVyLm1lYXN1cmVTY3JvbGxPZmZzZXQoXCJ0b3BcIik7XHJcbiAgIH1cclxuIFxyXG4gICAvKiogTWVhc3VyZSB0aGUgY29tYmluZWQgc2l6ZSBvZiBhbGwgb2YgdGhlIHJlbmRlcmVkIGl0ZW1zLiAqL1xyXG4gICBtZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpOiBudW1iZXIge1xyXG4gICAgIGNvbnN0IGNvbnRlbnRFbCA9IHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgcmV0dXJuIGNvbnRlbnRFbC5vZmZzZXRIZWlnaHQ7XHJcbiAgIH1cclxuIFxyXG4gICAvKipcclxuICAgICogTWVhc3VyZSB0aGUgdG90YWwgY29tYmluZWQgc2l6ZSBvZiB0aGUgZ2l2ZW4gcmFuZ2UuIFRocm93cyBpZiB0aGUgcmFuZ2UgaW5jbHVkZXMgaXRlbXMgdGhhdCBhcmVcclxuICAgICogbm90IHJlbmRlcmVkLlxyXG4gICAgKi9cclxuICAgbWVhc3VyZVJhbmdlU2l6ZShyYW5nZTogTGlzdFJhbmdlKTogbnVtYmVyIHtcclxuICAgICBpZiAoIXRoaXMuX2Zvck9mKSB7XHJcbiAgICAgICByZXR1cm4gMDtcclxuICAgICB9XHJcbiAgICAgcmV0dXJuIHRoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUocmFuZ2UsIHRoaXMub3JpZW50YXRpb24pO1xyXG4gICB9XHJcbiBcclxuICAgLyoqIFVwZGF0ZSB0aGUgdmlld3BvcnQgZGltZW5zaW9ucyBhbmQgcmUtcmVuZGVyLiAqL1xyXG4gICBjaGVja1ZpZXdwb3J0U2l6ZSgpIHtcclxuICAgICAvLyBUT0RPOiBDbGVhbnVwIGxhdGVyIHdoZW4gYWRkIGxvZ2ljIGZvciBoYW5kbGluZyBjb250ZW50IHJlc2l6ZVxyXG4gICAgIHRoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKTtcclxuICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCk7XHJcbiAgIH1cclxuIFxyXG4gICAvKiogTWVhc3VyZSB0aGUgdmlld3BvcnQgc2l6ZS4gKi9cclxuICAgcHJpdmF0ZSBfbWVhc3VyZVZpZXdwb3J0U2l6ZSgpIHtcclxuICAgICBjb25zdCB2aWV3cG9ydEVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgdGhpcy5fdmlld3BvcnRTaXplID0gdmlld3BvcnRFbC5jbGllbnRIZWlnaHQ7XHJcbiAgIH1cclxuIFxyXG4gICAvKiogUXVldWUgdXAgY2hhbmdlIGRldGVjdGlvbiB0byBydW4uICovXHJcbiAgIHByaXZhdGUgX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQocnVuQWZ0ZXI/OiBGdW5jdGlvbikge1xyXG4gICAgIGlmIChydW5BZnRlcikge1xyXG4gICAgICAgdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaChydW5BZnRlcik7XHJcbiAgICAgfVxyXG4gXHJcbiAgICAgLy8gVXNlIGEgUHJvbWlzZSB0byBiYXRjaCB0b2dldGhlciBjYWxscyB0byBgX2RvQ2hhbmdlRGV0ZWN0aW9uYC4gVGhpcyB3YXkgaWYgd2Ugc2V0IGEgYnVuY2ggb2ZcclxuICAgICAvLyBwcm9wZXJ0aWVzIHNlcXVlbnRpYWxseSB3ZSBvbmx5IGhhdmUgdG8gcnVuIGBfZG9DaGFuZ2VEZXRlY3Rpb25gIG9uY2UgYXQgdGhlIGVuZC5cclxuICAgICBpZiAoIXRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZykge1xyXG4gICAgICAgdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XHJcbiAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgIHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgIH0pXHJcbiAgICAgICApO1xyXG4gICAgIH1cclxuICAgfVxyXG4gXHJcbiAgIC8qKiBSdW4gY2hhbmdlIGRldGVjdGlvbi4gKi9cclxuICAgcHJpdmF0ZSBfZG9DaGFuZ2VEZXRlY3Rpb24oKSB7XHJcbiAgICAgdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nID0gZmFsc2U7XHJcbiBcclxuICAgICAvLyBBcHBseSB0aGUgY29udGVudCB0cmFuc2Zvcm0uIFRoZSB0cmFuc2Zvcm0gY2FuJ3QgYmUgc2V0IHZpYSBhbiBBbmd1bGFyIGJpbmRpbmcgYmVjYXVzZVxyXG4gICAgIC8vIGJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZSBpcyBiYW5uZWQgaW4gR29vZ2xlLiBIb3dldmVyIHRoZSB2YWx1ZSBpcyBzYWZlLCBpdCdzIGNvbXBvc2VkIG9mXHJcbiAgICAgLy8gc3RyaW5nIGxpdGVyYWxzLCBhIHZhcmlhYmxlIHRoYXQgY2FuIG9ubHkgYmUgJ1gnIG9yICdZJywgYW5kIHVzZXIgaW5wdXQgdGhhdCBpcyBydW4gdGhyb3VnaFxyXG4gICAgIC8vIHRoZSBgTnVtYmVyYCBmdW5jdGlvbiBmaXJzdCB0byBjb2VyY2UgaXQgdG8gYSBudW1lcmljIHZhbHVlLlxyXG4gICAgIHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtO1xyXG4gICAgIC8vIEFwcGx5IGNoYW5nZXMgdG8gQW5ndWxhciBiaW5kaW5ncy4gTm90ZTogV2UgbXVzdCBjYWxsIGBtYXJrRm9yQ2hlY2tgIHRvIHJ1biBjaGFuZ2UgZGV0ZWN0aW9uXHJcbiAgICAgLy8gZnJvbSB0aGUgcm9vdCwgc2luY2UgdGhlIHJlcGVhdGVkIGl0ZW1zIGFyZSBjb250ZW50IHByb2plY3RlZCBpbi4gQ2FsbGluZyBgZGV0ZWN0Q2hhbmdlc2BcclxuICAgICAvLyBpbnN0ZWFkIGRvZXMgbm90IHByb3Blcmx5IGNoZWNrIHRoZSBwcm9qZWN0ZWQgY29udGVudC5cclxuICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO1xyXG4gXHJcbiAgICAgY29uc3QgcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24gPSB0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjtcclxuICAgICB0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbiA9IFtdO1xyXG4gICAgIGZvciAoY29uc3QgZm4gb2YgcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24pIHtcclxuICAgICAgIGZuKCk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiBcclxuICAgLyoqIENhbGN1bGF0ZXMgdGhlIGBzdHlsZS53aWR0aGAgYW5kIGBzdHlsZS5oZWlnaHRgIGZvciB0aGUgc3BhY2VyIGVsZW1lbnQuICovXHJcbiAgIHByaXZhdGUgX2NhbGN1bGF0ZVNwYWNlclNpemUoKSB7XHJcbiAgICAgdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0ID0gYCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA7XHJcbiAgICAgdGhpcy5fdG90YWxDb250ZW50V2lkdGggPSBcIlwiO1xyXG4gICB9XHJcbiB9XHJcbiAiLCI8IS0tXHJcbiAgV3JhcCB0aGUgcmVuZGVyZWQgY29udGVudCBpbiBhbiBlbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIG9mZnNldCBpdCBiYXNlZCBvbiB0aGUgc2Nyb2xsXHJcbiAgcG9zaXRpb24uXHJcbi0tPlxyXG48ZGl2ICNjb250ZW50V3JhcHBlciBjbGFzcz1cImFubmEtdGFibGUtdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyXCI+XHJcblx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuPCEtLVxyXG4gIFNwYWNlciB1c2VkIHRvIGZvcmNlIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyIHRvIHRoZSBjb3JyZWN0IHNpemUgZm9yIHRoZSAqdG90YWwqIG51bWJlciBvZiBpdGVtc1xyXG4gIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjYXB0dXJlcyB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGRhdGEgc2V0LlxyXG4tLT5cclxuPGRpdiBjbGFzcz1cImFwcC10YWJsZS12aXJ0dWFsLXNjcm9sbC1zcGFjZXJcIiBbc3R5bGUud2lkdGhdPVwiX3RvdGFsQ29udGVudFdpZHRoXCIgW3N0eWxlLmhlaWdodF09XCJfdG90YWxDb250ZW50SGVpZ2h0XCI+XHJcbjwvZGl2PiJdfQ==