ng-easycommerce-v18 0.6.20 → 0.6.21
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/README.md +2 -0
- package/assets/ec-i18n/ct.json +3 -0
- package/assets/ec-i18n/en.json +1 -0
- package/assets/ec-i18n/es.json +1 -0
- package/assets/ec-i18n/fr.json +3 -0
- package/assets/ec-i18n/gl.json +3 -0
- package/assets/ec-i18n/pr.json +3 -0
- package/esm2022/lib/ec-services/options.service.mjs +12 -3
- package/fesm2022/ng-easycommerce-v18.mjs +10 -2
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-services/options.service.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# Version 0.6.21
|
|
2
|
+
- se agregaron traducciones al breadcrumb, sobre los filtros de ordenar.
|
|
1
3
|
# Version 0.6.20
|
|
2
4
|
- Breadcrumb / filtros: `OptionsService.getBreadcrumbByFilters(...)` deja de mostrar valores ambiguos o técnicos para filtros no categóricos y pasa a construir etiquetas legibles con formato `Grupo: Valor` (por ejemplo `Color: Naranja`, `Talle: M`, `Distancia: Caminata-10k`).
|
|
3
5
|
- Breadcrumb / filtros: para valores dinámicos o de atributos se prioriza `description` y `name` antes que `title` o `code`, evitando que el breadcrumb muestre hexadecimales u otros códigos internos cuando existe un label humano.
|
package/assets/ec-i18n/ct.json
CHANGED
|
@@ -225,6 +225,9 @@
|
|
|
225
225
|
"category": "categoria",
|
|
226
226
|
"alphabetical-order": "ordre alfabètic",
|
|
227
227
|
"created-date": "Data de creació",
|
|
228
|
+
"date-created": "Data de creació",
|
|
229
|
+
"order-date": "Ordena per data",
|
|
230
|
+
"order-alph": "Ordre alfabètic",
|
|
228
231
|
"ascendancy": "ascendent",
|
|
229
232
|
"descendant": "descendent",
|
|
230
233
|
"oldest-first": "més vell",
|
package/assets/ec-i18n/en.json
CHANGED
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
"create-account": "Create account",
|
|
84
84
|
"create-account-description": "Sign up for a free account at our store. Registration is quick and easy. It allows you to be able to order from our shop. To start shopping click register.",
|
|
85
85
|
"created-date": "Created date",
|
|
86
|
+
"date-created": "Created date",
|
|
86
87
|
"cufflinks": "cufflinks",
|
|
87
88
|
"currency": "Currency",
|
|
88
89
|
"customer-billing-data": "Billing data",
|
package/assets/ec-i18n/es.json
CHANGED
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"create-account": "Crear cuenta",
|
|
88
88
|
"create-account-description": "Regístrese para obtener una cuenta gratuita en nuestra tienda. Registrarse es facil y rapido. Le permite ordenar en nuestra tienda. Para comenzar a comprar, haga clic en registrarse.",
|
|
89
89
|
"created-date": "Fecha de creación",
|
|
90
|
+
"date-created": "Fecha de creación",
|
|
90
91
|
"cufflinks": "Gemelos",
|
|
91
92
|
"currency": "Moneda",
|
|
92
93
|
"customer-billing-data": "Información de facturación",
|
package/assets/ec-i18n/fr.json
CHANGED
|
@@ -217,6 +217,9 @@
|
|
|
217
217
|
"category": "Catégorie",
|
|
218
218
|
"alphabetical-order": "Ordre alphabétique",
|
|
219
219
|
"created-date": "Date de création",
|
|
220
|
+
"date-created": "Date de création",
|
|
221
|
+
"order-date": "Trier par date",
|
|
222
|
+
"order-alph": "Ordre alphabétique",
|
|
220
223
|
"ascendancy": "Ascendant",
|
|
221
224
|
"descendant": "Descendante",
|
|
222
225
|
"oldest-first": "Le plus ancien en premier",
|
package/assets/ec-i18n/gl.json
CHANGED
|
@@ -225,6 +225,9 @@
|
|
|
225
225
|
"category": "Categoría",
|
|
226
226
|
"alphabetical-order": "Orde alfabético",
|
|
227
227
|
"created-date": "Data de creación",
|
|
228
|
+
"date-created": "Data de creación",
|
|
229
|
+
"order-date": "Orde por data",
|
|
230
|
+
"order-alph": "Orde alfabética",
|
|
228
231
|
"ascendancy": "Ascendente",
|
|
229
232
|
"descendant": "Descendente",
|
|
230
233
|
"oldest-first": "Maior",
|
package/assets/ec-i18n/pr.json
CHANGED
|
@@ -225,6 +225,9 @@
|
|
|
225
225
|
"category": "Categoria",
|
|
226
226
|
"alphabetical-order": "Ordem alfabética",
|
|
227
227
|
"created-date": "Data de criação",
|
|
228
|
+
"date-created": "Data de criação",
|
|
229
|
+
"order-date": "Ordenar por data",
|
|
230
|
+
"order-alph": "Ordem alfabética",
|
|
228
231
|
"ascendancy": "Ascendente",
|
|
229
232
|
"descendant": "Descendente",
|
|
230
233
|
"oldest-first": "Mais velho",
|
|
@@ -3,6 +3,7 @@ import { isPlatformBrowser } from '@angular/common';
|
|
|
3
3
|
import { ConnectionService } from '../api';
|
|
4
4
|
import { BehaviorSubject, catchError, finalize, map, of, shareReplay } from 'rxjs';
|
|
5
5
|
import { ApiConstantsService, CoreConstantsService } from '../constants';
|
|
6
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
/**
|
|
8
9
|
* Este servicio permite maneja las Categorias, Secciones y Atributos como menues
|
|
@@ -25,6 +26,7 @@ export class OptionsService {
|
|
|
25
26
|
* Constantes de la API
|
|
26
27
|
*/
|
|
27
28
|
apiConstants = inject(ApiConstantsService);
|
|
29
|
+
translateService = inject(TranslateService);
|
|
28
30
|
/**
|
|
29
31
|
* Maneja los cambios en las categorias
|
|
30
32
|
*/
|
|
@@ -433,12 +435,19 @@ export class OptionsService {
|
|
|
433
435
|
if (description)
|
|
434
436
|
return description;
|
|
435
437
|
if (title && !this.isHexLike(title))
|
|
436
|
-
return title;
|
|
438
|
+
return this.translateBreadcrumbKey(title);
|
|
437
439
|
const fromCode = this.extractBreadcrumbLabelFromCode(String(element.code ?? ''));
|
|
438
440
|
if (fromCode)
|
|
439
|
-
return fromCode;
|
|
441
|
+
return this.translateBreadcrumbKey(fromCode);
|
|
440
442
|
return title;
|
|
441
443
|
};
|
|
444
|
+
translateBreadcrumbKey = (value) => {
|
|
445
|
+
const key = String(value ?? '').trim();
|
|
446
|
+
if (!key)
|
|
447
|
+
return '';
|
|
448
|
+
const translated = this.translateService.instant(key);
|
|
449
|
+
return translated && translated !== key ? translated : key;
|
|
450
|
+
};
|
|
442
451
|
extractBreadcrumbLabelFromCode = (code) => {
|
|
443
452
|
const parts = String(code || '').trim().split(/\s+/).filter(Boolean);
|
|
444
453
|
if (parts.length > 1)
|
|
@@ -479,4 +488,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
479
488
|
providedIn: 'root'
|
|
480
489
|
}]
|
|
481
490
|
}], ctorParameters: () => [] });
|
|
482
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL29wdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFdBQVcsRUFBUSxNQUFNLE1BQU0sQ0FBQztBQUNyRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBR3pFOzs7R0FHRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBQzFCOztPQUVHO0lBQ0ssVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DOztPQUVHO0lBQ08sVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQzs7T0FFRztJQUNLLFNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRDs7T0FFRztJQUNLLFlBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNuRDs7T0FFRztJQUNLLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsR0FBMkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVFLDRCQUE0QixHQUFHLEtBQUssQ0FBQztJQUNyQyxhQUFhLEdBQWUsRUFBRSxDQUFDO0lBQ3ZDOztPQUVHO0lB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Q0FBQyxDQUFDLEVBQUU7d0JBQ3JJLE1BQU0sRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7cUJBQ2pJLENBQUMsQ0FBQztpQkFDSCxDQUFDO2dCQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLE1BQU0sQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNlVyxjQUFjOzRHQUFkLGNBQWMsY0FGZCxNQUFNOzs0RkFFTixjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcGlDb25zdGFudHNTZXJ2aWNlLCBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGUsIENhdGVnb3J5LCBGQVEsIFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuLyoqXG4gKiBFc3RlIHNlcnZpY2lvIHBlcm1pdGUgbWFuZWphIGxhcyBDYXRlZ29yaWFzLCBTZWNjaW9uZXMgeSBBdHJpYnV0b3MgY29tbyBtZW51ZXMgXG4gKiBwYXJhIGxhIGFwbGljYWNpw7NuLiBcbiAqL1xuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgT3B0aW9uc1NlcnZpY2Uge1xuXHQvKipcblx0ICogTWFuZWphIGxhcyBwZXRpY2lvbmVzIGEgbGEgQVBJXG5cdCAqL1xuXHRwcml2YXRlIGNvbm5lY3Rpb24gPSBpbmplY3QoQ29ubmVjdGlvblNlcnZpY2UpO1xuXHQvKipcblx0ICogUGxhdGZvcm0gSUQgcGFyYSB2ZXJpZmljYXIgc2kgZXN0YW1vcyBlbiBlbCBuYXZlZ2Fkb3Jcblx0ICovXG5cdHByb3RlY3RlZCBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcblx0LyoqXG5cdCAqIENvbnN0YW50ZXMgZGVsIGNvcmVcblx0ICovXG5cdHByaXZhdGUgY29uc3RhbnRzID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0LyoqXG5cdCAqIENvbnN0YW50ZXMgZGUgbGEgQVBJXG5cdCAqL1xuXHRwcml2YXRlIGFwaUNvbnN0YW50cyA9IGluamVjdChBcGlDb25zdGFudHNTZXJ2aWNlKTtcblx0LyoqXG5cdCAqIE1hbmVqYSBsb3MgY2FtYmlvcyBlbiBsYXMgY2F0ZWdvcmlhc1xuXHQgKi9cblx0cHJpdmF0ZSBjYXRlZ29yaWVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2F0ZWdvcnlbXT4oW10pO1xuXHRwcml2YXRlIGNhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPENhdGVnb3J5W10+ID0gdGhpcy5jYXRlZ29yaWVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHJpdmF0ZSBfY2F0ZWdvcmllc1JlcXVlc3RJblByb2dyZXNzID0gZmFsc2U7XG5cdHByaXZhdGUgYWxsQ2F0ZWdvcmllczogQ2F0ZWdvcnlbXSA9IFtdO1xuXHQvKipcblx0ICogTWFuZWphIGxvcyBjYW1iaW9zIGVuIGxhcyBzZWNjaW9uZXNcblx0ICovXG5cdHByaXZhdGUgc2VjdGlvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWN0aW9uW10+KFtdKTtcblx0cHJpdmF0ZSBzZWN0aW9ucyQ6IE9ic2VydmFibGU8U2VjdGlvbltdPiA9IHRoaXMuc2VjdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9zZWN0aW9uc1JlcXVlc3RJblByb2dyZXNzID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBNYW5lamEgbG9zIGNhbWJpb3MgZW4gbG9zIGF0cmlidXRvc1xuXHQgKi9cblx0cHJpdmF0ZSBhdHRyaWJ1dGVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXR0cmlidXRlW10+KFtdKTtcblx0cHJpdmF0ZSBhdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT4gPSB0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXHRwcml2YXRlIF9sYXN0QXR0cmlidXRlc1BhcmFtczogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX2xhc3RBdHRyaWJ1dGVzUmVxdWVzdEZhaWxlZCA9IGZhbHNlO1xuXHRwcml2YXRlIF9hdHRyaWJ1dGVzUmVxdWVzdFZlcnNpb24gPSAwO1xuXHRwcml2YXRlIF9hdHRyaWJ1dGVzUmVxdWVzdEluUHJvZ3Jlc3MgPSBmYWxzZTtcblx0cHJpdmF0ZSBfYXR0cmlidXRlc1JlcXVlc3RQYXJhbXNJblByb2dyZXNzOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHQvL0FQSSBVUkxTXG5cdHByaXZhdGUgcmVhZG9ubHkgU0hPUF9DSEFOTkVMX0FQSSA9IGAke3RoaXMuYXBpQ29uc3RhbnRzLlNIT1BfQVBJX1VSTH0ke3RoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUx9L2A7XG5cdHByaXZhdGUgcmVhZG9ubHkgQ01TX0NIQU5ORUxfQVBJID0gYCR7dGhpcy5hcGlDb25zdGFudHMuQ01TX1VSTH0ke3RoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUx9L2A7XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSBVUkwgcGFyYSBvYnRlbmVyIGxhcyBjYXRlZ29yaWFzLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgdGF4b25zQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5TSE9QX0NIQU5ORUxfQVBJfXRheG9ucy8/bG9jYWxlPSR7dGhpcy5hcGlDb25zdGFudHMuTE9DQUxFfWAgfTtcblx0LyoqXG5cdCAqIERldnVlbHZlIGxhIFVSTCBwYXJhIG9idGVuZXIgbGFzIHNlY2Npb25lc1xuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgc2VjdGlvbnNBcGkoKSB7IHJldHVybiBgJHt0aGlzLkNNU19DSEFOTkVMX0FQSX1zZWN0aW9ucy8/bG9jYWxlPSR7dGhpcy5hcGlDb25zdGFudHMuTE9DQUxFfWAgfTtcblx0LyoqXG5cdCAqIERldnVlbHZlIGxhIFVSTCBwYXJhIG9idGVuZXIgbG9zIGF0cmlidXRvcy4gU2UgbGUgcHVlZGUgYXBsaWNhciBmbGl0cm9zLlxuXHQgKiBAcGFyYW0gZmlsdGVyIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHByaXZhdGUgYXR0cmlidXRlc0FwaShmaWx0ZXIgPSAnJykgeyByZXR1cm4gYCR7dGhpcy5TSE9QX0NIQU5ORUxfQVBJfXByb2R1Y3Qtc2VhcmNoL2F0dHJpYnV0ZXMvP2xvY2FsZT0ke3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRX0mbGltaXQ9MSZwYWdlPTEke2ZpbHRlcn1gIH07XG5cdHByaXZhdGUgZmFxc0FwaSgpIHsgcmV0dXJuICdjbXMvJyArIHRoaXMuYXBpQ29uc3RhbnRzLkNIQU5ORUwgKyAnL2ZhcScgfTtcbiAgICBwcml2YXRlIHBhZ2VDb250ZW50QnlDb2RlQXBpID0gKGNvZGU6IHN0cmluZykgPT4gdGhpcy5jbXNCYXNlKCkgKyAnLycgKyB0aGlzLmNvbnN0YW50cy5nZXRDaGFubmVsKCkgKyAnL3BhZ2UvJyArIGNvZGU7XG5cdHByaXZhdGUgY21zQmFzZSA9ICgpID0+ICdjbXMvJyArIHRoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRTtcblx0Y29uc3RydWN0b3IoKSB7IH1cblx0LyoqXG5cdCAqIE9idGllbmUgbGFzIGNhdGVnb3JpYXMgZGVsIGJhY2tlbmQuIFkgbG9zIG1hcGVhIHBhcmEgcXVlIHNlYSBtYXMgYW1pZ2FibGUgZWwgbWFuZWpvIGNvbW8gbWVuw7ouXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldENhdGVnb3JpZXMoKTogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiB7XG5cdFx0aWYgKHRoaXMuY2F0ZWdvcmllc1N1YmplY3QuZ2V0VmFsdWUoKS5sZW5ndGggPT09IDAgJiYgIXRoaXMuX2NhdGVnb3JpZXNSZXF1ZXN0SW5Qcm9ncmVzcykge1xuXHRcdFx0dGhpcy5fY2F0ZWdvcmllc1JlcXVlc3RJblByb2dyZXNzID0gdHJ1ZTtcblx0XHRcdHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy50YXhvbnNBcGkoKSkucGlwZShcblx0XHRcdFx0c2hhcmVSZXBsYXkoMSksXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IENhdGVnb3J5W10pID0+IHtcblx0XHRcdFx0XHR0aGlzLmFsbENhdGVnb3JpZXMgPSB0aGlzLmFwcGVuZFBhdGhzKHRydWUsIHJlc3BvbnNlLCB0cnVlKSBhcyBDYXRlZ29yeVtdO1xuXHRcdFx0XHRcdGNvbnN0IGNhdGVnb3JpZXMgPSB0aGlzLmZpbHRlclZpc2libGVPcHRpb25zKHRoaXMuYWxsQ2F0ZWdvcmllcykgYXMgQ2F0ZWdvcnlbXTtcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3JpZXNTdWJqZWN0Lm5leHQoY2F0ZWdvcmllcylcblx0XHRcdFx0XHRyZXR1cm4gY2F0ZWdvcmllc1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1tPcHRpb25zU2VydmljZV0gRXJyb3IgbG9hZGluZyBjYXRlZ29yaWVzLiBVc2luZyBlbXB0eSBmYWxsYmFjay4nLCBlcnJvcik7XG5cdFx0XHRcdFx0dGhpcy5jYXRlZ29yaWVzU3ViamVjdC5uZXh0KFtdKVxuXHRcdFx0XHRcdHJldHVybiBvZihbXSlcblx0XHRcdFx0fSksXG5cdFx0XHRcdGZpbmFsaXplKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9jYXRlZ29yaWVzUmVxdWVzdEluUHJvZ3Jlc3MgPSBmYWxzZTtcblx0XHRcdFx0fSlcblx0XHRcdCkuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNhdGVnb3JpZXMkO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxhcyBzZWNjaW9uZXMgZGVsIGJhY2tlbmQuIFkgbG9zIG1hcGVhIHBhcmEgcXVlIHNlYSBtYXMgYW1pZ2FibGUgZWwgbWFuZWpvIGNvbW8gbWVuw7ouXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldFNlY3Rpb25zKCk6IE9ic2VydmFibGU8U2VjdGlvbltdPiB7XG5cdFx0aWYgKHRoaXMuc2VjdGlvbnNTdWJqZWN0LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmICF0aGlzLl9zZWN0aW9uc1JlcXVlc3RJblByb2dyZXNzKSB7XG5cdFx0XHR0aGlzLl9zZWN0aW9uc1JlcXVlc3RJblByb2dyZXNzID0gdHJ1ZTtcblx0XHRcdHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5zZWN0aW9uc0FwaSgpKS5waXBlKFxuXHRcdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHRcdFx0bWFwKChyZXNwb25zZTogU2VjdGlvbltdKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc2FmZVJlc3BvbnNlID0gQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IFtdO1xuXHRcdFx0XHRcdGxldCBzZWN0aW9ucyA9IHNhZmVSZXNwb25zZS5maWx0ZXIoKHNlY3Rpb246IFNlY3Rpb24pID0+IHNlY3Rpb24uY29kZSAhPSAnaG9tZScpXG5cdFx0XHRcdFx0c2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoKHNlY3Rpb246IFNlY3Rpb24pID0+IHRoaXMuYXBwZW5kU2VjdGlvbihzZWN0aW9uKSlcblx0XHRcdFx0XHR0aGlzLnNlY3Rpb25zU3ViamVjdC5uZXh0KHNlY3Rpb25zKVxuXHRcdFx0XHRcdHJldHVybiBzZWN0aW9uc1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1tPcHRpb25zU2VydmljZV0gRXJyb3IgbG9hZGluZyBzZWN0aW9ucy4gVXNpbmcgZW1wdHkgZmFsbGJhY2suJywgZXJyb3IpO1xuXHRcdFx0XHRcdHRoaXMuc2VjdGlvbnNTdWJqZWN0Lm5leHQoW10pXG5cdFx0XHRcdFx0cmV0dXJuIG9mKFtdKVxuXHRcdFx0XHR9KVxuXHRcdFx0KS5zdWJzY3JpYmUoe1xuXHRcdFx0XHRjb21wbGV0ZTogKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3NlY3Rpb25zUmVxdWVzdEluUHJvZ3Jlc3MgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2VjdGlvbnMkO1xuXHR9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxvcyBhdHJpYnV0b3MgZGVsIGJhY2tlbmQuIFkgbG9zIG1hcGVhIHBhcmEgcXVlIHNlYSBtYXMgYW1pZ2FibGUgZWwgbWFuZWpvIGNvbW8gbWVuw7ouXG5cdCAqIEBwYXJhbSBwYXJhbXMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHVibGljIGdldEF0dHJpYnV0ZXMocGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT4ge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRQYXJhbXMgPSB0eXBlb2YgcGFyYW1zID09PSAnc3RyaW5nJyA/IHBhcmFtcyA6ICcnO1xuXHRcdGNvbnN0IHNob3VsZERlZmVyVW5maWx0ZXJlZFJlcXVlc3QgPVxuXHRcdFx0bm9ybWFsaXplZFBhcmFtcyA9PT0gJydcblx0XHRcdCYmIHRoaXMuY29uc3RhbnRzLmN1cnJlbnRSb3V0ZVR5cGUgPT09ICdjYXRlZ29yaWVzJ1xuXHRcdFx0JiYgdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5nZXRWYWx1ZSgpLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmICghc2hvdWxkRGVmZXJVbmZpbHRlcmVkUmVxdWVzdCkge1xuXHRcdFx0dGhpcy5mZXRjaEF0dHJpYnV0ZXMobm9ybWFsaXplZFBhcmFtcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2NhIGF0cmlidXRvcyBjb24gbG9zIGZpbHRyb3MgYWN0dWFsZXMgKGVqOiBjYXRlZ29yeSwgc2VhcmNoLCBwcmljZSkuXG5cdCAqIFNlIHVzYSBwYXJhIG1vc3RyYXIgc29sbyBhdHJpYnV0b3MgcmVsZXZhbnRlcyBzZWfDum4gbGEgY2F0ZWdvcsOtYSBlbiBjb2xlY2Npw7NuLlxuXHQgKi9cblx0cHVibGljIHJlZnJlc2hBdHRyaWJ1dGVzKHBhcmFtczogc3RyaW5nID0gJycpOiB2b2lkIHtcblx0XHR0aGlzLmZldGNoQXR0cmlidXRlcyhwYXJhbXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBmZXRjaEF0dHJpYnV0ZXMocGFyYW1zPzogYW55KTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFBhcmFtcyA9IHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnID8gcGFyYW1zIDogJyc7XG5cdFx0Y29uc3Qgc2FtZVBhcmFtc0FzTGFzdFJlcXVlc3QgPSB0aGlzLl9sYXN0QXR0cmlidXRlc1BhcmFtcyA9PT0gbm9ybWFsaXplZFBhcmFtcztcblx0XHRjb25zdCBzYW1lUGFyYW1zSW5GbGlnaHQgPSB0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdEluUHJvZ3Jlc3Ncblx0XHRcdCYmIHRoaXMuX2F0dHJpYnV0ZXNSZXF1ZXN0UGFyYW1zSW5Qcm9ncmVzcyA9PT0gbm9ybWFsaXplZFBhcmFtcztcblxuXHRcdC8vIERlZHVwZTpcblx0XHQvLyAtIG5vIHJlcGV0aXIgc2kgeWEgaGF5IGxhIG1pc21hIHJlcXVlc3QgZW4gdnVlbG9cblx0XHQvLyAtIG5vIHJlcGV0aXIgbGEgbWlzbWEgcmVxdWVzdCB5YSByZXN1ZWx0YSAoaW5jbHV5ZSByZXNwdWVzdGFzIHZhY8OtYXMpLFxuXHRcdC8vICAgc2Fsdm8gcXVlIGVsIMO6bHRpbW8gaW50ZW50byBoYXlhIGZhbGxhZG8uXG5cdFx0aWYgKHNhbWVQYXJhbXNJbkZsaWdodCB8fCAoc2FtZVBhcmFtc0FzTGFzdFJlcXVlc3QgJiYgIXRoaXMuX2xhc3RBdHRyaWJ1dGVzUmVxdWVzdEZhaWxlZCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9sYXN0QXR0cmlidXRlc1BhcmFtcyA9IG5vcm1hbGl6ZWRQYXJhbXM7XG5cdFx0dGhpcy5fbGFzdEF0dHJpYnV0ZXNSZXF1ZXN0RmFpbGVkID0gZmFsc2U7XG5cdFx0Y29uc3QgcmVxdWVzdFZlcnNpb24gPSArK3RoaXMuX2F0dHJpYnV0ZXNSZXF1ZXN0VmVyc2lvbjtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdEluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRcdHRoaXMuX2F0dHJpYnV0ZXNSZXF1ZXN0UGFyYW1zSW5Qcm9ncmVzcyA9IG5vcm1hbGl6ZWRQYXJhbXM7XG5cblx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuYXR0cmlidXRlc0FwaShub3JtYWxpemVkUGFyYW1zKSkucGlwZShcblx0XHRcdG1hcCgocmVzcG9uc2U6IGFueSB8IEF0dHJpYnV0ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzb3VyY2UgPSAocmVzcG9uc2UgYXMgYW55KT8uYXR0cmlidXRlcz8uWzBdID8/IHJlc3BvbnNlO1xuXHRcdFx0XHRpZiAoIXNvdXJjZSkgcmV0dXJuIFtdIGFzIEF0dHJpYnV0ZVtdO1xuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gdGhpcy5hcHBlbmRQYXRocyhmYWxzZSwgc291cmNlKSBhcyBBdHRyaWJ1dGVbXTtcblx0XHRcdFx0cmV0dXJuIGF0dHJpYnV0ZXM7XG5cdFx0XHR9KSxcblx0XHRcdGZpbmFsaXplKCgpID0+IHtcblx0XHRcdFx0aWYgKHJlcXVlc3RWZXJzaW9uICE9PSB0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFZlcnNpb24pIHJldHVybjtcblx0XHRcdFx0dGhpcy5fYXR0cmlidXRlc1JlcXVlc3RJblByb2dyZXNzID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuX2F0dHJpYnV0ZXNSZXF1ZXN0UGFyYW1zSW5Qcm9ncmVzcyA9IG51bGw7XG5cdFx0XHR9KVxuXHRcdCkuc3Vic2NyaWJlKHtcblx0XHRcdG5leHQ6IChhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSkgPT4ge1xuXHRcdFx0XHQvLyBFdml0YSBxdWUgcmVzcHVlc3RhcyB2aWVqYXMgcGlzZW4gbGEgw7psdGltYSBjYXRlZ29yw61hIHNlbGVjY2lvbmFkYS5cblx0XHRcdFx0aWYgKHJlcXVlc3RWZXJzaW9uICE9PSB0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFZlcnNpb24pIHJldHVybjtcblx0XHRcdFx0dGhpcy5fbGFzdEF0dHJpYnV0ZXNSZXF1ZXN0RmFpbGVkID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChhdHRyaWJ1dGVzKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHJlcXVlc3RWZXJzaW9uICE9PSB0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFZlcnNpb24pIHJldHVybjtcblx0XHRcdFx0dGhpcy5fbGFzdEF0dHJpYnV0ZXNSZXF1ZXN0RmFpbGVkID0gdHJ1ZTtcblx0XHRcdFx0Y29uc29sZS5lcnJvcignW09wdGlvbnNTZXJ2aWNlXSBFcnJvciBsb2FkaW5nIGF0dHJpYnV0ZXMuIFVzaW5nIGVtcHR5IGZhbGxiYWNrLicsIGVycm9yKTtcblx0XHRcdFx0dGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5uZXh0KFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cblx0Ly8gSEVMUEVSU1xuXHRzbHVnaWZ5KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuICcnOyAvLyBvIGRldm9sdmVyIHVuIHNsdWcgcG9yIGRlZmVjdG8gc2kgcHJlZmVyw61zXG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKS5yZXBsYWNlKC9bXlxcd1xcLV0rL2csICcnKTtcblx0fVx0LyoqXG5cdCAqIEVsaW1pbmEgbG9zIGFjZW50b3Ncblx0ICogQHBhcmFtIHN0ciBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIHJlbW92ZUFjY2VudHMoc3RyOiBzdHJpbmcpIHtcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5ub3JtYWxpemUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBzdHIubm9ybWFsaXplKFwiTkZEXCIpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpO1xuXHRcdH1cblx0XHQvLyBGYWxsYmFjayBwYXJhIFNTUiAtIHJlbW92ZXIgYWNlbnRvcyBtYW51YWxtZW50ZVxuXHRcdHJldHVybiBzdHIucmVwbGFjZSgvW8Ogw6HDosOjw6TDpV0vZywgJ2EnKVxuXHRcdFx0LnJlcGxhY2UoL1vDqMOpw6rDq10vZywgJ2UnKVxuXHRcdFx0LnJlcGxhY2UoL1vDrMOtw67Dr10vZywgJ2knKVxuXHRcdFx0LnJlcGxhY2UoL1vDssOzw7TDtcO2XS9nLCAnbycpXG5cdFx0XHQucmVwbGFjZSgvW8O5w7rDu8O8XS9nLCAndScpXG5cdFx0XHQucmVwbGFjZSgvW8O9w79dL2csICd5Jylcblx0XHRcdC5yZXBsYWNlKC9bw7FdL2csICduJylcblx0XHRcdC5yZXBsYWNlKC9bw6ddL2csICdjJylcblx0XHRcdC5yZXBsYWNlKC9bw4DDgcOCw4PDhMOFXS9nLCAnQScpXG5cdFx0XHQucmVwbGFjZSgvW8OIw4nDisOLXS9nLCAnRScpXG5cdFx0XHQucmVwbGFjZSgvW8OMw43DjsOPXS9nLCAnSScpXG5cdFx0XHQucmVwbGFjZSgvW8OSw5PDlMOVw5ZdL2csICdPJylcblx0XHRcdC5yZXBsYWNlKC9bw5nDmsObw5xdL2csICdVJylcblx0XHRcdC5yZXBsYWNlKC9bw53FuF0vZywgJ1knKVxuXHRcdFx0LnJlcGxhY2UoL1vDkV0vZywgJ04nKVxuXHRcdFx0LnJlcGxhY2UoL1vDh10vZywgJ0MnKTtcblx0fVxuXHQvKipcblx0ICogUmVhbGl6YSB1biBtYXBlbyBkZSBsb3MgZGF0b3MgcGFyYSBkYXJsZSB1biBmb3JtYXRvIG1hcyBlbnRlbmRpYmxlIGEgbGFcblx0ICogaG9yYSBkZSB1c2FyIGNvbW8gdW4gbWVuw7ouXG5cdCAqIEBwYXJhbSBpc0NhdGVnb3J5IFV0aWxpemFkbyBwYXJhIGRpZmVyZW5jaWFyIHNpIGVzIGNhdGVnb3LDrWEgbyBhdHJpYnV0by5cblx0ICogQHBhcmFtIHJlc3BvbnNlIFJlc3B1ZXN0YSBxdWUgb2J0aWVuZSBkZWwgYmFja2VuZCBjb24gbG9zIGRhdG9zIGEgbWFwZWFyLlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBhcHBlbmRQYXRocyhpc0NhdGVnb3J5OiBib29sZWFuLCByZXNwb25zZTogYW55LCBpbmNsdWRlSGlkZGVuID0gZmFsc2UpIHtcblx0XHRjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSA/IHJlc3BvbnNlIDogW3Jlc3BvbnNlXTtcblxuXHRcdGNvbnN0IHZpc2libGVSZXNwb25zZSA9IGlzQ2F0ZWdvcnkgJiYgIWluY2x1ZGVIaWRkZW5cblx0XHRcdD8gbm9ybWFsaXplZFJlc3BvbnNlLmZpbHRlcigoc3ViZWxlbWVudDogYW55KSA9PiB0aGlzLmlzVmlzaWJsZU9wdGlvbihzdWJlbGVtZW50KSlcblx0XHRcdDogbm9ybWFsaXplZFJlc3BvbnNlO1xuXG5cdFx0Y29uc3QgcmVzdWx0ID0gdmlzaWJsZVJlc3BvbnNlLm1hcCgoc3ViZWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRpZiAoIXN1YmVsZW1lbnQuY2hpbGRyZW4gfHwgc3ViZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuXHRcdFx0XHRzdWJlbGVtZW50LmNoaWxkcmVuID0gW107XG5cdFx0XHRcdHN1YmVsZW1lbnQucGF0aCA9IGlzQ2F0ZWdvcnlcblx0XHRcdFx0XHQ/IHRoaXMuY29uc3RhbnRzLlBST0RVQ1RfTElTVF9ST1VURSArICdjYXRlZ29yaWVzLycgKyB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5zbHVnID8/IHN1YmVsZW1lbnQubmFtZSlcblx0XHRcdFx0XHQ6IHRoaXMuY29uc3RhbnRzLlBST0RVQ1RfTElTVF9ST1VURSArICdhdHRyaWJ1dGVzLycgKyB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5zbHVnID8/IHN1YmVsZW1lbnQubmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHN1YmVsZW1lbnQuY2hpbGRyZW4pIHtcblx0XHRcdFx0c3ViZWxlbWVudC5zbHVnID0gc3ViZWxlbWVudC5zbHVnIHx8IHRoaXMuc2x1Z2lmeShzdWJlbGVtZW50Lm5hbWUpO1xuXHRcdFx0XHRzdWJlbGVtZW50LmNoaWxkcmVuID0gdGhpcy5hcHBlbmRQYXRocyhpc0NhdGVnb3J5LCBzdWJlbGVtZW50LmNoaWxkcmVuLCBpbmNsdWRlSGlkZGVuKTtcblx0XHRcdH1cblxuXHRcdFx0c3ViZWxlbWVudC5wYXRoID0gaXNDYXRlZ29yeVxuXHRcdFx0XHQ/IHRoaXMuY29uc3RhbnRzLlBST0RVQ1RfTElTVF9ST1VURSArICdjYXRlZ29yaWVzLycgKyB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5zbHVnID8/IHN1YmVsZW1lbnQubmFtZSlcblx0XHRcdFx0OiB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnYXR0cmlidXRlcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpO1xuXG5cdFx0XHRyZXR1cm4gc3ViZWxlbWVudDtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGlzVmlzaWJsZU9wdGlvbihlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZWxlbWVudD8uaXNWaXNpYmxlICE9PSBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgZmlsdGVyVmlzaWJsZU9wdGlvbnM8VCBleHRlbmRzIHsgaXNWaXNpYmxlPzogYm9vbGVhbjsgY2hpbGRyZW4/OiBUW10gfT4oZWxlbWVudHM6IFRbXSA9IFtdKTogVFtdIHtcblx0XHRyZXR1cm4gZWxlbWVudHNcblx0XHRcdC5maWx0ZXIoKGVsZW1lbnQ6IFQpID0+IHRoaXMuaXNWaXNpYmxlT3B0aW9uKGVsZW1lbnQpKVxuXHRcdFx0Lm1hcCgoZWxlbWVudDogVCkgPT4gKHtcblx0XHRcdFx0Li4uZWxlbWVudCxcblx0XHRcdFx0Y2hpbGRyZW46IHRoaXMuZmlsdGVyVmlzaWJsZU9wdGlvbnMoZWxlbWVudC5jaGlsZHJlbiA/PyBbXSlcblx0XHRcdH0pKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDYXRlZ29yeUNvZGVCeVNsdWcoc2x1Zzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy5yZW1vdmVBY2NlbnRzKFN0cmluZyhzbHVnKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRjb25zdCBmaW5kID0gKGVsZW1lbnRzOiBDYXRlZ29yeVtdID0gW10pOiBzdHJpbmcgfCBudWxsID0+IHtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuXHRcdFx0XHRjb25zdCBjYW5kaWRhdGVzID0gW1xuXHRcdFx0XHRcdGVsZW1lbnQuc2x1Zyxcblx0XHRcdFx0XHRlbGVtZW50LnBhdGggJiYgU3RyaW5nKGVsZW1lbnQucGF0aCkuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbikucG9wKCksXG5cdFx0XHRcdFx0ZWxlbWVudC5uYW1lXG5cdFx0XHRcdF1cblx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdFx0Lm1hcCgodmFsdWU6IGFueSkgPT4gdGhpcy5yZW1vdmVBY2NlbnRzKFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSkpO1xuXG5cdFx0XHRcdGlmIChjYW5kaWRhdGVzLmluY2x1ZGVzKHRhcmdldCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC5jb2RlID8/IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjaGlsZENvZGUgPSBmaW5kKGVsZW1lbnQuY2hpbGRyZW4gPz8gW10pO1xuXHRcdFx0XHRpZiAoY2hpbGRDb2RlKSByZXR1cm4gY2hpbGRDb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZpbmQodGhpcy5hbGxDYXRlZ29yaWVzKTtcblx0fVxuXHQvKipcblx0ICogR2VuZXJhIHVuIG1hcGVvIGRlIHNlY2Npb25lcyBwYXJhIHF1ZSBxdWVkZW4gbWFzIGFtaWdhYmxlcyBhIGxhIGhvcmEgZGUgbWFuZWphciBjb21vIG1lbsO6LlxuXHQgKiBAcGFyYW0gc2VjdGlvbiBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGFwcGVuZFNlY3Rpb24oc2VjdGlvbjogYW55KSB7XG5cdFx0bGV0IGRhdGE6IGFueSA9IHt9O1xuXHRcdGlmIChzZWN0aW9uLnBhZ2VzPy5sZW5ndGgpIHtcblx0XHRcdGRhdGEudHlwZSA9ICdzdWInO1xuXHRcdFx0ZGF0YS5jaGlsZHJlbiA9IHNlY3Rpb24ucGFnZXMubWFwKChwYWdlOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRjb2RlOiBwYWdlLmNvZGUsXG5cdFx0XHRcdFx0bmFtZTogcGFnZS5uYW1lLFxuXHRcdFx0XHRcdHR5cGU6ICdsaW5rJyxcblx0XHRcdFx0XHRwYXRoOiB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIChwYWdlLnNsdWcgPyBwYWdlLnNsdWcgOiBwYWdlLmNvZGUpLFxuXHRcdFx0XHRcdC8vIHBhdGg6IHRoaXMuY29uc3RhbnRzLlNFQ1RJT05TX1JPVVRFICsgcGFnZS5zbHVnLFxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdC8vZGF0YS50aXRsZSA9IHNlY3Rpb24ubmFtZTtcblx0XHRcdGRhdGEubmFtZSA9IHNlY3Rpb24ubmFtZTtcblx0XHRcdGRhdGEucGF0aCA9IHRoaXMuY29uc3RhbnRzLlNFQ1RJT05TX1JPVVRFICsgKHNlY3Rpb24uc2x1ZyA/IHNlY3Rpb24uc2x1ZyA6IHNlY3Rpb24uY29kZSk7XG5cdFx0XHRkYXRhLmNvZGUgPSBzZWN0aW9uLmNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEuY29kZSA9IHNlY3Rpb24uY29kZTtcblx0XHRcdC8vZGF0YS50aXRsZSA9IHNlY3Rpb24ubmFtZTtcblx0XHRcdGRhdGEubmFtZSA9IHNlY3Rpb24ubmFtZTtcblx0XHRcdGRhdGEudHlwZSA9ICdsaW5rJztcblx0XHRcdGRhdGEuY2hpbGRyZW4gPSBbXTtcblx0XHRcdGRhdGEucGF0aCA9IHRoaXMuY29uc3RhbnRzLlNFQ1RJT05TX1JPVVRFICsgKHNlY3Rpb24uc2x1ZyA/IHNlY3Rpb24uc2x1ZyA6IHNlY3Rpb24uY29kZSk7XG5cdFx0fVxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cdC8qKlxuXHQgKiBNYXBlYSBsb3MgZWxlbWVudG9zIHBhcmEgZGFybGUgdW4gZm9ybWF0byBtYXMgYW1pZ2FibGUgcGFyYSBsb3MgbWVuw7plcyB5IGZpbHRyb3MuXG5cdCAqIEBwYXJhbSBlbGVtZW50cyBjYXRlZ29yaWFzIHwgYXRyaWJ1dG9zIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZW5lcmF0ZU1lbnUgPSAoZWxlbWVudHM6IGFueSkgPT4ge1xuXHRcdHJldHVybiBlbGVtZW50cy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLmVsZW1lbnQsXG5cdFx0XHRcdFx0dGl0bGU6IGVsZW1lbnQubmFtZSxcblx0XHRcdFx0XHRwYXRoOiBlbGVtZW50LnBhdGgsXG5cdFx0XHRcdFx0dHlwZTogJ2xpbmsnLFxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLmVsZW1lbnQsXG5cdFx0XHRcdFx0dGl0bGU6IGVsZW1lbnQubmFtZSxcblx0XHRcdFx0XHR0eXBlOiAnc3ViJyxcblx0XHRcdFx0XHRwYXRoOiBlbGVtZW50LnBhdGgsXG5cdFx0XHRcdFx0Y2hpbGRyZW46IChlbGVtZW50LmNoaWxkcmVuID8gdGhpcy5nZW5lcmF0ZU1lbnUoZWxlbWVudC5jaGlsZHJlbikgOiBbXSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblx0LyoqXG5cdCAqIERldnVlbHZlIGxvcyBlbGVtZW50b3MgZGVsIGJyZWFkY3J1bWIuXG5cdCAqIEBwYXJhbSBjb2RlIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdGdldEJyZWFkY3J1bWIgPSAoY29kZTogYW55KSA9PiB7XG5cdFx0aWYgKCFjb2RlKSByZXR1cm4gbnVsbDtcblx0XHRsZXQgYnJlYWRjcnVtYiA9IHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1iKGNvZGUsIHRoaXMuZ2VuZXJhdGVNZW51KHRoaXMuY2F0ZWdvcmllc1N1YmplY3QudmFsdWUpLCBbXSk7XG5cdFx0aWYgKCFicmVhZGNydW1iIHx8ICFicmVhZGNydW1iLmxlbmd0aCkgYnJlYWRjcnVtYiA9IHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1iKGNvZGUsIHRoaXMuZ2VuZXJhdGVNZW51KHRoaXMuYXR0cmlidXRlc1N1YmplY3QudmFsdWUpLCBbXSk7XG5cdFx0cmV0dXJuIChicmVhZGNydW1iICYmIGJyZWFkY3J1bWIubGVuZ3RoKSAmJiBicmVhZGNydW1iLnJldmVyc2UoKTtcblx0fVxuXHQvKipcblx0ICogR2VuZXJhIGxvcyBicmVhZGNydW1icyBlbiBiYXNlIGEgbG9zIGZpbHRyb3MgYXBsaWNhZG9zLlxuXHQgKiBAcGFyYW0gZmlsdGVycyBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRCcmVhZGNydW1iQnlGaWx0ZXJzID0gKGZpbHRlcnM6IEZpbHRlcltdKSA9PiB7XG5cdFx0bGV0IGZpbmFsX3Jlc3VsdDogYW55W10gPSBbXTtcblx0XHRmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcblx0XHRcdGxldCByZXN1bHQgPSBmaWx0ZXIuZ2V0U2VsZWN0ZWRMaXN0KCk7XG5cdFx0XHRpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lmxlbmd0aCkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoZmlsdGVyLnR5cGUoKSA9PSAnY2F0ZWdvcmllcycpIHtcblx0XHRcdFx0ZmluYWxfcmVzdWx0LnVuc2hpZnQoLi4udGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWIocmVzdWx0WzBdLCBmaWx0ZXIuZGF0YSwgW10pLnJldmVyc2UoKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmZvckVhY2goKGNvZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGxldCBicmVhZGNydW1iID0gdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWIoY29kZSwgZmlsdGVyLmRhdGEsIFtdKTtcblx0XHRcdFx0XHRpZiAoYnJlYWRjcnVtYi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGZpbmFsX3Jlc3VsdC5wdXNoKHRoaXMuZm9ybWF0U2VsZWN0ZWRGaWx0ZXJCcmVhZGNydW1iKGJyZWFkY3J1bWIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZpbmFsX3Jlc3VsdDtcblx0fVxuXHQvKipcblx0ICogR2VuZXJhIGVsIGxpc3RhZG8gZGUgYnJlYWRjcnVtYi5cblx0ICogQHBhcmFtIGNvZGUgXG5cdCAqIEBwYXJhbSBlbGVtZW50cyBmaWx0cm9zIGFjdHVhbGVzIGVuIGVsIGZyb250ZW5kXG5cdCAqIEBwYXJhbSByZXN1bHQgZGF0b3MgYSBhY3R1YWxpemFyIGNvbiBlbCBudWV2byBsaXN0YWRvIGRlIGJyZWFkY3J1bWJcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQnJlYWRjcnVtYiA9IChjb2RlOiBzdHJpbmcsIGVsZW1lbnRzOiBhbnksIHJlc3VsdDogYW55KSA9PiB7XG5cdFx0bGV0IGVsZW1lbnQgPSBlbGVtZW50cy5maW5kKChlbGVtOiBhbnkpID0+IGVsZW0uY29kZSA9PSBjb2RlKTtcblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0cmVzdWx0LnB1c2goZWxlbWVudCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0ZWxlbWVudHMuc29tZSgoZWxlbTogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChlbGVtLmNoaWxkcmVuICYmIGVsZW0uY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblx0XHRcdFx0XHRsZXQgbmV3X3Jlc3VsdCA9IHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1iKGNvZGUsIGVsZW0uY2hpbGRyZW4sIHJlc3VsdCk7XG5cdFx0XHRcdFx0aWYgKG5ld19yZXN1bHQubGVuZ3RoID4gbGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBuZXdfcmVzdWx0O1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goZWxlbSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSlcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0U2VsZWN0ZWRGaWx0ZXJCcmVhZGNydW1iID0gKGJyZWFkY3J1bWI6IGFueVtdKSA9PiB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSBicmVhZGNydW1iWzBdO1xuXHRcdGNvbnN0IHBhcmVudCA9IGJyZWFkY3J1bWJbMV07XG5cdFx0Y29uc3QgdmFsdWVMYWJlbCA9IHRoaXMuZ2V0QnJlYWRjcnVtYkRpc3BsYXlMYWJlbChzZWxlY3RlZCwgdHJ1ZSk7XG5cdFx0Y29uc3QgcGFyZW50TGFiZWwgPSB0aGlzLmdldEJyZWFkY3J1bWJEaXNwbGF5TGFiZWwocGFyZW50LCBmYWxzZSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc2VsZWN0ZWQsXG5cdFx0XHR0aXRsZTogcGFyZW50TGFiZWwgJiYgdmFsdWVMYWJlbCA/IGAke3BhcmVudExhYmVsfTogJHt2YWx1ZUxhYmVsfWAgOiB2YWx1ZUxhYmVsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QnJlYWRjcnVtYkRpc3BsYXlMYWJlbCA9IChlbGVtZW50OiBhbnksIHByZWZlckRlc2NyaXB0aW9uID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuXHRcdGlmICghZWxlbWVudCkgcmV0dXJuICcnO1xuXG5cdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBTdHJpbmcoZWxlbWVudC5kZXNjcmlwdGlvbiA/PyAnJykudHJpbSgpO1xuXHRcdGNvbnN0IG5hbWUgPSBTdHJpbmcoZWxlbWVudC5uYW1lID8/ICcnKS50cmltKCk7XG5cdFx0Y29uc3QgdGl0bGUgPSBTdHJpbmcoZWxlbWVudC50aXRsZSA/PyAnJykudHJpbSgpO1xuXG5cdFx0aWYgKHByZWZlckRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uKSByZXR1cm4gZGVzY3JpcHRpb247XG5cdFx0aWYgKG5hbWUpIHJldHVybiBuYW1lO1xuXHRcdGlmIChkZXNjcmlwdGlvbikgcmV0dXJuIGRlc2NyaXB0aW9uO1xuXHRcdGlmICh0aXRsZSAmJiAhdGhpcy5pc0hleExpa2UodGl0bGUpKSByZXR1cm4gdGl0bGU7XG5cblx0XHRjb25zdCBmcm9tQ29kZSA9IHRoaXMuZXh0cmFjdEJyZWFkY3J1bWJMYWJlbEZyb21Db2RlKFN0cmluZyhlbGVtZW50LmNvZGUgPz8gJycpKTtcblx0XHRpZiAoZnJvbUNvZGUpIHJldHVybiBmcm9tQ29kZTtcblxuXHRcdHJldHVybiB0aXRsZTtcblx0fVxuXG5cdHByaXZhdGUgZXh0cmFjdEJyZWFkY3J1bWJMYWJlbEZyb21Db2RlID0gKGNvZGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgcGFydHMgPSBTdHJpbmcoY29kZSB8fCAnJykudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSByZXR1cm4gcGFydHMuc2xpY2UoMSkuam9pbignICcpO1xuXHRcdHJldHVybiBwYXJ0c1swXSA/PyAnJztcblx0fVxuXG5cdHByaXZhdGUgaXNIZXhMaWtlID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gU3RyaW5nKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCcjJywgJycpLnRyaW0oKTtcblx0XHRyZXR1cm4gL15bMC05YS1mQS1GXXszfSQvLnRlc3Qobm9ybWFsaXplZCkgfHwgL15bMC05YS1mQS1GXXs2fSQvLnRlc3Qobm9ybWFsaXplZCk7XG5cdH1cblx0cHVibGljIGdldFNlY3Rpb25Db250ZW50QnlMaW5rID0gKGxpbms6IGFueSkgPT5cblx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0SFRNTCh0aGlzLnBhZ2VDb250ZW50QnlDb2RlQXBpKGxpbmspKS5waXBlKFxuXHRcdFx0bWFwKGh0bWwgPT4gaHRtbC5zcGxpdCgnPC9oZWFkPicpW2h0bWwuc3BsaXQoJzwvaGVhZD4nKS5sZW5ndGggLSAxXSksXG5cdFx0XHRjYXRjaEVycm9yKGUgPT4gb2YoZmFsc2UpKVxuXHRcdCk7XG5cblx0XHRcblxuXHRnZXRGQVEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5mYXFzQXBpKCkpLnBpcGUobWFwKHJlc3BvbnNlID0+IHtcblx0XHRcdGxldCByZXN1bHQ6IEZBUVtdID0gW107XG5cdFx0XHRyZXNwb25zZS5mb3JFYWNoKChyZXNwb25zZV9mYXE6IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgZmFxczogRkFRID0ge1xuXHRcdFx0XHRcdGNvZGU6IHJlc3BvbnNlX2ZhcS5jb2RlLFxuXHRcdFx0XHRcdHBvc2l0aW9uOiByZXNwb25zZV9mYXEucG9zaXRpb24sXG5cdFx0XHRcdFx0dGl0bGU6IHJlc3BvbnNlX2ZhcS50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXS50b3BpYyxcblx0XHRcdFx0XHRxdWVzdGlvbnM6IHJlc3BvbnNlX2ZhcS5mcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMubWFwKChhc2tlZF9xdWVzdGlvbjogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Y29kZTogYXNrZWRfcXVlc3Rpb24uY29kZSxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiBhc2tlZF9xdWVzdGlvbi5wb3NpdGlvbixcblx0XHRcdFx0XHRcdHF1ZXN0aW9uOiBhc2tlZF9xdWVzdGlvbi50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXSA/IGFza2VkX3F1ZXN0aW9uLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdLnF1ZXN0aW9uIDogJycsXG5cdFx0XHRcdFx0XHRhbnN3ZXI6IGFza2VkX3F1ZXN0aW9uLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdID8gYXNrZWRfcXVlc3Rpb24udHJhbnNsYXRpb25zW3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRV0uYW5zd2VyIDogJycsXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJlc3VsdC5wdXNoKGZhcXMpO1xuXHRcdFx0fSlcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSkpO1xuXHR9XG59IFxuIl19
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLXNlcnZpY2VzL29wdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFdBQVcsRUFBUSxNQUFNLE1BQU0sQ0FBQztBQUNyRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBQ3ZEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBQzFCOztPQUVHO0lBQ0ssVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DOztPQUVHO0lBQ08sVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQzs7T0FFRztJQUNLLFNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRDs7T0FFRztJQUNLLFlBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRDs7T0FFRztJQUNLLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsR0FBMkIsSUFBSSxDQUFDLGlCQUFp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aW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaUNvbnN0YW50c1NlcnZpY2UsIENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEF0dHJpYnV0ZSwgQ2F0ZWdvcnksIEZBUSwgU2VjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG4vKipcbiAqIEVzdGUgc2VydmljaW8gcGVybWl0ZSBtYW5lamEgbGFzIENhdGVnb3JpYXMsIFNlY2Npb25lcyB5IEF0cmlidXRvcyBjb21vIG1lbnVlcyBcbiAqIHBhcmEgbGEgYXBsaWNhY2nDs24uIFxuICovXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBPcHRpb25zU2VydmljZSB7XG5cdC8qKlxuXHQgKiBNYW5lamEgbGFzIHBldGljaW9uZXMgYSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgY29ubmVjdGlvbiA9IGluamVjdChDb25uZWN0aW9uU2VydmljZSk7XG5cdC8qKlxuXHQgKiBQbGF0Zm9ybSBJRCBwYXJhIHZlcmlmaWNhciBzaSBlc3RhbW9zIGVuIGVsIG5hdmVnYWRvclxuXHQgKi9cblx0cHJvdGVjdGVkIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZWwgY29yZVxuXHQgKi9cblx0cHJpdmF0ZSBjb25zdGFudHMgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xuXHQvKipcblx0ICogQ29uc3RhbnRlcyBkZSBsYSBBUElcblx0ICovXG5cdHByaXZhdGUgYXBpQ29uc3RhbnRzID0gaW5qZWN0KEFwaUNvbnN0YW50c1NlcnZpY2UpO1xuXHRwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cdC8qKlxuXHQgKiBNYW5lamEgbG9zIGNhbWJpb3MgZW4gbGFzIGNhdGVnb3JpYXNcblx0ICovXG5cdHByaXZhdGUgY2F0ZWdvcmllc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhdGVnb3J5W10+KFtdKTtcblx0cHJpdmF0ZSBjYXRlZ29yaWVzJDogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiA9IHRoaXMuY2F0ZWdvcmllc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cdHByaXZhdGUgX2NhdGVnb3JpZXNSZXF1ZXN0SW5Qcm9ncmVzcyA9IGZhbHNlO1xuXHRwcml2YXRlIGFsbENhdGVnb3JpZXM6IENhdGVnb3J5W10gPSBbXTtcblx0LyoqXG5cdCAqIE1hbmVqYSBsb3MgY2FtYmlvcyBlbiBsYXMgc2VjY2lvbmVzXG5cdCAqL1xuXHRwcml2YXRlIHNlY3Rpb25zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VjdGlvbltdPihbXSk7XG5cdHByaXZhdGUgc2VjdGlvbnMkOiBPYnNlcnZhYmxlPFNlY3Rpb25bXT4gPSB0aGlzLnNlY3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHJpdmF0ZSBfc2VjdGlvbnNSZXF1ZXN0SW5Qcm9ncmVzcyA9IGZhbHNlO1xuXHQvKipcblx0ICogTWFuZWphIGxvcyBjYW1iaW9zIGVuIGxvcyBhdHJpYnV0b3Ncblx0ICovXG5cdHByaXZhdGUgYXR0cmlidXRlc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dHJpYnV0ZVtdPihbXSk7XG5cdHByaXZhdGUgYXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+ID0gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblx0cHJpdmF0ZSBfbGFzdEF0dHJpYnV0ZXNQYXJhbXM6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIF9sYXN0QXR0cmlidXRlc1JlcXVlc3RGYWlsZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBfYXR0cmlidXRlc1JlcXVlc3RWZXJzaW9uID0gMDtcblx0cHJpdmF0ZSBfYXR0cmlidXRlc1JlcXVlc3RJblByb2dyZXNzID0gZmFsc2U7XG5cdHByaXZhdGUgX2F0dHJpYnV0ZXNSZXF1ZXN0UGFyYW1zSW5Qcm9ncmVzczogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0Ly9BUEkgVVJMU1xuXHRwcml2YXRlIHJlYWRvbmx5IFNIT1BfQ0hBTk5FTF9BUEkgPSBgJHt0aGlzLmFwaUNvbnN0YW50cy5TSE9QX0FQSV9VUkx9JHt0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMfS9gO1xuXHRwcml2YXRlIHJlYWRvbmx5IENNU19DSEFOTkVMX0FQSSA9IGAke3RoaXMuYXBpQ29uc3RhbnRzLkNNU19VUkx9JHt0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMfS9gO1xuXHQvKipcblx0ICogRGV2dWVsdmUgbGEgVVJMIHBhcmEgb2J0ZW5lciBsYXMgY2F0ZWdvcmlhcy5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIHRheG9uc0FwaSgpIHsgcmV0dXJuIGAke3RoaXMuU0hPUF9DSEFOTkVMX0FQSX10YXhvbnMvP2xvY2FsZT0ke3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRX1gIH07XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSBVUkwgcGFyYSBvYnRlbmVyIGxhcyBzZWNjaW9uZXNcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIHNlY3Rpb25zQXBpKCkgeyByZXR1cm4gYCR7dGhpcy5DTVNfQ0hBTk5FTF9BUEl9c2VjdGlvbnMvP2xvY2FsZT0ke3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRX1gIH07XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsYSBVUkwgcGFyYSBvYnRlbmVyIGxvcyBhdHJpYnV0b3MuIFNlIGxlIHB1ZWRlIGFwbGljYXIgZmxpdHJvcy5cblx0ICogQHBhcmFtIGZpbHRlciBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwcml2YXRlIGF0dHJpYnV0ZXNBcGkoZmlsdGVyID0gJycpIHsgcmV0dXJuIGAke3RoaXMuU0hPUF9DSEFOTkVMX0FQSX1wcm9kdWN0LXNlYXJjaC9hdHRyaWJ1dGVzLz9sb2NhbGU9JHt0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEV9JmxpbWl0PTEmcGFnZT0xJHtmaWx0ZXJ9YCB9O1xuXHRwcml2YXRlIGZhcXNBcGkoKSB7IHJldHVybiAnY21zLycgKyB0aGlzLmFwaUNvbnN0YW50cy5DSEFOTkVMICsgJy9mYXEnIH07XG4gICAgcHJpdmF0ZSBwYWdlQ29udGVudEJ5Q29kZUFwaSA9IChjb2RlOiBzdHJpbmcpID0+IHRoaXMuY21zQmFzZSgpICsgJy8nICsgdGhpcy5jb25zdGFudHMuZ2V0Q2hhbm5lbCgpICsgJy9wYWdlLycgKyBjb2RlO1xuXHRwcml2YXRlIGNtc0Jhc2UgPSAoKSA9PiAnY21zLycgKyB0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEU7XG5cdGNvbnN0cnVjdG9yKCkgeyB9XG5cdC8qKlxuXHQgKiBPYnRpZW5lIGxhcyBjYXRlZ29yaWFzIGRlbCBiYWNrZW5kLiBZIGxvcyBtYXBlYSBwYXJhIHF1ZSBzZWEgbWFzIGFtaWdhYmxlIGVsIG1hbmVqbyBjb21vIG1lbsO6LlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRDYXRlZ29yaWVzKCk6IE9ic2VydmFibGU8Q2F0ZWdvcnlbXT4ge1xuXHRcdGlmICh0aGlzLmNhdGVnb3JpZXNTdWJqZWN0LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmICF0aGlzLl9jYXRlZ29yaWVzUmVxdWVzdEluUHJvZ3Jlc3MpIHtcblx0XHRcdHRoaXMuX2NhdGVnb3JpZXNSZXF1ZXN0SW5Qcm9ncmVzcyA9IHRydWU7XG5cdFx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMudGF4b25zQXBpKCkpLnBpcGUoXG5cdFx0XHRcdHNoYXJlUmVwbGF5KDEpLFxuXHRcdFx0XHRtYXAoKHJlc3BvbnNlOiBDYXRlZ29yeVtdKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hbGxDYXRlZ29yaWVzID0gdGhpcy5hcHBlbmRQYXRocyh0cnVlLCByZXNwb25zZSwgdHJ1ZSkgYXMgQ2F0ZWdvcnlbXTtcblx0XHRcdFx0XHRjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5maWx0ZXJWaXNpYmxlT3B0aW9ucyh0aGlzLmFsbENhdGVnb3JpZXMpIGFzIENhdGVnb3J5W107XG5cdFx0XHRcdFx0dGhpcy5jYXRlZ29yaWVzU3ViamVjdC5uZXh0KGNhdGVnb3JpZXMpXG5cdFx0XHRcdFx0cmV0dXJuIGNhdGVnb3JpZXNcblx0XHRcdFx0fSksXG5cdFx0XHRcdGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdbT3B0aW9uc1NlcnZpY2VdIEVycm9yIGxvYWRpbmcgY2F0ZWdvcmllcy4gVXNpbmcgZW1wdHkgZmFsbGJhY2suJywgZXJyb3IpO1xuXHRcdFx0XHRcdHRoaXMuY2F0ZWdvcmllc1N1YmplY3QubmV4dChbXSlcblx0XHRcdFx0XHRyZXR1cm4gb2YoW10pXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fY2F0ZWdvcmllc1JlcXVlc3RJblByb2dyZXNzID0gZmFsc2U7XG5cdFx0XHRcdH0pXG5cdFx0XHQpLnN1YnNjcmliZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jYXRlZ29yaWVzJDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBsYXMgc2VjY2lvbmVzIGRlbCBiYWNrZW5kLiBZIGxvcyBtYXBlYSBwYXJhIHF1ZSBzZWEgbWFzIGFtaWdhYmxlIGVsIG1hbmVqbyBjb21vIG1lbsO6LlxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRTZWN0aW9ucygpOiBPYnNlcnZhYmxlPFNlY3Rpb25bXT4ge1xuXHRcdGlmICh0aGlzLnNlY3Rpb25zU3ViamVjdC5nZXRWYWx1ZSgpLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5fc2VjdGlvbnNSZXF1ZXN0SW5Qcm9ncmVzcykge1xuXHRcdFx0dGhpcy5fc2VjdGlvbnNSZXF1ZXN0SW5Qcm9ncmVzcyA9IHRydWU7XG5cdFx0XHR0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuc2VjdGlvbnNBcGkoKSkucGlwZShcblx0XHRcdFx0c2hhcmVSZXBsYXkoMSksXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IFNlY3Rpb25bXSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNhZmVSZXNwb25zZSA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UpID8gcmVzcG9uc2UgOiBbXTtcblx0XHRcdFx0XHRsZXQgc2VjdGlvbnMgPSBzYWZlUmVzcG9uc2UuZmlsdGVyKChzZWN0aW9uOiBTZWN0aW9uKSA9PiBzZWN0aW9uLmNvZGUgIT0gJ2hvbWUnKVxuXHRcdFx0XHRcdHNlY3Rpb25zID0gc2VjdGlvbnMubWFwKChzZWN0aW9uOiBTZWN0aW9uKSA9PiB0aGlzLmFwcGVuZFNlY3Rpb24oc2VjdGlvbikpXG5cdFx0XHRcdFx0dGhpcy5zZWN0aW9uc1N1YmplY3QubmV4dChzZWN0aW9ucylcblx0XHRcdFx0XHRyZXR1cm4gc2VjdGlvbnNcblx0XHRcdFx0fSksXG5cdFx0XHRcdGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdbT3B0aW9uc1NlcnZpY2VdIEVycm9yIGxvYWRpbmcgc2VjdGlvbnMuIFVzaW5nIGVtcHR5IGZhbGxiYWNrLicsIGVycm9yKTtcblx0XHRcdFx0XHR0aGlzLnNlY3Rpb25zU3ViamVjdC5uZXh0KFtdKVxuXHRcdFx0XHRcdHJldHVybiBvZihbXSlcblx0XHRcdFx0fSlcblx0XHRcdCkuc3Vic2NyaWJlKHtcblx0XHRcdFx0Y29tcGxldGU6ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9zZWN0aW9uc1JlcXVlc3RJblByb2dyZXNzID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnNlY3Rpb25zJDtcblx0fVxuXHQvKipcblx0ICogT2J0aWVuZSBsb3MgYXRyaWJ1dG9zIGRlbCBiYWNrZW5kLiBZIGxvcyBtYXBlYSBwYXJhIHF1ZSBzZWEgbWFzIGFtaWdhYmxlIGVsIG1hbmVqbyBjb21vIG1lbsO6LlxuXHQgKiBAcGFyYW0gcGFyYW1zIFxuXHQgKiBAcmV0dXJucyBcblx0ICovXG5cdHB1YmxpYyBnZXRBdHRyaWJ1dGVzKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8QXR0cmlidXRlW10+IHtcblx0XHRjb25zdCBub3JtYWxpemVkUGFyYW1zID0gdHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycgPyBwYXJhbXMgOiAnJztcblx0XHRjb25zdCBzaG91bGREZWZlclVuZmlsdGVyZWRSZXF1ZXN0ID1cblx0XHRcdG5vcm1hbGl6ZWRQYXJhbXMgPT09ICcnXG5cdFx0XHQmJiB0aGlzLmNvbnN0YW50cy5jdXJyZW50Um91dGVUeXBlID09PSAnY2F0ZWdvcmllcydcblx0XHRcdCYmIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuZ2V0VmFsdWUoKS5sZW5ndGggPT09IDA7XG5cblx0XHRpZiAoIXNob3VsZERlZmVyVW5maWx0ZXJlZFJlcXVlc3QpIHtcblx0XHRcdHRoaXMuZmV0Y2hBdHRyaWJ1dGVzKG5vcm1hbGl6ZWRQYXJhbXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzJDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNjYSBhdHJpYnV0b3MgY29uIGxvcyBmaWx0cm9zIGFjdHVhbGVzIChlajogY2F0ZWdvcnksIHNlYXJjaCwgcHJpY2UpLlxuXHQgKiBTZSB1c2EgcGFyYSBtb3N0cmFyIHNvbG8gYXRyaWJ1dG9zIHJlbGV2YW50ZXMgc2Vnw7puIGxhIGNhdGVnb3LDrWEgZW4gY29sZWNjacOzbi5cblx0ICovXG5cdHB1YmxpYyByZWZyZXNoQXR0cmlidXRlcyhwYXJhbXM6IHN0cmluZyA9ICcnKTogdm9pZCB7XG5cdFx0dGhpcy5mZXRjaEF0dHJpYnV0ZXMocGFyYW1zKTtcblx0fVxuXG5cdHByaXZhdGUgZmV0Y2hBdHRyaWJ1dGVzKHBhcmFtcz86IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWRQYXJhbXMgPSB0eXBlb2YgcGFyYW1zID09PSAnc3RyaW5nJyA/IHBhcmFtcyA6ICcnO1xuXHRcdGNvbnN0IHNhbWVQYXJhbXNBc0xhc3RSZXF1ZXN0ID0gdGhpcy5fbGFzdEF0dHJpYnV0ZXNQYXJhbXMgPT09IG5vcm1hbGl6ZWRQYXJhbXM7XG5cdFx0Y29uc3Qgc2FtZVBhcmFtc0luRmxpZ2h0ID0gdGhpcy5fYXR0cmlidXRlc1JlcXVlc3RJblByb2dyZXNzXG5cdFx0XHQmJiB0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFBhcmFtc0luUHJvZ3Jlc3MgPT09IG5vcm1hbGl6ZWRQYXJhbXM7XG5cblx0XHQvLyBEZWR1cGU6XG5cdFx0Ly8gLSBubyByZXBldGlyIHNpIHlhIGhheSBsYSBtaXNtYSByZXF1ZXN0IGVuIHZ1ZWxvXG5cdFx0Ly8gLSBubyByZXBldGlyIGxhIG1pc21hIHJlcXVlc3QgeWEgcmVzdWVsdGEgKGluY2x1eWUgcmVzcHVlc3RhcyB2YWPDrWFzKSxcblx0XHQvLyAgIHNhbHZvIHF1ZSBlbCDDumx0aW1vIGludGVudG8gaGF5YSBmYWxsYWRvLlxuXHRcdGlmIChzYW1lUGFyYW1zSW5GbGlnaHQgfHwgKHNhbWVQYXJhbXNBc0xhc3RSZXF1ZXN0ICYmICF0aGlzLl9sYXN0QXR0cmlidXRlc1JlcXVlc3RGYWlsZWQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fbGFzdEF0dHJpYnV0ZXNQYXJhbXMgPSBub3JtYWxpemVkUGFyYW1zO1xuXHRcdHRoaXMuX2xhc3RBdHRyaWJ1dGVzUmVxdWVzdEZhaWxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IHJlcXVlc3RWZXJzaW9uID0gKyt0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFZlcnNpb247XG5cdFx0dGhpcy5fYXR0cmlidXRlc1JlcXVlc3RJblByb2dyZXNzID0gdHJ1ZTtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFBhcmFtc0luUHJvZ3Jlc3MgPSBub3JtYWxpemVkUGFyYW1zO1xuXG5cdFx0dGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmF0dHJpYnV0ZXNBcGkobm9ybWFsaXplZFBhcmFtcykpLnBpcGUoXG5cdFx0XHRtYXAoKHJlc3BvbnNlOiBhbnkgfCBBdHRyaWJ1dGUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc291cmNlID0gKHJlc3BvbnNlIGFzIGFueSk/LmF0dHJpYnV0ZXM/LlswXSA/PyByZXNwb25zZTtcblx0XHRcdFx0aWYgKCFzb3VyY2UpIHJldHVybiBbXSBhcyBBdHRyaWJ1dGVbXTtcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IHRoaXMuYXBwZW5kUGF0aHMoZmFsc2UsIHNvdXJjZSkgYXMgQXR0cmlidXRlW107XG5cdFx0XHRcdHJldHVybiBhdHRyaWJ1dGVzO1xuXHRcdFx0fSksXG5cdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdGlmIChyZXF1ZXN0VmVyc2lvbiAhPT0gdGhpcy5fYXR0cmlidXRlc1JlcXVlc3RWZXJzaW9uKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuX2F0dHJpYnV0ZXNSZXF1ZXN0SW5Qcm9ncmVzcyA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9hdHRyaWJ1dGVzUmVxdWVzdFBhcmFtc0luUHJvZ3Jlc3MgPSBudWxsO1xuXHRcdFx0fSlcblx0XHQpLnN1YnNjcmliZSh7XG5cdFx0XHRuZXh0OiAoYXR0cmlidXRlczogQXR0cmlidXRlW10pID0+IHtcblx0XHRcdFx0Ly8gRXZpdGEgcXVlIHJlc3B1ZXN0YXMgdmllamFzIHBpc2VuIGxhIMO6bHRpbWEgY2F0ZWdvcsOtYSBzZWxlY2Npb25hZGEuXG5cdFx0XHRcdGlmIChyZXF1ZXN0VmVyc2lvbiAhPT0gdGhpcy5fYXR0cmlidXRlc1JlcXVlc3RWZXJzaW9uKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuX2xhc3RBdHRyaWJ1dGVzUmVxdWVzdEZhaWxlZCA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0Lm5leHQoYXR0cmlidXRlcyk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChyZXF1ZXN0VmVyc2lvbiAhPT0gdGhpcy5fYXR0cmlidXRlc1JlcXVlc3RWZXJzaW9uKSByZXR1cm47XG5cdFx0XHRcdHRoaXMuX2xhc3RBdHRyaWJ1dGVzUmVxdWVzdEZhaWxlZCA9IHRydWU7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1tPcHRpb25zU2VydmljZV0gRXJyb3IgbG9hZGluZyBhdHRyaWJ1dGVzLiBVc2luZyBlbXB0eSBmYWxsYmFjay4nLCBlcnJvcik7XG5cdFx0XHRcdHRoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChbXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXG5cdC8vIEhFTFBFUlNcblx0c2x1Z2lmeSh2YWx1ZTogYW55KTogc3RyaW5nIHtcblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiAnJzsgLy8gbyBkZXZvbHZlciB1biBzbHVnIHBvciBkZWZlY3RvIHNpIHByZWZlcsOtc1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15cXHdcXC1dKy9nLCAnJyk7XG5cdH1cdC8qKlxuXHQgKiBFbGltaW5hIGxvcyBhY2VudG9zXG5cdCAqIEBwYXJhbSBzdHIgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVBY2NlbnRzKHN0cjogc3RyaW5nKSB7XG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdHlwZW9mIFN0cmluZy5wcm90b3R5cGUubm9ybWFsaXplID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gc3RyLm5vcm1hbGl6ZShcIk5GRFwiKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCBcIlwiKTtcblx0XHR9XG5cdFx0Ly8gRmFsbGJhY2sgcGFyYSBTU1IgLSByZW1vdmVyIGFjZW50b3MgbWFudWFsbWVudGVcblx0XHRyZXR1cm4gc3RyLnJlcGxhY2UoL1vDoMOhw6LDo8Okw6VdL2csICdhJylcblx0XHRcdC5yZXBsYWNlKC9bw6jDqcOqw6tdL2csICdlJylcblx0XHRcdC5yZXBsYWNlKC9bw6zDrcOuw69dL2csICdpJylcblx0XHRcdC5yZXBsYWNlKC9bw7LDs8O0w7XDtl0vZywgJ28nKVxuXHRcdFx0LnJlcGxhY2UoL1vDucO6w7vDvF0vZywgJ3UnKVxuXHRcdFx0LnJlcGxhY2UoL1vDvcO/XS9nLCAneScpXG5cdFx0XHQucmVwbGFjZSgvW8OxXS9nLCAnbicpXG5cdFx0XHQucmVwbGFjZSgvW8OnXS9nLCAnYycpXG5cdFx0XHQucmVwbGFjZSgvW8OAw4HDgsODw4TDhV0vZywgJ0EnKVxuXHRcdFx0LnJlcGxhY2UoL1vDiMOJw4rDi10vZywgJ0UnKVxuXHRcdFx0LnJlcGxhY2UoL1vDjMONw47Dj10vZywgJ0knKVxuXHRcdFx0LnJlcGxhY2UoL1vDksOTw5TDlcOWXS9nLCAnTycpXG5cdFx0XHQucmVwbGFjZSgvW8OZw5rDm8OcXS9nLCAnVScpXG5cdFx0XHQucmVwbGFjZSgvW8OdxbhdL2csICdZJylcblx0XHRcdC5yZXBsYWNlKC9bw5FdL2csICdOJylcblx0XHRcdC5yZXBsYWNlKC9bw4ddL2csICdDJyk7XG5cdH1cblx0LyoqXG5cdCAqIFJlYWxpemEgdW4gbWFwZW8gZGUgbG9zIGRhdG9zIHBhcmEgZGFybGUgdW4gZm9ybWF0byBtYXMgZW50ZW5kaWJsZSBhIGxhXG5cdCAqIGhvcmEgZGUgdXNhciBjb21vIHVuIG1lbsO6LlxuXHQgKiBAcGFyYW0gaXNDYXRlZ29yeSBVdGlsaXphZG8gcGFyYSBkaWZlcmVuY2lhciBzaSBlcyBjYXRlZ29yw61hIG8gYXRyaWJ1dG8uXG5cdCAqIEBwYXJhbSByZXNwb25zZSBSZXNwdWVzdGEgcXVlIG9idGllbmUgZGVsIGJhY2tlbmQgY29uIGxvcyBkYXRvcyBhIG1hcGVhci5cblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgYXBwZW5kUGF0aHMoaXNDYXRlZ29yeTogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSwgaW5jbHVkZUhpZGRlbiA9IGZhbHNlKSB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlID0gQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IFtyZXNwb25zZV07XG5cblx0XHRjb25zdCB2aXNpYmxlUmVzcG9uc2UgPSBpc0NhdGVnb3J5ICYmICFpbmNsdWRlSGlkZGVuXG5cdFx0XHQ/IG5vcm1hbGl6ZWRSZXNwb25zZS5maWx0ZXIoKHN1YmVsZW1lbnQ6IGFueSkgPT4gdGhpcy5pc1Zpc2libGVPcHRpb24oc3ViZWxlbWVudCkpXG5cdFx0XHQ6IG5vcm1hbGl6ZWRSZXNwb25zZTtcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHZpc2libGVSZXNwb25zZS5tYXAoKHN1YmVsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFzdWJlbGVtZW50LmNoaWxkcmVuIHx8IHN1YmVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcblx0XHRcdFx0c3ViZWxlbWVudC5jaGlsZHJlbiA9IFtdO1xuXHRcdFx0XHRzdWJlbGVtZW50LnBhdGggPSBpc0NhdGVnb3J5XG5cdFx0XHRcdFx0PyB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnY2F0ZWdvcmllcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpXG5cdFx0XHRcdFx0OiB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnYXR0cmlidXRlcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpO1xuXHRcdFx0fSBlbHNlIGlmIChzdWJlbGVtZW50LmNoaWxkcmVuKSB7XG5cdFx0XHRcdHN1YmVsZW1lbnQuc2x1ZyA9IHN1YmVsZW1lbnQuc2x1ZyB8fCB0aGlzLnNsdWdpZnkoc3ViZWxlbWVudC5uYW1lKTtcblx0XHRcdFx0c3ViZWxlbWVudC5jaGlsZHJlbiA9IHRoaXMuYXBwZW5kUGF0aHMoaXNDYXRlZ29yeSwgc3ViZWxlbWVudC5jaGlsZHJlbiwgaW5jbHVkZUhpZGRlbik7XG5cdFx0XHR9XG5cblx0XHRcdHN1YmVsZW1lbnQucGF0aCA9IGlzQ2F0ZWdvcnlcblx0XHRcdFx0PyB0aGlzLmNvbnN0YW50cy5QUk9EVUNUX0xJU1RfUk9VVEUgKyAnY2F0ZWdvcmllcy8nICsgdGhpcy5zbHVnaWZ5KHN1YmVsZW1lbnQuc2x1ZyA/PyBzdWJlbGVtZW50Lm5hbWUpXG5cdFx0XHRcdDogdGhpcy5jb25zdGFudHMuUFJPRFVDVF9MSVNUX1JPVVRFICsgJ2F0dHJpYnV0ZXMvJyArIHRoaXMuc2x1Z2lmeShzdWJlbGVtZW50LnNsdWcgPz8gc3ViZWxlbWVudC5uYW1lKTtcblxuXHRcdFx0cmV0dXJuIHN1YmVsZW1lbnQ7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBpc1Zpc2libGVPcHRpb24oZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ/LmlzVmlzaWJsZSAhPT0gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIGZpbHRlclZpc2libGVPcHRpb25zPFQgZXh0ZW5kcyB7IGlzVmlzaWJsZT86IGJvb2xlYW47IGNoaWxkcmVuPzogVFtdIH0+KGVsZW1lbnRzOiBUW10gPSBbXSk6IFRbXSB7XG5cdFx0cmV0dXJuIGVsZW1lbnRzXG5cdFx0XHQuZmlsdGVyKChlbGVtZW50OiBUKSA9PiB0aGlzLmlzVmlzaWJsZU9wdGlvbihlbGVtZW50KSlcblx0XHRcdC5tYXAoKGVsZW1lbnQ6IFQpID0+ICh7XG5cdFx0XHRcdC4uLmVsZW1lbnQsXG5cdFx0XHRcdGNoaWxkcmVuOiB0aGlzLmZpbHRlclZpc2libGVPcHRpb25zKGVsZW1lbnQuY2hpbGRyZW4gPz8gW10pXG5cdFx0XHR9KSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2F0ZWdvcnlDb2RlQnlTbHVnKHNsdWc6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRcdGNvbnN0IHRhcmdldCA9IHRoaXMucmVtb3ZlQWNjZW50cyhTdHJpbmcoc2x1ZykudG9Mb3dlckNhc2UoKSk7XG5cdFx0Y29uc3QgZmluZCA9IChlbGVtZW50czogQ2F0ZWdvcnlbXSA9IFtdKTogc3RyaW5nIHwgbnVsbCA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcblx0XHRcdFx0Y29uc3QgY2FuZGlkYXRlcyA9IFtcblx0XHRcdFx0XHRlbGVtZW50LnNsdWcsXG5cdFx0XHRcdFx0ZWxlbWVudC5wYXRoICYmIFN0cmluZyhlbGVtZW50LnBhdGgpLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLnBvcCgpLFxuXHRcdFx0XHRcdGVsZW1lbnQubmFtZVxuXHRcdFx0XHRdXG5cdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKVxuXHRcdFx0XHRcdC5tYXAoKHZhbHVlOiBhbnkpID0+IHRoaXMucmVtb3ZlQWNjZW50cyhTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkpKTtcblxuXHRcdFx0XHRpZiAoY2FuZGlkYXRlcy5pbmNsdWRlcyh0YXJnZXQpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuY29kZSA/PyBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY2hpbGRDb2RlID0gZmluZChlbGVtZW50LmNoaWxkcmVuID8/IFtdKTtcblx0XHRcdFx0aWYgKGNoaWxkQ29kZSkgcmV0dXJuIGNoaWxkQ29kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fTtcblxuXHRcdHJldHVybiBmaW5kKHRoaXMuYWxsQ2F0ZWdvcmllcyk7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYSB1biBtYXBlbyBkZSBzZWNjaW9uZXMgcGFyYSBxdWUgcXVlZGVuIG1hcyBhbWlnYWJsZXMgYSBsYSBob3JhIGRlIG1hbmVqYXIgY29tbyBtZW7Dui5cblx0ICogQHBhcmFtIHNlY3Rpb24gXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBhcHBlbmRTZWN0aW9uKHNlY3Rpb246IGFueSkge1xuXHRcdGxldCBkYXRhOiBhbnkgPSB7fTtcblx0XHRpZiAoc2VjdGlvbi5wYWdlcz8ubGVuZ3RoKSB7XG5cdFx0XHRkYXRhLnR5cGUgPSAnc3ViJztcblx0XHRcdGRhdGEuY2hpbGRyZW4gPSBzZWN0aW9uLnBhZ2VzLm1hcCgocGFnZTogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y29kZTogcGFnZS5jb2RlLFxuXHRcdFx0XHRcdG5hbWU6IHBhZ2UubmFtZSxcblx0XHRcdFx0XHR0eXBlOiAnbGluaycsXG5cdFx0XHRcdFx0cGF0aDogdGhpcy5jb25zdGFudHMuU0VDVElPTlNfUk9VVEUgKyAocGFnZS5zbHVnID8gcGFnZS5zbHVnIDogcGFnZS5jb2RlKSxcblx0XHRcdFx0XHQvLyBwYXRoOiB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIHBhZ2Uuc2x1Zyxcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvL2RhdGEudGl0bGUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLm5hbWUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLnBhdGggPSB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIChzZWN0aW9uLnNsdWcgPyBzZWN0aW9uLnNsdWcgOiBzZWN0aW9uLmNvZGUpO1xuXHRcdFx0ZGF0YS5jb2RlID0gc2VjdGlvbi5jb2RlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhLmNvZGUgPSBzZWN0aW9uLmNvZGU7XG5cdFx0XHQvL2RhdGEudGl0bGUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLm5hbWUgPSBzZWN0aW9uLm5hbWU7XG5cdFx0XHRkYXRhLnR5cGUgPSAnbGluayc7XG5cdFx0XHRkYXRhLmNoaWxkcmVuID0gW107XG5cdFx0XHRkYXRhLnBhdGggPSB0aGlzLmNvbnN0YW50cy5TRUNUSU9OU19ST1VURSArIChzZWN0aW9uLnNsdWcgPyBzZWN0aW9uLnNsdWcgOiBzZWN0aW9uLmNvZGUpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXHQvKipcblx0ICogTWFwZWEgbG9zIGVsZW1lbnRvcyBwYXJhIGRhcmxlIHVuIGZvcm1hdG8gbWFzIGFtaWdhYmxlIHBhcmEgbG9zIG1lbsO6ZXMgeSBmaWx0cm9zLlxuXHQgKiBAcGFyYW0gZWxlbWVudHMgY2F0ZWdvcmlhcyB8IGF0cmlidXRvcyBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRwdWJsaWMgZ2VuZXJhdGVNZW51ID0gKGVsZW1lbnRzOiBhbnkpID0+IHtcblx0XHRyZXR1cm4gZWxlbWVudHMubWFwKChlbGVtZW50OiBhbnkpID0+IHtcblx0XHRcdGlmIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi5lbGVtZW50LFxuXHRcdFx0XHRcdHRpdGxlOiBlbGVtZW50Lm5hbWUsXG5cdFx0XHRcdFx0cGF0aDogZWxlbWVudC5wYXRoLFxuXHRcdFx0XHRcdHR5cGU6ICdsaW5rJyxcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi5lbGVtZW50LFxuXHRcdFx0XHRcdHRpdGxlOiBlbGVtZW50Lm5hbWUsXG5cdFx0XHRcdFx0dHlwZTogJ3N1YicsXG5cdFx0XHRcdFx0cGF0aDogZWxlbWVudC5wYXRoLFxuXHRcdFx0XHRcdGNoaWxkcmVuOiAoZWxlbWVudC5jaGlsZHJlbiA/IHRoaXMuZ2VuZXJhdGVNZW51KGVsZW1lbnQuY2hpbGRyZW4pIDogW10pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cdC8qKlxuXHQgKiBEZXZ1ZWx2ZSBsb3MgZWxlbWVudG9zIGRlbCBicmVhZGNydW1iLlxuXHQgKiBAcGFyYW0gY29kZSBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRnZXRCcmVhZGNydW1iID0gKGNvZGU6IGFueSkgPT4ge1xuXHRcdGlmICghY29kZSkgcmV0dXJuIG51bGw7XG5cdFx0bGV0IGJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCB0aGlzLmdlbmVyYXRlTWVudSh0aGlzLmNhdGVnb3JpZXNTdWJqZWN0LnZhbHVlKSwgW10pO1xuXHRcdGlmICghYnJlYWRjcnVtYiB8fCAhYnJlYWRjcnVtYi5sZW5ndGgpIGJyZWFkY3J1bWIgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCB0aGlzLmdlbmVyYXRlTWVudSh0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LnZhbHVlKSwgW10pO1xuXHRcdHJldHVybiAoYnJlYWRjcnVtYiAmJiBicmVhZGNydW1iLmxlbmd0aCkgJiYgYnJlYWRjcnVtYi5yZXZlcnNlKCk7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYSBsb3MgYnJlYWRjcnVtYnMgZW4gYmFzZSBhIGxvcyBmaWx0cm9zIGFwbGljYWRvcy5cblx0ICogQHBhcmFtIGZpbHRlcnMgXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0Z2V0QnJlYWRjcnVtYkJ5RmlsdGVycyA9IChmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4ge1xuXHRcdGxldCBmaW5hbF9yZXN1bHQ6IGFueVtdID0gW107XG5cdFx0ZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gZmlsdGVyLmdldFNlbGVjdGVkTGlzdCgpO1xuXHRcdFx0aWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5sZW5ndGgpIHJldHVybjtcblxuXHRcdFx0aWYgKGZpbHRlci50eXBlKCkgPT0gJ2NhdGVnb3JpZXMnKSB7XG5cdFx0XHRcdGZpbmFsX3Jlc3VsdC51bnNoaWZ0KC4uLnRoaXMuZ2VuZXJhdGVCcmVhZGNydW1iKHJlc3VsdFswXSwgZmlsdGVyLmRhdGEsIFtdKS5yZXZlcnNlKCkpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5mb3JFYWNoKChjb2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgYnJlYWRjcnVtYiA9IHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1iKGNvZGUsIGZpbHRlci5kYXRhLCBbXSk7XG5cdFx0XHRcdFx0aWYgKGJyZWFkY3J1bWIubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRmaW5hbF9yZXN1bHQucHVzaCh0aGlzLmZvcm1hdFNlbGVjdGVkRmlsdGVyQnJlYWRjcnVtYihicmVhZGNydW1iKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBmaW5hbF9yZXN1bHQ7XG5cdH1cblx0LyoqXG5cdCAqIEdlbmVyYSBlbCBsaXN0YWRvIGRlIGJyZWFkY3J1bWIuXG5cdCAqIEBwYXJhbSBjb2RlIFxuXHQgKiBAcGFyYW0gZWxlbWVudHMgZmlsdHJvcyBhY3R1YWxlcyBlbiBlbCBmcm9udGVuZFxuXHQgKiBAcGFyYW0gcmVzdWx0IGRhdG9zIGEgYWN0dWFsaXphciBjb24gZWwgbnVldm8gbGlzdGFkbyBkZSBicmVhZGNydW1iXG5cdCAqIEByZXR1cm5zIFxuXHQgKi9cblx0cHJpdmF0ZSBnZW5lcmF0ZUJyZWFkY3J1bWIgPSAoY29kZTogc3RyaW5nLCBlbGVtZW50czogYW55LCByZXN1bHQ6IGFueSkgPT4ge1xuXHRcdGxldCBlbGVtZW50ID0gZWxlbWVudHMuZmluZCgoZWxlbTogYW55KSA9PiBlbGVtLmNvZGUgPT0gY29kZSk7XG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdHJlc3VsdC5wdXNoKGVsZW1lbnQpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGVsZW1lbnRzLnNvbWUoKGVsZW06IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoZWxlbS5jaGlsZHJlbiAmJiBlbGVtLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cdFx0XHRcdFx0bGV0IG5ld19yZXN1bHQgPSB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYihjb2RlLCBlbGVtLmNoaWxkcmVuLCByZXN1bHQpO1xuXHRcdFx0XHRcdGlmIChuZXdfcmVzdWx0Lmxlbmd0aCA+IGxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gbmV3X3Jlc3VsdDtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGVsZW0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwcml2YXRlIGZvcm1hdFNlbGVjdGVkRmlsdGVyQnJlYWRjcnVtYiA9IChicmVhZGNydW1iOiBhbnlbXSkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gYnJlYWRjcnVtYlswXTtcblx0XHRjb25zdCBwYXJlbnQgPSBicmVhZGNydW1iWzFdO1xuXHRcdGNvbnN0IHZhbHVlTGFiZWwgPSB0aGlzLmdldEJyZWFkY3J1bWJEaXNwbGF5TGFiZWwoc2VsZWN0ZWQsIHRydWUpO1xuXHRcdGNvbnN0IHBhcmVudExhYmVsID0gdGhpcy5nZXRCcmVhZGNydW1iRGlzcGxheUxhYmVsKHBhcmVudCwgZmFsc2UpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLnNlbGVjdGVkLFxuXHRcdFx0dGl0bGU6IHBhcmVudExhYmVsICYmIHZhbHVlTGFiZWwgPyBgJHtwYXJlbnRMYWJlbH06ICR7dmFsdWVMYWJlbH1gIDogdmFsdWVMYWJlbFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGdldEJyZWFkY3J1bWJEaXNwbGF5TGFiZWwgPSAoZWxlbWVudDogYW55LCBwcmVmZXJEZXNjcmlwdGlvbiA9IGZhbHNlKTogc3RyaW5nID0+IHtcblx0XHRpZiAoIWVsZW1lbnQpIHJldHVybiAnJztcblxuXHRcdGNvbnN0IGRlc2NyaXB0aW9uID0gU3RyaW5nKGVsZW1lbnQuZGVzY3JpcHRpb24gPz8gJycpLnRyaW0oKTtcblx0XHRjb25zdCBuYW1lID0gU3RyaW5nKGVsZW1lbnQubmFtZSA/PyAnJykudHJpbSgpO1xuXHRcdGNvbnN0IHRpdGxlID0gU3RyaW5nKGVsZW1lbnQudGl0bGUgPz8gJycpLnRyaW0oKTtcblxuXHRcdGlmIChwcmVmZXJEZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbikgcmV0dXJuIGRlc2NyaXB0aW9uO1xuXHRcdGlmIChuYW1lKSByZXR1cm4gbmFtZTtcblx0XHRpZiAoZGVzY3JpcHRpb24pIHJldHVybiBkZXNjcmlwdGlvbjtcblx0XHRpZiAodGl0bGUgJiYgIXRoaXMuaXNIZXhMaWtlKHRpdGxlKSkgcmV0dXJuIHRoaXMudHJhbnNsYXRlQnJlYWRjcnVtYktleSh0aXRsZSk7XG5cblx0XHRjb25zdCBmcm9tQ29kZSA9IHRoaXMuZXh0cmFjdEJyZWFkY3J1bWJMYWJlbEZyb21Db2RlKFN0cmluZyhlbGVtZW50LmNvZGUgPz8gJycpKTtcblx0XHRpZiAoZnJvbUNvZGUpIHJldHVybiB0aGlzLnRyYW5zbGF0ZUJyZWFkY3J1bWJLZXkoZnJvbUNvZGUpO1xuXG5cdFx0cmV0dXJuIHRpdGxlO1xuXHR9XG5cblx0cHJpdmF0ZSB0cmFuc2xhdGVCcmVhZGNydW1iS2V5ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFN0cmluZyh2YWx1ZSA/PyAnJykudHJpbSgpO1xuXHRcdGlmICgha2V5KSByZXR1cm4gJyc7XG5cblx0XHRjb25zdCB0cmFuc2xhdGVkID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5KTtcblx0XHRyZXR1cm4gdHJhbnNsYXRlZCAmJiB0cmFuc2xhdGVkICE9PSBrZXkgPyB0cmFuc2xhdGVkIDoga2V5O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRyYWN0QnJlYWRjcnVtYkxhYmVsRnJvbUNvZGUgPSAoY29kZTogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBwYXJ0cyA9IFN0cmluZyhjb2RlIHx8ICcnKS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHJldHVybiBwYXJ0cy5zbGljZSgxKS5qb2luKCcgJyk7XG5cdFx0cmV0dXJuIHBhcnRzWzBdID8/ICcnO1xuXHR9XG5cblx0cHJpdmF0ZSBpc0hleExpa2UgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUgfHwgJycpLnJlcGxhY2UoJyMnLCAnJykudHJpbSgpO1xuXHRcdHJldHVybiAvXlswLTlhLWZBLUZdezN9JC8udGVzdChub3JtYWxpemVkKSB8fCAvXlswLTlhLWZBLUZdezZ9JC8udGVzdChub3JtYWxpemVkKTtcblx0fVxuXHRwdWJsaWMgZ2V0U2VjdGlvbkNvbnRlbnRCeUxpbmsgPSAobGluazogYW55KSA9PlxuXHRcdHRoaXMuY29ubmVjdGlvbi5nZXRIVE1MKHRoaXMucGFnZUNvbnRlbnRCeUNvZGVBcGkobGluaykpLnBpcGUoXG5cdFx0XHRtYXAoaHRtbCA9PiBodG1sLnNwbGl0KCc8L2hlYWQ+JylbaHRtbC5zcGxpdCgnPC9oZWFkPicpLmxlbmd0aCAtIDFdKSxcblx0XHRcdGNhdGNoRXJyb3IoZSA9PiBvZihmYWxzZSkpXG5cdFx0KTtcblxuXHRcdFxuXG5cdGdldEZBUSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmZhcXNBcGkoKSkucGlwZShtYXAocmVzcG9uc2UgPT4ge1xuXHRcdFx0bGV0IHJlc3VsdDogRkFRW10gPSBbXTtcblx0XHRcdHJlc3BvbnNlLmZvckVhY2goKHJlc3BvbnNlX2ZhcTogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBmYXFzOiBGQVEgPSB7XG5cdFx0XHRcdFx0Y29kZTogcmVzcG9uc2VfZmFxLmNvZGUsXG5cdFx0XHRcdFx0cG9zaXRpb246IHJlc3BvbnNlX2ZhcS5wb3NpdGlvbixcblx0XHRcdFx0XHR0aXRsZTogcmVzcG9uc2VfZmFxLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdLnRvcGljLFxuXHRcdFx0XHRcdHF1ZXN0aW9uczogcmVzcG9uc2VfZmFxLmZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucy5tYXAoKGFza2VkX3F1ZXN0aW9uOiBhbnkpID0+ICh7XG5cdFx0XHRcdFx0XHRjb2RlOiBhc2tlZF9xdWVzdGlvbi5jb2RlLFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFza2VkX3F1ZXN0aW9uLnBvc2l0aW9uLFxuXHRcdFx0XHRcdFx0cXVlc3Rpb246IGFza2VkX3F1ZXN0aW9uLnRyYW5zbGF0aW9uc1t0aGlzLmFwaUNvbnN0YW50cy5MT0NBTEVdID8gYXNrZWRfcXVlc3Rpb24udHJhbnNsYXRpb25zW3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRV0ucXVlc3Rpb24gOiAnJyxcblx0XHRcdFx0XHRcdGFuc3dlcjogYXNrZWRfcXVlc3Rpb24udHJhbnNsYXRpb25zW3RoaXMuYXBpQ29uc3RhbnRzLkxPQ0FMRV0gPyBhc2tlZF9xdWVzdGlvbi50cmFuc2xhdGlvbnNbdGhpcy5hcGlDb25zdGFudHMuTE9DQUxFXS5hbnN3ZXIgOiAnJyxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0fTtcblx0XHRcdFx0cmVzdWx0LnB1c2goZmFxcyk7XG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KSk7XG5cdH1cbn0gXG4iXX0=
|
|
@@ -823,6 +823,7 @@ class OptionsService {
|
|
|
823
823
|
* Constantes de la API
|
|
824
824
|
*/
|
|
825
825
|
apiConstants = inject(ApiConstantsService);
|
|
826
|
+
translateService = inject(TranslateService);
|
|
826
827
|
/**
|
|
827
828
|
* Maneja los cambios en las categorias
|
|
828
829
|
*/
|
|
@@ -1231,12 +1232,19 @@ class OptionsService {
|
|
|
1231
1232
|
if (description)
|
|
1232
1233
|
return description;
|
|
1233
1234
|
if (title && !this.isHexLike(title))
|
|
1234
|
-
return title;
|
|
1235
|
+
return this.translateBreadcrumbKey(title);
|
|
1235
1236
|
const fromCode = this.extractBreadcrumbLabelFromCode(String(element.code ?? ''));
|
|
1236
1237
|
if (fromCode)
|
|
1237
|
-
return fromCode;
|
|
1238
|
+
return this.translateBreadcrumbKey(fromCode);
|
|
1238
1239
|
return title;
|
|
1239
1240
|
};
|
|
1241
|
+
translateBreadcrumbKey = (value) => {
|
|
1242
|
+
const key = String(value ?? '').trim();
|
|
1243
|
+
if (!key)
|
|
1244
|
+
return '';
|
|
1245
|
+
const translated = this.translateService.instant(key);
|
|
1246
|
+
return translated && translated !== key ? translated : key;
|
|
1247
|
+
};
|
|
1240
1248
|
extractBreadcrumbLabelFromCode = (code) => {
|
|
1241
1249
|
const parts = String(code || '').trim().split(/\s+/).filter(Boolean);
|
|
1242
1250
|
if (parts.length > 1)
|