@yuuvis/app-drive 0.7.3

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 (107) hide show
  1. package/README.md +47 -0
  2. package/esm2022/extensions/index.mjs +2 -0
  3. package/esm2022/extensions/lib/extensions.module.mjs +35 -0
  4. package/esm2022/extensions/lib/extensions.service.mjs +44 -0
  5. package/esm2022/extensions/lib/object-config.defaults.mjs +19 -0
  6. package/esm2022/extensions/yuuvis-app-drive-extensions.mjs +5 -0
  7. package/esm2022/index.mjs +5 -0
  8. package/esm2022/lib/actions/copy-link/copy-link.action.mjs +40 -0
  9. package/esm2022/lib/actions/index.mjs +7 -0
  10. package/esm2022/lib/actions/manage-versions/manage-versions.action.mjs +33 -0
  11. package/esm2022/lib/actions/manage-versions/manage-versions.component.mjs +105 -0
  12. package/esm2022/lib/actions/paste/paste.action.mjs +41 -0
  13. package/esm2022/lib/actions/rename/rename.action.mjs +31 -0
  14. package/esm2022/lib/actions/rename/rename.component.mjs +42 -0
  15. package/esm2022/lib/actions/rename/rename.validator.mjs +23 -0
  16. package/esm2022/lib/actions/updateContent/update.content.action.mjs +52 -0
  17. package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +109 -0
  18. package/esm2022/lib/components/add-button/add-button.component.mjs +39 -0
  19. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +74 -0
  20. package/esm2022/lib/components/folder-tree/folder-tree.component.mjs +89 -0
  21. package/esm2022/lib/components/index.mjs +10 -0
  22. package/esm2022/lib/components/object-name/object-name.component.mjs +60 -0
  23. package/esm2022/lib/components/overlay/create-folder/create-folder.component.mjs +48 -0
  24. package/esm2022/lib/components/paste-from-clipboard/paste-from-clipboard.component.mjs +28 -0
  25. package/esm2022/lib/components/ribbon/ribbon.component.mjs +102 -0
  26. package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +38 -0
  27. package/esm2022/lib/components/search-filter/search-filter.component.mjs +429 -0
  28. package/esm2022/lib/components/sort/sort.component.mjs +156 -0
  29. package/esm2022/lib/components/versions-list/tile/tile.component.mjs +60 -0
  30. package/esm2022/lib/components/versions-list/versions-list.component.mjs +94 -0
  31. package/esm2022/lib/container/drive/drive.component.mjs +116 -0
  32. package/esm2022/lib/drive.icons.mjs +16 -0
  33. package/esm2022/lib/drive.schema.mjs +49 -0
  34. package/esm2022/lib/lib.routes.mjs +17 -0
  35. package/esm2022/lib/pages/files/files.component.mjs +377 -0
  36. package/esm2022/lib/pages/object/object.component.mjs +200 -0
  37. package/esm2022/lib/services/drive/drive.interface.mjs +14 -0
  38. package/esm2022/lib/services/drive/drive.service.mjs +437 -0
  39. package/esm2022/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.mjs +158 -0
  40. package/esm2022/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.interface.mjs +2 -0
  41. package/esm2022/lib/services/drive/versions/versions.mapping.mjs +42 -0
  42. package/esm2022/lib/services/index.mjs +5 -0
  43. package/esm2022/lib/services/providers/drive.providers.mjs +10 -0
  44. package/esm2022/lib/services/resolver/files.resolver.mjs +12 -0
  45. package/esm2022/lib/services/resolver/index.mjs +3 -0
  46. package/esm2022/lib/services/resolver/versions.route.resolver.mjs +10 -0
  47. package/esm2022/lib/services/stored-query/stored-query.data.mjs +25 -0
  48. package/esm2022/lib/services/stored-query/stored-query.interface.mjs +2 -0
  49. package/esm2022/lib/services/stored-query/stored-query.service.mjs +41 -0
  50. package/esm2022/lib/services/tokens/breadcrumb-max-depth.token.mjs +3 -0
  51. package/esm2022/lib/services/tokens/index.mjs +2 -0
  52. package/esm2022/yuuvis-app-drive.mjs +5 -0
  53. package/extensions/README.md +3 -0
  54. package/extensions/index.d.ts +1 -0
  55. package/extensions/lib/extensions.module.d.ts +6 -0
  56. package/extensions/lib/extensions.service.d.ts +7 -0
  57. package/extensions/lib/object-config.defaults.d.ts +2 -0
  58. package/fesm2022/yuuvis-app-drive-extensions.mjs +99 -0
  59. package/fesm2022/yuuvis-app-drive-extensions.mjs.map +1 -0
  60. package/fesm2022/yuuvis-app-drive.mjs +2945 -0
  61. package/fesm2022/yuuvis-app-drive.mjs.map +1 -0
  62. package/index.d.ts +4 -0
  63. package/lib/actions/copy-link/copy-link.action.d.ts +18 -0
  64. package/lib/actions/index.d.ts +6 -0
  65. package/lib/actions/manage-versions/manage-versions.action.d.ts +17 -0
  66. package/lib/actions/manage-versions/manage-versions.component.d.ts +32 -0
  67. package/lib/actions/paste/paste.action.d.ts +17 -0
  68. package/lib/actions/rename/rename.action.d.ts +17 -0
  69. package/lib/actions/rename/rename.component.d.ts +12 -0
  70. package/lib/actions/rename/rename.validator.d.ts +5 -0
  71. package/lib/actions/updateContent/update.content.action.d.ts +18 -0
  72. package/lib/components/add-button/add-button-overlay/add-button-overlay.component.d.ts +26 -0
  73. package/lib/components/add-button/add-button.component.d.ts +12 -0
  74. package/lib/components/breadcrumb/breadcrumb.component.d.ts +25 -0
  75. package/lib/components/folder-tree/folder-tree.component.d.ts +13 -0
  76. package/lib/components/index.d.ts +8 -0
  77. package/lib/components/object-name/object-name.component.d.ts +21 -0
  78. package/lib/components/overlay/create-folder/create-folder.component.d.ts +12 -0
  79. package/lib/components/paste-from-clipboard/paste-from-clipboard.component.d.ts +13 -0
  80. package/lib/components/ribbon/ribbon.component.d.ts +24 -0
  81. package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +13 -0
  82. package/lib/components/search-filter/search-filter.component.d.ts +23 -0
  83. package/lib/components/sort/sort.component.d.ts +31 -0
  84. package/lib/components/versions-list/tile/tile.component.d.ts +14 -0
  85. package/lib/components/versions-list/versions-list.component.d.ts +17 -0
  86. package/lib/container/drive/drive.component.d.ts +36 -0
  87. package/lib/drive.icons.d.ts +15 -0
  88. package/lib/drive.schema.d.ts +23 -0
  89. package/lib/lib.routes.d.ts +2 -0
  90. package/lib/pages/files/files.component.d.ts +101 -0
  91. package/lib/pages/object/object.component.d.ts +35 -0
  92. package/lib/services/drive/drive.interface.d.ts +62 -0
  93. package/lib/services/drive/drive.service.d.ts +64 -0
  94. package/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.component.d.ts +31 -0
  95. package/lib/services/drive/resolve-name-conflicts/resolve-name-conflicts.interface.d.ts +8 -0
  96. package/lib/services/drive/versions/versions.mapping.d.ts +2 -0
  97. package/lib/services/index.d.ts +4 -0
  98. package/lib/services/providers/drive.providers.d.ts +7 -0
  99. package/lib/services/resolver/files.resolver.d.ts +2 -0
  100. package/lib/services/resolver/index.d.ts +2 -0
  101. package/lib/services/resolver/versions.route.resolver.d.ts +2 -0
  102. package/lib/services/stored-query/stored-query.data.d.ts +5 -0
  103. package/lib/services/stored-query/stored-query.interface.d.ts +5 -0
  104. package/lib/services/stored-query/stored-query.service.d.ts +10 -0
  105. package/lib/services/tokens/breadcrumb-max-depth.token.d.ts +2 -0
  106. package/lib/services/tokens/index.d.ts +1 -0
  107. package/package.json +41 -0
@@ -0,0 +1,429 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, inject, input, output, signal } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
5
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
6
+ import { BaseObjectTypeField, ContentStreamField, LocaleDatePipe, Operator, OperatorLabel } from '@yuuvis/client-core';
7
+ import { ShellService } from '@yuuvis/client-shell-core';
8
+ import { YvcDragScrollModule } from '@yuuvis/components/drag-scroll';
9
+ import { YvcDropdownModule } from '@yuuvis/components/dropdown';
10
+ import { YvcOverlayService } from '@yuuvis/components/overlay';
11
+ import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@yuuvis/components/dropdown";
14
+ import * as i2 from "@yuuvis/client-core";
15
+ import * as i3 from "@angular/forms";
16
+ import * as i4 from "@yuuvis/components/drag-scroll";
17
+ export class SearchFilterComponent {
18
+ #shell;
19
+ #fb;
20
+ #overlay;
21
+ #CREATED_CUSTOM;
22
+ #flavors;
23
+ #customDateRange;
24
+ constructor() {
25
+ this.#shell = inject(ShellService);
26
+ this.#fb = inject(FormBuilder);
27
+ this.#overlay = inject(YvcOverlayService);
28
+ this.#CREATED_CUSTOM = 'custom';
29
+ this.translate = inject(TranslateService);
30
+ this.ANY_OPTION = 'any';
31
+ this.#flavors = this.#shell.getObjectFlavors();
32
+ this.typeOptions = signal([]);
33
+ this.dateOptions = signal([]);
34
+ this.sizeOptions = signal([]);
35
+ this.query = input(null);
36
+ this.queryChange = output();
37
+ this.filtersActive = signal(false);
38
+ this.filterForm = this.#fb.nonNullable.group({
39
+ type: [this.ANY_OPTION],
40
+ size: [this.ANY_OPTION],
41
+ created: [this.ANY_OPTION]
42
+ });
43
+ this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());
44
+ this.#setupOptions();
45
+ this.filterForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));
46
+ // listen to created filter changes to catch custom date range
47
+ this.filterForm
48
+ .get('created')
49
+ ?.valueChanges.pipe(takeUntilDestroyed())
50
+ .subscribe((v) => {
51
+ if (v === this.#CREATED_CUSTOM) {
52
+ // open date range picker
53
+ console.log(this.#customDateRange);
54
+ const o = this.#overlay.open(DateRangePickerComponent, {
55
+ range: this.#customDateRange
56
+ });
57
+ o.afterClosed$.subscribe((res) => {
58
+ this.#customDateRange = res.data;
59
+ if (!res.data) {
60
+ this.filterForm.get('created')?.patchValue(this.ANY_OPTION);
61
+ this.#setupDateOptions();
62
+ }
63
+ else {
64
+ this.#onFormValueChange(this.filterForm.value);
65
+ this.#setupDateOptions(this.#customDateRangeToString());
66
+ setTimeout(() => {
67
+ this.filterForm.patchValue({
68
+ created: this.#CREATED_CUSTOM
69
+ }, {
70
+ emitEvent: false
71
+ });
72
+ });
73
+ }
74
+ });
75
+ }
76
+ });
77
+ }
78
+ #customDateRangeToString() {
79
+ if (!this.#customDateRange)
80
+ return undefined;
81
+ const dp = new LocaleDatePipe(this.translate);
82
+ switch (this.#customDateRange.operator) {
83
+ case Operator.EQUAL: {
84
+ return dp.transform(this.#customDateRange.firstValue, 'shortDate');
85
+ }
86
+ case Operator.GREATER_OR_EQUAL: {
87
+ return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
88
+ }
89
+ case Operator.LESS_OR_EQUAL: {
90
+ return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue, 'shortDate')}`;
91
+ }
92
+ case Operator.INTERVAL_INCLUDE_BOTH: {
93
+ return `${dp.transform(this.#customDateRange.firstValue, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue, 'shortDate')}`;
94
+ }
95
+ }
96
+ return undefined;
97
+ }
98
+ reset() {
99
+ const q = this.query();
100
+ if (q) {
101
+ this.queryChange.emit(q);
102
+ this.filterForm.reset();
103
+ }
104
+ }
105
+ #onFormValueChange(v) {
106
+ // do not create a new query if custom date range is selected but not set
107
+ if (v.created === this.#CREATED_CUSTOM && !this.#customDateRange)
108
+ return;
109
+ if (v.created !== this.#CREATED_CUSTOM) {
110
+ this.#customDateRange = undefined;
111
+ this.#setupDateOptions();
112
+ }
113
+ const updatedQuery = this.#applyFilters(v);
114
+ this.queryChange.emit(updatedQuery);
115
+ this.filtersActive.set(!!updatedQuery.filters && updatedQuery.filters.length > 0);
116
+ }
117
+ #applyFilters(v) {
118
+ const updatedQuery = {
119
+ ...(this.query() || {}),
120
+ filters: []
121
+ };
122
+ updatedQuery.filters = [];
123
+ // file size filter
124
+ const typeFilter = this.#toTypeFilter(v.type);
125
+ if (typeFilter)
126
+ updatedQuery.filters.push(typeFilter);
127
+ // file size filter
128
+ const sizeFilter = this.#toSizeFilter(v.size);
129
+ if (sizeFilter)
130
+ updatedQuery.filters.push(sizeFilter);
131
+ // creation date filter
132
+ const dateFilter = this.#toDateFilter(v.created);
133
+ if (dateFilter)
134
+ updatedQuery.filters.push(dateFilter);
135
+ return updatedQuery;
136
+ }
137
+ #setupOptions() {
138
+ this.#setupTypeOptions();
139
+ this.#setupDateOptions();
140
+ this.#setupSizeOptions();
141
+ }
142
+ #setupTypeOptions() {
143
+ this.typeOptions.set([
144
+ {
145
+ label: this.translate.instant('yuv.app.drive.search.filter.option.any'),
146
+ value: this.ANY_OPTION
147
+ },
148
+ ...this.#flavors.map((f) => ({
149
+ label: this.translate.instant(f.id),
150
+ value: f.sot
151
+ }))
152
+ ]);
153
+ }
154
+ #setupDateOptions(custom) {
155
+ this.dateOptions.set([
156
+ ...[
157
+ {
158
+ label: this.translate.instant('yuv.app.drive.search.filter.option.date.any'),
159
+ value: this.ANY_OPTION
160
+ },
161
+ {
162
+ label: this.translate.instant('yuv.app.drive.search.filter.option.date.today'),
163
+ value: 'today'
164
+ },
165
+ {
166
+ label: this.translate.instant('yuv.app.drive.search.filter.option.date.yesterday'),
167
+ value: 'yesterday'
168
+ },
169
+ {
170
+ label: this.translate.instant('yuv.app.drive.search.filter.option.date.thisweek'),
171
+ value: 'thisweek'
172
+ },
173
+ // {
174
+ // label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastweek'),
175
+ // value: 'lastweek'
176
+ // },
177
+ {
178
+ label: this.translate.instant('yuv.app.drive.search.filter.option.date.thismonth'),
179
+ value: 'thismonth'
180
+ },
181
+ // {
182
+ // label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastmonth'),
183
+ // value: 'lastmonth'
184
+ // },
185
+ {
186
+ label: this.translate.instant('yuv.app.drive.search.filter.option.date.thisyear'),
187
+ value: 'thisyear'
188
+ },
189
+ // {
190
+ // label: this.translate.instant('yuv.app.drive.search.filter.option.date.lastyear'),
191
+ // value: 'lastyear'
192
+ // },
193
+ {
194
+ label: custom || this.translate.instant('yuv.app.drive.search.filter.option.date.custom'),
195
+ value: this.#CREATED_CUSTOM
196
+ }
197
+ ]
198
+ ]);
199
+ }
200
+ #setupSizeOptions() {
201
+ this.sizeOptions.set([
202
+ {
203
+ label: this.translate.instant('yuv.app.drive.search.filter.option.size.any'),
204
+ value: this.ANY_OPTION
205
+ },
206
+ {
207
+ label: this.translate.instant('yuv.app.drive.search.filter.option.size.small'),
208
+ value: 's'
209
+ },
210
+ {
211
+ label: this.translate.instant('yuv.app.drive.search.filter.option.size.medium'),
212
+ value: 'm'
213
+ },
214
+ {
215
+ label: this.translate.instant('yuv.app.drive.search.filter.option.size.large'),
216
+ value: 'l'
217
+ },
218
+ {
219
+ label: this.translate.instant('yuv.app.drive.search.filter.option.size.verylarge'),
220
+ value: 'xl'
221
+ }
222
+ ]);
223
+ }
224
+ #toDateFilter(value) {
225
+ let dateFilter = undefined;
226
+ switch (value) {
227
+ case 'today': {
228
+ dateFilter = {
229
+ f: BaseObjectTypeField.CREATION_DATE,
230
+ o: Operator.INTERVAL_INCLUDE_BOTH,
231
+ v1: new Date().toISOString().split('T')[0] + 'T00:00:00.000',
232
+ v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
233
+ };
234
+ break;
235
+ }
236
+ case 'yesterday': {
237
+ const yesterday = new Date();
238
+ yesterday.setDate(yesterday.getDate() - 1);
239
+ dateFilter = {
240
+ f: BaseObjectTypeField.CREATION_DATE,
241
+ o: Operator.INTERVAL_INCLUDE_BOTH,
242
+ v1: yesterday.toISOString().split('T')[0] + 'T00:00:00.000',
243
+ v2: yesterday.toISOString().split('T')[0] + 'T23:59:59.000'
244
+ };
245
+ break;
246
+ }
247
+ case 'thisweek': {
248
+ const firstDay = new Date();
249
+ firstDay.setDate(firstDay.getDate() - firstDay.getDay());
250
+ dateFilter = {
251
+ f: BaseObjectTypeField.CREATION_DATE,
252
+ o: Operator.INTERVAL_INCLUDE_BOTH,
253
+ v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
254
+ v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
255
+ };
256
+ break;
257
+ }
258
+ // case 'lastweek': {
259
+ // const firstDay = new Date();
260
+ // firstDay.setDate(firstDay.getDate() - firstDay.getDay() - 7);
261
+ // const lastDay = new Date();
262
+ // lastDay.setDate(lastDay.getDate() - lastDay.getDay() - 1);
263
+ // dateFilter = {
264
+ // f: BaseObjectTypeField.CREATION_DATE,
265
+ // o: Operator.INTERVAL_INCLUDE_BOTH,
266
+ // v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
267
+ // v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
268
+ // };
269
+ // break;
270
+ // }
271
+ case 'thismonth': {
272
+ const firstDay = new Date();
273
+ firstDay.setDate(1);
274
+ dateFilter = {
275
+ f: BaseObjectTypeField.CREATION_DATE,
276
+ o: Operator.INTERVAL_INCLUDE_BOTH,
277
+ v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
278
+ v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
279
+ };
280
+ break;
281
+ }
282
+ // case 'lastmonth': {
283
+ // const firstDay = new Date();
284
+ // firstDay.setDate(1);
285
+ // firstDay.setMonth(firstDay.getMonth() - 1);
286
+ // const lastDay = new Date();
287
+ // lastDay.setDate(0);
288
+ // dateFilter = {
289
+ // f: BaseObjectTypeField.CREATION_DATE,
290
+ // o: Operator.INTERVAL_INCLUDE_BOTH,
291
+ // v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
292
+ // v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
293
+ // };
294
+ // break;
295
+ // }
296
+ case 'thisyear': {
297
+ const firstDay = new Date();
298
+ firstDay.setMonth(0);
299
+ firstDay.setDate(1);
300
+ dateFilter = {
301
+ f: BaseObjectTypeField.CREATION_DATE,
302
+ o: Operator.INTERVAL_INCLUDE_BOTH,
303
+ v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
304
+ v2: new Date().toISOString().split('T')[0] + 'T23:59:59.000'
305
+ };
306
+ break;
307
+ }
308
+ // case 'lastyear': {
309
+ // const firstDay = new Date();
310
+ // firstDay.setFullYear(firstDay.getFullYear() - 1);
311
+ // firstDay.setMonth(0);
312
+ // firstDay.setDate(1);
313
+ // const lastDay = new Date();
314
+ // lastDay.setFullYear(lastDay.getFullYear() - 1);
315
+ // lastDay.setMonth(11);
316
+ // lastDay.setDate(31);
317
+ // dateFilter = {
318
+ // f: BaseObjectTypeField.CREATION_DATE,
319
+ // o: Operator.INTERVAL_INCLUDE_BOTH,
320
+ // v1: firstDay.toISOString().split('T')[0] + 'T00:00:00.000',
321
+ // v2: lastDay.toISOString().split('T')[0] + 'T23:59:59.000'
322
+ // };
323
+ // break;
324
+ // }
325
+ case this.#CREATED_CUSTOM: {
326
+ if (this.#customDateRange)
327
+ dateFilter = this.#customRangeToFilter(this.#customDateRange);
328
+ else
329
+ this.filterForm.get('created')?.patchValue(this.ANY_OPTION);
330
+ break;
331
+ }
332
+ }
333
+ return dateFilter;
334
+ }
335
+ #customRangeToFilter(rv) {
336
+ const v1 = rv.firstValue.toISOString();
337
+ const v2 = rv.secondValue ? rv.secondValue.toISOString() : undefined;
338
+ let filter;
339
+ switch (rv.operator) {
340
+ case Operator.EQUAL: {
341
+ filter = {
342
+ f: BaseObjectTypeField.CREATION_DATE,
343
+ o: Operator.INTERVAL_INCLUDE_BOTH,
344
+ v1: v1.split('T')[0] + 'T00:00:00.000',
345
+ v2: v1.split('T')[0] + 'T23:59:59.000'
346
+ };
347
+ break;
348
+ }
349
+ case Operator.GREATER_OR_EQUAL: {
350
+ filter = {
351
+ f: BaseObjectTypeField.CREATION_DATE,
352
+ o: rv.operator,
353
+ v1: v1.split('T')[0] + 'T00:00:00.000'
354
+ };
355
+ break;
356
+ }
357
+ case Operator.LESS_OR_EQUAL: {
358
+ filter = {
359
+ f: BaseObjectTypeField.CREATION_DATE,
360
+ o: rv.operator,
361
+ v1: v1.split('T')[0] + 'T23:59:59.000'
362
+ };
363
+ break;
364
+ }
365
+ case Operator.INTERVAL_INCLUDE_BOTH: {
366
+ filter = {
367
+ f: BaseObjectTypeField.CREATION_DATE,
368
+ o: rv.operator,
369
+ v1: v1.split('T')[0] + 'T00:00:00.000',
370
+ v2: v2.split('T')[0] + 'T23:59:59.000'
371
+ };
372
+ break;
373
+ }
374
+ }
375
+ return filter;
376
+ }
377
+ #toSizeFilter(value) {
378
+ let sizeFilter = undefined;
379
+ switch (value) {
380
+ case 's':
381
+ sizeFilter = {
382
+ f: ContentStreamField.LENGTH,
383
+ o: Operator.LESS_THAN,
384
+ v1: 1024 * 1024
385
+ };
386
+ break;
387
+ case 'm':
388
+ sizeFilter = {
389
+ f: ContentStreamField.LENGTH,
390
+ o: Operator.INTERVAL_INCLUDE_BOTH,
391
+ v1: 1024 * 1024,
392
+ v2: 1024 * 1024 * 10
393
+ };
394
+ break;
395
+ case 'l':
396
+ sizeFilter = {
397
+ f: ContentStreamField.LENGTH,
398
+ o: Operator.INTERVAL_INCLUDE_BOTH,
399
+ v1: 1024 * 1024 * 10,
400
+ v2: 1024 * 1024 * 100
401
+ };
402
+ break;
403
+ case 'xl':
404
+ sizeFilter = {
405
+ f: ContentStreamField.LENGTH,
406
+ o: Operator.GREATER_THAN,
407
+ v1: 1024 * 1024 * 100
408
+ };
409
+ break;
410
+ }
411
+ return sizeFilter;
412
+ }
413
+ #toTypeFilter(value) {
414
+ return value === this.ANY_OPTION
415
+ ? undefined
416
+ : {
417
+ f: BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS,
418
+ o: Operator.IN,
419
+ v1: [value]
420
+ };
421
+ }
422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
423
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SearchFilterComponent, isStandalone: true, selector: "ymd-search-filter", inputs: { query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"size\" [options]=\"sizeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"created\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2)}:host form yvc-dropdown{--icon-size: 18px;font-size:var(--font-caption);color:var(--text-color-caption);border:0;outline-offset:-2px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: YvcDragScrollModule }, { kind: "directive", type: i4.DragScrollDirective, selector: "[yvcDragScroll]" }] }); }
424
+ }
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFilterComponent, decorators: [{
426
+ type: Component,
427
+ args: [{ selector: 'ymd-search-filter', standalone: true, imports: [CommonModule, YvcDropdownModule, TranslateModule, ReactiveFormsModule, YvcDragScrollModule], template: "<form [formGroup]=\"filterForm\" yvcDragScroll>\n <yvc-dropdown formControlName=\"type\" [options]=\"typeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"size\" [options]=\"sizeOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n <yvc-dropdown formControlName=\"created\" [options]=\"dateOptions()\" [disableClearButton]=\"true\"></yvc-dropdown>\n\n @if (filtersActive()) {\n <button class=\"secondary\" (click)=\"reset()\">{{ 'yuv.app.drive.search.filter.button.reset' | translate }}</button>\n }\n</form>\n", styles: [":host form{display:flex;gap:2px;overflow-x:auto;--scrollbar-outer-size: 0;margin-block:calc(var(--app-pane-padding) / 2)}:host form yvc-dropdown{--icon-size: 18px;font-size:var(--font-caption);color:var(--text-color-caption);border:0;outline-offset:-2px;cursor:pointer;flex:0 0 auto;padding:0}:host form button{padding:.15em .5em;line-height:1em;margin-inline-start:1em;border-radius:.25em;font-size:var(--font-caption)}\n"] }]
428
+ }], ctorParameters: () => [] });
429
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcHMvZHJpdmUvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXlDLE1BQU0scUJBQXFCLENBQUM7QUFDOUosT0FBTyxFQUFnQixZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEYsT0FBTyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7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QUFDO0lBQ1IsQ0FBQzsrR0F2YVUscUJBQXFCO21HQUFyQixxQkFBcUIsMFBDbkJsQyx3akJBU0EsK2RETVksWUFBWSw4QkFBRSxpQkFBaUIsb05BQUUsZUFBZSwyRkFBRSxtQkFBbUIsNHJCQUFFLG1CQUFtQjs7NEZBSXpGLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmFzZU9iamVjdFR5cGVGaWVsZCwgQ29udGVudFN0cmVhbUZpZWxkLCBMb2NhbGVEYXRlUGlwZSwgT3BlcmF0b3IsIE9wZXJhdG9yTGFiZWwsIFJhbmdlVmFsdWUsIFNlYXJjaEZpbHRlciwgU2VhcmNoUXVlcnkgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IE9iamVjdEZsYXZvciwgU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNEcmFnU2Nyb2xsTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2RyYWctc2Nyb2xsJztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uLCBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBPdmVybGF5Q2xvc2VFdmVudCwgWXZjT3ZlcmxheVNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NvbXBvbmVudHMvb3ZlcmxheSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ltZC1zZWFyY2gtZmlsdGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjRHJvcGRvd25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgWXZjRHJhZ1Njcm9sbE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpbHRlckNvbXBvbmVudCB7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICAjZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAjb3ZlcmxheSA9IGluamVjdChZdmNPdmVybGF5U2VydmljZSk7XG5cbiAgI0NSRUFURURfQ1VTVE9NID0gJ2N1c3RvbSc7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQU5ZX09QVElPTiA9ICdhbnknO1xuICAjZmxhdm9ycyA9IHRoaXMuI3NoZWxsLmdldE9iamVjdEZsYXZvcnMoKTtcblxuICB0eXBlT3B0aW9ucyA9IHNpZ25hbDxEcm9wZG93bk9wdGlvbltdPihbXSk7XG4gIGRhdGVPcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcbiAgc2l6ZU9wdGlvbnMgPSBzaWduYWw8RHJvcGRvd25PcHRpb25bXT4oW10pO1xuXG4gIHF1ZXJ5ID0gaW5wdXQ8U2VhcmNoUXVlcnkgfCBudWxsPihudWxsKTtcbiAgcXVlcnlDaGFuZ2UgPSBvdXRwdXQ8U2VhcmNoUXVlcnk+KCk7XG4gIGZpbHRlcnNBY3RpdmUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZpbHRlckZvcm0gPSB0aGlzLiNmYi5ub25OdWxsYWJsZS5ncm91cCh7XG4gICAgdHlwZTogW3RoaXMuQU5ZX09QVElPTl0sXG4gICAgc2l6ZTogW3RoaXMuQU5ZX09QVElPTl0sXG4gICAgY3JlYXRlZDogW3RoaXMuQU5ZX09QVElPTl1cbiAgfSk7XG5cbiAgI2N1c3RvbURhdGVSYW5nZT86IFJhbmdlVmFsdWU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoXykgPT4gdGhpcy4jc2V0dXBPcHRpb25zKCkpO1xuICAgIHRoaXMuI3NldHVwT3B0aW9ucygpO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKHYpID0+IHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHYpKTtcblxuICAgIC8vIGxpc3RlbiB0byBjcmVhdGVkIGZpbHRlciBjaGFuZ2VzIHRvIGNhdGNoIGN1c3RvbSBkYXRlIHJhbmdlXG4gICAgdGhpcy5maWx0ZXJGb3JtXG4gICAgICAuZ2V0KCdjcmVhdGVkJylcbiAgICAgID8udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLiNDUkVBVEVEX0NVU1RPTSkge1xuICAgICAgICAgIC8vIG9wZW4gZGF0ZSByYW5nZSBwaWNrZXJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLiNjdXN0b21EYXRlUmFuZ2UpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLiNvdmVybGF5Lm9wZW4oRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCB7XG4gICAgICAgICAgICByYW5nZTogdGhpcy4jY3VzdG9tRGF0ZVJhbmdlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgby5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKChyZXM6IE92ZXJsYXlDbG9zZUV2ZW50PFJhbmdlVmFsdWU+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjdXN0b21EYXRlUmFuZ2UgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnY3JlYXRlZCcpPy5wYXRjaFZhbHVlKHRoaXMuQU5ZX09QVElPTik7XG4gICAgICAgICAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI29uRm9ybVZhbHVlQ2hhbmdlKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnModGhpcy4jY3VzdG9tRGF0ZVJhbmdlVG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkOiB0aGlzLiNDUkVBVEVEX0NVU1RPTVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNjdXN0b21EYXRlUmFuZ2VUb1N0cmluZygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy4jY3VzdG9tRGF0ZVJhbmdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRwID0gbmV3IExvY2FsZURhdGVQaXBlKHRoaXMudHJhbnNsYXRlKTtcbiAgICBzd2l0Y2ggKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICByZXR1cm4gZHAudHJhbnNmb3JtKHRoaXMuI2N1c3RvbURhdGVSYW5nZS5maXJzdFZhbHVlIGFzIERhdGUsICdzaG9ydERhdGUnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5HUkVBVEVSX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuTEVTU19PUl9FUVVBTDoge1xuICAgICAgICByZXR1cm4gYCR7T3BlcmF0b3JMYWJlbC5MRVNTX09SX0VRVUFMfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2UuZmlyc3RWYWx1ZSBhcyBEYXRlLCAnc2hvcnREYXRlJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RIOiB7XG4gICAgICAgIHJldHVybiBgJHtkcC50cmFuc2Zvcm0odGhpcy4jY3VzdG9tRGF0ZVJhbmdlLmZpcnN0VmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfSAke09wZXJhdG9yTGFiZWwuSU5URVJWQUxfSU5DTFVERV9CT1RIfSAke2RwLnRyYW5zZm9ybSh0aGlzLiNjdXN0b21EYXRlUmFuZ2Uuc2Vjb25kVmFsdWUgYXMgRGF0ZSwgJ3Nob3J0RGF0ZScpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICBjb25zdCBxID0gdGhpcy5xdWVyeSgpO1xuICAgIGlmIChxKSB7XG4gICAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQocSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICAjb25Gb3JtVmFsdWVDaGFuZ2UodjogYW55KSB7XG4gICAgLy8gZG8gbm90IGNyZWF0ZSBhIG5ldyBxdWVyeSBpZiBjdXN0b20gZGF0ZSByYW5nZSBpcyBzZWxlY3RlZCBidXQgbm90IHNldFxuICAgIGlmICh2LmNyZWF0ZWQgPT09IHRoaXMuI0NSRUFURURfQ1VTVE9NICYmICF0aGlzLiNjdXN0b21EYXRlUmFuZ2UpIHJldHVybjtcblxuICAgIGlmKHYuY3JlYXRlZCAhPT0gdGhpcy4jQ1JFQVRFRF9DVVNUT00pIHtcbiAgICAgIHRoaXMuI2N1c3RvbURhdGVSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuI3NldHVwRGF0ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkUXVlcnk6IFNlYXJjaFF1ZXJ5ID0gdGhpcy4jYXBwbHlGaWx0ZXJzKHYpO1xuICAgIHRoaXMucXVlcnlDaGFuZ2UuZW1pdCh1cGRhdGVkUXVlcnkpO1xuICAgIHRoaXMuZmlsdGVyc0FjdGl2ZS5zZXQoISF1cGRhdGVkUXVlcnkuZmlsdGVycyAmJiB1cGRhdGVkUXVlcnkuZmlsdGVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gICNhcHBseUZpbHRlcnModjogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGNvbnN0IHVwZGF0ZWRRdWVyeTogU2VhcmNoUXVlcnkgPSB7XG4gICAgICAuLi4odGhpcy5xdWVyeSgpIHx8IHt9KSxcbiAgICAgIGZpbHRlcnM6IFtdXG4gICAgfTtcbiAgICB1cGRhdGVkUXVlcnkuZmlsdGVycyA9IFtdO1xuXG4gICAgLy8gZmlsZSBzaXplIGZpbHRlclxuICAgIGNvbnN0IHR5cGVGaWx0ZXIgPSB0aGlzLiN0b1R5cGVGaWx0ZXIodi50eXBlKTtcbiAgICBpZiAodHlwZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaCh0eXBlRmlsdGVyKTtcblxuICAgIC8vIGZpbGUgc2l6ZSBmaWx0ZXJcbiAgICBjb25zdCBzaXplRmlsdGVyID0gdGhpcy4jdG9TaXplRmlsdGVyKHYuc2l6ZSk7XG4gICAgaWYgKHNpemVGaWx0ZXIpIHVwZGF0ZWRRdWVyeS5maWx0ZXJzLnB1c2goc2l6ZUZpbHRlcik7XG5cbiAgICAvLyBjcmVhdGlvbiBkYXRlIGZpbHRlclxuICAgIGNvbnN0IGRhdGVGaWx0ZXIgPSB0aGlzLiN0b0RhdGVGaWx0ZXIodi5jcmVhdGVkKTtcbiAgICBpZiAoZGF0ZUZpbHRlcikgdXBkYXRlZFF1ZXJ5LmZpbHRlcnMucHVzaChkYXRlRmlsdGVyKTtcblxuICAgIHJldHVybiB1cGRhdGVkUXVlcnk7XG4gIH1cblxuICAjc2V0dXBPcHRpb25zKCkge1xuICAgIHRoaXMuI3NldHVwVHlwZU9wdGlvbnMoKTtcbiAgICB0aGlzLiNzZXR1cERhdGVPcHRpb25zKCk7XG4gICAgdGhpcy4jc2V0dXBTaXplT3B0aW9ucygpO1xuICB9XG5cbiAgI3NldHVwVHlwZU9wdGlvbnMoKSB7XG4gICAgdGhpcy50eXBlT3B0aW9ucy5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5hbnknKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuI2ZsYXZvcnMubWFwKChmOiBPYmplY3RGbGF2b3IpID0+ICh7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGYuaWQpLFxuICAgICAgICB2YWx1ZTogZi5zb3RcbiAgICAgIH0pKVxuICAgIF0pO1xuICB9XG5cbiAgI3NldHVwRGF0ZU9wdGlvbnMoY3VzdG9tPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kYXRlT3B0aW9ucy5zZXQoW1xuICAgICAgLi4uW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uZGF0ZS5hbnknKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5BTllfT1BUSU9OXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRvZGF5JyksXG4gICAgICAgICAgdmFsdWU6ICd0b2RheSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUueWVzdGVyZGF5JyksXG4gICAgICAgICAgdmFsdWU6ICd5ZXN0ZXJkYXknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRoaXN3ZWVrJyksXG4gICAgICAgICAgdmFsdWU6ICd0aGlzd2VlaydcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdHdlZWsnKSxcbiAgICAgICAgLy8gICB2YWx1ZTogJ2xhc3R3ZWVrJ1xuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uZGF0ZS50aGlzbW9udGgnKSxcbiAgICAgICAgICB2YWx1ZTogJ3RoaXNtb250aCdcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdG1vbnRoJyksXG4gICAgICAgIC8vICAgdmFsdWU6ICdsYXN0bW9udGgnXG4gICAgICAgIC8vIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5kYXRlLnRoaXN5ZWFyJyksXG4gICAgICAgICAgdmFsdWU6ICd0aGlzeWVhcidcbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUubGFzdHllYXInKSxcbiAgICAgICAgLy8gICB2YWx1ZTogJ2xhc3R5ZWFyJ1xuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IGN1c3RvbSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLmRhdGUuY3VzdG9tJyksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuI0NSRUFURURfQ1VTVE9NXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICBdKTtcbiAgfVxuXG4gICNzZXR1cFNpemVPcHRpb25zKCkge1xuICAgIHRoaXMuc2l6ZU9wdGlvbnMuc2V0KFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uc2l6ZS5hbnknKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuQU5ZX09QVElPTlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5hcHAuZHJpdmUuc2VhcmNoLmZpbHRlci5vcHRpb24uc2l6ZS5zbWFsbCcpLFxuICAgICAgICB2YWx1ZTogJ3MnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5zaXplLm1lZGl1bScpLFxuICAgICAgICB2YWx1ZTogJ20nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LmFwcC5kcml2ZS5zZWFyY2guZmlsdGVyLm9wdGlvbi5zaXplLmxhcmdlJyksXG4gICAgICAgIHZhbHVlOiAnbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIub3B0aW9uLnNpemUudmVyeWxhcmdlJyksXG4gICAgICAgIHZhbHVlOiAneGwnXG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICAjdG9EYXRlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlRmlsdGVyOiBTZWFyY2hGaWx0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAndG9kYXknOiB7XG4gICAgICAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDAwOjAwOjAwLjAwMCcsXG4gICAgICAgICAgdjI6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QyMzo1OTo1OS4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVzdGVyZGF5Jzoge1xuICAgICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogeWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogeWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXN3ZWVrJzoge1xuICAgICAgICBjb25zdCBmaXJzdERheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGZpcnN0RGF5LnNldERhdGUoZmlyc3REYXkuZ2V0RGF0ZSgpIC0gZmlyc3REYXkuZ2V0RGF5KCkpO1xuICAgICAgICBkYXRlRmlsdGVyID0ge1xuICAgICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBjYXNlICdsYXN0d2Vlayc6IHtcbiAgICAgIC8vICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgLy8gICBmaXJzdERheS5zZXREYXRlKGZpcnN0RGF5LmdldERhdGUoKSAtIGZpcnN0RGF5LmdldERheSgpIC0gNyk7XG4gICAgICAvLyAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgLy8gICBsYXN0RGF5LnNldERhdGUobGFzdERheS5nZXREYXRlKCkgLSBsYXN0RGF5LmdldERheSgpIC0gMSk7XG4gICAgICAvLyAgIGRhdGVGaWx0ZXIgPSB7XG4gICAgICAvLyAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgLy8gICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgIC8vICAgICB2MTogZmlyc3REYXkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnLFxuICAgICAgLy8gICAgIHYyOiBsYXN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgLy8gICB9O1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIH1cbiAgICAgIGNhc2UgJ3RoaXNtb250aCc6IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBmaXJzdERheS5zZXREYXRlKDEpO1xuICAgICAgICBkYXRlRmlsdGVyID0ge1xuICAgICAgICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBjYXNlICdsYXN0bW9udGgnOiB7XG4gICAgICAvLyAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0TW9udGgoZmlyc3REYXkuZ2V0TW9udGgoKSAtIDEpO1xuICAgICAgLy8gICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgbGFzdERheS5zZXREYXRlKDApO1xuICAgICAgLy8gICBkYXRlRmlsdGVyID0ge1xuICAgICAgLy8gICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgIC8vICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAvLyAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgIC8vICAgICB2MjogbGFzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgIC8vICAgfTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgICBjYXNlICd0aGlzeWVhcic6IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBmaXJzdERheS5zZXRNb250aCgwKTtcbiAgICAgICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgICAgZGF0ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUsXG4gICAgICAgICAgbzogT3BlcmF0b3IuSU5URVJWQUxfSU5DTFVERV9CT1RILFxuICAgICAgICAgIHYxOiBmaXJzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDAwOjAwOjAwLjAwMCcsXG4gICAgICAgICAgdjI6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdICsgJ1QyMzo1OTo1OS4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gY2FzZSAnbGFzdHllYXInOiB7XG4gICAgICAvLyAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RnVsbFllYXIoZmlyc3REYXkuZ2V0RnVsbFllYXIoKSAtIDEpO1xuICAgICAgLy8gICBmaXJzdERheS5zZXRNb250aCgwKTtcbiAgICAgIC8vICAgZmlyc3REYXkuc2V0RGF0ZSgxKTtcbiAgICAgIC8vICAgY29uc3QgbGFzdERheSA9IG5ldyBEYXRlKCk7XG4gICAgICAvLyAgIGxhc3REYXkuc2V0RnVsbFllYXIobGFzdERheS5nZXRGdWxsWWVhcigpIC0gMSk7XG4gICAgICAvLyAgIGxhc3REYXkuc2V0TW9udGgoMTEpO1xuICAgICAgLy8gICBsYXN0RGF5LnNldERhdGUoMzEpO1xuICAgICAgLy8gICBkYXRlRmlsdGVyID0ge1xuICAgICAgLy8gICAgIGY6IEJhc2VPYmplY3RUeXBlRmllbGQuQ1JFQVRJT05fREFURSxcbiAgICAgIC8vICAgICBvOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgsXG4gICAgICAvLyAgICAgdjE6IGZpcnN0RGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgIC8vICAgICB2MjogbGFzdERheS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgIC8vICAgfTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgICBjYXNlIHRoaXMuI0NSRUFURURfQ1VTVE9NOiB7XG4gICAgICAgIGlmICh0aGlzLiNjdXN0b21EYXRlUmFuZ2UpIGRhdGVGaWx0ZXIgPSB0aGlzLiNjdXN0b21SYW5nZVRvRmlsdGVyKHRoaXMuI2N1c3RvbURhdGVSYW5nZSk7XG4gICAgICAgIGVsc2UgdGhpcy5maWx0ZXJGb3JtLmdldCgnY3JlYXRlZCcpPy5wYXRjaFZhbHVlKHRoaXMuQU5ZX09QVElPTik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0ZUZpbHRlcjtcbiAgfVxuXG4gICNjdXN0b21SYW5nZVRvRmlsdGVyKHJ2OiBSYW5nZVZhbHVlKTogU2VhcmNoRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2MSA9IChydi5maXJzdFZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgdjIgPSBydi5zZWNvbmRWYWx1ZSA/IChydi5zZWNvbmRWYWx1ZSBhcyBEYXRlKS50b0lTT1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgIGxldCBmaWx0ZXI7XG4gICAgc3dpdGNoIChydi5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogdjEuc3BsaXQoJ1QnKVswXSArICdUMDA6MDA6MDAuMDAwJyxcbiAgICAgICAgICB2MjogdjEuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgT3BlcmF0b3IuR1JFQVRFUl9PUl9FUVVBTDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IHJ2Lm9wZXJhdG9yLFxuICAgICAgICAgIHYxOiB2MS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBPcGVyYXRvci5MRVNTX09SX0VRVUFMOiB7XG4gICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkNSRUFUSU9OX0RBVEUsXG4gICAgICAgICAgbzogcnYub3BlcmF0b3IsXG4gICAgICAgICAgdjE6IHYxLnNwbGl0KCdUJylbMF0gKyAnVDIzOjU5OjU5LjAwMCdcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USDoge1xuICAgICAgICBmaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQmFzZU9iamVjdFR5cGVGaWVsZC5DUkVBVElPTl9EQVRFLFxuICAgICAgICAgIG86IHJ2Lm9wZXJhdG9yLFxuICAgICAgICAgIHYxOiB2MS5zcGxpdCgnVCcpWzBdICsgJ1QwMDowMDowMC4wMDAnLFxuICAgICAgICAgIHYyOiB2MiEuc3BsaXQoJ1QnKVswXSArICdUMjM6NTk6NTkuMDAwJ1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gICN0b1NpemVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHNpemVGaWx0ZXI6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdzJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLkxFU1NfVEhBTixcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjRcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgdjI6IDEwMjQgKiAxMDI0ICogMTBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsJzpcbiAgICAgICAgc2l6ZUZpbHRlciA9IHtcbiAgICAgICAgICBmOiBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RILFxuICAgICAgICAgIG86IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCxcbiAgICAgICAgICB2MTogMTAyNCAqIDEwMjQgKiAxMCxcbiAgICAgICAgICB2MjogMTAyNCAqIDEwMjQgKiAxMDBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd4bCc6XG4gICAgICAgIHNpemVGaWx0ZXIgPSB7XG4gICAgICAgICAgZjogQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSCxcbiAgICAgICAgICBvOiBPcGVyYXRvci5HUkVBVEVSX1RIQU4sXG4gICAgICAgICAgdjE6IDEwMjQgKiAxMDI0ICogMTAwXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZUZpbHRlcjtcbiAgfVxuXG4gICN0b1R5cGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB0aGlzLkFOWV9PUFRJT05cbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHtcbiAgICAgICAgICBmOiBCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFMsXG4gICAgICAgICAgbzogT3BlcmF0b3IuSU4sXG4gICAgICAgICAgdjE6IFt2YWx1ZV1cbiAgICAgICAgfTtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgeXZjRHJhZ1Njcm9sbD5cbiAgPHl2Yy1kcm9wZG93biBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCIgW29wdGlvbnNdPVwidHlwZU9wdGlvbnMoKVwiIFtkaXNhYmxlQ2xlYXJCdXR0b25dPVwidHJ1ZVwiPjwveXZjLWRyb3Bkb3duPlxuICA8eXZjLWRyb3Bkb3duIGZvcm1Db250cm9sTmFtZT1cInNpemVcIiBbb3B0aW9uc109XCJzaXplT3B0aW9ucygpXCIgW2Rpc2FibGVDbGVhckJ1dHRvbl09XCJ0cnVlXCI+PC95dmMtZHJvcGRvd24+XG4gIDx5dmMtZHJvcGRvd24gZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRlZFwiIFtvcHRpb25zXT1cImRhdGVPcHRpb25zKClcIiBbZGlzYWJsZUNsZWFyQnV0dG9uXT1cInRydWVcIj48L3l2Yy1kcm9wZG93bj5cblxuICBAaWYgKGZpbHRlcnNBY3RpdmUoKSkge1xuICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwicmVzZXQoKVwiPnt7ICd5dXYuYXBwLmRyaXZlLnNlYXJjaC5maWx0ZXIuYnV0dG9uLnJlc2V0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICB9XG48L2Zvcm0+XG4iXX0=