@infrab4a/connect-angular 3.9.4 → 3.9.7

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.
@@ -1,7 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Inject, Injectable } from '@angular/core';
3
- import { Buy2WinFirestoreRepository, Checkout, LineItem, NotFoundError, RoundProductPricesHelper, Shops, Where, isNil, } from '@infrab4a/connect';
4
- import { Subject, from, iif, of } from 'rxjs';
3
+ import { Buy2WinFirestoreRepository, Checkout, isNil, LineItem, NotFoundError, RoundProductPricesHelper, Shops, Where, } from '@infrab4a/connect';
4
+ import { from, iif, of, Subject } from 'rxjs';
5
5
  import { catchError, concatMap, map, mergeMap, tap } from 'rxjs/operators';
6
6
  import { DEFAULT_SHOP } from '../consts';
7
7
  import { AuthService } from './auth.service';
@@ -11,11 +11,12 @@ import * as i1 from "./auth.service";
11
11
  import * as i2 from "./checkout.service";
12
12
  import * as i3 from "@infrab4a/connect";
13
13
  export class CartService {
14
- constructor(authService, checkoutService, defaultShop, productRepository, variantRepository, buy2WinRepository) {
14
+ constructor(authService, checkoutService, defaultShop, productRepository, categoryRepository, variantRepository, buy2WinRepository) {
15
15
  this.authService = authService;
16
16
  this.checkoutService = checkoutService;
17
17
  this.defaultShop = defaultShop;
18
18
  this.productRepository = productRepository;
19
+ this.categoryRepository = categoryRepository;
19
20
  this.variantRepository = variantRepository;
20
21
  this.buy2WinRepository = buy2WinRepository;
21
22
  this.cartSubject = new Subject();
@@ -154,7 +155,10 @@ export class CartService {
154
155
  catch (error) {
155
156
  if (!(error instanceof NotFoundError))
156
157
  throw error;
157
- variant = yield this.variantRepository.get({ id: productId });
158
+ const { data: variants } = yield this.variantRepository.find({ filters: { id: productId } });
159
+ variant = variants.shift();
160
+ if (!variant)
161
+ throw error;
158
162
  product = yield this.productRepository.get({ id: variant.productId });
159
163
  }
160
164
  return Object.assign(Object.assign({}, product.toPlain()), (variant && Object.assign({}, variant.toPlain())));
@@ -182,12 +186,18 @@ export class CartService {
182
186
  if (!(campaign.startDate <= today) && !(campaign.endDate >= today))
183
187
  continue;
184
188
  if (campaign.activeCategory) {
185
- const categoriesCampaing = campaign.categories.map((c) => c.id);
189
+ const categoriesCampaing = campaign.categories.map((c) => c.id.toString());
190
+ const categoriesCampaingFullTree = [];
191
+ for (const id of categoriesCampaing) {
192
+ const children = yield this.categoryRepository.getChildren(parseInt(id));
193
+ categoriesCampaingFullTree.push(id, ...children.map((c) => c.id.toString()));
194
+ }
195
+ const categoriesCampaingTree = [...new Set(categoriesCampaingFullTree)];
186
196
  const filterProductsCategories = checkout.lineItems.filter((l) => {
187
197
  var _a;
188
198
  if (!l.categories || !((_a = l.categories) === null || _a === void 0 ? void 0 : _a.length))
189
199
  return true;
190
- return l.categories.some((c) => categoriesCampaing.some((cat) => cat == c));
200
+ return l.categories.some((c) => categoriesCampaingTree.some((cat) => cat == c));
191
201
  });
192
202
  if (filterProductsCategories.length) {
193
203
  const cartTotalCategories = filterProductsCategories.reduce((a, b) => a + b.pricePaid * b.quantity, 0);
@@ -248,7 +258,7 @@ export class CartService {
248
258
  });
249
259
  }
250
260
  }
251
- CartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, deps: [{ token: i1.AuthService }, { token: i2.CheckoutService }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'VariantRepository' }, { token: 'Buy2WinRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
261
+ CartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, deps: [{ token: i1.AuthService }, { token: i2.CheckoutService }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'CategoryRepository' }, { token: 'VariantRepository' }, { token: 'Buy2WinRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
252
262
  CartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService });
253
263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, decorators: [{
254
264
  type: Injectable
@@ -258,6 +268,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
258
268
  }] }, { type: undefined, decorators: [{
259
269
  type: Inject,
260
270
  args: ['ProductRepository']
271
+ }] }, { type: undefined, decorators: [{
272
+ type: Inject,
273
+ args: ['CategoryRepository']
261
274
  }] }, { type: undefined, decorators: [{
262
275
  type: Inject,
263
276
  args: ['VariantRepository']
@@ -265,4 +278,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
265
278
  type: Inject,
266
279
  args: ['Buy2WinRepository']
267
280
  }] }]; } });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsUUFBUSxFQUNSLFFBQVEsRUFDUixhQUFhLEVBR2Isd0JBQXdCLEVBRXhCLEtBQUssRUFJTCxLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFjLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTs7Ozs7QUFRcEQsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFDbUIsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDVixXQUFrQixFQUNYLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsaUJBQTZDO1FBTDFFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNWLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ1gsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNEI7UUFSckYsZ0JBQVcs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dCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQnV5MldpbixcbiAgQnV5MldpbkZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIENoZWNrb3V0LFxuICBMaW5lSXRlbSxcbiAgTm90Rm91bmRFcnJvcixcbiAgUHJvZHVjdCxcbiAgUHJvZHVjdFJlcG9zaXRvcnksXG4gIFJvdW5kUHJvZHVjdFByaWNlc0hlbHBlcixcbiAgU2hvcFByaWNlLFxuICBTaG9wcyxcbiAgVXNlcixcbiAgVmFyaWFudCxcbiAgVmFyaWFudFJlcG9zaXRvcnksXG4gIFdoZXJlLFxuICBpc05pbCxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tLCBpaWYsIG9mIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgbWFwLCBtZXJnZU1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IERFRkFVTFRfU0hPUCB9IGZyb20gJy4uL2NvbnN0cydcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSdcbmltcG9ydCB7IENoZWNrb3V0U2VydmljZSB9IGZyb20gJy4vY2hlY2tvdXQuc2VydmljZSdcbmltcG9ydCB7IFJlcXVpcmVkQ2hlY2tvdXREYXRhIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IHR5cGUgQ2FydCA9IHtcbiAgW2lkOiBzdHJpbmddOiBMaW5lSXRlbVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xuICBwcml2YXRlIGNhcnRTdWJqZWN0OiBTdWJqZWN0PENhcnQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UsXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIEBJbmplY3QoJ1Byb2R1Y3RSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnVmFyaWFudFJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IHZhcmlhbnRSZXBvc2l0b3J5OiBWYXJpYW50UmVwb3NpdG9yeSxcbiAgICBASW5qZWN0KCdCdXkyV2luUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgYnV5MldpblJlcG9zaXRvcnk6IEJ1eTJXaW5GaXJlc3RvcmVSZXBvc2l0b3J5LFxuICApIHt9XG5cbiAgYWRkSXRlbShpdGVtOiBMaW5lSXRlbSwgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpKS5waXBlKFxuICAgICAgY29uY2F0TWFwKGFzeW5jIChjaGVja291dCkgPT4gYXdhaXQgdGhpcy5idWlsZExpbmVJdGVtKHsgY2hlY2tvdXQsIGl0ZW0sIHF1YW50aXR5OiBxdWFudGl0eSB8fCAxIH0pKSxcbiAgICAgIG1lcmdlTWFwKCh7IGNoZWNrb3V0LCBsaW5lSXRlbSB9KSA9PiB0aGlzLnVwZGF0ZUxpbmVJdGVtSW5DYXJ0KGxpbmVJdGVtLCBxdWFudGl0eSB8fCAxLCBjaGVja291dCBhcyBDaGVja291dCkpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIGRlY3JlYXNlSXRlbShpdGVtOiBMaW5lSXRlbSk6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrb3V0SXRlbSA9IGNoZWNrb3V0LmxpbmVJdGVtcz8uZmluZCgobGluZUl0ZW0pID0+IGxpbmVJdGVtLmlkID09PSBpdGVtLmlkKVxuXG4gICAgICAgIGlmICghaXNOaWwoY2hlY2tvdXRJdGVtKSkgY2hlY2tvdXRJdGVtLnF1YW50aXR5IC09IGNoZWNrb3V0SXRlbS5xdWFudGl0eSA+IDEgPyAxIDogMFxuXG4gICAgICAgIHJldHVybiBjaGVja291dFxuICAgICAgfSksXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVDaGVja291dExpbmVJdGVtcyhjaGVja291dCkpLFxuICAgICAgbWFwKChjaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QoY2hlY2tvdXQubGluZUl0ZW1zKSksXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXG4gICAgKVxuICB9XG5cbiAgZ2V0Q2FydChjaGVja291dD86IFJlcXVpcmVkQ2hlY2tvdXREYXRhKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgdGhpcy5idWlsZENhcnRGcm9tQ2hlY2tvdXQoY2hlY2tvdXQpLnN1YnNjcmliZSgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKVxuXG4gICAgcmV0dXJuIHRoaXMuY2FydFN1YmplY3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZFxuICAgKi9cbiAgZ2V0VmFyaWFudFByaWNlRGlzY291bnQoaXRlbTogTGluZUl0ZW0pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXIoKS5waXBlKFxuICAgICAgY29uY2F0TWFwKCh1c2VyKSA9PlxuICAgICAgICBpaWYoXG4gICAgICAgICAgKCkgPT4gdXNlci5pc1N1YnNjcmliZXIgJiYgISFpdGVtLnByaWNlLnN1YnNjcmliZXJQcmljZSxcbiAgICAgICAgICBvZihpdGVtLnByaWNlLnN1YnNjcmliZXJQcmljZSksXG4gICAgICAgICAgb2YoaXRlbS5wcmljZS5wcmljZSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihpdGVtLnByaWNlLnByaWNlKSksXG4gICAgKVxuICB9XG5cbiAgcmVtb3ZlSXRlbShpdGVtOiBMaW5lSXRlbSk6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hlY2tvdXQubGluZUl0ZW1zLmZpbmRJbmRleCgobGluZUl0ZW0pID0+IGxpbmVJdGVtLmlkID09PSBpdGVtLmlkKVxuXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSBjaGVja291dC5saW5lSXRlbXMuc3BsaWNlKGluZGV4LCAxKVxuXG4gICAgICAgIHJldHVybiBjaGVja291dFxuICAgICAgfSksXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVDaGVja291dExpbmVJdGVtcyhjaGVja291dCkpLFxuICAgICAgbWFwKChjaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QoY2hlY2tvdXQubGluZUl0ZW1zKSksXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXG4gICAgKVxuICB9XG5cbiAgdXBkYXRlVXNlckNhcnQodXNlcjogVXNlcik6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0KSA9PlxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVDaGVja291dFVzZXIoQ2hlY2tvdXQudG9JbnN0YW5jZSh7IC4uLmNoZWNrb3V0LnRvUGxhaW4oKSwgdXNlciB9KSksXG4gICAgICApLFxuICAgICAgY29uY2F0TWFwKGFzeW5jIChjaGVja291dCkgPT5cbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2VcbiAgICAgICAgICAudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoXG4gICAgICAgICAgICBDaGVja291dC50b0luc3RhbmNlKHtcbiAgICAgICAgICAgICAgLi4uY2hlY2tvdXQudG9QbGFpbigpLFxuICAgICAgICAgICAgICBsaW5lSXRlbXM6IGNoZWNrb3V0LmxpbmVJdGVtcz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tvdXQubGluZUl0ZW1zPy5tYXAoYXN5bmMgKGl0ZW0pID0+IChhd2FpdCB0aGlzLmJ1aWxkTGluZUl0ZW0oeyBjaGVja291dCwgaXRlbSB9KSkubGluZUl0ZW0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRvUHJvbWlzZSgpLFxuICAgICAgKSxcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGNoZWNrb3V0LmxpbmVJdGVtcykpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIGNsZWFyQ2FydCgpOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKS5waXBlKFxuICAgICAgbWFwKChjaGVja291dCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5jbGVhckNoZWNrb3V0RnJvbVNlc3Npb24oKVxuICAgICAgICByZXR1cm4gY2hlY2tvdXRcbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKChvbGRDaGVja291dCkgPT4gdGhpcy5idWlsZENhcnRGcm9tQ2hlY2tvdXQob2xkQ2hlY2tvdXQpKSxcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2FydEZyb21DaGVja291dChjaGVja291dERhdGE/OiBSZXF1aXJlZENoZWNrb3V0RGF0YSk6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dChjaGVja291dERhdGEpLnBpcGUoXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiBjaGVja291dC5saW5lSXRlbXMpLFxuICAgICAgY29uY2F0TWFwKChsaW5lSXRlbXMpID0+IG9mKHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGxpbmVJdGVtcykpKSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVJdGVtSW5DYXJ0ID0gKGxpbmVJdGVtOiBMaW5lSXRlbSwgcXVhbnRpdHk6IG51bWJlciwgY2hlY2tvdXQ/OiBDaGVja291dCk6IE9ic2VydmFibGU8Q2FydD4gPT5cbiAgICAoaXNOaWwoY2hlY2tvdXQpID8gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKSA6IG9mKGNoZWNrb3V0KSkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY2hlY2tvdXRMb2FkZWQpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IExpbmVJdGVtW10gPSBbXVxuICAgICAgICBjb25zdCBpbmRleCA9IGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtcz8ubWFwKChjaGVja291dEl0ZW0pID0+IGNoZWNrb3V0SXRlbS5pZCkuaW5kZXhPZihsaW5lSXRlbS5pZClcblxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtc1tpbmRleF0ucXVhbnRpdHkgKz0gcXVhbnRpdHlcbiAgICAgICAgICBjaGVja291dExvYWRlZC5saW5lSXRlbXNbaW5kZXhdLnByaWNlUGFpZCA9IGxpbmVJdGVtLnByaWNlUGFpZFxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBjaGVja291dExvYWRlZC5saW5lSXRlbXMgPSBpdGVtcy5jb25jYXQoXG4gICAgICAgICAgICBjaGVja291dExvYWRlZC5saW5lSXRlbXMgPyBjaGVja291dExvYWRlZC5saW5lSXRlbXMuY29uY2F0KFtsaW5lSXRlbV0pIDogW2xpbmVJdGVtXSxcbiAgICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlXG4gICAgICAgICAgLnVwZGF0ZUNoZWNrb3V0TGluZUl0ZW1zKGNoZWNrb3V0TG9hZGVkKVxuICAgICAgICAgIC5waXBlKG1hcCgodXBkYXRlZENoZWNrb3V0KSA9PiB0aGlzLmdlbmVyYXRlQ2FydE9iamVjdCh1cGRhdGVkQ2hlY2tvdXQubGluZUl0ZW1zKSkpXG4gICAgICB9KSxcbiAgICApXG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhcnRPYmplY3QgPSAoaXRlbXM6IExpbmVJdGVtW10pOiBDYXJ0ID0+XG4gICAgaXRlbXNcbiAgICAgID8gaXRlbXMucmVkdWNlKFxuICAgICAgICAgIChjYXJ0LCBpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uY2FydCxcbiAgICAgICAgICAgIFtpdGVtLmlkXTogTGluZUl0ZW0udG9JbnN0YW5jZSh7XG4gICAgICAgICAgICAgIC4uLihjYXJ0W2l0ZW0uaWRdIHx8IGl0ZW0pLFxuICAgICAgICAgICAgICBxdWFudGl0eTogKGNhcnRbaXRlbS5pZF0/LnF1YW50aXR5IHx8IDApICsgKGl0ZW0ucXVhbnRpdHkgPyBpdGVtLnF1YW50aXR5IDogMSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKVxuICAgICAgOiBbXVxuXG4gIHByaXZhdGUgYnVpbGRMaW5lSXRlbSA9IGFzeW5jICh7XG4gICAgY2hlY2tvdXQsXG4gICAgaXRlbSxcbiAgICBxdWFudGl0eSxcbiAgfToge1xuICAgIGNoZWNrb3V0OiBSZXF1aXJlZENoZWNrb3V0RGF0YVxuICAgIGl0ZW06IExpbmVJdGVtXG4gICAgcXVhbnRpdHk/OiBudW1iZXJcbiAgfSk6IFByb21pc2U8eyBjaGVja291dDogUGFydGlhbDxDaGVja291dD47IGxpbmVJdGVtOiBMaW5lSXRlbSB9PiA9PiB7XG4gICAgY29uc3QgcHJvZHVjdCA9IGF3YWl0IHRoaXMuZ2V0UHJvZHVjdERhdGEoaXRlbS5pZClcblxuICAgIGl0ZW0ucXVhbnRpdHkgPSBpdGVtPy5xdWFudGl0eSB8fCBjaGVja291dD8ubGluZUl0ZW1zPy5maW5kKChsaW5lSXRlbSkgPT4gbGluZUl0ZW0uaWQgPT09IGl0ZW0uaWQpPy5xdWFudGl0eSB8fCAwXG5cbiAgICBpZiAodGhpcy5jaGVja01heFN0b2NrKGl0ZW0sIHF1YW50aXR5IHx8IDApKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXNjdWxwZSEgVGVtb3MgYXBlbmFzICcgKyBpdGVtLnN0b2NrPy5xdWFudGl0eSArICcgZW0gZXN0b3F1ZS4nKVxuXG4gICAgY29uc3QgaW1hZ2UgPSBpdGVtLmltYWdlIHx8IGl0ZW0uaW1hZ2VzPy5zaGlmdCgpXG4gICAgY29uc3QgeyBpZCwgbmFtZSwgRUFOLCBzbHVnLCBzdG9jaywgcHJpY2UsIHdlaWdodCwgc2t1LCB0eXBlIH0gPSBpdGVtXG4gICAgY29uc3QgaXNHaWZ0ID0gaXRlbS5pc0dpZnQgfHwgbnVsbFxuICAgIGNvbnN0IHByaWNlUGFpZCA9IHRoaXMuZ2V0UHJvZHVjdFByaWNlKHtcbiAgICAgIHByb2R1Y3Q6IGl0ZW0sXG4gICAgICBzaG9wOiBjaGVja291dC5zaG9wIHx8IHRoaXMuZGVmYXVsdFNob3AsXG4gICAgICBpc1N1YnNjcmliZXI6IGNoZWNrb3V0LnVzZXI/LmlzU3Vic2NyaWJlcixcbiAgICB9KVxuXG4gICAgUm91bmRQcm9kdWN0UHJpY2VzSGVscGVyLnJvdW5kUHJvZHVjdFByaWNlcyhpdGVtKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrb3V0LFxuICAgICAgbGluZUl0ZW06IExpbmVJdGVtLnRvSW5zdGFuY2Uoe1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZTogbmFtZSA/PyBwcm9kdWN0Lm5hbWUsXG4gICAgICAgIEVBTjogRUFOID8/IHByb2R1Y3QuRUFOLFxuICAgICAgICBicmFuZDogcHJvZHVjdC5icmFuZCxcbiAgICAgICAgc2x1Zzogc2x1ZyA/PyBwcm9kdWN0LnNsdWcsXG4gICAgICAgIHNrdTogc2t1ID8/IHByb2R1Y3Quc2t1LFxuICAgICAgICBzdG9jayxcbiAgICAgICAgcHJpY2U6IHRoaXMucm91bmRQcmljZShwcmljZSksXG4gICAgICAgIGltYWdlLFxuICAgICAgICB3ZWlnaHQ6IHdlaWdodCA/PyBwcm9kdWN0LndlaWdodCxcbiAgICAgICAgcXVhbnRpdHk6IChpdGVtLnF1YW50aXR5IHx8IDApICsgKHF1YW50aXR5IHx8IDApLFxuICAgICAgICBwcmljZVBhaWQsXG4gICAgICAgIGNhdGVnb3JpZXM6IHByb2R1Y3QuY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgICAgaXNHaWZ0OiBpc0dpZnQgPz8gbnVsbCxcbiAgICAgICAgY29zdFByaWNlOiBwcm9kdWN0LmNvc3RQcmljZSA/PyAwLFxuICAgICAgICB0eXBlLFxuICAgICAgfSksXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByb3VuZFByaWNlKHByb2R1Y3RQcmljZTogU2hvcFByaWNlKTogU2hvcFByaWNlIHtcbiAgICBjb25zdCB7IHByaWNlLCBmdWxsUHJpY2UsIHN1YnNjcmliZXJQcmljZSB9ID0gcHJvZHVjdFByaWNlXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb2R1Y3RQcmljZSxcbiAgICAgIHByaWNlOiBOdW1iZXIocHJpY2UudG9GaXhlZCgyKSksXG4gICAgICBmdWxsUHJpY2U6IE51bWJlcihmdWxsUHJpY2UudG9GaXhlZCgyKSksXG4gICAgICAuLi4oc3Vic2NyaWJlclByaWNlICYmIHsgc3Vic2NyaWJlclByaWNlOiBOdW1iZXIoc3Vic2NyaWJlclByaWNlLnRvRml4ZWQoMikpIH0pLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHJvZHVjdERhdGEocHJvZHVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRpYWw8UHJvZHVjdD4+IHtcbiAgICBsZXQgcHJvZHVjdDogUHJvZHVjdFxuICAgIGxldCB2YXJpYW50OiBWYXJpYW50XG5cbiAgICB0cnkge1xuICAgICAgcHJvZHVjdCA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZ2V0KHsgaWQ6IHByb2R1Y3RJZCB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpKSB0aHJvdyBlcnJvclxuXG4gICAgICB2YXJpYW50ID0gYXdhaXQgdGhpcy52YXJpYW50UmVwb3NpdG9yeS5nZXQoeyBpZDogcHJvZHVjdElkIH0pXG4gICAgICBwcm9kdWN0ID0gYXdhaXQgdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5nZXQoeyBpZDogdmFyaWFudC5wcm9kdWN0SWQgfSlcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJvZHVjdC50b1BsYWluKCksXG4gICAgICAuLi4odmFyaWFudCAmJiB7IC4uLnZhcmlhbnQudG9QbGFpbigpIH0pLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvZHVjdFByaWNlID0gKHtcbiAgICBwcm9kdWN0LFxuICAgIGlzU3Vic2NyaWJlcixcbiAgfToge1xuICAgIHByb2R1Y3Q6IExpbmVJdGVtXG4gICAgc2hvcDogU2hvcHNcbiAgICBpc1N1YnNjcmliZXI6IGJvb2xlYW5cbiAgfSk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgaW5mbyA9IHByb2R1Y3QucHJpY2VcblxuICAgIGlmIChwcm9kdWN0LmlzR2lmdCkgcmV0dXJuIDBcblxuICAgIHJldHVybiBpc1N1YnNjcmliZXIgJiYgaW5mby5zdWJzY3JpYmVyUHJpY2UgPiAwXG4gICAgICA/IE51bWJlcihpbmZvLnN1YnNjcmliZXJQcmljZS50b0ZpeGVkKDIpKVxuICAgICAgOiBOdW1iZXIoaW5mby5wcmljZS50b0ZpeGVkKDIpKVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja01heFN0b2NrID0gKGl0ZW06IExpbmVJdGVtLCBxdWFudGl0eTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbWF4U3RvY2sgPSBpdGVtLnN0b2NrPy5xdWFudGl0eSB8fCAwXG4gICAgY29uc3QgY3VycmVudEl0ZW1BbW91bnQgPSBpdGVtLnF1YW50aXR5IHx8IDBcblxuICAgIHJldHVybiBjdXJyZW50SXRlbUFtb3VudCArIHF1YW50aXR5ID4gbWF4U3RvY2tcbiAgfVxuXG4gIGdldEdpZnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXG4gICAgICBtZXJnZU1hcChhc3luYyAoY2hlY2tvdXQpID0+IHtcbiAgICAgICAgY29uc3Qgbm90R2lmdEl0ZW1zOiBMaW5lSXRlbVtdID0gY2hlY2tvdXQubGluZUl0ZW1zID8gY2hlY2tvdXQubGluZUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNHaWZ0KSA6IFtdXG5cbiAgICAgICAgaWYgKCFub3RHaWZ0SXRlbXMubGVuZ3RoKSByZXR1cm4geyAuLi5jaGVja291dCwgbGluZUl0ZW1zOiBbXSB9IGFzIENoZWNrb3V0XG5cbiAgICAgICAgY29uc3QgY2FydFRvdGFsID0gbm90R2lmdEl0ZW1zLnJlZHVjZSgoYSwgYikgPT4gYSArIGIucHJpY2VQYWlkICogYi5xdWFudGl0eSwgMClcblxuICAgICAgICBjb25zdCBjYW1wYWlnbnMgPSBhd2FpdCB0aGlzLmJ1eTJXaW5SZXBvc2l0b3J5XG4gICAgICAgICAgLmZpbmQoe1xuICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICBhY3RpdmU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IHRydWUgfSxcbiAgICAgICAgICAgICAgc2hvcDogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogdGhpcy5kZWZhdWx0U2hvcCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBkYXRhLmRhdGEpXG5cbiAgICAgICAgaWYgKCFjYW1wYWlnbnMubGVuZ3RoKSByZXR1cm4geyAuLi5jaGVja291dCwgbGluZUl0ZW1zOiBub3RHaWZ0SXRlbXMgfSBhcyBDaGVja291dFxuXG4gICAgICAgIGNvbnN0IGVsZWdpYmxlQ2FtcGFpZ25zOiBCdXkyV2luW10gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgY2FtcGFpZ24gb2YgY2FtcGFpZ25zKSB7XG4gICAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG5cbiAgICAgICAgICBpZiAoIShjYW1wYWlnbi5zdGFydERhdGUgPD0gdG9kYXkpICYmICEoY2FtcGFpZ24uZW5kRGF0ZSA+PSB0b2RheSkpIGNvbnRpbnVlXG5cbiAgICAgICAgICBpZiAoY2FtcGFpZ24uYWN0aXZlQ2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXNDYW1wYWluZyA9IGNhbXBhaWduLmNhdGVnb3JpZXMubWFwKChjKSA9PiBjLmlkKVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQcm9kdWN0c0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXMuZmlsdGVyKChsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbC5jYXRlZ29yaWVzIHx8ICFsLmNhdGVnb3JpZXM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgcmV0dXJuIGwuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjYXRlZ29yaWVzQ2FtcGFpbmcuc29tZSgoY2F0KSA9PiBjYXQgPT0gYykpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVyUHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBjYXJ0VG90YWxDYXRlZ29yaWVzID0gZmlsdGVyUHJvZHVjdHNDYXRlZ29yaWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIucHJpY2VQYWlkICogYi5xdWFudGl0eSwgMClcblxuICAgICAgICAgICAgICBpZiAoY2FydFRvdGFsQ2F0ZWdvcmllcyA+PSBjYW1wYWlnbi5jYXJ0VmFsdWVNaW4pIGVsZWdpYmxlQ2FtcGFpZ25zLnB1c2goY2FtcGFpZ24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjYW1wYWlnbi5jYXJ0VmFsdWUgJiYgY2FtcGFpZ24uY2FydFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICBpZiAoY2FtcGFpZ24uY2FydFZhbHVlIDw9IGNhcnRUb3RhbCkgZWxlZ2libGVDYW1wYWlnbnMucHVzaChjYW1wYWlnbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZWdpYmxlQ2FtcGFpZ25zLmxlbmd0aCkgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogbm90R2lmdEl0ZW1zIH0gYXMgQ2hlY2tvdXRcblxuICAgICAgICBjb25zdCBjYW1wYWluZ25Qcm9kdWN0czogUHJvZHVjdFtdW10gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgY2FtcGFpZ24gb2YgZWxlZ2libGVDYW1wYWlnbnMpIHtcbiAgICAgICAgICBsZXQgZWxlZ2libGVQcm9kdWN0cyA9IFtdXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y3Qgb2YgY2FtcGFpZ24ucHJvZHVjdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogcHJvZHVjdERhdGEgfSA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZCh7IGZpbHRlcnM6IHsgc2t1OiBwcm9kdWN0IH0gfSlcblxuICAgICAgICAgICAgaWYgKCFwcm9kdWN0RGF0YS5sZW5ndGgpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGdpZnQgPSBwcm9kdWN0RGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChnaWZ0LnN0b2NrLnF1YW50aXR5IDwgMSkgY29udGludWVcblxuICAgICAgICAgICAgZWxlZ2libGVQcm9kdWN0cy5wdXNoKGdpZnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FtcGFpbmduUHJvZHVjdHMucHVzaChlbGVnaWJsZVByb2R1Y3RzKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYW1wYWluZ25Qcm9kdWN0cy5sZW5ndGgpIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IG5vdEdpZnRJdGVtcyB9IGFzIENoZWNrb3V0XG5cbiAgICAgICAgY29uc3QgZ2lmdHMgPSB0aGlzLmdpZnRUb0xpbmVJdGVtcyhbXS5jb25jYXQoLi4uY2FtcGFpbmduUHJvZHVjdHMpKVxuXG4gICAgICAgIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IG5vdEdpZnRJdGVtcy5jb25jYXQoZ2lmdHMpIH1cbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoY2hlY2tvdXQpKSxcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGNoZWNrb3V0LmxpbmVJdGVtcykpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2lmdFRvTGluZUl0ZW1zKGl0ZW1zOiBQcm9kdWN0W10pOiBMaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB7IGJyYW5kLCBjYXRlZ29yaWVzLCBpZCwgbmFtZSwgcHJpY2UsIHNrdSwgc2x1Zywgc3RvY2ssIHdlaWdodCwgRUFOIH0gPSBpdGVtXG5cbiAgICAgIGNvbnN0IGltYWdlID0gaXRlbT8ubWluaWF0dXJlcz8ubGVuZ3RoID8gaXRlbS5taW5pYXR1cmVzWzBdIDogaXRlbS5pbWFnZXNbMF1cblxuICAgICAgcmV0dXJuIExpbmVJdGVtLnRvSW5zdGFuY2Uoe1xuICAgICAgICBicmFuZCxcbiAgICAgICAgY2F0ZWdvcmllcyxcbiAgICAgICAgaWQ6IGlkLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByaWNlLFxuICAgICAgICBza3UsXG4gICAgICAgIHNsdWcsXG4gICAgICAgIHN0b2NrLFxuICAgICAgICB3ZWlnaHQsXG4gICAgICAgIEVBTixcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIHByaWNlUGFpZDogMCxcbiAgICAgICAgcXVhbnRpdHk6IDEsXG4gICAgICAgIGlzR2lmdDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIl19
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFFTCwwQkFBMEIsRUFFMUIsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUdiLHdCQUF3QixFQUV4QixLQUFLLEVBSUwsS0FBSyxHQUNOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTs7Ozs7QUFRcEQsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFDbUIsV0FBd0IsRUFDeEIsZUFBZ0MsRUFDVixXQUFrQixFQUNYLGlCQUFvQyxFQUNuQyxrQkFBc0MsRUFDdkMsaUJBQW9DLEVBQ3BDLGlCQUE2QztRQU4xRSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDVixnQkFBVyxHQUFYLFdBQVcsQ0FBTztRQUNYLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN2QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1C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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFNUUsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUN6QixLQUFLO2dCQUNMLFVBQVU7Z0JBQ1YsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUk7Z0JBQ0osS0FBSztnQkFDTCxHQUFHO2dCQUNILElBQUk7Z0JBQ0osS0FBSztnQkFDTCxNQUFNO2dCQUNOLEdBQUc7Z0JBQ0gsS0FBSztnQkFDTCxTQUFTLEVBQUUsQ0FBQztnQkFDWixRQUFRLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7eUdBbFhVLFdBQVcsNEVBTVosWUFBWSxhQUNaLG1CQUFtQixhQUNuQixvQkFBb0IsYUFDcEIsbUJBQW1CLGFBQ25CLG1CQUFtQjs2R0FWbEIsV0FBVzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkFPTixNQUFNOzJCQUFDLFlBQVk7OzBCQUNuQixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBCdXkyV2luLFxuICBCdXkyV2luRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBDaGVja291dCxcbiAgaXNOaWwsXG4gIExpbmVJdGVtLFxuICBOb3RGb3VuZEVycm9yLFxuICBQcm9kdWN0LFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgUm91bmRQcm9kdWN0UHJpY2VzSGVscGVyLFxuICBTaG9wUHJpY2UsXG4gIFNob3BzLFxuICBVc2VyLFxuICBWYXJpYW50LFxuICBWYXJpYW50UmVwb3NpdG9yeSxcbiAgV2hlcmUsXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgZnJvbSwgaWlmLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSdcbmltcG9ydCB7IENoZWNrb3V0U2VydmljZSB9IGZyb20gJy4vY2hlY2tvdXQuc2VydmljZSdcbmltcG9ydCB7IFJlcXVpcmVkQ2hlY2tvdXREYXRhIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IHR5cGUgQ2FydCA9IHtcbiAgW2lkOiBzdHJpbmddOiBMaW5lSXRlbVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xuICBwcml2YXRlIGNhcnRTdWJqZWN0OiBTdWJqZWN0PENhcnQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UsXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIEBJbmplY3QoJ1Byb2R1Y3RSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVJlcG9zaXRvcnk6IENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgICBASW5qZWN0KCdWYXJpYW50UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgdmFyaWFudFJlcG9zaXRvcnk6IFZhcmlhbnRSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ0J1eTJXaW5SZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBidXkyV2luUmVwb3NpdG9yeTogQnV5MldpbkZpcmVzdG9yZVJlcG9zaXRvcnksXG4gICkge31cblxuICBhZGRJdGVtKGl0ZW06IExpbmVJdGVtLCBxdWFudGl0eTogbnVtYmVyID0gMSk6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHJldHVybiBmcm9tKHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoYXN5bmMgKGNoZWNrb3V0KSA9PiBhd2FpdCB0aGlzLmJ1aWxkTGluZUl0ZW0oeyBjaGVja291dCwgaXRlbSwgcXVhbnRpdHk6IHF1YW50aXR5IHx8IDEgfSkpLFxuICAgICAgbWVyZ2VNYXAoKHsgY2hlY2tvdXQsIGxpbmVJdGVtIH0pID0+IHRoaXMudXBkYXRlTGluZUl0ZW1JbkNhcnQobGluZUl0ZW0sIHF1YW50aXR5IHx8IDEsIGNoZWNrb3V0IGFzIENoZWNrb3V0KSksXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXG4gICAgKVxuICB9XG5cbiAgZGVjcmVhc2VJdGVtKGl0ZW06IExpbmVJdGVtKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tvdXRJdGVtID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maW5kKChsaW5lSXRlbSkgPT4gbGluZUl0ZW0uaWQgPT09IGl0ZW0uaWQpXG5cbiAgICAgICAgaWYgKCFpc05pbChjaGVja291dEl0ZW0pKSBjaGVja291dEl0ZW0ucXVhbnRpdHkgLT0gY2hlY2tvdXRJdGVtLnF1YW50aXR5ID4gMSA/IDEgOiAwXG5cbiAgICAgICAgcmV0dXJuIGNoZWNrb3V0XG4gICAgICB9KSxcbiAgICAgIGNvbmNhdE1hcCgoY2hlY2tvdXQpID0+IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUNoZWNrb3V0TGluZUl0ZW1zKGNoZWNrb3V0KSksXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmdlbmVyYXRlQ2FydE9iamVjdChjaGVja291dC5saW5lSXRlbXMpKSxcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcbiAgICApXG4gIH1cblxuICBnZXRDYXJ0KGNoZWNrb3V0PzogUmVxdWlyZWRDaGVja291dERhdGEpOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICB0aGlzLmJ1aWxkQ2FydEZyb21DaGVja291dChjaGVja291dCkuc3Vic2NyaWJlKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpXG5cbiAgICByZXR1cm4gdGhpcy5jYXJ0U3ViamVjdFxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkXG4gICAqL1xuICBnZXRWYXJpYW50UHJpY2VEaXNjb3VudChpdGVtOiBMaW5lSXRlbSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlcigpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKHVzZXIpID0+XG4gICAgICAgIGlpZihcbiAgICAgICAgICAoKSA9PiB1c2VyLmlzU3Vic2NyaWJlciAmJiAhIWl0ZW0ucHJpY2Uuc3Vic2NyaWJlclByaWNlLFxuICAgICAgICAgIG9mKGl0ZW0ucHJpY2Uuc3Vic2NyaWJlclByaWNlKSxcbiAgICAgICAgICBvZihpdGVtLnByaWNlLnByaWNlKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGl0ZW0ucHJpY2UucHJpY2UpKSxcbiAgICApXG4gIH1cblxuICByZW1vdmVJdGVtKGl0ZW06IExpbmVJdGVtKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjaGVja291dC5saW5lSXRlbXMuZmluZEluZGV4KChsaW5lSXRlbSkgPT4gbGluZUl0ZW0uaWQgPT09IGl0ZW0uaWQpXG5cbiAgICAgICAgaWYgKGluZGV4ID49IDApIGNoZWNrb3V0LmxpbmVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpXG5cbiAgICAgICAgcmV0dXJuIGNoZWNrb3V0XG4gICAgICB9KSxcbiAgICAgIGNvbmNhdE1hcCgoY2hlY2tvdXQpID0+IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUNoZWNrb3V0TGluZUl0ZW1zKGNoZWNrb3V0KSksXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmdlbmVyYXRlQ2FydE9iamVjdChjaGVja291dC5saW5lSXRlbXMpKSxcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcbiAgICApXG4gIH1cblxuICB1cGRhdGVVc2VyQ2FydCh1c2VyOiBVc2VyKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY2hlY2tvdXQpID0+XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUNoZWNrb3V0VXNlcihDaGVja291dC50b0luc3RhbmNlKHsgLi4uY2hlY2tvdXQudG9QbGFpbigpLCB1c2VyIH0pKSxcbiAgICAgICksXG4gICAgICBjb25jYXRNYXAoYXN5bmMgKGNoZWNrb3V0KSA9PlxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZVxuICAgICAgICAgIC51cGRhdGVDaGVja291dExpbmVJdGVtcyhcbiAgICAgICAgICAgIENoZWNrb3V0LnRvSW5zdGFuY2Uoe1xuICAgICAgICAgICAgICAuLi5jaGVja291dC50b1BsYWluKCksXG4gICAgICAgICAgICAgIGxpbmVJdGVtczogY2hlY2tvdXQubGluZUl0ZW1zPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICBjaGVja291dC5saW5lSXRlbXM/Lm1hcChhc3luYyAoaXRlbSkgPT4gKGF3YWl0IHRoaXMuYnVpbGRMaW5lSXRlbSh7IGNoZWNrb3V0LCBpdGVtIH0pKS5saW5lSXRlbSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAudG9Qcm9taXNlKCksXG4gICAgICApLFxuICAgICAgbWFwKChjaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QoY2hlY2tvdXQubGluZUl0ZW1zKSksXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXG4gICAgKVxuICB9XG5cbiAgY2xlYXJDYXJ0KCk6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNsZWFyQ2hlY2tvdXRGcm9tU2Vzc2lvbigpXG4gICAgICAgIHJldHVybiBjaGVja291dFxuICAgICAgfSksXG4gICAgICBjb25jYXRNYXAoKG9sZENoZWNrb3V0KSA9PiB0aGlzLmJ1aWxkQ2FydEZyb21DaGVja291dChvbGRDaGVja291dCkpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDYXJ0RnJvbUNoZWNrb3V0KGNoZWNrb3V0RGF0YT86IFJlcXVpcmVkQ2hlY2tvdXREYXRhKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KGNoZWNrb3V0RGF0YSkucGlwZShcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxpbmVJdGVtcyksXG4gICAgICBjb25jYXRNYXAoKGxpbmVJdGVtcykgPT4gb2YodGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QobGluZUl0ZW1zKSkpLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUl0ZW1JbkNhcnQgPSAobGluZUl0ZW06IExpbmVJdGVtLCBxdWFudGl0eTogbnVtYmVyLCBjaGVja291dD86IENoZWNrb3V0KTogT2JzZXJ2YWJsZTxDYXJ0PiA9PlxuICAgIChpc05pbChjaGVja291dCkgPyB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpIDogb2YoY2hlY2tvdXQpKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChjaGVja291dExvYWRlZCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtczogTGluZUl0ZW1bXSA9IFtdXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zPy5tYXAoKGNoZWNrb3V0SXRlbSkgPT4gY2hlY2tvdXRJdGVtLmlkKS5pbmRleE9mKGxpbmVJdGVtLmlkKVxuXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zW2luZGV4XS5xdWFudGl0eSArPSBxdWFudGl0eVxuICAgICAgICAgIGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtc1tpbmRleF0ucHJpY2VQYWlkID0gbGluZUl0ZW0ucHJpY2VQYWlkXG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtcyA9IGl0ZW1zLmNvbmNhdChcbiAgICAgICAgICAgIGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtcyA/IGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtcy5jb25jYXQoW2xpbmVJdGVtXSkgOiBbbGluZUl0ZW1dLFxuICAgICAgICAgIClcblxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2VcbiAgICAgICAgICAudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoY2hlY2tvdXRMb2FkZWQpXG4gICAgICAgICAgLnBpcGUobWFwKCh1cGRhdGVkQ2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KHVwZGF0ZWRDaGVja291dC5saW5lSXRlbXMpKSlcbiAgICAgIH0pLFxuICAgIClcblxuICBwcml2YXRlIGdlbmVyYXRlQ2FydE9iamVjdCA9IChpdGVtczogTGluZUl0ZW1bXSk6IENhcnQgPT5cbiAgICBpdGVtc1xuICAgICAgPyBpdGVtcy5yZWR1Y2UoXG4gICAgICAgICAgKGNhcnQsIGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAuLi5jYXJ0LFxuICAgICAgICAgICAgW2l0ZW0uaWRdOiBMaW5lSXRlbS50b0luc3RhbmNlKHtcbiAgICAgICAgICAgICAgLi4uKGNhcnRbaXRlbS5pZF0gfHwgaXRlbSksXG4gICAgICAgICAgICAgIHF1YW50aXR5OiAoY2FydFtpdGVtLmlkXT8ucXVhbnRpdHkgfHwgMCkgKyAoaXRlbS5xdWFudGl0eSA/IGl0ZW0ucXVhbnRpdHkgOiAxKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApXG4gICAgICA6IFtdXG5cbiAgcHJpdmF0ZSBidWlsZExpbmVJdGVtID0gYXN5bmMgKHtcbiAgICBjaGVja291dCxcbiAgICBpdGVtLFxuICAgIHF1YW50aXR5LFxuICB9OiB7XG4gICAgY2hlY2tvdXQ6IFJlcXVpcmVkQ2hlY2tvdXREYXRhXG4gICAgaXRlbTogTGluZUl0ZW1cbiAgICBxdWFudGl0eT86IG51bWJlclxuICB9KTogUHJvbWlzZTx7IGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PjsgbGluZUl0ZW06IExpbmVJdGVtIH0+ID0+IHtcbiAgICBjb25zdCBwcm9kdWN0ID0gYXdhaXQgdGhpcy5nZXRQcm9kdWN0RGF0YShpdGVtLmlkKVxuXG4gICAgaXRlbS5xdWFudGl0eSA9IGl0ZW0/LnF1YW50aXR5IHx8IGNoZWNrb3V0Py5saW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBsaW5lSXRlbS5pZCA9PT0gaXRlbS5pZCk/LnF1YW50aXR5IHx8IDBcblxuICAgIGlmICh0aGlzLmNoZWNrTWF4U3RvY2soaXRlbSwgcXVhbnRpdHkgfHwgMCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc2N1bHBlISBUZW1vcyBhcGVuYXMgJyArIGl0ZW0uc3RvY2s/LnF1YW50aXR5ICsgJyBlbSBlc3RvcXVlLicpXG5cbiAgICBjb25zdCBpbWFnZSA9IGl0ZW0uaW1hZ2UgfHwgaXRlbS5pbWFnZXM/LnNoaWZ0KClcbiAgICBjb25zdCB7IGlkLCBuYW1lLCBFQU4sIHNsdWcsIHN0b2NrLCBwcmljZSwgd2VpZ2h0LCBza3UsIHR5cGUgfSA9IGl0ZW1cbiAgICBjb25zdCBpc0dpZnQgPSBpdGVtLmlzR2lmdCB8fCBudWxsXG4gICAgY29uc3QgcHJpY2VQYWlkID0gdGhpcy5nZXRQcm9kdWN0UHJpY2Uoe1xuICAgICAgcHJvZHVjdDogaXRlbSxcbiAgICAgIHNob3A6IGNoZWNrb3V0LnNob3AgfHwgdGhpcy5kZWZhdWx0U2hvcCxcbiAgICAgIGlzU3Vic2NyaWJlcjogY2hlY2tvdXQudXNlcj8uaXNTdWJzY3JpYmVyLFxuICAgIH0pXG5cbiAgICBSb3VuZFByb2R1Y3RQcmljZXNIZWxwZXIucm91bmRQcm9kdWN0UHJpY2VzKGl0ZW0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tvdXQsXG4gICAgICBsaW5lSXRlbTogTGluZUl0ZW0udG9JbnN0YW5jZSh7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lOiBuYW1lID8/IHByb2R1Y3QubmFtZSxcbiAgICAgICAgRUFOOiBFQU4gPz8gcHJvZHVjdC5FQU4sXG4gICAgICAgIGJyYW5kOiBwcm9kdWN0LmJyYW5kLFxuICAgICAgICBzbHVnOiBzbHVnID8/IHByb2R1Y3Quc2x1ZyxcbiAgICAgICAgc2t1OiBza3UgPz8gcHJvZHVjdC5za3UsXG4gICAgICAgIHN0b2NrLFxuICAgICAgICBwcmljZTogdGhpcy5yb3VuZFByaWNlKHByaWNlKSxcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIHdlaWdodDogd2VpZ2h0ID8/IHByb2R1Y3Qud2VpZ2h0LFxuICAgICAgICBxdWFudGl0eTogKGl0ZW0ucXVhbnRpdHkgfHwgMCkgKyAocXVhbnRpdHkgfHwgMCksXG4gICAgICAgIHByaWNlUGFpZCxcbiAgICAgICAgY2F0ZWdvcmllczogcHJvZHVjdC5jYXRlZ29yaWVzID8/IFtdLFxuICAgICAgICBpc0dpZnQ6IGlzR2lmdCA/PyBudWxsLFxuICAgICAgICBjb3N0UHJpY2U6IHByb2R1Y3QuY29zdFByaWNlID8/IDAsXG4gICAgICAgIHR5cGUsXG4gICAgICB9KSxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdW5kUHJpY2UocHJvZHVjdFByaWNlOiBTaG9wUHJpY2UpOiBTaG9wUHJpY2Uge1xuICAgIGNvbnN0IHsgcHJpY2UsIGZ1bGxQcmljZSwgc3Vic2NyaWJlclByaWNlIH0gPSBwcm9kdWN0UHJpY2VcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJvZHVjdFByaWNlLFxuICAgICAgcHJpY2U6IE51bWJlcihwcmljZS50b0ZpeGVkKDIpKSxcbiAgICAgIGZ1bGxQcmljZTogTnVtYmVyKGZ1bGxQcmljZS50b0ZpeGVkKDIpKSxcbiAgICAgIC4uLihzdWJzY3JpYmVyUHJpY2UgJiYgeyBzdWJzY3JpYmVyUHJpY2U6IE51bWJlcihzdWJzY3JpYmVyUHJpY2UudG9GaXhlZCgyKSkgfSksXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQcm9kdWN0RGF0YShwcm9kdWN0SWQ6IHN0cmluZyk6IFByb21pc2U8UGFydGlhbDxQcm9kdWN0Pj4ge1xuICAgIGxldCBwcm9kdWN0OiBQcm9kdWN0XG4gICAgbGV0IHZhcmlhbnQ6IFZhcmlhbnRcblxuICAgIHRyeSB7XG4gICAgICBwcm9kdWN0ID0gYXdhaXQgdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5nZXQoeyBpZDogcHJvZHVjdElkIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikpIHRocm93IGVycm9yXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogdmFyaWFudHMgfSA9IGF3YWl0IHRoaXMudmFyaWFudFJlcG9zaXRvcnkuZmluZCh7IGZpbHRlcnM6IHsgaWQ6IHByb2R1Y3RJZCB9IH0pXG5cbiAgICAgIHZhcmlhbnQgPSB2YXJpYW50cy5zaGlmdCgpXG5cbiAgICAgIGlmICghdmFyaWFudCkgdGhyb3cgZXJyb3JcblxuICAgICAgcHJvZHVjdCA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZ2V0KHsgaWQ6IHZhcmlhbnQucHJvZHVjdElkIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb2R1Y3QudG9QbGFpbigpLFxuICAgICAgLi4uKHZhcmlhbnQgJiYgeyAuLi52YXJpYW50LnRvUGxhaW4oKSB9KSxcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFByb2R1Y3RQcmljZSA9ICh7XG4gICAgcHJvZHVjdCxcbiAgICBpc1N1YnNjcmliZXIsXG4gIH06IHtcbiAgICBwcm9kdWN0OiBMaW5lSXRlbVxuICAgIHNob3A6IFNob3BzXG4gICAgaXNTdWJzY3JpYmVyOiBib29sZWFuXG4gIH0pOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGluZm8gPSBwcm9kdWN0LnByaWNlXG5cbiAgICBpZiAocHJvZHVjdC5pc0dpZnQpIHJldHVybiAwXG5cbiAgICByZXR1cm4gaXNTdWJzY3JpYmVyICYmIGluZm8uc3Vic2NyaWJlclByaWNlID4gMFxuICAgICAgPyBOdW1iZXIoaW5mby5zdWJzY3JpYmVyUHJpY2UudG9GaXhlZCgyKSlcbiAgICAgIDogTnVtYmVyKGluZm8ucHJpY2UudG9GaXhlZCgyKSlcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tNYXhTdG9jayA9IChpdGVtOiBMaW5lSXRlbSwgcXVhbnRpdHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG1heFN0b2NrID0gaXRlbS5zdG9jaz8ucXVhbnRpdHkgfHwgMFxuICAgIGNvbnN0IGN1cnJlbnRJdGVtQW1vdW50ID0gaXRlbS5xdWFudGl0eSB8fCAwXG5cbiAgICByZXR1cm4gY3VycmVudEl0ZW1BbW91bnQgKyBxdWFudGl0eSA+IG1heFN0b2NrXG4gIH1cblxuICBnZXRHaWZ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoYXN5bmMgKGNoZWNrb3V0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdEdpZnRJdGVtczogTGluZUl0ZW1bXSA9IGNoZWNrb3V0LmxpbmVJdGVtcyA/IGNoZWNrb3V0LmxpbmVJdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzR2lmdCkgOiBbXVxuXG4gICAgICAgIGlmICghbm90R2lmdEl0ZW1zLmxlbmd0aCkgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogW10gfSBhcyBDaGVja291dFxuXG4gICAgICAgIGNvbnN0IGNhcnRUb3RhbCA9IG5vdEdpZnRJdGVtcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLnByaWNlUGFpZCAqIGIucXVhbnRpdHksIDApXG5cbiAgICAgICAgY29uc3QgY2FtcGFpZ25zID0gYXdhaXQgdGhpcy5idXkyV2luUmVwb3NpdG9yeVxuICAgICAgICAgIC5maW5kKHtcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICAgIHNob3A6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IHRoaXMuZGVmYXVsdFNob3AgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigoZGF0YSkgPT4gZGF0YS5kYXRhKVxuXG4gICAgICAgIGlmICghY2FtcGFpZ25zLmxlbmd0aCkgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogbm90R2lmdEl0ZW1zIH0gYXMgQ2hlY2tvdXRcblxuICAgICAgICBjb25zdCBlbGVnaWJsZUNhbXBhaWduczogQnV5MldpbltdID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGNhbXBhaWduIG9mIGNhbXBhaWducykge1xuICAgICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuXG4gICAgICAgICAgaWYgKCEoY2FtcGFpZ24uc3RhcnREYXRlIDw9IHRvZGF5KSAmJiAhKGNhbXBhaWduLmVuZERhdGUgPj0gdG9kYXkpKSBjb250aW51ZVxuXG4gICAgICAgICAgaWYgKGNhbXBhaWduLmFjdGl2ZUNhdGVnb3J5KSB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzQ2FtcGFpbmcgPSBjYW1wYWlnbi5jYXRlZ29yaWVzLm1hcCgoYykgPT4gYy5pZC50b1N0cmluZygpKVxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllc0NhbXBhaW5nRnVsbFRyZWUgPSBbXVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGNhdGVnb3JpZXNDYW1wYWluZykge1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldENoaWxkcmVuKHBhcnNlSW50KGlkKSlcblxuICAgICAgICAgICAgICBjYXRlZ29yaWVzQ2FtcGFpbmdGdWxsVHJlZS5wdXNoKGlkLCAuLi5jaGlsZHJlbi5tYXAoKGMpID0+IGMuaWQudG9TdHJpbmcoKSkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXNDYW1wYWluZ1RyZWUgPSBbLi4ubmV3IFNldChjYXRlZ29yaWVzQ2FtcGFpbmdGdWxsVHJlZSldXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQcm9kdWN0c0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXMuZmlsdGVyKChsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbC5jYXRlZ29yaWVzIHx8ICFsLmNhdGVnb3JpZXM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcblxuICAgICAgICAgICAgICByZXR1cm4gbC5jYXRlZ29yaWVzLnNvbWUoKGMpID0+IGNhdGVnb3JpZXNDYW1wYWluZ1RyZWUuc29tZSgoY2F0KSA9PiBjYXQgPT0gYykpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVyUHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBjYXJ0VG90YWxDYXRlZ29yaWVzID0gZmlsdGVyUHJvZHVjdHNDYXRlZ29yaWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIucHJpY2VQYWlkICogYi5xdWFudGl0eSwgMClcblxuICAgICAgICAgICAgICBpZiAoY2FydFRvdGFsQ2F0ZWdvcmllcyA+PSBjYW1wYWlnbi5jYXJ0VmFsdWVNaW4pIGVsZWdpYmxlQ2FtcGFpZ25zLnB1c2goY2FtcGFpZ24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjYW1wYWlnbi5jYXJ0VmFsdWUgJiYgY2FtcGFpZ24uY2FydFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICBpZiAoY2FtcGFpZ24uY2FydFZhbHVlIDw9IGNhcnRUb3RhbCkgZWxlZ2libGVDYW1wYWlnbnMucHVzaChjYW1wYWlnbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVsZWdpYmxlQ2FtcGFpZ25zLmxlbmd0aCkgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogbm90R2lmdEl0ZW1zIH0gYXMgQ2hlY2tvdXRcblxuICAgICAgICBjb25zdCBjYW1wYWluZ25Qcm9kdWN0czogUHJvZHVjdFtdW10gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgY2FtcGFpZ24gb2YgZWxlZ2libGVDYW1wYWlnbnMpIHtcbiAgICAgICAgICBsZXQgZWxlZ2libGVQcm9kdWN0cyA9IFtdXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y3Qgb2YgY2FtcGFpZ24ucHJvZHVjdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogcHJvZHVjdERhdGEgfSA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZCh7IGZpbHRlcnM6IHsgc2t1OiBwcm9kdWN0IH0gfSlcblxuICAgICAgICAgICAgaWYgKCFwcm9kdWN0RGF0YS5sZW5ndGgpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGdpZnQgPSBwcm9kdWN0RGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChnaWZ0LnN0b2NrLnF1YW50aXR5IDwgMSkgY29udGludWVcblxuICAgICAgICAgICAgZWxlZ2libGVQcm9kdWN0cy5wdXNoKGdpZnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FtcGFpbmduUHJvZHVjdHMucHVzaChlbGVnaWJsZVByb2R1Y3RzKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYW1wYWluZ25Qcm9kdWN0cy5sZW5ndGgpIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IG5vdEdpZnRJdGVtcyB9IGFzIENoZWNrb3V0XG5cbiAgICAgICAgY29uc3QgZ2lmdHMgPSB0aGlzLmdpZnRUb0xpbmVJdGVtcyhbXS5jb25jYXQoLi4uY2FtcGFpbmduUHJvZHVjdHMpKVxuXG4gICAgICAgIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IG5vdEdpZnRJdGVtcy5jb25jYXQoZ2lmdHMpIH1cbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoY2hlY2tvdXQpKSxcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGNoZWNrb3V0LmxpbmVJdGVtcykpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2lmdFRvTGluZUl0ZW1zKGl0ZW1zOiBQcm9kdWN0W10pOiBMaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB7IGJyYW5kLCBjYXRlZ29yaWVzLCBpZCwgbmFtZSwgcHJpY2UsIHNrdSwgc2x1Zywgc3RvY2ssIHdlaWdodCwgRUFOIH0gPSBpdGVtXG5cbiAgICAgIGNvbnN0IGltYWdlID0gaXRlbT8ubWluaWF0dXJlcz8ubGVuZ3RoID8gaXRlbS5taW5pYXR1cmVzWzBdIDogaXRlbS5pbWFnZXNbMF1cblxuICAgICAgcmV0dXJuIExpbmVJdGVtLnRvSW5zdGFuY2Uoe1xuICAgICAgICBicmFuZCxcbiAgICAgICAgY2F0ZWdvcmllcyxcbiAgICAgICAgaWQ6IGlkLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByaWNlLFxuICAgICAgICBza3UsXG4gICAgICAgIHNsdWcsXG4gICAgICAgIHN0b2NrLFxuICAgICAgICB3ZWlnaHQsXG4gICAgICAgIEVBTixcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIHByaWNlUGFpZDogMCxcbiAgICAgICAgcXVhbnRpdHk6IDEsXG4gICAgICAgIGlzR2lmdDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIl19
@@ -85,10 +85,7 @@ export class CouponService {
85
85
  checkCouponUseAndLimit(coupon, userEmail, checkout) {
86
86
  return __awaiter(this, void 0, void 0, function* () {
87
87
  const orders = yield this.orderRepository.find({
88
- filters: {
89
- coupon: { id: coupon.id },
90
- payment: { status: 'paid' },
91
- },
88
+ filters: Object.assign({ coupon: { id: coupon.id }, payment: { status: 'paid' } }, (coupon.influencerEmail ? { user: { email: userEmail } } : {})),
92
89
  });
93
90
  // orders que usuario ja fez com o cupom
94
91
  const ordersUserCoupon = orders.data.filter((o) => o.user.email == userEmail);
@@ -246,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
246
243
  type: Inject,
247
244
  args: ['CategoryRepository']
248
245
  }] }]; } });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBS0wsYUFBYSxFQUNiLE1BQU0sRUFFTixXQUFXLEVBQ1gsYUFBYSxFQUdiLEtBQUssRUFFTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7O0FBSzdDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQytDLGdCQUFrQyxFQUN4QyxXQUFrQixFQUNiLGVBQWdDLEVBQzdCLGtCQUFzQztRQUh4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUEwQi9FLDRCQUF1QixHQUFHLENBQUMsU0FBaUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQSxDQUFBO1FBNk41Rix5QkFBb0IsR0FBRyxDQUM3QixPQUFpQixFQUNqQixTQUFpQixFQUNxQyxFQUFFLENBQ3hELE9BQU87YUFDSixHQUFHLENBQUMs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YUFDbEIsWUFBWSxhQUNaLGlCQUFpQixhQUNqQixvQkFBb0I7K0dBTG5CLGFBQWEsY0FGWixNQUFNOzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ2F0ZWdvcnksXG4gIENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgQ2hlY2tvdXQsXG4gIENoZWNrb3V0U3Vic2NyaXB0aW9uLFxuICBDaGVja291dFR5cGVzLFxuICBDb3Vwb24sXG4gIENvdXBvblJlcG9zaXRvcnksXG4gIENvdXBvblR5cGVzLFxuICBFeGNsdXNpdml0aWVzLFxuICBMaW5lSXRlbSxcbiAgT3JkZXJSZXBvc2l0b3J5LFxuICBTaG9wcyxcbiAgVXNlcixcbiAgV2hlcmUsXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuXG5pbXBvcnQgeyBJbnZhbGlkQ291cG9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycydcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvdXBvblNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdDb3Vwb25SZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjb3Vwb25SZXBvc2l0b3J5OiBDb3Vwb25SZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTaG9wOiBTaG9wcyxcbiAgICBASW5qZWN0KCdPcmRlclJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IG9yZGVyUmVwb3NpdG9yeTogT3JkZXJSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ0NhdGVnb3J5UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXG4gICkge31cblxuICBjaGVja0NvdXBvbihcbiAgICBuaWNrbmFtZTogc3RyaW5nLFxuICAgIHVzZXJFbWFpbDogc3RyaW5nLFxuICAgIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcyxcbiAgICBwbGFuPzogc3RyaW5nLFxuICAgIGNoZWNrb3V0PzogUGFydGlhbDxDaGVja291dD4sXG4gICAgaXNTdWJzY3JpcHRpb24/OiBib29sZWFuLFxuICApOiBPYnNlcnZhYmxlPENvdXBvbj4ge1xuICAgIHJldHVybiBmcm9tKFxuICAgICAgdGhpcy5jb3Vwb25SZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgbmlja25hbWU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IG5pY2tuYW1lIH0sXG4gICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGNvdXBvbnMpID0+IHRoaXMuY2hlY2tDb3Vwb25SdWxlcyhjb3Vwb25zLCBjaGVja291dFR5cGUsIHBsYW4sIGNoZWNrb3V0LCBpc1N1YnNjcmlwdGlvbikpLFxuICAgICAgY29uY2F0TWFwKChjb3Vwb246IENvdXBvbikgPT4gdGhpcy5jaGVja0NvdXBvblVzZUFuZExpbWl0KGNvdXBvbiwgdXNlckVtYWlsLCBjaGVja291dCkpLFxuICAgICAgbWFwKChjb3Vwb246IENvdXBvbikgPT4gdGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSksXG4gICAgICBtYXAoKGNvdXBvbjogQ291cG9uKSA9PiBjb3Vwb24pLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IgPSAodXNlckVtYWlsOiBzdHJpbmcpOiBib29sZWFuID0+ICEhdXNlckVtYWlsPy5tYXRjaCgvQGI0YS5jb20uYnIvZylcblxuICBwcml2YXRlIGNoZWNrQ291cG9uUnVsZXMoXG4gICAgY291cG9ucyxcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXG4gICAgcGxhbj86IHN0cmluZyxcbiAgICBjaGVja291dD86IFBhcnRpYWw8Q2hlY2tvdXQ+LFxuICAgIGlzU3Vic2NyaXB0aW9uPzogYm9vbGVhbixcbiAgKSB7XG4gICAgLy8gQ2FzbyBuw6NvIGFjaGUgbmVuaHVtIGN1cG9tLCByZXRvcm5hIGVycm9cbiAgICBpZiAoY291cG9ucy5jb3VudCA8IDEpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdDdXBvbSBpbnbDoWxpZG8uJylcbiAgICB9XG5cbiAgICAvLyBHZXQgUHJpbWVpcm8gQ3Vwb20gKG8gZmluZCBkbyByZXBvc2l0b3J5IHJldG9ybmEgdW0gYXJyYXkpXG4gICAgY29uc3QgY291cG9uOiBDb3Vwb24gPSBjb3Vwb25zLmRhdGEuc2hpZnQoKVxuICAgIC8vIFZlcmlmaWNhIHNlIG8gY3Vwb20gw6kgYXBsaWNhdmVsIG5hIGxvamFcbiAgICBjb25zdCBpc0luU2hvcCA9IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSBTaG9wcy5BTEwgfHwgY291cG9uLnNob3BBdmFpbGFiaWxpdHkgPT09IHRoaXMuZGVmYXVsdFNob3BcblxuICAgIC8vIEN1cG9uIG7Do28gYXBsaWNhdmVsIGEgbG9qYSByZXRvcm5hIGVycm9cbiAgICBpZiAoIWlzSW5TaG9wKSByZXR1cm4gdGhyb3dFcnJvcignQ3Vwb20gaW52w6FsaWRvIHBhcmEgbG9qYS4nKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBjb3Vwb24gw6kgYXBsaWNhZG8gbm8gY2hlY2tvdXQgcXVlIGVzdMOhIHNlbmRvIHJlYWxpemFkb1xuICAgIGNvbnN0IGlzQ2hlY2tvdXRUeXBlID0gY291cG9uLmNoZWNrb3V0VHlwZSA9PT0gQ2hlY2tvdXRUeXBlcy5BTEwgfHwgY291cG9uLmNoZWNrb3V0VHlwZSA9PT0gY2hlY2tvdXRUeXBlXG5cbiAgICAvLyBDdXBvbiBuw6NvIGFwbGljYXZlbCBhbyBjaGVja291dCByZXRvcm5hIGVycm9cbiAgICBpZiAoIWlzQ2hlY2tvdXRUeXBlKSByZXR1cm4gdGhyb3dFcnJvcignQ3Vwb20gaW52w6FsaWRvLiBFcnJvIGRlIGNoZWNrb3V0LicpXG5cbiAgICAvLyBWZXJpZmljYSBzZSBvIGN1cG9tIMOpIG91IHBvZGUgc2VyIGFwbGljYWRvIHBhcmEgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PT0gQ2hlY2tvdXRUeXBlcy5BTEwgfHwgY2hlY2tvdXRUeXBlID09PSBDaGVja291dFR5cGVzLlNVQlNDUklQVElPTikge1xuICAgICAgLy8gU2UgbyBjdXBvbSB0aXZlciB1bSBwbGFubyBhc3NvY2lhZG8sIHZlcmlmaWNhIHNlIMOpIG8gbWVzbW8gcGxhbm8gZG8gY2hlY2tvdXQgZGEgYXNzaW5hdHVyYVxuICAgICAgaWYgKGNvdXBvbi5wbGFuICYmIGNvdXBvbi5wbGFuLnRvVXBwZXJDYXNlKCkgIT09IHBsYW4udG9VcHBlckNhc2UoKSlcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ0N1cG9tIGludsOhbGlkbyBwYXJhIHN1YSBhc3NpbmF0dXJhLicpXG4gICAgfVxuXG4gICAgaWYgKGlzU3Vic2NyaXB0aW9uKSByZXR1cm4gb2YoY291cG9uKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgcG9zc3VpIG8gdmFsb3IgbWluaW1vIGRlIGNvbXByYSBwYXJhIHV0aWxpemHDp8OjbyBkbyBjdXBvbVxuICAgIGNvbnN0IGhhc01pblN1YlRvdGFsID0gdGhpcy5oYXNNaW5TdWJUb3RhbChjb3Vwb24sIGNoZWNrb3V0KVxuXG4gICAgLy8gU2UgbsOjbyB0ZW0gdmFsb3IgbcOtbmltbyBhdGluZ2lkbywgcmV0b3JuYSBlcnJvXG4gICAgaWYgKCFoYXNNaW5TdWJUb3RhbClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICBgVmFsb3IgbcOtbmltbyBkZSAke0ludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnQlJMJyB9KS5mb3JtYXQoXG4gICAgICAgICAgY291cG9uLm1pblN1YlRvdGFsVmFsdWUsXG4gICAgICAgICl9IG7Do28gYXRpbmdpZG9gLFxuICAgICAgKVxuXG4gICAgcmV0dXJuIG9mKGNvdXBvbilcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZENvdXBvbihjb3Vwb246IENvdXBvbiwgdXNlckVtYWlsOiBzdHJpbmcpOiBDb3Vwb24ge1xuICAgIC8vIFZlcmlmaWNhIGEgZGF0YSBkZSBpbmljaW8gZGUgdmFsaWRhZGUgZG8gY3Vwb21cbiAgICBpZiAoY291cG9uPy5iZWdpbkF0ID4gbmV3IERhdGUoKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gYWluZGEgbsOjbyBsaWJlcmFkby4nKVxuXG4gICAgLy8gVmVyaWZpY2EgYSBkYXRhIGRlIHZhbGlkYWRlIGRvIGN1cG9tXG4gICAgaWYgKGNvdXBvbj8uZXhwaXJlc0luIDwgbmV3IERhdGUoKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gZXhwaXJhZG8uJylcblxuICAgIHJldHVybiBjb3Vwb25cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tDb3Vwb25Vc2VBbmRMaW1pdChjb3Vwb246IENvdXBvbiwgdXNlckVtYWlsOiBzdHJpbmcsIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pikge1xuICAgIGNvbnN0IG9yZGVycyA9IGF3YWl0IHRoaXMub3JkZXJSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBjb3Vwb246IHsgaWQ6IGNvdXBvbi5pZCB9LFxuICAgICAgICBwYXltZW50OiB7IHN0YXR1czogJ3BhaWQnIH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICAvLyBvcmRlcnMgcXVlIHVzdWFyaW8gamEgZmV6IGNvbSBvIGN1cG9tXG4gICAgY29uc3Qgb3JkZXJzVXNlckNvdXBvbiA9IG9yZGVycy5kYXRhLmZpbHRlcigobykgPT4gby51c2VyLmVtYWlsID09IHVzZXJFbWFpbClcblxuICAgIC8vIFZlcmlmaWNhIG8gbGltaXRlIGRlIHVzbyBkZSBjdXBvbSBwb3IgdXN1YXJpb1xuICAgIGlmIChjb3Vwb24udXNlTGltaXRQZXJVc2VyICYmIG9yZGVyc1VzZXJDb3Vwb24ubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignTGltaXRlIGRlIHVzbyBwb3IgdXN1w6FyaW8gYXRpbmdpZG8uJylcblxuICAgIC8vIFZlcmlmaWNhIG8gbGltaXRlIGRlIHVzbyBnZXJhbCBwb3IgdXN1YXJpb1xuICAgIGlmIChjb3Vwb24udXNlTGltaXQgJiYgb3JkZXJzLmRhdGEubGVuZ3RoID49IGNvdXBvbi51c2VMaW1pdClcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ291cG9uRXJyb3IoJ0xpbWl0ZSBkZSB1c28gYXRpbmdpZG8uJylcblxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMudXNlclZhbGlkYXRpb25BbmRTdWJzY3JpcHRpb25TdGF0dXMoY291cG9uLCBjaGVja291dD8udXNlcilcbiAgICBpZiAoIXZhbGlkVXNlcikgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJylcblxuICAgIGNvbnN0IGhhc1Byb2R1Y3RDYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5oYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb24sIGNoZWNrb3V0KVxuXG4gICAgaWYgKCFoYXNQcm9kdWN0Q2F0ZWdvcmllcykgdGhyb3cgJ1NldSBjYXJyaW5obyBuw6NvIHBvc3N1aSBwcm9kdXRvcyBlbGVnw612ZWlzIHBhcmEgZGVzY29udG8uJ1xuXG4gICAgcmV0dXJuIGNvdXBvblxuICB9XG5cbiAgcHVibGljIGNhbGNEaXNjb3VudFN1YnNjcmlwdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXRTdWJzY3JpcHRpb24+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAvL1xuICAgIGxldCBkaXNjb3VudCA9IDBcblxuICAgIGlmIChjb3Vwb24udHlwZSA9PT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50XG4gICAgZWxzZSBpZiAoY291cG9uLnR5cGUgPT09IENvdXBvblR5cGVzLlBFUkNFTlRBR0UpXG4gICAgICBkaXNjb3VudCA9IGNoZWNrb3V0LnN1YnNjcmlwdGlvblBsYW4ucmVjdXJyZW5jZVByaWNlICogKGNvdXBvbi5kaXNjb3VudCAvIDEwMClcblxuICAgIHJldHVybiBvZihkaXNjb3VudClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYWxjRGlzY291bnRTaG9wcGluZyhjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZGlzY291bnQgPSAwXG5cbiAgICBzd2l0Y2ggKGNvdXBvbi50eXBlKSB7XG4gICAgICBjYXNlIENvdXBvblR5cGVzLkFCU09MVVRFOiB7XG4gICAgICAgIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIENvdXBvblR5cGVzLlBFUkNFTlRBR0U6IHtcbiAgICAgICAgZGlzY291bnQgPSBhd2FpdCB0aGlzLmNhbGNTaG9wcGluZ1BlcmNlbnRhZ2VEaXNjb3VudChjb3Vwb24sIGNoZWNrb3V0KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjU2hvcHBpbmdQZXJjZW50YWdlRGlzY291bnQoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuICAgIGNvbnN0IHNob3AgPSBjaGVja291dC5zaG9wXG4gICAgbGV0IGxpbmVJdGVuc0Rpc2NvdW50ID0gW11cbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDb3Vwb25DYXRlZ29yaWVzSWQoY291cG9uKVxuXG4gICAgaWYgKGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMgJiYgY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgaWYgKGkuY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0LmlkID09IGMgfHwgY2F0LmZpcmVzdG9yZUlkID09IGMpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtc1xuICAgIH1cblxuICAgIGNvbnN0IHN1YlRvdGFsID1cbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50LnJlZHVjZShcbiAgICAgICAgKGFjYywgY3VycjogTGluZUl0ZW0pID0+XG4gICAgICAgICAgY2hlY2tvdXQudXNlcj8uaXNTdWJzY3JpYmVyICYmIGN1cnIucHJpY2Vbc2hvcF0/LnN1YnNjcmliZXJQcmljZVxuICAgICAgICAgICAgPyBhY2MgKyBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2UgKiBjdXJyLnF1YW50aXR5XG4gICAgICAgICAgICA6IGFjYyArIGN1cnIucHJpY2VQYWlkICogY3Vyci5xdWFudGl0eSxcbiAgICAgICAgMCxcbiAgICAgICkgfHwgMFxuXG4gICAgZGlzY291bnQgPSBzdWJUb3RhbCAqIChjb3Vwb24uZGlzY291bnQgLyAxMDApXG5cbiAgICByZXR1cm4gZGlzY291bnRcbiAgfVxuXG4gIHByaXZhdGUgaGFzTWluU3ViVG90YWwoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IGJvb2xlYW4ge1xuICAgIGlmICghY291cG9uLm1pblN1YlRvdGFsVmFsdWUpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBzaG9wID0gY2hlY2tvdXQuc2hvcFxuXG4gICAgbGV0IHN1YlRvdGFsID1cbiAgICAgIGNoZWNrb3V0LmxpbmVJdGVtcz8ucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PlxuICAgICAgICAgIGNoZWNrb3V0LnVzZXI/LmlzU3Vic2NyaWJlciAmJiBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2VcbiAgICAgICAgICAgID8gYWNjICsgY3Vyci5wcmljZVtzaG9wXT8uc3Vic2NyaWJlclByaWNlICogY3Vyci5xdWFudGl0eVxuICAgICAgICAgICAgOiBhY2MgKyBjdXJyLnByaWNlUGFpZCAqIGN1cnIucXVhbnRpdHksXG4gICAgICAgIDAsXG4gICAgICApIHx8IDBcblxuICAgIGlmIChjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSA8PSBzdWJUb3RhbCkgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFzUHJvZHVjdENhdGVnb3JpZXMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyB8fCAhY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbilcblxuICAgIGNvbnN0IGhhc0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaSkgPT4ge1xuICAgICAgaWYgKCFpLmNhdGVnb3JpZXMgfHwgIWkuY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0LmlkID09IGMgfHwgY2F0LmZpcmVzdG9yZUlkID09IGMpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gaGFzQ2F0ZWdvcmllcy5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgdXNlclZhbGlkYXRpb25BbmRTdWJzY3JpcHRpb25TdGF0dXMoY291cG9uOiBDb3Vwb24sIHVzZXI6IFVzZXIpOiBib29sZWFuIHtcbiAgICBpZiAoY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5BTExfVVNFUlMpIHJldHVybiB0cnVlXG4gICAgaWYgKCF1c2VyKSByZXR1cm4gdHJ1ZVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBlbWFpbCBkbyB1c3XDoXJpbyDDqSBjb29ycG9yYXRpdm9cbiAgICBpZiAoIXRoaXMuZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IodXNlci5lbWFpbCkgJiYgY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVm9jw6ogbsOjbyDDqSBjb2xhYm9yYWRvci4nKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBlbWFpbCBkbyB1c3XDoXJpbyDDqSBhc3NvY2lhZG8gYW8gY3Vwb20gZGUgdXNvIHBvciB1c3VhcmlvXG4gICAgaWYgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUgPT09IEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUiAmJiBjb3Vwb24udXNlckV4Y2x1c2l2ZUVtYWlsICE9PSB1c2VyLmVtYWlsKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gbsOjbyDDqSB2w6FsaWRvIHBhcmEgZXN0ZSB1c3XDoXJpby4nKVxuXG4gICAgc3dpdGNoIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlKSB7XG4gICAgICBjYXNlIEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVI6XG4gICAgICAgIHJldHVybiB1c2VyLmlzU3Vic2NyaWJlciA/IHRydWUgOiBmYWxzZVxuXG4gICAgICBjYXNlIEV4Y2x1c2l2aXRpZXMuSU5BQ1RJVkVfU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHVzZXIuaXNTdWJzY3JpYmVyID8gZmFsc2UgOiB0cnVlXG5cbiAgICAgIGNhc2UgRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHVzZXIuaXNTdWJzY3JpYmVyID8gZmFsc2UgOiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbjogQ291cG9uKSB7XG4gICAgbGV0IGNvdXBvbkNhdGVnb3JpZXM6IHsgaWQ6IHN0cmluZzsgZmlyZXN0b3JlSWQ6IHN0cmluZyB9W10gPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBsZXQgYzogQ2F0ZWdvcnkgJiB7IGZpcmVzdG9yZUlkPzogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXQoe1xuICAgICAgICBpZDogY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXG4gICAgICB9KVxuICAgICAgY291cG9uQ2F0ZWdvcmllcy5wdXNoKHsgaWQ6IGMuaWQsIGZpcmVzdG9yZUlkOiBjLmZpcmVzdG9yZUlkIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdXBvbkNhdGVnb3JpZXNcbiAgfVxuXG4gIHByaXZhdGUgc2VwYXJhdGVWYWxpZENvdXBvbnMgPSAoXG4gICAgY291cG9uczogQ291cG9uW10sXG4gICAgdXNlckVtYWlsOiBzdHJpbmcsXG4gICk6IHsgdmFsaWRzOiBDb3Vwb25bXTsgaW52YWxpZHM6IEludmFsaWRDb3Vwb25FcnJvcltdIH0gPT5cbiAgICBjb3Vwb25zXG4gICAgICAubWFwKChjb3Vwb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIShjb3Vwb24gaW5zdGFuY2VvZiBDb3Vwb24pKSB0aHJvdyBuZXcgSW52YWxpZENvdXBvbkVycm9yKCdDdXBvbSBpbnbDoWxpZG8uJylcbiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSkgcmV0dXJuIGNvdXBvblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvciBhcyBJbnZhbGlkQ291cG9uRXJyb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChjdXJyZW50LCBjb3Vwb24pID0+ICh7XG4gICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAuLi4oY291cG9uIGluc3RhbmNlb2YgQ291cG9uXG4gICAgICAgICAgICA/IHsgdmFsaWRzOiBbLi4uY3VycmVudC52YWxpZHMsIGNvdXBvbl0gfVxuICAgICAgICAgICAgOiB7IGludmFsaWRzOiBbLi4uY3VycmVudC5pbnZhbGlkcywgY291cG9uXSB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZHM6IFtdIGFzIENvdXBvbltdLFxuICAgICAgICAgIGludmFsaWRzOiBbXSBhcyBJbnZhbGlkQ291cG9uRXJyb3JbXSxcbiAgICAgICAgfSxcbiAgICAgIClcbn1cbiJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBS0wsYUFBYSxFQUNiLE1BQU0sRUFFTixXQUFXLEVBQ1gsYUFBYSxFQUdiLEtBQUssRUFFTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7O0FBSzdDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQytDLGdCQUFrQyxFQUN4QyxXQUFrQixFQUNiLGVBQWdDLEVBQzdCLGtCQUFzQztRQUh4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUEwQi9FLDRCQUF1QixHQUFHLENBQUMsU0FBaUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQSxDQUFBO1FBOE41Rix5QkFBb0IsR0FBRyxDQUM3QixPQUFpQixFQUNqQixTQUFpQixFQUNxQyxFQUFFLENBQ3hELE9BQU87YUFDSixHQUFHLENBQUMs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QUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO2FBQ2hFO1lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtRQUN6QixDQUFDO0tBQUE7OzJHQTNQVSxhQUFhLGtCQUVkLGtCQUFrQixhQUNsQixZQUFZLGFBQ1osaUJBQWlCLGFBQ2pCLG9CQUFvQjsrR0FMbkIsYUFBYSxjQUZaLE1BQU07NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBDYXRlZ29yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBDaGVja291dCxcbiAgQ2hlY2tvdXRTdWJzY3JpcHRpb24sXG4gIENoZWNrb3V0VHlwZXMsXG4gIENvdXBvbixcbiAgQ291cG9uUmVwb3NpdG9yeSxcbiAgQ291cG9uVHlwZXMsXG4gIEV4Y2x1c2l2aXRpZXMsXG4gIExpbmVJdGVtLFxuICBPcmRlclJlcG9zaXRvcnksXG4gIFNob3BzLFxuICBVc2VyLFxuICBXaGVyZSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBERUZBVUxUX1NIT1AgfSBmcm9tICcuLi9jb25zdHMnXG5cbmltcG9ydCB7IEludmFsaWRDb3Vwb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ291cG9uU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ0NvdXBvblJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNvdXBvblJlcG9zaXRvcnk6IENvdXBvblJlcG9zaXRvcnksXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIEBJbmplY3QoJ09yZGVyUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJSZXBvc2l0b3J5OiBPcmRlclJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVJlcG9zaXRvcnk6IENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgKSB7fVxuXG4gIGNoZWNrQ291cG9uKFxuICAgIG5pY2tuYW1lOiBzdHJpbmcsXG4gICAgdXNlckVtYWlsOiBzdHJpbmcsXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxuICAgIHBsYW4/OiBzdHJpbmcsXG4gICAgY2hlY2tvdXQ/OiBQYXJ0aWFsPENoZWNrb3V0PixcbiAgICBpc1N1YnNjcmlwdGlvbj86IGJvb2xlYW4sXG4gICk6IE9ic2VydmFibGU8Q291cG9uPiB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmNvdXBvblJlcG9zaXRvcnkuZmluZCh7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBuaWNrbmFtZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogbmlja25hbWUgfSxcbiAgICAgICAgICBhY3RpdmU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IHRydWUgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY291cG9ucykgPT4gdGhpcy5jaGVja0NvdXBvblJ1bGVzKGNvdXBvbnMsIGNoZWNrb3V0VHlwZSwgcGxhbiwgY2hlY2tvdXQsIGlzU3Vic2NyaXB0aW9uKSksXG4gICAgICBjb25jYXRNYXAoKGNvdXBvbjogQ291cG9uKSA9PiB0aGlzLmNoZWNrQ291cG9uVXNlQW5kTGltaXQoY291cG9uLCB1c2VyRW1haWwsIGNoZWNrb3V0KSksXG4gICAgICBtYXAoKGNvdXBvbjogQ291cG9uKSA9PiB0aGlzLmlzVmFsaWRDb3Vwb24oY291cG9uLCB1c2VyRW1haWwpKSxcbiAgICAgIG1hcCgoY291cG9uOiBDb3Vwb24pID0+IGNvdXBvbiksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBlbWFpbElzRnJvbUNvbGxhYm9yYXRvciA9ICh1c2VyRW1haWw6IHN0cmluZyk6IGJvb2xlYW4gPT4gISF1c2VyRW1haWw/Lm1hdGNoKC9AYjRhLmNvbS5ici9nKVxuXG4gIHByaXZhdGUgY2hlY2tDb3Vwb25SdWxlcyhcbiAgICBjb3Vwb25zLFxuICAgIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcyxcbiAgICBwbGFuPzogc3RyaW5nLFxuICAgIGNoZWNrb3V0PzogUGFydGlhbDxDaGVja291dD4sXG4gICAgaXNTdWJzY3JpcHRpb24/OiBib29sZWFuLFxuICApIHtcbiAgICAvLyBDYXNvIG7Do28gYWNoZSBuZW5odW0gY3Vwb20sIHJldG9ybmEgZXJyb1xuICAgIGlmIChjb3Vwb25zLmNvdW50IDwgMSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ0N1cG9tIGludsOhbGlkby4nKVxuICAgIH1cblxuICAgIC8vIEdldCBQcmltZWlybyBDdXBvbSAobyBmaW5kIGRvIHJlcG9zaXRvcnkgcmV0b3JuYSB1bSBhcnJheSlcbiAgICBjb25zdCBjb3Vwb246IENvdXBvbiA9IGNvdXBvbnMuZGF0YS5zaGlmdCgpXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBjdXBvbSDDqSBhcGxpY2F2ZWwgbmEgbG9qYVxuICAgIGNvbnN0IGlzSW5TaG9wID0gY291cG9uLnNob3BBdmFpbGFiaWxpdHkgPT09IFNob3BzLkFMTCB8fCBjb3Vwb24uc2hvcEF2YWlsYWJpbGl0eSA9PT0gdGhpcy5kZWZhdWx0U2hvcFxuXG4gICAgLy8gQ3Vwb24gbsOjbyBhcGxpY2F2ZWwgYSBsb2phIHJldG9ybmEgZXJyb1xuICAgIGlmICghaXNJblNob3ApIHJldHVybiB0aHJvd0Vycm9yKCdDdXBvbSBpbnbDoWxpZG8gcGFyYSBsb2phLicpXG5cbiAgICAvLyBWZXJpZmljYSBzZSBvIGNvdXBvbiDDqSBhcGxpY2FkbyBubyBjaGVja291dCBxdWUgZXN0w6Egc2VuZG8gcmVhbGl6YWRvXG4gICAgY29uc3QgaXNDaGVja291dFR5cGUgPSBjb3Vwb24uY2hlY2tvdXRUeXBlID09PSBDaGVja291dFR5cGVzLkFMTCB8fCBjb3Vwb24uY2hlY2tvdXRUeXBlID09PSBjaGVja291dFR5cGVcblxuICAgIC8vIEN1cG9uIG7Do28gYXBsaWNhdmVsIGFvIGNoZWNrb3V0IHJldG9ybmEgZXJyb1xuICAgIGlmICghaXNDaGVja291dFR5cGUpIHJldHVybiB0aHJvd0Vycm9yKCdDdXBvbSBpbnbDoWxpZG8uIEVycm8gZGUgY2hlY2tvdXQuJylcblxuICAgIC8vIFZlcmlmaWNhIHNlIG8gY3Vwb20gw6kgb3UgcG9kZSBzZXIgYXBsaWNhZG8gcGFyYSBzdWJzY3JpcHRpb25cbiAgICBpZiAoY2hlY2tvdXRUeXBlID09PSBDaGVja291dFR5cGVzLkFMTCB8fCBjaGVja291dFR5cGUgPT09IENoZWNrb3V0VHlwZXMuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAvLyBTZSBvIGN1cG9tIHRpdmVyIHVtIHBsYW5vIGFzc29jaWFkbywgdmVyaWZpY2Egc2Ugw6kgbyBtZXNtbyBwbGFubyBkbyBjaGVja291dCBkYSBhc3NpbmF0dXJhXG4gICAgICBpZiAoY291cG9uLnBsYW4gJiYgY291cG9uLnBsYW4udG9VcHBlckNhc2UoKSAhPT0gcGxhbi50b1VwcGVyQ2FzZSgpKVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignQ3Vwb20gaW52w6FsaWRvIHBhcmEgc3VhIGFzc2luYXR1cmEuJylcbiAgICB9XG5cbiAgICBpZiAoaXNTdWJzY3JpcHRpb24pIHJldHVybiBvZihjb3Vwb24pXG5cbiAgICAvLyBWZXJpZmljYSBzZSBwb3NzdWkgbyB2YWxvciBtaW5pbW8gZGUgY29tcHJhIHBhcmEgdXRpbGl6YcOnw6NvIGRvIGN1cG9tXG4gICAgY29uc3QgaGFzTWluU3ViVG90YWwgPSB0aGlzLmhhc01pblN1YlRvdGFsKGNvdXBvbiwgY2hlY2tvdXQpXG5cbiAgICAvLyBTZSBuw6NvIHRlbSB2YWxvciBtw61uaW1vIGF0aW5naWRvLCByZXRvcm5hIGVycm9cbiAgICBpZiAoIWhhc01pblN1YlRvdGFsKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgIGBWYWxvciBtw61uaW1vIGRlICR7SW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdCUkwnIH0pLmZvcm1hdChcbiAgICAgICAgICBjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSxcbiAgICAgICAgKX0gbsOjbyBhdGluZ2lkb2AsXG4gICAgICApXG5cbiAgICByZXR1cm4gb2YoY291cG9uKVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkQ291cG9uKGNvdXBvbjogQ291cG9uLCB1c2VyRW1haWw6IHN0cmluZyk6IENvdXBvbiB7XG4gICAgLy8gVmVyaWZpY2EgYSBkYXRhIGRlIGluaWNpbyBkZSB2YWxpZGFkZSBkbyBjdXBvbVxuICAgIGlmIChjb3Vwb24/LmJlZ2luQXQgPiBuZXcgRGF0ZSgpKSB0aHJvdyBuZXcgSW52YWxpZENvdXBvbkVycm9yKCdDdXBvbSBhaW5kYSBuw6NvIGxpYmVyYWRvLicpXG5cbiAgICAvLyBWZXJpZmljYSBhIGRhdGEgZGUgdmFsaWRhZGUgZG8gY3Vwb21cbiAgICBpZiAoY291cG9uPy5leHBpcmVzSW4gPCBuZXcgRGF0ZSgpKSB0aHJvdyBuZXcgSW52YWxpZENvdXBvbkVycm9yKCdDdXBvbSBleHBpcmFkby4nKVxuXG4gICAgcmV0dXJuIGNvdXBvblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0NvdXBvblVzZUFuZExpbWl0KGNvdXBvbjogQ291cG9uLCB1c2VyRW1haWw6IHN0cmluZywgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KSB7XG4gICAgY29uc3Qgb3JkZXJzID0gYXdhaXQgdGhpcy5vcmRlclJlcG9zaXRvcnkuZmluZCh7XG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGNvdXBvbjogeyBpZDogY291cG9uLmlkIH0sXG4gICAgICAgIHBheW1lbnQ6IHsgc3RhdHVzOiAncGFpZCcgfSxcbiAgICAgICAgLi4uKGNvdXBvbi5pbmZsdWVuY2VyRW1haWwgPyB7IHVzZXI6IHsgZW1haWw6IHVzZXJFbWFpbCB9IH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICAvLyBvcmRlcnMgcXVlIHVzdWFyaW8gamEgZmV6IGNvbSBvIGN1cG9tXG4gICAgY29uc3Qgb3JkZXJzVXNlckNvdXBvbiA9IG9yZGVycy5kYXRhLmZpbHRlcigobykgPT4gby51c2VyLmVtYWlsID09IHVzZXJFbWFpbClcblxuICAgIC8vIFZlcmlmaWNhIG8gbGltaXRlIGRlIHVzbyBkZSBjdXBvbSBwb3IgdXN1YXJpb1xuICAgIGlmIChjb3Vwb24udXNlTGltaXRQZXJVc2VyICYmIG9yZGVyc1VzZXJDb3Vwb24ubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignTGltaXRlIGRlIHVzbyBwb3IgdXN1w6FyaW8gYXRpbmdpZG8uJylcblxuICAgIC8vIFZlcmlmaWNhIG8gbGltaXRlIGRlIHVzbyBnZXJhbCBwb3IgdXN1YXJpb1xuICAgIGlmIChjb3Vwb24udXNlTGltaXQgJiYgb3JkZXJzLmRhdGEubGVuZ3RoID49IGNvdXBvbi51c2VMaW1pdClcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ291cG9uRXJyb3IoJ0xpbWl0ZSBkZSB1c28gYXRpbmdpZG8uJylcblxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMudXNlclZhbGlkYXRpb25BbmRTdWJzY3JpcHRpb25TdGF0dXMoY291cG9uLCBjaGVja291dD8udXNlcilcbiAgICBpZiAoIXZhbGlkVXNlcikgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJylcblxuICAgIGNvbnN0IGhhc1Byb2R1Y3RDYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5oYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb24sIGNoZWNrb3V0KVxuXG4gICAgaWYgKCFoYXNQcm9kdWN0Q2F0ZWdvcmllcykgdGhyb3cgJ1NldSBjYXJyaW5obyBuw6NvIHBvc3N1aSBwcm9kdXRvcyBlbGVnw612ZWlzIHBhcmEgZGVzY29udG8uJ1xuXG4gICAgcmV0dXJuIGNvdXBvblxuICB9XG5cbiAgcHVibGljIGNhbGNEaXNjb3VudFN1YnNjcmlwdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXRTdWJzY3JpcHRpb24+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAvL1xuICAgIGxldCBkaXNjb3VudCA9IDBcblxuICAgIGlmIChjb3Vwb24udHlwZSA9PT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50XG4gICAgZWxzZSBpZiAoY291cG9uLnR5cGUgPT09IENvdXBvblR5cGVzLlBFUkNFTlRBR0UpXG4gICAgICBkaXNjb3VudCA9IGNoZWNrb3V0LnN1YnNjcmlwdGlvblBsYW4ucmVjdXJyZW5jZVByaWNlICogKGNvdXBvbi5kaXNjb3VudCAvIDEwMClcblxuICAgIHJldHVybiBvZihkaXNjb3VudClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYWxjRGlzY291bnRTaG9wcGluZyhjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZGlzY291bnQgPSAwXG5cbiAgICBzd2l0Y2ggKGNvdXBvbi50eXBlKSB7XG4gICAgICBjYXNlIENvdXBvblR5cGVzLkFCU09MVVRFOiB7XG4gICAgICAgIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIENvdXBvblR5cGVzLlBFUkNFTlRBR0U6IHtcbiAgICAgICAgZGlzY291bnQgPSBhd2FpdCB0aGlzLmNhbGNTaG9wcGluZ1BlcmNlbnRhZ2VEaXNjb3VudChjb3Vwb24sIGNoZWNrb3V0KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjU2hvcHBpbmdQZXJjZW50YWdlRGlzY291bnQoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuICAgIGNvbnN0IHNob3AgPSBjaGVja291dC5zaG9wXG4gICAgbGV0IGxpbmVJdGVuc0Rpc2NvdW50ID0gW11cbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDb3Vwb25DYXRlZ29yaWVzSWQoY291cG9uKVxuXG4gICAgaWYgKGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMgJiYgY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgaWYgKGkuY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0LmlkID09IGMgfHwgY2F0LmZpcmVzdG9yZUlkID09IGMpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtc1xuICAgIH1cblxuICAgIGNvbnN0IHN1YlRvdGFsID1cbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50LnJlZHVjZShcbiAgICAgICAgKGFjYywgY3VycjogTGluZUl0ZW0pID0+XG4gICAgICAgICAgY2hlY2tvdXQudXNlcj8uaXNTdWJzY3JpYmVyICYmIGN1cnIucHJpY2Vbc2hvcF0/LnN1YnNjcmliZXJQcmljZVxuICAgICAgICAgICAgPyBhY2MgKyBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2UgKiBjdXJyLnF1YW50aXR5XG4gICAgICAgICAgICA6IGFjYyArIGN1cnIucHJpY2VQYWlkICogY3Vyci5xdWFudGl0eSxcbiAgICAgICAgMCxcbiAgICAgICkgfHwgMFxuXG4gICAgZGlzY291bnQgPSBzdWJUb3RhbCAqIChjb3Vwb24uZGlzY291bnQgLyAxMDApXG5cbiAgICByZXR1cm4gZGlzY291bnRcbiAgfVxuXG4gIHByaXZhdGUgaGFzTWluU3ViVG90YWwoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IGJvb2xlYW4ge1xuICAgIGlmICghY291cG9uLm1pblN1YlRvdGFsVmFsdWUpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBzaG9wID0gY2hlY2tvdXQuc2hvcFxuXG4gICAgbGV0IHN1YlRvdGFsID1cbiAgICAgIGNoZWNrb3V0LmxpbmVJdGVtcz8ucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PlxuICAgICAgICAgIGNoZWNrb3V0LnVzZXI/LmlzU3Vic2NyaWJlciAmJiBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2VcbiAgICAgICAgICAgID8gYWNjICsgY3Vyci5wcmljZVtzaG9wXT8uc3Vic2NyaWJlclByaWNlICogY3Vyci5xdWFudGl0eVxuICAgICAgICAgICAgOiBhY2MgKyBjdXJyLnByaWNlUGFpZCAqIGN1cnIucXVhbnRpdHksXG4gICAgICAgIDAsXG4gICAgICApIHx8IDBcblxuICAgIGlmIChjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSA8PSBzdWJUb3RhbCkgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFzUHJvZHVjdENhdGVnb3JpZXMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyB8fCAhY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbilcblxuICAgIGNvbnN0IGhhc0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaSkgPT4ge1xuICAgICAgaWYgKCFpLmNhdGVnb3JpZXMgfHwgIWkuY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0LmlkID09IGMgfHwgY2F0LmZpcmVzdG9yZUlkID09IGMpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gaGFzQ2F0ZWdvcmllcy5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgdXNlclZhbGlkYXRpb25BbmRTdWJzY3JpcHRpb25TdGF0dXMoY291cG9uOiBDb3Vwb24sIHVzZXI6IFVzZXIpOiBib29sZWFuIHtcbiAgICBpZiAoY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5BTExfVVNFUlMpIHJldHVybiB0cnVlXG4gICAgaWYgKCF1c2VyKSByZXR1cm4gdHJ1ZVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBlbWFpbCBkbyB1c3XDoXJpbyDDqSBjb29ycG9yYXRpdm9cbiAgICBpZiAoIXRoaXMuZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IodXNlci5lbWFpbCkgJiYgY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVm9jw6ogbsOjbyDDqSBjb2xhYm9yYWRvci4nKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBlbWFpbCBkbyB1c3XDoXJpbyDDqSBhc3NvY2lhZG8gYW8gY3Vwb20gZGUgdXNvIHBvciB1c3VhcmlvXG4gICAgaWYgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUgPT09IEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUiAmJiBjb3Vwb24udXNlckV4Y2x1c2l2ZUVtYWlsICE9PSB1c2VyLmVtYWlsKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gbsOjbyDDqSB2w6FsaWRvIHBhcmEgZXN0ZSB1c3XDoXJpby4nKVxuXG4gICAgc3dpdGNoIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlKSB7XG4gICAgICBjYXNlIEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVI6XG4gICAgICAgIHJldHVybiB1c2VyLmlzU3Vic2NyaWJlciA/IHRydWUgOiBmYWxzZVxuXG4gICAgICBjYXNlIEV4Y2x1c2l2aXRpZXMuSU5BQ1RJVkVfU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHVzZXIuaXNTdWJzY3JpYmVyID8gZmFsc2UgOiB0cnVlXG5cbiAgICAgIGNhc2UgRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHVzZXIuaXNTdWJzY3JpYmVyID8gZmFsc2UgOiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbjogQ291cG9uKSB7XG4gICAgbGV0IGNvdXBvbkNhdGVnb3JpZXM6IHsgaWQ6IHN0cmluZzsgZmlyZXN0b3JlSWQ6IHN0cmluZyB9W10gPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBsZXQgYzogQ2F0ZWdvcnkgJiB7IGZpcmVzdG9yZUlkPzogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXQoe1xuICAgICAgICBpZDogY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXG4gICAgICB9KVxuICAgICAgY291cG9uQ2F0ZWdvcmllcy5wdXNoKHsgaWQ6IGMuaWQsIGZpcmVzdG9yZUlkOiBjLmZpcmVzdG9yZUlkIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdXBvbkNhdGVnb3JpZXNcbiAgfVxuXG4gIHByaXZhdGUgc2VwYXJhdGVWYWxpZENvdXBvbnMgPSAoXG4gICAgY291cG9uczogQ291cG9uW10sXG4gICAgdXNlckVtYWlsOiBzdHJpbmcsXG4gICk6IHsgdmFsaWRzOiBDb3Vwb25bXTsgaW52YWxpZHM6IEludmFsaWRDb3Vwb25FcnJvcltdIH0gPT5cbiAgICBjb3Vwb25zXG4gICAgICAubWFwKChjb3Vwb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIShjb3Vwb24gaW5zdGFuY2VvZiBDb3Vwb24pKSB0aHJvdyBuZXcgSW52YWxpZENvdXBvbkVycm9yKCdDdXBvbSBpbnbDoWxpZG8uJylcbiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSkgcmV0dXJuIGNvdXBvblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvciBhcyBJbnZhbGlkQ291cG9uRXJyb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChjdXJyZW50LCBjb3Vwb24pID0+ICh7XG4gICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAuLi4oY291cG9uIGluc3RhbmNlb2YgQ291cG9uXG4gICAgICAgICAgICA/IHsgdmFsaWRzOiBbLi4uY3VycmVudC52YWxpZHMsIGNvdXBvbl0gfVxuICAgICAgICAgICAgOiB7IGludmFsaWRzOiBbLi4uY3VycmVudC5pbnZhbGlkcywgY291cG9uXSB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZHM6IFtdIGFzIENvdXBvbltdLFxuICAgICAgICAgIGludmFsaWRzOiBbXSBhcyBJbnZhbGlkQ291cG9uRXJyb3JbXSxcbiAgICAgICAgfSxcbiAgICAgIClcbn1cbiJdfQ==
@@ -150,10 +150,7 @@ class CouponService {
150
150
  checkCouponUseAndLimit(coupon, userEmail, checkout) {
151
151
  return __awaiter(this, void 0, void 0, function* () {
152
152
  const orders = yield this.orderRepository.find({
153
- filters: {
154
- coupon: { id: coupon.id },
155
- payment: { status: 'paid' },
156
- },
153
+ filters: Object.assign({ coupon: { id: coupon.id }, payment: { status: 'paid' } }, (coupon.influencerEmail ? { user: { email: userEmail } } : {})),
157
154
  });
158
155
  // orders que usuario ja fez com o cupom
159
156
  const ordersUserCoupon = orders.data.filter((o) => o.user.email == userEmail);
@@ -377,11 +374,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
377
374
  }] }]; } });
378
375
 
379
376
  class CartService {
380
- constructor(authService, checkoutService, defaultShop, productRepository, variantRepository, buy2WinRepository) {
377
+ constructor(authService, checkoutService, defaultShop, productRepository, categoryRepository, variantRepository, buy2WinRepository) {
381
378
  this.authService = authService;
382
379
  this.checkoutService = checkoutService;
383
380
  this.defaultShop = defaultShop;
384
381
  this.productRepository = productRepository;
382
+ this.categoryRepository = categoryRepository;
385
383
  this.variantRepository = variantRepository;
386
384
  this.buy2WinRepository = buy2WinRepository;
387
385
  this.cartSubject = new Subject();
@@ -520,7 +518,10 @@ class CartService {
520
518
  catch (error) {
521
519
  if (!(error instanceof NotFoundError))
522
520
  throw error;
523
- variant = yield this.variantRepository.get({ id: productId });
521
+ const { data: variants } = yield this.variantRepository.find({ filters: { id: productId } });
522
+ variant = variants.shift();
523
+ if (!variant)
524
+ throw error;
524
525
  product = yield this.productRepository.get({ id: variant.productId });
525
526
  }
526
527
  return Object.assign(Object.assign({}, product.toPlain()), (variant && Object.assign({}, variant.toPlain())));
@@ -548,12 +549,18 @@ class CartService {
548
549
  if (!(campaign.startDate <= today) && !(campaign.endDate >= today))
549
550
  continue;
550
551
  if (campaign.activeCategory) {
551
- const categoriesCampaing = campaign.categories.map((c) => c.id);
552
+ const categoriesCampaing = campaign.categories.map((c) => c.id.toString());
553
+ const categoriesCampaingFullTree = [];
554
+ for (const id of categoriesCampaing) {
555
+ const children = yield this.categoryRepository.getChildren(parseInt(id));
556
+ categoriesCampaingFullTree.push(id, ...children.map((c) => c.id.toString()));
557
+ }
558
+ const categoriesCampaingTree = [...new Set(categoriesCampaingFullTree)];
552
559
  const filterProductsCategories = checkout.lineItems.filter((l) => {
553
560
  var _a;
554
561
  if (!l.categories || !((_a = l.categories) === null || _a === void 0 ? void 0 : _a.length))
555
562
  return true;
556
- return l.categories.some((c) => categoriesCampaing.some((cat) => cat == c));
563
+ return l.categories.some((c) => categoriesCampaingTree.some((cat) => cat == c));
557
564
  });
558
565
  if (filterProductsCategories.length) {
559
566
  const cartTotalCategories = filterProductsCategories.reduce((a, b) => a + b.pricePaid * b.quantity, 0);
@@ -614,7 +621,7 @@ class CartService {
614
621
  });
615
622
  }
616
623
  }
617
- CartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, deps: [{ token: AuthService }, { token: CheckoutService }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'VariantRepository' }, { token: 'Buy2WinRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
624
+ CartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, deps: [{ token: AuthService }, { token: CheckoutService }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'CategoryRepository' }, { token: 'VariantRepository' }, { token: 'Buy2WinRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
618
625
  CartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService });
619
626
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, decorators: [{
620
627
  type: Injectable
@@ -624,6 +631,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
624
631
  }] }, { type: undefined, decorators: [{
625
632
  type: Inject,
626
633
  args: ['ProductRepository']
634
+ }] }, { type: undefined, decorators: [{
635
+ type: Inject,
636
+ args: ['CategoryRepository']
627
637
  }] }, { type: undefined, decorators: [{
628
638
  type: Inject,
629
639
  args: ['VariantRepository']