@seniorsistemas/data-seniorx-core 3.1.0 → 3.2.0

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 (191) hide show
  1. package/core/constants/accordion.const.d.ts +4 -4
  2. package/core/constants/alert.const.d.ts +1 -1
  3. package/core/constants/autocomplete.const.d.ts +2 -2
  4. package/core/constants/badge.const.d.ts +1 -1
  5. package/core/constants/card.const.d.ts +8 -8
  6. package/core/constants/chips.const.d.ts +2 -2
  7. package/core/constants/code-editor.const.d.ts +4 -4
  8. package/core/constants/collapse-link.const.d.ts +2 -2
  9. package/core/constants/color-picker.const.d.ts +2 -2
  10. package/core/constants/combobox.const.d.ts +3 -3
  11. package/core/constants/context-selector.const.d.ts +1 -1
  12. package/core/constants/editable-overlay.const.d.ts +4 -4
  13. package/core/constants/fileupload.const.d.ts +3 -3
  14. package/core/constants/gantt.const.d.ts +1 -1
  15. package/core/constants/help-popover.const.d.ts +2 -2
  16. package/core/constants/hyperlink.const.d.ts +2 -2
  17. package/core/constants/info-sign.const.d.ts +1 -1
  18. package/core/constants/inline-edit.const.d.ts +4 -4
  19. package/core/constants/kanban.const.d.ts +2 -2
  20. package/core/constants/list.const.d.ts +1 -1
  21. package/core/constants/modalc.const.d.ts +1 -1
  22. package/core/constants/navigation-button.const.d.ts +3 -3
  23. package/core/constants/object-card.const.d.ts +2 -2
  24. package/core/constants/picklist.const.d.ts +2 -2
  25. package/core/constants/pin-code-field.const.d.ts +3 -3
  26. package/core/constants/popover.const.d.ts +1 -1
  27. package/core/constants/progressbar.const.d.ts +1 -1
  28. package/core/constants/radio.const.d.ts +2 -2
  29. package/core/constants/rating-scale.const.d.ts +1 -1
  30. package/core/constants/sidebar.const.d.ts +1 -1
  31. package/core/constants/slider.const.d.ts +1 -1
  32. package/core/constants/split-button.const.d.ts +2 -2
  33. package/core/constants/spotlight.const.d.ts +8 -8
  34. package/core/constants/star-rating.const.d.ts +2 -2
  35. package/core/constants/tab.const.d.ts +3 -3
  36. package/core/constants/table.const.d.ts +1 -0
  37. package/core/constants/thumbnails.const.d.ts +4 -4
  38. package/core/constants/token-list.const.d.ts +1 -1
  39. package/core/types/table-column.type.d.ts +4 -0
  40. package/core/types/table-options.type.d.ts +3 -0
  41. package/core/types/table-shared.type.d.ts +1 -1
  42. package/core/types/tile-select.type.d.ts +17 -0
  43. package/esm2022/core/constants/accordion.const.mjs +5 -5
  44. package/esm2022/core/constants/alert.const.mjs +2 -2
  45. package/esm2022/core/constants/autocomplete.const.mjs +3 -3
  46. package/esm2022/core/constants/badge.const.mjs +2 -2
  47. package/esm2022/core/constants/card.const.mjs +9 -9
  48. package/esm2022/core/constants/chips.const.mjs +3 -3
  49. package/esm2022/core/constants/code-editor.const.mjs +5 -5
  50. package/esm2022/core/constants/collapse-link.const.mjs +3 -3
  51. package/esm2022/core/constants/color-picker.const.mjs +3 -3
  52. package/esm2022/core/constants/combobox.const.mjs +7 -4
  53. package/esm2022/core/constants/context-selector.const.mjs +2 -2
  54. package/esm2022/core/constants/editable-overlay.const.mjs +5 -5
  55. package/esm2022/core/constants/fileupload.const.mjs +4 -4
  56. package/esm2022/core/constants/gantt.const.mjs +2 -2
  57. package/esm2022/core/constants/help-popover.const.mjs +3 -3
  58. package/esm2022/core/constants/hyperlink.const.mjs +3 -3
  59. package/esm2022/core/constants/info-sign.const.mjs +2 -2
  60. package/esm2022/core/constants/inline-edit.const.mjs +5 -5
  61. package/esm2022/core/constants/kanban.const.mjs +3 -3
  62. package/esm2022/core/constants/list.const.mjs +2 -2
  63. package/esm2022/core/constants/loading-state.const.mjs +2 -2
  64. package/esm2022/core/constants/modalc.const.mjs +2 -2
  65. package/esm2022/core/constants/navigation-button.const.mjs +4 -4
  66. package/esm2022/core/constants/object-card.const.mjs +3 -3
  67. package/esm2022/core/constants/picklist.const.mjs +3 -3
  68. package/esm2022/core/constants/pin-code-field.const.mjs +4 -4
  69. package/esm2022/core/constants/popover.const.mjs +8 -2
  70. package/esm2022/core/constants/progressbar.const.mjs +2 -2
  71. package/esm2022/core/constants/radio.const.mjs +3 -3
  72. package/esm2022/core/constants/rating-scale.const.mjs +2 -2
  73. package/esm2022/core/constants/sidebar.const.mjs +2 -2
  74. package/esm2022/core/constants/slider.const.mjs +2 -2
  75. package/esm2022/core/constants/split-button.const.mjs +3 -3
  76. package/esm2022/core/constants/spotlight.const.mjs +9 -9
  77. package/esm2022/core/constants/star-rating.const.mjs +3 -3
  78. package/esm2022/core/constants/tab.const.mjs +4 -4
  79. package/esm2022/core/constants/table.const.mjs +4 -3
  80. package/esm2022/core/constants/thumbnails.const.mjs +5 -5
  81. package/esm2022/core/constants/token-list.const.mjs +2 -2
  82. package/esm2022/core/data/fontawesome-v5-solid-icons.data.mjs +2 -2
  83. package/esm2022/core/types/table-column.type.mjs +1 -1
  84. package/esm2022/core/types/table-options.type.mjs +1 -1
  85. package/esm2022/core/types/table-shared.type.mjs +1 -1
  86. package/esm2022/core/types/tile-select.type.mjs +8 -0
  87. package/esm2022/core/utils/combobox.util.mjs +6 -6
  88. package/esm2022/features/accordion/components/accordion-item/accordion-item.component.mjs +3 -3
  89. package/esm2022/features/autocomplete/autocomplete.component.mjs +3 -3
  90. package/esm2022/features/bignumber-input/bignumber-input.component.mjs +1 -1
  91. package/esm2022/features/breadcrumb/breadcrumb.component.mjs +3 -3
  92. package/esm2022/features/button/button.component.mjs +7 -3
  93. package/esm2022/features/card-list/card/card.component.mjs +2 -2
  94. package/esm2022/features/card-list/card-list.component.mjs +7 -3
  95. package/esm2022/features/chat/chat.component.mjs +4 -4
  96. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  97. package/esm2022/features/checkbox-list/checkbox-list.component.mjs +3 -3
  98. package/esm2022/features/chips/chips.component.mjs +3 -3
  99. package/esm2022/features/code-editor/code-editor.component.mjs +23 -5
  100. package/esm2022/features/color-picker/color-picker.component.mjs +3 -3
  101. package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +3 -3
  102. package/esm2022/features/currency/currency.component.mjs +1 -1
  103. package/esm2022/features/editable-overlay/editable-overlay.component.mjs +3 -3
  104. package/esm2022/features/empty-state/empty-state.component.mjs +1 -1
  105. package/esm2022/features/fileupload/fileupload.component.mjs +4 -4
  106. package/esm2022/features/filters/filters.component.mjs +3 -3
  107. package/esm2022/features/help-popover/help-popover.component.mjs +2 -2
  108. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  109. package/esm2022/features/icon-picker/icon-picker.component.mjs +1 -1
  110. package/esm2022/features/image-cropper/image-cropper.component.mjs +9 -9
  111. package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  112. package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  113. package/esm2022/features/list/list.component.mjs +7 -3
  114. package/esm2022/features/loading-state/loading-state.component.mjs +5 -5
  115. package/esm2022/features/localized-number-input/localized-number-input.component.mjs +4 -4
  116. package/esm2022/features/lookup/lookup.component.mjs +5 -5
  117. package/esm2022/features/mask/mask.component.mjs +4 -4
  118. package/esm2022/features/modal/modal.component.mjs +3 -3
  119. package/esm2022/features/modalc/modalc.component.mjs +3 -3
  120. package/esm2022/features/number-input/number-input.component.mjs +32 -5
  121. package/esm2022/features/object-card/components/object-card-field/object-card-field.component.mjs +1 -1
  122. package/esm2022/features/object-card/components/object-card-main/object-card-main.component.mjs +1 -1
  123. package/esm2022/features/object-card/object-card.component.mjs +2 -2
  124. package/esm2022/features/paginator/paginator.component.mjs +3 -3
  125. package/esm2022/features/panel/panel.component.mjs +6 -6
  126. package/esm2022/features/password-strength/password-strength.component.mjs +6 -6
  127. package/esm2022/features/picklist/picklist.component.mjs +6 -4
  128. package/esm2022/features/pin-code-field/pin-code-field.component.mjs +3 -3
  129. package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +11 -11
  130. package/esm2022/features/rating-scale/rating-scale.component.mjs +3 -3
  131. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +100 -7
  132. package/esm2022/features/row-card-list/row-card-list.component.mjs +7 -3
  133. package/esm2022/features/scaffold/scaffold.component.mjs +3 -3
  134. package/esm2022/features/searchbox/searchbox.component.mjs +4 -4
  135. package/esm2022/features/select-button/select-button.component.mjs +5 -5
  136. package/esm2022/features/sidebar/sidebar.component.mjs +3 -3
  137. package/esm2022/features/slider/slider.component.mjs +3 -3
  138. package/esm2022/features/speech-recognition/speech-recognition.component.mjs +12 -12
  139. package/esm2022/features/spotlight/spotlight.component.mjs +2 -2
  140. package/esm2022/features/star-rating/star-rating.component.mjs +3 -3
  141. package/esm2022/features/switch/switch.component.mjs +4 -4
  142. package/esm2022/features/table/components/table-actions-menu.component.mjs +2 -2
  143. package/esm2022/features/table/components/table-cell-content.component.mjs +16 -10
  144. package/esm2022/features/table/table.component.mjs +46 -16
  145. package/esm2022/features/table/utils/table-visual.util.mjs +25 -7
  146. package/esm2022/features/textarea/textarea.component.mjs +3 -3
  147. package/esm2022/features/textbox/textbox.component.mjs +3 -3
  148. package/esm2022/features/tile-select/tile-select.component.mjs +80 -0
  149. package/esm2022/features/toast/toast.component.mjs +3 -3
  150. package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +6 -6
  151. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  152. package/esm2022/locales/en.json +4760 -4749
  153. package/esm2022/locales/es-CO.json +4760 -4749
  154. package/esm2022/locales/pt.json +4760 -4749
  155. package/esm2022/providers/features.provider.mjs +3 -1
  156. package/esm2022/public-api.mjs +3 -1
  157. package/features/button/button.component.d.ts +2 -1
  158. package/features/card-list/card-list.component.d.ts +3 -1
  159. package/features/code-editor/code-editor.component.d.ts +2 -1
  160. package/features/help-popover/help-popover.component.d.ts +1 -1
  161. package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +4 -4
  162. package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +2 -2
  163. package/features/list/list.component.d.ts +3 -1
  164. package/features/navigation-button/navigation-button.component.d.ts +3 -3
  165. package/features/number-input/number-input.component.d.ts +7 -1
  166. package/features/panel/panel.component.d.ts +1 -1
  167. package/features/picklist/picklist.component.d.ts +3 -2
  168. package/features/pin-code-field/pin-code-field.component.d.ts +3 -3
  169. package/features/row-card-list/row-card/row-card.component.d.ts +15 -2
  170. package/features/row-card-list/row-card-list.component.d.ts +3 -1
  171. package/features/spotlight/spotlight.component.d.ts +8 -8
  172. package/features/table/components/table-cell-content.component.d.ts +4 -1
  173. package/features/table/table.component.d.ts +9 -2
  174. package/features/table/utils/table-visual.util.d.ts +5 -0
  175. package/features/textarea/textarea.component.d.ts +1 -1
  176. package/features/thumbnails/components/thumbnail-item/thumbnail-item.component.d.ts +3 -3
  177. package/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.d.ts +1 -1
  178. package/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.d.ts +1 -1
  179. package/features/tile-select/tile-select.component.d.ts +21 -0
  180. package/fesm2022/seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-fK3MF8KJ.mjs +4 -0
  181. package/fesm2022/{seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-B7opbaVg.mjs.map → seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-fK3MF8KJ.mjs.map} +1 -1
  182. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14859 -14534
  183. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  184. package/package.json +57 -22
  185. package/public-api.d.ts +3 -0
  186. package/src/locales/en.json +4760 -4749
  187. package/src/locales/es-CO.json +4760 -4749
  188. package/src/locales/pt.json +4760 -4749
  189. package/styles/sdc-global-variables.scss +2 -2
  190. package/styles.css +2 -2
  191. package/fesm2022/seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-B7opbaVg.mjs +0 -4
@@ -13,8 +13,8 @@ import * as i1 from "@angular/forms";
13
13
  import * as i2 from "@ngx-translate/core";
14
14
  export class PicklistComponent {
15
15
  loadingBlockWindow = PICKLIST_LOADING_BLOCK_WINDOW;
16
- loadingIndicator = PICKLIST_LOADING_INDICATOR;
17
16
  loadingBlockDelayMs = PICKLIST_LOADING_BLOCK_DELAY_MS;
17
+ loadingIndicator = PICKLIST_LOADING_INDICATOR;
18
18
  items = [];
19
19
  selectedIds = [];
20
20
  idKey = DEFAULT_PICKLIST_ID_KEY;
@@ -282,7 +282,7 @@ export class PicklistComponent {
282
282
  }
283
283
  }
284
284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
285
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PicklistComponent, isStandalone: true, selector: "sdc-picklist", inputs: { items: "items", selectedIds: "selectedIds", idKey: "idKey", titleKey: "titleKey", subtitleKey: "subtitleKey", iconClass: "iconClass", selectionIconClass: "selectionIconClass", placeholder: "placeholder", emptyTitle: "emptyTitle", emptyText: "emptyText", emptyIconClass: "emptyIconClass", resultsCounterSingularLabel: "resultsCounterSingularLabel", resultsCounterPluralLabel: "resultsCounterPluralLabel", filterFields: "filterFields", first: "first", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", maxVisibleSelectedItems: "maxVisibleSelectedItems", showPaginator: "showPaginator", showRowsPerPageOptions: "showRowsPerPageOptions", showSelectionCounter: "showSelectionCounter", showResultsCounter: "showResultsCounter", showItemIcon: "showItemIcon", autoResize: "autoResize", autoResizeMinRows: "autoResizeMinRows", autoResizeMaxRows: "autoResizeMaxRows", autoResizeItemHeight: "autoResizeItemHeight", autoResizeViewportOffset: "autoResizeViewportOffset", maxTitleLength: "maxTitleLength", maxSubtitleLength: "maxSubtitleLength", autofocusSearch: "autofocusSearch", loading: "loading" }, outputs: { pageChange: "pageChange", selectedIdsChange: "selectedIdsChange" }, viewQueries: [{ propertyName: "searchSectionRef", first: true, predicate: ["searchSection"], descendants: true }, { propertyName: "selectedSectionRef", first: true, predicate: ["selectedSection"], descendants: true }, { propertyName: "footerSectionRef", first: true, predicate: ["footerSection"], descendants: true }, { propertyName: "searchboxRef", first: true, predicate: SearchboxComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-picklist\">\n <sdc-loading-state\n class=\"sdc-picklist__loading-state\"\n [loading]=\"isLoading()\"\n [blockWindow]=\"loadingBlockWindow\"\n [indicator]=\"loadingIndicator\"\n [blockDelayMs]=\"loadingBlockDelayMs\"\n >\n <div #searchSection class=\"sdc-picklist__search\">\n <sdc-searchbox\n [placeholder]=\"placeholder | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchTerm($event)\"\n ></sdc-searchbox>\n </div>\n\n <div\n #selectedSection\n class=\"sdc-picklist__selected\"\n [class.sdc-picklist__selected--has-items]=\"selectedCount > 0\"\n >\n @if (selectedCount > 0) {\n <div class=\"sdc-picklist__chips\" [class.sdc-picklist__chips--expanded]=\"selectedExpanded\">\n @for (item of visibleSelectedItems; track trackById($index, item)) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip\"\n (click)=\"remove(item)\"\n >\n <span class=\"sdc-picklist__chip-text\">{{ getTitle(item) | translate }}</span>\n <span class=\"sdc-picklist__chip-x\">\u00D7</span>\n </button>\n }\n\n @if (!selectedExpanded && hiddenSelectedCount > 0) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip sdc-picklist__chip--more\"\n (click)=\"toggleSelectedExpanded(true)\"\n >\n +{{ hiddenSelectedCount }}\n </button>\n }\n\n @if (selectedExpanded && hiddenSelectedCount > 0) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip sdc-picklist__chip--less\"\n (click)=\"toggleSelectedExpanded(false)\"\n >\n {{ 'platform.datacore.less' | translate }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-picklist__content\">\n @if (showSkeleton) {\n <ul class=\"sdc-picklist__list\">\n @for (row of skeletonRows; track row) {\n <li class=\"sdc-picklist__list-item sdc-picklist__list-item--skeleton\">\n <div class=\"sdc-picklist__item sdc-picklist__item--skeleton\"></div>\n </li>\n }\n </ul>\n } @else if (pageItems.length > 0) {\n <ul class=\"sdc-picklist__list\">\n @for (item of pageItems; track trackById($index, item)) {\n <li class=\"sdc-picklist__list-item\">\n <button\n type=\"button\"\n class=\"sdc-picklist__item\"\n [class.sdc-picklist__item--selected]=\"isSelected(item)\"\n (click)=\"rowClick(item)\"\n >\n <span class=\"sdc-picklist__check\" (click)=\"$event.stopPropagation()\">\n <sdc-checkbox\n [ngModel]=\"isSelected(item)\"\n (ngModelChange)=\"toggle(item, $event)\"\n ></sdc-checkbox>\n </span>\n\n @if (showItemIcon) {\n <span class=\"sdc-picklist__icon\">\n <i [class]=\"iconClass\"></i>\n </span>\n }\n\n <span class=\"sdc-picklist__texts\">\n <span class=\"sdc-picklist__title\">{{ getTitle(item) | translate }}</span>\n @if (getSubtitle(item)) {\n <span class=\"sdc-picklist__subtitle\">{{ getSubtitle(item) | translate }}</span>\n }\n </span>\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"sdc-picklist__empty\">\n <i [class]=\"emptyIconClass + ' sdc-picklist__empty-icon'\"></i>\n <div class=\"sdc-picklist__empty-title\">\n {{ emptyTitle | translate }}\n </div>\n <div class=\"sdc-picklist__empty-text\">\n {{ emptyText | translate }}\n </div>\n </div>\n }\n </div>\n\n @if (showPaginator) {\n <div #footerSection class=\"sdc-picklist__footer\">\n <div class=\"sdc-picklist__footer-left\">\n @if (showSelectionCounter) {\n <div class=\"sdc-picklist__selection-counter-wrap\">\n <button type=\"button\" class=\"sdc-picklist__selection-counter\">\n <i [class]=\"selectionIconClass\"></i>\n <span>{{ selectedCount }}</span>\n </button>\n </div>\n }\n\n <div class=\"sdc-picklist__footer-paginator\">\n <sdc-paginator\n [first]=\"firstValue\"\n [rows]=\"activeRows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"paginatorRowsPerPageOptions\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n\n @if (showResultsCounter) {\n <div class=\"sdc-picklist__results\">\n {{ totalRecords }} {{ resultsCounterLabel | translate }}\n </div>\n }\n </div>\n }\n </sdc-loading-state>\n</div>\n", styles: [":host{display:block}.sdc-picklist{width:100%}.sdc-picklist__loading-state{display:block;width:100%}.sdc-picklist__search{padding-bottom:.75rem}.sdc-picklist__content{width:100%}.sdc-picklist__selected{padding:.25rem 0 .75rem}.sdc-picklist__chips{display:flex;gap:.5rem;align-items:center;flex-wrap:nowrap;overflow:hidden;min-width:0}.sdc-picklist__chips--expanded{flex-wrap:wrap;overflow:visible}.sdc-picklist__chip{display:inline-flex;align-items:center;gap:.5rem;border:1px solid transparent;background:var(--sdc-picklist-selected-bg, #eeebf2);border-radius:var(--sdc-picklist-chip-radius, 6px);padding:.25rem .5rem;cursor:pointer;transition:border-color .16s ease-out,background-color .16s ease-out;flex:0 1 auto;min-width:0}.sdc-picklist__chip:hover{border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__chip:focus-visible{outline:2px solid var(--sdc-picklist-focus, currentColor);outline-offset:2px}.sdc-picklist__chip-text{font-weight:500;color:var(--sdc-picklist-title-color, #111827);max-width:var(--sdc-picklist-chip-max-width, 220px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.sdc-picklist__chip-x{font-size:.875rem;opacity:.8;flex:0 0 auto}.sdc-picklist__chip--more,.sdc-picklist__chip--less{background:var(--sdc-picklist-more-bg, #eeebf2);border-color:transparent;font-weight:600;margin-left:auto;flex:0 0 auto;white-space:nowrap}.sdc-picklist__chip--more:hover,.sdc-picklist__chip--less:hover{border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.sdc-picklist__list-item,.sdc-picklist__list-item--skeleton{margin:0}.sdc-picklist__item{width:100%;display:flex;align-items:center;gap:.875rem;padding:1rem;border-radius:var(--sdc-picklist-radius, 6px);text-align:left;cursor:pointer;border:1px solid transparent;background:var(--sdc-picklist-bg, #ffffff);transition:background-color .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out}.sdc-picklist__item:hover{background:var(--sdc-picklist-hover-bg, #f7f7f7)}.sdc-picklist__item:focus-visible{outline:2px solid var(--sdc-picklist-focus, currentColor);outline-offset:2px}.sdc-picklist__item--selected{background:var(--sdc-picklist-selected-bg, #eeebf2);border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__item--selected:hover{background:var(--sdc-picklist-selected-bg, #eeebf2);border-color:var(--sdc-picklist-focus, #428bca);box-shadow:inset 0 0 0 1px var(--sdc-picklist-focus, #428bca)}.sdc-picklist__item--skeleton{display:block;width:100%;height:72px;min-height:72px;border:1px solid var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-picklist-radius, 6px);background:var(--sdc-picklist-bg, #ffffff);box-sizing:border-box;pointer-events:none;cursor:default}.sdc-picklist__check{display:inline-flex;align-items:center}.sdc-picklist__icon{width:40px;height:40px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:var(--sdc-picklist-icon-bg, #f3f4f6);color:var(--sdc-picklist-icon-color, #111827);flex:0 0 auto}.sdc-picklist__texts{display:flex;flex-direction:column;min-width:0}.sdc-picklist__title{font-weight:600;color:var(--sdc-picklist-title-color, #111827);line-height:1.2}.sdc-picklist__subtitle{margin-top:.125rem;color:var(--sdc-picklist-subtitle-color, #6b7280);font-size:.875rem;line-height:1.2}.sdc-picklist__footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.sdc-picklist__footer-left{display:inline-flex;align-items:center;gap:.5rem;flex:0 0 auto;min-width:0}.sdc-picklist__footer-paginator{display:inline-flex;align-items:center;flex:0 0 auto;min-width:0}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator{width:auto;padding:10px 10px 10px 0;display:flex;align-items:center;justify-content:space-between;gap:1rem}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator-left{display:inline-flex;align-items:center;gap:.75rem}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator-pages{display:inline-flex;align-items:center;gap:0}.sdc-picklist__selection-counter-wrap{display:inline-flex;align-items:center;justify-content:center;height:calc(var(--sdc-paginator-page-size, 34px) + 20px);min-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);max-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);box-sizing:border-box}.sdc-picklist__selection-counter{appearance:none;-webkit-appearance:none;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;height:var(--sdc-paginator-page-size, 34px);min-height:var(--sdc-paginator-page-size, 34px);max-height:var(--sdc-paginator-page-size, 34px);margin:0;padding:0 .75rem;border:1px solid var(--sdc-paginator-border, #cccccc);border-radius:4px;background:var(--sdc-table-white, #ffffff);color:var(--sdc-paginator-primary, #428bca);font-size:14px;font-weight:400;line-height:1;white-space:nowrap;vertical-align:middle;position:static}.sdc-picklist__selection-counter i,.sdc-picklist__selection-counter span{display:inline-flex;align-items:center;justify-content:center;line-height:1;position:static;top:auto}.sdc-picklist__selection-counter i{font-size:.875rem;color:var(--sdc-paginator-primary, #428bca)}.sdc-picklist__selection-counter span{font-size:14px}.sdc-picklist__selection-counter:focus-visible{outline:2px solid currentColor;outline-offset:2px;position:relative;z-index:1}.sdc-picklist__results{display:inline-flex;align-items:center;justify-content:flex-end;min-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);margin-left:auto;color:var(--sdc-picklist-results-color, #6b7280);font-size:14px;font-weight:400;white-space:nowrap;flex:0 0 auto}.sdc-picklist__empty{min-height:12rem;border:1px solid var(--sdc-formfield-default-border, #dedce5);border-radius:var(--sdc-formfield-border-radius, 6px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1rem;text-align:center}.sdc-picklist__empty-icon{font-size:1.5rem;color:var(--sdc-picklist-subtitle-color, #6b7280)}.sdc-picklist__empty-title{font-weight:600;color:var(--sdc-picklist-title-color, #111827)}.sdc-picklist__empty-text{color:var(--sdc-picklist-subtitle-color, #6b7280);font-size:.875rem}@media (max-width: 768px){.sdc-picklist__footer{flex-wrap:wrap;align-items:flex-start}.sdc-picklist__footer-left{flex-wrap:wrap}.sdc-picklist__results{width:100%;min-height:auto;margin-left:0;justify-content:flex-start}.sdc-picklist__selection-counter-wrap{height:auto;min-height:auto;max-height:none}.sdc-picklist__selection-counter{position:static}.sdc-picklist__selection-counter span{position:static;top:auto}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: LoadingStateComponent, selector: "sdc-loading-state", inputs: ["indicator", "id", "blockWindow", "blockDelayMs", "unblockDelayMs", "loading"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
285
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PicklistComponent, isStandalone: true, selector: "sdc-picklist", inputs: { loadingIndicator: "loadingIndicator", items: "items", selectedIds: "selectedIds", idKey: "idKey", titleKey: "titleKey", subtitleKey: "subtitleKey", iconClass: "iconClass", selectionIconClass: "selectionIconClass", placeholder: "placeholder", emptyTitle: "emptyTitle", emptyText: "emptyText", emptyIconClass: "emptyIconClass", resultsCounterSingularLabel: "resultsCounterSingularLabel", resultsCounterPluralLabel: "resultsCounterPluralLabel", filterFields: "filterFields", first: "first", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", maxVisibleSelectedItems: "maxVisibleSelectedItems", showPaginator: "showPaginator", showRowsPerPageOptions: "showRowsPerPageOptions", showSelectionCounter: "showSelectionCounter", showResultsCounter: "showResultsCounter", showItemIcon: "showItemIcon", autoResize: "autoResize", autoResizeMinRows: "autoResizeMinRows", autoResizeMaxRows: "autoResizeMaxRows", autoResizeItemHeight: "autoResizeItemHeight", autoResizeViewportOffset: "autoResizeViewportOffset", maxTitleLength: "maxTitleLength", maxSubtitleLength: "maxSubtitleLength", autofocusSearch: "autofocusSearch", loading: "loading" }, outputs: { pageChange: "pageChange", selectedIdsChange: "selectedIdsChange" }, viewQueries: [{ propertyName: "searchSectionRef", first: true, predicate: ["searchSection"], descendants: true }, { propertyName: "selectedSectionRef", first: true, predicate: ["selectedSection"], descendants: true }, { propertyName: "footerSectionRef", first: true, predicate: ["footerSection"], descendants: true }, { propertyName: "searchboxRef", first: true, predicate: SearchboxComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-picklist\">\n <sdc-loading-state\n class=\"sdc-picklist__loading-state\"\n [loading]=\"isLoading()\"\n [blockWindow]=\"loadingBlockWindow\"\n [indicator]=\"loadingIndicator\"\n [blockDelayMs]=\"loadingBlockDelayMs\"\n >\n <div #searchSection class=\"sdc-picklist__search\">\n <sdc-searchbox\n [placeholder]=\"placeholder | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchTerm($event)\"\n ></sdc-searchbox>\n </div>\n\n <div\n #selectedSection\n class=\"sdc-picklist__selected\"\n [class.sdc-picklist__selected--has-items]=\"selectedCount > 0\"\n >\n @if (selectedCount > 0) {\n <div class=\"sdc-picklist__chips\" [class.sdc-picklist__chips--expanded]=\"selectedExpanded\">\n @for (item of visibleSelectedItems; track trackById($index, item)) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip\"\n (click)=\"remove(item)\"\n >\n <span class=\"sdc-picklist__chip-text\">{{ getTitle(item) | translate }}</span>\n <span class=\"sdc-picklist__chip-x\">\u00D7</span>\n </button>\n }\n\n @if (!selectedExpanded && hiddenSelectedCount > 0) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip sdc-picklist__chip--more\"\n (click)=\"toggleSelectedExpanded(true)\"\n >\n +{{ hiddenSelectedCount }}\n </button>\n }\n\n @if (selectedExpanded && hiddenSelectedCount > 0) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip sdc-picklist__chip--less\"\n (click)=\"toggleSelectedExpanded(false)\"\n >\n {{ 'platform.datacore.less' | translate }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-picklist__content\">\n @if (showSkeleton) {\n <ul class=\"sdc-picklist__list\">\n @for (row of skeletonRows; track row) {\n <li class=\"sdc-picklist__list-item sdc-picklist__list-item--skeleton\">\n <div class=\"sdc-picklist__item sdc-picklist__item--skeleton\"></div>\n </li>\n }\n </ul>\n } @else if (pageItems.length > 0) {\n <ul class=\"sdc-picklist__list\">\n @for (item of pageItems; track trackById($index, item)) {\n <li class=\"sdc-picklist__list-item\">\n <button\n type=\"button\"\n class=\"sdc-picklist__item\"\n [class.sdc-picklist__item--selected]=\"isSelected(item)\"\n (click)=\"rowClick(item)\"\n >\n <span class=\"sdc-picklist__check\" (click)=\"$event.stopPropagation()\">\n <sdc-checkbox\n [ngModel]=\"isSelected(item)\"\n (ngModelChange)=\"toggle(item, $event)\"\n ></sdc-checkbox>\n </span>\n\n @if (showItemIcon) {\n <span class=\"sdc-picklist__icon\">\n <i [class]=\"iconClass\"></i>\n </span>\n }\n\n <span class=\"sdc-picklist__texts\">\n <span class=\"sdc-picklist__title\">{{ getTitle(item) | translate }}</span>\n @if (getSubtitle(item)) {\n <span class=\"sdc-picklist__subtitle\">{{ getSubtitle(item) | translate }}</span>\n }\n </span>\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"sdc-picklist__empty\">\n <i [class]=\"emptyIconClass + ' sdc-picklist__empty-icon'\"></i>\n <div class=\"sdc-picklist__empty-title\">\n {{ emptyTitle | translate }}\n </div>\n <div class=\"sdc-picklist__empty-text\">\n {{ emptyText | translate }}\n </div>\n </div>\n }\n </div>\n\n @if (showPaginator) {\n <div #footerSection class=\"sdc-picklist__footer\">\n <div class=\"sdc-picklist__footer-left\">\n @if (showSelectionCounter) {\n <div class=\"sdc-picklist__selection-counter-wrap\">\n <button type=\"button\" class=\"sdc-picklist__selection-counter\">\n <i [class]=\"selectionIconClass\"></i>\n <span>{{ selectedCount }}</span>\n </button>\n </div>\n }\n\n <div class=\"sdc-picklist__footer-paginator\">\n <sdc-paginator\n [first]=\"firstValue\"\n [rows]=\"activeRows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"paginatorRowsPerPageOptions\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n\n @if (showResultsCounter) {\n <div class=\"sdc-picklist__results\">\n {{ totalRecords }} {{ resultsCounterLabel | translate }}\n </div>\n }\n </div>\n }\n </sdc-loading-state>\n</div>\n", styles: [":host{display:block}.sdc-picklist{width:100%}.sdc-picklist__loading-state{display:block;width:100%}.sdc-picklist__search{padding-bottom:.75rem}.sdc-picklist__content{width:100%}.sdc-picklist__selected{padding:.25rem 0 .75rem}.sdc-picklist__chips{display:flex;gap:.5rem;align-items:center;flex-wrap:nowrap;overflow:hidden;min-width:0}.sdc-picklist__chips--expanded{flex-wrap:wrap;overflow:visible}.sdc-picklist__chip{display:inline-flex;align-items:center;gap:.5rem;border:1px solid transparent;background:var(--sdc-picklist-selected-bg, #eeebf2);border-radius:var(--sdc-picklist-chip-radius, 6px);padding:.25rem .5rem;cursor:pointer;transition:border-color .16s ease-out,background-color .16s ease-out;flex:0 1 auto;min-width:0}.sdc-picklist__chip:hover{border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__chip:focus-visible{outline:2px solid var(--sdc-picklist-focus, currentColor);outline-offset:2px}.sdc-picklist__chip-text{font-weight:500;color:var(--sdc-picklist-title-color, #111827);max-width:var(--sdc-picklist-chip-max-width, 220px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.sdc-picklist__chip-x{font-size:.875rem;opacity:.8;flex:0 0 auto}.sdc-picklist__chip--more,.sdc-picklist__chip--less{background:var(--sdc-picklist-more-bg, #eeebf2);border-color:transparent;font-weight:600;margin-left:auto;flex:0 0 auto;white-space:nowrap}.sdc-picklist__chip--more:hover,.sdc-picklist__chip--less:hover{border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.sdc-picklist__list-item,.sdc-picklist__list-item--skeleton{margin:0}.sdc-picklist__item{width:100%;display:flex;align-items:center;gap:.875rem;padding:1rem;border-radius:var(--sdc-picklist-radius, 6px);text-align:left;cursor:pointer;border:1px solid transparent;background:var(--sdc-picklist-bg, #ffffff);transition:background-color .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out}.sdc-picklist__item:hover{background:var(--sdc-picklist-hover-bg, #f7f7f7)}.sdc-picklist__item:focus-visible{outline:2px solid var(--sdc-picklist-focus, currentColor);outline-offset:2px}.sdc-picklist__item--selected{background:var(--sdc-picklist-selected-bg, #eeebf2);border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__item--selected:hover{background:var(--sdc-picklist-selected-bg, #eeebf2);border-color:var(--sdc-picklist-focus, #428bca);box-shadow:inset 0 0 0 1px var(--sdc-picklist-focus, #428bca)}.sdc-picklist__item--skeleton{display:block;width:100%;height:72px;min-height:72px;border:1px solid var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-picklist-radius, 6px);background:var(--sdc-picklist-bg, #ffffff);box-sizing:border-box;pointer-events:none;cursor:default}.sdc-picklist__check{display:inline-flex;align-items:center}.sdc-picklist__icon{width:40px;height:40px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:var(--sdc-picklist-icon-bg, #f3f4f6);color:var(--sdc-picklist-icon-color, #111827);flex:0 0 auto}.sdc-picklist__texts{display:flex;flex-direction:column;min-width:0}.sdc-picklist__title{font-weight:600;color:var(--sdc-picklist-title-color, #111827);line-height:1.2}.sdc-picklist__subtitle{margin-top:.125rem;color:var(--sdc-picklist-subtitle-color, #6b7280);font-size:.875rem;line-height:1.2}.sdc-picklist__footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.sdc-picklist__footer-left{display:inline-flex;align-items:center;gap:.5rem;flex:0 0 auto;min-width:0}.sdc-picklist__footer-paginator{display:inline-flex;align-items:center;flex:0 0 auto;min-width:0}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator{width:auto;padding:10px 10px 10px 0;display:flex;align-items:center;justify-content:space-between;gap:1rem}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator-left{display:inline-flex;align-items:center;gap:.75rem}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator-pages{display:inline-flex;align-items:center;gap:0}.sdc-picklist__selection-counter-wrap{display:inline-flex;align-items:center;justify-content:center;height:calc(var(--sdc-paginator-page-size, 34px) + 20px);min-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);max-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);box-sizing:border-box}.sdc-picklist__selection-counter{appearance:none;-webkit-appearance:none;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;height:var(--sdc-paginator-page-size, 34px);min-height:var(--sdc-paginator-page-size, 34px);max-height:var(--sdc-paginator-page-size, 34px);margin:0;padding:0 .75rem;border:1px solid var(--sdc-paginator-border, #cccccc);border-radius:4px;background:var(--sdc-table-white, #ffffff);color:var(--sdc-paginator-primary, #428bca);font-size:14px;font-weight:400;line-height:1;white-space:nowrap;vertical-align:middle;position:static}.sdc-picklist__selection-counter i,.sdc-picklist__selection-counter span{display:inline-flex;align-items:center;justify-content:center;line-height:1;position:static;top:auto}.sdc-picklist__selection-counter i{font-size:.875rem;color:var(--sdc-paginator-primary, #428bca)}.sdc-picklist__selection-counter span{font-size:14px}.sdc-picklist__selection-counter:focus-visible{outline:2px solid currentColor;outline-offset:2px;position:relative;z-index:1}.sdc-picklist__results{display:inline-flex;align-items:center;justify-content:flex-end;min-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);margin-left:auto;color:var(--sdc-picklist-results-color, #6b7280);font-size:14px;font-weight:400;white-space:nowrap;flex:0 0 auto}.sdc-picklist__empty{min-height:12rem;border:1px solid var(--sdc-formfield-default-border, #dedce5);border-radius:var(--sdc-formfield-border-radius, 6px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1rem;text-align:center}.sdc-picklist__empty-icon{font-size:1.5rem;color:var(--sdc-picklist-subtitle-color, #6b7280)}.sdc-picklist__empty-title{font-weight:600;color:var(--sdc-picklist-title-color, #111827)}.sdc-picklist__empty-text{color:var(--sdc-picklist-subtitle-color, #6b7280);font-size:.875rem}@media (max-width: 768px){.sdc-picklist__footer{flex-wrap:wrap;align-items:flex-start}.sdc-picklist__footer-left{flex-wrap:wrap}.sdc-picklist__results{width:100%;min-height:auto;margin-left:0;justify-content:flex-start}.sdc-picklist__selection-counter-wrap{height:auto;min-height:auto;max-height:none}.sdc-picklist__selection-counter{position:static}.sdc-picklist__selection-counter span{position:static;top:auto}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: LoadingStateComponent, selector: "sdc-loading-state", inputs: ["indicator", "id", "blockWindow", "blockDelayMs", "unblockDelayMs", "loading"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
286
286
  }
287
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistComponent, decorators: [{
288
288
  type: Component,
@@ -295,7 +295,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
295
295
  LoadingStateComponent,
296
296
  TranslateModule
297
297
  ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-picklist\">\n <sdc-loading-state\n class=\"sdc-picklist__loading-state\"\n [loading]=\"isLoading()\"\n [blockWindow]=\"loadingBlockWindow\"\n [indicator]=\"loadingIndicator\"\n [blockDelayMs]=\"loadingBlockDelayMs\"\n >\n <div #searchSection class=\"sdc-picklist__search\">\n <sdc-searchbox\n [placeholder]=\"placeholder | translate\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearchTerm($event)\"\n ></sdc-searchbox>\n </div>\n\n <div\n #selectedSection\n class=\"sdc-picklist__selected\"\n [class.sdc-picklist__selected--has-items]=\"selectedCount > 0\"\n >\n @if (selectedCount > 0) {\n <div class=\"sdc-picklist__chips\" [class.sdc-picklist__chips--expanded]=\"selectedExpanded\">\n @for (item of visibleSelectedItems; track trackById($index, item)) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip\"\n (click)=\"remove(item)\"\n >\n <span class=\"sdc-picklist__chip-text\">{{ getTitle(item) | translate }}</span>\n <span class=\"sdc-picklist__chip-x\">\u00D7</span>\n </button>\n }\n\n @if (!selectedExpanded && hiddenSelectedCount > 0) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip sdc-picklist__chip--more\"\n (click)=\"toggleSelectedExpanded(true)\"\n >\n +{{ hiddenSelectedCount }}\n </button>\n }\n\n @if (selectedExpanded && hiddenSelectedCount > 0) {\n <button\n type=\"button\"\n class=\"sdc-picklist__chip sdc-picklist__chip--less\"\n (click)=\"toggleSelectedExpanded(false)\"\n >\n {{ 'platform.datacore.less' | translate }}\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-picklist__content\">\n @if (showSkeleton) {\n <ul class=\"sdc-picklist__list\">\n @for (row of skeletonRows; track row) {\n <li class=\"sdc-picklist__list-item sdc-picklist__list-item--skeleton\">\n <div class=\"sdc-picklist__item sdc-picklist__item--skeleton\"></div>\n </li>\n }\n </ul>\n } @else if (pageItems.length > 0) {\n <ul class=\"sdc-picklist__list\">\n @for (item of pageItems; track trackById($index, item)) {\n <li class=\"sdc-picklist__list-item\">\n <button\n type=\"button\"\n class=\"sdc-picklist__item\"\n [class.sdc-picklist__item--selected]=\"isSelected(item)\"\n (click)=\"rowClick(item)\"\n >\n <span class=\"sdc-picklist__check\" (click)=\"$event.stopPropagation()\">\n <sdc-checkbox\n [ngModel]=\"isSelected(item)\"\n (ngModelChange)=\"toggle(item, $event)\"\n ></sdc-checkbox>\n </span>\n\n @if (showItemIcon) {\n <span class=\"sdc-picklist__icon\">\n <i [class]=\"iconClass\"></i>\n </span>\n }\n\n <span class=\"sdc-picklist__texts\">\n <span class=\"sdc-picklist__title\">{{ getTitle(item) | translate }}</span>\n @if (getSubtitle(item)) {\n <span class=\"sdc-picklist__subtitle\">{{ getSubtitle(item) | translate }}</span>\n }\n </span>\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"sdc-picklist__empty\">\n <i [class]=\"emptyIconClass + ' sdc-picklist__empty-icon'\"></i>\n <div class=\"sdc-picklist__empty-title\">\n {{ emptyTitle | translate }}\n </div>\n <div class=\"sdc-picklist__empty-text\">\n {{ emptyText | translate }}\n </div>\n </div>\n }\n </div>\n\n @if (showPaginator) {\n <div #footerSection class=\"sdc-picklist__footer\">\n <div class=\"sdc-picklist__footer-left\">\n @if (showSelectionCounter) {\n <div class=\"sdc-picklist__selection-counter-wrap\">\n <button type=\"button\" class=\"sdc-picklist__selection-counter\">\n <i [class]=\"selectionIconClass\"></i>\n <span>{{ selectedCount }}</span>\n </button>\n </div>\n }\n\n <div class=\"sdc-picklist__footer-paginator\">\n <sdc-paginator\n [first]=\"firstValue\"\n [rows]=\"activeRows\"\n [totalRecords]=\"totalRecords\"\n [rowsPerPageOptions]=\"paginatorRowsPerPageOptions\"\n (pageChange)=\"onPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n\n @if (showResultsCounter) {\n <div class=\"sdc-picklist__results\">\n {{ totalRecords }} {{ resultsCounterLabel | translate }}\n </div>\n }\n </div>\n }\n </sdc-loading-state>\n</div>\n", styles: [":host{display:block}.sdc-picklist{width:100%}.sdc-picklist__loading-state{display:block;width:100%}.sdc-picklist__search{padding-bottom:.75rem}.sdc-picklist__content{width:100%}.sdc-picklist__selected{padding:.25rem 0 .75rem}.sdc-picklist__chips{display:flex;gap:.5rem;align-items:center;flex-wrap:nowrap;overflow:hidden;min-width:0}.sdc-picklist__chips--expanded{flex-wrap:wrap;overflow:visible}.sdc-picklist__chip{display:inline-flex;align-items:center;gap:.5rem;border:1px solid transparent;background:var(--sdc-picklist-selected-bg, #eeebf2);border-radius:var(--sdc-picklist-chip-radius, 6px);padding:.25rem .5rem;cursor:pointer;transition:border-color .16s ease-out,background-color .16s ease-out;flex:0 1 auto;min-width:0}.sdc-picklist__chip:hover{border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__chip:focus-visible{outline:2px solid var(--sdc-picklist-focus, currentColor);outline-offset:2px}.sdc-picklist__chip-text{font-weight:500;color:var(--sdc-picklist-title-color, #111827);max-width:var(--sdc-picklist-chip-max-width, 220px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.sdc-picklist__chip-x{font-size:.875rem;opacity:.8;flex:0 0 auto}.sdc-picklist__chip--more,.sdc-picklist__chip--less{background:var(--sdc-picklist-more-bg, #eeebf2);border-color:transparent;font-weight:600;margin-left:auto;flex:0 0 auto;white-space:nowrap}.sdc-picklist__chip--more:hover,.sdc-picklist__chip--less:hover{border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.sdc-picklist__list-item,.sdc-picklist__list-item--skeleton{margin:0}.sdc-picklist__item{width:100%;display:flex;align-items:center;gap:.875rem;padding:1rem;border-radius:var(--sdc-picklist-radius, 6px);text-align:left;cursor:pointer;border:1px solid transparent;background:var(--sdc-picklist-bg, #ffffff);transition:background-color .16s ease-out,border-color .16s ease-out,box-shadow .16s ease-out}.sdc-picklist__item:hover{background:var(--sdc-picklist-hover-bg, #f7f7f7)}.sdc-picklist__item:focus-visible{outline:2px solid var(--sdc-picklist-focus, currentColor);outline-offset:2px}.sdc-picklist__item--selected{background:var(--sdc-picklist-selected-bg, #eeebf2);border-color:var(--sdc-picklist-selected-border, #dedce5)}.sdc-picklist__item--selected:hover{background:var(--sdc-picklist-selected-bg, #eeebf2);border-color:var(--sdc-picklist-focus, #428bca);box-shadow:inset 0 0 0 1px var(--sdc-picklist-focus, #428bca)}.sdc-picklist__item--skeleton{display:block;width:100%;height:72px;min-height:72px;border:1px solid var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-picklist-radius, 6px);background:var(--sdc-picklist-bg, #ffffff);box-sizing:border-box;pointer-events:none;cursor:default}.sdc-picklist__check{display:inline-flex;align-items:center}.sdc-picklist__icon{width:40px;height:40px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:var(--sdc-picklist-icon-bg, #f3f4f6);color:var(--sdc-picklist-icon-color, #111827);flex:0 0 auto}.sdc-picklist__texts{display:flex;flex-direction:column;min-width:0}.sdc-picklist__title{font-weight:600;color:var(--sdc-picklist-title-color, #111827);line-height:1.2}.sdc-picklist__subtitle{margin-top:.125rem;color:var(--sdc-picklist-subtitle-color, #6b7280);font-size:.875rem;line-height:1.2}.sdc-picklist__footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%}.sdc-picklist__footer-left{display:inline-flex;align-items:center;gap:.5rem;flex:0 0 auto;min-width:0}.sdc-picklist__footer-paginator{display:inline-flex;align-items:center;flex:0 0 auto;min-width:0}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator{width:auto;padding:10px 10px 10px 0;display:flex;align-items:center;justify-content:space-between;gap:1rem}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator-left{display:inline-flex;align-items:center;gap:.75rem}.sdc-picklist__footer-paginator ::ng-deep .sdc-paginator-pages{display:inline-flex;align-items:center;gap:0}.sdc-picklist__selection-counter-wrap{display:inline-flex;align-items:center;justify-content:center;height:calc(var(--sdc-paginator-page-size, 34px) + 20px);min-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);max-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);box-sizing:border-box}.sdc-picklist__selection-counter{appearance:none;-webkit-appearance:none;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:.375rem;height:var(--sdc-paginator-page-size, 34px);min-height:var(--sdc-paginator-page-size, 34px);max-height:var(--sdc-paginator-page-size, 34px);margin:0;padding:0 .75rem;border:1px solid var(--sdc-paginator-border, #cccccc);border-radius:4px;background:var(--sdc-table-white, #ffffff);color:var(--sdc-paginator-primary, #428bca);font-size:14px;font-weight:400;line-height:1;white-space:nowrap;vertical-align:middle;position:static}.sdc-picklist__selection-counter i,.sdc-picklist__selection-counter span{display:inline-flex;align-items:center;justify-content:center;line-height:1;position:static;top:auto}.sdc-picklist__selection-counter i{font-size:.875rem;color:var(--sdc-paginator-primary, #428bca)}.sdc-picklist__selection-counter span{font-size:14px}.sdc-picklist__selection-counter:focus-visible{outline:2px solid currentColor;outline-offset:2px;position:relative;z-index:1}.sdc-picklist__results{display:inline-flex;align-items:center;justify-content:flex-end;min-height:calc(var(--sdc-paginator-page-size, 34px) + 20px);margin-left:auto;color:var(--sdc-picklist-results-color, #6b7280);font-size:14px;font-weight:400;white-space:nowrap;flex:0 0 auto}.sdc-picklist__empty{min-height:12rem;border:1px solid var(--sdc-formfield-default-border, #dedce5);border-radius:var(--sdc-formfield-border-radius, 6px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1rem;text-align:center}.sdc-picklist__empty-icon{font-size:1.5rem;color:var(--sdc-picklist-subtitle-color, #6b7280)}.sdc-picklist__empty-title{font-weight:600;color:var(--sdc-picklist-title-color, #111827)}.sdc-picklist__empty-text{color:var(--sdc-picklist-subtitle-color, #6b7280);font-size:.875rem}@media (max-width: 768px){.sdc-picklist__footer{flex-wrap:wrap;align-items:flex-start}.sdc-picklist__footer-left{flex-wrap:wrap}.sdc-picklist__results{width:100%;min-height:auto;margin-left:0;justify-content:flex-start}.sdc-picklist__selection-counter-wrap{height:auto;min-height:auto;max-height:none}.sdc-picklist__selection-counter{position:static}.sdc-picklist__selection-counter span{position:static;top:auto}}\n"] }]
298
- }], propDecorators: { items: [{
298
+ }], propDecorators: { loadingIndicator: [{
299
+ type: Input
300
+ }], items: [{
299
301
  type: Input,
300
302
  args: [{ required: true }]
301
303
  }], selectedIds: [{
@@ -377,4 +379,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
377
379
  type: ViewChild,
378
380
  args: [SearchboxComponent]
379
381
  }] } });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9waWNrbGlzdC9waWNrbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3BpY2tsaXN0L3BpY2tsaXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHdDQUF3QyxFQUN4QyxxQ0FBcUMsRUFDckMscUNBQXFDLEVBQ3JDLDRDQUE0QyxFQUM1QyxpQ0FBaUMsRUFDakMsMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QiwyQ0FBMkMsRUFDM0MsNEJBQTRCLEVBQzVCLDZDQUE2QyxFQUM3QywrQ0FBK0MsRUFDL0MscUJBQXFCLEVBQ3JCLHNDQUFzQyxFQUN0QyxxQ0FBcUMsRUFDckMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixxQ0FBcUMsRUFDckMsMkNBQTJDLEVBQzNDLHVDQUF1QyxFQUN2Qyw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ3BCLE1BQU0scUNBQXFDLENBQUM7QUFHN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBbUJ0RSxNQUFNLE9BQU8saUJBQWlCO0lBQ1Qsa0JBQWtCLEdBQUcsNkJBQTZCLENBQUM7SUFDbkQsZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUM7SUFDOUMsbUJBQW1CLEdBQUcsK0JBQStCLENBQUM7SUFFOUMsS0FBSyxHQUFxQixFQUFFLENBQUM7SUFDL0MsV0FBVyxHQUEyQixFQUFFLENBQUM7SUFFekMsS0FBSyxHQUFHLHVCQUF1QixDQUFDO0lBQ2hDLFFBQVEsR0FBRywwQkFBMEIsQ0FBQztJQUN0QyxXQUFXLEdBQUcsNkJBQTZCLENBQUM7SUFDNUMsU0FBUyxHQUFHLDJCQUEyQixDQUFDO0lBQ3hDLGtCQUFrQixHQUFHLHFDQUFxQyxDQUFDO0lBQzNELFdBQVcsR0FBRyw0QkFBNEIsQ0FBQztJQUMzQyxVQUFVLEdBQUcsNEJBQTRCLENBQUM7SUFDMUMsU0FBUyxHQUFHLDJCQUEyQixDQUFDO0lBQ3hDLGNBQWMsR0FBRyxpQ0FBaUMsQ0FBQztJQUNuRCwyQkFBMkIsR0FBRywrQ0FBK0MsQ0FBQztJQUM5RSx5QkFBeUIsR0FBRyw2Q0FBNkMsQ0FBQztJQUMxRSxZQUFZLEdBQWEsRUFBRSxDQUFDO0lBRTVCLEtBQUssR0FBRyxzQkFBc0IsQ0FBQztJQUMvQixJQUFJLEdBQUcscUJBQXFCLENBQUM7SUFDN0Isa0JBQWtCLEdBQWEsQ0FBQyxHQUFHLHNDQUFzQyxDQUFDLENBQUM7SUFDM0UsdUJBQXVCLEdBQUcsMkNBQTJDLENBQUM7SUFFdEUsYUFBYSxHQUFHLCtCQUErQixDQUFDO0lBQ2hELHNCQUFzQixHQUFHLDJDQUEyQyxDQUFDO0lBQ3JFLG9CQUFvQixHQUFHLHVDQUF1QyxDQUFDO0lBQy9ELGtCQUFrQixHQUFHLHFDQUFxQyxDQUFDO0lBQzNELFlBQVksR0FBRywrQkFBK0IsQ0FBQztJQUUvQyxVQUFVLEdBQUcsNEJBQTRCLENBQUM7SUFDMUMsaUJBQWlCLEdBQUcscUNBQXFDLENBQUM7SUFDMUQsaUJBQWlCLEdBQUcscUNBQXFDLENBQUM7SUFDMUQsb0JBQW9CLEdBQUcsd0NBQXdDLENBQUM7SUFDaEUsd0JBQXdCLEdBQUcsNENBQTRDLENBQUM7SUFFeEUsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUVqQyxJQUNJLE9BQU8sQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRVMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBQ2hELGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7SUFFZCxnQkFBZ0IsQ0FBMkI7SUFDekMsa0JBQWtCLENBQTJCO0lBQy9DLGdCQUFnQixDQUEyQjtJQUN4QyxZQUFZLENBQXNCO0lBRWpFLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXRCLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUVoRCxhQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLFNBQVMsR0FBRyxNQUFNLENBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RILHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUN4QixjQUFjLENBQWtCO0lBRXhDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUNwRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFFLFVBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO2dCQUNqQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDOUQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBcUI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDbEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQztZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQjtZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLDJCQUEyQjtRQUM3QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELFNBQVMsR0FBRyxDQUFDLE1BQWMsRUFBRSxJQUFvQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFekUsUUFBUSxDQUFDLElBQW9CO1FBQzNCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjO1lBQ2xFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRztZQUMzQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFvQjtRQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUI7WUFDeEUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUc7WUFDOUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNaLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBb0I7UUFDN0IsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBb0IsRUFBRSxPQUFnQjtRQUMzQyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBb0I7UUFDM0IsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBb0I7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQWlCO1FBQ3RDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxJQUFvQjtRQUM5QyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFvQixFQUFFLElBQVk7UUFDM0QsTUFBTSxRQUFRLEdBQUcsSUFBSTthQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDaEMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTNDLElBQUksT0FBTyxHQUFZLElBQUksQ0FBQztRQUU1QixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3RSxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxPQUFPLEdBQUksT0FBbUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2pFLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBQzVFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNoRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7UUFDNUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFDbEQsY0FBYyxHQUFHLFlBQVksR0FBRyxjQUFjLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUYsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQ3pILENBQUM7UUFFRixJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2pCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLHNCQUFzQjthQUM5QixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO3dHQTVWVSxpQkFBaUI7NEZBQWpCLGlCQUFpQix1a0RBcURqQixrQkFBa0IscUVDdEkvQixpbUtBZ0pBLDRsTkQ1RUksWUFBWSw4QkFDWixXQUFXLCtWQUNYLGlCQUFpQiwwS0FDakIsa0JBQWtCLGdOQUNsQixrQkFBa0Isb1dBQ2xCLHFCQUFxQixzSkFDckIsZUFBZTs7NEZBT04saUJBQWlCO2tCQWpCN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLGVBQWU7cUJBQ2hCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxRQUFROzhCQU9kLEtBQUs7c0JBQS9CLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixXQUFXO3NCQUFuQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdGLE9BQU87c0JBRFYsS0FBSztnQkFLSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFc0MsZ0JBQWdCO3NCQUE1RCxTQUFTO3VCQUFDLGVBQWU7Z0JBQ3FCLGtCQUFrQjtzQkFBaEUsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ2lCLGdCQUFnQjtzQkFBNUQsU0FBUzt1QkFBQyxlQUFlO2dCQUNzQixZQUFZO3NCQUEzRCxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge1xuICBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFLFxuICBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFX0lURU1fSEVJR0hULFxuICBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFX01BWF9ST1dTLFxuICBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFX01JTl9ST1dTLFxuICBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFX1ZJRVdQT1JUX09GRlNFVCxcbiAgREVGQVVMVF9QSUNLTElTVF9FTVBUWV9JQ09OX0NMQVNTLFxuICBERUZBVUxUX1BJQ0tMSVNUX0VNUFRZX1RFWFQsXG4gIERFRkFVTFRfUElDS0xJU1RfRU1QVFlfVElUTEUsXG4gIERFRkFVTFRfUElDS0xJU1RfRklSU1QsXG4gIERFRkFVTFRfUElDS0xJU1RfSUNPTl9DTEFTUyxcbiAgREVGQVVMVF9QSUNLTElTVF9JRF9LRVksXG4gIERFRkFVTFRfUElDS0xJU1RfTUFYX1ZJU0lCTEVfU0VMRUNURURfSVRFTVMsXG4gIERFRkFVTFRfUElDS0xJU1RfUExBQ0VIT0xERVIsXG4gIERFRkFVTFRfUElDS0xJU1RfUkVTVUxUU19DT1VOVEVSX1BMVVJBTF9MQUJFTCxcbiAgREVGQVVMVF9QSUNLTElTVF9SRVNVTFRTX0NPVU5URVJfU0lOR1VMQVJfTEFCRUwsXG4gIERFRkFVTFRfUElDS0xJU1RfUk9XUyxcbiAgREVGQVVMVF9QSUNLTElTVF9ST1dTX1BFUl9QQUdFX09QVElPTlMsXG4gIERFRkFVTFRfUElDS0xJU1RfU0VMRUNUSU9OX0lDT05fQ0xBU1MsXG4gIERFRkFVTFRfUElDS0xJU1RfU0hPV19JVEVNX0lDT04sXG4gIERFRkFVTFRfUElDS0xJU1RfU0hPV19QQUdJTkFUT1IsXG4gIERFRkFVTFRfUElDS0xJU1RfU0hPV19SRVNVTFRTX0NPVU5URVIsXG4gIERFRkFVTFRfUElDS0xJU1RfU0hPV19ST1dTX1BFUl9QQUdFX09QVElPTlMsXG4gIERFRkFVTFRfUElDS0xJU1RfU0hPV19TRUxFQ1RJT05fQ09VTlRFUixcbiAgREVGQVVMVF9QSUNLTElTVF9TVUJUSVRMRV9LRVksXG4gIERFRkFVTFRfUElDS0xJU1RfVElUTEVfS0VZLFxuICBQSUNLTElTVF9ESVZJU09SX0ZBTExCQUNLLFxuICBQSUNLTElTVF9MT0FESU5HX0JMT0NLX0RFTEFZX01TLFxuICBQSUNLTElTVF9MT0FESU5HX0JMT0NLX1dJTkRPVyxcbiAgUElDS0xJU1RfTE9BRElOR19JTkRJQ0FUT1IsXG4gIFBJQ0tMSVNUX01JTl9TS0VMRVRPTl9ST1dTLFxuICBQSUNLTElTVF9QQUdFX0lOREVYXG59IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL3BpY2tsaXN0LmNvbnN0JztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BhZ2luYXRvci50eXBlJztcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RSZWNvcmQgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BpY2tsaXN0LnR5cGUnO1xuaW1wb3J0IHsgdG9JbnRlZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9udW1iZXIudXRpbCc7XG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLXN0YXRlL2xvYWRpbmctc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaGJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXBpY2tsaXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgU2VhcmNoYm94Q29tcG9uZW50LFxuICAgIExvYWRpbmdTdGF0ZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tsaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGluZ0Jsb2NrV2luZG93ID0gUElDS0xJU1RfTE9BRElOR19CTE9DS19XSU5ET1c7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2FkaW5nSW5kaWNhdG9yID0gUElDS0xJU1RfTE9BRElOR19JTkRJQ0FUT1I7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2FkaW5nQmxvY2tEZWxheU1zID0gUElDS0xJU1RfTE9BRElOR19CTE9DS19ERUxBWV9NUztcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBpdGVtczogUGlja2xpc3RSZWNvcmRbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZElkczogbnVtYmVyW10gfCBTZXQ8bnVtYmVyPiA9IFtdO1xuXG4gIEBJbnB1dCgpIGlkS2V5ID0gREVGQVVMVF9QSUNLTElTVF9JRF9LRVk7XG4gIEBJbnB1dCgpIHRpdGxlS2V5ID0gREVGQVVMVF9QSUNLTElTVF9USVRMRV9LRVk7XG4gIEBJbnB1dCgpIHN1YnRpdGxlS2V5ID0gREVGQVVMVF9QSUNLTElTVF9TVUJUSVRMRV9LRVk7XG4gIEBJbnB1dCgpIGljb25DbGFzcyA9IERFRkFVTFRfUElDS0xJU1RfSUNPTl9DTEFTUztcbiAgQElucHV0KCkgc2VsZWN0aW9uSWNvbkNsYXNzID0gREVGQVVMVF9QSUNLTElTVF9TRUxFQ1RJT05fSUNPTl9DTEFTUztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSBERUZBVUxUX1BJQ0tMSVNUX1BMQUNFSE9MREVSO1xuICBASW5wdXQoKSBlbXB0eVRpdGxlID0gREVGQVVMVF9QSUNLTElTVF9FTVBUWV9USVRMRTtcbiAgQElucHV0KCkgZW1wdHlUZXh0ID0gREVGQVVMVF9QSUNLTElTVF9FTVBUWV9URVhUO1xuICBASW5wdXQoKSBlbXB0eUljb25DbGFzcyA9IERFRkFVTFRfUElDS0xJU1RfRU1QVFlfSUNPTl9DTEFTUztcbiAgQElucHV0KCkgcmVzdWx0c0NvdW50ZXJTaW5ndWxhckxhYmVsID0gREVGQVVMVF9QSUNLTElTVF9SRVNVTFRTX0NPVU5URVJfU0lOR1VMQVJfTEFCRUw7XG4gIEBJbnB1dCgpIHJlc3VsdHNDb3VudGVyUGx1cmFsTGFiZWwgPSBERUZBVUxUX1BJQ0tMSVNUX1JFU1VMVFNfQ09VTlRFUl9QTFVSQUxfTEFCRUw7XG4gIEBJbnB1dCgpIGZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBmaXJzdCA9IERFRkFVTFRfUElDS0xJU1RfRklSU1Q7XG4gIEBJbnB1dCgpIHJvd3MgPSBERUZBVUxUX1BJQ0tMSVNUX1JPV1M7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbLi4uREVGQVVMVF9QSUNLTElTVF9ST1dTX1BFUl9QQUdFX09QVElPTlNdO1xuICBASW5wdXQoKSBtYXhWaXNpYmxlU2VsZWN0ZWRJdGVtcyA9IERFRkFVTFRfUElDS0xJU1RfTUFYX1ZJU0lCTEVfU0VMRUNURURfSVRFTVM7XG5cbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvciA9IERFRkFVTFRfUElDS0xJU1RfU0hPV19QQUdJTkFUT1I7XG4gIEBJbnB1dCgpIHNob3dSb3dzUGVyUGFnZU9wdGlvbnMgPSBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfUk9XU19QRVJfUEFHRV9PUFRJT05TO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ291bnRlciA9IERFRkFVTFRfUElDS0xJU1RfU0hPV19TRUxFQ1RJT05fQ09VTlRFUjtcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudGVyID0gREVGQVVMVF9QSUNLTElTVF9TSE9XX1JFU1VMVFNfQ09VTlRFUjtcbiAgQElucHV0KCkgc2hvd0l0ZW1JY29uID0gREVGQVVMVF9QSUNLTElTVF9TSE9XX0lURU1fSUNPTjtcblxuICBASW5wdXQoKSBhdXRvUmVzaXplID0gREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZU1pblJvd3MgPSBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFX01JTl9ST1dTO1xuICBASW5wdXQoKSBhdXRvUmVzaXplTWF4Um93cyA9IERFRkFVTFRfUElDS0xJU1RfQVVUT19SRVNJWkVfTUFYX1JPV1M7XG4gIEBJbnB1dCgpIGF1dG9SZXNpemVJdGVtSGVpZ2h0ID0gREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9JVEVNX0hFSUdIVDtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZVZpZXdwb3J0T2Zmc2V0ID0gREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9WSUVXUE9SVF9PRkZTRVQ7XG5cbiAgQElucHV0KCkgbWF4VGl0bGVMZW5ndGggPSAwO1xuICBASW5wdXQoKSBtYXhTdWJ0aXRsZUxlbmd0aCA9IDA7XG4gIEBJbnB1dCgpIGF1dG9mb2N1c1NlYXJjaCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5sb2FkaW5nU3RhdGUuc2V0KCEhdmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2luYXRvclN0YXRlPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlY3Rpb24nKSBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlY3Rpb25SZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRTZWN0aW9uJykgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFNlY3Rpb25SZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZm9vdGVyU2VjdGlvbicpIHByaXZhdGUgcmVhZG9ubHkgZm9vdGVyU2VjdGlvblJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFNlYXJjaGJveENvbXBvbmVudCkgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hib3hSZWY/OiBTZWFyY2hib3hDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTdGF0ZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvYWRpbmdTdGF0ZSgpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyZWRRdWVyeSA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlU3RhdGUgPSBzaWduYWw8UGFnaW5hdG9yU3RhdGU+KHsgZmlyc3Q6IHRoaXMuZmlyc3QsIHJvd3M6IHRoaXMucm93cywgcGFnZTogUElDS0xJU1RfUEFHRV9JTkRFWCwgcGFnZUNvdW50OiAwIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkRXhwYW5kZWRTdGF0ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBzZWwgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRJZHMnXSkge1xuICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRJZHMgaW5zdGFuY2VvZiBTZXQgPyBbLi4udGhpcy5zZWxlY3RlZElkc10gOiB0aGlzLnNlbGVjdGVkSWRzID8/IFtdO1xuICAgICAgdGhpcy5zZWwgPSBuZXcgU2V0KChuZXh0VmFsdWVzIGFzIHVua25vd25bXSkubWFwKChpdGVtKSA9PiB0b0ludGVnZXIoaXRlbSkpLmZpbHRlcigoaXRlbSkgPT4gIU51bWJlci5pc05hTihpdGVtKSkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydmaXJzdCddIHx8IGNoYW5nZXNbJ3Jvd3MnXSkge1xuICAgICAgdGhpcy5wYWdlU3RhdGUuc2V0KHtcbiAgICAgICAgLi4udGhpcy5wYWdlU3RhdGUoKSxcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10gJiYgdGhpcy5hdXRvUmVzaXplKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLnVwZGF0ZVJvd3NGcm9tVmlld3BvcnQoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1c1NlYXJjaCkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlYXJjaGJveFJlZj8uZm9jdXNJbnB1dCgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hdXRvUmVzaXplIHx8IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy51cGRhdGVSb3dzRnJvbVZpZXdwb3J0KCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoU2VjdGlvblJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuc2VhcmNoU2VjdGlvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb25SZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnNlbGVjdGVkU2VjdGlvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb290ZXJTZWN0aW9uUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5mb290ZXJTZWN0aW9uUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUm93c0Zyb21WaWV3cG9ydCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgb25TZWFyY2godmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRRdWVyeS5zZXQodmFsdWUgPz8gJycpO1xuICAgIHRoaXMucGFnZVN0YXRlLnNldCh7IC4uLnRoaXMucGFnZVN0YXRlKCksIGZpcnN0OiBERUZBVUxUX1BJQ0tMSVNUX0ZJUlNUIH0pO1xuICB9XG5cbiAgb25TZWFyY2hUZXJtKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2VhcmNoKHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZFF1ZXJ5LnNldCgnJyk7XG4gICAgdGhpcy5wYWdlU3RhdGUuc2V0KHsgLi4udGhpcy5wYWdlU3RhdGUoKSwgZmlyc3Q6IERFRkFVTFRfUElDS0xJU1RfRklSU1QgfSk7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU3RhdGUuc2V0KGV2ZW50KTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWQoKTogUGlja2xpc3RSZWNvcmRbXSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmZpbHRlcmVkUXVlcnkoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpbHRlcmFibGVWYWx1ZXMoaXRlbSkuc29tZSgodmFsdWUpID0+IHZhbHVlLmluY2x1ZGVzKHF1ZXJ5KSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdG90YWxSZXN1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWQubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHJvd3NWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2VTdGF0ZSgpLnJvd3MgPz8gdGhpcy5yb3dzO1xuICB9XG5cbiAgZ2V0IGZpcnN0VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlU3RhdGUoKS5maXJzdCA/PyB0aGlzLmZpcnN0O1xuICB9XG5cbiAgZ2V0IHBhZ2VJdGVtcygpOiBQaWNrbGlzdFJlY29yZFtdIHtcbiAgICBpZiAoIXRoaXMuc2hvd1BhZ2luYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWQuc2xpY2UodGhpcy5maXJzdFZhbHVlLCB0aGlzLmZpcnN0VmFsdWUgKyB0aGlzLnJvd3NWYWx1ZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBQaWNrbGlzdFJlY29yZFtdIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5pdGVtcyA/PyBbXTtcbiAgICByZXR1cm4gYmFzZS5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuc2VsLmhhcyh0b0ludGVnZXIoaXRlbT8uW3RoaXMuaWRLZXldKSkpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVTZWxlY3RlZEl0ZW1zKCk6IFBpY2tsaXN0UmVjb3JkW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5zbGljZSgwLCB0aGlzLm1heFZpc2libGVTZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIGdldCBoaWRkZW5TZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSB0aGlzLnZpc2libGVTZWxlY3RlZEl0ZW1zLmxlbmd0aCk7XG4gIH1cblxuICBnZXQgc2tlbGV0b25Sb3dzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCByb3dzID0gTWF0aC5tYXgodGhpcy5yb3dzVmFsdWUsIFBJQ0tMSVNUX01JTl9TS0VMRVRPTl9ST1dTKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogcm93cyB9LCAoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgfVxuXG4gIGdldCBzZWFyY2hUZXJtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRRdWVyeSgpO1xuICB9XG5cbiAgc2V0IHNlYXJjaFRlcm0odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyZWRRdWVyeS5zZXQodmFsdWUgPz8gJycpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFeHBhbmRlZFN0YXRlKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHNob3dTa2VsZXRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmcoKSAmJiB0aGlzLnRvdGFsUmVzdWx0cyA9PT0gMDtcbiAgfVxuXG4gIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbFJlc3VsdHM7XG4gIH1cblxuICBnZXQgYWN0aXZlUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJvd3NWYWx1ZTtcbiAgfVxuXG4gIGdldCByZXN1bHRzQ291bnRlckxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxSZWNvcmRzID09PSAxXG4gICAgICA/IHRoaXMucmVzdWx0c0NvdW50ZXJTaW5ndWxhckxhYmVsXG4gICAgICA6IHRoaXMucmVzdWx0c0NvdW50ZXJQbHVyYWxMYWJlbDtcbiAgfVxuXG4gIGdldCBwYWdpbmF0b3JSb3dzUGVyUGFnZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnNob3dSb3dzUGVyUGFnZU9wdGlvbnMgPyB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucyA6IFtdO1xuICB9XG5cbiAgdHJhY2tCeUlkID0gKF9pbmRleDogbnVtYmVyLCBpdGVtOiBQaWNrbGlzdFJlY29yZCkgPT4gaXRlbT8uW3RoaXMuaWRLZXldO1xuXG4gIGdldFRpdGxlKGl0ZW06IFBpY2tsaXN0UmVjb3JkKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhpdGVtPy5bdGhpcy50aXRsZUtleV0gPz8gJycpO1xuICAgIHJldHVybiB0aGlzLm1heFRpdGxlTGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heFRpdGxlTGVuZ3RoXG4gICAgICA/IGAke3ZhbHVlLnNsaWNlKDAsIHRoaXMubWF4VGl0bGVMZW5ndGgpfeKApmBcbiAgICAgIDogdmFsdWU7XG4gIH1cblxuICBnZXRTdWJ0aXRsZShpdGVtOiBQaWNrbGlzdFJlY29yZCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoaXRlbT8uW3RoaXMuc3VidGl0bGVLZXldID8/ICcnKTtcbiAgICByZXR1cm4gdGhpcy5tYXhTdWJ0aXRsZUxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhTdWJ0aXRsZUxlbmd0aFxuICAgICAgPyBgJHt2YWx1ZS5zbGljZSgwLCB0aGlzLm1heFN1YnRpdGxlTGVuZ3RoKX3igKZgXG4gICAgICA6IHZhbHVlO1xuICB9XG5cbiAgaXNTZWxlY3RlZChpdGVtOiBQaWNrbGlzdFJlY29yZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gdG9JbnRlZ2VyKGl0ZW0/Llt0aGlzLmlkS2V5XSk7XG4gICAgcmV0dXJuICFOdW1iZXIuaXNOYU4oaWQpICYmIHRoaXMuc2VsLmhhcyhpZCk7XG4gIH1cblxuICB0b2dnbGUoaXRlbTogUGlja2xpc3RSZWNvcmQsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRvSW50ZWdlcihpdGVtPy5bdGhpcy5pZEtleV0pO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsLmFkZChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICByb3dDbGljayhpdGVtOiBQaWNrbGlzdFJlY29yZCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdG9JbnRlZ2VyKGl0ZW0/Llt0aGlzLmlkS2V5XSk7XG4gICAgaWYgKE51bWJlci5pc05hTihpZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZShpdGVtLCAhdGhpcy5zZWwuaGFzKGlkKSk7XG4gIH1cblxuICByZW1vdmUoaXRlbTogUGlja2xpc3RSZWNvcmQpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZShpdGVtLCBmYWxzZSk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RlZEV4cGFuZGVkKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEV4cGFuZGVkU3RhdGUuc2V0KGV4cGFuZGVkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQoWy4uLnRoaXMuc2VsXSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcmFibGVWYWx1ZXMoaXRlbTogUGlja2xpc3RSZWNvcmQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUZpbHRlckZpZWxkUGF0aHMoKS5tYXAoKHBhdGgpID0+IHRoaXMuZ2V0SXRlbVZhbHVlQnlQYXRoKGl0ZW0sIHBhdGgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUZpbHRlckZpZWxkUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLmZpbHRlckZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJGaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHJldHVybiBbdGhpcy50aXRsZUtleSwgdGhpcy5zdWJ0aXRsZUtleV0uZmlsdGVyKChmaWVsZCkgPT4gZmllbGQudHJpbSgpLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtVmFsdWVCeVBhdGgoaXRlbTogUGlja2xpc3RSZWNvcmQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApO1xuXG4gICAgbGV0IGN1cnJlbnQ6IHVua25vd24gPSBpdGVtO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgY3VycmVudCA9IChjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKGN1cnJlbnQgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvd3NGcm9tVmlld3BvcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmF1dG9SZXNpemUgfHwgdHlwZW9mIGdsb2JhbFRoaXMud2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZ2xvYmFsVGhpcy53aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgY29uc3Qgc2VhcmNoSGVpZ2h0ID0gdGhpcy5zZWFyY2hTZWN0aW9uUmVmPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwO1xuICAgIGNvbnN0IHNlbGVjdGVkSGVpZ2h0ID0gdGhpcy5zZWxlY3RlZFNlY3Rpb25SZWY/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ID8/IDA7XG4gICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gdGhpcy5mb290ZXJTZWN0aW9uUmVmPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwO1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5hdXRvUmVzaXplTWluUm93cyAqIHRoaXMuYXV0b1Jlc2l6ZUl0ZW1IZWlnaHQsXG4gICAgICB2aWV3cG9ydEhlaWdodCAtIHNlYXJjaEhlaWdodCAtIHNlbGVjdGVkSGVpZ2h0IC0gZm9vdGVySGVpZ2h0IC0gdGhpcy5hdXRvUmVzaXplVmlld3BvcnRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgbmV4dFJvd3MgPSBNYXRoLm1heChcbiAgICAgIHRoaXMuYXV0b1Jlc2l6ZU1pblJvd3MsXG4gICAgICBNYXRoLm1pbih0aGlzLmF1dG9SZXNpemVNYXhSb3dzLCBNYXRoLmZsb29yKGF2YWlsYWJsZSAvIE1hdGgubWF4KHRoaXMuYXV0b1Jlc2l6ZUl0ZW1IZWlnaHQsIFBJQ0tMSVNUX0RJVklTT1JfRkFMTEJBQ0spKSlcbiAgICApO1xuXG4gICAgaWYgKG5leHRSb3dzICE9PSB0aGlzLnBhZ2VTdGF0ZSgpLnJvd3MpIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlLnNldCh7XG4gICAgICAgIC4uLnRoaXMucGFnZVN0YXRlKCksXG4gICAgICAgIHJvd3M6IG5leHRSb3dzLFxuICAgICAgICBmaXJzdDogREVGQVVMVF9QSUNLTElTVF9GSVJTVFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtcGlja2xpc3RcIj5cbiAgPHNkYy1sb2FkaW5nLXN0YXRlXG4gICAgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2xvYWRpbmctc3RhdGVcIlxuICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICBbYmxvY2tXaW5kb3ddPVwibG9hZGluZ0Jsb2NrV2luZG93XCJcbiAgICBbaW5kaWNhdG9yXT1cImxvYWRpbmdJbmRpY2F0b3JcIlxuICAgIFtibG9ja0RlbGF5TXNdPVwibG9hZGluZ0Jsb2NrRGVsYXlNc1wiXG4gID5cbiAgICA8ZGl2ICNzZWFyY2hTZWN0aW9uIGNsYXNzPVwic2RjLXBpY2tsaXN0X19zZWFyY2hcIj5cbiAgICAgIDxzZGMtc2VhcmNoYm94XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoVGVybSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy1zZWFyY2hib3g+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAjc2VsZWN0ZWRTZWN0aW9uXG4gICAgICBjbGFzcz1cInNkYy1waWNrbGlzdF9fc2VsZWN0ZWRcIlxuICAgICAgW2NsYXNzLnNkYy1waWNrbGlzdF9fc2VsZWN0ZWQtLWhhcy1pdGVtc109XCJzZWxlY3RlZENvdW50ID4gMFwiXG4gICAgPlxuICAgICAgQGlmIChzZWxlY3RlZENvdW50ID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19jaGlwc1wiIFtjbGFzcy5zZGMtcGlja2xpc3RfX2NoaXBzLS1leHBhbmRlZF09XCJzZWxlY3RlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiB2aXNpYmxlU2VsZWN0ZWRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLXBpY2tsaXN0X19jaGlwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShpdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXBpY2tsaXN0X19jaGlwLXRleHRcIj57eyBnZXRUaXRsZShpdGVtKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcGlja2xpc3RfX2NoaXAteFwiPsOXPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmICghc2VsZWN0ZWRFeHBhbmRlZCAmJiBoaWRkZW5TZWxlY3RlZENvdW50ID4gMCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2NoaXAgc2RjLXBpY2tsaXN0X19jaGlwLS1tb3JlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGVkRXhwYW5kZWQodHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgaGlkZGVuU2VsZWN0ZWRDb3VudCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChzZWxlY3RlZEV4cGFuZGVkICYmIGhpZGRlblNlbGVjdGVkQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy1waWNrbGlzdF9fY2hpcCBzZGMtcGlja2xpc3RfX2NoaXAtLWxlc3NcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWRFeHBhbmRlZChmYWxzZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUubGVzcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19jb250ZW50XCI+XG4gICAgICBAaWYgKHNob3dTa2VsZXRvbikge1xuICAgICAgICA8dWwgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2xpc3RcIj5cbiAgICAgICAgICBAZm9yIChyb3cgb2Ygc2tlbGV0b25Sb3dzOyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInNkYy1waWNrbGlzdF9fbGlzdC1pdGVtIHNkYy1waWNrbGlzdF9fbGlzdC1pdGVtLS1za2VsZXRvblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19pdGVtIHNkYy1waWNrbGlzdF9faXRlbS0tc2tlbGV0b25cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgfVxuICAgICAgICA8L3VsPlxuICAgICAgfSBAZWxzZSBpZiAocGFnZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHVsIGNsYXNzPVwic2RjLXBpY2tsaXN0X19saXN0XCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBwYWdlSXRlbXM7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2xpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2l0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtcGlja2xpc3RfX2l0ZW0tLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3dDbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waWNrbGlzdF9fY2hlY2tcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGUoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgQGlmIChzaG93SXRlbUljb24pIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXBpY2tsaXN0X19pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpY29uQ2xhc3NcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcGlja2xpc3RfX3RleHRzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waWNrbGlzdF9fdGl0bGVcIj57eyBnZXRUaXRsZShpdGVtKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0U3VidGl0bGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcGlja2xpc3RfX3N1YnRpdGxlXCI+e3sgZ2V0U3VidGl0bGUoaXRlbSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgfVxuICAgICAgICA8L3VsPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2VtcHR5XCI+XG4gICAgICAgICAgPGkgW2NsYXNzXT1cImVtcHR5SWNvbkNsYXNzICsgJyBzZGMtcGlja2xpc3RfX2VtcHR5LWljb24nXCI+PC9pPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2VtcHR5LXRpdGxlXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1waWNrbGlzdF9fZW1wdHktdGV4dFwiPlxuICAgICAgICAgICAge3sgZW1wdHlUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzaG93UGFnaW5hdG9yKSB7XG4gICAgICA8ZGl2ICNmb290ZXJTZWN0aW9uIGNsYXNzPVwic2RjLXBpY2tsaXN0X19mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1waWNrbGlzdF9fZm9vdGVyLWxlZnRcIj5cbiAgICAgICAgICBAaWYgKHNob3dTZWxlY3Rpb25Db3VudGVyKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19zZWxlY3Rpb24tY291bnRlci13cmFwXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2RjLXBpY2tsaXN0X19zZWxlY3Rpb24tY291bnRlclwiPlxuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJzZWxlY3Rpb25JY29uQ2xhc3NcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19mb290ZXItcGFnaW5hdG9yXCI+XG4gICAgICAgICAgICA8c2RjLXBhZ2luYXRvclxuICAgICAgICAgICAgICBbZmlyc3RdPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgICAgIFtyb3dzXT1cImFjdGl2ZVJvd3NcIlxuICAgICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgICAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnaW5hdG9yUm93c1BlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPjwvc2RjLXBhZ2luYXRvcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChzaG93UmVzdWx0c0NvdW50ZXIpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19yZXN1bHRzXCI+XG4gICAgICAgICAgICB7eyB0b3RhbFJlY29yZHMgfX0ge3sgcmVzdWx0c0NvdW50ZXJMYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvc2RjLWxvYWRpbmctc3RhdGU+XG48L2Rpdj5cbiJdfQ==
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9waWNrbGlzdC9waWNrbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3BpY2tsaXN0L3BpY2tsaXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHdDQUF3QyxFQUN4QyxxQ0FBcUMsRUFDckMscUNBQXFDLEVBQ3JDLDRDQUE0QyxFQUM1QyxpQ0FBaUMsRUFDakMsMkJBQTJCLEVBQzNCLDRCQUE0QixFQUM1QixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QiwyQ0FBMkMsRUFDM0MsNEJBQTRCLEVBQzVCLDZDQUE2QyxFQUM3QywrQ0FBK0MsRUFDL0MscUJBQXFCLEVBQ3JCLHNDQUFzQyxFQUN0QyxxQ0FBcUMsRUFDckMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixxQ0FBcUMsRUFDckMsMkNBQTJDLEVBQzNDLHVDQUF1QyxFQUN2Qyw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLDBCQUEw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QkFBdkIsS0FBSztnQkFHRixPQUFPO3NCQURWLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRXNDLGdCQUFnQjtzQkFBNUQsU0FBUzt1QkFBQyxlQUFlO2dCQUNxQixrQkFBa0I7c0JBQWhFLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNpQixnQkFBZ0I7c0JBQTVELFNBQVM7dUJBQUMsZUFBZTtnQkFDc0IsWUFBWTtzQkFBM0QsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRSxcbiAgREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9JVEVNX0hFSUdIVCxcbiAgREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9NQVhfUk9XUyxcbiAgREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9NSU5fUk9XUyxcbiAgREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9WSUVXUE9SVF9PRkZTRVQsXG4gIERFRkFVTFRfUElDS0xJU1RfRU1QVFlfSUNPTl9DTEFTUyxcbiAgREVGQVVMVF9QSUNLTElTVF9FTVBUWV9URVhULFxuICBERUZBVUxUX1BJQ0tMSVNUX0VNUFRZX1RJVExFLFxuICBERUZBVUxUX1BJQ0tMSVNUX0ZJUlNULFxuICBERUZBVUxUX1BJQ0tMSVNUX0lDT05fQ0xBU1MsXG4gIERFRkFVTFRfUElDS0xJU1RfSURfS0VZLFxuICBERUZBVUxUX1BJQ0tMSVNUX01BWF9WSVNJQkxFX1NFTEVDVEVEX0lURU1TLFxuICBERUZBVUxUX1BJQ0tMSVNUX1BMQUNFSE9MREVSLFxuICBERUZBVUxUX1BJQ0tMSVNUX1JFU1VMVFNfQ09VTlRFUl9QTFVSQUxfTEFCRUwsXG4gIERFRkFVTFRfUElDS0xJU1RfUkVTVUxUU19DT1VOVEVSX1NJTkdVTEFSX0xBQkVMLFxuICBERUZBVUxUX1BJQ0tMSVNUX1JPV1MsXG4gIERFRkFVTFRfUElDS0xJU1RfUk9XU19QRVJfUEFHRV9PUFRJT05TLFxuICBERUZBVUxUX1BJQ0tMSVNUX1NFTEVDVElPTl9JQ09OX0NMQVNTLFxuICBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfSVRFTV9JQ09OLFxuICBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfUEFHSU5BVE9SLFxuICBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfUkVTVUxUU19DT1VOVEVSLFxuICBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfUk9XU19QRVJfUEFHRV9PUFRJT05TLFxuICBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfU0VMRUNUSU9OX0NPVU5URVIsXG4gIERFRkFVTFRfUElDS0xJU1RfU1VCVElUTEVfS0VZLFxuICBERUZBVUxUX1BJQ0tMSVNUX1RJVExFX0tFWSxcbiAgUElDS0xJU1RfRElWSVNPUl9GQUxMQkFDSyxcbiAgUElDS0xJU1RfTE9BRElOR19CTE9DS19ERUxBWV9NUyxcbiAgUElDS0xJU1RfTE9BRElOR19CTE9DS19XSU5ET1csXG4gIFBJQ0tMSVNUX0xPQURJTkdfSU5ESUNBVE9SLFxuICBQSUNLTElTVF9NSU5fU0tFTEVUT05fUk9XUyxcbiAgUElDS0xJU1RfUEFHRV9JTkRFWFxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9waWNrbGlzdC5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IExvYWRpbmdTdGF0ZUluZGljYXRvciB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvbG9hZGluZy1zdGF0ZS50eXBlJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BhZ2luYXRvci50eXBlJztcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RSZWNvcmQgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BpY2tsaXN0LnR5cGUnO1xuaW1wb3J0IHsgdG9JbnRlZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9udW1iZXIudXRpbCc7XG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nLXN0YXRlL2xvYWRpbmctc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaGJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXBpY2tsaXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgU2VhcmNoYm94Q29tcG9uZW50LFxuICAgIExvYWRpbmdTdGF0ZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tsaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGluZ0Jsb2NrV2luZG93ID0gUElDS0xJU1RfTE9BRElOR19CTE9DS19XSU5ET1c7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2FkaW5nQmxvY2tEZWxheU1zID0gUElDS0xJU1RfTE9BRElOR19CTE9DS19ERUxBWV9NUztcblxuICBASW5wdXQoKSBsb2FkaW5nSW5kaWNhdG9yOiBMb2FkaW5nU3RhdGVJbmRpY2F0b3IgPSBQSUNLTElTVF9MT0FESU5HX0lORElDQVRPUjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBpdGVtczogUGlja2xpc3RSZWNvcmRbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZElkczogbnVtYmVyW10gfCBTZXQ8bnVtYmVyPiA9IFtdO1xuXG4gIEBJbnB1dCgpIGlkS2V5ID0gREVGQVVMVF9QSUNLTElTVF9JRF9LRVk7XG4gIEBJbnB1dCgpIHRpdGxlS2V5ID0gREVGQVVMVF9QSUNLTElTVF9USVRMRV9LRVk7XG4gIEBJbnB1dCgpIHN1YnRpdGxlS2V5ID0gREVGQVVMVF9QSUNLTElTVF9TVUJUSVRMRV9LRVk7XG4gIEBJbnB1dCgpIGljb25DbGFzcyA9IERFRkFVTFRfUElDS0xJU1RfSUNPTl9DTEFTUztcbiAgQElucHV0KCkgc2VsZWN0aW9uSWNvbkNsYXNzID0gREVGQVVMVF9QSUNLTElTVF9TRUxFQ1RJT05fSUNPTl9DTEFTUztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSBERUZBVUxUX1BJQ0tMSVNUX1BMQUNFSE9MREVSO1xuICBASW5wdXQoKSBlbXB0eVRpdGxlID0gREVGQVVMVF9QSUNLTElTVF9FTVBUWV9USVRMRTtcbiAgQElucHV0KCkgZW1wdHlUZXh0ID0gREVGQVVMVF9QSUNLTElTVF9FTVBUWV9URVhUO1xuICBASW5wdXQoKSBlbXB0eUljb25DbGFzcyA9IERFRkFVTFRfUElDS0xJU1RfRU1QVFlfSUNPTl9DTEFTUztcbiAgQElucHV0KCkgcmVzdWx0c0NvdW50ZXJTaW5ndWxhckxhYmVsID0gREVGQVVMVF9QSUNLTElTVF9SRVNVTFRTX0NPVU5URVJfU0lOR1VMQVJfTEFCRUw7XG4gIEBJbnB1dCgpIHJlc3VsdHNDb3VudGVyUGx1cmFsTGFiZWwgPSBERUZBVUxUX1BJQ0tMSVNUX1JFU1VMVFNfQ09VTlRFUl9QTFVSQUxfTEFCRUw7XG4gIEBJbnB1dCgpIGZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBmaXJzdCA9IERFRkFVTFRfUElDS0xJU1RfRklSU1Q7XG4gIEBJbnB1dCgpIHJvd3MgPSBERUZBVUxUX1BJQ0tMSVNUX1JPV1M7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbLi4uREVGQVVMVF9QSUNLTElTVF9ST1dTX1BFUl9QQUdFX09QVElPTlNdO1xuICBASW5wdXQoKSBtYXhWaXNpYmxlU2VsZWN0ZWRJdGVtcyA9IERFRkFVTFRfUElDS0xJU1RfTUFYX1ZJU0lCTEVfU0VMRUNURURfSVRFTVM7XG5cbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvciA9IERFRkFVTFRfUElDS0xJU1RfU0hPV19QQUdJTkFUT1I7XG4gIEBJbnB1dCgpIHNob3dSb3dzUGVyUGFnZU9wdGlvbnMgPSBERUZBVUxUX1BJQ0tMSVNUX1NIT1dfUk9XU19QRVJfUEFHRV9PUFRJT05TO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ291bnRlciA9IERFRkFVTFRfUElDS0xJU1RfU0hPV19TRUxFQ1RJT05fQ09VTlRFUjtcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudGVyID0gREVGQVVMVF9QSUNLTElTVF9TSE9XX1JFU1VMVFNfQ09VTlRFUjtcbiAgQElucHV0KCkgc2hvd0l0ZW1JY29uID0gREVGQVVMVF9QSUNLTElTVF9TSE9XX0lURU1fSUNPTjtcblxuICBASW5wdXQoKSBhdXRvUmVzaXplID0gREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRTtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZU1pblJvd3MgPSBERUZBVUxUX1BJQ0tMSVNUX0FVVE9fUkVTSVpFX01JTl9ST1dTO1xuICBASW5wdXQoKSBhdXRvUmVzaXplTWF4Um93cyA9IERFRkFVTFRfUElDS0xJU1RfQVVUT19SRVNJWkVfTUFYX1JPV1M7XG4gIEBJbnB1dCgpIGF1dG9SZXNpemVJdGVtSGVpZ2h0ID0gREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9JVEVNX0hFSUdIVDtcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZVZpZXdwb3J0T2Zmc2V0ID0gREVGQVVMVF9QSUNLTElTVF9BVVRPX1JFU0laRV9WSUVXUE9SVF9PRkZTRVQ7XG5cbiAgQElucHV0KCkgbWF4VGl0bGVMZW5ndGggPSAwO1xuICBASW5wdXQoKSBtYXhTdWJ0aXRsZUxlbmd0aCA9IDA7XG4gIEBJbnB1dCgpIGF1dG9mb2N1c1NlYXJjaCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5sb2FkaW5nU3RhdGUuc2V0KCEhdmFsdWUpO1xuICB9XG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2luYXRvclN0YXRlPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlY3Rpb24nKSBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlY3Rpb25SZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRTZWN0aW9uJykgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFNlY3Rpb25SZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZm9vdGVyU2VjdGlvbicpIHByaXZhdGUgcmVhZG9ubHkgZm9vdGVyU2VjdGlvblJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFNlYXJjaGJveENvbXBvbmVudCkgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hib3hSZWY/OiBTZWFyY2hib3hDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTdGF0ZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvYWRpbmdTdGF0ZSgpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyZWRRdWVyeSA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlU3RhdGUgPSBzaWduYWw8UGFnaW5hdG9yU3RhdGU+KHsgZmlyc3Q6IHRoaXMuZmlyc3QsIHJvd3M6IHRoaXMucm93cywgcGFnZTogUElDS0xJU1RfUEFHRV9JTkRFWCwgcGFnZUNvdW50OiAwIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkRXhwYW5kZWRTdGF0ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBzZWwgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRJZHMnXSkge1xuICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRJZHMgaW5zdGFuY2VvZiBTZXQgPyBbLi4udGhpcy5zZWxlY3RlZElkc10gOiB0aGlzLnNlbGVjdGVkSWRzID8/IFtdO1xuICAgICAgdGhpcy5zZWwgPSBuZXcgU2V0KChuZXh0VmFsdWVzIGFzIHVua25vd25bXSkubWFwKChpdGVtKSA9PiB0b0ludGVnZXIoaXRlbSkpLmZpbHRlcigoaXRlbSkgPT4gIU51bWJlci5pc05hTihpdGVtKSkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydmaXJzdCddIHx8IGNoYW5nZXNbJ3Jvd3MnXSkge1xuICAgICAgdGhpcy5wYWdlU3RhdGUuc2V0KHtcbiAgICAgICAgLi4udGhpcy5wYWdlU3RhdGUoKSxcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10gJiYgdGhpcy5hdXRvUmVzaXplKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLnVwZGF0ZVJvd3NGcm9tVmlld3BvcnQoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1c1NlYXJjaCkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlYXJjaGJveFJlZj8uZm9jdXNJbnB1dCgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hdXRvUmVzaXplIHx8IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy51cGRhdGVSb3dzRnJvbVZpZXdwb3J0KCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoU2VjdGlvblJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuc2VhcmNoU2VjdGlvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb25SZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnNlbGVjdGVkU2VjdGlvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb290ZXJTZWN0aW9uUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5mb290ZXJTZWN0aW9uUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUm93c0Zyb21WaWV3cG9ydCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgb25TZWFyY2godmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRRdWVyeS5zZXQodmFsdWUgPz8gJycpO1xuICAgIHRoaXMucGFnZVN0YXRlLnNldCh7IC4uLnRoaXMucGFnZVN0YXRlKCksIGZpcnN0OiBERUZBVUxUX1BJQ0tMSVNUX0ZJUlNUIH0pO1xuICB9XG5cbiAgb25TZWFyY2hUZXJtKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2VhcmNoKHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZFF1ZXJ5LnNldCgnJyk7XG4gICAgdGhpcy5wYWdlU3RhdGUuc2V0KHsgLi4udGhpcy5wYWdlU3RhdGUoKSwgZmlyc3Q6IERFRkFVTFRfUElDS0xJU1RfRklSU1QgfSk7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU3RhdGUuc2V0KGV2ZW50KTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWQoKTogUGlja2xpc3RSZWNvcmRbXSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmZpbHRlcmVkUXVlcnkoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpbHRlcmFibGVWYWx1ZXMoaXRlbSkuc29tZSgodmFsdWUpID0+IHZhbHVlLmluY2x1ZGVzKHF1ZXJ5KSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdG90YWxSZXN1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWQubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHJvd3NWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2VTdGF0ZSgpLnJvd3MgPz8gdGhpcy5yb3dzO1xuICB9XG5cbiAgZ2V0IGZpcnN0VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlU3RhdGUoKS5maXJzdCA/PyB0aGlzLmZpcnN0O1xuICB9XG5cbiAgZ2V0IHBhZ2VJdGVtcygpOiBQaWNrbGlzdFJlY29yZFtdIHtcbiAgICBpZiAoIXRoaXMuc2hvd1BhZ2luYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWQuc2xpY2UodGhpcy5maXJzdFZhbHVlLCB0aGlzLmZpcnN0VmFsdWUgKyB0aGlzLnJvd3NWYWx1ZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBQaWNrbGlzdFJlY29yZFtdIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5pdGVtcyA/PyBbXTtcbiAgICByZXR1cm4gYmFzZS5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuc2VsLmhhcyh0b0ludGVnZXIoaXRlbT8uW3RoaXMuaWRLZXldKSkpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVTZWxlY3RlZEl0ZW1zKCk6IFBpY2tsaXN0UmVjb3JkW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5zbGljZSgwLCB0aGlzLm1heFZpc2libGVTZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIGdldCBoaWRkZW5TZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSB0aGlzLnZpc2libGVTZWxlY3RlZEl0ZW1zLmxlbmd0aCk7XG4gIH1cblxuICBnZXQgc2tlbGV0b25Sb3dzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCByb3dzID0gTWF0aC5tYXgodGhpcy5yb3dzVmFsdWUsIFBJQ0tMSVNUX01JTl9TS0VMRVRPTl9ST1dTKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogcm93cyB9LCAoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgfVxuXG4gIGdldCBzZWFyY2hUZXJtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRRdWVyeSgpO1xuICB9XG5cbiAgc2V0IHNlYXJjaFRlcm0odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyZWRRdWVyeS5zZXQodmFsdWUgPz8gJycpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFeHBhbmRlZFN0YXRlKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHNob3dTa2VsZXRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmcoKSAmJiB0aGlzLnRvdGFsUmVzdWx0cyA9PT0gMDtcbiAgfVxuXG4gIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b3RhbFJlc3VsdHM7XG4gIH1cblxuICBnZXQgYWN0aXZlUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJvd3NWYWx1ZTtcbiAgfVxuXG4gIGdldCByZXN1bHRzQ291bnRlckxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxSZWNvcmRzID09PSAxXG4gICAgICA/IHRoaXMucmVzdWx0c0NvdW50ZXJTaW5ndWxhckxhYmVsXG4gICAgICA6IHRoaXMucmVzdWx0c0NvdW50ZXJQbHVyYWxMYWJlbDtcbiAgfVxuXG4gIGdldCBwYWdpbmF0b3JSb3dzUGVyUGFnZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnNob3dSb3dzUGVyUGFnZU9wdGlvbnMgPyB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucyA6IFtdO1xuICB9XG5cbiAgdHJhY2tCeUlkID0gKF9pbmRleDogbnVtYmVyLCBpdGVtOiBQaWNrbGlzdFJlY29yZCkgPT4gaXRlbT8uW3RoaXMuaWRLZXldO1xuXG4gIGdldFRpdGxlKGl0ZW06IFBpY2tsaXN0UmVjb3JkKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyhpdGVtPy5bdGhpcy50aXRsZUtleV0gPz8gJycpO1xuICAgIHJldHVybiB0aGlzLm1heFRpdGxlTGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heFRpdGxlTGVuZ3RoXG4gICAgICA/IGAke3ZhbHVlLnNsaWNlKDAsIHRoaXMubWF4VGl0bGVMZW5ndGgpfeKApmBcbiAgICAgIDogdmFsdWU7XG4gIH1cblxuICBnZXRTdWJ0aXRsZShpdGVtOiBQaWNrbGlzdFJlY29yZCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcoaXRlbT8uW3RoaXMuc3VidGl0bGVLZXldID8/ICcnKTtcbiAgICByZXR1cm4gdGhpcy5tYXhTdWJ0aXRsZUxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhTdWJ0aXRsZUxlbmd0aFxuICAgICAgPyBgJHt2YWx1ZS5zbGljZSgwLCB0aGlzLm1heFN1YnRpdGxlTGVuZ3RoKX3igKZgXG4gICAgICA6IHZhbHVlO1xuICB9XG5cbiAgaXNTZWxlY3RlZChpdGVtOiBQaWNrbGlzdFJlY29yZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gdG9JbnRlZ2VyKGl0ZW0/Llt0aGlzLmlkS2V5XSk7XG4gICAgcmV0dXJuICFOdW1iZXIuaXNOYU4oaWQpICYmIHRoaXMuc2VsLmhhcyhpZCk7XG4gIH1cblxuICB0b2dnbGUoaXRlbTogUGlja2xpc3RSZWNvcmQsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRvSW50ZWdlcihpdGVtPy5bdGhpcy5pZEtleV0pO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsLmFkZChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICByb3dDbGljayhpdGVtOiBQaWNrbGlzdFJlY29yZCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdG9JbnRlZ2VyKGl0ZW0/Llt0aGlzLmlkS2V5XSk7XG4gICAgaWYgKE51bWJlci5pc05hTihpZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZShpdGVtLCAhdGhpcy5zZWwuaGFzKGlkKSk7XG4gIH1cblxuICByZW1vdmUoaXRlbTogUGlja2xpc3RSZWNvcmQpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZShpdGVtLCBmYWxzZSk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RlZEV4cGFuZGVkKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEV4cGFuZGVkU3RhdGUuc2V0KGV4cGFuZGVkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQoWy4uLnRoaXMuc2VsXSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcmFibGVWYWx1ZXMoaXRlbTogUGlja2xpc3RSZWNvcmQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUZpbHRlckZpZWxkUGF0aHMoKS5tYXAoKHBhdGgpID0+IHRoaXMuZ2V0SXRlbVZhbHVlQnlQYXRoKGl0ZW0sIHBhdGgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUZpbHRlckZpZWxkUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLmZpbHRlckZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJGaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHJldHVybiBbdGhpcy50aXRsZUtleSwgdGhpcy5zdWJ0aXRsZUtleV0uZmlsdGVyKChmaWVsZCkgPT4gZmllbGQudHJpbSgpLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtVmFsdWVCeVBhdGgoaXRlbTogUGlja2xpc3RSZWNvcmQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDApO1xuXG4gICAgbGV0IGN1cnJlbnQ6IHVua25vd24gPSBpdGVtO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgY3VycmVudCA9IChjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKGN1cnJlbnQgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvd3NGcm9tVmlld3BvcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmF1dG9SZXNpemUgfHwgdHlwZW9mIGdsb2JhbFRoaXMud2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZ2xvYmFsVGhpcy53aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgY29uc3Qgc2VhcmNoSGVpZ2h0ID0gdGhpcy5zZWFyY2hTZWN0aW9uUmVmPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwO1xuICAgIGNvbnN0IHNlbGVjdGVkSGVpZ2h0ID0gdGhpcy5zZWxlY3RlZFNlY3Rpb25SZWY/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ID8/IDA7XG4gICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gdGhpcy5mb290ZXJTZWN0aW9uUmVmPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwO1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5hdXRvUmVzaXplTWluUm93cyAqIHRoaXMuYXV0b1Jlc2l6ZUl0ZW1IZWlnaHQsXG4gICAgICB2aWV3cG9ydEhlaWdodCAtIHNlYXJjaEhlaWdodCAtIHNlbGVjdGVkSGVpZ2h0IC0gZm9vdGVySGVpZ2h0IC0gdGhpcy5hdXRvUmVzaXplVmlld3BvcnRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgbmV4dFJvd3MgPSBNYXRoLm1heChcbiAgICAgIHRoaXMuYXV0b1Jlc2l6ZU1pblJvd3MsXG4gICAgICBNYXRoLm1pbih0aGlzLmF1dG9SZXNpemVNYXhSb3dzLCBNYXRoLmZsb29yKGF2YWlsYWJsZSAvIE1hdGgubWF4KHRoaXMuYXV0b1Jlc2l6ZUl0ZW1IZWlnaHQsIFBJQ0tMSVNUX0RJVklTT1JfRkFMTEJBQ0spKSlcbiAgICApO1xuXG4gICAgaWYgKG5leHRSb3dzICE9PSB0aGlzLnBhZ2VTdGF0ZSgpLnJvd3MpIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlLnNldCh7XG4gICAgICAgIC4uLnRoaXMucGFnZVN0YXRlKCksXG4gICAgICAgIHJvd3M6IG5leHRSb3dzLFxuICAgICAgICBmaXJzdDogREVGQVVMVF9QSUNLTElTVF9GSVJTVFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtcGlja2xpc3RcIj5cbiAgPHNkYy1sb2FkaW5nLXN0YXRlXG4gICAgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2xvYWRpbmctc3RhdGVcIlxuICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICBbYmxvY2tXaW5kb3ddPVwibG9hZGluZ0Jsb2NrV2luZG93XCJcbiAgICBbaW5kaWNhdG9yXT1cImxvYWRpbmdJbmRpY2F0b3JcIlxuICAgIFtibG9ja0RlbGF5TXNdPVwibG9hZGluZ0Jsb2NrRGVsYXlNc1wiXG4gID5cbiAgICA8ZGl2ICNzZWFyY2hTZWN0aW9uIGNsYXNzPVwic2RjLXBpY2tsaXN0X19zZWFyY2hcIj5cbiAgICAgIDxzZGMtc2VhcmNoYm94XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoVGVybSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy1zZWFyY2hib3g+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAjc2VsZWN0ZWRTZWN0aW9uXG4gICAgICBjbGFzcz1cInNkYy1waWNrbGlzdF9fc2VsZWN0ZWRcIlxuICAgICAgW2NsYXNzLnNkYy1waWNrbGlzdF9fc2VsZWN0ZWQtLWhhcy1pdGVtc109XCJzZWxlY3RlZENvdW50ID4gMFwiXG4gICAgPlxuICAgICAgQGlmIChzZWxlY3RlZENvdW50ID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19jaGlwc1wiIFtjbGFzcy5zZGMtcGlja2xpc3RfX2NoaXBzLS1leHBhbmRlZF09XCJzZWxlY3RlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiB2aXNpYmxlU2VsZWN0ZWRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLXBpY2tsaXN0X19jaGlwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShpdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXBpY2tsaXN0X19jaGlwLXRleHRcIj57eyBnZXRUaXRsZShpdGVtKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcGlja2xpc3RfX2NoaXAteFwiPsOXPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmICghc2VsZWN0ZWRFeHBhbmRlZCAmJiBoaWRkZW5TZWxlY3RlZENvdW50ID4gMCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2NoaXAgc2RjLXBpY2tsaXN0X19jaGlwLS1tb3JlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGVkRXhwYW5kZWQodHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgaGlkZGVuU2VsZWN0ZWRDb3VudCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChzZWxlY3RlZEV4cGFuZGVkICYmIGhpZGRlblNlbGVjdGVkQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInNkYy1waWNrbGlzdF9fY2hpcCBzZGMtcGlja2xpc3RfX2NoaXAtLWxlc3NcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWRFeHBhbmRlZChmYWxzZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUubGVzcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19jb250ZW50XCI+XG4gICAgICBAaWYgKHNob3dTa2VsZXRvbikge1xuICAgICAgICA8dWwgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2xpc3RcIj5cbiAgICAgICAgICBAZm9yIChyb3cgb2Ygc2tlbGV0b25Sb3dzOyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInNkYy1waWNrbGlzdF9fbGlzdC1pdGVtIHNkYy1waWNrbGlzdF9fbGlzdC1pdGVtLS1za2VsZXRvblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19pdGVtIHNkYy1waWNrbGlzdF9faXRlbS0tc2tlbGV0b25cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgfVxuICAgICAgICA8L3VsPlxuICAgICAgfSBAZWxzZSBpZiAocGFnZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHVsIGNsYXNzPVwic2RjLXBpY2tsaXN0X19saXN0XCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBwYWdlSXRlbXM7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2xpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2l0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZGMtcGlja2xpc3RfX2l0ZW0tLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3dDbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waWNrbGlzdF9fY2hlY2tcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzU2VsZWN0ZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGUoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgQGlmIChzaG93SXRlbUljb24pIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLXBpY2tsaXN0X19pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpY29uQ2xhc3NcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcGlja2xpc3RfX3RleHRzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waWNrbGlzdF9fdGl0bGVcIj57eyBnZXRUaXRsZShpdGVtKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0U3VidGl0bGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtcGlja2xpc3RfX3N1YnRpdGxlXCI+e3sgZ2V0U3VidGl0bGUoaXRlbSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgfVxuICAgICAgICA8L3VsPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2VtcHR5XCI+XG4gICAgICAgICAgPGkgW2NsYXNzXT1cImVtcHR5SWNvbkNsYXNzICsgJyBzZGMtcGlja2xpc3RfX2VtcHR5LWljb24nXCI+PC9pPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGlja2xpc3RfX2VtcHR5LXRpdGxlXCI+XG4gICAgICAgICAgICB7eyBlbXB0eVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1waWNrbGlzdF9fZW1wdHktdGV4dFwiPlxuICAgICAgICAgICAge3sgZW1wdHlUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzaG93UGFnaW5hdG9yKSB7XG4gICAgICA8ZGl2ICNmb290ZXJTZWN0aW9uIGNsYXNzPVwic2RjLXBpY2tsaXN0X19mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1waWNrbGlzdF9fZm9vdGVyLWxlZnRcIj5cbiAgICAgICAgICBAaWYgKHNob3dTZWxlY3Rpb25Db3VudGVyKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19zZWxlY3Rpb24tY291bnRlci13cmFwXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2RjLXBpY2tsaXN0X19zZWxlY3Rpb24tY291bnRlclwiPlxuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJzZWxlY3Rpb25JY29uQ2xhc3NcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19mb290ZXItcGFnaW5hdG9yXCI+XG4gICAgICAgICAgICA8c2RjLXBhZ2luYXRvclxuICAgICAgICAgICAgICBbZmlyc3RdPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgICAgIFtyb3dzXT1cImFjdGl2ZVJvd3NcIlxuICAgICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgICAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnaW5hdG9yUm93c1BlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPjwvc2RjLXBhZ2luYXRvcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChzaG93UmVzdWx0c0NvdW50ZXIpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLXBpY2tsaXN0X19yZXN1bHRzXCI+XG4gICAgICAgICAgICB7eyB0b3RhbFJlY29yZHMgfX0ge3sgcmVzdWx0c0NvdW50ZXJMYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvc2RjLWxvYWRpbmctc3RhdGU+XG48L2Rpdj5cbiJdfQ==
@@ -208,7 +208,7 @@ export class PinCodeFieldComponent {
208
208
  useExisting: forwardRef(() => PinCodeFieldComponent),
209
209
  multi: true
210
210
  }
211
- ], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-pin-code-field\">\n @if (labelKey()) {\n <div class=\"sdc-pin-code-field__label-row\">\n <div class=\"sdc-pin-code-field__group-label\" [id]=\"groupLabelId\">\n <span class=\"sdc-pin-code-field__group-label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </span>\n </div>\n </div>\n }\n\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"labelKey() ? null : (groupAriaLabelKey | translate)\"\n [attr.aria-labelledby]=\"labelKey() ? groupLabelId : null\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-pin-code-field__group-label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py)}.sdc-pin-code-field__group-label-text{display:inline-flex;align-items:center}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sdc-pin-code-field-gap);align-items:center;max-width:100%}.sdc-pin-code-field__input{flex:0 1 var(--sdc-pin-code-field-input-size);min-width:0;max-width:var(--sdc-pin-code-field-input-size);aspect-ratio:1/1;height:auto;border:1px solid var(--sdc-pin-code-field-border);border-radius:var(--sdc-pin-code-field-radius);background-color:var(--sdc-pin-code-field-bg);color:var(--sdc-pin-code-field-text);font-size:var(--sdc-pin-code-field-font-size);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);text-align:center;outline:none;padding:0;transition:border-color .15s ease,box-shadow .15s ease;appearance:none;-moz-appearance:textfield}.sdc-pin-code-field__input::-webkit-outer-spin-button,.sdc-pin-code-field__input::-webkit-inner-spin-button{appearance:none;margin:0}.sdc-pin-code-field__input:focus{border-color:var(--sdc-pin-code-field-border-focus);box-shadow:0 0 0 3px #428bca33}.sdc-pin-code-field__input--error{border-color:var(--sdc-pin-code-field-border-error)}.sdc-pin-code-field__input--error:focus{border-color:var(--sdc-pin-code-field-border-error);box-shadow:0 0 0 3px #c1301833}.sdc-pin-code-field__input--disabled,.sdc-pin-code-field__input:disabled{background-color:var(--sdc-pin-code-field-bg-disabled);color:var(--sdc-pin-code-field-text-disabled);cursor:not-allowed;border-color:var(--sdc-pin-code-field-border)}.sdc-pin-code-field__help{font-size:.75rem;color:var(--sdc-pin-code-field-help-color);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
211
+ ], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-pin-code-field\">\n @if (labelKey()) {\n <div class=\"sdc-pin-code-field__label-row\">\n <div class=\"sdc-pin-code-field__group-label\" [id]=\"groupLabelId\">\n <span class=\"sdc-pin-code-field__group-label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility_required_field' | translate }}</span>\n }\n </span>\n </div>\n </div>\n }\n\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"labelKey() ? null : (groupAriaLabelKey | translate)\"\n [attr.aria-labelledby]=\"labelKey() ? groupLabelId : null\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-pin-code-field__group-label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py)}.sdc-pin-code-field__group-label-text{display:inline-flex;align-items:center}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sdc-pin-code-field-gap);align-items:center;max-width:100%}.sdc-pin-code-field__input{flex:0 1 var(--sdc-pin-code-field-input-size);min-width:0;max-width:var(--sdc-pin-code-field-input-size);aspect-ratio:1/1;height:auto;border:1px solid var(--sdc-pin-code-field-border);border-radius:var(--sdc-pin-code-field-radius);background-color:var(--sdc-pin-code-field-bg);color:var(--sdc-pin-code-field-text);font-size:var(--sdc-pin-code-field-font-size);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);text-align:center;outline:none;padding:0;transition:border-color .15s ease,box-shadow .15s ease;appearance:none;-moz-appearance:textfield}.sdc-pin-code-field__input::-webkit-outer-spin-button,.sdc-pin-code-field__input::-webkit-inner-spin-button{appearance:none;margin:0}.sdc-pin-code-field__input:focus{border-color:var(--sdc-pin-code-field-border-focus);box-shadow:0 0 0 3px #428bca33}.sdc-pin-code-field__input--error{border-color:var(--sdc-pin-code-field-border-error)}.sdc-pin-code-field__input--error:focus{border-color:var(--sdc-pin-code-field-border-error);box-shadow:0 0 0 3px #c1301833}.sdc-pin-code-field__input--disabled,.sdc-pin-code-field__input:disabled{background-color:var(--sdc-pin-code-field-bg-disabled);color:var(--sdc-pin-code-field-text-disabled);cursor:not-allowed;border-color:var(--sdc-pin-code-field-border)}.sdc-pin-code-field__help{font-size:.75rem;color:var(--sdc-pin-code-field-help-color);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
212
212
  }
213
213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PinCodeFieldComponent, decorators: [{
214
214
  type: Component,
@@ -218,7 +218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
218
218
  useExisting: forwardRef(() => PinCodeFieldComponent),
219
219
  multi: true
220
220
  }
221
- ], template: "<div class=\"sdc-pin-code-field\">\n @if (labelKey()) {\n <div class=\"sdc-pin-code-field__label-row\">\n <div class=\"sdc-pin-code-field__group-label\" [id]=\"groupLabelId\">\n <span class=\"sdc-pin-code-field__group-label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </span>\n </div>\n </div>\n }\n\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"labelKey() ? null : (groupAriaLabelKey | translate)\"\n [attr.aria-labelledby]=\"labelKey() ? groupLabelId : null\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-pin-code-field__group-label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py)}.sdc-pin-code-field__group-label-text{display:inline-flex;align-items:center}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sdc-pin-code-field-gap);align-items:center;max-width:100%}.sdc-pin-code-field__input{flex:0 1 var(--sdc-pin-code-field-input-size);min-width:0;max-width:var(--sdc-pin-code-field-input-size);aspect-ratio:1/1;height:auto;border:1px solid var(--sdc-pin-code-field-border);border-radius:var(--sdc-pin-code-field-radius);background-color:var(--sdc-pin-code-field-bg);color:var(--sdc-pin-code-field-text);font-size:var(--sdc-pin-code-field-font-size);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);text-align:center;outline:none;padding:0;transition:border-color .15s ease,box-shadow .15s ease;appearance:none;-moz-appearance:textfield}.sdc-pin-code-field__input::-webkit-outer-spin-button,.sdc-pin-code-field__input::-webkit-inner-spin-button{appearance:none;margin:0}.sdc-pin-code-field__input:focus{border-color:var(--sdc-pin-code-field-border-focus);box-shadow:0 0 0 3px #428bca33}.sdc-pin-code-field__input--error{border-color:var(--sdc-pin-code-field-border-error)}.sdc-pin-code-field__input--error:focus{border-color:var(--sdc-pin-code-field-border-error);box-shadow:0 0 0 3px #c1301833}.sdc-pin-code-field__input--disabled,.sdc-pin-code-field__input:disabled{background-color:var(--sdc-pin-code-field-bg-disabled);color:var(--sdc-pin-code-field-text-disabled);cursor:not-allowed;border-color:var(--sdc-pin-code-field-border)}.sdc-pin-code-field__help{font-size:.75rem;color:var(--sdc-pin-code-field-help-color);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);line-height:1.4}\n"] }]
221
+ ], template: "<div class=\"sdc-pin-code-field\">\n @if (labelKey()) {\n <div class=\"sdc-pin-code-field__label-row\">\n <div class=\"sdc-pin-code-field__group-label\" [id]=\"groupLabelId\">\n <span class=\"sdc-pin-code-field__group-label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility_required_field' | translate }}</span>\n }\n </span>\n </div>\n </div>\n }\n\n <div\n class=\"sdc-pin-code-field__inputs\"\n [attr.aria-label]=\"labelKey() ? null : (groupAriaLabelKey | translate)\"\n [attr.aria-labelledby]=\"labelKey() ? groupLabelId : null\"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n >\n @for (value of inputs; track $index) {\n <input\n #pinInput\n type=\"text\"\n class=\"sdc-pin-code-field__input\"\n [class.sdc-pin-code-field__input--error]=\"hasError\"\n [class.sdc-pin-code-field__input--disabled]=\"disabled\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"\n (alphanumeric ? characterAriaLabelKey : digitAriaLabelKey)\n | translate : { n: $index + 1, total: length }\n \"\n [attr.aria-describedby]=\"helpText ? 'pin-help-' + id : null\"\n [attr.aria-required]=\"true\"\n [attr.aria-invalid]=\"hasError\"\n [attr.inputmode]=\"alphanumeric ? 'text' : 'numeric'\"\n [attr.maxlength]=\"1\"\n autocomplete=\"off\"\n (focus)=\"onFocus($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeydown($event, $index)\"\n (paste)=\"onPaste($event, $index)\"\n (blur)=\"onBlur($index)\"\n />\n }\n </div>\n\n @if (helpText) {\n <div\n [id]=\"'pin-help-' + id\"\n class=\"sdc-pin-code-field__help\"\n >{{ helpText }}</div>\n }\n</div>\n", styles: [":host{display:block}.sdc-pin-code-field__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-pin-code-field__group-label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py)}.sdc-pin-code-field__group-label-text{display:inline-flex;align-items:center}.sdc-pin-code-field{--sdc-pin-code-field-input-size: 3rem;--sdc-pin-code-field-gap: .5rem;--sdc-pin-code-field-border: var(--sdc-color-border, #dedce5);--sdc-pin-code-field-border-focus: var(--sdc-color-primary, #428bca);--sdc-pin-code-field-border-error: var(--sdc-color-danger, #c13018);--sdc-pin-code-field-bg: #fff;--sdc-pin-code-field-bg-disabled: #f5f5f5;--sdc-pin-code-field-text: #212533;--sdc-pin-code-field-text-disabled: #697882;--sdc-pin-code-field-radius: .375rem;--sdc-pin-code-field-font-size: 1.125rem;--sdc-pin-code-field-help-color: #697882;display:flex;flex-direction:column;gap:.375rem}.sdc-pin-code-field__inputs{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--sdc-pin-code-field-gap);align-items:center;max-width:100%}.sdc-pin-code-field__input{flex:0 1 var(--sdc-pin-code-field-input-size);min-width:0;max-width:var(--sdc-pin-code-field-input-size);aspect-ratio:1/1;height:auto;border:1px solid var(--sdc-pin-code-field-border);border-radius:var(--sdc-pin-code-field-radius);background-color:var(--sdc-pin-code-field-bg);color:var(--sdc-pin-code-field-text);font-size:var(--sdc-pin-code-field-font-size);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);text-align:center;outline:none;padding:0;transition:border-color .15s ease,box-shadow .15s ease;appearance:none;-moz-appearance:textfield}.sdc-pin-code-field__input::-webkit-outer-spin-button,.sdc-pin-code-field__input::-webkit-inner-spin-button{appearance:none;margin:0}.sdc-pin-code-field__input:focus{border-color:var(--sdc-pin-code-field-border-focus);box-shadow:0 0 0 3px #428bca33}.sdc-pin-code-field__input--error{border-color:var(--sdc-pin-code-field-border-error)}.sdc-pin-code-field__input--error:focus{border-color:var(--sdc-pin-code-field-border-error);box-shadow:0 0 0 3px #c1301833}.sdc-pin-code-field__input--disabled,.sdc-pin-code-field__input:disabled{background-color:var(--sdc-pin-code-field-bg-disabled);color:var(--sdc-pin-code-field-text-disabled);cursor:not-allowed;border-color:var(--sdc-pin-code-field-border)}.sdc-pin-code-field__help{font-size:.75rem;color:var(--sdc-pin-code-field-help-color);font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);line-height:1.4}\n"] }]
222
222
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
223
223
  type: Input
224
224
  }], length: [{
@@ -241,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
241
241
  type: ViewChildren,
242
242
  args: ['pinInput']
243
243
  }] } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9waW4tY29kZS1maWVsZC9waW4tY29kZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Bpbi1jb2RlLWZpZWxkL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsdUNBQXVDLEVBQ3ZDLG1DQUFtQyxFQUNuQyw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLG1DQUFtQyxFQUNwQyxNQUFNLDJDQUEyQyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFrQjVELE1BQU0sT0FBTyxxQkFBcUI7SUEwQkg7SUF6QnBCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxNQUFNLEdBQUcsNkJBQTZCLENBQUM7SUFDdkMsWUFBWSxHQUFHLG1DQUFtQyxDQUFDO0lBQ25ELFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFrQixLQUFLLENBQUM7SUFDN0Is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O2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRW1CLFNBQVM7c0JBQWxDLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtcbiAgUElOX0NPREVfRklFTERfQ0hBUkFDVEVSX0FSSUFfTEFCRUxfS0VZLFxuICBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQyxcbiAgUElOX0NPREVfRklFTERfREVGQVVMVF9MRU5HVEgsXG4gIFBJTl9DT0RFX0ZJRUxEX0RJR0lUX0FSSUFfTEFCRUxfS0VZLFxuICBQSU5fQ09ERV9GSUVMRF9HUk9VUF9BUklBX0xBQkVMX0tFWVxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9waW4tY29kZS1maWVsZC5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtcGluLWNvZGUtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBpbkNvZGVGaWVsZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQaW5Db2RlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluJyk7XG4gIEBJbnB1dCgpIGxlbmd0aCA9IFBJTl9DT0RFX0ZJRUxEX0RFRkFVTFRfTEVOR1RIO1xuICBASW5wdXQoKSBhbHBoYW51bWVyaWMgPSBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQztcbiAgQElucHV0KCkgaGVscFRleHQgPSAnJztcbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbDogU3RyaW5nQm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBncm91cExhYmVsSWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluLWNvZGUtZmllbGQtbGFiZWwnKTtcblxuICBAT3V0cHV0KCkgY29kZUZpbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ3BpbklucHV0JykgcGluSW5wdXRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBncm91cEFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0dST1VQX0FSSUFfTEFCRUxfS0VZO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlnaXRBcmlhTGFiZWxLZXkgPSBQSU5fQ09ERV9GSUVMRF9ESUdJVF9BUklBX0xBQkVMX0tFWTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYXJhY3RlckFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0NIQVJBQ1RFUl9BUklBX0xBQkVMX0tFWTtcblxuICBwcm90ZWN0ZWQgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgdG91Y2hlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgX29uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5pbnB1dHMgPSBBcnJheSh0aGlzLmxlbmd0aCkuZmlsbCgnJyk7XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzLmpvaW4oJycpO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzLmV2ZXJ5KHYgPT4gdi5sZW5ndGggPT09IDEpO1xuICB9XG5cbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xlbmd0aCddKSB7XG4gICAgICBjb25zdCBuZXdMZW5ndGggPSBjaGFuZ2VzWydsZW5ndGgnXS5jdXJyZW50VmFsdWUgYXMgbnVtYmVyO1xuICAgICAgY29uc3Qgb2xkSW5wdXRzID0gdGhpcy5pbnB1dHMuc2xpY2UoKTtcbiAgICAgIHRoaXMuaW5wdXRzID0gQXJyYXkobmV3TGVuZ3RoKS5maWxsKCcnKS5tYXAoKF8sIGkpID0+IG9sZElucHV0c1tpXSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3Qgc3RyID0gdmFsdWUgPz8gJyc7XG4gICAgdGhpcy5pbnB1dHMgPSBBcnJheSh0aGlzLmxlbmd0aCkuZmlsbCgnJykubWFwKChfLCBpKSA9PiBzdHJbaV0gPz8gJycpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbGFiZWxLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMubGFiZWwgPT09ICdzdHJpbmcnID8gdGhpcy5sYWJlbCA6ICcnO1xuICB9XG5cbiAgLy8gS2V5Ym9hcmQgJiBpbnB1dCBoYW5kbGVyc1xuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlucHV0LnNlbGVjdCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgcmF3ID0gaW5wdXQudmFsdWU7XG4gICAgY29uc3QgdmFsaWRDaGFyID0gdGhpcy5leHRyYWN0VmFsaWRDaGFyKHJhdyk7XG5cbiAgICBpZiAodmFsaWRDaGFyKSB7XG4gICAgICB0aGlzLmlucHV0c1tpbmRleF0gPSB2YWxpZENoYXI7XG4gICAgICBpbnB1dC52YWx1ZSA9IHZhbGlkQ2hhcjtcbiAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgICB0aGlzLmFkdmFuY2VGb2N1cyhpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9ICcnO1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcblxuICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAodGhpcy5pbnB1dHNbaW5kZXhdKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9ICcnO1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGluZGV4KTtcbiAgICAgICAgaWYgKGlucHV0RWwpIHtcbiAgICAgICAgICBpbnB1dEVsLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4ICsgMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm1vdmVGb2N1cyhpbmRleCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYnJhbmNoIGV4cGxpY2l0IGZvciBzdGF0aWMtYW5hbHlzaXMgcnVsZSByZXF1aXJpbmcgZWxzZS9kZWZhdWx0IGhhbmRsaW5nLlxuICAgIGlmIChrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgc3RhcnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHBhc3RlZCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSA/PyAnJztcbiAgICBjb25zdCB2YWxpZENoYXJzID0gdGhpcy5leHRyYWN0VmFsaWRDaGFyc0Zyb21TdHJpbmcocGFzdGVkKTtcbiAgICBsZXQgY3Vyc29yID0gc3RhcnRJbmRleDtcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiB2YWxpZENoYXJzKSB7XG4gICAgICBpZiAoY3Vyc29yID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dHNbY3Vyc29yXSA9IGNoYXI7XG4gICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGN1cnNvcik7XG4gICAgICBpZiAoaW5wdXRFbCkge1xuICAgICAgICBpbnB1dEVsLnZhbHVlID0gY2hhcjtcbiAgICAgIH1cbiAgICAgIGN1cnNvciA9IGN1cnNvciArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcblxuICAgIGNvbnN0IGZvY3VzVGFyZ2V0ID0gTWF0aC5taW4oY3Vyc29yLCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMubW92ZUZvY3VzKGZvY3VzVGFyZ2V0KTtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25CbHVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJhdykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gcmF3LnNwbGl0KCcnKTtcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZENoYXIoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIGNoYXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyc0Zyb21TdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnJykuZmlsdGVyKGMgPT4gdGhpcy5pc1ZhbGlkQ2hhcihjKSk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDaGFyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFscGhhbnVtZXJpYykge1xuICAgICAgcmV0dXJuIGNoYXIudHJpbSgpLmxlbmd0aCA9PT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gL1xcZC8udGVzdChjaGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgYWR2YW5jZUZvY3VzKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVGb2N1cyhpbmRleCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGluZGV4KTtcbiAgICBpbnB1dEVsPy5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnB1dEVsKGluZGV4OiBudW1iZXIpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMucGluSW5wdXRzPy50b0FycmF5KCk7XG5cbiAgICBpZiAoIWxpc3QgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IGxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdFtpbmRleF0/Lm5hdGl2ZUVsZW1lbnQgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlPy4odGhpcy5jdXJyZW50VmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZSkge1xuICAgICAgdGhpcy5jb2RlRmlsbGVkLmVtaXQodGhpcy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZFwiPlxuICBAaWYgKGxhYmVsS2V5KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19sYWJlbC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGluLWNvZGUtZmllbGRfX2dyb3VwLWxhYmVsXCIgW2lkXT1cImdyb3VwTGFiZWxJZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9fZ3JvdXAtbGFiZWwtdGV4dFwiPlxuICAgICAgICAgIHt7IGxhYmVsS2V5KCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLWZpZWxkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LnJlcXVpcmVkX2ZpZWxkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19pbnB1dHNcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxLZXkoKSA/IG51bGwgOiAoZ3JvdXBBcmlhTGFiZWxLZXkgfCB0cmFuc2xhdGUpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxLZXkoKSA/IGdyb3VwTGFiZWxJZCA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQgPyAncGluLWhlbHAtJyArIGlkIDogbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yXCJcbiAgPlxuICAgIEBmb3IgKHZhbHVlIG9mIGlucHV0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgI3BpbklucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJzZGMtcGluLWNvZGUtZmllbGRfX2lucHV0XCJcbiAgICAgICAgW2NsYXNzLnNkYy1waW4tY29kZS1maWVsZF9faW5wdXQtLWVycm9yXT1cImhhc0Vycm9yXCJcbiAgICAgICAgW2NsYXNzLnNkYy1waW4tY29kZS1maWVsZF9faW5wdXQtLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAoYWxwaGFudW1lcmljID8gY2hhcmFjdGVyQXJpYUxhYmVsS2V5IDogZGlnaXRBcmlhTGFiZWxLZXkpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgbjogJGluZGV4ICsgMSwgdG90YWw6IGxlbmd0aCB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQgPyAncGluLWhlbHAtJyArIGlkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvclwiXG4gICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJhbHBoYW51bWVyaWMgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiMVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRpbmRleClcIlxuICAgICAgLz5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIEBpZiAoaGVscFRleHQpIHtcbiAgICA8ZGl2XG4gICAgICBbaWRdPVwiJ3Bpbi1oZWxwLScgKyBpZFwiXG4gICAgICBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9faGVscFwiXG4gICAgPnt7IGhlbHBUZXh0IH19PC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9waW4tY29kZS1maWVsZC9waW4tY29kZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Bpbi1jb2RlLWZpZWxkL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsdUNBQXVDLEVBQ3ZDLG1DQUFtQyxFQUNuQyw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLG1DQUFtQyxFQUNwQyxNQUFNLDJDQUEyQyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFrQjVELE1BQU0sT0FBTyxxQkFBcUI7SUEwQkg7SUF6QnBCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxNQUFNLEdBQUcsNkJBQTZCLENBQUM7SUFDdkMsWUFBWSxHQUFHLG1DQUFtQyxDQUFDO0lBQ25ELFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDZCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFrQixLQUFLLENBQUM7SUFDN0IsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVQLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRXJFLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRXhCLFNBQVMsQ0FBMkM7SUFFM0QsaUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7SUFDeEQsaUJBQWlCLEdBQUcsbUNBQW1DLENBQUM7SUFDeEQscUJBQXFCLEdBQUcsdUNBQXVDLENBQUM7SUFFekUsTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWxCLFNBQVMsQ0FBMkI7SUFDcEMsVUFBVSxDQUFjO0lBRWhDLFlBQTZCLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFzQixDQUFDO1lBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtJQUV2QixVQUFVLENBQUMsS0FBZ0M7UUFDekMsTUFBTSxHQUFHLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUEyQjtRQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCw0QkFBNEI7SUFFNUIsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQy9DLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVksRUFBRSxLQUFhO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQy9CLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0IsRUFBRSxLQUFhO1FBQzNDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixDQUFDO2dCQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxpRkFBaUY7UUFDakYsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFxQixFQUFFLFVBQWtCO1FBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBRXhCLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN2QixDQUFDO1lBQ0QsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUVWLGdCQUFnQixDQUFDLEdBQVc7UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sMkJBQTJCLENBQUMsR0FBVztRQUM3QyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBYTtRQUM3QixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBYTtRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7d0dBcFBVLHFCQUFxQjs0RkFBckIscUJBQXFCLG9SQVJyQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRix5SUMzQ0gsaWlFQTBEQSxpdkZEMUJZLFlBQVksOEJBQUUsZUFBZSwyRkFBRSxXQUFXOzs0RkFhekMscUJBQXFCO2tCQWhCakMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsbUJBR3BDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFFBQVEsYUFDOUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3NGQUdRLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRW1CLFNBQVM7c0JBQWxDLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtcbiAgUElOX0NPREVfRklFTERfQ0hBUkFDVEVSX0FSSUFfTEFCRUxfS0VZLFxuICBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQyxcbiAgUElOX0NPREVfRklFTERfREVGQVVMVF9MRU5HVEgsXG4gIFBJTl9DT0RFX0ZJRUxEX0RJR0lUX0FSSUFfTEFCRUxfS0VZLFxuICBQSU5fQ09ERV9GSUVMRF9HUk9VUF9BUklBX0xBQkVMX0tFWVxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9waW4tY29kZS1maWVsZC5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtcGluLWNvZGUtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBpbkNvZGVGaWVsZENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQaW5Db2RlRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluJyk7XG4gIEBJbnB1dCgpIGxlbmd0aCA9IFBJTl9DT0RFX0ZJRUxEX0RFRkFVTFRfTEVOR1RIO1xuICBASW5wdXQoKSBhbHBoYW51bWVyaWMgPSBQSU5fQ09ERV9GSUVMRF9ERUZBVUxUX0FMUEhBTlVNRVJJQztcbiAgQElucHV0KCkgaGVscFRleHQgPSAnJztcbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbDogU3RyaW5nQm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBncm91cExhYmVsSWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtcGluLWNvZGUtZmllbGQtbGFiZWwnKTtcblxuICBAT3V0cHV0KCkgY29kZUZpbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ3BpbklucHV0JykgcGluSW5wdXRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBncm91cEFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0dST1VQX0FSSUFfTEFCRUxfS0VZO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlnaXRBcmlhTGFiZWxLZXkgPSBQSU5fQ09ERV9GSUVMRF9ESUdJVF9BUklBX0xBQkVMX0tFWTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYXJhY3RlckFyaWFMYWJlbEtleSA9IFBJTl9DT0RFX0ZJRUxEX0NIQVJBQ1RFUl9BUklBX0xBQkVMX0tFWTtcblxuICBwcm90ZWN0ZWQgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcm90ZWN0ZWQgdG91Y2hlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgX29uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5pbnB1dHMgPSBBcnJheSh0aGlzLmxlbmd0aCkuZmlsbCgnJyk7XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzLmpvaW4oJycpO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRzLmV2ZXJ5KHYgPT4gdi5sZW5ndGggPT09IDEpO1xuICB9XG5cbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xlbmd0aCddKSB7XG4gICAgICBjb25zdCBuZXdMZW5ndGggPSBjaGFuZ2VzWydsZW5ndGgnXS5jdXJyZW50VmFsdWUgYXMgbnVtYmVyO1xuICAgICAgY29uc3Qgb2xkSW5wdXRzID0gdGhpcy5pbnB1dHMuc2xpY2UoKTtcbiAgICAgIHRoaXMuaW5wdXRzID0gQXJyYXkobmV3TGVuZ3RoKS5maWxsKCcnKS5tYXAoKF8sIGkpID0+IG9sZElucHV0c1tpXSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3Qgc3RyID0gdmFsdWUgPz8gJyc7XG4gICAgdGhpcy5pbnB1dHMgPSBBcnJheSh0aGlzLmxlbmd0aCkuZmlsbCgnJykubWFwKChfLCBpKSA9PiBzdHJbaV0gPz8gJycpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbGFiZWxLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMubGFiZWwgPT09ICdzdHJpbmcnID8gdGhpcy5sYWJlbCA6ICcnO1xuICB9XG5cbiAgLy8gS2V5Ym9hcmQgJiBpbnB1dCBoYW5kbGVyc1xuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlucHV0LnNlbGVjdCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgcmF3ID0gaW5wdXQudmFsdWU7XG4gICAgY29uc3QgdmFsaWRDaGFyID0gdGhpcy5leHRyYWN0VmFsaWRDaGFyKHJhdyk7XG5cbiAgICBpZiAodmFsaWRDaGFyKSB7XG4gICAgICB0aGlzLmlucHV0c1tpbmRleF0gPSB2YWxpZENoYXI7XG4gICAgICBpbnB1dC52YWx1ZSA9IHZhbGlkQ2hhcjtcbiAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgICB0aGlzLmFkdmFuY2VGb2N1cyhpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9ICcnO1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMubm90aWZ5Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcblxuICAgIGlmIChrZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAodGhpcy5pbnB1dHNbaW5kZXhdKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzW2luZGV4XSA9ICcnO1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGluZGV4KTtcbiAgICAgICAgaWYgKGlucHV0RWwpIHtcbiAgICAgICAgICBpbnB1dEVsLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZUZvY3VzKGluZGV4ICsgMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm1vdmVGb2N1cyhpbmRleCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYnJhbmNoIGV4cGxpY2l0IGZvciBzdGF0aWMtYW5hbHlzaXMgcnVsZSByZXF1aXJpbmcgZWxzZS9kZWZhdWx0IGhhbmRsaW5nLlxuICAgIGlmIChrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgc3RhcnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHBhc3RlZCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSA/PyAnJztcbiAgICBjb25zdCB2YWxpZENoYXJzID0gdGhpcy5leHRyYWN0VmFsaWRDaGFyc0Zyb21TdHJpbmcocGFzdGVkKTtcbiAgICBsZXQgY3Vyc29yID0gc3RhcnRJbmRleDtcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiB2YWxpZENoYXJzKSB7XG4gICAgICBpZiAoY3Vyc29yID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dHNbY3Vyc29yXSA9IGNoYXI7XG4gICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGN1cnNvcik7XG4gICAgICBpZiAoaW5wdXRFbCkge1xuICAgICAgICBpbnB1dEVsLnZhbHVlID0gY2hhcjtcbiAgICAgIH1cbiAgICAgIGN1cnNvciA9IGN1cnNvciArIDE7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlDaGFuZ2UoKTtcblxuICAgIGNvbnN0IGZvY3VzVGFyZ2V0ID0gTWF0aC5taW4oY3Vyc29yLCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMubW92ZUZvY3VzKGZvY3VzVGFyZ2V0KTtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25CbHVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJhdykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gcmF3LnNwbGl0KCcnKTtcblxuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZENoYXIoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIGNoYXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyc0Zyb21TdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnJykuZmlsdGVyKGMgPT4gdGhpcy5pc1ZhbGlkQ2hhcihjKSk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDaGFyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFscGhhbnVtZXJpYykge1xuICAgICAgcmV0dXJuIGNoYXIudHJpbSgpLmxlbmd0aCA9PT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gL1xcZC8udGVzdChjaGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgYWR2YW5jZUZvY3VzKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1vdmVGb2N1cyhpbmRleCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlRm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nZXRJbnB1dEVsKGluZGV4KTtcbiAgICBpbnB1dEVsPy5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnB1dEVsKGluZGV4OiBudW1iZXIpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMucGluSW5wdXRzPy50b0FycmF5KCk7XG5cbiAgICBpZiAoIWxpc3QgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IGxpc3QubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdFtpbmRleF0/Lm5hdGl2ZUVsZW1lbnQgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlPy4odGhpcy5jdXJyZW50VmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZSkge1xuICAgICAgdGhpcy5jb2RlRmlsbGVkLmVtaXQodGhpcy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZFwiPlxuICBAaWYgKGxhYmVsS2V5KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19sYWJlbC1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtcGluLWNvZGUtZmllbGRfX2dyb3VwLWxhYmVsXCIgW2lkXT1cImdyb3VwTGFiZWxJZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9fZ3JvdXAtbGFiZWwtdGV4dFwiPlxuICAgICAgICAgIHt7IGxhYmVsS2V5KCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLWZpZWxkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5X3JlcXVpcmVkX2ZpZWxkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2RjLXBpbi1jb2RlLWZpZWxkX19pbnB1dHNcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxLZXkoKSA/IG51bGwgOiAoZ3JvdXBBcmlhTGFiZWxLZXkgfCB0cmFuc2xhdGUpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxLZXkoKSA/IGdyb3VwTGFiZWxJZCA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQgPyAncGluLWhlbHAtJyArIGlkIDogbnVsbFwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yXCJcbiAgPlxuICAgIEBmb3IgKHZhbHVlIG9mIGlucHV0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgI3BpbklucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJzZGMtcGluLWNvZGUtZmllbGRfX2lucHV0XCJcbiAgICAgICAgW2NsYXNzLnNkYy1waW4tY29kZS1maWVsZF9faW5wdXQtLWVycm9yXT1cImhhc0Vycm9yXCJcbiAgICAgICAgW2NsYXNzLnNkYy1waW4tY29kZS1maWVsZF9faW5wdXQtLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAoYWxwaGFudW1lcmljID8gY2hhcmFjdGVyQXJpYUxhYmVsS2V5IDogZGlnaXRBcmlhTGFiZWxLZXkpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgbjogJGluZGV4ICsgMSwgdG90YWw6IGxlbmd0aCB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQgPyAncGluLWhlbHAtJyArIGlkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvclwiXG4gICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJhbHBoYW51bWVyaWMgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiMVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRpbmRleClcIlxuICAgICAgLz5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIEBpZiAoaGVscFRleHQpIHtcbiAgICA8ZGl2XG4gICAgICBbaWRdPVwiJ3Bpbi1oZWxwLScgKyBpZFwiXG4gICAgICBjbGFzcz1cInNkYy1waW4tY29kZS1maWVsZF9faGVscFwiXG4gICAgPnt7IGhlbHBUZXh0IH19PC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19