@edm-sdui/sdui 1.0.53 → 1.0.55
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/edm-sdui-sdui-1.0.55.tgz +0 -0
- package/esm2022/lib/components/uicomponent/tags-row/tag/tag.component.mjs +87 -17
- package/esm2022/lib/directives/uiview.directive.mjs +68 -1
- package/fesm2022/edm-sdui-sdui.mjs +153 -16
- package/fesm2022/edm-sdui-sdui.mjs.map +1 -1
- package/lib/components/uicomponent/tags-row/tag/tag.component.d.ts +4 -0
- package/lib/components/uicomponent/tags-row/tag/tag.component.d.ts.map +1 -1
- package/lib/directives/uiview.directive.d.ts +9 -0
- package/lib/directives/uiview.directive.d.ts.map +1 -1
- package/package.json +1 -1
- package/edm-sdui-sdui-1.0.53.tgz +0 -0
|
Binary file
|
|
@@ -16,12 +16,15 @@ export class TagsRowTagComponent {
|
|
|
16
16
|
static { this.scrollSpyInitTries = 0; }
|
|
17
17
|
static { this.scrollSpyContainer = null; }
|
|
18
18
|
static { this.activeId = null; }
|
|
19
|
+
static { this.isScrollingToSection = false; }
|
|
20
|
+
static { this.instanceCount = 0; }
|
|
19
21
|
constructor(uiComponent, renderer, fontSizeMappingService, scrollSpy) {
|
|
20
22
|
this.uiComponent = uiComponent;
|
|
21
23
|
this.renderer = renderer;
|
|
22
24
|
this.fontSizeMappingService = fontSizeMappingService;
|
|
23
25
|
this.scrollSpy = scrollSpy;
|
|
24
26
|
this.destroy$ = new Subject();
|
|
27
|
+
TagsRowTagComponent.instanceCount++;
|
|
25
28
|
}
|
|
26
29
|
ngOnInit() {
|
|
27
30
|
}
|
|
@@ -61,10 +64,62 @@ export class TagsRowTagComponent {
|
|
|
61
64
|
active.classList.add('row-tag--selected');
|
|
62
65
|
this.ensureTagVisible(active);
|
|
63
66
|
}
|
|
67
|
+
onTagClick() {
|
|
68
|
+
const actionParam = this.tagElementRef?.nativeElement?.getAttribute('data-tag');
|
|
69
|
+
if (!actionParam)
|
|
70
|
+
return;
|
|
71
|
+
try {
|
|
72
|
+
sessionStorage.setItem('exploreLastTag', actionParam);
|
|
73
|
+
sessionStorage.setItem('exploreLastAnchor', actionParam);
|
|
74
|
+
}
|
|
75
|
+
catch { }
|
|
76
|
+
this.markSelectedTag(actionParam);
|
|
77
|
+
this.scrollToSection(actionParam);
|
|
78
|
+
}
|
|
79
|
+
scrollToSection(id, attemptsLeft = 15, delayMs = 200) {
|
|
80
|
+
const sectionEl = document.getElementById(id);
|
|
81
|
+
if (!sectionEl) {
|
|
82
|
+
if (attemptsLeft <= 0)
|
|
83
|
+
return;
|
|
84
|
+
setTimeout(() => this.scrollToSection(id, attemptsLeft - 1, delayMs), delayMs);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const container = this.resolveScrollContainer();
|
|
88
|
+
const offset = document.querySelector('.tags-row--can-fix') ? 140 : 180;
|
|
89
|
+
const isPage = container === document.documentElement ||
|
|
90
|
+
container === document.body ||
|
|
91
|
+
container === document.scrollingElement;
|
|
92
|
+
TagsRowTagComponent.isScrollingToSection = true;
|
|
93
|
+
if (isPage) {
|
|
94
|
+
const top = sectionEl.getBoundingClientRect().top + window.scrollY - offset;
|
|
95
|
+
window.scrollTo({ top, behavior: 'smooth' });
|
|
96
|
+
}
|
|
97
|
+
else if (container) {
|
|
98
|
+
const top = sectionEl.getBoundingClientRect().top - container.getBoundingClientRect().top + container.scrollTop - offset;
|
|
99
|
+
container.scrollTo({ top, behavior: 'smooth' });
|
|
100
|
+
}
|
|
101
|
+
setTimeout(() => {
|
|
102
|
+
TagsRowTagComponent.isScrollingToSection = false;
|
|
103
|
+
this.markSelectedTag(id);
|
|
104
|
+
}, 700);
|
|
105
|
+
}
|
|
64
106
|
selectFirstTagAsDefault() {
|
|
65
107
|
requestAnimationFrame(() => {
|
|
66
108
|
if (TagsRowTagComponent.activeId)
|
|
67
109
|
return;
|
|
110
|
+
try {
|
|
111
|
+
const savedTag = sessionStorage.getItem('exploreLastTag');
|
|
112
|
+
if (savedTag) {
|
|
113
|
+
this.markSelectedTag(savedTag);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Se há um anchor pendente, aguarda o spy detectar a seção correta após o scroll
|
|
117
|
+
// para evitar selecionar a primeira tag e depois a certa (flash visual)
|
|
118
|
+
const hasPendingAnchor = !!sessionStorage.getItem('exploreLastAnchor');
|
|
119
|
+
if (hasPendingAnchor)
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
catch { }
|
|
68
123
|
const firstTag = document.querySelector('.row-tag[data-tag]');
|
|
69
124
|
const firstTagId = firstTag?.getAttribute('data-tag');
|
|
70
125
|
if (firstTagId) {
|
|
@@ -144,12 +199,20 @@ export class TagsRowTagComponent {
|
|
|
144
199
|
TagsRowTagComponent.scrollSpyContainer = currentContainer;
|
|
145
200
|
TagsRowTagComponent.scrollSpySub = TagsRowTagComponent.scrollSpy$.subscribe({
|
|
146
201
|
next: (activeId) => {
|
|
202
|
+
if (TagsRowTagComponent.isScrollingToSection)
|
|
203
|
+
return;
|
|
147
204
|
if (!activeId) {
|
|
148
205
|
if (!TagsRowTagComponent.activeId) {
|
|
149
206
|
this.selectFirstTagAsDefault();
|
|
150
207
|
}
|
|
151
208
|
return;
|
|
152
209
|
}
|
|
210
|
+
// Salva anchor e tag no sessionStorage para restaurar posição ao voltar
|
|
211
|
+
try {
|
|
212
|
+
sessionStorage.setItem('exploreLastAnchor', activeId);
|
|
213
|
+
sessionStorage.setItem('exploreLastTag', activeId);
|
|
214
|
+
}
|
|
215
|
+
catch { }
|
|
153
216
|
this.markSelectedTag(activeId);
|
|
154
217
|
},
|
|
155
218
|
error: (err) => {
|
|
@@ -174,31 +237,38 @@ export class TagsRowTagComponent {
|
|
|
174
237
|
return document.scrollingElement || document.documentElement;
|
|
175
238
|
}
|
|
176
239
|
ensureTagVisible(tagEl) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (tagRect.left < containerRect.left + padding) {
|
|
184
|
-
const delta = tagRect.left - containerRect.left - padding;
|
|
185
|
-
container.scrollBy({ left: delta, behavior: 'smooth' });
|
|
186
|
-
}
|
|
187
|
-
else if (tagRect.right > containerRect.right - padding) {
|
|
188
|
-
const delta = tagRect.right - containerRect.right + padding;
|
|
189
|
-
container.scrollBy({ left: delta, behavior: 'smooth' });
|
|
190
|
-
}
|
|
240
|
+
// Double RAF: garante que o layout esteja estabilizado antes de calcular os rects
|
|
241
|
+
requestAnimationFrame(() => {
|
|
242
|
+
requestAnimationFrame(() => {
|
|
243
|
+
tagEl.scrollIntoView({ behavior: 'auto', block: 'nearest', inline: 'nearest' });
|
|
244
|
+
});
|
|
245
|
+
});
|
|
191
246
|
}
|
|
192
247
|
ngOnDestroy() {
|
|
193
248
|
this.destroy$.next();
|
|
194
249
|
this.destroy$.complete();
|
|
250
|
+
TagsRowTagComponent.instanceCount--;
|
|
251
|
+
if (TagsRowTagComponent.instanceCount <= 0) {
|
|
252
|
+
// Reset completo: garante inicialização limpa na próxima visita ao Explorar
|
|
253
|
+
TagsRowTagComponent.instanceCount = 0;
|
|
254
|
+
TagsRowTagComponent.activeId = null;
|
|
255
|
+
TagsRowTagComponent.scrollSpyInitTries = 0;
|
|
256
|
+
TagsRowTagComponent.scrollSpyInitialized = false;
|
|
257
|
+
try {
|
|
258
|
+
TagsRowTagComponent.scrollSpySub?.unsubscribe();
|
|
259
|
+
}
|
|
260
|
+
catch { }
|
|
261
|
+
TagsRowTagComponent.scrollSpySub = null;
|
|
262
|
+
TagsRowTagComponent.scrollSpy$ = null;
|
|
263
|
+
TagsRowTagComponent.scrollSpyContainer = null;
|
|
264
|
+
}
|
|
195
265
|
}
|
|
196
266
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowTagComponent, deps: [{ token: 'uiComponent' }, { token: i0.Renderer2 }, { token: i1.FontSizeMappingService }, { token: i2.ScrollSpyService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
197
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TagsRowTagComponent, isStandalone: false, selector: "edm-sdui-tags-row-tag", viewQueries: [{ propertyName: "tagElementRef", first: true, predicate: ["tagElement"], descendants: true }, { propertyName: "tagNameElementRef", first: true, predicate: ["tagNameElement"], descendants: true }], ngImport: i0, template: "<div class=\"row-tag\" #tagElement *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <span class=\"tag-name\" #tagNameElement>{{ uiComponent.element?.label ?? '' }}</span>\n</div>\n", styles: [":host{display:contents}.row-tag{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:.85px solid var(--tag-explorer-aux);cursor:pointer;font-size:16px;flex-shrink:0}.row-tag:hover{background-color:var(--bt-tag-explorer-on)}.row-tag--selected{border-color:var(--tag-explorer-highlight);background-color:var(--bt-tag-explorer-on);background-origin:border-box}.tag-name{font-weight:600;color:var(--font-bt-tag-explorer-on);font-size:15px;line-height:17.25px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
|
|
267
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TagsRowTagComponent, isStandalone: false, selector: "edm-sdui-tags-row-tag", viewQueries: [{ propertyName: "tagElementRef", first: true, predicate: ["tagElement"], descendants: true }, { propertyName: "tagNameElementRef", first: true, predicate: ["tagNameElement"], descendants: true }], ngImport: i0, template: "<div class=\"row-tag\" #tagElement *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\" (click)=\"onTagClick()\">\n <span class=\"tag-name\" #tagNameElement>{{ uiComponent.element?.label ?? '' }}</span>\n</div>\n", styles: [":host{display:contents}.row-tag{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:.85px solid var(--tag-explorer-aux);cursor:pointer;font-size:16px;flex-shrink:0}.row-tag:hover{background-color:var(--bt-tag-explorer-on)}.row-tag--selected{border-color:var(--tag-explorer-highlight);background-color:var(--bt-tag-explorer-on);background-origin:border-box}.tag-name{font-weight:600;color:var(--font-bt-tag-explorer-on);font-size:15px;line-height:17.25px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
|
|
198
268
|
}
|
|
199
269
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowTagComponent, decorators: [{
|
|
200
270
|
type: Component,
|
|
201
|
-
args: [{ standalone: false, selector: 'edm-sdui-tags-row-tag', template: "<div class=\"row-tag\" #tagElement *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <span class=\"tag-name\" #tagNameElement>{{ uiComponent.element?.label ?? '' }}</span>\n</div>\n", styles: [":host{display:contents}.row-tag{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:.85px solid var(--tag-explorer-aux);cursor:pointer;font-size:16px;flex-shrink:0}.row-tag:hover{background-color:var(--bt-tag-explorer-on)}.row-tag--selected{border-color:var(--tag-explorer-highlight);background-color:var(--bt-tag-explorer-on);background-origin:border-box}.tag-name{font-weight:600;color:var(--font-bt-tag-explorer-on);font-size:15px;line-height:17.25px}\n"] }]
|
|
271
|
+
args: [{ standalone: false, selector: 'edm-sdui-tags-row-tag', template: "<div class=\"row-tag\" #tagElement *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\" (click)=\"onTagClick()\">\n <span class=\"tag-name\" #tagNameElement>{{ uiComponent.element?.label ?? '' }}</span>\n</div>\n", styles: [":host{display:contents}.row-tag{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:.85px solid var(--tag-explorer-aux);cursor:pointer;font-size:16px;flex-shrink:0}.row-tag:hover{background-color:var(--bt-tag-explorer-on)}.row-tag--selected{border-color:var(--tag-explorer-highlight);background-color:var(--bt-tag-explorer-on);background-origin:border-box}.tag-name{font-weight:600;color:var(--font-bt-tag-explorer-on);font-size:15px;line-height:17.25px}\n"] }]
|
|
202
272
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
203
273
|
type: Inject,
|
|
204
274
|
args: ['uiComponent']
|
|
@@ -209,4 +279,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
209
279
|
type: ViewChild,
|
|
210
280
|
args: ['tagNameElement']
|
|
211
281
|
}] } });
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2R1aS9zcmMvbGliL2NvbXBvbmVudHMvdWljb21wb25lbnQvdGFncy1yb3cvdGFnL3RhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3RhZ3Mtcm93L3RhZy90YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDOUUsT0FBTyxFQUErQiwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBYyxPQUFPLEVBQTJCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFRcEUsTUFBTSxPQUFPLG1CQUFtQjthQUlmLHlCQUFvQixHQUFHLEtBQUssQUFBUixDQUFTO2FBQzdCLGVBQVUsR0FBcUMsSUFBSSxBQUF6QyxDQUEwQzthQUNwRCxpQkFBWSxHQUF3QixJQUFJLEFBQTVCLENBQTZCO2FBQ3pDLHVCQUFrQixHQUFHLENBQUMsQUFBSixDQUFLO2FBQ3ZCLHVCQUFrQixHQUF1QixJQUFJLEFBQTNCLENBQTRCO2FBQzlDLGFBQVEsR0FBa0IsSUFBSSxBQUF0QixDQUF1QjtJQUU5QyxZQUNnQyxXQUF3QixFQUM5QyxRQUFtQixFQUNuQixzQkFBOEMsRUFDOUMsU0FBMkI7UUFITCxnQkFBVyxHQUFYLFdB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aUJBQWlCO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVUlDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVUlFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWllbGVtZW50XCI7XG5pbXBvcnQgeyBjb2xvck1hcHBpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS91aXRoZW1lL21hcHBpbmcvY29sb3ItbWFwcGluZ1wiO1xuaW1wb3J0IHsgZ2V0VGV4dFN0eWxlTWFwcGluZ0ZvbnRTaXplLCB0ZXh0U3R5bGVNYXBwaW5nTGluZUhlaWdodCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL3VpdGhlbWUvbWFwcGluZy90ZXh0LXN0eWxlLW1hcHBpbmdcIjtcbmltcG9ydCB7IEZvbnRTaXplTWFwcGluZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9mb250LXNpemUtbWFwcGluZy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBVSVNpemUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS91aXRoZW1lL2VudW1zL3Vpc2l6ZVwiO1xuaW1wb3J0IHsgc2l6ZU1hcHBpbmdIZWlnaHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc2l6ZS1tYXBwaW5nXCI7XG5pbXBvcnQgeyBTY3JvbGxTcHlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvc2Nyb2xsLXNweS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzdHlsZVVybDogJy4vdGFnLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxuICBzZWxlY3RvcjogJ2VkbS1zZHVpLXRhZ3Mtcm93LXRhZycsXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NSb3dUYWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ3RhZ0VsZW1lbnQnKSB0YWdFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RhZ05hbWVFbGVtZW50JykgdGFnTmFtZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc3RhdGljIHNjcm9sbFNweUluaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIHNjcm9sbFNweSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgc2Nyb2xsU3B5U3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgc2Nyb2xsU3B5SW5pdFRyaWVzID0gMDtcbiAgcHJpdmF0ZSBzdGF0aWMgc2Nyb2xsU3B5Q29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBhY3RpdmVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgndWlDb21wb25lbnQnKSBwdWJsaWMgdWlDb21wb25lbnQ6IFVJQ29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGZvbnRTaXplTWFwcGluZ1NlcnZpY2U6IEZvbnRTaXplTWFwcGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY3JvbGxTcHk6IFNjcm9sbFNweVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVpQ29tcG9uZW50LmVsZW1lbnQpIHtcbiAgICAgIHRoaXMuYXBwbHlFbGVtZW50KHRoaXMudWlDb21wb25lbnQuZWxlbWVudCk7XG4gICAgICB0aGlzLmFwcGx5TGFiZWxFbGVtZW50KHRoaXMudWlDb21wb25lbnQuZWxlbWVudCk7XG5cbiAgICAgIC8vIE1hcDogdGFnLmFjdGlvbi5wYXJhbSAtPiBzZWN0aW9uIGRpdiBpZFxuICAgICAgY29uc3QgYWN0aW9uUGFyYW0gPSAodGhpcy51aUNvbXBvbmVudD8uZWxlbWVudCBhcyBhbnkpPy5hY3Rpb24/LnBhcmFtO1xuICAgICAgaWYgKGFjdGlvblBhcmFtICE9IG51bGwgJiYgdGhpcy50YWdFbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMudGFnRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGF0YS10YWcnLCBTdHJpbmcoYWN0aW9uUGFyYW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1RhZ0NvbXBvbmVudF0gdGFnIHdpdGhvdXQgYWN0aW9uLnBhcmFtJywgdGhpcy51aUNvbXBvbmVudD8uZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYXBsaWNhIHNlbGXDp8OjbyBzZSBlc3RlIHRhZyBjb3JyZXNwb25kZSBhbyBhdGl2byBhdHVhbC5cbiAgICAgIHRoaXMuc3luY1NlbGVjdGlvblN0YXRlKCk7XG5cbiAgICAgIC8vIElNUE9SVEFOVDogVGFnc1Jvd1RhZ0NvbXBvbmVudCByZW5kZXJzIG9uY2UgcGVyIHRhZy5cbiAgICAgIC8vIFdlIGluaXRpYWxpemUgdGhlIHNjcm9sbCBvYnNlcnZlciBvbmx5IG9uY2UsIGJ1dCB3ZSBNVVNUIE5PVCB0aWUgaXQgdG8gdGhlIGZpcnN0IGluc3RhbmNlIGxpZmVjeWNsZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlIGZpcnN0IGluc3RhbmNlIG1heSBiZSBkZXN0cm95ZWQgKGUuZy4gcmVyZW5kZXIpIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHdvdWxkIGRpZS5cbiAgICAgIHRoaXMuaW5pdFNjcm9sbFNweU9uY2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RWxlbWVudChlbGVtZW50OiBVSUVsZW1lbnQpIHtcbiAgfVxuXG4gIHByaXZhdGUgbWFya1NlbGVjdGVkVGFnKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0YWdzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLnJvdy10YWcnKSk7XG4gICAgY29uc3QgZGF0YVRhZ3MgPSB0YWdzLm1hcCh0ID0+IHQuZ2V0QXR0cmlidXRlKCdkYXRhLXRhZycpKTtcbiAgICBUYWdzUm93VGFnQ29tcG9uZW50LmFjdGl2ZUlkID0gaWQ7XG4gICAgZm9yIChjb25zdCB0IG9mIHRhZ3MpIHQuY2xhc3NMaXN0LnJlbW92ZSgncm93LXRhZy0tc2VsZWN0ZWQnKTtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgLnJvdy10YWdbZGF0YS10YWc9XCIke0NTUy5lc2NhcGUoaWQpfVwiXWApO1xuICAgIGlmICghYWN0aXZlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tUYWdDb21wb25lbnRdIGFjdGl2ZSB0YWcgbm90IGZvdW5kIGZvciBpZCcsIGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWN0aXZlLmNsYXNzTGlzdC5hZGQoJ3Jvdy10YWctLXNlbGVjdGVkJyk7XG4gICAgdGhpcy5lbnN1cmVUYWdWaXNpYmxlKGFjdGl2ZSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEZpcnN0VGFnQXNEZWZhdWx0KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAoVGFnc1Jvd1RhZ0NvbXBvbmVudC5hY3RpdmVJZCkgcmV0dXJuO1xuICAgICAgY29uc3QgZmlyc3RUYWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLnJvdy10YWdbZGF0YS10YWddJyk7XG4gICAgICBjb25zdCBmaXJzdFRhZ0lkID0gZmlyc3RUYWc/LmdldEF0dHJpYnV0ZSgnZGF0YS10YWcnKTtcbiAgICAgIGlmIChmaXJzdFRhZ0lkKSB7XG4gICAgICAgIHRoaXMubWFya1NlbGVjdGVkVGFnKGZpcnN0VGFnSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YVRhZyA9IHRoaXMudGFnRWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdkYXRhLXRhZycpO1xuICAgIGlmICghZGF0YVRhZykgcmV0dXJuO1xuICAgIGlmIChUYWdzUm93VGFnQ29tcG9uZW50LmFjdGl2ZUlkICYmIFRhZ3NSb3dUYWdDb21wb25lbnQuYWN0aXZlSWQgPT09IGRhdGFUYWcpIHtcbiAgICAgIHRoaXMudGFnRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Jvdy10YWctLXNlbGVjdGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Jvdy10YWctLXNlbGVjdGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxhYmVsRWxlbWVudChlbGVtZW50OiBVSUVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC50ZXh0Q29sb3IpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JNYXBwaW5nW2VsZW1lbnQudGV4dENvbG9yXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWdOYW1lRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY29sb3InLCBjb2xvcik7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dFN0eWxlTWFwcGluZ0ZvbnRTaXplID0gdGhpcy5mb250U2l6ZU1hcHBpbmdTZXJ2aWNlLmdldE1hcHBpbmcoKTtcblxuICAgIGlmIChlbGVtZW50LnRleHRTdHlsZSkge1xuICAgICAgY29uc3QgZm9udFNpemUgPSB0ZXh0U3R5bGVNYXBwaW5nRm9udFNpemVbZWxlbWVudC50ZXh0U3R5bGVdO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRleHRTdHlsZU1hcHBpbmdMaW5lSGVpZ2h0W2VsZW1lbnQudGV4dFN0eWxlXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFnTmFtZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICAgIGZvbnRTaXplXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhZ05hbWVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsaW5lLWhlaWdodCcsIGxpbmVIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNjcm9sbFNweU9uY2UoKTogdm9pZCB7XG4gICAgLy8gQWxyZWFkeSBzdWJzY3JpYmVkXG4gICAgaWYgKFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5U3ViKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q29udGFpbmVyID0gdGhpcy5yZXNvbHZlU2Nyb2xsQ29udGFpbmVyKCk7XG4gICAgICBjb25zdCBzdGFsZSA9ICFUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweUNvbnRhaW5lcj8uaXNDb25uZWN0ZWQgfHwgKGN1cnJlbnRDb250YWluZXIgJiYgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlDb250YWluZXIgIT09IGN1cnJlbnRDb250YWluZXIpO1xuICAgICAgaWYgKCFzdGFsZSkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlTdWIgPSBudWxsO1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHkkID0gbnVsbDtcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5Q29udGFpbmVyID0gbnVsbDtcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgY29udGFpbmVyIGV4aXN0czsgVGFnQ29tcG9uZW50IGNhbiByZW5kZXIgYmVmb3JlIHRoZSBzY3JvbGwgY29udGFpbmVyIGlzIGluIHRoZSBET00uXG4gICAgY29uc3QgY29udGFpbmVyRXhpc3RzID0gISF0aGlzLnJlc29sdmVTY3JvbGxDb250YWluZXIoKTtcbiAgICBpZiAoIWNvbnRhaW5lckV4aXN0cykge1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlJbml0VHJpZXMrKztcbiAgICAgIGlmIChUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweUluaXRUcmllcyA8PSAzMCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5pbml0U2Nyb2xsU3B5T25jZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1RhZ0NvbXBvbmVudF0gU2Nyb2xsU3B5OiAuc2Nyb2xsYWJsZS1jb250YWluZXIgbm90IGZvdW5kIGFmdGVyIHJldHJpZXMnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb250YWluZXIgPSB0aGlzLnJlc29sdmVTY3JvbGxDb250YWluZXIoKSE7XG5cbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5JCA9IHRoaXMuc2Nyb2xsU3B5Lm9ic2VydmVBY3RpdmVJZCh7XG4gICAgICAgIGNvbnRhaW5lcjogY3VycmVudENvbnRhaW5lciEsXG4gICAgICAgIGFuY2hvclNlbGVjdG9yOiAnW2RhdGEtYW5jaG9yLXRhcmdldF0sIC5jb2x1bW5baWRdJyxcbiAgICAgICAgZ2V0T2Zmc2V0VG9wOiAoKSA9PiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhZ3Mtcm93LS1jYW4tZml4JykgPyAxNDAgOiAxODApLFxuICAgICAgICByZXNvbHZlSWQ6IChhbmNob3IpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWN0aW9uID0gYW5jaG9yLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KCdbZGF0YS1hbmNob3ItdGFyZ2V0XScpO1xuICAgICAgICAgIGlmIChzZWN0aW9uPy5pZCkgcmV0dXJuIHNlY3Rpb24uaWQ7XG4gICAgICAgICAgaWYgKGFuY2hvci5pZCkgcmV0dXJuIGFuY2hvci5pZDtcbiAgICAgICAgICByZXR1cm4gYW5jaG9yLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KCdbaWRdJyk/LmlkIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweUNvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXIhO1xuXG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweVN1YiA9IFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoYWN0aXZlSWQpID0+IHtcbiAgICAgICAgICBpZiAoIWFjdGl2ZUlkKSB7XG4gICAgICAgICAgICBpZiAoIVRhZ3NSb3dUYWdDb21wb25lbnQuYWN0aXZlSWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdFRhZ0FzRGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1hcmtTZWxlY3RlZFRhZyhhY3RpdmVJZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1RhZ0NvbXBvbmVudF0gU2Nyb2xsU3B5IHN1YnNjcmlwdGlvbiBlcnJvcicsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbVGFnQ29tcG9uZW50XSBTY3JvbGxTcHkgaW5pdCBmYWlsZWQnLCBlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTY3JvbGxDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBleHBsaWNpdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zY3JvbGxhYmxlLWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoZXhwbGljaXQgJiYgZXhwbGljaXQuc2Nyb2xsSGVpZ2h0ID4gZXhwbGljaXQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gZXhwbGljaXQ7XG4gICAgfVxuXG4gICAgY29uc3QgYW5jaG9yU2FtcGxlID1cbiAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29sdW1uW2lkXScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgfHxcbiAgICAgIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbmNob3ItdGFyZ2V0XScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCk7XG5cbiAgICBpZiAoYW5jaG9yU2FtcGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxTcHkuZ2V0U2Nyb2xsUGFyZW50KGFuY2hvclNhbXBsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVRhZ1Zpc2libGUodGFnRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGFnRWwuY2xvc2VzdDxIVE1MRWxlbWVudD4oJy50YWdzLXJvdycpO1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRhZ1JlY3QgPSB0YWdFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBwYWRkaW5nID0gMTI7IC8vIGtlZXAgYSBzbWFsbCBzaWRlIGJyZWF0aGluZyByb29tXG5cbiAgICBpZiAodGFnUmVjdC5sZWZ0IDwgY29udGFpbmVyUmVjdC5sZWZ0ICsgcGFkZGluZykge1xuICAgICAgY29uc3QgZGVsdGEgPSB0YWdSZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQgLSBwYWRkaW5nO1xuICAgICAgY29udGFpbmVyLnNjcm9sbEJ5KHsgbGVmdDogZGVsdGEsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9IGVsc2UgaWYgKHRhZ1JlY3QucmlnaHQgPiBjb250YWluZXJSZWN0LnJpZ2h0IC0gcGFkZGluZykge1xuICAgICAgY29uc3QgZGVsdGEgPSB0YWdSZWN0LnJpZ2h0IC0gY29udGFpbmVyUmVjdC5yaWdodCArIHBhZGRpbmc7XG4gICAgICBjb250YWluZXIuc2Nyb2xsQnkoeyBsZWZ0OiBkZWx0YSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvdy10YWdcIiAjdGFnRWxlbWVudCAqbmdJZj1cInVpQ29tcG9uZW50XCIgW2VkbVNkdWlWaWV3XT1cInVpQ29tcG9uZW50LmVsZW1lbnRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRhZy1uYW1lXCIgI3RhZ05hbWVFbGVtZW50Pnt7IHVpQ29tcG9uZW50LmVsZW1lbnQ/LmxhYmVsID8/ICcnIH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
|
|
282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2R1aS9zcmMvbGliL2NvbXBvbmVudHMvdWljb21wb25lbnQvdGFncy1yb3cvdGFnL3RhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3RhZ3Mtcm93L3RhZy90YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDOUUsT0FBTyxFQUErQiwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBYyxPQUFPLEVBQTJCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFRcEUsTUFBTSxPQUFPLG1CQUFtQjthQUlmLHlCQUFvQixHQUFHLEtBQUssQUFBUixDQUFTO2FBQzdCLGVBQVUsR0FBcUMsSUFBSSxBQUF6QyxDQUEwQzthQUNwRCxpQkFBWSxHQUF3QixJQUFJLEFBQTVCLENBQTZCO2FBQ3pDLHVCQUFrQixHQUFHLENBQUMsQUFBSixDQUFLO2FBQ3ZCLHVCQUFrQixHQUF1QixJQUFJLEFBQTNCLENBQTRCO2FBQzlDLGFBQVEsR0FBa0IsSUFBSSxBQUF0QixDQUF1QjthQUMvQix5QkFBb0IsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUM3QixrQkFBYSxHQUFHLENBQUMsQUFBSixDQUFLO0lBRWpDLFlB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QUNqRCxJQUFJLENBQUM7Z0JBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUM7WUFDakUsbUJBQW1CLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN4QyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQzsrR0F2UlUsbUJBQW1CLGtCQWNwQixhQUFhO21HQWRaLG1CQUFtQixxU0NqQmhDLGdPQUdBOzs0RkRjYSxtQkFBbUI7a0JBTi9CLFNBQVM7aUNBR0ksS0FBSyxZQUNQLHVCQUF1Qjs7MEJBZ0I5QixNQUFNOzJCQUFDLGFBQWE7cUlBYkUsYUFBYTtzQkFBckMsU0FBUzt1QkFBQyxZQUFZO2dCQUNNLGlCQUFpQjtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFVJQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWljb21wb25lbnRcIjtcbmltcG9ydCB7IFVJRWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL3VpY29tcG9zaXRpb24vbW9kZWxzL3VpZWxlbWVudFwiO1xuaW1wb3J0IHsgY29sb3JNYXBwaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL2NvbG9yLW1hcHBpbmdcIjtcbmltcG9ydCB7IGdldFRleHRTdHlsZU1hcHBpbmdGb250U2l6ZSwgdGV4dFN0eWxlTWFwcGluZ0xpbmVIZWlnaHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS91aXRoZW1lL21hcHBpbmcvdGV4dC1zdHlsZS1tYXBwaW5nXCI7XG5pbXBvcnQgeyBGb250U2l6ZU1hcHBpbmdTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvZm9udC1zaXplLW1hcHBpbmcuc2VydmljZVwiO1xuaW1wb3J0IHsgVUlTaXplIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9lbnVtcy91aXNpemVcIjtcbmltcG9ydCB7IHNpemVNYXBwaW5nSGVpZ2h0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL3NpemUtbWFwcGluZ1wiO1xuaW1wb3J0IHsgU2Nyb2xsU3B5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3Njcm9sbC1zcHkuc2VydmljZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc3R5bGVVcmw6ICcuL3RhZy5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgc2VsZWN0b3I6ICdlZG0tc2R1aS10YWdzLXJvdy10YWcnLFxufSlcbmV4cG9ydCBjbGFzcyBUYWdzUm93VGFnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCd0YWdFbGVtZW50JykgdGFnRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0YWdOYW1lRWxlbWVudCcpIHRhZ05hbWVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHN0YXRpYyBzY3JvbGxTcHlJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBzY3JvbGxTcHkkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIHNjcm9sbFNweVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIHNjcm9sbFNweUluaXRUcmllcyA9IDA7XG4gIHByaXZhdGUgc3RhdGljIHNjcm9sbFNweUNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgYWN0aXZlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBpc1Njcm9sbGluZ1RvU2VjdGlvbiA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCd1aUNvbXBvbmVudCcpIHB1YmxpYyB1aUNvbXBvbmVudDogVUlDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZm9udFNpemVNYXBwaW5nU2VydmljZTogRm9udFNpemVNYXBwaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHNjcm9sbFNweTogU2Nyb2xsU3B5U2VydmljZVxuICApIHtcbiAgICBUYWdzUm93VGFnQ29tcG9uZW50Lmluc3RhbmNlQ291bnQrKztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudWlDb21wb25lbnQuZWxlbWVudCkge1xuICAgICAgdGhpcy5hcHBseUVsZW1lbnQodGhpcy51aUNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgIHRoaXMuYXBwbHlMYWJlbEVsZW1lbnQodGhpcy51aUNvbXBvbmVudC5lbGVtZW50KTtcblxuICAgICAgLy8gTWFwOiB0YWcuYWN0aW9uLnBhcmFtIC0+IHNlY3Rpb24gZGl2IGlkXG4gICAgICBjb25zdCBhY3Rpb25QYXJhbSA9ICh0aGlzLnVpQ29tcG9uZW50Py5lbGVtZW50IGFzIGFueSk/LmFjdGlvbj8ucGFyYW07XG4gICAgICBpZiAoYWN0aW9uUGFyYW0gIT0gbnVsbCAmJiB0aGlzLnRhZ0VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy50YWdFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYXRhLXRhZycsIFN0cmluZyhhY3Rpb25QYXJhbSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbVGFnQ29tcG9uZW50XSB0YWcgd2l0aG91dCBhY3Rpb24ucGFyYW0nLCB0aGlzLnVpQ29tcG9uZW50Py5lbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVhcGxpY2Egc2VsZcOnw6NvIHNlIGVzdGUgdGFnIGNvcnJlc3BvbmRlIGFvIGF0aXZvIGF0dWFsLlxuICAgICAgdGhpcy5zeW5jU2VsZWN0aW9uU3RhdGUoKTtcblxuICAgICAgLy8gSU1QT1JUQU5UOiBUYWdzUm93VGFnQ29tcG9uZW50IHJlbmRlcnMgb25jZSBwZXIgdGFnLlxuICAgICAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgc2Nyb2xsIG9ic2VydmVyIG9ubHkgb25jZSwgYnV0IHdlIE1VU1QgTk9UIHRpZSBpdCB0byB0aGUgZmlyc3QgaW5zdGFuY2UgbGlmZWN5Y2xlLFxuICAgICAgLy8gYmVjYXVzZSB0aGUgZmlyc3QgaW5zdGFuY2UgbWF5IGJlIGRlc3Ryb3llZCAoZS5nLiByZXJlbmRlcikgYW5kIHRoZSBzdWJzY3JpcHRpb24gd291bGQgZGllLlxuICAgICAgdGhpcy5pbml0U2Nyb2xsU3B5T25jZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlFbGVtZW50KGVsZW1lbnQ6IFVJRWxlbWVudCkge1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrU2VsZWN0ZWRUYWcoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcucm93LXRhZycpKTtcbiAgICBjb25zdCBkYXRhVGFncyA9IHRhZ3MubWFwKHQgPT4gdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFnJykpO1xuICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuYWN0aXZlSWQgPSBpZDtcbiAgICBmb3IgKGNvbnN0IHQgb2YgdGFncykgdC5jbGFzc0xpc3QucmVtb3ZlKCdyb3ctdGFnLS1zZWxlY3RlZCcpO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGAucm93LXRhZ1tkYXRhLXRhZz1cIiR7Q1NTLmVzY2FwZShpZCl9XCJdYCk7XG4gICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1RhZ0NvbXBvbmVudF0gYWN0aXZlIHRhZyBub3QgZm91bmQgZm9yIGlkJywgaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhY3RpdmUuY2xhc3NMaXN0LmFkZCgncm93LXRhZy0tc2VsZWN0ZWQnKTtcbiAgICB0aGlzLmVuc3VyZVRhZ1Zpc2libGUoYWN0aXZlKTtcbiAgfVxuXG4gIG9uVGFnQ2xpY2soKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aW9uUGFyYW0gPSB0aGlzLnRhZ0VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEF0dHJpYnV0ZSgnZGF0YS10YWcnKTtcbiAgICBpZiAoIWFjdGlvblBhcmFtKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZXhwbG9yZUxhc3RUYWcnLCBhY3Rpb25QYXJhbSk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdleHBsb3JlTGFzdEFuY2hvcicsIGFjdGlvblBhcmFtKTtcbiAgICB9IGNhdGNoIHt9XG5cbiAgICB0aGlzLm1hcmtTZWxlY3RlZFRhZyhhY3Rpb25QYXJhbSk7XG4gICAgdGhpcy5zY3JvbGxUb1NlY3Rpb24oYWN0aW9uUGFyYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1NlY3Rpb24oaWQ6IHN0cmluZywgYXR0ZW1wdHNMZWZ0ID0gMTUsIGRlbGF5TXMgPSAyMDApOiB2b2lkIHtcbiAgICBjb25zdCBzZWN0aW9uRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICBpZiAoIXNlY3Rpb25FbCkge1xuICAgICAgaWYgKGF0dGVtcHRzTGVmdCA8PSAwKSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9TZWN0aW9uKGlkLCBhdHRlbXB0c0xlZnQgLSAxLCBkZWxheU1zKSwgZGVsYXlNcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yZXNvbHZlU2Nyb2xsQ29udGFpbmVyKCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhZ3Mtcm93LS1jYW4tZml4JykgPyAxNDAgOiAxODA7XG4gICAgY29uc3QgaXNQYWdlID1cbiAgICAgIGNvbnRhaW5lciA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8XG4gICAgICBjb250YWluZXIgPT09IGRvY3VtZW50LmJvZHkgfHxcbiAgICAgIGNvbnRhaW5lciA9PT0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcblxuICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuaXNTY3JvbGxpbmdUb1NlY3Rpb24gPSB0cnVlO1xuXG4gICAgaWYgKGlzUGFnZSkge1xuICAgICAgY29uc3QgdG9wID0gc2VjdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gb2Zmc2V0O1xuICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfSBlbHNlIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnN0IHRvcCA9IHNlY3Rpb25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIG9mZnNldDtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5pc1Njcm9sbGluZ1RvU2VjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrU2VsZWN0ZWRUYWcoaWQpO1xuICAgIH0sIDcwMCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEZpcnN0VGFnQXNEZWZhdWx0KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAoVGFnc1Jvd1RhZ0NvbXBvbmVudC5hY3RpdmVJZCkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzYXZlZFRhZyA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2V4cGxvcmVMYXN0VGFnJyk7XG4gICAgICAgIGlmIChzYXZlZFRhZykge1xuICAgICAgICAgIHRoaXMubWFya1NlbGVjdGVkVGFnKHNhdmVkVGFnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2UgaMOhIHVtIGFuY2hvciBwZW5kZW50ZSwgYWd1YXJkYSBvIHNweSBkZXRlY3RhciBhIHNlw6fDo28gY29ycmV0YSBhcMOzcyBvIHNjcm9sbFxuICAgICAgICAvLyBwYXJhIGV2aXRhciBzZWxlY2lvbmFyIGEgcHJpbWVpcmEgdGFnIGUgZGVwb2lzIGEgY2VydGEgKGZsYXNoIHZpc3VhbClcbiAgICAgICAgY29uc3QgaGFzUGVuZGluZ0FuY2hvciA9ICEhc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXhwbG9yZUxhc3RBbmNob3InKTtcbiAgICAgICAgaWYgKGhhc1BlbmRpbmdBbmNob3IpIHJldHVybjtcbiAgICAgIH0gY2F0Y2gge31cblxuICAgICAgY29uc3QgZmlyc3RUYWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLnJvdy10YWdbZGF0YS10YWddJyk7XG4gICAgICBjb25zdCBmaXJzdFRhZ0lkID0gZmlyc3RUYWc/LmdldEF0dHJpYnV0ZSgnZGF0YS10YWcnKTtcbiAgICAgIGlmIChmaXJzdFRhZ0lkKSB7XG4gICAgICAgIHRoaXMubWFya1NlbGVjdGVkVGFnKGZpcnN0VGFnSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YVRhZyA9IHRoaXMudGFnRWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdkYXRhLXRhZycpO1xuICAgIGlmICghZGF0YVRhZykgcmV0dXJuO1xuICAgIGlmIChUYWdzUm93VGFnQ29tcG9uZW50LmFjdGl2ZUlkICYmIFRhZ3NSb3dUYWdDb21wb25lbnQuYWN0aXZlSWQgPT09IGRhdGFUYWcpIHtcbiAgICAgIHRoaXMudGFnRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Jvdy10YWctLXNlbGVjdGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3Jvdy10YWctLXNlbGVjdGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxhYmVsRWxlbWVudChlbGVtZW50OiBVSUVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC50ZXh0Q29sb3IpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JNYXBwaW5nW2VsZW1lbnQudGV4dENvbG9yXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWdOYW1lRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY29sb3InLCBjb2xvcik7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dFN0eWxlTWFwcGluZ0ZvbnRTaXplID0gdGhpcy5mb250U2l6ZU1hcHBpbmdTZXJ2aWNlLmdldE1hcHBpbmcoKTtcblxuICAgIGlmIChlbGVtZW50LnRleHRTdHlsZSkge1xuICAgICAgY29uc3QgZm9udFNpemUgPSB0ZXh0U3R5bGVNYXBwaW5nRm9udFNpemVbZWxlbWVudC50ZXh0U3R5bGVdO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRleHRTdHlsZU1hcHBpbmdMaW5lSGVpZ2h0W2VsZW1lbnQudGV4dFN0eWxlXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFnTmFtZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2ZvbnQtc2l6ZScsXG4gICAgICAgIGZvbnRTaXplXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhZ05hbWVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsaW5lLWhlaWdodCcsIGxpbmVIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNjcm9sbFNweU9uY2UoKTogdm9pZCB7XG4gICAgLy8gQWxyZWFkeSBzdWJzY3JpYmVkXG4gICAgaWYgKFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5U3ViKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q29udGFpbmVyID0gdGhpcy5yZXNvbHZlU2Nyb2xsQ29udGFpbmVyKCk7XG4gICAgICBjb25zdCBzdGFsZSA9ICFUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweUNvbnRhaW5lcj8uaXNDb25uZWN0ZWQgfHwgKGN1cnJlbnRDb250YWluZXIgJiYgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlDb250YWluZXIgIT09IGN1cnJlbnRDb250YWluZXIpO1xuICAgICAgaWYgKCFzdGFsZSkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlTdWIgPSBudWxsO1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHkkID0gbnVsbDtcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5Q29udGFpbmVyID0gbnVsbDtcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgY29udGFpbmVyIGV4aXN0czsgVGFnQ29tcG9uZW50IGNhbiByZW5kZXIgYmVmb3JlIHRoZSBzY3JvbGwgY29udGFpbmVyIGlzIGluIHRoZSBET00uXG4gICAgY29uc3QgY29udGFpbmVyRXhpc3RzID0gISF0aGlzLnJlc29sdmVTY3JvbGxDb250YWluZXIoKTtcbiAgICBpZiAoIWNvbnRhaW5lckV4aXN0cykge1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlJbml0VHJpZXMrKztcbiAgICAgIGlmIChUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweUluaXRUcmllcyA8PSAzMCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5pbml0U2Nyb2xsU3B5T25jZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1RhZ0NvbXBvbmVudF0gU2Nyb2xsU3B5OiAuc2Nyb2xsYWJsZS1jb250YWluZXIgbm90IGZvdW5kIGFmdGVyIHJldHJpZXMnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb250YWluZXIgPSB0aGlzLnJlc29sdmVTY3JvbGxDb250YWluZXIoKSE7XG5cbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5JCA9IHRoaXMuc2Nyb2xsU3B5Lm9ic2VydmVBY3RpdmVJZCh7XG4gICAgICAgIGNvbnRhaW5lcjogY3VycmVudENvbnRhaW5lciEsXG4gICAgICAgIGFuY2hvclNlbGVjdG9yOiAnW2RhdGEtYW5jaG9yLXRhcmdldF0sIC5jb2x1bW5baWRdJyxcbiAgICAgICAgZ2V0T2Zmc2V0VG9wOiAoKSA9PiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhZ3Mtcm93LS1jYW4tZml4JykgPyAxNDAgOiAxODApLFxuICAgICAgICByZXNvbHZlSWQ6IChhbmNob3IpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWN0aW9uID0gYW5jaG9yLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KCdbZGF0YS1hbmNob3ItdGFyZ2V0XScpO1xuICAgICAgICAgIGlmIChzZWN0aW9uPy5pZCkgcmV0dXJuIHNlY3Rpb24uaWQ7XG4gICAgICAgICAgaWYgKGFuY2hvci5pZCkgcmV0dXJuIGFuY2hvci5pZDtcbiAgICAgICAgICByZXR1cm4gYW5jaG9yLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KCdbaWRdJyk/LmlkIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweUNvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXIhO1xuXG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweVN1YiA9IFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoYWN0aXZlSWQpID0+IHtcbiAgICAgICAgICBpZiAoVGFnc1Jvd1RhZ0NvbXBvbmVudC5pc1Njcm9sbGluZ1RvU2VjdGlvbikgcmV0dXJuO1xuICAgICAgICAgIGlmICghYWN0aXZlSWQpIHtcbiAgICAgICAgICAgIGlmICghVGFnc1Jvd1RhZ0NvbXBvbmVudC5hY3RpdmVJZCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0VGFnQXNEZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNhbHZhIGFuY2hvciBlIHRhZyBubyBzZXNzaW9uU3RvcmFnZSBwYXJhIHJlc3RhdXJhciBwb3Npw6fDo28gYW8gdm9sdGFyXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2V4cGxvcmVMYXN0QW5jaG9yJywgYWN0aXZlSWQpO1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZXhwbG9yZUxhc3RUYWcnLCBhY3RpdmVJZCk7XG4gICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgIHRoaXMubWFya1NlbGVjdGVkVGFnKGFjdGl2ZUlkKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVGFnQ29tcG9uZW50XSBTY3JvbGxTcHkgc3Vic2NyaXB0aW9uIGVycm9yJywgZXJyKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUYWdDb21wb25lbnRdIFNjcm9sbFNweSBpbml0IGZhaWxlZCcsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNjcm9sbENvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGV4cGxpY2l0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNjcm9sbGFibGUtY29udGFpbmVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmIChleHBsaWNpdCAmJiBleHBsaWNpdC5zY3JvbGxIZWlnaHQgPiBleHBsaWNpdC5jbGllbnRIZWlnaHQpIHtcbiAgICAgIHJldHVybiBleHBsaWNpdDtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3JTYW1wbGUgPVxuICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2x1bW5baWRdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSB8fFxuICAgICAgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWFuY2hvci10YXJnZXRdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKTtcblxuICAgIGlmIChhbmNob3JTYW1wbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbFNweS5nZXRTY3JvbGxQYXJlbnQoYW5jaG9yU2FtcGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlVGFnVmlzaWJsZSh0YWdFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAvLyBEb3VibGUgUkFGOiBnYXJhbnRlIHF1ZSBvIGxheW91dCBlc3RlamEgZXN0YWJpbGl6YWRvIGFudGVzIGRlIGNhbGN1bGFyIG9zIHJlY3RzXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRhZ0VsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdhdXRvJywgYmxvY2s6ICduZWFyZXN0JywgaW5saW5lOiAnbmVhcmVzdCcgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICBUYWdzUm93VGFnQ29tcG9uZW50Lmluc3RhbmNlQ291bnQtLTtcbiAgICBpZiAoVGFnc1Jvd1RhZ0NvbXBvbmVudC5pbnN0YW5jZUNvdW50IDw9IDApIHtcbiAgICAgIC8vIFJlc2V0IGNvbXBsZXRvOiBnYXJhbnRlIGluaWNpYWxpemHDp8OjbyBsaW1wYSBuYSBwcsOzeGltYSB2aXNpdGEgYW8gRXhwbG9yYXJcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuaW5zdGFuY2VDb3VudCA9IDA7XG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LmFjdGl2ZUlkID0gbnVsbDtcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5SW5pdFRyaWVzID0gMDtcbiAgICAgIFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7IFRhZ3NSb3dUYWdDb21wb25lbnQuc2Nyb2xsU3B5U3ViPy51bnN1YnNjcmliZSgpOyB9IGNhdGNoIHt9XG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweVN1YiA9IG51bGw7XG4gICAgICBUYWdzUm93VGFnQ29tcG9uZW50LnNjcm9sbFNweSQgPSBudWxsO1xuICAgICAgVGFnc1Jvd1RhZ0NvbXBvbmVudC5zY3JvbGxTcHlDb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvdy10YWdcIiAjdGFnRWxlbWVudCAqbmdJZj1cInVpQ29tcG9uZW50XCIgW2VkbVNkdWlWaWV3XT1cInVpQ29tcG9uZW50LmVsZW1lbnRcIiAoY2xpY2spPVwib25UYWdDbGljaygpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0YWctbmFtZVwiICN0YWdOYW1lRWxlbWVudD57eyB1aUNvbXBvbmVudC5lbGVtZW50Py5sYWJlbCA/PyAnJyB9fTwvc3Bhbj5cbjwvZGl2PlxuIl19
|
|
@@ -18,6 +18,10 @@ import * as i1 from "@angular/router";
|
|
|
18
18
|
import * as i2 from "../core/services/ui-action.service";
|
|
19
19
|
import * as i3 from "../core/view-models/uiscreen.viewmodel";
|
|
20
20
|
export class UIViewDirective {
|
|
21
|
+
static { this.EXPLORE_LAST_ANCHOR_KEY = 'exploreLastAnchor'; }
|
|
22
|
+
static { this.EXPLORE_LAST_ROW_INDEX_KEY = 'exploreLastRowIndex'; }
|
|
23
|
+
static { this.EXPLORE_LAST_ROW_SCROLL_LEFT_KEY = 'exploreLastRowScrollLeft'; }
|
|
24
|
+
static { this.EXPLORE_LAST_ITEM_ID_KEY = 'exploreLastItemId'; }
|
|
21
25
|
constructor(elementRef, renderer, router, actionService, screenViewModel) {
|
|
22
26
|
this.elementRef = elementRef;
|
|
23
27
|
this.renderer = renderer;
|
|
@@ -307,10 +311,73 @@ export class UIViewDirective {
|
|
|
307
311
|
if (this.disableClick)
|
|
308
312
|
return;
|
|
309
313
|
if (this.edmSduiView?.action) {
|
|
314
|
+
this.captureExploreScrollContext();
|
|
310
315
|
event.stopPropagation();
|
|
311
316
|
this.actionService.execute(this.edmSduiView.action);
|
|
312
317
|
}
|
|
313
318
|
}
|
|
319
|
+
captureExploreScrollContext() {
|
|
320
|
+
if (typeof window === 'undefined' || !this.router.url.includes('/explorar')) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const element = this.elementRef.nativeElement;
|
|
324
|
+
const scrollRow = element.closest('.scrollable-row');
|
|
325
|
+
if (!scrollRow) {
|
|
326
|
+
this.clearExploreHorizontalScrollContext();
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
const section = this.resolveExploreSection(element, scrollRow);
|
|
330
|
+
const sectionId = section?.id || sessionStorage.getItem(UIViewDirective.EXPLORE_LAST_ANCHOR_KEY);
|
|
331
|
+
const rowIndex = this.resolveRowIndex(scrollRow, section);
|
|
332
|
+
const itemId = this.resolveClickedItemId(element, section);
|
|
333
|
+
try {
|
|
334
|
+
if (sectionId) {
|
|
335
|
+
sessionStorage.setItem(UIViewDirective.EXPLORE_LAST_ANCHOR_KEY, sectionId);
|
|
336
|
+
}
|
|
337
|
+
if (rowIndex >= 0) {
|
|
338
|
+
sessionStorage.setItem(UIViewDirective.EXPLORE_LAST_ROW_INDEX_KEY, String(rowIndex));
|
|
339
|
+
}
|
|
340
|
+
sessionStorage.setItem(UIViewDirective.EXPLORE_LAST_ROW_SCROLL_LEFT_KEY, String(Math.round(scrollRow.scrollLeft)));
|
|
341
|
+
if (itemId) {
|
|
342
|
+
sessionStorage.setItem(UIViewDirective.EXPLORE_LAST_ITEM_ID_KEY, itemId);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
sessionStorage.removeItem(UIViewDirective.EXPLORE_LAST_ITEM_ID_KEY);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch { }
|
|
349
|
+
}
|
|
350
|
+
clearExploreHorizontalScrollContext() {
|
|
351
|
+
try {
|
|
352
|
+
sessionStorage.removeItem(UIViewDirective.EXPLORE_LAST_ROW_INDEX_KEY);
|
|
353
|
+
sessionStorage.removeItem(UIViewDirective.EXPLORE_LAST_ROW_SCROLL_LEFT_KEY);
|
|
354
|
+
sessionStorage.removeItem(UIViewDirective.EXPLORE_LAST_ITEM_ID_KEY);
|
|
355
|
+
}
|
|
356
|
+
catch { }
|
|
357
|
+
}
|
|
358
|
+
resolveExploreSection(element, scrollRow) {
|
|
359
|
+
return (scrollRow.closest('[data-anchor-target][id]') ||
|
|
360
|
+
scrollRow.closest('.column[id]') ||
|
|
361
|
+
element.closest('[data-anchor-target][id]') ||
|
|
362
|
+
element.closest('.column[id]'));
|
|
363
|
+
}
|
|
364
|
+
resolveRowIndex(scrollRow, section) {
|
|
365
|
+
const scope = section ?? scrollRow.parentElement;
|
|
366
|
+
if (!scope) {
|
|
367
|
+
return -1;
|
|
368
|
+
}
|
|
369
|
+
return Array.from(scope.querySelectorAll('.scrollable-row')).indexOf(scrollRow);
|
|
370
|
+
}
|
|
371
|
+
resolveClickedItemId(element, section) {
|
|
372
|
+
if (element.id && element.id !== section?.id) {
|
|
373
|
+
return element.id;
|
|
374
|
+
}
|
|
375
|
+
const candidate = element.closest('[id]');
|
|
376
|
+
if (candidate?.id && candidate.id !== section?.id) {
|
|
377
|
+
return candidate.id;
|
|
378
|
+
}
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
314
381
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UIViewDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.Router }, { token: i2.UIActionService }, { token: i3.UIScreenViewModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
315
382
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: UIViewDirective, isStandalone: false, selector: "[edmSduiView]", inputs: { edmSduiView: "edmSduiView", disableClick: "disableClick" }, host: { listeners: { "window:resize": "onWindowResize()", "click": "onClick($event)" } }, usesOnChanges: true, ngImport: i0 }); }
|
|
316
383
|
}
|
|
@@ -333,4 +400,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
333
400
|
type: HostListener,
|
|
334
401
|
args: ['click', ['$event']]
|
|
335
402
|
}] } });
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWl2aWV3LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2R1aS9zcmMvbGliL2RpcmVjdGl2ZXMvdWl2aWV3LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFhdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsdUJBQXVCLEdBQ3hCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7OztBQU01RixNQUFNLE9BQU8sZUFBZTtJQVExQixZQUNVLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLE1BQWMsRUFDZCxhQUE4QixFQUNsQixlQUFrQztRQUo5QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUNsQixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFYL0MsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFL0IsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFDakMsbUJBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMscUJBQWdCLEdBQTBCLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztRQVNoRixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLGdCQUFnQjtvQkFDbkIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLElBQUkscUJBQXFCLENBQUMsU0FBUyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQWM7UUFDaEMsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLElBQUksRUFDSixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUNsQixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUcsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBRUgsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFvQjtRQUN2QyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsYUFBYSxFQUNiLFFBQVEsQ0FDVCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixjQUFjLEVBQ2QsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLGVBQWUsRUFDZixRQUFRLENBQ1QsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsZ0JBQWdCLEVBQ2hCLFFBQVEsQ0FDVCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxjQUE4QjtRQUN0RCxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsYUFBYSxFQUNiLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QiwwQkFBMEIsRUFDMUIsVUFBVSxDQUNYLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLGNBQWMsRUFDZCxVQUFVLENBQ1gsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsMkJBQTJCLEVBQzNCLFVBQVUsQ0FDWCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixlQUFlLEVBQ2YsVUFBVSxDQUNYLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLDRCQUE0QixFQUM1QixVQUFVLENBQ1gsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsZ0JBQWdCLEVBQ2hCLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3Qiw2QkFBNkIsRUFDN0IsVUFBVSxDQUNYLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxZQUEwQjtRQUNoRCxJQUFJLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqQyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0Isa0JBQWtCLEVBQ2xCLGVBQWUsQ0FDaEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyxjQUFjLElBQUksWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRSxNQUFNLGNBQWMsR0FBRywwQkFBMEIsY0FBYyxLQUFLLGNBQWMsR0FBRyxDQUFBO1lBQ3JGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsWUFBWSxFQUNaLGNBQWMsQ0FDZixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsUUFBa0I7UUFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVPLGNBQWMsQ0FBQyxXQUF3QjtRQUM3QyxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixhQUFhLEVBQ2IsU0FBUyxDQUNWLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxRQUFrQjtRQUNwQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsRixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEQsTUFBTSxVQUFVLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEUsdURBQXVEO1lBQ3ZELE1BQU0sV0FBVyxHQUFHLEdBQUcsT0FBTyxJQUFJLE9BQU8sSUFBSSxVQUFVLElBQUksS0FBSyxFQUFFLENBQUM7WUFFbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixZQUFZLEVBQ1osV0FBVyxDQUNaLENBQUM7WUFFRixJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixTQUFTLEVBQ1QsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUNuQixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWtCO1FBQ3BDLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3Qix3QkFBd0IsRUFDeEIsTUFBTSxDQUNQLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLHlCQUF5QixFQUN6QixNQUFNLENBQ1AsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsMkJBQTJCLEVBQzNCLE1BQU0sQ0FDUCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3Qiw0QkFBNEIsRUFDNUIsTUFBTSxDQUNQLENBQUM7UUFDSixDQUFDO0lBRUgsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFvQjtRQUN2QyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsS0FBSyxFQUNMLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsTUFBbUI7UUFDckMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsUUFBUSxFQUNSLFdBQVcsQ0FDWixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsS0FBa0I7UUFDbkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsT0FBTyxFQUNQLFVBQVUsQ0FDWCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUMxQyxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsY0FBYyxFQUNkLEdBQUcsV0FBVyxJQUFJLENBQ25CLENBQUM7WUFFRixzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixjQUFjLEVBQ2QsT0FBTyxDQUNSLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQW9CO1FBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsY0FBYyxFQUNkLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsT0FBa0I7UUFDckMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLGlCQUFpQixFQUNqQixZQUFZLENBQ2IsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBbUI7SUFDNUMsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFZO1FBQzVCLElBQUcsSUFBSSxFQUFDLENBQUM7WUFDUCxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxJQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUxQyxJQUNFLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxxQkFBcUIsQ0FBQyxLQUFLO2dCQUNyRCxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ3hHLENBQUM7Z0JBQ0QsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRCxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDN0IsT0FBTyxFQUNQLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUM3QixRQUFRLEVBQ1IsV0FBVyxDQUNaLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFXO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBRXpDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFeEMsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUV0RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxXQUFXLEdBQUc7OzRDQUVrQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7O09BRTdELENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQzlELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsS0FBSyxDQUFDLFdBQVcsR0FBRzs7NENBRWtCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQzs7T0FFN0QsQ0FBQztZQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDOUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxLQUFLLENBQUMsV0FBVyxHQUFHOzt3Q0FFYyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7O09BRXpELENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7SUFDbkUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhLEVBQUUsT0FBZTtRQUNwRCxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDN0IsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFHRCxjQUFjO1FBQ1osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBR0QsT0FBTyxDQUFDLEtBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDOytHQXJlVSxlQUFlO21HQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBY0ksUUFBUTt5Q0FaRixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBbWROLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlO2dCQVU3QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVUlWaWV3IH0gZnJvbSAnLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aXZpZXcnO1xuaW1wb3J0IHsgVUlQYWRkaW5nIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aXBhZGRpbmcnO1xuaW1wb3J0IHsgVUlCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aWJhY2tncm91bmQnO1xuaW1wb3J0IHsgVUlBY3Rpb24gfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbW9kZWxzL3VpYWN0aW9uJztcbmltcG9ydCB7IFVJQWxpZ25tZW50IH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aWFsaWdubWVudCc7XG5pbXBvcnQgeyBVSVNoYWRvdyB9IGZyb20gJy4uL2NvcmUvdWl0aGVtZS9tb2RlbHMvdWlzaGFkb3cnO1xuaW1wb3J0IHsgVUlSYWRpdXMgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbW9kZWxzL3VpcmFkaXVzJztcbmltcG9ydCB7IFVJU3BhY2luZyB9IGZyb20gJy4uL2NvcmUvdWl0aGVtZS9tb2RlbHMvdWlzcGFjaW5nJztcbmltcG9ydCB7IFVJQ29sb3IgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvZW51bXMvdWljb2xvcic7XG5pbXBvcnQgeyBVSUp1c3RpZnkgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvZW51bXMvdWlqdXN0aWZ5JztcbmltcG9ydCB7IFVJRGltZW5zaW9uIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL2VudW1zL3VpZGltZW5zaW9uJztcbmltcG9ydCB7IFVJQ29udGVudEluc2V0IH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aWNvbnRlbnQtaW5zZXQnO1xuaW1wb3J0IHsgc3BhY2VNYXBwaW5nIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc3BhY2UtbWFwcGluZyc7XG5pbXBvcnQgeyBjb2xvck1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9jb2xvci1tYXBwaW5nJztcbmltcG9ydCB7IHBhZE1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9wYWQtbWFwcGluZyc7XG5pbXBvcnQgeyByYWRpdXNNYXBwaW5nIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvcmFkaXVzLW1hcHBpbmcnO1xuaW1wb3J0IHsgYWxpZ25tZW50TWFwcGluZyB9IGZyb20gJy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL2FsaWdubWVudC1tYXBwaW5nJztcbmltcG9ydCB7IGRpbWVuc2lvbk1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9kaW1lbnNpb24tbWFwcGluZyc7XG5pbXBvcnQge1xuICBzaGFkb3dPZmZzZXRNYXBwaW5nLFxuICBzaGFkb3dCbHVyUmFkaXVzTWFwcGluZyxcbn0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc2hhZG93LW1hcHBpbmcnO1xuaW1wb3J0IHsganVzdGlmeU1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9qdXN0aWZ5LW1hcHBpbmcnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVJU2NyZWVuVmlld01vZGVsIH0gZnJvbSAnLi4vY29yZS92aWV3LW1vZGVscy91aXNjcmVlbi52aWV3bW9kZWwnO1xuaW1wb3J0IHsgVUlBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy91aS1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBVSVNpemUgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvZW51bXMvdWlzaXplJztcbmltcG9ydCB7IHNpemVNYXBwaW5nSGVpZ2h0LCBzaXplTWFwcGluZ1dpZHRoIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc2l6ZS1tYXBwaW5nJztcbmltcG9ydCB7IFVJU2NyZWVuQ29udGFpbmVyVHlwZSB9IGZyb20gJy4uL2NvcmUvdWljb21wb3NpdGlvbi9lbnVtcy91aXNjcmVlbi1jb250YWluZXItdHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlZG1TZHVpVmlld10nLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgVUlWaWV3RGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZWRtU2R1aVZpZXc/OiBVSVZpZXc7XG4gIEBJbnB1dCgpIGRpc2FibGVDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgbGFzdFVpVmlldzogVUlWaWV3IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgd2FzU21hbGxTY3JlZW4gPSB0aGlzLmlzU21hbGxTY3JlZW4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50Q29udGFpbmVyOiBVSVNjcmVlbkNvbnRhaW5lclR5cGUgPSBVSVNjcmVlbkNvbnRhaW5lclR5cGUuQ09OVEFJTkVEO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGlvblNlcnZpY2U6IFVJQWN0aW9uU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNjcmVlblZpZXdNb2RlbDogVUlTY3JlZW5WaWV3TW9kZWxcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2NyZWVuVmlld01vZGVsKSB7XG4gICAgICB0aGlzLnNjcmVlblZpZXdNb2RlbC51aVNjcmVlbiQuc3Vic2NyaWJlKChzY3JlZW4pID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGFpbmVyID1cbiAgICAgICAgICBzY3JlZW4/LmNvbmZpZz8uY29udGFpbmVyID8/IFVJU2NyZWVuQ29udGFpbmVyVHlwZS5DT05UQUlORUQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRtU2R1aVZpZXcpIHtcbiAgICAgIHRoaXMubGFzdFVpVmlldyA9IHRoaXMuZWRtU2R1aVZpZXc7XG4gICAgICB0aGlzLmFwcGx5U3R5bGVzKHRoaXMuZWRtU2R1aVZpZXcpO1xuICAgICAgdGhpcy53YXNTbWFsbFNjcmVlbiA9IHRoaXMuaXNTbWFsbFNjcmVlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTdHlsZXModWlWaWV3OiBVSVZpZXcpIHtcbiAgICBpZiAodWlWaWV3LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdpZCcsXG4gICAgICAgIFN0cmluZyh1aVZpZXcuaWQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcucGFkZGluZykge1xuICAgICAgdGhpcy5hcHBseVBhZGRpbmcodWlWaWV3LnBhZGRpbmcpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuY29udGVudEluc2V0KSB7XG4gICAgICB0aGlzLmFwcGx5Q29udGVudEluc2V0KHVpVmlldy5jb250ZW50SW5zZXQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYmFja2dyb3VuZCkge1xuICAgICAgdGhpcy5hcHBseUJhY2tncm91bmQodWlWaWV3LmJhY2tncm91bmQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYWN0aW9uKSB7XG4gICAgICB0aGlzLmFwcGx5QWN0aW9uKHVpVmlldy5hY3Rpb24pO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYWxpZ25tZW50KSB7XG4gICAgICB0aGlzLmFwcGx5QWxpZ25tZW50KHVpVmlldy5hbGlnbm1lbnQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuc2hhZG93KSB7XG4gICAgICB0aGlzLmFwcGx5U2hhZG93KHVpVmlldy5zaGFkb3cpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcucmFkaXVzKSB7XG4gICAgICB0aGlzLmFwcGx5UmFkaXVzKHVpVmlldy5yYWRpdXMpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuc3BhY2luZykge1xuICAgICAgdGhpcy5hcHBseVNwYWNpbmcodWlWaWV3LnNwYWNpbmcpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmFwcGx5SGVpZ2h0KHVpVmlldy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcud2lkdGgpIHtcbiAgICAgIHRoaXMuYXBwbHlXaWR0aCh1aVZpZXcud2lkdGgpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYm9yZGVyV2lkdGgpIHtcbiAgICAgIHRoaXMuYXBwbHlCb3JkZXJXaWR0aCh1aVZpZXcuYm9yZGVyV2lkdGgpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYm9yZGVyQ29sb3IpIHtcbiAgICAgIHRoaXMuYXBwbHlCb3JkZXJDb2xvcih1aVZpZXcuYm9yZGVyQ29sb3IpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuanVzdGlmeSkge1xuICAgICAgdGhpcy5hcHBseUp1c3RpZnkodWlWaWV3Lmp1c3RpZnkpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuc2l6ZSkge1xuICAgICAgdGhpcy5hcHBseVNpemUodWlWaWV3LnNpemUpO1xuICAgIH1cbiAgICBpZiAodWlWaWV3LmFzcGVjdFJhdGlvICE9PSBudWxsICYmIHVpVmlldy5hc3BlY3RSYXRpbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmFwcGx5QXNwZWN0UmF0aW8odWlWaWV3LmFzcGVjdFJhdGlvKTtcbiAgICB9XG5cbiAgICBpZih1aVZpZXcuaG92ZXIpe1xuICAgICAgdGhpcy5hcHBseUhvdmVyVmFycyh1aVZpZXcpO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBhZGRpbmcodWlQYWRkaW5nOiBVSVBhZGRpbmcpIHtcbiAgICBpZiAodWlQYWRkaW5nLnRvcCkge1xuICAgICAgY29uc3QgcGFkVmFsdWUgPSBwYWRNYXBwaW5nW3VpUGFkZGluZy50b3BdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLXRvcCcsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodWlQYWRkaW5nLmxlZnQpIHtcbiAgICAgIGNvbnN0IHBhZFZhbHVlID0gcGFkTWFwcGluZ1t1aVBhZGRpbmcubGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodWlQYWRkaW5nLnJpZ2h0KSB7XG4gICAgICBjb25zdCBwYWRWYWx1ZSA9IHBhZE1hcHBpbmdbdWlQYWRkaW5nLnJpZ2h0XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAncGFkZGluZy1yaWdodCcsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodWlQYWRkaW5nLmJvdHRvbSkge1xuICAgICAgY29uc3QgcGFkVmFsdWUgPSBwYWRNYXBwaW5nW3VpUGFkZGluZy5ib3R0b21dO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb250ZW50SW5zZXQodWlDb250ZW50SW5zZXQ6IFVJQ29udGVudEluc2V0KSB7XG4gICAgaWYgKHVpQ29udGVudEluc2V0LnRvcCkge1xuICAgICAgY29uc3QgaW5zZXRWYWx1ZSA9IHNwYWNlTWFwcGluZ1t1aUNvbnRlbnRJbnNldC50b3BdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLXRvcCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJy0tc2R1aS1jb250ZW50LWluc2V0LXRvcCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpQ29udGVudEluc2V0LmxlZnQpIHtcbiAgICAgIGNvbnN0IGluc2V0VmFsdWUgPSBzcGFjZU1hcHBpbmdbdWlDb250ZW50SW5zZXQubGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJy0tc2R1aS1jb250ZW50LWluc2V0LWxlZnQnLFxuICAgICAgICBpbnNldFZhbHVlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1aUNvbnRlbnRJbnNldC5yaWdodCkge1xuICAgICAgY29uc3QgaW5zZXRWYWx1ZSA9IHNwYWNlTWFwcGluZ1t1aUNvbnRlbnRJbnNldC5yaWdodF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICBpbnNldFZhbHVlXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICctLXNkdWktY29udGVudC1pbnNldC1yaWdodCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpQ29udGVudEluc2V0LmJvdHRvbSkge1xuICAgICAgY29uc3QgaW5zZXRWYWx1ZSA9IHNwYWNlTWFwcGluZ1t1aUNvbnRlbnRJbnNldC5ib3R0b21dO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJy0tc2R1aS1jb250ZW50LWluc2V0LWJvdHRvbScsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUJhY2tncm91bmQodWlCYWNrZ3JvdW5kOiBVSUJhY2tncm91bmQpIHtcbiAgICBpZiAodWlCYWNrZ3JvdW5kLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gY29sb3JNYXBwaW5nW3VpQmFja2dyb3VuZC5iYWNrZ3JvdW5kQ29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1aUJhY2tncm91bmQuZ3JhZGllbnRDb2xvcjEgJiYgdWlCYWNrZ3JvdW5kLmdyYWRpZW50Q29sb3IyKSB7XG4gICAgICBjb25zdCBncmFkaWVudENvbG9yMSA9IGNvbG9yTWFwcGluZ1t1aUJhY2tncm91bmQuZ3JhZGllbnRDb2xvcjFdO1xuICAgICAgY29uc3QgZ3JhZGllbnRDb2xvcjIgPSBjb2xvck1hcHBpbmdbdWlCYWNrZ3JvdW5kLmdyYWRpZW50Q29sb3IyXTtcbiAgICAgIGNvbnN0IGdyYWRpZW50U3R5bGVzID0gYGxpbmVhci1ncmFkaWVudCg0NWRlZywgJHtncmFkaWVudENvbG9yMX0sICR7Z3JhZGllbnRDb2xvcjJ9KWBcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAgIGdyYWRpZW50U3R5bGVzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlBY3Rpb24odWlBY3Rpb246IFVJQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZUNsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5QWxpZ25tZW50KHVpQWxpZ25tZW50OiBVSUFsaWdubWVudCkge1xuICAgIGlmICh1aUFsaWdubWVudC5hbGlnbm1lbnQpIHtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGFsaWdubWVudE1hcHBpbmdbdWlBbGlnbm1lbnQuYWxpZ25tZW50XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYWxpZ24taXRlbXMnLFxuICAgICAgICBhbGlnbm1lbnRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNoYWRvdyh1aVNoYWRvdzogVUlTaGFkb3cpIHtcbiAgICBpZiAodWlTaGFkb3cuY29sb3IgJiYgdWlTaGFkb3cub2Zmc2V0WCAmJiB1aVNoYWRvdy5vZmZzZXRZICYmIHVpU2hhZG93LmJsdXJSYWRpdXMpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JNYXBwaW5nW3VpU2hhZG93LmNvbG9yXTtcbiAgICAgIGNvbnN0IG9mZnNldFggPSBzaGFkb3dPZmZzZXRNYXBwaW5nW3VpU2hhZG93Lm9mZnNldFhdO1xuICAgICAgY29uc3Qgb2Zmc2V0WSA9IHNoYWRvd09mZnNldE1hcHBpbmdbdWlTaGFkb3cub2Zmc2V0WV07XG4gICAgICBjb25zdCBibHVyUmFkaXVzID0gc2hhZG93Qmx1clJhZGl1c01hcHBpbmdbdWlTaGFkb3cuYmx1clJhZGl1c107XG4gICAgICBjb25zdCBvcGFjaXR5ID0gdWlTaGFkb3cub3BhY2l0eSAhPT0gdW5kZWZpbmVkID8gdWlTaGFkb3cub3BhY2l0eSA6IDE7XG5cbiAgICAgIC8vIEZvcm1hdDogYm94LXNoYWRvdzogb2Zmc2V0WCBvZmZzZXRZIGJsdXJSYWRpdXMgY29sb3JcbiAgICAgIGNvbnN0IHNoYWRvd1ZhbHVlID0gYCR7b2Zmc2V0WH0gJHtvZmZzZXRZfSAke2JsdXJSYWRpdXN9ICR7Y29sb3J9YDtcblxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdib3gtc2hhZG93JyxcbiAgICAgICAgc2hhZG93VmFsdWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgJ29wYWNpdHknLFxuICAgICAgICAgIG9wYWNpdHkudG9TdHJpbmcoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlSYWRpdXModWlSYWRpdXM6IFVJUmFkaXVzKSB7XG4gICAgaWYgKHVpUmFkaXVzLnRvcExlZnQpIHtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IHJhZGl1c01hcHBpbmdbdWlSYWRpdXMudG9wTGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpUmFkaXVzLnRvcFJpZ2h0KSB7XG4gICAgICBjb25zdCByYWRpdXMgPSByYWRpdXNNYXBwaW5nW3VpUmFkaXVzLnRvcFJpZ2h0XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpUmFkaXVzLmJvdHRvbUxlZnQpIHtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IHJhZGl1c01hcHBpbmdbdWlSYWRpdXMuYm90dG9tTGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpUmFkaXVzLmJvdHRvbVJpZ2h0KSB7XG4gICAgICBjb25zdCByYWRpdXMgPSByYWRpdXNNYXBwaW5nW3VpUmFkaXVzLmJvdHRvbVJpZ2h0XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGFwcGx5U3BhY2luZyh1aVNwYWNpbmc6IFVJU3BhY2luZykge1xuICAgIGlmICh1aVNwYWNpbmcuc3BhY2luZykge1xuICAgICAgY29uc3Qgc3BhY2luZ1ZhbHVlID0gc3BhY2VNYXBwaW5nW3VpU3BhY2luZy5zcGFjaW5nXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnZ2FwJyxcbiAgICAgICAgc3BhY2luZ1ZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlIZWlnaHQoaGVpZ2h0OiBVSURpbWVuc2lvbikge1xuICAgIGlmIChoZWlnaHQpIHtcbiAgICAgIGNvbnN0IGhlaWdodFZhbHVlID0gZGltZW5zaW9uTWFwcGluZ1toZWlnaHRdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICBoZWlnaHRWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5V2lkdGgod2lkdGg6IFVJRGltZW5zaW9uKSB7XG4gICAgaWYgKHdpZHRoKSB7XG4gICAgICBjb25zdCB3aWR0aFZhbHVlID0gZGltZW5zaW9uTWFwcGluZ1t3aWR0aF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgd2lkdGhWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Qm9yZGVyV2lkdGgoYm9yZGVyV2lkdGg6IG51bWJlcikge1xuICAgIGlmIChib3JkZXJXaWR0aCAhPT0gbnVsbCAmJiBib3JkZXJXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2JvcmRlci13aWR0aCcsXG4gICAgICAgIGAke2JvcmRlcldpZHRofXB4YFxuICAgICAgKTtcblxuICAgICAgLy8gRW5zdXJlIGJvcmRlciBzdHlsZSBpcyBzZXQsIG90aGVyd2lzZSBib3JkZXItd2lkdGggd29uJ3QgYmUgdmlzaWJsZVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdib3JkZXItc3R5bGUnLFxuICAgICAgICAnc29saWQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlCb3JkZXJDb2xvcihib3JkZXJDb2xvcjogVUlDb2xvcikge1xuICAgIGlmIChib3JkZXJDb2xvcikge1xuICAgICAgY29uc3QgY29sb3IgPSBjb2xvck1hcHBpbmdbYm9yZGVyQ29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdib3JkZXItY29sb3InLFxuICAgICAgICBjb2xvclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SnVzdGlmeShqdXN0aWZ5OiBVSUp1c3RpZnkpIHtcbiAgICBpZiAoanVzdGlmeSkge1xuICAgICAgY29uc3QganVzdGlmeVZhbHVlID0ganVzdGlmeU1hcHBpbmdbanVzdGlmeV07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2p1c3RpZnktY29udGVudCcsXG4gICAgICAgIGp1c3RpZnlWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5QXNwZWN0UmF0aW8oYXNwZWN0UmF0aW86IG51bWJlcikge1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNpemUoc2l6ZTogVUlTaXplKSB7XG4gICAgaWYoc2l6ZSl7XG4gICAgICBsZXQgd2lkdGhWYWx1ZSA9IHNpemVNYXBwaW5nV2lkdGhbc2l6ZV07XG4gICAgICBsZXQgaGVpZ2h0VmFsdWUgPSBzaXplTWFwcGluZ0hlaWdodFtzaXplXTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzU21hbGxTY3JlZW4oKSAmJlxuICAgICAgICB0aGlzLmN1cnJlbnRDb250YWluZXIgPT09IFVJU2NyZWVuQ29udGFpbmVyVHlwZS5GTFVJRCAmJlxuICAgICAgICAoc2l6ZSA9PT0gVUlTaXplLkNBUkRfMSB8fCBzaXplID09PSBVSVNpemUuQ0FSRF8yIHx8IHNpemUgPT09IFVJU2l6ZS5USFVNQl8zIHx8IHNpemUgPT09IFVJU2l6ZS5USFVNQl80KVxuICAgICAgKSB7XG4gICAgICAgIHdpZHRoVmFsdWUgPSB0aGlzLnNjYWxlUGl4ZWxWYWx1ZSh3aWR0aFZhbHVlLCAxLjEpO1xuICAgICAgICBoZWlnaHRWYWx1ZSA9IHRoaXMuc2NhbGVQaXhlbFZhbHVlKGhlaWdodFZhbHVlLCAxLjEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgd2lkdGhWYWx1ZVxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgaGVpZ2h0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUhvdmVyVmFycyh1aVZpZXc6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhvdmVyID0gdWlWaWV3Py5ob3ZlciA/PyB1aVZpZXc/LmVsZW1lbnQ/LmhvdmVyO1xuICAgIGlmICghaG92ZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyBtYXJjYSBxdWUgZXNzZSBlbGVtZW50byB0ZW0gaG92ZXJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsLCAnZWRtLWhvdmVyJyk7XG5cbiAgICBpZiAoaG92ZXIuYm9yZGVyX2NvbG9yIHx8IGhvdmVyLmJvcmRlckNvbG9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhob3Zlci5ib3JkZXJfY29sb3IsIGhvdmVyLmJvcmRlckNvbG9yKTtcbiAgICAgIGNvbnN0IHRva2VuID0gaG92ZXIuYm9yZGVyX2NvbG9yID8/IGhvdmVyLmJvcmRlckNvbG9yO1xuXG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAgICAgOnJvb3Qge1xuICAgICAgICAgIC0tZWRtLWhvdmVyLWJvcmRlci1jb2xvcjogdmFyKC0tJHt0b2tlbi5yZXBsYWNlKC9fL2csICctJyl9KTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXG4gICAgfVxuXG4gICAgaWYgKGhvdmVyLmJhY2tncm91bmRfY29sb3IgfHwgaG92ZXIuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGhvdmVyLmJhY2tncm91bmRfY29sb3IgPz8gaG92ZXIuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgICAgIDpyb290IHtcbiAgICAgICAgICAtLWVkbS1ob3Zlci1ib3JkZXItY29sb3I6IHZhcigtLSR7dG9rZW4ucmVwbGFjZSgvXy9nLCAnLScpfSk7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG5cbiAgICBpZiAoaG92ZXIuYmFja2dyb3VuZF9jb2xvciB8fCBob3Zlci5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gaG92ZXIuYmFja2dyb3VuZF9jb2xvciA/PyBob3Zlci5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAgICAgOnJvb3Qge1xuICAgICAgICAgIC0tZWRtLWhvdmVyLWJnLWNvbG9yOiB2YXIoLS0ke3Rva2VuLnJlcGxhY2UoL18vZywgJy0nKX0pO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1NtYWxsU2NyZWVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NjU7XG4gIH1cblxuICBwcml2YXRlIHNjYWxlUGl4ZWxWYWx1ZSh2YWx1ZTogc3RyaW5nLCBkaXZpc29yOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoID0gL14oXFxkKyg/OlxcLlxcZCspPylweCQvLmV4ZWModmFsdWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgICBjb25zdCBzY2FsZWQgPSBudW0gKiBkaXZpc29yO1xuICAgIHJldHVybiBgJHtzY2FsZWR9cHhgO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzU21hbGwgPSB0aGlzLmlzU21hbGxTY3JlZW4oKTtcbiAgICBpZiAodGhpcy5sYXN0VWlWaWV3ICYmIGlzU21hbGwgIT09IHRoaXMud2FzU21hbGxTY3JlZW4pIHtcbiAgICAgIHRoaXMuYXBwbHlTdHlsZXModGhpcy5sYXN0VWlWaWV3KTtcbiAgICAgIHRoaXMud2FzU21hbGxTY3JlZW4gPSBpc1NtYWxsO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlQ2xpY2spIHJldHVybjtcblxuICAgIGlmICh0aGlzLmVkbVNkdWlWaWV3Py5hY3Rpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5hY3Rpb25TZXJ2aWNlLmV4ZWN1dGUodGhpcy5lZG1TZHVpVmlldy5hY3Rpb24pO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWl2aWV3LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2R1aS9zcmMvbGliL2RpcmVjdGl2ZXMvdWl2aWV3LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFhdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsdUJBQXVCLEdBQ3hCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7OztBQU01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T0FBMkI7UUFDNUUsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQXVCLENBQUM7UUFDaEUsSUFBSSxTQUFTLEVBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2xELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQXpqQlUsZUFBZTttR0FBZixlQUFlOzs0RkFBZixlQUFlO2tCQUozQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsS0FBSztpQkFDbEI7OzBCQWtCSSxRQUFRO3lDQWhCRixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBdWROLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlO2dCQVU3QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVUlWaWV3IH0gZnJvbSAnLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aXZpZXcnO1xuaW1wb3J0IHsgVUlQYWRkaW5nIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aXBhZGRpbmcnO1xuaW1wb3J0IHsgVUlCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aWJhY2tncm91bmQnO1xuaW1wb3J0IHsgVUlBY3Rpb24gfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbW9kZWxzL3VpYWN0aW9uJztcbmltcG9ydCB7IFVJQWxpZ25tZW50IH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aWFsaWdubWVudCc7XG5pbXBvcnQgeyBVSVNoYWRvdyB9IGZyb20gJy4uL2NvcmUvdWl0aGVtZS9tb2RlbHMvdWlzaGFkb3cnO1xuaW1wb3J0IHsgVUlSYWRpdXMgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbW9kZWxzL3VpcmFkaXVzJztcbmltcG9ydCB7IFVJU3BhY2luZyB9IGZyb20gJy4uL2NvcmUvdWl0aGVtZS9tb2RlbHMvdWlzcGFjaW5nJztcbmltcG9ydCB7IFVJQ29sb3IgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvZW51bXMvdWljb2xvcic7XG5pbXBvcnQgeyBVSUp1c3RpZnkgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvZW51bXMvdWlqdXN0aWZ5JztcbmltcG9ydCB7IFVJRGltZW5zaW9uIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL2VudW1zL3VpZGltZW5zaW9uJztcbmltcG9ydCB7IFVJQ29udGVudEluc2V0IH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21vZGVscy91aWNvbnRlbnQtaW5zZXQnO1xuaW1wb3J0IHsgc3BhY2VNYXBwaW5nIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc3BhY2UtbWFwcGluZyc7XG5pbXBvcnQgeyBjb2xvck1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9jb2xvci1tYXBwaW5nJztcbmltcG9ydCB7IHBhZE1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9wYWQtbWFwcGluZyc7XG5pbXBvcnQgeyByYWRpdXNNYXBwaW5nIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvcmFkaXVzLW1hcHBpbmcnO1xuaW1wb3J0IHsgYWxpZ25tZW50TWFwcGluZyB9IGZyb20gJy4uL2NvcmUvdWl0aGVtZS9tYXBwaW5nL2FsaWdubWVudC1tYXBwaW5nJztcbmltcG9ydCB7IGRpbWVuc2lvbk1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9kaW1lbnNpb24tbWFwcGluZyc7XG5pbXBvcnQge1xuICBzaGFkb3dPZmZzZXRNYXBwaW5nLFxuICBzaGFkb3dCbHVyUmFkaXVzTWFwcGluZyxcbn0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc2hhZG93LW1hcHBpbmcnO1xuaW1wb3J0IHsganVzdGlmeU1hcHBpbmcgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvbWFwcGluZy9qdXN0aWZ5LW1hcHBpbmcnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVJU2NyZWVuVmlld01vZGVsIH0gZnJvbSAnLi4vY29yZS92aWV3LW1vZGVscy91aXNjcmVlbi52aWV3bW9kZWwnO1xuaW1wb3J0IHsgVUlBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy91aS1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBVSVNpemUgfSBmcm9tICcuLi9jb3JlL3VpdGhlbWUvZW51bXMvdWlzaXplJztcbmltcG9ydCB7IHNpemVNYXBwaW5nSGVpZ2h0LCBzaXplTWFwcGluZ1dpZHRoIH0gZnJvbSAnLi4vY29yZS91aXRoZW1lL21hcHBpbmcvc2l6ZS1tYXBwaW5nJztcbmltcG9ydCB7IFVJU2NyZWVuQ29udGFpbmVyVHlwZSB9IGZyb20gJy4uL2NvcmUvdWljb21wb3NpdGlvbi9lbnVtcy91aXNjcmVlbi1jb250YWluZXItdHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlZG1TZHVpVmlld10nLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgVUlWaWV3RGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZWRtU2R1aVZpZXc/OiBVSVZpZXc7XG4gIEBJbnB1dCgpIGRpc2FibGVDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFWFBMT1JFX0xBU1RfQU5DSE9SX0tFWSA9ICdleHBsb3JlTGFzdEFuY2hvcic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEVYUExPUkVfTEFTVF9ST1dfSU5ERVhfS0VZID0gJ2V4cGxvcmVMYXN0Um93SW5kZXgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFWFBMT1JFX0xBU1RfUk9XX1NDUk9MTF9MRUZUX0tFWSA9ICdleHBsb3JlTGFzdFJvd1Njcm9sbExlZnQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFWFBMT1JFX0xBU1RfSVRFTV9JRF9LRVkgPSAnZXhwbG9yZUxhc3RJdGVtSWQnO1xuXG4gIHByaXZhdGUgbGFzdFVpVmlldzogVUlWaWV3IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgd2FzU21hbGxTY3JlZW4gPSB0aGlzLmlzU21hbGxTY3JlZW4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50Q29udGFpbmVyOiBVSVNjcmVlbkNvbnRhaW5lclR5cGUgPSBVSVNjcmVlbkNvbnRhaW5lclR5cGUuQ09OVEFJTkVEO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGlvblNlcnZpY2U6IFVJQWN0aW9uU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNjcmVlblZpZXdNb2RlbDogVUlTY3JlZW5WaWV3TW9kZWxcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2NyZWVuVmlld01vZGVsKSB7XG4gICAgICB0aGlzLnNjcmVlblZpZXdNb2RlbC51aVNjcmVlbiQuc3Vic2NyaWJlKChzY3JlZW4pID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29udGFpbmVyID1cbiAgICAgICAgICBzY3JlZW4/LmNvbmZpZz8uY29udGFpbmVyID8/IFVJU2NyZWVuQ29udGFpbmVyVHlwZS5DT05UQUlORUQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRtU2R1aVZpZXcpIHtcbiAgICAgIHRoaXMubGFzdFVpVmlldyA9IHRoaXMuZWRtU2R1aVZpZXc7XG4gICAgICB0aGlzLmFwcGx5U3R5bGVzKHRoaXMuZWRtU2R1aVZpZXcpO1xuICAgICAgdGhpcy53YXNTbWFsbFNjcmVlbiA9IHRoaXMuaXNTbWFsbFNjcmVlbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTdHlsZXModWlWaWV3OiBVSVZpZXcpIHtcbiAgICBpZiAodWlWaWV3LmlkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdpZCcsXG4gICAgICAgIFN0cmluZyh1aVZpZXcuaWQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcucGFkZGluZykge1xuICAgICAgdGhpcy5hcHBseVBhZGRpbmcodWlWaWV3LnBhZGRpbmcpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuY29udGVudEluc2V0KSB7XG4gICAgICB0aGlzLmFwcGx5Q29udGVudEluc2V0KHVpVmlldy5jb250ZW50SW5zZXQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYmFja2dyb3VuZCkge1xuICAgICAgdGhpcy5hcHBseUJhY2tncm91bmQodWlWaWV3LmJhY2tncm91bmQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYWN0aW9uKSB7XG4gICAgICB0aGlzLmFwcGx5QWN0aW9uKHVpVmlldy5hY3Rpb24pO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYWxpZ25tZW50KSB7XG4gICAgICB0aGlzLmFwcGx5QWxpZ25tZW50KHVpVmlldy5hbGlnbm1lbnQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuc2hhZG93KSB7XG4gICAgICB0aGlzLmFwcGx5U2hhZG93KHVpVmlldy5zaGFkb3cpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcucmFkaXVzKSB7XG4gICAgICB0aGlzLmFwcGx5UmFkaXVzKHVpVmlldy5yYWRpdXMpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuc3BhY2luZykge1xuICAgICAgdGhpcy5hcHBseVNwYWNpbmcodWlWaWV3LnNwYWNpbmcpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuaGVpZ2h0KSB7XG4gICAgICB0aGlzLmFwcGx5SGVpZ2h0KHVpVmlldy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcud2lkdGgpIHtcbiAgICAgIHRoaXMuYXBwbHlXaWR0aCh1aVZpZXcud2lkdGgpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYm9yZGVyV2lkdGgpIHtcbiAgICAgIHRoaXMuYXBwbHlCb3JkZXJXaWR0aCh1aVZpZXcuYm9yZGVyV2lkdGgpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuYm9yZGVyQ29sb3IpIHtcbiAgICAgIHRoaXMuYXBwbHlCb3JkZXJDb2xvcih1aVZpZXcuYm9yZGVyQ29sb3IpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuanVzdGlmeSkge1xuICAgICAgdGhpcy5hcHBseUp1c3RpZnkodWlWaWV3Lmp1c3RpZnkpO1xuICAgIH1cblxuICAgIGlmICh1aVZpZXcuc2l6ZSkge1xuICAgICAgdGhpcy5hcHBseVNpemUodWlWaWV3LnNpemUpO1xuICAgIH1cbiAgICBpZiAodWlWaWV3LmFzcGVjdFJhdGlvICE9PSBudWxsICYmIHVpVmlldy5hc3BlY3RSYXRpbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmFwcGx5QXNwZWN0UmF0aW8odWlWaWV3LmFzcGVjdFJhdGlvKTtcbiAgICB9XG5cbiAgICBpZih1aVZpZXcuaG92ZXIpe1xuICAgICAgdGhpcy5hcHBseUhvdmVyVmFycyh1aVZpZXcpO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBhZGRpbmcodWlQYWRkaW5nOiBVSVBhZGRpbmcpIHtcbiAgICBpZiAodWlQYWRkaW5nLnRvcCkge1xuICAgICAgY29uc3QgcGFkVmFsdWUgPSBwYWRNYXBwaW5nW3VpUGFkZGluZy50b3BdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLXRvcCcsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodWlQYWRkaW5nLmxlZnQpIHtcbiAgICAgIGNvbnN0IHBhZFZhbHVlID0gcGFkTWFwcGluZ1t1aVBhZGRpbmcubGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodWlQYWRkaW5nLnJpZ2h0KSB7XG4gICAgICBjb25zdCBwYWRWYWx1ZSA9IHBhZE1hcHBpbmdbdWlQYWRkaW5nLnJpZ2h0XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAncGFkZGluZy1yaWdodCcsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodWlQYWRkaW5nLmJvdHRvbSkge1xuICAgICAgY29uc3QgcGFkVmFsdWUgPSBwYWRNYXBwaW5nW3VpUGFkZGluZy5ib3R0b21dO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgIHBhZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb250ZW50SW5zZXQodWlDb250ZW50SW5zZXQ6IFVJQ29udGVudEluc2V0KSB7XG4gICAgaWYgKHVpQ29udGVudEluc2V0LnRvcCkge1xuICAgICAgY29uc3QgaW5zZXRWYWx1ZSA9IHNwYWNlTWFwcGluZ1t1aUNvbnRlbnRJbnNldC50b3BdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLXRvcCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJy0tc2R1aS1jb250ZW50LWluc2V0LXRvcCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpQ29udGVudEluc2V0LmxlZnQpIHtcbiAgICAgIGNvbnN0IGluc2V0VmFsdWUgPSBzcGFjZU1hcHBpbmdbdWlDb250ZW50SW5zZXQubGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJy0tc2R1aS1jb250ZW50LWluc2V0LWxlZnQnLFxuICAgICAgICBpbnNldFZhbHVlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1aUNvbnRlbnRJbnNldC5yaWdodCkge1xuICAgICAgY29uc3QgaW5zZXRWYWx1ZSA9IHNwYWNlTWFwcGluZ1t1aUNvbnRlbnRJbnNldC5yaWdodF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICBpbnNldFZhbHVlXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICctLXNkdWktY29udGVudC1pbnNldC1yaWdodCcsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpQ29udGVudEluc2V0LmJvdHRvbSkge1xuICAgICAgY29uc3QgaW5zZXRWYWx1ZSA9IHNwYWNlTWFwcGluZ1t1aUNvbnRlbnRJbnNldC5ib3R0b21dO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJy0tc2R1aS1jb250ZW50LWluc2V0LWJvdHRvbScsXG4gICAgICAgIGluc2V0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUJhY2tncm91bmQodWlCYWNrZ3JvdW5kOiBVSUJhY2tncm91bmQpIHtcbiAgICBpZiAodWlCYWNrZ3JvdW5kLmJhY2tncm91bmRDb2xvcikge1xuICAgICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gY29sb3JNYXBwaW5nW3VpQmFja2dyb3VuZC5iYWNrZ3JvdW5kQ29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1aUJhY2tncm91bmQuZ3JhZGllbnRDb2xvcjEgJiYgdWlCYWNrZ3JvdW5kLmdyYWRpZW50Q29sb3IyKSB7XG4gICAgICBjb25zdCBncmFkaWVudENvbG9yMSA9IGNvbG9yTWFwcGluZ1t1aUJhY2tncm91bmQuZ3JhZGllbnRDb2xvcjFdO1xuICAgICAgY29uc3QgZ3JhZGllbnRDb2xvcjIgPSBjb2xvck1hcHBpbmdbdWlCYWNrZ3JvdW5kLmdyYWRpZW50Q29sb3IyXTtcbiAgICAgIGNvbnN0IGdyYWRpZW50U3R5bGVzID0gYGxpbmVhci1ncmFkaWVudCg0NWRlZywgJHtncmFkaWVudENvbG9yMX0sICR7Z3JhZGllbnRDb2xvcjJ9KWBcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAgIGdyYWRpZW50U3R5bGVzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlBY3Rpb24odWlBY3Rpb246IFVJQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZUNsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5QWxpZ25tZW50KHVpQWxpZ25tZW50OiBVSUFsaWdubWVudCkge1xuICAgIGlmICh1aUFsaWdubWVudC5hbGlnbm1lbnQpIHtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGFsaWdubWVudE1hcHBpbmdbdWlBbGlnbm1lbnQuYWxpZ25tZW50XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYWxpZ24taXRlbXMnLFxuICAgICAgICBhbGlnbm1lbnRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNoYWRvdyh1aVNoYWRvdzogVUlTaGFkb3cpIHtcbiAgICBpZiAodWlTaGFkb3cuY29sb3IgJiYgdWlTaGFkb3cub2Zmc2V0WCAmJiB1aVNoYWRvdy5vZmZzZXRZICYmIHVpU2hhZG93LmJsdXJSYWRpdXMpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JNYXBwaW5nW3VpU2hhZG93LmNvbG9yXTtcbiAgICAgIGNvbnN0IG9mZnNldFggPSBzaGFkb3dPZmZzZXRNYXBwaW5nW3VpU2hhZG93Lm9mZnNldFhdO1xuICAgICAgY29uc3Qgb2Zmc2V0WSA9IHNoYWRvd09mZnNldE1hcHBpbmdbdWlTaGFkb3cub2Zmc2V0WV07XG4gICAgICBjb25zdCBibHVyUmFkaXVzID0gc2hhZG93Qmx1clJhZGl1c01hcHBpbmdbdWlTaGFkb3cuYmx1clJhZGl1c107XG4gICAgICBjb25zdCBvcGFjaXR5ID0gdWlTaGFkb3cub3BhY2l0eSAhPT0gdW5kZWZpbmVkID8gdWlTaGFkb3cub3BhY2l0eSA6IDE7XG5cbiAgICAgIC8vIEZvcm1hdDogYm94LXNoYWRvdzogb2Zmc2V0WCBvZmZzZXRZIGJsdXJSYWRpdXMgY29sb3JcbiAgICAgIGNvbnN0IHNoYWRvd1ZhbHVlID0gYCR7b2Zmc2V0WH0gJHtvZmZzZXRZfSAke2JsdXJSYWRpdXN9ICR7Y29sb3J9YDtcblxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdib3gtc2hhZG93JyxcbiAgICAgICAgc2hhZG93VmFsdWVcbiAgICAgICk7XG5cbiAgICAgIGlmIChvcGFjaXR5ICE9PSAxKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgJ29wYWNpdHknLFxuICAgICAgICAgIG9wYWNpdHkudG9TdHJpbmcoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlSYWRpdXModWlSYWRpdXM6IFVJUmFkaXVzKSB7XG4gICAgaWYgKHVpUmFkaXVzLnRvcExlZnQpIHtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IHJhZGl1c01hcHBpbmdbdWlSYWRpdXMudG9wTGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpUmFkaXVzLnRvcFJpZ2h0KSB7XG4gICAgICBjb25zdCByYWRpdXMgPSByYWRpdXNNYXBwaW5nW3VpUmFkaXVzLnRvcFJpZ2h0XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpUmFkaXVzLmJvdHRvbUxlZnQpIHtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IHJhZGl1c01hcHBpbmdbdWlSYWRpdXMuYm90dG9tTGVmdF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVpUmFkaXVzLmJvdHRvbVJpZ2h0KSB7XG4gICAgICBjb25zdCByYWRpdXMgPSByYWRpdXNNYXBwaW5nW3VpUmFkaXVzLmJvdHRvbVJpZ2h0XTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAgICAgICByYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGFwcGx5U3BhY2luZyh1aVNwYWNpbmc6IFVJU3BhY2luZykge1xuICAgIGlmICh1aVNwYWNpbmcuc3BhY2luZykge1xuICAgICAgY29uc3Qgc3BhY2luZ1ZhbHVlID0gc3BhY2VNYXBwaW5nW3VpU3BhY2luZy5zcGFjaW5nXTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnZ2FwJyxcbiAgICAgICAgc3BhY2luZ1ZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlIZWlnaHQoaGVpZ2h0OiBVSURpbWVuc2lvbikge1xuICAgIGlmIChoZWlnaHQpIHtcbiAgICAgIGNvbnN0IGhlaWdodFZhbHVlID0gZGltZW5zaW9uTWFwcGluZ1toZWlnaHRdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICBoZWlnaHRWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5V2lkdGgod2lkdGg6IFVJRGltZW5zaW9uKSB7XG4gICAgaWYgKHdpZHRoKSB7XG4gICAgICBjb25zdCB3aWR0aFZhbHVlID0gZGltZW5zaW9uTWFwcGluZ1t3aWR0aF07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgd2lkdGhWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Qm9yZGVyV2lkdGgoYm9yZGVyV2lkdGg6IG51bWJlcikge1xuICAgIGlmIChib3JkZXJXaWR0aCAhPT0gbnVsbCAmJiBib3JkZXJXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2JvcmRlci13aWR0aCcsXG4gICAgICAgIGAke2JvcmRlcldpZHRofXB4YFxuICAgICAgKTtcblxuICAgICAgLy8gRW5zdXJlIGJvcmRlciBzdHlsZSBpcyBzZXQsIG90aGVyd2lzZSBib3JkZXItd2lkdGggd29uJ3QgYmUgdmlzaWJsZVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdib3JkZXItc3R5bGUnLFxuICAgICAgICAnc29saWQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlCb3JkZXJDb2xvcihib3JkZXJDb2xvcjogVUlDb2xvcikge1xuICAgIGlmIChib3JkZXJDb2xvcikge1xuICAgICAgY29uc3QgY29sb3IgPSBjb2xvck1hcHBpbmdbYm9yZGVyQ29sb3JdO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdib3JkZXItY29sb3InLFxuICAgICAgICBjb2xvclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SnVzdGlmeShqdXN0aWZ5OiBVSUp1c3RpZnkpIHtcbiAgICBpZiAoanVzdGlmeSkge1xuICAgICAgY29uc3QganVzdGlmeVZhbHVlID0ganVzdGlmeU1hcHBpbmdbanVzdGlmeV07XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2p1c3RpZnktY29udGVudCcsXG4gICAgICAgIGp1c3RpZnlWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5QXNwZWN0UmF0aW8oYXNwZWN0UmF0aW86IG51bWJlcikge1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNpemUoc2l6ZTogVUlTaXplKSB7XG4gICAgaWYoc2l6ZSl7XG4gICAgICBsZXQgd2lkdGhWYWx1ZSA9IHNpemVNYXBwaW5nV2lkdGhbc2l6ZV07XG4gICAgICBsZXQgaGVpZ2h0VmFsdWUgPSBzaXplTWFwcGluZ0hlaWdodFtzaXplXTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzU21hbGxTY3JlZW4oKSAmJlxuICAgICAgICB0aGlzLmN1cnJlbnRDb250YWluZXIgPT09IFVJU2NyZWVuQ29udGFpbmVyVHlwZS5GTFVJRCAmJlxuICAgICAgICAoc2l6ZSA9PT0gVUlTaXplLkNBUkRfMSB8fCBzaXplID09PSBVSVNpemUuQ0FSRF8yIHx8IHNpemUgPT09IFVJU2l6ZS5USFVNQl8zIHx8IHNpemUgPT09IFVJU2l6ZS5USFVNQl80KVxuICAgICAgKSB7XG4gICAgICAgIHdpZHRoVmFsdWUgPSB0aGlzLnNjYWxlUGl4ZWxWYWx1ZSh3aWR0aFZhbHVlLCAxLjEpO1xuICAgICAgICBoZWlnaHRWYWx1ZSA9IHRoaXMuc2NhbGVQaXhlbFZhbHVlKGhlaWdodFZhbHVlLCAxLjEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgd2lkdGhWYWx1ZVxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgaGVpZ2h0VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUhvdmVyVmFycyh1aVZpZXc6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGhvdmVyID0gdWlWaWV3Py5ob3ZlciA/PyB1aVZpZXc/LmVsZW1lbnQ/LmhvdmVyO1xuICAgIGlmICghaG92ZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyBtYXJjYSBxdWUgZXNzZSBlbGVtZW50byB0ZW0gaG92ZXJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsLCAnZWRtLWhvdmVyJyk7XG5cbiAgICBpZiAoaG92ZXIuYm9yZGVyX2NvbG9yIHx8IGhvdmVyLmJvcmRlckNvbG9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhob3Zlci5ib3JkZXJfY29sb3IsIGhvdmVyLmJvcmRlckNvbG9yKTtcbiAgICAgIGNvbnN0IHRva2VuID0gaG92ZXIuYm9yZGVyX2NvbG9yID8/IGhvdmVyLmJvcmRlckNvbG9yO1xuXG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAgICAgOnJvb3Qge1xuICAgICAgICAgIC0tZWRtLWhvdmVyLWJvcmRlci1jb2xvcjogdmFyKC0tJHt0b2tlbi5yZXBsYWNlKC9fL2csICctJyl9KTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXG4gICAgfVxuXG4gICAgaWYgKGhvdmVyLmJhY2tncm91bmRfY29sb3IgfHwgaG92ZXIuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGhvdmVyLmJhY2tncm91bmRfY29sb3IgPz8gaG92ZXIuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgICAgIDpyb290IHtcbiAgICAgICAgICAtLWVkbS1ob3Zlci1ib3JkZXItY29sb3I6IHZhcigtLSR7dG9rZW4ucmVwbGFjZSgvXy9nLCAnLScpfSk7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG5cbiAgICBpZiAoaG92ZXIuYmFja2dyb3VuZF9jb2xvciB8fCBob3Zlci5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gaG92ZXIuYmFja2dyb3VuZF9jb2xvciA/PyBob3Zlci5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAgICAgOnJvb3Qge1xuICAgICAgICAgIC0tZWRtLWhvdmVyLWJnLWNvbG9yOiB2YXIoLS0ke3Rva2VuLnJlcGxhY2UoL18vZywgJy0nKX0pO1xuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1NtYWxsU2NyZWVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NjU7XG4gIH1cblxuICBwcml2YXRlIHNjYWxlUGl4ZWxWYWx1ZSh2YWx1ZTogc3RyaW5nLCBkaXZpc29yOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoID0gL14oXFxkKyg/OlxcLlxcZCspPylweCQvLmV4ZWModmFsdWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgICBjb25zdCBzY2FsZWQgPSBudW0gKiBkaXZpc29yO1xuICAgIHJldHVybiBgJHtzY2FsZWR9cHhgO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzU21hbGwgPSB0aGlzLmlzU21hbGxTY3JlZW4oKTtcbiAgICBpZiAodGhpcy5sYXN0VWlWaWV3ICYmIGlzU21hbGwgIT09IHRoaXMud2FzU21hbGxTY3JlZW4pIHtcbiAgICAgIHRoaXMuYXBwbHlTdHlsZXModGhpcy5sYXN0VWlWaWV3KTtcbiAgICAgIHRoaXMud2FzU21hbGxTY3JlZW4gPSBpc1NtYWxsO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlQ2xpY2spIHJldHVybjtcblxuICAgIGlmICh0aGlzLmVkbVNkdWlWaWV3Py5hY3Rpb24pIHtcbiAgICAgIHRoaXMuY2FwdHVyZUV4cGxvcmVTY3JvbGxDb250ZXh0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuYWN0aW9uU2VydmljZS5leGVjdXRlKHRoaXMuZWRtU2R1aVZpZXcuYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhcHR1cmVFeHBsb3JlU2Nyb2xsQ29udGV4dCgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnL2V4cGxvcmFyJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3Qgc2Nyb2xsUm93ID0gZWxlbWVudC5jbG9zZXN0KCcuc2Nyb2xsYWJsZS1yb3cnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoIXNjcm9sbFJvdykge1xuICAgICAgdGhpcy5jbGVhckV4cGxvcmVIb3Jpem9udGFsU2Nyb2xsQ29udGV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLnJlc29sdmVFeHBsb3JlU2VjdGlvbihlbGVtZW50LCBzY3JvbGxSb3cpO1xuICAgIGNvbnN0IHNlY3Rpb25JZCA9IHNlY3Rpb24/LmlkIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVUlWaWV3RGlyZWN0aXZlLkVYUExPUkVfTEFTVF9BTkNIT1JfS0VZKTtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMucmVzb2x2ZVJvd0luZGV4KHNjcm9sbFJvdywgc2VjdGlvbik7XG4gICAgY29uc3QgaXRlbUlkID0gdGhpcy5yZXNvbHZlQ2xpY2tlZEl0ZW1JZChlbGVtZW50LCBzZWN0aW9uKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc2VjdGlvbklkKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oVUlWaWV3RGlyZWN0aXZlLkVYUExPUkVfTEFTVF9BTkNIT1JfS0VZLCBzZWN0aW9uSWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFVJVmlld0RpcmVjdGl2ZS5FWFBMT1JFX0xBU1RfUk9XX0lOREVYX0tFWSwgU3RyaW5nKHJvd0luZGV4KSk7XG4gICAgICB9XG5cbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgIFVJVmlld0RpcmVjdGl2ZS5FWFBMT1JFX0xBU1RfUk9XX1NDUk9MTF9MRUZUX0tFWSxcbiAgICAgICAgU3RyaW5nKE1hdGgucm91bmQoc2Nyb2xsUm93LnNjcm9sbExlZnQpKVxuICAgICAgKTtcblxuICAgICAgaWYgKGl0ZW1JZCkge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFVJVmlld0RpcmVjdGl2ZS5FWFBMT1JFX0xBU1RfSVRFTV9JRF9LRVksIGl0ZW1JZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFVJVmlld0RpcmVjdGl2ZS5FWFBMT1JFX0xBU1RfSVRFTV9JRF9LRVkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFeHBsb3JlSG9yaXpvbnRhbFNjcm9sbENvbnRleHQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oVUlWaWV3RGlyZWN0aXZlLkVYUExPUkVfTEFTVF9ST1dfSU5ERVhfS0VZKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oVUlWaWV3RGlyZWN0aXZlLkVYUExPUkVfTEFTVF9ST1dfU0NST0xMX0xFRlRfS0VZKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oVUlWaWV3RGlyZWN0aXZlLkVYUExPUkVfTEFTVF9JVEVNX0lEX0tFWSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRXhwbG9yZVNlY3Rpb24oZWxlbWVudDogSFRNTEVsZW1lbnQsIHNjcm9sbFJvdzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICBzY3JvbGxSb3cuY2xvc2VzdCgnW2RhdGEtYW5jaG9yLXRhcmdldF1baWRdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsIHx8XG4gICAgICBzY3JvbGxSb3cuY2xvc2VzdCgnLmNvbHVtbltpZF0nKSBhcyBIVE1MRWxlbWVudCB8IG51bGwgfHxcbiAgICAgIGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtYW5jaG9yLXRhcmdldF1baWRdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsIHx8XG4gICAgICBlbGVtZW50LmNsb3Nlc3QoJy5jb2x1bW5baWRdJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVJvd0luZGV4KHNjcm9sbFJvdzogSFRNTEVsZW1lbnQsIHNlY3Rpb246IEhUTUxFbGVtZW50IHwgbnVsbCk6IG51bWJlciB7XG4gICAgY29uc3Qgc2NvcGUgPSBzZWN0aW9uID8/IChzY3JvbGxSb3cucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGwpO1xuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzY29wZS5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLnNjcm9sbGFibGUtcm93JykpLmluZGV4T2Yoc2Nyb2xsUm93KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNsaWNrZWRJdGVtSWQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHNlY3Rpb246IEhUTUxFbGVtZW50IHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChlbGVtZW50LmlkICYmIGVsZW1lbnQuaWQgIT09IHNlY3Rpb24/LmlkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5pZDtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5kaWRhdGUgPSBlbGVtZW50LmNsb3Nlc3QoJ1tpZF0nKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKGNhbmRpZGF0ZT8uaWQgJiYgY2FuZGlkYXRlLmlkICE9PSBzZWN0aW9uPy5pZCkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
|