@snabcentr/client-core 3.9.1 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/seo/classes/schema-org-factory.mjs +181 -61
- package/esm2022/seo/services/sc-seo.service.mjs +9 -4
- package/fesm2022/snabcentr-client-core.mjs +187 -63
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +1 -1
- package/release_notes.tmp +4 -2
- package/seo/classes/schema-org-factory.d.ts +34 -4
- package/seo/services/sc-seo.service.d.ts +4 -0
|
@@ -8,6 +8,7 @@ import { ScMediaImageTransformerPipe } from '../../pipes/sc-media-image-transfor
|
|
|
8
8
|
import { SC_COMPANY_INFO } from '../../tokens/sc-company-info';
|
|
9
9
|
import { SC_CATALOG_ITEM_PAGE_META, SC_DEFAULT_PAGE_META } from '../../tokens/sc-default-page-meta';
|
|
10
10
|
import { SC_URLS } from '../../tokens/sc-urls';
|
|
11
|
+
import { SchemaOrgFactory } from '../classes/schema-org-factory';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
/**
|
|
13
14
|
* Сервис управления SEO-параметрами.
|
|
@@ -54,6 +55,10 @@ export class ScSeoService {
|
|
|
54
55
|
* Объект {@link Document}, предоставляющий доступ к DOM страницы.
|
|
55
56
|
*/
|
|
56
57
|
this.document = inject(DOCUMENT);
|
|
58
|
+
/**
|
|
59
|
+
* Фабрика для создания данных Schema.org.
|
|
60
|
+
*/
|
|
61
|
+
this.schemaOrgFactory = inject(SchemaOrgFactory);
|
|
57
62
|
/**
|
|
58
63
|
* Фабрика для создания экземпляров {@link Renderer2}.
|
|
59
64
|
*/
|
|
@@ -81,6 +86,8 @@ export class ScSeoService {
|
|
|
81
86
|
this.setMetaTags(updatedResource.title, updatedResource.description, updatedResource.keywords, updatedResource.meta, robots);
|
|
82
87
|
this.setOpenGraphMetaTags(updatedResource.title, updatedResource.description, url, img);
|
|
83
88
|
this.setCanonicalLink(url);
|
|
89
|
+
// Устанавливаем Schema.org параметры.
|
|
90
|
+
this.setSchemaOrgData(this.schemaOrgFactory.generateForOrganization());
|
|
84
91
|
}
|
|
85
92
|
/**
|
|
86
93
|
* Устанавливает seo параметры со значением по умолчанию.
|
|
@@ -123,9 +130,7 @@ export class ScSeoService {
|
|
|
123
130
|
this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
|
|
124
131
|
this.setCanonicalLink(url);
|
|
125
132
|
// Устанавливаем Schema.org параметры.
|
|
126
|
-
|
|
127
|
-
this.setSchemaOrgData(schemaOrgData);
|
|
128
|
-
}
|
|
133
|
+
this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
|
|
129
134
|
}
|
|
130
135
|
/**
|
|
131
136
|
* Заменяет шаблоны в тексте на значения из объекта.
|
|
@@ -227,4 +232,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
227
232
|
providedIn: 'root',
|
|
228
233
|
}]
|
|
229
234
|
}] });
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUkvQzs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNFOztXQUVHO1FBQ2MsU0FBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztR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O2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXRhLCBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGdldCwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRoaW5nLCBXaXRoQ29udGV4dCB9IGZyb20gJ3NjaGVtYS1kdHMnO1xuXG5pbXBvcnQgeyBTY0lDYXRhbG9nSXRlbSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGFsb2ctaXRlbSc7XG5pbXBvcnQgeyBTY0lDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSVZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLXZpcnR1YWwtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJZE9yU2x1Z1BpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1pZC1vci1zbHVnLnBpcGUnO1xuaW1wb3J0IHsgU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtbWVkaWEtaW1hZ2UtdHJhbnNmb3JtZXIucGlwZSc7XG5pbXBvcnQgeyBTQ19DT01QQU5ZX0lORk8gfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtY29tcGFueS1pbmZvJztcbmltcG9ydCB7IFNDX0NBVEFMT0dfSVRFTV9QQUdFX01FVEEsIFNDX0RFRkFVTFRfUEFHRV9NRVRBIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWRlZmF1bHQtcGFnZS1tZXRhJztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY0lTZW8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktc2VvJztcbmltcG9ydCB7IFJvYm90c1RhZ1R5cGUgfSBmcm9tICcuLi90eXBlcy9yb2JvdHMtdGFnLXR5cGUnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyBTRU8t0L/QsNGA0LDQvNC10YLRgNCw0LzQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NTZW9TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBhbnlJbmZvID0gaW5qZWN0KFNDX0NPTVBBTllfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQsNC00LDQvdC90YvQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZW8gPSBpbmplY3QoU0NfREVGQVVMVF9QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0LDQtNCw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiyDQutCw0YLQsNC70L7Qs9CwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ0l0ZW1EZWZhdWx0U2VvID0gaW5qZWN0KFNDX0NBVEFMT0dfSVRFTV9QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+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/OiBXaXRoQ29udGV4dDxUaGluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHt1cmxQYXRoLnJlcGxhY2UoJzppZCcsIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShpdGVtKS50b1N0cmluZygpKX1gO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhpdGVtLnNlbz8udGl0bGUgPz8gdGhpcy5jYXRhbG9nSXRlbURlZmF1bHRTZW8udGl0bGUgPz8gYCR7aXRlbS5uYW1lfSAtINCa0YPQv9C40YLRjCDQsiAke3RoaXMuY29tcGFueUluZm8ubmFtZX1gLCBpdGVtKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnJlcGxhY2VUZW1wbGF0ZXMoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICAgICAgaXRlbS5zZW8/LmRlc2NyaXB0aW9uID8/IHRoaXMuY2F0YWxvZ0l0ZW1EZWZhdWx0U2VvLmRlc2NyaXB0aW9uID8/IGAke2l0ZW0ubmFtZX0gLSDQmtGD0L/QuNGC0Ywg0L/QviDQstGL0LPQvtC00L3Ri9C8INGG0LXQvdCw0Lwg0LIgJHt0aGlzLmNvbXBhbnlJbmZvLm5hbWV9YCxcbiAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5d29yZHMgPSBpdGVtLnNlbz8ua2V5d29yZHMgPz8gYCR7aXRlbS5uYW1lfSwgJHt0aGlzLmNhdGFsb2dJdGVtRGVmYXVsdFNlby5rZXl3b3Jkc31gO1xuICAgICAgICBjb25zdCBtZXRhID0gaXRlbS5zZW8/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==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUlqRTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNFOztXQUVHO1FBQ2MsU0FBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4Qzs7V0FFRztRQUNLLGlCQUFZLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5RDs7V0FFRztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRWpGOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUM7O1dBRUc7UUFDYyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUM7O1dBRUc7UUFDYyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDOztXQUVHO1FBQ2MscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0Q7O1dBRUc7UUFDYyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTVEOztXQUVHO1FBQ2MsYUFBUSxHQUFjLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQTJMMUY7SUF6TEc7Ozs7OztPQU1HO0lBQ0ksZUFBZSxDQUFDLFFBQWlCLEVBQUUsTUFBYyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUEwQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFDcEgsTUFBTSxlQUFlLEdBQUc7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ3BHLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUN0SCxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDeEQsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtTQUM3QixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXJELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3SCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0Isc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxLQUFjLEVBQUUsU0FBMEIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLENBQ2hCO1lBQ0ksS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ3JFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztTQUNoRyxFQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNqQixNQUFNLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCLENBQUMsS0FBYztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsSUFBc0QsRUFBRSxPQUFlLEVBQUUsYUFBa0M7UUFDaEksTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUcsdUVBQXVFO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7UUFDckMsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxpQ0FBaUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFDdkksSUFBSSxDQUNQLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVsQyw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtEQUFrRDtJQUMxQyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsWUFBb0I7UUFDdkQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBaUIsRUFBRSxpQkFBeUIsRUFBVSxFQUFFO1lBQzlGLE1BQU0sS0FBSyxHQUFZLGlCQUFpQjtpQkFDbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDZixHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFZLENBQUM7aUJBQzNELElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUU5Qyx5REFBeUQ7WUFDekQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFdBQVcsQ0FDZixRQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDckMsY0FBc0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQ2pELFdBQW1CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUMzQyxPQUF1QixFQUFFLEVBQ3pCLFNBQTBCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUU3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsYUFBcUIsRUFBRSxLQUFhLEVBQUUsS0FBYTtRQUM3RixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2hDLHVDQUF1QztRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRTFFLElBQUksWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxtRUFBbUU7UUFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQWtCLElBQW9CO1FBQzFELE1BQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDbEQsb0ZBQW9GO1FBQ3BGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUN2QyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxtRUFBbUU7UUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQzsrR0ExUFEsWUFBWTttSEFBWixZQUFZLGNBRlQsTUFBTTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBnZXQsIGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBUaGluZywgV2l0aENvbnRleHQgfSBmcm9tICdzY2hlbWEtZHRzJztcblxuaW1wb3J0IHsgU2NJQ2F0YWxvZ0l0ZW0gfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRhbG9nLWl0ZW0nO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSWRPclNsdWdQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtaWQtb3Itc2x1Zy5waXBlJztcbmltcG9ydCB7IFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLW1lZGlhLWltYWdlLXRyYW5zZm9ybWVyLnBpcGUnO1xuaW1wb3J0IHsgU0NfQ09NUEFOWV9JTkZPIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWNvbXBhbnktaW5mbyc7XG5pbXBvcnQgeyBTQ19DQVRBTE9HX0lURU1fUEFHRV9NRVRBLCBTQ19ERUZBVUxUX1BBR0VfTUVUQSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1kZWZhdWx0LXBhZ2UtbWV0YSc7XG5pbXBvcnQgeyBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLXVybHMnO1xuaW1wb3J0IHsgU2NoZW1hT3JnRmFjdG9yeSB9IGZyb20gJy4uL2NsYXNzZXMvc2NoZW1hLW9yZy1mYWN0b3J5JztcbmltcG9ydCB7IFNjSVNlbyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtaS1zZW8nO1xuaW1wb3J0IHsgUm9ib3RzVGFnVHlwZSB9IGZyb20gJy4uL3R5cGVzL3JvYm90cy10YWctdHlwZSc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINGD0L/RgNCw0LLQu9C10L3QuNGPIFNFTy3Qv9Cw0YDQsNC80LXRgtGA0LDQvNC4LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1Nlb1NlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDQutC+0LzQv9Cw0L3QuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcGFueUluZm8gPSBpbmplY3QoU0NfQ09NUEFOWV9JTkZPKTtcblxuICAgIC8qKlxuICAgICAqINCc0LXRgtCw0LTQsNC90L3Ri9C1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNlbyA9IGluamVjdChTQ19ERUZBVUxUX1BBR0VfTUVUQSk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQsNC00LDQvdC90YvQtSDRgdGC0YDQsNC90LjRhtGLINC60LDRgtCw0LvQvtCz0LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nSXRlbURlZmF1bHRTZW8gPSBpbmplY3QoU0NfQ0FUQUxPR19JVEVNX1BBR0VfTUVUQSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJscyA9IGluamVjdChTQ19VUkxTKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/LCDQstC+0LfQstGA0LDRidCw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpINC40YHRhdC+0LTRjyDQuNC3INC90LDRgdGC0YDQvtC10Log0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgaWRPclNsdWdQaXBlOiBTY0lkT3JTbHVnUGlwZSA9IGluamVjdChTY0lkT3JTbHVnUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvyDQtNC70Y8g0YTQvtGA0LzQuNGA0L7QstCw0L3QuNGPINC/0L7Qu9C90L7Qs9C+IFVSSSDQuNC30L7QsdGA0LDQttC10L3QuNGPINC90LAgbWVkaWEg0YHQtdGA0LLQtdGA0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlID0gaW5qZWN0KFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPRgdGC0LDQvdC+0LLQutC4INC80LXRgtCw0LTQsNC90L3Ri9GFINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXRhU2VydmljZSA9IGluamVjdChNZXRhKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQvNCw0YDRiNGA0YPRgtC40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGD0L/RgNCw0LLQu9C10L3QuNGPINC30LDQs9C+0LvQvtCy0LrQvtC8INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVNlcnZpY2UgPSBpbmplY3QoVGl0bGUpO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGK0LXQutGCIHtAbGluayBEb2N1bWVudH0sINC/0YDQtdC00L7RgdGC0LDQstC70Y/RjtGJ0LjQuSDQtNC+0YHRgtGD0L8g0LogRE9NINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICAvKipcbiAgICAgKiDQpNCw0LHRgNC40LrQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQtNCw0L3QvdGL0YUgU2NoZW1hLm9yZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYU9yZ0ZhY3RvcnkgPSBpbmplY3QoU2NoZW1hT3JnRmFjdG9yeSk7XG5cbiAgICAvKipcbiAgICAgKiDQpNCw0LHRgNC40LrQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDRjdC60LfQtdC80L/Qu9GP0YDQvtCyIHtAbGluayBSZW5kZXJlcjJ9LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXJGYWN0b3J5ID0gaW5qZWN0KFJlbmRlcmVyRmFjdG9yeTIpO1xuXG4gICAgLyoqXG4gICAgICog0K3QutC30LXQvNC/0LvRj9GAIHtAbGluayBSZW5kZXJlcjJ9INC00LvRjyDQsdC10LfQvtC/0LDRgdC90L7QuSDRgNCw0LHQvtGC0Ysg0YEgRE9NLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMiA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvINC/0LDRgNCw0LzQtdGC0YDRiyDQvdCwINC+0YHQvdC+0LLQtSDRg9C60LDQt9Cw0L3QvdC+0LPQviDRgNC10YHRg9GA0YHQsC4g0JXRgdC70Lgg0LrQsNC60L7Qs9C+LdGC0L4g0YLQtdCz0LAg0L3QtdGCLCDQsdGD0LTQtdGCINGD0YHRgtCw0L3QvtCy0LvQtdC90L4g0LfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNvdXJjZSDQoNC10YHRg9GA0YEg0L3QsCDQvtGB0L3QvtCy0LUg0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDRg9GB0YLQsNC90L7QstC40YLRjCDQvNC10YLQsC3RgtC10LPQuC5cbiAgICAgKiBAcGFyYW0gaW1nINCY0LfQvtCx0YDQsNC20LXQvdC40LUuINCV0YHQu9C4INC90LUg0L/RgNC40YjQu9C+LCDRgtC+INCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L3QviDQt9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqIEBwYXJhbSByb2JvdHMg0KHQv9C40YHQvtC6IHJvYm90cy3RgtC10LPQvtCyINC00LvRjyDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGcm9tUmVzb3VyY2UocmVzb3VyY2U/OiBTY0lTZW8sIGltZzogc3RyaW5nID0gdGhpcy51cmxzLmxvZ29VcmwsIHJvYm90czogUm9ib3RzVGFnVHlwZVtdID0gWydpbmRleCcsICdmb2xsb3cnXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB1cGRhdGVkUmVzb3VyY2UgPSB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5yZXBsYWNlVGVtcGxhdGVzKHJlc291cmNlPy50aXRsZSA/PyB0aGlzLmRlZmF1bHRTZW8udGl0bGUsIHJlc291cmNlPy5pbnN0YW5jZURhdGEgPz8ge30pLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhyZXNvdXJjZT8uZGVzY3JpcHRpb24gPz8gdGhpcy5kZWZhdWx0U2VvLmRlc2NyaXB0aW9uLCByZXNvdXJjZT8uaW5zdGFuY2VEYXRhID8/IHt9KSxcbiAgICAgICAgICAgIGtleXdvcmRzOiByZXNvdXJjZT8ua2V5d29yZHMgPz8gdGhpcy5kZWZhdWx0U2VvLmtleXdvcmRzLFxuICAgICAgICAgICAgbWV0YTogcmVzb3VyY2U/Lm1ldGEgPz8gW10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7dGhpcy5yb3V0ZXIudXJsfWA7XG5cbiAgICAgICAgdGhpcy5zZXRNZXRhVGFncyh1cGRhdGVkUmVzb3VyY2UudGl0bGUsIHVwZGF0ZWRSZXNvdXJjZS5kZXNjcmlwdGlvbiwgdXBkYXRlZFJlc291cmNlLmtleXdvcmRzLCB1cGRhdGVkUmVzb3VyY2UubWV0YSwgcm9ib3RzKTtcbiAgICAgICAgdGhpcy5zZXRPcGVuR3JhcGhNZXRhVGFncyh1cGRhdGVkUmVzb3VyY2UudGl0bGUsIHVwZGF0ZWRSZXNvdXJjZS5kZXNjcmlwdGlvbiwgdXJsLCBpbWcpO1xuICAgICAgICB0aGlzLnNldENhbm9uaWNhbExpbmsodXJsKTtcblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCBTY2hlbWEub3JnINC/0LDRgNCw0LzQtdGC0YDRiy5cbiAgICAgICAgdGhpcy5zZXRTY2hlbWFPcmdEYXRhKHRoaXMuc2NoZW1hT3JnRmFjdG9yeS5nZW5lcmF0ZUZvck9yZ2FuaXphdGlvbigpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8g0L/QsNGA0LDQvNC10YLRgNGLINGB0L4g0LfQvdCw0YfQtdC90LjQtdC8INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSByb2JvdHMg0KHQv9C40YHQvtC6IHJvYm90cyDRgtC10LPQvtCyINC00LvRjyDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCeURlZmF1bHQodGl0bGU/OiBzdHJpbmcsIHJvYm90czogUm9ib3RzVGFnVHlwZVtdID0gWydpbmRleCcsICdmb2xsb3cnXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEZyb21SZXNvdXJjZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogYCR7dGl0bGUgPz8gdGhpcy5kZWZhdWx0U2VvLnRpdGxlfSAtICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRpdGxlID8gYCR7dGl0bGV9LCAke3RoaXMuZGVmYXVsdFNlby5kZXNjcmlwdGlvbn1gIDogdGhpcy5kZWZhdWx0U2VvLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudXJscy5sb2dvVXJsLFxuICAgICAgICAgICAgcm9ib3RzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvINC/0LDRgNCw0LzQtdGC0YDRiyDRgdC+INC30L3QsNGH0LXQvdC40LXQvCDQv9C+INGD0LzQvtC70YfQsNC90LjRji4g0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LfQvdCw0YfQtdC90LjQtSBcItC90LUg0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0YxcIiDQtNC70Y8g0L/QvtC40YHQutC+0LLRi9GFINGA0L7QsdC+0YLQvtCyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCeURlZmF1bHRBc05vSW5kZXhlZCh0aXRsZT86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEJ5RGVmYXVsdCh0aXRsZSwgWydub2luZGV4JywgJ25vZm9sbG93JywgJ25vYXJjaGl2ZSddKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8t0L/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0LPQviDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQlNCw0L3QvdGL0LUg0L7QsSDRjdC70LXQvNC10L3RgtC1INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICogQHBhcmFtIHVybFBhdGggVXJsINC/0YPRgtGMINC6INGN0LvQtdC80LXQvdGC0YMg0LrQsNGC0LDQu9C+0LPQsC4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBzY2hlbWFPcmdEYXRhINCU0LDQvdC90YvQtSBTY2hlbWEub3JnINGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGb3JDYXRhbG9nSXRlbShpdGVtOiBTY0lDYXRhbG9nSXRlbTxTY0lDYXRlZ29yeSB8IFNjSVZpcnR1YWxDYXRlZ29yeT4sIHVybFBhdGg6IHN0cmluZywgc2NoZW1hT3JnRGF0YT86IFdpdGhDb250ZXh0PFRoaW5nPik6IHZvaWQge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3VybFBhdGgucmVwbGFjZSgnOmlkJywgdGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGl0ZW0pLnRvU3RyaW5nKCkpfWA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVzKGl0ZW0uc2VvPy50aXRsZSA/PyB0aGlzLmNhdGFsb2dJdGVtRGVmYXVsdFNlby50aXRsZSA/PyBgJHtpdGVtLm5hbWV9IC0g0JrRg9C/0LjRgtGMINCyICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWAsIGl0ZW0pO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgICAgICBpdGVtLnNlbz8uZGVzY3JpcHRpb24gPz8gdGhpcy5jYXRhbG9nSXRlbURlZmF1bHRTZW8uZGVzY3JpcHRpb24gPz8gYCR7aXRlbS5uYW1lfSAtINCa0YPQv9C40YLRjCDQv9C+INCy0YvQs9C+0LTQvdGL0Lwg0YbQtdC90LDQvCDQsiAke3RoaXMuY29tcGFueUluZm8ubmFtZX1gLFxuICAgICAgICAgICAgaXRlbVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBrZXl3b3JkcyA9IGl0ZW0uc2VvPy5rZXl3b3JkcyA/PyBgJHtpdGVtLm5hbWV9LCAke3RoaXMuY2F0YWxvZ0l0ZW1EZWZhdWx0U2VvLmtleXdvcmRzfWA7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBpdGVtLnNlbz8ubWV0YSA/PyBbXTtcblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C1IHNlby3Qv9Cw0YDQsNC80LXRgtGA0YssINCyINGC0L7QvCDRh9C40YHQu9C1INC4INC60LDQvdC+0L3QuNGH0LXRgdC60YPRjiDRgdGB0YvQu9C60YMuXG4gICAgICAgIHRoaXMuc2V0TWV0YVRhZ3ModGl0bGUsIGRlc2NyaXB0aW9uLCBrZXl3b3JkcywgbWV0YSwgWydpbmRleCcsICdmb2xsb3cnXSk7XG4gICAgICAgIHRoaXMuc2V0T3BlbkdyYXBoTWV0YVRhZ3ModGl0bGUsIGRlc2NyaXB0aW9uLCB1cmwsIHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oaXRlbS5pbWFnZSwgdHJ1ZSkpO1xuICAgICAgICB0aGlzLnNldENhbm9uaWNhbExpbmsodXJsKTtcblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCBTY2hlbWEub3JnINC/0LDRgNCw0LzQtdGC0YDRiy5cbiAgICAgICAgdGhpcy5zZXRTY2hlbWFPcmdEYXRhKHRoaXMuc2NoZW1hT3JnRmFjdG9yeS5tZXJnZShbdGhpcy5zY2hlbWFPcmdGYWN0b3J5LmdlbmVyYXRlRm9yT3JnYW5pemF0aW9uKCksIC4uLihzY2hlbWFPcmdEYXRhID8gW3NjaGVtYU9yZ0RhdGFdIDogW10pXSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCX0LDQvNC10L3Rj9C10YIg0YjQsNCx0LvQvtC90Ysg0LIg0YLQtdC60YHRgtC1INC90LAg0LfQvdCw0YfQtdC90LjRjyDQuNC3INC+0LHRitC10LrRgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQg0KLQtdC60YHRgiDRgSDRiNCw0LHQu9C+0L3QsNC80LguXG4gICAgICogQHBhcmFtIGluc3RhbmNlRGF0YSDQntCx0YrQtdC60YIg0YEg0LTQsNC90L3Ri9C80Lgg0LTQu9GPINC30LDQvNC10L3Riy5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgcmVwbGFjZVRlbXBsYXRlcyh0ZXh0OiBzdHJpbmcsIGluc3RhbmNlRGF0YTogb2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgvXFwkXFx7KFtefV0rKVxcfS9nLCAoX3RlbXBsYXRlOiBzdHJpbmcsIGZpZWxkUGF0aFZhcmlhbnRzOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBmaWVsZFBhdGhWYXJpYW50c1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnfCcpXG4gICAgICAgICAgICAgICAgLm1hcCgoZmllbGRQYXRoKSA9PiBmaWVsZFBhdGgudHJpbSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAubWFwKChmaWVsZFBhdGgpID0+IGdldChpbnN0YW5jZURhdGEsIGZpZWxkUGF0aCkgYXMgdW5rbm93bilcbiAgICAgICAgICAgICAgICAuZmluZCgoZmllbGRWYWx1ZSkgPT4gIWlzTmlsKGZpZWxkVmFsdWUpKTtcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tbmVzdGVkLWNvbmRpdGlvbmFsXG4gICAgICAgICAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gJycgOiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINCy0YHQtSBtZXRhLdGC0LXQs9C4INGB0YLRgNCw0L3QuNGG0YsuINCV0YHQu9C4INC60LDQutC+0Lkt0LvQuNCx0L4g0LjQtyDQv9Cw0YDQsNC80LXRgtGA0L7QsiDQvdC1INGD0LrQsNC30LDQvSwg0LTQu9GPINC90LXQs9C+INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjyDQt9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiDQntC/0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICogQHBhcmFtIGtleXdvcmRzINCa0LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBtZXRhINCc0LDRgdGB0LjQsiDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINC30L3QsNGH0LXQvdC40Lkg0LzQtdGC0LDRgtC10LPQvtCyLlxuICAgICAqIEBwYXJhbSByb2JvdHMg0KHQv9C40YHQvtC6IHJvYm90cyDRgtC10LPQvtCyINC00LvRjyDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0TWV0YVRhZ3MoXG4gICAgICAgIHRpdGxlOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZW8udGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb24sXG4gICAgICAgIGtleXdvcmRzOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZW8ua2V5d29yZHMsXG4gICAgICAgIG1ldGE6IFNjSVNlb1snbWV0YSddID0gW10sXG4gICAgICAgIHJvYm90czogUm9ib3RzVGFnVHlwZVtdID0gWydpbmRleCcsICdmb2xsb3cnXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XG5cbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAnZGVzY3JpcHRpb24nLCBjb250ZW50OiBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAna2V5d29yZHMnLCBjb250ZW50OiBrZXl3b3JkcyB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAncm9ib3RzJywgY29udGVudDogcm9ib3RzLmpvaW4oJywgJykgfSk7XG5cbiAgICAgICAgbWV0YS5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgbmFtZTogdGFnLm5hbWUsIGNvbnRlbnQ6IHRhZy5jb250ZW50IH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBPcGVuIEdyYXBoIG1ldGEt0YLQtdCz0LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2dUaXRsZSDQl9Cw0LPQvtC70L7QstC+0LouXG4gICAgICogQHBhcmFtIG9nRGVzY3JpcHRpb24g0J7Qv9C40YHQsNC90LjQtS5cbiAgICAgKiBAcGFyYW0gb2dVcmwgVXJsLlxuICAgICAqIEBwYXJhbSBvZ0ltZyDQodGB0YvQu9C60LAg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0T3BlbkdyYXBoTWV0YVRhZ3Mob2dUaXRsZTogc3RyaW5nLCBvZ0Rlc2NyaXB0aW9uOiBzdHJpbmcsIG9nVXJsOiBzdHJpbmcsIG9nSW1nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnR5cGUnLCBjb250ZW50OiAnd2Vic2l0ZScgfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0aXRsZScsIGNvbnRlbnQ6IG9nVGl0bGUgfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IG9nRGVzY3JpcHRpb24gfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBvZ1VybCB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmltYWdlJywgY29udGVudDogb2dJbWcgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YLQtdCzINC60LDQvdC+0L3QuNGH0LXRgdC60L7QuSDRgdGC0YDQsNC90LjRhtGLIDxsaW5rIHJlbD1cImNhbm9uaWNhbFwiIGhyZWY9XCIuLi5cIiAvPi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgVVJMINC60L7RgtC+0YDRi9C5INC90LXQvtCx0YXQvtC00LjQvNC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsiDQutCw0YfQtdGB0YLQstC1INGB0YHRi9C70LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldENhbm9uaWNhbExpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5IGxpbmsgY2Fub25pY2FsLlxuICAgICAgICBjb25zdCBleGlzdGluZ0xpbmsgPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPVwiY2Fub25pY2FsXCJdJyk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nTGluaz8ucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChleGlzdGluZ0xpbmsucGFyZW50Tm9kZSwgZXhpc3RpbmdMaW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCh0L7Qt9C00LDRkdC8INC4INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INC90L7QstGL0Lkg0YLQtdCzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ3JlbCcsICdjYW5vbmljYWwnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnLCB1cmwpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuaGVhZCwgbGluayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgU2NoZW1hLm9yZyDQvtCx0YrQtdC60YIg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhINCU0LDQvdC90YvQtSBTY2hlbWEub3JnINC00LvRjyDQstGB0YLRgNCw0LjQstCw0L3QuNGPINC90LAg0YHRgtGA0LDQvdC40YbQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFNjaGVtYU9yZ0RhdGE8VCBleHRlbmRzIFRoaW5nPihkYXRhOiBXaXRoQ29udGV4dDxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm9qZWN0QXR0cmlidXRlTmFtZSA9ICdkYXRhLXNjLXNjaGVtYS1vcmcnO1xuICAgICAgICAvLyDQo9C00LDQu9GP0LXQvCDQstGB0LUg0YDQsNC90LXQtSDRgdC+0LfQtNCw0L3QvdGL0LUg0YHQutGA0LjQv9GC0YsgU2NoZW1hLm9yZyAo0L/QviDRg9C90LjQutCw0LvRjNC90L7QvNGDINCw0YLRgNC40LHRg9GC0YMg0L/RgNC+0LXQutGC0LApLlxuICAgICAgICBjb25zdCBleGlzdGluZ1NjcmlwdHMgPSB0aGlzLmRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChgc2NyaXB0WyR7cHJvamVjdEF0dHJpYnV0ZU5hbWV9XWApO1xuICAgICAgICBleGlzdGluZ1NjcmlwdHMuZm9yRWFjaCgoZXhpc3RpbmdTY3JpcHQpID0+IHtcbiAgICAgICAgICAgIGlmIChleGlzdGluZ1NjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChleGlzdGluZ1NjcmlwdC5wYXJlbnROb2RlLCBleGlzdGluZ1NjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc2NyaXB0LCAndHlwZScsICdhcHBsaWNhdGlvbi9sZCtqc29uJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHNjcmlwdCwgcHJvamVjdEF0dHJpYnV0ZU5hbWUsICcnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzY3JpcHQsIHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIHNjcmlwdCk7XG4gICAgfVxufVxuIl19
|
|
@@ -2,7 +2,7 @@ import * as i1 from 'rxjs';
|
|
|
2
2
|
import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
|
|
3
3
|
import { map, startWith, catchError } from 'rxjs/operators';
|
|
4
4
|
import { parseISO, parse, isValid, format } from 'date-fns';
|
|
5
|
-
import { isString, isNil, isMatch, isArray, get } from 'lodash-es';
|
|
5
|
+
import { isString, isNil, isMatch, isArray, omit, get } from 'lodash-es';
|
|
6
6
|
import * as i0 from '@angular/core';
|
|
7
7
|
import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RendererFactory2 } from '@angular/core';
|
|
8
8
|
import { WA_LOCAL_STORAGE, WA_USER_AGENT, WA_WINDOW } from '@ng-web-apis/common';
|
|
@@ -7675,36 +7675,36 @@ class SchemaOrgFactory {
|
|
|
7675
7675
|
*
|
|
7676
7676
|
* @param product Данные о продукте.
|
|
7677
7677
|
* @param productPath Url путь к товару. В пути должен присутствовать шаблон ':id', обозначающий идентификатор товара для подстановки.
|
|
7678
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
7678
7679
|
*/
|
|
7679
|
-
generateForProductItem(product, productPath) {
|
|
7680
|
+
generateForProductItem(product, productPath, id) {
|
|
7680
7681
|
const productUrl = `${this.urls.siteUrl}${productPath.replace(':id', this.idOrSlugPipe.transform(product).toString())}`;
|
|
7681
7682
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
7682
|
-
const image = this.mediaImageTransformerPipe.transform(product?.getImagePreview() ?? product.image, true);
|
|
7683
|
+
const image = this.mediaImageTransformerPipe.transform(product?.getImagePreview?.() ?? product.image, true);
|
|
7683
7684
|
const description = product.properties?.description;
|
|
7684
7685
|
const priceValidUntil = this.normalizePriceValidUntil(product.discount?.expiredAt);
|
|
7685
7686
|
return {
|
|
7686
7687
|
'@context': 'https://schema.org',
|
|
7687
7688
|
'@type': 'Product',
|
|
7689
|
+
...(id && { '@id': id }),
|
|
7688
7690
|
name: product.name,
|
|
7689
7691
|
...(image && { image }),
|
|
7690
7692
|
...(description && { description }),
|
|
7691
7693
|
mpn: product.code,
|
|
7692
7694
|
url: productUrl,
|
|
7693
|
-
offers:
|
|
7694
|
-
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
|
|
7703
|
-
name: this.companyInfo.name,
|
|
7704
|
-
},
|
|
7705
|
-
url: productUrl,
|
|
7695
|
+
offers: {
|
|
7696
|
+
'@type': 'Offer',
|
|
7697
|
+
priceCurrency: 'RUB',
|
|
7698
|
+
...(priceValidUntil && { priceValidUntil }),
|
|
7699
|
+
price: product.costRub,
|
|
7700
|
+
availability: this.getAvailability(product),
|
|
7701
|
+
itemCondition: 'https://schema.org/NewCondition',
|
|
7702
|
+
seller: {
|
|
7703
|
+
'@type': 'Organization',
|
|
7704
|
+
name: this.companyInfo.name,
|
|
7706
7705
|
},
|
|
7707
|
-
|
|
7706
|
+
url: productUrl,
|
|
7707
|
+
},
|
|
7708
7708
|
};
|
|
7709
7709
|
}
|
|
7710
7710
|
/**
|
|
@@ -7715,13 +7715,15 @@ class SchemaOrgFactory {
|
|
|
7715
7715
|
* @param categoryPath Url путь к категориям товаров. В пути должен присутствовать шаблон ':id', обозначающий идентификатор категории для подстановки.
|
|
7716
7716
|
* @param productPath Url путь к товару. В пути должен присутствовать шаблон ':id', обозначающий идентификатор товара для подстановки.
|
|
7717
7717
|
* @param breadcrumbs Данные о хлебных крошках для категории.
|
|
7718
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
7718
7719
|
*/
|
|
7719
|
-
generateForCategoryItem(category, products, categoryPath, productPath, breadcrumbs) {
|
|
7720
|
+
generateForCategoryItem(category, products, categoryPath, productPath, breadcrumbs, id) {
|
|
7720
7721
|
const description = category.seo?.description ?? category.properties?.description;
|
|
7721
7722
|
const image = this.mediaImageTransformerPipe.transform(category.image, true);
|
|
7722
7723
|
return {
|
|
7723
7724
|
'@context': 'https://schema.org',
|
|
7724
7725
|
'@type': 'CollectionPage',
|
|
7726
|
+
...(id && { '@id': id }),
|
|
7725
7727
|
name: category.seo?.title ?? category.name,
|
|
7726
7728
|
...(description && { description }),
|
|
7727
7729
|
url: this.getCategoryCanonicalUrl(category, categoryPath),
|
|
@@ -7785,6 +7787,110 @@ class SchemaOrgFactory {
|
|
|
7785
7787
|
],
|
|
7786
7788
|
};
|
|
7787
7789
|
}
|
|
7790
|
+
/**
|
|
7791
|
+
* Генерирует и возвращает схему данных OnlineStore на основе данных компании из окружения.
|
|
7792
|
+
*/
|
|
7793
|
+
// eslint-disable-next-line sonarjs/function-return-type
|
|
7794
|
+
generateForOrganization() {
|
|
7795
|
+
const postalAddress = this.createPostalAddress(this.companyInfo.address);
|
|
7796
|
+
return {
|
|
7797
|
+
'@context': 'https://schema.org',
|
|
7798
|
+
'@type': 'OnlineStore',
|
|
7799
|
+
'@id': `${this.urls.siteUrl}#organization`,
|
|
7800
|
+
name: this.companyInfo.name,
|
|
7801
|
+
legalName: this.companyInfo.name,
|
|
7802
|
+
url: this.urls.siteUrl,
|
|
7803
|
+
logo: this.urls.logoUrl,
|
|
7804
|
+
image: this.urls.logoUrl,
|
|
7805
|
+
email: this.companyInfo.mail,
|
|
7806
|
+
telephone: this.companyInfo.phone,
|
|
7807
|
+
...(postalAddress && { address: postalAddress }),
|
|
7808
|
+
legalAddress: this.createPostalAddress({ streetAddress: this.companyInfo.legalAddress }),
|
|
7809
|
+
// TODO: Перечислить все розничные магазины.
|
|
7810
|
+
// hasPOS: [],
|
|
7811
|
+
taxID: this.companyInfo.inn,
|
|
7812
|
+
identifier: {
|
|
7813
|
+
'@type': 'PropertyValue',
|
|
7814
|
+
propertyID: 'OGRN',
|
|
7815
|
+
value: this.companyInfo.ogrn,
|
|
7816
|
+
},
|
|
7817
|
+
contactPoint: this.createOrganizationContactPoints(),
|
|
7818
|
+
...(this.companyInfo.warehouseAddress.length > 0 && {
|
|
7819
|
+
location: this.companyInfo.warehouseAddress.map((warehouseAddress) => ({
|
|
7820
|
+
'@type': 'Place',
|
|
7821
|
+
name: `${this.companyInfo.name} — склад самовывоза`,
|
|
7822
|
+
address: warehouseAddress,
|
|
7823
|
+
})),
|
|
7824
|
+
}),
|
|
7825
|
+
};
|
|
7826
|
+
}
|
|
7827
|
+
/**
|
|
7828
|
+
* Объединяет несколько JSON-LD сущностей в один документ с `@graph`.
|
|
7829
|
+
*
|
|
7830
|
+
* @param data Массив JSON-LD сущностей для объединения.
|
|
7831
|
+
*/
|
|
7832
|
+
// eslint-disable-next-line class-methods-use-this,sonarjs/function-return-type
|
|
7833
|
+
merge(data) {
|
|
7834
|
+
return {
|
|
7835
|
+
'@context': 'https://schema.org',
|
|
7836
|
+
'@graph': data.map((item) => omit(item, '@context')),
|
|
7837
|
+
};
|
|
7838
|
+
}
|
|
7839
|
+
/**
|
|
7840
|
+
* Формирует PostalAddress из структурированного адреса компании.
|
|
7841
|
+
*
|
|
7842
|
+
* @param address Структурированный адрес компании.
|
|
7843
|
+
*/
|
|
7844
|
+
// eslint-disable-next-line class-methods-use-this
|
|
7845
|
+
createPostalAddress(address) {
|
|
7846
|
+
const streetAddress = [address.streetAddress, address.extendedAddress].filter(Boolean).join(', ');
|
|
7847
|
+
if (!streetAddress && !address.locality && !address.region && !address.postalCode && !address.country) {
|
|
7848
|
+
return undefined;
|
|
7849
|
+
}
|
|
7850
|
+
return {
|
|
7851
|
+
'@type': 'PostalAddress',
|
|
7852
|
+
...(streetAddress && { streetAddress }),
|
|
7853
|
+
...(address.locality && { addressLocality: address.locality }),
|
|
7854
|
+
...(address.region && { addressRegion: address.region }),
|
|
7855
|
+
...(address.postalCode && { postalCode: address.postalCode }),
|
|
7856
|
+
...(address.country && { addressCountry: address.country }),
|
|
7857
|
+
};
|
|
7858
|
+
}
|
|
7859
|
+
/**
|
|
7860
|
+
* Формирует список ContactPoint для Organization.
|
|
7861
|
+
*/
|
|
7862
|
+
createOrganizationContactPoints() {
|
|
7863
|
+
const contactPoints = [
|
|
7864
|
+
{
|
|
7865
|
+
'@type': 'ContactPoint',
|
|
7866
|
+
contactType: 'customer service',
|
|
7867
|
+
telephone: this.companyInfo.phone,
|
|
7868
|
+
email: this.companyInfo.mail,
|
|
7869
|
+
areaServed: 'RU',
|
|
7870
|
+
availableLanguage: 'Russian',
|
|
7871
|
+
},
|
|
7872
|
+
];
|
|
7873
|
+
if (this.companyInfo.secondaryPhone) {
|
|
7874
|
+
contactPoints.push({
|
|
7875
|
+
'@type': 'ContactPoint',
|
|
7876
|
+
contactType: 'customer service',
|
|
7877
|
+
telephone: this.companyInfo.secondaryPhone,
|
|
7878
|
+
areaServed: 'RU',
|
|
7879
|
+
availableLanguage: 'Russian',
|
|
7880
|
+
});
|
|
7881
|
+
}
|
|
7882
|
+
if (this.companyInfo.hr) {
|
|
7883
|
+
contactPoints.push({
|
|
7884
|
+
'@type': 'ContactPoint',
|
|
7885
|
+
contactType: 'HR',
|
|
7886
|
+
telephone: this.companyInfo.hr.phone,
|
|
7887
|
+
email: this.companyInfo.hr.mail,
|
|
7888
|
+
areaServed: 'RU',
|
|
7889
|
+
availableLanguage: 'Russian',
|
|
7890
|
+
});
|
|
7891
|
+
}
|
|
7892
|
+
return contactPoints;
|
|
7893
|
+
}
|
|
7788
7894
|
/**
|
|
7789
7895
|
* Нормализует дату окончания цены в формат Schema.org (YYYY-MM-DD).
|
|
7790
7896
|
*
|
|
@@ -7806,9 +7912,9 @@ class SchemaOrgFactory {
|
|
|
7806
7912
|
// eslint-disable-next-line class-methods-use-this
|
|
7807
7913
|
getAvailability(product) {
|
|
7808
7914
|
if (product.onOrder) {
|
|
7809
|
-
return 'PreOrder';
|
|
7915
|
+
return 'https://schema.org/PreOrder';
|
|
7810
7916
|
}
|
|
7811
|
-
return product.stockCount?.length ? 'InStock' : 'OutOfStock';
|
|
7917
|
+
return product.stockCount?.length ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock';
|
|
7812
7918
|
}
|
|
7813
7919
|
/**
|
|
7814
7920
|
* Проверяет, является ли категория виртуальной.
|
|
@@ -7852,21 +7958,19 @@ class SchemaOrgFactory {
|
|
|
7852
7958
|
url: productUrl,
|
|
7853
7959
|
...(image && { image }),
|
|
7854
7960
|
...(description && { description }),
|
|
7855
|
-
offers:
|
|
7856
|
-
|
|
7857
|
-
|
|
7858
|
-
|
|
7859
|
-
|
|
7860
|
-
|
|
7861
|
-
|
|
7862
|
-
|
|
7863
|
-
|
|
7864
|
-
|
|
7865
|
-
name: this.companyInfo.name,
|
|
7866
|
-
},
|
|
7867
|
-
url: productUrl,
|
|
7961
|
+
offers: {
|
|
7962
|
+
'@type': 'Offer',
|
|
7963
|
+
priceCurrency: 'RUB',
|
|
7964
|
+
...(priceValidUntil && { priceValidUntil }),
|
|
7965
|
+
price: product.costRub,
|
|
7966
|
+
availability: this.getAvailability(product),
|
|
7967
|
+
itemCondition: 'https://schema.org/NewCondition',
|
|
7968
|
+
seller: {
|
|
7969
|
+
'@type': 'Organization',
|
|
7970
|
+
name: this.companyInfo.name,
|
|
7868
7971
|
},
|
|
7869
|
-
|
|
7972
|
+
url: productUrl,
|
|
7973
|
+
},
|
|
7870
7974
|
},
|
|
7871
7975
|
};
|
|
7872
7976
|
}
|
|
@@ -7888,14 +7992,21 @@ class SchemaOrgFactory {
|
|
|
7888
7992
|
itemListOrder: 'https://schema.org/ItemListUnordered',
|
|
7889
7993
|
itemListElement: [
|
|
7890
7994
|
// Добавляем подкатегории в начало списка.
|
|
7891
|
-
...childCategories.slice(0, 5).map((subCategory, index) =>
|
|
7892
|
-
|
|
7893
|
-
|
|
7894
|
-
|
|
7895
|
-
|
|
7896
|
-
|
|
7897
|
-
|
|
7898
|
-
|
|
7995
|
+
...childCategories.slice(0, 5).map((subCategory, index) => {
|
|
7996
|
+
const image = this.mediaImageTransformerPipe.transform(subCategory.image, true);
|
|
7997
|
+
const description = subCategory.seo?.description ?? subCategory.properties?.description;
|
|
7998
|
+
return {
|
|
7999
|
+
'@type': 'ListItem',
|
|
8000
|
+
position: index + 1,
|
|
8001
|
+
item: {
|
|
8002
|
+
'@type': 'CollectionPage',
|
|
8003
|
+
name: subCategory.name,
|
|
8004
|
+
url: this.getCategoryCanonicalUrl(subCategory, categoryPath),
|
|
8005
|
+
...(image && { image }),
|
|
8006
|
+
...(description && { description }),
|
|
8007
|
+
},
|
|
8008
|
+
};
|
|
8009
|
+
}),
|
|
7899
8010
|
// Добавляем товары после подкатегорий.
|
|
7900
8011
|
...products.slice(0, 10).map((product, index) => this.createProductsListItem(product, childCategories.length + index + 1, productPath)),
|
|
7901
8012
|
],
|
|
@@ -7908,37 +8019,46 @@ class SchemaOrgFactory {
|
|
|
7908
8019
|
* @param categoryPath Url путь к категориям товаров. В пути должен присутствовать шаблон ':id', обозначающий идентификатор категории для подстановки.
|
|
7909
8020
|
*/
|
|
7910
8021
|
createCatalogBreadcrumbsList(breadcrumbs, categoryPath) {
|
|
8022
|
+
const catalogUrl = `${this.urls.siteUrl}${categoryPath.replace(':id', '')}`;
|
|
7911
8023
|
const breadcrumbItems = [
|
|
7912
8024
|
// Всегда добавляем главную страницу.
|
|
7913
|
-
|
|
7914
|
-
'@type': 'ListItem',
|
|
7915
|
-
position: 1,
|
|
7916
|
-
name: 'Главная',
|
|
7917
|
-
item: this.urls.siteUrl,
|
|
7918
|
-
},
|
|
8025
|
+
this.createBreadcrumbListItem(1, 'Главная', this.urls.siteUrl),
|
|
7919
8026
|
// Добавляем каталог.
|
|
7920
|
-
|
|
7921
|
-
'@type': 'ListItem',
|
|
7922
|
-
position: 2,
|
|
7923
|
-
name: 'Каталог',
|
|
7924
|
-
item: `${this.urls.siteUrl}/${categoryPath}`,
|
|
7925
|
-
},
|
|
8027
|
+
this.createBreadcrumbListItem(2, 'Каталог', catalogUrl),
|
|
7926
8028
|
];
|
|
7927
8029
|
// Добавляем существующие breadcrumbs с корректировкой позиций.
|
|
7928
8030
|
breadcrumbs.forEach((item, index) => {
|
|
7929
8031
|
const link = isArray(item.routerLink) ? item.routerLink.join('/') : item.routerLink;
|
|
7930
|
-
breadcrumbItems.push({
|
|
7931
|
-
'@type': 'ListItem',
|
|
7932
|
-
position: index + 3, // Начинаем с позиции 3 (после Главная и Каталог).
|
|
7933
|
-
name: item.label,
|
|
7934
|
-
item: link ? `${this.urls.siteUrl}/${link}` : undefined,
|
|
7935
|
-
});
|
|
8032
|
+
breadcrumbItems.push(this.createBreadcrumbListItem(index + 3, item.label, link ? `${this.urls.siteUrl}/${link}` : undefined));
|
|
7936
8033
|
});
|
|
7937
8034
|
return {
|
|
7938
8035
|
'@type': 'BreadcrumbList',
|
|
8036
|
+
itemListOrder: 'https://schema.org/ItemListOrderAscending',
|
|
7939
8037
|
itemListElement: breadcrumbItems,
|
|
7940
8038
|
};
|
|
7941
8039
|
}
|
|
8040
|
+
/**
|
|
8041
|
+
* Создаёт элемент BreadcrumbList в формате, рекомендованном Schema.org.
|
|
8042
|
+
*
|
|
8043
|
+
* @param position Позиция элемента в цепочке.
|
|
8044
|
+
* @param name Название элемента.
|
|
8045
|
+
* @param url URL элемента.
|
|
8046
|
+
*/
|
|
8047
|
+
// eslint-disable-next-line class-methods-use-this
|
|
8048
|
+
createBreadcrumbListItem(position, name, url) {
|
|
8049
|
+
return {
|
|
8050
|
+
'@type': 'ListItem',
|
|
8051
|
+
position,
|
|
8052
|
+
...(url
|
|
8053
|
+
? {
|
|
8054
|
+
item: {
|
|
8055
|
+
'@id': url,
|
|
8056
|
+
name,
|
|
8057
|
+
},
|
|
8058
|
+
}
|
|
8059
|
+
: { name }),
|
|
8060
|
+
};
|
|
8061
|
+
}
|
|
7942
8062
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SchemaOrgFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7943
8063
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SchemaOrgFactory, providedIn: 'root' }); }
|
|
7944
8064
|
}
|
|
@@ -7994,6 +8114,10 @@ class ScSeoService {
|
|
|
7994
8114
|
* Объект {@link Document}, предоставляющий доступ к DOM страницы.
|
|
7995
8115
|
*/
|
|
7996
8116
|
this.document = inject(DOCUMENT);
|
|
8117
|
+
/**
|
|
8118
|
+
* Фабрика для создания данных Schema.org.
|
|
8119
|
+
*/
|
|
8120
|
+
this.schemaOrgFactory = inject(SchemaOrgFactory);
|
|
7997
8121
|
/**
|
|
7998
8122
|
* Фабрика для создания экземпляров {@link Renderer2}.
|
|
7999
8123
|
*/
|
|
@@ -8021,6 +8145,8 @@ class ScSeoService {
|
|
|
8021
8145
|
this.setMetaTags(updatedResource.title, updatedResource.description, updatedResource.keywords, updatedResource.meta, robots);
|
|
8022
8146
|
this.setOpenGraphMetaTags(updatedResource.title, updatedResource.description, url, img);
|
|
8023
8147
|
this.setCanonicalLink(url);
|
|
8148
|
+
// Устанавливаем Schema.org параметры.
|
|
8149
|
+
this.setSchemaOrgData(this.schemaOrgFactory.generateForOrganization());
|
|
8024
8150
|
}
|
|
8025
8151
|
/**
|
|
8026
8152
|
* Устанавливает seo параметры со значением по умолчанию.
|
|
@@ -8063,9 +8189,7 @@ class ScSeoService {
|
|
|
8063
8189
|
this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
|
|
8064
8190
|
this.setCanonicalLink(url);
|
|
8065
8191
|
// Устанавливаем Schema.org параметры.
|
|
8066
|
-
|
|
8067
|
-
this.setSchemaOrgData(schemaOrgData);
|
|
8068
|
-
}
|
|
8192
|
+
this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
|
|
8069
8193
|
}
|
|
8070
8194
|
/**
|
|
8071
8195
|
* Заменяет шаблоны в тексте на значения из объекта.
|