ng-miam 9.2.0 → 9.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/ng-miam.umd.js +927 -634
- package/bundles/ng-miam.umd.js.map +1 -1
- package/bundles/ng-miam.umd.min.js +1 -1
- package/bundles/ng-miam.umd.min.js.map +1 -1
- package/esm2015/lib/_components/accordion/accordion.component.js +2 -2
- package/esm2015/lib/_components/addon-link/addon-link.component.js +3 -3
- package/esm2015/lib/_components/counter-input/counter-input.component.js +14 -12
- package/esm2015/lib/_components/guests-dropdown/guests-dropdown.component.js +8 -5
- package/esm2015/lib/_components/icon/icon.component.js +2 -2
- package/esm2015/lib/_components/like-button/like-button.component.js +6 -5
- package/esm2015/lib/_components/modal/modal.component.js +39 -36
- package/esm2015/lib/_components/no-pos-selected/no-pos-selected.component.js +2 -2
- package/esm2015/lib/_components/product-card/out-of-stock-overlay/out-of-stock-overlay.component.js +15 -6
- package/esm2015/lib/_components/product-card/product-card-skeleton/product-card-skeleton.component.js +1 -1
- package/esm2015/lib/_components/product-card/product-card.component.js +25 -7
- package/esm2015/lib/_components/products-picker/products-picker.component.js +2 -2
- package/esm2015/lib/_components/recipe-promotion-badge/recipe-promotion-badge.component.js +2 -2
- package/esm2015/lib/_components/sponsor-blocks/sponsor-image-and-text-block/sponsor-image-and-text-block.component.js +4 -4
- package/esm2015/lib/_components/sponsor-blocks/sponsor-logo-block/sponsor-logo-block.component.js +4 -4
- package/esm2015/lib/_components/sponsor-blocks/sponsor-picture-block/sponsor-picture-block.component.js +3 -3
- package/esm2015/lib/_components/sponsor-blocks/sponsor-small-picture-block/sponsor-small-picture-block.component.js +3 -3
- package/esm2015/lib/_components/sponsor-blocks/sponsor-text-and-image-block/sponsor-text-and-image-block.component.js +4 -4
- package/esm2015/lib/_models/basket-actions/basket-action.js +2 -2
- package/esm2015/lib/_services/basket-recipe-cleanup.service.js +62 -0
- package/esm2015/lib/_services/basket-transfer.service.js +3 -2
- package/esm2015/lib/_services/baskets-synchronizing/baskets-synchronizer.service.js +9 -3
- package/esm2015/lib/_services/context.service.js +17 -13
- package/esm2015/lib/_services/interceptor.service.js +10 -3
- package/esm2015/lib/_services/recipe-details.service.js +22 -7
- package/esm2015/lib/_services/recipes.service.js +5 -5
- package/esm2015/lib/_services/store-locator.service.js +10 -3
- package/esm2015/lib/_services/store-out-of-stock.service.js +57 -0
- package/esm2015/lib/_services/user.service.js +3 -3
- package/esm2015/lib/_types/builded/mealz-interface.js +1 -1
- package/esm2015/lib/_web-components/basket-preview/basket-preview-block/basket-preview-block.component.js +3 -2
- package/esm2015/lib/_web-components/basket-preview/basket-preview-line/basket-preview-line.component.js +130 -122
- package/esm2015/lib/_web-components/basket-preview/basket-preview-product/basket-preview-product.component.js +44 -34
- package/esm2015/lib/_web-components/basket-preview/replace-item/replace-item.component.js +14 -7
- package/esm2015/lib/_web-components/list-scan/files-inputs/files-inputs.component.js +2 -2
- package/esm2015/lib/_web-components/meals-planner/meals-planner-form/meals-planner-form.component.js +13 -13
- package/esm2015/lib/_web-components/no-supplier-onboarding/no-supplier-onboarding.component.js +8 -12
- package/esm2015/lib/_web-components/preferences/preferences-search/preferences-search.component.js +2 -2
- package/esm2015/lib/_web-components/preferences/preferences.component.js +28 -28
- package/esm2015/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.js +118 -97
- package/esm2015/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.js +21 -14
- package/esm2015/lib/_web-components/recipe-catalog/catalog-article-card/catalog-article-card.component.js +9 -8
- package/esm2015/lib/_web-components/recipe-catalog/catalog-category/catalog-category.component.js +10 -8
- package/esm2015/lib/_web-components/recipe-catalog/catalog-header/catalog-header.component.js +3 -3
- package/esm2015/lib/_web-components/recipe-catalog/catalog-toolbar/catalog-toolbar.component.js +14 -10
- package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +42 -37
- package/esm2015/lib/_web-components/recipe-details/last-order-modal/last-order-modal.component.js +2 -2
- package/esm2015/lib/_web-components/recipe-details/recipe-addon/recipe-addon.component.js +4 -3
- package/esm2015/lib/_web-components/recipe-details/recipe-details-infos/recipe-details-infos.component.js +16 -13
- package/esm2015/lib/_web-components/recipe-details/recipe-details-ingredients/recipe-details-ingredients.component.js +4 -3
- package/esm2015/lib/_web-components/recipe-details/recipe-details.component.js +98 -103
- package/esm2015/lib/_web-components/recipe-details/store-locator-link/store-locator-link.component.js +8 -7
- package/esm2015/lib/_web-components/recipe-modal/recipe-modal.component.js +7 -2
- package/esm2015/lib/environments/environment.js +2 -2
- package/esm2015/lib/environments/environment.prod.js +2 -2
- package/esm2015/lib/environments/version.js +2 -2
- package/esm2015/lib/ng-miam.module.js +4 -1
- package/fesm2015/ng-miam.js +882 -627
- package/fesm2015/ng-miam.js.map +1 -1
- package/lib/_components/components.module.d.ts +2 -1
- package/lib/_components/components.module.d.ts.map +1 -1
- package/lib/_components/product-card/out-of-stock-overlay/out-of-stock-overlay.component.d.ts +7 -3
- package/lib/_components/product-card/out-of-stock-overlay/out-of-stock-overlay.component.d.ts.map +1 -1
- package/lib/_components/product-card/product-card.component.d.ts +2 -0
- package/lib/_components/product-card/product-card.component.d.ts.map +1 -1
- package/lib/_models/basket-actions/basket-action.d.ts.map +1 -1
- package/lib/_services/basket-recipe-cleanup.service.d.ts +21 -0
- package/lib/_services/basket-recipe-cleanup.service.d.ts.map +1 -0
- package/lib/_services/basket-transfer.service.d.ts.map +1 -1
- package/lib/_services/baskets-synchronizing/baskets-synchronizer.service.d.ts +1 -1
- package/lib/_services/baskets-synchronizing/baskets-synchronizer.service.d.ts.map +1 -1
- package/lib/_services/context.service.d.ts +3 -1
- package/lib/_services/context.service.d.ts.map +1 -1
- package/lib/_services/interceptor.service.d.ts +1 -0
- package/lib/_services/interceptor.service.d.ts.map +1 -1
- package/lib/_services/recipe-details.service.d.ts +8 -2
- package/lib/_services/recipe-details.service.d.ts.map +1 -1
- package/lib/_services/recipes.service.d.ts +2 -6
- package/lib/_services/recipes.service.d.ts.map +1 -1
- package/lib/_services/store-locator.service.d.ts +1 -0
- package/lib/_services/store-locator.service.d.ts.map +1 -1
- package/lib/_services/store-out-of-stock.service.d.ts +13 -0
- package/lib/_services/store-out-of-stock.service.d.ts.map +1 -0
- package/lib/_services/user.service.d.ts +2 -2
- package/lib/_services/user.service.d.ts.map +1 -1
- package/lib/_types/builded/mealz-interface.d.ts +4 -0
- package/lib/_types/builded/mealz-interface.d.ts.map +1 -1
- package/lib/_web-components/basket-preview/replace-item/replace-item.component.d.ts +1 -0
- package/lib/_web-components/basket-preview/replace-item/replace-item.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.d.ts +1 -0
- package/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.d.ts +1 -1
- package/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-details/recipe-details.component.d.ts +1 -1
- package/lib/_web-components/recipe-details/recipe-details.component.d.ts.map +1 -1
- package/lib/_web-components/recipe-modal/recipe-modal.component.d.ts.map +1 -1
- package/lib/environments/version.d.ts +1 -1
- package/lib/ng-miam.module.d.ts.map +1 -1
- package/miam-style.css +1 -1
- package/package.json +1 -1
|
@@ -19,6 +19,7 @@ import { RecipesService } from './recipes.service';
|
|
|
19
19
|
import { StoreLocatorService } from './store-locator.service';
|
|
20
20
|
import { SuppliersService } from './suppliers.service';
|
|
21
21
|
import { UserService } from './user.service';
|
|
22
|
+
import { BasketRecipeCleanupService } from './basket-recipe-cleanup.service';
|
|
22
23
|
import * as i0 from "@angular/core";
|
|
23
24
|
import * as i1 from "./point-of-sales.service";
|
|
24
25
|
import * as i2 from "./baskets.service";
|
|
@@ -26,17 +27,18 @@ import * as i3 from "./user.service";
|
|
|
26
27
|
import * as i4 from "./preferences.service";
|
|
27
28
|
import * as i5 from "./analytics.service";
|
|
28
29
|
import * as i6 from "./recipes.service";
|
|
29
|
-
import * as i7 from "
|
|
30
|
-
import * as i8 from "
|
|
31
|
-
import * as i9 from "./
|
|
32
|
-
import * as i10 from "./
|
|
33
|
-
import * as i11 from "./
|
|
34
|
-
import * as i12 from "./
|
|
35
|
-
import * as i13 from "./
|
|
36
|
-
import * as i14 from "./
|
|
30
|
+
import * as i7 from "./basket-recipe-cleanup.service";
|
|
31
|
+
import * as i8 from "@angular/cdk/layout";
|
|
32
|
+
import * as i9 from "./suppliers.service";
|
|
33
|
+
import * as i10 from "./baskets-synchronizing";
|
|
34
|
+
import * as i11 from "./store-locator.service";
|
|
35
|
+
import * as i12 from "./recipe-likes.service";
|
|
36
|
+
import * as i13 from "./fake-retailer-cart.service";
|
|
37
|
+
import * as i14 from "./history.service";
|
|
38
|
+
import * as i15 from "./context-registry.service";
|
|
37
39
|
const SMALL_SCREEN_BP = '(min-width: 1023px)';
|
|
38
40
|
export class ContextService {
|
|
39
|
-
constructor(posService, basketsService, userService, preferencesService, analyticsService, recipesService, mediaMatcher, suppliersService, breakpointObserver,
|
|
41
|
+
constructor(posService, basketsService, userService, preferencesService, analyticsService, recipesService, basketRecipeCleanupService, mediaMatcher, suppliersService, breakpointObserver,
|
|
40
42
|
// private basketHandler: LegacyBasketsSynchronizerService,
|
|
41
43
|
basketHandler, storeLocatorService, recipeLikesService, fakeCartService, historyService, contextRegistryService) {
|
|
42
44
|
this.posService = posService;
|
|
@@ -45,6 +47,7 @@ export class ContextService {
|
|
|
45
47
|
this.preferencesService = preferencesService;
|
|
46
48
|
this.analyticsService = analyticsService;
|
|
47
49
|
this.recipesService = recipesService;
|
|
50
|
+
this.basketRecipeCleanupService = basketRecipeCleanupService;
|
|
48
51
|
this.mediaMatcher = mediaMatcher;
|
|
49
52
|
this.suppliersService = suppliersService;
|
|
50
53
|
this.breakpointObserver = breakpointObserver;
|
|
@@ -198,7 +201,8 @@ export class ContextService {
|
|
|
198
201
|
}
|
|
199
202
|
},
|
|
200
203
|
getByAddress: this.posService.getByAddress.bind(this.posService),
|
|
201
|
-
getByCoordinates: this.posService.getByCoordinates.bind(this.posService)
|
|
204
|
+
getByCoordinates: this.posService.getByCoordinates.bind(this.posService),
|
|
205
|
+
openNoSupplierOnboarding: () => this.storeLocatorService.showNoSupplierOnboarding.next(true)
|
|
202
206
|
},
|
|
203
207
|
recipes: {
|
|
204
208
|
hidden: this.recipesService.hidden,
|
|
@@ -521,12 +525,12 @@ export class ContextService {
|
|
|
521
525
|
});
|
|
522
526
|
}
|
|
523
527
|
}
|
|
524
|
-
ContextService.ɵfac = function ContextService_Factory(t) { return new (t || ContextService)(i0.ɵɵinject(i1.PointOfSalesService), i0.ɵɵinject(i2.BasketsService), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.PreferencesService), i0.ɵɵinject(i5.AnalyticsService), i0.ɵɵinject(i6.RecipesService), i0.ɵɵinject(i7.
|
|
528
|
+
ContextService.ɵfac = function ContextService_Factory(t) { return new (t || ContextService)(i0.ɵɵinject(i1.PointOfSalesService), i0.ɵɵinject(i2.BasketsService), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.PreferencesService), i0.ɵɵinject(i5.AnalyticsService), i0.ɵɵinject(i6.RecipesService), i0.ɵɵinject(i7.BasketRecipeCleanupService), i0.ɵɵinject(i8.MediaMatcher), i0.ɵɵinject(i9.SuppliersService), i0.ɵɵinject(i8.BreakpointObserver), i0.ɵɵinject(i10.BasketsSynchronizerService), i0.ɵɵinject(i11.StoreLocatorService), i0.ɵɵinject(i12.RecipeLikesService), i0.ɵɵinject(i13.FakeRetailerCartService), i0.ɵɵinject(i14.HistoryService), i0.ɵɵinject(i15.ContextRegistryService)); };
|
|
525
529
|
ContextService.ɵprov = i0.ɵɵdefineInjectable({ token: ContextService, factory: ContextService.ɵfac, providedIn: 'root' });
|
|
526
530
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextService, [{
|
|
527
531
|
type: Injectable,
|
|
528
532
|
args: [{
|
|
529
533
|
providedIn: 'root'
|
|
530
534
|
}]
|
|
531
|
-
}], function () { return [{ type: i1.PointOfSalesService }, { type: i2.BasketsService }, { type: i3.UserService }, { type: i4.PreferencesService }, { type: i5.AnalyticsService }, { type: i6.RecipesService }, { type: i7.
|
|
532
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWlhbS9zcmMvbGliL19zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBUWxGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixF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QUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDekUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NEVBM2hCVSxjQUFjO3NEQUFkLGNBQWMsV0FBZCxjQUFjLG1CQUZiLE1BQU07dUZBRVAsY0FBYztjQUgxQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF1c2libGVQcm9wcyB9IGZyb20gJ21lYWx6LXNoYXJlZC1hbmFseXRpY3MnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNrZXRFbnRyeSwgUmVjaXBlLCBVc2VyIH0gZnJvbSAnLi4vX21vZGVscyc7XG5pbXBvcnQgeyBSZXNldEJhc2tldEFjdGlvbiB9IGZyb20gJy4uL19tb2RlbHMvYmFza2V0LWFjdGlvbnMvcmVzZXQtYmFza2V0LWFjdGlvbic7XG5pbXBvcnQgeyBSZWNpcGVQcmljaW5nIH0gZnJvbSAnLi4vX21vZGVscy9yZWNpcGUtcHJpY2luZyc7XG5pbXBvcnQgeyBDb21wYXJhYmxlUHJvZHVjdCB9IGZyb20gJy4uL190eXBlcy9idWlsZGVkL2NvbXBhcmFibGUtcHJvZHVjdCc7XG5pbXBvcnQgeyBNZWFsekludGVyZmFjZSB9IGZyb20gJy4uL190eXBlcy9idWlsZGVkL21lYWx6LWludGVyZmFjZSc7XG5pbXBvcnQgeyBNZWFsekludGVybmFsSW50ZXJmYWNlIH0gZnJvbSAnLi4vX3R5cGVzL2J1aWxkZWQvbWVhbHotaW50ZXJuYWwtaW50ZXJmYWNlJztcbmltcG9ydCB7IEV2ZW50Sm91cm5leSB9IGZyb20gJy4uL190eXBlcy9ldmVudC1qb3VybmV5LmVudW0nO1xuaW1wb3J0IHsgRXZlbnRUcmFjZSB9IGZyb20gJy4uL190eXBlcy9ldmVudC10cmFjZSc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi4vX3R5cGVzL2ljb24uZW51bSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmVXaXRoQ2xhc3MgfSBmcm9tICcuLi9fdXRpbHMvbWV0aG9kcy9kZWVwQ2xvbmUnO1xuaW1wb3J0IHsgbWVhbHpEZWJ1ZywgbWVhbHpXYXJuIH0gZnJvbSAnLi4vX3V0aWxzL21ldGhvZHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBCYXNrZXRzU3luY2hyb25pemVyU2VydmljZSB9IGZyb20gJy4vYmFza2V0cy1zeW5jaHJvbml6aW5nJztcbmltcG9ydCB7IEJhc2tldHNTZXJ2aWNlIH0gZnJvbSAnLi9iYXNrZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vY29udGV4dC1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEZha2VSZXRhaWxlckNhcnRTZXJ2aWNlIH0gZnJvbSAnLi9mYWtlLXJldGFpbGVyLWNhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBIaXN0b3J5U2VydmljZSB9IGZyb20gJy4vaGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvaW50T2ZTYWxlc1NlcnZpY2UgfSBmcm9tICcuL3BvaW50LW9mLXNhbGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi9wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2lwZUxpa2VzU2VydmljZSB9IGZyb20gJy4vcmVjaXBlLWxpa2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjaXBlc1NlcnZpY2UgfSBmcm9tICcuL3JlY2lwZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yZUxvY2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yZS1sb2NhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VwcGxpZXJzU2VydmljZSB9IGZyb20gJy4vc3VwcGxpZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5cbmNvbnN0IFNNQUxMX1NDUkVFTl9CUCA9ICcobWluLXdpZHRoOiAxMDIzcHgpJztcblxuaW50ZXJmYWNlIEljb25PdmVycmlkZSB7XG4gIGljb246IEljb247XG4gIHVybDogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0U2VydmljZSB7XG4gIHVzZXJJbmZvOiBVc2VyO1xuICBpY29uczogSWNvbk92ZXJyaWRlW107XG4gIHZpZGVvUmVjaXBlc0VuYWJsZWQgPSBmYWxzZTtcbiAgYXJ0aWNsZXNJbkNhdGFsb2dFbmFibGVkID0gZmFsc2U7XG4gIHRhZ3NPblJlY2lwZXNFbmFibGVkID0gZmFsc2U7XG4gIHNlb0VuYWJsZWQgPSBmYWxzZTtcbiAgZGVmYXVsdEluZ3JlZGllbnRQaWN0dXJlID0gJ2h0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9hc3NldHMubWlhbS50ZWNoL2dlbmVyaWMvaW1hZ2VzL2RlZmF1bHQtaW5ncmVkaWVudC1waWN0dXJlLnN2Zyc7XG4gIGRlZmF1bHRSZWNpcGVQaWN0dXJlID0gJ2h0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9hc3NldHMubWlhbS50ZWNoL2dlbmVyaWMvaW1hZ2VzL3BsYWNlaG9sZGVyLnBuZyc7XG4gIGdsb2JhbFNjcm9sbGFibGVFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gIGlzU21hbGxTY3JlZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIG9yaWdpbjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG4gIHN1cHBsaWVySGVhZGVySGVpZ2h0JDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGxvZ0xldmVsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJ2FsbCcpO1xuICBjYXRhbG9nVXJsID0gJyc7XG4gIHJlY2lwZUluZm9VcmwgPSAnJztcbiAgcmV0YWlsZXJDYXJ0VXJsID0gJyc7XG4gIHByb21vdGlvbnNVcmwgPSAnJztcbiAgbWVhbHNQbGFubmVyVXJsID0gJyc7XG4gIGFudGlJbmZsYXRpb24gPSBmYWxzZTtcbiAgZGlzcGxheUluZ3JlZGllbnRQaWN0dXJlc09uUmVjaXBlQ2FyZHMgPSBmYWxzZTtcbiAgZ3Vlc3RzSW5wdXRPbk15TWVhbHMgPSBmYWxzZTtcbiAgY29sbGFwc2VVbmF2YWlsYWJsZVByb2R1Y3RzID0gZmFsc2U7XG4gIG5vU3VwcGxpZXIgPSBmYWxzZTtcbiAgbG9nZ2VkT25TZXNzaW9uID0gZmFsc2U7XG4gIGlzUHJlZmVyZW5jZXNTU1IgPSBmYWxzZTtcbiAgb3JkZXJIaXN0b3J5RW5hYmxlZCA9IGZhbHNlO1xuICB0cmFuc2ZlclVybEJhc2VPdmVycmlkZTogc3RyaW5nO1xuXG4gIGVuYWJsZU1lYWxzUGxhbm5lciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBhZGRBbGxQcm9kdWN0c1dhc0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5ncmVkaWVudHNBZGRlZDogbnVtYmVyOyBpbmdyZWRpZW50c1RvdGFsOiBudW1iZXIgfT4oKTtcbiAgZ3Vlc3RzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBndWVzdHM6IG51bWJlcjsgcmVjaXBlSWQ6IHN0cmluZyB9PigpO1xuICByZWNpcGVQcmljZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVtYWluaW5nOiBudW1iZXI7IGluQmFza2V0OiBudW1iZXI7IHJlY2lwZUlkOiBzdHJpbmcgfT4oKTtcbiAgcHJlZmVyZW5jZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgQ09SU0lzc3VlczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIG1lYWx6OiBNZWFsekludGVyZmFjZSA9IHtcbiAgICBwYXltZW50U3RhcnRlZDogdG90YWxQcmljZSA9PiB7XG4gICAgICBtZWFsekRlYnVnKCdbTWVhbHpdIHNlbmQgcGF5bWVudFN0YXJ0ZWQgZXZlbnQnKTtcbiAgICAgIHRoaXMub25CYXNrZXRBbmRQb3NTZW5kUGF5bWVudFN0YXJ0ZWRFdmVudCh0b3RhbFByaWNlKTtcbiAgICB9LFxuICAgIGFuYWx5dGljczoge1xuICAgICAgaW5pdDogKGRvbWFpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5pbml0KGRvbWFpbik7XG4gICAgICB9LFxuICAgICAgZXZlbnRTZW50JDogdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmV2ZW50RW1pdHRlcixcbiAgICAgIHNldEFiVGVzdEtleToga2V5ID0+IHRoaXMuYW5hbHl0aWNzU2VydmljZS5zZXRBYlRlc3RLZXkoa2V5KVxuICAgIH0sXG4gICAgYmFza2V0OiB7XG4gICAgICBiYXNrZXRJc1JlYWR5JDogdGhpcy5iYXNrZXRzU2VydmljZS5iYXNrZXRTdGF0cyQucGlwZShcbiAgICAgICAgc2tpcFdoaWxlKHN0YXRzID0+ICFzdGF0cyksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgKSxcbiAgICAgIGluaXRpYWxpemU6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5pbml0QmFza2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgTWVhbHo6IG9yaWdpbiBoYXNuXFwndCBiZWVuIHNldCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVzZXQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldEJhc2tldCgpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZVByaWNlYm9vazogKHByaWNlYm9va05hbWU6IHN0cmluZykgPT4gdGhpcy5iYXNrZXRzU2VydmljZS51cGRhdGVQcmljZWJvb2socHJpY2Vib29rTmFtZSksXG4gICAgICByZWNpcGVDb3VudDogKCkgPT5cbiAgICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS53YWl0Rm9yQmFza2V0LnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYmFza2V0c1NlcnZpY2UuYmFza2V0U3RhdHMkKSxcbiAgICAgICAgICBza2lwV2hpbGUoYnMgPT4gIWJzKSxcbiAgICAgICAgICBtYXAoYnMgPT4gYnMucmVjaXBlc0NvdW50KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICksXG4gICAgICBvcGVuUHJldmlldzogKGFuYWx5dGljc1BhdGg6IHN0cmluZyA9ICcnKSA9PiB0aGlzLnJlY2lwZXNTZXJ2aWNlLm9wZW5CYXNrZXQoYW5hbHl0aWNzUGF0aCksXG4gICAgICBvdmVycmlkZVRyYW5zZmVyVXJsOiAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubm9TdXBwbGllciAmJiB1cmwpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zZmVyVXJsQmFzZU92ZXJyaWRlID0gdXJsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBiYXNrZXRTeW5jOiB7XG4gICAgICBkZWZpbmVQdXNoUHJvZHVjdHNUb0NhcnQ6IChwdXNoUHJvZHVjdHNUb0NhcnQ6IChjb21wYXJhYmxlUHJvZHVjdHM6IENvbXBhcmFibGVQcm9kdWN0W10pID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLnB1c2hQcm9kdWN0c1RvUmV0YWlsZXJDYXJ0ID0gcHVzaFByb2R1Y3RzVG9DYXJ0O1xuICAgICAgfSxcbiAgICAgIGRlZmluZUFkZFByb2R1Y3RzVG9DYXJ0OiAoYWRkUHJvZHVjdHNUb0NhcnQ6IChjb21wYXJhYmxlUHJvZHVjdHM6IENvbXBhcmFibGVQcm9kdWN0W10pID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLmFkZFByb2R1Y3RzVG9SZXRhaWxlckNhcnQgPSBhZGRQcm9kdWN0c1RvQ2FydDtcbiAgICAgIH0sXG4gICAgICBkZWZpbmVSZW1vdmVQcm9kdWN0c0Zyb21DYXJ0OiAocmVtb3ZlUHJvZHVjdHNGcm9tQ2FydDogKGNvbXBhcmFibGVQcm9kdWN0czogQ29tcGFyYWJsZVByb2R1Y3RbXSkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIucmVtb3ZlUHJvZHVjdHNGcm9tUmV0YWlsZXJDYXJ0ID0gcmVtb3ZlUHJvZHVjdHNGcm9tQ2FydDtcbiAgICAgIH0sXG4gICAgICBkZWZpbmVQdXNoQmFza2V0RW50cmllc1RvQmFza2V0OiAocHVzaEJhc2tldEVudHJpZXNUb0Jhc2tldDogKGVudHJpZXM6IGFueVtdKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5wdXNoQmFza2V0RW50cmllc1RvQmFza2V0ID0gcHVzaEJhc2tldEVudHJpZXNUb0Jhc2tldDtcbiAgICAgIH0sXG4gICAgICByZXRhaWxlckJhc2tldENoYW5nZWQ6IChjb21wYXJhYmxlUHJvZHVjdHM6IENvbXBhcmFibGVQcm9kdWN0W10pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLnJldGFpbGVyQ2FydENoYW5nZWQoY29tcGFyYWJsZVByb2R1Y3RzKTtcbiAgICAgICAgdGhpcy5zdXBwbGllcnNTZXJ2aWNlLmxhc3RTdXBwbGllckNhcnQgPSBjb21wYXJhYmxlUHJvZHVjdHM7XG4gICAgICB9LFxuICAgICAgaGFuZGxlUGF5bWVudDogKHRvdGFsOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLmhhbmRsZVBheW1lbnQodG90YWwpO1xuICAgICAgICB0aGlzLnN1cHBsaWVyc1NlcnZpY2UubGFzdFN1cHBsaWVyQ2FydCA9IFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29uZmlnOiB7XG4gICAgICBtZWFsekxvZ3M6IChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9nTGV2ZWwkLm5leHQocGFyYW0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZmVhdHVyZXM6IHtcbiAgICAgIGVuYWJsZVZpZGVvUmVjaXBlczogKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZGVvUmVjaXBlc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAvLyBJbmplY3QgeW91dHViZSBzY3JpcHRcbiAgICAgICAgY29uc3QgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHRhZy5zcmMgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vaWZyYW1lX2FwaSc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGFnKTtcbiAgICAgIH0sXG4gICAgICBlbmFibGVBcnRpY2xlc0luQ2F0YWxvZzogKCkgPT4ge1xuICAgICAgICB0aGlzLmFydGljbGVzSW5DYXRhbG9nRW5hYmxlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZW5hYmxlVXNlclByZWZlcmVuY2VzOiAoKSA9PiB7XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucHJlZmVyZW5jZXNBY3RpdmF0ZWQkLm5leHQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgZW5hYmxlVGFnc09uUmVjaXBlczogKCkgPT4ge1xuICAgICAgICB0aGlzLnRhZ3NPblJlY2lwZXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlbmFibGVNZWFsc1BsYW5uZXI6ICh1cmw6IHN0cmluZywgYW50aUluZmxhdGlvbiA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBwcm92aWRlIHRoZSB1cmwgZm9yIHRoZSBtZWFscy1wbGFubmVyIHBhZ2UgdG8gZW5hYmxlIHRoZSBmZWF0dXJlJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZWFsc1BsYW5uZXJVcmwgPSB1cmw7XG4gICAgICAgIHRoaXMuYW50aUluZmxhdGlvbiA9IGFudGlJbmZsYXRpb247XG4gICAgICAgIHRoaXMuZW5hYmxlTWVhbHNQbGFubmVyJC5uZXh0KHRydWUpO1xuICAgICAgfSxcbiAgICAgIGVuYWJsZVNlbzogKCkgPT4ge1xuICAgICAgICB0aGlzLnNlb0VuYWJsZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGVuYWJsZUd1ZXN0c0lucHV0T25NeU1lYWxzOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3Vlc3RzSW5wdXRPbk15TWVhbHMgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNvbGxhcHNlVW5hdmFpbGFibGVQcm9kdWN0c0J5RGVmYXVsdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbGxhcHNlVW5hdmFpbGFibGVQcm9kdWN0cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBob29rOiB7XG4gICAgICBzZXRIb29rQ2FsbGJhY2s6IChjYWxsYmFjazogKGlzTG9nZ2VkLCBpc1Bvc1ZhbGlkKSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMuaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB9LFxuICAgICAgc2V0Rm9yY2VQb3NDYWxsYmFjazogKGNhbGxiYWNrOiAocG9zRXh0SWQ6IHN0cmluZykgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLmZvcmNlUG9zQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIH1cbiAgICB9LFxuICAgIHBvczoge1xuICAgICAgbG9hZDogKGV4dGVybmFsSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcmlnaW4udmFsdWUpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vbm9TdXBwbGllci9wb3NJZCcpO1xuICAgICAgICAgIHRoaXMucG9zU2VydmljZS5sb2FkUG9zV2l0aEV4dElkKGV4dGVybmFsSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN0YXJ0IE1lYWx6OiBvcmlnaW4gaGFzblxcJ3QgYmVlbiBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldEJ5QWRkcmVzczogdGhpcy5wb3NTZXJ2aWNlLmdldEJ5QWRkcmVzcy5iaW5kKHRoaXMucG9zU2VydmljZSksXG4gICAgICBnZXRCeUNvb3JkaW5hdGVzOiB0aGlzLnBvc1NlcnZpY2UuZ2V0QnlDb29yZGluYXRlcy5iaW5kKHRoaXMucG9zU2VydmljZSlcbiAgICB9LFxuICAgIHJlY2lwZXM6IHtcbiAgICAgIGhpZGRlbjogdGhpcy5yZWNpcGVzU2VydmljZS5oaWRkZW4sXG4gICAgICBhZGRBbGxJbmdyZWRpZW50c0NUQVdhc0NsaWNrZWQ6IHRoaXMuYWRkQWxsUHJvZHVjdHNXYXNDbGlja2VkLFxuICAgICAgc2V0RGVmYXVsdEluZ3JlZGllbnRQaWN0dXJlOiAodXJsOiBzdHJpbmcpID0+IHRoaXMuZGVmYXVsdEluZ3JlZGllbnRQaWN0dXJlID0gdXJsLFxuICAgICAgc2V0RGVmYXVsdFJlY2lwZVBpY3R1cmU6ICh1cmw6IHN0cmluZykgPT4gdGhpcy5kZWZhdWx0UmVjaXBlUGljdHVyZSA9IHVybCxcbiAgICAgIC8vIFdlIGtlZXAgdGhvc2UganVzdCBpbiBjYXNlXG4gICAgICAvLyBzZXRSZWNpcGVzUHJpbWFyeUJ1dHRvbkFjdGlvbnM6IChkaXNwbGF5ID0gdHJ1ZSwgYWRkVG9CYXNrZXQgPSB0cnVlKSA9PiB7XG4gICAgICAvLyAgIHRoaXMucmVjaXBlc1NlcnZpY2Uuc2V0UmVjaXBlc1ByaW1hcnlCdXR0b25BY3Rpb25zKGRpc3BsYXksIGFkZFRvQmFza2V0KTtcbiAgICAgIC8vIH0sXG4gICAgICAvLyBzZXRTdWdnZXN0aW9uc1ByaW1hcnlCdXR0b25BY3Rpb25zOiAoZGlzcGxheSA9IHRydWUsIGFkZFRvQmFza2V0ID0gdHJ1ZSkgPT4ge1xuICAgICAgLy8gICB0aGlzLnJlY2lwZXNTZXJ2aWNlLnNldFN1Z2dlc3Rpb25zUHJpbWFyeUJ1dHRvbkFjdGlvbnMoZGlzcGxheSwgYWRkVG9CYXNrZXQpO1xuICAgICAgLy8gfSxcbiAgICAgIHNldERpZmZpY3VsdHlMZXZlbHM6IChsZXZlbHM6IHsgdmFsdWU6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9W10pID0+IHtcbiAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5kaWZmaWN1bHR5TGV2ZWxzID0gbGV2ZWxzO1xuICAgICAgfSxcbiAgICAgIHNob3dDb25maXJtYXRpb25Ub2FzdGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjaXBlc1NlcnZpY2UuY29uZmlybWF0aW9uVG9hc3RlciA9IHRydWU7XG4gICAgICB9LFxuICAgICAgc2hvdWxkRGlzcGxheUluZ3JlZGllbnRQaWN0dXJlc09uUmVjaXBlQ2FyZHM6IChzaG91bGQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwbGF5SW5ncmVkaWVudFBpY3R1cmVzT25SZWNpcGVDYXJkcyA9IHNob3VsZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJvdXRlcjoge1xuICAgICAgc2V0UmVjaXBlQ2F0YWxvZ1VybDogKHVybCA9ICcnKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuY2F0YWxvZ1VybCA9IHVybDtcbiAgICAgIH0sXG4gICAgICBzZXRSZWNpcGVJbmZvTGluazogKHVybCA9ICcnKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMucmVjaXBlSW5mb1VybCA9IHVybDtcbiAgICAgIH0sXG4gICAgICBzZXRSZXRhaWxlckNhcnRVcmw6ICh1cmwgPSAnJyk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJldGFpbGVyQ2FydFVybCA9IHVybDtcbiAgICAgIH0sXG4gICAgICBzZXRQcm9tb3Rpb25zVXJsOiAodXJsID0gJycpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5wcm9tb3Rpb25zVXJsID0gdXJsO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VwcGxpZXI6IHtcbiAgICAgIHNldE9yaWdpbjogKG9yaWdpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChvcmlnaW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2V0T3JpZ2luSWZOZWNlc3Nhcnkob3JpZ2luKTtcbiAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRpc3BsYXlSZWNpcGVJblVybCgpO1xuICAgICAgICAgIHRoaXMuaGlzdG9yeVNlcnZpY2UuZGlzcGxheUhpc3RvcnlEcmF3ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxvYWQ6IChzdXBwbGllcklkOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcGxpZXJzU2VydmljZS5zdXBwbGllciQudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIucmVzZXRNZWFseigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbi52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuc3VwcGxpZXJzU2VydmljZS5sb2FkU3VwcGxpZXIoc3VwcGxpZXJJZC50b1N0cmluZygpKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VkT25TZXNzaW9uKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vdXNlcklkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBdXRobGVzc0lkSWZOZWNlc3NhcnkoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCBNZWFsejogb3JpZ2luIGhhc25cXCd0IGJlZW4gc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXR1cFdpdGhUb2tlbjogKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5zdXBwbGllcnNTZXJ2aWNlLnRva2VuID0gdG9rZW47XG4gICAgICAgIGNvbnN0IHBhcnNlZFRva2VuID0gSlNPTi5wYXJzZShhdG9iKHRva2VuKSkgYXNcbiAgICAgICAgICB7IG5vU3VwcGxpZXI/OiBib29sZWFuOyBzdXBwbGllcklkOiBzdHJpbmc7IG9yaWdpbjogc3RyaW5nOyBkb21haW46IHN0cmluZzsgb3JkZXJIaXN0b3J5PzogYm9vbGVhbiwgZGlzYWJsZUFuYWx5dGljcz86IGJvb2xlYW4gfTtcbiAgICAgICAgaWYgKCFwYXJzZWRUb2tlbi5vcmlnaW4gfHwgIXBhcnNlZFRva2VuLmRvbWFpbiB8fCAoIXBhcnNlZFRva2VuLnN1cHBsaWVySWQgJiYgIXBhcnNlZFRva2VuLm5vU3VwcGxpZXIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgdG9rZW4gZG9lcyBub3QgaGF2ZSB0aGUgY29ycmVjdCBmb3JtYXQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lYWx6LnN1cHBsaWVyLnNldE9yaWdpbihwYXJzZWRUb2tlbi5vcmlnaW4pO1xuICAgICAgICB0aGlzLm1lYWx6LmFuYWx5dGljcy5pbml0KHBhcnNlZFRva2VuLmRvbWFpbik7XG4gICAgICAgIHRoaXMuY29udGV4dFJlZ2lzdHJ5U2VydmljZS5kaXNhYmxlZEFuYWx5dGljcyA9ICEhcGFyc2VkVG9rZW4uZGlzYWJsZUFuYWx5dGljcztcbiAgICAgICAgaWYgKHBhcnNlZFRva2VuLm9yZGVySGlzdG9yeSkge1xuICAgICAgICAgIHRoaXMub3JkZXJIaXN0b3J5RW5hYmxlZCA9IHBhcnNlZFRva2VuLm9yZGVySGlzdG9yeTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkVG9rZW4ubm9TdXBwbGllcikge1xuICAgICAgICAgIHRoaXMubG9hZFN0b3JlTG9jYXRvclBhY2thZ2UoKTtcbiAgICAgICAgICB0aGlzLm5vU3VwcGxpZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZmFrZUNhcnRTZXJ2aWNlLm1hdGNoTWVhbHpCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLm1lYWx6LnVzZXIucmVzZXQoKTtcbiAgICAgICAgICB0aGlzLnBvc1NlcnZpY2UucG9zRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgICB0aGlzLm1lYWx6LmJhc2tldFN5bmMuZGVmaW5lUHVzaFByb2R1Y3RzVG9DYXJ0KHByb2R1Y3RzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmFrZUNhcnRTZXJ2aWNlLnB1c2hUb0Zha2VDYXJ0KHByb2R1Y3RzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIubm9TdXBwbGllciQubmV4dCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vbm9TdXBwbGllci9wb3NJZCcpO1xuICAgICAgICAgIHRoaXMubWVhbHouc3VwcGxpZXIubG9hZChwYXJzZWRUb2tlbi5zdXBwbGllcklkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldEFmZmlsaWF0ZVN1cHBsaWVyczogKCkgPT4gdGhpcy5zdXBwbGllcnNTZXJ2aWNlLmdldEFmZmlsaWF0ZVN1cHBsaWVycygpXG4gICAgfSxcbiAgICB1c2VyOiB7XG4gICAgICBsb2FkV2l0aEF1dGhsZXNzSWQ6IChpZCwgZm9yYmlkUHJvZmlsaW5nID0gZmFsc2UpID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0UmVnaXN0cnlTZXJ2aWNlLmZvcmJpZFByb2ZpbGluZyA9IGZvcmJpZFByb2ZpbGluZztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ19taWFtL2F1dGhsZXNzSWQnLCBpZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdfbWlhbS9hdXRobGVzcy1mb3JiaWQtcHJvZmlsaW5nJywgJycgKyBmb3JiaWRQcm9maWxpbmcpO1xuICAgICAgfSxcbiAgICAgIGxvYWRXaXRoRXh0ZXJuYWxJZDogKGlkLCBmb3JiaWRQcm9maWxpbmcgPSBmYWxzZSwgaW5pdEJhc2tldCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dFJlZ2lzdHJ5U2VydmljZS5mb3JiaWRQcm9maWxpbmcgPSBmb3JiaWRQcm9maWxpbmc7XG4gICAgICAgIHRoaXMubG9nZ2VkT25TZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ19taWFtL3VzZXJJZCcsIGlkKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19taWFtL3VzZXJUb2tlbicpO1xuICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIucmVzZXRNZWFseigpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2dVc2VyKGlkLCBmb3JiaWRQcm9maWxpbmcsIGluaXRCYXNrZXQpO1xuICAgICAgfSxcbiAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2dlZE9uU2Vzc2lvbikge1xuICAgICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5yZXNldE1lYWx6KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZWRPblNlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19taWFtL3VzZXJUb2tlbicpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vdXNlcklkJyk7XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudG9nZ2xlSXNMb2dnZWQoZmFsc2UpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlQXV0aGxlc3NJZElmTmVjZXNzYXJ5KCkucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHN3aXRjaE1hcChpZCA9PiB7XG4gICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5yZXNldFVzZXJJbmZvKCk7XG4gICAgICAgICAgICAgIG1lYWx6RGVidWcoJ1tNZWFsel0gd2lsbCByZWZyZXNoIGJhc2tldCBhZnRlciByZXNldCcpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iYXNrZXRzU2VydmljZS5yZWZyZXNoQ3VycmVudEJhc2tldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgIH0pXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgICB9LFxuICAgICAgc2V0TGFuZ3VhZ2U6IChsYW5nOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5sYW5ndWFnZSA9IGxhbmc7XG4gICAgICB9LFxuICAgICAgc2V0RmF2b3JpdGVJdGVtczogZmF2b3JpdGVQcm9kdWN0SWRzID0+IHRoaXMudXNlclNlcnZpY2Uuc2V0RmF2b3JpdGVJdGVtcyhmYXZvcml0ZVByb2R1Y3RJZHMpLFxuICAgICAgc2V0TG9jYXRpb246IChjb29yZHM6IEdlb2xvY2F0aW9uUG9zaXRpb24pID0+IHRoaXMudXNlclNlcnZpY2UudXNlckNvb3JkaW5hdGVzJC5uZXh0KGNvb3JkcyB8fCBudWxsKSxcbiAgICAgIHVwZGF0ZUZvcmJpZFByb2ZpbGluZzogKGZvcmJpZFByb2ZpbGluZzogYm9vbGVhbiwgdXNlcklkOiBzdHJpbmcsIGlzQXV0aGxlc3MgPSBmYWxzZSkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRobGVzcykge1xuICAgICAgICAgIHRoaXMubWVhbHoudXNlci5sb2FkV2l0aEF1dGhsZXNzSWQodXNlcklkLCBmb3JiaWRQcm9maWxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nVXNlcih1c2VySWQsIGZvcmJpZFByb2ZpbGluZywgZmFsc2UpLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHN0b3JlTG9jYXRvck9wZW5lZDogKCkgPT4gdGhpcy5zdG9yZUxvY2F0b3JTZXJ2aWNlLnN0b3JlTG9jYXRvck9wZW5lZCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgIH0sXG4gICAgc2V0U3RpY2t5SGVhZGVySGVpZ2h0OiAoaGVpZ2h0OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLnN1cHBsaWVySGVhZGVySGVpZ2h0JC52YWx1ZSAhPT0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuc3VwcGxpZXJIZWFkZXJIZWlnaHQkLm5leHQoaGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdHdvIHRpbWVzICdsbCBub3QgYmUgY29uc2lkZXJlZFxuICAgICAqIEBwYXJhbSBpY29uIGhhdmUgdG8gYmUgYSBrbm93ZWQgaWNvbiBuYW1lIHNlZSBzZWN0aW9uICdDdXN0b20gaWNvbnMnIGluIHJlYWQgbWVcbiAgICAgKiBAcGFyYW0gdXJsIG9mIHRoZSBuZXcgaWNvblxuICAgICAqL1xuICAgIG92ZXJyaWRlSWNvbjogKGljb24sIHVybCkgPT4geyAvLyBUT0RPOiBNT1ZFIFRPIGNvbnRlbnRcbiAgICAgIGlmICghdGhpcy5pY29ucykge1xuICAgICAgICB0aGlzLmljb25zID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBpY29uSW5kZXggPSB0aGlzLmljb25zLmZpbmRJbmRleCgoaTogSWNvbk92ZXJyaWRlKSA9PiBpLmljb24gPT09IGljb24pO1xuICAgICAgaWYgKGljb25JbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuaWNvbnNbaWNvbkluZGV4XSA9IHsgaWNvbiwgdXJsIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmljb25zLnB1c2goeyBpY29uLCB1cmwgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXREZWZhdWx0U2Nyb2xsRWxlbWVudEdldHRlcjogKGNhbGxiYWNrOiAoKSA9PiBIVE1MRWxlbWVudCkgPT4gdGhpcy5kZWZhdWx0U2Nyb2xsRWxlbWVudEdldHRlciA9IGNhbGxiYWNrXG4gIH07XG5cbiAgbWVhbHpJbnRlcm5hbDogTWVhbHpJbnRlcm5hbEludGVyZmFjZSA9IHtcbiAgICBhbmFseXRpY3M6IHtcbiAgICAgIHNlbmRFdmVudDogKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBwcm9wczogUGxhdXNpYmxlUHJvcHMpID0+XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5zZW5kRXZlbnQobmFtZSwgcGF0aCwgcHJvcHMpLFxuICAgICAgc2V0SXNNZWFselBhZ2U6IChpc01lYWx6UGFnZTogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuaXNNZWFselBhZ2UgPSBpc01lYWx6UGFnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJhc2tldDoge1xuICAgICAgcmVjaXBlUHJpY2VzSW5CYXNrZXQkOiAoKSA9PiB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZXNJbkJhc2tldCQoKSxcbiAgICAgIHJlY2lwZXNBZGRlZFRvQmFza2V0JDogKCkgPT4gdGhpcy5iYXNrZXRzU2VydmljZS5yZWNpcGVzQWRkZWQsXG4gICAgICB3YWl0Rm9yQmFza2V0RW50cmllczogKCkgPT4gdGhpcy5iYXNrZXRzU2VydmljZS53YWl0Rm9yQmFza2V0LnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuYmFza2V0c1NlcnZpY2Uud2FpdEZvckJhc2tldEVudHJpZXMpKVxuICAgIH0sXG4gICAgY2F0YWxvZzoge1xuICAgICAgb3BlblByZWZlcmVuY2VzOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXNQcmVmZXJlbmNlc1NTUiA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmVyZW5jZXNTZXJ2aWNlLmlzT3BlbmVkJC5uZXh0KHRydWUpO1xuICAgICAgfSxcbiAgICAgIHByZWZlcmVuY2VzTW9kYWxDaGFuZ2VkOiAoKSA9PiB0aGlzLnByZWZlcmVuY2VzQ2hhbmdlZCxcbiAgICAgIHByZWZlcmVuY2VzQ291bnQ6ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT4gdGhpcy5wcmVmZXJlbmNlc1NlcnZpY2UuY3VycmVudFByZWZlcmVuY2VzTnVtYmVyLFxuICAgICAgbG9hZE1vcmVSZWNpcGVzOiAocGFja2FnZUlkLCBwYWdlLCBwYWdlU2l6ZSwgZ3Vlc3RzKTogT2JzZXJ2YWJsZTxSZWNpcGVbXT4gPT5cbiAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5sb2FkUmVjaXBlc0Zyb21QYWNrYWdlSWQocGFja2FnZUlkLCBwYWdlLCBwYWdlU2l6ZSwgZ3Vlc3RzKVxuICAgIH0sXG4gICAgY29uZmlnOiB7XG4gICAgICBsb2dMZXZlbDogdGhpcy5sb2dMZXZlbCRcbiAgICB9LFxuICAgIHJlY2lwZXM6IHtcbiAgICAgIG9wZW5EZXRhaWxzOiAocmVjaXBlSWQ6IHN0cmluZywgZ3Vlc3RzOiBudW1iZXIsIGluaXRpYWxUYWJJbmRleDogbnVtYmVyLCBwYXRoOiBzdHJpbmcgPSAnJywgY2F0ZWdvcnlJZDogc3RyaW5nID0gbnVsbCkgPT5cbiAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5vcGVuUmVjaXBlRGV0YWlscyhyZWNpcGVJZCwgZ3Vlc3RzLCBpbml0aWFsVGFiSW5kZXgsIHBhdGgsIGNhdGVnb3J5SWQpLFxuICAgICAgdXBkYXRlUmVjaXBlTGlrZTogKHJlY2lwZUxpa2VJZDogc3RyaW5nLCByZWNpcGVJZDogc3RyaW5nLCBpc1Bhc3Q6IGJvb2xlYW4sIHBhdGg6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50VHJhY2U6IEV2ZW50VHJhY2UgPSB7IG9yaWdpblBhdGg6IHBhdGgsIHByb3BzOiB7IHJlY2lwZV9pZDogcmVjaXBlSWQgfSB9O1xuICAgICAgICBjb25zdCByZWNpcGVMaWtlID0gdGhpcy5yZWNpcGVMaWtlc1NlcnZpY2UucHJlcGFyZVJlY2lwZUxpa2VGb3JVcGRhdGUocmVjaXBlSWQsIHJlY2lwZUxpa2VJZCwgaXNQYXN0KTtcblxuICAgICAgICB0aGlzLnJlY2lwZUxpa2VzU2VydmljZS51cGRhdGVMaWtlKHJlY2lwZUlkLCByZWNpcGVMaWtlLCBldmVudFRyYWNlKTtcbiAgICAgIH0sXG4gICAgICByZWNpcGVMaWtlVXBkYXRlZDogKCkgPT4gdGhpcy5yZWNpcGVMaWtlc1NlcnZpY2UucmVjaXBlTGlrZVVwZGF0ZWQkLFxuICAgICAgZ3Vlc3RzVXBkYXRlZDogKCkgPT4gdGhpcy5ndWVzdHNDaGFuZ2VkLFxuICAgICAgcmVjaXBlUHJpY2VVcGRhdGVkOiAoKSA9PiB0aGlzLnJlY2lwZVByaWNlQ2hhbmdlZCxcbiAgICAgIGZldGNoUHJpY2luZzogKHJlY2lwZUlkOiBzdHJpbmcsIHBvc0lkOiBzdHJpbmcsIHByaWNlYm9va0tleTogc3RyaW5nLCBzZXJ2ZXM6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIXJlY2lwZUlkIHx8ICFwb3NJZCB8fCAhc2VydmVzKSB7XG4gICAgICAgICAgcmV0dXJuIChvZihudWxsKSBhcyBPYnNlcnZhYmxlPFJlY2lwZVByaWNpbmc+KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWNpcGVzU2VydmljZS5nZXRQcmljaW5nKHJlY2lwZUlkLCBwb3NJZCwgcHJpY2Vib29rS2V5LCBzZXJ2ZXMpLnBpcGUoXG4gICAgICAgICAgc2tpcFdoaWxlKHJlc3VsdCA9PiByZXN1bHQucHJpY2UgPT09IDApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdXBwbGllcjoge1xuICAgICAgZ2V0VG9rZW46ICgpID0+IHRoaXMuc3VwcGxpZXJzU2VydmljZS50b2tlblxuICAgIH0sXG4gICAgdXNlcjoge1xuICAgICAgZ2V0TGFuZ3VhZ2U6ICgpID0+IHRoaXMudXNlclNlcnZpY2UubGFuZ3VhZ2UsXG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6ICgpID0+IHRoaXMudXNlclNlcnZpY2UuaXNMb2dnZWQkLFxuICAgICAgc2V0U2Vzc2lvbklkOiAoc2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnX21pYW0vc2Vzc2lvbklkJywgc2Vzc2lvbklkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFN0aWNreUhlYWRlckhlaWdodDogKCkgPT4gdGhpcy5zdXBwbGllckhlYWRlckhlaWdodCRcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBvc1NlcnZpY2U6IFBvaW50T2ZTYWxlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRzU2VydmljZTogQmFza2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmVmZXJlbmNlc1NlcnZpY2U6IFByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZWRpYU1hdGNoZXI6IE1lZGlhTWF0Y2hlcixcbiAgICBwcml2YXRlIHN1cHBsaWVyc1NlcnZpY2U6IFN1cHBsaWVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAvLyBwcml2YXRlIGJhc2tldEhhbmRsZXI6IExlZ2FjeUJhc2tldHNTeW5jaHJvbml6ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFza2V0SGFuZGxlcjogQmFza2V0c1N5bmNocm9uaXplclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZUxvY2F0b3JTZXJ2aWNlOiBTdG9yZUxvY2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjaXBlTGlrZXNTZXJ2aWNlOiBSZWNpcGVMaWtlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWtlQ2FydFNlcnZpY2U6IEZha2VSZXRhaWxlckNhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGlzdG9yeVNlcnZpY2U6IEhpc3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFJlZ2lzdHJ5U2VydmljZTogQ29udGV4dFJlZ2lzdHJ5U2VydmljZVxuICApIHtcbiAgICB0aGlzLmlzU21hbGxTY3JlZW4kLm5leHQoIXRoaXMubWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoU01BTExfU0NSRUVOX0JQKS5tYXRjaGVzKTtcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFNNQUxMX1NDUkVFTl9CUCkuc3Vic2NyaWJlKEJQQ2hhbmdlID0+IHRoaXMuaXNTbWFsbFNjcmVlbiQubmV4dCghQlBDaGFuZ2UubWF0Y2hlcykpO1xuICAgIHRoaXMuaWNvbnMgPSBbXTtcbiAgICB0aGlzLkNPUlNJc3N1ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBPYmplY3QuYXNzaWduKHdpbmRvdywge1xuICAgICAgbWVhbHo6IHRoaXMubWVhbHosXG4gICAgICBtZWFsekludGVybmFsOiB0aGlzLm1lYWx6SW50ZXJuYWxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgaG9va0NhbGxiYWNrOiAoaXNMb2dnZWQsIGlzUG9zVmFsaWQpID0+IGJvb2xlYW4gPSAoaXNMb2dnZWQsIGlzUG9zVmFsaWQpID0+IHtcbiAgICBtZWFseldhcm4oJ1tNZWFsel0gaG9va0NhbGxiYWNrICh1c2VkIHRvIGZvcmNlIHVzZXIgbG9naW4pIG5vdCBzZXQnKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBmb3JjZVBvc0NhbGxiYWNrOiAocG9zRXh0SWQ6IHN0cmluZykgPT4gYm9vbGVhbiA9IChwb3NFeHRJZDogc3RyaW5nKSA9PiB7XG4gICAgbWVhbHpXYXJuKCdbTWVhbHpdIGZvcmNlUG9zQ2FsbGJhY2sgKHVzZWQgdG8gZm9yY2Ugc2VsZWN0ZWQgc2hvcCkgbm90IHNldCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBkZWZhdWx0U2Nyb2xsRWxlbWVudEdldHRlcjogKCkgPT4gSFRNTEVsZW1lbnQgPSAoKSA9PiBkb2N1bWVudC5ib2R5O1xuXG4gIHNldENPUlNJc3N1ZVN0YXRlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5DT1JTSXNzdWVzLm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0Q09SU0lzc3Vlc1N0YXRlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLkNPUlNJc3N1ZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRPdmVycmlkZUljb25VcmwoaWNvbjogSWNvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZmluZGljb24gPSB0aGlzLmljb25zLmZpbmQoZWwgPT4gZWwuaWNvbiA9PT0gaWNvbik7XG4gICAgcmV0dXJuIGZpbmRpY29uID8gZmluZGljb24udXJsIDogJyc7XG4gIH1cblxuICBwcml2YXRlIHNldE9yaWdpbklmTmVjZXNzYXJ5KG9yaWdpbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKG9yaWdpbiAmJiB0aGlzLm9yaWdpbi52YWx1ZSAhPT0gb3JpZ2luKSB7XG4gICAgICB0aGlzLm9yaWdpbi5uZXh0KG9yaWdpbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkJhc2tldEFuZFBvc1NlbmRQYXltZW50U3RhcnRlZEV2ZW50KHRvdGFsUHJpY2U6IG51bWJlcik6IHZvaWQge1xuICAgIGZvcmtKb2luKFtcbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2Uud2FpdEZvckJhc2tldCxcbiAgICAgIHRoaXMucG9zU2VydmljZS53YWl0Rm9yUG9zLnBpcGUodGFrZSgxKSlcbiAgICBdKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGNvbnN0IGJhc2tldCA9IHJlc1swXTtcbiAgICAgIGNvbnN0IHBvcyA9IHJlc1sxXTtcbiAgICAgIGlmIChiYXNrZXQudG90YWxQcmljZSA+IDApIHtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLnNlbmRFdmVudChcbiAgICAgICAgICAncGF5bWVudC5zdGFydGVkJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYXNrZXRfaWQ6IGJhc2tldC5pZCxcbiAgICAgICAgICAgIG1pYW1fYW1vdW50OiBiYXNrZXQudG90YWxQcmljZS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG90YWxfYW1vdW50OiB0b3RhbFByaWNlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwb3NfaWQ6IHRoaXMucG9zU2VydmljZS5wb3MkLmdldFZhbHVlKCkuaWQsXG4gICAgICAgICAgICBwb3NfbmFtZTogdGhpcy5wb3NTZXJ2aWNlLnBvcyQuZ2V0VmFsdWUoKS5hdHRyaWJ1dGVzLm5hbWUsXG4gICAgICAgICAgICBzdXBwbGllcl9pZDogdGhpcy5wb3NTZXJ2aWNlLnBvcyQuZ2V0VmFsdWUoKS5yZWxhdGlvbnNoaXBzLnN1cHBsaWVyLmRhdGEuaWQsXG4gICAgICAgICAgICByZWNpcGVfY291bnQ6IGJhc2tldC5yZWNpcGVJbmZvcy5sZW5ndGgudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1pYW1fcHJvZHVjdHM6IGJhc2tldC5lbnRyaWVzLmxlbmd0aC50b1N0cmluZygpXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dVc2VyKHRva2VuT3JJZDogc3RyaW5nLCBmb3JiaWRQcm9maWxpbmc6IGJvb2xlYW4sIGluaXRCYXNrZXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0b2tlbk9ySWQpIHtcbiAgICAgIHRoaXMudXNlclNlcnZpY2UudG9nZ2xlSXNMb2dnZWQodHJ1ZSk7XG4gICAgfVxuICAgIC8vIGlmIGluaXRCYXNrZXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgYmFza2V0ICYgbGlzdCB3aWxsIG5vdCBiZSBpbml0aWFsaXNlZCB1bnRpbCB0aGUgZmlyc3QgdGltZSB0aGV5IGFyZSBuZWVkZWRcbiAgICBpZiAoaW5pdEJhc2tldCkge1xuICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5pbml0QmFza2V0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdlbmVyYXRpbmdBdXRobGVzc0lkJC5waXBlKFxuICAgICAgc2tpcFdoaWxlKGdlbmVyYXRpbmcgPT4gZ2VuZXJhdGluZyksXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgaWYgKCEhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL2F1dGhsZXNzSWQnKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlbG9hZEJhc2tldCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2Uuc2V0VXNlckluZm8oZm9yYmlkUHJvZmlsaW5nKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdG9yZUxvY2F0b3JQYWNrYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlTG9jYXRvclNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHN0b3JlTG9jYXRvclNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbW9kdWxlJyk7XG4gICAgc3RvcmVMb2NhdG9yU2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgYCR7ZW52aXJvbm1lbnQubWVhbHpDb21wb25lbnRzfS9zdG9yZS1sb2NhdG9yL3N0b3JlLWxvY2F0b3IubWluLmpzYCk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdG9yZUxvY2F0b3JTY3JpcHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUF1dGhsZXNzSWRJZk5lY2Vzc2FyeSgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZW5lcmF0aW5nQXV0aGxlc3NJZCQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg4MDApLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcChpc0dlbmVyYXRpbmcgPT4ge1xuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nIHx8IHRoaXMubG9nZ2VkT25TZXNzaW9uIHx8ICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL2F1dGhsZXNzSWQnKSkge1xuICAgICAgICAgIHJldHVybiBvZjx2b2lkPihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZW5lcmF0ZUFub255bW91c1VzZXJJZCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEJhc2tldCgpIHtcbiAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLndhaXRGb3JCYXNrZXRFbnRyaWVzXG4gICAgICAucGlwZShtYXAoKGVudHJpZXM6IEJhc2tldEVudHJ5W10pID0+XG4gICAgICAgIGVudHJpZXNcbiAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnN0YXR1cyA9PT0gJ2FjdGl2ZScpXG4gICAgICAgICAgLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZWRFbnRyeSA9IGRlZXBDbG9uZVdpdGhDbGFzcyhlbnRyeSkgYXMgQmFza2V0RW50cnk7XG4gICAgICAgICAgICBjbG9uZWRFbnRyeS5xdWFudGl0eSA9IDA7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVkRW50cnk7XG4gICAgICAgICAgfSlcbiAgICAgICkpLnN1YnNjcmliZSgoY2xvbmVkRW50cmllc1RvUmVtb3ZlOiBCYXNrZXRFbnRyeVtdKSA9PiB7XG4gICAgICAgIGlmIChjbG9uZWRFbnRyaWVzVG9SZW1vdmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5yZXNldEJhc2tldCgpLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzZXRCYXNrZXQgPSBjbG9uZWRFbnRyaWVzVG9SZW1vdmUubWFwKGVudHJ5ID0+IG5ldyBSZXNldEJhc2tldEFjdGlvbihlbnRyeSwge30sIHRoaXMuYmFza2V0c1NlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLmFkZFRvQWN0aW9uTGlzdChyZXNldEJhc2tldCk7XG4gICAgICAgIGlmIChyZXNldEJhc2tldC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzZXRCYXNrZXRbcmVzZXRCYXNrZXQubGVuZ3RoIC0gMV0ub25TdWNjZXNzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UucmVzZXRCYXNrZXQoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
535
|
+
}], function () { return [{ type: i1.PointOfSalesService }, { type: i2.BasketsService }, { type: i3.UserService }, { type: i4.PreferencesService }, { type: i5.AnalyticsService }, { type: i6.RecipesService }, { type: i7.BasketRecipeCleanupService }, { type: i8.MediaMatcher }, { type: i9.SuppliersService }, { type: i8.BreakpointObserver }, { type: i10.BasketsSynchronizerService }, { type: i11.StoreLocatorService }, { type: i12.RecipeLikesService }, { type: i13.FakeRetailerCartService }, { type: i14.HistoryService }, { type: i15.ContextRegistryService }]; }, null); })();
|
|
536
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWlhbS9zcmMvbGliL19zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBUWxGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixF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RSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQy9DO1lBRUQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQzlHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDekUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NEVBN2hCVSxjQUFjO3NEQUFkLGNBQWMsV0FBZCxjQUFjLG1CQUZiLE1BQU07dUZBRVAsY0FBYztjQUgxQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIE1lZGlhTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF1c2libGVQcm9wcyB9IGZyb20gJ21lYWx6LXNoYXJlZC1hbmFseXRpY3MnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNrZXRFbnRyeSwgUmVjaXBlLCBVc2VyIH0gZnJvbSAnLi4vX21vZGVscyc7XG5pbXBvcnQgeyBSZXNldEJhc2tldEFjdGlvbiB9IGZyb20gJy4uL19tb2RlbHMvYmFza2V0LWFjdGlvbnMvcmVzZXQtYmFza2V0LWFjdGlvbic7XG5pbXBvcnQgeyBSZWNpcGVQcmljaW5nIH0gZnJvbSAnLi4vX21vZGVscy9yZWNpcGUtcHJpY2luZyc7XG5pbXBvcnQgeyBDb21wYXJhYmxlUHJvZHVjdCB9IGZyb20gJy4uL190eXBlcy9idWlsZGVkL2NvbXBhcmFibGUtcHJvZHVjdCc7XG5pbXBvcnQgeyBNZWFsekludGVyZmFjZSB9IGZyb20gJy4uL190eXBlcy9idWlsZGVkL21lYWx6LWludGVyZmFjZSc7XG5pbXBvcnQgeyBNZWFsekludGVybmFsSW50ZXJmYWNlIH0gZnJvbSAnLi4vX3R5cGVzL2J1aWxkZWQvbWVhbHotaW50ZXJuYWwtaW50ZXJmYWNlJztcbmltcG9ydCB7IEV2ZW50Sm91cm5leSB9IGZyb20gJy4uL190eXBlcy9ldmVudC1qb3VybmV5LmVudW0nO1xuaW1wb3J0IHsgRXZlbnRUcmFjZSB9IGZyb20gJy4uL190eXBlcy9ldmVudC10cmFjZSc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi4vX3R5cGVzL2ljb24uZW51bSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmVXaXRoQ2xhc3MgfSBmcm9tICcuLi9fdXRpbHMvbWV0aG9kcy9kZWVwQ2xvbmUnO1xuaW1wb3J0IHsgbWVhbHpEZWJ1ZywgbWVhbHpXYXJuIH0gZnJvbSAnLi4vX3V0aWxzL21ldGhvZHMvbG9nZ2luZyc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBCYXNrZXRzU3luY2hyb25pemVyU2VydmljZSB9IGZyb20gJy4vYmFza2V0cy1zeW5jaHJvbml6aW5nJztcbmltcG9ydCB7IEJhc2tldHNTZXJ2aWNlIH0gZnJvbSAnLi9iYXNrZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vY29udGV4dC1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEZha2VSZXRhaWxlckNhcnRTZXJ2aWNlIH0gZnJvbSAnLi9mYWtlLXJldGFpbGVyLWNhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBIaXN0b3J5U2VydmljZSB9IGZyb20gJy4vaGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvaW50T2ZTYWxlc1NlcnZpY2UgfSBmcm9tICcuL3BvaW50LW9mLXNhbGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi9wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2lwZUxpa2VzU2VydmljZSB9IGZyb20gJy4vcmVjaXBlLWxpa2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjaXBlc1NlcnZpY2UgfSBmcm9tICcuL3JlY2lwZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yZUxvY2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yZS1sb2NhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VwcGxpZXJzU2VydmljZSB9IGZyb20gJy4vc3VwcGxpZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNrZXRSZWNpcGVDbGVhbnVwU2VydmljZSB9IGZyb20gJy4vYmFza2V0LXJlY2lwZS1jbGVhbnVwLnNlcnZpY2UnO1xuXG5jb25zdCBTTUFMTF9TQ1JFRU5fQlAgPSAnKG1pbi13aWR0aDogMTAyM3B4KSc7XG5cbmludGVyZmFjZSBJY29uT3ZlcnJpZGUge1xuICBpY29uOiBJY29uO1xuICB1cmw6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dFNlcnZpY2Uge1xuICB1c2VySW5mbzogVXNlcjtcbiAgaWNvbnM6IEljb25PdmVycmlkZVtdO1xuICB2aWRlb1JlY2lwZXNFbmFibGVkID0gZmFsc2U7XG4gIGFydGljbGVzSW5DYXRhbG9nRW5hYmxlZCA9IGZhbHNlO1xuICB0YWdzT25SZWNpcGVzRW5hYmxlZCA9IGZhbHNlO1xuICBzZW9FbmFibGVkID0gZmFsc2U7XG4gIGRlZmF1bHRJbmdyZWRpZW50UGljdHVyZSA9ICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ltYWdlcy9kZWZhdWx0LWluZ3JlZGllbnQtcGljdHVyZS5zdmcnO1xuICBkZWZhdWx0UmVjaXBlUGljdHVyZSA9ICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vYXNzZXRzLm1pYW0udGVjaC9nZW5lcmljL2ltYWdlcy9wbGFjZWhvbGRlci5wbmcnO1xuICBnbG9iYWxTY3JvbGxhYmxlRWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICBpc1NtYWxsU2NyZWVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBvcmlnaW46IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KG51bGwpO1xuICBzdXBwbGllckhlYWRlckhlaWdodCQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBsb2dMZXZlbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCdhbGwnKTtcbiAgY2F0YWxvZ1VybCA9ICcnO1xuICByZWNpcGVJbmZvVXJsID0gJyc7XG4gIHJldGFpbGVyQ2FydFVybCA9ICcnO1xuICBwcm9tb3Rpb25zVXJsID0gJyc7XG4gIG1lYWxzUGxhbm5lclVybCA9ICcnO1xuICBhbnRpSW5mbGF0aW9uID0gZmFsc2U7XG4gIGRpc3BsYXlJbmdyZWRpZW50UGljdHVyZXNPblJlY2lwZUNhcmRzID0gZmFsc2U7XG4gIGd1ZXN0c0lucHV0T25NeU1lYWxzID0gZmFsc2U7XG4gIGNvbGxhcHNlVW5hdmFpbGFibGVQcm9kdWN0cyA9IGZhbHNlO1xuICBub1N1cHBsaWVyID0gZmFsc2U7XG4gIGxvZ2dlZE9uU2Vzc2lvbiA9IGZhbHNlO1xuICBpc1ByZWZlcmVuY2VzU1NSID0gZmFsc2U7XG4gIG9yZGVySGlzdG9yeUVuYWJsZWQgPSBmYWxzZTtcbiAgdHJhbnNmZXJVcmxCYXNlT3ZlcnJpZGU6IHN0cmluZztcblxuICBlbmFibGVNZWFsc1BsYW5uZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgYWRkQWxsUHJvZHVjdHNXYXNDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGluZ3JlZGllbnRzQWRkZWQ6IG51bWJlcjsgaW5ncmVkaWVudHNUb3RhbDogbnVtYmVyIH0+KCk7XG4gIGd1ZXN0c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZ3Vlc3RzOiBudW1iZXI7IHJlY2lwZUlkOiBzdHJpbmcgfT4oKTtcbiAgcmVjaXBlUHJpY2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlbWFpbmluZzogbnVtYmVyOyBpbkJhc2tldDogbnVtYmVyOyByZWNpcGVJZDogc3RyaW5nIH0+KCk7XG4gIHByZWZlcmVuY2VzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIENPUlNJc3N1ZXM6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBtZWFsejogTWVhbHpJbnRlcmZhY2UgPSB7XG4gICAgcGF5bWVudFN0YXJ0ZWQ6IHRvdGFsUHJpY2UgPT4ge1xuICAgICAgbWVhbHpEZWJ1ZygnW01lYWx6XSBzZW5kIHBheW1lbnRTdGFydGVkIGV2ZW50Jyk7XG4gICAgICB0aGlzLm9uQmFza2V0QW5kUG9zU2VuZFBheW1lbnRTdGFydGVkRXZlbnQodG90YWxQcmljZSk7XG4gICAgfSxcbiAgICBhbmFseXRpY3M6IHtcbiAgICAgIGluaXQ6IChkb21haW46IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuaW5pdChkb21haW4pO1xuICAgICAgfSxcbiAgICAgIGV2ZW50U2VudCQ6IHRoaXMuYW5hbHl0aWNzU2VydmljZS5ldmVudEVtaXR0ZXIsXG4gICAgICBzZXRBYlRlc3RLZXk6IGtleSA9PiB0aGlzLmFuYWx5dGljc1NlcnZpY2Uuc2V0QWJUZXN0S2V5KGtleSlcbiAgICB9LFxuICAgIGJhc2tldDoge1xuICAgICAgYmFza2V0SXNSZWFkeSQ6IHRoaXMuYmFza2V0c1NlcnZpY2UuYmFza2V0U3RhdHMkLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZShzdGF0cyA9PiAhc3RhdHMpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICksXG4gICAgICBpbml0aWFsaXplOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbi52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UuaW5pdEJhc2tldCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN0YXJ0IE1lYWx6OiBvcmlnaW4gaGFzblxcJ3QgYmVlbiBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRCYXNrZXQoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVQcmljZWJvb2s6IChwcmljZWJvb2tOYW1lOiBzdHJpbmcpID0+IHRoaXMuYmFza2V0c1NlcnZpY2UudXBkYXRlUHJpY2Vib29rKHByaWNlYm9va05hbWUpLFxuICAgICAgcmVjaXBlQ291bnQ6ICgpID0+XG4gICAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2Uud2FpdEZvckJhc2tldC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmJhc2tldHNTZXJ2aWNlLmJhc2tldFN0YXRzJCksXG4gICAgICAgICAgc2tpcFdoaWxlKGJzID0+ICFicyksXG4gICAgICAgICAgbWFwKGJzID0+IGJzLnJlY2lwZXNDb3VudCksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApLFxuICAgICAgb3BlblByZXZpZXc6IChhbmFseXRpY3NQYXRoOiBzdHJpbmcgPSAnJykgPT4gdGhpcy5yZWNpcGVzU2VydmljZS5vcGVuQmFza2V0KGFuYWx5dGljc1BhdGgpLFxuICAgICAgb3ZlcnJpZGVUcmFuc2ZlclVybDogKHVybDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm5vU3VwcGxpZXIgJiYgdXJsKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2ZlclVybEJhc2VPdmVycmlkZSA9IHVybDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYmFza2V0U3luYzoge1xuICAgICAgZGVmaW5lUHVzaFByb2R1Y3RzVG9DYXJ0OiAocHVzaFByb2R1Y3RzVG9DYXJ0OiAoY29tcGFyYWJsZVByb2R1Y3RzOiBDb21wYXJhYmxlUHJvZHVjdFtdKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5wdXNoUHJvZHVjdHNUb1JldGFpbGVyQ2FydCA9IHB1c2hQcm9kdWN0c1RvQ2FydDtcbiAgICAgIH0sXG4gICAgICBkZWZpbmVBZGRQcm9kdWN0c1RvQ2FydDogKGFkZFByb2R1Y3RzVG9DYXJ0OiAoY29tcGFyYWJsZVByb2R1Y3RzOiBDb21wYXJhYmxlUHJvZHVjdFtdKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5hZGRQcm9kdWN0c1RvUmV0YWlsZXJDYXJ0ID0gYWRkUHJvZHVjdHNUb0NhcnQ7XG4gICAgICB9LFxuICAgICAgZGVmaW5lUmVtb3ZlUHJvZHVjdHNGcm9tQ2FydDogKHJlbW92ZVByb2R1Y3RzRnJvbUNhcnQ6IChjb21wYXJhYmxlUHJvZHVjdHM6IENvbXBhcmFibGVQcm9kdWN0W10pID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLnJlbW92ZVByb2R1Y3RzRnJvbVJldGFpbGVyQ2FydCA9IHJlbW92ZVByb2R1Y3RzRnJvbUNhcnQ7XG4gICAgICB9LFxuICAgICAgZGVmaW5lUHVzaEJhc2tldEVudHJpZXNUb0Jhc2tldDogKHB1c2hCYXNrZXRFbnRyaWVzVG9CYXNrZXQ6IChlbnRyaWVzOiBhbnlbXSkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIucHVzaEJhc2tldEVudHJpZXNUb0Jhc2tldCA9IHB1c2hCYXNrZXRFbnRyaWVzVG9CYXNrZXQ7XG4gICAgICB9LFxuICAgICAgcmV0YWlsZXJCYXNrZXRDaGFuZ2VkOiAoY29tcGFyYWJsZVByb2R1Y3RzOiBDb21wYXJhYmxlUHJvZHVjdFtdKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5yZXRhaWxlckNhcnRDaGFuZ2VkKGNvbXBhcmFibGVQcm9kdWN0cyk7XG4gICAgICAgIHRoaXMuc3VwcGxpZXJzU2VydmljZS5sYXN0U3VwcGxpZXJDYXJ0ID0gY29tcGFyYWJsZVByb2R1Y3RzO1xuICAgICAgfSxcbiAgICAgIGhhbmRsZVBheW1lbnQ6ICh0b3RhbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5oYW5kbGVQYXltZW50KHRvdGFsKTtcbiAgICAgICAgdGhpcy5zdXBwbGllcnNTZXJ2aWNlLmxhc3RTdXBwbGllckNhcnQgPSBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbmZpZzoge1xuICAgICAgbWVhbHpMb2dzOiAocGFyYW06IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxvZ0xldmVsJC5uZXh0KHBhcmFtKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBlbmFibGVWaWRlb1JlY2lwZXM6ICgpID0+IHtcbiAgICAgICAgdGhpcy52aWRlb1JlY2lwZXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gSW5qZWN0IHlvdXR1YmUgc2NyaXB0XG4gICAgICAgIGNvbnN0IHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICB0YWcuc3JjID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGknO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhZyk7XG4gICAgICB9LFxuICAgICAgZW5hYmxlQXJ0aWNsZXNJbkNhdGFsb2c6ICgpID0+IHtcbiAgICAgICAgdGhpcy5hcnRpY2xlc0luQ2F0YWxvZ0VuYWJsZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGVuYWJsZVVzZXJQcmVmZXJlbmNlczogKCkgPT4ge1xuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnByZWZlcmVuY2VzQWN0aXZhdGVkJC5uZXh0KHRydWUpO1xuICAgICAgfSxcbiAgICAgIGVuYWJsZVRhZ3NPblJlY2lwZXM6ICgpID0+IHtcbiAgICAgICAgdGhpcy50YWdzT25SZWNpcGVzRW5hYmxlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZW5hYmxlTWVhbHNQbGFubmVyOiAodXJsOiBzdHJpbmcsIGFudGlJbmZsYXRpb24gPSBmYWxzZSkgPT4ge1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgdXJsIGZvciB0aGUgbWVhbHMtcGxhbm5lciBwYWdlIHRvIGVuYWJsZSB0aGUgZmVhdHVyZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVhbHNQbGFubmVyVXJsID0gdXJsO1xuICAgICAgICB0aGlzLmFudGlJbmZsYXRpb24gPSBhbnRpSW5mbGF0aW9uO1xuICAgICAgICB0aGlzLmVuYWJsZU1lYWxzUGxhbm5lciQubmV4dCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBlbmFibGVTZW86ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZW9FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlbmFibGVHdWVzdHNJbnB1dE9uTXlNZWFsczogKCkgPT4ge1xuICAgICAgICB0aGlzLmd1ZXN0c0lucHV0T25NeU1lYWxzID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBjb2xsYXBzZVVuYXZhaWxhYmxlUHJvZHVjdHNCeURlZmF1bHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZVVuYXZhaWxhYmxlUHJvZHVjdHMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaG9vazoge1xuICAgICAgc2V0SG9va0NhbGxiYWNrOiAoY2FsbGJhY2s6IChpc0xvZ2dlZCwgaXNQb3NWYWxpZCkgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLmhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgfSxcbiAgICAgIHNldEZvcmNlUG9zQ2FsbGJhY2s6IChjYWxsYmFjazogKHBvc0V4dElkOiBzdHJpbmcpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5mb3JjZVBvc0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB9XG4gICAgfSxcbiAgICBwb3M6IHtcbiAgICAgIGxvYWQ6IChleHRlcm5hbElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luLnZhbHVlKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19taWFtL25vU3VwcGxpZXIvcG9zSWQnKTtcbiAgICAgICAgICB0aGlzLnBvc1NlcnZpY2UubG9hZFBvc1dpdGhFeHRJZChleHRlcm5hbElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCBNZWFsejogb3JpZ2luIGhhc25cXCd0IGJlZW4gc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRCeUFkZHJlc3M6IHRoaXMucG9zU2VydmljZS5nZXRCeUFkZHJlc3MuYmluZCh0aGlzLnBvc1NlcnZpY2UpLFxuICAgICAgZ2V0QnlDb29yZGluYXRlczogdGhpcy5wb3NTZXJ2aWNlLmdldEJ5Q29vcmRpbmF0ZXMuYmluZCh0aGlzLnBvc1NlcnZpY2UpLFxuICAgICAgb3Blbk5vU3VwcGxpZXJPbmJvYXJkaW5nOiAoKSA9PiB0aGlzLnN0b3JlTG9jYXRvclNlcnZpY2Uuc2hvd05vU3VwcGxpZXJPbmJvYXJkaW5nLm5leHQodHJ1ZSlcbiAgICB9LFxuICAgIHJlY2lwZXM6IHtcbiAgICAgIGhpZGRlbjogdGhpcy5yZWNpcGVzU2VydmljZS5oaWRkZW4sXG4gICAgICBhZGRBbGxJbmdyZWRpZW50c0NUQVdhc0NsaWNrZWQ6IHRoaXMuYWRkQWxsUHJvZHVjdHNXYXNDbGlja2VkLFxuICAgICAgc2V0RGVmYXVsdEluZ3JlZGllbnRQaWN0dXJlOiAodXJsOiBzdHJpbmcpID0+IHRoaXMuZGVmYXVsdEluZ3JlZGllbnRQaWN0dXJlID0gdXJsLFxuICAgICAgc2V0RGVmYXVsdFJlY2lwZVBpY3R1cmU6ICh1cmw6IHN0cmluZykgPT4gdGhpcy5kZWZhdWx0UmVjaXBlUGljdHVyZSA9IHVybCxcbiAgICAgIC8vIFdlIGtlZXAgdGhvc2UganVzdCBpbiBjYXNlXG4gICAgICAvLyBzZXRSZWNpcGVzUHJpbWFyeUJ1dHRvbkFjdGlvbnM6IChkaXNwbGF5ID0gdHJ1ZSwgYWRkVG9CYXNrZXQgPSB0cnVlKSA9PiB7XG4gICAgICAvLyAgIHRoaXMucmVjaXBlc1NlcnZpY2Uuc2V0UmVjaXBlc1ByaW1hcnlCdXR0b25BY3Rpb25zKGRpc3BsYXksIGFkZFRvQmFza2V0KTtcbiAgICAgIC8vIH0sXG4gICAgICAvLyBzZXRTdWdnZXN0aW9uc1ByaW1hcnlCdXR0b25BY3Rpb25zOiAoZGlzcGxheSA9IHRydWUsIGFkZFRvQmFza2V0ID0gdHJ1ZSkgPT4ge1xuICAgICAgLy8gICB0aGlzLnJlY2lwZXNTZXJ2aWNlLnNldFN1Z2dlc3Rpb25zUHJpbWFyeUJ1dHRvbkFjdGlvbnMoZGlzcGxheSwgYWRkVG9CYXNrZXQpO1xuICAgICAgLy8gfSxcbiAgICAgIHNldERpZmZpY3VsdHlMZXZlbHM6IChsZXZlbHM6IHsgdmFsdWU6IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9W10pID0+IHtcbiAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5kaWZmaWN1bHR5TGV2ZWxzID0gbGV2ZWxzO1xuICAgICAgfSxcbiAgICAgIHNob3dDb25maXJtYXRpb25Ub2FzdGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjaXBlc1NlcnZpY2UuY29uZmlybWF0aW9uVG9hc3RlciA9IHRydWU7XG4gICAgICB9LFxuICAgICAgc2hvdWxkRGlzcGxheUluZ3JlZGllbnRQaWN0dXJlc09uUmVjaXBlQ2FyZHM6IChzaG91bGQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5kaXNwbGF5SW5ncmVkaWVudFBpY3R1cmVzT25SZWNpcGVDYXJkcyA9IHNob3VsZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJvdXRlcjoge1xuICAgICAgc2V0UmVjaXBlQ2F0YWxvZ1VybDogKHVybCA9ICcnKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuY2F0YWxvZ1VybCA9IHVybDtcbiAgICAgIH0sXG4gICAgICBzZXRSZWNpcGVJbmZvTGluazogKHVybCA9ICcnKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMucmVjaXBlSW5mb1VybCA9IHVybDtcbiAgICAgIH0sXG4gICAgICBzZXRSZXRhaWxlckNhcnRVcmw6ICh1cmwgPSAnJyk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJldGFpbGVyQ2FydFVybCA9IHVybDtcbiAgICAgIH0sXG4gICAgICBzZXRQcm9tb3Rpb25zVXJsOiAodXJsID0gJycpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5wcm9tb3Rpb25zVXJsID0gdXJsO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3VwcGxpZXI6IHtcbiAgICAgIHNldE9yaWdpbjogKG9yaWdpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChvcmlnaW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2V0T3JpZ2luSWZOZWNlc3Nhcnkob3JpZ2luKTtcbiAgICAgICAgICB0aGlzLnJlY2lwZXNTZXJ2aWNlLmRpc3BsYXlSZWNpcGVJblVybCgpO1xuICAgICAgICAgIHRoaXMuaGlzdG9yeVNlcnZpY2UuZGlzcGxheUhpc3RvcnlEcmF3ZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxvYWQ6IChzdXBwbGllcklkOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcGxpZXJzU2VydmljZS5zdXBwbGllciQudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIucmVzZXRNZWFseigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbi52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuc3VwcGxpZXJzU2VydmljZS5sb2FkU3VwcGxpZXIoc3VwcGxpZXJJZC50b1N0cmluZygpKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMubG9nZ2VkT25TZXNzaW9uKSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vdXNlcklkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBdXRobGVzc0lkSWZOZWNlc3NhcnkoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCBNZWFsejogb3JpZ2luIGhhc25cXCd0IGJlZW4gc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXR1cFdpdGhUb2tlbjogKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5zdXBwbGllcnNTZXJ2aWNlLnRva2VuID0gdG9rZW47XG4gICAgICAgIGNvbnN0IHBhcnNlZFRva2VuID0gSlNPTi5wYXJzZShhdG9iKHRva2VuKSkgYXNcbiAgICAgICAgICB7IG5vU3VwcGxpZXI/OiBib29sZWFuOyBzdXBwbGllcklkOiBzdHJpbmc7IG9yaWdpbjogc3RyaW5nOyBkb21haW46IHN0cmluZzsgb3JkZXJIaXN0b3J5PzogYm9vbGVhbiwgZGlzYWJsZUFuYWx5dGljcz86IGJvb2xlYW4gfTtcbiAgICAgICAgaWYgKCFwYXJzZWRUb2tlbi5vcmlnaW4gfHwgIXBhcnNlZFRva2VuLmRvbWFpbiB8fCAoIXBhcnNlZFRva2VuLnN1cHBsaWVySWQgJiYgIXBhcnNlZFRva2VuLm5vU3VwcGxpZXIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgdG9rZW4gZG9lcyBub3QgaGF2ZSB0aGUgY29ycmVjdCBmb3JtYXQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lYWx6LnN1cHBsaWVyLnNldE9yaWdpbihwYXJzZWRUb2tlbi5vcmlnaW4pO1xuICAgICAgICB0aGlzLm1lYWx6LmFuYWx5dGljcy5pbml0KHBhcnNlZFRva2VuLmRvbWFpbik7XG4gICAgICAgIHRoaXMuY29udGV4dFJlZ2lzdHJ5U2VydmljZS5kaXNhYmxlZEFuYWx5dGljcyA9ICEhcGFyc2VkVG9rZW4uZGlzYWJsZUFuYWx5dGljcztcbiAgICAgICAgaWYgKHBhcnNlZFRva2VuLm9yZGVySGlzdG9yeSkge1xuICAgICAgICAgIHRoaXMub3JkZXJIaXN0b3J5RW5hYmxlZCA9IHBhcnNlZFRva2VuLm9yZGVySGlzdG9yeTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VkVG9rZW4ubm9TdXBwbGllcikge1xuICAgICAgICAgIHRoaXMubG9hZFN0b3JlTG9jYXRvclBhY2thZ2UoKTtcbiAgICAgICAgICB0aGlzLm5vU3VwcGxpZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZmFrZUNhcnRTZXJ2aWNlLm1hdGNoTWVhbHpCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLm1lYWx6LnVzZXIucmVzZXQoKTtcbiAgICAgICAgICB0aGlzLnBvc1NlcnZpY2UucG9zRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgICB0aGlzLm1lYWx6LmJhc2tldFN5bmMuZGVmaW5lUHVzaFByb2R1Y3RzVG9DYXJ0KHByb2R1Y3RzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmFrZUNhcnRTZXJ2aWNlLnB1c2hUb0Zha2VDYXJ0KHByb2R1Y3RzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIubm9TdXBwbGllciQubmV4dCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vbm9TdXBwbGllci9wb3NJZCcpO1xuICAgICAgICAgIHRoaXMubWVhbHouc3VwcGxpZXIubG9hZChwYXJzZWRUb2tlbi5zdXBwbGllcklkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldEFmZmlsaWF0ZVN1cHBsaWVyczogKCkgPT4gdGhpcy5zdXBwbGllcnNTZXJ2aWNlLmdldEFmZmlsaWF0ZVN1cHBsaWVycygpXG4gICAgfSxcbiAgICB1c2VyOiB7XG4gICAgICBsb2FkV2l0aEF1dGhsZXNzSWQ6IChpZCwgZm9yYmlkUHJvZmlsaW5nID0gZmFsc2UpID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0UmVnaXN0cnlTZXJ2aWNlLmZvcmJpZFByb2ZpbGluZyA9IGZvcmJpZFByb2ZpbGluZztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ19taWFtL2F1dGhsZXNzSWQnLCBpZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdfbWlhbS9hdXRobGVzcy1mb3JiaWQtcHJvZmlsaW5nJywgJycgKyBmb3JiaWRQcm9maWxpbmcpO1xuICAgICAgfSxcbiAgICAgIGxvYWRXaXRoRXh0ZXJuYWxJZDogKGlkLCBmb3JiaWRQcm9maWxpbmcgPSBmYWxzZSwgaW5pdEJhc2tldCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIHRoaXMuY29udGV4dFJlZ2lzdHJ5U2VydmljZS5mb3JiaWRQcm9maWxpbmcgPSBmb3JiaWRQcm9maWxpbmc7XG4gICAgICAgIHRoaXMubG9nZ2VkT25TZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ19taWFtL3VzZXJJZCcsIGlkKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19taWFtL3VzZXJUb2tlbicpO1xuICAgICAgICB0aGlzLmJhc2tldEhhbmRsZXIucmVzZXRNZWFseigpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2dVc2VyKGlkLCBmb3JiaWRQcm9maWxpbmcsIGluaXRCYXNrZXQpO1xuICAgICAgfSxcbiAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2dlZE9uU2Vzc2lvbikge1xuICAgICAgICAgIHRoaXMuYmFza2V0SGFuZGxlci5yZXNldE1lYWx6KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZWRPblNlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19taWFtL3VzZXJUb2tlbicpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX21pYW0vdXNlcklkJyk7XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UudG9nZ2xlSXNMb2dnZWQoZmFsc2UpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlQXV0aGxlc3NJZElmTmVjZXNzYXJ5KCkucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHN3aXRjaE1hcChpZCA9PiB7XG4gICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5yZXNldFVzZXJJbmZvKCk7XG4gICAgICAgICAgICAgIG1lYWx6RGVidWcoJ1tNZWFsel0gd2lsbCByZWZyZXNoIGJhc2tldCBhZnRlciByZXNldCcpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iYXNrZXRzU2VydmljZS5yZWZyZXNoQ3VycmVudEJhc2tldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgIH0pXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XG4gICAgICB9LFxuICAgICAgc2V0TGFuZ3VhZ2U6IChsYW5nOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5sYW5ndWFnZSA9IGxhbmc7XG4gICAgICB9LFxuICAgICAgc2V0RmF2b3JpdGVJdGVtczogZmF2b3JpdGVQcm9kdWN0SWRzID0+IHRoaXMudXNlclNlcnZpY2Uuc2V0RmF2b3JpdGVJdGVtcyhmYXZvcml0ZVByb2R1Y3RJZHMpLFxuICAgICAgc2V0TG9jYXRpb246IChjb29yZHM6IEdlb2xvY2F0aW9uUG9zaXRpb24pID0+IHRoaXMudXNlclNlcnZpY2UudXNlckNvb3JkaW5hdGVzJC5uZXh0KGNvb3JkcyB8fCBudWxsKSxcbiAgICAgIHVwZGF0ZUZvcmJpZFByb2ZpbGluZzogKGZvcmJpZFByb2ZpbGluZzogYm9vbGVhbiwgdXNlcklkOiBzdHJpbmcsIGlzQXV0aGxlc3MgPSBmYWxzZSkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRobGVzcykge1xuICAgICAgICAgIHRoaXMubWVhbHoudXNlci5sb2FkV2l0aEF1dGhsZXNzSWQodXNlcklkLCBmb3JiaWRQcm9maWxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nVXNlcih1c2VySWQsIGZvcmJpZFByb2ZpbGluZywgZmFsc2UpLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHN0b3JlTG9jYXRvck9wZW5lZDogKCkgPT4gdGhpcy5zdG9yZUxvY2F0b3JTZXJ2aWNlLnN0b3JlTG9jYXRvck9wZW5lZCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgIH0sXG4gICAgc2V0U3RpY2t5SGVhZGVySGVpZ2h0OiAoaGVpZ2h0OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLnN1cHBsaWVySGVhZGVySGVpZ2h0JC52YWx1ZSAhPT0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuc3VwcGxpZXJIZWFkZXJIZWlnaHQkLm5leHQoaGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgdHdvIHRpbWVzICdsbCBub3QgYmUgY29uc2lkZXJlZFxuICAgICAqIEBwYXJhbSBpY29uIGhhdmUgdG8gYmUgYSBrbm93ZWQgaWNvbiBuYW1lIHNlZSBzZWN0aW9uICdDdXN0b20gaWNvbnMnIGluIHJlYWQgbWVcbiAgICAgKiBAcGFyYW0gdXJsIG9mIHRoZSBuZXcgaWNvblxuICAgICAqL1xuICAgIG92ZXJyaWRlSWNvbjogKGljb24sIHVybCkgPT4geyAvLyBUT0RPOiBNT1ZFIFRPIGNvbnRlbnRcbiAgICAgIGlmICghdGhpcy5pY29ucykge1xuICAgICAgICB0aGlzLmljb25zID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBpY29uSW5kZXggPSB0aGlzLmljb25zLmZpbmRJbmRleCgoaTogSWNvbk92ZXJyaWRlKSA9PiBpLmljb24gPT09IGljb24pO1xuICAgICAgaWYgKGljb25JbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuaWNvbnNbaWNvbkluZGV4XSA9IHsgaWNvbiwgdXJsIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmljb25zLnB1c2goeyBpY29uLCB1cmwgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXREZWZhdWx0U2Nyb2xsRWxlbWVudEdldHRlcjogKGNhbGxiYWNrOiAoKSA9PiBIVE1MRWxlbWVudCkgPT4gdGhpcy5kZWZhdWx0U2Nyb2xsRWxlbWVudEdldHRlciA9IGNhbGxiYWNrXG4gIH07XG5cbiAgbWVhbHpJbnRlcm5hbDogTWVhbHpJbnRlcm5hbEludGVyZmFjZSA9IHtcbiAgICBhbmFseXRpY3M6IHtcbiAgICAgIHNlbmRFdmVudDogKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBwcm9wczogUGxhdXNpYmxlUHJvcHMpID0+XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5zZW5kRXZlbnQobmFtZSwgcGF0aCwgcHJvcHMpLFxuICAgICAgc2V0SXNNZWFselBhZ2U6IChpc01lYWx6UGFnZTogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuaXNNZWFselBhZ2UgPSBpc01lYWx6UGFnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJhc2tldDoge1xuICAgICAgcmVjaXBlUHJpY2VzSW5CYXNrZXQkOiAoKSA9PiB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlY2lwZXNJbkJhc2tldCQoKSxcbiAgICAgIHJlY2lwZXNBZGRlZFRvQmFza2V0JDogKCkgPT4gdGhpcy5iYXNrZXRzU2VydmljZS5yZWNpcGVzQWRkZWQsXG4gICAgICB3YWl0Rm9yQmFza2V0RW50cmllczogKCkgPT4gdGhpcy5iYXNrZXRzU2VydmljZS53YWl0Rm9yQmFza2V0LnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuYmFza2V0c1NlcnZpY2Uud2FpdEZvckJhc2tldEVudHJpZXMpKVxuICAgIH0sXG4gICAgY2F0YWxvZzoge1xuICAgICAgb3BlblByZWZlcmVuY2VzOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXNQcmVmZXJlbmNlc1NTUiA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmVyZW5jZXNTZXJ2aWNlLmlzT3BlbmVkJC5uZXh0KHRydWUpO1xuICAgICAgfSxcbiAgICAgIHByZWZlcmVuY2VzTW9kYWxDaGFuZ2VkOiAoKSA9PiB0aGlzLnByZWZlcmVuY2VzQ2hhbmdlZCxcbiAgICAgIHByZWZlcmVuY2VzQ291bnQ6ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT4gdGhpcy5wcmVmZXJlbmNlc1NlcnZpY2UuY3VycmVudFByZWZlcmVuY2VzTnVtYmVyLFxuICAgICAgbG9hZE1vcmVSZWNpcGVzOiAocGFja2FnZUlkLCBwYWdlLCBwYWdlU2l6ZSwgZ3Vlc3RzKTogT2JzZXJ2YWJsZTxSZWNpcGVbXT4gPT5cbiAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5sb2FkUmVjaXBlc0Zyb21QYWNrYWdlSWQocGFja2FnZUlkLCBwYWdlLCBwYWdlU2l6ZSwgZ3Vlc3RzKVxuICAgIH0sXG4gICAgY29uZmlnOiB7XG4gICAgICBsb2dMZXZlbDogdGhpcy5sb2dMZXZlbCRcbiAgICB9LFxuICAgIHJlY2lwZXM6IHtcbiAgICAgIG9wZW5EZXRhaWxzOiAocmVjaXBlSWQ6IHN0cmluZywgZ3Vlc3RzOiBudW1iZXIsIGluaXRpYWxUYWJJbmRleDogbnVtYmVyLCBwYXRoOiBzdHJpbmcgPSAnJywgY2F0ZWdvcnlJZDogc3RyaW5nID0gbnVsbCkgPT5cbiAgICAgICAgdGhpcy5yZWNpcGVzU2VydmljZS5vcGVuUmVjaXBlRGV0YWlscyhyZWNpcGVJZCwgZ3Vlc3RzLCBpbml0aWFsVGFiSW5kZXgsIHBhdGgsIGNhdGVnb3J5SWQpLFxuICAgICAgdXBkYXRlUmVjaXBlTGlrZTogKHJlY2lwZUxpa2VJZDogc3RyaW5nLCByZWNpcGVJZDogc3RyaW5nLCBpc1Bhc3Q6IGJvb2xlYW4sIHBhdGg6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50VHJhY2U6IEV2ZW50VHJhY2UgPSB7IG9yaWdpblBhdGg6IHBhdGgsIHByb3BzOiB7IHJlY2lwZV9pZDogcmVjaXBlSWQgfSB9O1xuICAgICAgICBjb25zdCByZWNpcGVMaWtlID0gdGhpcy5yZWNpcGVMaWtlc1NlcnZpY2UucHJlcGFyZVJlY2lwZUxpa2VGb3JVcGRhdGUocmVjaXBlSWQsIHJlY2lwZUxpa2VJZCwgaXNQYXN0KTtcblxuICAgICAgICB0aGlzLnJlY2lwZUxpa2VzU2VydmljZS51cGRhdGVMaWtlKHJlY2lwZUlkLCByZWNpcGVMaWtlLCBldmVudFRyYWNlKTtcbiAgICAgIH0sXG4gICAgICByZWNpcGVMaWtlVXBkYXRlZDogKCkgPT4gdGhpcy5yZWNpcGVMaWtlc1NlcnZpY2UucmVjaXBlTGlrZVVwZGF0ZWQkLFxuICAgICAgZ3Vlc3RzVXBkYXRlZDogKCkgPT4gdGhpcy5ndWVzdHNDaGFuZ2VkLFxuICAgICAgcmVjaXBlUHJpY2VVcGRhdGVkOiAoKSA9PiB0aGlzLnJlY2lwZVByaWNlQ2hhbmdlZCxcbiAgICAgIGZldGNoUHJpY2luZzogKHJlY2lwZUlkOiBzdHJpbmcsIHBvc0lkOiBzdHJpbmcsIHByaWNlYm9va0tleTogc3RyaW5nLCBzZXJ2ZXM6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIXJlY2lwZUlkIHx8ICFwb3NJZCB8fCAhc2VydmVzKSB7XG4gICAgICAgICAgcmV0dXJuIChvZihudWxsKSBhcyBPYnNlcnZhYmxlPFJlY2lwZVByaWNpbmc+KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWNpcGVzU2VydmljZS5nZXRQcmljaW5nKHJlY2lwZUlkLCBwb3NJZCwgcHJpY2Vib29rS2V5LCBzZXJ2ZXMpLnBpcGUoXG4gICAgICAgICAgc2tpcFdoaWxlKHJlc3VsdCA9PiByZXN1bHQucHJpY2UgPT09IDApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdXBwbGllcjoge1xuICAgICAgZ2V0VG9rZW46ICgpID0+IHRoaXMuc3VwcGxpZXJzU2VydmljZS50b2tlblxuICAgIH0sXG4gICAgdXNlcjoge1xuICAgICAgZ2V0TGFuZ3VhZ2U6ICgpID0+IHRoaXMudXNlclNlcnZpY2UubGFuZ3VhZ2UsXG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6ICgpID0+IHRoaXMudXNlclNlcnZpY2UuaXNMb2dnZWQkLFxuICAgICAgc2V0U2Vzc2lvbklkOiAoc2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnX21pYW0vc2Vzc2lvbklkJywgc2Vzc2lvbklkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFN0aWNreUhlYWRlckhlaWdodDogKCkgPT4gdGhpcy5zdXBwbGllckhlYWRlckhlaWdodCRcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBvc1NlcnZpY2U6IFBvaW50T2ZTYWxlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRzU2VydmljZTogQmFza2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmVmZXJlbmNlc1NlcnZpY2U6IFByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRSZWNpcGVDbGVhbnVwU2VydmljZTogQmFza2V0UmVjaXBlQ2xlYW51cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZWRpYU1hdGNoZXI6IE1lZGlhTWF0Y2hlcixcbiAgICBwcml2YXRlIHN1cHBsaWVyc1NlcnZpY2U6IFN1cHBsaWVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAvLyBwcml2YXRlIGJhc2tldEhhbmRsZXI6IExlZ2FjeUJhc2tldHNTeW5jaHJvbml6ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFza2V0SGFuZGxlcjogQmFza2V0c1N5bmNocm9uaXplclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZUxvY2F0b3JTZXJ2aWNlOiBTdG9yZUxvY2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjaXBlTGlrZXNTZXJ2aWNlOiBSZWNpcGVMaWtlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWtlQ2FydFNlcnZpY2U6IEZha2VSZXRhaWxlckNhcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGlzdG9yeVNlcnZpY2U6IEhpc3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGV4dFJlZ2lzdHJ5U2VydmljZTogQ29udGV4dFJlZ2lzdHJ5U2VydmljZVxuICApIHtcbiAgICB0aGlzLmlzU21hbGxTY3JlZW4kLm5leHQoIXRoaXMubWVkaWFNYXRjaGVyLm1hdGNoTWVkaWEoU01BTExfU0NSRUVOX0JQKS5tYXRjaGVzKTtcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFNNQUxMX1NDUkVFTl9CUCkuc3Vic2NyaWJlKEJQQ2hhbmdlID0+IHRoaXMuaXNTbWFsbFNjcmVlbiQubmV4dCghQlBDaGFuZ2UubWF0Y2hlcykpO1xuICAgIHRoaXMuaWNvbnMgPSBbXTtcbiAgICB0aGlzLkNPUlNJc3N1ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBPYmplY3QuYXNzaWduKHdpbmRvdywge1xuICAgICAgbWVhbHo6IHRoaXMubWVhbHosXG4gICAgICBtZWFsekludGVybmFsOiB0aGlzLm1lYWx6SW50ZXJuYWxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgaG9va0NhbGxiYWNrOiAoaXNMb2dnZWQsIGlzUG9zVmFsaWQpID0+IGJvb2xlYW4gPSAoaXNMb2dnZWQsIGlzUG9zVmFsaWQpID0+IHtcbiAgICBtZWFseldhcm4oJ1tNZWFsel0gaG9va0NhbGxiYWNrICh1c2VkIHRvIGZvcmNlIHVzZXIgbG9naW4pIG5vdCBzZXQnKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBmb3JjZVBvc0NhbGxiYWNrOiAocG9zRXh0SWQ6IHN0cmluZykgPT4gYm9vbGVhbiA9IChwb3NFeHRJZDogc3RyaW5nKSA9PiB7XG4gICAgbWVhbHpXYXJuKCdbTWVhbHpdIGZvcmNlUG9zQ2FsbGJhY2sgKHVzZWQgdG8gZm9yY2Ugc2VsZWN0ZWQgc2hvcCkgbm90IHNldCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBkZWZhdWx0U2Nyb2xsRWxlbWVudEdldHRlcjogKCkgPT4gSFRNTEVsZW1lbnQgPSAoKSA9PiBkb2N1bWVudC5ib2R5O1xuXG4gIHNldENPUlNJc3N1ZVN0YXRlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5DT1JTSXNzdWVzLm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0Q09SU0lzc3Vlc1N0YXRlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLkNPUlNJc3N1ZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRPdmVycmlkZUljb25VcmwoaWNvbjogSWNvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZmluZGljb24gPSB0aGlzLmljb25zLmZpbmQoZWwgPT4gZWwuaWNvbiA9PT0gaWNvbik7XG4gICAgcmV0dXJuIGZpbmRpY29uID8gZmluZGljb24udXJsIDogJyc7XG4gIH1cblxuICBwcml2YXRlIHNldE9yaWdpbklmTmVjZXNzYXJ5KG9yaWdpbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKG9yaWdpbiAmJiB0aGlzLm9yaWdpbi52YWx1ZSAhPT0gb3JpZ2luKSB7XG4gICAgICB0aGlzLm9yaWdpbi5uZXh0KG9yaWdpbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkJhc2tldEFuZFBvc1NlbmRQYXltZW50U3RhcnRlZEV2ZW50KHRvdGFsUHJpY2U6IG51bWJlcik6IHZvaWQge1xuICAgIGZvcmtKb2luKFtcbiAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2Uud2FpdEZvckJhc2tldCxcbiAgICAgIHRoaXMucG9zU2VydmljZS53YWl0Rm9yUG9zLnBpcGUodGFrZSgxKSlcbiAgICBdKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGNvbnN0IGJhc2tldCA9IHJlc1swXTtcbiAgICAgIGNvbnN0IHBvcyA9IHJlc1sxXTtcbiAgICAgIGlmIChiYXNrZXQudG90YWxQcmljZSA+IDApIHtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLnNlbmRFdmVudChcbiAgICAgICAgICAncGF5bWVudC5zdGFydGVkJyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYXNrZXRfaWQ6IGJhc2tldC5pZCxcbiAgICAgICAgICAgIG1pYW1fYW1vdW50OiBiYXNrZXQudG90YWxQcmljZS50b1N0cmluZygpLFxuICAgICAgICAgICAgdG90YWxfYW1vdW50OiB0b3RhbFByaWNlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwb3NfaWQ6IHRoaXMucG9zU2VydmljZS5wb3MkLmdldFZhbHVlKCkuaWQsXG4gICAgICAgICAgICBwb3NfbmFtZTogdGhpcy5wb3NTZXJ2aWNlLnBvcyQuZ2V0VmFsdWUoKS5hdHRyaWJ1dGVzLm5hbWUsXG4gICAgICAgICAgICBzdXBwbGllcl9pZDogdGhpcy5wb3NTZXJ2aWNlLnBvcyQuZ2V0VmFsdWUoKS5yZWxhdGlvbnNoaXBzLnN1cHBsaWVyLmRhdGEuaWQsXG4gICAgICAgICAgICByZWNpcGVfY291bnQ6IGJhc2tldC5yZWNpcGVJbmZvcy5sZW5ndGgudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1pYW1fcHJvZHVjdHM6IGJhc2tldC5lbnRyaWVzLmxlbmd0aC50b1N0cmluZygpXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dVc2VyKHRva2VuT3JJZDogc3RyaW5nLCBmb3JiaWRQcm9maWxpbmc6IGJvb2xlYW4sIGluaXRCYXNrZXQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0b2tlbk9ySWQpIHtcbiAgICAgIHRoaXMudXNlclNlcnZpY2UudG9nZ2xlSXNMb2dnZWQodHJ1ZSk7XG4gICAgfVxuICAgIC8vIGlmIGluaXRCYXNrZXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgYmFza2V0ICYgbGlzdCB3aWxsIG5vdCBiZSBpbml0aWFsaXNlZCB1bnRpbCB0aGUgZmlyc3QgdGltZSB0aGV5IGFyZSBuZWVkZWRcbiAgICBpZiAoaW5pdEJhc2tldCkge1xuICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5pbml0QmFza2V0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLmdlbmVyYXRpbmdBdXRobGVzc0lkJC5waXBlKFxuICAgICAgc2tpcFdoaWxlKGdlbmVyYXRpbmcgPT4gZ2VuZXJhdGluZyksXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgaWYgKCEhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL2F1dGhsZXNzSWQnKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJhc2tldHNTZXJ2aWNlLnJlbG9hZEJhc2tldCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2Uuc2V0VXNlckluZm8oZm9yYmlkUHJvZmlsaW5nKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRTdG9yZUxvY2F0b3JQYWNrYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlTG9jYXRvclNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHN0b3JlTG9jYXRvclNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbW9kdWxlJyk7XG4gICAgc3RvcmVMb2NhdG9yU2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgYCR7ZW52aXJvbm1lbnQubWVhbHpDb21wb25lbnRzfS9zdG9yZS1sb2NhdG9yL3N0b3JlLWxvY2F0b3IubWluLmpzYCk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdG9yZUxvY2F0b3JTY3JpcHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUF1dGhsZXNzSWRJZk5lY2Vzc2FyeSgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZW5lcmF0aW5nQXV0aGxlc3NJZCQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSg4MDApLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcChpc0dlbmVyYXRpbmcgPT4ge1xuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nIHx8IHRoaXMubG9nZ2VkT25TZXNzaW9uIHx8ICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL2F1dGhsZXNzSWQnKSkge1xuICAgICAgICAgIHJldHVybiBvZjx2b2lkPihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5nZW5lcmF0ZUFub255bW91c1VzZXJJZCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEJhc2tldCgpIHtcbiAgICB0aGlzLmJhc2tldHNTZXJ2aWNlLndhaXRGb3JCYXNrZXRFbnRyaWVzXG4gICAgICAucGlwZShtYXAoKGVudHJpZXM6IEJhc2tldEVudHJ5W10pID0+XG4gICAgICAgIGVudHJpZXNcbiAgICAgICAgICAuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnN0YXR1cyA9PT0gJ2FjdGl2ZScpXG4gICAgICAgICAgLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZWRFbnRyeSA9IGRlZXBDbG9uZVdpdGhDbGFzcyhlbnRyeSkgYXMgQmFza2V0RW50cnk7XG4gICAgICAgICAgICBjbG9uZWRFbnRyeS5xdWFudGl0eSA9IDA7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVkRW50cnk7XG4gICAgICAgICAgfSlcbiAgICAgICkpLnN1YnNjcmliZSgoY2xvbmVkRW50cmllc1RvUmVtb3ZlOiBCYXNrZXRFbnRyeVtdKSA9PiB7XG4gICAgICAgIGlmIChjbG9uZWRFbnRyaWVzVG9SZW1vdmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5iYXNrZXRzU2VydmljZS5yZXNldEJhc2tldCgpLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzZXRCYXNrZXQgPSBjbG9uZWRFbnRyaWVzVG9SZW1vdmUubWFwKGVudHJ5ID0+IG5ldyBSZXNldEJhc2tldEFjdGlvbihlbnRyeSwge30sIHRoaXMuYmFza2V0c1NlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5iYXNrZXRIYW5kbGVyLmFkZFRvQWN0aW9uTGlzdChyZXNldEJhc2tldCk7XG4gICAgICAgIGlmIChyZXNldEJhc2tldC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzZXRCYXNrZXRbcmVzZXRCYXNrZXQubGVuZ3RoIC0gMV0ub25TdWNjZXNzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFza2V0c1NlcnZpY2UucmVzZXRCYXNrZXQoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpResponse } from '@angular/common/http';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
|
-
import { throwError } from 'rxjs';
|
|
3
|
+
import { combineLatest, throwError } from 'rxjs';
|
|
4
4
|
import { catchError, map, skipWhile, switchMap, take } from 'rxjs/operators';
|
|
5
5
|
import { v4 as uuidv4 } from 'uuid';
|
|
6
6
|
import { environment } from '../environments/environment';
|
|
@@ -24,7 +24,7 @@ export class MiamInterceptor {
|
|
|
24
24
|
request = request.clone({ withCredentials: true });
|
|
25
25
|
request = this.setUserProfiling(request);
|
|
26
26
|
request = this.setSessionId(request);
|
|
27
|
-
return this.context.origin.pipe(skipWhile(origin => !origin), take(1), switchMap(() => {
|
|
27
|
+
return this.context.origin.pipe(skipWhile(origin => !origin), switchMap(() => combineLatest([this.usersService.userInfo$, this.usersService.generatingAuthlessId$])), skipWhile(() => this.shouldWaitForAuthentication(request)), take(1), switchMap(() => {
|
|
28
28
|
request = this.setMiamHeaders(request);
|
|
29
29
|
return next.handle(request).pipe(map((event) => {
|
|
30
30
|
var _a;
|
|
@@ -113,10 +113,17 @@ export class MiamInterceptor {
|
|
|
113
113
|
this.context.setCORSIssueState(true);
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
+
shouldWaitForAuthentication(request) {
|
|
117
|
+
// Skip all requests except the ones which sets the user / authless until we have a user / authless
|
|
118
|
+
if (request.url.includes('user_info') || request.url.includes('users/authless')) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
return !localStorage.getItem('_miam/userId') && !localStorage.getItem('_miam/authlessId');
|
|
122
|
+
}
|
|
116
123
|
}
|
|
117
124
|
MiamInterceptor.ɵfac = function MiamInterceptor_Factory(t) { return new (t || MiamInterceptor)(i0.ɵɵinject(i1.ContextService), i0.ɵɵinject(i2.UserService)); };
|
|
118
125
|
MiamInterceptor.ɵprov = i0.ɵɵdefineInjectable({ token: MiamInterceptor, factory: MiamInterceptor.ɵfac });
|
|
119
126
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MiamInterceptor, [{
|
|
120
127
|
type: Injectable
|
|
121
128
|
}], function () { return [{ type: i1.ContextService }, { type: i2.UserService }]; }, null); })();
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1pYW0vc3JjL2xpYi9fc2VydmljZXMvaW50ZXJjZXB0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBTUwsWUFBWSxFQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLElBQUksT0FBTyxFQUFHLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHN0MsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFBb0IsT0FBdUIsRUFBVSxZQUF5QjtRQUExRCxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFhO0lBQUcsQ0FBQztJQUVsRixTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxF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QUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEludGVyY2VwdG9yLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBSZXNwb25zZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCBhcyBwcm9kRW52ICB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5wcm9kJztcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tICcuLi9lbnZpcm9ubWVudHMvdmVyc2lvbic7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4vY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWlhbUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250ZXh0OiBDb250ZXh0U2VydmljZSwgcHJpdmF0ZSB1c2Vyc1NlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7fVxuXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IGFueSB7XG4gICAgaWYgKHJlcXVlc3QudXJsLmluY2x1ZGVzKCdwbGF1c2libGUnKSB8fCByZXF1ZXN0LnVybC5pbmNsdWRlcygnc3NyLWFwaScpKSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdCA9IHRoaXMuc2V0QXV0aEhlYWRlcnMocmVxdWVzdCk7XG4gICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XG4gICAgcmVxdWVzdCA9IHRoaXMuc2V0VXNlclByb2ZpbGluZyhyZXF1ZXN0KTtcbiAgICByZXF1ZXN0ID0gdGhpcy5zZXRTZXNzaW9uSWQocmVxdWVzdCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZXh0Lm9yaWdpbi5waXBlKFxuICAgICAgc2tpcFdoaWxlKG9yaWdpbiA9PiAhb3JpZ2luKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0ID0gdGhpcy5zZXRNaWFtSGVhZGVycyhyZXF1ZXN0KTtcblxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiAoZXZlbnQuYm9keSBhcyB7IGxpbmtzOiB7bmV4dDogc3RyaW5nOyBsYXN0OiBzdHJpbmd9IH0pPy5saW5rcykge1xuICAgICAgICAgICAgZXZlbnQgPSB0aGlzLmFkZFBhZ2VzSW5mb3MoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0pLCBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnNldENPUlNJbkNvbnRleHQoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBdXRoSGVhZGVycyhyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX21pYW0vdXNlclRva2VuJyk7XG4gICAgY29uc3QgdXNlcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL3VzZXJJZCcpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfbWlhbS9hdXRobGVzc0lkJyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh1c2VySWQpIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgdXNlcl9pZCAke3VzZXJJZH1gIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlclByb2ZpbGluZyhyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgaWYgKHRoaXMudXNlcnNTZXJ2aWNlLnByb2ZpbGluZ0ZvcmJpZGRlbigpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfbWlhbS9hdXRobGVzcy1mb3JiaWQtcHJvZmlsaW5nJykgPT09ICd0cnVlJykge1xuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoeyBwYXJhbXM6IHJlcXVlc3QucGFyYW1zLmFwcGVuZCgncHJvZmlsaW5nJywgJ29mZicpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2Vzc2lvbklkKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiBIdHRwUmVxdWVzdDxhbnk+IHtcbiAgICBsZXQgc2Vzc2lvbklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnX21pYW0vc2Vzc2lvbklkJyk7XG5cbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgc2Vzc2lvbklkID0gdXVpZHY0KCk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdfbWlhbS9zZXNzaW9uSWQnLCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHsgc2V0SGVhZGVyczogeyAnbWVhbHotc2Vzc2lvbi1pZCc6IHNlc3Npb25JZCB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNaWFtSGVhZGVycyhyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgY29uc3QgaGVhZGVyc1RvQWRkID0ge1xuICAgICAgJ21pYW0tb3JpZ2luJzogdGhpcy5jb250ZXh0Lm9yaWdpbi52YWx1ZSxcbiAgICAgICdtaWFtLWZyb250LXZlcnNpb24nOiBWRVJTSU9OLFxuICAgICAgJ21pYW0tZnJvbnQtdHlwZSc6ICd3ZWInLFxuICAgICAgJ21pYW0tYXBpLXZlcnNpb24nOiAnNC43LjAnXG4gICAgfTtcblxuICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcygnbGFuZ3VhZ2UtaWQnKSkge1xuICAgICAgaGVhZGVyc1RvQWRkWydsYW5ndWFnZS1pZCddID0gZW52aXJvbm1lbnQubGFuZztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7IHNldEhlYWRlcnM6IGhlYWRlcnNUb0FkZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGFnZXNJbmZvcyhldmVudDogSHR0cFJlc3BvbnNlPGFueT4pOiBIdHRwUmVzcG9uc2U8YW55PiB7XG4gICAgY29uc3QgbGlua3MgPSAoZXZlbnQuYm9keSBhcyB7IGxpbmtzOiB7bmV4dD86IHN0cmluZzsgbGFzdD86IHN0cmluZ30gfSkubGlua3M7XG4gICAgaWYgKGxpbmtzPy5sYXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsYXN0UGFnZVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTChsaW5rcy5sYXN0KS5zZWFyY2gpO1xuICAgICAgICBjb25zdCBzaXplID0gcGFyc2VJbnQobGFzdFBhZ2VQYXJhbXMuZ2V0KCdwYWdlW3NpemVdJykgfHwgJzAnLCAxMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gc2l6ZSAqIHBhcnNlSW50KGxhc3RQYWdlUGFyYW1zLmdldCgncGFnZVtudW1iZXJdJykgfHwgJzAnLCAxMCk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gcGFyc2VJbnQobGFzdFBhZ2VQYXJhbXMuZ2V0KCdwYWdlW251bWJlcl0nKSB8fCAnMCcsIDEwKTtcblxuICAgICAgICBpZiAobGlua3MubmV4dCkge1xuICAgICAgICAgIGNvbnN0IG5leHRQYWdlUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMKGxpbmtzLm5leHQpLnNlYXJjaCk7XG4gICAgICAgICAgY3VycmVudCA9IHBhcnNlSW50KG5leHRQYWdlUGFyYW1zLmdldCgncGFnZVtudW1iZXJdJykgfHwgJzAnLCAxMCkgLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihldmVudC5ib2R5LCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgIHJlc291cmNlc19wZXJfcGFnZTogc2l6ZSxcbiAgICAgICAgICAgIG51bWJlcjogY3VycmVudCxcbiAgICAgICAgICAgIHRvdGFsX3Jlc291cmNlczogdG90YWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBVUkwgaW4gbGlua3M6XCIsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldENPUlNJbkNvbnRleHQoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XG4gICAgLy8gc3RhdHVzIDAgPSB1bmtub3duIGVycm9yLCBDT1JTIGJyZWFrIG9uIHByZWZsaWdodCB0aGVuIG5vIHJlbGV2ZW50IGVycm9yIG1lc3NhZ2VcbiAgICAvLyBXYXJuaW5nIDogY2lyY3VsYXIgZGVwZW5kZW5jeSBpbmplY3Rpb24/XG4gICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gMCAmJiBlcnJvci51cmwuaW5jbHVkZXMocHJvZEVudi5taWFtQVBJICsgJy9hcGknKSkge1xuICAgICAgdGhpcy5jb250ZXh0LnNldENPUlNJc3N1ZVN0YXRlKHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1pYW0vc3JjL2xpYi9fc2VydmljZXMvaW50ZXJjZXB0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBTUwsWUFBWSxFQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxJQUFJLE9BQU8sRUFBRyxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRzdDLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQW9CLE9BQXVCLEVBQVUsWUFBeUI7UUFBMUQsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYTtJQUFHLENBQUM7SUFFbEYsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFDcEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxT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LEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTywyQkFBMkIsQ0FBQyxPQUF5QjtRQUMzRCxtR0FBbUc7UUFDbkcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQy9FLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1RixDQUFDOzs4RUE3SFUsZUFBZTt1REFBZixlQUFlLFdBQWYsZUFBZTt1RkFBZixlQUFlO2NBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwSGFuZGxlcixcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cFJlc3BvbnNlXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2tpcFdoaWxlLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IGVudmlyb25tZW50IGFzIHByb2RFbnYgIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnByb2QnO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gJy4uL2Vudmlyb25tZW50cy92ZXJzaW9uJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNaWFtSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRleHQ6IENvbnRleHRTZXJ2aWNlLCBwcml2YXRlIHVzZXJzU2VydmljZTogVXNlclNlcnZpY2UpIHt9XG5cbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogYW55IHtcbiAgICBpZiAocmVxdWVzdC51cmwuaW5jbHVkZXMoJ3BsYXVzaWJsZScpIHx8IHJlcXVlc3QudXJsLmluY2x1ZGVzKCdzc3ItYXBpJykpIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICByZXF1ZXN0ID0gdGhpcy5zZXRBdXRoSGVhZGVycyhyZXF1ZXN0KTtcbiAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7IHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9KTtcbiAgICByZXF1ZXN0ID0gdGhpcy5zZXRVc2VyUHJvZmlsaW5nKHJlcXVlc3QpO1xuICAgIHJlcXVlc3QgPSB0aGlzLnNldFNlc3Npb25JZChyZXF1ZXN0KTtcblxuICAgIHJldHVybiB0aGlzLmNvbnRleHQub3JpZ2luLnBpcGUoXG4gICAgICBza2lwV2hpbGUob3JpZ2luID0+ICFvcmlnaW4pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGNvbWJpbmVMYXRlc3QoW3RoaXMudXNlcnNTZXJ2aWNlLnVzZXJJbmZvJCwgdGhpcy51c2Vyc1NlcnZpY2UuZ2VuZXJhdGluZ0F1dGhsZXNzSWQkXSkpLFxuICAgICAgc2tpcFdoaWxlKCgpID0+IHRoaXMuc2hvdWxkV2FpdEZvckF1dGhlbnRpY2F0aW9uKHJlcXVlc3QpKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0ID0gdGhpcy5zZXRNaWFtSGVhZGVycyhyZXF1ZXN0KTtcblxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiAoZXZlbnQuYm9keSBhcyB7IGxpbmtzOiB7bmV4dDogc3RyaW5nOyBsYXN0OiBzdHJpbmd9IH0pPy5saW5rcykge1xuICAgICAgICAgICAgZXZlbnQgPSB0aGlzLmFkZFBhZ2VzSW5mb3MoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0pLCBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnNldENPUlNJbkNvbnRleHQoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBdXRoSGVhZGVycyhyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX21pYW0vdXNlclRva2VuJyk7XG4gICAgY29uc3QgdXNlcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL3VzZXJJZCcpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfbWlhbS9hdXRobGVzc0lkJyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh1c2VySWQpIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgdXNlcl9pZCAke3VzZXJJZH1gIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlclByb2ZpbGluZyhyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgaWYgKHRoaXMudXNlcnNTZXJ2aWNlLnByb2ZpbGluZ0ZvcmJpZGRlbigpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfbWlhbS9hdXRobGVzcy1mb3JiaWQtcHJvZmlsaW5nJykgPT09ICd0cnVlJykge1xuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoeyBwYXJhbXM6IHJlcXVlc3QucGFyYW1zLmFwcGVuZCgncHJvZmlsaW5nJywgJ29mZicpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2Vzc2lvbklkKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiBIdHRwUmVxdWVzdDxhbnk+IHtcbiAgICBsZXQgc2Vzc2lvbklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnX21pYW0vc2Vzc2lvbklkJyk7XG5cbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgc2Vzc2lvbklkID0gdXVpZHY0KCk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdfbWlhbS9zZXNzaW9uSWQnLCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHsgc2V0SGVhZGVyczogeyAnbWVhbHotc2Vzc2lvbi1pZCc6IHNlc3Npb25JZCB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNaWFtSGVhZGVycyhyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogSHR0cFJlcXVlc3Q8YW55PiB7XG4gICAgY29uc3QgaGVhZGVyc1RvQWRkID0ge1xuICAgICAgJ21pYW0tb3JpZ2luJzogdGhpcy5jb250ZXh0Lm9yaWdpbi52YWx1ZSxcbiAgICAgICdtaWFtLWZyb250LXZlcnNpb24nOiBWRVJTSU9OLFxuICAgICAgJ21pYW0tZnJvbnQtdHlwZSc6ICd3ZWInLFxuICAgICAgJ21pYW0tYXBpLXZlcnNpb24nOiAnNC43LjAnXG4gICAgfTtcblxuICAgIGlmICghcmVxdWVzdC5oZWFkZXJzLmhhcygnbGFuZ3VhZ2UtaWQnKSkge1xuICAgICAgaGVhZGVyc1RvQWRkWydsYW5ndWFnZS1pZCddID0gZW52aXJvbm1lbnQubGFuZztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7IHNldEhlYWRlcnM6IGhlYWRlcnNUb0FkZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGFnZXNJbmZvcyhldmVudDogSHR0cFJlc3BvbnNlPGFueT4pOiBIdHRwUmVzcG9uc2U8YW55PiB7XG4gICAgY29uc3QgbGlua3MgPSAoZXZlbnQuYm9keSBhcyB7IGxpbmtzOiB7bmV4dD86IHN0cmluZzsgbGFzdD86IHN0cmluZ30gfSkubGlua3M7XG4gICAgaWYgKGxpbmtzPy5sYXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsYXN0UGFnZVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTChsaW5rcy5sYXN0KS5zZWFyY2gpO1xuICAgICAgICBjb25zdCBzaXplID0gcGFyc2VJbnQobGFzdFBhZ2VQYXJhbXMuZ2V0KCdwYWdlW3NpemVdJykgfHwgJzAnLCAxMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gc2l6ZSAqIHBhcnNlSW50KGxhc3RQYWdlUGFyYW1zLmdldCgncGFnZVtudW1iZXJdJykgfHwgJzAnLCAxMCk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gcGFyc2VJbnQobGFzdFBhZ2VQYXJhbXMuZ2V0KCdwYWdlW251bWJlcl0nKSB8fCAnMCcsIDEwKTtcblxuICAgICAgICBpZiAobGlua3MubmV4dCkge1xuICAgICAgICAgIGNvbnN0IG5leHRQYWdlUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMKGxpbmtzLm5leHQpLnNlYXJjaCk7XG4gICAgICAgICAgY3VycmVudCA9IHBhcnNlSW50KG5leHRQYWdlUGFyYW1zLmdldCgncGFnZVtudW1iZXJdJykgfHwgJzAnLCAxMCkgLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihldmVudC5ib2R5LCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgIHJlc291cmNlc19wZXJfcGFnZTogc2l6ZSxcbiAgICAgICAgICAgIG51bWJlcjogY3VycmVudCxcbiAgICAgICAgICAgIHRvdGFsX3Jlc291cmNlczogdG90YWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBVUkwgaW4gbGlua3M6XCIsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldENPUlNJbkNvbnRleHQoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogdm9pZCB7XG4gICAgLy8gc3RhdHVzIDAgPSB1bmtub3duIGVycm9yLCBDT1JTIGJyZWFrIG9uIHByZWZsaWdodCB0aGVuIG5vIHJlbGV2ZW50IGVycm9yIG1lc3NhZ2VcbiAgICAvLyBXYXJuaW5nIDogY2lyY3VsYXIgZGVwZW5kZW5jeSBpbmplY3Rpb24/XG4gICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gMCAmJiBlcnJvci51cmwuaW5jbHVkZXMocHJvZEVudi5taWFtQVBJICsgJy9hcGknKSkge1xuICAgICAgdGhpcy5jb250ZXh0LnNldENPUlNJc3N1ZVN0YXRlKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkV2FpdEZvckF1dGhlbnRpY2F0aW9uKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiBib29sZWFuIHtcbiAgICAvLyBTa2lwIGFsbCByZXF1ZXN0cyBleGNlcHQgdGhlIG9uZXMgd2hpY2ggc2V0cyB0aGUgdXNlciAvIGF1dGhsZXNzIHVudGlsIHdlIGhhdmUgYSB1c2VyIC8gYXV0aGxlc3NcbiAgICBpZiAocmVxdWVzdC51cmwuaW5jbHVkZXMoJ3VzZXJfaW5mbycpIHx8IHJlcXVlc3QudXJsLmluY2x1ZGVzKCd1c2Vycy9hdXRobGVzcycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19taWFtL3VzZXJJZCcpICYmICFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX21pYW0vYXV0aGxlc3NJZCcpO1xuICB9XG59XG4iXX0=
|