@snabcentr/client-ui 3.51.14 → 3.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configurators/index.d.ts +1 -0
- package/configurators/models/index.d.ts +1 -0
- package/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.d.ts +18 -0
- package/configurators/sandwich/sc-sandwich.component.d.ts +24 -0
- package/configurators/sandwich_m2/index.d.ts +4 -0
- package/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.d.ts +8 -0
- package/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.d.ts +23 -0
- package/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.d.ts +13 -0
- package/configurators/sandwich_m2/sc-sandwich-m2.component.d.ts +267 -0
- package/esm2022/catalog/catalog-filters/sc-catalog-filters.component.mjs +3 -3
- package/esm2022/configurators/index.mjs +2 -1
- package/esm2022/configurators/models/index.mjs +2 -1
- package/esm2022/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.mjs +2 -0
- package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +57 -6
- package/esm2022/configurators/sandwich_m2/index.mjs +5 -0
- package/esm2022/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.mjs +14 -0
- package/esm2022/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.mjs +2 -0
- package/esm2022/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.mjs +5 -0
- package/esm2022/configurators/sandwich_m2/sc-sandwich-m2.component.mjs +560 -0
- package/fesm2022/snabcentr-client-ui.mjs +614 -7
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/release_notes.tmp +6 -2
- package/styles/tailwind/tailwind.scss +72 -0
package/configurators/index.d.ts
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ScIConfiguratorSettingsBase } from '@snabcentr/client-core';
|
|
2
|
+
/**
|
|
3
|
+
* Модель данных настроек для конфигуратора распила сэндвич-панелей по площади.
|
|
4
|
+
*/
|
|
5
|
+
export interface ScISandwichM2Settings extends ScIConfiguratorSettingsBase {
|
|
6
|
+
/**
|
|
7
|
+
* Минимальная ширина изделия в миллиметрах.
|
|
8
|
+
*/
|
|
9
|
+
minWidth: number;
|
|
10
|
+
/**
|
|
11
|
+
* Минимальная длина изделия в миллиметрах.
|
|
12
|
+
*/
|
|
13
|
+
minLength: number;
|
|
14
|
+
/**
|
|
15
|
+
* Признак, что в конфигураторе разрешено просматривать товары в виде таблицы.
|
|
16
|
+
*/
|
|
17
|
+
allowShowTable: boolean;
|
|
18
|
+
}
|
|
@@ -79,10 +79,18 @@ export declare class ScSandwichComponent implements OnInit {
|
|
|
79
79
|
* Выбранный продукт (материал для раскроя).
|
|
80
80
|
*/
|
|
81
81
|
protected readonly product: FormControl<ScProduct | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Сигнал текущего выбранного продукта — используется в шаблоне для диапазонов и кнопок.
|
|
84
|
+
*/
|
|
85
|
+
protected readonly productSignal: import("@angular/core").Signal<ScProduct | null>;
|
|
82
86
|
/**
|
|
83
87
|
* Субъект для ручного запуска расчёта.
|
|
84
88
|
*/
|
|
85
89
|
private readonly calculateTrigger$;
|
|
90
|
+
/**
|
|
91
|
+
* Источник начального результата расчёта для режима редактирования.
|
|
92
|
+
*/
|
|
93
|
+
private readonly seedCalculateResult$;
|
|
86
94
|
/**
|
|
87
95
|
* {@link Observable} расчета оптимизации раскладки.
|
|
88
96
|
*/
|
|
@@ -103,6 +111,14 @@ export declare class ScSandwichComponent implements OnInit {
|
|
|
103
111
|
* Валидатор для длины изделия.
|
|
104
112
|
*/
|
|
105
113
|
protected readonly validatorLength$: Observable<ValidatorFn | null>;
|
|
114
|
+
/**
|
|
115
|
+
* Текст ограничения по ширине («от … до …»), пока выбран товар.
|
|
116
|
+
*/
|
|
117
|
+
protected readonly widthRangeText: import("@angular/core").Signal<string | null>;
|
|
118
|
+
/**
|
|
119
|
+
* Текст ограничения по длине («от … до …»), пока выбран товар.
|
|
120
|
+
*/
|
|
121
|
+
protected readonly lengthRangeText: import("@angular/core").Signal<string | null>;
|
|
106
122
|
/**
|
|
107
123
|
* Признак того, что выполняется запрос на отправку данных выполняется.
|
|
108
124
|
*/
|
|
@@ -149,6 +165,14 @@ export declare class ScSandwichComponent implements OnInit {
|
|
|
149
165
|
* @param calculateResult Результат расчета оптимизации раскладки.
|
|
150
166
|
*/
|
|
151
167
|
protected onSubmit(calculateResult: ScIConfiguratorCalculateResult | null | undefined): void;
|
|
168
|
+
/**
|
|
169
|
+
* Форматирование диапазона «от … до …» с учётом отсутствующих границ.
|
|
170
|
+
*
|
|
171
|
+
* @param min Нижняя граница.
|
|
172
|
+
* @param max Верхняя граница.
|
|
173
|
+
* @param unit Единица измерения.
|
|
174
|
+
*/
|
|
175
|
+
private formatRange;
|
|
152
176
|
/**
|
|
153
177
|
* Устанавливает начальные значения для полей формы.
|
|
154
178
|
*/
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Skeleton конфигуратора распила сэндвич-панелей по площади.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ScSandwichM2SkeletonComponent {
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScSandwichM2SkeletonComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScSandwichM2SkeletonComponent, "sc-sandwich-m2-skeleton", never, {}, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ScINewOrderItemBase } from '@snabcentr/client-core';
|
|
2
|
+
/**
|
|
3
|
+
* Модель данных одного товара для добавления в корзину при использовании конфигуратора распила сэндвич-панелей по площади.
|
|
4
|
+
* Каждое изделие добавляется отдельной записью.
|
|
5
|
+
*/
|
|
6
|
+
export interface ScINewCartItemSandwichM2 extends ScINewOrderItemBase {
|
|
7
|
+
/**
|
|
8
|
+
* Идентификатор записи категории.
|
|
9
|
+
*/
|
|
10
|
+
productCategoryId: number;
|
|
11
|
+
/**
|
|
12
|
+
* Название конфигуратора.
|
|
13
|
+
*/
|
|
14
|
+
configurator: string;
|
|
15
|
+
/**
|
|
16
|
+
* Ширина изделия, мм.
|
|
17
|
+
*/
|
|
18
|
+
width: number;
|
|
19
|
+
/**
|
|
20
|
+
* Длина изделия, мм.
|
|
21
|
+
*/
|
|
22
|
+
length: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Состояние отправки одной позиции конфигуратора sandwich_m2.
|
|
3
|
+
*
|
|
4
|
+
* - `idle` — ещё не отправлялась либо была сброшена после изменения значений;
|
|
5
|
+
* - `loading` — запрос в процессе;
|
|
6
|
+
* - `success` — успешно добавлена / обновлена;
|
|
7
|
+
* - `error` — последний запрос вернул ошибку.
|
|
8
|
+
*/
|
|
9
|
+
export type ScSandwichM2ItemSubmitState = 'idle' | 'loading' | 'success' | 'error';
|
|
10
|
+
/**
|
|
11
|
+
* Начальное состояние позиции — используется при инициализации и сбросе формы.
|
|
12
|
+
*/
|
|
13
|
+
export declare const IDLE_ITEM_STATE: ScSandwichM2ItemSubmitState;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { FormArray, FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { ScCart, ScIOrderEditorLoader, ScOrderDraft, ScOrderItem, ScProduct } from '@snabcentr/client-core';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
|
+
import { ScISandwichM2Settings } from '../models/sandwich_m2/sc-i-sandwich-m2-settings';
|
|
6
|
+
import { ScSandwichM2ItemSubmitState } from './sc-sandwich-m2-item-submit-state';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* Конфигуратор распила сэндвич-панелей по площади.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ScSandwichM2Component implements OnInit {
|
|
12
|
+
/**
|
|
13
|
+
* Настройки для конфигуратора распила сэндвич-панелей по площади.
|
|
14
|
+
*/
|
|
15
|
+
readonly settings: import("@angular/core").InputSignal<ScISandwichM2Settings | undefined>;
|
|
16
|
+
/**
|
|
17
|
+
* Идентификатор категории.
|
|
18
|
+
*/
|
|
19
|
+
readonly categoryId: import("@angular/core").InputSignal<string | number>;
|
|
20
|
+
/**
|
|
21
|
+
* Название конфигуратора.
|
|
22
|
+
*/
|
|
23
|
+
readonly editor: import("@angular/core").InputSignal<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Позиция товара/услуги в корзине.
|
|
26
|
+
*/
|
|
27
|
+
readonly orderItem: import("@angular/core").InputSignal<ScOrderItem | undefined>;
|
|
28
|
+
/**
|
|
29
|
+
* Идентификатор заказа.
|
|
30
|
+
*/
|
|
31
|
+
orderId?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Событие переключения отображения товаров.
|
|
34
|
+
*/
|
|
35
|
+
readonly toggleShowEvent: import("@angular/core").OutputEmitterRef<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Форма добавления/редактирования продукта в корзине.
|
|
38
|
+
*/
|
|
39
|
+
protected readonly form: FormGroup<{
|
|
40
|
+
productCategoryId: FormControl<number | null>;
|
|
41
|
+
configurator: FormControl<string | null>;
|
|
42
|
+
items: FormArray<FormGroup<{
|
|
43
|
+
width: FormControl<number>;
|
|
44
|
+
length: FormControl<number>;
|
|
45
|
+
count: FormControl<number>;
|
|
46
|
+
marker: FormControl<string | null>;
|
|
47
|
+
}>>;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Сервис получения и редактирования списка товаров заказа (корзина / заказ / черновик = заказ).
|
|
51
|
+
*/
|
|
52
|
+
protected readonly orderService: ScIOrderEditorLoader<ScOrderItem, ScCart | ScOrderDraft>;
|
|
53
|
+
/**
|
|
54
|
+
* Сервис конвертации данных.
|
|
55
|
+
*/
|
|
56
|
+
private readonly convertersService;
|
|
57
|
+
/**
|
|
58
|
+
* Контекст диалогового окна, в котором открыт компонент.
|
|
59
|
+
*/
|
|
60
|
+
private readonly context;
|
|
61
|
+
/**
|
|
62
|
+
* Сервис для работы с каталогом.
|
|
63
|
+
*/
|
|
64
|
+
private readonly catalogService;
|
|
65
|
+
/**
|
|
66
|
+
* {@link Observable} списка товаров категории.
|
|
67
|
+
*/
|
|
68
|
+
protected readonly products$: Observable<ScProduct[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Выбранный продукт.
|
|
71
|
+
*/
|
|
72
|
+
protected readonly product: FormControl<ScProduct | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Сигнал текущего выбранного продукта — обновляется при `valueChanges` контрола `product`.
|
|
75
|
+
*/
|
|
76
|
+
protected readonly productSignal: import("@angular/core").Signal<ScProduct | null>;
|
|
77
|
+
/**
|
|
78
|
+
* Сигнал содержимого FormArray позиций — пересчитывается при любом изменении значений.
|
|
79
|
+
*/
|
|
80
|
+
protected readonly itemsValue: import("@angular/core").Signal<{
|
|
81
|
+
width: number;
|
|
82
|
+
length: number;
|
|
83
|
+
count: number;
|
|
84
|
+
marker: string | null;
|
|
85
|
+
}[]>;
|
|
86
|
+
/**
|
|
87
|
+
* Признак того, что выполняется запрос на отправку данных.
|
|
88
|
+
*/
|
|
89
|
+
protected readonly isSubmitLoading: import("@angular/core").Signal<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* Состояние отправки каждой позиции — параллельный массив к контролу `items` формы.
|
|
92
|
+
*/
|
|
93
|
+
protected readonly itemStates: import("@angular/core").WritableSignal<ScSandwichM2ItemSubmitState[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Признак режима редактирования существующей позиции — `orderItem` задан.
|
|
96
|
+
*/
|
|
97
|
+
protected readonly isEditingExistingItem: import("@angular/core").Signal<boolean>;
|
|
98
|
+
/**
|
|
99
|
+
* Признак того, что отправлять больше нечего — все позиции либо успешно
|
|
100
|
+
* отправлены, либо находятся в процессе отправки.
|
|
101
|
+
*/
|
|
102
|
+
protected readonly hasNoPendingItems: import("@angular/core").Signal<boolean>;
|
|
103
|
+
/**
|
|
104
|
+
* Суммарная площадь всех позиций (м²), рассчитанная локально.
|
|
105
|
+
*/
|
|
106
|
+
protected readonly totalAreaM2: import("@angular/core").Signal<number>;
|
|
107
|
+
/**
|
|
108
|
+
* Итоговая стоимость по всем позициям (локальный расчёт).
|
|
109
|
+
*/
|
|
110
|
+
protected readonly totalCost: import("@angular/core").Signal<number>;
|
|
111
|
+
/**
|
|
112
|
+
* Текст ограничения по ширине («от … до …»), пока есть выбранный товар.
|
|
113
|
+
*/
|
|
114
|
+
protected readonly widthRangeText: import("@angular/core").Signal<string | null>;
|
|
115
|
+
/**
|
|
116
|
+
* Текст ограничения по длине («от … до …»), пока есть выбранный товар.
|
|
117
|
+
*/
|
|
118
|
+
protected readonly lengthRangeText: import("@angular/core").Signal<string | null>;
|
|
119
|
+
/**
|
|
120
|
+
* Ссылка для автоматического управления уничтожением зависимостей.
|
|
121
|
+
*/
|
|
122
|
+
private readonly destroyRef;
|
|
123
|
+
/**
|
|
124
|
+
* Валидаторы ширины/длины: пока товар не выбран — не накладываем min/max каталога (поля read-only без товара).
|
|
125
|
+
*
|
|
126
|
+
* @param min Нижняя граница размера из настроек конфигуратора.
|
|
127
|
+
* @param maxUpper Верхняя граница из свойств выбранного товара.
|
|
128
|
+
*/
|
|
129
|
+
private dimensionValidators;
|
|
130
|
+
/**
|
|
131
|
+
* Обновляет валидаторы размерных полей после смены товара или настроек.
|
|
132
|
+
*/
|
|
133
|
+
private updateItemsValidators;
|
|
134
|
+
/**
|
|
135
|
+
* Форматирование диапазона «от … до …» с учётом отсутствующих границ.
|
|
136
|
+
*
|
|
137
|
+
* @param min Нижняя граница диапазона.
|
|
138
|
+
* @param max Верхняя граница диапазона.
|
|
139
|
+
* @param unit Единица измерения для подписи.
|
|
140
|
+
*/
|
|
141
|
+
private formatRange;
|
|
142
|
+
/**
|
|
143
|
+
* Массив изделий.
|
|
144
|
+
*/
|
|
145
|
+
get items(): FormArray<ReturnType<ScSandwichM2Component['createItemGroup']>>;
|
|
146
|
+
/**
|
|
147
|
+
* {@inheritDoc}
|
|
148
|
+
*/
|
|
149
|
+
ngOnInit(): void;
|
|
150
|
+
/**
|
|
151
|
+
* Создает группу для изделия.
|
|
152
|
+
*
|
|
153
|
+
* @param item Параметры изделия.
|
|
154
|
+
* @param item.width Ширина изделия.
|
|
155
|
+
* @param item.length Длина изделия.
|
|
156
|
+
* @param item.count Количество изделий.
|
|
157
|
+
* @param item.marker Маркер позиции.
|
|
158
|
+
*/
|
|
159
|
+
private createItemGroup;
|
|
160
|
+
/**
|
|
161
|
+
* Сбрасывает состояние одной позиции на `idle`, если оно было `success`/`error`.
|
|
162
|
+
*
|
|
163
|
+
* @param index Индекс позиции.
|
|
164
|
+
*/
|
|
165
|
+
private resetItemState;
|
|
166
|
+
/**
|
|
167
|
+
* Сбрасывает состояния всех позиций на `idle`.
|
|
168
|
+
*/
|
|
169
|
+
private resetAllItemStates;
|
|
170
|
+
/**
|
|
171
|
+
* Возвращает состояние позиции по индексу (по умолчанию `idle`).
|
|
172
|
+
*
|
|
173
|
+
* @param index Индекс позиции.
|
|
174
|
+
*/
|
|
175
|
+
protected getItemState(index: number): ScSandwichM2ItemSubmitState;
|
|
176
|
+
/**
|
|
177
|
+
* Признак того, что позиция отправляется (поля должны быть заблокированы).
|
|
178
|
+
*
|
|
179
|
+
* @param index Индекс позиции.
|
|
180
|
+
*/
|
|
181
|
+
protected isItemLoading(index: number): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* Признак того, что позиция успешно отправлена и её поля нужно заблокировать.
|
|
184
|
+
*
|
|
185
|
+
* @param index Индекс позиции.
|
|
186
|
+
*/
|
|
187
|
+
protected isItemLocked(index: number): boolean;
|
|
188
|
+
/**
|
|
189
|
+
* Добавляет новое изделие в форму.
|
|
190
|
+
*/
|
|
191
|
+
protected addItem(): void;
|
|
192
|
+
/**
|
|
193
|
+
* Удаляет изделие из формы.
|
|
194
|
+
*
|
|
195
|
+
* @param index Индекс изделия.
|
|
196
|
+
*/
|
|
197
|
+
protected removeItem(index: number): void;
|
|
198
|
+
/**
|
|
199
|
+
* Площадь одной единицы изделия без учёта количества, м².
|
|
200
|
+
*
|
|
201
|
+
* @param value Значения размеров изделия.
|
|
202
|
+
* @param value.width Ширина изделия.
|
|
203
|
+
* @param value.length Длина изделия.
|
|
204
|
+
*/
|
|
205
|
+
protected pieceAreaM2(value: {
|
|
206
|
+
width: number;
|
|
207
|
+
length: number;
|
|
208
|
+
}): number;
|
|
209
|
+
/**
|
|
210
|
+
* Суммарная площадь по строке позиции: площадь единицы × количество, м².
|
|
211
|
+
*
|
|
212
|
+
* @param value Значения позиции.
|
|
213
|
+
* @param value.width Ширина изделия.
|
|
214
|
+
* @param value.length Длина изделия.
|
|
215
|
+
* @param value.count Количество изделий.
|
|
216
|
+
*/
|
|
217
|
+
private rowTotalPartsAreaM2;
|
|
218
|
+
/**
|
|
219
|
+
* Возвращает приблизительную стоимость строки (локальный расчёт — на всю строку позиции).
|
|
220
|
+
*
|
|
221
|
+
* @param value Значения изделия.
|
|
222
|
+
* @param value.width Ширина изделия.
|
|
223
|
+
* @param value.length Длина изделия.
|
|
224
|
+
* @param value.count Количество изделий.
|
|
225
|
+
*/
|
|
226
|
+
protected rowCost(value: {
|
|
227
|
+
width: number;
|
|
228
|
+
length: number;
|
|
229
|
+
count: number;
|
|
230
|
+
}): number;
|
|
231
|
+
/**
|
|
232
|
+
* Обновляет состояние позиции на указанное значение.
|
|
233
|
+
*
|
|
234
|
+
* @param index Индекс позиции.
|
|
235
|
+
* @param state Новое состояние.
|
|
236
|
+
*/
|
|
237
|
+
private setItemState;
|
|
238
|
+
/**
|
|
239
|
+
* Применяет ошибки серверной валидации к контролам формы.
|
|
240
|
+
* Сервер возвращает ключи вида `items.0.<field>` — переводим в фактический индекс позиции.
|
|
241
|
+
*
|
|
242
|
+
* @param error Ответ сервера.
|
|
243
|
+
* @param index Индекс позиции в форме.
|
|
244
|
+
*/
|
|
245
|
+
private applyServerValidationErrors;
|
|
246
|
+
/**
|
|
247
|
+
* Обработчик добавления/редактирования продукта в корзине.
|
|
248
|
+
*/
|
|
249
|
+
protected onSubmit(): void;
|
|
250
|
+
/**
|
|
251
|
+
* Формирует HTTP-запрос для одной позиции формы.
|
|
252
|
+
*
|
|
253
|
+
* @param index Индекс позиции в форме.
|
|
254
|
+
* @param productId Идентификатор выбранного продукта.
|
|
255
|
+
* @param productCategoryId Идентификатор категории.
|
|
256
|
+
* @param configurator Название конфигуратора.
|
|
257
|
+
* @param isEdit Режим обновления существующей позиции.
|
|
258
|
+
* @param orderData Текущая позиция заказа (только в режиме редактирования).
|
|
259
|
+
*/
|
|
260
|
+
private buildItemRequest$;
|
|
261
|
+
/**
|
|
262
|
+
* Устанавливает начальные значения для полей формы.
|
|
263
|
+
*/
|
|
264
|
+
private setDefaultFormValue;
|
|
265
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScSandwichM2Component, never>;
|
|
266
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScSandwichM2Component, "sc-sandwich-m2", never, { "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "categoryId": { "alias": "categoryId"; "required": true; "isSignal": true; }; "editor": { "alias": "editor"; "required": true; "isSignal": true; }; "orderItem": { "alias": "orderItem"; "required": true; "isSignal": true; }; "orderId": { "alias": "orderId"; "required": false; }; }, { "toggleShowEvent": "toggleShowEvent"; }, never, never, true, never>;
|
|
267
|
+
}
|
|
@@ -8,7 +8,7 @@ import { TuiTextfield } from '@taiga-ui/core';
|
|
|
8
8
|
import { TuiAccordion } from '@taiga-ui/experimental';
|
|
9
9
|
import { TuiCheckbox, TuiInputRange, TuiRadio } from '@taiga-ui/kit';
|
|
10
10
|
import { isNil } from 'lodash-es';
|
|
11
|
-
import { filter, map, share, switchMap, tap } from 'rxjs';
|
|
11
|
+
import { catchError, EMPTY, filter, map, share, switchMap, tap } from 'rxjs';
|
|
12
12
|
import { SC_CATALOG_PRODUCTS_FILTERS } from './tokens/sc-catalog-products-filters';
|
|
13
13
|
import { SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY } from './tokens/sc-catalog-show-products-recursively';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
@@ -47,7 +47,7 @@ export class ScCatalogFiltersComponent {
|
|
|
47
47
|
/**
|
|
48
48
|
* {@link Observable} фильтров категории.
|
|
49
49
|
*/
|
|
50
|
-
this.filters = toSignal(inject(SC_CATEGORY_INFO).pipe(filter(tuiIsPresent), switchMap((category) => this.catalogFilterService.getFilters$(this.idOrSlugPipe.transform(category), this.isRecursively)), map((filters) => filters.filter((item) => item.type !== 'range' || item.min !== item.max)), tap((filters) => {
|
|
50
|
+
this.filters = toSignal(inject(SC_CATEGORY_INFO).pipe(catchError(() => EMPTY), filter(tuiIsPresent), switchMap((category) => this.catalogFilterService.getFilters$(this.idOrSlugPipe.transform(category), this.isRecursively)), map((filters) => filters.filter((item) => item.type !== 'range' || item.min !== item.max)), tap((filters) => {
|
|
51
51
|
this.updateFormControls(filters);
|
|
52
52
|
}), share()));
|
|
53
53
|
/**
|
|
@@ -210,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
210
210
|
type: Component,
|
|
211
211
|
args: [{ standalone: true, selector: 'sc-catalog-filters', changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormsModule, TuiTextfield, TuiCheckbox, TuiRadio, TuiInputRange, TuiAccordion, ReactiveFormsModule], template: "@if (filters()?.length) {\n <div class=\"bg-tui-base-01 shadow-sc flex flex-col items-center gap-3 rounded-xl\">\n <tui-accordion class=\"accordion\">\n <button\n [tuiAccordion]=\"isOpenAccordion()\"\n appearance=\"primary\"\n >\n \u0424\u0438\u043B\u044C\u0442\u0440\u044B\n </button>\n <tui-expand>\n <form\n [formGroup]=\"form\"\n class=\"flex flex-col gap-4 pb-1\"\n >\n @for (filter of filters(); track filter.id) {\n <div class=\"flex flex-col gap-2\">\n <label class=\"text-body-s font-medium\">{{ filter.label }}</label>\n\n @if (filter.type === 'checkbox') {\n @if (filter.isMultiple === false) {\n <div class=\"flex flex-col gap-2\">\n @for (value of filter.values; track value.id) {\n @let formControl = form.get(filter.id);\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"filter.id\"\n [value]=\"value.id\"\n tuiRadio\n (click)=\"formControl?.setValue(formControl?.value === value.id ? null : value.id)\"\n type=\"radio\"\n />\n <span class=\"text-body-s\">{{ value.label }}</span>\n </label>\n }\n </div>\n } @else {\n <div\n [formGroupName]=\"filter.id\"\n class=\"flex flex-col gap-2\"\n >\n @for (value of filter.values; track value.id) {\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"value.id\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span class=\"text-body-s\">{{ value.label }}</span>\n </label>\n }\n </div>\n }\n }\n\n @if (filter.type === 'range') {\n <tui-input-range\n [formControlName]=\"filter.id\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n />\n }\n\n @if (filter.type === 'toggle') {\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"filter.id\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span class=\"text-body-s\">\u0414\u0430</span>\n </label>\n }\n </div>\n }\n </form>\n </tui-expand>\n </tui-accordion>\n </div>\n}\n", styles: [".accordion [tuiAccordion]{border:none;mask:none}.accordion tui-expand{box-shadow:none}\n"] }]
|
|
212
212
|
}], ctorParameters: () => [] });
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGFsb2ctZmlsdGVycy9zYy1jYXRhbG9nLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0YWxvZy1maWx0ZXJzL3NjLWNhdGFsb2ctZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLHNCQUFzQixFQUV0QixjQUFjLEdBSWpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFB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LDZ1QkFBeUMsbUJBQW1COzs0RkFFbkcseUJBQXlCO2tCQVJyQyxTQUFTO2lDQUNNLElBQUksWUFDTixvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIFNDX0NBVEVHT1JZX0lORk8sXG4gICAgU2NDYXRhbG9nRmlsdGVyLFxuICAgIFNjQ2F0YWxvZ0ZpbHRlclNlcnZpY2UsXG4gICAgU2NJQ2hlY2tib3hGaWx0ZXIsXG4gICAgU2NJZE9yU2x1Z1BpcGUsXG4gICAgU2NQcm9wZXJ0eUZpbHRlcnMsXG4gICAgU2NSYW5nZUZpbHRlcixcbiAgICBTY1RvZ2dsZUZpbHRlcixcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aVRleHRmaWVsZCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUFjY29yZGlvbiB9IGZyb20gJ0B0YWlnYS11aS9leHBlcmltZW50YWwnO1xuaW1wb3J0IHsgVHVpQ2hlY2tib3gsIFR1aUlucHV0UmFuZ2UsIFR1aVJhZGlvIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2hhcmUsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNDX0NBVEFMT0dfUFJPRFVDVFNfRklMVEVSUyB9IGZyb20gJy4vdG9rZW5zL3NjLWNhdGFsb2ctcHJvZHVjdHMtZmlsdGVycyc7XG5pbXBvcnQgeyBTQ19DQVRBTE9HX1NIT1dfUFJPRFVDVFNfUkVDVVJTSVZFTFkgfSBmcm9tICcuL3Rva2Vucy9zYy1jYXRhbG9nLXNob3ctcHJvZHVjdHMtcmVjdXJzaXZlbHknO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQstGL0LLQvtC00LAg0YTQuNC70YzRgtGA0L7QsiDQutCw0YLQsNC70L7Qs9CwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtY2F0YWxvZy1maWx0ZXJzJyxcbiAgICBzdHlsZVVybDogJy4vc2MtY2F0YWxvZy1maWx0ZXJzLmNvbXBvbmVudC5zY3NzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtY2F0YWxvZy1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFR1aVRleHRmaWVsZCwgVHVpQ2hlY2tib3gsIFR1aVJhZGlvLCBUdWlJbnB1dFJhbmdlLCBUdWlBY2NvcmRpb24sIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhdGFsb2dGaWx0ZXJzQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQodC+0YHRgtC+0Y/QvdC40LUg0L7RgtC60YDRi9GC0LjRjyBhY2NvcmRpb24uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGlzT3BlbkFjY29yZGlvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINGE0LjQu9GM0YLRgNCw0LzQuCDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ0ZpbHRlclNlcnZpY2U6IFNjQ2F0YWxvZ0ZpbHRlclNlcnZpY2UgPSBpbmplY3QoU2NDYXRhbG9nRmlsdGVyU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvywg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQuNGB0YXQvtC00Y8g0LjQtyDQvdCw0YHRgtGA0L7QtdC6INC+0LrRgNGD0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkT3JTbHVnUGlwZTogU2NJZE9yU2x1Z1BpcGUgPSBpbmplY3QoU2NJZE9yU2x1Z1BpcGUpO1xuXG4gICAgLyoqXG4gICAgICogU3ViamVjdCDQtNC70Y8g0YXRgNCw0L3QtdC90LjRjyDRhNC40LvRjNGC0YDQvtCyINC/0YDQvtC00YPQutGC0L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2dQcm9kdWN0c0ZpbHRlcnMkID0gaW5qZWN0KFNDX0NBVEFMT0dfUFJPRFVDVFNfRklMVEVSUyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQvtGC0L7QsdGA0LDQttCw0YLRjCDRhNC40LvRjNGC0YDRiyDQtNC70Y8g0LLQu9C+0LbQtdC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzUmVjdXJzaXZlbHkgPSBpbmplY3QoU0NfQ0FUQUxPR19TSE9XX1BST0RVQ1RTX1JFQ1VSU0lWRUxZKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDRhNC40LvRjNGC0YDQvtCyINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVycyA9IHRvU2lnbmFsKFxuICAgICAgICBpbmplY3QoU0NfQ0FURUdPUllfSU5GTykucGlwZShcbiAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChjYXRlZ29yeSkgPT4gdGhpcy5jYXRhbG9nRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJzJCh0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkpLCB0aGlzLmlzUmVjdXJzaXZlbHkpKSxcbiAgICAgICAgICAgIG1hcCgoZmlsdGVycykgPT4gZmlsdGVycy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSAhPT0gJ3JhbmdlJyB8fCBpdGVtLm1pbiAhPT0gaXRlbS5tYXgpKSxcbiAgICAgICAgICAgIHRhcCgoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzKGZpbHRlcnMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogRm9ybUdyb3VwINC00LvRjyDRhNC40LvRjNGC0YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cDxcbiAgICAgICAgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jcmVhdGVDaGVja2JveEZvcm1Db250cm9sPiB8IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuY3JlYXRlUmFuZ2VGb3JtQ29udHJvbD4gfCBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNyZWF0ZVRvZ2dsZUZvcm1Db250cm9sPj5cbiAgICA+KHt9KTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXRhbG9nRmlsdGVyc0NvbXBvbmVudH0uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXRhbG9nUHJvZHVjdHNGaWx0ZXJzJC5uZXh0KHRoaXMuYnVpbGRQcm9wZXJ0eUZpbHRlcnMoZmlsdGVycykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0YHQvtGB0YLQsNCyINC60L7QvdGC0YDQvtC70L7QsiDRhNC+0YDQvNGLINC90LAg0L7RgdC90L7QstC1INC/0LXRgNC10LTQsNC90L3Ri9GFINGE0LjQu9GM0YLRgNC+0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVycyDQnNCw0YHRgdC40LIg0YTQuNC70YzRgtGA0L7QsiDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQutC+0L3RgtGA0L7Qu9C+0LIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1Db250cm9scyhmaWx0ZXJzOiBTY0NhdGFsb2dGaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChrZXkgYXMgbmV2ZXIsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsdGVycy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woaXRlbS5pZCwgdGhpcy5jcmVhdGVDaGVja2JveEZvcm1Db250cm9sKGl0ZW0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woaXRlbS5pZCwgdGhpcy5jcmVhdGVSYW5nZUZvcm1Db250cm9sKGl0ZW0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGl0ZW0uaWQsIHRoaXMuY3JlYXRlVG9nZ2xlRm9ybUNvbnRyb2woaXRlbSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0LfQvdCw0YfQtdC90LjRjyDRhNC+0YDQvNGLINCyINC+0LHRitC10LrRgiDRhNC40LvRjNGC0YDQvtCyINGB0LLQvtC50YHRgtCyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlINCX0L3QsNGH0LXQvdC40Y8g0YTQvtGA0LzRiy5cbiAgICAgKiBAcmV0dXJucyDQntCx0YrQtdC60YIg0YTQuNC70YzRgtGA0L7QsiDRgdCy0L7QudGB0YLQsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYnVpbGRQcm9wZXJ0eUZpbHRlcnModmFsdWU6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgW251bWJlciwgbnVtYmVyXT4+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTY1Byb3BlcnR5RmlsdGVycyB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2NQcm9wZXJ0eUZpbHRlcnMgPSB7fTtcblxuICAgICAgICB0aGlzLmZpbHRlcnMoKT8uZm9yRWFjaCgoZmlsdGVySXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbFZhbHVlID0gdmFsdWVbZmlsdGVySXRlbS5pZF0gYXMgYm9vbGVhbiB8IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKGlzTmlsKGNvbnRyb2xWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZmlsdGVySXRlbS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDaGVja2JveEZpbHRlcihyZXN1bHQsIGZpbHRlckl0ZW0uaWQsIGNvbnRyb2xWYWx1ZSBhcyBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmFuZ2VGaWx0ZXIocmVzdWx0LCBmaWx0ZXJJdGVtLmlkLCBjb250cm9sVmFsdWUgYXMgW251bWJlciwgbnVtYmVyXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1RvZ2dsZUZpbHRlcihyZXN1bHQsIGZpbHRlckl0ZW0uaWQsIGNvbnRyb2xWYWx1ZSBhcyBib29sZWFuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LrQvtC90YLRgNC+0Lsg0YTQvtGA0LzRiyDQtNC70Y8g0YTQuNC70YzRgtGA0LAg0YLQuNC/0LAgY2hlY2tib3guXG4gICAgICpcbiAgICAgKiDQldGB0LvQuCBgaXNNdWx0aXBsZSA9PT0gZmFsc2VgIOKAlCDQstC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgRm9ybUNvbnRyb2x9INGB0YLRgNC+0LrQvtCy0L7Qs9C+INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAgKNC70L7Qs9C40LrQsCByYWRpbyksXG4gICAgICog0LjQvdCw0YfQtSDigJQge0BsaW5rIEZvcm1Hcm91cH0g0L3QtdC30LDQstC40YHQuNC80YvRhSDQsdGD0LvQtdCy0YvRhSDQutC+0L3RgtGA0L7Qu9C+0LIg0L/QviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCw0Lwg0LfQvdCw0YfQtdC90LjQuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGVja2JveEZpbHRlciDQpNC40LvRjNGC0YAg0YLQuNC/0LAgY2hlY2tib3guXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNoZWNrYm94Rm9ybUNvbnRyb2woY2hlY2tib3hGaWx0ZXI6IFNjSUNoZWNrYm94RmlsdGVyKTogRm9ybUdyb3VwPFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPGJvb2xlYW4+Pj4gfCBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIGlmICghY2hlY2tib3hGaWx0ZXIuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4gPSB7fTtcbiAgICAgICAgY2hlY2tib3hGaWx0ZXIudmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sc1t2YWx1ZS5pZF0gPSBuZXcgRm9ybUNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiBGb3JtQ29udHJvbCDQtNC70Y8gcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmFuZ2VGaWx0ZXIg0KTQuNC70YzRgtGAINGC0LjQv9CwIHJhbmdlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVSYW5nZUZvcm1Db250cm9sKHJhbmdlRmlsdGVyOiBTY1JhbmdlRmlsdGVyKTogRm9ybUNvbnRyb2w8W251bWJlciwgbnVtYmVyXT4ge1xuICAgICAgICAvLyBUT0RPOiDQlNC+0LHQsNCy0LjRgtGMIHVwZGF0ZU9uOiAnYmx1cicg0L/QvtGB0LvQtSDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINCx0LDQs9CwINCyIHRhaWdhLXVpLlxuICAgICAgICByZXR1cm4gbmV3IEZvcm1Db250cm9sKFtOdW1iZXIocmFuZ2VGaWx0ZXIuc2VsZWN0ZWRNaW4gPz8gcmFuZ2VGaWx0ZXIubWluKSwgTnVtYmVyKHJhbmdlRmlsdGVyLnNlbGVjdGVkTWF4ID8/IHJhbmdlRmlsdGVyLm1heCldLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCIEZvcm1Db250cm9sINC00LvRjyB0b2dnbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdG9nZ2xlRmlsdGVyINCk0LjQu9GM0YLRgCDRgtC40L/QsCB0b2dnbGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRvZ2dsZUZvcm1Db250cm9sKHRvZ2dsZUZpbHRlcjogU2NUb2dnbGVGaWx0ZXIpOiBGb3JtQ29udHJvbDxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodG9nZ2xlRmlsdGVyLnNlbGVjdGVkVmFsdWUgPz8gZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCIGNoZWNrYm94INGE0LjQu9GM0YLRgC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQg0J7QsdGK0LXQutGCINGA0LXQt9GD0LvRjNGC0LDRgtCwINC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gZmlsdGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YTQuNC70YzRgtGA0LAuXG4gICAgICogQHBhcmFtIGNvbnRyb2xWYWx1ZSDQl9C90LDRh9C10L3QuNC1INC60L7QvdGC0YDQvtC70LAg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NDaGVja2JveEZpbHRlcihyZXN1bHQ6IFNjUHJvcGVydHlGaWx0ZXJzLCBmaWx0ZXJJZDogc3RyaW5nLCBjb250cm9sVmFsdWU6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KTogdm9pZCB7XG4gICAgICAgIC8vINCU0LvRjyBpc011bHRpcGxlID09PSBmYWxzZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4gLT4gc3RyaW5nW10g0LjQtyDQvtC00L3QvtCz0L4g0LLRi9Cx0YDQsNC90L3QvtCz0L4gSUQuXG4gICAgICAgIGlmICh0eXBlb2YgY29udHJvbFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvbiwgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICByZXN1bHRbZmlsdGVySWRdID0gW2NvbnRyb2xWYWx1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCU0LvRjyBjaGVja2JveDogRm9ybUdyb3VwINGBIEZvcm1Db250cm9sPGJvb2xlYW4+IC0+IHN0cmluZ1tdICjQvNCw0YHRgdC40LIgSUQg0LLRi9Cx0YDQsNC90L3Ri9GFINC30L3QsNGH0LXQvdC40LkpLlxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IE9iamVjdC5lbnRyaWVzKGNvbnRyb2xWYWx1ZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGlzU2VsZWN0ZWRdKSA9PiBpc1NlbGVjdGVkKVxuICAgICAgICAgICAgLm1hcCgoW2lkXSkgPT4gaWQpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb24sIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICByZXN1bHRbZmlsdGVySWRdID0gc2VsZWN0ZWRJZHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIgcmFuZ2Ug0YTQuNC70YzRgtGALlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCDQntCx0YrQtdC60YIg0YDQtdC30YPQu9GM0YLQsNGC0LAg0LTQu9GPINC30LDQv9C+0LvQvdC10L3QuNGPLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRhNC40LvRjNGC0YDQsC5cbiAgICAgKiBAcGFyYW0gY29udHJvbFZhbHVlINCX0L3QsNGH0LXQvdC40LUg0LrQvtC90YLRgNC+0LvQsCDRhNC+0YDQvNGLLlxuICAgICAqIEBwYXJhbSBjb250cm9sVmFsdWUuMCDQndCw0YfQsNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC40LDQv9Cw0LfQvtC90LAuXG4gICAgICogQHBhcmFtIGNvbnRyb2xWYWx1ZS4xINCa0L7QvdC10YfQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC40LDQv9Cw0LfQvtC90LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9jZXNzUmFuZ2VGaWx0ZXIocmVzdWx0OiBTY1Byb3BlcnR5RmlsdGVycywgZmlsdGVySWQ6IHN0cmluZywgW2Zyb20sIHRvXTogW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICAvLyDQlNC70Y8gcmFuZ2U6IEZvcm1Db250cm9sPFtudW1iZXIsIG51bWJlcl0+IC0+IHsgZnJvbT86IHN0cmluZzsgdG8/OiBzdHJpbmc7IH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uLCBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICByZXN1bHRbZmlsdGVySWRdID0ge1xuICAgICAgICAgICAgZnJvbTogU3RyaW5nKGZyb20pLFxuICAgICAgICAgICAgdG86IFN0cmluZyh0byksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCIHRvZ2dsZSDRhNC40LvRjNGC0YAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0INCe0LHRitC10LrRgiDRgNC10LfRg9C70YzRgtCw0YLQsCDQtNC70Y8g0LfQsNC/0L7Qu9C90LXQvdC40Y8uXG4gICAgICogQHBhcmFtIGZpbHRlcklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LjQu9GM0YLRgNCwLlxuICAgICAqIEBwYXJhbSBjb250cm9sVmFsdWUg0JfQvdCw0YfQtdC90LjQtSDQutC+0L3RgtGA0L7Qu9CwINGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9jZXNzVG9nZ2xlRmlsdGVyKHJlc3VsdDogU2NQcm9wZXJ0eUZpbHRlcnMsIGZpbHRlcklkOiBzdHJpbmcsIGNvbnRyb2xWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyDQlNC70Y8gdG9nZ2xlOiBGb3JtQ29udHJvbDxib29sZWFuPiAtPiBib29sZWFuXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvbiwgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHJlc3VsdFtmaWx0ZXJJZF0gPSBjb250cm9sVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKGZpbHRlcnMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cImJnLXR1aS1iYXNlLTAxIHNoYWRvdy1zYyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyByb3VuZGVkLXhsXCI+XG4gICAgICAgIDx0dWktYWNjb3JkaW9uIGNsYXNzPVwiYWNjb3JkaW9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW3R1aUFjY29yZGlvbl09XCJpc09wZW5BY2NvcmRpb24oKVwiXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCk0LjQu9GM0YLRgNGLXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDx0dWktZXhwYW5kPlxuICAgICAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBwYi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGZpbHRlciBvZiBmaWx0ZXJzKCk7IHRyYWNrIGZpbHRlci5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJvZHktcyBmb250LW1lZGl1bVwiPnt7IGZpbHRlci5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpbHRlci50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyLmlzTXVsdGlwbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGZpbHRlci52YWx1ZXM7IHRyYWNrIHZhbHVlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgZm9ybUNvbnRyb2wgPSBmb3JtLmdldChmaWx0ZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpUmFkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUNvbnRyb2w/LnNldFZhbHVlKGZvcm1Db250cm9sPy52YWx1ZSA9PT0gdmFsdWUuaWQgPyBudWxsIDogdmFsdWUuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LXNcIj57eyB2YWx1ZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiZmlsdGVyLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGZpbHRlci52YWx1ZXM7IHRyYWNrIHZhbHVlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInZhbHVlLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktc1wiPnt7IHZhbHVlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpbHRlci5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIitmaWx0ZXIubWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiK2ZpbHRlci5tYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyLnR5cGUgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpbHRlci5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LXNcIj7QlNCwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC90dWktZXhwYW5kPlxuICAgICAgICA8L3R1aS1hY2NvcmRpb24+XG4gICAgPC9kaXY+XG59XG4iXX0=
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGFsb2ctZmlsdGVycy9zYy1jYXRhbG9nLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0YWxvZy1maWx0ZXJzL3NjLWNhdGFsb2ctZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLHNCQUFzQixFQUV0QixjQUFjLEdBSWpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFN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eUJBQXlCO21HQUF6Qix5QkFBeUIsZ1BDcEN0Qywra0lBK0VBLGlKRDdDYyxXQUFXLGdpQ0FBZ0IsV0FBVyw2dUJBQXlDLG1CQUFtQjs7NEZBRW5HLHlCQUF5QjtrQkFSckMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBTQ19DQVRFR09SWV9JTkZPLFxuICAgIFNjQ2F0YWxvZ0ZpbHRlcixcbiAgICBTY0NhdGFsb2dGaWx0ZXJTZXJ2aWNlLFxuICAgIFNjSUNoZWNrYm94RmlsdGVyLFxuICAgIFNjSWRPclNsdWdQaXBlLFxuICAgIFNjUHJvcGVydHlGaWx0ZXJzLFxuICAgIFNjUmFuZ2VGaWx0ZXIsXG4gICAgU2NUb2dnbGVGaWx0ZXIsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgdHVpSXNQcmVzZW50IH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBUdWlUZXh0ZmllbGQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlBY2NvcmRpb24gfSBmcm9tICdAdGFpZ2EtdWkvZXhwZXJpbWVudGFsJztcbmltcG9ydCB7IFR1aUNoZWNrYm94LCBUdWlJbnB1dFJhbmdlLCBUdWlSYWRpbyB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgRU1QVFksIGZpbHRlciwgbWFwLCBzaGFyZSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU0NfQ0FUQUxPR19QUk9EVUNUU19GSUxURVJTIH0gZnJvbSAnLi90b2tlbnMvc2MtY2F0YWxvZy1wcm9kdWN0cy1maWx0ZXJzJztcbmltcG9ydCB7IFNDX0NBVEFMT0dfU0hPV19QUk9EVUNUU19SRUNVUlNJVkVMWSB9IGZyb20gJy4vdG9rZW5zL3NjLWNhdGFsb2ctc2hvdy1wcm9kdWN0cy1yZWN1cnNpdmVseSc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINCy0YvQstC+0LTQsCDRhNC40LvRjNGC0YDQvtCyINC60LDRgtCw0LvQvtCz0LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1jYXRhbG9nLWZpbHRlcnMnLFxuICAgIHN0eWxlVXJsOiAnLi9zYy1jYXRhbG9nLWZpbHRlcnMuY29tcG9uZW50LnNjc3MnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXRhbG9nLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgVHVpVGV4dGZpZWxkLCBUdWlDaGVja2JveCwgVHVpUmFkaW8sIFR1aUlucHV0UmFuZ2UsIFR1aUFjY29yZGlvbiwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2F0YWxvZ0ZpbHRlcnNDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCh0L7RgdGC0L7Rj9C90LjQtSDQvtGC0LrRgNGL0YLQuNGPIGFjY29yZGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNPcGVuQWNjb3JkaW9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0YTQuNC70YzRgtGA0LDQvNC4INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nRmlsdGVyU2VydmljZTogU2NDYXRhbG9nRmlsdGVyU2VydmljZSA9IGluamVjdChTY0NhdGFsb2dGaWx0ZXJTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/LCDQstC+0LfQstGA0LDRidCw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpINC40YHRhdC+0LTRjyDQuNC3INC90LDRgdGC0YDQvtC10Log0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWdQaXBlOiBTY0lkT3JTbHVnUGlwZSA9IGluamVjdChTY0lkT3JTbHVnUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJqZWN0INC00LvRjyDRhdGA0LDQvdC10L3QuNGPINGE0LjQu9GM0YLRgNC+0LIg0L/RgNC+0LTRg9C60YLQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ1Byb2R1Y3RzRmlsdGVycyQgPSBpbmplY3QoU0NfQ0FUQUxPR19QUk9EVUNUU19GSUxURVJTKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INC+0YLQvtCx0YDQsNC20LDRgtGMINGE0LjQu9GM0YLRgNGLINC00LvRjyDQstC70L7QttC10L3QvdGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNSZWN1cnNpdmVseSA9IGluamVjdChTQ19DQVRBTE9HX1NIT1dfUFJPRFVDVFNfUkVDVVJTSVZFTFkpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INGE0LjQu9GM0YLRgNC+0LIg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJzID0gdG9TaWduYWwoXG4gICAgICAgIGluamVjdChTQ19DQVRFR09SWV9JTkZPKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBFTVBUWSksXG4gICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoY2F0ZWdvcnkpID0+IHRoaXMuY2F0YWxvZ0ZpbHRlclNlcnZpY2UuZ2V0RmlsdGVycyQodGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGNhdGVnb3J5KSwgdGhpcy5pc1JlY3Vyc2l2ZWx5KSksXG4gICAgICAgICAgICBtYXAoKGZpbHRlcnMpID0+IGZpbHRlcnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgIT09ICdyYW5nZScgfHwgaXRlbS5taW4gIT09IGl0ZW0ubWF4KSksXG4gICAgICAgICAgICB0YXAoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9scyhmaWx0ZXJzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEZvcm1Hcm91cCDQtNC70Y8g0YTQuNC70YzRgtGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXA8XG4gICAgICAgIFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHRoaXMuY3JlYXRlQ2hlY2tib3hGb3JtQ29udHJvbD4gfCBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNyZWF0ZVJhbmdlRm9ybUNvbnRyb2w+IHwgUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jcmVhdGVUb2dnbGVGb3JtQ29udHJvbD4+XG4gICAgPih7fSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQ2F0YWxvZ0ZpbHRlcnNDb21wb25lbnR9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2F0YWxvZ1Byb2R1Y3RzRmlsdGVycyQubmV4dCh0aGlzLmJ1aWxkUHJvcGVydHlGaWx0ZXJzKGZpbHRlcnMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINGB0L7RgdGC0LDQsiDQutC+0L3RgtGA0L7Qu9C+0LIg0YTQvtGA0LzRiyDQvdCwINC+0YHQvdC+0LLQtSDQv9C10YDQtdC00LDQvdC90YvRhSDRhNC40LvRjNGC0YDQvtCyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlcnMg0JzQsNGB0YHQuNCyINGE0LjQu9GM0YLRgNC+0LIg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0LrQvtC90YLRgNC+0LvQvtCyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVGb3JtQ29udHJvbHMoZmlsdGVyczogU2NDYXRhbG9nRmlsdGVyW10pOiB2b2lkIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woa2V5IGFzIG5ldmVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGl0ZW0uaWQsIHRoaXMuY3JlYXRlQ2hlY2tib3hGb3JtQ29udHJvbChpdGVtKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGl0ZW0uaWQsIHRoaXMuY3JlYXRlUmFuZ2VGb3JtQ29udHJvbChpdGVtKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChpdGVtLmlkLCB0aGlzLmNyZWF0ZVRvZ2dsZUZvcm1Db250cm9sKGl0ZW0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40Y8g0YTQvtGA0LzRiyDQsiDQvtCx0YrQtdC60YIg0YTQuNC70YzRgtGA0L7QsiDRgdCy0L7QudGB0YLQsi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSDQl9C90LDRh9C10L3QuNGPINGE0L7RgNC80YsuXG4gICAgICogQHJldHVybnMg0J7QsdGK0LXQutGCINGE0LjQu9GM0YLRgNC+0LIg0YHQstC+0LnRgdGC0LIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGJ1aWxkUHJvcGVydHlGaWx0ZXJzKHZhbHVlOiBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IFtudW1iZXIsIG51bWJlcl0+PiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU2NQcm9wZXJ0eUZpbHRlcnMge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFNjUHJvcGVydHlGaWx0ZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5maWx0ZXJzKCk/LmZvckVhY2goKGZpbHRlckl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHZhbHVlW2ZpbHRlckl0ZW0uaWRdIGFzIGJvb2xlYW4gfCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChpc05pbChjb250cm9sVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpbHRlckl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ2hlY2tib3hGaWx0ZXIocmVzdWx0LCBmaWx0ZXJJdGVtLmlkLCBjb250cm9sVmFsdWUgYXMgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JhbmdlRmlsdGVyKHJlc3VsdCwgZmlsdGVySXRlbS5pZCwgY29udHJvbFZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NUb2dnbGVGaWx0ZXIocmVzdWx0LCBmaWx0ZXJJdGVtLmlkLCBjb250cm9sVmFsdWUgYXMgYm9vbGVhbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC60L7QvdGC0YDQvtC7INGE0L7RgNC80Ysg0LTQu9GPINGE0LjQu9GM0YLRgNCwINGC0LjQv9CwIGNoZWNrYm94LlxuICAgICAqXG4gICAgICog0JXRgdC70LggYGlzTXVsdGlwbGUgPT09IGZhbHNlYCDigJQg0LLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIEZvcm1Db250cm9sfSDRgdGC0YDQvtC60L7QstC+0LPQviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwICjQu9C+0LPQuNC60LAgcmFkaW8pLFxuICAgICAqINC40L3QsNGH0LUg4oCUIHtAbGluayBGb3JtR3JvdXB9INC90LXQt9Cw0LLQuNGB0LjQvNGL0YUg0LHRg9C70LXQstGL0YUg0LrQvtC90YLRgNC+0LvQvtCyINC/0L4g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsNC8INC30L3QsNGH0LXQvdC40LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hlY2tib3hGaWx0ZXIg0KTQuNC70YzRgtGAINGC0LjQv9CwIGNoZWNrYm94LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVDaGVja2JveEZvcm1Db250cm9sKGNoZWNrYm94RmlsdGVyOiBTY0lDaGVja2JveEZpbHRlcik6IEZvcm1Hcm91cDxSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4+IHwgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIWNoZWNrYm94RmlsdGVyLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250cm9sczogUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2w8Ym9vbGVhbj4+ID0ge307XG4gICAgICAgIGNoZWNrYm94RmlsdGVyLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHNbdmFsdWUuaWRdID0gbmV3IEZvcm1Db250cm9sKGZhbHNlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChjb250cm9scyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIgRm9ybUNvbnRyb2wg0LTQu9GPIHJhbmdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJhbmdlRmlsdGVyINCk0LjQu9GM0YLRgCDRgtC40L/QsCByYW5nZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlUmFuZ2VGb3JtQ29udHJvbChyYW5nZUZpbHRlcjogU2NSYW5nZUZpbHRlcik6IEZvcm1Db250cm9sPFtudW1iZXIsIG51bWJlcl0+IHtcbiAgICAgICAgLy8gVE9ETzog0JTQvtCx0LDQstC40YLRjCB1cGRhdGVPbjogJ2JsdXInINC/0L7RgdC70LUg0LjRgdC/0YDQsNCy0LvQtdC90LjRjyDQsdCw0LPQsCDQsiB0YWlnYS11aS5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbChbTnVtYmVyKHJhbmdlRmlsdGVyLnNlbGVjdGVkTWluID8/IHJhbmdlRmlsdGVyLm1pbiksIE51bWJlcihyYW5nZUZpbHRlci5zZWxlY3RlZE1heCA/PyByYW5nZUZpbHRlci5tYXgpXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiBGb3JtQ29udHJvbCDQtNC70Y8gdG9nZ2xlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRvZ2dsZUZpbHRlciDQpNC40LvRjNGC0YAg0YLQuNC/0LAgdG9nZ2xlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVUb2dnbGVGb3JtQ29udHJvbCh0b2dnbGVGaWx0ZXI6IFNjVG9nZ2xlRmlsdGVyKTogRm9ybUNvbnRyb2w8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHRvZ2dsZUZpbHRlci5zZWxlY3RlZFZhbHVlID8/IGZhbHNlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiBjaGVja2JveCDRhNC40LvRjNGC0YAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0INCe0LHRitC10LrRgiDRgNC10LfRg9C70YzRgtCw0YLQsCDQtNC70Y8g0LfQsNC/0L7Qu9C90LXQvdC40Y8uXG4gICAgICogQHBhcmFtIGZpbHRlcklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LjQu9GM0YLRgNCwLlxuICAgICAqIEBwYXJhbSBjb250cm9sVmFsdWUg0JfQvdCw0YfQtdC90LjQtSDQutC+0L3RgtGA0L7Qu9CwINGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9jZXNzQ2hlY2tib3hGaWx0ZXIocmVzdWx0OiBTY1Byb3BlcnR5RmlsdGVycywgZmlsdGVySWQ6IHN0cmluZywgY29udHJvbFZhbHVlOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPik6IHZvaWQge1xuICAgICAgICAvLyDQlNC70Y8gaXNNdWx0aXBsZSA9PT0gZmFsc2U6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+IC0+IHN0cmluZ1tdINC40Lcg0L7QtNC90L7Qs9C+INCy0YvQsdGA0LDQvdC90L7Qs9C+IElELlxuICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2xWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb24sIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpbHRlcklkXSA9IFtjb250cm9sVmFsdWVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQlNC70Y8gY2hlY2tib3g6IEZvcm1Hcm91cCDRgSBGb3JtQ29udHJvbDxib29sZWFuPiAtPiBzdHJpbmdbXSAo0LzQsNGB0YHQuNCyIElEINCy0YvQsdGA0LDQvdC90YvRhSDQt9C90LDRh9C10L3QuNC5KS5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBPYmplY3QuZW50cmllcyhjb250cm9sVmFsdWUpXG4gICAgICAgICAgICAuZmlsdGVyKChbLCBpc1NlbGVjdGVkXSkgPT4gaXNTZWxlY3RlZClcbiAgICAgICAgICAgIC5tYXAoKFtpZF0pID0+IGlkKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uLCBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgcmVzdWx0W2ZpbHRlcklkXSA9IHNlbGVjdGVkSWRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCIHJhbmdlINGE0LjQu9GM0YLRgC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQg0J7QsdGK0LXQutGCINGA0LXQt9GD0LvRjNGC0LDRgtCwINC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gZmlsdGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YTQuNC70YzRgtGA0LAuXG4gICAgICogQHBhcmFtIGNvbnRyb2xWYWx1ZSDQl9C90LDRh9C10L3QuNC1INC60L7QvdGC0YDQvtC70LAg0YTQvtGA0LzRiy5cbiAgICAgKiBAcGFyYW0gY29udHJvbFZhbHVlLjAg0J3QsNGH0LDQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQuNCw0L/QsNC30L7QvdCwLlxuICAgICAqIEBwYXJhbSBjb250cm9sVmFsdWUuMSDQmtC+0L3QtdGH0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQuNCw0L/QsNC30L7QvdCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvY2Vzc1JhbmdlRmlsdGVyKHJlc3VsdDogU2NQcm9wZXJ0eUZpbHRlcnMsIGZpbHRlcklkOiBzdHJpbmcsIFtmcm9tLCB0b106IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgLy8g0JTQu9GPIHJhbmdlOiBGb3JtQ29udHJvbDxbbnVtYmVyLCBudW1iZXJdPiAtPiB7IGZyb20/OiBzdHJpbmc7IHRvPzogc3RyaW5nOyB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvbiwgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgcmVzdWx0W2ZpbHRlcklkXSA9IHtcbiAgICAgICAgICAgIGZyb206IFN0cmluZyhmcm9tKSxcbiAgICAgICAgICAgIHRvOiBTdHJpbmcodG8pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiB0b2dnbGUg0YTQuNC70YzRgtGALlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCDQntCx0YrQtdC60YIg0YDQtdC30YPQu9GM0YLQsNGC0LAg0LTQu9GPINC30LDQv9C+0LvQvdC10L3QuNGPLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRhNC40LvRjNGC0YDQsC5cbiAgICAgKiBAcGFyYW0gY29udHJvbFZhbHVlINCX0L3QsNGH0LXQvdC40LUg0LrQvtC90YLRgNC+0LvQsCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvY2Vzc1RvZ2dsZUZpbHRlcihyZXN1bHQ6IFNjUHJvcGVydHlGaWx0ZXJzLCBmaWx0ZXJJZDogc3RyaW5nLCBjb250cm9sVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgLy8g0JTQu9GPIHRvZ2dsZTogRm9ybUNvbnRyb2w8Ym9vbGVhbj4gLT4gYm9vbGVhblxuICAgICAgICBpZiAoY29udHJvbFZhbHVlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb24sIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICByZXN1bHRbZmlsdGVySWRdID0gY29udHJvbFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmIChmaWx0ZXJzKCk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJiZy10dWktYmFzZS0wMSBzaGFkb3ctc2MgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC14bFwiPlxuICAgICAgICA8dHVpLWFjY29yZGlvbiBjbGFzcz1cImFjY29yZGlvblwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFt0dWlBY2NvcmRpb25dPVwiaXNPcGVuQWNjb3JkaW9uKClcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDQpNC40LvRjNGC0YDRi1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dHVpLWV4cGFuZD5cbiAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgcGItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChmaWx0ZXIgb2YgZmlsdGVycygpOyB0cmFjayBmaWx0ZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1ib2R5LXMgZm9udC1tZWRpdW1cIj57eyBmaWx0ZXIubGFiZWwgfX08L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpbHRlci5pc011bHRpcGxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBmaWx0ZXIudmFsdWVzOyB0cmFjayB2YWx1ZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGZvcm1Db250cm9sID0gZm9ybS5nZXQoZmlsdGVyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVJhZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1Db250cm9sPy5zZXRWYWx1ZShmb3JtQ29udHJvbD8udmFsdWUgPT09IHZhbHVlLmlkID8gbnVsbCA6IHZhbHVlLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zXCI+e3sgdmFsdWUubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImZpbHRlci5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBmaWx0ZXIudmFsdWVzOyB0cmFjayB2YWx1ZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ2YWx1ZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LXNcIj57eyB2YWx1ZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1pbnB1dC1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCIrZmlsdGVyLm1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIitmaWx0ZXIubWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZpbHRlci50eXBlID09PSAndG9nZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zXCI+0JTQsDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvdHVpLWV4cGFuZD5cbiAgICAgICAgPC90dWktYWNjb3JkaW9uPlxuICAgIDwvZGl2PlxufVxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './sandwich';
|
|
2
|
+
export * from './sandwich_m2';
|
|
2
3
|
export * from './models';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY29uZmlndXJhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2FuZHdpY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW5kd2ljaF9tMic7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './sandwich/sc-i-sandwich-settings';
|
|
2
2
|
export * from './sandwich/sc-i-configurator-search-product-sandwich';
|
|
3
|
-
|
|
3
|
+
export * from './sandwich_m2/sc-i-sandwich-m2-settings';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY29uZmlndXJhdG9ycy9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NhbmR3aWNoL3NjLWktc2FuZHdpY2gtc2V0dGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW5kd2ljaC9zYy1pLWNvbmZpZ3VyYXRvci1zZWFyY2gtcHJvZHVjdC1zYW5kd2ljaCc7XG5leHBvcnQgKiBmcm9tICcuL3NhbmR3aWNoX20yL3NjLWktc2FuZHdpY2gtbTItc2V0dGluZ3MnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zYW5kd2ljaC1tMi1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jb25maWd1cmF0b3JzL21vZGVscy9zYW5kd2ljaF9tMi9zYy1pLXNhbmR3aWNoLW0yLXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY0lDb25maWd1cmF0b3JTZXR0aW5nc0Jhc2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcblxuLyoqXG4gKiDQnNC+0LTQtdC70Ywg0LTQsNC90L3Ri9GFINC90LDRgdGC0YDQvtC10Log0LTQu9GPINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCwINGA0LDRgdC/0LjQu9CwINGB0Y3QvdC00LLQuNGHLdC/0LDQvdC10LvQtdC5INC/0L4g0L/Qu9C+0YnQsNC00LguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJU2FuZHdpY2hNMlNldHRpbmdzIGV4dGVuZHMgU2NJQ29uZmlndXJhdG9yU2V0dGluZ3NCYXNlIHtcbiAgICAvKipcbiAgICAgKiDQnNC40L3QuNC80LDQu9GM0L3QsNGPINGI0LjRgNC40L3QsCDQuNC30LTQtdC70LjRjyDQsiDQvNC40LvQu9C40LzQtdGC0YDQsNGFLlxuICAgICAqL1xuICAgIG1pbldpZHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQnNC40L3QuNC80LDQu9GM0L3QsNGPINC00LvQuNC90LAg0LjQt9C00LXQu9C40Y8g0LIg0LzQuNC70LvQuNC80LXRgtGA0LDRhS5cbiAgICAgKi9cbiAgICBtaW5MZW5ndGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LIg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LUg0YDQsNC30YDQtdGI0LXQvdC+INC/0YDQvtGB0LzQsNGC0YDQuNCy0LDRgtGMINGC0L7QstCw0YDRiyDQsiDQstC40LTQtSDRgtCw0LHQu9C40YbRiy5cbiAgICAgKi9cbiAgICBhbGxvd1Nob3dUYWJsZTogYm9vbGVhbjtcbn1cbiJdfQ==
|