@snabcentr/client-core 2.66.9 → 2.66.12
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/esm2022/seo/interfaces/sc-i-seo.mjs +1 -1
- package/esm2022/seo/services/sc-seo.service.mjs +29 -17
- package/fesm2022/snabcentr-client-core.mjs +28 -16
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +1 -1
- package/seo/interfaces/sc-i-seo.d.ts +4 -0
- package/seo/services/sc-seo.service.d.ts +7 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9pbnRlcmZhY2VzL3NjLWktc2VvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY0lEZWZhdWx0UGFnZU1ldGEgfSBmcm9tICcuL3NjLWktZGVmYXVsdC1wYWdlLW1ldGEnO1xuXG4vKipcbiAqIFNlby3QtNCw0L3QvdGL0LUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJU2VvIGV4dGVuZHMgUGFydGlhbDxTY0lEZWZhdWx0UGFnZU1ldGE+IHtcbiAgICAvKipcbiAgICAgKiDQl9C90LDRh9C10L3QuNC1INGC0LXQs9CwIEgxINC90LAg0YHRgtGA0LDQvdC40YbQtS5cbiAgICAgKi9cbiAgICBoMT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCc0LDRgdGB0LjQsiDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINC30L3QsNGH0LXQvdC40Lkg0LzQtdGC0LDRgtC10LPQvtCyLlxuICAgICAqL1xuICAgIG1ldGE/OiBBcnJheTx7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDQndCw0LjQvNC10L3QvtCy0LDQvdC40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7Qs9C+INC80LXRgtCw0YLQtdCz0LAuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqINCX0L3QsNGH0LXQvdC40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7Qs9C+INC80LXRgtCw0YLQtdCz0LAuXG4gICAgICAgICAqL1xuICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgfT47XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YLQtdCz0L7Qsi5cbiAgICAgKi9cbiAgICB0YWdzPzogQXJyYXk8e1xuICAgICAgICAvKipcbiAgICAgICAgICog0KLQtdC60YHRgiDRgtC10LPQsC5cbiAgICAgICAgICovXG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqINCh0YHRi9C70LrQsCwg0L3QsCDQutC+0YLQvtGA0YPRjiDQtNC+0LvQttC10L0g0LLQtdGB0YLQuCDRgtC10LMuXG4gICAgICAgICAqL1xuICAgICAgICB1cmw/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1zZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9pbnRlcmZhY2VzL3NjLWktc2VvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY0lEZWZhdWx0UGFnZU1ldGEgfSBmcm9tICcuL3NjLWktZGVmYXVsdC1wYWdlLW1ldGEnO1xuXG4vKipcbiAqIFNlby3QtNCw0L3QvdGL0LUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJU2VvIGV4dGVuZHMgUGFydGlhbDxTY0lEZWZhdWx0UGFnZU1ldGE+IHtcbiAgICAvKipcbiAgICAgKiDQl9C90LDRh9C10L3QuNC1INGC0LXQs9CwIEgxINC90LAg0YHRgtGA0LDQvdC40YbQtS5cbiAgICAgKi9cbiAgICBoMT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCc0LDRgdGB0LjQsiDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINC30L3QsNGH0LXQvdC40Lkg0LzQtdGC0LDRgtC10LPQvtCyLlxuICAgICAqL1xuICAgIG1ldGE/OiBBcnJheTx7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDQndCw0LjQvNC10L3QvtCy0LDQvdC40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7Qs9C+INC80LXRgtCw0YLQtdCz0LAuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqINCX0L3QsNGH0LXQvdC40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7Qs9C+INC80LXRgtCw0YLQtdCz0LAuXG4gICAgICAgICAqL1xuICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgfT47XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YLQtdCz0L7Qsi5cbiAgICAgKi9cbiAgICB0YWdzPzogQXJyYXk8e1xuICAgICAgICAvKipcbiAgICAgICAgICog0KLQtdC60YHRgiDRgtC10LPQsC5cbiAgICAgICAgICovXG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqINCh0YHRi9C70LrQsCwg0L3QsCDQutC+0YLQvtGA0YPRjiDQtNC+0LvQttC10L0g0LLQtdGB0YLQuCDRgtC10LMuXG4gICAgICAgICAqL1xuICAgICAgICB1cmw/OiBzdHJpbmc7XG4gICAgfT47XG5cbiAgICAvKipcbiAgICAgKiDQodGL0YDRi9C1INC00LDQvdC90YvQtSDQvtCx0YrQtdC60YLQsCwg0L3QsCDQvtGB0L3QvtCy0LUg0LrQvtGC0L7RgNC+0LPQviDQsdGL0LvQuCDRg9GB0YLQsNC90L7QstC70LXQvdGLIHNlby3Qv9Cw0YDQsNC80LXRgtGA0YsuXG4gICAgICovXG4gICAgaW5zdGFuY2VEYXRhPzogb2JqZWN0O1xufVxuIl19
|
|
@@ -2,11 +2,11 @@ import { DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import { inject, Injectable, RendererFactory2 } from '@angular/core';
|
|
3
3
|
import { Meta, Title } from '@angular/platform-browser';
|
|
4
4
|
import { Router } from '@angular/router';
|
|
5
|
+
import { get, isNil, isString } from 'lodash-es';
|
|
5
6
|
import { ScIdOrSlugPipe } from '../../pipes/sc-id-or-slug.pipe';
|
|
6
7
|
import { ScMediaImageTransformerPipe } from '../../pipes/sc-media-image-transformer.pipe';
|
|
7
8
|
import { SC_COMPANY_INFO } from '../../tokens/sc-company-info';
|
|
8
9
|
import { SC_CATALOG_PAGE_META, SC_DEFAULT_PAGE_META } from '../../tokens/sc-default-page-meta';
|
|
9
|
-
import { SC_ID_OR_SLUG_IN_ROUTE } from '../../tokens/sc-id-or-slug-in-route';
|
|
10
10
|
import { SC_URLS } from '../../tokens/sc-urls';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
/**
|
|
@@ -26,10 +26,6 @@ export class ScSeoService {
|
|
|
26
26
|
* Метаданные страницы каталога по умолчанию.
|
|
27
27
|
*/
|
|
28
28
|
this.catalogDefaultSeo = inject(SC_CATALOG_PAGE_META);
|
|
29
|
-
/**
|
|
30
|
-
* Признак необходимости использовать Id или Slug при маршрутизации.
|
|
31
|
-
*/
|
|
32
|
-
this.idOrSlugInRoute = inject(SC_ID_OR_SLUG_IN_ROUTE);
|
|
33
29
|
/**
|
|
34
30
|
* Список ссылок приложения.
|
|
35
31
|
*/
|
|
@@ -76,14 +72,15 @@ export class ScSeoService {
|
|
|
76
72
|
*/
|
|
77
73
|
setFromResource(resource, img = this.urls.logoUrl, robots = ['index', 'follow']) {
|
|
78
74
|
const updatedResource = {
|
|
79
|
-
title: resource?.title ?? this.defaultSeo.title,
|
|
80
|
-
description: resource?.description ?? this.defaultSeo.description,
|
|
75
|
+
title: this.replaceTemplates(resource?.title ?? this.defaultSeo.title, resource?.instanceData ?? {}),
|
|
76
|
+
description: this.replaceTemplates(resource?.description ?? this.defaultSeo.description, resource?.instanceData ?? {}),
|
|
81
77
|
keywords: resource?.keywords ?? this.defaultSeo.keywords,
|
|
82
78
|
meta: resource?.meta ?? [],
|
|
83
79
|
};
|
|
84
80
|
const url = `${this.urls.siteUrl}${this.router.url}`;
|
|
85
81
|
this.setMetaTags(updatedResource.title, updatedResource.description, updatedResource.keywords, updatedResource.meta, robots);
|
|
86
82
|
this.setOpenGraphMetaTags(updatedResource.title, updatedResource.description, url, img);
|
|
83
|
+
this.setCanonicalLink(url);
|
|
87
84
|
}
|
|
88
85
|
/**
|
|
89
86
|
* Устанавливает seo параметры со значением по умолчанию.
|
|
@@ -94,7 +91,7 @@ export class ScSeoService {
|
|
|
94
91
|
setByDefault(title, robots = ['index', 'follow']) {
|
|
95
92
|
this.setFromResource({
|
|
96
93
|
title: `${title ?? this.defaultSeo.title} - ${this.companyInfo.name}`,
|
|
97
|
-
description: `${title}, ${this.defaultSeo.description}
|
|
94
|
+
description: title ? `${title}, ${this.defaultSeo.description}` : this.defaultSeo.description,
|
|
98
95
|
}, this.urls.logoUrl, robots);
|
|
99
96
|
}
|
|
100
97
|
/**
|
|
@@ -114,23 +111,38 @@ export class ScSeoService {
|
|
|
114
111
|
*/
|
|
115
112
|
setForCatalogItem(item, urlPath, schemaOrgData) {
|
|
116
113
|
const url = `${this.urls.siteUrl}${urlPath.replace(':id', this.idOrSlugPipe.transform(item).toString())}`;
|
|
117
|
-
const title = item.seo?.title ?? `${item.name} - Купить в ${this.companyInfo.name}
|
|
118
|
-
const description = item.seo?.description ?? `${item.name} - Купить по выгодным ценам в ${this.companyInfo.name}
|
|
114
|
+
const title = this.replaceTemplates(item.seo?.title ?? `${item.name} - Купить в ${this.companyInfo.name}`, item);
|
|
115
|
+
const description = this.replaceTemplates(item.seo?.description ?? `${item.name} - Купить по выгодным ценам в ${this.companyInfo.name}`, item);
|
|
119
116
|
const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogDefaultSeo.keywords}`;
|
|
120
117
|
const meta = item.seo?.meta ?? [];
|
|
121
|
-
// Устанавливаем стандартные seo
|
|
118
|
+
// Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
|
|
122
119
|
this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
|
|
123
120
|
this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
|
|
124
|
-
|
|
125
|
-
// ссылку на страницу в которой используется slug (а не id).
|
|
126
|
-
if (this.idOrSlugInRoute === 'slug' && item.id && item.slug) {
|
|
127
|
-
this.setCanonicalLink(url);
|
|
128
|
-
}
|
|
121
|
+
this.setCanonicalLink(url);
|
|
129
122
|
// Устанавливаем Schema.org параметры.
|
|
130
123
|
if (schemaOrgData) {
|
|
131
124
|
this.setSchemaOrgData(schemaOrgData);
|
|
132
125
|
}
|
|
133
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Заменяет шаблоны в тексте на значения из объекта.
|
|
129
|
+
*
|
|
130
|
+
* @param text Текст с шаблонами.
|
|
131
|
+
* @param instanceData Объект с данными для замены.
|
|
132
|
+
*/
|
|
133
|
+
// eslint-disable-next-line class-methods-use-this
|
|
134
|
+
replaceTemplates(text, instanceData) {
|
|
135
|
+
return text.replaceAll(/\$\{([^}]+)\}/g, (_template, fieldPathVariants) => {
|
|
136
|
+
const value = fieldPathVariants
|
|
137
|
+
.split('|')
|
|
138
|
+
.map((fieldPath) => fieldPath.trim())
|
|
139
|
+
.filter(Boolean)
|
|
140
|
+
.map((fieldPath) => get(instanceData, fieldPath))
|
|
141
|
+
.find((fieldValue) => !isNil(fieldValue));
|
|
142
|
+
// eslint-disable-next-line sonarjs/no-nested-conditional
|
|
143
|
+
return isNil(value) ? '' : isString(value) ? value : String(value);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
134
146
|
/**
|
|
135
147
|
* Устанавливает все meta-теги страницы. Если какой-либо из параметров не указан, для него устанавливается значение по умолчанию.
|
|
136
148
|
*
|
|
@@ -212,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
212
224
|
providedIn: 'root',
|
|
213
225
|
}]
|
|
214
226
|
}] });
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBSS9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLFlBQVk7SUFIekI7UUFJSTs7V0FFRztRQUNjLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXZEOztXQUVHO1FBQ2MsZUFBVSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTNEOztXQUVHO1FBQ2Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFbEU7O1dBRUc7UUFDYyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWxFOztXQUVHO1FB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TTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUaGluZywgV2l0aENvbnRleHQgfSBmcm9tICdzY2hlbWEtZHRzJztcblxuaW1wb3J0IHsgU2NJQ2F0YWxvZ0l0ZW0gfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRhbG9nLWl0ZW0nO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSWRPclNsdWdQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtaWQtb3Itc2x1Zy5waXBlJztcbmltcG9ydCB7IFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLW1lZGlhLWltYWdlLXRyYW5zZm9ybWVyLnBpcGUnO1xuaW1wb3J0IHsgU0NfQ09NUEFOWV9JTkZPIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWNvbXBhbnktaW5mbyc7XG5pbXBvcnQgeyBTQ19DQVRBTE9HX1BBR0VfTUVUQSwgU0NfREVGQVVMVF9QQUdFX01FVEEgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtZGVmYXVsdC1wYWdlLW1ldGEnO1xuaW1wb3J0IHsgU0NfSURfT1JfU0xVR19JTl9ST1VURSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1pZC1vci1zbHVnLWluLXJvdXRlJztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY0lTZW8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktc2VvJztcbmltcG9ydCB7IFJvYm90c1RhZ1R5cGUgfSBmcm9tICcuLi90eXBlcy9yb2JvdHMtdGFnLXR5cGUnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyBTRU8t0L/QsNGA0LDQvNC10YLRgNCw0LzQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NTZW9TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBhbnlJbmZvID0gaW5qZWN0KFNDX0NPTVBBTllfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQsNC00LDQvdC90YvQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZW8gPSBpbmplY3QoU0NfREVGQVVMVF9QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0LDQtNCw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiyDQutCw0YLQsNC70L7Qs9CwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ0RlZmF1bHRTZW8gPSBpbmplY3QoU0NfQ0FUQUxPR19QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0Lgg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIElkINC40LvQuCBTbHVnINC/0YDQuCDQvNCw0YDRiNGA0YPRgtC40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkT3JTbHVnSW5Sb3V0ZSA9IGluamVjdChTQ19JRF9PUl9TTFVHX0lOX1JPVVRFKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxzID0gaW5qZWN0KFNDX1VSTFMpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8sINCy0L7Qt9Cy0YDQsNGJ0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lgg0YHQuNC80LLQvtC70YzQvdC+0LUg0L7QsdC+0LfQvdCw0YfQtdC90LjQtSAoc2x1Zykg0LjRgdGF0L7QtNGPINC40Lcg0L3QsNGB0YLRgNC+0LXQuiDQvtC60YDRg9C20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpZE9yU2x1Z1BpcGU6IFNjSWRPclNsdWdQaXBlID0gaW5qZWN0KFNjSWRPclNsdWdQaXBlKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/INC00LvRjyDRhNC+0YDQvNC40YDQvtCy0LDQvdC40Y8g0L/QvtC70L3QvtCz0L4gVVJJINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L3QsCBtZWRpYSDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgPSBpbmplY3QoU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRg9GB0YLQsNC90L7QstC60Lgg0LzQtdGC0LDQtNCw0L3QvdGL0YUg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG1ldGFTZXJ2aWNlID0gaW5qZWN0KE1ldGEpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC80LDRgNGI0YDRg9GC0LjQt9Cw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPQv9GA0LDQstC70LXQvdC40Y8g0LfQsNCz0L7Qu9C+0LLQutC+0Lwg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU2VydmljZSA9IGluamVjdChUaXRsZSk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIge0BsaW5rIERvY3VtZW50fSwg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YnQuNC5INC00L7RgdGC0YPQvyDQuiBET00g0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIC8qKlxuICAgICAqINCk0LDQsdGA0LjQutCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINGN0LrQt9C10LzQv9C70Y/RgNC+0LIge0BsaW5rIFJlbmRlcmVyMn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5Mik7XG5cbiAgICAvKipcbiAgICAgKiDQrdC60LfQtdC80L/Qu9GP0YAge0BsaW5rIFJlbmRlcmVyMn0g0LTQu9GPINCx0LXQt9C+0L/QsNGB0L3QvtC5INGA0LDQsdC+0YLRiyDRgSBET00uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8g0L/QsNGA0LDQvNC10YLRgNGLINC90LAg0L7RgdC90L7QstC1INGD0LrQsNC30LDQvdC90L7Qs9C+INGA0LXRgdGD0YDRgdCwLiDQldGB0LvQuCDQutCw0LrQvtCz0L4t0YLQviDRgtC10LPQsCDQvdC10YIsINCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L3QviDQt9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc291cmNlINCg0LXRgdGD0YDRgSDQvdCwINC+0YHQvdC+0LLQtSDQutC+0YLQvtGA0L7Qs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INGD0YHRgtCw0L3QvtCy0LjRgtGMINC80LXRgtCwLdGC0LXQs9C4LlxuICAgICAqIEBwYXJhbSBpbWcg0JjQt9C+0LHRgNCw0LbQtdC90LjQtS4g0JXRgdC70Lgg0L3QtSDQv9GA0LjRiNC70L4sINGC0L4g0LHRg9C00LXRgiDRg9GB0YLQsNC90L7QstC70LXQvdC+INC30L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICogQHBhcmFtIHJvYm90cyDQodC/0LjRgdC+0Logcm9ib3RzLdGC0LXQs9C+0LIg0LTQu9GPINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHVibGljIHNldEZyb21SZXNvdXJjZShyZXNvdXJjZT86IFNjSVNlbywgaW1nOiBzdHJpbmcgPSB0aGlzLnVybHMubG9nb1VybCwgcm9ib3RzOiBSb2JvdHNUYWdUeXBlW10gPSBbJ2luZGV4JywgJ2ZvbGxvdyddKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiByZXNvdXJjZT8udGl0bGUgPz8gdGhpcy5kZWZhdWx0U2VvLnRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlc291cmNlPy5kZXNjcmlwdGlvbiA/PyB0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBrZXl3b3JkczogcmVzb3VyY2U/LmtleXdvcmRzID8/IHRoaXMuZGVmYXVsdFNlby5rZXl3b3JkcyxcbiAgICAgICAgICAgIG1ldGE6IHJlc291cmNlPy5tZXRhID8/IFtdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3RoaXMucm91dGVyLnVybH1gO1xuXG4gICAgICAgIHRoaXMuc2V0TWV0YVRhZ3ModXBkYXRlZFJlc291cmNlLnRpdGxlLCB1cGRhdGVkUmVzb3VyY2UuZGVzY3JpcHRpb24sIHVwZGF0ZWRSZXNvdXJjZS5rZXl3b3JkcywgdXBkYXRlZFJlc291cmNlLm1ldGEsIHJvYm90cyk7XG4gICAgICAgIHRoaXMuc2V0T3BlbkdyYXBoTWV0YVRhZ3ModXBkYXRlZFJlc291cmNlLnRpdGxlLCB1cGRhdGVkUmVzb3VyY2UuZGVzY3JpcHRpb24sIHVybCwgaW1nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8g0L/QsNGA0LDQvNC10YLRgNGLINGB0L4g0LfQvdCw0YfQtdC90LjQtdC8INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSByb2JvdHMg0KHQv9C40YHQvtC6IHJvYm90cyDRgtC10LPQvtCyINC00LvRjyDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCeURlZmF1bHQodGl0bGU/OiBzdHJpbmcsIHJvYm90czogUm9ib3RzVGFnVHlwZVtdID0gWydpbmRleCcsICdmb2xsb3cnXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEZyb21SZXNvdXJjZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogYCR7dGl0bGUgPz8gdGhpcy5kZWZhdWx0U2VvLnRpdGxlfSAtICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3RpdGxlfSwgJHt0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnVybHMubG9nb1VybCxcbiAgICAgICAgICAgIHJvYm90c1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHNlbyDQv9Cw0YDQsNC80LXRgtGA0Ysg0YHQviDQt9C90LDRh9C10L3QuNC10Lwg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC30L3QsNGH0LXQvdC40LUgXCLQvdC1INC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMXCIg0LTQu9GPINC/0L7QuNGB0LrQvtCy0YvRhSDRgNC+0LHQvtGC0L7Qsi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSDQl9Cw0LPQvtC70L7QstC+0Log0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0QnlEZWZhdWx0QXNOb0luZGV4ZWQodGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRCeURlZmF1bHQodGl0bGUsIFsnbm9pbmRleCcsICdub2ZvbGxvdycsICdub2FyY2hpdmUnXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvLdC/0LDRgNCw0LzQtdGC0YDRiyDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0JTQsNC90L3Ri9C1INC+0LEg0Y3Qu9C10LzQtdC90YLQtSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqIEBwYXJhbSB1cmxQYXRoIFVybCDQv9GD0YLRjCDQuiDRjdC70LXQvNC10L3RgtGDINC60LDRgtCw0LvQvtCz0LAuINCSINC/0YPRgtC4INC00L7Qu9C20LXQvSDQv9GA0LjRgdGD0YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvSAnOmlkJywg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsCDQtNC70Y8g0L/QvtC00YHRgtCw0L3QvtCy0LrQuC5cbiAgICAgKiBAcGFyYW0gc2NoZW1hT3JnRGF0YSDQlNCw0L3QvdGL0LUgU2NoZW1hLm9yZyDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Rm9yQ2F0YWxvZ0l0ZW0oaXRlbTogU2NJQ2F0YWxvZ0l0ZW08U2NJQ2F0ZWdvcnkgfCBTY0lWaXJ0dWFsQ2F0ZWdvcnk+LCB1cmxQYXRoOiBzdHJpbmcsIHNjaGVtYU9yZ0RhdGE/OiBXaXRoQ29udGV4dDxUaGluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHt1cmxQYXRoLnJlcGxhY2UoJzppZCcsIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShpdGVtKS50b1N0cmluZygpKX1gO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGl0ZW0uc2VvPy50aXRsZSA/PyBgJHtpdGVtLm5hbWV9IC0g0JrRg9C/0LjRgtGMINCyICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWA7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gaXRlbS5zZW8/LmRlc2NyaXB0aW9uID8/IGAke2l0ZW0ubmFtZX0gLSDQmtGD0L/QuNGC0Ywg0L/QviDQstGL0LPQvtC00L3Ri9C8INGG0LXQvdCw0Lwg0LIgJHt0aGlzLmNvbXBhbnlJbmZvLm5hbWV9YDtcbiAgICAgICAgY29uc3Qga2V5d29yZHMgPSBpdGVtLnNlbz8ua2V5d29yZHMgPz8gYCR7aXRlbS5uYW1lfSwgJHt0aGlzLmNhdGFsb2dEZWZhdWx0U2VvLmtleXdvcmRzfWA7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBpdGVtLnNlbz8ubWV0YSA/PyBbXTtcblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C1IHNlby3Qv9Cw0YDQsNC80LXRgtGA0YsuXG4gICAgICAgIHRoaXMuc2V0TWV0YVRhZ3ModGl0bGUsIGRlc2NyaXB0aW9uLCBrZXl3b3JkcywgbWV0YSwgWydpbmRleCcsICdmb2xsb3cnXSk7XG4gICAgICAgIHRoaXMuc2V0T3BlbkdyYXBoTWV0YVRhZ3ModGl0bGUsIGRlc2NyaXB0aW9uLCB1cmwsIHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oaXRlbS5pbWFnZSwgdHJ1ZSkpO1xuXG4gICAgICAgIC8vINCSINGC0L7QvCDRgdC70YPRh9Cw0LUsINC10YHQu9C4INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyBzbHVnINC00LvRjyDRhNC+0YDQvNC40YDQvtCy0LDQvdC40Y8g0YHRgdGL0LvQvtC6LCDRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQutC+0L3QvtC90LjRh9C10YHQutGD0Y5cbiAgICAgICAgLy8g0YHRgdGL0LvQutGDINC90LAg0YHRgtGA0LDQvdC40YbRgyDQsiDQutC+0YLQvtGA0L7QuSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8gc2x1ZyAo0LAg0L3QtSBpZCkuXG4gICAgICAgIGlmICh0aGlzLmlkT3JTbHVnSW5Sb3V0ZSA9PT0gJ3NsdWcnICYmIGl0ZW0uaWQgJiYgaXRlbS5zbHVnKSB7XG4gICAgICAgICAgICB0aGlzLnNldENhbm9uaWNhbExpbmsodXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8IFNjaGVtYS5vcmcg0L/QsNGA0LDQvNC10YLRgNGLLlxuICAgICAgICBpZiAoc2NoZW1hT3JnRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTY2hlbWFPcmdEYXRhKHNjaGVtYU9yZ0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LLRgdC1IG1ldGEt0YLQtdCz0Lgg0YHRgtGA0LDQvdC40YbRiy4g0JXRgdC70Lgg0LrQsNC60L7QuS3Qu9C40LHQviDQuNC3INC/0LDRgNCw0LzQtdGC0YDQvtCyINC90LUg0YPQutCw0LfQsNC9LCDQtNC70Y8g0L3QtdCz0L4g0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YLRgdGPINC30L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGl0bGUg0JfQsNCz0L7Qu9C+0LLQvtC6INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICogQHBhcmFtIGRlc2NyaXB0aW9uINCe0L/QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKiBAcGFyYW0ga2V5d29yZHMg0JrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICogQHBhcmFtIG1ldGEg0JzQsNGB0YHQuNCyINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0YUg0LfQvdCw0YfQtdC90LjQuSDQvNC10YLQsNGC0LXQs9C+0LIuXG4gICAgICogQHBhcmFtIHJvYm90cyDQodC/0LjRgdC+0Logcm9ib3RzINGC0LXQs9C+0LIg0LTQu9GPINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRNZXRhVGFncyhcbiAgICAgICAgdGl0bGU6IHN0cmluZyA9IHRoaXMuZGVmYXVsdFNlby50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyA9IHRoaXMuZGVmYXVsdFNlby5kZXNjcmlwdGlvbixcbiAgICAgICAga2V5d29yZHM6IHN0cmluZyA9IHRoaXMuZGVmYXVsdFNlby5rZXl3b3JkcyxcbiAgICAgICAgbWV0YTogU2NJU2VvWydtZXRhJ10gPSBbXSxcbiAgICAgICAgcm9ib3RzOiBSb2JvdHNUYWdUeXBlW10gPSBbJ2luZGV4JywgJ2ZvbGxvdyddXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcblxuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IGRlc2NyaXB0aW9uIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdrZXl3b3JkcycsIGNvbnRlbnQ6IGtleXdvcmRzIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdyb2JvdHMnLCBjb250ZW50OiByb2JvdHMuam9pbignLCAnKSB9KTtcblxuICAgICAgICBtZXRhLmZvckVhY2goKHRhZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiB0YWcubmFtZSwgY29udGVudDogdGFnLmNvbnRlbnQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIE9wZW4gR3JhcGggbWV0YS3RgtC10LPQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZ1RpdGxlINCX0LDQs9C+0LvQvtCy0L7Qui5cbiAgICAgKiBAcGFyYW0gb2dEZXNjcmlwdGlvbiDQntC/0LjRgdCw0L3QuNC1LlxuICAgICAqIEBwYXJhbSBvZ1VybCBVcmwuXG4gICAgICogQHBhcmFtIG9nSW1nINCh0YHRi9C70LrQsCDQvdCwINC40LfQvtCx0YDQsNC20LXQvdC40LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRPcGVuR3JhcGhNZXRhVGFncyhvZ1RpdGxlOiBzdHJpbmcsIG9nRGVzY3JpcHRpb246IHN0cmluZywgb2dVcmw6IHN0cmluZywgb2dJbWc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6dHlwZScsIGNvbnRlbnQ6ICd3ZWJzaXRlJyB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogb2dUaXRsZSB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogb2dEZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnVybCcsIGNvbnRlbnQ6IG9nVXJsIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6aW1hZ2UnLCBjb250ZW50OiBvZ0ltZyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDRgtC10LMg0LrQsNC90L7QvdC40YfQtdGB0LrQvtC5INGB0YLRgNCw0L3QuNGG0YsgPGxpbmsgcmVsPVwiY2Fub25pY2FsXCIgaHJlZj1cIi4uLlwiIC8+LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBVUkwg0LrQvtGC0L7RgNGL0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCyINC60LDRh9C10YHRgtCy0LUg0YHRgdGL0LvQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q2Fub25pY2FsTGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyDQo9C00LDQu9GP0LXQvCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LkgbGluayBjYW5vbmljYWwuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTGluayA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGlua1tyZWw9XCJjYW5vbmljYWxcIl0nKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdMaW5rPy5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGV4aXN0aW5nTGluay5wYXJlbnROb2RlLCBleGlzdGluZ0xpbmspO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0KHQvtC30LTQsNGR0Lwg0Lgg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0L3QvtCy0YvQuSDRgtC10LMuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgY29uc3QgbGluayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAncmVsJywgJ2Nhbm9uaWNhbCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicsIHVybCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCBsaW5rKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBTY2hlbWEub3JnINC+0LHRitC10LrRgiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg0JTQsNC90L3Ri9C1IFNjaGVtYS5vcmcg0LTQu9GPINCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2NoZW1hT3JnRGF0YTxUIGV4dGVuZHMgVGhpbmc+KGRhdGE6IFdpdGhDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByb2plY3RBdHRyaWJ1dGVOYW1lID0gJ2RhdGEtc2Mtc2NoZW1hLW9yZyc7XG4gICAgICAgIC8vINCj0LTQsNC70Y/QtdC8INCy0YHQtSDRgNCw0L3QtdC1INGB0L7Qt9C00LDQvdC90YvQtSDRgdC60YDQuNC/0YLRiyBTY2hlbWEub3JnICjQv9C+INGD0L3QuNC60LDQu9GM0L3QvtC80YMg0LDRgtGA0LjQsdGD0YLRgyDQv9GA0L7QtdC60YLQsCkuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0cyA9IHRoaXMuZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKGBzY3JpcHRbJHtwcm9qZWN0QXR0cmlidXRlTmFtZX1dYCk7XG4gICAgICAgIGV4aXN0aW5nU2NyaXB0cy5mb3JFYWNoKChleGlzdGluZ1NjcmlwdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nU2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGV4aXN0aW5nU2NyaXB0LnBhcmVudE5vZGUsIGV4aXN0aW5nU2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShzY3JpcHQsICd0eXBlJywgJ2FwcGxpY2F0aW9uL2xkK2pzb24nKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc2NyaXB0LCBwcm9qZWN0QXR0cmlidXRlTmFtZSwgJycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHNjcmlwdCwgdGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShKU09OLnN0cmluZ2lmeShkYXRhKSkpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuaGVhZCwgc2NyaXB0KTtcbiAgICB9XG59XG4iXX0=
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUkvQzs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWxFOztXQUVHO1FBQ2MsU0FBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztR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O1FBQ2xELG9GQUFvRjtRQUNwRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUMvRixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUVBQW1FO1FBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7K0dBL09RLFlBQVk7bUhBQVosWUFBWSxjQUZULE1BQU07OzRGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0LCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVGhpbmcsIFdpdGhDb250ZXh0IH0gZnJvbSAnc2NoZW1hLWR0cyc7XG5cbmltcG9ydCB7IFNjSUNhdGFsb2dJdGVtIH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktY2F0YWxvZy1pdGVtJztcbmltcG9ydCB7IFNjSUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJVmlydHVhbENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktdmlydHVhbC1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lkT3JTbHVnUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLWlkLW9yLXNsdWcucGlwZSc7XG5pbXBvcnQgeyBTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1tZWRpYS1pbWFnZS10cmFuc2Zvcm1lci5waXBlJztcbmltcG9ydCB7IFNDX0NPTVBBTllfSU5GTyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1jb21wYW55LWluZm8nO1xuaW1wb3J0IHsgU0NfQ0FUQUxPR19QQUdFX01FVEEsIFNDX0RFRkFVTFRfUEFHRV9NRVRBIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWRlZmF1bHQtcGFnZS1tZXRhJztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY0lTZW8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktc2VvJztcbmltcG9ydCB7IFJvYm90c1RhZ1R5cGUgfSBmcm9tICcuLi90eXBlcy9yb2JvdHMtdGFnLXR5cGUnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyBTRU8t0L/QsNGA0LDQvNC10YLRgNCw0LzQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NTZW9TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBhbnlJbmZvID0gaW5qZWN0KFNDX0NPTVBBTllfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQsNC00LDQvdC90YvQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZW8gPSBpbmplY3QoU0NfREVGQVVMVF9QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0LDQtNCw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiyDQutCw0YLQsNC70L7Qs9CwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ0RlZmF1bHRTZW8gPSBpbmplY3QoU0NfQ0FUQUxPR19QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvywg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQuNGB0YXQvtC00Y8g0LjQtyDQvdCw0YHRgtGA0L7QtdC6INC+0LrRgNGD0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkT3JTbHVnUGlwZTogU2NJZE9yU2x1Z1BpcGUgPSBpbmplY3QoU2NJZE9yU2x1Z1BpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8g0LTQu9GPINGE0L7RgNC80LjRgNC+0LLQsNC90LjRjyDQv9C+0LvQvdC+0LPQviBVUkkg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwIG1lZGlhINGB0LXRgNCy0LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSA9IGluamVjdChTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGD0YHRgtCw0L3QvtCy0LrQuCDQvNC10YLQsNC00LDQvdC90YvRhSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWV0YVNlcnZpY2UgPSBpbmplY3QoTWV0YSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyDQt9Cw0LPQvtC70L7QstC60L7QvCDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LrRgiB7QGxpbmsgRG9jdW1lbnR9LCDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0Y7RidC40Lkg0LTQvtGB0YLRg9C/INC6IERPTSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgLyoqXG4gICAgICog0KTQsNCx0YDQuNC60LAg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0Y3QutC30LXQvNC/0LvRj9GA0L7QsiB7QGxpbmsgUmVuZGVyZXIyfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcblxuICAgIC8qKlxuICAgICAqINCt0LrQt9C10LzQv9C70Y/RgCB7QGxpbmsgUmVuZGVyZXIyfSDQtNC70Y8g0LHQtdC30L7Qv9Cw0YHQvdC+0Lkg0YDQsNCx0L7RgtGLINGBIERPTS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIgPSB0aGlzLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHNlbyDQv9Cw0YDQsNC80LXRgtGA0Ysg0L3QsCDQvtGB0L3QvtCy0LUg0YPQutCw0LfQsNC90L3QvtCz0L4g0YDQtdGB0YPRgNGB0LAuINCV0YHQu9C4INC60LDQutC+0LPQvi3RgtC+INGC0LXQs9CwINC90LXRgiwg0LHRg9C00LXRgiDRg9GB0YLQsNC90L7QstC70LXQvdC+INC30L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzb3VyY2Ug0KDQtdGB0YPRgNGBINC90LAg0L7RgdC90L7QstC1INC60L7RgtC+0YDQvtCz0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LzQtdGC0LAt0YLQtdCz0LguXG4gICAgICogQHBhcmFtIGltZyDQmNC30L7QsdGA0LDQttC10L3QuNC1LiDQldGB0LvQuCDQvdC1INC/0YDQuNGI0LvQviwg0YLQviDQsdGD0LTQtdGCINGD0YHRgtCw0L3QvtCy0LvQtdC90L4g0LfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKiBAcGFyYW0gcm9ib3RzINCh0L/QuNGB0L7QuiByb2JvdHMt0YLQtdCz0L7QsiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RnJvbVJlc291cmNlKHJlc291cmNlPzogU2NJU2VvLCBpbWc6IHN0cmluZyA9IHRoaXMudXJscy5sb2dvVXJsLCByb2JvdHM6IFJvYm90c1RhZ1R5cGVbXSA9IFsnaW5kZXgnLCAnZm9sbG93J10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJlc291cmNlID0ge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhyZXNvdXJjZT8udGl0bGUgPz8gdGhpcy5kZWZhdWx0U2VvLnRpdGxlLCByZXNvdXJjZT8uaW5zdGFuY2VEYXRhID8/IHt9KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnJlcGxhY2VUZW1wbGF0ZXMocmVzb3VyY2U/LmRlc2NyaXB0aW9uID8/IHRoaXMuZGVmYXVsdFNlby5kZXNjcmlwdGlvbiwgcmVzb3VyY2U/Lmluc3RhbmNlRGF0YSA/PyB7fSksXG4gICAgICAgICAgICBrZXl3b3JkczogcmVzb3VyY2U/LmtleXdvcmRzID8/IHRoaXMuZGVmYXVsdFNlby5rZXl3b3JkcyxcbiAgICAgICAgICAgIG1ldGE6IHJlc291cmNlPy5tZXRhID8/IFtdLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3RoaXMucm91dGVyLnVybH1gO1xuXG4gICAgICAgIHRoaXMuc2V0TWV0YVRhZ3ModXBkYXRlZFJlc291cmNlLnRpdGxlLCB1cGRhdGVkUmVzb3VyY2UuZGVzY3JpcHRpb24sIHVwZGF0ZWRSZXNvdXJjZS5rZXl3b3JkcywgdXBkYXRlZFJlc291cmNlLm1ldGEsIHJvYm90cyk7XG4gICAgICAgIHRoaXMuc2V0T3BlbkdyYXBoTWV0YVRhZ3ModXBkYXRlZFJlc291cmNlLnRpdGxlLCB1cGRhdGVkUmVzb3VyY2UuZGVzY3JpcHRpb24sIHVybCwgaW1nKTtcbiAgICAgICAgdGhpcy5zZXRDYW5vbmljYWxMaW5rKHVybCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvINC/0LDRgNCw0LzQtdGC0YDRiyDRgdC+INC30L3QsNGH0LXQvdC40LXQvCDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSDQl9Cw0LPQvtC70L7QstC+0Log0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKiBAcGFyYW0gcm9ib3RzINCh0L/QuNGB0L7QuiByb2JvdHMg0YLQtdCz0L7QsiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0QnlEZWZhdWx0KHRpdGxlPzogc3RyaW5nLCByb2JvdHM6IFJvYm90c1RhZ1R5cGVbXSA9IFsnaW5kZXgnLCAnZm9sbG93J10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRGcm9tUmVzb3VyY2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGAke3RpdGxlID8/IHRoaXMuZGVmYXVsdFNlby50aXRsZX0gLSAke3RoaXMuY29tcGFueUluZm8ubmFtZX1gLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aXRsZSA/IGAke3RpdGxlfSwgJHt0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb259YCA6IHRoaXMuZGVmYXVsdFNlby5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnVybHMubG9nb1VybCxcbiAgICAgICAgICAgIHJvYm90c1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHNlbyDQv9Cw0YDQsNC80LXRgtGA0Ysg0YHQviDQt9C90LDRh9C10L3QuNC10Lwg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC30L3QsNGH0LXQvdC40LUgXCLQvdC1INC40L3QtNC10LrRgdC40YDQvtCy0LDRgtGMXCIg0LTQu9GPINC/0L7QuNGB0LrQvtCy0YvRhSDRgNC+0LHQvtGC0L7Qsi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSDQl9Cw0LPQvtC70L7QstC+0Log0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0QnlEZWZhdWx0QXNOb0luZGV4ZWQodGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRCeURlZmF1bHQodGl0bGUsIFsnbm9pbmRleCcsICdub2ZvbGxvdycsICdub2FyY2hpdmUnXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvLdC/0LDRgNCw0LzQtdGC0YDRiyDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0JTQsNC90L3Ri9C1INC+0LEg0Y3Qu9C10LzQtdC90YLQtSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqIEBwYXJhbSB1cmxQYXRoIFVybCDQv9GD0YLRjCDQuiDRjdC70LXQvNC10L3RgtGDINC60LDRgtCw0LvQvtCz0LAuINCSINC/0YPRgtC4INC00L7Qu9C20LXQvSDQv9GA0LjRgdGD0YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvSAnOmlkJywg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsCDQtNC70Y8g0L/QvtC00YHRgtCw0L3QvtCy0LrQuC5cbiAgICAgKiBAcGFyYW0gc2NoZW1hT3JnRGF0YSDQlNCw0L3QvdGL0LUgU2NoZW1hLm9yZyDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Rm9yQ2F0YWxvZ0l0ZW0oaXRlbTogU2NJQ2F0YWxvZ0l0ZW08U2NJQ2F0ZWdvcnkgfCBTY0lWaXJ0dWFsQ2F0ZWdvcnk+LCB1cmxQYXRoOiBzdHJpbmcsIHNjaGVtYU9yZ0RhdGE/OiBXaXRoQ29udGV4dDxUaGluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHt1cmxQYXRoLnJlcGxhY2UoJzppZCcsIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShpdGVtKS50b1N0cmluZygpKX1gO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhpdGVtLnNlbz8udGl0bGUgPz8gYCR7aXRlbS5uYW1lfSAtINCa0YPQv9C40YLRjCDQsiAke3RoaXMuY29tcGFueUluZm8ubmFtZX1gLCBpdGVtKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnJlcGxhY2VUZW1wbGF0ZXMoaXRlbS5zZW8/LmRlc2NyaXB0aW9uID8/IGAke2l0ZW0ubmFtZX0gLSDQmtGD0L/QuNGC0Ywg0L/QviDQstGL0LPQvtC00L3Ri9C8INGG0LXQvdCw0Lwg0LIgJHt0aGlzLmNvbXBhbnlJbmZvLm5hbWV9YCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gaXRlbS5zZW8/LmtleXdvcmRzID8/IGAke2l0ZW0ubmFtZX0sICR7dGhpcy5jYXRhbG9nRGVmYXVsdFNlby5rZXl3b3Jkc31gO1xuICAgICAgICBjb25zdCBtZXRhID0gaXRlbS5zZW8/Lm1ldGEgPz8gW107XG5cbiAgICAgICAgLy8g0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSBzZW8t0L/QsNGA0LDQvNC10YLRgNGLLCDQsiDRgtC+0Lwg0YfQuNGB0LvQtSDQuCDQutCw0L3QvtC90LjRh9C10YHQutGD0Y4g0YHRgdGL0LvQutGDLlxuICAgICAgICB0aGlzLnNldE1ldGFUYWdzKHRpdGxlLCBkZXNjcmlwdGlvbiwga2V5d29yZHMsIG1ldGEsIFsnaW5kZXgnLCAnZm9sbG93J10pO1xuICAgICAgICB0aGlzLnNldE9wZW5HcmFwaE1ldGFUYWdzKHRpdGxlLCBkZXNjcmlwdGlvbiwgdXJsLCB0aGlzLm1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUudHJhbnNmb3JtKGl0ZW0uaW1hZ2UsIHRydWUpKTtcbiAgICAgICAgdGhpcy5zZXRDYW5vbmljYWxMaW5rKHVybCk7XG5cbiAgICAgICAgLy8g0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10LwgU2NoZW1hLm9yZyDQv9Cw0YDQsNC80LXRgtGA0YsuXG4gICAgICAgIGlmIChzY2hlbWFPcmdEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNjaGVtYU9yZ0RhdGEoc2NoZW1hT3JnRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0LzQtdC90Y/QtdGCINGI0LDQsdC70L7QvdGLINCyINGC0LXQutGB0YLQtSDQvdCwINC30L3QsNGH0LXQvdC40Y8g0LjQtyDQvtCx0YrQtdC60YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0INCi0LXQutGB0YIg0YEg0YjQsNCx0LvQvtC90LDQvNC4LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZURhdGEg0J7QsdGK0LXQutGCINGBINC00LDQvdC90YvQvNC4INC00LvRjyDQt9Cw0LzQtdC90YsuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIHJlcGxhY2VUZW1wbGF0ZXModGV4dDogc3RyaW5nLCBpbnN0YW5jZURhdGE6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoL1xcJFxceyhbXn1dKylcXH0vZywgKF90ZW1wbGF0ZTogc3RyaW5nLCBmaWVsZFBhdGhWYXJpYW50czogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gZmllbGRQYXRoVmFyaWFudHNcbiAgICAgICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkUGF0aCkgPT4gZmllbGRQYXRoLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgLm1hcCgoZmllbGRQYXRoKSA9PiBnZXQoaW5zdGFuY2VEYXRhLCBmaWVsZFBhdGgpIGFzIHVua25vd24pXG4gICAgICAgICAgICAgICAgLmZpbmQoKGZpZWxkVmFsdWUpID0+ICFpc05pbChmaWVsZFZhbHVlKSk7XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLW5lc3RlZC1jb25kaXRpb25hbFxuICAgICAgICAgICAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/ICcnIDogaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQstGB0LUgbWV0YS3RgtC10LPQuCDRgdGC0YDQsNC90LjRhtGLLiDQldGB0LvQuCDQutCw0LrQvtC5LdC70LjQsdC+INC40Lcg0L/QsNGA0LDQvNC10YLRgNC+0LIg0L3QtSDRg9C60LDQt9Cw0L0sINC00LvRjyDQvdC10LPQviDRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgtGB0Y8g0LfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSDQl9Cw0LPQvtC70L7QstC+0Log0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24g0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBrZXl3b3JkcyDQmtC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LAg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKiBAcGFyYW0gbWV0YSDQnNCw0YHRgdC40LIg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvRhSDQt9C90LDRh9C10L3QuNC5INC80LXRgtCw0YLQtdCz0L7Qsi5cbiAgICAgKiBAcGFyYW0gcm9ib3RzINCh0L/QuNGB0L7QuiByb2JvdHMg0YLQtdCz0L7QsiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldE1ldGFUYWdzKFxuICAgICAgICB0aXRsZTogc3RyaW5nID0gdGhpcy5kZWZhdWx0U2VvLnRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nID0gdGhpcy5kZWZhdWx0U2VvLmRlc2NyaXB0aW9uLFxuICAgICAgICBrZXl3b3Jkczogc3RyaW5nID0gdGhpcy5kZWZhdWx0U2VvLmtleXdvcmRzLFxuICAgICAgICBtZXRhOiBTY0lTZW9bJ21ldGEnXSA9IFtdLFxuICAgICAgICByb2JvdHM6IFJvYm90c1RhZ1R5cGVbXSA9IFsnaW5kZXgnLCAnZm9sbG93J11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuXG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgbmFtZTogJ2Rlc2NyaXB0aW9uJywgY29udGVudDogZGVzY3JpcHRpb24gfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgbmFtZTogJ2tleXdvcmRzJywgY29udGVudDoga2V5d29yZHMgfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgbmFtZTogJ3JvYm90cycsIGNvbnRlbnQ6IHJvYm90cy5qb2luKCcsICcpIH0pO1xuXG4gICAgICAgIG1ldGEuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6IHRhZy5uYW1lLCBjb250ZW50OiB0YWcuY29udGVudCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgT3BlbiBHcmFwaCBtZXRhLdGC0LXQs9C4LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9nVGl0bGUg0JfQsNCz0L7Qu9C+0LLQvtC6LlxuICAgICAqIEBwYXJhbSBvZ0Rlc2NyaXB0aW9uINCe0L/QuNGB0LDQvdC40LUuXG4gICAgICogQHBhcmFtIG9nVXJsIFVybC5cbiAgICAgKiBAcGFyYW0gb2dJbWcg0KHRgdGL0LvQutCwINC90LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldE9wZW5HcmFwaE1ldGFUYWdzKG9nVGl0bGU6IHN0cmluZywgb2dEZXNjcmlwdGlvbjogc3RyaW5nLCBvZ1VybDogc3RyaW5nLCBvZ0ltZzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0eXBlJywgY29udGVudDogJ3dlYnNpdGUnIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6dGl0bGUnLCBjb250ZW50OiBvZ1RpdGxlIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6ZGVzY3JpcHRpb24nLCBjb250ZW50OiBvZ0Rlc2NyaXB0aW9uIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6dXJsJywgY29udGVudDogb2dVcmwgfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzppbWFnZScsIGNvbnRlbnQ6IG9nSW1nIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINGC0LXQsyDQutCw0L3QvtC90LjRh9C10YHQutC+0Lkg0YHRgtGA0LDQvdC40YbRiyA8bGluayByZWw9XCJjYW5vbmljYWxcIiBocmVmPVwiLi4uXCIgLz4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIFVSTCDQutC+0YLQvtGA0YvQuSDQvdC10L7QsdGF0L7QtNC40LzQviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LIg0LrQsNGH0LXRgdGC0LLQtSDRgdGB0YvQu9C60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRDYW5vbmljYWxMaW5rKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vINCj0LTQsNC70Y/QtdC8INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSBsaW5rIGNhbm9uaWNhbC5cbiAgICAgICAgY29uc3QgZXhpc3RpbmdMaW5rID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD1cImNhbm9uaWNhbFwiXScpO1xuXG4gICAgICAgIGlmIChleGlzdGluZ0xpbms/LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoZXhpc3RpbmdMaW5rLnBhcmVudE5vZGUsIGV4aXN0aW5nTGluayk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQodC+0LfQtNCw0ZHQvCDQuCDRg9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQvdC+0LLRi9C5INGC0LXQsy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGxpbmssICdyZWwnLCAnY2Fub25pY2FsJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGxpbmssICdocmVmJywgdXJsKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIGxpbmspO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIFNjaGVtYS5vcmcg0L7QsdGK0LXQutGCINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0YSDQlNCw0L3QvdGL0LUgU2NoZW1hLm9yZyDQtNC70Y8g0LLRgdGC0YDQsNC40LLQsNC90LjRjyDQvdCwINGB0YLRgNCw0L3QuNGG0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRTY2hlbWFPcmdEYXRhPFQgZXh0ZW5kcyBUaGluZz4oZGF0YTogV2l0aENvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvamVjdEF0dHJpYnV0ZU5hbWUgPSAnZGF0YS1zYy1zY2hlbWEtb3JnJztcbiAgICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0LLRgdC1INGA0LDQvdC10LUg0YHQvtC30LTQsNC90L3Ri9C1INGB0LrRgNC40L/RgtGLIFNjaGVtYS5vcmcgKNC/0L4g0YPQvdC40LrQsNC70YzQvdC+0LzRgyDQsNGC0YDQuNCx0YPRgtGDINC/0YDQvtC10LrRgtCwKS5cbiAgICAgICAgY29uc3QgZXhpc3RpbmdTY3JpcHRzID0gdGhpcy5kb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoYHNjcmlwdFske3Byb2plY3RBdHRyaWJ1dGVOYW1lfV1gKTtcbiAgICAgICAgZXhpc3RpbmdTY3JpcHRzLmZvckVhY2goKGV4aXN0aW5nU2NyaXB0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdTY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoZXhpc3RpbmdTY3JpcHQucGFyZW50Tm9kZSwgZXhpc3RpbmdTY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHNjcmlwdCwgJ3R5cGUnLCAnYXBwbGljYXRpb24vbGQranNvbicpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShzY3JpcHQsIHByb2plY3RBdHRyaWJ1dGVOYW1lLCAnJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc2NyaXB0LCB0aGlzLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCBzY3JpcHQpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parseISO, parse, isValid, format } from 'date-fns';
|
|
2
|
-
import { isString, isNil, isMatch, isArray } from 'lodash-es';
|
|
2
|
+
import { isString, isNil, isMatch, isArray, get } from 'lodash-es';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, LOCALE_ID, Pipe, RendererFactory2 } from '@angular/core';
|
|
5
5
|
import { WA_LOCAL_STORAGE, WA_USER_AGENT, WA_WINDOW } from '@ng-web-apis/common';
|
|
@@ -7647,10 +7647,6 @@ class ScSeoService {
|
|
|
7647
7647
|
* Метаданные страницы каталога по умолчанию.
|
|
7648
7648
|
*/
|
|
7649
7649
|
this.catalogDefaultSeo = inject(SC_CATALOG_PAGE_META);
|
|
7650
|
-
/**
|
|
7651
|
-
* Признак необходимости использовать Id или Slug при маршрутизации.
|
|
7652
|
-
*/
|
|
7653
|
-
this.idOrSlugInRoute = inject(SC_ID_OR_SLUG_IN_ROUTE);
|
|
7654
7650
|
/**
|
|
7655
7651
|
* Список ссылок приложения.
|
|
7656
7652
|
*/
|
|
@@ -7697,14 +7693,15 @@ class ScSeoService {
|
|
|
7697
7693
|
*/
|
|
7698
7694
|
setFromResource(resource, img = this.urls.logoUrl, robots = ['index', 'follow']) {
|
|
7699
7695
|
const updatedResource = {
|
|
7700
|
-
title: resource?.title ?? this.defaultSeo.title,
|
|
7701
|
-
description: resource?.description ?? this.defaultSeo.description,
|
|
7696
|
+
title: this.replaceTemplates(resource?.title ?? this.defaultSeo.title, resource?.instanceData ?? {}),
|
|
7697
|
+
description: this.replaceTemplates(resource?.description ?? this.defaultSeo.description, resource?.instanceData ?? {}),
|
|
7702
7698
|
keywords: resource?.keywords ?? this.defaultSeo.keywords,
|
|
7703
7699
|
meta: resource?.meta ?? [],
|
|
7704
7700
|
};
|
|
7705
7701
|
const url = `${this.urls.siteUrl}${this.router.url}`;
|
|
7706
7702
|
this.setMetaTags(updatedResource.title, updatedResource.description, updatedResource.keywords, updatedResource.meta, robots);
|
|
7707
7703
|
this.setOpenGraphMetaTags(updatedResource.title, updatedResource.description, url, img);
|
|
7704
|
+
this.setCanonicalLink(url);
|
|
7708
7705
|
}
|
|
7709
7706
|
/**
|
|
7710
7707
|
* Устанавливает seo параметры со значением по умолчанию.
|
|
@@ -7715,7 +7712,7 @@ class ScSeoService {
|
|
|
7715
7712
|
setByDefault(title, robots = ['index', 'follow']) {
|
|
7716
7713
|
this.setFromResource({
|
|
7717
7714
|
title: `${title ?? this.defaultSeo.title} - ${this.companyInfo.name}`,
|
|
7718
|
-
description: `${title}, ${this.defaultSeo.description}
|
|
7715
|
+
description: title ? `${title}, ${this.defaultSeo.description}` : this.defaultSeo.description,
|
|
7719
7716
|
}, this.urls.logoUrl, robots);
|
|
7720
7717
|
}
|
|
7721
7718
|
/**
|
|
@@ -7735,23 +7732,38 @@ class ScSeoService {
|
|
|
7735
7732
|
*/
|
|
7736
7733
|
setForCatalogItem(item, urlPath, schemaOrgData) {
|
|
7737
7734
|
const url = `${this.urls.siteUrl}${urlPath.replace(':id', this.idOrSlugPipe.transform(item).toString())}`;
|
|
7738
|
-
const title = item.seo?.title ?? `${item.name} - Купить в ${this.companyInfo.name}
|
|
7739
|
-
const description = item.seo?.description ?? `${item.name} - Купить по выгодным ценам в ${this.companyInfo.name}
|
|
7735
|
+
const title = this.replaceTemplates(item.seo?.title ?? `${item.name} - Купить в ${this.companyInfo.name}`, item);
|
|
7736
|
+
const description = this.replaceTemplates(item.seo?.description ?? `${item.name} - Купить по выгодным ценам в ${this.companyInfo.name}`, item);
|
|
7740
7737
|
const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogDefaultSeo.keywords}`;
|
|
7741
7738
|
const meta = item.seo?.meta ?? [];
|
|
7742
|
-
// Устанавливаем стандартные seo
|
|
7739
|
+
// Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
|
|
7743
7740
|
this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
|
|
7744
7741
|
this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
|
|
7745
|
-
|
|
7746
|
-
// ссылку на страницу в которой используется slug (а не id).
|
|
7747
|
-
if (this.idOrSlugInRoute === 'slug' && item.id && item.slug) {
|
|
7748
|
-
this.setCanonicalLink(url);
|
|
7749
|
-
}
|
|
7742
|
+
this.setCanonicalLink(url);
|
|
7750
7743
|
// Устанавливаем Schema.org параметры.
|
|
7751
7744
|
if (schemaOrgData) {
|
|
7752
7745
|
this.setSchemaOrgData(schemaOrgData);
|
|
7753
7746
|
}
|
|
7754
7747
|
}
|
|
7748
|
+
/**
|
|
7749
|
+
* Заменяет шаблоны в тексте на значения из объекта.
|
|
7750
|
+
*
|
|
7751
|
+
* @param text Текст с шаблонами.
|
|
7752
|
+
* @param instanceData Объект с данными для замены.
|
|
7753
|
+
*/
|
|
7754
|
+
// eslint-disable-next-line class-methods-use-this
|
|
7755
|
+
replaceTemplates(text, instanceData) {
|
|
7756
|
+
return text.replaceAll(/\$\{([^}]+)\}/g, (_template, fieldPathVariants) => {
|
|
7757
|
+
const value = fieldPathVariants
|
|
7758
|
+
.split('|')
|
|
7759
|
+
.map((fieldPath) => fieldPath.trim())
|
|
7760
|
+
.filter(Boolean)
|
|
7761
|
+
.map((fieldPath) => get(instanceData, fieldPath))
|
|
7762
|
+
.find((fieldValue) => !isNil(fieldValue));
|
|
7763
|
+
// eslint-disable-next-line sonarjs/no-nested-conditional
|
|
7764
|
+
return isNil(value) ? '' : isString(value) ? value : String(value);
|
|
7765
|
+
});
|
|
7766
|
+
}
|
|
7755
7767
|
/**
|
|
7756
7768
|
* Устанавливает все meta-теги страницы. Если какой-либо из параметров не указан, для него устанавливается значение по умолчанию.
|
|
7757
7769
|
*
|