@arsedizioni/ars-utils 18.5.62 → 19.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +10 -10
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
  6. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +10 -10
  8. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  10. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +10 -10
  12. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  14. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  16. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  18. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  20. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  22. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  23. package/package.json +5 -29
  24. package/esm2022/arsedizioni-ars-utils.mjs +0 -5
  25. package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
  26. package/esm2022/clipper.common/common/common.module.mjs +0 -16
  27. package/esm2022/clipper.common/common/definitions.mjs +0 -2041
  28. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
  29. package/esm2022/clipper.common/common/messages.mjs +0 -36
  30. package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1011
  31. package/esm2022/clipper.common/public_api.mjs +0 -5
  32. package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
  33. package/esm2022/clipper.ui/documents.mjs +0 -50
  34. package/esm2022/clipper.ui/public_api.mjs +0 -18
  35. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
  36. package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
  37. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
  38. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
  39. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
  40. package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
  41. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
  42. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
  43. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
  44. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
  45. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
  46. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
  47. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
  48. package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
  49. package/esm2022/core/core.module.mjs +0 -151
  50. package/esm2022/core/dateFnsAdapter.mjs +0 -203
  51. package/esm2022/core/definitions.mjs +0 -47
  52. package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
  53. package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
  54. package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
  55. package/esm2022/core/directives/validators.mjs +0 -502
  56. package/esm2022/core/pipes/format.pipe.mjs +0 -53
  57. package/esm2022/core/pipes/replace.pipe.mjs +0 -29
  58. package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
  59. package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
  60. package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
  61. package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
  62. package/esm2022/core/public_api.mjs +0 -22
  63. package/esm2022/core/selectable.mjs +0 -131
  64. package/esm2022/core/services/broadcast.service.mjs +0 -35
  65. package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
  66. package/esm2022/core/services/environment.service.mjs +0 -29
  67. package/esm2022/core/services/screen.service.mjs +0 -23
  68. package/esm2022/core/services/theme.service.mjs +0 -140
  69. package/esm2022/core/system.mjs +0 -664
  70. package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
  71. package/esm2022/evolution.common/common/common.module.mjs +0 -16
  72. package/esm2022/evolution.common/common/definitions.mjs +0 -454
  73. package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
  74. package/esm2022/evolution.common/common/messages.mjs +0 -8
  75. package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -490
  76. package/esm2022/evolution.common/public_api.mjs +0 -5
  77. package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
  78. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
  79. package/esm2022/help/definitions.mjs +0 -2
  80. package/esm2022/help/help.module.mjs +0 -12
  81. package/esm2022/help/public_api.mjs +0 -7
  82. package/esm2022/help/services/help.service.mjs +0 -77
  83. package/esm2022/public_api.mjs +0 -15
  84. package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
  85. package/esm2022/support.common/common/common.module.mjs +0 -16
  86. package/esm2022/support.common/common/definitions.mjs +0 -29
  87. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
  88. package/esm2022/support.common/common/messages.mjs +0 -13
  89. package/esm2022/support.common/common/services/support.service.mjs +0 -289
  90. package/esm2022/support.common/public_api.mjs +0 -8
  91. package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
  92. package/esm2022/support.ui/public_api.mjs +0 -5
  93. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
  94. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
  95. package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
  96. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
  97. package/esm2022/tinymce/public_api.mjs +0 -7
  98. package/esm2022/tinymce/tinymce.module.mjs +0 -19
  99. package/esm2022/tinymce/utils.mjs +0 -150
  100. package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
  101. package/esm2022/ui/public_api.mjs +0 -12
  102. package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
  103. package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  104. package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  105. package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  106. package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
  107. package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
  108. package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  109. package/esm2022/ui/ui/definitions.mjs +0 -2
  110. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
  111. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
  112. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
  113. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
  114. package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  115. package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  116. package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  117. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
  118. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
  119. package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
  120. package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  121. package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  122. package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  123. package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  124. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
  125. package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
  126. package/esm2022/ui/ui/filters.mjs +0 -43
  127. package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
  128. package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
  129. package/esm2022/ui/ui/services/ui.service.mjs +0 -21
  130. package/esm2022/ui/ui/ui.module.mjs +0 -21
  131. package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
  132. package/esm2022/ui.application/public_api.mjs +0 -21
  133. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
  134. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  135. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  136. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  137. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
  138. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
  139. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  140. package/esm2022/ui.application/ui/definitions.mjs +0 -31
  141. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  142. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  143. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  144. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
  145. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  146. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  147. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  148. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  149. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
  150. package/esm2022/ui.application/ui/filters.mjs +0 -43
  151. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
  152. package/esm2022/ui.application/ui/ui.module.mjs +0 -30
  153. package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
  154. package/esm2022/ui.oauth/public_api.mjs +0 -6
  155. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
  156. package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
  157. package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
  158. package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
  159. package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
  160. package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
  161. package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
  162. package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
  163. package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
  164. package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
  165. package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
  166. package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
  167. package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
  168. package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
  169. package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
  170. package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
  171. package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
  172. package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
  173. package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
  174. package/ui/ui/filters.d.ts +0 -57
@@ -1,272 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { NgClass, NgStyle } from '@angular/common';
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, EventEmitter, HostBinding, inject, Input, input, Optional, Output, Renderer2, Self, signal } from '@angular/core';
4
- import { FormsModule } from '@angular/forms';
5
- import { MatBadgeModule } from '@angular/material/badge';
6
- import { MatButtonModule } from '@angular/material/button';
7
- import { MatChipsModule } from '@angular/material/chips';
8
- import { MatFormFieldModule } from '@angular/material/form-field';
9
- import { MatIconModule } from '@angular/material/icon';
10
- import { MatSelectModule } from '@angular/material/select';
11
- import { SystemUtils } from '@arsedizioni/ars-utils/core';
12
- import { FlexLayoutModule } from '@ngbracket/ngx-layout';
13
- import { debounceTime, fromEvent, Subject, takeUntil } from 'rxjs';
14
- import { MatTooltipModule } from '@angular/material/tooltip';
15
- import { ButtonSelectorComponent } from '../button-selector/button-selector.component';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/forms";
18
- import * as i2 from "@ngbracket/ngx-layout/extended";
19
- import * as i3 from "@angular/material/form-field";
20
- import * as i4 from "@angular/material/select";
21
- import * as i5 from "@angular/material/core";
22
- import * as i6 from "@angular/material/chips";
23
- import * as i7 from "@angular/material/icon";
24
- import * as i8 from "@angular/material/button";
25
- import * as i9 from "@angular/material/badge";
26
- import * as i10 from "@angular/material/tooltip";
27
- export class ChipsSelectorComponent {
28
- set value(value) {
29
- this._value = value;
30
- this.propagateChange(this._value);
31
- this.stateChanges.next();
32
- if (this.changesEnabled) {
33
- this.changed.emit(this._value);
34
- }
35
- this.selection = [];
36
- this.singleSelection = null;
37
- if (this._value) {
38
- this.options().forEach(n => {
39
- if (this._value?.findIndex((x) => x.value === n.value) !== -1) {
40
- this.selection.push(n);
41
- }
42
- });
43
- if (this.selection.length > 0) {
44
- this.singleSelection = this.selection[0];
45
- }
46
- }
47
- }
48
- get value() {
49
- return this._value;
50
- }
51
- get empty() {
52
- return !this._value || this._value?.length === 0;
53
- }
54
- get errorState() {
55
- return this.ngControl.errors != null && this.ngControl.touched;
56
- }
57
- get required() {
58
- return this._required;
59
- }
60
- set required(value) {
61
- this._required = coerceBooleanProperty(value);
62
- this.stateChanges.next();
63
- }
64
- get disabled() {
65
- if (this.ngControl && this.ngControl.disabled != null) {
66
- return this.ngControl.disabled;
67
- }
68
- return this._disabled;
69
- }
70
- set disabled(value) {
71
- this._disabled = coerceBooleanProperty(value);
72
- if (this.focused) {
73
- this.focused = false;
74
- this.stateChanges.next();
75
- }
76
- }
77
- get placeholder() {
78
- return this._placeholder;
79
- }
80
- set placeholder(value) {
81
- this._placeholder = value;
82
- this.stateChanges.next();
83
- }
84
- get shouldLabelFloat() {
85
- return this.focused || !this.empty;
86
- }
87
- constructor(ngControl) {
88
- this.ngControl = ngControl;
89
- this.changed = new EventEmitter();
90
- this.containerId = `chips-selector-container--${SystemUtils.generateUUID()}`;
91
- this.containerWidth = signal(-6);
92
- this.focused = false;
93
- this.stateChanges = new Subject();
94
- this.unsubscribe = new Subject();
95
- this.changeDetector = inject(ChangeDetectorRef);
96
- this.changesEnabled = false;
97
- this.options = input([]);
98
- this.collapsedWidth = input(-1);
99
- this.collapsedDisplayMode = input('dropdown');
100
- this.collapseAt = input(-1);
101
- this.collapseAtContainer = input(false);
102
- this.collapsed = computed(() => {
103
- const cw = this.containerWidth();
104
- const mw = this.collapseAt();
105
- return this.mode() === 'collapsed' || (mw === -1 || (cw > 0 && mw > 0 && cw < mw));
106
- });
107
- this.label = input('');
108
- this.multiple = input(false);
109
- this.mustSelect = input(false);
110
- this.mode = input('dinamyc');
111
- this.stacked = input(false);
112
- this._value = [];
113
- this._required = false;
114
- this._disabled = false;
115
- this._placeholder = '';
116
- this.propagateChange = (_) => { };
117
- this.propagateTouched = () => { };
118
- this.id = `chips-selector--${SystemUtils.generateUUID()}`;
119
- this.describedBy = '';
120
- this.renderer = inject(Renderer2);
121
- this.selection = [];
122
- this.singleSelection = null;
123
- if (this.ngControl != null) {
124
- this.ngControl.valueAccessor = this;
125
- }
126
- }
127
- ngOnInit() {
128
- // React to window size change
129
- fromEvent(window, 'resize')
130
- .pipe(takeUntil(this.unsubscribe), debounceTime(250))
131
- .subscribe(() => {
132
- if (this.collapseAt() > 0) {
133
- // Close the options menu if open
134
- this.updateContainerWidth();
135
- }
136
- });
137
- }
138
- ngOnDestroy() {
139
- this.unsubscribe.next();
140
- this.unsubscribe.complete();
141
- this.stateChanges.complete();
142
- }
143
- ngAfterContentInit() {
144
- setTimeout(() => {
145
- this.updateContainerWidth();
146
- this.changesEnabled = true;
147
- this.changeDetector.markForCheck();
148
- }, 250);
149
- }
150
- /**
151
- * Update container width
152
- */
153
- updateContainerWidth() {
154
- const elem = document.getElementById(this.containerId);
155
- if (elem && elem.clientWidth > 0) {
156
- this.containerWidth.set(this.collapseAtContainer()
157
- ? (elem?.clientWidth ?? -1)
158
- : (window.innerWidth ?? -1));
159
- }
160
- else {
161
- setTimeout(() => {
162
- this.updateContainerWidth();
163
- }, 100);
164
- }
165
- }
166
- /**
167
- * Update current value with a little delay
168
- */
169
- updateValue() {
170
- setTimeout(() => {
171
- const value = !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === "button"
172
- ? this.singleSelection
173
- : this.selection;
174
- const isArray = Array.isArray(value);
175
- if (isArray) {
176
- this.writeValue(value);
177
- }
178
- else {
179
- this.writeValue([value]);
180
- }
181
- }, 250);
182
- }
183
- /**
184
- * Check if a item is selectable
185
- */
186
- isSelectable(item) {
187
- return (this.selection.findIndex(x => x.value === item.value) !== -1 || this.singleSelection?.value === item.value)
188
- && this.mustSelect();
189
- }
190
- writeValue(value) {
191
- if (this.value !== value) {
192
- this.value = value;
193
- }
194
- }
195
- registerOnChange(fn) {
196
- this.propagateChange = fn;
197
- }
198
- registerOnTouched(fn) {
199
- this.propagateTouched = fn;
200
- }
201
- setDescribedByIds(ids) {
202
- this.describedBy = ids.join(' ');
203
- }
204
- setDisabledState(isDisabled) {
205
- if (!SystemUtils.isBrowser())
206
- return;
207
- let elem = document.getElementById(this.id);
208
- if (elem) {
209
- this.renderer.setProperty(elem, 'disabled', isDisabled);
210
- }
211
- }
212
- onContainerClick() {
213
- if (!this.focused) {
214
- if (!SystemUtils.isBrowser())
215
- return;
216
- let elem = document.getElementById(this.id);
217
- if (elem) {
218
- elem.focus();
219
- this.propagateTouched();
220
- }
221
- }
222
- }
223
- /**
224
- * Clear selection
225
- * @param e : the click event
226
- */
227
- clear(e) {
228
- this.writeValue([]);
229
- e.stopPropagation();
230
- this.changeDetector.markForCheck();
231
- }
232
- /**
233
- * Select single element
234
- * @param item : the item to select
235
- */
236
- select(item) {
237
- if (item) {
238
- this.writeValue([item]);
239
- this.changeDetector.markForCheck();
240
- }
241
- }
242
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ChipsSelectorComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: ChipsSelectorComponent, isStandalone: true, selector: "chips-selector", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, collapsedWidth: { classPropertyName: "collapsedWidth", publicName: "collapsedWidth", isSignal: true, isRequired: false, transformFunction: null }, collapsedDisplayMode: { classPropertyName: "collapsedDisplayMode", publicName: "collapsedDisplayMode", isSignal: true, isRequired: false, transformFunction: null }, collapseAt: { classPropertyName: "collapseAt", publicName: "collapseAt", isSignal: true, isRequired: false, transformFunction: null }, collapseAtContainer: { classPropertyName: "collapseAtContainer", publicName: "collapseAtContainer", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, mustSelect: { classPropertyName: "mustSelect", publicName: "mustSelect", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { changed: "changed" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedBy": "this.describedBy" } }, ngImport: i0, template: "<div [id]=\"containerId\" class=\"chips-selector\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapsedDisplayMode() === 'dropdown') {\r\n <mat-form-field [ngStyle]=\"{'min-width': collapsedWidth() > 0 ? collapsedWidth()+'.px' : '100%'}\"\r\n subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"selection\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track o.value) {\r\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}});\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"singleSelection\"\r\n name=\"value\" (selected)=\"updateValue()\" ></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [ngClass]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\" [(ngModel)]=\"selection\" (change)=\"updateValue()\">\r\n @for (o of options(); track o.value) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"o.bagInfo ?? ''\" [selectable]=\"!isSelectable(o)\" [value]=\"o\" [disabled]=\"o.disabled\" >{{o.shortName ??\r\n o.name}}</mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n</div>", styles: [".chips-selector{width:100%}.chips-selector .collapsed-additional-selection{opacity:.75;font-size:.75em}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i2.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { 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: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i6.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i6.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ButtonSelectorComponent, selector: "button-selector", inputs: ["disabled", "width", "border", "borderRadius", "label", "labelSelected", "options", "autoSelect"], outputs: ["changed", "selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
244
- }
245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ChipsSelectorComponent, decorators: [{
246
- type: Component,
247
- args: [{ selector: 'chips-selector', standalone: true, imports: [NgStyle, NgClass, FlexLayoutModule, FormsModule, MatFormFieldModule, MatSelectModule,
248
- MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,
249
- ButtonSelectorComponent
250
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [id]=\"containerId\" class=\"chips-selector\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapsedDisplayMode() === 'dropdown') {\r\n <mat-form-field [ngStyle]=\"{'min-width': collapsedWidth() > 0 ? collapsedWidth()+'.px' : '100%'}\"\r\n subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"selection\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track o.value) {\r\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}});\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"singleSelection\"\r\n name=\"value\" (selected)=\"updateValue()\" ></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [ngClass]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\" [(ngModel)]=\"selection\" (change)=\"updateValue()\">\r\n @for (o of options(); track o.value) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"o.bagInfo ?? ''\" [selectable]=\"!isSelectable(o)\" [value]=\"o\" [disabled]=\"o.disabled\" >{{o.shortName ??\r\n o.name}}</mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n</div>", styles: [".chips-selector{width:100%}.chips-selector .collapsed-additional-selection{opacity:.75;font-size:.75em}\n"] }]
251
- }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
252
- type: Optional
253
- }, {
254
- type: Self
255
- }] }], propDecorators: { changed: [{
256
- type: Output
257
- }], required: [{
258
- type: Input
259
- }], disabled: [{
260
- type: Input
261
- }], placeholder: [{
262
- type: Input
263
- }], id: [{
264
- type: HostBinding
265
- }], shouldLabelFloat: [{
266
- type: HostBinding,
267
- args: ['class.floating']
268
- }], describedBy: [{
269
- type: HostBinding,
270
- args: ['attr.aria-describedBy']
271
- }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvY2hpcHMtc2VsZWN0b3IvY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvY2hpcHMtc2VsZWN0b3IvY2hpcHMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQW9CLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6TyxPQUFPLEVBQXdCLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJB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UUFBUTs7MEJBQUksSUFBSTt5Q0E3R1QsT0FBTztzQkFBaEIsTUFBTTtnQkEyREgsUUFBUTtzQkFEWCxLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFnQkYsV0FBVztzQkFEZCxLQUFLO2dCQWFTLEVBQUU7c0JBQWhCLFdBQVc7Z0JBRVIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJUyxXQUFXO3NCQUFoRCxXQUFXO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IE5nQ2xhc3MsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIGluamVjdCwgSW5wdXQsIGlucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUmVuZGVyZXIyLCBTZWxmLCBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBOYW1lVmFsdWVJdGVtLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgQnV0dG9uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9idXR0b24tc2VsZWN0b3IvYnV0dG9uLXNlbGVjdG9yLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2hpcHMtc2VsZWN0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW05nU3R5bGUsIE5nQ2xhc3MsIEZsZXhMYXlvdXRNb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdENoaXBzTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEJhZGdlTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgQnV0dG9uU2VsZWN0b3JDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGlwcy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NoaXBzLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoaXBzU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmFtZVZhbHVlSXRlbTxhbnk+W10gfCBudWxsPigpO1xyXG4gIHByb3RlY3RlZCBjb250YWluZXJJZDogc3RyaW5nID0gYGNoaXBzLXNlbGVjdG9yLWNvbnRhaW5lci0tJHtTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKX1gO1xyXG4gIHByb3RlY3RlZCBjb250YWluZXJXaWR0aCA9IHNpZ25hbCgtNik7XHJcbiAgcHJpdmF0ZSBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgY2hhbmdlc0VuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgb3B0aW9ucyA9IGlucHV0PE5hbWVWYWx1ZUl0ZW08YW55PltdPihbXSk7XHJcbiAgY29sbGFwc2VkV2lkdGggPSBpbnB1dDxudW1iZXI+KC0xKTtcclxuICBjb2xsYXBzZWREaXNwbGF5TW9kZSA9IGlucHV0PCdkcm9wZG93bicgfCAnYnV0dG9uJz4oJ2Ryb3Bkb3duJyk7XHJcbiAgY29sbGFwc2VBdCA9IGlucHV0PG51bWJlcj4oLTEpO1xyXG4gIGNvbGxhcHNlQXRDb250YWluZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY29sbGFwc2VkOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBjdyA9IHRoaXMuY29udGFpbmVyV2lkdGgoKTtcclxuICAgIGNvbnN0IG13ID0gdGhpcy5jb2xsYXBzZUF0KCk7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlKCkgPT09ICdjb2xsYXBzZWQnIHx8IChtdyA9PT0gLTEgfHwgKGN3ID4gMCAmJiBtdyA+IDAgJiYgY3cgPCBtdykpO1xyXG4gIH0pXHJcbiAgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuICBtdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBtdXN0U2VsZWN0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIG1vZGUgPSBpbnB1dDwnY29sbGFwc2VkJyB8ICdkaW5hbXljJz4oJ2RpbmFteWMnKTtcclxuICBzdGFja2VkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIFxyXG5cclxuICBwcml2YXRlIF92YWx1ZTogTmFtZVZhbHVlSXRlbTxhbnk+W10gfCBudWxsID0gW11cclxuICBzZXQgdmFsdWUodmFsdWU6IE5hbWVWYWx1ZUl0ZW08YW55PltdIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIGlmICh0aGlzLmNoYW5nZXNFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0aW9uID0gW107XHJcbiAgICB0aGlzLnNpbmdsZVNlbGVjdGlvbiA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5fdmFsdWUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zKCkuZm9yRWFjaChuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWU/LmZpbmRJbmRleCgoeDogYW55KSA9PiB4LnZhbHVlID09PSBuLnZhbHVlKSAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnB1c2gobik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNpbmdsZVNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uWzBdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuX3ZhbHVlIHx8IHRoaXMuX3ZhbHVlPy5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG4gIGdldCBlcnJvclN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmVycm9ycyAhPSBudWxsICYmIHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xyXG4gIH1cclxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KClcclxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlOiAoXzogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4geyB9O1xyXG4gIHByaXZhdGUgcHJvcGFnYXRlVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCkgaWQgPSBgY2hpcHMtc2VsZWN0b3ItLSR7U3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCl9YDtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcclxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XHJcbiAgfVxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZEJ5JykgZGVzY3JpYmVkQnkgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG5cclxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uOiBOYW1lVmFsdWVJdGVtPGFueT5bXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBzaW5nbGVTZWxlY3Rpb246IE5hbWVWYWx1ZUl0ZW08YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIFJlYWN0IHRvIHdpbmRvdyBzaXplIGNoYW5nZVxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSwgZGVib3VuY2VUaW1lKDI1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlQXQoKSA+IDApIHtcclxuICAgICAgICAgIC8vIENsb3NlIHRoZSBvcHRpb25zIG1lbnUgaWYgb3BlblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVDb250YWluZXJXaWR0aCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJXaWR0aCgpO1xyXG4gICAgICB0aGlzLmNoYW5nZXNFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0sIDI1MCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY29udGFpbmVyIHdpZHRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb250YWluZXJXaWR0aCgpIHtcclxuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbnRhaW5lcklkKTtcclxuICAgIGlmIChlbGVtICYmIGVsZW0uY2xpZW50V2lkdGggPiAwKSB7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGguc2V0KFxyXG4gICAgICAgIHRoaXMuY29sbGFwc2VBdENvbnRhaW5lcigpXHJcbiAgICAgICAgICA/IChlbGVtPy5jbGllbnRXaWR0aCA/PyAtMSlcclxuICAgICAgICAgIDogKHdpbmRvdy5pbm5lcldpZHRoID8/IC0xKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRhaW5lcldpZHRoKCk7XHJcbiAgICAgIH0sIDEwMClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBjdXJyZW50IHZhbHVlIHdpdGggYSBsaXR0bGUgZGVsYXlcclxuICAgKi9cclxuICB1cGRhdGVWYWx1ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9XHJcbiAgICAgICAgIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmNvbGxhcHNlZCgpICYmIHRoaXMuY29sbGFwc2VkRGlzcGxheU1vZGUoKSA9PT0gXCJidXR0b25cIlxyXG4gICAgICAgICAgPyB0aGlzLnNpbmdsZVNlbGVjdGlvblxyXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGlvbjtcclxuICAgICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG4gICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKFt2YWx1ZV0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAyNTApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBpdGVtIGlzIHNlbGVjdGFibGVcclxuICAgKi9cclxuICBpc1NlbGVjdGFibGUoaXRlbTogTmFtZVZhbHVlSXRlbTxhbnk+KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uLmZpbmRJbmRleCh4ID0+IHgudmFsdWUgPT09IGl0ZW0udmFsdWUpICE9PSAtMSB8fCB0aGlzLnNpbmdsZVNlbGVjdGlvbj8udmFsdWUgPT09IGl0ZW0udmFsdWUpXHJcbiAgICAgICYmIHRoaXMubXVzdFNlbGVjdCgpO1xyXG4gIH1cclxuICBcclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKCFTeXN0ZW1VdGlscy5pc0Jyb3dzZXIoKSkgcmV0dXJuO1xyXG4gICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKTtcclxuICAgIGlmIChlbGVtKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoZWxlbSwgJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvbnRhaW5lckNsaWNrKCkge1xyXG4gICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcclxuICAgICAgaWYgKCFTeXN0ZW1VdGlscy5pc0Jyb3dzZXIoKSkgcmV0dXJuO1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgc2VsZWN0aW9uXHJcbiAgICogQHBhcmFtIGUgOiB0aGUgY2xpY2sgZXZlbnRcclxuICAgKi9cclxuICBjbGVhcihlOiBFdmVudCkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKFtdKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IHNpbmdsZSBlbGVtZW50XHJcbiAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBzZWxlY3RcclxuICAgKi9cclxuICBzZWxlY3QoaXRlbTogTmFtZVZhbHVlSXRlbTxhbnk+IHwgbnVsbCkge1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgdGhpcy53cml0ZVZhbHVlKFtpdGVtXSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IFtpZF09XCJjb250YWluZXJJZFwiIGNsYXNzPVwiY2hpcHMtc2VsZWN0b3JcIj5cclxuICAgIEBpZihjb250YWluZXJXaWR0aCgpID4gMCkge1xyXG4gICAgQGlmKGNvbGxhcHNlZCgpKSB7XHJcbiAgICBAaWYoY29sbGFwc2VkRGlzcGxheU1vZGUoKSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIFtuZ1N0eWxlXT1cInsnbWluLXdpZHRoJzogY29sbGFwc2VkV2lkdGgoKSA+IDAgPyBjb2xsYXBzZWRXaWR0aCgpKycucHgnIDogJzEwMCUnfVwiXHJcbiAgICAgICAgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgIEBpZihsYWJlbCgpKSB7XHJcbiAgICAgICAgPG1hdC1sYWJlbD57e2xhYmVsKCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGlvblwiIFttdWx0aXBsZV09XCJtdWx0aXBsZSgpXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJ1cGRhdGVWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHZhbHVlICYmICh2YWx1ZS5sZW5ndGggfHwgMCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB7e3ZhbHVlWzBdLnNob3J0TmFtZSA/PyB2YWx1ZVswXS5uYW1lfX1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBpZiAodmFsdWUgJiYgKHZhbHVlLmxlbmd0aCB8fCAwKSA+IDEpIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sbGFwc2VkLWFkZGl0aW9uYWwtc2VsZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgKCt7eyh2YWx1ZS5sZW5ndGggfHwgMCkgLSAxfX0ge3t2YWx1ZS5sZW5ndGggPT09IDIgPyAnYWx0cm8nIDogJ2FsdHJpJ319KVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgICAgQGZvciAobyBvZiBvcHRpb25zKCk7IHRyYWNrIG8udmFsdWUpIHtcclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9cIiBbZGlzYWJsZWRdPVwiby5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAge3tvLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgQGlmKG8uYmFnKSB7XHJcbiAgICAgICAgICAgICAgICAmbmJzcDsgKHt7by5iYWd9fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICBAaWYgKHZhbHVlICYmICh2YWx1ZS5sZW5ndGggfHwgMCkgPiAwKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIH0gQGVsc2UgIHtcclxuICAgIDxidXR0b24tc2VsZWN0b3IgW2xhYmVsXT1cImxhYmVsKClcIiBbb3B0aW9uc109XCJvcHRpb25zKClcIiBbd2lkdGhdPVwiY29sbGFwc2VkV2lkdGgoKVwiIFsobmdNb2RlbCldPVwic2luZ2xlU2VsZWN0aW9uXCJcclxuICAgICAgICBuYW1lPVwidmFsdWVcIiAoc2VsZWN0ZWQpPVwidXBkYXRlVmFsdWUoKVwiID48L2J1dHRvbi1zZWxlY3Rvcj5cclxuXHJcbiAgICB9XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDxtYXQtY2hpcC1saXN0Ym94IFtuZ0NsYXNzXT1cInN0YWNrZWQoKSA/ICdtYXQtbWRjLWNoaXAtc2V0LXN0YWNrZWQnIDogJydcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGUoKVwiIFsobmdNb2RlbCldPVwic2VsZWN0aW9uXCIgKGNoYW5nZSk9XCJ1cGRhdGVWYWx1ZSgpXCI+XHJcbiAgICAgICAgQGZvciAobyBvZiBvcHRpb25zKCk7IHRyYWNrIG8udmFsdWUpIHtcclxuICAgICAgICA8bWF0LWNoaXAtb3B0aW9uIFttYXRCYWRnZV09XCJvLmJhZ1wiICBbbWF0VG9vbHRpcF09XCJvLmJhZ0luZm8gPz8gJydcIiBbc2VsZWN0YWJsZV09XCIhaXNTZWxlY3RhYmxlKG8pXCIgW3ZhbHVlXT1cIm9cIiBbZGlzYWJsZWRdPVwiby5kaXNhYmxlZFwiICA+e3tvLnNob3J0TmFtZSA/P1xyXG4gICAgICAgICAgICBvLm5hbWV9fTwvbWF0LWNoaXAtb3B0aW9uPlxyXG4gICAgICAgIH1cclxuICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cclxuICAgIH1cclxuICAgIH1cclxuPC9kaXY+Il19