simpo-component-library 3.6.963 → 3.6.967

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ export class BlogCategory {
2
+ constructor(json) {
3
+ this.id = json?.['id'];
4
+ this.businessId = json?.['businessId'];
5
+ this.categoryName = json?.['categoryName'];
6
+ this.description = json?.['description'];
7
+ this.blogsCreatedCount = json?.['blogsCreatedCount'];
8
+ this.createdById = json?.['createdById'];
9
+ this.createdByName = json?.['createdByName'];
10
+ this.createdTimeStamp = json?.['createdTimeStamp'];
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvZy1jYXRlZ29yeS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctY2F0ZWdvcnkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFlBQVk7SUFVdkIsWUFBWSxJQUE2QjtRQUN2QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQmxvZ0NhdGVnb3J5IHtcbiAgaWQ6IHN0cmluZztcbiAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICBjYXRlZ29yeU5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYmxvZ3NDcmVhdGVkQ291bnQ6IG51bWJlcjtcbiAgY3JlYXRlZEJ5SWQ6IHN0cmluZztcbiAgY3JlYXRlZEJ5TmFtZTogc3RyaW5nO1xuICBjcmVhdGVkVGltZVN0YW1wOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoanNvbj86IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLmlkID0ganNvbj8uWydpZCddO1xuICAgIHRoaXMuYnVzaW5lc3NJZCA9IGpzb24/LlsnYnVzaW5lc3NJZCddO1xuICAgIHRoaXMuY2F0ZWdvcnlOYW1lID0ganNvbj8uWydjYXRlZ29yeU5hbWUnXTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0ganNvbj8uWydkZXNjcmlwdGlvbiddO1xuICAgIHRoaXMuYmxvZ3NDcmVhdGVkQ291bnQgPSBqc29uPy5bJ2Jsb2dzQ3JlYXRlZENvdW50J107XG4gICAgdGhpcy5jcmVhdGVkQnlJZCA9IGpzb24/LlsnY3JlYXRlZEJ5SWQnXTtcbiAgICB0aGlzLmNyZWF0ZWRCeU5hbWUgPSBqc29uPy5bJ2NyZWF0ZWRCeU5hbWUnXTtcbiAgICB0aGlzLmNyZWF0ZWRUaW1lU3RhbXAgPSBqc29uPy5bJ2NyZWF0ZWRUaW1lU3RhbXAnXTtcbiAgfVxufVxuIl19
@@ -1,5 +1,7 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Inject, Input } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
+ import { LOCAL_STORAGE } from '../../services/local-storage.token';
4
+ import { CardSkeletonLoaderComponent } from '../../elements/card-skeleton-loader/card-skeleton-loader.component';
3
5
  import { BackgroundDirective } from '../../directive/background-directive';
4
6
  import { AnimationDirective } from '../../directive/animation-directive';
5
7
  import { BorderDirective } from '../../directive/border-directive';
@@ -8,22 +10,30 @@ import { ImageDirectiveDirective } from '../../directive/image-directive.directi
8
10
  import { CornerDirective } from '../../directive/corner-directive';
9
11
  import { ColumnDirectiveDirective } from '../../directive/column-directive.directive';
10
12
  import { OverlayDirective } from '../../directive/overlay-directive';
11
- import { ContentTitleDirective } from '../../directive/content-title-spacing.directive';
13
+ import { ContentTitleDirective, } from '../../directive/content-title-spacing.directive';
12
14
  import { MatIcon } from '@angular/material/icon';
13
15
  import BaseSection from '../BaseSection';
14
- import { HoverElementsComponent } from "../../components/hover-elements/hover-elements.component";
16
+ import { HoverElementsComponent } from '../../components/hover-elements/hover-elements.component';
15
17
  import { HoverDirective } from '../../directive/hover-element-directive';
16
18
  import { SvgDividerComponent } from '../../elements/svg-divider/svg-divider.component';
17
19
  import { SpacingHorizontalDirective } from '../../directive/spacing-horizontal.directive';
18
- import { RouterLink } from "@angular/router";
20
+ import { RouterLink } from '@angular/router';
19
21
  import * as i0 from "@angular/core";
20
22
  import * as i1 from "../../services/events.service";
21
- import * as i2 from "@angular/common";
23
+ import * as i2 from "../../services/rest.service";
24
+ import * as i3 from "@angular/common";
22
25
  export class BlogListComponent extends BaseSection {
23
- constructor(_eventService) {
26
+ constructor(_eventService, restService, storage) {
24
27
  super();
25
28
  this._eventService = _eventService;
29
+ this.restService = restService;
30
+ this.storage = storage;
26
31
  this.responseData = [];
32
+ this.categoryList = [];
33
+ // undefined = nothing clicked yet (no tab highlighted); null = "All" explicitly clicked.
34
+ this.selectedCategoryId = undefined;
35
+ this.filteredBlogs = null;
36
+ this.apiLoading = false;
27
37
  }
28
38
  ngOnInit() {
29
39
  for (let blog of this.responseData) {
@@ -35,6 +45,53 @@ export class BlogListComponent extends BaseSection {
35
45
  }
36
46
  this.style = this.data?.styles;
37
47
  this.blogContent = this.data?.content;
48
+ this.loadBlogCategories();
49
+ }
50
+ get businessId() {
51
+ return (this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? null);
52
+ }
53
+ get displayedBlogs() {
54
+ return this.filteredBlogs ?? this.responseData;
55
+ }
56
+ loadBlogCategories() {
57
+ const bId = this.businessId;
58
+ if (!bId)
59
+ return;
60
+ this.restService.getBlogCategories(bId).subscribe({
61
+ next: categories => {
62
+ this.categoryList = categories ?? [];
63
+ },
64
+ error: () => {
65
+ this.categoryList = [];
66
+ },
67
+ });
68
+ }
69
+ selectCategory(categoryId) {
70
+ this.selectedCategoryId = categoryId;
71
+ if (categoryId === null) {
72
+ this.filteredBlogs = null;
73
+ return;
74
+ }
75
+ const bId = this.businessId;
76
+ if (!bId)
77
+ return;
78
+ this.apiLoading = true;
79
+ this.restService.getBlogsByCategory(bId, categoryId).subscribe({
80
+ next: (response) => {
81
+ const list = response?.data ?? [];
82
+ for (const blog of list) {
83
+ blog['img'] = blog.blocks?.find((x) => x.type === 'image')?.data?.file?.url;
84
+ if (blog?.keyWords?.content?.length > 0)
85
+ blog['tags'] = blog?.keyWords?.content?.split(',') || [];
86
+ }
87
+ this.filteredBlogs = list;
88
+ this.apiLoading = false;
89
+ },
90
+ error: () => {
91
+ this.filteredBlogs = [];
92
+ this.apiLoading = false;
93
+ },
94
+ });
38
95
  }
39
96
  get headingSpace() {
40
97
  return this.style?.layout?.headingSpacing;
@@ -53,12 +110,13 @@ export class BlogListComponent extends BaseSection {
53
110
  this._eventService.editSection.emit({ data: this.data });
54
111
  }, 100);
55
112
  }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
57
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" class=\"total-container\" simpoHover\n (hovering)=\"showEditTabs($event)\" *ngIf=\"(responseData?.length || 0) > 0;else elseBlock\" [attr.style]=\"customClass\">\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\" [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row gap-20\">\n <div [simpoColumnDirective]=\"data?.styles?.size\" [id]=\"data?.id\" *ngFor=\"let content of responseData\"\n class=\"d-flex\">\n <a [routerLink]=\"['/blog', content.newPostTitle]\" (click)=\"getBlogById(content.articleSlug)\">\n <div class=\"cards h-100\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\">\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\" alt=\"\" *ngIf=\"content.img\" loading=\"lazy\">\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\" *ngIf=\"!content.img\" loading=\"lazy\">\n <div class=\"p-30\">\n <!-- <div class=\"d-flex flex-wrap align-items-center gap-2\">\n <ng-container *ngFor=\"let tag of content?.tags | slice:0:4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div> -->\n <div class=\"heading-medium title mt-2 fs-20\" *ngIf=\"blogContent?.display?.showHeading\">\n {{content.postTitle.length > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div class=\"body-large mt-4 pb-15\" *ngIf=\"blogContent?.display?.showContent\">\n {{ content.postSummary.length > 250 ? content.postSummary.substring(0, 250) + '...' :\n content.postSummary }}\n </div>\n </ng-container>\n\n <div class=\"d-flex justify-content-end p-2 align-items-center\" *ngIf=\"content?.author?.content && content?.author?.content.length > 0\">\n <p>- {{content?.author?.content | titlecase}}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, deps: [{ token: i1.EventsService }, { token: i2.RestService }, { token: LOCAL_STORAGE }], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BlogListComponent, isStandalone: true, selector: "simpo-blog-list", inputs: { responseData: "responseData", index: "index", edit: "edit", customClass: "customClass", data: "data", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CardSkeletonLoaderComponent, selector: "simpo-card-skeleton-loader", inputs: ["count", "showTitles"] }] }); }
58
115
  }
59
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlogListComponent, decorators: [{
60
117
  type: Component,
61
- args: [{ selector: 'simpo-blog-list', standalone: true, imports: [CommonModule,
118
+ args: [{ selector: 'simpo-blog-list', standalone: true, imports: [
119
+ CommonModule,
62
120
  AnimationDirective,
63
121
  BorderDirective,
64
122
  ContentFitDirective,
@@ -70,9 +128,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
70
128
  ContentTitleDirective,
71
129
  HoverDirective,
72
130
  HoverElementsComponent,
73
- MatIcon, SvgDividerComponent,
74
- SpacingHorizontalDirective, RouterLink], template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" class=\"total-container\" simpoHover\n (hovering)=\"showEditTabs($event)\" *ngIf=\"(responseData?.length || 0) > 0;else elseBlock\" [attr.style]=\"customClass\">\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\" [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row gap-20\">\n <div [simpoColumnDirective]=\"data?.styles?.size\" [id]=\"data?.id\" *ngFor=\"let content of responseData\"\n class=\"d-flex\">\n <a [routerLink]=\"['/blog', content.newPostTitle]\" (click)=\"getBlogById(content.articleSlug)\">\n <div class=\"cards h-100\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\">\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\" alt=\"\" *ngIf=\"content.img\" loading=\"lazy\">\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\" *ngIf=\"!content.img\" loading=\"lazy\">\n <div class=\"p-30\">\n <!-- <div class=\"d-flex flex-wrap align-items-center gap-2\">\n <ng-container *ngFor=\"let tag of content?.tags | slice:0:4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div> -->\n <div class=\"heading-medium title mt-2 fs-20\" *ngIf=\"blogContent?.display?.showHeading\">\n {{content.postTitle.length > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div class=\"body-large mt-4 pb-15\" *ngIf=\"blogContent?.display?.showContent\">\n {{ content.postSummary.length > 250 ? content.postSummary.substring(0, 250) + '...' :\n content.postSummary }}\n </div>\n </ng-container>\n\n <div class=\"d-flex justify-content-end p-2 align-items-center\" *ngIf=\"content?.author?.content && content?.author?.content.length > 0\">\n <p>- {{content?.author?.content | titlecase}}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}\n"] }]
75
- }], ctorParameters: () => [{ type: i1.EventsService }], propDecorators: { responseData: [{
131
+ MatIcon,
132
+ SvgDividerComponent,
133
+ SpacingHorizontalDirective,
134
+ RouterLink,
135
+ CardSkeletonLoaderComponent,
136
+ ], template: "<section\n [id]=\"data?.id\"\n [simpoBackground]=\"style?.background\"\n class=\"total-container\"\n simpoHover\n (hovering)=\"showEditTabs($event)\"\n *ngIf=\"\n categoryList.length > 0 || (displayedBlogs?.length || 0) > 0 || apiLoading;\n else elseBlock\n \"\n [attr.style]=\"customClass\">\n <div\n [id]=\"data?.id\"\n [simpoOverlay]=\"style?.background\"\n [simpoBorder]=\"style?.border\"\n [simpoAnimation]=\"style?.animation\"\n [simpoLayout]=\"style?.layout\">\n <div class=\"container-fluid\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"blog-category-tabs\" *ngIf=\"categoryList.length > 0\">\n <span\n class=\"category-tab\"\n [class.active]=\"selectedCategoryId === null\"\n (click)=\"selectCategory(null)\"\n >All</span\n >\n <span\n class=\"category-tab\"\n *ngFor=\"let category of categoryList\"\n [class.active]=\"selectedCategoryId === category.id\"\n (click)=\"selectCategory(category.id)\">\n {{ category.categoryName }}\n </span>\n </div>\n <simpo-card-skeleton-loader\n *ngIf=\"apiLoading\"\n [showTitles]=\"true\"></simpo-card-skeleton-loader>\n <div\n class=\"no-blog-text-inline heading-medium\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) === 0\">\n Sorry there are no blog posts in this category.\n </div>\n <div\n class=\"row gap-20\"\n *ngIf=\"!apiLoading && (displayedBlogs?.length || 0) > 0\">\n <div\n [simpoColumnDirective]=\"data?.styles?.size\"\n [id]=\"data?.id\"\n *ngFor=\"let content of displayedBlogs\"\n class=\"d-flex\">\n <a\n [routerLink]=\"['/blog', content.newPostTitle]\"\n (click)=\"getBlogById(content.articleSlug)\">\n <div\n class=\"cards h-100\"\n [simpoCorner]=\"style?.corners\"\n [id]=\"data?.id\">\n <img\n loading=\"lazy\"\n [src]=\"content.img\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n alt=\"\"\n *ngIf=\"content.img\"\n loading=\"lazy\" />\n <img\n loading=\"lazy\"\n [simpoImageDirective]=\"style?.image\"\n [id]=\"data?.id\"\n [simpoCorner]=\"style?.corners\"\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\n alt=\"\"\n *ngIf=\"!content.img\"\n loading=\"lazy\" />\n <div class=\"p-30\">\n <div\n class=\"d-flex flex-wrap align-items-center gap-2 mb-2\"\n *ngIf=\"content?.tags?.length || content?.categoryName\">\n <p class=\"mb-0 p-2 border\" *ngIf=\"content?.categoryName\">\n {{ content.categoryName }}\n </p>\n <ng-container\n *ngFor=\"let tag of content?.tags | slice: 0 : 4\">\n <p class=\"mb-0 p-2 border\">{{ tag }}</p>\n </ng-container>\n </div>\n <div\n class=\"heading-medium title mt-2 fs-20\"\n *ngIf=\"blogContent?.display?.showHeading\">\n {{\n content.postTitle.length > 100\n ? content.postTitle.substring(0, 100) + '...\"'\n : content.postTitle\n }}\n <!-- {{content.postTitle}} -->\n </div>\n <ng-container>\n <div\n class=\"body-large mt-4 pb-15\"\n *ngIf=\"blogContent?.display?.showContent\">\n {{\n content.postSummary.length > 250\n ? content.postSummary.substring(0, 250) + '...'\n : content.postSummary\n }}\n </div>\n </ng-container>\n\n <div\n class=\"d-flex justify-content-end p-2 align-items-center\"\n *ngIf=\"\n content?.author?.content &&\n content?.author?.content.length > 0\n \">\n <p>- {{ content?.author?.content | titlecase }}</p>\n </div>\n\n <!-- <div class=\"authors\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n <div>\n <mat-icon>person</mat-icon> &nbsp;&nbsp;<span class=\"body-large\">{{content?.author?.content | titlecase}}</span>\n </div>\n <div class=\"calendar_today\">\n <mat-icon>calendar_today</mat-icon> &nbsp;&nbsp; <span class=\"body-large\">{{content.createdTimeStamp |\n date:'EEEE, MMM, d, y'}}</span>\n </div>\n </div>\n <div class=\"button heading-large\" (click)=\"getBlogById(content.newPostTitle)\" [ngClass]=\"'justify-content-' + (style?.layout?.align || '')\">\n Read More <mat-icon>arrow_right_alt</mat-icon>\n </div> -->\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider\n [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements\n [data]=\"data\"\n [index]=\"index\"\n [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n<ng-template #elseBlock>\n <div class=\"no-blog-text heading-medium\">Sorry there are no blog posts.</div>\n</ng-template>\n", styles: [".cards{box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.cards img{width:100%;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.p-30{padding:10px 15px 0}.border{border:1px solid;border-radius:8px}.authors{display:flex;gap:35px;margin-top:40px}.authors div{display:flex}.authors .calendar_today{align-items:center}.authors .calendar_today mat-icon{font-size:20px}.button{font-size:15px;display:flex;align-items:center;gap:10px;cursor:pointer;font-family:interReg;font-weight:500;justify-content:end}.mt-20{margin-top:20px}.total-container{position:relative;height:auto}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.no-blog-text{font-size:24px;line-height:36px;height:40vh;display:flex;align-items:center;justify-content:center}.no-blog-text-inline{font-size:18px;padding:60px 0;text-align:center}.justify-content-right{justify-content:right}.h-100{height:100%}.gap-20{gap:20px 0px!important}.fs-20{font-size:20px!important}.pb-15{padding-bottom:15px}.ar-none{aspect-ratio:0!important}.blog-category-tabs{display:flex;flex-wrap:nowrap;align-items:center;gap:32px;overflow-x:auto;border-bottom:1px solid #e5e5e5;padding-bottom:14px;margin-bottom:24px;scrollbar-width:none}.blog-category-tabs::-webkit-scrollbar{display:none}.category-tab{flex-shrink:0;padding-bottom:4px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#8a8a8a;white-space:nowrap;cursor:pointer;border-bottom:2px solid transparent}.category-tab:hover,.category-tab.active{color:#1a1a1a}\n"] }]
137
+ }], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.RestService }, { type: undefined, decorators: [{
138
+ type: Inject,
139
+ args: [LOCAL_STORAGE]
140
+ }] }], propDecorators: { responseData: [{
76
141
  type: Input
77
142
  }], index: [{
78
143
  type: Input
@@ -85,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
85
150
  }], nextComponentColor: [{
86
151
  type: Input
87
152
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2Jsb2ctbGlzdC9ibG9nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFXLE1BQU0saURBQWlELENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8s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TyxFQUFFLG1CQUFtQjt3QkFDNUIsMEJBQTBCLEVBQUUsVUFBVSxDQUFDO2tGQUtoQyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCbG9nTGlzdENvbnRlbnRNb2RlbCwgQmxvZ0xpc3RTZWN0aW9uTW9kZWwsIEJsb2dMaXN0U3R5bGVzTW9kZWwgfSBmcm9tICcuL2Jsb2ctbGlzdC5tb2RlbCc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbHVtbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudFRpdGxlRGlyZWN0aXZlLCBTUEFDSU5HIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtdGl0bGUtc3BhY2luZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnRcIjtcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCwgTGF5T3V0TW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgU3ZnRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3N2Zy1kaXZpZGVyL3N2Zy1kaXZpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby1ibG9nLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLFxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcbiAgICBCb3JkZXJEaXJlY3RpdmUsXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxuICAgIEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvcm5lckRpcmVjdGl2ZSxcbiAgICBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBDb250ZW50VGl0bGVEaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcbiAgICBNYXRJY29uLCBTdmdEaXZpZGVyQ29tcG9uZW50LFxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLCBSb3V0ZXJMaW5rXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jsb2ctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibG9nLWxpc3QuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQmxvZ0xpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiB7XG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgZGF0YT86IEJsb2dMaXN0U2VjdGlvbk1vZGVsO1xuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKVxuICB9XG5cbiAgc3R5bGU/OiBCbG9nTGlzdFN0eWxlc01vZGVsO1xuICBibG9nQ29udGVudD86IEJsb2dMaXN0Q29udGVudE1vZGVsXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZm9yIChsZXQgYmxvZyBvZiB0aGlzLnJlc3BvbnNlRGF0YSkge1xuICAgICAgLy8gY29uc29sZS5sb2coYmxvZyk7XG4gICAgICBibG9nWydpbWcnXSA9IGJsb2cuYmxvY2tzLmZpbmQoKHg6IGFueSkgPT4geC50eXBlID09PSAnaW1hZ2UnKT8uZGF0YT8uZmlsZT8udXJsXG4gICAgICBpZiAoYmxvZz8ua2V5V29yZHM/LmNvbnRlbnQ/Lmxlbmd0aCA+IDApXG4gICAgICAgIGJsb2dbJ3RhZ3MnXSA9IGJsb2c/LmtleVdvcmRzPy5jb250ZW50Py5zcGxpdCgnLCcpIHx8IFtdXG4gICAgICAvLyBjb25zb2xlLmxvZyhibG9nWyd0YWdzJ10pO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5kYXRhPy5zdHlsZXNcbiAgICB0aGlzLmJsb2dDb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50XG4gIH1cblxuICBnZXQgaGVhZGluZ1NwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlPy5sYXlvdXQ/LmhlYWRpbmdTcGFjaW5nIGFzIFNQQUNJTkc7XG4gIH1cblxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICB9XG5cbiAgZ2V0QmxvZ0J5SWQoYmxvZ0lkOiBhbnkpIHtcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYmxvZ0J5SWRFdmVudC5lbWl0KGJsb2dJZCk7XG4gIH1cbiAgZWRpdFNlY3Rpb24oKSB7XG5cbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNDc1KVxuICAgICAgcmV0dXJuXG5cbiAgICB0aGlzLl9ldmVudFNlcnZpY2UudG9nZ2xlRWRpdG9yRXZlbnQuZW1pdChmYWxzZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICB9LCAxMDApO1xuICB9XG59XG4iLCI8c2VjdGlvbiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlPy5iYWNrZ3JvdW5kXCIgY2xhc3M9XCJ0b3RhbC1jb250YWluZXJcIiBzaW1wb0hvdmVyXG4gIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiICpuZ0lmPVwiKHJlc3BvbnNlRGF0YT8ubGVuZ3RoIHx8IDApID4gMDtlbHNlIGVsc2VCbG9ja1wiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XG4gIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZT8uYmFja2dyb3VuZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZT8uYm9yZGVyXCJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwic3R5bGU/LmFuaW1hdGlvblwiIFtzaW1wb0xheW91dF09XCJzdHlsZT8ubGF5b3V0XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ2FwLTIwXCI+XG4gICAgICAgIDxkaXYgW3NpbXBvQ29sdW1uRGlyZWN0aXZlXT1cImRhdGE/LnN0eWxlcz8uc2l6ZVwiIFtpZF09XCJkYXRhPy5pZFwiICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHJlc3BvbnNlRGF0YVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9ibG9nJywgY29udGVudC5uZXdQb3N0VGl0bGVdXCIgKGNsaWNrKT1cImdldEJsb2dCeUlkKGNvbnRlbnQuYXJ0aWNsZVNsdWcpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHMgaC0xMDBcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGU/LmNvcm5lcnNcIiBbaWRdPVwiZGF0YT8uaWRcIj5cbiAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudC5pbWdcIiBbc2ltcG9JbWFnZURpcmVjdGl2ZV09XCJzdHlsZT8uaW1hZ2VcIiBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiIGFsdD1cIlwiICpuZ0lmPVwiY29udGVudC5pbWdcIiBsb2FkaW5nPVwibGF6eVwiPlxuICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCJcbiAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL2Rldi1iZWVvcy5zMy5hbWF6b25hd3MuY29tL2xpYnJhcnktbWVkaWEvNTQxMzI5YzE3MTkyMzY5NjMxOTlwZXhlbHMtcGl4YWJheS0yNjI1MDguanBnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIiAqbmdJZj1cIiFjb250ZW50LmltZ1wiIGxvYWRpbmc9XCJsYXp5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMwXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhZyBvZiBjb250ZW50Py50YWdzIHwgc2xpY2U6MDo0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwLTIgYm9yZGVyXCI+e3sgdGFnIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSB0aXRsZSBtdC0yIGZzLTIwXCIgKm5nSWY9XCJibG9nQ29udGVudD8uZGlzcGxheT8uc2hvd0hlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgIHt7Y29udGVudC5wb3N0VGl0bGUubGVuZ3RoID4gMTAwID8gY29udGVudC5wb3N0VGl0bGUuc3Vic3RyaW5nKDAsMTAwKSsnLi4uXCInIDogY29udGVudC5wb3N0VGl0bGV9fVxuICAgICAgICAgICAgICAgICAgPCEtLSB7e2NvbnRlbnQucG9zdFRpdGxlfX0gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWxhcmdlIG10LTQgcGItMTVcIiAqbmdJZj1cImJsb2dDb250ZW50Py5kaXNwbGF5Py5zaG93Q29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb250ZW50LnBvc3RTdW1tYXJ5Lmxlbmd0aCA+IDI1MCA/IGNvbnRlbnQucG9zdFN1bW1hcnkuc3Vic3RyaW5nKDAsIDI1MCkgKyAnLi4uJyA6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQucG9zdFN1bW1hcnkgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmF1dGhvcj8uY29udGVudCAmJiBjb250ZW50Py5hdXRob3I/LmNvbnRlbnQubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgPHA+LSB7e2NvbnRlbnQ/LmF1dGhvcj8uY29udGVudCB8IHRpdGxlY2FzZX19PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXV0aG9yc1wiIFtuZ0NsYXNzXT1cIidqdXN0aWZ5LWNvbnRlbnQtJyArIChzdHlsZT8ubGF5b3V0Py5hbGlnbiB8fCAnJylcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnBlcnNvbjwvbWF0LWljb24+ICZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPVwiYm9keS1sYXJnZVwiPnt7Y29udGVudD8uYXV0aG9yPy5jb250ZW50IHwgdGl0bGVjYXNlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyX3RvZGF5XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FsZW5kYXJfdG9kYXk8L21hdC1pY29uPiAmbmJzcDsmbmJzcDsgPHNwYW4gY2xhc3M9XCJib2R5LWxhcmdlXCI+e3tjb250ZW50LmNyZWF0ZWRUaW1lU3RhbXAgfFxuICAgICAgICAgICAgICAgICAgICBkYXRlOidFRUVFLCBNTU0sIGQsIHknfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGhlYWRpbmctbGFyZ2VcIiAoY2xpY2spPVwiZ2V0QmxvZ0J5SWQoY29udGVudC5uZXdQb3N0VGl0bGUpXCIgW25nQ2xhc3NdPVwiJ2p1c3RpZnktY29udGVudC0nICsgKHN0eWxlPy5sYXlvdXQ/LmFsaWduIHx8ICcnKVwiPlxuICAgICAgICAgICAgICAgIFJlYWQgTW9yZSA8bWF0LWljb24+YXJyb3dfcmlnaHRfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZT8uZGV2aWRlcj8uZGlzcGxheVwiPlxuICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGU/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcbiAgICAgIFtjb2xvcl09XCJuZXh0Q29tcG9uZW50Q29sb3I/LmNvbG9yXCI+PC9zaW1wby1zdmctZGl2aWRlcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgPGRpdiBjbGFzcz1cIm5vLWJsb2ctdGV4dCBoZWFkaW5nLW1lZGl1bVwiPlNvcnJ5IHRoZXJlIGFyZSBubyBibG9nIHBvc3RzLjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2Jsb2ctbGlzdC9ibG9nLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDakgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0wscUJBQXFCLEdBRXRCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdC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Qjt3QkFDbkIsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxzQkFBc0I7d0JBQ3RCLE9BQU87d0JBQ1AsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLFVBQVU7d0JBQ1YsMkJBQTJCO3FCQUM1Qjs7MEJBcUJFLE1BQU07MkJBQUMsYUFBYTt5Q0FoQmQsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBCbG9nTGlzdENvbnRlbnRNb2RlbCxcbiAgQmxvZ0xpc3RTZWN0aW9uTW9kZWwsXG4gIEJsb2dMaXN0U3R5bGVzTW9kZWwsXG59IGZyb20gJy4vYmxvZy1saXN0Lm1vZGVsJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IExPQ0FMX1NUT1JBR0UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnRva2VuJztcbmltcG9ydCB7IFN0b3JhZ2VMaWtlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS1saWtlJztcbmltcG9ydCB7IEJsb2dDYXRlZ29yeSB9IGZyb20gJy4vYmxvZy1jYXRlZ29yeS5tb2RlbCc7XG5pbXBvcnQgeyBDYXJkU2tlbGV0b25Mb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9jYXJkLXNrZWxldG9uLWxvYWRlci9jYXJkLXNrZWxldG9uLWxvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb2x1bW4tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIENvbnRlbnRUaXRsZURpcmVjdGl2ZSxcbiAgU1BBQ0lORyxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtdGl0bGUtc3BhY2luZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcbmltcG9ydCB7IFN2Z0RpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zdmctZGl2aWRlci9zdmctZGl2aWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1ob3Jpem9udGFsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tYmxvZy1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcbiAgICBDb3JuZXJEaXJlY3RpdmUsXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgQ29udGVudFRpdGxlRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIEhvdmVyRWxlbWVudHNDb21wb25lbnQsXG4gICAgTWF0SWNvbixcbiAgICBTdmdEaXZpZGVyQ29tcG9uZW50LFxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxuICAgIFJvdXRlckxpbmssXG4gICAgQ2FyZFNrZWxldG9uTG9hZGVyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYmxvZy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Jsb2ctbGlzdC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQmxvZ0xpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiB7XG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgZGF0YT86IEJsb2dMaXN0U2VjdGlvbk1vZGVsO1xuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XG5cbiAgY2F0ZWdvcnlMaXN0OiBCbG9nQ2F0ZWdvcnlbXSA9IFtdO1xuICAvLyB1bmRlZmluZWQgPSBub3RoaW5nIGNsaWNrZWQgeWV0IChubyB0YWIgaGlnaGxpZ2h0ZWQpOyBudWxsID0gXCJBbGxcIiBleHBsaWNpdGx5IGNsaWNrZWQuXG4gIHNlbGVjdGVkQ2F0ZWdvcnlJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgZmlsdGVyZWRCbG9nczogYW55W10gfCBudWxsID0gbnVsbDtcbiAgYXBpTG9hZGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBASW5qZWN0KExPQ0FMX1NUT1JBR0UpIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZUxpa2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHN0eWxlPzogQmxvZ0xpc3RTdHlsZXNNb2RlbDtcbiAgYmxvZ0NvbnRlbnQ/OiBCbG9nTGlzdENvbnRlbnRNb2RlbDtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBmb3IgKGxldCBibG9nIG9mIHRoaXMucmVzcG9uc2VEYXRhKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhibG9nKTtcbiAgICAgIGJsb2dbJ2ltZyddID0gYmxvZy5ibG9ja3MuZmluZChcbiAgICAgICAgKHg6IGFueSkgPT4geC50eXBlID09PSAnaW1hZ2UnXG4gICAgICApPy5kYXRhPy5maWxlPy51cmw7XG4gICAgICBpZiAoYmxvZz8ua2V5V29yZHM/LmNvbnRlbnQ/Lmxlbmd0aCA+IDApXG4gICAgICAgIGJsb2dbJ3RhZ3MnXSA9IGJsb2c/LmtleVdvcmRzPy5jb250ZW50Py5zcGxpdCgnLCcpIHx8IFtdO1xuICAgICAgLy8gY29uc29sZS5sb2coYmxvZ1sndGFncyddKTtcbiAgICB9XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuZGF0YT8uc3R5bGVzO1xuICAgIHRoaXMuYmxvZ0NvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XG4gICAgdGhpcy5sb2FkQmxvZ0NhdGVnb3JpZXMoKTtcbiAgfVxuXG4gIGdldCBidXNpbmVzc0lkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyBudWxsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBkaXNwbGF5ZWRCbG9ncygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRCbG9ncyA/PyB0aGlzLnJlc3BvbnNlRGF0YTtcbiAgfVxuXG4gIGxvYWRCbG9nQ2F0ZWdvcmllcygpIHtcbiAgICBjb25zdCBiSWQgPSB0aGlzLmJ1c2luZXNzSWQ7XG4gICAgaWYgKCFiSWQpIHJldHVybjtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEJsb2dDYXRlZ29yaWVzKGJJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGNhdGVnb3JpZXMgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IGNhdGVnb3JpZXMgPz8gW107XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSBbXTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5SWQgPSBjYXRlZ29yeUlkO1xuICAgIGlmIChjYXRlZ29yeUlkID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQmxvZ3MgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiSWQgPSB0aGlzLmJ1c2luZXNzSWQ7XG4gICAgaWYgKCFiSWQpIHJldHVybjtcbiAgICB0aGlzLmFwaUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QmxvZ3NCeUNhdGVnb3J5KGJJZCwgY2F0ZWdvcnlJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSByZXNwb25zZT8uZGF0YSA/PyBbXTtcbiAgICAgICAgZm9yIChjb25zdCBibG9nIG9mIGxpc3QpIHtcbiAgICAgICAgICBibG9nWydpbWcnXSA9IGJsb2cuYmxvY2tzPy5maW5kKFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC50eXBlID09PSAnaW1hZ2UnXG4gICAgICAgICAgKT8uZGF0YT8uZmlsZT8udXJsO1xuICAgICAgICAgIGlmIChibG9nPy5rZXlXb3Jkcz8uY29udGVudD8ubGVuZ3RoID4gMClcbiAgICAgICAgICAgIGJsb2dbJ3RhZ3MnXSA9IGJsb2c/LmtleVdvcmRzPy5jb250ZW50Py5zcGxpdCgnLCcpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRCbG9ncyA9IGxpc3Q7XG4gICAgICAgIHRoaXMuYXBpTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRCbG9ncyA9IFtdO1xuICAgICAgICB0aGlzLmFwaUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGVhZGluZ1NwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlPy5sYXlvdXQ/LmhlYWRpbmdTcGFjaW5nIGFzIFNQQUNJTkc7XG4gIH1cblxuICBnZXQgc3R5bGVzTGF5b3V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICB9XG5cbiAgZ2V0QmxvZ0J5SWQoYmxvZ0lkOiBhbnkpIHtcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYmxvZ0J5SWRFdmVudC5lbWl0KGJsb2dJZCk7XG4gIH1cbiAgZWRpdFNlY3Rpb24oKSB7XG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIiwiPHNlY3Rpb25cbiAgW2lkXT1cImRhdGE/LmlkXCJcbiAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZT8uYmFja2dyb3VuZFwiXG4gIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCJcbiAgc2ltcG9Ib3ZlclxuICAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIlxuICAqbmdJZj1cIlxuICAgIGNhdGVnb3J5TGlzdC5sZW5ndGggPiAwIHx8IChkaXNwbGF5ZWRCbG9ncz8ubGVuZ3RoIHx8IDApID4gMCB8fCBhcGlMb2FkaW5nO1xuICAgIGVsc2UgZWxzZUJsb2NrXG4gIFwiXG4gIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XG4gIDxkaXZcbiAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIlxuICAgIFtzaW1wb0JvcmRlcl09XCJzdHlsZT8uYm9yZGVyXCJcbiAgICBbc2ltcG9BbmltYXRpb25dPVwic3R5bGU/LmFuaW1hdGlvblwiXG4gICAgW3NpbXBvTGF5b3V0XT1cInN0eWxlPy5sYXlvdXRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJsb2ctY2F0ZWdvcnktdGFic1wiICpuZ0lmPVwiY2F0ZWdvcnlMaXN0Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LXRhYlwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZENhdGVnb3J5SWQgPT09IG51bGxcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDYXRlZ29yeShudWxsKVwiXG4gICAgICAgICAgPkFsbDwvc3BhblxuICAgICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS10YWJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yeUxpc3RcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDYXRlZ29yeUlkID09PSBjYXRlZ29yeS5pZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdENhdGVnb3J5KGNhdGVnb3J5LmlkKVwiPlxuICAgICAgICAgIHt7IGNhdGVnb3J5LmNhdGVnb3J5TmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlclxuICAgICAgICAqbmdJZj1cImFwaUxvYWRpbmdcIlxuICAgICAgICBbc2hvd1RpdGxlc109XCJ0cnVlXCI+PC9zaW1wby1jYXJkLXNrZWxldG9uLWxvYWRlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJuby1ibG9nLXRleHQtaW5saW5lIGhlYWRpbmctbWVkaXVtXCJcbiAgICAgICAgKm5nSWY9XCIhYXBpTG9hZGluZyAmJiAoZGlzcGxheWVkQmxvZ3M/Lmxlbmd0aCB8fCAwKSA9PT0gMFwiPlxuICAgICAgICBTb3JyeSB0aGVyZSBhcmUgbm8gYmxvZyBwb3N0cyBpbiB0aGlzIGNhdGVnb3J5LlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93IGdhcC0yMFwiXG4gICAgICAgICpuZ0lmPVwiIWFwaUxvYWRpbmcgJiYgKGRpc3BsYXllZEJsb2dzPy5sZW5ndGggfHwgMCkgPiAwXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbc2ltcG9Db2x1bW5EaXJlY3RpdmVdPVwiZGF0YT8uc3R5bGVzPy5zaXplXCJcbiAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIGRpc3BsYXllZEJsb2dzXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9ibG9nJywgY29udGVudC5uZXdQb3N0VGl0bGVdXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnZXRCbG9nQnlJZChjb250ZW50LmFydGljbGVTbHVnKVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNhcmRzIGgtMTAwXCJcbiAgICAgICAgICAgICAgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJjb250ZW50LmltZ1wiXG4gICAgICAgICAgICAgICAgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnQuaW1nXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiIC8+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiXG4gICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9kZXYtYmVlb3MuczMuYW1hem9uYXdzLmNvbS9saWJyYXJ5LW1lZGlhLzU0MTMyOWMxNzE5MjM2OTYzMTk5cGV4ZWxzLXBpeGFiYXktMjYyNTA4LmpwZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb250ZW50LmltZ1wiXG4gICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIiAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zMFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMlwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRlbnQ/LnRhZ3M/Lmxlbmd0aCB8fCBjb250ZW50Py5jYXRlZ29yeU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwLTIgYm9yZGVyXCIgKm5nSWY9XCJjb250ZW50Py5jYXRlZ29yeU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29udGVudC5jYXRlZ29yeU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiBjb250ZW50Py50YWdzIHwgc2xpY2U6IDAgOiA0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwLTIgYm9yZGVyXCI+e3sgdGFnIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSB0aXRsZSBtdC0yIGZzLTIwXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxvZ0NvbnRlbnQ/LmRpc3BsYXk/LnNob3dIZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50LnBvc3RUaXRsZS5sZW5ndGggPiAxMDBcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbnRlbnQucG9zdFRpdGxlLnN1YnN0cmluZygwLCAxMDApICsgJy4uLlwiJ1xuICAgICAgICAgICAgICAgICAgICAgIDogY29udGVudC5wb3N0VGl0bGVcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8IS0tIHt7Y29udGVudC5wb3N0VGl0bGV9fSAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvZHktbGFyZ2UgbXQtNCBwYi0xNVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxvZ0NvbnRlbnQ/LmRpc3BsYXk/LnNob3dDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGVudC5wb3N0U3VtbWFyeS5sZW5ndGggPiAyNTBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29udGVudC5wb3N0U3VtbWFyeS5zdWJzdHJpbmcoMCwgMjUwKSArICcuLi4nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnRlbnQucG9zdFN1bW1hcnlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBwLTIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ/LmF1dGhvcj8uY29udGVudCAmJlxuICAgICAgICAgICAgICAgICAgICBjb250ZW50Py5hdXRob3I/LmNvbnRlbnQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICA8cD4tIHt7IGNvbnRlbnQ/LmF1dGhvcj8uY29udGVudCB8IHRpdGxlY2FzZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF1dGhvcnNcIiBbbmdDbGFzc109XCInanVzdGlmeS1jb250ZW50LScgKyAoc3R5bGU/LmxheW91dD8uYWxpZ24gfHwgJycpXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wZXJzb248L21hdC1pY29uPiAmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz1cImJvZHktbGFyZ2VcIj57e2NvbnRlbnQ/LmF1dGhvcj8uY29udGVudCB8IHRpdGxlY2FzZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhcl90b2RheVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbGVuZGFyX3RvZGF5PC9tYXQtaWNvbj4gJm5ic3A7Jm5ic3A7IDxzcGFuIGNsYXNzPVwiYm9keS1sYXJnZVwiPnt7Y29udGVudC5jcmVhdGVkVGltZVN0YW1wIHxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTonRUVFRSwgTU1NLCBkLCB5J319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBoZWFkaW5nLWxhcmdlXCIgKGNsaWNrKT1cImdldEJsb2dCeUlkKGNvbnRlbnQubmV3UG9zdFRpdGxlKVwiIFtuZ0NsYXNzXT1cIidqdXN0aWZ5LWNvbnRlbnQtJyArIChzdHlsZT8ubGF5b3V0Py5hbGlnbiB8fCAnJylcIj5cbiAgICAgICAgICAgICAgICBSZWFkIE1vcmUgPG1hdC1pY29uPmFycm93X3JpZ2h0X2FsdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmRldmlkZXI/LmRpc3BsYXlcIj5cbiAgICA8c2ltcG8tc3ZnLWRpdmlkZXJcbiAgICAgIFtkaXZpZGVyVHlwZV09XCJzdHlsZT8uZGV2aWRlcj8uZGV2aWRlclR5cGVcIlxuICAgICAgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7IGhvdmVyX2VmZmVjdDogZWRpdCB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50c1xuICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbjxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICA8ZGl2IGNsYXNzPVwibm8tYmxvZy10ZXh0IGhlYWRpbmctbWVkaXVtXCI+U29ycnkgdGhlcmUgYXJlIG5vIGJsb2cgcG9zdHMuPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19