@colijnit/product 256.1.4 → 256.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/image-carousel/image-carousel.component.d.ts +16 -13
- package/app/components/product-external-source/product-external-source.component.d.ts +2 -0
- package/app/components/product-hd/product-hd.component.d.ts +3 -0
- package/app/service/product-event.service.d.ts +1 -1
- package/bundles/colijnit-product.umd.js +150 -60
- package/bundles/colijnit-product.umd.js.map +1 -1
- package/colijnit-product.metadata.json +1 -1
- package/esm2015/app/components/image-carousel/image-carousel.component.js +127 -70
- package/esm2015/app/components/product-external-source/product-external-source.component.js +10 -5
- package/esm2015/app/components/product-hd/product-hd.component.js +40 -15
- package/esm2015/app/components/product-page/product-page.component.js +1 -1
- package/esm2015/app/product-version.js +3 -3
- package/esm2015/app/service/product-event.service.js +1 -1
- package/fesm2015/colijnit-product.js +176 -88
- package/fesm2015/colijnit-product.js.map +1 -1
- package/package.json +3 -3
- package/colijnit-product-256.1.3.tgz +0 -0
|
@@ -1,43 +1,56 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, ViewChild } from '@angular/core';
|
|
2
3
|
import { CoDocument } from '@colijnit/mainapi/build/model/co-document';
|
|
3
4
|
import { ProductConnectorService } from '../../service/product-connector.service';
|
|
4
5
|
import { ProductEventService } from '../../service/product-event.service';
|
|
5
|
-
import { IconEnum } from '../../enum/icon.enum';
|
|
6
|
-
import { IconCacheService } from '../../service/icon-cache.service';
|
|
7
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
+
export class ImageViewModel {
|
|
8
|
+
}
|
|
8
9
|
export class ImageCarouselComponent {
|
|
9
|
-
constructor(_ione, _appEventService, _changeDetector, _domSanitizer
|
|
10
|
+
constructor(_ione, _appEventService, _changeDetector, _domSanitizer) {
|
|
10
11
|
this._ione = _ione;
|
|
11
12
|
this._appEventService = _appEventService;
|
|
12
13
|
this._changeDetector = _changeDetector;
|
|
13
14
|
this._domSanitizer = _domSanitizer;
|
|
14
|
-
this.iconCache = iconCache;
|
|
15
|
-
this.icons = IconEnum;
|
|
16
|
-
this.showLoader = false;
|
|
17
15
|
this.showRefresh = false;
|
|
18
16
|
this.resizing = false;
|
|
17
|
+
this.imageViewModels = [];
|
|
18
|
+
this.showLoader = false;
|
|
19
19
|
this._currentIndex = 0;
|
|
20
20
|
this._images = [];
|
|
21
21
|
this._subs = [];
|
|
22
|
+
this._resizeCanvasHeight = 500;
|
|
22
23
|
this._subs.push(this._appEventService.onRenderStarted.subscribe(() => {
|
|
23
24
|
this.showLoader = true;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
this._changeDetector.detectChanges();
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
this.showLoader = false;
|
|
28
|
+
this._changeDetector.detectChanges();
|
|
29
|
+
}, 10000);
|
|
30
|
+
}), this._appEventService.onDraftRenderImageReceived.subscribe((event) => {
|
|
31
|
+
if (event && event.detail) {
|
|
32
|
+
if (this._images[0] instanceof CoDocument) {
|
|
33
|
+
this._images.unshift(event.detail);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this._images[0] = event.detail;
|
|
37
|
+
}
|
|
38
|
+
this._loadAndRescaleImages();
|
|
30
39
|
}
|
|
31
40
|
this.showLoader = false;
|
|
41
|
+
this._changeDetector.detectChanges();
|
|
32
42
|
}));
|
|
33
43
|
}
|
|
34
44
|
set images(value) {
|
|
35
45
|
if (value && value.length > 0) {
|
|
36
46
|
this._images = this._filterValidImages(value);
|
|
37
|
-
this.
|
|
47
|
+
this._loadAndRescaleImages();
|
|
38
48
|
this._changeDetector.detectChanges();
|
|
39
49
|
}
|
|
40
50
|
}
|
|
51
|
+
get images() {
|
|
52
|
+
return this._images;
|
|
53
|
+
}
|
|
41
54
|
handleWindowResize() {
|
|
42
55
|
this.resizing = true;
|
|
43
56
|
this._scrollCarouselToIndex();
|
|
@@ -62,11 +75,6 @@ export class ImageCarouselComponent {
|
|
|
62
75
|
this._currentIndex = value;
|
|
63
76
|
this._scrollCarouselToIndex();
|
|
64
77
|
}
|
|
65
|
-
get images() {
|
|
66
|
-
return this._images;
|
|
67
|
-
}
|
|
68
|
-
ngOnInit() {
|
|
69
|
-
}
|
|
70
78
|
ngOnDestroy() {
|
|
71
79
|
this.carousel = undefined;
|
|
72
80
|
this._subs.forEach(s => s.unsubscribe());
|
|
@@ -77,43 +85,90 @@ export class ImageCarouselComponent {
|
|
|
77
85
|
onForceRenderImage() {
|
|
78
86
|
this._appEventService.onForceRenderImage.next();
|
|
79
87
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
handleShowImage(imageViewModel) {
|
|
89
|
+
if (imageViewModel && imageViewModel.originalSource) {
|
|
90
|
+
let popupWindow = window.open('', 'Image zoom', 'width=600,height=400');
|
|
91
|
+
// Set the content of the popup window
|
|
92
|
+
popupWindow.document.write('<html><head><title>Image zoom</title></head><body>');
|
|
93
|
+
popupWindow.document.write(`<img src=${imageViewModel.originalSource} alt="Image" style="width:100%; height:auto;">`);
|
|
94
|
+
popupWindow.document.write('</body></html>');
|
|
95
|
+
// Close the document to render the popup window
|
|
96
|
+
popupWindow.document.close();
|
|
89
97
|
}
|
|
90
|
-
else if (image.detail !== undefined) {
|
|
91
|
-
source = image.detail;
|
|
92
|
-
}
|
|
93
|
-
return this._domSanitizer.bypassSecurityTrustUrl(source);
|
|
94
98
|
}
|
|
95
99
|
_filterValidImages(value) {
|
|
96
100
|
if (!value) {
|
|
97
101
|
return [];
|
|
98
102
|
}
|
|
99
|
-
return value.filter(doc => {
|
|
103
|
+
return value.filter((doc) => {
|
|
100
104
|
const pattern = /\.(jpg|jpeg|png|gif|bmp|tiff|webp)$/i;
|
|
101
|
-
return pattern.test(doc.fileName) || !!doc.filePath;
|
|
105
|
+
return typeof doc === 'string' || (pattern.test(doc.fileName) || !!doc.filePath);
|
|
102
106
|
});
|
|
103
107
|
}
|
|
104
|
-
|
|
108
|
+
_loadAndRescaleImages() {
|
|
109
|
+
this.imageViewModels.length = 0;
|
|
105
110
|
if (this._images) {
|
|
106
111
|
this._images.forEach((i) => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
let imageViewModel = new ImageViewModel();
|
|
113
|
+
imageViewModel.image = i;
|
|
114
|
+
if (typeof i === 'string') { // is a rendered image coming from configurator
|
|
115
|
+
this._resizeAndSanitizeSource(i, imageViewModel);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
if (i.filePath) {
|
|
119
|
+
this._resizeAndSanitizeSource(i.filePath, imageViewModel);
|
|
120
|
+
}
|
|
121
|
+
else if (i.documentBody) {
|
|
122
|
+
this._resizeAndSanitizeSource(i.documentBodyAsDataUri, imageViewModel);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this._ione.getDocumentContent(i.documentId, false).then((content) => {
|
|
126
|
+
if (content) {
|
|
127
|
+
i.documentBody = content.documentContent;
|
|
128
|
+
this._resizeAndSanitizeSource(i.documentBodyAsDataUri, imageViewModel);
|
|
129
|
+
this._changeDetector.detectChanges();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
113
133
|
}
|
|
134
|
+
this.imageViewModels.push(imageViewModel);
|
|
135
|
+
this._changeDetector.detectChanges();
|
|
114
136
|
});
|
|
115
137
|
}
|
|
116
138
|
}
|
|
139
|
+
_resizeAndSanitizeSource(source, imageViewModel) {
|
|
140
|
+
const resizeCanvas = document.createElement('canvas');
|
|
141
|
+
const resizeCanvasContext = resizeCanvas.getContext('2d');
|
|
142
|
+
const resizeImage = document.createElement('img');
|
|
143
|
+
resizeImage.onload = () => __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
resizeCanvasContext.imageSmoothingEnabled = true;
|
|
145
|
+
resizeCanvasContext.imageSmoothingQuality = 'high';
|
|
146
|
+
// Get the original image dimensions
|
|
147
|
+
const originalWidth = resizeImage.width;
|
|
148
|
+
const originalHeight = resizeImage.height;
|
|
149
|
+
// Calculate the aspect ratio
|
|
150
|
+
const aspectRatio = originalWidth / originalHeight;
|
|
151
|
+
// Calculate the new width and height while maintaining the aspect ratio
|
|
152
|
+
let newWidth = this._resizeCanvasHeight;
|
|
153
|
+
let newHeight = this._resizeCanvasHeight;
|
|
154
|
+
if (originalWidth > originalHeight) {
|
|
155
|
+
newHeight = this._resizeCanvasHeight / aspectRatio;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
newWidth = this._resizeCanvasHeight * aspectRatio;
|
|
159
|
+
}
|
|
160
|
+
// Set the canvas size to the new width and height
|
|
161
|
+
resizeCanvas.width = newWidth;
|
|
162
|
+
resizeCanvas.height = newHeight;
|
|
163
|
+
const imageWidth = this._resizeCanvasHeight * (resizeImage.height / resizeImage.width);
|
|
164
|
+
resizeCanvasContext.drawImage(resizeImage, 0, 0, newWidth, newHeight);
|
|
165
|
+
const resizedSource = resizeCanvas.toDataURL('image/jpeg');
|
|
166
|
+
imageViewModel.source = this._domSanitizer.bypassSecurityTrustUrl(resizedSource);
|
|
167
|
+
imageViewModel.originalSource = source;
|
|
168
|
+
});
|
|
169
|
+
// @ts-ignore
|
|
170
|
+
resizeImage.src = source;
|
|
171
|
+
}
|
|
117
172
|
_scrollCarouselToIndex() {
|
|
118
173
|
if (this.currentIndex > -1 && this.currentIndex <= this.images.length) {
|
|
119
174
|
const movePx = this.currentIndex * this.carousel.nativeElement.clientWidth;
|
|
@@ -131,45 +186,47 @@ ImageCarouselComponent.decorators = [
|
|
|
131
186
|
{ type: Component, args: [{
|
|
132
187
|
selector: 'app-image-carousel',
|
|
133
188
|
template: `
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
189
|
+
<div id="product_page_carousel">
|
|
190
|
+
<div id="product_page_carousel_items">
|
|
191
|
+
<co-loader [isShown]="true" *ngIf="showLoader"></co-loader>
|
|
192
|
+
<div #carousel class="inner-carousel">
|
|
193
|
+
<!-- This has been taken out of the for loop to prevent flashing images when updating. -->
|
|
194
|
+
<div *ngIf="imageViewModels[0]" class="carousel-item" [id]="'slide-0'" [class.active]="isCurrentIndex(0)" (click)="handleShowImage(imageViewModels[0])">
|
|
195
|
+
<img [src]="imageViewModels[0].source">
|
|
196
|
+
</div>
|
|
197
|
+
<div *ngFor="let imageViewModel of imageViewModels.slice(1); let index = index" class="carousel-item"
|
|
198
|
+
[id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))" (click)="handleShowImage(imageViewModel)">
|
|
199
|
+
<img [src]="imageViewModel.source">
|
|
200
|
+
</div>
|
|
201
|
+
<div class="carousel-scroller-layer" *ngIf="imageViewModels && imageViewModels.length > 1">
|
|
202
|
+
<div class="carousel-item-scroller prev" (click)="gotoPrevSlide()" *ngIf="currentIndex > 0"></div>
|
|
203
|
+
<div class="carousel-item-scroller next" (click)="gotoNextSlide()" *ngIf="currentIndex < images.length - 1"></div>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
<!--
|
|
207
|
+
<co-icon class="selector-type-icon refresh-button" [iconData]="iconCache.getIcon(icons.Refresh)" (click)="onForceRenderImage()" [class.loading]="showLoader" *ngIf="showRefresh"></co-icon>
|
|
208
|
+
-->
|
|
141
209
|
</div>
|
|
142
|
-
<div *ngFor="let image of images.slice(1); let index = index" class="carousel-item" [id]="'slide-' + (index + 1)" [class.active]="isCurrentIndex((index + 1))">
|
|
143
|
-
<img [src]="getImageSrc(image)">
|
|
144
|
-
</div>
|
|
145
|
-
<div class="carousel-scroller-layer" *ngIf="images && images.length > 1">
|
|
146
|
-
<div class="carousel-item-scroller prev" (click)="gotoPrevSlide()" *ngIf="currentIndex > 0"></div>
|
|
147
|
-
<div class="carousel-item-scroller next" (click)="gotoNextSlide()" *ngIf="currentIndex < images.length - 1"></div>
|
|
148
|
-
</div>
|
|
149
|
-
</div>
|
|
150
|
-
<!--
|
|
151
|
-
<co-icon class="selector-type-icon refresh-button" [iconData]="iconCache.getIcon(icons.Refresh)" (click)="onForceRenderImage()" [class.loading]="showLoader" *ngIf="showRefresh"></co-icon>
|
|
152
|
-
-->
|
|
153
|
-
</div>
|
|
154
210
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
211
|
+
<div id="product_page_carousel_thumbs">
|
|
212
|
+
<co-scroll-container class="scroll-container" *ngIf="imageViewModels && imageViewModels.length > 1">
|
|
213
|
+
<div *ngFor="let imageViewModel of imageViewModels; let index = index" class="carousel-thumb"
|
|
214
|
+
[class.active]="index === currentIndex">
|
|
215
|
+
<img [src]="imageViewModel.source" (click)="handleThumbClick(index)"/>
|
|
216
|
+
</div>
|
|
217
|
+
</co-scroll-container>
|
|
159
218
|
</div>
|
|
160
|
-
</co-scroll-container>
|
|
161
219
|
</div>
|
|
162
|
-
</div>
|
|
163
220
|
`,
|
|
164
|
-
|
|
221
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
222
|
+
styles: [":host{max-height:540px;height:100%;position:relative}:host:not(.resizing) .inner-carousel{scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}#product_page_carousel{position:relative}#product_page_carousel .refresh-button{position:absolute;bottom:10px;right:10px;background:#fff}#product_page_carousel .refresh-button.loading{animation:spin 1s linear infinite}#product_page_carousel .refresh-button:hover{box-shadow:none;background:#74B77F;transition:all .2s ease-in-out}#product_page_carousel .refresh-button:hover ::ng-deep svg path{fill:#fff!important}#product_page_carousel #product_page_carousel_items{position:relative;margin-bottom:10px}#product_page_carousel #product_page_carousel_items ::ng-deep co-loader{position:absolute}#product_page_carousel .inner-carousel{display:flex;flex-direction:row;align-items:center;overflow:hidden;max-height:500px;border:1px solid #efefef}#product_page_carousel .carousel-item{max-height:500px;width:100%;display:flex;cursor:zoom-in;flex-shrink:0;flex-grow:0}#product_page_carousel .carousel-item img{width:100%;height:auto;-o-object-fit:contain;object-fit:contain}#product_page_carousel .carousel-scroller-layer{height:100%;width:100%;position:absolute;pointer-events:none;top:0;left:0}#product_page_carousel #product_page_carousel_thumbs{display:flex;justify-content:flex-start;height:80px;margin-left:auto;margin-right:auto}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container{padding:0 22px}#product_page_carousel #product_page_carousel_thumbs ::ng-deep co-scroll-container .content-wrapper{padding:0}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb{opacity:1;cursor:pointer;transition:all .2s ease;padding:4px;border:1px solid #f6f5f4}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb.active,#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:hover{border-color:#22313c}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb:not(:last-child){margin-right:10px}#product_page_carousel #product_page_carousel_thumbs .carousel-thumb img{height:68px}@media screen and (max-width: 650px){#product_page_carousel_thumbs{height:57px!important}#product_page_carousel_thumbs .carousel-thumb img{height:50px!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"]
|
|
165
223
|
},] }
|
|
166
224
|
];
|
|
167
225
|
ImageCarouselComponent.ctorParameters = () => [
|
|
168
226
|
{ type: ProductConnectorService },
|
|
169
227
|
{ type: ProductEventService },
|
|
170
228
|
{ type: ChangeDetectorRef },
|
|
171
|
-
{ type: DomSanitizer }
|
|
172
|
-
{ type: IconCacheService }
|
|
229
|
+
{ type: DomSanitizer }
|
|
173
230
|
];
|
|
174
231
|
ImageCarouselComponent.propDecorators = {
|
|
175
232
|
carousel: [{ type: ViewChild, args: ['carousel', { read: ElementRef },] }],
|
|
@@ -180,4 +237,4 @@ ImageCarouselComponent.propDecorators = {
|
|
|
180
237
|
gotoPrevSlide: [{ type: HostListener, args: ['swiperight',] }],
|
|
181
238
|
resizing: [{ type: HostBinding, args: ['class.resizing',] }]
|
|
182
239
|
};
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2ltYWdlLWNhcm91c2VsL2ltYWdlLWNhcm91c2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFlBQVksRUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBc0NoRSxNQUFNLE9BQU8sc0JBQXNCO0lBb0VqQyxZQUNVLEtBQThCLEVBQzlCLGdCQUFxQyxFQUNyQyxlQUFrQyxFQUNsQyxhQUEyQixFQUM1QixTQUEyQjtRQUoxQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQXZFcEIsVUFBSyxHQUFvQixRQUFRLENBQUM7UUFFM0MsZUFBVSxHQUFZLEtBQUssQ0FBQztRQU01QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQTZDN0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVFoQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUVsQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFTakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN6RSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksVUFBVSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUN2QjtZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFFSixDQUFDO0lBN0VELElBQ1csTUFBTSxDQUFDLEtBQW1CO1FBQ25DLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUdNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBR00sYUFBYTtRQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUdNLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBYTtRQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFlBQVksQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFLRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQWdDRCxRQUFRO0lBQ1IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTSxXQUFXLENBQUMsS0FBK0I7UUFDaEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUM7YUFDdEM7U0FDRjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDckMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDdkI7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQW1CO1FBQzVDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLHNDQUFzQyxDQUFDO1lBQ3ZELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO29CQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBd0IsRUFBRSxFQUFFO3dCQUNuRixJQUFJLE9BQU8sRUFBRTs0QkFDWCxDQUFDLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7eUJBQzFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDckUsTUFBTSxNQUFNLEdBQVcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDbkYsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUNoRCx5Q0FBeUM7Z0JBQ3pDLGtCQUFrQjtnQkFDbEIsdUJBQXVCO2dCQUN2QixNQUFNO2FBQ1A7U0FDRjtJQUNILENBQUM7OztZQWhNRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QlQ7O2FBRUY7OztZQTFDUSx1QkFBdUI7WUFDdkIsbUJBQW1CO1lBSG5CLGlCQUFpQjtZQU9sQixZQUFZO1lBRFgsZ0JBQWdCOzs7dUJBNkN0QixTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTswQkFHMUMsS0FBSztxQkFHTCxLQUFLO2lDQVNMLFlBQVksU0FBQyxlQUFlOzRCQVU1QixZQUFZLFNBQUMsV0FBVzs0QkFLeEIsWUFBWSxTQUFDLFlBQVk7dUJBa0J6QixXQUFXLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvRG9jdW1lbnQgfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudCc7XG5pbXBvcnQgeyBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvcHJvZHVjdC1jb25uZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWN0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJY29uRW51bSB9IGZyb20gJy4uLy4uL2VudW0vaWNvbi5lbnVtJztcbmltcG9ydCB7IEljb25DYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2ljb24tY2FjaGUuc2VydmljZSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbWFnZS1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbFwiPlxuICAgICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbF9pdGVtc1wiPlxuICAgICAgICA8Y28tbG9hZGVyIFtpc1Nob3duXT1cInNob3dMb2FkZXJcIj48L2NvLWxvYWRlcj5cbiAgICAgICAgPGRpdiAjY2Fyb3VzZWwgY2xhc3M9XCJpbm5lci1jYXJvdXNlbFwiPlxuICAgICAgICAgIDwhLS0gVGhpcyBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhlIGZvciBsb29wIHRvIHByZXZlbnQgZmxhc2hpbmcgaW1hZ2VzIHdoZW4gdXBkYXRpbmcuIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbWFnZXNbMF1cIiBjbGFzcz1cImNhcm91c2VsLWl0ZW1cIiBbaWRdPVwiJ3NsaWRlLTAnXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0N1cnJlbnRJbmRleCgwKVwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKGltYWdlc1swXSlcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpbWFnZXMuc2xpY2UoMSk7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC1pdGVtXCIgW2lkXT1cIidzbGlkZS0nICsgKGluZGV4ICsgMSlcIiBbY2xhc3MuYWN0aXZlXT1cImlzQ3VycmVudEluZGV4KChpbmRleCArIDEpKVwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKGltYWdlKVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1zY3JvbGxlci1sYXllclwiICpuZ0lmPVwiaW1hZ2VzICYmIGltYWdlcy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtaXRlbS1zY3JvbGxlciBwcmV2XCIgKGNsaWNrKT1cImdvdG9QcmV2U2xpZGUoKVwiICpuZ0lmPVwiY3VycmVudEluZGV4ID4gMFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWl0ZW0tc2Nyb2xsZXIgbmV4dFwiIChjbGljayk9XCJnb3RvTmV4dFNsaWRlKClcIiAqbmdJZj1cImN1cnJlbnRJbmRleCA8IGltYWdlcy5sZW5ndGggLSAxXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuPCEtLVxuICAgICAgICA8Y28taWNvbiBjbGFzcz1cInNlbGVjdG9yLXR5cGUtaWNvbiByZWZyZXNoLWJ1dHRvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGUuZ2V0SWNvbihpY29ucy5SZWZyZXNoKVwiIChjbGljayk9XCJvbkZvcmNlUmVuZGVySW1hZ2UoKVwiIFtjbGFzcy5sb2FkaW5nXT1cInNob3dMb2FkZXJcIiAqbmdJZj1cInNob3dSZWZyZXNoXCI+PC9jby1pY29uPlxuLS0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbF90aHVtYnNcIj5cbiAgICAgICAgPGNvLXNjcm9sbC1jb250YWluZXIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpbWFnZXMgJiYgaW1hZ2VzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBpbWFnZXM7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC10aHVtYlwiIFtjbGFzcy5hY3RpdmVdPVwiaW5kZXggPT09IGN1cnJlbnRJbmRleFwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEltYWdlU3JjKGltYWdlKVwiIChjbGljayk9XCJoYW5kbGVUaHVtYkNsaWNrKGluZGV4KVwiLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jby1zY3JvbGwtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWNhcm91c2VsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VDYXJvdXNlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uRW51bSA9IEljb25FbnVtO1xuXG4gIHB1YmxpYyBzaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY2Fyb3VzZWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHVibGljIGNhcm91c2VsOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW1hZ2VzKHZhbHVlOiBDb0RvY3VtZW50W10pIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5faW1hZ2VzID0gdGhpcy5fZmlsdGVyVmFsaWRJbWFnZXModmFsdWUpO1xuICAgICAgdGhpcy5fbG9hZEltYWdlcygpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwdWJsaWMgaGFuZGxlV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXppbmcgPSB0cnVlO1xuICAgIHRoaXMuX3Njcm9sbENhcm91c2VsVG9JbmRleCgpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVUaW1lcik7XG4gICAgdGhpcy5fcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVzaXppbmcgPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignc3dpcGVsZWZ0JylcbiAgcHVibGljIGdvdG9OZXh0U2xpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXgrKztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3N3aXBlcmlnaHQnKVxuICBwdWJsaWMgZ290b1ByZXZTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICB9XG5cbiAgcHVibGljIGlzQ3VycmVudEluZGV4KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPT09IGluZGV4O1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50SW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEluZGV4O1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50SW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IHZhbHVlO1xuICAgIHRoaXMuX3Njcm9sbENhcm91c2VsVG9JbmRleCgpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXNpemluZycpXG4gIHB1YmxpYyByZXNpemluZyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgaW1hZ2VzKCk6IENvRG9jdW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlcztcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2l6ZVRpbWVyOiBhbnk7XG5cbiAgcHJpdmF0ZSBfY3VycmVudEluZGV4ID0gMDtcblxuICBwcml2YXRlIF9pbWFnZXMgPSBbXTtcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pb25lOiBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IFByb2R1Y3RFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHB1YmxpYyBpY29uQ2FjaGU6IEljb25DYWNoZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3N1YnMucHVzaChcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vblJlbmRlclN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uRHJhZnRSZW5kZXJJbWFnZVJlY2VpdmVkLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlc1swXSBpbnN0YW5jZW9mIENvRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9pbWFnZXMudW5zaGlmdCh1cmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2ltYWdlc1swXSA9IHVybDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jYXJvdXNlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVRodW1iQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JjZVJlbmRlckltYWdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkZvcmNlUmVuZGVySW1hZ2UubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGdldEltYWdlU3JjKGltYWdlOiBDb0RvY3VtZW50IHwgQ3VzdG9tRXZlbnQpOiBTYWZlVXJsIHtcbiAgICBsZXQgc291cmNlID0gJyc7XG4gICAgaWYgKGltYWdlIGluc3RhbmNlb2YgQ29Eb2N1bWVudCkge1xuICAgICAgaWYgKGltYWdlLmZpbGVQYXRoKSB7XG4gICAgICAgIHNvdXJjZSA9IGltYWdlLmZpbGVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlID0gaW1hZ2UuZG9jdW1lbnRCb2R5QXNEYXRhVXJpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1hZ2UuZGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvdXJjZSA9IGltYWdlLmRldGFpbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlclZhbGlkSW1hZ2VzKHZhbHVlOiBDb0RvY3VtZW50W10pOiBDb0RvY3VtZW50W10ge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcihkb2MgPT4ge1xuICAgICAgY29uc3QgcGF0dGVybiA9IC9cXC4oanBnfGpwZWd8cG5nfGdpZnxibXB8dGlmZnx3ZWJwKSQvaTtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoZG9jLmZpbGVOYW1lKSB8fCAhIWRvYy5maWxlUGF0aDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRJbWFnZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ltYWdlcykge1xuICAgICAgdGhpcy5faW1hZ2VzLmZvckVhY2goKGk6IENvRG9jdW1lbnQpID0+IHtcbiAgICAgICAgaWYgKCFpLmRvY3VtZW50Qm9keSAmJiAhaS5maWxlUGF0aCkge1xuICAgICAgICAgIHRoaXMuX2lvbmUuZ2V0RG9jdW1lbnRDb250ZW50KGkuZG9jdW1lbnRJZCwgZmFsc2UpLnRoZW4oKGNvbnRlbnQ6IERvY3VtZW50Q29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgaS5kb2N1bWVudEJvZHkgPSBjb250ZW50LmRvY3VtZW50Q29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+IC0xICYmIHRoaXMuY3VycmVudEluZGV4IDw9IHRoaXMuaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbW92ZVB4OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGlmICh0aGlzLmNhcm91c2VsICYmIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IG1vdmVQeDtcbiAgICAgICAgLy8gdGhpcy5jYXJvdXNlbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgLy8gICBsZWZ0OiBtb3ZlUHgsXG4gICAgICAgIC8vICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIC8vIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2ltYWdlLWNhcm91c2VsL2ltYWdlLWNhcm91c2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFFTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBR3hFLE9BQU8sRUFBQyxZQUFZLEVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUdoRSxNQUFNLE9BQU8sY0FBYztDQUkxQjtBQXdDRCxNQUFNLE9BQU8sc0JBQXNCO0lBa0VqQyxZQUNVLEtBQThCLEVBQzlCLGdCQUFxQyxFQUNyQyxlQUFrQyxFQUNsQyxhQUEyQjtRQUgzQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBQ3JDLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQWpFOUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFpRDdCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHM0Isa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsWUFBTyxHQUE0QixFQUFFLENBQUM7UUFDdEMsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFFM0Isd0JBQW1CLEdBQVcs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Tyx1QkFBdUI7WUFDdkIsbUJBQW1CO1lBWHpCLGlCQUFpQjtZQWNYLFlBQVk7Ozt1QkFnRGpCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDOzBCQUd4QyxLQUFLO3FCQUdMLEtBQUs7aUNBYUwsWUFBWSxTQUFDLGVBQWU7NEJBVTVCLFlBQVksU0FBQyxXQUFXOzRCQUt4QixZQUFZLFNBQUMsWUFBWTt1QkFrQnpCLFdBQVcsU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb0RvY3VtZW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudCc7XG5pbXBvcnQge1Byb2R1Y3RDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9kdWN0RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi9lbnVtL2ljb24uZW51bSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XG5cbmV4cG9ydCBjbGFzcyBJbWFnZVZpZXdNb2RlbCB7XG4gIHB1YmxpYyBpbWFnZTogQ29Eb2N1bWVudCB8IHN0cmluZztcbiAgcHVibGljIHNvdXJjZTogU2FmZVVybDtcbiAgcHVibGljIG9yaWdpbmFsU291cmNlOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbWFnZS1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IGlkPVwicHJvZHVjdF9wYWdlX2Nhcm91c2VsXCI+XG4gICAgICAgICAgPGRpdiBpZD1cInByb2R1Y3RfcGFnZV9jYXJvdXNlbF9pdGVtc1wiPlxuICAgICAgICAgICAgICA8Y28tbG9hZGVyIFtpc1Nob3duXT1cInRydWVcIiAqbmdJZj1cInNob3dMb2FkZXJcIj48L2NvLWxvYWRlcj5cbiAgICAgICAgICAgICAgPGRpdiAjY2Fyb3VzZWwgY2xhc3M9XCJpbm5lci1jYXJvdXNlbFwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBUaGlzIGhhcyBiZWVuIHRha2VuIG91dCBvZiB0aGUgZm9yIGxvb3AgdG8gcHJldmVudCBmbGFzaGluZyBpbWFnZXMgd2hlbiB1cGRhdGluZy4gLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW1hZ2VWaWV3TW9kZWxzWzBdXCIgY2xhc3M9XCJjYXJvdXNlbC1pdGVtXCIgW2lkXT1cIidzbGlkZS0wJ1wiIFtjbGFzcy5hY3RpdmVdPVwiaXNDdXJyZW50SW5kZXgoMClcIiAoY2xpY2spPVwiaGFuZGxlU2hvd0ltYWdlKGltYWdlVmlld01vZGVsc1swXSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VWaWV3TW9kZWxzWzBdLnNvdXJjZVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZVZpZXdNb2RlbCBvZiBpbWFnZVZpZXdNb2RlbHMuc2xpY2UoMSk7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidzbGlkZS0nICsgKGluZGV4ICsgMSlcIiBbY2xhc3MuYWN0aXZlXT1cImlzQ3VycmVudEluZGV4KChpbmRleCArIDEpKVwiIChjbGljayk9XCJoYW5kbGVTaG93SW1hZ2UoaW1hZ2VWaWV3TW9kZWwpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlVmlld01vZGVsLnNvdXJjZVwiPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtc2Nyb2xsZXItbGF5ZXJcIiAqbmdJZj1cImltYWdlVmlld01vZGVscyAmJiBpbWFnZVZpZXdNb2RlbHMubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1pdGVtLXNjcm9sbGVyIHByZXZcIiAoY2xpY2spPVwiZ290b1ByZXZTbGlkZSgpXCIgKm5nSWY9XCJjdXJyZW50SW5kZXggPiAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWl0ZW0tc2Nyb2xsZXIgbmV4dFwiIChjbGljayk9XCJnb3RvTmV4dFNsaWRlKClcIiAqbmdJZj1cImN1cnJlbnRJbmRleCA8IGltYWdlcy5sZW5ndGggLSAxXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS1cbiAgICAgICAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cInNlbGVjdG9yLXR5cGUtaWNvbiByZWZyZXNoLWJ1dHRvblwiIFtpY29uRGF0YV09XCJpY29uQ2FjaGUuZ2V0SWNvbihpY29ucy5SZWZyZXNoKVwiIChjbGljayk9XCJvbkZvcmNlUmVuZGVySW1hZ2UoKVwiIFtjbGFzcy5sb2FkaW5nXT1cInNob3dMb2FkZXJcIiAqbmdJZj1cInNob3dSZWZyZXNoXCI+PC9jby1pY29uPlxuICAgICAgICAgICAgICAtLT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgaWQ9XCJwcm9kdWN0X3BhZ2VfY2Fyb3VzZWxfdGh1bWJzXCI+XG4gICAgICAgICAgICAgIDxjby1zY3JvbGwtY29udGFpbmVyIGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiICpuZ0lmPVwiaW1hZ2VWaWV3TW9kZWxzICYmIGltYWdlVmlld01vZGVscy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWFnZVZpZXdNb2RlbCBvZiBpbWFnZVZpZXdNb2RlbHM7IGxldCBpbmRleCA9IGluZGV4XCIgY2xhc3M9XCJjYXJvdXNlbC10aHVtYlwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaW5kZXggPT09IGN1cnJlbnRJbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVZpZXdNb2RlbC5zb3VyY2VcIiAoY2xpY2spPVwiaGFuZGxlVGh1bWJDbGljayhpbmRleClcIi8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jby1zY3JvbGwtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjYXJvdXNlbCcsIHtyZWFkOiBFbGVtZW50UmVmfSlcbiAgcHVibGljIGNhcm91c2VsOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW1hZ2VzKHZhbHVlOiAoQ29Eb2N1bWVudCB8IHN0cmluZylbXSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbWFnZXMgPSB0aGlzLl9maWx0ZXJWYWxpZEltYWdlcyh2YWx1ZSk7XG4gICAgICB0aGlzLl9sb2FkQW5kUmVzY2FsZUltYWdlcygpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW1hZ2VzKCk6IChDb0RvY3VtZW50IHwgc3RyaW5nKVtdIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VzO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBoYW5kbGVXaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemluZyA9IHRydWU7XG4gICAgdGhpcy5fc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZVRpbWVyKTtcbiAgICB0aGlzLl9yZXNpemVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemluZyA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdzd2lwZWxlZnQnKVxuICBwdWJsaWMgZ290b05leHRTbGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignc3dpcGVyaWdodCcpXG4gIHB1YmxpYyBnb3RvUHJldlNsaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEluZGV4LS07XG4gIH1cblxuICBwdWJsaWMgaXNDdXJyZW50SW5kZXgoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA9PT0gaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50SW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2V0IGN1cnJlbnRJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY3VycmVudEluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5fc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJlc2l6aW5nJylcbiAgcHVibGljIHJlc2l6aW5nID0gZmFsc2U7XG5cbiAgcHVibGljIGltYWdlVmlld01vZGVsczogSW1hZ2VWaWV3TW9kZWxbXSA9IFtdO1xuICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Jlc2l6ZVRpbWVyOiBhbnk7XG4gIHByaXZhdGUgX2N1cnJlbnRJbmRleCA9IDA7XG4gIHByaXZhdGUgX2ltYWdlczogKENvRG9jdW1lbnQgfCBzdHJpbmcpW10gPSBbXTtcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIF9yZXNpemVDYW52YXNIZWlnaHQ6IG51bWJlciA9IDUwMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pb25lOiBQcm9kdWN0Q29ubmVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IFByb2R1Y3RFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkge1xuICAgIHRoaXMuX3N1YnMucHVzaChcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vblJlbmRlclN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICAgIH0pLFxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uRHJhZnRSZW5kZXJJbWFnZVJlY2VpdmVkLnN1YnNjcmliZSgoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5kZXRhaWwpIHtcbiAgICAgICAgICBpZiAodGhpcy5faW1hZ2VzWzBdIGluc3RhbmNlb2YgQ29Eb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW1hZ2VzLnVuc2hpZnQoZXZlbnQuZGV0YWlsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW1hZ2VzWzBdID0gZXZlbnQuZGV0YWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9sb2FkQW5kUmVzY2FsZUltYWdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhcm91c2VsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlVGh1bWJDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvcmNlUmVuZGVySW1hZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9uRm9yY2VSZW5kZXJJbWFnZS5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlU2hvd0ltYWdlKGltYWdlVmlld01vZGVsOiBJbWFnZVZpZXdNb2RlbCk6IHZvaWQge1xuICAgIGlmIChpbWFnZVZpZXdNb2RlbCAmJiBpbWFnZVZpZXdNb2RlbC5vcmlnaW5hbFNvdXJjZSkge1xuICAgICAgbGV0IHBvcHVwV2luZG93OiBXaW5kb3cgPSB3aW5kb3cub3BlbignJywgJ0ltYWdlIHpvb20nLCAnd2lkdGg9NjAwLGhlaWdodD00MDAnKTtcbiAgICAgIC8vIFNldCB0aGUgY29udGVudCBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAgICBwb3B1cFdpbmRvdy5kb2N1bWVudC53cml0ZSgnPGh0bWw+PGhlYWQ+PHRpdGxlPkltYWdlIHpvb208L3RpdGxlPjwvaGVhZD48Ym9keT4nKTtcbiAgICAgIHBvcHVwV2luZG93LmRvY3VtZW50LndyaXRlKGA8aW1nIHNyYz0ke2ltYWdlVmlld01vZGVsLm9yaWdpbmFsU291cmNlfSBhbHQ9XCJJbWFnZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OmF1dG87XCI+YCk7XG4gICAgICBwb3B1cFdpbmRvdy5kb2N1bWVudC53cml0ZSgnPC9ib2R5PjwvaHRtbD4nKTtcbiAgICAgIC8vIENsb3NlIHRoZSBkb2N1bWVudCB0byByZW5kZXIgdGhlIHBvcHVwIHdpbmRvd1xuICAgICAgcG9wdXBXaW5kb3cuZG9jdW1lbnQuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJWYWxpZEltYWdlcyh2YWx1ZTogKENvRG9jdW1lbnQgfCBzdHJpbmcpW10pOiAoQ29Eb2N1bWVudCB8IHN0cmluZylbXSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUuZmlsdGVyKChkb2M6IENvRG9jdW1lbnQgfCBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSAvXFwuKGpwZ3xqcGVnfHBuZ3xnaWZ8Ym1wfHRpZmZ8d2VicCkkL2k7XG4gICAgICByZXR1cm4gdHlwZW9mIGRvYyA9PT0gJ3N0cmluZycgfHwgKHBhdHRlcm4udGVzdChkb2MuZmlsZU5hbWUpIHx8ICEhZG9jLmZpbGVQYXRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRBbmRSZXNjYWxlSW1hZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuaW1hZ2VWaWV3TW9kZWxzLmxlbmd0aCA9IDA7XG4gICAgaWYgKHRoaXMuX2ltYWdlcykge1xuICAgICAgdGhpcy5faW1hZ2VzLmZvckVhY2goKGk6IENvRG9jdW1lbnQgfCBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGltYWdlVmlld01vZGVsID0gbmV3IEltYWdlVmlld01vZGVsKCk7XG4gICAgICAgIGltYWdlVmlld01vZGVsLmltYWdlID0gaTtcbiAgICAgICAgaWYgKHR5cGVvZiBpID09PSAnc3RyaW5nJykgeyAvLyBpcyBhIHJlbmRlcmVkIGltYWdlIGNvbWluZyBmcm9tIGNvbmZpZ3VyYXRvclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZUFuZFNhbml0aXplU291cmNlKGksIGltYWdlVmlld01vZGVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaS5maWxlUGF0aCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplQW5kU2FuaXRpemVTb3VyY2UoaS5maWxlUGF0aCwgaW1hZ2VWaWV3TW9kZWwpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaS5kb2N1bWVudEJvZHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZUFuZFNhbml0aXplU291cmNlKGkuZG9jdW1lbnRCb2R5QXNEYXRhVXJpLCBpbWFnZVZpZXdNb2RlbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lvbmUuZ2V0RG9jdW1lbnRDb250ZW50KGkuZG9jdW1lbnRJZCwgZmFsc2UpLnRoZW4oKGNvbnRlbnQ6IERvY3VtZW50Q29udGVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgICAgIGkuZG9jdW1lbnRCb2R5ID0gY29udGVudC5kb2N1bWVudENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplQW5kU2FuaXRpemVTb3VyY2UoaS5kb2N1bWVudEJvZHlBc0RhdGFVcmksIGltYWdlVmlld01vZGVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlVmlld01vZGVscy5wdXNoKGltYWdlVmlld01vZGVsKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzaXplQW5kU2FuaXRpemVTb3VyY2Uoc291cmNlOiBzdHJpbmcsIGltYWdlVmlld01vZGVsOiBJbWFnZVZpZXdNb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc2l6ZUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjb25zdCByZXNpemVDYW52YXNDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgPSByZXNpemVDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb25zdCByZXNpemVJbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHJlc2l6ZUltYWdlLm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHJlc2l6ZUNhbnZhc0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIHJlc2l6ZUNhbnZhc0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdRdWFsaXR5ID0gJ2hpZ2gnO1xuICAgICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBpbWFnZSBkaW1lbnNpb25zXG4gICAgICBjb25zdCBvcmlnaW5hbFdpZHRoID0gcmVzaXplSW1hZ2Uud2lkdGg7XG4gICAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHJlc2l6ZUltYWdlLmhlaWdodDtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhc3BlY3QgcmF0aW9cbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gb3JpZ2luYWxXaWR0aCAvIG9yaWdpbmFsSGVpZ2h0O1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHdoaWxlIG1haW50YWluaW5nIHRoZSBhc3BlY3QgcmF0aW9cbiAgICAgIGxldCBuZXdXaWR0aDogbnVtYmVyID0gdGhpcy5fcmVzaXplQ2FudmFzSGVpZ2h0O1xuICAgICAgbGV0IG5ld0hlaWdodDogbnVtYmVyID0gdGhpcy5fcmVzaXplQ2FudmFzSGVpZ2h0O1xuXG4gICAgICBpZiAob3JpZ2luYWxXaWR0aCA+IG9yaWdpbmFsSGVpZ2h0KSB7XG4gICAgICAgIG5ld0hlaWdodCA9IHRoaXMuX3Jlc2l6ZUNhbnZhc0hlaWdodCAvIGFzcGVjdFJhdGlvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3V2lkdGggPSB0aGlzLl9yZXNpemVDYW52YXNIZWlnaHQgKiBhc3BlY3RSYXRpbztcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBjYW52YXMgc2l6ZSB0byB0aGUgbmV3IHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgIHJlc2l6ZUNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgcmVzaXplQ2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcblxuICAgICAgY29uc3QgaW1hZ2VXaWR0aDogbnVtYmVyID0gdGhpcy5fcmVzaXplQ2FudmFzSGVpZ2h0ICogKHJlc2l6ZUltYWdlLmhlaWdodCAvIHJlc2l6ZUltYWdlLndpZHRoKTtcbiAgICAgIHJlc2l6ZUNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKHJlc2l6ZUltYWdlLCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICAgIGNvbnN0IHJlc2l6ZWRTb3VyY2UgPSByZXNpemVDYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XG5cbiAgICAgIGltYWdlVmlld01vZGVsLnNvdXJjZSA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHJlc2l6ZWRTb3VyY2UpO1xuICAgICAgaW1hZ2VWaWV3TW9kZWwub3JpZ2luYWxTb3VyY2UgPSBzb3VyY2U7XG4gICAgfTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmVzaXplSW1hZ2Uuc3JjID0gc291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsQ2Fyb3VzZWxUb0luZGV4KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+IC0xICYmIHRoaXMuY3VycmVudEluZGV4IDw9IHRoaXMuaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbW92ZVB4OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRJbmRleCAqIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGlmICh0aGlzLmNhcm91c2VsICYmIHRoaXMuY2Fyb3VzZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IG1vdmVQeDtcbiAgICAgICAgLy8gdGhpcy5jYXJvdXNlbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgLy8gICBsZWZ0OiBtb3ZlUHgsXG4gICAgICAgIC8vICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIC8vIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
@@ -21,6 +21,7 @@ export class ProductExternalSourceComponent {
|
|
|
21
21
|
this.externalSettings = {};
|
|
22
22
|
this.token = ""; //= "eyJhbGciOiJSUzI1NiIsImtpZCI6IkYxOThERkVEOEUwQTQ1MzY3M0M1MUE2Rjk1QUVDQzU3RTM0NjM4RkRSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6IjhaamY3WTRLUlRaenhScHZsYTdNVi1OR09QMCJ9.eyJuYmYiOjE3MzIxOTkyOTUsImV4cCI6MTczMjIwMjg5NSwiaXNzIjoiaHR0cHM6Ly9ibXNpZGVudGl0eS1hY2NlcHRhbmNlLmF6dXJld2Vic2l0ZXMubmV0IiwiYXVkIjpbImNhdGFsb2dxdWVyeWFwaSIsImNvbmZpZ3VyYXRvcmFwaSIsInByb2R1Y3R2YXJpYW50Y29tbWFuZGFwaSIsInByb2R1Y3R2YXJpYW50cXVlcnlhcGkiXSwiY2xpZW50X2lkIjoiaW1wZXJzb25hdGlvbi5jbGllbnQiLCJzdWIiOiIwOTMwZDI4Mi05NGU4LTQ5MGEtOGI2NC1mYTk1YmIyYzE1ODIiLCJhdXRoX3RpbWUiOjE3MzIxOTkyOTUsImlkcCI6ImxvY2FsIiwiZW52aXJvbm1lbnQiOiJNU0wiLCJzZWxsZXIiOiJTRTAwMDA5NiIsInNlbGxlcmd1aWQiOiIxMDk1MWJjNS1hZmMzLTQ1MGEtNmVkMS0wOGQ4NDNlNmE5OTQiLCJwZXJtaXNzaW9uIjpbInNhbGVzLmV4cG9ydHRlbXBsYXRlcy5yZWFkIiwiZG9jdW1lbnRsaWJyYXJ5LnRhZy5yZWFkIiwiZG9jdW1lbnRsaWJyYXJ5LmRvY3VtZW50LnJlYWQiLCJkb2N1bWVudGxpYnJhcnkudGFnZ3JvdXAucmVhZCIsInNhbGVzLm9yZGVyLndyaXRlIiwic2FsZXMuY3VzdG9tZXIucmVhZCIsInNhbGVzLm9yZGVyLmRlbGl2ZXJ5YWRkcmVzcy53cml0ZSIsInNlcnZpY2UucmVxdWVzdC5yZWFkIiwiY2F0YWxvZy50YWcucmVhZCIsInNhbGVzLm9yZGVyLnJlYWQiLCJzYWxlcy5jdXN0b21lci53cml0ZSIsInJlcXVlc3Rmb3JxdW90ZS53cml0ZSIsInNhbGVzLm9yZGVyLmJvb2siLCJyZXF1ZXN0Zm9ycXVvdGUucmVhZCIsInNhbGVzLmxlYWQucmVhZCIsInB1cmNoYXNlLm9yZGVyLnJlYWQiLCJzYWxlcy5xdW90ZS5yZWFkIiwic2FsZXMucXVvdGUud3JpdGUiLCJjYXRhbG9nLml0ZW0ucmVhZCIsInNhbGVzLmxlYWQud3JpdGUiLCJzZXJ2aWNlLnJlcXVlc3Quc3VibWl0Iiwic2FsZXMub3JkZXIuZGVsaXZlcnlhZGRyZXNzLnJlYWQiLCJwdXJjaGFzZS5vcmRlci53cml0ZSIsInB1cmNoYXNlLm9yZGVyLnByaWNlcy53cml0ZSIsInB1cmNoYXNlLm9yZGVyLnByaWNlcy5yZWFkIiwic2VydmljZS5yZXF1ZXN0LndyaXRlIiwiY2F0YWxvZy5jYXRhbG9nLnJlYWQiLCJjYXRhbG9nLmNhdGFsb2cud3JpdGUiLCJjYXRhbG9nLmN1cnJlbmN5LnJlYWQiLCJjYXRhbG9nLmN1cnJlbmN5LndyaXRlIiwiY2F0YWxvZy5pdGVtLndyaXRlIiwiY2F0YWxvZy5sb2NhbGl6YXRpb24ucmVhZCIsImNhdGFsb2cubG9jYWxpemF0aW9uLndyaXRlIiwiY2F0YWxvZy5wcm9kdWN0LnJlYWQiLCJjYXRhbG9nLnByb2R1Y3Qud3JpdGUiLCJjYXRhbG9nLnByb2R1Y3RzZXR0aW5nLnJlYWQiLCJjYXRhbG9nLnByb2R1Y3RzZXR0aW5nLndyaXRlIiwiY2F0YWxvZy5zZWxsZXIucmVhZCIsImNhdGFsb2cuc2VsbGVyLndyaXRlIiwiY2F0YWxvZy50YWcud3JpdGUiLCJjYXRhbG9nLnVvbS5yZWFkIiwiY2F0YWxvZy51b20ud3JpdGUiLCJjYXRhbG9nLnZhdGNhdGVnb3J5LnJlYWQiLCJjYXRhbG9nLnZhdGNhdGVnb3J5LndyaXRlIiwiY2F0YWxvZy52ZW5kb3IucmVhZCIsImNhdGFsb2cudmVuZG9yLndyaXRlIiwicHVyY2hhc2Uuc2VsbGVyLnJlYWQiLCJwdXJjaGFzZS5zZWxsZXIud3JpdGUiLCJjYXRhbG9nLmFydGljbGUucmVhZCIsImNhdGFsb2cuYXJ0aWNsZS53cml0ZSIsInNhbGVzLnF1b3RlLmxpbmVzLnJlYWQiLCJzYWxlcy5xdW90ZS5saW5lcy53cml0ZSIsInNhbGVzLnNlbGxlci5yZWFkIiwic2FsZXMuc2VsbGVyLndyaXRlIiwiYWNjb3VudGluZy52ZW5kb3JpbnZvaWNlLnJlYWQiLCJpZGVudGl0eS51c2VyLnJlYWQiLCJpZGVudGl0eS51c2VyLndyaXRlIiwiaWRlbnRpdHkucm9sZS5yZWFkIiwic2VsbGVyLnByb2R1Y3RwcmljZS5zZXR0aW5ncy5yZWFkIiwic2VsbGVyLnByb2R1Y3RwcmljZS5zZXR0aW5ncy53cml0ZSIsImNvbmZpZ3VyYXRvci5wdXJjaGFzZXByaWNlLnJlYWQiLCJzdG9jay5mYWJyaWMucmVhZCJdLCJuYW1lIjoiUm9iaW4iLCJmYW1pbHlfbmFtZSI6ImRlIFdpbnRlciAoQ29saWpuLUlUKSIsInJvbGUiOlsic2VsbGVyIiwiZGVhbGVyX21hbmFnZXIiXSwiaWF0IjoxNzMyMTk5Mjk1LCJzY29wZSI6WyJjYXRhbG9ncXVlcnlhcGkiLCJjb25maWd1cmF0b3JhcGkiLCJwcm9kdWN0dmFyaWFudGNvbW1hbmRhcGkiLCJwcm9kdWN0dmFyaWFudHF1ZXJ5YXBpIl0sImFtciI6WyJpbXBlcnNvbmF0aW9uIl19.rbguVPnkXXDzsM6QKgXulhrF41jIjCuGDV13ig1GC8MewLCJ7wA038OSwT26sx2mCexjvuGYt45YScfPwfTkDy3ErPmHRods64X1dJWZnf-23NTP2iI32K_1vMZH5GOGbMzuFtbKAFQv4hgFAxoyWqFVWyJvuOtQcWyZStROyPHwjAnpnj-x1cVQpOhbO-kQUFvy_VUrPpF3aYVCcO2cFirQTXR6kxSGcYGGcsPY-_eiAd93UdG2EM6xLAocDLaFV72CQI6XEs0WQG1f4SqvH52v3OTkgWBLgYV35gpyIe0-2nazGL0R8pTNuDqrOb7OGmuTRMoTIiRi67-wTxx8cQ";
|
|
23
23
|
this.variant = "";
|
|
24
|
+
this.urlParams = [];
|
|
24
25
|
this._subs = [];
|
|
25
26
|
}
|
|
26
27
|
set externalSource(value) {
|
|
@@ -32,10 +33,12 @@ export class ProductExternalSourceComponent {
|
|
|
32
33
|
return this._externalSource;
|
|
33
34
|
}
|
|
34
35
|
set externalCatalogStartupInfo(value) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
if (value) {
|
|
37
|
+
this._externalCatalogStartupInfo = value;
|
|
38
|
+
this.externalSource = value.externalSource;
|
|
39
|
+
this.loaded = false;
|
|
40
|
+
this._prepareExternalSource();
|
|
41
|
+
}
|
|
39
42
|
}
|
|
40
43
|
get externalCatalogStartupInfo() {
|
|
41
44
|
return this._externalCatalogStartupInfo;
|
|
@@ -109,6 +112,7 @@ export class ProductExternalSourceComponent {
|
|
|
109
112
|
this.token = this.externalCatalogStartupInfo.token;
|
|
110
113
|
this.sku = this.externalCatalogStartupInfo.externalGoodId;
|
|
111
114
|
this.variant = this.externalCatalogStartupInfo.flattenedGoodId;
|
|
115
|
+
this.urlParams = this.externalCatalogStartupInfo.externalSource.parameters;
|
|
112
116
|
this.switchToConfigurator();
|
|
113
117
|
this.loaded = true;
|
|
114
118
|
}
|
|
@@ -155,6 +159,7 @@ ProductExternalSourceComponent.decorators = [
|
|
|
155
159
|
[sku]="sku"
|
|
156
160
|
[variant]="variant"
|
|
157
161
|
[token]="token"
|
|
162
|
+
[urlParams]="urlParams"
|
|
158
163
|
(configuratorFinished)="handleConfigurationFinished($event)"></co-product-hd>
|
|
159
164
|
</ng-container>
|
|
160
165
|
</ng-container>
|
|
@@ -184,4 +189,4 @@ ProductExternalSourceComponent.propDecorators = {
|
|
|
184
189
|
configuratorFinished: [{ type: Output }],
|
|
185
190
|
showClass: [{ type: HostBinding, args: ['class.co-product-external-source',] }]
|
|
186
191
|
};
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1leHRlcm5hbC1zb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3Byb2R1Y3QtZXh0ZXJuYWwtc291cmNlL3Byb2R1Y3QtZXh0ZXJuYWwtc291cmNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBQyxZQUFZLEVBQWtCLE1BQU0sMkJBQTJCLENBQUM7QUFFeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFaEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0saURBQWlELENBQUM7QUFvQy9GLE1BQU0sT0FBTyw4QkFBOEI7SUFvRXZDLFlBQ1ksVUFBd0IsRUFDeEIsd0JBQWlELEVBQ2pELGdCQUFxQztRQUZyQyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQXBDMUMsY0FBUyxHQUFvRCxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUduSCxlQUFVLEdBQW9ELElBQUksWUFBWSxFQUFxQyxDQUFDO1FBR3BILHFCQUFnQixHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUcxRix5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQU94RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMs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UCxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBb0JUO2dCQUNELFNBQVMsRUFBRTtvQkFDUCxzQkFBc0I7b0JBQ3RCLDhCQUE4QjtvQkFDOUIsdUJBQXVCO2lCQUMxQjtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN4Qzs7O1lBMUNPLFlBQVk7WUFFWix1QkFBdUI7WUFFdkIsbUJBQW1COzs7a0JBeUN0QixLQUFLO2dDQUdMLEtBQUs7NkJBR0wsS0FBSzt5Q0FXTCxLQUFLO3NCQVlMLEtBQUs7d0JBR0wsTUFBTTt5QkFHTixNQUFNOytCQUdOLE1BQU07bUNBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1zb3VyY2UuYm8nO1xyXG5pbXBvcnQge1Byb2R1Y3RDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FydGljbGVMaXN0T2JqZWN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWxpc3Qtb2JqZWN0JztcclxuaW1wb3J0IHtQcm9kdWN0RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtQcm9kdWN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7UHJvZHVjdENvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7Q2F0YWxvZ0RlZmluaXRpb259IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2NhdGFsb2ctZGVmaW5pdGlvbi5ibyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2VBcnRpY2xlQWRkSW50ZXJmYWNlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9pbnRlcmZhY2UvZXh0ZXJuYWwtc291cmNlLWFydGljbGUtYWRkLmludGVyZmFjZSc7XHJcbmltcG9ydCB7QXJ0aWNsZUxpc3RPYmplY3RFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1saXN0LW9iamVjdC1leHRlbmRlZC5ibyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm99IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLWNhdGFsb2ctc3RhcnR1cC1pbmZvJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjby1wcm9kdWN0LWV4dGVybmFsLXNvdXJjZScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZWRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXByb2R1Y3QtcGFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2t1XT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nc109XCJleHRlcm5hbFNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2V4dGVybmFsU291cmNlXT1cImV4dGVybmFsU291cmNlXCJcclxuICAgICAgICAgICAgICAgID48L2FwcC1wcm9kdWN0LXBhZ2U+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1NvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPGlmcmFtZSB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgW3NyY109XCJzYWZlVXJsXCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDb25maWd1cmF0b3JcIj5cclxuICAgICAgICAgICAgICA8Y28tcHJvZHVjdC1oZCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2t1XT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwidmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rva2VuXT1cInRva2VuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlndXJhdG9yRmluaXNoZWQpPVwiaGFuZGxlQ29uZmlndXJhdGlvbkZpbmlzaGVkKCRldmVudClcIj48L2NvLXByb2R1Y3QtaGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgYCxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIFByb2R1Y3RTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgUHJvZHVjdENvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgICAgIFByb2R1Y3RDb25uZWN0b3JTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdEV4dGVybmFsU291cmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2t1OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYXRhbG9nRGVmaW5pdGlvbjogQ2F0YWxvZ0RlZmluaXRpb247XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZXh0ZXJuYWxTb3VyY2UodmFsdWU6IEV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZXh0ZXJuYWxTb3VyY2UgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVFeHRlcm5hbFNvdXJjZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZXh0ZXJuYWxTb3VyY2UoKTogRXh0ZXJuYWxTb3VyY2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRlcm5hbFNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBleHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbyh2YWx1ZTogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8pIHtcclxuICAgICAgdGhpcy5fZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5leHRlcm5hbFNvdXJjZSA9IHZhbHVlLmV4dGVybmFsU291cmNlO1xyXG4gICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9wcmVwYXJlRXh0ZXJuYWxTb3VyY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvKCk6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgb3B0aW9uczoge307XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYWRkVG9DYXJ0OiBFdmVudEVtaXR0ZXI8RXh0ZXJuYWxTb3VyY2VBcnRpY2xlQWRkSW50ZXJmYWNlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RXh0ZXJuYWxTb3VyY2VBcnRpY2xlQWRkSW50ZXJmYWNlPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGFkZFRvUXVvdGU6IEV2ZW50RW1pdHRlcjxFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2U+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYWx0ZXJuYXRpdmVDbGljazogRXZlbnRFbWl0dGVyPEFydGljbGVMaXN0T2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJ0aWNsZUxpc3RPYmplY3Q+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY29uZmlndXJhdG9yRmluaXNoZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1wcm9kdWN0LWV4dGVybmFsLXNvdXJjZScpXHJcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93UHJvZHVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNob3dDb25maWd1cmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzaG93U291cmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2FmZVVybDogU2FmZVJlc291cmNlVXJsO1xyXG4gICAgcHVibGljIGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGV4dGVybmFsVXJsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZXh0ZXJuYWxTZXR0aW5nczogYW55ID0ge307XHJcblxyXG4gICAgcHVibGljIHRva2VuOiBzdHJpbmcgPSBcIlwiOy8vPSBcImV5SmhiR2NpT2lKU1V6STFOaUlzSW10cFpDSTZJa1l4T1RoRVJrVkVPRVV3UVRRMU16WTNNME0xTVVFMlJqazFRVVZEUXpVM1JUTTBOak00UmtSU1V6STFOaUlzSW5SNWNDSTZJbUYwSzJwM2RDSXNJbmcxZENJNklqaGFhbVkzV1RSTFVsUmFlbmhTY0hac1lUZE5WaTFPUjA5UU1DSjkuZXlKdVltWWlPakUzTXpJeE9Ua3lPVFVzSW1WNGNDSTZNVGN6TWpJd01qZzVOU3dpYVhOeklqb2lhSFIwY0hNNkx5OWliWE5wWkdWdWRHbDBlUzFoWTJObGNIUmhibU5sTG1GNmRYSmxkMlZpYzJsMFpYTXVibVYwSWl3aVlYVmtJanBiSW1OaGRHRnNiMmR4ZFdWeWVXRndhU0lzSW1OdmJtWnBaM1Z5WVhSdmNtRndhU0lzSW5CeWIyUjFZM1IyWVhKcFlXNTBZMjl0YldGdVpHRndhU0lzSW5CeWIyUjFZM1IyWVhKcFlXNTBjWFZsY25saGNHa2lYU3dpWTJ4cFpXNTBYMmxrSWpvaWFXMXdaWEp6YjI1aGRHbHZiaTVqYkdsbGJuUWlMQ0p6ZFdJaU9pSXdPVE13WkRJNE1pMDVOR1U0TFRRNU1HRXRPR0kyTkMxbVlUazFZbUl5WXpFMU9ESWlMQ0poZFhSb1gzUnBiV1VpT2pFM016SXhPVGt5T1RVc0ltbGtjQ0k2SW14dlkyRnNJaXdpWlc1MmFYSnZibTFsYm5RaU9pSk5VMHdpTENKelpXeHNaWElpT2lKVFJUQXdNREE1TmlJc0luTmxiR3hsY21kMWFXUWlPaUl4TURrMU1XSmpOUzFoWm1NekxUUTFNR0V0Tm1Wa01TMHdPR1E0TkRObE5tRTVPVFFpTENKd1pYSnRhWE56YVc5dUlqcGJJbk5oYkdWekxtVjRjRzl5ZEhSbGJYQnNZWFJsY3k1eVpXRmtJaXdpWkc5amRXMWxiblJzYVdKeVlYSjVMblJoWnk1eVpXRmtJaXdpWkc5amRXMWxiblJzYVdKeVlYSjVMbVJ2WTNWdFpXNTBMbkpsWVdRaUxDSmtiMk4xYldWdWRHeHBZbkpoY25rdWRHRm5aM0p2ZFhBdWNtVmhaQ0lzSW5OaGJHVnpMbTl5WkdWeUxuZHlhWFJsSWl3aWMyRnNaWE11WTNWemRHOXRaWEl1Y21WaFpDSXNJbk5oYkdWekxtOXlaR1Z5TG1SbGJHbDJaWEo1WVdSa2NtVnpjeTUzY21sMFpTSXNJbk5sY25acFkyVXVjbVZ4ZFdWemRDNXlaV0ZrSWl3aVkyRjBZV3h2Wnk1MFlXY3VjbVZoWkNJc0luTmhiR1Z6TG05eVpHVnlMbkpsWVdRaUxDSnpZV3hsY3k1amRYTjBiMjFsY2k1M2NtbDBaU0lzSW5KbGNYVmxjM1JtYjNKeGRXOTBaUzUzY21sMFpTSXNJbk5oYkdWekxtOXlaR1Z5TG1KdmIyc2lMQ0p5WlhGMVpYTjBabTl5Y1hWdmRHVXVjbVZoWkNJc0luTmhiR1Z6TG14bFlXUXVjbVZoWkNJc0luQjFjbU5vWVhObExtOXlaR1Z5TG5KbFlXUWlMQ0p6WVd4bGN5NXhkVzkwWlM1eVpXRmtJaXdpYzJGc1pYTXVjWFZ2ZEdVdWQzSnBkR1VpTENKallYUmhiRzluTG1sMFpXMHVjbVZoWkNJc0luTmhiR1Z6TG14bFlXUXVkM0pwZEdVaUxDSnpaWEoyYVdObExuSmxjWFZsYzNRdWMzVmliV2wwSWl3aWMyRnNaWE11YjNKa1pYSXVaR1ZzYVhabGNubGhaR1J5WlhOekxuSmxZV1FpTENKd2RYSmphR0Z6WlM1dmNtUmxjaTUzY21sMFpTSXNJbkIxY21Ob1lYTmxMbTl5WkdWeUxuQnlhV05sY3k1M2NtbDBaU0lzSW5CMWNtTm9ZWE5sTG05eVpHVnlMbkJ5YVdObGN5NXlaV0ZrSWl3aWMyVnlkbWxqWlM1eVpYRjFaWE4wTG5keWFYUmxJaXdpWTJGMFlXeHZaeTVqWVhSaGJHOW5MbkpsWVdRaUxDSmpZWFJoYkc5bkxtTmhkR0ZzYjJjdWQzSnBkR1VpTENKallYUmhiRzluTG1OMWNuSmxibU41TG5KbFlXUWlMQ0pqWVhSaGJHOW5MbU4xY25KbGJtTjVMbmR5YVhSbElpd2lZMkYwWVd4dlp5NXBkR1Z0TG5keWFYUmxJaXdpWTJGMFlXeHZaeTVzYjJOaGJHbDZZWFJwYjI0dWNtVmhaQ0lzSW1OaGRHRnNiMmN1Ykc5allXeHBlbUYwYVc5dUxuZHlhWFJsSWl3aVkyRjBZV3h2Wnk1d2NtOWtkV04wTG5KbFlXUWlMQ0pqWVhSaGJHOW5MbkJ5YjJSMVkzUXVkM0pwZEdVaUxDSmpZWFJoYkc5bkxuQnliMlIxWTNSelpYUjBhVzVuTG5KbFlXUWlMQ0pqWVhSaGJHOW5MbkJ5YjJSMVkzUnpaWFIwYVc1bkxuZHlhWFJsSWl3aVkyRjBZV3h2Wnk1elpXeHNaWEl1Y21WaFpDSXNJbU5oZEdGc2IyY3VjMlZzYkdWeUxuZHlhWFJsSWl3aVkyRjBZV3h2Wnk1MFlXY3VkM0pwZEdVaUxDSmpZWFJoYkc5bkxuVnZiUzV5WldGa0lpd2lZMkYwWVd4dlp5NTFiMjB1ZDNKcGRHVWlMQ0pqWVhSaGJHOW5MblpoZEdOaGRHVm5iM0o1TG5KbFlXUWlMQ0pqWVhSaGJHOW5MblpoZEdOaGRHVm5iM0o1TG5keWFYUmxJaXdpWTJGMFlXeHZaeTUyWlc1a2IzSXVjbVZoWkNJc0ltTmhkR0ZzYjJjdWRtVnVaRzl5TG5keWFYUmxJaXdpY0hWeVkyaGhjMlV1YzJWc2JHVnlMbkpsWVdRaUxDSndkWEpqYUdGelpTNXpaV3hzWlhJdWQzSnBkR1VpTENKallYUmhiRzluTG1GeWRHbGpiR1V1Y21WaFpDSXNJbU5oZEdGc2IyY3VZWEowYVdOc1pTNTNjbWwwWlNJc0luTmhiR1Z6TG5GMWIzUmxMbXhwYm1WekxuSmxZV1FpTENKellXeGxjeTV4ZFc5MFpTNXNhVzVsY3k1M2NtbDBaU0lzSW5OaGJHVnpMbk5sYkd4bGNpNXlaV0ZrSWl3aWMyRnNaWE11YzJWc2JHVnlMbmR5YVhSbElpd2lZV05qYjNWdWRHbHVaeTUyWlc1a2IzSnBiblp2YVdObExuSmxZV1FpTENKcFpHVnVkR2wwZVM1MWMyVnlMbkpsWVdRaUxDSnBaR1Z1ZEdsMGVTNTFjMlZ5TG5keWFYUmxJaXdpYVdSbGJuUnBkSGt1Y205c1pTNXlaV0ZrSWl3aWMyVnNiR1Z5TG5CeWIyUjFZM1J3Y21salpTNXpaWFIwYVc1bmN5NXlaV0ZrSWl3aWMyVnNiR1Z5TG5CeWIyUjFZM1J3Y21salpTNXpaWFIwYVc1bmN5NTNjbWwwWlNJc0ltTnZibVpwWjNWeVlYUnZjaTV3ZFhKamFHRnpaWEJ5YVdObExuSmxZV1FpTENKemRHOWpheTVtWVdKeWFXTXVjbVZoWkNKZExDSnVZVzFsSWpvaVVtOWlhVzRpTENKbVlXMXBiSGxmYm1GdFpTSTZJbVJsSUZkcGJuUmxjaUFvUTI5c2FXcHVMVWxVS1NJc0luSnZiR1VpT2xzaWMyVnNiR1Z5SWl3aVpHVmhiR1Z5WDIxaGJtRm5aWElpWFN3aWFXRjBJam94TnpNeU1UazVNamsxTENKelkyOXdaU0k2V3lKallYUmhiRzluY1hWbGNubGhjR2tpTENKamIyNW1hV2QxY21GMGIzSmhjR2tpTENKd2NtOWtkV04wZG1GeWFXRnVkR052YlcxaGJtUmhjR2tpTENKd2NtOWtkV04wZG1GeWFXRnVkSEYxWlhKNVlYQnBJbDBzSW1GdGNpSTZXeUpwYlhCbGNuTnZibUYwYVc5dUlsMTkucmJndVZQbmtYWER6c002UUtnWHVsaHJGNDFqSWpDdUdEVjEzaWcxR0M4TWV3TENKN3dBMDM4T1N3VDI2c3gybUNleGp2dUdZdDQ1WVNjZlB3ZlRrRHkzRXJQbUhSb2RzNjRYMWRKV1puZi0yM05UUDJpSTMyS18xdk1aSDVHT0diTXp1RnRiS0FGUXY0aGdGQXhveVdxRlZXeUp2dU90UWNXeVpTdFJPeVBId2pBbnBuai14MWNWUXBPaGJPLWtRVUZ2eV9WVXJQcEYzYVlWQ2NPMmNGaXJRVFhSNmt4U0djWUdHY3NQWS1fZWlBZDkzVWRHMkVNNnhMQW9jRExhRlY3MkNRSTZYRXMwV1FHMWY0U3F2SDUydjNPVGtnV0JMZ1lWMzVncHlJZTAtMm5hekdMMFI4cFROdURxck9iN09HbXVUUk1vVElpUmk2Ny13VHh4OGNRXCI7XHJcbiAgICBwdWJsaWMgdmFyaWFudDogc3RyaW5nID0gXCJcIjtcclxuXHJcblxyXG5cclxuICAgIHByaXZhdGUgX2V4dGVybmFsU291cmNlOiBFeHRlcm5hbFNvdXJjZTtcclxuICAgIHByaXZhdGUgX2V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvOiBFeHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbztcclxuICAgIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfcHJvZHVjdENvbm5lY3RvclNlcnZpY2U6IFByb2R1Y3RDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogUHJvZHVjdEV2ZW50U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2Uub25BZGRUb0NhcnQuc3Vic2NyaWJlKChkYXRhOiB7IGFydGljbGU6IHN0cmluZyB8IEFydGljbGVMaXN0T2JqZWN0RXh0ZW5kZWQsIHF1YW50aXR5OiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb0NhcnQubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJ0aWNsZTogZGF0YS5hcnRpY2xlLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBkYXRhLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGFsb2dEZWZpbml0aW9uOiB0aGlzLmNhdGFsb2dEZWZpbml0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU291cmNlOiB0aGlzLl9leHRlcm5hbFNvdXJjZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2Uub25BZGRUb1F1b3RlLnN1YnNjcmliZShqc29uID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVG9RdW90ZS5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICBhcnRpY2xlOiBqc29uLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGFsb2dEZWZpbml0aW9uOiB0aGlzLmNhdGFsb2dEZWZpbml0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU291cmNlOiB0aGlzLl9leHRlcm5hbFNvdXJjZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2Uub25BbHRlcm5hdGl2ZUNsaWNrLnN1YnNjcmliZShhcnRpY2xlID0+IHRoaXMuYWx0ZXJuYXRpdmVDbGljay5uZXh0KGFydGljbGUpKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVDb25maWd1cmF0aW9uRmluaXNoZWQodmFyaWFudFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdG9yRmluaXNoZWQuZW1pdCh2YXJpYW50U3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlRXh0ZXJuYWxTb3VyY2UoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9leHRlcm5hbFNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxVcmwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbFNldHRpbmdzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuZXh0ZXJuYWxTb3VyY2UudHlwZSA9PT0gJ0NBVEYnKSB7XHJcbiAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZUNhdEZhcm0oKTtcclxuICAgICAgICB9IGVsc2UgIGlmICh0aGlzLmV4dGVybmFsU291cmNlLnR5cGUgPT09ICdIVERMJyl7XHJcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlQ29uZmlndXJhdG9yKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3ByZXBhcmVTb3VyY2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVDYXRGYXJtKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gZ2V0IGJ1bmRsZSBzZXR0aW5ncyBmcm9tIGV4dGVybmFsIHNvdXJjZVxyXG4gICAgY29uc3QgYnVuZGxlU2V0dGluZ3M6IHN0cmluZyA9IGF3YWl0IHRoaXMuX3Byb2R1Y3RDb25uZWN0b3JTZXJ2aWNlLmdldFByb2R1Y3RCdW5kbGVTZXR0aW5ncyh0aGlzLmV4dGVybmFsU291cmNlLnVybCwgcGFyc2VJbnQodGhpcy5leHRlcm5hbFNvdXJjZS5zY2hlbWEsIDApKTtcclxuICAgIHRoaXMuZXh0ZXJuYWxTZXR0aW5ncyA9IEpTT04ucGFyc2UoYnVuZGxlU2V0dGluZ3MpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xyXG4gICAgICB0aGlzLmV4dGVybmFsU2V0dGluZ3Mub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZXh0ZXJuYWxTZXR0aW5ncy5hc3NldFBhdGggPSBcImh0dHBzOi8vY2RuMS5jb2xpam4taXQubmwvY29udGVudDQzXCI7XHJcbiAgICAvLyB0aGlzLmV4dGVybmFsU2V0dGluZ3MudGhyZWVEQXNzZXRQYXRoID0gXCJodHRwczovL2NkbjEuY29saWpuLWl0Lm5sL2NvbnRlbnQ0M1wiO1xyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxTb3VyY2UudXNlcm5hbWUgJiYgdGhpcy5leHRlcm5hbFNvdXJjZS5wYXNzd29yZCkge1xyXG4gICAgICB0aGlzLmV4dGVybmFsU2V0dGluZ3MudXNlTG9naW5FbmNyeXB0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5leHRlcm5hbFNldHRpbmdzLnVzZXJuYW1lID0gdGhpcy5leHRlcm5hbFNvdXJjZS51c2VybmFtZTtcclxuICAgICAgdGhpcy5leHRlcm5hbFNldHRpbmdzLnBhc3N3b3JkID0gdGhpcy5leHRlcm5hbFNvdXJjZS5wYXNzd29yZDtcclxuICAgIH1cclxuICAgIC8vIGZpbmFsbHkgc2hvdyB0aGUgY2F0YWxvZ1xyXG4gICAgdGhpcy5zd2l0Y2hUb1Byb2R1Y3QoKTtcclxuICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVDb25maWd1cmF0b3IoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvKSB7XHJcbiAgICAgIHRoaXMudG9rZW4gPSB0aGlzLmV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvLnRva2VuO1xyXG4gICAgICB0aGlzLnNrdSA9IHRoaXMuZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8uZXh0ZXJuYWxHb29kSWQ7XHJcbiAgICAgIHRoaXMudmFyaWFudCA9IHRoaXMuZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8uZmxhdHRlbmVkR29vZElkO1xyXG4gICAgICB0aGlzLnN3aXRjaFRvQ29uZmlndXJhdG9yKCk7XHJcbiAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTb3VyY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4dGVybmFsVXJsID0gdGhpcy5leHRlcm5hbFNvdXJjZS51cmw7XHJcbiAgICB0aGlzLnNhZmVVcmwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMuZXh0ZXJuYWxVcmwpO1xyXG4gICAgdGhpcy5zd2l0Y2hUb1NvdXJjZSgpO1xyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzd2l0Y2hUb1Byb2R1Y3QoKTp2b2lkIHtcclxuICAgIHRoaXMuc2hvd1Byb2R1Y3QgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93Q29uZmlndXJhdG9yID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTb3VyY2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3dpdGNoVG9Db25maWd1cmF0b3IoKTp2b2lkIHtcclxuICAgIHRoaXMuc2hvd1Byb2R1Y3QgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbmZpZ3VyYXRvciA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dTb3VyY2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3dpdGNoVG9Tb3VyY2UoKTp2b2lkIHtcclxuICAgIHRoaXMuc2hvd1Byb2R1Y3QgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbmZpZ3VyYXRvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U291cmNlID0gdHJ1ZTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1leHRlcm5hbC1zb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3Byb2R1Y3QtZXh0ZXJuYWwtc291cmNlL3Byb2R1Y3QtZXh0ZXJuYWwtc291cmNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBQyxZQUFZLEVBQWtCLE1BQU0sMkJBQTJCLENBQUM7QUFFeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFaEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0saURBQWlELENBQUM7QUFzQy9GLE1BQU0sT0FBTyw4QkFBOEI7SUF1RXZDLFlBQ1ksVUFBd0IsRUFDeEIsd0JBQWlELEVBQ2pELGdCQUFxQztRQUZyQyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQXJDMUMsY0FBUyxHQUFvRCxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUduSCxlQUFVLEdBQW9ELElBQUksWUFBWSxFQUFxQyxDQUFDO1FBR3BILHFCQUFnQixHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUcxRix5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQU94RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMs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QUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQzs7O1lBL01GLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXFCVDtnQkFDRCxTQUFTLEVBQUU7b0JBQ1Asc0JBQXNCO29CQUN0Qiw4QkFBOEI7b0JBQzlCLHVCQUF1QjtpQkFDMUI7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDeEM7OztZQTVDTyxZQUFZO1lBRVosdUJBQXVCO1lBRXZCLG1CQUFtQjs7O2tCQTJDdEIsS0FBSztnQ0FHTCxLQUFLOzZCQUdMLEtBQUs7eUNBV0wsS0FBSztzQkFjTCxLQUFLO3dCQUdMLE1BQU07eUJBR04sTUFBTTsrQkFHTixNQUFNO21DQUdOLE1BQU07d0JBR04sV0FBVyxTQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZXh0ZXJuYWwtc291cmNlLmJvJztcclxuaW1wb3J0IHtQcm9kdWN0Q29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBcnRpY2xlTGlzdE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1saXN0LW9iamVjdCc7XHJcbmltcG9ydCB7UHJvZHVjdEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7UHJvZHVjdFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2R1Y3RDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9wcm9kdWN0LWNvbm5lY3Rvci1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhdGFsb2dEZWZpbml0aW9ufSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jYXRhbG9nLWRlZmluaXRpb24uYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvaW50ZXJmYWNlL2V4dGVybmFsLXNvdXJjZS1hcnRpY2xlLWFkZC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FydGljbGVMaXN0T2JqZWN0RXh0ZW5kZWR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtbGlzdC1vYmplY3QtZXh0ZW5kZWQuYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2VQYXJhbWV0ZXJ9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLXNvdXJjZS1wYXJhbWV0ZXIuYm8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvLXByb2R1Y3QtZXh0ZXJuYWwtc291cmNlJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRlZFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Byb2R1Y3RcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtcHJvZHVjdC1wYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtza3VdPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NldHRpbmdzXT1cImV4dGVybmFsU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXh0ZXJuYWxTb3VyY2VdPVwiZXh0ZXJuYWxTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgPjwvYXBwLXByb2R1Y3QtcGFnZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93U291cmNlXCI+XHJcbiAgICAgICAgICAgICAgICA8aWZyYW1lIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBbc3JjXT1cInNhZmVVcmxcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NvbmZpZ3VyYXRvclwiPlxyXG4gICAgICAgICAgICAgIDxjby1wcm9kdWN0LWhkIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza3VdPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJ2YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9rZW5dPVwidG9rZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1cmxQYXJhbXNdPVwidXJsUGFyYW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlndXJhdG9yRmluaXNoZWQpPVwiaGFuZGxlQ29uZmlndXJhdGlvbkZpbmlzaGVkKCRldmVudClcIj48L2NvLXByb2R1Y3QtaGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgYCxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIFByb2R1Y3RTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICAgICAgUHJvZHVjdENvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgICAgIFByb2R1Y3RDb25uZWN0b3JTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdEV4dGVybmFsU291cmNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2t1OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYXRhbG9nRGVmaW5pdGlvbjogQ2F0YWxvZ0RlZmluaXRpb247XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZXh0ZXJuYWxTb3VyY2UodmFsdWU6IEV4dGVybmFsU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZXh0ZXJuYWxTb3VyY2UgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVFeHRlcm5hbFNvdXJjZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZXh0ZXJuYWxTb3VyY2UoKTogRXh0ZXJuYWxTb3VyY2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRlcm5hbFNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBleHRlcm5hbENhdGFsb2dTdGFydHVwSW5mbyh2YWx1ZTogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8pIHtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmV4dGVybmFsU291cmNlID0gdmFsdWUuZXh0ZXJuYWxTb3VyY2U7XHJcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlRXh0ZXJuYWxTb3VyY2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8oKTogRXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcHRpb25zOiB7fTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhZGRUb0NhcnQ6IEV2ZW50RW1pdHRlcjxFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2U+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgYWRkVG9RdW90ZTogRXZlbnRFbWl0dGVyPEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZT4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhbHRlcm5hdGl2ZUNsaWNrOiBFdmVudEVtaXR0ZXI8QXJ0aWNsZUxpc3RPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnRpY2xlTGlzdE9iamVjdD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjb25maWd1cmF0b3JGaW5pc2hlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLXByb2R1Y3QtZXh0ZXJuYWwtc291cmNlJylcclxuICAgIHB1YmxpYyBzaG93Q2xhc3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dQcm9kdWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2hvd0NvbmZpZ3VyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNob3dTb3VyY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzYWZlVXJsOiBTYWZlUmVzb3VyY2VVcmw7XHJcbiAgICBwdWJsaWMgbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXh0ZXJuYWxVcmw6IHN0cmluZztcclxuICAgIHB1YmxpYyBleHRlcm5hbFNldHRpbmdzOiBhbnkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgdG9rZW46IHN0cmluZyA9IFwiXCI7Ly89IFwiZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrWXhPVGhFUmtWRU9FVXdRVFExTXpZM00wTTFNVUUyUmprMVFVVkRRelUzUlRNME5qTTRSa1JTVXpJMU5pSXNJblI1Y0NJNkltRjBLMnAzZENJc0luZzFkQ0k2SWpoYWFtWTNXVFJMVWxSYWVuaFNjSFpzWVRkTlZpMU9SMDlRTUNKOS5leUp1WW1ZaU9qRTNNekl4T1RreU9UVXNJbVY0Y0NJNk1UY3pNakl3TWpnNU5Td2lhWE56SWpvaWFIUjBjSE02THk5aWJYTnBaR1Z1ZEdsMGVTMWhZMk5sY0hSaGJtTmxMbUY2ZFhKbGQyVmljMmwwWlhNdWJtVjBJaXdpWVhWa0lqcGJJbU5oZEdGc2IyZHhkV1Z5ZVdGd2FTSXNJbU52Ym1acFozVnlZWFJ2Y21Gd2FTSXNJbkJ5YjJSMVkzUjJZWEpwWVc1MFkyOXRiV0Z1WkdGd2FTSXNJbkJ5YjJSMVkzUjJZWEpwWVc1MGNYVmxjbmxoY0draVhTd2lZMnhwWlc1MFgybGtJam9pYVcxd1pYSnpiMjVoZEdsdmJpNWpiR2xsYm5RaUxDSnpkV0lpT2lJd09UTXdaREk0TWkwNU5HVTRMVFE1TUdFdE9HSTJOQzFtWVRrMVltSXlZekUxT0RJaUxDSmhkWFJvWDNScGJXVWlPakUzTXpJeE9Ua3lPVFVzSW1sa2NDSTZJbXh2WTJGc0lpd2laVzUyYVhKdmJtMWxiblFpT2lKTlUwd2lMQ0p6Wld4c1pYSWlPaUpUUlRBd01EQTVOaUlzSW5ObGJHeGxjbWQxYVdRaU9pSXhNRGsxTVdKak5TMWhabU16TFRRMU1HRXRObVZrTVMwd09HUTRORE5sTm1FNU9UUWlMQ0p3WlhKdGFYTnphVzl1SWpwYkluTmhiR1Z6TG1WNGNHOXlkSFJsYlhCc1lYUmxjeTV5WldGa0lpd2laRzlqZFcxbGJuUnNhV0p5WVhKNUxuUmhaeTV5WldGa0lpd2laRzlqZFcxbGJuUnNhV0p5WVhKNUxtUnZZM1Z0Wlc1MExuSmxZV1FpTENKa2IyTjFiV1Z1ZEd4cFluSmhjbmt1ZEdGblozSnZkWEF1Y21WaFpDSXNJbk5oYkdWekxtOXlaR1Z5TG5keWFYUmxJaXdpYzJGc1pYTXVZM1Z6ZEc5dFpYSXVjbVZoWkNJc0luTmhiR1Z6TG05eVpHVnlMbVJsYkdsMlpYSjVZV1JrY21WemN5NTNjbWwwWlNJc0luTmxjblpwWTJVdWNtVnhkV1Z6ZEM1eVpXRmtJaXdpWTJGMFlXeHZaeTUwWVdjdWNtVmhaQ0lzSW5OaGJHVnpMbTl5WkdWeUxuSmxZV1FpTENKellXeGxjeTVqZFhOMGIyMWxjaTUzY21sMFpTSXNJbkpsY1hWbGMzUm1iM0p4ZFc5MFpTNTNjbWwwWlNJc0luTmhiR1Z6TG05eVpHVnlMbUp2YjJzaUxDSnlaWEYxWlhOMFptOXljWFZ2ZEdVdWNtVmhaQ0lzSW5OaGJHVnpMbXhsWVdRdWNtVmhaQ0lzSW5CMWNtTm9ZWE5sTG05eVpHVnlMbkpsWVdRaUxDSnpZV3hsY3k1eGRXOTBaUzV5WldGa0lpd2ljMkZzWlhNdWNYVnZkR1V1ZDNKcGRHVWlMQ0pqWVhSaGJHOW5MbWwwWlcwdWNtVmhaQ0lzSW5OaGJHVnpMbXhsWVdRdWQzSnBkR1VpTENKelpYSjJhV05sTG5KbGNYVmxjM1F1YzNWaWJXbDBJaXdpYzJGc1pYTXViM0prWlhJdVpHVnNhWFpsY25saFpHUnlaWE56TG5KbFlXUWlMQ0p3ZFhKamFHRnpaUzV2Y21SbGNpNTNjbWwwWlNJc0luQjFjbU5vWVhObExtOXlaR1Z5TG5CeWFXTmxjeTUzY21sMFpTSXNJbkIxY21Ob1lYTmxMbTl5WkdWeUxuQnlhV05sY3k1eVpXRmtJaXdpYzJWeWRtbGpaUzV5WlhGMVpYTjBMbmR5YVhSbElpd2lZMkYwWVd4dlp5NWpZWFJoYkc5bkxuSmxZV1FpTENKallYUmhiRzluTG1OaGRHRnNiMmN1ZDNKcGRHVWlMQ0pqWVhSaGJHOW5MbU4xY25KbGJtTjVMbkpsWVdRaUxDSmpZWFJoYkc5bkxtTjFjbkpsYm1ONUxuZHlhWFJsSWl3aVkyRjBZV3h2Wnk1cGRHVnRMbmR5YVhSbElpd2lZMkYwWVd4dlp5NXNiMk5oYkdsNllYUnBiMjR1Y21WaFpDSXNJbU5oZEdGc2IyY3ViRzlqWVd4cGVtRjBhVzl1TG5keWFYUmxJaXdpWTJGMFlXeHZaeTV3Y205a2RXTjBMbkpsWVdRaUxDSmpZWFJoYkc5bkxuQnliMlIxWTNRdWQzSnBkR1VpTENKallYUmhiRzluTG5CeWIyUjFZM1J6WlhSMGFXNW5MbkpsWVdRaUxDSmpZWFJoYkc5bkxuQnliMlIxWTNSelpYUjBhVzVuTG5keWFYUmxJaXdpWTJGMFlXeHZaeTV6Wld4c1pYSXVjbVZoWkNJc0ltTmhkR0ZzYjJjdWMyVnNiR1Z5TG5keWFYUmxJaXdpWTJGMFlXeHZaeTUwWVdjdWQzSnBkR1VpTENKallYUmhiRzluTG5WdmJTNXlaV0ZrSWl3aVkyRjBZV3h2Wnk1MWIyMHVkM0pwZEdVaUxDSmpZWFJoYkc5bkxuWmhkR05oZEdWbmIzSjVMbkpsWVdRaUxDSmpZWFJoYkc5bkxuWmhkR05oZEdWbmIzSjVMbmR5YVhSbElpd2lZMkYwWVd4dlp5NTJaVzVrYjNJdWNtVmhaQ0lzSW1OaGRHRnNiMmN1ZG1WdVpHOXlMbmR5YVhSbElpd2ljSFZ5WTJoaGMyVXVjMlZzYkdWeUxuSmxZV1FpTENKd2RYSmphR0Z6WlM1elpXeHNaWEl1ZDNKcGRHVWlMQ0pqWVhSaGJHOW5MbUZ5ZEdsamJHVXVjbVZoWkNJc0ltTmhkR0ZzYjJjdVlYSjBhV05zWlM1M2NtbDBaU0lzSW5OaGJHVnpMbkYxYjNSbExteHBibVZ6TG5KbFlXUWlMQ0p6WVd4bGN5NXhkVzkwWlM1c2FXNWxjeTUzY21sMFpTSXNJbk5oYkdWekxuTmxiR3hsY2k1eVpXRmtJaXdpYzJGc1pYTXVjMlZzYkdWeUxuZHlhWFJsSWl3aVlXTmpiM1Z1ZEdsdVp5NTJaVzVrYjNKcGJuWnZhV05sTG5KbFlXUWlMQ0pwWkdWdWRHbDBlUzUxYzJWeUxuSmxZV1FpTENKcFpHVnVkR2wwZVM1MWMyVnlMbmR5YVhSbElpd2lhV1JsYm5ScGRIa3VjbTlzWlM1eVpXRmtJaXdpYzJWc2JHVnlMbkJ5YjJSMVkzUndjbWxqWlM1elpYUjBhVzVuY3k1eVpXRmtJaXdpYzJWc2JHVnlMbkJ5YjJSMVkzUndjbWxqWlM1elpYUjBhVzVuY3k1M2NtbDBaU0lzSW1OdmJtWnBaM1Z5WVhSdmNpNXdkWEpqYUdGelpYQnlhV05sTG5KbFlXUWlMQ0p6ZEc5amF5NW1ZV0p5YVdNdWNtVmhaQ0pkTENKdVlXMWxJam9pVW05aWFXNGlMQ0ptWVcxcGJIbGZibUZ0WlNJNkltUmxJRmRwYm5SbGNpQW9RMjlzYVdwdUxVbFVLU0lzSW5KdmJHVWlPbHNpYzJWc2JHVnlJaXdpWkdWaGJHVnlYMjFoYm1GblpYSWlYU3dpYVdGMElqb3hOek15TVRrNU1qazFMQ0p6WTI5d1pTSTZXeUpqWVhSaGJHOW5jWFZsY25saGNHa2lMQ0pqYjI1bWFXZDFjbUYwYjNKaGNHa2lMQ0p3Y205a2RXTjBkbUZ5YVdGdWRHTnZiVzFoYm1SaGNHa2lMQ0p3Y205a2RXTjBkbUZ5YVdGdWRIRjFaWEo1WVhCcElsMHNJbUZ0Y2lJNld5SnBiWEJsY25OdmJtRjBhVzl1SWwxOS5yYmd1VlBua1hYRHpzTTZRS2dYdWxockY0MWpJakN1R0RWMTNpZzFHQzhNZXdMQ0o3d0EwMzhPU3dUMjZzeDJtQ2V4anZ1R1l0NDVZU2NmUHdmVGtEeTNFclBtSFJvZHM2NFgxZEpXWm5mLTIzTlRQMmlJMzJLXzF2TVpINUdPR2JNenVGdGJLQUZRdjRoZ0ZBeG95V3FGVld5SnZ1T3RRY1d5WlN0Uk95UEh3akFucG5qLXgxY1ZRcE9oYk8ta1FVRnZ5X1ZVclBwRjNhWVZDY08yY0ZpclFUWFI2a3hTR2NZR0djc1BZLV9laUFkOTNVZEcyRU02eExBb2NETGFGVjcyQ1FJNlhFczBXUUcxZjRTcXZINTJ2M09Ua2dXQkxnWVYzNWdweUllMC0ybmF6R0wwUjhwVE51RHFyT2I3T0dtdVRSTW9USWlSaTY3LXdUeHg4Y1FcIjtcclxuICAgIHB1YmxpYyB2YXJpYW50OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcHVibGljIHVybFBhcmFtczogRXh0ZXJuYWxTb3VyY2VQYXJhbWV0ZXJbXSA9IFtdO1xyXG5cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBfZXh0ZXJuYWxTb3VyY2U6IEV4dGVybmFsU291cmNlO1xyXG4gICAgcHJpdmF0ZSBfZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm86IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvO1xyXG4gICAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgICAgICBwcml2YXRlIF9wcm9kdWN0Q29ubmVjdG9yU2VydmljZTogUHJvZHVjdENvbm5lY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBQcm9kdWN0RXZlbnRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFkZFRvQ2FydC5zdWJzY3JpYmUoKGRhdGE6IHsgYXJ0aWNsZTogc3RyaW5nIHwgQXJ0aWNsZUxpc3RPYmplY3RFeHRlbmRlZCwgcXVhbnRpdHk6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvQ2FydC5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICBhcnRpY2xlOiBkYXRhLmFydGljbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGRhdGEucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZ0RlZmluaXRpb246IHRoaXMuY2F0YWxvZ0RlZmluaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxTb3VyY2U6IHRoaXMuX2V4dGVybmFsU291cmNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFkZFRvUXVvdGUuc3Vic2NyaWJlKGpzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRUb1F1b3RlLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFydGljbGU6IGpzb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0YWxvZ0RlZmluaXRpb246IHRoaXMuY2F0YWxvZ0RlZmluaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxTb3VyY2U6IHRoaXMuX2V4dGVybmFsU291cmNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vbkFsdGVybmF0aXZlQ2xpY2suc3Vic2NyaWJlKGFydGljbGUgPT4gdGhpcy5hbHRlcm5hdGl2ZUNsaWNrLm5leHQoYXJ0aWNsZSkpXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUNvbmZpZ3VyYXRpb25GaW5pc2hlZCh2YXJpYW50U3RyaW5nOiBzdHJpbmcpIHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0b3JGaW5pc2hlZC5lbWl0KHZhcmlhbnRTdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVFeHRlcm5hbFNvdXJjZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2V4dGVybmFsU291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbFVybCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmV4dGVybmFsU2V0dGluZ3MgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5leHRlcm5hbFNvdXJjZS50eXBlID09PSAnQ0FURicpIHtcclxuICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlQ2F0RmFybSgpO1xyXG4gICAgICAgIH0gZWxzZSAgaWYgKHRoaXMuZXh0ZXJuYWxTb3VyY2UudHlwZSA9PT0gJ0hUREwnKXtcclxuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDb25maWd1cmF0b3IoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fcHJlcGFyZVNvdXJjZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZUNhdEZhcm0oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBnZXQgYnVuZGxlIHNldHRpbmdzIGZyb20gZXh0ZXJuYWwgc291cmNlXHJcbiAgICBjb25zdCBidW5kbGVTZXR0aW5nczogc3RyaW5nID0gYXdhaXQgdGhpcy5fcHJvZHVjdENvbm5lY3RvclNlcnZpY2UuZ2V0UHJvZHVjdEJ1bmRsZVNldHRpbmdzKHRoaXMuZXh0ZXJuYWxTb3VyY2UudXJsLCBwYXJzZUludCh0aGlzLmV4dGVybmFsU291cmNlLnNjaGVtYSwgMCkpO1xyXG4gICAgdGhpcy5leHRlcm5hbFNldHRpbmdzID0gSlNPTi5wYXJzZShidW5kbGVTZXR0aW5ncyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTZXR0aW5ncy5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5leHRlcm5hbFNldHRpbmdzLmFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9jZG4xLmNvbGlqbi1pdC5ubC9jb250ZW50NDNcIjtcclxuICAgIC8vIHRoaXMuZXh0ZXJuYWxTZXR0aW5ncy50aHJlZURBc3NldFBhdGggPSBcImh0dHBzOi8vY2RuMS5jb2xpam4taXQubmwvY29udGVudDQzXCI7XHJcbiAgICBpZiAodGhpcy5leHRlcm5hbFNvdXJjZS51c2VybmFtZSAmJiB0aGlzLmV4dGVybmFsU291cmNlLnBhc3N3b3JkKSB7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxTZXR0aW5ncy51c2VMb2dpbkVuY3J5cHRpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmV4dGVybmFsU2V0dGluZ3MudXNlcm5hbWUgPSB0aGlzLmV4dGVybmFsU291cmNlLnVzZXJuYW1lO1xyXG4gICAgICB0aGlzLmV4dGVybmFsU2V0dGluZ3MucGFzc3dvcmQgPSB0aGlzLmV4dGVybmFsU291cmNlLnBhc3N3b3JkO1xyXG4gICAgfVxyXG4gICAgLy8gZmluYWxseSBzaG93IHRoZSBjYXRhbG9nXHJcbiAgICB0aGlzLnN3aXRjaFRvUHJvZHVjdCgpO1xyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZUNvbmZpZ3VyYXRvcigpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8pIHtcclxuICAgICAgdGhpcy50b2tlbiA9IHRoaXMuZXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8udG9rZW47XHJcbiAgICAgIHRoaXMuc2t1ID0gdGhpcy5leHRlcm5hbENhdGFsb2dTdGFydHVwSW5mby5leHRlcm5hbEdvb2RJZDtcclxuICAgICAgdGhpcy52YXJpYW50ID0gdGhpcy5leHRlcm5hbENhdGFsb2dTdGFydHVwSW5mby5mbGF0dGVuZWRHb29kSWQ7XHJcbiAgICAgIHRoaXMudXJsUGFyYW1zID0gdGhpcy5leHRlcm5hbENhdGFsb2dTdGFydHVwSW5mby5leHRlcm5hbFNvdXJjZS5wYXJhbWV0ZXJzO1xyXG4gICAgICB0aGlzLnN3aXRjaFRvQ29uZmlndXJhdG9yKCk7XHJcbiAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTb3VyY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4dGVybmFsVXJsID0gdGhpcy5leHRlcm5hbFNvdXJjZS51cmw7XHJcbiAgICB0aGlzLnNhZmVVcmwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMuZXh0ZXJuYWxVcmwpO1xyXG4gICAgdGhpcy5zd2l0Y2hUb1NvdXJjZSgpO1xyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzd2l0Y2hUb1Byb2R1Y3QoKTp2b2lkIHtcclxuICAgIHRoaXMuc2hvd1Byb2R1Y3QgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93Q29uZmlndXJhdG9yID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTb3VyY2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3dpdGNoVG9Db25maWd1cmF0b3IoKTp2b2lkIHtcclxuICAgIHRoaXMuc2hvd1Byb2R1Y3QgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbmZpZ3VyYXRvciA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dTb3VyY2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3dpdGNoVG9Tb3VyY2UoKTp2b2lkIHtcclxuICAgIHRoaXMuc2hvd1Byb2R1Y3QgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbmZpZ3VyYXRvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U291cmNlID0gdHJ1ZTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|