@snabcentr/client-core 3.8.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.
@@ -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
- if (schemaOrgData) {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUkvQzs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNFOztXQUVHO1FBQ2MsU0FBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4Qzs7V0FFRztRQUNLLGlCQUFZLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5RDs7V0FFRztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRWpGOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUM7O1dBRUc7UUFDYyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUM7O1dBRUc7UUFDYyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDOztXQUVHO1FBQ2Msb0JBQWUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU1RDs7V0FFRztRQUNjLGFBQVEsR0FBYyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0EwTDFGO0lBeExHOzs7Ozs7T0FNRztJQUNJLGVBQWUsQ0FBQyxRQUFpQixFQUFFLE1BQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBMEIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQ3BILE1BQU0sZUFBZSxHQUFHO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUNwRyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDdEgsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQ3hELElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDN0IsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVyRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxLQUFjLEVBQUUsU0FBMEIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLENBQ2hCO1lBQ0ksS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ3JFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztTQUNoRyxFQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNqQixNQUFNLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCLENBQUMsS0FBYztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksaUJBQWlCLENBQUMsSUFBc0QsRUFBRSxPQUFlLEVBQUUsYUFBa0M7UUFDaEksTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUcsdUVBQXVFO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0I7UUFDckMsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxpQ0FBaUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFDdkksSUFBSSxDQUNQLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVsQyw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLHNDQUFzQztRQUN0QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0RBQWtEO0lBQzFDLGdCQUFnQixDQUFDLElBQVksRUFBRSxZQUFvQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFpQixFQUFFLGlCQUF5QixFQUFVLEVBQUU7WUFDOUYsTUFBTSxLQUFLLEdBQVksaUJBQWlCO2lCQUNuQyxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUNmLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQVksQ0FBQztpQkFDM0QsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRTlDLHlEQUF5RDtZQUN6RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssV0FBVyxDQUNmLFFBQWdCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUNyQyxjQUFzQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFDakQsV0FBbUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQzNDLE9BQXVCLEVBQUUsRUFDekIsU0FBMEIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBRTdDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxhQUFxQixFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLEdBQVc7UUFDaEMsdUNBQXVDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFMUUsSUFBSSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLG1FQUFtRTtRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBa0IsSUFBb0I7UUFDMUQsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztRQUNsRCxvRkFBb0Y7UUFDcEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDL0YsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDOytHQXBQUSxZQUFZO21IQUFaLFlBQVksY0FGVCxNQUFNOzs0RkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXRhLCBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGdldCwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRoaW5nLCBXaXRoQ29udGV4dCB9IGZyb20gJ3NjaGVtYS1kdHMnO1xuXG5pbXBvcnQgeyBTY0lDYXRhbG9nSXRlbSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGFsb2ctaXRlbSc7XG5pbXBvcnQgeyBTY0lDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSVZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLXZpcnR1YWwtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJZE9yU2x1Z1BpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1pZC1vci1zbHVnLnBpcGUnO1xuaW1wb3J0IHsgU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtbWVkaWEtaW1hZ2UtdHJhbnNmb3JtZXIucGlwZSc7XG5pbXBvcnQgeyBTQ19DT01QQU5ZX0lORk8gfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtY29tcGFueS1pbmZvJztcbmltcG9ydCB7IFNDX0NBVEFMT0dfSVRFTV9QQUdFX01FVEEsIFNDX0RFRkFVTFRfUEFHRV9NRVRBIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWRlZmF1bHQtcGFnZS1tZXRhJztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY0lTZW8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktc2VvJztcbmltcG9ydCB7IFJvYm90c1RhZ1R5cGUgfSBmcm9tICcuLi90eXBlcy9yb2JvdHMtdGFnLXR5cGUnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDRg9C/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUlqRTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNFOztX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Q0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQzsrR0ExUFEsWUFBWTttSEFBWixZQUFZLGNBRlQsTUFBTTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBnZXQsIGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBUaGluZywgV2l0aENvbnRleHQgfSBmcm9tICdzY2hlbWEtZHRzJztcblxuaW1wb3J0IHsgU2NJQ2F0YWxvZ0l0ZW0gfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRhbG9nLWl0ZW0nO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSWRPclNsdWdQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtaWQtb3Itc2x1Zy5waXBlJztcbmltcG9ydCB7IFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLW1lZGlhLWltYWdlLXRyYW5zZm9ybWVyLnBpcGUnO1xuaW1wb3J0IHsgU0NfQ09NUEFOWV9JTkZPIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWNvbXBhbnktaW5mbyc7XG5pbXBvcnQgeyBTQ19DQVRBTE9HX0lURU1fUEFHRV9NRVRBLCBTQ19ERUZBVUxUX1BBR0VfTUVUQSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1kZWZhdWx0LXBhZ2UtbWV0YSc7XG5pbXBvcnQgeyBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLXVybHMnO1xuaW1wb3J0IHsgU2NoZW1hT3JnRmFjdG9yeSB9IGZyb20gJy4uL2NsYXNzZXMvc2NoZW1hLW9yZy1mYWN0b3J5JztcbmltcG9ydCB7IFNjSVNlbyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtaS1zZW8nO1xuaW1wb3J0IHsgUm9ib3RzVGFnVHlwZSB9IGZyb20gJy4uL3R5cGVzL3JvYm90cy10YWctdHlwZSc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINGD0L/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
- '@type': 'Offer',
7696
- priceCurrency: 'RUB',
7697
- ...(priceValidUntil && { priceValidUntil }),
7698
- price: product.costRub,
7699
- availability: this.getAvailability(product),
7700
- itemCondition: 'https://schema.org/NewCondition',
7701
- seller: {
7702
- '@type': 'Organization',
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
- '@type': 'Offer',
7858
- priceCurrency: 'RUB',
7859
- ...(priceValidUntil && { priceValidUntil }),
7860
- price: product.costRub,
7861
- availability: this.getAvailability(product),
7862
- itemCondition: 'https://schema.org/NewCondition',
7863
- seller: {
7864
- '@type': 'Organization',
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
- '@type': 'ListItem',
7893
- position: index + 1,
7894
- name: subCategory.name,
7895
- url: this.getCategoryCanonicalUrl(subCategory, categoryPath),
7896
- image: this.mediaImageTransformerPipe.transform(subCategory.image, true),
7897
- description: subCategory.seo?.description ?? subCategory.properties?.description,
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
- if (schemaOrgData) {
8067
- this.setSchemaOrgData(schemaOrgData);
8068
- }
8192
+ this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
8069
8193
  }
8070
8194
  /**
8071
8195
  * Заменяет шаблоны в тексте на значения из объекта.