@ethlete/cdk 4.41.0 → 4.41.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ethlete/cdk
2
2
 
3
+ ## 4.41.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`1c250cd`](https://github.com/ethlete-io/ethdk/commit/1c250cd0ca1c34dc0404dd3254b6a3f6434b1f49) Thanks [@TomTomB](https://github.com/TomTomB)! - Clear select value visually even if the selected option does not exist
8
+
3
9
  ## 4.41.0
4
10
 
5
11
  ### Minor Changes
@@ -65,52 +65,7 @@ export class OverlayService {
65
65
  this.hasOpenOverlays = computed(() => this.openOverlays().length > 0);
66
66
  this.positions = new OverlayPositionBuilder();
67
67
  this.route = injectRoute();
68
- const previousHTMLStyles = { top: '', left: '' };
69
- let previousScrollPosition = { top: 0, left: 0 };
70
- let isEnabled = false;
71
- let lastRoute = null;
72
- const root = document.documentElement;
73
- toObservable(this.hasOpenOverlays)
74
- .pipe(switchMap((hasOpenOverlays) => {
75
- if (!hasOpenOverlays)
76
- return of({ hasOpenOverlays, scrolled: false });
77
- return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
78
- }), tap(({ hasOpenOverlays }) => {
79
- const hasBlockClass = root.classList.contains(BLOCK_CLASS);
80
- if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
81
- if (isEnabled)
82
- return;
83
- previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
84
- previousHTMLStyles.left = root.style.left || '';
85
- previousHTMLStyles.top = root.style.top || '';
86
- root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
87
- root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
88
- root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
89
- isEnabled = true;
90
- lastRoute = this.route();
91
- }
92
- else if (!hasOpenOverlays) {
93
- if (!isEnabled)
94
- return;
95
- const htmlStyle = root.style;
96
- const bodyStyle = document.body.style;
97
- const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
98
- const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
99
- const didNavigate = lastRoute !== this.route();
100
- root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
101
- root.style.left = previousHTMLStyles.left;
102
- root.style.top = previousHTMLStyles.top;
103
- if (!didNavigate) {
104
- htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
105
- window.scroll(previousScrollPosition.left, previousScrollPosition.top);
106
- htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
107
- bodyStyle.scrollBehavior = previousBodyScrollBehavior;
108
- }
109
- isEnabled = false;
110
- lastRoute = null;
111
- }
112
- }))
113
- .subscribe();
68
+ this.#setupScrollBlocking();
114
69
  }
115
70
  open(componentOrTemplateRef, config) {
116
71
  let overlayRef;
@@ -177,30 +132,32 @@ export class OverlayService {
177
132
  setStyle(overlayPaneEl, 'max-height', currConfig.maxHeight);
178
133
  };
179
134
  if (origin) {
180
- // TODO: If getBoundingClientRect is used it should use the center of the element.
181
- const originX = isHtmlElement(origin)
182
- ? origin.getBoundingClientRect().left
183
- : isTouchEvent(origin)
184
- ? origin.targetTouches[0].clientX
185
- : isPointerEvent(origin)
186
- ? origin.clientX !== 0
187
- ? origin.clientX
188
- : origin.target.getBoundingClientRect().left
189
- : -1;
190
- const originY = isHtmlElement(origin)
191
- ? origin.getBoundingClientRect().top
192
- : isTouchEvent(origin)
193
- ? origin.targetTouches[0].clientY
194
- : isPointerEvent(origin)
195
- ? origin.clientY !== 0
196
- ? origin.clientY
197
- : origin.target.getBoundingClientRect().top
198
- : -1;
199
- if (originX !== -1 && originY !== -1 && currConfig.applyTransformOrigin) {
200
- setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
135
+ if (!currConfig.applyTransformOrigin) {
136
+ setStyle(containerEl, 'transform-origin', null);
201
137
  }
202
138
  else {
203
- setStyle(containerEl, 'transform-origin', null);
139
+ // TODO: If getBoundingClientRect is used it should use the center of the element.
140
+ const originX = isHtmlElement(origin)
141
+ ? origin.getBoundingClientRect().left
142
+ : isTouchEvent(origin)
143
+ ? origin.targetTouches[0].clientX
144
+ : isPointerEvent(origin)
145
+ ? origin.clientX !== 0
146
+ ? origin.clientX
147
+ : origin.target.getBoundingClientRect().left
148
+ : -1;
149
+ const originY = isHtmlElement(origin)
150
+ ? origin.getBoundingClientRect().top
151
+ : isTouchEvent(origin)
152
+ ? origin.targetTouches[0].clientY
153
+ : isPointerEvent(origin)
154
+ ? origin.clientY !== 0
155
+ ? origin.clientY
156
+ : origin.target.getBoundingClientRect().top
157
+ : -1;
158
+ if (originX !== -1 && originY !== -1) {
159
+ setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
160
+ }
204
161
  }
205
162
  }
206
163
  if (useDefaultAnimation && containerClass?.length) {
@@ -298,6 +255,54 @@ export class OverlayService {
298
255
  overlays[i]?.close();
299
256
  }
300
257
  }
258
+ #setupScrollBlocking() {
259
+ const previousHTMLStyles = { top: '', left: '' };
260
+ let previousScrollPosition = { top: 0, left: 0 };
261
+ let isEnabled = false;
262
+ let lastRoute = null;
263
+ const root = document.documentElement;
264
+ toObservable(this.hasOpenOverlays)
265
+ .pipe(switchMap((hasOpenOverlays) => {
266
+ if (!hasOpenOverlays)
267
+ return of({ hasOpenOverlays, scrolled: false });
268
+ return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
269
+ }), tap(({ hasOpenOverlays }) => {
270
+ const hasBlockClass = root.classList.contains(BLOCK_CLASS);
271
+ if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
272
+ if (isEnabled)
273
+ return;
274
+ previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
275
+ previousHTMLStyles.left = root.style.left || '';
276
+ previousHTMLStyles.top = root.style.top || '';
277
+ root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
278
+ root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
279
+ root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
280
+ isEnabled = true;
281
+ lastRoute = this.route();
282
+ }
283
+ else if (!hasOpenOverlays) {
284
+ if (!isEnabled)
285
+ return;
286
+ const htmlStyle = root.style;
287
+ const bodyStyle = document.body.style;
288
+ const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
289
+ const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
290
+ const didNavigate = lastRoute !== this.route();
291
+ root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
292
+ root.style.left = previousHTMLStyles.left;
293
+ root.style.top = previousHTMLStyles.top;
294
+ if (!didNavigate) {
295
+ htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
296
+ window.scroll(previousScrollPosition.left, previousScrollPosition.top);
297
+ htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
298
+ bodyStyle.scrollBehavior = previousBodyScrollBehavior;
299
+ }
300
+ isEnabled = false;
301
+ lastRoute = null;
302
+ }
303
+ }))
304
+ .subscribe();
305
+ }
301
306
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
302
307
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, providedIn: 'root' }); }
303
308
  }
@@ -305,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
305
310
  type: Injectable,
306
311
  args: [{ providedIn: 'root' }]
307
312
  }], ctorParameters: () => [] });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3NlcnZpY2VzL292ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxZQUFZLElBQUksZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RixPQUFPLEVBQWdCLFVBQVUsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckYsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLG1CQUFtQixHQUNwQixNQUFNLFVBQVUsQ0FBQzs7QUFFbEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUVoQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQWUsRUFBRSxLQUFhLEVBQUUsS0FBeUMsRUFBRSxFQUFFO0lBQzdGLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztTQUFNLENBQUM7UUFDTixFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFlLEVBQUUsU0FBNkIsRUFBRSxTQUE2QixFQUFFLEVBQUU7SUFDakcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDcEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQThCLEVBQTBCLEVBQUU7SUFDL0UsT0FBTyxPQUFPLFlBQVksV0FBVyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBWSxFQUF1QixFQUFFO0lBQ3pELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFZLEVBQXlCLEVBQUU7SUFDN0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyx3QkFBd0IsQ0FBQztBQUM3QyxNQUFNLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO0FBR25ELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLGVBQWUsQ0FBdUQ7SUFDdEUsT0FBTyxDQUFxQjtJQUM1QixnQkFBZ0IsQ0FBMkI7SUFDM0MsY0FBYyxDQUF5QjtJQU92QztRQVZBLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsbUJBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdkMsaUJBQVksR0FBRyxNQUFNLENBQWUsRUFBRSxDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxjQUFTLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pDLFVBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUdwQixNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDakQsSUFBSSxzQkFBc0IsR0FBa0MsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNoRixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxTQUFTLEdBQWtCLElBQUksQ0FBQztRQUVwQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBRXRDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2FBQy9CLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZTtnQkFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUV0RSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQzlDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ2pELENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFM0QsSUFBSSxlQUFlLElBQUksQ0FBQyxhQUFhLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLFNBQVM7b0JBQUUsT0FBTztnQkFFdEIsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUN6RSxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoRCxrQkFBa0IsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFFbEQsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDakIsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFNBQVM7b0JBQUUsT0FBTztnQkFFdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLE1BQU0sMEJBQTBCLEdBQUcsU0FBUyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sMEJBQTBCLEdBQUcsU0FBUyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7Z0JBRWxFLE1BQU0sV0FBVyxHQUFHLFNBQVMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRS9DLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUVyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFFeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqQixTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO29CQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkUsU0FBUyxDQUFDLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztvQkFDdEQsU0FBUyxDQUFDLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztnQkFDeEQsQ0FBQztnQkFFRCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFRRCxJQUFJLENBQ0Ysc0JBQXlELEVBQ3pELE1BQXdCO1FBRXhCLElBQUksVUFBNEIsQ0FBQztRQUVqQyxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBSSxJQUFJLENBQUMsZUFBbUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRyxjQUFjLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxFQUFFLElBQUksR0FBRyxTQUFTLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUVyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBVSxzQkFBc0IsRUFBRTtZQUNoRSxHQUFHLGNBQWM7WUFDakIsY0FBYyxFQUFFLElBQUksa0JBQWtCLEVBQUU7WUFDeEMsWUFBWSxFQUFFLElBQUk7WUFDbEIsY0FBYyxFQUFFLEtBQUs7WUFDckIsVUFBVSxFQUFFLGlCQUFpQjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLHlCQUF5QjtnQkFDL0IsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO29CQUNmLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO29CQUNyRCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtpQkFDdkQ7YUFDRjtZQUNELGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ2xELFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxTQUFTLEdBQUcsZ0JBQTZDLENBQUM7Z0JBQ2hFLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUU1RCxPQUFPO29CQUNMLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDbEUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFFO29CQUMvRCxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRTtvQkFDdEUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQUU7b0JBQ25FLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsYUFBYSxFQUFFO29CQUNyRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQ25ELEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFO29CQUM3QyxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7aUJBQ3BDLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsNERBQTREO1FBQzNELFVBQWlELENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFhLENBQUM7UUFDdkYsVUFBVyxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBa0IsQ0FBQztRQUV6RCxNQUFNLENBQUMsaUJBQStDLENBQUMsVUFBVSxHQUFHLFVBQVcsQ0FBQztRQUVqRixNQUFNLFdBQVcsR0FBRyxVQUFXLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGFBQTRCLENBQUM7UUFDM0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDckQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDckQsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBRXJDLGFBQWEsQ0FDWCxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQzFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakIsUUFBUTtZQUNSLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtZQUN6QixJQUFJLEVBQ0YsT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLFFBQVE7Z0JBQ3ZDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVTtnQkFDdkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssU0FBUztvQkFDbkMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztTQUM5RSxDQUFDLENBQUMsQ0FDSixDQUNGLENBQ0Y7YUFDRSxJQUFJLENBQ0gsU0FBUyxDQUFDLFVBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUNwQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNkLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUxRyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUNsQyxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsUUFBUSxFQUFFLEVBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPO1lBRXhCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7WUFFakQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUQsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQztZQUVGLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsa0ZBQWtGO2dCQUNsRixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO29CQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSTtvQkFDckMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7d0JBQ3BCLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBRSxDQUFDLE9BQU87d0JBQ2xDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDOzRCQUN0QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDO2dDQUNwQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87Z0NBQ2hCLENBQUMsQ0FBRSxNQUFNLENBQUMsTUFBc0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUk7NEJBQy9ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO29CQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRztvQkFDcEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7d0JBQ3BCLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBRSxDQUFDLE9BQU87d0JBQ2xDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDOzRCQUN0QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDO2dDQUNwQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87Z0NBQ2hCLENBQUMsQ0FBRSxNQUFNLENBQUMsTUFBc0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUc7NEJBQzlELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFWCxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3hFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDekUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFFBQVEsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxtQkFBbUIsSUFBSSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ2xELElBQ0UsY0FBYyxFQUFFLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQztvQkFDckQsY0FBYyxFQUFFLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxFQUN0RCxDQUFDO29CQUNELFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDMUQsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO3FCQUFNLElBQ0wsY0FBYyxFQUFFLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQztvQkFDcEQsY0FBYyxFQUFFLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxFQUN2RCxDQUFDO29CQUNELFFBQVEsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFNUQsUUFBUSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04scUJBQXFCLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFFRCxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUQsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTVELFFBQVEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxRQUFRLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFckQsUUFBUSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM5RSxRQUFRLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFN0Usb0dBQW9HO1lBQ3BHLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3pGLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRXRFLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxVQUFVLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBRUQsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxVQUFXLENBQUMsQ0FBQyxDQUFDO1FBRW5FLFVBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hDLG9HQUFvRztZQUNwRyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVsRyxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsS0FBSztvQkFBRSxTQUFTO2dCQUVyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sQ0FBQztvQkFDTixRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUYsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUs7b0JBQUUsU0FBUztnQkFFckIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV0RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQUUsT0FBTztZQUV6QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFXLENBQUM7UUFFbkIsMkRBQTJEO0lBQzdELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUMxRSxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQXNCO1FBQ25DLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFeEIsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDOzhHQXhUVSxjQUFjO2tIQUFkLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERpYWxvZyBhcyBDZGtEaWFsb2csIERpYWxvZ0NvbmZpZyBhcyBDZGtEaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE5vb3BTY3JvbGxTdHJhdGVneSwgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgUk9PVF9CT1VOREFSWV9UT0tFTixcbiAgUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLFxuICBWaWV3cG9ydFNlcnZpY2UsXG4gIGVsZW1lbnRDYW5TY3JvbGwsXG4gIGVxdWFsLFxuICBpbmplY3RSb3V0ZSxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBQcm92aWRlVGhlbWVEaXJlY3RpdmUsIFRIRU1FX1BST1ZJREVSIH0gZnJvbSAnQGV0aGxldGUvdGhlbWluZyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1hcCwgb2YsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJsYXlDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL292ZXJsYXktY29udGFpbmVyJztcbmltcG9ydCB7IE9WRVJMQVlfQ09ORklHLCBPVkVSTEFZX0RBVEEsIE9WRVJMQVlfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE92ZXJsYXlDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBFVF9PVkVSTEFZX0JPVFRPTV9TSEVFVF9DTEFTUyxcbiAgRVRfT1ZFUkxBWV9MRUZUX1NIRUVUX0NMQVNTLFxuICBFVF9PVkVSTEFZX1JJR0hUX1NIRUVUX0NMQVNTLFxuICBFVF9PVkVSTEFZX1RPUF9TSEVFVF9DTEFTUyxcbiAgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcbiAgT3ZlcmxheVJlZixcbiAgY3JlYXRlT3ZlcmxheUNvbmZpZyxcbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuY29uc3QgSURfUFJFRklYID0gJ2V0LW92ZXJsYXktJztcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWw6IEhUTUxFbGVtZW50LCBzdHlsZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZSwgY29lcmNlQ3NzUGl4ZWxWYWx1ZSh2YWx1ZSkpO1xuICB9XG59O1xuXG5jb25zdCBzZXRDbGFzcyA9IChlbDogSFRNTEVsZW1lbnQsIHByZXZDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdLCBjdXJyQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICBpZiAoIWVxdWFsKHByZXZDbGFzcywgY3VyckNsYXNzKSkge1xuICAgIGlmIChwcmV2Q2xhc3MpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXZDbGFzcykpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSguLi5wcmV2Q2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShwcmV2Q2xhc3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXJyQ2xhc3MpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJDbGFzcykpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCguLi5jdXJyQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjdXJyQ2xhc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaXNIdG1sRWxlbWVudCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVua25vd24pOiBlbGVtZW50IGlzIEhUTUxFbGVtZW50ID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn07XG5cbmNvbnN0IGlzVG91Y2hFdmVudCA9IChldmVudDogRXZlbnQpOiBldmVudCBpcyBUb3VjaEV2ZW50ID0+IHtcbiAgcmV0dXJuIGV2ZW50LnR5cGVbMF0gPT09ICd0Jztcbn07XG5cbmNvbnN0IGlzUG9pbnRlckV2ZW50ID0gKGV2ZW50OiBFdmVudCk6IGV2ZW50IGlzIFBvaW50ZXJFdmVudCA9PiB7XG4gIHJldHVybiBldmVudC50eXBlWzBdID09PSAnYyc7XG59O1xuXG5jb25zdCBCTE9DS19DTEFTUyA9ICdjZGstZ2xvYmFsLXNjcm9sbGJsb2NrJztcbmNvbnN0IE9WRVJTQ1JPTExfQ0xBU1MgPSAnZXQtZ2xvYmFsLW5vLW92ZXJzY3JvbGwnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE92ZXJsYXlTZXJ2aWNlIHtcbiAgI2RlZmF1bHRPcHRpb25zID0gaW5qZWN0KE9WRVJMQVlfREVGQVVMVF9PUFRJT05TLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAjZGlhbG9nID0gaW5qZWN0KENka0RpYWxvZyk7XG4gICN2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgI3ZpZXdwb3J0UnVsZXIgPSBpbmplY3QoVmlld3BvcnRSdWxlcik7XG5cbiAgb3Blbk92ZXJsYXlzID0gc2lnbmFsPE92ZXJsYXlSZWZbXT4oW10pO1xuICBoYXNPcGVuT3ZlcmxheXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wZW5PdmVybGF5cygpLmxlbmd0aCA+IDApO1xuICBwb3NpdGlvbnMgPSBuZXcgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcigpO1xuICByb3V0ZSA9IGluamVjdFJvdXRlKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcHJldmlvdXNIVE1MU3R5bGVzID0geyB0b3A6ICcnLCBsZWZ0OiAnJyB9O1xuICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gICAgbGV0IGlzRW5hYmxlZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um91dGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmhhc09wZW5PdmVybGF5cylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhc09wZW5PdmVybGF5cykgPT4ge1xuICAgICAgICAgIGlmICghaGFzT3Blbk92ZXJsYXlzKSByZXR1cm4gb2YoeyBoYXNPcGVuT3ZlcmxheXMsIHNjcm9sbGVkOiBmYWxzZSB9KTtcblxuICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh7IGhhc09wZW5PdmVybGF5cywgc2Nyb2xsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gKHsgaGFzT3Blbk92ZXJsYXlzLCBzY3JvbGxlZDogdHJ1ZSB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBoYXNPcGVuT3ZlcmxheXMgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0Jsb2NrQ2xhc3MgPSByb290LmNsYXNzTGlzdC5jb250YWlucyhCTE9DS19DTEFTUyk7XG5cbiAgICAgICAgICBpZiAoaGFzT3Blbk92ZXJsYXlzICYmIChoYXNCbG9ja0NsYXNzIHx8IGVsZW1lbnRDYW5TY3JvbGwocm9vdCkpKSB7XG4gICAgICAgICAgICBpZiAoaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIHByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0ID0gcm9vdC5zdHlsZS5sZWZ0IHx8ICcnO1xuICAgICAgICAgICAgcHJldmlvdXNIVE1MU3R5bGVzLnRvcCA9IHJvb3Quc3R5bGUudG9wIHx8ICcnO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpO1xuICAgICAgICAgICAgcm9vdC5zdHlsZS50b3AgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5hZGQoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICBpc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJvdXRlID0gdGhpcy5yb3V0ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc09wZW5PdmVybGF5cykge1xuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFN0eWxlID0gcm9vdC5zdHlsZTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkuc3R5bGU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0h0bWxTY3JvbGxCZWhhdmlvciA9IGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQm9keVNjcm9sbEJlaGF2aW9yID0gYm9keVN0eWxlLnNjcm9sbEJlaGF2aW9yIHx8ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBkaWROYXZpZ2F0ZSA9IGxhc3RSb3V0ZSAhPT0gdGhpcy5yb3V0ZSgpO1xuXG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5yZW1vdmUoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBwcmV2aW91c0hUTUxTdHlsZXMubGVmdDtcbiAgICAgICAgICAgIHJvb3Quc3R5bGUudG9wID0gcHJldmlvdXNIVE1MU3R5bGVzLnRvcDtcblxuICAgICAgICAgICAgaWYgKCFkaWROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBodG1sU3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnYXV0byc7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwocHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICAgIGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciA9IHByZXZpb3VzSHRtbFNjcm9sbEJlaGF2aW9yO1xuICAgICAgICAgICAgICBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBwcmV2aW91c0JvZHlTY3JvbGxCZWhhdmlvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsYXN0Um91dGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4odGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgdGVtcGxhdGU6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBjb25maWc6IE92ZXJsYXlDb25maWc8RD4sXG4gICk6IE92ZXJsYXlSZWY8VCwgUj47XG4gIG9wZW48VCwgRCA9IHVua25vd24sIFIgPSB1bmtub3duPihcbiAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgY29uZmlnOiBPdmVybGF5Q29uZmlnPEQ+LFxuICApOiBPdmVybGF5UmVmPFQsIFI+IHtcbiAgICBsZXQgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjxULCBSPjtcblxuICAgIGNvbnN0IGNvbXBvc2VkQ29uZmlnID0gY3JlYXRlT3ZlcmxheUNvbmZpZzxEPih0aGlzLiNkZWZhdWx0T3B0aW9ucyBhcyBPdmVybGF5Q29uZmlnPEQ+LCBjb25maWcpO1xuICAgIGNvbXBvc2VkQ29uZmlnLmlkID0gY29tcG9zZWRDb25maWcuaWQgfHwgYCR7SURfUFJFRklYfSR7dW5pcXVlSWQrK31gO1xuXG4gICAgY29uc3QgY2RrUmVmID0gdGhpcy4jZGlhbG9nLm9wZW48UiwgRCwgVD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwge1xuICAgICAgLi4uY29tcG9zZWRDb25maWcsXG4gICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vb3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgY2xvc2VPbkRlc3Ryb3k6IGZhbHNlLFxuICAgICAgcGFuZWxDbGFzczogJ2V0LW92ZXJsYXktcGFuZScsXG4gICAgICBjb250YWluZXI6IHtcbiAgICAgICAgdHlwZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgcHJvdmlkZXJzOiAoKSA9PiBbXG4gICAgICAgICAgeyBwcm92aWRlOiBPVkVSTEFZX0NPTkZJRywgdXNlVmFsdWU6IGNvbXBvc2VkQ29uZmlnIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBDZGtEaWFsb2dDb25maWcsIHVzZVZhbHVlOiBjb21wb3NlZENvbmZpZyB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlQ29udGV4dDogKCkgPT4gKHsgZGlhbG9nUmVmOiBvdmVybGF5UmVmIH0pLFxuICAgICAgcHJvdmlkZXJzOiAocmVmLCBjZGtDb25maWcsIG92ZXJsYXlDb250YWluZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gb3ZlcmxheUNvbnRhaW5lciBhcyBPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50O1xuICAgICAgICBvdmVybGF5UmVmID0gbmV3IE92ZXJsYXlSZWYocmVmLCBjb21wb3NlZENvbmZpZywgY29udGFpbmVyKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgcHJvdmlkZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCwgdXNlVmFsdWU6IG92ZXJsYXlDb250YWluZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFRIRU1FX1BST1ZJREVSLCB1c2VWYWx1ZTogY29udGFpbmVyLl90aGVtZVByb3ZpZGVyIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBQcm92aWRlVGhlbWVEaXJlY3RpdmUsIHVzZVZhbHVlOiBjb250YWluZXIuX3RoZW1lUHJvdmlkZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFJPT1RfQk9VTkRBUllfVE9LRU4sIHVzZVZhbHVlOiBjb250YWluZXIuX3Jvb3RCb3VuZGFyeSB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLCB1c2VWYWx1ZTogY29udGFpbmVyLl9yb290Qm91bmRhcnkgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IE9WRVJMQVlfREFUQSwgdXNlVmFsdWU6IGNka0NvbmZpZy5kYXRhIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBPdmVybGF5UmVmLCB1c2VWYWx1ZTogb3ZlcmxheVJlZiB9LFxuICAgICAgICAgIC4uLihjb21wb3NlZENvbmZpZy5wcm92aWRlcnMgPz8gW10pLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24qL1xuICAgIChvdmVybGF5UmVmISBhcyB7IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+IH0pLmNvbXBvbmVudFJlZiA9IGNka1JlZi5jb21wb25lbnRSZWYhO1xuICAgIG92ZXJsYXlSZWYhLmNvbXBvbmVudEluc3RhbmNlID0gY2RrUmVmLmNvbXBvbmVudEluc3RhbmNlITtcblxuICAgIChjZGtSZWYuY29udGFpbmVySW5zdGFuY2UgYXMgT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCkub3ZlcmxheVJlZiA9IG92ZXJsYXlSZWYhO1xuXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBvdmVybGF5UmVmIS5fY29udGFpbmVySW5zdGFuY2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlQYW5lRWwgPSBjZGtSZWYub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudDtcbiAgICBjb25zdCBiYWNrZHJvcEVsID0gY2RrUmVmLm92ZXJsYXlSZWYuYmFja2Ryb3BFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlXcmFwcGVyID0gY2RrUmVmLm92ZXJsYXlSZWYuaG9zdEVsZW1lbnQ7XG4gICAgY29uc3QgdXNlRGVmYXVsdEFuaW1hdGlvbiA9IGNvbXBvc2VkQ29uZmlnLmN1c3RvbUFuaW1hdGVkICE9PSB0cnVlO1xuICAgIGNvbnN0IG9yaWdpbiA9IGNvbXBvc2VkQ29uZmlnLm9yaWdpbjtcblxuICAgIGNvbWJpbmVMYXRlc3QoXG4gICAgICBjb21wb3NlZENvbmZpZy5wb3NpdGlvbnMubWFwKChicmVha3BvaW50KSA9PlxuICAgICAgICAoYnJlYWtwb2ludC5icmVha3BvaW50ID8gdGhpcy4jdmlld3BvcnRTZXJ2aWNlLm9ic2VydmUoeyBtaW46IGJyZWFrcG9pbnQuYnJlYWtwb2ludCB9KSA6IG9mKHRydWUpKS5waXBlKFxuICAgICAgICAgIG1hcCgoaXNBY3RpdmUpID0+ICh7XG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGNvbmZpZzogYnJlYWtwb2ludC5jb25maWcsXG4gICAgICAgICAgICBzaXplOlxuICAgICAgICAgICAgICB0eXBlb2YgYnJlYWtwb2ludC5icmVha3BvaW50ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gYnJlYWtwb2ludC5icmVha3BvaW50XG4gICAgICAgICAgICAgICAgOiBicmVha3BvaW50LmJyZWFrcG9pbnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuI3ZpZXdwb3J0U2VydmljZS5nZXRCcmVha3BvaW50U2l6ZShicmVha3BvaW50LmJyZWFrcG9pbnQsICdtaW4nKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwob3ZlcmxheVJlZiEuYWZ0ZXJDbG9zZWQoKSksXG4gICAgICAgIG1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUJyZWFrcG9pbnRzID0gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0FjdGl2ZSk7XG4gICAgICAgICAgY29uc3QgaGlnaGVzdEJyZWFrcG9pbnQgPSBhY3RpdmVCcmVha3BvaW50cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2LnNpemUgPiBjdXJyLnNpemUgPyBwcmV2IDogY3VycikpO1xuXG4gICAgICAgICAgcmV0dXJuIGhpZ2hlc3RCcmVha3BvaW50LmNvbmZpZztcbiAgICAgICAgfSksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgdGFwKChbcHJldkNvbmZpZywgY3VyckNvbmZpZ10pID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJDb25maWcpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzID0gY3VyckNvbmZpZy5jb250YWluZXJDbGFzcztcblxuICAgICAgICAgIGNvbnN0IGFwcGx5RGVmYXVsdE1heFdpZHRocyA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtaGVpZ2h0JywgY3VyckNvbmZpZy5tYXhIZWlnaHQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBJZiBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdXNlZCBpdCBzaG91bGQgdXNlIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5YID0gaXNIdG1sRWxlbWVudChvcmlnaW4pXG4gICAgICAgICAgICAgID8gb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnRcbiAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgID8gb3JpZ2luLnRhcmdldFRvdWNoZXNbMF0hLmNsaWVudFhcbiAgICAgICAgICAgICAgICA6IGlzUG9pbnRlckV2ZW50KG9yaWdpbilcbiAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW4uY2xpZW50WFxuICAgICAgICAgICAgICAgICAgICA6IChvcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luWSA9IGlzSHRtbEVsZW1lbnQob3JpZ2luKVxuICAgICAgICAgICAgICA/IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgID8gb3JpZ2luLnRhcmdldFRvdWNoZXNbMF0hLmNsaWVudFlcbiAgICAgICAgICAgICAgICA6IGlzUG9pbnRlckV2ZW50KG9yaWdpbilcbiAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFkgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW4uY2xpZW50WVxuICAgICAgICAgICAgICAgICAgICA6IChvcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChvcmlnaW5YICE9PSAtMSAmJiBvcmlnaW5ZICE9PSAtMSAmJiBjdXJyQ29uZmlnLmFwcGx5VHJhbnNmb3JtT3JpZ2luKSB7XG4gICAgICAgICAgICAgIHNldFN0eWxlKGNvbnRhaW5lckVsLCAndHJhbnNmb3JtLW9yaWdpbicsIGAke29yaWdpblh9cHggJHtvcmlnaW5ZfXB4YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRTdHlsZShjb250YWluZXJFbCwgJ3RyYW5zZm9ybS1vcmlnaW4nLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXNlRGVmYXVsdEFuaW1hdGlvbiAmJiBjb250YWluZXJDbGFzcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX0xFRlRfU0hFRVRfQ0xBU1MpIHx8XG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX1JJR0hUX1NIRUVUX0NMQVNTKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21heC1oZWlnaHQnLCBjdXJyQ29uZmlnLm1heEhlaWdodCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBjb250YWluZXJDbGFzcz8uaW5jbHVkZXMoRVRfT1ZFUkxBWV9UT1BfU0hFRVRfQ0xBU1MpIHx8XG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX0JPVFRPTV9TSEVFVF9DTEFTUylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWF4LWhlaWdodCcsIGN1cnJDb25maWcubWF4SGVpZ2h0KTtcblxuICAgICAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWF4LXdpZHRoJywgY3VyckNvbmZpZy5tYXhXaWR0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhcHBseURlZmF1bHRNYXhXaWR0aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXBwbHlEZWZhdWx0TWF4V2lkdGhzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21pbi13aWR0aCcsIGN1cnJDb25maWcubWluV2lkdGgpO1xuICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtaW4taGVpZ2h0JywgY3VyckNvbmZpZy5taW5IZWlnaHQpO1xuXG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ3dpZHRoJywgY3VyckNvbmZpZy53aWR0aCk7XG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ2hlaWdodCcsIGN1cnJDb25maWcuaGVpZ2h0KTtcblxuICAgICAgICAgIHNldENsYXNzKGNvbnRhaW5lckVsLCBwcmV2Q29uZmlnPy5jb250YWluZXJDbGFzcywgY3VyckNvbmZpZz8uY29udGFpbmVyQ2xhc3MpO1xuICAgICAgICAgIHNldENsYXNzKG92ZXJsYXlQYW5lRWwsIHByZXZDb25maWc/LnBhbmVDbGFzcywgY3VyckNvbmZpZz8ucGFuZUNsYXNzKTtcbiAgICAgICAgICBzZXRDbGFzcyhvdmVybGF5V3JhcHBlciwgcHJldkNvbmZpZz8ub3ZlcmxheUNsYXNzLCBjdXJyQ29uZmlnPy5vdmVybGF5Q2xhc3MpO1xuXG4gICAgICAgICAgLy8gRklYTUU6IFRoZXNlIGNsYXNzZXMgc2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiBubyBvcGVuIG92ZXJsYXlzIHJlcXVpcmUgdGhlbSBpbnNpZGUgdGhlaXIgY29uZmlnLlxuICAgICAgICAgIHNldENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgcHJldkNvbmZpZz8uZG9jdW1lbnRDbGFzcywgY3VyckNvbmZpZz8uZG9jdW1lbnRDbGFzcyk7XG4gICAgICAgICAgc2V0Q2xhc3MoZG9jdW1lbnQuYm9keSwgcHJldkNvbmZpZz8uYm9keUNsYXNzLCBjdXJyQ29uZmlnPy5ib2R5Q2xhc3MpO1xuXG4gICAgICAgICAgaWYgKGJhY2tkcm9wRWwpIHtcbiAgICAgICAgICAgIHNldENsYXNzKGJhY2tkcm9wRWwsIHByZXZDb25maWc/LmJhY2tkcm9wQ2xhc3MsIGN1cnJDb25maWc/LmJhY2tkcm9wQ2xhc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZXF1YWwocHJldkNvbmZpZz8ucG9zaXRpb24sIGN1cnJDb25maWc/LnBvc2l0aW9uKSkge1xuICAgICAgICAgICAgb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbihjdXJyQ29uZmlnLnBvc2l0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VyckNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjZGtSZWYub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGN1cnJDb25maWcucG9zaXRpb25TdHJhdGVneSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2RrUmVmLm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VyckNvbmZpZy5kcmFnVG9EaXNtaXNzKSB7XG4gICAgICAgICAgICBvdmVybGF5UmVmLl9jb250YWluZXJJbnN0YW5jZS5fZW5hYmxlRHJhZ1RvRGlzbWlzcyhjdXJyQ29uZmlnLmRyYWdUb0Rpc21pc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdmVybGF5UmVmLl9jb250YWluZXJJbnN0YW5jZS5fZGlzYWJsZURyYWdUb0Rpc21pc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vcGVuT3ZlcmxheXMudXBkYXRlKChvdmVybGF5cykgPT4gWy4uLm92ZXJsYXlzLCBvdmVybGF5UmVmIV0pO1xuXG4gICAgb3ZlcmxheVJlZiEuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBvbmx5IGJlIHJlbW92ZWQgaWYgbm8gb3BlbiBvdmVybGF5cyByZXF1aXJlIHRoZW0gaW5zaWRlIHRoZWlyIGNvbmZpZy5cbiAgICAgIGNvbnN0IGRvY3VtZW50Q2xhc3NlcyA9IGNvbXBvc2VkQ29uZmlnLnBvc2l0aW9ucy5tYXAoKHBvc2l0aW9uKSA9PiBwb3NpdGlvbi5jb25maWcuZG9jdW1lbnRDbGFzcyk7XG5cbiAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgZG9jdW1lbnRDbGFzc2VzKSB7XG4gICAgICAgIGlmICgha2xhc3MpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtsYXNzKSkge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmtsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShrbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9keUNsYXNzZXMgPSBjb21wb3NlZENvbmZpZy5wb3NpdGlvbnMubWFwKChwb3NpdGlvbikgPT4gcG9zaXRpb24uY29uZmlnLmJvZHlDbGFzcyk7XG5cbiAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgYm9keUNsYXNzZXMpIHtcbiAgICAgICAgaWYgKCFrbGFzcykgY29udGludWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2xhc3MpKSB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKC4uLmtsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoa2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvdmVybGF5UmVmIS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3Blbk92ZXJsYXlzKCkuaW5kZXhPZihvdmVybGF5UmVmKTtcblxuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLm9wZW5PdmVybGF5cy51cGRhdGUoKG92ZXJsYXlzKSA9PiBvdmVybGF5cy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3ZlcmxheVJlZiE7XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24qL1xuICB9XG5cbiAgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy4jY2xvc2VPdmVybGF5cyh0aGlzLm9wZW5PdmVybGF5cygpKTtcbiAgfVxuXG4gIGdldE92ZXJsYXlCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuT3ZlcmxheXMoKS5maW5kKChvdmVybGF5KSA9PiBvdmVybGF5LmlkID09PSBpZCkgPz8gbnVsbDtcbiAgfVxuXG4gICNjbG9zZU92ZXJsYXlzKG92ZXJsYXlzOiBPdmVybGF5UmVmW10pIHtcbiAgICBsZXQgaSA9IG92ZXJsYXlzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIG92ZXJsYXlzW2ldPy5jbG9zZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvY29tcG9uZW50cy9vdmVybGF5L3NlcnZpY2VzL292ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVMsRUFBRSxZQUFZLElBQUksZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RixPQUFPLEVBQWdCLFVBQVUsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckYsT0FBTyxFQUNMLDZCQUE2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RUFBRSxDQUFDO29CQUNqQixTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO29CQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkUsU0FBUyxDQUFDLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztvQkFDdEQsU0FBUyxDQUFDLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztnQkFDeEQsQ0FBQztnQkFFRCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7OEdBOVRVLGNBQWM7a0hBQWQsY0FBYyxjQURELE1BQU07OzJGQUNuQixjQUFjO2tCQUQxQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlhbG9nIGFzIENka0RpYWxvZywgRGlhbG9nQ29uZmlnIGFzIENka0RpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kaWFsb2cnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgTm9vcFNjcm9sbFN0cmF0ZWd5LCBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBST09UX0JPVU5EQVJZX1RPS0VOLFxuICBSb290Qm91bmRhcnlEaXJlY3RpdmUsXG4gIFZpZXdwb3J0U2VydmljZSxcbiAgZWxlbWVudENhblNjcm9sbCxcbiAgZXF1YWwsXG4gIGluamVjdFJvdXRlLFxufSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IFByb3ZpZGVUaGVtZURpcmVjdGl2ZSwgVEhFTUVfUFJPVklERVIgfSBmcm9tICdAZXRobGV0ZS90aGVtaW5nJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgbWFwLCBvZiwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvb3ZlcmxheS1jb250YWluZXInO1xuaW1wb3J0IHsgT1ZFUkxBWV9DT05GSUcsIE9WRVJMQVlfREFUQSwgT1ZFUkxBWV9ERUZBVUxUX09QVElPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3ZlcmxheUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIEVUX09WRVJMQVlfQk9UVE9NX1NIRUVUX0NMQVNTLFxuICBFVF9PVkVSTEFZX0xFRlRfU0hFRVRfQ0xBU1MsXG4gIEVUX09WRVJMQVlfUklHSFRfU0hFRVRfQ0xBU1MsXG4gIEVUX09WRVJMQVlfVE9QX1NIRUVUX0NMQVNTLFxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxuICBPdmVybGF5UmVmLFxuICBjcmVhdGVPdmVybGF5Q29uZmlnLFxufSBmcm9tICcuLi91dGlscyc7XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5jb25zdCBJRF9QUkVGSVggPSAnZXQtb3ZlcmxheS0nO1xuXG5jb25zdCBzZXRTdHlsZSA9IChlbDogSFRNTEVsZW1lbnQsIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGUpO1xuICB9IGVsc2Uge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KHN0eWxlLCBjb2VyY2VDc3NQaXhlbFZhbHVlKHZhbHVlKSk7XG4gIH1cbn07XG5cbmNvbnN0IHNldENsYXNzID0gKGVsOiBIVE1MRWxlbWVudCwgcHJldkNsYXNzPzogc3RyaW5nIHwgc3RyaW5nW10sIGN1cnJDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG4gIGlmICghZXF1YWwocHJldkNsYXNzLCBjdXJyQ2xhc3MpKSB7XG4gICAgaWYgKHByZXZDbGFzcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJldkNsYXNzKSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKC4uLnByZXZDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKHByZXZDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJDbGFzcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VyckNsYXNzKSkge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKC4uLmN1cnJDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGN1cnJDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc0h0bWxFbGVtZW50ID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5rbm93bik6IGVsZW1lbnQgaXMgSFRNTEVsZW1lbnQgPT4ge1xuICByZXR1cm4gZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufTtcblxuY29uc3QgaXNUb3VjaEV2ZW50ID0gKGV2ZW50OiBFdmVudCk6IGV2ZW50IGlzIFRvdWNoRXZlbnQgPT4ge1xuICByZXR1cm4gZXZlbnQudHlwZVswXSA9PT0gJ3QnO1xufTtcblxuY29uc3QgaXNQb2ludGVyRXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogZXZlbnQgaXMgUG9pbnRlckV2ZW50ID0+IHtcbiAgcmV0dXJuIGV2ZW50LnR5cGVbMF0gPT09ICdjJztcbn07XG5cbmNvbnN0IEJMT0NLX0NMQVNTID0gJ2Nkay1nbG9iYWwtc2Nyb2xsYmxvY2snO1xuY29uc3QgT1ZFUlNDUk9MTF9DTEFTUyA9ICdldC1nbG9iYWwtbm8tb3ZlcnNjcm9sbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgT3ZlcmxheVNlcnZpY2Uge1xuICAjZGVmYXVsdE9wdGlvbnMgPSBpbmplY3QoT1ZFUkxBWV9ERUZBVUxUX09QVElPTlMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICNkaWFsb2cgPSBpbmplY3QoQ2RrRGlhbG9nKTtcbiAgI3ZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICAjdmlld3BvcnRSdWxlciA9IGluamVjdChWaWV3cG9ydFJ1bGVyKTtcblxuICBvcGVuT3ZlcmxheXMgPSBzaWduYWw8T3ZlcmxheVJlZltdPihbXSk7XG4gIGhhc09wZW5PdmVybGF5cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3Blbk92ZXJsYXlzKCkubGVuZ3RoID4gMCk7XG4gIHBvc2l0aW9ucyA9IG5ldyBPdmVybGF5UG9zaXRpb25CdWlsZGVyKCk7XG4gIHJvdXRlID0gaW5qZWN0Um91dGUoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNzZXR1cFNjcm9sbEJsb2NraW5nKCk7XG4gIH1cblxuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4odGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+LCBjb25maWc6IE92ZXJsYXlDb25maWc8RD4pOiBPdmVybGF5UmVmPFQsIFI+O1xuICBvcGVuPFQsIEQgPSB1bmtub3duLCBSID0gdW5rbm93bj4oXG4gICAgdGVtcGxhdGU6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBjb25maWc6IE92ZXJsYXlDb25maWc8RD4sXG4gICk6IE92ZXJsYXlSZWY8VCwgUj47XG4gIG9wZW48VCwgRCA9IHVua25vd24sIFIgPSB1bmtub3duPihcbiAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgY29uZmlnOiBPdmVybGF5Q29uZmlnPEQ+LFxuICApOiBPdmVybGF5UmVmPFQsIFI+IHtcbiAgICBsZXQgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjxULCBSPjtcblxuICAgIGNvbnN0IGNvbXBvc2VkQ29uZmlnID0gY3JlYXRlT3ZlcmxheUNvbmZpZzxEPih0aGlzLiNkZWZhdWx0T3B0aW9ucyBhcyBPdmVybGF5Q29uZmlnPEQ+LCBjb25maWcpO1xuICAgIGNvbXBvc2VkQ29uZmlnLmlkID0gY29tcG9zZWRDb25maWcuaWQgfHwgYCR7SURfUFJFRklYfSR7dW5pcXVlSWQrK31gO1xuXG4gICAgY29uc3QgY2RrUmVmID0gdGhpcy4jZGlhbG9nLm9wZW48UiwgRCwgVD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwge1xuICAgICAgLi4uY29tcG9zZWRDb25maWcsXG4gICAgICBzY3JvbGxTdHJhdGVneTogbmV3IE5vb3BTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgY2xvc2VPbkRlc3Ryb3k6IGZhbHNlLFxuICAgICAgcGFuZWxDbGFzczogJ2V0LW92ZXJsYXktcGFuZScsXG4gICAgICBjb250YWluZXI6IHtcbiAgICAgICAgdHlwZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgcHJvdmlkZXJzOiAoKSA9PiBbXG4gICAgICAgICAgeyBwcm92aWRlOiBPVkVSTEFZX0NPTkZJRywgdXNlVmFsdWU6IGNvbXBvc2VkQ29uZmlnIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBDZGtEaWFsb2dDb25maWcsIHVzZVZhbHVlOiBjb21wb3NlZENvbmZpZyB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHRlbXBsYXRlQ29udGV4dDogKCkgPT4gKHsgZGlhbG9nUmVmOiBvdmVybGF5UmVmIH0pLFxuICAgICAgcHJvdmlkZXJzOiAocmVmLCBjZGtDb25maWcsIG92ZXJsYXlDb250YWluZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gb3ZlcmxheUNvbnRhaW5lciBhcyBPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50O1xuICAgICAgICBvdmVybGF5UmVmID0gbmV3IE92ZXJsYXlSZWYocmVmLCBjb21wb3NlZENvbmZpZywgY29udGFpbmVyKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgcHJvdmlkZTogT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCwgdXNlVmFsdWU6IG92ZXJsYXlDb250YWluZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFRIRU1FX1BST1ZJREVSLCB1c2VWYWx1ZTogY29udGFpbmVyLl90aGVtZVByb3ZpZGVyIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBQcm92aWRlVGhlbWVEaXJlY3RpdmUsIHVzZVZhbHVlOiBjb250YWluZXIuX3RoZW1lUHJvdmlkZXIgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IFJPT1RfQk9VTkRBUllfVE9LRU4sIHVzZVZhbHVlOiBjb250YWluZXIuX3Jvb3RCb3VuZGFyeSB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogUm9vdEJvdW5kYXJ5RGlyZWN0aXZlLCB1c2VWYWx1ZTogY29udGFpbmVyLl9yb290Qm91bmRhcnkgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IE9WRVJMQVlfREFUQSwgdXNlVmFsdWU6IGNka0NvbmZpZy5kYXRhIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiBPdmVybGF5UmVmLCB1c2VWYWx1ZTogb3ZlcmxheVJlZiB9LFxuICAgICAgICAgIC4uLihjb21wb3NlZENvbmZpZy5wcm92aWRlcnMgPz8gW10pLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24qL1xuICAgIChvdmVybGF5UmVmISBhcyB7IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+IH0pLmNvbXBvbmVudFJlZiA9IGNka1JlZi5jb21wb25lbnRSZWYhO1xuICAgIG92ZXJsYXlSZWYhLmNvbXBvbmVudEluc3RhbmNlID0gY2RrUmVmLmNvbXBvbmVudEluc3RhbmNlITtcblxuICAgIChjZGtSZWYuY29udGFpbmVySW5zdGFuY2UgYXMgT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCkub3ZlcmxheVJlZiA9IG92ZXJsYXlSZWYhO1xuXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBvdmVybGF5UmVmIS5fY29udGFpbmVySW5zdGFuY2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlQYW5lRWwgPSBjZGtSZWYub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudDtcbiAgICBjb25zdCBiYWNrZHJvcEVsID0gY2RrUmVmLm92ZXJsYXlSZWYuYmFja2Ryb3BFbGVtZW50O1xuICAgIGNvbnN0IG92ZXJsYXlXcmFwcGVyID0gY2RrUmVmLm92ZXJsYXlSZWYuaG9zdEVsZW1lbnQ7XG4gICAgY29uc3QgdXNlRGVmYXVsdEFuaW1hdGlvbiA9IGNvbXBvc2VkQ29uZmlnLmN1c3RvbUFuaW1hdGVkICE9PSB0cnVlO1xuICAgIGNvbnN0IG9yaWdpbiA9IGNvbXBvc2VkQ29uZmlnLm9yaWdpbjtcblxuICAgIGNvbWJpbmVMYXRlc3QoXG4gICAgICBjb21wb3NlZENvbmZpZy5wb3NpdGlvbnMubWFwKChicmVha3BvaW50KSA9PlxuICAgICAgICAoYnJlYWtwb2ludC5icmVha3BvaW50ID8gdGhpcy4jdmlld3BvcnRTZXJ2aWNlLm9ic2VydmUoeyBtaW46IGJyZWFrcG9pbnQuYnJlYWtwb2ludCB9KSA6IG9mKHRydWUpKS5waXBlKFxuICAgICAgICAgIG1hcCgoaXNBY3RpdmUpID0+ICh7XG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGNvbmZpZzogYnJlYWtwb2ludC5jb25maWcsXG4gICAgICAgICAgICBzaXplOlxuICAgICAgICAgICAgICB0eXBlb2YgYnJlYWtwb2ludC5icmVha3BvaW50ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgID8gYnJlYWtwb2ludC5icmVha3BvaW50XG4gICAgICAgICAgICAgICAgOiBicmVha3BvaW50LmJyZWFrcG9pbnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuI3ZpZXdwb3J0U2VydmljZS5nZXRCcmVha3BvaW50U2l6ZShicmVha3BvaW50LmJyZWFrcG9pbnQsICdtaW4nKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwob3ZlcmxheVJlZiEuYWZ0ZXJDbG9zZWQoKSksXG4gICAgICAgIG1hcCgoZW50cmllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUJyZWFrcG9pbnRzID0gZW50cmllcy5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0FjdGl2ZSk7XG4gICAgICAgICAgY29uc3QgaGlnaGVzdEJyZWFrcG9pbnQgPSBhY3RpdmVCcmVha3BvaW50cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2LnNpemUgPiBjdXJyLnNpemUgPyBwcmV2IDogY3VycikpO1xuXG4gICAgICAgICAgcmV0dXJuIGhpZ2hlc3RCcmVha3BvaW50LmNvbmZpZztcbiAgICAgICAgfSksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgdGFwKChbcHJldkNvbmZpZywgY3VyckNvbmZpZ10pID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJDb25maWcpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzID0gY3VyckNvbmZpZy5jb250YWluZXJDbGFzcztcblxuICAgICAgICAgIGNvbnN0IGFwcGx5RGVmYXVsdE1heFdpZHRocyA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtaGVpZ2h0JywgY3VyckNvbmZpZy5tYXhIZWlnaHQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJDb25maWcuYXBwbHlUcmFuc2Zvcm1PcmlnaW4pIHtcbiAgICAgICAgICAgICAgc2V0U3R5bGUoY29udGFpbmVyRWwsICd0cmFuc2Zvcm0tb3JpZ2luJywgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBJZiBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdXNlZCBpdCBzaG91bGQgdXNlIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuXG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpblggPSBpc0h0bWxFbGVtZW50KG9yaWdpbilcbiAgICAgICAgICAgICAgICA/IG9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgICAgPyBvcmlnaW4udGFyZ2V0VG91Y2hlc1swXSEuY2xpZW50WFxuICAgICAgICAgICAgICAgICAgOiBpc1BvaW50ZXJFdmVudChvcmlnaW4pXG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFggIT09IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbi5jbGllbnRYXG4gICAgICAgICAgICAgICAgICAgICAgOiAob3JpZ2luLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5ZID0gaXNIdG1sRWxlbWVudChvcmlnaW4pXG4gICAgICAgICAgICAgICAgPyBvcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICAgICAgICAgICAgOiBpc1RvdWNoRXZlbnQob3JpZ2luKVxuICAgICAgICAgICAgICAgICAgPyBvcmlnaW4udGFyZ2V0VG91Y2hlc1swXSEuY2xpZW50WVxuICAgICAgICAgICAgICAgICAgOiBpc1BvaW50ZXJFdmVudChvcmlnaW4pXG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luLmNsaWVudFkgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbi5jbGllbnRZXG4gICAgICAgICAgICAgICAgICAgICAgOiAob3JpZ2luLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgaWYgKG9yaWdpblggIT09IC0xICYmIG9yaWdpblkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgc2V0U3R5bGUoY29udGFpbmVyRWwsICd0cmFuc2Zvcm0tb3JpZ2luJywgYCR7b3JpZ2luWH1weCAke29yaWdpbll9cHhgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1c2VEZWZhdWx0QW5pbWF0aW9uICYmIGNvbnRhaW5lckNsYXNzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M/LmluY2x1ZGVzKEVUX09WRVJMQVlfTEVGVF9TSEVFVF9DTEFTUykgfHxcbiAgICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M/LmluY2x1ZGVzKEVUX09WRVJMQVlfUklHSFRfU0hFRVRfQ0xBU1MpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21heC13aWR0aCcsIGN1cnJDb25maWcubWF4V2lkdGgpO1xuICAgICAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWF4LWhlaWdodCcsIGN1cnJDb25maWcubWF4SGVpZ2h0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzPy5pbmNsdWRlcyhFVF9PVkVSTEFZX1RPUF9TSEVFVF9DTEFTUykgfHxcbiAgICAgICAgICAgICAgY29udGFpbmVyQ2xhc3M/LmluY2x1ZGVzKEVUX09WRVJMQVlfQk9UVE9NX1NIRUVUX0NMQVNTKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtaGVpZ2h0JywgY3VyckNvbmZpZy5tYXhIZWlnaHQpO1xuXG4gICAgICAgICAgICAgIHNldFN0eWxlKG92ZXJsYXlQYW5lRWwsICdtYXgtd2lkdGgnLCBjdXJyQ29uZmlnLm1heFdpZHRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFwcGx5RGVmYXVsdE1heFdpZHRocygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBseURlZmF1bHRNYXhXaWR0aHMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnbWluLXdpZHRoJywgY3VyckNvbmZpZy5taW5XaWR0aCk7XG4gICAgICAgICAgc2V0U3R5bGUob3ZlcmxheVBhbmVFbCwgJ21pbi1oZWlnaHQnLCBjdXJyQ29uZmlnLm1pbkhlaWdodCk7XG5cbiAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnd2lkdGgnLCBjdXJyQ29uZmlnLndpZHRoKTtcbiAgICAgICAgICBzZXRTdHlsZShvdmVybGF5UGFuZUVsLCAnaGVpZ2h0JywgY3VyckNvbmZpZy5oZWlnaHQpO1xuXG4gICAgICAgICAgc2V0Q2xhc3MoY29udGFpbmVyRWwsIHByZXZDb25maWc/LmNvbnRhaW5lckNsYXNzLCBjdXJyQ29uZmlnPy5jb250YWluZXJDbGFzcyk7XG4gICAgICAgICAgc2V0Q2xhc3Mob3ZlcmxheVBhbmVFbCwgcHJldkNvbmZpZz8ucGFuZUNsYXNzLCBjdXJyQ29uZmlnPy5wYW5lQ2xhc3MpO1xuICAgICAgICAgIHNldENsYXNzKG92ZXJsYXlXcmFwcGVyLCBwcmV2Q29uZmlnPy5vdmVybGF5Q2xhc3MsIGN1cnJDb25maWc/Lm92ZXJsYXlDbGFzcyk7XG5cbiAgICAgICAgICAvLyBGSVhNRTogVGhlc2UgY2xhc3NlcyBzaG91bGQgb25seSBiZSByZW1vdmVkIGlmIG5vIG9wZW4gb3ZlcmxheXMgcmVxdWlyZSB0aGVtIGluc2lkZSB0aGVpciBjb25maWcuXG4gICAgICAgICAgc2V0Q2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBwcmV2Q29uZmlnPy5kb2N1bWVudENsYXNzLCBjdXJyQ29uZmlnPy5kb2N1bWVudENsYXNzKTtcbiAgICAgICAgICBzZXRDbGFzcyhkb2N1bWVudC5ib2R5LCBwcmV2Q29uZmlnPy5ib2R5Q2xhc3MsIGN1cnJDb25maWc/LmJvZHlDbGFzcyk7XG5cbiAgICAgICAgICBpZiAoYmFja2Ryb3BFbCkge1xuICAgICAgICAgICAgc2V0Q2xhc3MoYmFja2Ryb3BFbCwgcHJldkNvbmZpZz8uYmFja2Ryb3BDbGFzcywgY3VyckNvbmZpZz8uYmFja2Ryb3BDbGFzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFlcXVhbChwcmV2Q29uZmlnPy5wb3NpdGlvbiwgY3VyckNvbmZpZz8ucG9zaXRpb24pKSB7XG4gICAgICAgICAgICBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKGN1cnJDb25maWcucG9zaXRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyQ29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNka1JlZi5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koY3VyckNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5KCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjZGtSZWYub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyQ29uZmlnLmRyYWdUb0Rpc21pc3MpIHtcbiAgICAgICAgICAgIG92ZXJsYXlSZWYuX2NvbnRhaW5lckluc3RhbmNlLl9lbmFibGVEcmFnVG9EaXNtaXNzKGN1cnJDb25maWcuZHJhZ1RvRGlzbWlzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG92ZXJsYXlSZWYuX2NvbnRhaW5lckluc3RhbmNlLl9kaXNhYmxlRHJhZ1RvRGlzbWlzcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm9wZW5PdmVybGF5cy51cGRhdGUoKG92ZXJsYXlzKSA9PiBbLi4ub3ZlcmxheXMsIG92ZXJsYXlSZWYhXSk7XG5cbiAgICBvdmVybGF5UmVmIS5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgLy8gRklYTUU6IFRoZXNlIGNsYXNzZXMgc2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiBubyBvcGVuIG92ZXJsYXlzIHJlcXVpcmUgdGhlbSBpbnNpZGUgdGhlaXIgY29uZmlnLlxuICAgICAgY29uc3QgZG9jdW1lbnRDbGFzc2VzID0gY29tcG9zZWRDb25maWcucG9zaXRpb25zLm1hcCgocG9zaXRpb24pID0+IHBvc2l0aW9uLmNvbmZpZy5kb2N1bWVudENsYXNzKTtcblxuICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBkb2N1bWVudENsYXNzZXMpIHtcbiAgICAgICAgaWYgKCFrbGFzcykgY29udGludWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2xhc3MpKSB7XG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4ua2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGtsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib2R5Q2xhc3NlcyA9IGNvbXBvc2VkQ29uZmlnLnBvc2l0aW9ucy5tYXAoKHBvc2l0aW9uKSA9PiBwb3NpdGlvbi5jb25maWcuYm9keUNsYXNzKTtcblxuICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBib2R5Q2xhc3Nlcykge1xuICAgICAgICBpZiAoIWtsYXNzKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrbGFzcykpIHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoLi4ua2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShrbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG92ZXJsYXlSZWYhLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcGVuT3ZlcmxheXMoKS5pbmRleE9mKG92ZXJsYXlSZWYpO1xuXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIHRoaXMub3Blbk92ZXJsYXlzLnVwZGF0ZSgob3ZlcmxheXMpID0+IG92ZXJsYXlzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdmVybGF5UmVmITtcblxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbiovXG4gIH1cblxuICBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLiNjbG9zZU92ZXJsYXlzKHRoaXMub3Blbk92ZXJsYXlzKCkpO1xuICB9XG5cbiAgZ2V0T3ZlcmxheUJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9wZW5PdmVybGF5cygpLmZpbmQoKG92ZXJsYXkpID0+IG92ZXJsYXkuaWQgPT09IGlkKSA/PyBudWxsO1xuICB9XG5cbiAgI2Nsb3NlT3ZlcmxheXMob3ZlcmxheXM6IE92ZXJsYXlSZWZbXSkge1xuICAgIGxldCBpID0gb3ZlcmxheXMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgb3ZlcmxheXNbaV0/LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgI3NldHVwU2Nyb2xsQmxvY2tpbmcoKSB7XG4gICAgY29uc3QgcHJldmlvdXNIVE1MU3R5bGVzID0geyB0b3A6ICcnLCBsZWZ0OiAnJyB9O1xuICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gICAgbGV0IGlzRW5hYmxlZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0Um91dGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmhhc09wZW5PdmVybGF5cylcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhc09wZW5PdmVybGF5cykgPT4ge1xuICAgICAgICAgIGlmICghaGFzT3Blbk92ZXJsYXlzKSByZXR1cm4gb2YoeyBoYXNPcGVuT3ZlcmxheXMsIHNjcm9sbGVkOiBmYWxzZSB9KTtcblxuICAgICAgICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh7IGhhc09wZW5PdmVybGF5cywgc2Nyb2xsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gKHsgaGFzT3Blbk92ZXJsYXlzLCBzY3JvbGxlZDogdHJ1ZSB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBoYXNPcGVuT3ZlcmxheXMgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc0Jsb2NrQ2xhc3MgPSByb290LmNsYXNzTGlzdC5jb250YWlucyhCTE9DS19DTEFTUyk7XG5cbiAgICAgICAgICBpZiAoaGFzT3Blbk92ZXJsYXlzICYmIChoYXNCbG9ja0NsYXNzIHx8IGVsZW1lbnRDYW5TY3JvbGwocm9vdCkpKSB7XG4gICAgICAgICAgICBpZiAoaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIHByZXZpb3VzU2Nyb2xsUG9zaXRpb24gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgICAgIHByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0ID0gcm9vdC5zdHlsZS5sZWZ0IHx8ICcnO1xuICAgICAgICAgICAgcHJldmlvdXNIVE1MU3R5bGVzLnRvcCA9IHJvb3Quc3R5bGUudG9wIHx8ICcnO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpO1xuICAgICAgICAgICAgcm9vdC5zdHlsZS50b3AgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKC1wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5hZGQoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICBpc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJvdXRlID0gdGhpcy5yb3V0ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc09wZW5PdmVybGF5cykge1xuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFN0eWxlID0gcm9vdC5zdHlsZTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkuc3R5bGU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0h0bWxTY3JvbGxCZWhhdmlvciA9IGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQm9keVNjcm9sbEJlaGF2aW9yID0gYm9keVN0eWxlLnNjcm9sbEJlaGF2aW9yIHx8ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBkaWROYXZpZ2F0ZSA9IGxhc3RSb3V0ZSAhPT0gdGhpcy5yb3V0ZSgpO1xuXG4gICAgICAgICAgICByb290LmNsYXNzTGlzdC5yZW1vdmUoQkxPQ0tfQ0xBU1MsIE9WRVJTQ1JPTExfQ0xBU1MpO1xuXG4gICAgICAgICAgICByb290LnN0eWxlLmxlZnQgPSBwcmV2aW91c0hUTUxTdHlsZXMubGVmdDtcbiAgICAgICAgICAgIHJvb3Quc3R5bGUudG9wID0gcHJldmlvdXNIVE1MU3R5bGVzLnRvcDtcblxuICAgICAgICAgICAgaWYgKCFkaWROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBodG1sU3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAnYXV0byc7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGwocHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgICAgICAgIGh0bWxTdHlsZS5zY3JvbGxCZWhhdmlvciA9IHByZXZpb3VzSHRtbFNjcm9sbEJlaGF2aW9yO1xuICAgICAgICAgICAgICBib2R5U3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBwcmV2aW91c0JvZHlTY3JvbGxCZWhhdmlvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBsYXN0Um91dGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -12339,52 +12339,7 @@ class OverlayService {
12339
12339
  this.hasOpenOverlays = computed(() => this.openOverlays().length > 0);
12340
12340
  this.positions = new OverlayPositionBuilder();
12341
12341
  this.route = injectRoute();
12342
- const previousHTMLStyles = { top: '', left: '' };
12343
- let previousScrollPosition = { top: 0, left: 0 };
12344
- let isEnabled = false;
12345
- let lastRoute = null;
12346
- const root = document.documentElement;
12347
- toObservable(this.hasOpenOverlays)
12348
- .pipe(switchMap((hasOpenOverlays) => {
12349
- if (!hasOpenOverlays)
12350
- return of({ hasOpenOverlays, scrolled: false });
12351
- return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
12352
- }), tap(({ hasOpenOverlays }) => {
12353
- const hasBlockClass = root.classList.contains(BLOCK_CLASS);
12354
- if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
12355
- if (isEnabled)
12356
- return;
12357
- previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
12358
- previousHTMLStyles.left = root.style.left || '';
12359
- previousHTMLStyles.top = root.style.top || '';
12360
- root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
12361
- root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
12362
- root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
12363
- isEnabled = true;
12364
- lastRoute = this.route();
12365
- }
12366
- else if (!hasOpenOverlays) {
12367
- if (!isEnabled)
12368
- return;
12369
- const htmlStyle = root.style;
12370
- const bodyStyle = document.body.style;
12371
- const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
12372
- const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
12373
- const didNavigate = lastRoute !== this.route();
12374
- root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
12375
- root.style.left = previousHTMLStyles.left;
12376
- root.style.top = previousHTMLStyles.top;
12377
- if (!didNavigate) {
12378
- htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
12379
- window.scroll(previousScrollPosition.left, previousScrollPosition.top);
12380
- htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
12381
- bodyStyle.scrollBehavior = previousBodyScrollBehavior;
12382
- }
12383
- isEnabled = false;
12384
- lastRoute = null;
12385
- }
12386
- }))
12387
- .subscribe();
12342
+ this.#setupScrollBlocking();
12388
12343
  }
12389
12344
  open(componentOrTemplateRef, config) {
12390
12345
  let overlayRef;
@@ -12451,30 +12406,32 @@ class OverlayService {
12451
12406
  setStyle(overlayPaneEl, 'max-height', currConfig.maxHeight);
12452
12407
  };
12453
12408
  if (origin) {
12454
- // TODO: If getBoundingClientRect is used it should use the center of the element.
12455
- const originX = isHtmlElement(origin)
12456
- ? origin.getBoundingClientRect().left
12457
- : isTouchEvent(origin)
12458
- ? origin.targetTouches[0].clientX
12459
- : isPointerEvent(origin)
12460
- ? origin.clientX !== 0
12461
- ? origin.clientX
12462
- : origin.target.getBoundingClientRect().left
12463
- : -1;
12464
- const originY = isHtmlElement(origin)
12465
- ? origin.getBoundingClientRect().top
12466
- : isTouchEvent(origin)
12467
- ? origin.targetTouches[0].clientY
12468
- : isPointerEvent(origin)
12469
- ? origin.clientY !== 0
12470
- ? origin.clientY
12471
- : origin.target.getBoundingClientRect().top
12472
- : -1;
12473
- if (originX !== -1 && originY !== -1 && currConfig.applyTransformOrigin) {
12474
- setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
12409
+ if (!currConfig.applyTransformOrigin) {
12410
+ setStyle(containerEl, 'transform-origin', null);
12475
12411
  }
12476
12412
  else {
12477
- setStyle(containerEl, 'transform-origin', null);
12413
+ // TODO: If getBoundingClientRect is used it should use the center of the element.
12414
+ const originX = isHtmlElement(origin)
12415
+ ? origin.getBoundingClientRect().left
12416
+ : isTouchEvent(origin)
12417
+ ? origin.targetTouches[0].clientX
12418
+ : isPointerEvent(origin)
12419
+ ? origin.clientX !== 0
12420
+ ? origin.clientX
12421
+ : origin.target.getBoundingClientRect().left
12422
+ : -1;
12423
+ const originY = isHtmlElement(origin)
12424
+ ? origin.getBoundingClientRect().top
12425
+ : isTouchEvent(origin)
12426
+ ? origin.targetTouches[0].clientY
12427
+ : isPointerEvent(origin)
12428
+ ? origin.clientY !== 0
12429
+ ? origin.clientY
12430
+ : origin.target.getBoundingClientRect().top
12431
+ : -1;
12432
+ if (originX !== -1 && originY !== -1) {
12433
+ setStyle(containerEl, 'transform-origin', `${originX}px ${originY}px`);
12434
+ }
12478
12435
  }
12479
12436
  }
12480
12437
  if (useDefaultAnimation && containerClass?.length) {
@@ -12572,6 +12529,54 @@ class OverlayService {
12572
12529
  overlays[i]?.close();
12573
12530
  }
12574
12531
  }
12532
+ #setupScrollBlocking() {
12533
+ const previousHTMLStyles = { top: '', left: '' };
12534
+ let previousScrollPosition = { top: 0, left: 0 };
12535
+ let isEnabled = false;
12536
+ let lastRoute = null;
12537
+ const root = document.documentElement;
12538
+ toObservable(this.hasOpenOverlays)
12539
+ .pipe(switchMap((hasOpenOverlays) => {
12540
+ if (!hasOpenOverlays)
12541
+ return of({ hasOpenOverlays, scrolled: false });
12542
+ return fromEvent(window, 'resize').pipe(startWith({ hasOpenOverlays, scrolled: true }), map(() => ({ hasOpenOverlays, scrolled: true })));
12543
+ }), tap(({ hasOpenOverlays }) => {
12544
+ const hasBlockClass = root.classList.contains(BLOCK_CLASS);
12545
+ if (hasOpenOverlays && (hasBlockClass || elementCanScroll(root))) {
12546
+ if (isEnabled)
12547
+ return;
12548
+ previousScrollPosition = this.#viewportRuler.getViewportScrollPosition();
12549
+ previousHTMLStyles.left = root.style.left || '';
12550
+ previousHTMLStyles.top = root.style.top || '';
12551
+ root.style.left = coerceCssPixelValue(-previousScrollPosition.left);
12552
+ root.style.top = coerceCssPixelValue(-previousScrollPosition.top);
12553
+ root.classList.add(BLOCK_CLASS, OVERSCROLL_CLASS);
12554
+ isEnabled = true;
12555
+ lastRoute = this.route();
12556
+ }
12557
+ else if (!hasOpenOverlays) {
12558
+ if (!isEnabled)
12559
+ return;
12560
+ const htmlStyle = root.style;
12561
+ const bodyStyle = document.body.style;
12562
+ const previousHtmlScrollBehavior = htmlStyle.scrollBehavior || '';
12563
+ const previousBodyScrollBehavior = bodyStyle.scrollBehavior || '';
12564
+ const didNavigate = lastRoute !== this.route();
12565
+ root.classList.remove(BLOCK_CLASS, OVERSCROLL_CLASS);
12566
+ root.style.left = previousHTMLStyles.left;
12567
+ root.style.top = previousHTMLStyles.top;
12568
+ if (!didNavigate) {
12569
+ htmlStyle.scrollBehavior = bodyStyle.scrollBehavior = 'auto';
12570
+ window.scroll(previousScrollPosition.left, previousScrollPosition.top);
12571
+ htmlStyle.scrollBehavior = previousHtmlScrollBehavior;
12572
+ bodyStyle.scrollBehavior = previousBodyScrollBehavior;
12573
+ }
12574
+ isEnabled = false;
12575
+ lastRoute = null;
12576
+ }
12577
+ }))
12578
+ .subscribe();
12579
+ }
12575
12580
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12576
12581
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: OverlayService, providedIn: 'root' }); }
12577
12582
  }