@snabcentr/client-ui 0.19.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { ScCatalogService, ScProduct } from '@snabcentr/client-core';
2
+ import { ScCatalogService, ScProduct, ScUserMetrikaService } from '@snabcentr/client-core';
3
3
  import { TuiDay, TuiDayRange, TuiStringHandler } from '@taiga-ui/cdk';
4
4
  import { TuiDialogContext } from '@taiga-ui/core';
5
5
  import { Observable } from 'rxjs';
@@ -10,6 +10,7 @@ import * as i0 from "@angular/core";
10
10
  export declare class ScPriceHistoryComponent implements OnInit {
11
11
  private readonly catalogService;
12
12
  private readonly months$;
13
+ private readonly userMetrikaService;
13
14
  private readonly context?;
14
15
  /**
15
16
  * {@link Observable} временного промежутка истории цен.
@@ -22,7 +23,11 @@ export declare class ScPriceHistoryComponent implements OnInit {
22
23
  /**
23
24
  * {@link Observable} истории цен.
24
25
  */
25
- history$?: Observable<ReadonlyArray<[TuiDay, number]>>;
26
+ history$?: Observable<ReadonlyArray<[TuiDay, number]> | null>;
27
+ /**
28
+ * {@link Observable} изменения состояния загрузки данных истории цен.
29
+ */
30
+ loadingHistory$?: Observable<boolean>;
26
31
  /**
27
32
  * Максимальная цена товара.
28
33
  */
@@ -45,9 +50,10 @@ export declare class ScPriceHistoryComponent implements OnInit {
45
50
  *
46
51
  * @param catalogService Сервис для работы с каталогом.
47
52
  * @param months$ Перечисление месяцев.
53
+ * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.
48
54
  * @param context Контекст диалогового окна, в котором открыт компонент.
49
55
  */
50
- constructor(catalogService: ScCatalogService, months$: Observable<readonly string[]>, context?: TuiDialogContext<void, {
56
+ constructor(catalogService: ScCatalogService, months$: Observable<readonly string[]>, userMetrikaService: ScUserMetrikaService, context?: TuiDialogContext<void, {
51
57
  product: ScProduct;
52
58
  }> | undefined);
53
59
  /** @inheritDoc */
@@ -69,6 +75,6 @@ export declare class ScPriceHistoryComponent implements OnInit {
69
75
  * @param history История цен.
70
76
  */
71
77
  computeValue({ from, to }: TuiDayRange, history: ReadonlyArray<[TuiDay, number]>): ReadonlyArray<[TuiDay, number]>;
72
- static ɵfac: i0.ɵɵFactoryDeclaration<ScPriceHistoryComponent, [null, null, { optional: true; }]>;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScPriceHistoryComponent, [null, null, null, { optional: true; }]>;
73
79
  static ɵcmp: i0.ɵɵComponentDeclaration<ScPriceHistoryComponent, "sc-price-history", never, { "product": "product"; }, {}, never, never, false>;
74
80
  }
@@ -10,8 +10,12 @@ import * as i0 from "@angular/core";
10
10
  */
11
11
  export declare class ScAddDeliveryAddressDialogComponent {
12
12
  private readonly deliveryAddressService;
13
- private readonly context;
13
+ readonly context: TuiDialogContext<void, void>;
14
14
  private readonly convertersService;
15
+ /**
16
+ * Признак того, отображается этот компонент на мобильном устройстве или нет.
17
+ */
18
+ readonly isMobile: boolean;
15
19
  /**
16
20
  * Перечисление типов подсказок.
17
21
  */
@@ -62,7 +62,7 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
62
62
  }
63
63
  };
64
64
  ScCategoriesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }, { token: i1.ScFavoriteService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
65
- ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, ngImport: i0, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex gap-2 py-1.5 px-3 bg-tui-base-02 rounded-xl h-11 items-center text-left hover-hover:hover:ring-2 hover-none:active:ring-2 ring-tui-primary duration-150\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img *ngIf=\"item.properties?.image as image\" [src]=\"getCategoryImage(image)\" [alt]=\"item.name\" class=\"w-8 h-8 object-cover rounded bg-tui-base-03\" />\n <tui-svg *ngIf=\"!item.properties?.image && checkImagesExists(categories)\" src=\"tuiIconCameraOffLarge\" class=\"bg-tui-base-03 !w-8 !h-8 rounded text-tui-base-05\"></tui-svg>\n <div *tuiLet=\"\" class=\"flex grow truncate\">\n <p class=\"text-base font-bold truncate\">{{ item.name }}</p>\n <tui-svg *ngIf=\"item.isFavorite\" src=\"scIconFavoriteFill\" class=\"text-tui-primary !text-sm mr-auto\"></tui-svg>\n </div>\n <tui-svg src=\"tuiIconChevronRightLarge\" class=\"hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary duration-150\"></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex gap-2 py-1.5 px-3 bg-tui-base-02 rounded-xl h-11 items-center text-left hover-hover:hover:ring-2 hover-none:active:ring-2 ring-tui-base-05 duration-150\"\n >\n <div class=\"w-8 h-8 tui-skeleton\"></div>\n <div class=\"h-4 grow tui-skeleton\"></div>\n <tui-svg src=\"tuiIconChevronRightLarge\" class=\"hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary duration-150 tui-skeleton\"></tui-svg>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i4.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: i4.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
+ ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, ngImport: i0, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i4.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
66
66
  __decorate([
67
67
  tuiPure
68
68
  ], ScCategoriesListComponent.prototype, "checkImagesExists", null);
@@ -72,7 +72,7 @@ ScCategoriesListComponent = __decorate([
72
72
  export { ScCategoriesListComponent };
73
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, decorators: [{
74
74
  type: Component,
75
- args: [{ selector: 'sc-categories-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex gap-2 py-1.5 px-3 bg-tui-base-02 rounded-xl h-11 items-center text-left hover-hover:hover:ring-2 hover-none:active:ring-2 ring-tui-primary duration-150\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img *ngIf=\"item.properties?.image as image\" [src]=\"getCategoryImage(image)\" [alt]=\"item.name\" class=\"w-8 h-8 object-cover rounded bg-tui-base-03\" />\n <tui-svg *ngIf=\"!item.properties?.image && checkImagesExists(categories)\" src=\"tuiIconCameraOffLarge\" class=\"bg-tui-base-03 !w-8 !h-8 rounded text-tui-base-05\"></tui-svg>\n <div *tuiLet=\"\" class=\"flex grow truncate\">\n <p class=\"text-base font-bold truncate\">{{ item.name }}</p>\n <tui-svg *ngIf=\"item.isFavorite\" src=\"scIconFavoriteFill\" class=\"text-tui-primary !text-sm mr-auto\"></tui-svg>\n </div>\n <tui-svg src=\"tuiIconChevronRightLarge\" class=\"hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary duration-150\"></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex gap-2 py-1.5 px-3 bg-tui-base-02 rounded-xl h-11 items-center text-left hover-hover:hover:ring-2 hover-none:active:ring-2 ring-tui-base-05 duration-150\"\n >\n <div class=\"w-8 h-8 tui-skeleton\"></div>\n <div class=\"h-4 grow tui-skeleton\"></div>\n <tui-svg src=\"tuiIconChevronRightLarge\" class=\"hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary duration-150 tui-skeleton\"></tui-svg>\n </button>\n</ng-template>\n" }]
75
+ args: [{ selector: 'sc-categories-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n" }]
76
76
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
77
77
  type: Inject,
78
78
  args: [SC_URLS]
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
81
81
  }], clickCategoryEvent: [{
82
82
  type: Output
83
83
  }], checkImagesExists: [] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGVnb3JpZXMtbGlzdC9zYy1jYXRlZ29yaWVzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0ZWdvcmllcy1saXN0L3NjLWNhdGVnb3JpZXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQTBDLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQUVuQzs7R0FFRztBQU9JLElBQU0seUJBQXlCLEdBQS9CLE1BQU0seUJBQXlCO0lBa0JsQzs7Ozs7O09BTUc7SUFDSCxZQUNzQyxJQUFhLEVBQzlCLGVBQWtDLEVBQ2xDLEdBQXNCO1FBRkwsU0FBSSxHQUFKLElBQUksQ0FBUztRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQjNDOztXQUVHO1FBQ2EsYUFBUSxHQUFZLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRDs7V0FFRztRQUVJLHVCQUFrQixHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO0lBYWhFLENBQUM7SUFFSixrQkFBa0I7SUFDWCxRQUFRO1FBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO2FBQzNCLElBQUksQ0FDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEcsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBMkIsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2xELFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLEVBQ0YsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUN2QjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUVJLGlCQUFpQixDQUFDLFVBQWlCO1FBQ3RDLHNFQUFzRTtRQUN0RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7c0hBaEVRLHlCQUF5QixrQkEwQnRCLE9BQU87MEdBMUJWLHlCQUF5Qix1SkNmdEMsNjZEQTRCQTtBRGdESTtJQURDLE9BQU87a0VBSVA7QUFoRVEseUJBQXlCO0lBRHJDLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztHQUMzQix5QkFBeUIsQ0FpRXJDO1NBakVZLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLG9CQUFvQixtQkFFYix1QkFBdUIsQ0FBQyxNQUFNOzswQkE2QjFDLE1BQU07MkJBQUMsT0FBTzs0R0FyQlosVUFBVTtzQkFEaEIsS0FBSztnQkFZQyxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBOENBLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgU0NfVVJMUywgU2NDYXRlZ29yeSwgU2NGYXZvcml0ZVNlcnZpY2UsIFNjSVVybHMgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIHR1aVB1cmUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGB0L/QuNGB0LrQsCDQutCw0YLQtdCz0L7RgNC40LkuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2F0ZWdvcmllcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBTY0NhdGVnb3JpZXNMaXN0Q29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhdGVnb3JpZXM6IFRbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGC0LXQs9C+0YDQuNGOLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NhdGVnb3J5RXZlbnQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXRlZ29yaWVzTGlzdENvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJscyDQvtCx0YrQtdC60YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LHQsNC30L7QstC+0Lwg0YHQv9C40YHQutC1INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gZmF2b3JpdGVTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60L7RgNC30LjQvdC+0LkuXG4gICAgICogQHBhcmFtIGNkciDQntCx0YrQtdC60YIg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQvtCx0L3QsNGA0YPQttC10L3QuNC10Lwg0LjQt9C80LXQvdC10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTQ19VUkxTKSBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmF2b3JpdGVTZXJ2aWNlOiBTY0Zhdm9yaXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZhdm9yaXRlU2VydmljZS5jYXRlZ29yaWVzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5jYXRlZ29yaWVzICYmIEJvb2xlYW4odGhpcy5jYXRlZ29yaWVzLmxlbmd0aCkgJiYgJ2lkJyBpbiB0aGlzLmNhdGVnb3JpZXNbMF0pLFxuICAgICAgICAgICAgICAgIHRhcCgoY2F0ZWdvcmllcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5jYXRlZ29yaWVzIGFzIFNjQ2F0ZWdvcnlbXSk/LmZvckVhY2goY2F0ZWdvcnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkuaXNGYXZvcml0ZSA9IGNhdGVnb3JpZXMuZmluZEluZGV4KGl0ZW0gPT4gY2F0ZWdvcnkuaWQgPT09IGl0ZW0uaWQpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwINGB0LXRgNCy0LXRgNC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIGltZ1BhdGgg0L/Rg9GC0YwsINCz0LTQtSDRhdGA0LDQvdC40YLRgdGPINC40LfQvtCx0YDQsNC20LXQvdC40LUuXG4gICAgICovXG4gICAgcHVibGljIGdldENhdGVnb3J5SW1hZ2UoaW1nUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyAnLycgKyBpbWdQYXRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiDQvdCw0LvQuNGH0LjQtSDRhdC+0YLRjyDQsdGLINC+0LTQvdC+0LPQviDQuNC30L7QsdGA0LDQttC10L3QuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3JpZXMg0KHQv9C40YHQvtC6INC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBjaGVja0ltYWdlc0V4aXN0cyhjYXRlZ29yaWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIHJldHVybiBjYXRlZ29yaWVzLnNvbWUoKGl0ZW0pID0+IGl0ZW0ucHJvcGVydGllcz8uaW1hZ2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjFyZW0sMWZyKSldIGdhcC14LTggZ2FwLXktMlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yaWVzOyBlbHNlIGNhdGVnb3JpZXNTa2VsZXRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiAkYW55KGNhdGVnb3JpZXMpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAgZmxleCBnYXAtMiBweS0xLjUgcHgtMyBiZy10dWktYmFzZS0wMiByb3VuZGVkLXhsIGgtMTEgaXRlbXMtY2VudGVyIHRleHQtbGVmdCBob3Zlci1ob3Zlcjpob3ZlcjpyaW5nLTIgaG92ZXItbm9uZTphY3RpdmU6cmluZy0yIHJpbmctdHVpLXByaW1hcnkgZHVyYXRpb24tMTUwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0NhdGVnb3J5RXZlbnQuZW1pdChpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpdGVtLnByb3BlcnRpZXM/LmltYWdlIGFzIGltYWdlXCIgW3NyY109XCJnZXRDYXRlZ29yeUltYWdlKGltYWdlKVwiIFthbHRdPVwiaXRlbS5uYW1lXCIgY2xhc3M9XCJ3LTggaC04IG9iamVjdC1jb3ZlciByb3VuZGVkIGJnLXR1aS1iYXNlLTAzXCIgLz5cbiAgICAgICAgICAgIDx0dWktc3ZnICpuZ0lmPVwiIWl0ZW0ucHJvcGVydGllcz8uaW1hZ2UgJiYgY2hlY2tJbWFnZXNFeGlzdHMoY2F0ZWdvcmllcylcIiBzcmM9XCJ0dWlJY29uQ2FtZXJhT2ZmTGFyZ2VcIiBjbGFzcz1cImJnLXR1aS1iYXNlLTAzICF3LTggIWgtOCByb3VuZGVkIHRleHQtdHVpLWJhc2UtMDVcIj48L3R1aS1zdmc+XG4gICAgICAgICAgICA8ZGl2ICp0dWlMZXQ9XCJcIiBjbGFzcz1cImZsZXggZ3JvdyB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCB0cnVuY2F0ZVwiPnt7IGl0ZW0ubmFtZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8dHVpLXN2ZyAqbmdJZj1cIml0ZW0uaXNGYXZvcml0ZVwiIHNyYz1cInNjSWNvbkZhdm9yaXRlRmlsbFwiIGNsYXNzPVwidGV4dC10dWktcHJpbWFyeSAhdGV4dC1zbSBtci1hdXRvXCI+PC90dWktc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJ0dWlJY29uQ2hldnJvblJpZ2h0TGFyZ2VcIiBjbGFzcz1cImhvdmVyLWhvdmVyOmdyb3VwLWhvdmVyOnRleHQtdHVpLXByaW1hcnkgaG92ZXItbm9uZTpncm91cC1hY3RpdmU6dGV4dC10dWktcHJpbWFyeSBkdXJhdGlvbi0xNTBcIj48L3R1aS1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc1NrZWxldG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgKnR1aVJlcGVhdFRpbWVzPVwibGV0IGluZGV4IG9mIGlzTW9iaWxlID8gMyA6IDZcIlxuICAgICAgICBjbGFzcz1cImdyb3VwIGZsZXggZ2FwLTIgcHktMS41IHB4LTMgYmctdHVpLWJhc2UtMDIgcm91bmRlZC14bCBoLTExIGl0ZW1zLWNlbnRlciB0ZXh0LWxlZnQgaG92ZXItaG92ZXI6aG92ZXI6cmluZy0yIGhvdmVyLW5vbmU6YWN0aXZlOnJpbmctMiByaW5nLXR1aS1iYXNlLTA1IGR1cmF0aW9uLTE1MFwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy04IGgtOCB0dWktc2tlbGV0b25cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtNCBncm93IHR1aS1za2VsZXRvblwiPjwvZGl2PlxuICAgICAgICA8dHVpLXN2ZyBzcmM9XCJ0dWlJY29uQ2hldnJvblJpZ2h0TGFyZ2VcIiBjbGFzcz1cImhvdmVyLWhvdmVyOmdyb3VwLWhvdmVyOnRleHQtdHVpLXByaW1hcnkgaG92ZXItbm9uZTpncm91cC1hY3RpdmU6dGV4dC10dWktcHJpbWFyeSBkdXJhdGlvbi0xNTAgIHR1aS1za2VsZXRvblwiPjwvdHVpLXN2Zz5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGVnb3JpZXMtbGlzdC9zYy1jYXRlZ29yaWVzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0ZWdvcmllcy1saXN0L3NjLWNhdGVnb3JpZXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQTBDLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQUVuQzs7R0FFRztBQU9JLElBQU0seUJBQXlCLEdBQS9CLE1BQU0seUJBQXlCO0lBa0JsQzs7Ozs7O09BTUc7SUFDSCxZQUNzQyxJQUFhLEVBQzlCLGVBQWtDLEVBQ2xDLEdBQXNCO1FBRkwsU0FBSSxHQUFKLElBQUksQ0FBUztRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQjNDOztXQUVHO1FBQ2EsYUFBUSxHQUFZLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRDs7V0FFRztRQUVJLHVCQUFrQixHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO0lBYWhFLENBQUM7SUFFSixrQkFBa0I7SUFDWCxRQUFRO1FBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO2FBQzNCLElBQUksQ0FDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEcsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBMkIsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2xELFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLEVBQ0YsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUN2QjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUVJLGlCQUFpQixDQUFDLFVBQWlCO1FBQ3RDLHNFQUFzRTtRQUN0RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7c0hBaEVRLHlCQUF5QixrQkEwQnRCLE9BQU87MEdBMUJWLHlCQUF5Qix1SkNmdEMsMHBGQXlEQTtBRG1CSTtJQURDLE9BQU87a0VBSVA7QUFoRVEseUJBQXlCO0lBRHJDLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztHQUMzQix5QkFBeUIsQ0FpRXJDO1NBakVZLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLG9CQUFvQixtQkFFYix1QkFBdUIsQ0FBQyxNQUFNOzswQkE2QjFDLE1BQU07MkJBQUMsT0FBTzs0R0FyQlosVUFBVTtzQkFEaEIsS0FBSztnQkFZQyxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBOENBLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgU0NfVVJMUywgU2NDYXRlZ29yeSwgU2NGYXZvcml0ZVNlcnZpY2UsIFNjSVVybHMgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIHR1aVB1cmUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGB0L/QuNGB0LrQsCDQutCw0YLQtdCz0L7RgNC40LkuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2F0ZWdvcmllcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBTY0NhdGVnb3JpZXNMaXN0Q29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhdGVnb3JpZXM6IFRbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGC0LXQs9C+0YDQuNGOLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NhdGVnb3J5RXZlbnQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXRlZ29yaWVzTGlzdENvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJscyDQvtCx0YrQtdC60YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LHQsNC30L7QstC+0Lwg0YHQv9C40YHQutC1INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gZmF2b3JpdGVTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60L7RgNC30LjQvdC+0LkuXG4gICAgICogQHBhcmFtIGNkciDQntCx0YrQtdC60YIg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQvtCx0L3QsNGA0YPQttC10L3QuNC10Lwg0LjQt9C80LXQvdC10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTQ19VUkxTKSBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmF2b3JpdGVTZXJ2aWNlOiBTY0Zhdm9yaXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZhdm9yaXRlU2VydmljZS5jYXRlZ29yaWVzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5jYXRlZ29yaWVzICYmIEJvb2xlYW4odGhpcy5jYXRlZ29yaWVzLmxlbmd0aCkgJiYgJ2lkJyBpbiB0aGlzLmNhdGVnb3JpZXNbMF0pLFxuICAgICAgICAgICAgICAgIHRhcCgoY2F0ZWdvcmllcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5jYXRlZ29yaWVzIGFzIFNjQ2F0ZWdvcnlbXSk/LmZvckVhY2goY2F0ZWdvcnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkuaXNGYXZvcml0ZSA9IGNhdGVnb3JpZXMuZmluZEluZGV4KGl0ZW0gPT4gY2F0ZWdvcnkuaWQgPT09IGl0ZW0uaWQpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwINGB0LXRgNCy0LXRgNC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIGltZ1BhdGgg0L/Rg9GC0YwsINCz0LTQtSDRhdGA0LDQvdC40YLRgdGPINC40LfQvtCx0YDQsNC20LXQvdC40LUuXG4gICAgICovXG4gICAgcHVibGljIGdldENhdGVnb3J5SW1hZ2UoaW1nUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyAnLycgKyBpbWdQYXRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiDQvdCw0LvQuNGH0LjQtSDRhdC+0YLRjyDQsdGLINC+0LTQvdC+0LPQviDQuNC30L7QsdGA0LDQttC10L3QuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3JpZXMg0KHQv9C40YHQvtC6INC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBjaGVja0ltYWdlc0V4aXN0cyhjYXRlZ29yaWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIHJldHVybiBjYXRlZ29yaWVzLnNvbWUoKGl0ZW0pID0+IGl0ZW0ucHJvcGVydGllcz8uaW1hZ2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjFyZW0sMWZyKSldIGdhcC14LTggZ2FwLXktMlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yaWVzOyBlbHNlIGNhdGVnb3JpZXNTa2VsZXRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiAkYW55KGNhdGVnb3JpZXMpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAgZmxleCBoLTExIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyIHB4LTMgcHktMS41IHRleHQtbGVmdCByaW5nLXR1aS1wcmltYXJ5IGR1cmF0aW9uLTE1MCBob3Zlci1ob3Zlcjpob3ZlcjpyaW5nLTIgaG92ZXItbm9uZTphY3RpdmU6cmluZy0yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0NhdGVnb3J5RXZlbnQuZW1pdChpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucHJvcGVydGllcz8uaW1hZ2UgYXMgaW1hZ2VcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0Q2F0ZWdvcnlJbWFnZShpbWFnZSlcIlxuICAgICAgICAgICAgICAgIFthbHRdPVwiaXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNpemUtOCByb3VuZGVkIGJnLXR1aS1iYXNlLTAzIG9iamVjdC1jb3ZlclwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ucHJvcGVydGllcz8uaW1hZ2UgJiYgY2hlY2tJbWFnZXNFeGlzdHMoY2F0ZWdvcmllcylcIlxuICAgICAgICAgICAgICAgIHNyYz1cInR1aUljb25DYW1lcmFPZmZMYXJnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIhaC04ICF3LTggcm91bmRlZCBiZy10dWktYmFzZS0wMyB0ZXh0LXR1aS1iYXNlLTA1XCJcbiAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ3JvdyB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRydW5jYXRlIHRleHQtYmFzZSBmb250LWJvbGRcIj57eyBpdGVtLm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXNGYXZvcml0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJzY0ljb25GYXZvcml0ZUZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci1hdXRvICF0ZXh0LXNtIHRleHQtdHVpLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5tMlByaWNlIGFzIG0yUHJpY2VcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgZm9udC1tZWRpdW0gdGV4dC10dWktdGV4dC0wMlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQodGA0LXQtNC90Y/RjyDRgdGC0L7QuNC80L7RgdGC0YwgPHNwYW4gW2lubmVySFRNTF09XCJtMlByaWNlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgICAgICAgIHNyYz1cInR1aUljb25DaGV2cm9uUmlnaHRMYXJnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkdXJhdGlvbi0xNTAgaG92ZXItaG92ZXI6Z3JvdXAtaG92ZXI6dGV4dC10dWktcHJpbWFyeSBob3Zlci1ub25lOmdyb3VwLWFjdGl2ZTp0ZXh0LXR1aS1wcmltYXJ5XCJcbiAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc1NrZWxldG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgKnR1aVJlcGVhdFRpbWVzPVwibGV0IGluZGV4IG9mIGlzTW9iaWxlID8gMyA6IDZcIlxuICAgICAgICBjbGFzcz1cImdyb3VwIGZsZXggaC0xMSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMiBweC0zIHB5LTEuNSB0ZXh0LWxlZnQgcmluZy10dWktYmFzZS0wNSBkdXJhdGlvbi0xNTAgaG92ZXItaG92ZXI6aG92ZXI6cmluZy0yIGhvdmVyLW5vbmU6YWN0aXZlOnJpbmctMlwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHVpLXNrZWxldG9uIHNpemUtOFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHVpLXNrZWxldG9uIGgtNCBncm93XCI+PC9kaXY+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICBzcmM9XCJ0dWlJY29uQ2hldnJvblJpZ2h0TGFyZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0dWktc2tlbGV0b24gZHVyYXRpb24tMTUwIGhvdmVyLWhvdmVyOmdyb3VwLWhvdmVyOnRleHQtdHVpLXByaW1hcnkgaG92ZXItbm9uZTpncm91cC1hY3RpdmU6dGV4dC10dWktcHJpbWFyeVwiXG4gICAgICAgID48L3R1aS1zdmc+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,15 +1,17 @@
1
1
  import { __decorate } from "tslib";
2
2
  /* eslint-disable class-methods-use-this,lodash/prefer-lodash-method */
3
3
  import { ChangeDetectionStrategy, Component, Inject, Input, Optional } from '@angular/core';
4
- import { TuiDay, TuiDayRange, TuiMonth, tuiPure } from '@taiga-ui/cdk';
4
+ import { ScUserMetrikaGoalsEnum } from '@snabcentr/client-core';
5
+ import { TuiDay, TuiDayRange, tuiIsFalsy, tuiIsPresent, TuiMonth, tuiPure } from '@taiga-ui/cdk';
5
6
  import { TUI_MONTHS } from '@taiga-ui/core';
6
7
  import { POLYMORPHEUS_CONTEXT } from '@tinkoff/ng-polymorpheus';
7
- import { filter, map, shareReplay } from 'rxjs';
8
+ import { filter, map, shareReplay, startWith, tap } from 'rxjs';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@snabcentr/client-core";
10
11
  import * as i2 from "@angular/common";
11
- import * as i3 from "@taiga-ui/addon-charts";
12
- import * as i4 from "rxjs";
12
+ import * as i3 from "@taiga-ui/core";
13
+ import * as i4 from "@taiga-ui/addon-charts";
14
+ import * as i5 from "rxjs";
13
15
  /**
14
16
  * График истории цен товара или услуги.
15
17
  */
@@ -19,11 +21,13 @@ export class ScPriceHistoryComponent {
19
21
  *
20
22
  * @param catalogService Сервис для работы с каталогом.
21
23
  * @param months$ Перечисление месяцев.
24
+ * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.
22
25
  * @param context Контекст диалогового окна, в котором открыт компонент.
23
26
  */
24
- constructor(catalogService, months$, context) {
27
+ constructor(catalogService, months$, userMetrikaService, context) {
25
28
  this.catalogService = catalogService;
26
29
  this.months$ = months$;
30
+ this.userMetrikaService = userMetrikaService;
27
31
  this.context = context;
28
32
  /**
29
33
  * {@link Observable} функция для преобразования значения number в строку в подсказке по оси X.
@@ -45,12 +49,20 @@ export class ScPriceHistoryComponent {
45
49
  ngOnInit() {
46
50
  this.history$ = this.catalogService.getPriceHistory$(this.product).pipe(map((history) => Object.keys(history)
47
51
  .map((item) => [TuiDay.normalizeParse(item, 'DMY'), history[String(item)].cost])
48
- .sort((a, b) => (a[0] > b[0] ? 1 : -1))), shareReplay({ bufferSize: 1, refCount: true }), filter((history) => history.length > 1));
49
- this.priceInfo$ = this.history$.pipe(map((history) => history.map((item) => item[1])), map((values) => ({
52
+ .sort((a, b) => (a[0] > b[0] ? 1 : -1))), startWith(null), shareReplay({ bufferSize: 1, refCount: true }));
53
+ this.loadingHistory$ = this.history$.pipe(map(tuiIsFalsy));
54
+ this.priceInfo$ = this.history$.pipe(filter(tuiIsPresent), tap(() => {
55
+ this.userMetrikaService.emitUserMetrikaEvent({
56
+ target: ScUserMetrikaGoalsEnum.productPriceHistoryShow,
57
+ params: {
58
+ product_id: this.product.id,
59
+ },
60
+ });
61
+ }), filter((history) => history.length > 1), map((history) => history.map((item) => item[1])), map((values) => ({
50
62
  min: Math.min(...values),
51
63
  max: Math.max(...values),
52
64
  })));
53
- this.range$ = this.history$.pipe(map((value) => ({ from: value.at(0)?.[0], to: value.at(-1)?.[0] })), filter((range) => !!range.from && !!range.to), map((range) => {
65
+ this.range$ = this.history$.pipe(filter(tuiIsPresent), filter((history) => history.length > 1), map((value) => ({ from: value.at(0)?.[0], to: value.at(-1)?.[0] })), filter((range) => !!range.from && !!range.to), map((range) => {
54
66
  return new TuiDayRange(range.from, range.to);
55
67
  }));
56
68
  }
@@ -89,8 +101,8 @@ export class ScPriceHistoryComponent {
89
101
  }, []));
90
102
  }
91
103
  }
92
- ScPriceHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, deps: [{ token: i1.ScCatalogService }, { token: TUI_MONTHS }, { token: POLYMORPHEUS_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
93
- ScPriceHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceHistoryComponent, selector: "sc-price-history", inputs: { product: "product" }, ngImport: i0, template: "<div class=\"flex flex-col items-center\">\n <ng-container *ngIf=\"priceInfo$ | async as priceInfo; else isNotExist\">\n <div class=\"w-174 mb-1 text-end text-lg font-bold\">\u043E\u0442 {{ priceInfo.min.toLocaleString() }} \u20BD \u0434\u043E {{ priceInfo.max.toLocaleString() }} \u20BD</div>\n\n <ng-container *ngIf=\"history$ | async as history\">\n <div\n *ngIf=\"range$ | async as range\"\n class=\"relative h-56 w-full p-5 text-tui-primary\"\n >\n <tui-axes\n *ngIf=\"computeLabels$(range) | async as labels\"\n class=\"h-full\"\n [axisXLabels]=\"labels\"\n [horizontalLines]=\"4\"\n [verticalLines]=\"labels.length\"\n >\n <tui-line-days-chart\n class=\"chart\"\n [height]=\"priceInfo.max\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (priceInfo.min * 1) / 4\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n ></tui-line-days-chart>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">\u0426\u0435\u043D\u0430 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u043B\u0430\u0441\u044C</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} \u20BD</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiLineDaysChartComponent, selector: "tui-line-days-chart", inputs: ["value", "y", "height", "smoothingFactor", "hintContent", "xStringify", "yStringify", "dots"] }, { kind: "component", type: i3.TuiAxesComponent, selector: "tui-axes", inputs: ["axisX", "axisXLabels", "axisY", "axisYInset", "axisYLabels", "axisYName", "axisYSecondaryInset", "axisYSecondaryLabels", "axisYSecondaryName", "horizontalLines", "horizontalLinesHandler", "verticalLines", "verticalLinesHandler"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
104
+ ScPriceHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, deps: [{ token: i1.ScCatalogService }, { token: TUI_MONTHS }, { token: i1.ScUserMetrikaService }, { token: POLYMORPHEUS_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
105
+ ScPriceHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceHistoryComponent, selector: "sc-price-history", inputs: { product: "product" }, ngImport: i0, template: "<tui-loader [showLoader]=\"!!(loadingHistory$ | async)\"> </tui-loader>\n\n<div\n *ngIf=\"(loadingHistory$ | async) === false\"\n class=\"flex flex-col items-center\"\n>\n <ng-container *ngIf=\"priceInfo$ | async as priceInfo; else isNotExist\">\n <div class=\"w-174 mb-1 text-end text-lg font-bold\">\u043E\u0442 {{ priceInfo.min.toLocaleString() }} \u20BD \u0434\u043E {{ priceInfo.max.toLocaleString() }} \u20BD</div>\n\n <ng-container *ngIf=\"history$ | async as history\">\n <div\n *ngIf=\"range$ | async as range\"\n class=\"relative h-56 w-full p-5 text-tui-primary\"\n >\n <tui-axes\n *ngIf=\"computeLabels$(range) | async as labels\"\n class=\"h-full\"\n [axisXLabels]=\"labels\"\n [horizontalLines]=\"4\"\n [verticalLines]=\"labels.length\"\n >\n <tui-line-days-chart\n class=\"chart\"\n [height]=\"priceInfo.max\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (priceInfo.min * 1) / 4\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n ></tui-line-days-chart>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">\u0426\u0435\u043D\u0430 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u043B\u0430\u0441\u044C</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} \u20BD</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: i4.TuiLineDaysChartComponent, selector: "tui-line-days-chart", inputs: ["value", "y", "height", "smoothingFactor", "hintContent", "xStringify", "yStringify", "dots"] }, { kind: "component", type: i4.TuiAxesComponent, selector: "tui-axes", inputs: ["axisX", "axisXLabels", "axisY", "axisYInset", "axisYLabels", "axisYName", "axisYSecondaryInset", "axisYSecondaryLabels", "axisYSecondaryName", "horizontalLines", "horizontalLinesHandler", "verticalLines", "verticalLinesHandler"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
94
106
  __decorate([
95
107
  tuiPure
96
108
  ], ScPriceHistoryComponent.prototype, "computeLabels$", null);
@@ -99,11 +111,11 @@ __decorate([
99
111
  ], ScPriceHistoryComponent.prototype, "computeValue", null);
100
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, decorators: [{
101
113
  type: Component,
102
- args: [{ selector: 'sc-price-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center\">\n <ng-container *ngIf=\"priceInfo$ | async as priceInfo; else isNotExist\">\n <div class=\"w-174 mb-1 text-end text-lg font-bold\">\u043E\u0442 {{ priceInfo.min.toLocaleString() }} \u20BD \u0434\u043E {{ priceInfo.max.toLocaleString() }} \u20BD</div>\n\n <ng-container *ngIf=\"history$ | async as history\">\n <div\n *ngIf=\"range$ | async as range\"\n class=\"relative h-56 w-full p-5 text-tui-primary\"\n >\n <tui-axes\n *ngIf=\"computeLabels$(range) | async as labels\"\n class=\"h-full\"\n [axisXLabels]=\"labels\"\n [horizontalLines]=\"4\"\n [verticalLines]=\"labels.length\"\n >\n <tui-line-days-chart\n class=\"chart\"\n [height]=\"priceInfo.max\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (priceInfo.min * 1) / 4\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n ></tui-line-days-chart>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">\u0426\u0435\u043D\u0430 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u043B\u0430\u0441\u044C</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} \u20BD</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n" }]
103
- }], ctorParameters: function () { return [{ type: i1.ScCatalogService }, { type: i4.Observable, decorators: [{
114
+ args: [{ selector: 'sc-price-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader [showLoader]=\"!!(loadingHistory$ | async)\"> </tui-loader>\n\n<div\n *ngIf=\"(loadingHistory$ | async) === false\"\n class=\"flex flex-col items-center\"\n>\n <ng-container *ngIf=\"priceInfo$ | async as priceInfo; else isNotExist\">\n <div class=\"w-174 mb-1 text-end text-lg font-bold\">\u043E\u0442 {{ priceInfo.min.toLocaleString() }} \u20BD \u0434\u043E {{ priceInfo.max.toLocaleString() }} \u20BD</div>\n\n <ng-container *ngIf=\"history$ | async as history\">\n <div\n *ngIf=\"range$ | async as range\"\n class=\"relative h-56 w-full p-5 text-tui-primary\"\n >\n <tui-axes\n *ngIf=\"computeLabels$(range) | async as labels\"\n class=\"h-full\"\n [axisXLabels]=\"labels\"\n [horizontalLines]=\"4\"\n [verticalLines]=\"labels.length\"\n >\n <tui-line-days-chart\n class=\"chart\"\n [height]=\"priceInfo.max\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (priceInfo.min * 1) / 4\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n ></tui-line-days-chart>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">\u0426\u0435\u043D\u0430 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u043B\u0430\u0441\u044C</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} \u20BD</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n" }]
115
+ }], ctorParameters: function () { return [{ type: i1.ScCatalogService }, { type: i5.Observable, decorators: [{
104
116
  type: Inject,
105
117
  args: [TUI_MONTHS]
106
- }] }, { type: undefined, decorators: [{
118
+ }] }, { type: i1.ScUserMetrikaService }, { type: undefined, decorators: [{
107
119
  type: Optional
108
120
  }, {
109
121
  type: Inject,
@@ -111,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
111
123
  }] }]; }, propDecorators: { product: [{
112
124
  type: Input
113
125
  }], computeLabels$: [], computeValue: [] } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJpY2UtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9wcmljZS1oaXN0b3J5L3NjLXByaWNlLWhpc3RvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2UtaGlzdG9yeS9zYy1wcmljZS1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1RUFBdUU7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBRTVEOztHQUVHO0FBTUgsTUFBTSxPQUFPLHVCQUF1QjtJQTJDaEM7Ozs7OztPQU1HO0lBQ0gsWUFDcUIsY0FBZ0MsRUFDWixPQUFzQyxFQUcxRCxPQUF3RDtRQUp4RCxtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUcxRCxZQUFPLEdBQVAsT0FBTyxDQUFpRDtRQS9CN0U7O1dBRUc7UUFDYSxnQkFBVyxHQUF5QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDakYsR0FBRyxDQUNDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDUCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFB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QUFDO3dCQUMzSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JCO2FBQ0osQ0FBQztRQUNOLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDYixDQUFDO0lBQ04sQ0FBQzs7b0hBaklRLHVCQUF1QixrREFvRHBCLFVBQVUsYUFFVixvQkFBb0I7d0dBdER2Qix1QkFBdUIsd0ZDaEJwQyxrMkRBeUNBO0FEMEVJO0lBREMsT0FBTzs2REFHUDtBQVdEO0lBREMsT0FBTzsyREFrQlA7MkZBaklRLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBRVgsdUJBQXVCLENBQUMsTUFBTTs7MEJBc0QxQyxNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixRQUFROzswQkFDUixNQUFNOzJCQUFDLG9CQUFvQjs0Q0E3Q2hCLE9BQU87c0JBQXRCLEtBQUs7Z0JBMEZDLGNBQWMsTUFhZCxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyxsb2Rhc2gvcHJlZmVyLWxvZGFzaC1tZXRob2QgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjQ2F0YWxvZ1NlcnZpY2UsIFNjUHJvZHVjdCB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpRGF5LCBUdWlEYXlSYW5nZSwgVHVpTW9udGgsIHR1aVB1cmUsIFR1aVN0cmluZ0hhbmRsZXIgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFRVSV9NT05USFMsIFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQk9GA0LDRhNC40Log0LjRgdGC0L7RgNC40Lgg0YbQtdC9INGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLXByaWNlLWhpc3RvcnknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1wcmljZS1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NQcmljZUhpc3RvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQstGA0LXQvNC10L3QvdC+0LPQviDQv9GA0L7QvNC10LbRg9GC0LrQsCDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICovXG4gICAgcHVibGljIHJhbmdlJDogT2JzZXJ2YWJsZTxUdWlEYXlSYW5nZT47XG5cbiAgICAvKipcbiAgICAgKiDQotC+0LLQsNGAINC40LvQuCDRg9GB0LvRg9Cz0LAsINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQvtCx0YDQsNC30LjRgtGMINC40YHRgtC+0YDQuNGOINGG0LXQvS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJvZHVjdDogU2NQcm9kdWN0O1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40YHRgtC+0YDQuNC4INGG0LXQvS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGlzdG9yeSQ/OiBPYnNlcnZhYmxlPFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4+O1xuXG4gICAgLyoqXG4gICAgICog0JzQsNC60YHQuNC80LDQu9GM0L3QsNGPINGG0LXQvdCwINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJpY2VJbmZvJD86IE9ic2VydmFibGU8e1xuICAgICAgICBtaW46IG51bWJlcjtcbiAgICAgICAgbWF4OiBudW1iZXI7XG4gICAgfT47XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YTRg9C90LrRhtC40Y8g0LTQu9GPINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8g0LfQvdCw0YfQtdC90LjRjyBudW1iZXIg0LIg0YHRgtGA0L7QutGDINCyINC/0L7QtNGB0LrQsNC30LrQtSDQv9C+INC+0YHQuCBYLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB4U3RyaW5naWZ5JDogT2JzZXJ2YWJsZTxUdWlTdHJpbmdIYW5kbGVyPFR1aURheT4+ID0gdGhpcy5tb250aHMkLnBpcGUoXG4gICAgICAgIG1hcChcbiAgICAgICAgICAgIChtb250aHMpID0+XG4gICAgICAgICAgICAgICAgKHsgbW9udGgsIGRheSB9KSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgYCR7bW9udGhzW21vbnRoXX0sICR7ZGF5fWBcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQpNGD0L3QutGG0LjRjyDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjyDQt9C90LDRh9C10L3QuNGPIG51bWJlciDQsiDRgdGC0YDQvtC60YMg0LIg0L/QvtC00YHQutCw0LfQutC1INC/0L4g0L7RgdC4IFkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUg0JfQvdCw0YfQtdC90LjQtSDQvtGB0LggWS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgeVN0cmluZ2lmeTogVHVpU3RyaW5nSGFuZGxlcjxudW1iZXI+ID0gKHZhbHVlKSA9PiBgJHt2YWx1ZS50b0xvY2FsZVN0cmluZygncnUtUlUnKX0g4oK9YDtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NQcmljZUhpc3RvcnlDb21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGFsb2dTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60LDRgtCw0LvQvtCz0L7QvC5cbiAgICAgKiBAcGFyYW0gbW9udGhzJCDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0LzQtdGB0Y/RhtC10LIuXG4gICAgICogQHBhcmFtIGNvbnRleHQg0JrQvtC90YLQtdC60YHRgiDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwLCDQsiDQutC+0YLQvtGA0L7QvCDQvtGC0LrRgNGL0YIg0LrQvtC80L/QvtC90LXQvdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nU2VydmljZTogU2NDYXRhbG9nU2VydmljZSxcbiAgICAgICAgQEluamVjdChUVUlfTU9OVEhTKSBwcml2YXRlIHJlYWRvbmx5IG1vbnRocyQ6IE9ic2VydmFibGU8cmVhZG9ubHkgc3RyaW5nW10+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KFBPTFlNT1JQSEVVU19DT05URVhUKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ/OiBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHsgcHJvZHVjdDogU2NQcm9kdWN0IH0+XG4gICAgKSB7XG4gICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnByb2R1Y3QgPSBjb250ZXh0LmRhdGEucHJvZHVjdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5JCA9IHRoaXMuY2F0YWxvZ1NlcnZpY2UuZ2V0UHJpY2VIaXN0b3J5JCh0aGlzLnByb2R1Y3QpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGhpc3RvcnkpID0+XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaGlzdG9yeSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoaXRlbSk6IFtUdWlEYXksIG51bWJlcl0gPT4gW1R1aURheS5ub3JtYWxpemVQYXJzZShpdGVtLCAnRE1ZJyksIGhpc3RvcnlbU3RyaW5nKGl0ZW0pXS5jb3N0XSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IChhWzBdID4gYlswXSA/IDEgOiAtMSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICAgICAgICAgIGZpbHRlcigoaGlzdG9yeSkgPT4gaGlzdG9yeS5sZW5ndGggPiAxKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucHJpY2VJbmZvJCA9IHRoaXMuaGlzdG9yeSQucGlwZShcbiAgICAgICAgICAgIG1hcCgoaGlzdG9yeSkgPT4gaGlzdG9yeS5tYXAoKGl0ZW0pID0+IGl0ZW1bMV0pKSxcbiAgICAgICAgICAgIG1hcCgodmFsdWVzKSA9PiAoe1xuICAgICAgICAgICAgICAgIG1pbjogTWF0aC5taW4oLi4udmFsdWVzKSxcbiAgICAgICAgICAgICAgICBtYXg6IE1hdGgubWF4KC4uLnZhbHVlcyksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnJhbmdlJCA9IHRoaXMuaGlzdG9yeSQucGlwZShcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4pID0+ICh7IGZyb206IHZhbHVlLmF0KDApPy5bMF0sIHRvOiB2YWx1ZS5hdCgtMSk/LlswXSB9KSksXG4gICAgICAgICAgICBmaWx0ZXIoKHJhbmdlKTogcmFuZ2UgaXMgeyBmcm9tOiBUdWlEYXk7IHRvOiBUdWlEYXkgfSA9PiAhIXJhbmdlLmZyb20gJiYgISFyYW5nZS50byksXG4gICAgICAgICAgICBtYXAoKHJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUdWlEYXlSYW5nZShyYW5nZS5mcm9tLCByYW5nZS50byk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvRh9C40YHQu9GP0LXRgiDQv9C+0LTQv9C40YHQuCDQtNCw0YLRiyDQuiDQvtGB0LggWC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbTAge0BsaW5rIFR1aURheVJhbmdlfSDQktGA0LXQvNC10L3QvdC+0Lkg0L/RgNC+0LzQtdC20YPRgtC+0Log0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqIEBwYXJhbSBwYXJhbTAuZnJvbSB7QGxpbmsgVHVpRGF5fSDQlNCw0YLQsCDQvdCw0YfQsNC70LAg0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqIEBwYXJhbSBwYXJhbTAudG8ge0BsaW5rIFR1aURheX0g0JTQsNGC0LAg0LrQvtC90YbQsCDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICovXG4gICAgQHR1aVB1cmVcbiAgICBwdWJsaWMgY29tcHV0ZUxhYmVscyQoeyBmcm9tLCB0byB9OiBUdWlEYXlSYW5nZSk6IE9ic2VydmFibGU8cmVhZG9ubHkgc3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGhzJC5waXBlKG1hcCgobW9udGhzKSA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBUdWlNb250aC5sZW5ndGhCZXR3ZWVuKGZyb20sIHRvKSArIDEgfSwgKF8sIGluZGV4KSA9PiBtb250aHNbZnJvbS5hcHBlbmQoeyBtb250aDogaW5kZXggfSkubW9udGhdKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvRh9C40YHQu9GP0LXRgiDQtNCw0L3QvdGL0LUg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0L3QsCDQs9GA0LDRhNC40LrQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbTAge0BsaW5rIFR1aURheVJhbmdlfSDQktGA0LXQvNC10L3QvdC+0Lkg0L/RgNC+0LzQtdC20YPRgtC+0Log0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqIEBwYXJhbSBwYXJhbTAuZnJvbSB7QGxpbmsgVHVpRGF5fSDQlNCw0YLQsCDQvdCw0YfQsNC70LAg0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqIEBwYXJhbSBwYXJhbTAudG8ge0BsaW5rIFR1aURheX0g0JTQsNGC0LAg0LrQvtC90YbQsCDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICogQHBhcmFtIGhpc3Rvcnkg0JjRgdGC0L7RgNC40Y8g0YbQtdC9LlxuICAgICAqL1xuICAgIEB0dWlQdXJlXG4gICAgcHVibGljIGNvbXB1dGVWYWx1ZSh7IGZyb20sIHRvIH06IFR1aURheVJhbmdlLCBoaXN0b3J5OiBSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+KTogUmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBUdWlEYXkubGVuZ3RoQmV0d2Vlbihmcm9tLCB0bykgKyAxIH0pXG4gICAgICAgICAgICAgICAgLmZpbGwoMClcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1yZWR1Y2VcbiAgICAgICAgICAgICAgICAucmVkdWNlPFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4+KChhcnJheSwgXywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGZyb20uYXBwZW5kKHsgZGF5OiBpbmRleCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpc3RvcnkuZmluZCgodmFsdWVIaXN0b3J5LCBpbmRleEhpc3RvcnksIGFycmF5SGlzdG9yeSkgPT4gZGF0YS5kYXlTYW1lKHZhbHVlSGlzdG9yeVswXSkgfHwgZGF0YS5kYXlCZWZvcmUoYXJyYXlIaXN0b3J5W2luZGV4SGlzdG9yeSArIDFdWzBdKSkgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeVswXSlbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmljZUluZm8kIHwgYXN5bmMgYXMgcHJpY2VJbmZvOyBlbHNlIGlzTm90RXhpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTc0IG1iLTEgdGV4dC1lbmQgdGV4dC1sZyBmb250LWJvbGRcIj7QvtGCIHt7IHByaWNlSW5mby5taW4udG9Mb2NhbGVTdHJpbmcoKSB9fSDigr0g0LTQviB7eyBwcmljZUluZm8ubWF4LnRvTG9jYWxlU3RyaW5nKCkgfX0g4oK9PC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhpc3RvcnkkIHwgYXN5bmMgYXMgaGlzdG9yeVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicmFuZ2UkIHwgYXN5bmMgYXMgcmFuZ2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmVsYXRpdmUgaC01NiB3LWZ1bGwgcC01IHRleHQtdHVpLXByaW1hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0dWktYXhlc1xuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXB1dGVMYWJlbHMkKHJhbmdlKSB8IGFzeW5jIGFzIGxhYmVsc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F4aXNYTGFiZWxzXT1cImxhYmVsc1wiXG4gICAgICAgICAgICAgICAgICAgIFtob3Jpem9udGFsTGluZXNdPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgIFt2ZXJ0aWNhbExpbmVzXT1cImxhYmVscy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1saW5lLWRheXMtY2hhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hhcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJwcmljZUluZm8ubWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzbW9vdGhpbmdGYWN0b3JdPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ldPVwicHJpY2VJbmZvLm1pbiAtIChwcmljZUluZm8ubWluICogMSkgLyA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb21wdXRlVmFsdWUocmFuZ2UsIGhpc3RvcnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt4U3RyaW5naWZ5XT1cInhTdHJpbmdpZnkkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3lTdHJpbmdpZnldPVwieVN0cmluZ2lmeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGludENvbnRlbnRdPVwiaGludFwiXG4gICAgICAgICAgICAgICAgICAgID48L3R1aS1saW5lLWRheXMtY2hhcnQ+XG4gICAgICAgICAgICAgICAgPC90dWktYXhlcz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2lzTm90RXhpc3Q+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPtCm0LXQvdCwINC90LAg0YLQvtCy0LDRgCDQvdC1INC40LfQvNC10L3Rj9C70LDRgdGMPC9wPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICNoaW50XG4gICAgICAgIGxldC1kYXRhXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgZGF0YVsxXS50b0xvY2FsZVN0cmluZygpIH19IOKCvTwvZGl2PlxuICAgICAgICA8ZGl2Pnt7IGRhdGFbMF0gfX08L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJpY2UtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9wcmljZS1oaXN0b3J5L3NjLXByaWNlLWhpc3RvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2UtaGlzdG9yeS9zYy1wcmljZS1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx1RUFBdUU7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQStCLHNCQUFzQixFQUF3QixNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQUU1RTs7R0FFRztBQU1ILE1BQU0sT0FBTyx1QkFBdUI7SUFnRGhDOzs7Ozs7O09BT0c7SUFDSCxZQUNxQixjQUFnQyxFQUNaLE9BQXNDLEVBQzFELGtCQUF3QyxFQUd4QyxPQUF3RDtRQUx4RCxtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUMxRCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO1FBR3hDLFlBQU8sR0FBUCxP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QUFNOzJCQUFDLG9CQUFvQjs0Q0FwRGhCLE9BQU87c0JBQXRCLEtBQUs7Z0JBK0dDLGNBQWMsTUFhZCxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyxsb2Rhc2gvcHJlZmVyLWxvZGFzaC1tZXRob2QgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjQ2F0YWxvZ1NlcnZpY2UsIFNjUHJvZHVjdCwgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aURheSwgVHVpRGF5UmFuZ2UsIHR1aUlzRmFsc3ksIHR1aUlzUHJlc2VudCwgVHVpTW9udGgsIHR1aVB1cmUsIFR1aVN0cmluZ0hhbmRsZXIgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFRVSV9NT05USFMsIFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JPRgNCw0YTQuNC6INC40YHRgtC+0YDQuNC4INGG0LXQvSDRgtC+0LLQsNGA0LAg0LjQu9C4INGD0YHQu9GD0LPQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1wcmljZS1oaXN0b3J5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtcHJpY2UtaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJpY2VIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LLRgNC10LzQtdC90L3QvtCz0L4g0L/RgNC+0LzQtdC20YPRgtC60LAg0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqL1xuICAgIHB1YmxpYyByYW5nZSQ6IE9ic2VydmFibGU8VHVpRGF5UmFuZ2U+O1xuXG4gICAgLyoqXG4gICAgICog0KLQvtCy0LDRgCDQuNC70Lgg0YPRgdC70YPQs9CwLCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQuNGB0YLQvtGA0LjRjiDRhtC10L0uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHByb2R1Y3Q6IFNjUHJvZHVjdDtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICovXG4gICAgcHVibGljIGhpc3RvcnkkPzogT2JzZXJ2YWJsZTxSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+IHwgbnVsbD47XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhSDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICovXG4gICAgcHVibGljIGxvYWRpbmdIaXN0b3J5JD86IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiDQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0YbQtdC90LAg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmljZUluZm8kPzogT2JzZXJ2YWJsZTx7XG4gICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICBtYXg6IG51bWJlcjtcbiAgICB9PjtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDRhNGD0L3QutGG0LjRjyDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjyDQt9C90LDRh9C10L3QuNGPIG51bWJlciDQsiDRgdGC0YDQvtC60YMg0LIg0L/QvtC00YHQutCw0LfQutC1INC/0L4g0L7RgdC4IFguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHhTdHJpbmdpZnkkOiBPYnNlcnZhYmxlPFR1aVN0cmluZ0hhbmRsZXI8VHVpRGF5Pj4gPSB0aGlzLm1vbnRocyQucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgICAgKG1vbnRocykgPT5cbiAgICAgICAgICAgICAgICAoeyBtb250aCwgZGF5IH0pID0+XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgICAgICBgJHttb250aHNbbW9udGhdfSwgJHtkYXl9YFxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCk0YPQvdC60YbQuNGPINC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINC30L3QsNGH0LXQvdC40Y8gbnVtYmVyINCyINGB0YLRgNC+0LrRgyDQsiDQv9C+0LTRgdC60LDQt9C60LUg0L/QviDQvtGB0LggWS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSDQl9C90LDRh9C10L3QuNC1INC+0YHQuCBZLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB5U3RyaW5naWZ5OiBUdWlTdHJpbmdIYW5kbGVyPG51bWJlcj4gPSAodmFsdWUpID0+IGAke3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCdydS1SVScpfSDigr1gO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1ByaWNlSGlzdG9yeUNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0YWxvZ1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LrQsNGC0LDQu9C+0LPQvtC8LlxuICAgICAqIEBwYXJhbSBtb250aHMkINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDQvNC10YHRj9GG0LXQsi5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqIEBwYXJhbSBjb250ZXh0INCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ1NlcnZpY2U6IFNjQ2F0YWxvZ1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoVFVJX01PTlRIUykgcHJpdmF0ZSByZWFkb25seSBtb250aHMkOiBPYnNlcnZhYmxlPHJlYWRvbmx5IHN0cmluZ1tdPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KFBPTFlNT1JQSEVVU19DT05URVhUKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ/OiBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHsgcHJvZHVjdDogU2NQcm9kdWN0IH0+XG4gICAgKSB7XG4gICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnByb2R1Y3QgPSBjb250ZXh0LmRhdGEucHJvZHVjdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5JCA9IHRoaXMuY2F0YWxvZ1NlcnZpY2UuZ2V0UHJpY2VIaXN0b3J5JCh0aGlzLnByb2R1Y3QpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGhpc3RvcnkpID0+XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaGlzdG9yeSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoaXRlbSk6IFtUdWlEYXksIG51bWJlcl0gPT4gW1R1aURheS5ub3JtYWxpemVQYXJzZShpdGVtLCAnRE1ZJyksIGhpc3RvcnlbU3RyaW5nKGl0ZW0pXS5jb3N0XSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IChhWzBdID4gYlswXSA/IDEgOiAtMSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubG9hZGluZ0hpc3RvcnkkID0gdGhpcy5oaXN0b3J5JC5waXBlKG1hcCh0dWlJc0ZhbHN5KSk7XG5cbiAgICAgICAgdGhpcy5wcmljZUluZm8kID0gdGhpcy5oaXN0b3J5JC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnByb2R1Y3RQcmljZUhpc3RvcnlTaG93LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKChoaXN0b3J5KSA9PiBoaXN0b3J5Lmxlbmd0aCA+IDEpLFxuICAgICAgICAgICAgbWFwKChoaXN0b3J5KSA9PiBoaXN0b3J5Lm1hcCgoaXRlbSkgPT4gaXRlbVsxXSkpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZXMpID0+ICh7XG4gICAgICAgICAgICAgICAgbWluOiBNYXRoLm1pbiguLi52YWx1ZXMpLFxuICAgICAgICAgICAgICAgIG1heDogTWF0aC5tYXgoLi4udmFsdWVzKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmFuZ2UkID0gdGhpcy5oaXN0b3J5JC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICBmaWx0ZXIoKGhpc3RvcnkpID0+IGhpc3RvcnkubGVuZ3RoID4gMSksXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+KSA9PiAoeyBmcm9tOiB2YWx1ZS5hdCgwKT8uWzBdLCB0bzogdmFsdWUuYXQoLTEpPy5bMF0gfSkpLFxuICAgICAgICAgICAgZmlsdGVyKChyYW5nZSk6IHJhbmdlIGlzIHsgZnJvbTogVHVpRGF5OyB0bzogVHVpRGF5IH0gPT4gISFyYW5nZS5mcm9tICYmICEhcmFuZ2UudG8pLFxuICAgICAgICAgICAgbWFwKChyYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHVpRGF5UmFuZ2UocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YfQuNGB0LvRj9C10YIg0L/QvtC00L/QuNGB0Lgg0LTQsNGC0Ysg0Log0L7RgdC4IFguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW0wIHtAbGluayBUdWlEYXlSYW5nZX0g0JLRgNC10LzQtdC90L3QvtC5INC/0YDQvtC80LXQttGD0YLQvtC6INC40YHRgtC+0YDQuNC4INGG0LXQvS5cbiAgICAgKiBAcGFyYW0gcGFyYW0wLmZyb20ge0BsaW5rIFR1aURheX0g0JTQsNGC0LAg0L3QsNGH0LDQu9CwINC40YHRgtC+0YDQuNC4INGG0LXQvS5cbiAgICAgKiBAcGFyYW0gcGFyYW0wLnRvIHtAbGluayBUdWlEYXl9INCU0LDRgtCwINC60L7QvdGG0LAg0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqL1xuICAgIEB0dWlQdXJlXG4gICAgcHVibGljIGNvbXB1dGVMYWJlbHMkKHsgZnJvbSwgdG8gfTogVHVpRGF5UmFuZ2UpOiBPYnNlcnZhYmxlPHJlYWRvbmx5IHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRocyQucGlwZShtYXAoKG1vbnRocykgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogVHVpTW9udGgubGVuZ3RoQmV0d2Vlbihmcm9tLCB0bykgKyAxIH0sIChfLCBpbmRleCkgPT4gbW9udGhzW2Zyb20uYXBwZW5kKHsgbW9udGg6IGluZGV4IH0pLm1vbnRoXSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YfQuNGB0LvRj9C10YIg0LTQsNC90L3Ri9C1INC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC90LAg0LPRgNCw0YTQuNC60LUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW0wIHtAbGluayBUdWlEYXlSYW5nZX0g0JLRgNC10LzQtdC90L3QvtC5INC/0YDQvtC80LXQttGD0YLQvtC6INC40YHRgtC+0YDQuNC4INGG0LXQvS5cbiAgICAgKiBAcGFyYW0gcGFyYW0wLmZyb20ge0BsaW5rIFR1aURheX0g0JTQsNGC0LAg0L3QsNGH0LDQu9CwINC40YHRgtC+0YDQuNC4INGG0LXQvS5cbiAgICAgKiBAcGFyYW0gcGFyYW0wLnRvIHtAbGluayBUdWlEYXl9INCU0LDRgtCwINC60L7QvdGG0LAg0LjRgdGC0L7RgNC40Lgg0YbQtdC9LlxuICAgICAqIEBwYXJhbSBoaXN0b3J5INCY0YHRgtC+0YDQuNGPINGG0LXQvS5cbiAgICAgKi9cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBjb21wdXRlVmFsdWUoeyBmcm9tLCB0byB9OiBUdWlEYXlSYW5nZSwgaGlzdG9yeTogUmVhZG9ubHlBcnJheTxbVHVpRGF5LCBudW1iZXJdPik6IFJlYWRvbmx5QXJyYXk8W1R1aURheSwgbnVtYmVyXT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogVHVpRGF5Lmxlbmd0aEJldHdlZW4oZnJvbSwgdG8pICsgMSB9KVxuICAgICAgICAgICAgICAgIC5maWxsKDApXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tYXJyYXktcmVkdWNlXG4gICAgICAgICAgICAgICAgLnJlZHVjZTxSZWFkb25seUFycmF5PFtUdWlEYXksIG51bWJlcl0+PigoYXJyYXksIF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBmcm9tLmFwcGVuZCh7IGRheTogaW5kZXggfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5hcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaXN0b3J5LmZpbmQoKHZhbHVlSGlzdG9yeSwgaW5kZXhIaXN0b3J5LCBhcnJheUhpc3RvcnkpID0+IGRhdGEuZGF5U2FtZSh2YWx1ZUhpc3RvcnlbMF0pIHx8IGRhdGEuZGF5QmVmb3JlKGFycmF5SGlzdG9yeVtpbmRleEhpc3RvcnkgKyAxXVswXSkpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcnlbMF0pWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9LCBbXSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8dHVpLWxvYWRlciBbc2hvd0xvYWRlcl09XCIhIShsb2FkaW5nSGlzdG9yeSQgfCBhc3luYylcIj4gPC90dWktbG9hZGVyPlxuXG48ZGl2XG4gICAgKm5nSWY9XCIobG9hZGluZ0hpc3RvcnkkIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByaWNlSW5mbyQgfCBhc3luYyBhcyBwcmljZUluZm87IGVsc2UgaXNOb3RFeGlzdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xNzQgbWItMSB0ZXh0LWVuZCB0ZXh0LWxnIGZvbnQtYm9sZFwiPtC+0YIge3sgcHJpY2VJbmZvLm1pbi50b0xvY2FsZVN0cmluZygpIH19IOKCvSDQtNC+IHt7IHByaWNlSW5mby5tYXgudG9Mb2NhbGVTdHJpbmcoKSB9fSDigr08L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGlzdG9yeSQgfCBhc3luYyBhcyBoaXN0b3J5XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyYW5nZSQgfCBhc3luYyBhcyByYW5nZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBoLTU2IHctZnVsbCBwLTUgdGV4dC10dWktcHJpbWFyeVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHR1aS1heGVzXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcHV0ZUxhYmVscyQocmFuZ2UpIHwgYXN5bmMgYXMgbGFiZWxzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXhpc1hMYWJlbHNdPVwibGFiZWxzXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvcml6b250YWxMaW5lc109XCI0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZlcnRpY2FsTGluZXNdPVwibGFiZWxzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWxpbmUtZGF5cy1jaGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cInByaWNlSW5mby5tYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Ntb290aGluZ0ZhY3Rvcl09XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbeV09XCJwcmljZUluZm8ubWluIC0gKHByaWNlSW5mby5taW4gKiAxKSAvIDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbXB1dGVWYWx1ZShyYW5nZSwgaGlzdG9yeSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3hTdHJpbmdpZnldPVwieFN0cmluZ2lmeSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbeVN0cmluZ2lmeV09XCJ5U3RyaW5naWZ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoaW50Q29udGVudF09XCJoaW50XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvdHVpLWxpbmUtZGF5cy1jaGFydD5cbiAgICAgICAgICAgICAgICA8L3R1aS1heGVzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjaXNOb3RFeGlzdD5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkXCI+0KbQtdC90LAg0L3QsCDRgtC+0LLQsNGAINC90LUg0LjQt9C80LXQvdGP0LvQsNGB0Yw8L3A+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2hpbnRcbiAgICAgICAgbGV0LWRhdGFcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBkYXRhWzFdLnRvTG9jYWxlU3RyaW5nKCkgfX0g4oK9PC9kaXY+XG4gICAgICAgIDxkaXY+e3sgZGF0YVswXSB9fTwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
@@ -1,9 +1,9 @@
1
- import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Inject, inject } from '@angular/core';
2
2
  import { FormControl, FormGroup, Validators } from '@angular/forms';
3
3
  import { ScISuggestionType } from '@snabcentr/client-core';
4
- import { tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';
4
+ import { TUI_IS_MOBILE, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';
5
5
  import { POLYMORPHEUS_CONTEXT } from '@tinkoff/ng-polymorpheus';
6
- import { Subject, catchError, filter, map, of, share, startWith, switchMap, tap } from 'rxjs';
6
+ import { catchError, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@snabcentr/client-core";
9
9
  import * as i2 from "@taiga-ui/core";
@@ -28,6 +28,10 @@ export class ScAddDeliveryAddressDialogComponent {
28
28
  this.deliveryAddressService = deliveryAddressService;
29
29
  this.context = context;
30
30
  this.convertersService = convertersService;
31
+ /**
32
+ * Признак того, отображается этот компонент на мобильном устройстве или нет.
33
+ */
34
+ this.isMobile = inject(TUI_IS_MOBILE);
31
35
  /**
32
36
  * Перечисление типов подсказок.
33
37
  */
@@ -39,16 +43,20 @@ export class ScAddDeliveryAddressDialogComponent {
39
43
  /**
40
44
  * {@link Observable} запроса данных добавления адрес доставки.
41
45
  */
42
- this.request$ = this.onSubmit$.pipe(tap(() => tuiMarkControlAsTouchedAndValidate(this.form)), filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive(value)).pipe(catchError((error) => {
46
+ this.request$ = this.onSubmit$.pipe(tap(() => {
47
+ tuiMarkControlAsTouchedAndValidate(this.form);
48
+ }), filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive(value)).pipe(catchError((error) => {
43
49
  const errorResponse = error.error;
44
50
  for (const key in errorResponse.errors) {
45
- this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[`${key}`] });
51
+ this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[key] });
46
52
  }
47
53
  if (!errorResponse.errors && errorResponse.message) {
48
54
  this.form.setErrors({ serverResponse: [errorResponse.message] });
49
55
  }
50
- return of(undefined);
51
- }), tap(() => this.context.completeWith()), startWith(null))), share());
56
+ return of();
57
+ }), tap(() => {
58
+ this.context.completeWith();
59
+ }), startWith(null))), share());
52
60
  /**
53
61
  * {@link Observable} изменения состояния загрузки данных.
54
62
  */
@@ -62,18 +70,18 @@ export class ScAddDeliveryAddressDialogComponent {
62
70
  name: new FormControl(null, Validators.required),
63
71
  phone: new FormControl(null, [Validators.required, Validators.minLength(12)]),
64
72
  email: new FormControl(null, Validators.email),
65
- position: new FormControl(null)
66
- })
73
+ position: new FormControl(null),
74
+ }),
67
75
  });
68
76
  }
69
77
  }
70
78
  ScAddDeliveryAddressDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAddDeliveryAddressDialogComponent, deps: [{ token: i1.ScDeliveryAddressService }, { token: POLYMORPHEUS_CONTEXT }, { token: i1.ScConvertersService }], target: i0.ɵɵFactoryTarget.Component });
71
- ScAddDeliveryAddressDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScAddDeliveryAddressDialogComponent, selector: "sc-add-delivery-address-dialog", ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit$.next()\" class=\"flex flex-col gap-3\">\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\">\n <tui-input formControlName=\"address\">\n \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.address\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"address\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <div formGroupName=\"contact\" class=\"flex flex-col gap-2 grow\">\n <p class=\"font-bold w-full\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.fio\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"name\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n <input tuiTextfield type=\"email\" />\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.email\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"email\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C </tui-input>\n <tui-error formControlName=\"position\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n </div>\n <button tuiButton matRipple [disabled]=\"form.invalid\" [showLoader]=\"!!(loading$ | async)\" type=\"submit\" class=\"self-center\">\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C</button>\n</form>\n", dependencies: [{ kind: "component", type: i2.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i2.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i4.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["countryCode", "phoneMaskAfterCountryCode", "allowText", "search"], outputs: ["searchChange"] }, { kind: "directive", type: i4.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "component", type: i5.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
79
+ ScAddDeliveryAddressDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScAddDeliveryAddressDialogComponent, selector: "sc-add-delivery-address-dialog", ngImport: i0, template: "<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\">\n <tui-input formControlName=\"address\">\n \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"address\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n <input\n tuiTextfield\n type=\"email\"\n />\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <div class=\"flex justify-center gap-8\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n tuiMode=\"onLight\"\n [icon]=\"isMobile ? 'tuiIconX' : 'tuiIconXLarge'\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n [icon]=\"isMobile ? 'tuiIconSave' : 'tuiIconSaveLarge'\"\n [disabled]=\"form.invalid\"\n [showLoader]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: i2.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "directive", type: i2.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i2.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i4.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i4.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["countryCode", "phoneMaskAfterCountryCode", "allowText", "search"], outputs: ["searchChange"] }, { kind: "directive", type: i4.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "component", type: i5.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
72
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAddDeliveryAddressDialogComponent, decorators: [{
73
81
  type: Component,
74
- args: [{ selector: 'sc-add-delivery-address-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit$.next()\" class=\"flex flex-col gap-3\">\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\">\n <tui-input formControlName=\"address\">\n \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.address\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"address\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <div formGroupName=\"contact\" class=\"flex flex-col gap-2 grow\">\n <p class=\"font-bold w-full\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.fio\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"name\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n <input tuiTextfield type=\"email\" />\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.email\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"email\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C </tui-input>\n <tui-error formControlName=\"position\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n </div>\n <button tuiButton matRipple [disabled]=\"form.invalid\" [showLoader]=\"!!(loading$ | async)\" type=\"submit\" class=\"self-center\">\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C</button>\n</form>\n" }]
82
+ args: [{ selector: 'sc-add-delivery-address-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\">\n <tui-input formControlName=\"address\">\n \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"address\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel=\"\u0424.\u0418.\u041E.\">\n <tui-input formControlName=\"name\">\n \u0424.\u0418.\u041E.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\">\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"email\">\n <input\n tuiTextfield\n type=\"email\"\n />\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\">\n <tui-input formControlName=\"position\"> \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <div class=\"flex justify-center gap-8\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n tuiMode=\"onLight\"\n [icon]=\"isMobile ? 'tuiIconX' : 'tuiIconXLarge'\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n [icon]=\"isMobile ? 'tuiIconSave' : 'tuiIconSaveLarge'\"\n [disabled]=\"form.invalid\"\n [showLoader]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\n </button>\n </div>\n</form>\n" }]
75
83
  }], ctorParameters: function () { return [{ type: i1.ScDeliveryAddressService }, { type: undefined, decorators: [{
76
84
  type: Inject,
77
85
  args: [POLYMORPHEUS_CONTEXT]
78
86
  }] }, { type: i1.ScConvertersService }]; } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQWlGLGlCQUFpQixFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBQzlKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRSxPQUFPLEVBQWMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBRTFHOzs7O0dBSUc7QUFNSCxNQUFNLE9BQU8sbUNBQW1DO0lBMEQ1Qzs7Ozs7O09BTUc7SUFDSCxZQUNxQixzQkFBZ0QsRUFDbEIsT0FBcUMsRUFDbkUsaUJBQXNDO1FBRnRDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMEI7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7UUFDbkUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFxQjtRQW5FM0Q7O1dBRUc7UUFDYSxtQkFBYyxHQUE2QixpQkFBaUIsQ0FBQztRQUU3RTs7V0FFRztRQUNhLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUvRDs7V0FFRztRQUNjLGFBQVEsR0FBc0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQzlGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDeEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQXVDLENBQUMsRUFDNUQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDaEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBaUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3RJLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBeUIsQ0FBQztZQUV0RCxLQUFLLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckY7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDcEU7WUFFRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUN0QyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQ2xCLENBQ0osRUFDRCxLQUFLLEVBQUUsQ0FDVixDQUFDO1FBRUY7O1dBRUc7UUFDYSxhQUFRLEdBQXdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakc7O1dBRUc7UUFDYSxTQUFJLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDakMsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNsRSxPQUFPLEVBQUUsSUFBSSxTQUFTLENBQUM7Z0JBQ25CLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQy9ELEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVGLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQzdELFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxDQUFDO2FBQ2pELENBQUM7U0FDTCxDQUFDLENBQUM7SUFhQSxDQUFDOztnSUFyRUssbUNBQW1DLDBEQW1FaEMsb0JBQW9CO29IQW5FdkIsbUNBQW1DLHNFQ3BCaEQsc29GQW9DQTsyRkRoQmEsbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNJLGdDQUFnQyxtQkFFekIsdUJBQXVCLENBQUMsTUFBTTs7MEJBcUUxQyxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2NDb252ZXJ0ZXJzU2VydmljZSwgU2NEZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLCBTY0lEZWxpdmVyeUFkZHJlc3NPbkRhdGFDcmVhdGUsIFNjSVN1Z2dlc3Rpb25UeXBlLCBTY0lEZWxpdmVyeUFkZHJlc3MgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAncHJvamVjdHMvY2xpZW50LXVpL2F1dGgnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQtNC+0LHQsNCy0LvQtdC90LjRjyDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAqXG4gKiBUT0RPOiBUQVNLWzg4MTNdINCU0L7QsdCw0LLQuNGC0Ywg0LrQsNGA0YLRgywg0Lgg0L/QvtCy0LXQtNC10L3QuNC1INCy0YvQsdC+0YDQsCDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuCDRh9C10YDQtdC3INC60LDRgNGC0YMuINCf0YDQuCDRjdGC0L7QvCDQstGL0L3QtdGB0YLQuCDRhNC+0YDQvNGDINCyINC+0YLQtNC10LvRjNC90YvQuSDQutC+0LzQv9C+0L3QtdC90YIgQWRkRGVsaXZlcnlBZGRyZXNzRm9ybSDQuNC70Lggc3VibWl0INC70L7Qs9C40LrRgyDQsiDQtNC40YDQtdC60YLQuNCy0YMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTY0FkZERlbGl2ZXJ5QWRkcmVzc0RpYWxvZ0NvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXRh9C40YHQu9C10L3QuNC1INGC0LjQv9C+0LIg0L/QvtC00YHQutCw0LfQvtC6LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdWdnZXN0aW9uVHlwZTogdHlwZW9mIFNjSVN1Z2dlc3Rpb25UeXBlID0gU2NJU3VnZ2VzdGlvblR5cGU7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0YHQvtCx0YvRgtC40Y8g0L7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvblN1Ym1pdCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC00LDQvdC90YvRhSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQsNC00YDQtdGBINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTxTY0lEZWxpdmVyeUFkZHJlc3MgfCBudWxsIHwgdW5kZWZpbmVkPiA9IHRoaXMub25TdWJtaXQkLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0dWlNYXJrQ29udHJvbEFzVG91Y2hlZEFuZFZhbGlkYXRlKHRoaXMuZm9ybSkpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lEZWxpdmVyeUFkZHJlc3NPbkRhdGFDcmVhdGUpLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLmNyZWF0ZURlbGl2ZXJ5QWRkcmVzcyQodGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsUmVjdXJzaXZlPFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZT4odmFsdWUpKS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlcnJvclJlc3BvbnNlLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpPy5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogZXJyb3JSZXNwb25zZS5lcnJvcnNbYCR7a2V5fWBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvclJlc3BvbnNlLmVycm9ycyAmJiBlcnJvclJlc3BvbnNlLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW2Vycm9yUmVzcG9uc2UubWVzc2FnZV0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jb250ZXh0LmNvbXBsZXRlV2l0aCgpKSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhID09PSBudWxsKSk7XG5cbiAgICAvKipcbiAgICAgKiDQpNC+0YDQvNCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGFkZHJlc3M6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgY29udGFjdDogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKSxcbiAgICAgICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5lbWFpbCksXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LDQtNGA0LXRgdCw0LzQuCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqIEBwYXJhbSBjb250ZXh0INCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlOiBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoUE9MWU1PUlBIRVVTX0NPTlRFWFQpIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dDx2b2lkLCB2b2lkPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZTogU2NDb252ZXJ0ZXJzU2VydmljZVxuICAgICkge31cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCQubmV4dCgpXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgPGxhYmVsIHR1aUxhYmVsPVwi0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4XCI+XG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiPlxuICAgICAgICAgICAg0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4XG4gICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZCAqdHVpRGF0YUxpc3QgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuYWRkcmVzc1wiPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3IgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiPjwvdHVpLWVycm9yPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiY29udGFjdFwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBncm93XCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHctZnVsbFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+OjwvcD5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0KQu0Jgu0J4uXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICDQpC7QmC7Qni5cbiAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZCAqdHVpRGF0YUxpc3QgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZmlvXCI+PC9zYy1zdWdnZXN0aW9uLWZpZWxkPlxuICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIj48L3R1aS1lcnJvcj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0KLQtdC70LXRhNC+0L1cIj5cbiAgICAgICAgICAgIDx0dWktaW5wdXQtcGhvbmUgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj4g0KLQtdC70LXRhNC+0L0gPC90dWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8dHVpLWVycm9yIGZvcm1Db250cm9sTmFtZT1cInBob25lXCIgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCI+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR1aVRleHRmaWVsZCB0eXBlPVwiZW1haWxcIiAvPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGQgKnR1aURhdGFMaXN0IFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCI+PC9zYy1zdWdnZXN0aW9uLWZpZWxkPlxuICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCI+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCU0L7Qu9C20L3QvtGB0YLRjFwiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiPiDQlNC+0LvQttC90L7RgdGC0YwgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yIGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCIgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCI+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiB0dWlCdXR0b24gbWF0UmlwcGxlIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIiBbc2hvd0xvYWRlcl09XCIhIShsb2FkaW5nJCB8IGFzeW5jKVwiIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlbGYtY2VudGVyXCI+0JTQvtCx0LDQstC40YLRjDwvYnV0dG9uPlxuPC9mb3JtPlxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFxRyxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlKLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUUxRzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG1DQUFtQztJQW1FNUM7Ozs7OztPQU1HO0lBQ0gsWUFDcUIsc0JBQWdELEVBQ25CLE9BQXFDLEVBQ2xFLGlCQUFzQztRQUZ0QywyQkFBc0IsR0FBdEIsc0JBQXNCLENB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QW1DLHNFQ3JCaEQsbW9IQTBGQTsyRkRyRWEsbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNJLGdDQUFnQyxtQkFFekIsdUJBQXVCLENBQUMsTUFBTTs7MEJBOEUxQyxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJ4anMvbm8taW1wbGljaXQtYW55LWNhdGNoLCBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTY0NvbnZlcnRlcnNTZXJ2aWNlLCBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsIFNjSURlbGl2ZXJ5QWRkcmVzcywgU2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlLCBTY0lTdWdnZXN0aW9uVHlwZSB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVFVJX0lTX01PQklMRSwgdHVpTWFya0NvbnRyb2xBc1RvdWNoZWRBbmRWYWxpZGF0ZSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpRGlhbG9nQ29udGV4dCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IEFwaUVycm9yUmVzcG9uc2UgfSBmcm9tICdwcm9qZWN0cy9jbGllbnQtdWkvYXV0aCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC00L7QsdCw0LLQu9C10L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICpcbiAqIFRPRE86IFRBU0tbODgxM10g0JTQvtCx0LDQstC40YLRjCDQutCw0YDRgtGDLCDQuCDQv9C+0LLQtdC00LXQvdC40LUg0LLRi9Cx0L7RgNCwINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4INGH0LXRgNC10Lcg0LrQsNGA0YLRgy4g0J/RgNC4INGN0YLQvtC8INCy0YvQvdC10YHRgtC4INGE0L7RgNC80YMg0LIg0L7RgtC00LXQu9GM0L3Ri9C5INC60L7QvNC/0L7QvdC10L3RgiBBZGREZWxpdmVyeUFkZHJlc3NGb3JtINC40LvQuCBzdWJtaXQg0LvQvtCz0LjQutGDINCyINC00LjRgNC10LrRgtC40LLRgy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0FkZERlbGl2ZXJ5QWRkcmVzc0RpYWxvZ0NvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINC+0YLQvtCx0YDQsNC20LDQtdGC0YHRjyDRjdGC0L7RgiDQutC+0LzQv9C+0L3QtdC90YIg0L3QsCDQvNC+0LHQuNC70YzQvdC+0Lwg0YPRgdGC0YDQvtC50YHRgtCy0LUg0LjQu9C4INC90LXRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGU6IGJvb2xlYW4gPSBpbmplY3QoVFVJX0lTX01PQklMRSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LTQsNC90L3Ri9GFINC00L7QsdCw0LLQu9C10L3QuNGPINCw0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3QkOiBPYnNlcnZhYmxlPFNjSURlbGl2ZXJ5QWRkcmVzcyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gdGhpcy5vblN1Ym1pdCQucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUodGhpcy5mb3JtKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5mb3JtLnZhbHVlIGFzIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UuY3JlYXRlRGVsaXZlcnlBZGRyZXNzJCh0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGxSZWN1cnNpdmU8U2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlPih2YWx1ZSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBlcnJvci5lcnJvciBhcyBBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVycm9yUmVzcG9uc2UuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvclJlc3BvbnNlLmVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvclJlc3BvbnNlLmVycm9ycyAmJiBlcnJvclJlc3BvbnNlLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW2Vycm9yUmVzcG9uc2UubWVzc2FnZV0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuY29tcGxldGVXaXRoKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKG1hcCgoZGF0YSkgPT4gZGF0YSA9PT0gbnVsbCkpO1xuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBhZGRyZXNzOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGNvbnRhY3Q6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMuZW1haWwpLFxuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LDQtNGA0LXRgdCw0LzQuCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqIEBwYXJhbSBjb250ZXh0INCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlOiBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoUE9MWU1PUlBIRVVTX0NPTlRFWFQpIHB1YmxpYyByZWFkb25seSBjb250ZXh0OiBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHZvaWQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlXG4gICAgKSB7fVxufVxuIiwiPGZvcm1cbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuPlxuICAgIDxsYWJlbCB0dWlMYWJlbD1cItCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFwiPlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIj5cbiAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5hZGRyZXNzXCJcbiAgICAgICAgICAgID48L3NjLXN1Z2dlc3Rpb24tZmllbGQ+XG4gICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgID48L3R1aS1lcnJvcj5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgZm9ybUdyb3VwTmFtZT1cImNvbnRhY3RcIlxuICAgICAgICBjbGFzcz1cImZsZXggZ3JvdyBmbGV4LWNvbCBnYXAtMlwiXG4gICAgPlxuICAgICAgICA8cCBjbGFzcz1cInctZnVsbCBmb250LWJvbGRcIj7QmtC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQvjo8L3A+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCkLtCYLtCeLlwiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAg0KQu0Jgu0J4uXG4gICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmZpb1wiXG4gICAgICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCi0LXQu9C10YTQvtC9XCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0LXBob25lIGZvcm1Db250cm9sTmFtZT1cInBob25lXCI+INCi0LXQu9C10YTQvtC9IDwvdHVpLWlucHV0LXBob25lPlxuICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWwgdHVpTGFiZWw9XCLQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1wiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlUZXh0ZmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgICAgICA+PC9zYy1zdWdnZXN0aW9uLWZpZWxkPlxuICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCU0L7Qu9C20L3QvtGB0YLRjFwiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiPiDQlNC+0LvQttC90L7RgdGC0YwgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLThcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHR1aU1vZGU9XCJvbkxpZ2h0XCJcbiAgICAgICAgICAgIFtpY29uXT1cImlzTW9iaWxlID8gJ3R1aUljb25YJyA6ICd0dWlJY29uWExhcmdlJ1wiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0J7RgtC80LXQvdCwXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtpY29uXT1cImlzTW9iaWxlID8gJ3R1aUljb25TYXZlJyA6ICd0dWlJY29uU2F2ZUxhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cIiEhKGxvYWRpbmckIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQlNC+0LHQsNCy0LjRgtGMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19