ng-easycommerce-v18 0.3.18-beta.4 → 0.3.19-beta.2
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 +4 -0
- package/assets/ec-i18n/en.json +1 -0
- package/assets/ec-i18n/es.json +1 -0
- package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +4 -1
- package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +37 -9
- package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +11 -5
- package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +54 -6
- package/esm2022/lib/ec-services/cart.service.mjs +22 -4
- package/esm2022/lib/ec-services/product-detail.service.mjs +11 -1
- package/esm2022/lib/interfaces/product.mjs +1 -1
- package/fesm2022/ng-easycommerce-v18.mjs +133 -20
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.d.ts +1 -1
- package/lib/ec-components/product-ec/product-ec.component.d.ts +4 -0
- package/lib/ec-services/analytics/google-analytics.service.d.ts +1 -1
- package/lib/ec-services/analytics/gtm.service.d.ts +1 -1
- package/lib/ec-services/cart.service.d.ts +1 -1
- package/lib/interfaces/product.d.ts +6 -0
- package/package.json +1 -1
|
@@ -97,6 +97,7 @@ export class ProductDetailService {
|
|
|
97
97
|
associated.minimumItemsQuantity = v.stock > 0 && 'minimumItemsQuantity' in v && v.minimumItemsQuantity > 0
|
|
98
98
|
? v.minimumItemsQuantity
|
|
99
99
|
: (v.multipleQuantity ?? 1);
|
|
100
|
+
associated.multipleQuantity = v.multipleQuantity ?? 1;
|
|
100
101
|
// Precios al consumidor final
|
|
101
102
|
associated.finalConsumer = {
|
|
102
103
|
finalConsumerPrice: v.final_consumer_price,
|
|
@@ -299,6 +300,15 @@ export class ProductDetailService {
|
|
|
299
300
|
this._toastService.show('minimum-items-quantity', { quantity: asociatedData.minimumItemsQuantity });
|
|
300
301
|
return false;
|
|
301
302
|
}
|
|
303
|
+
if (asociatedData.multipleQuantity && asociatedData.multipleQuantity > 1) {
|
|
304
|
+
if ((actualQuantity + quantity) % asociatedData.multipleQuantity !== 0) {
|
|
305
|
+
this._toastService.show('multiple-quantity-required', {
|
|
306
|
+
multiple: asociatedData.multipleQuantity,
|
|
307
|
+
current: actualQuantity + quantity
|
|
308
|
+
});
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
302
312
|
return true;
|
|
303
313
|
};
|
|
304
314
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -310,4 +320,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
310
320
|
providedIn: 'root'
|
|
311
321
|
}]
|
|
312
322
|
}], ctorParameters: () => [] });
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUs3QyxNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLGdCQUFnQixHQUFvQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFaEQsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztJQUMxRCxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7SUFDL0Msc0JBQXNCLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFekYsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsZUFBZSxHQUFHLElBQUksQ0FB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QUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7WUFDbkcsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFBO1lBQ25HLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ1osQ0FBQyxDQUFBO3dHQXBUVyxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZwQixNQUFNOzs0RkFFTixvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4vcHJvZHVjdHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgT3B0aW9ucywgT3B0aW9uVmFsdWUsIFByb2R1Y3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuL2NhcnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsU2VydmljZSB7XHJcblx0cHJpdmF0ZSBfcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UgPSBpbmplY3QoUHJvZHVjdHNTZXJ2aWNlKTtcclxuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xyXG5cdHByaXZhdGUgX2NhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSA9IGluamVjdChDYXJ0U2VydmljZSk7XHJcblxyXG5cdHByaXZhdGUgX3Byb2R1Y3RTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9kdWN0IHwgbnVsbD4oe30pO1xyXG5cdHByaXZhdGUgX29wdGlvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcclxuXHRwcml2YXRlIF9hc3NvY2lhdGVkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oeyBwcmljZTogJycsIHN0b2NrOiAwLCBwaWN0dXJlOiAnJyB9KTtcclxuXHJcblx0cHVibGljIHByb2R1Y3QkID0gdGhpcy5fcHJvZHVjdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIG9wdGlvbnMkID0gdGhpcy5fb3B0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0cHVibGljIGFzc29jaWF0ZWREYXRhJCA9IHRoaXMuX2Fzc29jaWF0ZWREYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcblx0cHJpdmF0ZSB2YXJpYW50czogYW55W10gPSBbXVxyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHsgfVxyXG5cdC8qKlxyXG5cdCAqIE9idGVuZ28gZWwgcHJvZHVjdG8gYSB0cmF2ZXMgZGUgc3UgY29kaWdvIGUgaW5pY2lhbGl6byBsYSBjb25maWd1cmFjacOzblxyXG5cdCAqIGRlbCBTZXJ2aWNpby5cclxuXHQgKiBAcGFyYW0gY29kZSBcclxuXHQgKiBAcGFyYW0gdmFyaWFudCBcclxuXHQgKi9cclxuXHRsb2FkUHJvZHVjdChjb2RlOiBzdHJpbmcsIHZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fcHJvZHVjdHNTZXJ2aWNlLmdldFByb2R1Y3RCeUNvZGUoY29kZSwgdmFyaWFudCkpXHJcblx0XHRcdC50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0dmFyaWFudCA/IHRoaXMuaW5pdGlhbGl6ZShyZXMsIGNvZGUpIDogdGhpcy5pbml0aWFsaXplKHJlcylcclxuXHRcdFx0fSlcclxuXHRcdFx0LmNhdGNoKGVyciA9PiB7IGNvbnNvbGUubG9nKGVycik7IHRoaXMuX3Byb2R1Y3RTdWJqZWN0Lm5leHQobnVsbCkgfSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENhcmdhIGVsIHByb2R1Y3RvIGVuIGVsIG9ic2VydmFibGUgeSBsYSBjb25maWd1cmFjacOzbiBkZSBsYXMgdmFyaWFudGVzLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0IFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50Q29kZSBcclxuXHQgKi9cclxuXHRwcml2YXRlIGluaXRpYWxpemUocHJvZHVjdDogUHJvZHVjdCwgdmFyaWFudENvZGU/OiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuX3Byb2R1Y3RTdWJqZWN0Lm5leHQocHJvZHVjdCk7XHJcblx0XHRjb25zdCBhdXg6IFByb2R1Y3RbJ29wdGlvbnMnXSA9IHByb2R1Y3Qub3B0aW9ucyB8fCBbXTtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSBhdXg/Lm1hcChvcHRpb24gPT4gdGhpcy50b09wdGlvbihvcHRpb24pKVxyXG5cdFx0dGhpcy5fb3B0aW9uc1N1YmplY3QubmV4dChvcHRpb25zKTtcclxuXHRcdHZhcmlhbnRDb2RlID8gdGhpcy51cGRhdGVWYXJpYW50cyh2YXJpYW50Q29kZSkgOiB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcblx0XHR0aGlzLnZhcmlhbnRzLmxlbmd0aCAmJiB0aGlzLmdlbmVyYXRlQXNzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogRm9ybWF0ZSBsb3MgZGF0b3MgcGFyYSBsYXMgb3BjaW9uZXMgZGVsIHByb2R1Y3RvLlxyXG5cdCAqIEBwYXJhbSBvcHRpb24gXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSB0b09wdGlvbihvcHRpb246IE9wdGlvbnMpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG5hbWU6IG9wdGlvbi5sYWJlbCxcclxuXHRcdFx0Y29kZTogb3B0aW9uLmNvZGUsXHJcblx0XHRcdHR5cGU6IG9wdGlvbi50eXBlLFxyXG5cdFx0XHR2YWx1ZXM6IG9wdGlvbi52YWx1ZXMubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBuYW1lOiB2YWx1ZS5jb2RlLCBkZXNjcmlwdGlvbjogdmFsdWUubmFtZSwgaW1hZ2U6IHZhbHVlLmltYWdlLCBtb2JpbGVJbWFnZTogdmFsdWUubW9iaWxlSW1hZ2UsIHNlbGVjdGVkOiBmYWxzZSB9KSlcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbWJpYSBsYXMgb3BjaW9uZXMsIG9idGllbmUgZWwgcHJvZHVjdG8gYXNvY2lhZG8gYSBsYSBvcGNpb24gZWxlZ2lkYS5cclxuXHQgKi9cclxuXHRzZXRPcHRpb24ob3B0aW9uQ29kZTogYW55LCBvcHRpb25WYWx1ZTogYW55KSB7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5fb3B0aW9uc1N1YmplY3QudmFsdWU7XHJcblx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5jb2RlID09IG9wdGlvbkNvZGUpLnZhbHVlcy5maW5kKCh2YWx1ZTogYW55KSA9PiB2YWx1ZS5uYW1lID09IG9wdGlvblZhbHVlKTtcclxuXHRcdG9wdGlvbi5zZWxlY3RlZCA9ICFvcHRpb24uc2VsZWN0ZWQ7XHJcblx0XHRvcHRpb25zLmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5jb2RlID09IG9wdGlvbkNvZGUpLnZhbHVlcy5mb3JFYWNoKFxyXG5cdFx0XHQodmFsdWU6IGFueSkgPT4geyBpZiAodmFsdWUubmFtZSAhPSBvcHRpb24ubmFtZSkgdmFsdWUuc2VsZWN0ZWQgPSBmYWxzZSB9XHJcblx0XHQpO1xyXG5cdFx0dGhpcy5fb3B0aW9uc1N1YmplY3QubmV4dChvcHRpb25zKTtcclxuXHRcdHRoaXMudXBkYXRlVmFyaWFudHMoKTtcclxuXHRcdHRoaXMudmFyaWFudHMubGVuZ3RoID4gMCA/IHRoaXMuZ2VuZXJhdGVBc3NvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpIDogdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ3NlbGVjdGlvbi1ub3QtYXZhaWxhYmxlJylcclxuXHR9XHJcblx0LyoqXHJcbiAqIEFjdHVhbGl6YSBlbCBvYnNlcnZhYmxlIGRlIGBhc3NvY2lhdGVkRGF0YWAgZWwgY3VhbCBzZSB1dGlsaXphIHBhcmEgbW9zdHJhciBsb3MgZGF0b3NcclxuICogZW4gZWwgZnJvbnRlbmQgc2Vnw7puIGVsIHByb2R1Y3RvIHkvbyB2YXJpYW50ZSBlbGVnaWRhLlxyXG4gKiBPYnRpZW5lIGxvcyBkYXRvcyBkZSBsYSB2YXJpYW50ZSB5IGxvcyBmb3JtYXRlYS5cclxuICovXHJcblx0Z2VuZXJhdGVBc3NvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGFzc29jaWF0ZWQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdC8vIFNpIHPDs2xvIGhheSB1bmEgdmFyaWFudGUsIHRvbWFtb3MgdG9kb3Mgc3VzIGRhdG9zIGRpcmVjdGFtZW50ZVxyXG5cdFx0aWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID09PSAxKSB7XHJcblx0XHRcdGNvbnN0IHYgPSB0aGlzLnZhcmlhbnRzWzBdO1xyXG5cclxuXHRcdFx0YXNzb2NpYXRlZC5zdG9jayA9IHYuc3RvY2s7XHJcblx0XHRcdC8vIFByZWNpbzogc2kgdmllbmUgdGF4TGVnZW5kSW5mbyB1c2Ftb3Mgc3UgcHJpY2UsIHNpIG5vIGVsIHYucHJpY2VcclxuXHRcdFx0Y29uc3QgcmF3UHJpY2UgPSB2LnRheExlZ2VuZEluZm8/LnByaWNlID8/IHYucHJpY2U7XHJcblx0XHRcdGFzc29jaWF0ZWQucHJpY2UgPSByYXdQcmljZS50b1N0cmluZygpO1xyXG5cdFx0XHRjb25zdCByYXdTYWxlUHJpY2UgPSB2LnRheExlZ2VuZEluZm8/LnNhbGVwcmljZSA/PyB2LnNhbGVwcmljZTtcclxuXHRcdFx0YXNzb2NpYXRlZC5zYWxlcHJpY2UgPSByYXdTYWxlUHJpY2UgPyByYXdTYWxlUHJpY2UudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDtcclxuXHRcdFx0YXNzb2NpYXRlZC5kaXNjb3VudCA9IHYuZGlzY291bnQgPz8gdW5kZWZpbmVkO1xyXG5cdFx0XHRhc3NvY2lhdGVkLnByb3BlcnRpZXMgPSB2LnByb3BlcnRpZXMgPyB0aGlzLmJlYXV0aWZ5UHJvcGVydGllcyh2LnByb3BlcnRpZXMpIDogdW5kZWZpbmVkO1xyXG5cdFx0XHRhc3NvY2lhdGVkLnVuaXF1ZUV4dGVybmFsQ29kZSA9IHYudW5pcXVlRXh0ZXJuYWxDb2RlID8/IHVuZGVmaW5lZDtcclxuXHRcdFx0YXNzb2NpYXRlZC5tdWx0aXBsZVF1YW50aXR5ID0gdi5tdWx0aXBsZVF1YW50aXR5ID8/IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdC8vIEzDrW1pdGVzIGRlIGNhbnRpZGFkL3N0b2NrXHJcblx0XHRcdGFzc29jaWF0ZWQubWF4aW11bUFtb3VudCA9IHYubWF4aW11bUFtb3VudCA/PyAwO1xyXG5cdFx0XHRhc3NvY2lhdGVkLm1pbmltdW1BbW91bnQgPSB2Lm1pbmltdW1BbW91bnQgPz8gMDtcclxuXHRcdFx0YXNzb2NpYXRlZC5tYXhpbXVtSXRlbXNRdWFudGl0eSA9IHYuc3RvY2sgPiAwICYmICdtYXhpbXVtSXRlbXNRdWFudGl0eScgaW4gdlxyXG5cdFx0XHRcdD8gdi5tYXhpbXVtSXRlbXNRdWFudGl0eVxyXG5cdFx0XHRcdDogdi5zdG9jaztcclxuXHRcdFx0YXNzb2NpYXRlZC5taW5pbXVtSXRlbXNRdWFudGl0eSA9IHYuc3RvY2sgPiAwICYmICdtaW5pbXVtSXRlbXNRdWFudGl0eScgaW4gdiAmJiB2Lm1pbmltdW1JdGVtc1F1YW50aXR5ISA+IDBcclxuXHRcdFx0XHQ/IHYubWluaW11bUl0ZW1zUXVhbnRpdHlcclxuXHRcdFx0XHQ6ICh2Lm11bHRpcGxlUXVhbnRpdHkgPz8gMSk7XHJcblxyXG5cdFx0XHQvLyBQcmVjaW9zIGFsIGNvbnN1bWlkb3IgZmluYWxcclxuXHRcdFx0YXNzb2NpYXRlZC5maW5hbENvbnN1bWVyID0ge1xyXG5cdFx0XHRcdGZpbmFsQ29uc3VtZXJQcmljZTogdi5maW5hbF9jb25zdW1lcl9wcmljZSxcclxuXHRcdFx0XHRvcmlnaW5hbEZpbmFsQ29uc3VtZXJQcmljZTogdi5vcmlnaW5hbF9maW5hbF9jb25zdW1lcl9wcmljZVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSW1wdWVzdG9zXHJcblx0XHRcdGFzc29jaWF0ZWQudGF4ZXMgPSB7XHJcblx0XHRcdFx0dGF4SW5jbHVkZWQ6IHYudGF4SW5jbHVkZWQsXHJcblx0XHRcdFx0dGF4Q2F0ZWdvcnk6IHYudGF4Q2F0ZWdvcnlcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gU2VndW4gdmVyc2lvbiBkZWwgYmFja2VuZFxyXG5cdFx0XHRpZiAodi50YXhMZWdlbmRJbmZvKSB7XHJcblx0XHRcdFx0Ly8gTnVldm8gYmFja2VuZFxyXG5cdFx0XHRcdGFzc29jaWF0ZWQucHJpY2VXaXRob3V0VGF4ZXMgPSB2LnRheExlZ2VuZEluZm8ucHJpY2VXaXRob3V0VGF4ZXM7XHJcblx0XHRcdFx0YXNzb2NpYXRlZC50YXhlQW1vdW50ID0gdi50YXhMZWdlbmRJbmZvLnRheGVzO1xyXG5cdFx0XHRcdGFzc29jaWF0ZWQudGF4UmF0ZSA9IHYudGF4TGVnZW5kSW5mby50YXhSYXRlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIEJhY2tlbmQgYW50aWd1b1xyXG5cdFx0XHRcdGFzc29jaWF0ZWQucHJpY2VXaXRob3V0VGF4ZXMgPSB2LnByaWNlV2l0aG91dFRheGVzID8/IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRhc3NvY2lhdGVkLnRheGVBbW91bnQgPSB2LnRheGVzID8/IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRhc3NvY2lhdGVkLnRheFJhdGUgPSB2LnRheFJhdGUgPz8gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gU2kgaGF5IHZhcmlhcyB2YXJpYW50ZXMsIHJlc3VtaW1vc1xyXG5cdFx0XHRhc3NvY2lhdGVkLnByaWNlID0gdGhpcy5jcmVhdGVQcmljZSgpO1xyXG5cdFx0XHRhc3NvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMuY3JlYXRlU2FsZVByaWNlKCk7XHJcblx0XHRcdGFzc29jaWF0ZWQuc3RvY2sgPSB0aGlzLnZhcmlhbnRzLm1hcCh2ID0+IHYuc3RvY2spLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xyXG5cdFx0XHRhc3NvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy5jcmVhdGVEaXNjb3VudCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEltYWdlbiBwcmluY2lwYWxcclxuXHRcdGNvbnN0IGZpcnN0ID0gdGhpcy52YXJpYW50c1swXTtcclxuXHRcdGlmICgnaW1hZ2VzJyBpbiBmaXJzdCAmJiBmaXJzdC5pbWFnZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhc3NvY2lhdGVkLnBpY3R1cmUgPSBmaXJzdC5pbWFnZXNbMF07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRhc3NvY2lhdGVkLnBpY3R1cmUgPSB0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QudmFsdWU/LnBpY3R1cmVcclxuXHRcdFx0XHQ/PyB0aGlzLl9wcm9kdWN0U3ViamVjdC52YWx1ZT8ucGljdHVyZXNkZWZhdWx0Py5bMF07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW1pdGltb3MgZWwgb2JqZXRvIGNvbXBsZXRvXHJcblx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChhc3NvY2lhdGVkKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWVqb3JhIGxvcyBkYXRvcyBkZSBsYXMgYHByb3BlcnRpZXNgLlxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGJlYXV0aWZ5UHJvcGVydGllcyhwcm9wZXJ0aWVzOiBhbnkpOiBhbnkge1xyXG5cdFx0bGV0IGJlYXV0aWZ5RGF0YTogYW55ID0gW107XHJcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3A6IGFueSkgPT4ge1xyXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gcHJvcCkge1xyXG5cdFx0XHRcdGJlYXV0aWZ5RGF0YS5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogcHJvcFtrZXldIH0pXHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0XHRyZXR1cm4gYmVhdXRpZnlEYXRhXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERldnVlbHZlIHVuIGRlc2N1ZW50byBlbiBjYXNvIGRlIGV4aXN0aXIuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Y3JlYXRlRGlzY291bnQoKTogYW55IHtcclxuXHRcdGxldCBhbGxEaXNjb3VudHM6IHN0cmluZyA9ICcnO1xyXG5cdFx0dGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG5cdFx0XHR2YXJpYW50LmRpc2NvdW50ICYmIChhbGxEaXNjb3VudHMgKz0gJywgJyArIHZhcmlhbnQuZGlzY291bnQpO1xyXG5cdFx0fSlcclxuXHRcdGlmIChhbGxEaXNjb3VudHMgPT0gJycpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRyZXR1cm4gYWxsRGlzY291bnRzO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBlbCBwcmVjaW8gZGUgdmVudGEuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Y3JlYXRlU2FsZVByaWNlKCk6IGFueSB7XHJcblx0XHRsZXQgbWluUHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgbWF4UHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgYWxsUHJpY2VzOiBhbnkgPSB0aGlzLnZhcmlhbnRzLm1hcCh2ID0+IHYuc2FsZXByaWNlKS5maWx0ZXIoZSA9PiBlICE9PSB1bmRlZmluZWQpO1xyXG5cdFx0aWYgKGFsbFByaWNlcy5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkXHJcblx0XHR9XHJcblx0XHRtaW5QcmljZSA9IGFsbFByaWNlcy5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBNYXRoLm1pbihhLCBiKSk7XHJcblx0XHRtYXhQcmljZSA9IGFsbFByaWNlcy5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBNYXRoLm1heChhLCBiKSk7XHJcblx0XHRyZXR1cm4gbWluUHJpY2UgPT0gbWF4UHJpY2UgPyBtYXhQcmljZS50b1N0cmluZygpIDogbWluUHJpY2UgKyAnIC0gJyArIG1heFByaWNlO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBlbCBwcmVjaW8gbyBsb3MgcHJlY2lvcyBlbiBjYXNvIGRlIHRlbmVyIHZhcmlhcyB2YXJpYW50ZXMgY29uIGRpc3RpbnRvcyBwcmVjaW9zLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGNyZWF0ZVByaWNlKCk6IGFueSB7XHJcblx0XHRsZXQgbWluUHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgbWF4UHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgYWxsUHJpY2U6IGFueSA9IHRoaXMudmFyaWFudHMubWFwKHYgPT4gdi5wcmljZSlcclxuXHRcdG1pblByaWNlID0gYWxsUHJpY2UucmVkdWNlKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG5cdFx0bWF4UHJpY2UgPSBhbGxQcmljZS5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBNYXRoLm1heChhLCBiKSk7XHJcblx0XHRyZXR1cm4gbWluUHJpY2UgPT0gbWF4UHJpY2UgPyBtYXhQcmljZS50b1N0cmluZygpIDogbWluUHJpY2UgKyAnIC0gJyArIG1heFByaWNlO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGFzIHZhcmlhbnRlcy5cclxuXHQgKiBAcGFyYW0gY29kZSBcclxuXHQgKi9cclxuXHR1cGRhdGVWYXJpYW50cyA9IChjb2RlPzogc3RyaW5nKSA9PiB7XHJcblx0XHRsZXQgdmFyaWFudHMgPSB0aGlzLl9wcm9kdWN0U3ViamVjdC52YWx1ZT8udmFyaWFudHNcclxuXHRcdC8vY29uc29sZS5sb2codmFyaWFudHMpXHJcblx0XHRpZiAoIWNvZGUpIHtcclxuXHRcdFx0dGhpcy5fb3B0aW9uc1N1YmplY3QudmFsdWUuZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRvcHRpb24udmFsdWVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdGlmICh2YWx1ZS5zZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHR2YXJpYW50cyA9IHZhcmlhbnRzPy5maWx0ZXIodmFyaWFudCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQub3B0aW9ucy5zb21lKCh2YXJpYW50T3B0aW9uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAob3B0aW9uLmNvZGUgaW4gdmFyaWFudE9wdGlvbiAmJiB2YXJpYW50T3B0aW9uW29wdGlvbi5jb2RlXSA9PSB2YWx1ZS5uYW1lKTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR2YXJpYW50cyA9IHZhcmlhbnRzPy5maWx0ZXIodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT0gY29kZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnZhcmlhbnRzID0gdmFyaWFudHMgfHwgW107XHJcblx0XHRjb2RlICYmIHRoaXMudXBkYXRlT3B0aW9ucygpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGFzIG9wY2lvbmVzXHJcblx0ICovXHJcblx0cHJpdmF0ZSB1cGRhdGVPcHRpb25zID0gKCkgPT4ge1xyXG5cdFx0bGV0IHsgb3B0aW9ucyB9ID0gdGhpcy52YXJpYW50cy5sZW5ndGggJiYgdGhpcy52YXJpYW50c1swXTtcclxuXHRcdG9wdGlvbnMgJiYgb3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4gT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKGtleSA9PiB0aGlzLnNldE9wdGlvbihrZXksIG9wdGlvbltrZXldKSkpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSBlbCBwcm9kdWN0byBhbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBkZWwgcHJvZHVjdG8gYSBhZ3JlZ2FyXHJcblx0ICogQHBhcmFtIHZhcmlhbnRDb2RlIENvZGlnbyBkZSBsYSB2YXJpYW50ZS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRhZGRUb0NhcnQocXVhbnRpdHk6IG51bWJlciwgdmFyaWFudENvZGU/OiBzdHJpbmcpIHtcclxuXHJcblxyXG5cdFx0aWYgKCF0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG5cclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhbnQtYnV5JylcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGxldCBwcm9kdWN0U2VsZWN0ZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCh0aGlzLl9wcm9kdWN0U3ViamVjdC5nZXRWYWx1ZSgpKSkpO1xyXG5cclxuXHRcdGxldCB2YXJpYW50OiBhbnk7XHJcblx0XHRzd2l0Y2ggKHRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcblx0XHRcdGNhc2UgMDpcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm8tdmFyaWFudHMnKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAxOlxyXG5cclxuXHRcdFx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMFxyXG5cdFx0XHRcdFx0PyB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJylcclxuXHRcdFx0XHRcdDogdmFyaWFudCA9IHRoaXMudmFyaWFudHNbMF1cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRpZiAodmFyaWFudENvZGUpIHtcclxuXHRcdFx0XHRcdHZhcmlhbnQgPSB0aGlzLnZhcmlhbnRzLmZpbmQodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT09IHZhcmlhbnRDb2RlKVxyXG5cdFx0XHRcdFx0aWYgKHZhcmlhbnQuc3RvY2sgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJylcclxuXHRcdFx0XHRcdFx0dmFyaWFudCA9IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygndmFyaWFudHMtbGVmdCcpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCF2YXJpYW50KSByZXR1cm47XHJcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVRdWFudGl0eShxdWFudGl0eSkpIHJldHVybjtcclxuXHRcdC8vYWdyZWdhciBhbCBzZXJ2aWNpbyBkZWwgY2Fycml0b1xyXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMubWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3RTZWxlY3RlZCksIHF1YW50aXR5LCB2YXJpYW50LmNvZGUpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBHZW5lcmEgdW4gcHJvZHVjdG8gcGFyYSBoYWNlciBtYXMgZmFjw61sIGVsIGVudmlvIGRlbCBlbGVtZW50byBhbCBiYWNrZW5kLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0U2VsZWN0ZWQgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBtYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdFNlbGVjdGVkOiBQcm9kdWN0KSB7XHJcblx0XHRwcm9kdWN0U2VsZWN0ZWQucHJpY2UgPSBwYXJzZUZsb2F0KHRoaXMuX2Fzc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5wcmljZSk7XHJcblx0XHRwcm9kdWN0U2VsZWN0ZWQuc2FsZXByaWNlID0gcGFyc2VGbG9hdCh0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucHJpY2UpO1xyXG5cdFx0cHJvZHVjdFNlbGVjdGVkLm9wdGlvbnMgPSBbXTtcclxuXHRcdHRoaXMudmFyaWFudHNbMF0ub3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4gcHJvZHVjdFNlbGVjdGVkLm9wdGlvbnMgPSB7IC4uLnByb2R1Y3RTZWxlY3RlZC5vcHRpb25zLCAuLi5vcHRpb24gfSlcclxuXHRcdHJldHVybiBwcm9kdWN0U2VsZWN0ZWQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYSBsYSBjYW50aWRhZCBxdWUgc2UgcXVpZXJlIGFncmVnYXIgZGUgdW4gcHJvZHVjdG8uXHJcblx0ICogUmV2aXNhIHF1ZSBubyBzdXBlcmUgZWwgc3RvY2ssIGVsIG1heGltbyBkZSBpdGVtcyBxdWUgc2UgcHVlZGUgYWdyZWdhclxyXG5cdCAqIGFzaSBjb21vIGVsIG1pbmltby5cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZVF1YW50aXR5ID0gKHF1YW50aXR5OiBudW1iZXIpID0+IHtcclxuXHRcdGNvbnN0IGFjdHVhbFF1YW50aXR5ID0gdGhpcy5fY2FydFNlcnZpY2UuZ2V0Q291bnRGcm9tSXRlbUluQ2FydCh0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG5cdFx0Y29uc3QgYXNvY2lhdGVkRGF0YSA9IHRoaXMuX2Fzc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZTtcclxuXHRcdGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgPiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogYXNvY2lhdGVkRGF0YS5tYXhpbXVtSXRlbXNRdWFudGl0eSB9KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoKGFjdHVhbFF1YW50aXR5ICsgcXVhbnRpdHkpIDwgYXNvY2lhdGVkRGF0YS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGFzb2NpYXRlZERhdGEubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWVcclxuXHR9XHJcbn1cclxuIl19
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1zZXJ2aWNlcy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUs3QyxNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLGdCQUFnQixHQUFvQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkQsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFaEQsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztJQUMxRCxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7SUFDL0Msc0JBQXNCLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFekYsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsZUFBZSxHQUFHLElBQUksQ0FB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LFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7WUFDbkcsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFBO1lBQ25HLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksYUFBYSxDQUFDLGdCQUFnQixJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7b0JBQ3JELFFBQVEsRUFBRSxhQUFhLENBQUMsZ0JBQWdCO29CQUN4QyxPQUFPLEVBQUUsY0FBYyxHQUFHLFFBQVE7aUJBQ2xDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDRixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDWixDQUFDLENBQUE7d0dBOVRXLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRnBCLE1BQU07OzRGQUVOLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPcHRpb25zLCBPcHRpb25WYWx1ZSwgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4vY2FydC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxTZXJ2aWNlIHtcclxuXHRwcml2YXRlIF9wcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSA9IGluamVjdChQcm9kdWN0c1NlcnZpY2UpO1xyXG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcblx0cHJpdmF0ZSBfY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcclxuXHJcblx0cHJpdmF0ZSBfcHJvZHVjdFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y3QgfCBudWxsPih7fSk7XHJcblx0cHJpdmF0ZSBfb3B0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG5cdHByaXZhdGUgX2Fzc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7IHByaWNlOiAnJywgc3RvY2s6IDAsIHBpY3R1cmU6ICcnIH0pO1xyXG5cclxuXHRwdWJsaWMgcHJvZHVjdCQgPSB0aGlzLl9wcm9kdWN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgb3B0aW9ucyQgPSB0aGlzLl9vcHRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHRwdWJsaWMgYXNzb2NpYXRlZERhdGEkID0gdGhpcy5fYXNzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuXHRwcml2YXRlIHZhcmlhbnRzOiBhbnlbXSA9IFtdXHJcblxyXG5cdGNvbnN0cnVjdG9yKCkgeyB9XHJcblx0LyoqXHJcblx0ICogT2J0ZW5nbyBlbCBwcm9kdWN0byBhIHRyYXZlcyBkZSBzdSBjb2RpZ28gZSBpbmljaWFsaXpvIGxhIGNvbmZpZ3VyYWNpw7NuXHJcblx0ICogZGVsIFNlcnZpY2lvLlxyXG5cdCAqIEBwYXJhbSBjb2RlIFxyXG5cdCAqIEBwYXJhbSB2YXJpYW50IFxyXG5cdCAqL1xyXG5cdGxvYWRQcm9kdWN0KGNvZGU6IHN0cmluZywgdmFyaWFudDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblx0XHRmaXJzdFZhbHVlRnJvbSh0aGlzLl9wcm9kdWN0c1NlcnZpY2UuZ2V0UHJvZHVjdEJ5Q29kZShjb2RlLCB2YXJpYW50KSlcclxuXHRcdFx0LnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHR2YXJpYW50ID8gdGhpcy5pbml0aWFsaXplKHJlcywgY29kZSkgOiB0aGlzLmluaXRpYWxpemUocmVzKVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQuY2F0Y2goZXJyID0+IHsgY29uc29sZS5sb2coZXJyKTsgdGhpcy5fcHJvZHVjdFN1YmplY3QubmV4dChudWxsKSB9KTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2FyZ2EgZWwgcHJvZHVjdG8gZW4gZWwgb2JzZXJ2YWJsZSB5IGxhIGNvbmZpZ3VyYWNpw7NuIGRlIGxhcyB2YXJpYW50ZXMuXHJcblx0ICogQHBhcmFtIHByb2R1Y3QgXHJcblx0ICogQHBhcmFtIHZhcmlhbnRDb2RlIFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZShwcm9kdWN0OiBQcm9kdWN0LCB2YXJpYW50Q29kZT86IHN0cmluZykge1xyXG5cdFx0dGhpcy5fcHJvZHVjdFN1YmplY3QubmV4dChwcm9kdWN0KTtcclxuXHRcdGNvbnN0IGF1eDogUHJvZHVjdFsnb3B0aW9ucyddID0gcHJvZHVjdC5vcHRpb25zIHx8IFtdO1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGF1eD8ubWFwKG9wdGlvbiA9PiB0aGlzLnRvT3B0aW9uKG9wdGlvbikpXHJcblx0XHR0aGlzLl9vcHRpb25zU3ViamVjdC5uZXh0KG9wdGlvbnMpO1xyXG5cdFx0dmFyaWFudENvZGUgPyB0aGlzLnVwZGF0ZVZhcmlhbnRzKHZhcmlhbnRDb2RlKSA6IHRoaXMudXBkYXRlVmFyaWFudHMoKTtcclxuXHRcdHRoaXMudmFyaWFudHMubGVuZ3RoICYmIHRoaXMuZ2VuZXJhdGVBc3NvY2lhdGVkRGF0YUZyb21WYXJpYW50cygpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBGb3JtYXRlIGxvcyBkYXRvcyBwYXJhIGxhcyBvcGNpb25lcyBkZWwgcHJvZHVjdG8uXHJcblx0ICogQHBhcmFtIG9wdGlvbiBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcml2YXRlIHRvT3B0aW9uKG9wdGlvbjogT3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bmFtZTogb3B0aW9uLmxhYmVsLFxyXG5cdFx0XHRjb2RlOiBvcHRpb24uY29kZSxcclxuXHRcdFx0dHlwZTogb3B0aW9uLnR5cGUsXHJcblx0XHRcdHZhbHVlczogb3B0aW9uLnZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7IG5hbWU6IHZhbHVlLmNvZGUsIGRlc2NyaXB0aW9uOiB2YWx1ZS5uYW1lLCBpbWFnZTogdmFsdWUuaW1hZ2UsIG1vYmlsZUltYWdlOiB2YWx1ZS5tb2JpbGVJbWFnZSwgc2VsZWN0ZWQ6IGZhbHNlIH0pKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FtYmlhIGxhcyBvcGNpb25lcywgb2J0aWVuZSBlbCBwcm9kdWN0byBhc29jaWFkbyBhIGxhIG9wY2lvbiBlbGVnaWRhLlxyXG5cdCAqL1xyXG5cdHNldE9wdGlvbihvcHRpb25Db2RlOiBhbnksIG9wdGlvblZhbHVlOiBhbnkpIHtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9vcHRpb25zU3ViamVjdC52YWx1ZTtcclxuXHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uQ29kZSkudmFsdWVzLmZpbmQoKHZhbHVlOiBhbnkpID0+IHZhbHVlLm5hbWUgPT0gb3B0aW9uVmFsdWUpO1xyXG5cdFx0b3B0aW9uLnNlbGVjdGVkID0gIW9wdGlvbi5zZWxlY3RlZDtcclxuXHRcdG9wdGlvbnMuZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uQ29kZSkudmFsdWVzLmZvckVhY2goXHJcblx0XHRcdCh2YWx1ZTogYW55KSA9PiB7IGlmICh2YWx1ZS5uYW1lICE9IG9wdGlvbi5uYW1lKSB2YWx1ZS5zZWxlY3RlZCA9IGZhbHNlIH1cclxuXHRcdCk7XHJcblx0XHR0aGlzLl9vcHRpb25zU3ViamVjdC5uZXh0KG9wdGlvbnMpO1xyXG5cdFx0dGhpcy51cGRhdGVWYXJpYW50cygpO1xyXG5cdFx0dGhpcy52YXJpYW50cy5sZW5ndGggPiAwID8gdGhpcy5nZW5lcmF0ZUFzc29jaWF0ZWREYXRhRnJvbVZhcmlhbnRzKCkgOiB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnc2VsZWN0aW9uLW5vdC1hdmFpbGFibGUnKVxyXG5cdH1cclxuXHQvKipcclxuICogQWN0dWFsaXphIGVsIG9ic2VydmFibGUgZGUgYGFzc29jaWF0ZWREYXRhYCBlbCBjdWFsIHNlIHV0aWxpemEgcGFyYSBtb3N0cmFyIGxvcyBkYXRvc1xyXG4gKiBlbiBlbCBmcm9udGVuZCBzZWfDum4gZWwgcHJvZHVjdG8geS9vIHZhcmlhbnRlIGVsZWdpZGEuXHJcbiAqIE9idGllbmUgbG9zIGRhdG9zIGRlIGxhIHZhcmlhbnRlIHkgbG9zIGZvcm1hdGVhLlxyXG4gKi9cclxuXHRnZW5lcmF0ZUFzc29jaWF0ZWREYXRhRnJvbVZhcmlhbnRzKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgYXNzb2NpYXRlZDogYW55ID0ge307XHJcblxyXG5cdFx0Ly8gU2kgc8OzbG8gaGF5IHVuYSB2YXJpYW50ZSwgdG9tYW1vcyB0b2RvcyBzdXMgZGF0b3MgZGlyZWN0YW1lbnRlXHJcblx0XHRpZiAodGhpcy52YXJpYW50cy5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0Y29uc3QgdiA9IHRoaXMudmFyaWFudHNbMF07XHJcblxyXG5cdFx0XHRhc3NvY2lhdGVkLnN0b2NrID0gdi5zdG9jaztcclxuXHRcdFx0Ly8gUHJlY2lvOiBzaSB2aWVuZSB0YXhMZWdlbmRJbmZvIHVzYW1vcyBzdSBwcmljZSwgc2kgbm8gZWwgdi5wcmljZVxyXG5cdFx0XHRjb25zdCByYXdQcmljZSA9IHYudGF4TGVnZW5kSW5mbz8ucHJpY2UgPz8gdi5wcmljZTtcclxuXHRcdFx0YXNzb2NpYXRlZC5wcmljZSA9IHJhd1ByaWNlLnRvU3RyaW5nKCk7XHJcblx0XHRcdGNvbnN0IHJhd1NhbGVQcmljZSA9IHYudGF4TGVnZW5kSW5mbz8uc2FsZXByaWNlID8/IHYuc2FsZXByaWNlO1xyXG5cdFx0XHRhc3NvY2lhdGVkLnNhbGVwcmljZSA9IHJhd1NhbGVQcmljZSA/IHJhd1NhbGVQcmljZS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xyXG5cdFx0XHRhc3NvY2lhdGVkLmRpc2NvdW50ID0gdi5kaXNjb3VudCA/PyB1bmRlZmluZWQ7XHJcblx0XHRcdGFzc29jaWF0ZWQucHJvcGVydGllcyA9IHYucHJvcGVydGllcyA/IHRoaXMuYmVhdXRpZnlQcm9wZXJ0aWVzKHYucHJvcGVydGllcykgOiB1bmRlZmluZWQ7XHJcblx0XHRcdGFzc29jaWF0ZWQudW5pcXVlRXh0ZXJuYWxDb2RlID0gdi51bmlxdWVFeHRlcm5hbENvZGUgPz8gdW5kZWZpbmVkO1xyXG5cdFx0XHRhc3NvY2lhdGVkLm11bHRpcGxlUXVhbnRpdHkgPSB2Lm11bHRpcGxlUXVhbnRpdHkgPz8gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0Ly8gTMOtbWl0ZXMgZGUgY2FudGlkYWQvc3RvY2tcclxuXHRcdFx0YXNzb2NpYXRlZC5tYXhpbXVtQW1vdW50ID0gdi5tYXhpbXVtQW1vdW50ID8/IDA7XHJcblx0XHRcdGFzc29jaWF0ZWQubWluaW11bUFtb3VudCA9IHYubWluaW11bUFtb3VudCA/PyAwO1xyXG5cdFx0XHRhc3NvY2lhdGVkLm1heGltdW1JdGVtc1F1YW50aXR5ID0gdi5zdG9jayA+IDAgJiYgJ21heGltdW1JdGVtc1F1YW50aXR5JyBpbiB2XHJcblx0XHRcdFx0PyB2Lm1heGltdW1JdGVtc1F1YW50aXR5XHJcblx0XHRcdFx0OiB2LnN0b2NrO1xyXG5cdFx0XHRhc3NvY2lhdGVkLm1pbmltdW1JdGVtc1F1YW50aXR5ID0gdi5zdG9jayA+IDAgJiYgJ21pbmltdW1JdGVtc1F1YW50aXR5JyBpbiB2ICYmIHYubWluaW11bUl0ZW1zUXVhbnRpdHkhID4gMFxyXG5cdFx0XHRcdD8gdi5taW5pbXVtSXRlbXNRdWFudGl0eVxyXG5cdFx0XHRcdDogKHYubXVsdGlwbGVRdWFudGl0eSA/PyAxKTtcclxuXHRcdFx0YXNzb2NpYXRlZC5tdWx0aXBsZVF1YW50aXR5ID0gdi5tdWx0aXBsZVF1YW50aXR5ID8/IDE7XHJcblxyXG5cdFx0XHQvLyBQcmVjaW9zIGFsIGNvbnN1bWlkb3IgZmluYWxcclxuXHRcdFx0YXNzb2NpYXRlZC5maW5hbENvbnN1bWVyID0ge1xyXG5cdFx0XHRcdGZpbmFsQ29uc3VtZXJQcmljZTogdi5maW5hbF9jb25zdW1lcl9wcmljZSxcclxuXHRcdFx0XHRvcmlnaW5hbEZpbmFsQ29uc3VtZXJQcmljZTogdi5vcmlnaW5hbF9maW5hbF9jb25zdW1lcl9wcmljZVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSW1wdWVzdG9zXHJcblx0XHRcdGFzc29jaWF0ZWQudGF4ZXMgPSB7XHJcblx0XHRcdFx0dGF4SW5jbHVkZWQ6IHYudGF4SW5jbHVkZWQsXHJcblx0XHRcdFx0dGF4Q2F0ZWdvcnk6IHYudGF4Q2F0ZWdvcnlcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gU2VndW4gdmVyc2lvbiBkZWwgYmFja2VuZFxyXG5cdFx0XHRpZiAodi50YXhMZWdlbmRJbmZvKSB7XHJcblx0XHRcdFx0Ly8gTnVldm8gYmFja2VuZFxyXG5cdFx0XHRcdGFzc29jaWF0ZWQucHJpY2VXaXRob3V0VGF4ZXMgPSB2LnRheExlZ2VuZEluZm8ucHJpY2VXaXRob3V0VGF4ZXM7XHJcblx0XHRcdFx0YXNzb2NpYXRlZC50YXhlQW1vdW50ID0gdi50YXhMZWdlbmRJbmZvLnRheGVzO1xyXG5cdFx0XHRcdGFzc29jaWF0ZWQudGF4UmF0ZSA9IHYudGF4TGVnZW5kSW5mby50YXhSYXRlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIEJhY2tlbmQgYW50aWd1b1xyXG5cdFx0XHRcdGFzc29jaWF0ZWQucHJpY2VXaXRob3V0VGF4ZXMgPSB2LnByaWNlV2l0aG91dFRheGVzID8/IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRhc3NvY2lhdGVkLnRheGVBbW91bnQgPSB2LnRheGVzID8/IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRhc3NvY2lhdGVkLnRheFJhdGUgPSB2LnRheFJhdGUgPz8gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gU2kgaGF5IHZhcmlhcyB2YXJpYW50ZXMsIHJlc3VtaW1vc1xyXG5cdFx0XHRhc3NvY2lhdGVkLnByaWNlID0gdGhpcy5jcmVhdGVQcmljZSgpO1xyXG5cdFx0XHRhc3NvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMuY3JlYXRlU2FsZVByaWNlKCk7XHJcblx0XHRcdGFzc29jaWF0ZWQuc3RvY2sgPSB0aGlzLnZhcmlhbnRzLm1hcCh2ID0+IHYuc3RvY2spLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xyXG5cdFx0XHRhc3NvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy5jcmVhdGVEaXNjb3VudCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEltYWdlbiBwcmluY2lwYWxcclxuXHRcdGNvbnN0IGZpcnN0ID0gdGhpcy52YXJpYW50c1swXTtcclxuXHRcdGlmICgnaW1hZ2VzJyBpbiBmaXJzdCAmJiBmaXJzdC5pbWFnZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhc3NvY2lhdGVkLnBpY3R1cmUgPSBmaXJzdC5pbWFnZXNbMF07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRhc3NvY2lhdGVkLnBpY3R1cmUgPSB0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QudmFsdWU/LnBpY3R1cmVcclxuXHRcdFx0XHQ/PyB0aGlzLl9wcm9kdWN0U3ViamVjdC52YWx1ZT8ucGljdHVyZXNkZWZhdWx0Py5bMF07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW1pdGltb3MgZWwgb2JqZXRvIGNvbXBsZXRvXHJcblx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QubmV4dChhc3NvY2lhdGVkKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogTWVqb3JhIGxvcyBkYXRvcyBkZSBsYXMgYHByb3BlcnRpZXNgLlxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGJlYXV0aWZ5UHJvcGVydGllcyhwcm9wZXJ0aWVzOiBhbnkpOiBhbnkge1xyXG5cdFx0bGV0IGJlYXV0aWZ5RGF0YTogYW55ID0gW107XHJcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3A6IGFueSkgPT4ge1xyXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gcHJvcCkge1xyXG5cdFx0XHRcdGJlYXV0aWZ5RGF0YS5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogcHJvcFtrZXldIH0pXHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0XHRyZXR1cm4gYmVhdXRpZnlEYXRhXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERldnVlbHZlIHVuIGRlc2N1ZW50byBlbiBjYXNvIGRlIGV4aXN0aXIuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Y3JlYXRlRGlzY291bnQoKTogYW55IHtcclxuXHRcdGxldCBhbGxEaXNjb3VudHM6IHN0cmluZyA9ICcnO1xyXG5cdFx0dGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG5cdFx0XHR2YXJpYW50LmRpc2NvdW50ICYmIChhbGxEaXNjb3VudHMgKz0gJywgJyArIHZhcmlhbnQuZGlzY291bnQpO1xyXG5cdFx0fSlcclxuXHRcdGlmIChhbGxEaXNjb3VudHMgPT0gJycpIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRyZXR1cm4gYWxsRGlzY291bnRzO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBlbCBwcmVjaW8gZGUgdmVudGEuXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0Y3JlYXRlU2FsZVByaWNlKCk6IGFueSB7XHJcblx0XHRsZXQgbWluUHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgbWF4UHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgYWxsUHJpY2VzOiBhbnkgPSB0aGlzLnZhcmlhbnRzLm1hcCh2ID0+IHYuc2FsZXByaWNlKS5maWx0ZXIoZSA9PiBlICE9PSB1bmRlZmluZWQpO1xyXG5cdFx0aWYgKGFsbFByaWNlcy5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkXHJcblx0XHR9XHJcblx0XHRtaW5QcmljZSA9IGFsbFByaWNlcy5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBNYXRoLm1pbihhLCBiKSk7XHJcblx0XHRtYXhQcmljZSA9IGFsbFByaWNlcy5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBNYXRoLm1heChhLCBiKSk7XHJcblx0XHRyZXR1cm4gbWluUHJpY2UgPT0gbWF4UHJpY2UgPyBtYXhQcmljZS50b1N0cmluZygpIDogbWluUHJpY2UgKyAnIC0gJyArIG1heFByaWNlO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXZ1ZWx2ZSBlbCBwcmVjaW8gbyBsb3MgcHJlY2lvcyBlbiBjYXNvIGRlIHRlbmVyIHZhcmlhcyB2YXJpYW50ZXMgY29uIGRpc3RpbnRvcyBwcmVjaW9zLlxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdGNyZWF0ZVByaWNlKCk6IGFueSB7XHJcblx0XHRsZXQgbWluUHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgbWF4UHJpY2U6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgYWxsUHJpY2U6IGFueSA9IHRoaXMudmFyaWFudHMubWFwKHYgPT4gdi5wcmljZSlcclxuXHRcdG1pblByaWNlID0gYWxsUHJpY2UucmVkdWNlKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG5cdFx0bWF4UHJpY2UgPSBhbGxQcmljZS5yZWR1Y2UoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBNYXRoLm1heChhLCBiKSk7XHJcblx0XHRyZXR1cm4gbWluUHJpY2UgPT0gbWF4UHJpY2UgPyBtYXhQcmljZS50b1N0cmluZygpIDogbWluUHJpY2UgKyAnIC0gJyArIG1heFByaWNlO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGFzIHZhcmlhbnRlcy5cclxuXHQgKiBAcGFyYW0gY29kZSBcclxuXHQgKi9cclxuXHR1cGRhdGVWYXJpYW50cyA9IChjb2RlPzogc3RyaW5nKSA9PiB7XHJcblx0XHRsZXQgdmFyaWFudHMgPSB0aGlzLl9wcm9kdWN0U3ViamVjdC52YWx1ZT8udmFyaWFudHNcclxuXHRcdC8vY29uc29sZS5sb2codmFyaWFudHMpXHJcblx0XHRpZiAoIWNvZGUpIHtcclxuXHRcdFx0dGhpcy5fb3B0aW9uc1N1YmplY3QudmFsdWUuZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRvcHRpb24udmFsdWVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdGlmICh2YWx1ZS5zZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHR2YXJpYW50cyA9IHZhcmlhbnRzPy5maWx0ZXIodmFyaWFudCA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQub3B0aW9ucy5zb21lKCh2YXJpYW50T3B0aW9uOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAob3B0aW9uLmNvZGUgaW4gdmFyaWFudE9wdGlvbiAmJiB2YXJpYW50T3B0aW9uW29wdGlvbi5jb2RlXSA9PSB2YWx1ZS5uYW1lKTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR2YXJpYW50cyA9IHZhcmlhbnRzPy5maWx0ZXIodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT0gY29kZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnZhcmlhbnRzID0gdmFyaWFudHMgfHwgW107XHJcblx0XHRjb2RlICYmIHRoaXMudXBkYXRlT3B0aW9ucygpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBBY3R1YWxpemEgbGFzIG9wY2lvbmVzXHJcblx0ICovXHJcblx0cHJpdmF0ZSB1cGRhdGVPcHRpb25zID0gKCkgPT4ge1xyXG5cdFx0bGV0IHsgb3B0aW9ucyB9ID0gdGhpcy52YXJpYW50cy5sZW5ndGggJiYgdGhpcy52YXJpYW50c1swXTtcclxuXHRcdG9wdGlvbnMgJiYgb3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4gT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKGtleSA9PiB0aGlzLnNldE9wdGlvbihrZXksIG9wdGlvbltrZXldKSkpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEFncmVnYSBlbCBwcm9kdWN0byBhbCBjYXJyaXRvLlxyXG5cdCAqIEBwYXJhbSBxdWFudGl0eSBDYW50aWRhZCBkZWwgcHJvZHVjdG8gYSBhZ3JlZ2FyXHJcblx0ICogQHBhcmFtIHZhcmlhbnRDb2RlIENvZGlnbyBkZSBsYSB2YXJpYW50ZS5cclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRhZGRUb0NhcnQocXVhbnRpdHk6IG51bWJlciwgdmFyaWFudENvZGU/OiBzdHJpbmcpIHtcclxuXHJcblxyXG5cdFx0aWYgKCF0aGlzLnZhcmlhbnRzLmxlbmd0aCkge1xyXG5cclxuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ2NhbnQtYnV5JylcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGxldCBwcm9kdWN0U2VsZWN0ZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCh0aGlzLl9wcm9kdWN0U3ViamVjdC5nZXRWYWx1ZSgpKSkpO1xyXG5cclxuXHRcdGxldCB2YXJpYW50OiBhbnk7XHJcblx0XHRzd2l0Y2ggKHRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcblx0XHRcdGNhc2UgMDpcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm8tdmFyaWFudHMnKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAxOlxyXG5cclxuXHRcdFx0XHR0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMFxyXG5cdFx0XHRcdFx0PyB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJylcclxuXHRcdFx0XHRcdDogdmFyaWFudCA9IHRoaXMudmFyaWFudHNbMF1cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRpZiAodmFyaWFudENvZGUpIHtcclxuXHRcdFx0XHRcdHZhcmlhbnQgPSB0aGlzLnZhcmlhbnRzLmZpbmQodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT09IHZhcmlhbnRDb2RlKVxyXG5cdFx0XHRcdFx0aWYgKHZhcmlhbnQuc3RvY2sgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJylcclxuXHRcdFx0XHRcdFx0dmFyaWFudCA9IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygndmFyaWFudHMtbGVmdCcpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCF2YXJpYW50KSByZXR1cm47XHJcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVRdWFudGl0eShxdWFudGl0eSkpIHJldHVybjtcclxuXHRcdC8vYWdyZWdhciBhbCBzZXJ2aWNpbyBkZWwgY2Fycml0b1xyXG5cdFx0dGhpcy5fY2FydFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMubWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3RTZWxlY3RlZCksIHF1YW50aXR5LCB2YXJpYW50LmNvZGUpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBHZW5lcmEgdW4gcHJvZHVjdG8gcGFyYSBoYWNlciBtYXMgZmFjw61sIGVsIGVudmlvIGRlbCBlbGVtZW50byBhbCBiYWNrZW5kLlxyXG5cdCAqIEBwYXJhbSBwcm9kdWN0U2VsZWN0ZWQgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBtYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdFNlbGVjdGVkOiBQcm9kdWN0KSB7XHJcblx0XHRwcm9kdWN0U2VsZWN0ZWQucHJpY2UgPSBwYXJzZUZsb2F0KHRoaXMuX2Fzc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5wcmljZSk7XHJcblx0XHRwcm9kdWN0U2VsZWN0ZWQuc2FsZXByaWNlID0gcGFyc2VGbG9hdCh0aGlzLl9hc3NvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucHJpY2UpO1xyXG5cdFx0cHJvZHVjdFNlbGVjdGVkLm9wdGlvbnMgPSBbXTtcclxuXHRcdHRoaXMudmFyaWFudHNbMF0ub3B0aW9ucy5mb3JFYWNoKChvcHRpb246IGFueSkgPT4gcHJvZHVjdFNlbGVjdGVkLm9wdGlvbnMgPSB7IC4uLnByb2R1Y3RTZWxlY3RlZC5vcHRpb25zLCAuLi5vcHRpb24gfSlcclxuXHRcdHJldHVybiBwcm9kdWN0U2VsZWN0ZWQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYSBsYSBjYW50aWRhZCBxdWUgc2UgcXVpZXJlIGFncmVnYXIgZGUgdW4gcHJvZHVjdG8uXHJcblx0ICogUmV2aXNhIHF1ZSBubyBzdXBlcmUgZWwgc3RvY2ssIGVsIG1heGltbyBkZSBpdGVtcyBxdWUgc2UgcHVlZGUgYWdyZWdhclxyXG5cdCAqIGFzaSBjb21vIGVsIG1pbmltby5cclxuXHQgKiBAcGFyYW0gcXVhbnRpdHkgXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZVF1YW50aXR5ID0gKHF1YW50aXR5OiBudW1iZXIpID0+IHtcclxuXHRcdGNvbnN0IGFjdHVhbFF1YW50aXR5ID0gdGhpcy5fY2FydFNlcnZpY2UuZ2V0Q291bnRGcm9tSXRlbUluQ2FydCh0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG5cdFx0Y29uc3QgYXNvY2lhdGVkRGF0YSA9IHRoaXMuX2Fzc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZTtcclxuXHRcdGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgPiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcblx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogYXNvY2lhdGVkRGF0YS5tYXhpbXVtSXRlbXNRdWFudGl0eSB9KVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoKGFjdHVhbFF1YW50aXR5ICsgcXVhbnRpdHkpIDwgYXNvY2lhdGVkRGF0YS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGFzb2NpYXRlZERhdGEubWluaW11bUl0ZW1zUXVhbnRpdHkgfSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFzb2NpYXRlZERhdGEubXVsdGlwbGVRdWFudGl0eSAmJiBhc29jaWF0ZWREYXRhLm11bHRpcGxlUXVhbnRpdHkgPiAxKSB7XHJcblx0XHRcdGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgJSBhc29jaWF0ZWREYXRhLm11bHRpcGxlUXVhbnRpdHkgIT09IDApIHtcclxuXHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbXVsdGlwbGUtcXVhbnRpdHktcmVxdWlyZWQnLCB7XHJcblx0XHRcdFx0XHRtdWx0aXBsZTogYXNvY2lhdGVkRGF0YS5tdWx0aXBsZVF1YW50aXR5LFxyXG5cdFx0XHRcdFx0Y3VycmVudDogYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWVcclxuXHR9XHJcbn1cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9pbnRlcmZhY2VzL3Byb2R1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uVmFsdWUge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgaW1hZ2U6IHN0cmluZztcclxuICAgIG1vYmlsZUltYWdlOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcclxuICAgICBtYXhpbXVtSXRlbXNRdWFudGl0eT86IG51bWJlcjtcclxuICAgIG1pbmltdW1JdGVtc1F1YW50aXR5PzogbnVtYmVyO1xyXG4gICAgbXVsdGlwbGVRdWFudGl0eT86IG51bWJlcjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIHZhbHVlczogT3B0aW9uVmFsdWVbXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3Qge1xyXG4gICAgaWQ/OiBudW1iZXI7XHJcbiAgICBjYXRlZ29yeT86IHN0cmluZzsgLy8gQ29kaWdvIGRlIGNhdGVnb3JpYVxyXG4gICAgbmFtZT86IHN0cmluZzsgLy8gVGl0dWxvXHJcbiAgICBwcmljZT86IGFueTtcclxuICAgIHNhbGVwcmljZT86IGFueTtcclxuICAgIGRpc2NvdW50PzogbnVtYmVyOyAvLyBQb3JjZW50YWplIGRlIGRlc2N1ZW50byAtIEVuIGRlc3Vzb1xyXG4gICAgcGljdHVyZXNkZWZhdWx0Pzogc3RyaW5nW107IC8vIExpc3RhZG8gY29uIHRvZGFzIGxhcyBpbWFnZW5lcyBhc29jaWFkYXMgYWwgcHJvZHVjdG9cclxuICAgIHBpY3R1cmVzdmFyaWFudHM/OiBhbnlbXTtcclxuICAgIG9wdGlvbnM/OiBPcHRpb25zW107XHJcbiAgICBzaG9ydGRldGFpbHM/OiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsgLy8gSFRNTFxyXG4gICAgdGFnPzogYW55W107XHJcbiAgICByYXRpbmc/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICBzcGVjaWFsX21hcms/OiBhbnlbXTtcclxuICAgIHZhcmlhbnRzPzogYW55W107XHJcbiAgICBhdHRyaWJ1dGVzPzogYW55O1xyXG4gICAgLy9oZWxwZXJzXHJcbiAgICBwcm9kdWN0VG9DYXJ0SXRlbT86IFByb2R1Y3RUb0NhcnRJdGVtO1xyXG4gICAgY3VycmVudE9wdGlvbj86IEN1cnJlbnRPcHRpb24sXHJcbiAgICBwcm9kdWN0V2l0aFVuaXF1ZVZhcmlhbnQ/OiBQcm9kdWN0W107XHJcbiAgICBzdG9jaz86IG51bWJlcjsgLy8gUGFyYSBtYW5lam8gaW50ZXJsbywgZW4gYmFzZSBhIGxhL3MgdmFyaWFudGUvcyBzZWxlY2Npb25hZGEvc1xyXG4gICAgdmFyaWFudF9pZD86IG51bWJlcjsgLy8gUGFyYSBtYW5lam8gaW50ZXJsbywgZW4gYmFzZSBhIGxhL3MgdmFyaWFudGUvcyBzZWxlY2Npb25hZGEvc1xyXG4gICAgIG1heGltdW1JdGVtc1F1YW50aXR5PzogbnVtYmVyO1xyXG4gICAgbWluaW11bUl0ZW1zUXVhbnRpdHk/OiBudW1iZXI7XHJcbiAgICBtdWx0aXBsZVF1YW50aXR5PzogbnVtYmVyO1xyXG59XHJcblxyXG4vLyBUYWcgUHJvZHVjdFRvQ2FydEl0ZW1cclxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0VG9DYXJ0SXRlbSB7XHJcbiAgICBwcm9kdWN0Q29kZT86IHN0cmluZyxcclxuICAgIHZhcmlhbnRDb2RlPzogc3RyaW5nLFxyXG4gICAgcXVhbnRpdHk/OiBudW1iZXIsXHJcbiAgICB0b3RhbENvc3Q/OiBudW1iZXIsXHJcbiAgICBmaW5hbFByaWNlPzogbnVtYmVyLFxyXG59XHJcblxyXG4vLyBUYWcgQ3VycmVudE9wdGlvblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRPcHRpb24ge1xyXG4gICAgY29kZT86IHN0cmluZyxcclxuICAgIG5hbWU/OiBzdHJpbmcsXHJcbiAgICBzdG9jaz86IG51bWJlcixcclxuICAgIHByb2R1Y3RDb2RlPzogc3RyaW5nLFxyXG4gICAgdmFyaWFudENvZGU/OiBzdHJpbmcsXHJcbiAgICBmaW5hbFByaWNlPzogbnVtYmVyLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQge1xyXG4gICAgdHlwZT86IHN0cmluZyxcclxuICAgIGNvZGU/OiBzdHJpbmcsXHJcbiAgICBjaGVja0lmU3RvY2s/OiBib29sZWFuLFxyXG4gICAgZGVmYXVsdEZpcnN0T3B0aW9uPzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhcnRJdGVtIHtcclxuICAgIHByb2R1Y3RDb2RlOiBhbnksXHJcbiAgICBwcm9kdWN0PzogUHJvZHVjdDtcclxuICAgIHF1YW50aXR5OiBudW1iZXI7XHJcbiAgICB2YXJpYW50X2lkOiBudW1iZXI7XHJcbiAgICB0b3RhbDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhbGFuY2VDdXN0b21lciB7XHJcbiAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q/OiBib29sZWFuO1xyXG4gICAgYWxsb3dFeGNlZWRCYWxhbmNlPzogYm9vbGVhbjtcclxuICAgIGNyZWRpdEFtb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgICBzaG93TWF4PzogYm9vbGVhbjtcclxuICAgIHNob3dQcmljZT86IGJvb2xlYW47XHJcbiAgICByZW1haW5pbmdDcmVkaXRzPzogbnVtYmVyO1xyXG4gICAgYXBwbHlNYXhPcmRlcnM/OiBib29sZWFuO1xyXG4gICAgbWF4T3JkZXJzPzogbnVtYmVyO1xyXG59Il19
|
|
@@ -4724,8 +4724,15 @@ class CartService {
|
|
|
4724
4724
|
* @param quantity la cantidad nueva.
|
|
4725
4725
|
*/
|
|
4726
4726
|
updateItemQuantity(item, quantity) {
|
|
4727
|
+
// Validar antes de proceder
|
|
4727
4728
|
if (this.validateQuantity(item, quantity) && (this.validatePriceAndCredits(item, quantity))) {
|
|
4728
|
-
|
|
4729
|
+
// Si pasa las validaciones, hacer la petición HTTP
|
|
4730
|
+
firstValueFrom(this._connection.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), { 'quantity': Number(quantity) }))
|
|
4731
|
+
.then(res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)), err => this.handleError(err));
|
|
4732
|
+
return true; // Validaciones pasaron, operación iniciada
|
|
4733
|
+
}
|
|
4734
|
+
else {
|
|
4735
|
+
return false; // Validaciones fallaron
|
|
4729
4736
|
}
|
|
4730
4737
|
}
|
|
4731
4738
|
/**
|
|
@@ -4806,14 +4813,25 @@ class CartService {
|
|
|
4806
4813
|
* @returns
|
|
4807
4814
|
*/
|
|
4808
4815
|
validateQuantity(item, quantity) {
|
|
4809
|
-
|
|
4816
|
+
const actualQuantity = Number(this.getCountFromItemInCart(item.productCode)); // <-- Forzar a número
|
|
4817
|
+
const newQuantity = Number(quantity); // <-- Forzar a número
|
|
4818
|
+
if ((actualQuantity + newQuantity) > item.product.variants[0].maximumItemsQuantity) {
|
|
4810
4819
|
this._toastService.show('maximum-items-quantity', { quantity: item.product.variants[0].maximumItemsQuantity });
|
|
4811
4820
|
return false;
|
|
4812
4821
|
}
|
|
4813
|
-
if ((
|
|
4822
|
+
if ((actualQuantity + newQuantity) < item.product.variants[0].minimumItemsQuantity) {
|
|
4814
4823
|
this._toastService.show('minimum-items-quantity', { quantity: item.product.variants[0].minimumItemsQuantity });
|
|
4815
4824
|
return false;
|
|
4816
4825
|
}
|
|
4826
|
+
if (item.product.variants[0].multipleQuantity && item.product.variants[0].multipleQuantity > 1) {
|
|
4827
|
+
if ((actualQuantity + newQuantity) % item.product.variants[0].multipleQuantity !== 0) {
|
|
4828
|
+
this._toastService.show('multiple-quantity-required', {
|
|
4829
|
+
multiple: item.product.variants[0].multipleQuantity,
|
|
4830
|
+
current: actualQuantity + newQuantity // <-- Ahora suma correctamente
|
|
4831
|
+
});
|
|
4832
|
+
return false;
|
|
4833
|
+
}
|
|
4834
|
+
}
|
|
4817
4835
|
return true;
|
|
4818
4836
|
}
|
|
4819
4837
|
/**
|
|
@@ -5161,6 +5179,7 @@ class ProductDetailService {
|
|
|
5161
5179
|
associated.minimumItemsQuantity = v.stock > 0 && 'minimumItemsQuantity' in v && v.minimumItemsQuantity > 0
|
|
5162
5180
|
? v.minimumItemsQuantity
|
|
5163
5181
|
: (v.multipleQuantity ?? 1);
|
|
5182
|
+
associated.multipleQuantity = v.multipleQuantity ?? 1;
|
|
5164
5183
|
// Precios al consumidor final
|
|
5165
5184
|
associated.finalConsumer = {
|
|
5166
5185
|
finalConsumerPrice: v.final_consumer_price,
|
|
@@ -5363,6 +5382,15 @@ class ProductDetailService {
|
|
|
5363
5382
|
this._toastService.show('minimum-items-quantity', { quantity: asociatedData.minimumItemsQuantity });
|
|
5364
5383
|
return false;
|
|
5365
5384
|
}
|
|
5385
|
+
if (asociatedData.multipleQuantity && asociatedData.multipleQuantity > 1) {
|
|
5386
|
+
if ((actualQuantity + quantity) % asociatedData.multipleQuantity !== 0) {
|
|
5387
|
+
this._toastService.show('multiple-quantity-required', {
|
|
5388
|
+
multiple: asociatedData.multipleQuantity,
|
|
5389
|
+
current: actualQuantity + quantity
|
|
5390
|
+
});
|
|
5391
|
+
return false;
|
|
5392
|
+
}
|
|
5393
|
+
}
|
|
5366
5394
|
return true;
|
|
5367
5395
|
};
|
|
5368
5396
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -6573,7 +6601,10 @@ class HeaderEcComponent extends MenuEcComponent {
|
|
|
6573
6601
|
cdr = inject(ChangeDetectorRef); // Inyectamos ChangeDetectorRef para forzar la actualización
|
|
6574
6602
|
ngOnInit() {
|
|
6575
6603
|
this.channel = this.coreConstantsService.getChannel();
|
|
6576
|
-
|
|
6604
|
+
// Solo ejecutar en el navegador
|
|
6605
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
6606
|
+
this.onWindowScroll();
|
|
6607
|
+
}
|
|
6577
6608
|
this.detectRouteChange(); // Llamamos a la función que detecta el cambio de ruta
|
|
6578
6609
|
// Usar el Observable del AuthService
|
|
6579
6610
|
this.logged$ = this.__authService.loggedIn$;
|
|
@@ -6593,9 +6624,12 @@ class HeaderEcComponent extends MenuEcComponent {
|
|
|
6593
6624
|
}
|
|
6594
6625
|
}
|
|
6595
6626
|
ngAfterViewInit() {
|
|
6596
|
-
|
|
6597
|
-
this.
|
|
6598
|
-
|
|
6627
|
+
// Solo ejecutar en el navegador
|
|
6628
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
6629
|
+
this.setupMobileMenu(); // Inicializamos el menú móvil
|
|
6630
|
+
this.setupSearchInputs(); // Inicializamos los inputs de búsqueda
|
|
6631
|
+
this.isHomeFunction();
|
|
6632
|
+
}
|
|
6599
6633
|
}
|
|
6600
6634
|
/**
|
|
6601
6635
|
* Detecta cuando cambia la ruta y actualiza la clase del header
|
|
@@ -7408,7 +7442,6 @@ class ProductEcComponent {
|
|
|
7408
7442
|
return Math.round(discount);
|
|
7409
7443
|
}
|
|
7410
7444
|
plus(stock, multipleQuantity) {
|
|
7411
|
-
console.log('Aumentando cantidad');
|
|
7412
7445
|
const current = Number(this.quantity()); // <-- fuerza a número
|
|
7413
7446
|
if (multipleQuantity && multipleQuantity > 0) {
|
|
7414
7447
|
stock
|
|
@@ -7426,7 +7459,6 @@ class ProductEcComponent {
|
|
|
7426
7459
|
}
|
|
7427
7460
|
}
|
|
7428
7461
|
less(multipleQuantity) {
|
|
7429
|
-
console.log('Disminuyendo cantidad');
|
|
7430
7462
|
const current = Number(this.quantity()); // <-- fuerza a número
|
|
7431
7463
|
if (multipleQuantity && multipleQuantity > 0) {
|
|
7432
7464
|
current > multipleQuantity
|
|
@@ -7438,7 +7470,6 @@ class ProductEcComponent {
|
|
|
7438
7470
|
}
|
|
7439
7471
|
}
|
|
7440
7472
|
addToCart() {
|
|
7441
|
-
console.log('Añadiendo al carrito');
|
|
7442
7473
|
if (this.isAddingToCart() || this.quantity() <= 0)
|
|
7443
7474
|
return;
|
|
7444
7475
|
// Verificar que tenemos el producto y sus variantes
|
|
@@ -7457,22 +7488,73 @@ class ProductEcComponent {
|
|
|
7457
7488
|
this._toastService.show('out-of-stock-actually');
|
|
7458
7489
|
return;
|
|
7459
7490
|
}
|
|
7491
|
+
// NUEVAS VALIDACIONES: Verificar restricciones del producto
|
|
7492
|
+
if (!this.validateQuantity(this.quantity())) {
|
|
7493
|
+
return; // La validación ya mostró el toast correspondiente
|
|
7494
|
+
}
|
|
7460
7495
|
this.isAddingToCart.set(true);
|
|
7461
7496
|
try {
|
|
7462
7497
|
// Agregar al carrito usando CartService directamente
|
|
7463
7498
|
this._cartService.addToCart(this.product, this.quantity(), firstVariant.code);
|
|
7464
|
-
console.log('Producto agregado al carrito exitosamente');
|
|
7465
7499
|
// Resetear cantidad a 1 después de agregar al carrito
|
|
7466
7500
|
this.quantity.set(1);
|
|
7467
7501
|
}
|
|
7468
7502
|
catch (error) {
|
|
7469
|
-
console.error('Error al agregar al carrito:', error);
|
|
7470
7503
|
this._toastService.show('cant-buy');
|
|
7471
7504
|
}
|
|
7472
7505
|
setTimeout(() => {
|
|
7473
7506
|
this.isAddingToCart.set(false);
|
|
7474
7507
|
}, 2000);
|
|
7475
7508
|
}
|
|
7509
|
+
/**
|
|
7510
|
+
* Valida las restricciones de cantidad del producto
|
|
7511
|
+
*/
|
|
7512
|
+
validateQuantity(quantity) {
|
|
7513
|
+
if (!this.product.variants || this.product.variants.length === 0) {
|
|
7514
|
+
this._toastService.show('cant-buy');
|
|
7515
|
+
return false;
|
|
7516
|
+
}
|
|
7517
|
+
const variant = this.product.variants[0];
|
|
7518
|
+
// Obtener cantidad actual en el carrito
|
|
7519
|
+
const actualQuantity = this._cartService.getCountFromItemInCart(variant.code);
|
|
7520
|
+
const totalQuantity = Number(actualQuantity) + Number(quantity);
|
|
7521
|
+
// Obtener restricciones del producto/variante (con valores por defecto)
|
|
7522
|
+
const maximumItemsQuantity = this.product.maximumItemsQuantity ||
|
|
7523
|
+
variant.maximumItemsQuantity ||
|
|
7524
|
+
999999;
|
|
7525
|
+
const minimumItemsQuantity = this.product.minimumItemsQuantity ||
|
|
7526
|
+
variant.minimumItemsQuantity ||
|
|
7527
|
+
1;
|
|
7528
|
+
const multipleQuantity = this.product.multipleQuantity ||
|
|
7529
|
+
variant.multipleQuantity ||
|
|
7530
|
+
1;
|
|
7531
|
+
// Validar cantidad máxima
|
|
7532
|
+
if (totalQuantity > maximumItemsQuantity) {
|
|
7533
|
+
this._toastService.show('maximum-items-quantity', { quantity: maximumItemsQuantity });
|
|
7534
|
+
return false;
|
|
7535
|
+
}
|
|
7536
|
+
// Validar cantidad mínima
|
|
7537
|
+
if (totalQuantity < minimumItemsQuantity) {
|
|
7538
|
+
this._toastService.show('minimum-items-quantity', { quantity: minimumItemsQuantity });
|
|
7539
|
+
return false;
|
|
7540
|
+
}
|
|
7541
|
+
// Validar múltiplo de cantidad
|
|
7542
|
+
if (multipleQuantity && multipleQuantity > 1) {
|
|
7543
|
+
if (totalQuantity % multipleQuantity !== 0) {
|
|
7544
|
+
this._toastService.show('multiple-quantity-required', {
|
|
7545
|
+
multiple: multipleQuantity,
|
|
7546
|
+
current: totalQuantity
|
|
7547
|
+
});
|
|
7548
|
+
return false;
|
|
7549
|
+
}
|
|
7550
|
+
}
|
|
7551
|
+
// Validar que no exceda el stock total
|
|
7552
|
+
if (totalQuantity > variant.stock) {
|
|
7553
|
+
this._toastService.show('out-of-stock-actually');
|
|
7554
|
+
return false;
|
|
7555
|
+
}
|
|
7556
|
+
return true; // Todas las validaciones pasaron
|
|
7557
|
+
}
|
|
7476
7558
|
checkStock(stock) {
|
|
7477
7559
|
if (this.quantity() >= stock)
|
|
7478
7560
|
this.quantity.set(stock);
|
|
@@ -7570,6 +7652,9 @@ class BlockProductsEcComponent extends BlockEcComponent {
|
|
|
7570
7652
|
* Permite personalización de las imágenes de las flechas mediante @Input.
|
|
7571
7653
|
*/
|
|
7572
7654
|
setupSwiperNavigation() {
|
|
7655
|
+
// Solo ejecutar en el navegador
|
|
7656
|
+
if (!isPlatformBrowser(this.platformId))
|
|
7657
|
+
return;
|
|
7573
7658
|
if (this.meta?.styles?.carrousel !== false) {
|
|
7574
7659
|
// Usar setTimeout para asegurar que el swiper esté inicializado
|
|
7575
7660
|
setTimeout(() => {
|
|
@@ -9671,28 +9756,56 @@ class CartItemEcComponent {
|
|
|
9671
9756
|
// console.log(this.item, this.mediaUrl);
|
|
9672
9757
|
}
|
|
9673
9758
|
updateQuantity(stock) {
|
|
9759
|
+
const originalQuantity = this.item.quantity; // Guardar cantidad original
|
|
9674
9760
|
if (this.quantity > 0 && this.quantity <= stock) {
|
|
9675
|
-
this._cartService.updateItemQuantity(this.item, this.quantity);
|
|
9761
|
+
const success = this._cartService.updateItemQuantity(this.item, this.quantity);
|
|
9762
|
+
// Si la validación falló, restaurar la cantidad original
|
|
9763
|
+
if (!success) {
|
|
9764
|
+
this.quantity = originalQuantity;
|
|
9765
|
+
}
|
|
9676
9766
|
}
|
|
9677
9767
|
else {
|
|
9678
|
-
|
|
9768
|
+
// Restaurar cantidad original si está fuera de rango
|
|
9769
|
+
this.quantity = originalQuantity;
|
|
9679
9770
|
this._toastService.show('out-of-stock-actually');
|
|
9680
9771
|
}
|
|
9681
9772
|
}
|
|
9682
|
-
|
|
9773
|
+
plus(stock, value = 1) {
|
|
9683
9774
|
if (this.isQuantityUpdating)
|
|
9684
9775
|
return;
|
|
9685
9776
|
this.isQuantityUpdating = true;
|
|
9686
|
-
let
|
|
9687
|
-
|
|
9777
|
+
let newQuantity = Number(this.quantity) + value; // Forzar a número
|
|
9778
|
+
// Verificar stock ANTES de llamar al servicio
|
|
9779
|
+
if (newQuantity > stock) {
|
|
9780
|
+
this._toastService.show('out-of-stock-actually');
|
|
9781
|
+
setTimeout(() => { this.isQuantityUpdating = false; }, 1000);
|
|
9782
|
+
return;
|
|
9783
|
+
}
|
|
9784
|
+
const success = this._cartService.updateItemQuantity(this.item, newQuantity);
|
|
9785
|
+
// Solo actualizar el input si la operación fue exitosa
|
|
9786
|
+
if (success) {
|
|
9787
|
+
this.quantity = newQuantity;
|
|
9788
|
+
}
|
|
9789
|
+
// Si success es false, NO mostrar mensaje aquí porque ya lo mostró validateQuantity()
|
|
9688
9790
|
setTimeout(() => { this.isQuantityUpdating = false; }, 1000);
|
|
9689
9791
|
}
|
|
9690
|
-
|
|
9792
|
+
less(stock, value = 1) {
|
|
9691
9793
|
if (this.isQuantityUpdating)
|
|
9692
9794
|
return;
|
|
9693
9795
|
this.isQuantityUpdating = true;
|
|
9694
|
-
let
|
|
9695
|
-
|
|
9796
|
+
let newQuantity = Number(this.quantity) - value; // Forzar a número
|
|
9797
|
+
// Verificar cantidad mínima ANTES de llamar al servicio
|
|
9798
|
+
if (newQuantity <= 0) {
|
|
9799
|
+
// No permitir cantidades menores o iguales a 0
|
|
9800
|
+
setTimeout(() => { this.isQuantityUpdating = false; }, 1000);
|
|
9801
|
+
return;
|
|
9802
|
+
}
|
|
9803
|
+
const success = this._cartService.updateItemQuantity(this.item, newQuantity);
|
|
9804
|
+
// Solo actualizar el input si la operación fue exitosa
|
|
9805
|
+
if (success) {
|
|
9806
|
+
this.quantity = newQuantity;
|
|
9807
|
+
}
|
|
9808
|
+
// Si success es false, NO mostrar mensaje aquí porque ya lo mostró validateQuantity()
|
|
9696
9809
|
setTimeout(() => { this.isQuantityUpdating = false; }, 1000);
|
|
9697
9810
|
}
|
|
9698
9811
|
deleteCartItem() {
|