@snabcentr/client-core 3.20.0 → 3.21.0-profstroy
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/catalog/dto/sc-product.d.ts +7 -0
- package/catalog/services/sc-catalog-redirect.service.d.ts +1 -1
- package/config/sc-i-update-interval.d.ts +12 -0
- package/esm2022/auth/services/sc-auth.service.mjs +3 -2
- package/esm2022/catalog/classes/sc-catalog-item.mjs +2 -2
- package/esm2022/catalog/dto/sc-product.mjs +13 -1
- package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +3 -3
- package/esm2022/config/sc-i-update-interval.mjs +1 -1
- package/esm2022/helpers/index.mjs +2 -1
- package/esm2022/helpers/sc-date-helper.mjs +23 -0
- package/esm2022/helpers/sc-units-helper.mjs +3 -2
- package/esm2022/order/classes/index.mjs +3 -1
- package/esm2022/order/classes/sc-order-draft-actualization.mjs +46 -0
- package/esm2022/order/classes/sc-order-draft-short.mjs +7 -2
- package/esm2022/order/classes/sc-order-draft.mjs +15 -3
- package/esm2022/order/classes/sc-order-item.mjs +23 -1
- package/esm2022/order/classes/sc-order-short.mjs +3 -1
- package/esm2022/order/classes/sc-profstroy-order-item.mjs +88 -0
- package/esm2022/order/enums/index.mjs +2 -1
- package/esm2022/order/enums/sc-order-draft-actualization-status.mjs +24 -0
- package/esm2022/order/internal/index.mjs +6 -1
- package/esm2022/order/internal/sc-i-new-profstroy-order-draft-request.mjs +2 -0
- package/esm2022/order/internal/sc-i-order-draft-actualization.mjs +2 -0
- package/esm2022/order/internal/sc-i-order-draft-file.mjs +2 -0
- package/esm2022/order/internal/sc-i-order-draft-short.mjs +1 -1
- package/esm2022/order/internal/sc-i-order-draft.mjs +1 -1
- package/esm2022/order/internal/sc-i-order-short.mjs +1 -1
- package/esm2022/order/internal/sc-i-profstroy-order-item.mjs +2 -0
- package/esm2022/order/internal/sc-i-profstroy-product-stub.mjs +2 -0
- package/esm2022/order/services/sc-order-drafts.service.mjs +122 -11
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/ssr-cache/classes/index.mjs +2 -0
- package/esm2022/ssr-cache/classes/sc-ssr-response-cache.mjs +100 -0
- package/esm2022/ssr-cache/index.mjs +6 -0
- package/esm2022/ssr-cache/interfaces/index.mjs +3 -0
- package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.mjs +2 -0
- package/esm2022/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.mjs +2 -0
- package/esm2022/ssr-cache/internal/is-ssr-response-cacheable.mjs +25 -0
- package/esm2022/ssr-cache/internal/sc-i-ssr-cached-response.mjs +2 -0
- package/esm2022/ssr-cache/sc-ssr-response-cache.backend.mjs +71 -0
- package/esm2022/ssr-cache/sc-ssr-response-cache.providers.mjs +12 -0
- package/esm2022/ssr-cache/tokens/index.mjs +3 -0
- package/esm2022/ssr-cache/tokens/sc-ssr-response-cache-settings.mjs +8 -0
- package/esm2022/ssr-cache/tokens/sc-ssr-response-cache.mjs +13 -0
- package/esm2022/user-metrika/enums/sc-user-metrika-goals-enum.mjs +19 -1
- package/fesm2022/snabcentr-client-core.mjs +625 -57
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/helpers/index.d.ts +1 -0
- package/helpers/sc-date-helper.d.ts +12 -0
- package/helpers/sc-units-helper.d.ts +1 -1
- package/order/classes/index.d.ts +2 -0
- package/order/classes/sc-order-draft-actualization.d.ts +47 -0
- package/order/classes/sc-order-draft-short.d.ts +16 -2
- package/order/classes/sc-order-draft.d.ts +16 -2
- package/order/classes/sc-order-item.d.ts +12 -0
- package/order/classes/sc-order-short.d.ts +4 -0
- package/order/classes/sc-profstroy-order-item.d.ts +73 -0
- package/order/enums/index.d.ts +1 -0
- package/order/enums/sc-order-draft-actualization-status.d.ts +21 -0
- package/order/internal/index.d.ts +5 -0
- package/order/internal/sc-i-new-profstroy-order-draft-request.d.ts +14 -0
- package/order/internal/sc-i-order-draft-actualization.d.ts +22 -0
- package/order/internal/sc-i-order-draft-file.d.ts +13 -0
- package/order/internal/sc-i-order-draft-short.d.ts +15 -0
- package/order/internal/sc-i-order-draft.d.ts +2 -1
- package/order/internal/sc-i-order-short.d.ts +4 -0
- package/order/internal/sc-i-profstroy-order-item.d.ts +28 -0
- package/order/internal/sc-i-profstroy-product-stub.d.ts +13 -0
- package/order/services/sc-order-drafts.service.d.ts +63 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +2 -4
- package/ssr-cache/classes/index.d.ts +1 -0
- package/ssr-cache/classes/sc-ssr-response-cache.d.ts +59 -0
- package/ssr-cache/index.d.ts +5 -0
- package/ssr-cache/interfaces/index.d.ts +2 -0
- package/ssr-cache/interfaces/sc-i-ssr-response-cache-settings.d.ts +17 -0
- package/ssr-cache/interfaces/sc-i-ssr-response-cache-stats.d.ts +17 -0
- package/ssr-cache/internal/is-ssr-response-cacheable.d.ts +14 -0
- package/ssr-cache/internal/sc-i-ssr-cached-response.d.ts +16 -0
- package/ssr-cache/sc-ssr-response-cache.backend.d.ts +42 -0
- package/ssr-cache/sc-ssr-response-cache.providers.d.ts +6 -0
- package/ssr-cache/tokens/index.d.ts +2 -0
- package/ssr-cache/tokens/sc-ssr-response-cache-settings.d.ts +6 -0
- package/ssr-cache/tokens/sc-ssr-response-cache.d.ts +6 -0
- package/user-metrika/enums/sc-user-metrika-goals-enum.d.ts +18 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/* eslint-disable no-param-reassign */
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
3
|
import { HttpClient } from '@angular/common/http';
|
|
3
4
|
import { inject, Injectable } from '@angular/core';
|
|
4
|
-
import { filter, map, of, take, tap } from 'rxjs';
|
|
5
|
+
import { catchError, EMPTY, exhaustMap, filter, map, of, take, tap, timer } from 'rxjs';
|
|
5
6
|
import { ScCartService } from '../../cart';
|
|
6
7
|
import { ScCachedItem } from '../../catalog/classes/sc-cached-item';
|
|
7
|
-
import {
|
|
8
|
+
import { ScConvertersService } from '../../converters/services/sc-converters.service';
|
|
9
|
+
import { SC_DATE_FORMAT, SC_UPDATE_INTERVAL, SC_URLS } from '../../tokens';
|
|
8
10
|
import { SC_USER_INFO } from '../../user/tokens/sc-user-providers';
|
|
9
11
|
import { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '../../user-metrika';
|
|
10
12
|
import { ScOrderDraft, ScOrderDraftShort, ScOrderShort } from '../classes';
|
|
@@ -42,6 +44,18 @@ export class ScOrderDraftsService {
|
|
|
42
44
|
* Сервис для сбора метрик о действиях пользователей.
|
|
43
45
|
*/
|
|
44
46
|
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
47
|
+
/**
|
|
48
|
+
* Форматы дат.
|
|
49
|
+
*/
|
|
50
|
+
this.dateFormats = inject(SC_DATE_FORMAT);
|
|
51
|
+
/**
|
|
52
|
+
* Сервис конвертации данных.
|
|
53
|
+
*/
|
|
54
|
+
this.convertersService = inject(ScConvertersService);
|
|
55
|
+
/**
|
|
56
|
+
* Объект документа.
|
|
57
|
+
*/
|
|
58
|
+
this.document = inject(DOCUMENT);
|
|
45
59
|
/**
|
|
46
60
|
* Коллекция пар ключ-значение для кэшированных коммерческих предложений/черновиков пользователя.
|
|
47
61
|
*/
|
|
@@ -57,17 +71,85 @@ export class ScOrderDraftsService {
|
|
|
57
71
|
*/
|
|
58
72
|
getList$(params) {
|
|
59
73
|
return this.http.get(`${this.urls.apiUrl}/orders/offers`, { params: params }).pipe(map((offersPaginateDTO) => {
|
|
60
|
-
offersPaginateDTO.data = offersPaginateDTO.data.map((item) => new ScOrderDraftShort(item));
|
|
74
|
+
offersPaginateDTO.data = offersPaginateDTO.data.map((item) => new ScOrderDraftShort(item, this.dateFormats.api));
|
|
61
75
|
return offersPaginateDTO;
|
|
62
76
|
}));
|
|
63
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Возвращает краткие данные черновиков с указанными номерами. Используется для лёгкого опроса состояния актуализации без загрузки позиций.
|
|
80
|
+
*
|
|
81
|
+
* @param ids Номера черновиков.
|
|
82
|
+
*/
|
|
83
|
+
getShortList$(ids) {
|
|
84
|
+
const params = { perPage: ids.length, filters: { number: { in: ids } } };
|
|
85
|
+
return this.getList$(this.convertersService.toHttpParams(params, { nonNullable: true })).pipe(map((response) => response.data));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Периодически запрашивает краткие данные черновиков с указанными номерами, пока есть подписка.
|
|
89
|
+
* Пока вкладка браузера скрыта, запросы не выполняются; новый запрос не начинается до завершения предыдущего.
|
|
90
|
+
*
|
|
91
|
+
* @param ids Номера черновиков.
|
|
92
|
+
*/
|
|
93
|
+
watchShortList$(ids) {
|
|
94
|
+
return this.poll$(this.updateInterval.orderDraftStatus, () => this.getShortList$(ids));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Периодически перезапрашивает страницу списка черновиков в фоне, пока есть подписка. Условия запросов как у {@link watchShortList$}.
|
|
98
|
+
*
|
|
99
|
+
* @param params Параметры запроса получения списка.
|
|
100
|
+
*/
|
|
101
|
+
watchList$(params) {
|
|
102
|
+
return this.poll$(this.updateInterval.orderDraftsList, () => this.getList$(params).pipe(map((response) => response.data)));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Создаёт черновик заказа из файла программы «Профстрой» и запускает его обработку.
|
|
106
|
+
*
|
|
107
|
+
* @param data Данные для создания.
|
|
108
|
+
*/
|
|
109
|
+
createProfstroy$(data) {
|
|
110
|
+
return this.http.post(`${this.urls.apiUrl}/orders/offers/profstroy`, data).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
111
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
112
|
+
target: ScUserMetrikaGoalsEnum.orderDraftProfstroyCreated,
|
|
113
|
+
params: { offer_id: offer.id },
|
|
114
|
+
});
|
|
115
|
+
this.offerMap.set(offer.id, new ScCachedItem(this.updateInterval.orderData, of(offer), loadingPlaceholder));
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Запускает актуализацию черновика Профстрой (повторный обмен с 1С по текущему составу).
|
|
120
|
+
*
|
|
121
|
+
* @param offerId Идентификатор черновика.
|
|
122
|
+
*/
|
|
123
|
+
actualizeProfstroy$(offerId) {
|
|
124
|
+
return this.http.post(`${this.urls.apiUrl}/orders/offers/${offerId}/profstroy/actualize`, {}).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
125
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
126
|
+
target: ScUserMetrikaGoalsEnum.orderDraftProfstroyActualized,
|
|
127
|
+
params: { offer_id: offerId },
|
|
128
|
+
});
|
|
129
|
+
this.offerMap.get(offerId)?.setValue(offer);
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Запускает пересборку черновика Профстрой из ранее загруженного файла.
|
|
134
|
+
*
|
|
135
|
+
* @param offerId Идентификатор черновика.
|
|
136
|
+
*/
|
|
137
|
+
reloadProfstroy$(offerId) {
|
|
138
|
+
return this.http.post(`${this.urls.apiUrl}/orders/offers/${offerId}/profstroy/reload`, {}).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
139
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
140
|
+
target: ScUserMetrikaGoalsEnum.orderDraftProfstroyReloaded,
|
|
141
|
+
params: { offer_id: offerId },
|
|
142
|
+
});
|
|
143
|
+
this.offerMap.get(offerId)?.setValue(offer);
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
64
146
|
/**
|
|
65
147
|
* Создаёт новое коммерческое предложение/черновик заказа.
|
|
66
148
|
*
|
|
67
149
|
* @param data Данные для создания.
|
|
68
150
|
*/
|
|
69
151
|
create$(data) {
|
|
70
|
-
return this.http.post(`${this.urls.apiUrl}/orders/offers`, data).pipe(map((offerDTO) => new ScOrderDraft(offerDTO)), tap((offer) => {
|
|
152
|
+
return this.http.post(`${this.urls.apiUrl}/orders/offers`, data).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
71
153
|
this.userMetrikaService.emitUserMetrikaEvent({
|
|
72
154
|
target: ScUserMetrikaGoalsEnum.orderDraftCreated,
|
|
73
155
|
params: { offer_id: offer.id },
|
|
@@ -85,7 +167,7 @@ export class ScOrderDraftsService {
|
|
|
85
167
|
get$(draftId, cacheable = true) {
|
|
86
168
|
let cachedItem = this.offerMap.get(draftId);
|
|
87
169
|
if (!cachedItem) {
|
|
88
|
-
cachedItem = new ScCachedItem(this.updateInterval.orderData, this.http.get(`${this.urls.apiUrl}/orders/offers/${draftId}`).pipe(map((data) => new ScOrderDraft(data))), loadingPlaceholder);
|
|
170
|
+
cachedItem = new ScCachedItem(this.updateInterval.orderData, this.http.get(`${this.urls.apiUrl}/orders/offers/${draftId}`).pipe(map((data) => new ScOrderDraft(data, this.dateFormats.api))), loadingPlaceholder);
|
|
89
171
|
if (cacheable) {
|
|
90
172
|
this.offerMap.set(draftId, cachedItem);
|
|
91
173
|
}
|
|
@@ -95,6 +177,22 @@ export class ScOrderDraftsService {
|
|
|
95
177
|
}
|
|
96
178
|
return cachedItem.item$;
|
|
97
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Запрашивает полную информацию о черновике в обход кэша и обновляет кэш полученными данными.
|
|
182
|
+
*
|
|
183
|
+
* @param draftId Идентификатор записи.
|
|
184
|
+
*/
|
|
185
|
+
fetch$(draftId) {
|
|
186
|
+
return this.http.get(`${this.urls.apiUrl}/orders/offers/${draftId}`).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
187
|
+
const cachedItem = this.offerMap.get(draftId);
|
|
188
|
+
if (cachedItem) {
|
|
189
|
+
cachedItem.setValue(offer);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.offerMap.set(draftId, new ScCachedItem(this.updateInterval.orderData, of(offer), loadingPlaceholder));
|
|
193
|
+
}
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
98
196
|
/**
|
|
99
197
|
* Возвращает список элементов коммерческого предложения/черновика.
|
|
100
198
|
*
|
|
@@ -111,7 +209,7 @@ export class ScOrderDraftsService {
|
|
|
111
209
|
*/
|
|
112
210
|
update$(draftId, patch) {
|
|
113
211
|
const cachedItem = this.offerMap.get(draftId);
|
|
114
|
-
return this.http.patch(`${this.urls.apiUrl}/orders/offers/${draftId}`, patch).pipe(map((offerDTO) => new ScOrderDraft(offerDTO)), tap((offer) => {
|
|
212
|
+
return this.http.patch(`${this.urls.apiUrl}/orders/offers/${draftId}`, patch).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
115
213
|
this.userMetrikaService.emitUserMetrikaEvent({
|
|
116
214
|
target: ScUserMetrikaGoalsEnum.orderDraftUpdated,
|
|
117
215
|
params: { offer_id: draftId },
|
|
@@ -150,6 +248,15 @@ export class ScOrderDraftsService {
|
|
|
150
248
|
this.removeOrderedProductsFromCache(offerId, data.items ?? []);
|
|
151
249
|
}));
|
|
152
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Выполняет запрос с указанным интервалом, пока вкладка браузера видна. Новый запрос не начинается до завершения предыдущего, ошибки пропускаются.
|
|
253
|
+
*
|
|
254
|
+
* @param period Интервал запросов (ms).
|
|
255
|
+
* @param request Функция, возвращающая запрос.
|
|
256
|
+
*/
|
|
257
|
+
poll$(period, request) {
|
|
258
|
+
return timer(period, period).pipe(filter(() => this.document.visibilityState !== 'hidden'), exhaustMap(() => request().pipe(catchError(() => EMPTY))));
|
|
259
|
+
}
|
|
153
260
|
/**
|
|
154
261
|
* Убирает заказанные позиции из кэша черновика локально (сервер сразу после заказа ещё может вернуть их в списке).
|
|
155
262
|
*
|
|
@@ -167,11 +274,15 @@ export class ScOrderDraftsService {
|
|
|
167
274
|
return;
|
|
168
275
|
}
|
|
169
276
|
const currentDraft = draft;
|
|
277
|
+
// Из черновика Профстрой позиции после оформления заказа не удаляются.
|
|
278
|
+
if (currentDraft.isProfstroy) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
170
281
|
const remainingProducts = currentDraft.products.filter((product) => !orderedIds.has(product.id));
|
|
171
282
|
if (remainingProducts.length === currentDraft.products.length) {
|
|
172
283
|
return;
|
|
173
284
|
}
|
|
174
|
-
const updatedDraft = new ScOrderDraft(currentDraft);
|
|
285
|
+
const updatedDraft = new ScOrderDraft(currentDraft, this.dateFormats.api);
|
|
175
286
|
updatedDraft.products = remainingProducts;
|
|
176
287
|
updatedDraft.sum = remainingProducts.reduce((sum, product) => sum + product.costRub, 0);
|
|
177
288
|
cachedItem.setValue(updatedDraft);
|
|
@@ -184,7 +295,7 @@ export class ScOrderDraftsService {
|
|
|
184
295
|
* @param offerId Идентификатор коммерческого предложения/черновика.
|
|
185
296
|
*/
|
|
186
297
|
addProduct$(productData, offerId) {
|
|
187
|
-
return this.http.post(`${this.urls.apiUrl}/orders/offers/${offerId}/products`, productData).pipe(map((offerDTO) => new ScOrderDraft(offerDTO)), tap((offer) => {
|
|
298
|
+
return this.http.post(`${this.urls.apiUrl}/orders/offers/${offerId}/products`, productData).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
188
299
|
if (this.offerMap.has(offerId)) {
|
|
189
300
|
this.offerMap.get(offerId)?.setValue(offer);
|
|
190
301
|
}
|
|
@@ -198,7 +309,7 @@ export class ScOrderDraftsService {
|
|
|
198
309
|
* @param offerId Идентификатор коммерческого предложения/черновика.
|
|
199
310
|
*/
|
|
200
311
|
updateProduct$(productId, patch, offerId) {
|
|
201
|
-
return this.http.patch(`${this.urls.apiUrl}/orders/offers/${offerId}/products/${productId}`, patch).pipe(map((offerDTO) => new ScOrderDraft(offerDTO)), tap((offer) => {
|
|
312
|
+
return this.http.patch(`${this.urls.apiUrl}/orders/offers/${offerId}/products/${productId}`, patch).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
202
313
|
if (this.offerMap.has(offerId)) {
|
|
203
314
|
this.offerMap.get(offerId)?.setValue(offer);
|
|
204
315
|
}
|
|
@@ -211,7 +322,7 @@ export class ScOrderDraftsService {
|
|
|
211
322
|
* @param offerId Идентификатор коммерческого предложения/черновика.
|
|
212
323
|
*/
|
|
213
324
|
deleteProduct$(item, offerId) {
|
|
214
|
-
return this.http.delete(`${this.urls.apiUrl}/orders/offers/${offerId}/products/${item.id}`).pipe(map((offerDTO) => new ScOrderDraft(offerDTO)), tap((offer) => {
|
|
325
|
+
return this.http.delete(`${this.urls.apiUrl}/orders/offers/${offerId}/products/${item.id}`).pipe(map((offerDTO) => new ScOrderDraft(offerDTO, this.dateFormats.api)), tap((offer) => {
|
|
215
326
|
if (this.offerMap.has(offerId)) {
|
|
216
327
|
this.offerMap.get(offerId)?.setValue(offer);
|
|
217
328
|
}
|
|
@@ -226,4 +337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
226
337
|
providedIn: 'root',
|
|
227
338
|
}]
|
|
228
339
|
}], ctorParameters: () => [] });
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItZHJhZnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL29yZGVyL3NlcnZpY2VzL3NjLW9yZGVyLWRyYWZ0cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFrQixNQUFNLGlDQUFpQyxDQUFDOztBQUVyRjs7R0FFRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFvQzdCOztPQUVHO0lBQ0g7UUF0Q0E7O1dBRUc7UUFDYyxTQUFJLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXZEOztXQUVHO1FBQ2MsU0FBSSxHQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRDs7V0FFRztRQUNjLFVBQUssR0FBdUIsTUFBTSxDQUFD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RUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYXJ0JztcbmltcG9ydCB7IFNjQ2FjaGVkSXRlbSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvY2xhc3Nlcy9zYy1jYWNoZWQtaXRlbSc7XG5pbXBvcnQgeyBTY0lVcGRhdGVJbnRlcnZhbCwgU2NJVXJscyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBTY0lQYWdpbmF0ZSB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgU0NfVVBEQVRFX0lOVEVSVkFMLCBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IFNjVXNlciB9IGZyb20gJy4uLy4uL3VzZXIvZHRvL3NjLXVzZXInO1xuaW1wb3J0IHsgU0NfVVNFUl9JTkZPIH0gZnJvbSAnLi4vLi4vdXNlci90b2tlbnMvc2MtdXNlci1wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLW1ldHJpa2EnO1xuaW1wb3J0IHsgU2NPcmRlckRyYWZ0LCBTY09yZGVyRHJhZnRTaG9ydCwgU2NPcmRlclNob3J0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBTY09yZGVySXRlbSB9IGZyb20gJy4uL2NsYXNzZXMvc2Mtb3JkZXItaXRlbSc7XG5pbXBvcnQgeyBTY0lPcmRlckRyYWZ0LCBTY0lPcmRlckRyYWZ0U2hvcnQsIFNjSU9yZGVyRWRpdG9yTG9hZGVyLCBTY0lPcmRlclNob3J0IH0gZnJvbSAnLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgU2NJTmV3T3JkZXIgfSBmcm9tICcuLi9pbnRlcm5hbC9zYy1pLW5ldy1vcmRlcic7XG5pbXBvcnQgeyBTY0lOZXdPcmRlckRyYWZ0UmVxdWVzdCB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktbmV3LW9yZGVyLWRyYWZ0LXJlcXVlc3QnO1xuaW1wb3J0IHsgU2NJTmV3T3JkZXJJdGVtQmFzZSB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktbmV3LW9yZGVyLWl0ZW0tYmFzZSc7XG5pbXBvcnQgeyBTY0lVcGRhdGVPcmRlckRyYWZ0UmVxdWVzdCB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktdXBkYXRlLW9yZGVyLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHsgbG9hZGluZ1BsYWNlaG9sZGVyLCBTY09yZGVyTG9hZGluZyB9IGZyb20gJy4uL3Rva2Vucy9zYy1vcmRlci1sb2FkZXIudG9rZW4nO1xuXG4vKipcbiAqINCU0LDQvdC90YvQtSDQviDRgdC10YDQstC40YHQtSDQutC+0LzQvNC10YDRh9C10YHQutC40YUg0L/RgNC10LTQu9C+0LbQtdC90LjQuSDQuCDRh9C10YDQvdC+0LLQuNC60L7QsiDQt9Cw0LrQsNC30L7Qsi5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckRyYWZ0c1NlcnZpY2UgaW1wbGVtZW50cyBTY0lPcmRlckVkaXRvckxvYWRlcjxTY09yZGVySXRlbSwgU2NPcmRlckRyYWZ0PiB7XG4gICAgLyoqXG4gICAgICogSFRUUC3QutC70LjQtdC90YIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LTQsNC90L3Ri9GFINC+INGC0LXQutGD0YnQtdC8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPFNjVXNlcj4gPSBpbmplY3QoU0NfVVNFUl9JTkZPKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0LvRiyDQvtCx0L3QvtCy0LvQtdC90LjRjyDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVJbnRlcnZhbDogU2NJVXBkYXRlSW50ZXJ2YWwgPSBpbmplY3QoU0NfVVBEQVRFX0lOVEVSVkFMKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60L7RgNC30LjQvdC+0LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXJ0U2VydmljZTogU2NDYXJ0U2VydmljZSA9IGluamVjdChTY0NhcnRTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSA9IGluamVjdChTY1VzZXJNZXRyaWthU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60Y3RiNC40YDQvtCy0LDQvdC90YvRhSDQutC+0LzQvNC10YDRh9C10YHQutC40YUg0L/RgNC10LTQu9C+0LbQtdC90LjQuS/Rh9C10YDQvdC+0LLQuNC60L7QsiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvZmZlck1hcDogTWFwPG51bWJlciwgU2NDYWNoZWRJdGVtPFNjT3JkZXJEcmFmdCwgU2NPcmRlckxvYWRpbmc+PiA9IG5ldyBNYXA8bnVtYmVyLCBTY0NhY2hlZEl0ZW08U2NPcmRlckRyYWZ0LCBTY09yZGVyTG9hZGluZz4+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjT3JkZXJEcmFmdHNTZXJ2aWNlfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudXNlciQucGlwZShmaWx0ZXIoKHVzZXIpID0+IHVzZXIuaXNHdWVzdCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9mZmVyTWFwLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDQutC+0LzQvNC10YDRh9C10YHQutC40YUg0L/RgNC10LTQu9C+0LbQtdC90LjQuS/Rh9C10YDQvdC+0LLQuNC60L7QsiDRgSDQv9Cw0LPQuNC90LDRhtC40LXQuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXMg0J/QsNGA0LDQvNC10YLRgNGLINC30LDQv9GA0L7RgdCwINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAuXG4gICAgICovXG4gICAgcHVibGljIGdldExpc3QkKHBhcmFtczogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8U2NJUGFnaW5hdGU8U2NPcmRlckRyYWZ0U2hvcnQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNjSVBhZ2luYXRlPFNjSU9yZGVyRHJhZnRTaG9ydD4+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnNgLCB7IHBhcmFtczogcGFyYW1zIH0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9mZmVyc1BhZ2luYXRlRFRPKSA9PiB7XG4gICAgICAgICAgICAgICAgb2ZmZXJzUGFnaW5hdGVEVE8uZGF0YSA9IG9mZmVyc1BhZ2luYXRlRFRPLmRhdGEubWFwKChpdGVtKSA9PiBuZXcgU2NPcmRlckRyYWZ0U2hvcnQoaXRlbSkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mZmVyc1BhZ2luYXRlRFRPIGFzIFNjSVBhZ2luYXRlPFNjT3JkZXJEcmFmdFNob3J0PjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0L3QvtCy0L7QtSDQutC+0LzQvNC10YDRh9C10YHQutC+0LUg0L/RgNC10LTQu9C+0LbQtdC90LjQtS/Rh9C10YDQvdC+0LLQuNC6INC30LDQutCw0LfQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhINCU0LDQvdC90YvQtSDQtNC70Y8g0YHQvtC30LTQsNC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlJChkYXRhOiBTY0lOZXdPcmRlckRyYWZ0UmVxdWVzdCk6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTY0lPcmRlckRyYWZ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzYCwgZGF0YSkucGlwZShcbiAgICAgICAgICAgIG1hcCgob2ZmZXJEVE8pID0+IG5ldyBTY09yZGVyRHJhZnQob2ZmZXJEVE8pKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5vcmRlckRyYWZ0Q3JlYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IG9mZmVyX2lkOiBvZmZlci5pZCB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlQ2FydCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmZXJNYXAuc2V0KG9mZmVyLmlkLCBuZXcgU2NDYWNoZWRJdGVtKHRoaXMudXBkYXRlSW50ZXJ2YWwub3JkZXJEYXRhLCBvZihvZmZlciksIGxvYWRpbmdQbGFjZWhvbGRlcikpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9C+0LvQvdGD0Y4g0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LrQvtC80LzQtdGA0YfQtdGB0LrQvtC8INC/0YDQtdC00LvQvtC20LXQvdC40Lgv0YfQtdGA0L3QvtCy0LjQutC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRyYWZ0SWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC/0LjRgdC4LlxuICAgICAqIEBwYXJhbSBjYWNoZWFibGUg0J/RgNC40LfQvdCw0Log0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQv9C+0LvRg9GH0LXQvdC40Y8g0LjQtyDQutGN0YjQuNGA0L7QstCw0L3QvdGL0YUg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQkKGRyYWZ0SWQ6IG51bWJlciwgY2FjaGVhYmxlOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0IHwgU2NPcmRlckxvYWRpbmc+IHtcbiAgICAgICAgbGV0IGNhY2hlZEl0ZW0gPSB0aGlzLm9mZmVyTWFwLmdldChkcmFmdElkKTtcblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0gPSBuZXcgU2NDYWNoZWRJdGVtKFxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwub3JkZXJEYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8U2NJT3JkZXJEcmFmdD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy8ke2RyYWZ0SWR9YCkucGlwZShtYXAoKGRhdGEpID0+IG5ldyBTY09yZGVyRHJhZnQoZGF0YSkpKSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nUGxhY2Vob2xkZXJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChjYWNoZWFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZmVyTWFwLnNldChkcmFmdElkLCBjYWNoZWRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWFibGUgJiYgIWNhY2hlZEl0ZW0uY2FjaGVkRGF0YUlzQWN0dWFsKCkpIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0udXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC/0LjRgdC+0Log0Y3Qu9C10LzQtdC90YLQvtCyINC60L7QvNC80LXRgNGH0LXRgdC60L7Qs9C+INC/0YDQtdC00LvQvtC20LXQvdC40Y8v0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60L7QvNC80LXRgNGH0LXRgdC60L7Qs9C+INC/0YDQtdC00LvQvtC20LXQvdC40Y8v0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtcyQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8U2NPcmRlckl0ZW1bXSB8IFNjT3JkZXJMb2FkaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCQoaWQpLnBpcGUobWFwKChkcmFmdCkgPT4gKGRyYWZ0ID09PSBsb2FkaW5nUGxhY2Vob2xkZXIgPyBsb2FkaW5nUGxhY2Vob2xkZXIgOiAoZHJhZnQgYXMgU2NPcmRlckRyYWZ0KS5wcm9kdWN0cykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LTQsNC90L3Ri9C1INC60L7QvNC80LXRgNGH0LXRgdC60L7Qs9C+INC/0YDQtdC00LvQvtC20LXQvdC40Y8v0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRyYWZ0SWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC/0LjRgdC4LlxuICAgICAqIEBwYXJhbSBwYXRjaCDQlNCw0L3QvdGL0LUg0LTQu9GPINC+0LHQvdC+0LLQu9C10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUkKGRyYWZ0SWQ6IG51bWJlciwgcGF0Y2g6IFNjSVVwZGF0ZU9yZGVyRHJhZnRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxTY09yZGVyRHJhZnQ+IHtcbiAgICAgICAgY29uc3QgY2FjaGVkSXRlbSA9IHRoaXMub2ZmZXJNYXAuZ2V0KGRyYWZ0SWQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8U2NJT3JkZXJEcmFmdD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy8ke2RyYWZ0SWR9YCwgcGF0Y2gpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9mZmVyRFRPKSA9PiBuZXcgU2NPcmRlckRyYWZ0KG9mZmVyRFRPKSksXG4gICAgICAgICAgICB0YXAoKG9mZmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0ub3JkZXJEcmFmdFVwZGF0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBvZmZlcl9pZDogZHJhZnRJZCB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNhY2hlZEl0ZW0/LnNldFZhbHVlKG9mZmVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0LrQvtC80LzQtdGA0YfQtdGB0LrQvtC1INC/0YDQtdC00LvQvtC20LXQvdC40LUv0YfQtdGA0L3QvtCy0LjQui5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZlcklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC30LDQv9C40YHQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlJChvZmZlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx1bmRlZmluZWQ+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnMvJHtvZmZlcklkfWApLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLm9yZGVyRHJhZnREZWxldGVkLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgb2ZmZXJfaWQ6IG9mZmVySWQgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZmVyTWFwLmRlbGV0ZShvZmZlcklkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC60LDQtyDQvdCwINC+0YHQvdC+0LLQtSDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZlcklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC30LDQv9C40YHQuC5cbiAgICAgKiBAcGFyYW0gZGF0YSDQlNCw0L3QvdGL0LUg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVPcmRlciQob2ZmZXJJZDogbnVtYmVyLCBkYXRhOiBTY0lOZXdPcmRlcik6IE9ic2VydmFibGU8U2NPcmRlclNob3J0W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNjSU9yZGVyU2hvcnRbXT4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy8ke29mZmVySWR9L2NyZWF0ZS1vcmRlcmAsIGRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9yZGVycykgPT4gb3JkZXJzLm1hcCgoaXRlbSkgPT4gbmV3IFNjT3JkZXJTaG9ydChpdGVtKSkpLFxuICAgICAgICAgICAgdGFwKChvcmRlcnM6IFNjT3JkZXJTaG9ydFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgb3JkZXJzLmZvckVhY2goKG9yZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5vcmRlckNyZWF0ZWRGcm9tRHJhZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgb2ZmZXJfaWQ6IG9mZmVySWQsIG9yZGVyX2lkOiBvcmRlci5pZCB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlT3JkZXJlZFByb2R1Y3RzRnJvbUNhY2hlKG9mZmVySWQsIGRhdGEuaXRlbXMgPz8gW10pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9Cx0LjRgNCw0LXRgiDQt9Cw0LrQsNC30LDQvdC90YvQtSDQv9C+0LfQuNGG0LjQuCDQuNC3INC60Y3RiNCwINGH0LXRgNC90L7QstC40LrQsCDQu9C+0LrQsNC70YzQvdC+ICjRgdC10YDQstC10YAg0YHRgNCw0LfRgyDQv9C+0YHQu9C1INC30LDQutCw0LfQsCDQtdGJ0ZEg0LzQvtC20LXRgiDQstC10YDQvdGD0YLRjCDQuNGFINCyINGB0L/QuNGB0LrQtSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2ZmZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRh9C10YDQvdC+0LLQuNC60LAuXG4gICAgICogQHBhcmFtIG9yZGVyZWRJdGVtSWRzINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LfQsNC60LDQt9Cw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVPcmRlcmVkUHJvZHVjdHNGcm9tQ2FjaGUob2ZmZXJJZDogbnVtYmVyLCBvcmRlcmVkSXRlbUlkczogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPik6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWNoZWRJdGVtID0gdGhpcy5vZmZlck1hcC5nZXQob2ZmZXJJZCk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtIHx8IG9yZGVyZWRJdGVtSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXJlZElkcyA9IG5ldyBTZXQob3JkZXJlZEl0ZW1JZHMubWFwKFN0cmluZykpO1xuXG4gICAgICAgIGNhY2hlZEl0ZW0uaXRlbSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGRyYWZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZHJhZnQgPT09IGxvYWRpbmdQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3VycmVudERyYWZ0ID0gZHJhZnQgYXMgU2NPcmRlckRyYWZ0O1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nUHJvZHVjdHMgPSBjdXJyZW50RHJhZnQucHJvZHVjdHMuZmlsdGVyKChwcm9kdWN0KSA9PiAhb3JkZXJlZElkcy5oYXMocHJvZHVjdC5pZCkpO1xuXG4gICAgICAgICAgICBpZiAocmVtYWluaW5nUHJvZHVjdHMubGVuZ3RoID09PSBjdXJyZW50RHJhZnQucHJvZHVjdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRHJhZnQgPSBuZXcgU2NPcmRlckRyYWZ0KGN1cnJlbnREcmFmdCk7XG4gICAgICAgICAgICB1cGRhdGVkRHJhZnQucHJvZHVjdHMgPSByZW1haW5pbmdQcm9kdWN0cztcbiAgICAgICAgICAgIHVwZGF0ZWREcmFmdC5zdW0gPSByZW1haW5pbmdQcm9kdWN0cy5yZWR1Y2UoKHN1bSwgcHJvZHVjdCkgPT4gc3VtICsgcHJvZHVjdC5jb3N0UnViLCAwKTtcblxuICAgICAgICAgICAgY2FjaGVkSXRlbS5zZXRWYWx1ZSh1cGRhdGVkRHJhZnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQlNC+0LHQsNCy0LvRj9C10YIg0L/RgNC+0LTRg9C60YIg0LIg0LrQvtC80LzQtdGA0YfQtdGB0LrQvtC1INC/0YDQtdC00LvQvtC20LXQvdC40LUv0YfQtdGA0L3QvtCy0LjQui5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0RGF0YSDQlNCw0L3QvdGL0LUg0L/RgNC+0LTRg9C60YLQsCDQtNC70Y8g0LTQvtCx0LDQstC70LXQvdC40Y8uXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQvtC80LzQtdGA0YfQtdGB0LrQvtCz0L4g0L/RgNC10LTQu9C+0LbQtdC90LjRjy/Rh9C10YDQvdC+0LLQuNC60LAuXG4gICAgICovXG4gICAgcHVibGljIGFkZFByb2R1Y3QkKHByb2R1Y3REYXRhOiBTY0lOZXdPcmRlckl0ZW1CYXNlLCBvZmZlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFNjT3JkZXJEcmFmdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2NJT3JkZXJEcmFmdD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy8ke29mZmVySWR9L3Byb2R1Y3RzYCwgcHJvZHVjdERhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9mZmVyRFRPKSA9PiBuZXcgU2NPcmRlckRyYWZ0KG9mZmVyRFRPKSksXG4gICAgICAgICAgICB0YXAoKG9mZmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2ZmZXJNYXAuaGFzKG9mZmVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmZXJNYXAuZ2V0KG9mZmVySWQpPy5zZXRWYWx1ZShvZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmNC30LzQtdC90Y/QtdGCINC/0YDQvtC00YPQutGCINCyINC60L7QvNC80LXRgNGH0LXRgdC60L7QvCDQv9GA0LXQtNC70L7QttC10L3QuNC4L9GH0LXRgNC90L7QstC40LrQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0SWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L/RgNC+0LTRg9C60YLQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKiBAcGFyYW0gcGF0Y2gg0KfQsNGB0YLQuNGH0L3Ri9C1INC00LDQvdC90YvQtSDQtNC70Y8g0L7QsdC90L7QstC70LXQvdC40Y8uXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQvtC80LzQtdGA0YfQtdGB0LrQvtCz0L4g0L/RgNC10LTQu9C+0LbQtdC90LjRjy/Rh9C10YDQvdC+0LLQuNC60LAuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVByb2R1Y3QkKHByb2R1Y3RJZDogc3RyaW5nLCBwYXRjaDogT21pdDxTY0lOZXdPcmRlckl0ZW1CYXNlLCAncHJvZHVjdElkJz4sIG9mZmVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8U2NJT3JkZXJEcmFmdD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy8ke29mZmVySWR9L3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsIHBhdGNoKS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTykpLFxuICAgICAgICAgICAgdGFwKChvZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9mZmVyTWFwLmhhcyhvZmZlcklkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZmVyTWFwLmdldChvZmZlcklkKT8uc2V0VmFsdWUob2ZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0L/RgNC+0LTRg9C60YIg0LjQtyDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCj0LTQsNC70Y/QtdC80LDRjyDQv9C+0LfQuNGG0LjRjy5cbiAgICAgKiBAcGFyYW0gb2ZmZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlUHJvZHVjdCQoaXRlbTogU2NPcmRlckl0ZW0sIG9mZmVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFNjSU9yZGVyRHJhZnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnMvJHtvZmZlcklkfS9wcm9kdWN0cy8ke2l0ZW0uaWR9YCkucGlwZShcbiAgICAgICAgICAgIG1hcCgob2ZmZXJEVE8pID0+IG5ldyBTY09yZGVyRHJhZnQob2ZmZXJEVE8pKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vZmZlck1hcC5oYXMob2ZmZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZlck1hcC5nZXQob2ZmZXJJZCk/LnNldFZhbHVlKG9mZmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItZHJhZnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL29yZGVyL3NlcnZpY2VzL3NjLW9yZGVyLWRyYWZ0cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUV0RixPQUFPLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFrQixNQUFNLGlDQUFpQyxDQUFDOztBQUVyRjs7R0FFRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFtRDdCOztPQUVHO0lBQ0g7UUFy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LENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ25FLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQS9ZUSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzs0RkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgRU1QVFksIGV4aGF1c3RNYXAsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGFrZSwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0NhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FydCc7XG5pbXBvcnQgeyBTY0NhY2hlZEl0ZW0gfSBmcm9tICcuLi8uLi9jYXRhbG9nL2NsYXNzZXMvc2MtY2FjaGVkLWl0ZW0nO1xuaW1wb3J0IHsgU2NJRGF0ZUZvcm1hdCwgU2NJVXBkYXRlSW50ZXJ2YWwsIFNjSVVybHMgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHsgU2NDb252ZXJ0ZXJzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnZlcnRlcnMvc2VydmljZXMvc2MtY29udmVydGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IFNjSVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBTQ19EQVRFX0ZPUk1BVCwgU0NfVVBEQVRFX0lOVEVSVkFMLCBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IFNjVXNlciB9IGZyb20gJy4uLy4uL3VzZXIvZHRvL3NjLXVzZXInO1xuaW1wb3J0IHsgU0NfVVNFUl9JTkZPIH0gZnJvbSAnLi4vLi4vdXNlci90b2tlbnMvc2MtdXNlci1wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLW1ldHJpa2EnO1xuaW1wb3J0IHsgU2NPcmRlckRyYWZ0LCBTY09yZGVyRHJhZnRTaG9ydCwgU2NPcmRlclNob3J0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBTY09yZGVySXRlbSB9IGZyb20gJy4uL2NsYXNzZXMvc2Mtb3JkZXItaXRlbSc7XG5pbXBvcnQgeyBTY0lOZXdQcm9mc3Ryb3lPcmRlckRyYWZ0UmVxdWVzdCwgU2NJT3JkZXJEcmFmdCwgU2NJT3JkZXJEcmFmdExpc3RQYXJhbXMsIFNjSU9yZGVyRHJhZnRTaG9ydCwgU2NJT3JkZXJFZGl0b3JMb2FkZXIsIFNjSU9yZGVyU2hvcnQgfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBTY0lOZXdPcmRlciB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktbmV3LW9yZGVyJztcbmltcG9ydCB7IFNjSU5ld09yZGVyRHJhZnRSZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZXJuYWwvc2MtaS1uZXctb3JkZXItZHJhZnQtcmVxdWVzdCc7XG5pbXBvcnQgeyBTY0lOZXdPcmRlckl0ZW1CYXNlIH0gZnJvbSAnLi4vaW50ZXJuYWwvc2MtaS1uZXctb3JkZXItaXRlbS1iYXNlJztcbmltcG9ydCB7IFNjSVVwZGF0ZU9yZGVyRHJhZnRSZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZXJuYWwvc2MtaS11cGRhdGUtb3JkZXItb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQgeyBsb2FkaW5nUGxhY2Vob2xkZXIsIFNjT3JkZXJMb2FkaW5nIH0gZnJvbSAnLi4vdG9rZW5zL3NjLW9yZGVyLWxvYWRlci50b2tlbic7XG5cbi8qKlxuICog0JTQsNC90L3Ri9C1INC+INGB0LXRgNCy0LjRgdC1INC60L7QvNC80LXRgNGH0LXRgdC60LjRhSDQv9GA0LXQtNC70L7QttC10L3QuNC5INC4INGH0LXRgNC90L7QstC40LrQvtCyINC30LDQutCw0LfQvtCyLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY09yZGVyRHJhZnRzU2VydmljZSBpbXBsZW1lbnRzIFNjSU9yZGVyRWRpdG9yTG9hZGVyPFNjT3JkZXJJdGVtLCBTY09yZGVyRHJhZnQ+IHtcbiAgICAvKipcbiAgICAgKiBIVFRQLdC60LvQuNC10L3Rgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyA9IGluamVjdChTQ19VUkxTKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQtNCw0L3QvdGL0YUg0L4g0YLQtdC60YPRidC10Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlciQ6IE9ic2VydmFibGU8U2NVc2VyPiA9IGluamVjdChTQ19VU0VSX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdGC0LXRgNCy0LDQu9GLINC+0LHQvdC+0LLQu9C10L3QuNGPINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZUludGVydmFsOiBTY0lVcGRhdGVJbnRlcnZhbCA9IGluamVjdChTQ19VUERBVEVfSU5URVJWQUwpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LrQvtGA0LfQuNC90L7QuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcnRTZXJ2aWNlOiBTY0NhcnRTZXJ2aWNlID0gaW5qZWN0KFNjQ2FydFNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlID0gaW5qZWN0KFNjVXNlck1ldHJpa2FTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCk0L7RgNC80LDRgtGLINC00LDRgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVGb3JtYXRzOiBTY0lEYXRlRm9ybWF0ID0gaW5qZWN0KFNDX0RBVEVfRk9STUFUKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjQ29udmVydGVyc1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGK0LXQutGCINC00L7QutGD0LzQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60Y3RiNC40YDQvtCy0LDQvdC90YvRhSDQutC+0LzQvNC10YDRh9C10YHQutC40YUg0L/RgNC10LTQu9C+0LbQtdC90LjQuS/Rh9C10YDQvdC+0LLQuNC60L7QsiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvZmZlck1hcDogTWFwPG51bWJlciwgU2NDYWNoZWRJdGVtPFNjT3JkZXJEcmFmdCwgU2NPcmRlckxvYWRpbmc+PiA9IG5ldyBNYXA8bnVtYmVyLCBTY0NhY2hlZEl0ZW08U2NPcmRlckRyYWZ0LCBTY09yZGVyTG9hZGluZz4+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjT3JkZXJEcmFmdHNTZXJ2aWNlfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudXNlciQucGlwZShmaWx0ZXIoKHVzZXIpID0+IHVzZXIuaXNHdWVzdCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9mZmVyTWFwLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDQutC+0LzQvNC10YDRh9C10YHQutC40YUg0L/RgNC10LTQu9C+0LbQtdC90LjQuS/Rh9C10YDQvdC+0LLQuNC60L7QsiDRgSDQv9Cw0LPQuNC90LDRhtC40LXQuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXMg0J/QsNGA0LDQvNC10YLRgNGLINC30LDQv9GA0L7RgdCwINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAuXG4gICAgICovXG4gICAgcHVibGljIGdldExpc3QkKHBhcmFtczogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8U2NJUGFnaW5hdGU8U2NPcmRlckRyYWZ0U2hvcnQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNjSVBhZ2luYXRlPFNjSU9yZGVyRHJhZnRTaG9ydD4+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnNgLCB7IHBhcmFtczogcGFyYW1zIH0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9mZmVyc1BhZ2luYXRlRFRPKSA9PiB7XG4gICAgICAgICAgICAgICAgb2ZmZXJzUGFnaW5hdGVEVE8uZGF0YSA9IG9mZmVyc1BhZ2luYXRlRFRPLmRhdGEubWFwKChpdGVtKSA9PiBuZXcgU2NPcmRlckRyYWZ0U2hvcnQoaXRlbSwgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvZmZlcnNQYWdpbmF0ZURUTyBhcyBTY0lQYWdpbmF0ZTxTY09yZGVyRHJhZnRTaG9ydD47XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60YDQsNGC0LrQuNC1INC00LDQvdC90YvQtSDRh9C10YDQvdC+0LLQuNC60L7QsiDRgSDRg9C60LDQt9Cw0L3QvdGL0LzQuCDQvdC+0LzQtdGA0LDQvNC4LiDQmNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPINC70ZHQs9C60L7Qs9C+INC+0L/RgNC+0YHQsCDRgdC+0YHRgtC+0Y/QvdC40Y8g0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4INCx0LXQtyDQt9Cw0LPRgNGD0LfQutC4INC/0L7Qt9C40YbQuNC5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkcyDQndC+0LzQtdGA0LAg0YfQtdGA0L3QvtCy0LjQutC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGdldFNob3J0TGlzdCQoaWRzOiBudW1iZXJbXSk6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0U2hvcnRbXT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFNjSU9yZGVyRHJhZnRMaXN0UGFyYW1zID0geyBwZXJQYWdlOiBpZHMubGVuZ3RoLCBmaWx0ZXJzOiB7IG51bWJlcjogeyBpbjogaWRzIH0gfSB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldExpc3QkKHRoaXMuY29udmVydGVyc1NlcnZpY2UudG9IdHRwUGFyYW1zKHBhcmFtcywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSkucGlwZShtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LjQvtC00LjRh9C10YHQutC4INC30LDQv9GA0LDRiNC40LLQsNC10YIg0LrRgNCw0YLQutC40LUg0LTQsNC90L3Ri9C1INGH0LXRgNC90L7QstC40LrQvtCyINGBINGD0LrQsNC30LDQvdC90YvQvNC4INC90L7QvNC10YDQsNC80LgsINC/0L7QutCwINC10YHRgtGMINC/0L7QtNC/0LjRgdC60LAuXG4gICAgICog0J/QvtC60LAg0LLQutC70LDQtNC60LAg0LHRgNCw0YPQt9C10YDQsCDRgdC60YDRi9GC0LAsINC30LDQv9GA0L7RgdGLINC90LUg0LLRi9C/0L7Qu9C90Y/RjtGC0YHRjzsg0L3QvtCy0YvQuSDQt9Cw0L/RgNC+0YEg0L3QtSDQvdCw0YfQuNC90LDQtdGC0YHRjyDQtNC+INC30LDQstC10YDRiNC10L3QuNGPINC/0YDQtdC00YvQtNGD0YnQtdCz0L4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRzINCd0L7QvNC10YDQsCDRh9C10YDQvdC+0LLQuNC60L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2F0Y2hTaG9ydExpc3QkKGlkczogbnVtYmVyW10pOiBPYnNlcnZhYmxlPFNjT3JkZXJEcmFmdFNob3J0W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9sbCQodGhpcy51cGRhdGVJbnRlcnZhbC5vcmRlckRyYWZ0U3RhdHVzLCAoKSA9PiB0aGlzLmdldFNob3J0TGlzdCQoaWRzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LjQvtC00LjRh9C10YHQutC4INC/0LXRgNC10LfQsNC/0YDQsNGI0LjQstCw0LXRgiDRgdGC0YDQsNC90LjRhtGDINGB0L/QuNGB0LrQsCDRh9C10YDQvdC+0LLQuNC60L7QsiDQsiDRhNC+0L3QtSwg0L/QvtC60LAg0LXRgdGC0Ywg0L/QvtC00L/QuNGB0LrQsC4g0KPRgdC70L7QstC40Y8g0LfQsNC/0YDQvtGB0L7QsiDQutCw0Log0YMge0BsaW5rIHdhdGNoU2hvcnRMaXN0JH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zINCf0LDRgNCw0LzQtdGC0YDRiyDQt9Cw0L/RgNC+0YHQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQv9C40YHQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyB3YXRjaExpc3QkKHBhcmFtczogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0U2hvcnRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb2xsJCh0aGlzLnVwZGF0ZUludGVydmFsLm9yZGVyRHJhZnRzTGlzdCwgKCkgPT4gdGhpcy5nZXRMaXN0JChwYXJhbXMpLnBpcGUobWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDRh9C10YDQvdC+0LLQuNC6INC30LDQutCw0LfQsCDQuNC3INGE0LDQudC70LAg0L/RgNC+0LPRgNCw0LzQvNGLIMKr0J/RgNC+0YTRgdGC0YDQvtC5wrsg0Lgg0LfQsNC/0YPRgdC60LDQtdGCINC10LPQviDQvtCx0YDQsNCx0L7RgtC60YMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSDQlNCw0L3QvdGL0LUg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZVByb2ZzdHJveSQoZGF0YTogU2NJTmV3UHJvZnN0cm95T3JkZXJEcmFmdFJlcXVlc3QpOiBPYnNlcnZhYmxlPFNjT3JkZXJEcmFmdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2NJT3JkZXJEcmFmdD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy9wcm9mc3Ryb3lgLCBkYXRhKS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTywgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5vcmRlckRyYWZ0UHJvZnN0cm95Q3JlYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IG9mZmVyX2lkOiBvZmZlci5pZCB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmZXJNYXAuc2V0KG9mZmVyLmlkLCBuZXcgU2NDYWNoZWRJdGVtKHRoaXMudXBkYXRlSW50ZXJ2YWwub3JkZXJEYXRhLCBvZihvZmZlciksIGxvYWRpbmdQbGFjZWhvbGRlcikpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/Rg9GB0LrQsNC10YIg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNGOINGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0LkgKNC/0L7QstGC0L7RgNC90YvQuSDQvtCx0LzQtdC9INGBIDHQoSDQv9C+INGC0LXQutGD0YnQtdC80YMg0YHQvtGB0YLQsNCy0YMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3R1YWxpemVQcm9mc3Ryb3kkKG9mZmVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTY0lPcmRlckRyYWZ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzLyR7b2ZmZXJJZH0vcHJvZnN0cm95L2FjdHVhbGl6ZWAsIHt9KS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTywgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5vcmRlckRyYWZ0UHJvZnN0cm95QWN0dWFsaXplZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IG9mZmVyX2lkOiBvZmZlcklkIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZlck1hcC5nZXQob2ZmZXJJZCk/LnNldFZhbHVlKG9mZmVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNC/0YPRgdC60LDQtdGCINC/0LXRgNC10YHQsdC+0YDQutGDINGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0Lkg0LjQtyDRgNCw0L3QtdC1INC30LDQs9GA0YPQttC10L3QvdC+0LPQviDRhNCw0LnQu9CwLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWxvYWRQcm9mc3Ryb3kkKG9mZmVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTY0lPcmRlckRyYWZ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzLyR7b2ZmZXJJZH0vcHJvZnN0cm95L3JlbG9hZGAsIHt9KS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTywgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5vcmRlckRyYWZ0UHJvZnN0cm95UmVsb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBvZmZlcl9pZDogb2ZmZXJJZCB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmZXJNYXAuZ2V0KG9mZmVySWQpPy5zZXRWYWx1ZShvZmZlcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC90L7QstC+0LUg0LrQvtC80LzQtdGA0YfQtdGB0LrQvtC1INC/0YDQtdC00LvQvtC20LXQvdC40LUv0YfQtdGA0L3QvtCy0LjQuiDQt9Cw0LrQsNC30LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSDQlNCw0L3QvdGL0LUg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZSQoZGF0YTogU2NJTmV3T3JkZXJEcmFmdFJlcXVlc3QpOiBPYnNlcnZhYmxlPFNjT3JkZXJEcmFmdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2NJT3JkZXJEcmFmdD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVyc2AsIGRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9mZmVyRFRPKSA9PiBuZXcgU2NPcmRlckRyYWZ0KG9mZmVyRFRPLCB0aGlzLmRhdGVGb3JtYXRzLmFwaSkpLFxuICAgICAgICAgICAgdGFwKChvZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLm9yZGVyRHJhZnRDcmVhdGVkLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgb2ZmZXJfaWQ6IG9mZmVyLmlkIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVDYXJ0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZlck1hcC5zZXQob2ZmZXIuaWQsIG5ldyBTY0NhY2hlZEl0ZW0odGhpcy51cGRhdGVJbnRlcnZhbC5vcmRlckRhdGEsIG9mKG9mZmVyKSwgbG9hZGluZ1BsYWNlaG9sZGVyKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0L7Qu9C90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQutC+0LzQvNC10YDRh9C10YHQutC+0Lwg0L/RgNC10LTQu9C+0LbQtdC90LjQuC/Rh9C10YDQvdC+0LLQuNC60LUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZHJhZnRJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0L/QuNGB0LguXG4gICAgICogQHBhcmFtIGNhY2hlYWJsZSDQn9GA0LjQt9C90LDQuiDQstC+0LfQvNC+0LbQvdC+0YHRgtC4INC/0L7Qu9GD0YfQtdC90LjRjyDQuNC3INC60Y3RiNC40YDQvtCy0LDQvdC90YvRhSDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIGdldCQoZHJhZnRJZDogbnVtYmVyLCBjYWNoZWFibGU6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxTY09yZGVyRHJhZnQgfCBTY09yZGVyTG9hZGluZz4ge1xuICAgICAgICBsZXQgY2FjaGVkSXRlbSA9IHRoaXMub2ZmZXJNYXAuZ2V0KGRyYWZ0SWQpO1xuXG4gICAgICAgIGlmICghY2FjaGVkSXRlbSkge1xuICAgICAgICAgICAgY2FjaGVkSXRlbSA9IG5ldyBTY0NhY2hlZEl0ZW0oXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnRlcnZhbC5vcmRlckRhdGEsXG4gICAgICAgICAgICAgICAgdGhpcy5odHRwLmdldDxTY0lPcmRlckRyYWZ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzLyR7ZHJhZnRJZH1gKS5waXBlKG1hcCgoZGF0YSkgPT4gbmV3IFNjT3JkZXJEcmFmdChkYXRhLCB0aGlzLmRhdGVGb3JtYXRzLmFwaSkpKSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nUGxhY2Vob2xkZXJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChjYWNoZWFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZmVyTWFwLnNldChkcmFmdElkLCBjYWNoZWRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWFibGUgJiYgIWNhY2hlZEl0ZW0uY2FjaGVkRGF0YUlzQWN0dWFsKCkpIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0udXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/RgNCw0YjQuNCy0LDQtdGCINC/0L7Qu9C90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRh9C10YDQvdC+0LLQuNC60LUg0LIg0L7QsdGF0L7QtCDQutGN0YjQsCDQuCDQvtCx0L3QvtCy0LvRj9C10YIg0LrRjdGIINC/0L7Qu9GD0YfQtdC90L3Ri9C80Lgg0LTQsNC90L3Ri9C80LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZHJhZnRJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0L/QuNGB0LguXG4gICAgICovXG4gICAgcHVibGljIGZldGNoJChkcmFmdElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFNjT3JkZXJEcmFmdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTY0lPcmRlckRyYWZ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzLyR7ZHJhZnRJZH1gKS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTywgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWRJdGVtID0gdGhpcy5vZmZlck1hcC5nZXQoZHJhZnRJZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjYWNoZWRJdGVtLnNldFZhbHVlKG9mZmVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZmVyTWFwLnNldChkcmFmdElkLCBuZXcgU2NDYWNoZWRJdGVtKHRoaXMudXBkYXRlSW50ZXJ2YWwub3JkZXJEYXRhLCBvZihvZmZlciksIGxvYWRpbmdQbGFjZWhvbGRlcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7QsiDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbXMkKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFNjT3JkZXJJdGVtW10gfCBTY09yZGVyTG9hZGluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQkKGlkKS5waXBlKG1hcCgoZHJhZnQpID0+IChkcmFmdCA9PT0gbG9hZGluZ1BsYWNlaG9sZGVyID8gbG9hZGluZ1BsYWNlaG9sZGVyIDogKGRyYWZ0IGFzIFNjT3JkZXJEcmFmdCkucHJvZHVjdHMpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINC00LDQvdC90YvQtSDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkcmFmdElkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC30LDQv9C40YHQuC5cbiAgICAgKiBAcGFyYW0gcGF0Y2gg0JTQsNC90L3Ri9C1INC00LvRjyDQvtCx0L3QvtCy0LvQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlJChkcmFmdElkOiBudW1iZXIsIHBhdGNoOiBTY0lVcGRhdGVPcmRlckRyYWZ0UmVxdWVzdCk6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLm9mZmVyTWFwLmdldChkcmFmdElkKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFNjSU9yZGVyRHJhZnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnMvJHtkcmFmdElkfWAsIHBhdGNoKS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTywgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5vcmRlckRyYWZ0VXBkYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IG9mZmVyX2lkOiBkcmFmdElkIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY2FjaGVkSXRlbT8uc2V0VmFsdWUob2ZmZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQutC+0LzQvNC10YDRh9C10YHQutC+0LUg0L/RgNC10LTQu9C+0LbQtdC90LjQtS/Rh9C10YDQvdC+0LLQuNC6LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC/0LjRgdC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGUkKG9mZmVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHVuZGVmaW5lZD4oYCR7dGhpcy51cmxzLmFwaVVybH0vb3JkZXJzL29mZmVycy8ke29mZmVySWR9YCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0ub3JkZXJEcmFmdERlbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBvZmZlcl9pZDogb2ZmZXJJZCB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmZXJNYXAuZGVsZXRlKG9mZmVySWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQt9Cw0LrQsNC3INC90LAg0L7RgdC90L7QstC1INC60L7QvNC80LXRgNGH0LXRgdC60L7Qs9C+INC/0YDQtdC00LvQvtC20LXQvdC40Y8v0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC/0LjRgdC4LlxuICAgICAqIEBwYXJhbSBkYXRhINCU0LDQvdC90YvQtSDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZU9yZGVyJChvZmZlcklkOiBudW1iZXIsIGRhdGE6IFNjSU5ld09yZGVyKTogT2JzZXJ2YWJsZTxTY09yZGVyU2hvcnRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2NJT3JkZXJTaG9ydFtdPihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzLyR7b2ZmZXJJZH0vY3JlYXRlLW9yZGVyYCwgZGF0YSkucGlwZShcbiAgICAgICAgICAgIG1hcCgob3JkZXJzKSA9PiBvcmRlcnMubWFwKChpdGVtKSA9PiBuZXcgU2NPcmRlclNob3J0KGl0ZW0pKSksXG4gICAgICAgICAgICB0YXAoKG9yZGVyczogU2NPcmRlclNob3J0W10pID0+IHtcbiAgICAgICAgICAgICAgICBvcmRlcnMuZm9yRWFjaCgob3JkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLm9yZGVyQ3JlYXRlZEZyb21EcmFmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBvZmZlcl9pZDogb2ZmZXJJZCwgb3JkZXJfaWQ6IG9yZGVyLmlkIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVPcmRlcmVkUHJvZHVjdHNGcm9tQ2FjaGUob2ZmZXJJZCwgZGF0YS5pdGVtcyA/PyBbXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDQt9Cw0L/RgNC+0YEg0YEg0YPQutCw0LfQsNC90L3Ri9C8INC40L3RgtC10YDQstCw0LvQvtC8LCDQv9C+0LrQsCDQstC60LvQsNC00LrQsCDQsdGA0LDRg9C30LXRgNCwINCy0LjQtNC90LAuINCd0L7QstGL0Lkg0LfQsNC/0YDQvtGBINC90LUg0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0LTQviDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+LCDQvtGI0LjQsdC60Lgg0L/RgNC+0L/Rg9GB0LrQsNGO0YLRgdGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcmlvZCDQmNC90YLQtdGA0LLQsNC7INC30LDQv9GA0L7RgdC+0LIgKG1zKS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdCDQpNGD0L3QutGG0LjRjywg0LLQvtC30LLRgNCw0YnQsNGO0YnQsNGPINC30LDQv9GA0L7RgS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBvbGwkPFQ+KHBlcmlvZDogbnVtYmVyLCByZXF1ZXN0OiAoKSA9PiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aW1lcihwZXJpb2QsIHBlcmlvZCkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbicpLFxuICAgICAgICAgICAgZXhoYXVzdE1hcCgoKSA9PiByZXF1ZXN0KCkucGlwZShjYXRjaEVycm9yKCgpID0+IEVNUFRZKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQsdC40YDQsNC10YIg0LfQsNC60LDQt9Cw0L3QvdGL0LUg0L/QvtC30LjRhtC40Lgg0LjQtyDQutGN0YjQsCDRh9C10YDQvdC+0LLQuNC60LAg0LvQvtC60LDQu9GM0L3QviAo0YHQtdGA0LLQtdGAINGB0YDQsNC30YMg0L/QvtGB0LvQtSDQt9Cw0LrQsNC30LAg0LXRidGRINC80L7QttC10YIg0LLQtdGA0L3Rg9GC0Ywg0LjRhSDQsiDRgdC/0LjRgdC60LUpLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9mZmVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqIEBwYXJhbSBvcmRlcmVkSXRlbUlkcyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINC30LDQutCw0LfQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlT3JkZXJlZFByb2R1Y3RzRnJvbUNhY2hlKG9mZmVySWQ6IG51bWJlciwgb3JkZXJlZEl0ZW1JZHM6IEFycmF5PG51bWJlciB8IHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FjaGVkSXRlbSA9IHRoaXMub2ZmZXJNYXAuZ2V0KG9mZmVySWQpO1xuXG4gICAgICAgIGlmICghY2FjaGVkSXRlbSB8fCBvcmRlcmVkSXRlbUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yZGVyZWRJZHMgPSBuZXcgU2V0KG9yZGVyZWRJdGVtSWRzLm1hcChTdHJpbmcpKTtcblxuICAgICAgICBjYWNoZWRJdGVtLml0ZW0kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChkcmFmdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRyYWZ0ID09PSBsb2FkaW5nUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREcmFmdCA9IGRyYWZ0IGFzIFNjT3JkZXJEcmFmdDtcblxuICAgICAgICAgICAgLy8g0JjQtyDRh9C10YDQvdC+0LLQuNC60LAg0J/RgNC+0YTRgdGC0YDQvtC5INC/0L7Qt9C40YbQuNC4INC/0L7RgdC70LUg0L7RhNC+0YDQvNC70LXQvdC40Y8g0LfQsNC60LDQt9CwINC90LUg0YPQtNCw0LvRj9GO0YLRgdGPLlxuICAgICAgICAgICAgaWYgKGN1cnJlbnREcmFmdC5pc1Byb2ZzdHJveSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nUHJvZHVjdHMgPSBjdXJyZW50RHJhZnQucHJvZHVjdHMuZmlsdGVyKChwcm9kdWN0KSA9PiAhb3JkZXJlZElkcy5oYXMocHJvZHVjdC5pZCkpO1xuXG4gICAgICAgICAgICBpZiAocmVtYWluaW5nUHJvZHVjdHMubGVuZ3RoID09PSBjdXJyZW50RHJhZnQucHJvZHVjdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRHJhZnQgPSBuZXcgU2NPcmRlckRyYWZ0KGN1cnJlbnREcmFmdCwgdGhpcy5kYXRlRm9ybWF0cy5hcGkpO1xuICAgICAgICAgICAgdXBkYXRlZERyYWZ0LnByb2R1Y3RzID0gcmVtYWluaW5nUHJvZHVjdHM7XG4gICAgICAgICAgICB1cGRhdGVkRHJhZnQuc3VtID0gcmVtYWluaW5nUHJvZHVjdHMucmVkdWNlKChzdW0sIHByb2R1Y3QpID0+IHN1bSArIHByb2R1Y3QuY29zdFJ1YiwgMCk7XG5cbiAgICAgICAgICAgIGNhY2hlZEl0ZW0uc2V0VmFsdWUodXBkYXRlZERyYWZ0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINC/0YDQvtC00YPQutGCINCyINC60L7QvNC80LXRgNGH0LXRgdC60L7QtSDQv9GA0LXQtNC70L7QttC10L3QuNC1L9GH0LXRgNC90L7QstC40LouXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdERhdGEg0JTQsNC90L3Ri9C1INC/0YDQvtC00YPQutGC0LAg0LTQu9GPINC00L7QsdCw0LLQu9C10L3QuNGPLlxuICAgICAqIEBwYXJhbSBvZmZlcklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60L7QvNC80LXRgNGH0LXRgdC60L7Qs9C+INC/0YDQtdC00LvQvtC20LXQvdC40Y8v0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRQcm9kdWN0JChwcm9kdWN0RGF0YTogU2NJTmV3T3JkZXJJdGVtQmFzZSwgb2ZmZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxTY09yZGVyRHJhZnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNjSU9yZGVyRHJhZnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnMvJHtvZmZlcklkfS9wcm9kdWN0c2AsIHByb2R1Y3REYXRhKS5waXBlKFxuICAgICAgICAgICAgbWFwKChvZmZlckRUTykgPT4gbmV3IFNjT3JkZXJEcmFmdChvZmZlckRUTywgdGhpcy5kYXRlRm9ybWF0cy5hcGkpKSxcbiAgICAgICAgICAgIHRhcCgob2ZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vZmZlck1hcC5oYXMob2ZmZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZlck1hcC5nZXQob2ZmZXJJZCk/LnNldFZhbHVlKG9mZmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCY0LfQvNC10L3Rj9C10YIg0L/RgNC+0LTRg9C60YIg0LIg0LrQvtC80LzQtdGA0YfQtdGB0LrQvtC8INC/0YDQtdC00LvQvtC20LXQvdC40Lgv0YfQtdGA0L3QvtCy0LjQutC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3RJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9GA0L7QtNGD0LrRgtCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqIEBwYXJhbSBwYXRjaCDQp9Cw0YHRgtC40YfQvdGL0LUg0LTQsNC90L3Ri9C1INC00LvRjyDQvtCx0L3QvtCy0LvQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gb2ZmZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlUHJvZHVjdCQocHJvZHVjdElkOiBzdHJpbmcsIHBhdGNoOiBPbWl0PFNjSU5ld09yZGVySXRlbUJhc2UsICdwcm9kdWN0SWQnPiwgb2ZmZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxTY09yZGVyRHJhZnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxTY0lPcmRlckRyYWZ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9vcmRlcnMvb2ZmZXJzLyR7b2ZmZXJJZH0vcHJvZHVjdHMvJHtwcm9kdWN0SWR9YCwgcGF0Y2gpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9mZmVyRFRPKSA9PiBuZXcgU2NPcmRlckRyYWZ0KG9mZmVyRFRPLCB0aGlzLmRhdGVGb3JtYXRzLmFwaSkpLFxuICAgICAgICAgICAgdGFwKChvZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9mZmVyTWFwLmhhcyhvZmZlcklkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZmVyTWFwLmdldChvZmZlcklkKT8uc2V0VmFsdWUob2ZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0L/RgNC+0LTRg9C60YIg0LjQtyDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCj0LTQsNC70Y/QtdC80LDRjyDQv9C+0LfQuNGG0LjRjy5cbiAgICAgKiBAcGFyYW0gb2ZmZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutC+0LzQvNC10YDRh9C10YHQutC+0LPQviDQv9GA0LXQtNC70L7QttC10L3QuNGPL9GH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlUHJvZHVjdCQoaXRlbTogU2NPcmRlckl0ZW0sIG9mZmVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8U2NPcmRlckRyYWZ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFNjSU9yZGVyRHJhZnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L29yZGVycy9vZmZlcnMvJHtvZmZlcklkfS9wcm9kdWN0cy8ke2l0ZW0uaWR9YCkucGlwZShcbiAgICAgICAgICAgIG1hcCgob2ZmZXJEVE8pID0+IG5ldyBTY09yZGVyRHJhZnQob2ZmZXJEVE8sIHRoaXMuZGF0ZUZvcm1hdHMuYXBpKSksXG4gICAgICAgICAgICB0YXAoKG9mZmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2ZmZXJNYXAuaGFzKG9mZmVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmZXJNYXAuZ2V0KG9mZmVySWQpPy5zZXRWYWx1ZShvZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -27,6 +27,7 @@ export * from './reclamation';
|
|
|
27
27
|
export * from './references';
|
|
28
28
|
export * from './search';
|
|
29
29
|
export * from './seo';
|
|
30
|
+
export * from './ssr-cache';
|
|
30
31
|
export * from './suggestion';
|
|
31
32
|
export * from './tokens';
|
|
32
33
|
export * from './ui';
|
|
@@ -37,4 +38,4 @@ export * from './vacancies';
|
|
|
37
38
|
export * from './vCard';
|
|
38
39
|
export * from './verification';
|
|
39
40
|
export * from './warehouse';
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE1BQU0sQ0FBQztBQUNyQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL2Jhbm5lcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vY2F0YWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRhY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhZ2VudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxpdmVyeS1hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2d1YXJkcyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwSW50ZXJjZXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbmV3cyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi91dG0nO1xuZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXN0aW9ubmFpcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWNsYW1hdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZmVyZW5jZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9zZW8nO1xuZXhwb3J0ICogZnJvbSAnLi9zc3ItY2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWdnZXN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vdWknO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1tZXRyaWthJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvcGhvbmUtZm90bWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdmFjYW5jaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdkNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi93YXJlaG91c2UnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './sc-ssr-response-cache';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9jbGFzc2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLXNzci1yZXNwb25zZS1jYWNoZSc7XG4iXX0=
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Кэш ответов API, один на процесс: переживает пересоздание инжектора между SSR-рендерами.
|
|
3
|
+
* Одинаковые одновременные запросы склеиваются, при переполнении вытесняется самая давняя запись.
|
|
4
|
+
*/
|
|
5
|
+
export class ScSsrResponseCache {
|
|
6
|
+
/**
|
|
7
|
+
* Инициализирует экземпляр класса {@link ScSsrResponseCache}.
|
|
8
|
+
*
|
|
9
|
+
* @param maxEntries Максимальное количество записей в кэше.
|
|
10
|
+
*/
|
|
11
|
+
constructor(maxEntries = 100) {
|
|
12
|
+
/**
|
|
13
|
+
* Закэшированные ответы по ключу запроса.
|
|
14
|
+
*/
|
|
15
|
+
this.entries = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Выполняемые запросы по ключу запроса.
|
|
18
|
+
*/
|
|
19
|
+
this.pending = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* Количество запросов, отданных без обращения к API.
|
|
22
|
+
*/
|
|
23
|
+
this.hits = 0;
|
|
24
|
+
/**
|
|
25
|
+
* Количество запросов, выполненных к API.
|
|
26
|
+
*/
|
|
27
|
+
this.misses = 0;
|
|
28
|
+
this.maxEntries = Number.isFinite(maxEntries) ? Math.max(1, maxEntries) : 100;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Возвращает ответ из кэша, при отсутствии или устаревании загружает и кэширует. Ошибка загрузки не кэшируется.
|
|
32
|
+
*
|
|
33
|
+
* @param key Ключ запроса.
|
|
34
|
+
* @param lifeTime Время жизни ответа (мс).
|
|
35
|
+
* @param loader Функция загрузки ответа.
|
|
36
|
+
*/
|
|
37
|
+
getOrLoad(key, lifeTime, loader) {
|
|
38
|
+
const cached = this.get(key);
|
|
39
|
+
if (cached) {
|
|
40
|
+
this.hits += 1;
|
|
41
|
+
return Promise.resolve(cached.response);
|
|
42
|
+
}
|
|
43
|
+
const pending = this.pending.get(key);
|
|
44
|
+
if (pending) {
|
|
45
|
+
this.hits += 1;
|
|
46
|
+
return pending;
|
|
47
|
+
}
|
|
48
|
+
this.misses += 1;
|
|
49
|
+
const loading = loader()
|
|
50
|
+
.then((response) => {
|
|
51
|
+
this.set(key, { response, expiresAt: Date.now() + lifeTime });
|
|
52
|
+
return response;
|
|
53
|
+
})
|
|
54
|
+
.finally(() => {
|
|
55
|
+
this.pending.delete(key);
|
|
56
|
+
});
|
|
57
|
+
this.pending.set(key, loading);
|
|
58
|
+
return loading;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Возвращает статистику работы кэша.
|
|
62
|
+
*/
|
|
63
|
+
getStats() {
|
|
64
|
+
return { size: this.entries.size, hits: this.hits, misses: this.misses };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Возвращает актуальную запись или `null`.
|
|
68
|
+
*
|
|
69
|
+
* @param key Ключ запроса.
|
|
70
|
+
*/
|
|
71
|
+
get(key) {
|
|
72
|
+
const entry = this.entries.get(key);
|
|
73
|
+
if (!entry) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
if (entry.expiresAt <= Date.now()) {
|
|
77
|
+
this.entries.delete(key);
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// Перестановка в конец помечает запись как недавно использованную.
|
|
81
|
+
this.entries.delete(key);
|
|
82
|
+
this.entries.set(key, entry);
|
|
83
|
+
return entry;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Сохраняет запись, при переполнении вытесняя самую давнюю.
|
|
87
|
+
*
|
|
88
|
+
* @param key Ключ запроса.
|
|
89
|
+
* @param entry Запись кэша.
|
|
90
|
+
*/
|
|
91
|
+
set(key, entry) {
|
|
92
|
+
this.entries.delete(key);
|
|
93
|
+
if (this.entries.size >= this.maxEntries) {
|
|
94
|
+
const [oldestKey] = this.entries.keys();
|
|
95
|
+
this.entries.delete(oldestKey);
|
|
96
|
+
}
|
|
97
|
+
this.entries.set(key, entry);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc3NyLXJlc3BvbnNlLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zc3ItY2FjaGUvY2xhc3Nlcy9zYy1zc3ItcmVzcG9uc2UtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQTBCM0I7Ozs7T0FJRztJQUNILFlBQW1CLGFBQXFCLEdBQUc7UUF6QjNDOztXQUVHO1FBQ2MsWUFBTyxHQUFzQyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUV0Rzs7V0FFRztRQUNjLFlBQU8sR0FBZ0QsSUFBSSxHQUFHLEVBQTBDLENBQUM7UUFFMUg7O1dBRUc7UUFDSyxTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBRXpCOztXQUVHO1FBQ0ssV0FBTSxHQUFXLENBQUMsQ0FBQztRQVF2QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxNQUE0QztRQUN4RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVmLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUU7YUFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFOUQsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQyxDQUFDO2FBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxHQUFHLENBQUMsR0FBVztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTdCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBMkI7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IFNjSVNzclJlc3BvbnNlQ2FjaGVTdGF0cyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc3RhdHMnO1xuaW1wb3J0IHsgU2NJU3NyQ2FjaGVkUmVzcG9uc2UgfSBmcm9tICcuLi9pbnRlcm5hbC9zYy1pLXNzci1jYWNoZWQtcmVzcG9uc2UnO1xuXG4vKipcbiAqINCa0Y3RiCDQvtGC0LLQtdGC0L7QsiBBUEksINC+0LTQuNC9INC90LAg0L/RgNC+0YbQtdGB0YE6INC/0LXRgNC10LbQuNCy0LDQtdGCINC/0LXRgNC10YHQvtC30LTQsNC90LjQtSDQuNC90LbQtdC60YLQvtGA0LAg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LlxuICog0J7QtNC40L3QsNC60L7QstGL0LUg0L7QtNC90L7QstGA0LXQvNC10L3QvdGL0LUg0LfQsNC/0YDQvtGB0Ysg0YHQutC70LXQuNCy0LDRjtGC0YHRjywg0L/RgNC4INC/0LXRgNC10L/QvtC70L3QtdC90LjQuCDQstGL0YLQtdGB0L3Rj9C10YLRgdGPINGB0LDQvNCw0Y8g0LTQsNCy0L3Rj9GPINC30LDQv9C40YHRjC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjU3NyUmVzcG9uc2VDYWNoZSB7XG4gICAgLyoqXG4gICAgICog0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9C40YHQtdC5INCyINC60Y3RiNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4RW50cmllczogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JfQsNC60Y3RiNC40YDQvtCy0LDQvdC90YvQtSDQvtGC0LLQtdGC0Ysg0L/QviDQutC70Y7Rh9GDINC30LDQv9GA0L7RgdCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogTWFwPHN0cmluZywgU2NJU3NyQ2FjaGVkUmVzcG9uc2U+ID0gbmV3IE1hcDxzdHJpbmcsIFNjSVNzckNhY2hlZFJlc3BvbnNlPigpO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdC80YvQtSDQt9Cw0L/RgNC+0YHRiyDQv9C+INC60LvRjtGH0YMg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nOiBNYXA8c3RyaW5nLCBQcm9taXNlPEh0dHBSZXNwb25zZTx1bmtub3duPj4+ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8SHR0cFJlc3BvbnNlPHVua25vd24+Pj4oKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9GA0L7RgdC+0LIsINC+0YLQtNCw0L3QvdGL0YUg0LHQtdC3INC+0LHRgNCw0YnQtdC90LjRjyDQuiBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoaXRzOiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0YDQvtGB0L7Qsiwg0LLRi9C/0L7Qu9C90LXQvdC90YvRhSDQuiBBUEkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBtaXNzZXM6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjU3NyUmVzcG9uc2VDYWNoZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWF4RW50cmllcyDQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0LjRgdC10Lkg0LIg0LrRjdGI0LUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1heEVudHJpZXM6IG51bWJlciA9IDEwMCkge1xuICAgICAgICB0aGlzLm1heEVudHJpZXMgPSBOdW1iZXIuaXNGaW5pdGUobWF4RW50cmllcykgPyBNYXRoLm1heCgxLCBtYXhFbnRyaWVzKSA6IDEwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQvtGC0LLQtdGCINC40Lcg0LrRjdGI0LAsINC/0YDQuCDQvtGC0YHRg9GC0YHRgtCy0LjQuCDQuNC70Lgg0YPRgdGC0LDRgNC10LLQsNC90LjQuCDQt9Cw0LPRgNGD0LbQsNC10YIg0Lgg0LrRjdGI0LjRgNGD0LXRgi4g0J7RiNC40LHQutCwINC30LDQs9GA0YPQt9C60Lgg0L3QtSDQutGN0YjQuNGA0YPQtdGC0YHRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkg0JrQu9GO0Ycg0LfQsNC/0YDQvtGB0LAuXG4gICAgICogQHBhcmFtIGxpZmVUaW1lINCS0YDQtdC80Y8g0LbQuNC30L3QuCDQvtGC0LLQtdGC0LAgKNC80YEpLlxuICAgICAqIEBwYXJhbSBsb2FkZXIg0KTRg9C90LrRhtC40Y8g0LfQsNCz0YDRg9C30LrQuCDQvtGC0LLQtdGC0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldE9yTG9hZChrZXk6IHN0cmluZywgbGlmZVRpbWU6IG51bWJlciwgbG9hZGVyOiAoKSA9PiBQcm9taXNlPEh0dHBSZXNwb25zZTx1bmtub3duPj4pOiBQcm9taXNlPEh0dHBSZXNwb25zZTx1bmtub3duPj4ge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGl0cyArPSAxO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZC5yZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmhpdHMgKz0gMTtcblxuICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1pc3NlcyArPSAxO1xuXG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSBsb2FkZXIoKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB7IHJlc3BvbnNlLCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBsaWZlVGltZSB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nLnNldChrZXksIGxvYWRpbmcpO1xuXG4gICAgICAgIHJldHVybiBsb2FkaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0YLQsNGC0LjRgdGC0LjQutGDINGA0LDQsdC+0YLRiyDQutGN0YjQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3RhdHMoKTogU2NJU3NyUmVzcG9uc2VDYWNoZVN0YXRzIHtcbiAgICAgICAgcmV0dXJuIHsgc2l6ZTogdGhpcy5lbnRyaWVzLnNpemUsIGhpdHM6IHRoaXMuaGl0cywgbWlzc2VzOiB0aGlzLm1pc3NlcyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINCw0LrRgtGD0LDQu9GM0L3Rg9GOINC30LDQv9C40YHRjCDQuNC70LggYG51bGxgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSDQmtC70Y7RhyDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldChrZXk6IHN0cmluZyk6IFNjSVNzckNhY2hlZFJlc3BvbnNlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChrZXkpO1xuXG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LmV4cGlyZXNBdCA8PSBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGtleSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/QtdGA0LXRgdGC0LDQvdC+0LLQutCwINCyINC60L7QvdC10YYg0L/QvtC80LXRh9Cw0LXRgiDQt9Cw0L/QuNGB0Ywg0LrQsNC6INC90LXQtNCw0LLQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QvdGD0Y4uXG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoa2V5KTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcblxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtGF0YDQsNC90Y/QtdGCINC30LDQv9C40YHRjCwg0L/RgNC4INC/0LXRgNC10L/QvtC70L3QtdC90LjQuCDQstGL0YLQtdGB0L3Rj9GPINGB0LDQvNGD0Y4g0LTQsNCy0L3RjtGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSDQmtC70Y7RhyDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKiBAcGFyYW0gZW50cnkg0JfQsNC/0LjRgdGMINC60Y3RiNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0KGtleTogc3RyaW5nLCBlbnRyeTogU2NJU3NyQ2FjaGVkUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXMuc2l6ZSA+PSB0aGlzLm1heEVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IFtvbGRlc3RLZXldID0gdGhpcy5lbnRyaWVzLmtleXMoKTtcblxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShvbGRlc3RLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './classes';
|
|
2
|
+
export * from './interfaces';
|
|
3
|
+
export * from './tokens';
|
|
4
|
+
export * from './sc-ssr-response-cache.backend';
|
|
5
|
+
export * from './sc-ssr-response-cache.providers';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtc3NyLXJlc3BvbnNlLWNhY2hlLmJhY2tlbmQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1zc3ItcmVzcG9uc2UtY2FjaGUucHJvdmlkZXJzJztcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './sc-i-ssr-response-cache-settings';
|
|
2
|
+
export * from './sc-i-ssr-response-cache-stats';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc2V0dGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1pLXNzci1yZXNwb25zZS1jYWNoZS1zdGF0cyc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbnRlcmZhY2VzL3NjLWktc3NyLXJlc3BvbnNlLWNhY2hlLXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqINCd0LDRgdGC0YDQvtC50LrQuCDQutGN0YjQsCDQvtGC0LLQtdGC0L7QsiBBUEksINC+0LHRidC10LPQviDQtNC70Y8g0LLRgdC10YUgU1NSLdGA0LXQvdC00LXRgNC+0LIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzIHtcbiAgICAvKipcbiAgICAgKiDQkNC00YDQtdGB0LAgQVBJINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviBgYXBpVXJsYCwg0L7RgtCy0LXRgtGLINC90LAg0LrQvtGC0L7RgNGL0LUg0LrRjdGI0LjRgNGD0Y7RgtGB0Y86INGC0L7Rh9C90L7QtSDRgdC+0LLQv9Cw0LTQtdC90LjQtSAoYC9uZXdzYCkg0LjQu9C4INC/0YDQtdGE0LjQutGBINGBIGAqYCAoYC9yZWZlcmVuY2VzLypgKS5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbmRwb2ludHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICog0JLRgNC10LzRjyDQttC40LfQvdC4INC30LDQutGN0YjQuNGA0L7QstCw0L3QvdC+0LPQviDQvtGC0LLQtdGC0LAgKNC80YEpLiDQn9GA0Lgg0LfQvdCw0YfQtdC90LjQuCBgMGAg0LrRjdGIINCy0YvQutC70Y7Rh9C10L0uXG4gICAgICovXG4gICAgcmVhZG9ubHkgbGlmZVRpbWU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCS0YDQtdC80Y8g0L7QttC40LTQsNC90LjRjyDQvtGC0LLQtdGC0LAgQVBJICjQvNGBKSwg0YfRgtC+0LHRiyDQt9Cw0LLQuNGB0YjQuNC5INC30LDQv9GA0L7RgSDQvdC1INCx0LvQvtC60LjRgNC+0LLQsNC7INCw0LTRgNC10YEg0LTQu9GPINCy0YHQtdGFINGA0LXQvdC00LXRgNC+0LIuIGAwYDog0LHQtdC3INC+0LPRgNCw0L3QuNGH0LXQvdC40Y8uXG4gICAgICovXG4gICAgLy8gVE9ETzogQW5ndWxhciAyMTog0LHRgNCw0YLRjCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQuNC3IFNDX1NTUl9IVFRQX1RJTUVPVVQgKGZlYXR1cmUvYW5ndWxhcl91cGdyYWRlKSwg0L3QtSDQt9Cw0LLQvtC00LjRgtGMINCy0YLQvtGA0L7QuSDRgtCw0LnQvNCw0YPRgi5cbiAgICByZWFkb25seSBsb2FkVGltZW91dDogbnVtYmVyO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zc3ItcmVzcG9uc2UtY2FjaGUtc3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nzci1jYWNoZS9pbnRlcmZhY2VzL3NjLWktc3NyLXJlc3BvbnNlLWNhY2hlLXN0YXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqINCh0YLQsNGC0LjRgdGC0LjQutCwINGA0LDQsdC+0YLRiyDQutGN0YjQsCDQvtGC0LLQtdGC0L7QsiBBUEkg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjSVNzclJlc3BvbnNlQ2FjaGVTdGF0cyB7XG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0LjRgdC10Lkg0LIg0LrRjdGI0LUuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0YDQvtGB0L7Qsiwg0L7RgtC00LDQvdC90YvRhSDQsdC10Lcg0L7QsdGA0LDRidC10L3QuNGPINC6IEFQSTog0LjQtyDQutGN0YjQsCDQuNC70Lgg0LjQtyDRg9C20LUg0LLRi9C/0L7Qu9C90Y/RjtGJ0LXQs9C+0YHRjyDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKi9cbiAgICByZWFkb25seSBoaXRzOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQt9Cw0L/RgNC+0YHQvtCyLCDQstGL0L/QvtC70L3QtdC90L3Ri9GFINC6IEFQSS5cbiAgICAgKi9cbiAgICByZWFkb25seSBtaXNzZXM6IG51bWJlcjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Возвращает признак, что ответ можно кэшировать между SSR-рендерами: GET за JSON без ключей доступа по адресам из настроек.
|
|
3
|
+
*
|
|
4
|
+
* @param request Данные запроса.
|
|
5
|
+
* @param settings Настройки кэша.
|
|
6
|
+
* @param apiUrl Адрес API.
|
|
7
|
+
* @param apiKeys Названия заголовков ключей доступа к API.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function isSsrResponseCacheable(request, settings, apiUrl, apiKeys) {
|
|
12
|
+
if (!Number.isFinite(settings.lifeTime) || settings.lifeTime <= 0 || request.method !== 'GET' || request.responseType !== 'json') {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (request.headers.has(apiKeys.keyName) || request.headers.has(apiKeys.guestKeyName)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const [url] = request.url.split('?');
|
|
19
|
+
if (!url.startsWith(apiUrl)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const path = url.slice(apiUrl.length);
|
|
23
|
+
return settings.endpoints.some((endpoint) => (endpoint.endsWith('*') ? path.startsWith(endpoint.slice(0, -1)) : path === endpoint));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtc3NyLXJlc3BvbnNlLWNhY2hlYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3NyLWNhY2hlL2ludGVybmFsL2lzLXNzci1yZXNwb25zZS1jYWNoZWFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE9BQTZCLEVBQUUsUUFBcUMsRUFBRSxNQUFjLEVBQUUsT0FBbUI7SUFDNUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDL0gsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTY0lBcGlLZXlzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktYXBpLWtleXMnO1xuaW1wb3J0IHsgU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLXNzci1yZXNwb25zZS1jYWNoZS1zZXR0aW5ncyc7XG5cbi8qKlxuICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/RgNC40LfQvdCw0LosINGH0YLQviDQvtGC0LLQtdGCINC80L7QttC90L4g0LrRjdGI0LjRgNC+0LLQsNGC0Ywg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4OiBHRVQg0LfQsCBKU09OINCx0LXQtyDQutC70Y7Rh9C10Lkg0LTQvtGB0YLRg9C/0LAg0L/QviDQsNC00YDQtdGB0LDQvCDQuNC3INC90LDRgdGC0YDQvtC10LouXG4gKlxuICogQHBhcmFtIHJlcXVlc3Qg0JTQsNC90L3Ri9C1INC30LDQv9GA0L7RgdCwLlxuICogQHBhcmFtIHNldHRpbmdzINCd0LDRgdGC0YDQvtC50LrQuCDQutGN0YjQsC5cbiAqIEBwYXJhbSBhcGlVcmwg0JDQtNGA0LXRgSBBUEkuXG4gKiBAcGFyYW0gYXBpS2V5cyDQndCw0LfQstCw0L3QuNGPINC30LDQs9C+0LvQvtCy0LrQvtCyINC60LvRjtGH0LXQuSDQtNC+0YHRgtGD0L/QsCDQuiBBUEkuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NzclJlc3BvbnNlQ2FjaGVhYmxlKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBzZXR0aW5nczogU2NJU3NyUmVzcG9uc2VDYWNoZVNldHRpbmdzLCBhcGlVcmw6IHN0cmluZywgYXBpS2V5czogU2NJQXBpS2V5cyk6IGJvb2xlYW4ge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNldHRpbmdzLmxpZmVUaW1lKSB8fCBzZXR0aW5ncy5saWZlVGltZSA8PSAwIHx8IHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCByZXF1ZXN0LnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5oZWFkZXJzLmhhcyhhcGlLZXlzLmtleU5hbWUpIHx8IHJlcXVlc3QuaGVhZGVycy5oYXMoYXBpS2V5cy5ndWVzdEtleU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBbdXJsXSA9IHJlcXVlc3QudXJsLnNwbGl0KCc/Jyk7XG5cbiAgICBpZiAoIXVybC5zdGFydHNXaXRoKGFwaVVybCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSB1cmwuc2xpY2UoYXBpVXJsLmxlbmd0aCk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3MuZW5kcG9pbnRzLnNvbWUoKGVuZHBvaW50KSA9PiAoZW5kcG9pbnQuZW5kc1dpdGgoJyonKSA/IHBhdGguc3RhcnRzV2l0aChlbmRwb2ludC5zbGljZSgwLCAtMSkpIDogcGF0aCA9PT0gZW5kcG9pbnQpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zc3ItY2FjaGVkLXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zc3ItY2FjaGUvaW50ZXJuYWwvc2MtaS1zc3ItY2FjaGVkLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbi8qKlxuICog0J7RgtCy0LXRgiBBUEksINC30LDQutGN0YjQuNGA0L7QstCw0L3QvdGL0Lkg0LzQtdC20LTRgyBTU1It0YDQtdC90LTQtdGA0LDQvNC4LlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjSVNzckNhY2hlZFJlc3BvbnNlIHtcbiAgICAvKipcbiAgICAgKiDQnNC+0LzQtdC90YIg0LLRgNC10LzQtdC90LggKNC80YEpLCDQv9C+0YHQu9C1INC60L7RgtC+0YDQvtCz0L4g0L7RgtCy0LXRgiDRgdGH0LjRgtCw0LXRgtGB0Y8g0YPRgdGC0LDRgNC10LLRiNC40LwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0LrRjdGI0LjRgNC+0LLQsNC90L3Ri9C5INC+0YLQstC10YIg0L3QsCDQt9Cw0L/RgNC+0YEuXG4gICAgICovXG4gICAgcmVhZG9ubHkgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPjtcbn1cbiJdfQ==
|