ng-easycommerce 0.0.619 → 0.0.621

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.
@@ -76,6 +76,7 @@ var ProductDetailService = /** @class */ (function () {
76
76
  this.product$ = this.productSubject.asObservable();
77
77
  this.options$ = this.optionsSubject.asObservable();
78
78
  this.asociatedData$ = this.asociatedDataSubject.asObservable();
79
+ this.balanceCustomer = null;
79
80
  /**
80
81
  * @param code Identificador del producto
81
82
  * @param variant Indica si se está solicitando un producto por su codigo, o por el codigo correspondiente a una de sus variantes
@@ -228,12 +229,7 @@ var ProductDetailService = /** @class */ (function () {
228
229
  var asociated = {};
229
230
  if (_this.isReady()) {
230
231
  asociated.stock = _this.variants[0].stock;
231
- if (_this.variants[0].priceWithoutTaxes) {
232
- asociated.price = _this.variants[0].priceWithoutTaxes.toString();
233
- }
234
- else {
235
- asociated.price = _this.variants[0].price.toString();
236
- }
232
+ asociated.price = _this.variants[0].price.toString();
237
233
  asociated.saleprice = _this.variants[0].saleprice && _this.variants[0].saleprice.toString() || undefined;
238
234
  asociated.discount = ((_a = _this.variants[0]) === null || _a === void 0 ? void 0 : _a.discount) || undefined;
239
235
  asociated.properties = _this.variants[0].properties ? _this.beautifyProperties(_this.variants[0].properties) : undefined;
@@ -338,14 +334,16 @@ var ProductDetailService = /** @class */ (function () {
338
334
  return true;
339
335
  };
340
336
  this.validatePriceAndCredits = function (price) {
341
- if (_this.creditAmount === null) {
342
- console.log('No hay configuración de créditos para este usuario.');
337
+ if (_this.balanceCustomer === null) {
343
338
  return true;
344
339
  }
345
- if (_this.remainingCredits === undefined) {
340
+ if (_this.balanceCustomer.allowAnyPaymentMethod) {
341
+ return true;
342
+ }
343
+ if (_this.balanceCustomer.remainingCredits === undefined) {
346
344
  return false;
347
345
  }
348
- if (price > _this.remainingCredits) {
346
+ if (price > _this.balanceCustomer.remainingCredits) {
349
347
  _this.toastrService.show('not-enough-credits');
350
348
  return false;
351
349
  }
@@ -355,11 +353,8 @@ var ProductDetailService = /** @class */ (function () {
355
353
  _this.cartService.getTotalAmount().subscribe(function (totalAmount) {
356
354
  _this.currentTotalAmount = totalAmount;
357
355
  });
358
- _this.cartService.getCreditAmount().subscribe(function (creditAmount) {
359
- _this.creditAmount = creditAmount;
360
- });
361
- _this.cartService.getRemainingCredits().subscribe(function (remainingCredits) {
362
- _this.remainingCredits = remainingCredits;
356
+ _this.cartService.balanceCustomer$.subscribe(function (balanceCustomer) {
357
+ _this.balanceCustomer = balanceCustomer;
363
358
  });
364
359
  };
365
360
  // Cuando haya modelos de respuesta, validamos que no se intente cargar un producto incompleto
@@ -499,4 +494,4 @@ var ProductDetailService = /** @class */ (function () {
499
494
  return ProductDetailService;
500
495
  }());
501
496
  export { ProductDetailService };
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RDtJQWVJLDhCQUNZLGVBQWdDLEVBQVUsV0FBd0IsRUFBVSxhQUEyQixFQUN2RyxTQUFvQixFQUFTLGdCQUFrQyxFQUFTLGVBQWdDO1FBRnBILGlCQUdDO1FBRlcsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUN2RyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWY1RyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FB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Q0FBQyxJQUFJLENBQUMsVUFBQSxFQUFFO1lBQ3pFLE9BQUEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUE1RCxDQUE0RCxDQUFDLENBQUE7SUFDckUsQ0FBQzs7Z0JBdmE0QixlQUFlO2dCQUF1QixXQUFXO2dCQUF5QixZQUFZO2dCQUM1RixTQUFTO2dCQUEyQixnQkFBZ0I7Z0JBQTBCLGVBQWU7O0lBakIzRyxvQkFBb0I7UUFEaEMsVUFBVSxFQUFFO09BQ0Esb0JBQW9CLENBcWNoQztJQUFELDJCQUFDO0NBQUEsQUFyY0QsSUFxY0M7U0FyY1ksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHBhcnRpdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wcm9kdWN0JztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IFBhcmFtc1Byb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BhcmFtc0ludGVyZmFjZXMvcGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCc7XHJcbmltcG9ydCB7IEN1cnJlbmN5U2VydmljZSB9IGZyb20gJy4uL2N1cnJlbmN5LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdERldGFpbFNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgcHJvZHVjdFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y3Q+KHt9KTtcclxuICAgIHByaXZhdGUgb3B0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7IHByaWNlOiAnJywgc3RvY2s6IDAsIHBpY3R1cmU6ICcnIH0pO1xyXG5cclxuICAgIHByaXZhdGUgdmFyaWFudHMgPSBbXVxyXG5cclxuICAgIHB1YmxpYyBwcm9kdWN0JCA9IHRoaXMucHJvZHVjdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgb3B0aW9ucyQgPSB0aGlzLm9wdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFzb2NpYXRlZERhdGEkID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgY3VycmVudFRvdGFsQW1vdW50OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGNyZWRpdEFtb3VudDogbnVtYmVyIHwgbnVsbDtcclxuICAgIHByaXZhdGUgcmVtYWluaW5nQ3JlZGl0czogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnN0YW50czogQ29uc3RhbnRzLCBwdWJsaWMgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSwgcHVibGljIGN1cnJlbmN5U2VydmljZTogQ3VycmVuY3lTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBwYXJhbSBjb2RlIElkZW50aWZpY2Fkb3IgZGVsIHByb2R1Y3RvXHJcbiAgICAqIEBwYXJhbSB2YXJpYW50IEluZGljYSBzaSBzZSBlc3TDoSBzb2xpY2l0YW5kbyB1biBwcm9kdWN0byBwb3Igc3UgY29kaWdvLCBvIHBvciBlbCBjb2RpZ28gY29ycmVzcG9uZGllbnRlIGEgdW5hIGRlIHN1cyB2YXJpYW50ZXNcclxuICAgICogIFxyXG4gICAgKiBDYXJnYSBlbCBwcm9kdWN0byBzb2xpY2l0YWRvIGFzeW5jcm9uaWNhbWVudGUgc2luIHJlc3B1ZXN0YSBcclxuICAgICovXHJcbiAgICBsb2FkUHJvZHVjdCA9IChjb2RlLCB2YXJpYW50OiBib29sZWFuID0gZmFsc2UpID0+XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0U3BlY2lmaWNQcm9kdWN0KGNvZGUsIHZhcmlhbnQpLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgIHJlcyA9PiB2YXJpYW50ID8gdGhpcy5pbml0aWFsaXplKHJlcywgY29kZSkgOiB0aGlzLmluaXRpYWxpemUocmVzKSxcclxuICAgICAgICAgICAgZXJyID0+IHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChudWxsKVxyXG4gICAgICAgIClcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBwcm9kdWN0X2lkIElkZW50aWZpY2Fkb3IgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudCBJbmRpY2Egc2kgc2UgZXN0w6Egc29saWNpdGFuZG8gdW4gcHJvZHVjdG8gcG9yIHN1IGNvZGlnbywgbyBwb3IgZWwgY29kaWdvIGNvcnJlc3BvbmRpZW50ZSBhIHVuYSBkZSBzdXMgdmFyaWFudGVzXHJcbiAgICAgKiBAYXN5bmNcclxuICAgICAqICBcclxuICAgICAqIEEgZGlmZXJlbmNpYSBkZWwgbWV0b2RvIGxvYWRQcm9kdWN0LCBlc3RlIHJldG9ybmEgdW4gdmFsb3IgY3VhbmRvIHRlcm1pbmEgXHJcbiAgICAgKi9cclxuICAgIGdldFByb2R1Y3QgPSBhc3luYyAocHJvZHVjdF9pZCwgdmFyaWFudDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvZHVjdHNTZXJ2aWNlLmdldFNwZWNpZmljUHJvZHVjdChwcm9kdWN0X2lkLCB2YXJpYW50KS50b1Byb21pc2UoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuZXJyb3IpIHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICBlbHNlIHZhcmlhbnQgPyB0aGlzLmluaXRpYWxpemUocmVzdWx0LCBwcm9kdWN0X2lkKSA6IHRoaXMuaW5pdGlhbGl6ZShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZSA9IChwcm9kdWN0LCB2YXJpYW50X2NvZGU/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KHByb2R1Y3QpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QubmV4dCh0aGlzLmdldE9wdGlvbnMoKSlcclxuICAgICAgICB2YXJpYW50X2NvZGUgPyB0aGlzLnVwZGF0ZVZhcmlhbnRzKHZhcmlhbnRfY29kZSkgOiB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5sZW5ndGggJiYgdGhpcy5nZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuICAgICAgICB0aGlzLmZldGNoQ2FydERhdGEoKVxyXG4gICAgICAgIC8vdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgndmlld19pdGVtJywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdGFudHMuY3VycmVuY3kuY29kZSB9KVxyXG4gICAgICAgIC8vIHZhcmlhbnRfY29kZSAmJiB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW0nLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0YW50cy5jdXJyZW5jeS5jb2RlIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UHJvZHVjdCA9IChwcm9kdWN0KSA9PiB0aGlzLmlzUHJvZHVjdFZhbGlkKHByb2R1Y3QpICYmIHRoaXMuaW5pdGlhbGl6ZShwcm9kdWN0KTtcclxuXHJcbiAgICBpc1JlYWR5ID0gKCkgPT4gdGhpcy52YXJpYW50cy5sZW5ndGggPT0gMTtcclxuXHJcbiAgICBzZXRPcHRpb24gPSAob3B0aW9uX2NvZGUsIG9wdGlvbl92YWx1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5vcHRpb25zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9ucy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jb2RlID09IG9wdGlvbl9jb2RlKS52YWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5uYW1lID09IG9wdGlvbl92YWx1ZSk7XHJcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gIW9wdGlvbi5zZWxlY3RlZDtcclxuICAgICAgICBvcHRpb25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uX2NvZGUpLnZhbHVlcy5mb3JFYWNoKFxyXG4gICAgICAgICAgICB2YWx1ZSA9PiB7IGlmICh2YWx1ZS5uYW1lICE9IG9wdGlvbi5uYW1lKSB2YWx1ZS5zZWxlY3RlZCA9IGZhbHNlIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QubmV4dChvcHRpb25zKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBIYWJpbGl0YXIgdG9kb3MgbG9zIGJvdG9uZXMgY29uIGxhIGNsYXNlICdhZGRDYXJ0QnV0dG9uJ1xyXG4gICAgICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkZENhcnRCdXR0b24nKTtcclxuICAgICAgICAgICAgc3VibWl0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnc2VsZWN0aW9uLW5vdC1hdmFpbGFibGUnKTtcclxuXHJcbiAgICAgICAgICAgIC8vIERlc2hhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lcyBjb24gbGEgY2xhc2UgJ3N1Ym1pdC1idXR0b24nXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRkQ2FydEJ1dHRvbicpO1xyXG4gICAgICAgICAgICBzdWJtaXRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgIChidXR0b24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VQaWN0dXJlID0gKHBpY3R1cmUpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgZGF0YS5waWN0dXJlID0gcGljdHVyZTtcclxuICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgICAvLyBXaGF0aGV2ZXIgd2UgbmVlZCB0byBkbyB3aXRoIGVycm9yXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYWdyZWdhL2FjdHVhbGl6YSB1biBpdGVtIGVuIGVsIGNhcnJpdG8gXHJcbiAgICAgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudF9jb2RlICoqKG9wY2lvbmFsKSoqIGNvZGlnbyBkZSBsYSB2YXJpYW50ZSBzZWxlY2Npb25hZGEgZGVsIHByb2R1Y3RvLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FydChxdWFudGl0eSwgdmFyaWFudF9jb2RlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2NhbnQtYnV5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3Rfc2VsZWN0ZWQgPSBfLmNsb25lKHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUpO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudDogYW55O1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCduby12YXJpYW50cycpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpIDpcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gdGhpcy52YXJpYW50c1swXVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudF9jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IHRoaXMudmFyaWFudHMuZmluZCh2YXJpYW50ID0+IHZhcmlhbnQuY29kZSA9PT0gdmFyaWFudF9jb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCd2YXJpYW50cy1sZWZ0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2YXJpYW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUXVhbnRpdHkocXVhbnRpdHkpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHByaWNlVG9WYWxpZGF0ZSA9IHByb2R1Y3Rfc2VsZWN0ZWQuc2FsZXByaWNlID8gcHJvZHVjdF9zZWxlY3RlZC5zYWxlcHJpY2UgKiBxdWFudGl0eSA6IHByb2R1Y3Rfc2VsZWN0ZWQucHJpY2UgKiBxdWFudGl0eTtcclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMocHJpY2VUb1ZhbGlkYXRlKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydCh0aGlzLm1ha2VBZmZvcmRhYmxlUHJvZHVjdChwcm9kdWN0X3NlbGVjdGVkKSwgcXVhbnRpdHksIHZhcmlhbnQuY29kZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIHF1YW50aXR5ID0gcGFyc2VJbnQocXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghdGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdjYW50LWJ1eScgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3Rfc2VsZWN0ZWQgPSBfLmNsb25lKHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCA+IDEgfHwgdGhpcy52YXJpYW50cy5sZW5ndGggPT0gMCB8fCB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID09IDApIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnbm8tdmFyaWFudHMnIH07XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMSAmJiB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID4gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICd2YXJpYW50cy1sZWZ0JyB9O1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCAhPSAwICYmIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdvdXQtb2Ytc3RvY2snIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVF1YW50aXR5KHF1YW50aXR5KSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydFByb21pc2UodGhpcy5tYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdF9zZWxlY3RlZCksIHF1YW50aXR5LCB0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG4gICAgICAgIHJldHVybiAocmVzdWx0ICYmICEocmVzdWx0LmVycm9yKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZ2V0T3B0aW9ucyA9IChwcm9kdWN0X3JlY2VpdmVkPzogUHJvZHVjdCkgPT4ge1xyXG4gICAgICAgIGxldCBwcm9kdWN0ID0gcHJvZHVjdF9yZWNlaXZlZCB8fCB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gW107XHJcbiAgICAgICAgcHJvZHVjdC5vcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh0aGlzLnRvT3B0aW9uKGVsZW1lbnQpKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9PcHRpb24gPSAocHJlb3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogcHJlb3B0aW9uLmxhYmVsLFxyXG4gICAgICAgICAgICBjb2RlOiBwcmVvcHRpb24uY29kZSxcclxuICAgICAgICAgICAgdHlwZTogcHJlb3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgIHZhbHVlczogcHJlb3B0aW9uLnZhbHVlcy5tYXAodmFsdWUgPT4gKHsgbmFtZTogdmFsdWUuY29kZSwgZGVzY3JpcHRpb246IHZhbHVlLm5hbWUsIGltYWdlOiB2YWx1ZS5pbWFnZSwgbW9iaWxlSW1hZ2U6IHZhbHVlLm1vYmlsZUltYWdlLCBzZWxlY3RlZDogZmFsc2UgfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3Rfc2VsZWN0ZWQ6IFByb2R1Y3QpIHtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLnByaWNlID0gcGFyc2VGbG9hdCh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnByaWNlKTtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLnNhbGVwcmljZSA9IHBhcnNlRmxvYXQodGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5wcmljZSk7XHJcbiAgICAgICAgcHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zID0ge307XHJcbiAgICAgICAgdGhpcy52YXJpYW50c1swXS5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHByb2R1Y3Rfc2VsZWN0ZWQub3B0aW9ucyA9IHsgLi4ucHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zLCAuLi5vcHRpb24gfSlcclxuICAgICAgICByZXR1cm4gcHJvZHVjdF9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVZhcmlhbnRzID0gKGNvZGU/KSA9PiB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnRzID0gdGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZS52YXJpYW50cztcclxuICAgICAgICBpZiAoIWNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC52YWx1ZS5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50cyA9IHZhcmlhbnRzLmZpbHRlcih2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50Lm9wdGlvbnMuc29tZSh2YXJpYW50X29wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcHRpb24uY29kZSBpbiB2YXJpYW50X29wdGlvbiAmJiB2YXJpYW50X29wdGlvbltvcHRpb24uY29kZV0gPT0gdmFsdWUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyaWFudHMgPSB2YXJpYW50cy5maWx0ZXIodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT0gY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFyaWFudHMgPSB2YXJpYW50cztcclxuICAgICAgICBjb2RlICYmIHRoaXMudXBkYXRlT3B0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlT3B0aW9ucyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgeyBvcHRpb25zIH0gPSB0aGlzLnZhcmlhbnRzLmxlbmd0aCAmJiB0aGlzLnZhcmlhbnRzWzBdO1xyXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goa2V5ID0+IHRoaXMuc2V0T3B0aW9uKGtleSwgb3B0aW9uW2tleV0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgYXNvY2lhdGVkOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnN0b2NrID0gdGhpcy52YXJpYW50c1swXS5zdG9jaztcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudHNbMF0ucHJpY2VXaXRob3V0VGF4ZXMpIHtcclxuICAgICAgICAgICAgICAgIGFzb2NpYXRlZC5wcmljZSA9IHRoaXMudmFyaWFudHNbMF0ucHJpY2VXaXRob3V0VGF4ZXMudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNle1xyXG4gICAgICAgICAgICAgICAgYXNvY2lhdGVkLnByaWNlID0gdGhpcy52YXJpYW50c1swXS5wcmljZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5zYWxlcHJpY2UgPSB0aGlzLnZhcmlhbnRzWzBdLnNhbGVwcmljZSAmJiB0aGlzLnZhcmlhbnRzWzBdLnNhbGVwcmljZS50b1N0cmluZygpIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy52YXJpYW50c1swXT8uZGlzY291bnQgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQucHJvcGVydGllcyA9IHRoaXMudmFyaWFudHNbMF0ucHJvcGVydGllcyA/IHRoaXMuYmVhdXRpZnlQcm9wZXJ0aWVzKHRoaXMudmFyaWFudHNbMF0ucHJvcGVydGllcykgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC51bmlxdWVFeHRlcm5hbENvZGUgPSB0aGlzLnZhcmlhbnRzWzBdPy51bmlxdWVFeHRlcm5hbENvZGUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQubXVsdGlwbGVRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcmljZSA9IHRoaXMuY3JhdGVQcmljZSgpXHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5zYWxlcHJpY2UgPSB0aGlzLmNyYXRlU2FsZVByaWNlKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnN0b2NrID0gKHRoaXMudmFyaWFudHMubWFwKHZhcmlhbnQgPT4gdmFyaWFudC5zdG9jaykpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpXHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5kaXNjb3VudCA9IHRoaXMuY3JhdGVEaXNjb3VudCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAoJ2ltYWdlcycgaW4gdGhpcy52YXJpYW50c1swXSAmJiB0aGlzLnZhcmlhbnRzWzBdLmltYWdlcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICA/IGFzb2NpYXRlZC5waWN0dXJlID0gdGhpcy52YXJpYW50c1swXS5pbWFnZXNbMF1cclxuICAgICAgICAgICAgOiBhc29jaWF0ZWQucGljdHVyZSA9ICh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnBpY3R1cmUgfHwgdGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZS5waWN0dXJlc2RlZmF1bHRbMF0pO1xyXG5cclxuXHJcbiAgICAgICAgYXNvY2lhdGVkLm1heGltdW1BbW91bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy5tYXhpbXVtQW1vdW50IHx8IDBcclxuICAgICAgICBhc29jaWF0ZWQubWluaW11bUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/Lm1pbmltdW1BbW91bnQgfHwgMFxyXG5cclxuICAgICAgICBhc29jaWF0ZWQubWF4aW11bUl0ZW1zUXVhbnRpdHkgPSB0aGlzLnZhcmlhbnRzWzBdPy5zdG9jayA+IDAgJiYgJ21heGltdW1JdGVtc1F1YW50aXR5JyBpbiB0aGlzLnZhcmlhbnRzWzBdID8gdGhpcy52YXJpYW50c1swXT8ubWF4aW11bUl0ZW1zUXVhbnRpdHkgOiB0aGlzLnZhcmlhbnRzWzBdPy5zdG9ja1xyXG4gICAgICAgIGFzb2NpYXRlZC5taW5pbXVtSXRlbXNRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrID4gMCAmJiAnbWluaW11bUl0ZW1zUXVhbnRpdHknIGluIHRoaXMudmFyaWFudHNbMF1cclxuICAgICAgICAgICAgJiYgdGhpcy52YXJpYW50c1swXT8ubWluaW11bUl0ZW1zUXVhbnRpdHkgPiAwID8gdGhpcy52YXJpYW50c1swXT8ubWluaW11bUl0ZW1zUXVhbnRpdHlcclxuICAgICAgICAgICAgOiAodGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSA/IHRoaXMudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgOiAxKVxyXG5cclxuICAgICAgICBhc29jaWF0ZWQuZmluYWxDb25zdW1lciA9IHtcclxuICAgICAgICAgICAgZmluYWxDb25zdW1lclByaWNlOiB0aGlzLnZhcmlhbnRzWzBdPy5maW5hbF9jb25zdW1lcl9wcmljZSxcclxuICAgICAgICAgICAgb3JpZ2luYWxGaW5hbENvbnN1bWVyUHJpY2U6IHRoaXMudmFyaWFudHNbMF0/Lm9yaWdpbmFsX2ZpbmFsX2NvbnN1bWVyX3ByaWNlLFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXNvY2lhdGVkLnRheGVzID0ge1xyXG4gICAgICAgICAgICB0YXhJbmNsdWRlZDogdGhpcy52YXJpYW50c1swXT8udGF4SW5jbHVkZWQsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5OiB0aGlzLnZhcmlhbnRzWzBdPy50YXhDYXRlZ29yeSxcclxuICAgICAgICB9XHJcbiAgICAgICAgYXNvY2lhdGVkLnRheGVBbW91bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy50YXhlcyB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgYXNvY2lhdGVkLnRheFJhdGUgPSB0aGlzLnZhcmlhbnRzWzBdPy50YXhSYXRlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICBhc29jaWF0ZWQucHJpY2VXaXRob3V0VGF4ZXMgPSB0aGlzLnZhcmlhbnRzWzBdPy5wcmljZVdpdGhvdXRUYXhlcyB8fCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChhc29jaWF0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlY2liZSBsYXMgcHJvcGllZGFkZXMgZGUgdW5hIHZhcmlhbnRlIHkgcG9yIGNhZGEgaXRlbSBhcm1hIHVuIG9iamV0byBjb24gXHJcbiAgICAgKiBlbCBuYW1lPWNsYXZlIHkgdmFsdWU9dmFsb3IgZGUgZXNlIGl0ZW0uICBcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFxyXG4gICAgICogQHJldHVybnMgVW4gYXJyZWdsbyBjb24gbGFzIHByb3BpZWRhZGVzIGRlIGxhIGZvcm1hIHsgbmFtZSA9IC4uLiAsIHZhbHVlID0gLi4ufVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJlYXV0aWZ5UHJvcGVydGllcyA9IChwcm9wZXJ0aWVzKSA9PiB7XHJcbiAgICAgICAgbGV0IGJlYXV0aWZ5RGF0YSA9IFtdXHJcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgYmVhdXRpZnlEYXRhLnB1c2goeyBuYW1lOiBrZXksIHZhbHVlOiBwcm9wW2tleV0gfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBiZWF1dGlmeURhdGFcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlRGlzY291bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGFsbF9kaXNjb3VudCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXJpYW50LmRpc2NvdW50ICYmIChhbGxfZGlzY291bnQgPSBhbGxfZGlzY291bnQgKyAnLCAnICsgdmFyaWFudC5kaXNjb3VudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoYWxsX2Rpc2NvdW50ID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFsbF9kaXNjb3VudFxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmF0ZVByaWNlID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBtaW5fcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBtYXhfcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBhbGxfcHJpY2VzID0gW107XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICBhbGxfcHJpY2VzLnB1c2godmFyaWFudC5wcmljZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWluX3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIpKTtcclxuICAgICAgICBtYXhfcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIDApO1xyXG4gICAgICAgIHJldHVybiBtaW5fcHJpY2UgPT0gbWF4X3ByaWNlID8gbWF4X3ByaWNlLnRvU3RyaW5nKCkgOiBtaW5fcHJpY2UgKyAnIC0gJyArIG1heF9wcmljZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlU2FsZVByaWNlID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBtaW5fcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBtYXhfcHJpY2UgPSAwO1xyXG4gICAgICAgIGxldCBhbGxfcHJpY2VzID0gW107XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xyXG4gICAgICAgICAgICB2YXJpYW50LnNhbGVwcmljZSAmJiBhbGxfcHJpY2VzLnB1c2godmFyaWFudC5zYWxlcHJpY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghYWxsX3ByaWNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICBtaW5fcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG4gICAgICAgIG1heF9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1heChhLCBiKSwgMCk7XHJcbiAgICAgICAgcmV0dXJuIG1pbl9wcmljZSA9PSBtYXhfcHJpY2UgPyBtYXhfcHJpY2UudG9TdHJpbmcoKSA6IG1pbl9wcmljZSArICcgLSAnICsgbWF4X3ByaWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5SYW5nZSA9IChxdWFudGl0eSwgbWluLCBtYXgpID0+ICgocXVhbnRpdHkgLSBtaW4pICogKHF1YW50aXR5IC0gbWF4KSA8PSAwKVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVRdWFudGl0eSA9IChxdWFudGl0eTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsUXVhbnRpdHkgPSB0aGlzLmNhcnRTZXJ2aWNlLmdldENvdW50RnJvbUl0ZW1JbkNhcnQodGhpcy52YXJpYW50c1swXS5jb2RlKTtcclxuICAgICAgICBjb25zdCBhc29jaWF0ZWREYXRhID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBjb25zb2xlLmxvZygnTGEgY2FudGlkYWQgcXVlIGxsZWdvOiAnLCBxdWFudGl0eSwgJyB5IGxhIGNhbnRpZGFkIGFjdHVhbDogJywgYWN0dWFsUXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgPiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogYXNvY2lhdGVkRGF0YS5tYXhpbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoYWN0dWFsUXVhbnRpdHkgKyBxdWFudGl0eSkgPCBhc29jaWF0ZWREYXRhLm1pbmltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtaW5pbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogYXNvY2lhdGVkRGF0YS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChwcmljZTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3JlZGl0QW1vdW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBoYXkgY29uZmlndXJhY2nDs24gZGUgY3LDqWRpdG9zIHBhcmEgZXN0ZSB1c3VhcmlvLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJpY2UgPiB0aGlzLnJlbWFpbmluZ0NyZWRpdHMpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hDYXJ0RGF0YSA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCkuc3Vic2NyaWJlKCh0b3RhbEFtb3VudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb3RhbEFtb3VudCA9IHRvdGFsQW1vdW50O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldENyZWRpdEFtb3VudCgpLnN1YnNjcmliZSgoY3JlZGl0QW1vdW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QW1vdW50ID0gY3JlZGl0QW1vdW50O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldFJlbWFpbmluZ0NyZWRpdHMoKS5zdWJzY3JpYmUoKHJlbWFpbmluZ0NyZWRpdHMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1haW5pbmdDcmVkaXRzID0gcmVtYWluaW5nQ3JlZGl0cztcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ3VhbmRvIGhheWEgbW9kZWxvcyBkZSByZXNwdWVzdGEsIHZhbGlkYW1vcyBxdWUgbm8gc2UgaW50ZW50ZSBjYXJnYXIgdW4gcHJvZHVjdG8gaW5jb21wbGV0b1xyXG4gICAgcHJpdmF0ZSBpc1Byb2R1Y3RWYWxpZCA9IChwcm9kdWN0OiBQcm9kdWN0KSA9PiB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSBWYXJpYW50ZXMgeSBzdXMgdmFsb3Jlc1xyXG4gICAgICogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0b3JuYSB1bmEgbGlzdGEgZmlsdHJhZGEgZGUgbGFzIHZhcmlhbnRlcyBxdWUgZXN0YW4gc2VsZWNjaW9uYWRhc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFZhcmlhbnRzU2VsZWN0ZWQob3B0aW9uczogYW55LCBvcHRpb25zRXhjZXB0aW9uOiBBcnJheTxhbnk+KTogQXJyYXk8T2JqZWN0PiB7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50c1NlbGVjdGVkID0gW107XHJcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICAgICAgICBpZiAodi52YWx1ZXMgJiYgdi52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2LnZhbHVlcy5mb3JFYWNoKHZhbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5zZWxlY3RlZCAmJiAhb3B0aW9uc0V4Y2VwdGlvbi5maW5kKG9wID0+IG9wLnRvVXBwZXJDYXNlKCkgPT0gdi5jb2RlLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzU2VsZWN0ZWRbdi5jb2RlXSA9IHZhbC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzU2VsZWN0ZWQ7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSBWYXJpYW50ZXMgeSBzdXMgdmFsb3Jlc1xyXG4gICAgICogQHBhcmFtIHZhcmlhbnRzIFRvZGFzIGxhcyB2YXJpYW50ZXMgZGlzcG9uaWJsZXMgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiByZXRvcm5hIHRvZGFzIGxhcyB2YXJpYW50ZXMgZGlzcG9uaWJsZXMgYSBzZWxlY2Npb24geSBzdSBzdG9ja1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VmFyaWFudHNBdmFpbGFibGUob3B0aW9uczogYW55LCB2YXJpYW50czogYW55LCBvcHRpb25zRXhjZXB0aW9uOiBBcnJheTxhbnk+KTogYW55IHtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhbnRzU2VsZWN0ZWQgPSB0aGlzLmdldFZhcmlhbnRzU2VsZWN0ZWQob3B0aW9ucywgb3B0aW9uc0V4Y2VwdGlvbik7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50c0F2YWlsYWJsZSA9IFtdO1xyXG5cclxuICAgICAgICB2YXJpYW50cy5tYXAodiA9PiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYXV4ID0ge307XHJcbiAgICAgICAgICAgIGlmICh2Lm9wdGlvbnMgJiYgdi5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdi5vcHRpb25zLm1hcChvcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhdXgsIG9wLCB7IHN0b2NrOiB2LnN0b2NrIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXJpYW50c0F2YWlsYWJsZS5wdXNoKGF1eCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gdmFyaWFudHNBdmFpbGFibGUuZmlsdGVyKHZhID0+IHRoaXMuY29uc3RhbnRzLmNvbnRhaW5zQWxsKHsgLi4udmFyaWFudHNTZWxlY3RlZCB9LCB2YSkpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBcnJheSBkZSB2YXJpYW50ZXMgeSBzdXMgdmFsb3Jlc1xyXG4gICAgICogQHBhcmFtIGNvZGUgQ29kaWdvIGRlIGxhIHZhcmlhbnRlIGEgYnVzY2FyXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBub21icmUgZGUgbGEgdmFyaWFudGUgYSBidXNjYXJcclxuICAgICAqIEBwYXJhbSB2YXJpYW50cyB2YXJpYW50ZXMgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBcclxuICAgICAqIEBkZXNjcmlwdGlvbiBidXNjYSBlbiBsYSBsaXN0YSBkZSB2YXJpYW50ZXMgZGlzcG9uaWJsZXMgc2kgaGF5IGRlIGVzZSBjb2RpZ28sIGVzZSBub21icmUgeSBjb24gc3RvY2sgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGlzdFZhcmlhbnRBbmRIYXNTdG9jayhvcHRpb25zLCBjb2RlLCBuYW1lLCB2YXJpYW50cywgb3B0aW9uc0V4Y2VwdGlvbiA9IFtdKTogYm9vbGVhbiB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhbnRzQXZhaWxhYmxlKG9wdGlvbnMsIHZhcmlhbnRzLCBvcHRpb25zRXhjZXB0aW9uKS5maW5kKHZhID0+XHJcbiAgICAgICAgICAgIHZhLmhhc093blByb3BlcnR5KGNvZGUpICYmIHZhW2NvZGVdID09PSBuYW1lICYmIHZhLnN0b2NrID4gMClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHByb2R1Y3QgcHJvZHVjdG8gZWwgY3VhbCBzZSBxdWllcmUgZGVzZG9ibGFyIHBvciB2YXJpYW50ZXMgcG9yIHVuYSBvcGNpw7NuLlxyXG4gICAgICogQHBhcmFtIHdpdGhPcHRpb24gJ3R5cGUnIHRpcG8gZGUgb3BjacOzbiwgY29kZTogY8OzZGlnbyBkZSBsYSBvcGNpw7NuLiAnZGVmYXVsdEZpcnN0T3B0aW9uJzogZW4gY2FzbyBkZSBxdWUgbm8gc2UgcHVlZGEgZGVzZG9ibGFyIHBvciBsYSBvcGNpw7NuIGluZGljYWRhIHNpIGVsIHZhbG9yIGVzIHZlcmRhZGVybyBzZSBpbnRlbnRhcmEgZGVzZG9ibGFyIHBvciBsYSBwcmltZXJhIG9wY2nDs24gYXNvY2lhZGEgYWwgcHJvZHVjdG8uXHJcbiAgICAgKiAnY2hlY2tJZlN0b2NrJzogZW4gY2FzbyBkZSBxdWUgZXN0YSB2YWxvciBzZWEgdmVyZGFkZXJvIHNlIHJlYWxpemEgdW4gY29udHJvbCBkZSBxdWUgbGEgdmFyaWFudGVzIGN1ZW50ZW4gY29uIHN0b2NrIHBhcmEgc2VyIHVuIHByb2R1Y3RvIGRlc2RvYmxhZG8gcG9yIGxhIHZhcmlhbnRlLCBzaSBlbCB2YWxvciBlcyBmYWxzbyBubyBzZSByZWFsaXphIGRpY2hvIGNvbnRyb2wgeSBlbCBwcm9kdWN0byBzZSBkZXNkb2JsYXJhIGNvbiBzdG9jayBlbiAwLlxyXG4gICAgICogQHJldHVybnMgYXJyZWdsbyBjb24gZWwgcHJvZHVjdG8gZGVzZG9ibGFkbyBwb3IgbGEgdmFyaWFudGUgc29saWNpdGFkYS5cclxuICAgICAqIChvcGNpw7NuIHBvciBkZWZlY3RvIHF1ZSBzZSBpbnRlbnRhIGhhY2VyIGVsIGRlc2RvYmxhbWllbnRvICdjb2xvcicsIG8gYmllbiBzaSBlbiBsZSBwYXLDoW1ldHJvIHdpdGhPcHRpb24gZWwgYXRyaWJ1dG8gJ2RlZmF1bHRGaXJzdE9wdGlvbicgZXMgdmVyZGFkZXJvIHNlIGRlc2RvYmxhIHBvciBsYSBwcmltZXJhIG9wY2nDs24gYXNvY2lhZGEgYWwgcHJvZHVjdG8gKSBcclxuICAgICAqL1xyXG4gICAgZ2V0UHJvZHVjdFdpdGhVbmlxdWVWYXJpYW50ID0gKHByb2R1Y3QsIHdpdGhPcHRpb24/OiBQYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdHNTZXJ2aWNlLmdldFByb2R1Y3RzV2l0aFVuaXF1ZVZhcmlhbnQoW3Byb2R1Y3RdLCB3aXRoT3B0aW9uKVxyXG4gICAgfVxyXG5cclxufSJdfQ==
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUF5QixNQUFNLE1BQU0sQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RDtJQWNJLDhCQUNZLGVBQWdDLEVBQVUsV0FBd0IsRUFBVSxhQUEyQixFQUN2RyxTQUFvQixFQUFTLGdCQUFrQyxFQUFTLGVBQWdDO1FBRnBILGlCQUdDO1FBRlcsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUN2RyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFTLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWQ1RyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FB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QUFnQjtnQkFBMEIsZUFBZTs7SUFoQjNHLG9CQUFvQjtRQURoQyxVQUFVLEVBQUU7T0FDQSxvQkFBb0IsQ0ErYmhDO0lBQUQsMkJBQUM7Q0FBQSxBQS9iRCxJQStiQztTQS9iWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgcGFydGl0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Byb2R1Y3QnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uL2FuYWx5dGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcGFyYW1zSW50ZXJmYWNlcy9wYXJhbXNQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50JztcclxuaW1wb3J0IHsgQ3VycmVuY3lTZXJ2aWNlIH0gZnJvbSAnLi4vY3VycmVuY3kuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9kdWN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJvZHVjdD4oe30pO1xyXG4gICAgcHJpdmF0ZSBvcHRpb25zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgICBwcml2YXRlIGFzb2NpYXRlZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHsgcHJpY2U6ICcnLCBzdG9jazogMCwgcGljdHVyZTogJycgfSk7XHJcblxyXG4gICAgcHJpdmF0ZSB2YXJpYW50cyA9IFtdXHJcblxyXG4gICAgcHVibGljIHByb2R1Y3QkID0gdGhpcy5wcm9kdWN0U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBvcHRpb25zJCA9IHRoaXMub3B0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgYXNvY2lhdGVkRGF0YSQgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50VG90YWxBbW91bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgYmFsYW5jZUN1c3RvbWVyOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnN0YW50czogQ29uc3RhbnRzLCBwdWJsaWMgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSwgcHVibGljIGN1cnJlbmN5U2VydmljZTogQ3VycmVuY3lTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBwYXJhbSBjb2RlIElkZW50aWZpY2Fkb3IgZGVsIHByb2R1Y3RvXHJcbiAgICAqIEBwYXJhbSB2YXJpYW50IEluZGljYSBzaSBzZSBlc3TDoSBzb2xpY2l0YW5kbyB1biBwcm9kdWN0byBwb3Igc3UgY29kaWdvLCBvIHBvciBlbCBjb2RpZ28gY29ycmVzcG9uZGllbnRlIGEgdW5hIGRlIHN1cyB2YXJpYW50ZXNcclxuICAgICogIFxyXG4gICAgKiBDYXJnYSBlbCBwcm9kdWN0byBzb2xpY2l0YWRvIGFzeW5jcm9uaWNhbWVudGUgc2luIHJlc3B1ZXN0YSBcclxuICAgICovXHJcbiAgICBsb2FkUHJvZHVjdCA9IChjb2RlLCB2YXJpYW50OiBib29sZWFuID0gZmFsc2UpID0+XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c1NlcnZpY2UuZ2V0U3BlY2lmaWNQcm9kdWN0KGNvZGUsIHZhcmlhbnQpLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgIHJlcyA9PiB2YXJpYW50ID8gdGhpcy5pbml0aWFsaXplKHJlcywgY29kZSkgOiB0aGlzLmluaXRpYWxpemUocmVzKSxcclxuICAgICAgICAgICAgZXJyID0+IHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChudWxsKVxyXG4gICAgICAgIClcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBwcm9kdWN0X2lkIElkZW50aWZpY2Fkb3IgZGVsIHByb2R1Y3RvXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudCBJbmRpY2Egc2kgc2UgZXN0w6Egc29saWNpdGFuZG8gdW4gcHJvZHVjdG8gcG9yIHN1IGNvZGlnbywgbyBwb3IgZWwgY29kaWdvIGNvcnJlc3BvbmRpZW50ZSBhIHVuYSBkZSBzdXMgdmFyaWFudGVzXHJcbiAgICAgKiBAYXN5bmNcclxuICAgICAqICBcclxuICAgICAqIEEgZGlmZXJlbmNpYSBkZWwgbWV0b2RvIGxvYWRQcm9kdWN0LCBlc3RlIHJldG9ybmEgdW4gdmFsb3IgY3VhbmRvIHRlcm1pbmEgXHJcbiAgICAgKi9cclxuICAgIGdldFByb2R1Y3QgPSBhc3luYyAocHJvZHVjdF9pZCwgdmFyaWFudDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvZHVjdHNTZXJ2aWNlLmdldFNwZWNpZmljUHJvZHVjdChwcm9kdWN0X2lkLCB2YXJpYW50KS50b1Byb21pc2UoKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuZXJyb3IpIHRoaXMucHJvZHVjdFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICBlbHNlIHZhcmlhbnQgPyB0aGlzLmluaXRpYWxpemUocmVzdWx0LCBwcm9kdWN0X2lkKSA6IHRoaXMuaW5pdGlhbGl6ZShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZSA9IChwcm9kdWN0LCB2YXJpYW50X2NvZGU/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0U3ViamVjdC5uZXh0KHByb2R1Y3QpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QubmV4dCh0aGlzLmdldE9wdGlvbnMoKSlcclxuICAgICAgICB2YXJpYW50X2NvZGUgPyB0aGlzLnVwZGF0ZVZhcmlhbnRzKHZhcmlhbnRfY29kZSkgOiB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcbiAgICAgICAgdGhpcy52YXJpYW50cy5sZW5ndGggJiYgdGhpcy5nZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuICAgICAgICB0aGlzLmZldGNoQ2FydERhdGEoKVxyXG4gICAgICAgIC8vdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgndmlld19pdGVtJywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdGFudHMuY3VycmVuY3kuY29kZSB9KVxyXG4gICAgICAgIC8vIHZhcmlhbnRfY29kZSAmJiB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW0nLCB7IC4uLnByb2R1Y3QsIGN1cnJlbmN5OiB0aGlzLmNvbnN0YW50cy5jdXJyZW5jeS5jb2RlIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc2V0UHJvZHVjdCA9IChwcm9kdWN0KSA9PiB0aGlzLmlzUHJvZHVjdFZhbGlkKHByb2R1Y3QpICYmIHRoaXMuaW5pdGlhbGl6ZShwcm9kdWN0KTtcclxuXHJcbiAgICBpc1JlYWR5ID0gKCkgPT4gdGhpcy52YXJpYW50cy5sZW5ndGggPT0gMTtcclxuXHJcbiAgICBzZXRPcHRpb24gPSAob3B0aW9uX2NvZGUsIG9wdGlvbl92YWx1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5vcHRpb25zU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9ucy5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jb2RlID09IG9wdGlvbl9jb2RlKS52YWx1ZXMuZmluZCh2YWx1ZSA9PiB2YWx1ZS5uYW1lID09IG9wdGlvbl92YWx1ZSk7XHJcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gIW9wdGlvbi5zZWxlY3RlZDtcclxuICAgICAgICBvcHRpb25zLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUgPT0gb3B0aW9uX2NvZGUpLnZhbHVlcy5mb3JFYWNoKFxyXG4gICAgICAgICAgICB2YWx1ZSA9PiB7IGlmICh2YWx1ZS5uYW1lICE9IG9wdGlvbi5uYW1lKSB2YWx1ZS5zZWxlY3RlZCA9IGZhbHNlIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3B0aW9uc1N1YmplY3QubmV4dChvcHRpb25zKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhbnRzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBIYWJpbGl0YXIgdG9kb3MgbG9zIGJvdG9uZXMgY29uIGxhIGNsYXNlICdhZGRDYXJ0QnV0dG9uJ1xyXG4gICAgICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkZENhcnRCdXR0b24nKTtcclxuICAgICAgICAgICAgc3VibWl0QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAoYnV0dG9uIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFzb2NpYXRlZERhdGFGcm9tVmFyaWFudHMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnc2VsZWN0aW9uLW5vdC1hdmFpbGFibGUnKTtcclxuXHJcbiAgICAgICAgICAgIC8vIERlc2hhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lcyBjb24gbGEgY2xhc2UgJ3N1Ym1pdC1idXR0b24nXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWRkQ2FydEJ1dHRvbicpO1xyXG4gICAgICAgICAgICBzdWJtaXRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgIChidXR0b24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VQaWN0dXJlID0gKHBpY3R1cmUpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgZGF0YS5waWN0dXJlID0gcGljdHVyZTtcclxuICAgICAgICB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgICAvLyBXaGF0aGV2ZXIgd2UgbmVlZCB0byBkbyB3aXRoIGVycm9yXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYWdyZWdhL2FjdHVhbGl6YSB1biBpdGVtIGVuIGVsIGNhcnJpdG8gXHJcbiAgICAgKiBAcGFyYW0gcXVhbnRpdHkgY2FudGlkYWQgYSBhZ3JlZ2FyXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudF9jb2RlICoqKG9wY2lvbmFsKSoqIGNvZGlnbyBkZSBsYSB2YXJpYW50ZSBzZWxlY2Npb25hZGEgZGVsIHByb2R1Y3RvLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFkZFRvQ2FydChxdWFudGl0eSwgdmFyaWFudF9jb2RlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2NhbnQtYnV5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3Rfc2VsZWN0ZWQgPSBfLmNsb25lKHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUpO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudDogYW55O1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMudmFyaWFudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCduby12YXJpYW50cycpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCA/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpIDpcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gdGhpcy52YXJpYW50c1swXVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudF9jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9IHRoaXMudmFyaWFudHMuZmluZCh2YXJpYW50ID0+IHZhcmlhbnQuY29kZSA9PT0gdmFyaWFudF9jb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCd2YXJpYW50cy1sZWZ0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2YXJpYW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUXVhbnRpdHkocXVhbnRpdHkpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHByaWNlVG9WYWxpZGF0ZSA9IHByb2R1Y3Rfc2VsZWN0ZWQuc2FsZXByaWNlID8gcHJvZHVjdF9zZWxlY3RlZC5zYWxlcHJpY2UgKiBxdWFudGl0eSA6IHByb2R1Y3Rfc2VsZWN0ZWQucHJpY2UgKiBxdWFudGl0eTtcclxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMocHJpY2VUb1ZhbGlkYXRlKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydCh0aGlzLm1ha2VBZmZvcmRhYmxlUHJvZHVjdChwcm9kdWN0X3NlbGVjdGVkKSwgcXVhbnRpdHksIHZhcmlhbnQuY29kZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIHF1YW50aXR5ID0gcGFyc2VJbnQocXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghdGhpcy52YXJpYW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdjYW50LWJ1eScgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3Rfc2VsZWN0ZWQgPSBfLmNsb25lKHRoaXMucHJvZHVjdFN1YmplY3QudmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCA+IDEgfHwgdGhpcy52YXJpYW50cy5sZW5ndGggPT0gMCB8fCB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID09IDApIHJldHVybiB7IGVycm9yOiB0cnVlLCBtZXNzYWdlOiAnbm8tdmFyaWFudHMnIH07XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFyaWFudHMubGVuZ3RoID4gMSAmJiB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnN0b2NrID4gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICd2YXJpYW50cy1sZWZ0JyB9O1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZhcmlhbnRzLmxlbmd0aCAhPSAwICYmIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUuc3RvY2sgPT0gMCkgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdvdXQtb2Ytc3RvY2snIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZVF1YW50aXR5KHF1YW50aXR5KSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydFByb21pc2UodGhpcy5tYWtlQWZmb3JkYWJsZVByb2R1Y3QocHJvZHVjdF9zZWxlY3RlZCksIHF1YW50aXR5LCB0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG4gICAgICAgIHJldHVybiAocmVzdWx0ICYmICEocmVzdWx0LmVycm9yKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZ2V0T3B0aW9ucyA9IChwcm9kdWN0X3JlY2VpdmVkPzogUHJvZHVjdCkgPT4ge1xyXG4gICAgICAgIGxldCBwcm9kdWN0ID0gcHJvZHVjdF9yZWNlaXZlZCB8fCB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gW107XHJcbiAgICAgICAgcHJvZHVjdC5vcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh0aGlzLnRvT3B0aW9uKGVsZW1lbnQpKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdG9PcHRpb24gPSAocHJlb3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogcHJlb3B0aW9uLmxhYmVsLFxyXG4gICAgICAgICAgICBjb2RlOiBwcmVvcHRpb24uY29kZSxcclxuICAgICAgICAgICAgdHlwZTogcHJlb3B0aW9uLnR5cGUsXHJcbiAgICAgICAgICAgIHZhbHVlczogcHJlb3B0aW9uLnZhbHVlcy5tYXAodmFsdWUgPT4gKHsgbmFtZTogdmFsdWUuY29kZSwgZGVzY3JpcHRpb246IHZhbHVlLm5hbWUsIGltYWdlOiB2YWx1ZS5pbWFnZSwgbW9iaWxlSW1hZ2U6IHZhbHVlLm1vYmlsZUltYWdlLCBzZWxlY3RlZDogZmFsc2UgfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFrZUFmZm9yZGFibGVQcm9kdWN0KHByb2R1Y3Rfc2VsZWN0ZWQ6IFByb2R1Y3QpIHtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLnByaWNlID0gcGFyc2VGbG9hdCh0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlLnByaWNlKTtcclxuICAgICAgICBwcm9kdWN0X3NlbGVjdGVkLnNhbGVwcmljZSA9IHBhcnNlRmxvYXQodGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC52YWx1ZS5wcmljZSk7XHJcbiAgICAgICAgcHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zID0ge307XHJcbiAgICAgICAgdGhpcy52YXJpYW50c1swXS5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHByb2R1Y3Rfc2VsZWN0ZWQub3B0aW9ucyA9IHsgLi4ucHJvZHVjdF9zZWxlY3RlZC5vcHRpb25zLCAuLi5vcHRpb24gfSlcclxuICAgICAgICByZXR1cm4gcHJvZHVjdF9zZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVZhcmlhbnRzID0gKGNvZGU/KSA9PiB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnRzID0gdGhpcy5wcm9kdWN0U3ViamVjdC52YWx1ZS52YXJpYW50cztcclxuICAgICAgICBpZiAoIWNvZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zU3ViamVjdC52YWx1ZS5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50cyA9IHZhcmlhbnRzLmZpbHRlcih2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50Lm9wdGlvbnMuc29tZSh2YXJpYW50X29wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvcHRpb24uY29kZSBpbiB2YXJpYW50X29wdGlvbiAmJiB2YXJpYW50X29wdGlvbltvcHRpb24uY29kZV0gPT0gdmFsdWUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyaWFudHMgPSB2YXJpYW50cy5maWx0ZXIodmFyaWFudCA9PiB2YXJpYW50LmNvZGUgPT0gY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFyaWFudHMgPSB2YXJpYW50cztcclxuICAgICAgICBjb2RlICYmIHRoaXMudXBkYXRlT3B0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlT3B0aW9ucyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgeyBvcHRpb25zIH0gPSB0aGlzLnZhcmlhbnRzLmxlbmd0aCAmJiB0aGlzLnZhcmlhbnRzWzBdO1xyXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goa2V5ID0+IHRoaXMuc2V0T3B0aW9uKGtleSwgb3B0aW9uW2tleV0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlQXNvY2lhdGVkRGF0YUZyb21WYXJpYW50cyA9ICgpID0+IHtcclxuICAgICAgICBsZXQgYXNvY2lhdGVkOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5pc1JlYWR5KCkpIHtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnN0b2NrID0gdGhpcy52YXJpYW50c1swXS5zdG9ja1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQucHJpY2UgPSB0aGlzLnZhcmlhbnRzWzBdLnByaWNlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMudmFyaWFudHNbMF0uc2FsZXByaWNlICYmIHRoaXMudmFyaWFudHNbMF0uc2FsZXByaWNlLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBhc29jaWF0ZWQuZGlzY291bnQgPSB0aGlzLnZhcmlhbnRzWzBdPy5kaXNjb3VudCB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5wcm9wZXJ0aWVzID0gdGhpcy52YXJpYW50c1swXS5wcm9wZXJ0aWVzID8gdGhpcy5iZWF1dGlmeVByb3BlcnRpZXModGhpcy52YXJpYW50c1swXS5wcm9wZXJ0aWVzKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnVuaXF1ZUV4dGVybmFsQ29kZSA9IHRoaXMudmFyaWFudHNbMF0/LnVuaXF1ZUV4dGVybmFsQ29kZSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGFzb2NpYXRlZC5tdWx0aXBsZVF1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnByaWNlID0gdGhpcy5jcmF0ZVByaWNlKClcclxuICAgICAgICAgICAgYXNvY2lhdGVkLnNhbGVwcmljZSA9IHRoaXMuY3JhdGVTYWxlUHJpY2UoKVxyXG4gICAgICAgICAgICBhc29jaWF0ZWQuc3RvY2sgPSAodGhpcy52YXJpYW50cy5tYXAodmFyaWFudCA9PiB2YXJpYW50LnN0b2NrKSkucmVkdWNlKChhLCBiKSA9PiBhICsgYilcclxuICAgICAgICAgICAgYXNvY2lhdGVkLmRpc2NvdW50ID0gdGhpcy5jcmF0ZURpc2NvdW50KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICgnaW1hZ2VzJyBpbiB0aGlzLnZhcmlhbnRzWzBdICYmIHRoaXMudmFyaWFudHNbMF0uaW1hZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgID8gYXNvY2lhdGVkLnBpY3R1cmUgPSB0aGlzLnZhcmlhbnRzWzBdLmltYWdlc1swXVxyXG4gICAgICAgICAgICA6IGFzb2NpYXRlZC5waWN0dXJlID0gKHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QudmFsdWUucGljdHVyZSB8fCB0aGlzLnByb2R1Y3RTdWJqZWN0LnZhbHVlLnBpY3R1cmVzZGVmYXVsdFswXSk7XHJcblxyXG5cclxuICAgICAgICBhc29jaWF0ZWQubWF4aW11bUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/Lm1heGltdW1BbW91bnQgfHwgMFxyXG4gICAgICAgIGFzb2NpYXRlZC5taW5pbXVtQW1vdW50ID0gdGhpcy52YXJpYW50c1swXT8ubWluaW11bUFtb3VudCB8fCAwXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5tYXhpbXVtSXRlbXNRdWFudGl0eSA9IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrID4gMCAmJiAnbWF4aW11bUl0ZW1zUXVhbnRpdHknIGluIHRoaXMudmFyaWFudHNbMF0gPyB0aGlzLnZhcmlhbnRzWzBdPy5tYXhpbXVtSXRlbXNRdWFudGl0eSA6IHRoaXMudmFyaWFudHNbMF0/LnN0b2NrXHJcbiAgICAgICAgYXNvY2lhdGVkLm1pbmltdW1JdGVtc1F1YW50aXR5ID0gdGhpcy52YXJpYW50c1swXT8uc3RvY2sgPiAwICYmICdtaW5pbXVtSXRlbXNRdWFudGl0eScgaW4gdGhpcy52YXJpYW50c1swXVxyXG4gICAgICAgICAgICAmJiB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtSXRlbXNRdWFudGl0eSA+IDAgPyB0aGlzLnZhcmlhbnRzWzBdPy5taW5pbXVtSXRlbXNRdWFudGl0eVxyXG4gICAgICAgICAgICA6ICh0aGlzLnZhcmlhbnRzWzBdPy5tdWx0aXBsZVF1YW50aXR5ID8gdGhpcy52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSA6IDEpXHJcblxyXG4gICAgICAgIGFzb2NpYXRlZC5maW5hbENvbnN1bWVyID0ge1xyXG4gICAgICAgICAgICBmaW5hbENvbnN1bWVyUHJpY2U6IHRoaXMudmFyaWFudHNbMF0/LmZpbmFsX2NvbnN1bWVyX3ByaWNlLFxyXG4gICAgICAgICAgICBvcmlnaW5hbEZpbmFsQ29uc3VtZXJQcmljZTogdGhpcy52YXJpYW50c1swXT8ub3JpZ2luYWxfZmluYWxfY29uc3VtZXJfcHJpY2UsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc29jaWF0ZWQudGF4ZXMgPSB7XHJcbiAgICAgICAgICAgIHRheEluY2x1ZGVkOiB0aGlzLnZhcmlhbnRzWzBdPy50YXhJbmNsdWRlZCxcclxuICAgICAgICAgICAgdGF4Q2F0ZWdvcnk6IHRoaXMudmFyaWFudHNbMF0/LnRheENhdGVnb3J5LFxyXG4gICAgICAgIH1cclxuICAgICAgICBhc29jaWF0ZWQudGF4ZUFtb3VudCA9IHRoaXMudmFyaWFudHNbMF0/LnRheGVzIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICBhc29jaWF0ZWQudGF4UmF0ZSA9IHRoaXMudmFyaWFudHNbMF0/LnRheFJhdGUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGFzb2NpYXRlZC5wcmljZVdpdGhvdXRUYXhlcyA9IHRoaXMudmFyaWFudHNbMF0/LnByaWNlV2l0aG91dFRheGVzIHx8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KGFzb2NpYXRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVjaWJlIGxhcyBwcm9waWVkYWRlcyBkZSB1bmEgdmFyaWFudGUgeSBwb3IgY2FkYSBpdGVtIGFybWEgdW4gb2JqZXRvIGNvbiBcclxuICAgICAqIGVsIG5hbWU9Y2xhdmUgeSB2YWx1ZT12YWxvciBkZSBlc2UgaXRlbS4gIFxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgXHJcbiAgICAgKiBAcmV0dXJucyBVbiBhcnJlZ2xvIGNvbiBsYXMgcHJvcGllZGFkZXMgZGUgbGEgZm9ybWEgeyBuYW1lID0gLi4uICwgdmFsdWUgPSAuLi59XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVhdXRpZnlQcm9wZXJ0aWVzID0gKHByb3BlcnRpZXMpID0+IHtcclxuICAgICAgICBsZXQgYmVhdXRpZnlEYXRhID0gW11cclxuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBiZWF1dGlmeURhdGEucHVzaCh7IG5hbWU6IGtleSwgdmFsdWU6IHByb3Bba2V5XSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGJlYXV0aWZ5RGF0YVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVEaXNjb3VudCA9ICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgYWxsX2Rpc2NvdW50ID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHZhcmlhbnQuZGlzY291bnQgJiYgKGFsbF9kaXNjb3VudCA9IGFsbF9kaXNjb3VudCArICcsICcgKyB2YXJpYW50LmRpc2NvdW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhbGxfZGlzY291bnQgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYWxsX2Rpc2NvdW50XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyYXRlUHJpY2UgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IG1pbl9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IG1heF9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IGFsbF9wcmljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgIGFsbF9wcmljZXMucHVzaCh2YXJpYW50LnByaWNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBtaW5fcHJpY2UgPSBhbGxfcHJpY2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5taW4oYSwgYikpO1xyXG4gICAgICAgIG1heF9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1heChhLCBiKSwgMCk7XHJcbiAgICAgICAgcmV0dXJuIG1pbl9wcmljZSA9PSBtYXhfcHJpY2UgPyBtYXhfcHJpY2UudG9TdHJpbmcoKSA6IG1pbl9wcmljZSArICcgLSAnICsgbWF4X3ByaWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JhdGVTYWxlUHJpY2UgPSAoKSA9PiB7XHJcbiAgICAgICAgbGV0IG1pbl9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IG1heF9wcmljZSA9IDA7XHJcbiAgICAgICAgbGV0IGFsbF9wcmljZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XHJcbiAgICAgICAgICAgIHZhcmlhbnQuc2FsZXByaWNlICYmIGFsbF9wcmljZXMucHVzaCh2YXJpYW50LnNhbGVwcmljZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFhbGxfcHJpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1pbl9wcmljZSA9IGFsbF9wcmljZXMucmVkdWNlKChhLCBiKSA9PiBNYXRoLm1pbihhLCBiKSk7XHJcbiAgICAgICAgbWF4X3ByaWNlID0gYWxsX3ByaWNlcy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIGIpLCAwKTtcclxuICAgICAgICByZXR1cm4gbWluX3ByaWNlID09IG1heF9wcmljZSA/IG1heF9wcmljZS50b1N0cmluZygpIDogbWluX3ByaWNlICsgJyAtICcgKyBtYXhfcHJpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpblJhbmdlID0gKHF1YW50aXR5LCBtaW4sIG1heCkgPT4gKChxdWFudGl0eSAtIG1pbikgKiAocXVhbnRpdHkgLSBtYXgpIDw9IDApXHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVF1YW50aXR5ID0gKHF1YW50aXR5OiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBhY3R1YWxRdWFudGl0eSA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0Q291bnRGcm9tSXRlbUluQ2FydCh0aGlzLnZhcmlhbnRzWzBdLmNvZGUpO1xyXG4gICAgICAgIGNvbnN0IGFzb2NpYXRlZERhdGEgPSB0aGlzLmFzb2NpYXRlZERhdGFTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdMYSBjYW50aWRhZCBxdWUgbGxlZ286ICcsIHF1YW50aXR5LCAnIHkgbGEgY2FudGlkYWQgYWN0dWFsOiAnLCBhY3R1YWxRdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKChhY3R1YWxRdWFudGl0eSArIHF1YW50aXR5KSA+IGFzb2NpYXRlZERhdGEubWF4aW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21heGltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBhc29jaWF0ZWREYXRhLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChhY3R1YWxRdWFudGl0eSArIHF1YW50aXR5KSA8IGFzb2NpYXRlZERhdGEubWluaW11bUl0ZW1zUXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ21pbmltdW0taXRlbXMtcXVhbnRpdHknLCB7IHF1YW50aXR5OiBhc29jaWF0ZWREYXRhLm1pbmltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlUHJpY2VBbmRDcmVkaXRzID0gKHByaWNlOiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5iYWxhbmNlQ3VzdG9tZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWxhbmNlQ3VzdG9tZXIuYWxsb3dBbnlQYXltZW50TWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmFsYW5jZUN1c3RvbWVyLnJlbWFpbmluZ0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJpY2UgPiB0aGlzLmJhbGFuY2VDdXN0b21lci5yZW1haW5pbmdDcmVkaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdub3QtZW5vdWdoLWNyZWRpdHMnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hDYXJ0RGF0YSA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldFRvdGFsQW1vdW50KCkuc3Vic2NyaWJlKCh0b3RhbEFtb3VudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb3RhbEFtb3VudCA9IHRvdGFsQW1vdW50O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmJhbGFuY2VDdXN0b21lciQuc3Vic2NyaWJlKChiYWxhbmNlQ3VzdG9tZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXIgPSBiYWxhbmNlQ3VzdG9tZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEN1YW5kbyBoYXlhIG1vZGVsb3MgZGUgcmVzcHVlc3RhLCB2YWxpZGFtb3MgcXVlIG5vIHNlIGludGVudGUgY2FyZ2FyIHVuIHByb2R1Y3RvIGluY29tcGxldG9cclxuICAgIHByaXZhdGUgaXNQcm9kdWN0VmFsaWQgPSAocHJvZHVjdDogUHJvZHVjdCkgPT4gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQXJyYXkgZGUgVmFyaWFudGVzIHkgc3VzIHZhbG9yZXNcclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldG9ybmEgdW5hIGxpc3RhIGZpbHRyYWRhIGRlIGxhcyB2YXJpYW50ZXMgcXVlIGVzdGFuIHNlbGVjY2lvbmFkYXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWYXJpYW50c1NlbGVjdGVkKG9wdGlvbnM6IGFueSwgb3B0aW9uc0V4Y2VwdGlvbjogQXJyYXk8YW55Pik6IEFycmF5PE9iamVjdD4ge1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudHNTZWxlY3RlZCA9IFtdO1xyXG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgaWYgKHYudmFsdWVzICYmIHYudmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdi52YWx1ZXMuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuc2VsZWN0ZWQgJiYgIW9wdGlvbnNFeGNlcHRpb24uZmluZChvcCA9PiBvcC50b1VwcGVyQ2FzZSgpID09IHYuY29kZS50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50c1NlbGVjdGVkW3YuY29kZV0gPSB2YWwubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB2YXJpYW50c1NlbGVjdGVkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQXJyYXkgZGUgVmFyaWFudGVzIHkgc3VzIHZhbG9yZXNcclxuICAgICAqIEBwYXJhbSB2YXJpYW50cyBUb2RhcyBsYXMgdmFyaWFudGVzIGRpc3BvbmlibGVzIGRlbCBwcm9kdWN0b1xyXG4gICAgICogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gcmV0b3JuYSB0b2RhcyBsYXMgdmFyaWFudGVzIGRpc3BvbmlibGVzIGEgc2VsZWNjaW9uIHkgc3Ugc3RvY2tcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFZhcmlhbnRzQXZhaWxhYmxlKG9wdGlvbnM6IGFueSwgdmFyaWFudHM6IGFueSwgb3B0aW9uc0V4Y2VwdGlvbjogQXJyYXk8YW55Pik6IGFueSB7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYW50c1NlbGVjdGVkID0gdGhpcy5nZXRWYXJpYW50c1NlbGVjdGVkKG9wdGlvbnMsIG9wdGlvbnNFeGNlcHRpb24pO1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFudHNBdmFpbGFibGUgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyaWFudHMubWFwKHYgPT4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGF1eCA9IHt9O1xyXG4gICAgICAgICAgICBpZiAodi5vcHRpb25zICYmIHYub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHYub3B0aW9ucy5tYXAob3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXV4LCBvcCwgeyBzdG9jazogdi5zdG9jayB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyaWFudHNBdmFpbGFibGUucHVzaChhdXgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzQXZhaWxhYmxlLmZpbHRlcih2YSA9PiB0aGlzLmNvbnN0YW50cy5jb250YWluc0FsbCh7IC4uLnZhcmlhbnRzU2VsZWN0ZWQgfSwgdmEpKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgQXJyYXkgZGUgdmFyaWFudGVzIHkgc3VzIHZhbG9yZXNcclxuICAgICAqIEBwYXJhbSBjb2RlIENvZGlnbyBkZSBsYSB2YXJpYW50ZSBhIGJ1c2NhclxyXG4gICAgICogQHBhcmFtIG5hbWUgbm9tYnJlIGRlIGxhIHZhcmlhbnRlIGEgYnVzY2FyXHJcbiAgICAgKiBAcGFyYW0gdmFyaWFudHMgdmFyaWFudGVzIGRlbCBwcm9kdWN0b1xyXG4gICAgICogXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gYnVzY2EgZW4gbGEgbGlzdGEgZGUgdmFyaWFudGVzIGRpc3BvbmlibGVzIHNpIGhheSBkZSBlc2UgY29kaWdvLCBlc2Ugbm9tYnJlIHkgY29uIHN0b2NrIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhpc3RWYXJpYW50QW5kSGFzU3RvY2sob3B0aW9ucywgY29kZSwgbmFtZSwgdmFyaWFudHMsIG9wdGlvbnNFeGNlcHRpb24gPSBbXSk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYW50c0F2YWlsYWJsZShvcHRpb25zLCB2YXJpYW50cywgb3B0aW9uc0V4Y2VwdGlvbikuZmluZCh2YSA9PlxyXG4gICAgICAgICAgICB2YS5oYXNPd25Qcm9wZXJ0eShjb2RlKSAmJiB2YVtjb2RlXSA9PT0gbmFtZSAmJiB2YS5zdG9jayA+IDApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBwcm9kdWN0IHByb2R1Y3RvIGVsIGN1YWwgc2UgcXVpZXJlIGRlc2RvYmxhciBwb3IgdmFyaWFudGVzIHBvciB1bmEgb3BjacOzbi5cclxuICAgICAqIEBwYXJhbSB3aXRoT3B0aW9uICd0eXBlJyB0aXBvIGRlIG9wY2nDs24sIGNvZGU6IGPDs2RpZ28gZGUgbGEgb3BjacOzbi4gJ2RlZmF1bHRGaXJzdE9wdGlvbic6IGVuIGNhc28gZGUgcXVlIG5vIHNlIHB1ZWRhIGRlc2RvYmxhciBwb3IgbGEgb3BjacOzbiBpbmRpY2FkYSBzaSBlbCB2YWxvciBlcyB2ZXJkYWRlcm8gc2UgaW50ZW50YXJhIGRlc2RvYmxhciBwb3IgbGEgcHJpbWVyYSBvcGNpw7NuIGFzb2NpYWRhIGFsIHByb2R1Y3RvLlxyXG4gICAgICogJ2NoZWNrSWZTdG9jayc6IGVuIGNhc28gZGUgcXVlIGVzdGEgdmFsb3Igc2VhIHZlcmRhZGVybyBzZSByZWFsaXphIHVuIGNvbnRyb2wgZGUgcXVlIGxhIHZhcmlhbnRlcyBjdWVudGVuIGNvbiBzdG9jayBwYXJhIHNlciB1biBwcm9kdWN0byBkZXNkb2JsYWRvIHBvciBsYSB2YXJpYW50ZSwgc2kgZWwgdmFsb3IgZXMgZmFsc28gbm8gc2UgcmVhbGl6YSBkaWNobyBjb250cm9sIHkgZWwgcHJvZHVjdG8gc2UgZGVzZG9ibGFyYSBjb24gc3RvY2sgZW4gMC5cclxuICAgICAqIEByZXR1cm5zIGFycmVnbG8gY29uIGVsIHByb2R1Y3RvIGRlc2RvYmxhZG8gcG9yIGxhIHZhcmlhbnRlIHNvbGljaXRhZGEuXHJcbiAgICAgKiAob3BjacOzbiBwb3IgZGVmZWN0byBxdWUgc2UgaW50ZW50YSBoYWNlciBlbCBkZXNkb2JsYW1pZW50byAnY29sb3InLCBvIGJpZW4gc2kgZW4gbGUgcGFyw6FtZXRybyB3aXRoT3B0aW9uIGVsIGF0cmlidXRvICdkZWZhdWx0Rmlyc3RPcHRpb24nIGVzIHZlcmRhZGVybyBzZSBkZXNkb2JsYSBwb3IgbGEgcHJpbWVyYSBvcGNpw7NuIGFzb2NpYWRhIGFsIHByb2R1Y3RvICkgXHJcbiAgICAgKi9cclxuICAgIGdldFByb2R1Y3RXaXRoVW5pcXVlVmFyaWFudCA9IChwcm9kdWN0LCB3aXRoT3B0aW9uPzogUGFyYW1zUHJvZHVjdHNXaXRoVW5pcXVlVmFyaWFudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RzU2VydmljZS5nZXRQcm9kdWN0c1dpdGhVbmlxdWVWYXJpYW50KFtwcm9kdWN0XSwgd2l0aE9wdGlvbilcclxuICAgIH1cclxuXHJcbn0iXX0=
@@ -3124,7 +3124,10 @@ let CheckoutService = class CheckoutService {
3124
3124
  this.complete = () => __awaiter$1(this, void 0, void 0, function* () {
3125
3125
  this.loadingSubject.next(true);
3126
3126
  let result = yield this.completeOrder();
3127
- if (result && result.error) {
3127
+ if (!result ||
3128
+ result.error ||
3129
+ result.code === 'insufficient_credit' ||
3130
+ result.code === 'error') {
3128
3131
  this.cartService.changeHaveToUpdate(false);
3129
3132
  this.loadingSubject.next(false);
3130
3133
  return ({ ok: false, require_login: true, message: 'not-completed' });
@@ -4043,8 +4046,9 @@ let CartService = class CartService {
4043
4046
  next && next();
4044
4047
  };
4045
4048
  this.updateCartObj = (cart, emitEvent = true) => {
4049
+ var _a, _b, _c;
4046
4050
  this.cartSubject.next(cart);
4047
- this.updateBalanceAttributes(cart);
4051
+ this.updateBalanceAttributes((_a = cart) === null || _a === void 0 ? void 0 : _a.balanceCustomer, (_c = (_b = cart) === null || _b === void 0 ? void 0 : _b.totals) === null || _c === void 0 ? void 0 : _c.total);
4048
4052
  emitEvent && this.analyticsService.callEvent('add_to_cart', cart);
4049
4053
  this.promotionsSubject.next(this.orderUtils.getPromotions(cart, true));
4050
4054
  cart.couponCode
@@ -4171,6 +4175,9 @@ let CartService = class CartService {
4171
4175
  if (!balance || balance.creditAmount === null || balance.creditAmount === undefined) {
4172
4176
  return true;
4173
4177
  }
4178
+ if (balance.allowAnyPaymentMethod) {
4179
+ return true;
4180
+ }
4174
4181
  if (balance.remainingCredits === undefined) {
4175
4182
  return false;
4176
4183
  }
@@ -4408,21 +4415,20 @@ let CartService = class CartService {
4408
4415
  return subtotal - total;
4409
4416
  }));
4410
4417
  }
4411
- updateBalanceAttributes(cartData) {
4412
- var _a, _b, _c;
4413
- const balance = (_a = cartData) === null || _a === void 0 ? void 0 : _a.balanceCustomer;
4418
+ updateBalanceAttributes(balance, total = null) {
4414
4419
  if (!balance) {
4415
4420
  this.balanceCustomerSubject.next(null);
4416
4421
  return;
4417
4422
  }
4423
+ const totalAmount = (total !== null && total !== void 0 ? total : 0);
4418
4424
  const balanceData = {
4419
4425
  allowAnyPaymentMethod: balance.allowAnyPaymentMethod,
4420
4426
  allowExceedBalance: balance.allowExceedBalance,
4421
4427
  creditAmount: balance.creditAmount,
4422
4428
  showMax: balance.showMax,
4423
4429
  showPrice: balance.showPrice,
4424
- remainingCredits: balance.creditAmount && ((_c = (_b = cartData) === null || _b === void 0 ? void 0 : _b.totals) === null || _c === void 0 ? void 0 : _c.total) && balance.creditAmount >= cartData.totals.total
4425
- ? balance.creditAmount - cartData.totals.total
4430
+ remainingCredits: balance.creditAmount != null && totalAmount != null && balance.creditAmount >= totalAmount
4431
+ ? balance.creditAmount - totalAmount
4426
4432
  : 0,
4427
4433
  applyMaxOrders: balance.applyMaxOrders,
4428
4434
  maxOrders: balance.maxOrders
@@ -7234,6 +7240,8 @@ let PaymentEcComponent = class PaymentEcComponent extends ComponentHelper {
7234
7240
  this.method_data$ = this.methodDataSubject.asObservable();
7235
7241
  this.loading$ = this.loadingSubject.asObservable();
7236
7242
  this.allowAnyPaymentMethod = null;
7243
+ this.balanceMethodRejected = false;
7244
+ this.showMethodError = false;
7237
7245
  this.allData = () => (Object.assign(Object.assign({}, this.paymentService.getUserData().shippingAddress), this.paymentService.getShipmentData()));
7238
7246
  this.setError = (message) => {
7239
7247
  this.error = message;
@@ -7252,8 +7260,34 @@ let PaymentEcComponent = class PaymentEcComponent extends ComponentHelper {
7252
7260
  setTimeout(r => this.emitResult(), 1000);
7253
7261
  };
7254
7262
  this.setMethod = (method) => __awaiter$b(this, void 0, void 0, function* () {
7263
+ var _a, _b, _c, _d;
7255
7264
  this.methodDataSubject.next(null);
7256
- let result = yield this.paymentService.putPayment(method.code);
7265
+ this.showMethodError = false;
7266
+ const result = yield this.paymentService.putPayment(method.code);
7267
+ const balanceCustomer = (_a = result) === null || _a === void 0 ? void 0 : _a.balanceCustomer;
7268
+ const totals = (_b = result) === null || _b === void 0 ? void 0 : _b.totals;
7269
+ this.cartService.updateBalanceAttributes(balanceCustomer, (_c = totals) === null || _c === void 0 ? void 0 : _c.total);
7270
+ const isBalanceMethod = this.isBalanceInAccount(method.code);
7271
+ const allowAny = (_d = balanceCustomer) === null || _d === void 0 ? void 0 : _d.allowAnyPaymentMethod;
7272
+ // Validaciones de error
7273
+ if ((balanceCustomer && allowAny === false && !isBalanceMethod) || // no permite otro método
7274
+ (isBalanceMethod && !balanceCustomer) // seleccionó cuenta corriente pero no hay balance
7275
+ ) {
7276
+ this.handleMethodError('this-payment-method-cannot-be-used', method);
7277
+ return;
7278
+ }
7279
+ // Validación de crédito insuficiente (si no se puede exceder)
7280
+ if (isBalanceMethod &&
7281
+ balanceCustomer &&
7282
+ totals &&
7283
+ balanceCustomer.allowExceedBalance === false &&
7284
+ balanceCustomer.creditAmount < totals.total) {
7285
+ this.toastr.show('insufficient_credit');
7286
+ this.balanceMethodRejected = true;
7287
+ }
7288
+ else if (isBalanceMethod) {
7289
+ this.balanceMethodRejected = false;
7290
+ }
7257
7291
  this.methodDataSubject.next(method);
7258
7292
  // this.isMP(method.code) && this.getPreference();
7259
7293
  });
@@ -7299,6 +7333,11 @@ let PaymentEcComponent = class PaymentEcComponent extends ComponentHelper {
7299
7333
  });
7300
7334
  this.ecOnInit();
7301
7335
  }
7336
+ handleMethodError(message, method) {
7337
+ this.showMethodError = true;
7338
+ this.toastr.show(message);
7339
+ this.methodDataSubject.next(method);
7340
+ }
7302
7341
  setActive(e) {
7303
7342
  const parent = e.target.parentElement.children;
7304
7343
  for (const button of parent) {
@@ -7308,16 +7347,6 @@ let PaymentEcComponent = class PaymentEcComponent extends ComponentHelper {
7308
7347
  }
7309
7348
  e.target.classList.add("active");
7310
7349
  }
7311
- // si cuenta corriente tiene la configuración allowAnyPaymentMethod en false, no se debe permitir otros metodos de pago.
7312
- shouldDisplayMethod(method) {
7313
- if (!method)
7314
- return false;
7315
- if (this.allowAnyPaymentMethod === null)
7316
- return true;
7317
- if (this.allowAnyPaymentMethod)
7318
- return true;
7319
- return this.isBalanceInAccount(method.code);
7320
- }
7321
7350
  };
7322
7351
  PaymentEcComponent.ctorParameters = () => [
7323
7352
  { type: Renderer2 },
@@ -7335,7 +7364,7 @@ __decorate$S([
7335
7364
  PaymentEcComponent = __decorate$S([
7336
7365
  Component({
7337
7366
  selector: 'app-payment-ec',
7338
- template: "<div class=\"container-fluid\" *ngIf=\"(paymentService.methods$ | async) as methods\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card \">\r\n <div class=\"card-header text-dark text-center\">\r\n <h4>{{ 'select-method' | translate }}</h4>\r\n <div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\r\n <div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\r\n <div class=\"d-flex align-content-start justify-content-center flex-wrap\">\r\n <button type=\"button\" class=\"btn btn-outline-secondary mx-1 mb-1\"\r\n *ngFor=\"let method of methods; let x = index\"\r\n (click)=\"setMethod(method) ; setActive($event)\">\r\n {{ method.name | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body text-center\">\r\n <div class=\"row justify-content-center\" *ngIf=\"(method_data$ | async) as method\">\r\n <ng-container *ngIf=\"!loading_internal ; else loading\">\r\n <!-- cuenta corriente tiene una configuari\u00F3n de permitir o no otros metodos de pago -->\r\n <ng-container *ngIf=\"method && shouldDisplayMethod(method)\">\r\n <div class=\"method-container text-dark\" *ngIf=\"isMP(method.code)\">\r\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\r\n <p class=\"px-5\">{{ method.instructions }}</p>\r\n <app-mp-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [paymentServiceInst]=\"paymentService\"\r\n [allData]=\"allData()\"></app-mp-redirect-ec>\r\n </div>\r\n <div class=\"method-container text-dark text-left\"\r\n *ngIf=\"isMPTarjetaDeCredito(method.code)\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\r\n <p class=\"px-5\">{{ method.instructions }}</p>\r\n <div app-mp-credit-ec (ready)=\"verifyValidate()\"\r\n [public_key]=\"getPK(method)\" [user_data]=\"allData()\"\r\n [total_amount]=\"total_amount\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\"\r\n *ngIf=\"isRedirectRedsys(method.code)\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container\r\n *ngIf=\"!method.code.includes('bizum') && !method.code.includes('_out_')\">\r\n <app-redsys-redirect-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\">\r\n </app-redsys-redirect-ec>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"method.code.includes('bizum') || method.code.includes('_out_')\">\r\n <app-redsys-redirect-out-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\">\r\n </app-redsys-redirect-out-ec>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\"\r\n *ngIf=\"isRedirectCecaBank(method.code)\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <app-ceca-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\">\r\n </app-ceca-redirect-ec>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isPeyPalExpress(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-paypal-express-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\"\r\n [total_amount]=\"total_amount\">\r\n </app-paypal-express-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isMobbex(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-mobbex-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBancard(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-bancard-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-bancard-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isDecidir(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-decidir-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-decidir-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark\" *ngIf=\"isMethodOffline(method.code)\">\r\n <p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\r\n <p class=\"px-5\">{{ method.instructions }}</p>\r\n <div class=\"end-button\">\r\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\r\n ('pay-with-offline'| translate) }}</button>\r\n </div>\r\n <ng-container *ngIf=\"(loading$ | async) as load\">\r\n <div class=\"mt-2\" *ngIf=\"load\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCulqi(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <!-- <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\" [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-mobbex-ec> -->\r\n <app-culqi-ec [apiKey]=\"getPKCulqi(method)\" [method]=\"method\"\r\n [amount]=\"total_amount\" [customStyle]=\"true\"\r\n (ready)=\"verifyValidate()\"></app-culqi-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCatastro(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-bancard-catastro-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\"\r\n [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\"></app-bancard-catastro-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBamboo(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-bamboo-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\"></app-bamboo-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark\" *ngIf=\"isBankTransfer(method.code)\">\r\n <div class=\"row px-0 description-cont\">\r\n <ng-container\r\n *ngFor=\"let line of method.description.split('\\r\\n'); let i=index\">\r\n <p [id]=\"'faqs-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n <hr *ngIf=\"method.instructions\">\r\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\r\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\r\n <ng-container\r\n *ngFor=\"let line of method.instructions.split('\\r\\n'); let i=index\">\r\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"end-button\">\r\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\r\n ('pay-with-transfer'\r\n | translate) }}</button>\r\n </div>\r\n <ng-container *ngIf=\"(loading$ | async) as load\">\r\n <div class=\"mt-2\" *ngIf=\"load\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"method-container text-dark\" *ngIf=\"isPlaceToPay(method.code)\">\r\n <p id=\"faqs\" *ngIf=\"method.description\" class=\"qt px-5 \">{{ method.description }}\r\n </p>\r\n <p class=\"px-5\" *ngIf=\"method.instructions\">{{ method.instructions }}</p>\r\n <app-place-to-pay-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [paymentServiceInst]=\"paymentService\" [allData]=\"allData()\">\r\n </app-place-to-pay-ec>\r\n </div>\r\n </ng-container>\r\n <div class=\"method-container text-dark\" *ngIf=\"isBalanceInAccount(method.code)\">\r\n <div class=\"row px-0 description-cont\" *ngIf=\"method.description\">\r\n <ng-container *ngFor=\"let line of method.description.split('\\r\\n'); let i = index\">\r\n <p [id]=\"'cc-desc-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <hr *ngIf=\"method.instructions\">\r\n\r\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\r\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\r\n <ng-container *ngFor=\"let line of method.instructions.split('\\r\\n'); let i = index\">\r\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"end-button\">\r\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">\r\n {{ 'pay-with' | translate }} {{ method.name }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"(loading$ | async) as load\">\r\n <div class=\"mt-2\" *ngIf=\"load\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #mercadoPago>\r\n <div class=\"row \">\r\n <div class=\"col-12 text-center\">\r\n <app-loading-inline-ec *ngIf=\"loading_internal_mp\"></app-loading-inline-ec>\r\n <form action=\"javascript:void(0)\" #formContainer></form>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #loading>\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n</ng-template>",
7367
+ template: "<div class=\"container-fluid\" *ngIf=\"(paymentService.methods$ | async) as methods\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card \">\r\n <div class=\"card-header text-dark text-center\">\r\n <h4>{{ 'select-method' | translate }}</h4>\r\n <div class=\"btn-toolbar justify-content-center\" role=\"toolbar\" aria-label=\"Envios toolbar\">\r\n <div class=\"\" role=\"group\" aria-label=\"Grupo botones envio\">\r\n <div class=\"d-flex align-content-start justify-content-center flex-wrap\">\r\n <button type=\"button\" class=\"btn btn-outline-secondary mx-1 mb-1\"\r\n *ngFor=\"let method of methods; let x = index\"\r\n (click)=\"setMethod(method) ; setActive($event)\">\r\n {{ method.name | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body text-center\">\r\n <div class=\"row justify-content-center\" *ngIf=\"(method_data$ | async) as method\">\r\n <ng-container *ngIf=\"!loading_internal ; else loading\">\r\n <!-- cuenta corriente tiene una configuari\u00F3n de permitir o no otros metodos de pago -->\r\n <ng-container *ngIf=\"method && !showMethodError\">\r\n <div class=\"method-container text-dark\" *ngIf=\"isMP(method.code)\">\r\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\r\n <p class=\"px-5\">{{ method.instructions }}</p>\r\n <app-mp-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [paymentServiceInst]=\"paymentService\"\r\n [allData]=\"allData()\"></app-mp-redirect-ec>\r\n </div>\r\n <div class=\"method-container text-dark text-left\"\r\n *ngIf=\"isMPTarjetaDeCredito(method.code)\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <p id=\"faqs\" class=\"qt px-5 \">{{ method.description }}</p>\r\n <p class=\"px-5\">{{ method.instructions }}</p>\r\n <div app-mp-credit-ec (ready)=\"verifyValidate()\"\r\n [public_key]=\"getPK(method)\" [user_data]=\"allData()\"\r\n [total_amount]=\"total_amount\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\"\r\n *ngIf=\"isRedirectRedsys(method.code)\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container\r\n *ngIf=\"!method.code.includes('bizum') && !method.code.includes('_out_')\">\r\n <app-redsys-redirect-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\">\r\n </app-redsys-redirect-ec>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"method.code.includes('bizum') || method.code.includes('_out_')\">\r\n <app-redsys-redirect-out-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\">\r\n </app-redsys-redirect-out-ec>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\"\r\n *ngIf=\"isRedirectCecaBank(method.code)\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <app-ceca-redirect-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\">\r\n </app-ceca-redirect-ec>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isPeyPalExpress(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-paypal-express-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\"\r\n [total_amount]=\"total_amount\">\r\n </app-paypal-express-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isMobbex(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-mobbex-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBancard(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-bancard-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-bancard-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isDecidir(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-decidir-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-decidir-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark\" *ngIf=\"isMethodOffline(method.code)\">\r\n <p id=\"faqs\" class=\"qt px-5\">{{ method.description }}</p>\r\n <p class=\"px-5\">{{ method.instructions }}</p>\r\n <div class=\"end-button\">\r\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\r\n ('pay-with-offline'| translate) }}</button>\r\n </div>\r\n <ng-container *ngIf=\"(loading$ | async) as load\">\r\n <div class=\"mt-2\" *ngIf=\"load\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCulqi(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <!-- <app-mobbex-ec (ready)=\"verifyValidate($event)\" [method]=\"method\" [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\">\r\n </app-mobbex-ec> -->\r\n <app-culqi-ec [apiKey]=\"getPKCulqi(method)\" [method]=\"method\"\r\n [amount]=\"total_amount\" [customStyle]=\"true\"\r\n (ready)=\"verifyValidate()\"></app-culqi-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isCatastro(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-bancard-catastro-ec (ready)=\"verifyValidate($event)\"\r\n [method]=\"method\" [user_data]=\"allData()\"\r\n [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\"></app-bancard-catastro-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark text-start\" *ngIf=\"isBamboo(method.code)\">\r\n <div class=\"container\">\r\n <div class=\"row justify-content-center\">\r\n <div class=\"col-12\">\r\n <app-bamboo-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [user_data]=\"allData()\" [paymentServiceInst]=\"paymentService\"\r\n [total_amount]=\"total_amount\"></app-bamboo-ec>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"method-container text-dark\" *ngIf=\"isBankTransfer(method.code)\">\r\n <div class=\"row px-0 description-cont\">\r\n <ng-container\r\n *ngFor=\"let line of method.description.split('\\r\\n'); let i=index\">\r\n <p [id]=\"'faqs-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n <hr *ngIf=\"method.instructions\">\r\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\r\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\r\n <ng-container\r\n *ngFor=\"let line of method.instructions.split('\\r\\n'); let i=index\">\r\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"end-button\">\r\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">{{\r\n ('pay-with-transfer'\r\n | translate) }}</button>\r\n </div>\r\n <ng-container *ngIf=\"(loading$ | async) as load\">\r\n <div class=\"mt-2\" *ngIf=\"load\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"method-container text-dark\" *ngIf=\"isPlaceToPay(method.code)\">\r\n <p id=\"faqs\" *ngIf=\"method.description\" class=\"qt px-5 \">{{ method.description }}\r\n </p>\r\n <p class=\"px-5\" *ngIf=\"method.instructions\">{{ method.instructions }}</p>\r\n <app-place-to-pay-ec (ready)=\"verifyValidate($event)\" [method]=\"method\"\r\n [paymentServiceInst]=\"paymentService\" [allData]=\"allData()\">\r\n </app-place-to-pay-ec>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"showMethodError\">\r\n <div class=\"text-danger mt-2 px-3 fw-bold\">\r\n {{ 'this-payment-method-cannot-be-used' | translate }}\r\n </div>\r\n </ng-container>\r\n <div class=\"method-container text-dark\"\r\n *ngIf=\"isBalanceInAccount(method.code) && !showMethodError\">\r\n <div class=\"row px-0 description-cont\" *ngIf=\"method.description\">\r\n <ng-container *ngFor=\"let line of method.description.split('\\r\\n'); let i = index\">\r\n <p [id]=\"'cc-desc-'+i\" [class]=\"'qt px-5 m-0 line-'+i\">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <hr *ngIf=\"method.instructions\">\r\n\r\n <div *ngIf=\"method.instructions\" class=\"row px-0 instructions-cont mb-1\">\r\n <h5 class=\"instructions-title\">{{ ('instructions' | translate) }}</h5>\r\n <ng-container *ngFor=\"let line of method.instructions.split('\\r\\n'); let i = index\">\r\n <p [class]=\"'px-5 m-0 instructions-text line-'+i \">{{ line }}</p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!balanceMethodRejected; else showCreditError\">\r\n <div class=\"end-button\">\r\n <button class=\"btn comprar\" (click)=\"setLoading() && verifyValidate()\">\r\n {{ 'pay-with' | translate }} {{ method.name }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #showCreditError>\r\n <div class=\"text-danger mt-2 px-3 fw-bold\">\r\n {{ 'not-enough-credits-to-complete' | translate }}\r\n </div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"(loading$ | async) as load\">\r\n <div class=\"mt-2\" *ngIf=\"load\">\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #mercadoPago>\r\n <div class=\"row \">\r\n <div class=\"col-12 text-center\">\r\n <app-loading-inline-ec *ngIf=\"loading_internal_mp\"></app-loading-inline-ec>\r\n <form action=\"javascript:void(0)\" #formContainer></form>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #loading>\r\n <app-loading-inline-ec></app-loading-inline-ec>\r\n</ng-template>",
7339
7368
  providers: [PaymentService],
7340
7369
  styles: ["div.col-12 form{text-align:center}.option-container>div{margin-bottom:15px}@media only screen and (min-width:600px){.option-container{display:flex;justify-content:space-between;margin-top:20px}}.method-container{width:100%}.active{background-color:#000!important;color:#fff!important}.comprar{background:#000;color:#fff;display:inline-block;font-size:18px;font-weight:600;padding:10px 25px;text-decoration:none;text-transform:uppercase}"]
7341
7370
  })
@@ -8615,6 +8644,7 @@ let ProductDetailService = class ProductDetailService {
8615
8644
  this.product$ = this.productSubject.asObservable();
8616
8645
  this.options$ = this.optionsSubject.asObservable();
8617
8646
  this.asociatedData$ = this.asociatedDataSubject.asObservable();
8647
+ this.balanceCustomer = null;
8618
8648
  /**
8619
8649
  * @param code Identificador del producto
8620
8650
  * @param variant Indica si se está solicitando un producto por su codigo, o por el codigo correspondiente a una de sus variantes
@@ -8746,12 +8776,7 @@ let ProductDetailService = class ProductDetailService {
8746
8776
  let asociated = {};
8747
8777
  if (this.isReady()) {
8748
8778
  asociated.stock = this.variants[0].stock;
8749
- if (this.variants[0].priceWithoutTaxes) {
8750
- asociated.price = this.variants[0].priceWithoutTaxes.toString();
8751
- }
8752
- else {
8753
- asociated.price = this.variants[0].price.toString();
8754
- }
8779
+ asociated.price = this.variants[0].price.toString();
8755
8780
  asociated.saleprice = this.variants[0].saleprice && this.variants[0].saleprice.toString() || undefined;
8756
8781
  asociated.discount = ((_a = this.variants[0]) === null || _a === void 0 ? void 0 : _a.discount) || undefined;
8757
8782
  asociated.properties = this.variants[0].properties ? this.beautifyProperties(this.variants[0].properties) : undefined;
@@ -8856,14 +8881,16 @@ let ProductDetailService = class ProductDetailService {
8856
8881
  return true;
8857
8882
  };
8858
8883
  this.validatePriceAndCredits = (price) => {
8859
- if (this.creditAmount === null) {
8860
- console.log('No hay configuración de créditos para este usuario.');
8884
+ if (this.balanceCustomer === null) {
8861
8885
  return true;
8862
8886
  }
8863
- if (this.remainingCredits === undefined) {
8887
+ if (this.balanceCustomer.allowAnyPaymentMethod) {
8888
+ return true;
8889
+ }
8890
+ if (this.balanceCustomer.remainingCredits === undefined) {
8864
8891
  return false;
8865
8892
  }
8866
- if (price > this.remainingCredits) {
8893
+ if (price > this.balanceCustomer.remainingCredits) {
8867
8894
  this.toastrService.show('not-enough-credits');
8868
8895
  return false;
8869
8896
  }
@@ -8873,11 +8900,8 @@ let ProductDetailService = class ProductDetailService {
8873
8900
  this.cartService.getTotalAmount().subscribe((totalAmount) => {
8874
8901
  this.currentTotalAmount = totalAmount;
8875
8902
  });
8876
- this.cartService.getCreditAmount().subscribe((creditAmount) => {
8877
- this.creditAmount = creditAmount;
8878
- });
8879
- this.cartService.getRemainingCredits().subscribe((remainingCredits) => {
8880
- this.remainingCredits = remainingCredits;
8903
+ this.cartService.balanceCustomer$.subscribe((balanceCustomer) => {
8904
+ this.balanceCustomer = balanceCustomer;
8881
8905
  });
8882
8906
  };
8883
8907
  // Cuando haya modelos de respuesta, validamos que no se intente cargar un producto incompleto