@skyux/core 6.16.0 → 7.0.0-alpha.0
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/documentation.json +1049 -899
- package/esm2020/lib/modules/adapter-service/adapter.module.mjs +4 -4
- package/esm2020/lib/modules/adapter-service/adapter.service.mjs +24 -25
- package/esm2020/lib/modules/affix/affix-offset.mjs +1 -1
- package/esm2020/lib/modules/affix/affix.directive.mjs +41 -26
- package/esm2020/lib/modules/affix/affix.module.mjs +5 -5
- package/esm2020/lib/modules/affix/affix.service.mjs +3 -3
- package/esm2020/lib/modules/affix/affixer.mjs +266 -260
- package/esm2020/lib/modules/affix/dom-utils.mjs +7 -7
- package/esm2020/lib/modules/dock/dock-dom-adapter.service.mjs +51 -47
- package/esm2020/lib/modules/dock/dock-item.mjs +10 -5
- package/esm2020/lib/modules/dock/dock.component.mjs +58 -34
- package/esm2020/lib/modules/dock/dock.module.mjs +5 -5
- package/esm2020/lib/modules/dock/dock.service.mjs +43 -39
- package/esm2020/lib/modules/dynamic-component/dynamic-component.module.mjs +4 -4
- package/esm2020/lib/modules/dynamic-component/dynamic-component.service.mjs +40 -25
- package/esm2020/lib/modules/format/app-format.mjs +3 -3
- package/esm2020/lib/modules/id/id.directive.mjs +3 -3
- package/esm2020/lib/modules/id/id.module.mjs +4 -4
- package/esm2020/lib/modules/id/id.service.mjs +3 -3
- package/esm2020/lib/modules/log/log.module.mjs +4 -4
- package/esm2020/lib/modules/log/log.service.mjs +41 -41
- package/esm2020/lib/modules/media-query/media-query.module.mjs +4 -4
- package/esm2020/lib/modules/media-query/media-query.service.mjs +53 -50
- package/esm2020/lib/modules/mutation/mutation-observer-service.mjs +6 -4
- package/esm2020/lib/modules/numeric/numeric.module.mjs +5 -5
- package/esm2020/lib/modules/numeric/numeric.pipe.mjs +29 -22
- package/esm2020/lib/modules/numeric/numeric.service.mjs +87 -102
- package/esm2020/lib/modules/overlay/overlay-adapter.service.mjs +26 -20
- package/esm2020/lib/modules/overlay/overlay-instance.mjs +18 -9
- package/esm2020/lib/modules/overlay/overlay.component.mjs +82 -58
- package/esm2020/lib/modules/overlay/overlay.module.mjs +5 -5
- package/esm2020/lib/modules/overlay/overlay.service.mjs +58 -52
- package/esm2020/lib/modules/percent-pipe/percent-pipe.module.mjs +5 -5
- package/esm2020/lib/modules/percent-pipe/percent.pipe.mjs +35 -24
- package/esm2020/lib/modules/resize-observer/resize-observer-media-query.service.mjs +41 -49
- package/esm2020/lib/modules/resize-observer/resize-observer.service.mjs +3 -3
- package/esm2020/lib/modules/scrollable-host/scrollable-host.service.mjs +69 -70
- package/esm2020/lib/modules/shared/sky-core-resources.module.mjs +4 -4
- package/esm2020/lib/modules/title/title.service.mjs +11 -7
- package/esm2020/lib/modules/trim/trim.directive.mjs +13 -14
- package/esm2020/lib/modules/trim/trim.module.mjs +4 -4
- package/esm2020/lib/modules/ui-config/ui-config.service.mjs +3 -3
- package/esm2020/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +1 -1
- package/esm2020/lib/modules/viewkeeper/viewkeeper-host-options.mjs +3 -3
- package/esm2020/lib/modules/viewkeeper/viewkeeper.directive.mjs +78 -63
- package/esm2020/lib/modules/viewkeeper/viewkeeper.mjs +166 -156
- package/esm2020/lib/modules/viewkeeper/viewkeeper.module.mjs +4 -4
- package/esm2020/lib/modules/viewkeeper/viewkeeper.service.mjs +10 -6
- package/esm2020/lib/modules/window/window-ref.mjs +3 -3
- package/esm2020/testing/core-testing.module.mjs +8 -5
- package/esm2020/testing/mock-media-query.service.mjs +7 -4
- package/esm2020/testing/mock-ui-config.service.mjs +7 -4
- package/esm2020/testing/overlay/overlay-harness-filters.mjs +1 -1
- package/esm2020/testing/overlay/overlay-harness.mjs +2 -1
- package/esm2020/testing/shared/component-harness.mjs +4 -1
- package/esm2020/testing/shared/harness-filters.mjs +1 -1
- package/fesm2015/skyux-core-testing.mjs +23 -10
- package/fesm2015/skyux-core-testing.mjs.map +1 -1
- package/fesm2015/skyux-core.mjs +1416 -1291
- package/fesm2015/skyux-core.mjs.map +1 -1
- package/fesm2020/skyux-core-testing.mjs +23 -10
- package/fesm2020/skyux-core-testing.mjs.map +1 -1
- package/fesm2020/skyux-core.mjs +1418 -1290
- package/fesm2020/skyux-core.mjs.map +1 -1
- package/lib/modules/adapter-service/adapter.service.d.ts +3 -5
- package/lib/modules/affix/affix-offset.d.ts +1 -1
- package/lib/modules/affix/affix.directive.d.ts +13 -14
- package/lib/modules/affix/affixer.d.ts +2 -34
- package/lib/modules/affix/dom-utils.d.ts +3 -3
- package/lib/modules/dock/dock-dom-adapter.service.d.ts +2 -9
- package/lib/modules/dock/dock-item.d.ts +1 -1
- package/lib/modules/dock/dock.component.d.ts +3 -11
- package/lib/modules/dock/dock.service.d.ts +2 -5
- package/lib/modules/dynamic-component/dynamic-component.service.d.ts +2 -7
- package/lib/modules/id/id.directive.d.ts +1 -1
- package/lib/modules/log/log.service.d.ts +2 -6
- package/lib/modules/media-query/media-query.service.d.ts +1 -8
- package/lib/modules/numeric/numeric.pipe.d.ts +3 -9
- package/lib/modules/numeric/numeric.service.d.ts +3 -36
- package/lib/modules/overlay/overlay-adapter.service.d.ts +1 -3
- package/lib/modules/overlay/overlay-instance.d.ts +1 -2
- package/lib/modules/overlay/overlay.component.d.ts +2 -15
- package/lib/modules/overlay/overlay.service.d.ts +1 -7
- package/lib/modules/percent-pipe/percent.pipe.d.ts +3 -10
- package/lib/modules/resize-observer/resize-observer-media-query.service.d.ts +2 -7
- package/lib/modules/scrollable-host/scrollable-host.service.d.ts +2 -11
- package/lib/modules/title/title.service.d.ts +2 -2
- package/lib/modules/trim/trim.directive.d.ts +1 -3
- package/lib/modules/viewkeeper/viewkeeper-boundary-info.d.ts +1 -1
- package/lib/modules/viewkeeper/viewkeeper.d.ts +2 -24
- package/lib/modules/viewkeeper/viewkeeper.directive.d.ts +5 -17
- package/lib/modules/viewkeeper/viewkeeper.service.d.ts +1 -1
- package/package.json +10 -10
- package/testing/core-testing.module.d.ts +3 -0
- package/testing/{skyux-core-testing.d.ts → index.d.ts} +0 -0
- package/testing/mock-media-query.service.d.ts +3 -0
- package/testing/mock-ui-config.service.d.ts +3 -0
- package/testing/overlay/overlay-harness-filters.d.ts +1 -0
- package/testing/overlay/overlay-harness.d.ts +1 -0
- package/testing/shared/component-harness.d.ts +3 -0
- package/testing/shared/harness-filters.d.ts +1 -0
- package/skyux-core.d.ts +0 -5
- package/testing/package.json +0 -10
@@ -1,3 +1,5 @@
|
|
1
|
+
var _SkyAffixer_instances, _SkyAffixer_config_get, _SkyAffixer_config_set, _SkyAffixer_affixedElement, _SkyAffixer_baseElement, _SkyAffixer_currentOffset, _SkyAffixer_currentPlacement, _SkyAffixer_offsetChange, _SkyAffixer_offsetChangeObs, _SkyAffixer_overflowParents, _SkyAffixer_overflowScroll, _SkyAffixer_overflowScrollObs, _SkyAffixer_placementChange, _SkyAffixer_placementChangeObs, _SkyAffixer_renderer, _SkyAffixer_resizeListener, _SkyAffixer_scrollListeners, _SkyAffixer__config, _SkyAffixer_affix, _SkyAffixer_getOffset, _SkyAffixer_getPreferredOffset, _SkyAffixer_adjustOffsetToOverflowParent, _SkyAffixer_getImmediateOverflowParent, _SkyAffixer_getAutoFitContextParent, _SkyAffixer_notifyPlacementChange, _SkyAffixer_reset, _SkyAffixer_isNewOffset, _SkyAffixer_isBaseElementVisible, _SkyAffixer_addScrollListeners, _SkyAffixer_addResizeListener, _SkyAffixer_removeResizeListener, _SkyAffixer_removeScrollListeners;
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
1
3
|
import { Subject, fromEvent } from 'rxjs';
|
2
4
|
import { SkyAffixAutoFitContext } from './affix-auto-fit-context';
|
3
5
|
import { getInversePlacement, getNextPlacement } from './affix-utils';
|
@@ -11,17 +13,36 @@ const DEFAULT_AFFIX_CONFIG = {
|
|
11
13
|
};
|
12
14
|
export class SkyAffixer {
|
13
15
|
constructor(affixedElement, renderer) {
|
14
|
-
this
|
15
|
-
this
|
16
|
-
this
|
17
|
-
this
|
18
|
-
this
|
16
|
+
_SkyAffixer_instances.add(this);
|
17
|
+
_SkyAffixer_affixedElement.set(this, void 0);
|
18
|
+
_SkyAffixer_baseElement.set(this, void 0);
|
19
|
+
_SkyAffixer_currentOffset.set(this, void 0);
|
20
|
+
_SkyAffixer_currentPlacement.set(this, void 0);
|
21
|
+
_SkyAffixer_offsetChange.set(this, void 0);
|
22
|
+
_SkyAffixer_offsetChangeObs.set(this, void 0);
|
23
|
+
_SkyAffixer_overflowParents.set(this, []);
|
24
|
+
_SkyAffixer_overflowScroll.set(this, void 0);
|
25
|
+
_SkyAffixer_overflowScrollObs.set(this, void 0);
|
26
|
+
_SkyAffixer_placementChange.set(this, void 0);
|
27
|
+
_SkyAffixer_placementChangeObs.set(this, void 0);
|
28
|
+
_SkyAffixer_renderer.set(this, void 0);
|
29
|
+
_SkyAffixer_resizeListener.set(this, void 0);
|
30
|
+
_SkyAffixer_scrollListeners.set(this, void 0);
|
31
|
+
_SkyAffixer__config.set(this, DEFAULT_AFFIX_CONFIG);
|
32
|
+
__classPrivateFieldSet(this, _SkyAffixer_affixedElement, affixedElement, "f");
|
33
|
+
__classPrivateFieldSet(this, _SkyAffixer_renderer, renderer, "f");
|
34
|
+
__classPrivateFieldSet(this, _SkyAffixer_offsetChange, new Subject(), "f");
|
35
|
+
__classPrivateFieldSet(this, _SkyAffixer_overflowScroll, new Subject(), "f");
|
36
|
+
__classPrivateFieldSet(this, _SkyAffixer_placementChange, new Subject(), "f");
|
37
|
+
__classPrivateFieldSet(this, _SkyAffixer_offsetChangeObs, __classPrivateFieldGet(this, _SkyAffixer_offsetChange, "f").asObservable(), "f");
|
38
|
+
__classPrivateFieldSet(this, _SkyAffixer_overflowScrollObs, __classPrivateFieldGet(this, _SkyAffixer_overflowScroll, "f").asObservable(), "f");
|
39
|
+
__classPrivateFieldSet(this, _SkyAffixer_placementChangeObs, __classPrivateFieldGet(this, _SkyAffixer_placementChange, "f").asObservable(), "f");
|
19
40
|
}
|
20
41
|
/**
|
21
42
|
* Fires when the affixed element's offset changes.
|
22
43
|
*/
|
23
44
|
get offsetChange() {
|
24
|
-
return this
|
45
|
+
return __classPrivateFieldGet(this, _SkyAffixer_offsetChangeObs, "f");
|
25
46
|
}
|
26
47
|
/**
|
27
48
|
* Fires when the base element's nearest overflow parent is scrolling. This is useful if you need
|
@@ -29,27 +50,14 @@ export class SkyAffixer {
|
|
29
50
|
* event listener.
|
30
51
|
*/
|
31
52
|
get overflowScroll() {
|
32
|
-
return this
|
53
|
+
return __classPrivateFieldGet(this, _SkyAffixer_overflowScrollObs, "f");
|
33
54
|
}
|
34
55
|
/**
|
35
56
|
* Fires when the placement value changes. A `null` value indicates that a suitable
|
36
57
|
* placement could not be found.
|
37
58
|
*/
|
38
59
|
get placementChange() {
|
39
|
-
return this
|
40
|
-
}
|
41
|
-
get config() {
|
42
|
-
return this._config;
|
43
|
-
}
|
44
|
-
set config(value) {
|
45
|
-
const merged = { ...DEFAULT_AFFIX_CONFIG, ...value };
|
46
|
-
// Make sure none of the values are undefined.
|
47
|
-
Object.keys(merged).forEach((k) => {
|
48
|
-
if (merged[k] === undefined) {
|
49
|
-
merged[k] = DEFAULT_AFFIX_CONFIG[k];
|
50
|
-
}
|
51
|
-
});
|
52
|
-
this._config = merged;
|
60
|
+
return __classPrivateFieldGet(this, _SkyAffixer_placementChangeObs, "f");
|
53
61
|
}
|
54
62
|
/**
|
55
63
|
* Affixes an element to a base element.
|
@@ -57,290 +65,288 @@ export class SkyAffixer {
|
|
57
65
|
* @param config Configuration for the affix action.
|
58
66
|
*/
|
59
67
|
affixTo(baseElement, config) {
|
60
|
-
this.
|
61
|
-
this
|
62
|
-
this
|
63
|
-
this
|
64
|
-
this.
|
65
|
-
if (this.
|
66
|
-
this.
|
67
|
-
this.
|
68
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_reset).call(this);
|
69
|
+
__classPrivateFieldSet(this, _SkyAffixer_instances, config, "a", _SkyAffixer_config_set);
|
70
|
+
__classPrivateFieldSet(this, _SkyAffixer_baseElement, baseElement, "f");
|
71
|
+
__classPrivateFieldSet(this, _SkyAffixer_overflowParents, getOverflowParents(baseElement), "f");
|
72
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_affix).call(this);
|
73
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).isSticky) {
|
74
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_addScrollListeners).call(this);
|
75
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_addResizeListener).call(this);
|
68
76
|
}
|
69
77
|
}
|
78
|
+
getConfig() {
|
79
|
+
return __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get);
|
80
|
+
}
|
70
81
|
/**
|
71
82
|
* Re-runs the affix calculation.
|
72
83
|
*/
|
73
84
|
reaffix() {
|
74
85
|
// Reset current placement to preferred placement.
|
75
|
-
this
|
76
|
-
this.
|
86
|
+
__classPrivateFieldSet(this, _SkyAffixer_currentPlacement, __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).placement, "f");
|
87
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_affix).call(this);
|
77
88
|
}
|
78
89
|
/**
|
79
90
|
* Destroys the affixer.
|
80
91
|
*/
|
81
92
|
destroy() {
|
82
|
-
this.
|
83
|
-
this.
|
84
|
-
this.
|
85
|
-
this.
|
86
|
-
this._offsetChange =
|
87
|
-
this._placementChange =
|
88
|
-
this._overflowScroll =
|
89
|
-
undefined;
|
93
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_reset).call(this);
|
94
|
+
__classPrivateFieldGet(this, _SkyAffixer_placementChange, "f").complete();
|
95
|
+
__classPrivateFieldGet(this, _SkyAffixer_offsetChange, "f").complete();
|
96
|
+
__classPrivateFieldGet(this, _SkyAffixer_overflowScroll, "f").complete();
|
90
97
|
}
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
98
|
+
}
|
99
|
+
_SkyAffixer_affixedElement = new WeakMap(), _SkyAffixer_baseElement = new WeakMap(), _SkyAffixer_currentOffset = new WeakMap(), _SkyAffixer_currentPlacement = new WeakMap(), _SkyAffixer_offsetChange = new WeakMap(), _SkyAffixer_offsetChangeObs = new WeakMap(), _SkyAffixer_overflowParents = new WeakMap(), _SkyAffixer_overflowScroll = new WeakMap(), _SkyAffixer_overflowScrollObs = new WeakMap(), _SkyAffixer_placementChange = new WeakMap(), _SkyAffixer_placementChangeObs = new WeakMap(), _SkyAffixer_renderer = new WeakMap(), _SkyAffixer_resizeListener = new WeakMap(), _SkyAffixer_scrollListeners = new WeakMap(), _SkyAffixer__config = new WeakMap(), _SkyAffixer_instances = new WeakSet(), _SkyAffixer_config_get = function _SkyAffixer_config_get() {
|
100
|
+
return __classPrivateFieldGet(this, _SkyAffixer__config, "f");
|
101
|
+
}, _SkyAffixer_config_set = function _SkyAffixer_config_set(value) {
|
102
|
+
const merged = {
|
103
|
+
...DEFAULT_AFFIX_CONFIG,
|
104
|
+
...value,
|
105
|
+
};
|
106
|
+
// Make sure none of the values are undefined.
|
107
|
+
let key;
|
108
|
+
for (key in merged) {
|
109
|
+
if (merged[key] === undefined) {
|
110
|
+
merged[key] = DEFAULT_AFFIX_CONFIG[key];
|
99
111
|
}
|
100
112
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
} while (!isAffixedElementFullyVisible && attempts < maxAttempts);
|
122
|
-
if (isAffixedElementFullyVisible) {
|
123
|
-
if (this.isBaseElementVisible()) {
|
124
|
-
this.notifyPlacementChange(placement);
|
125
|
-
}
|
126
|
-
else {
|
127
|
-
this.notifyPlacementChange(null);
|
128
|
-
}
|
129
|
-
return offset;
|
113
|
+
__classPrivateFieldSet(this, _SkyAffixer__config, merged, "f");
|
114
|
+
}, _SkyAffixer_affix = function _SkyAffixer_affix() {
|
115
|
+
const offset = __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getOffset).call(this);
|
116
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_isNewOffset).call(this, offset)) {
|
117
|
+
__classPrivateFieldGet(this, _SkyAffixer_renderer, "f").setStyle(__classPrivateFieldGet(this, _SkyAffixer_affixedElement, "f"), 'top', `${offset.top}px`);
|
118
|
+
__classPrivateFieldGet(this, _SkyAffixer_renderer, "f").setStyle(__classPrivateFieldGet(this, _SkyAffixer_affixedElement, "f"), 'left', `${offset.left}px`);
|
119
|
+
__classPrivateFieldGet(this, _SkyAffixer_offsetChange, "f").next({ offset });
|
120
|
+
}
|
121
|
+
}, _SkyAffixer_getOffset = function _SkyAffixer_getOffset() {
|
122
|
+
const parent = __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getAutoFitContextParent).call(this);
|
123
|
+
const maxAttempts = 4;
|
124
|
+
let attempts = 0;
|
125
|
+
let isAffixedElementFullyVisible = false;
|
126
|
+
let offset;
|
127
|
+
let placement = __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).placement;
|
128
|
+
do {
|
129
|
+
offset = __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getPreferredOffset).call(this, placement);
|
130
|
+
isAffixedElementFullyVisible = isOffsetFullyVisibleWithinParent(parent, offset, __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).autoFitOverflowOffset);
|
131
|
+
if (!__classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).enableAutoFit) {
|
132
|
+
break;
|
130
133
|
}
|
131
|
-
if (
|
132
|
-
|
134
|
+
if (!isAffixedElementFullyVisible) {
|
135
|
+
placement =
|
136
|
+
attempts % 2 === 0
|
137
|
+
? getInversePlacement(placement)
|
138
|
+
: getNextPlacement(placement);
|
133
139
|
}
|
134
|
-
|
135
|
-
|
140
|
+
attempts++;
|
141
|
+
} while (!isAffixedElementFullyVisible && attempts < maxAttempts);
|
142
|
+
if (isAffixedElementFullyVisible) {
|
143
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_isBaseElementVisible).call(this)) {
|
144
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_notifyPlacementChange).call(this, placement);
|
145
|
+
}
|
146
|
+
else {
|
147
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_notifyPlacementChange).call(this, null);
|
148
|
+
}
|
149
|
+
return offset;
|
136
150
|
}
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
}
|
160
|
-
else {
|
161
|
-
top = baseRect.bottom;
|
162
|
-
switch (verticalAlignment) {
|
163
|
-
case 'top':
|
164
|
-
default:
|
165
|
-
break;
|
166
|
-
case 'middle':
|
167
|
-
top = top - affixedRect.height / 2;
|
168
|
-
break;
|
169
|
-
case 'bottom':
|
170
|
-
top = top - affixedRect.height;
|
171
|
-
break;
|
172
|
-
}
|
173
|
-
}
|
174
|
-
switch (horizontalAlignment) {
|
175
|
-
case 'left':
|
176
|
-
left = baseRect.left;
|
151
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).enableAutoFit) {
|
152
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_notifyPlacementChange).call(this, null);
|
153
|
+
}
|
154
|
+
// No suitable placement was found, so revert to preferred placement.
|
155
|
+
return __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getPreferredOffset).call(this, __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).placement);
|
156
|
+
}, _SkyAffixer_getPreferredOffset = function _SkyAffixer_getPreferredOffset(placement) {
|
157
|
+
if (!__classPrivateFieldGet(this, _SkyAffixer_baseElement, "f")) {
|
158
|
+
return { top: 0, left: 0, bottom: 0, right: 0 };
|
159
|
+
}
|
160
|
+
const affixedRect = __classPrivateFieldGet(this, _SkyAffixer_affixedElement, "f").getBoundingClientRect();
|
161
|
+
const baseRect = __classPrivateFieldGet(this, _SkyAffixer_baseElement, "f").getBoundingClientRect();
|
162
|
+
const horizontalAlignment = __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).horizontalAlignment;
|
163
|
+
const verticalAlignment = __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).verticalAlignment;
|
164
|
+
const enableAutoFit = __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).enableAutoFit;
|
165
|
+
let top;
|
166
|
+
let left;
|
167
|
+
if (placement === 'above' || placement === 'below') {
|
168
|
+
if (placement === 'above') {
|
169
|
+
top = baseRect.top - affixedRect.height;
|
170
|
+
switch (verticalAlignment) {
|
171
|
+
case 'top':
|
172
|
+
top = top + affixedRect.height;
|
177
173
|
break;
|
178
|
-
case '
|
179
|
-
|
180
|
-
left = baseRect.left + baseRect.width / 2 - affixedRect.width / 2;
|
174
|
+
case 'middle':
|
175
|
+
top = top + affixedRect.height / 2;
|
181
176
|
break;
|
182
|
-
case '
|
183
|
-
|
177
|
+
case 'bottom':
|
178
|
+
default:
|
184
179
|
break;
|
185
180
|
}
|
186
181
|
}
|
187
182
|
else {
|
188
|
-
|
189
|
-
left = baseRect.left - affixedRect.width;
|
190
|
-
}
|
191
|
-
else {
|
192
|
-
left = baseRect.right;
|
193
|
-
}
|
183
|
+
top = baseRect.bottom;
|
194
184
|
switch (verticalAlignment) {
|
195
185
|
case 'top':
|
196
|
-
|
186
|
+
default:
|
197
187
|
break;
|
198
188
|
case 'middle':
|
199
|
-
|
200
|
-
top = baseRect.top + baseRect.height / 2 - affixedRect.height / 2;
|
189
|
+
top = top - affixedRect.height / 2;
|
201
190
|
break;
|
202
191
|
case 'bottom':
|
203
|
-
top =
|
192
|
+
top = top - affixedRect.height;
|
204
193
|
break;
|
205
194
|
}
|
206
195
|
}
|
207
|
-
|
208
|
-
if (enableAutoFit) {
|
209
|
-
offset = this.adjustOffsetToOverflowParent({ ...offset }, placement);
|
210
|
-
}
|
211
|
-
offset.bottom = offset.top + affixedRect.height;
|
212
|
-
offset.right = offset.left + affixedRect.width;
|
213
|
-
return offset;
|
214
|
-
}
|
215
|
-
/**
|
216
|
-
* Slightly adjust the offset to fit within the scroll parent's boundaries if
|
217
|
-
* the affixed element would otherwise be clipped.
|
218
|
-
*/
|
219
|
-
adjustOffsetToOverflowParent(offset, placement) {
|
220
|
-
const parent = this.getAutoFitContextParent();
|
221
|
-
const parentOffset = getElementOffset(parent, this.config.autoFitOverflowOffset);
|
222
|
-
const affixedRect = this.affixedRect;
|
223
|
-
const baseRect = this.baseRect;
|
224
|
-
// A pixel value representing the leeway between the edge of the overflow parent and the edge
|
225
|
-
// of the base element before it dissapears from view.
|
226
|
-
// If the visible portion of the base element is less than this pixel value, the auto-fit
|
227
|
-
// functionality attempts to find another placement.
|
228
|
-
const defaultPixelTolerance = 40;
|
229
|
-
let pixelTolerance;
|
230
|
-
const originalOffsetTop = offset.top;
|
231
|
-
const originalOffsetLeft = offset.left;
|
232
|
-
switch (placement) {
|
233
|
-
case 'above':
|
234
|
-
case 'below':
|
235
|
-
// Keep the affixed element within the overflow parent.
|
236
|
-
if (offset.left < parentOffset.left) {
|
237
|
-
offset.left = parentOffset.left;
|
238
|
-
}
|
239
|
-
else if (offset.left + affixedRect.width > parentOffset.right) {
|
240
|
-
offset.left = parentOffset.right - affixedRect.width;
|
241
|
-
}
|
242
|
-
// Use a smaller pixel tolerance if the base element width is less than the default.
|
243
|
-
pixelTolerance = Math.min(defaultPixelTolerance, baseRect.width);
|
244
|
-
// Make sure the affixed element never detaches from the base element.
|
245
|
-
if (offset.left + pixelTolerance > baseRect.right ||
|
246
|
-
offset.left + affixedRect.width - pixelTolerance < baseRect.left) {
|
247
|
-
offset.left = originalOffsetLeft;
|
248
|
-
}
|
249
|
-
break;
|
196
|
+
switch (horizontalAlignment) {
|
250
197
|
case 'left':
|
198
|
+
left = baseRect.left;
|
199
|
+
break;
|
200
|
+
case 'center':
|
201
|
+
default:
|
202
|
+
left = baseRect.left + baseRect.width / 2 - affixedRect.width / 2;
|
203
|
+
break;
|
251
204
|
case 'right':
|
252
|
-
|
253
|
-
if (offset.top < parentOffset.top) {
|
254
|
-
offset.top = parentOffset.top;
|
255
|
-
}
|
256
|
-
else if (offset.top + affixedRect.height > parentOffset.bottom) {
|
257
|
-
offset.top = parentOffset.bottom - affixedRect.height;
|
258
|
-
}
|
259
|
-
// Use a smaller pixel tolerance if the base element height is less than the default.
|
260
|
-
pixelTolerance = Math.min(defaultPixelTolerance, baseRect.height);
|
261
|
-
// Make sure the affixed element never detaches from the base element.
|
262
|
-
if (offset.top + pixelTolerance > baseRect.bottom ||
|
263
|
-
offset.top + affixedRect.height - pixelTolerance < baseRect.top) {
|
264
|
-
offset.top = originalOffsetTop;
|
265
|
-
}
|
205
|
+
left = baseRect.right - affixedRect.width;
|
266
206
|
break;
|
267
207
|
}
|
268
|
-
return offset;
|
269
|
-
}
|
270
|
-
getImmediateOverflowParent() {
|
271
|
-
return this.overflowParents[this.overflowParents.length - 1];
|
272
208
|
}
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
? this.getImmediateOverflowParent()
|
277
|
-
: bodyElement;
|
278
|
-
}
|
279
|
-
notifyPlacementChange(placement) {
|
280
|
-
if (this.currentPlacement !== placement) {
|
281
|
-
this.currentPlacement = placement;
|
282
|
-
this._placementChange.next({
|
283
|
-
placement,
|
284
|
-
});
|
209
|
+
else {
|
210
|
+
if (placement === 'left') {
|
211
|
+
left = baseRect.left - affixedRect.width;
|
285
212
|
}
|
286
|
-
|
287
|
-
|
288
|
-
this.removeScrollListeners();
|
289
|
-
this.removeResizeListener();
|
290
|
-
this._config =
|
291
|
-
this.affixedRect =
|
292
|
-
this.baseElement =
|
293
|
-
this.baseRect =
|
294
|
-
this.currentPlacement =
|
295
|
-
this.currentOffset =
|
296
|
-
this.overflowParents =
|
297
|
-
undefined;
|
298
|
-
}
|
299
|
-
isNewOffset(offset) {
|
300
|
-
if (this.currentOffset === undefined) {
|
301
|
-
this.currentOffset = offset;
|
302
|
-
return true;
|
213
|
+
else {
|
214
|
+
left = baseRect.right;
|
303
215
|
}
|
304
|
-
|
305
|
-
|
306
|
-
|
216
|
+
switch (verticalAlignment) {
|
217
|
+
case 'top':
|
218
|
+
top = baseRect.top;
|
219
|
+
break;
|
220
|
+
case 'middle':
|
221
|
+
default:
|
222
|
+
top = baseRect.top + baseRect.height / 2 - affixedRect.height / 2;
|
223
|
+
break;
|
224
|
+
case 'bottom':
|
225
|
+
top = baseRect.bottom - affixedRect.height;
|
226
|
+
break;
|
307
227
|
}
|
308
|
-
this.currentOffset = offset;
|
309
|
-
return true;
|
310
228
|
}
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
bottom: this.baseRect.bottom,
|
317
|
-
}, this.config.autoFitOverflowOffset);
|
229
|
+
const offset = { top, left, bottom: 0, right: 0 };
|
230
|
+
if (enableAutoFit) {
|
231
|
+
const adjustments = __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_adjustOffsetToOverflowParent).call(this, { top, left }, placement, __classPrivateFieldGet(this, _SkyAffixer_baseElement, "f"));
|
232
|
+
offset.top = adjustments.top;
|
233
|
+
offset.left = adjustments.left;
|
318
234
|
}
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
235
|
+
offset.bottom = offset.top + affixedRect.height;
|
236
|
+
offset.right = offset.left + affixedRect.width;
|
237
|
+
return offset;
|
238
|
+
}, _SkyAffixer_adjustOffsetToOverflowParent = function _SkyAffixer_adjustOffsetToOverflowParent(offset, placement, baseElement) {
|
239
|
+
const parent = __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getAutoFitContextParent).call(this);
|
240
|
+
const parentOffset = getElementOffset(parent, __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).autoFitOverflowOffset);
|
241
|
+
const affixedRect = __classPrivateFieldGet(this, _SkyAffixer_affixedElement, "f").getBoundingClientRect();
|
242
|
+
const baseRect = baseElement.getBoundingClientRect();
|
243
|
+
// A pixel value representing the leeway between the edge of the overflow parent and the edge
|
244
|
+
// of the base element before it dissapears from view.
|
245
|
+
// If the visible portion of the base element is less than this pixel value, the auto-fit
|
246
|
+
// functionality attempts to find another placement.
|
247
|
+
const defaultPixelTolerance = 40;
|
248
|
+
let pixelTolerance;
|
249
|
+
const originalOffsetTop = offset.top;
|
250
|
+
const originalOffsetLeft = offset.left;
|
251
|
+
switch (placement) {
|
252
|
+
case 'above':
|
253
|
+
case 'below':
|
254
|
+
// Keep the affixed element within the overflow parent.
|
255
|
+
if (offset.left < parentOffset.left) {
|
256
|
+
offset.left = parentOffset.left;
|
257
|
+
}
|
258
|
+
else if (offset.left + affixedRect.width > parentOffset.right) {
|
259
|
+
offset.left = parentOffset.right - affixedRect.width;
|
260
|
+
}
|
261
|
+
// Use a smaller pixel tolerance if the base element width is less than the default.
|
262
|
+
pixelTolerance = Math.min(defaultPixelTolerance, baseRect.width);
|
263
|
+
// Make sure the affixed element never detaches from the base element.
|
264
|
+
if (offset.left + pixelTolerance > baseRect.right ||
|
265
|
+
offset.left + affixedRect.width - pixelTolerance < baseRect.left) {
|
266
|
+
offset.left = originalOffsetLeft;
|
267
|
+
}
|
268
|
+
break;
|
269
|
+
case 'left':
|
270
|
+
case 'right':
|
271
|
+
// Keep the affixed element within the overflow parent.
|
272
|
+
if (offset.top < parentOffset.top) {
|
273
|
+
offset.top = parentOffset.top;
|
274
|
+
}
|
275
|
+
else if (offset.top + affixedRect.height > parentOffset.bottom) {
|
276
|
+
offset.top = parentOffset.bottom - affixedRect.height;
|
277
|
+
}
|
278
|
+
// Use a smaller pixel tolerance if the base element height is less than the default.
|
279
|
+
pixelTolerance = Math.min(defaultPixelTolerance, baseRect.height);
|
280
|
+
// Make sure the affixed element never detaches from the base element.
|
281
|
+
if (offset.top + pixelTolerance > baseRect.bottom ||
|
282
|
+
offset.top + affixedRect.height - pixelTolerance < baseRect.top) {
|
283
|
+
offset.top = originalOffsetTop;
|
284
|
+
}
|
285
|
+
break;
|
286
|
+
}
|
287
|
+
return offset;
|
288
|
+
}, _SkyAffixer_getImmediateOverflowParent = function _SkyAffixer_getImmediateOverflowParent() {
|
289
|
+
return __classPrivateFieldGet(this, _SkyAffixer_overflowParents, "f")[__classPrivateFieldGet(this, _SkyAffixer_overflowParents, "f").length - 1];
|
290
|
+
}, _SkyAffixer_getAutoFitContextParent = function _SkyAffixer_getAutoFitContextParent() {
|
291
|
+
const bodyElement = __classPrivateFieldGet(this, _SkyAffixer_overflowParents, "f")[0];
|
292
|
+
return __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).autoFitContext === SkyAffixAutoFitContext.OverflowParent
|
293
|
+
? __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getImmediateOverflowParent).call(this)
|
294
|
+
: bodyElement;
|
295
|
+
}, _SkyAffixer_notifyPlacementChange = function _SkyAffixer_notifyPlacementChange(placement) {
|
296
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_currentPlacement, "f") !== placement) {
|
297
|
+
__classPrivateFieldSet(this, _SkyAffixer_currentPlacement, placement ?? undefined, "f");
|
298
|
+
__classPrivateFieldGet(this, _SkyAffixer_placementChange, "f").next({
|
299
|
+
placement,
|
326
300
|
});
|
327
301
|
}
|
328
|
-
|
329
|
-
|
302
|
+
}, _SkyAffixer_reset = function _SkyAffixer_reset() {
|
303
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_removeScrollListeners).call(this);
|
304
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_removeResizeListener).call(this);
|
305
|
+
__classPrivateFieldSet(this, _SkyAffixer_overflowParents, [], "f");
|
306
|
+
__classPrivateFieldSet(this, _SkyAffixer_instances, __classPrivateFieldSet(this, _SkyAffixer_baseElement, __classPrivateFieldSet(this, _SkyAffixer_currentPlacement, __classPrivateFieldSet(this, _SkyAffixer_currentOffset, undefined, "f"), "f"), "f"), "a", _SkyAffixer_config_set);
|
307
|
+
}, _SkyAffixer_isNewOffset = function _SkyAffixer_isNewOffset(offset) {
|
308
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_currentOffset, "f") === undefined) {
|
309
|
+
__classPrivateFieldSet(this, _SkyAffixer_currentOffset, offset, "f");
|
310
|
+
return true;
|
330
311
|
}
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
this.resizeListener = undefined;
|
335
|
-
}
|
312
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_currentOffset, "f").top === offset.top &&
|
313
|
+
__classPrivateFieldGet(this, _SkyAffixer_currentOffset, "f").left === offset.left) {
|
314
|
+
return false;
|
336
315
|
}
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
this.scrollListeners = undefined;
|
343
|
-
}
|
316
|
+
__classPrivateFieldSet(this, _SkyAffixer_currentOffset, offset, "f");
|
317
|
+
return true;
|
318
|
+
}, _SkyAffixer_isBaseElementVisible = function _SkyAffixer_isBaseElementVisible() {
|
319
|
+
if (!__classPrivateFieldGet(this, _SkyAffixer_baseElement, "f")) {
|
320
|
+
return false;
|
344
321
|
}
|
345
|
-
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBYyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU1sRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLG9DQUFvQyxHQUNyQyxNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLG9CQUFvQixHQUFtQjtJQUMzQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsY0FBYztJQUNyRCxhQUFhLEVBQUUsS0FBSztJQUNwQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLE9BQU87Q0FDbkIsQ0FBQztBQUVGLE1BQU0sT0FBTyxVQUFVO0lBa0VyQixZQUNVLGNBQTJCLEVBQzNCLFFBQW1CO1FBRG5CLG1CQUFjLEdBQWQsY0FBYyxDQUFhO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFSckIsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztRQUVwRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdEMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7SUFLL0QsQ0FBQztJQXBFSjs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLGNBQWM7UUFDdkIsT0FB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QyxhQUFhLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDL0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsc0VBQXNFO1lBQ3RFLHdFQUF3RTtZQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztTQUNsQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lBZmZpeEF1dG9GaXRDb250ZXh0IH0gZnJvbSAnLi9hZmZpeC1hdXRvLWZpdC1jb250ZXh0JztcbmltcG9ydCB7IFNreUFmZml4Q29uZmlnIH0gZnJvbSAnLi9hZmZpeC1jb25maWcnO1xuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXQgfSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5pbXBvcnQgeyBTa3lBZmZpeE9mZnNldENoYW5nZSB9IGZyb20gJy4vYWZmaXgtb2Zmc2V0LWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudCB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50JztcbmltcG9ydCB7IFNreUFmZml4UGxhY2VtZW50Q2hhbmdlIH0gZnJvbSAnLi9hZmZpeC1wbGFjZW1lbnQtY2hhbmdlJztcbmltcG9ydCB7IGdldEludmVyc2VQbGFjZW1lbnQsIGdldE5leHRQbGFjZW1lbnQgfSBmcm9tICcuL2FmZml4LXV0aWxzJztcbmltcG9ydCB7XG4gIGdldEVsZW1lbnRPZmZzZXQsXG4gIGdldE92ZXJmbG93UGFyZW50cyxcbiAgaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG4gIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudCxcbn0gZnJvbSAnLi9kb20tdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0FGRklYX0NPTkZJRzogU2t5QWZmaXhDb25maWcgPSB7XG4gIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50LFxuICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2NlbnRlcicsXG4gIGlzU3RpY2t5OiBmYWxzZSxcbiAgcGxhY2VtZW50OiAnYWJvdmUnLFxufTtcblxuZXhwb3J0IGNsYXNzIFNreUFmZml4ZXIge1xuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYWZmaXhlZCBlbGVtZW50J3Mgb2Zmc2V0IGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG9mZnNldENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUFmZml4T2Zmc2V0Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX29mZnNldENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBiYXNlIGVsZW1lbnQncyBuZWFyZXN0IG92ZXJmbG93IHBhcmVudCBpcyBzY3JvbGxpbmcuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkXG4gICAqIHRvIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBhY3Rpb24gZHVyaW5nIHRoZSBzY3JvbGwgZXZlbnQgYnV0IGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgYW5vdGhlclxuICAgKiBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3ZlcmZsb3dTY3JvbGwoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJmbG93U2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHBsYWNlbWVudCB2YWx1ZSBjaGFuZ2VzLiBBIGBudWxsYCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBhIHN1aXRhYmxlXG4gICAqIHBsYWNlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBsYWNlbWVudENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUFmZml4UGxhY2VtZW50Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlbWVudENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpOiBTa3lBZmZpeENvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGNvbmZpZyh2YWx1ZTogU2t5QWZmaXhDb25maWcpIHtcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLkRFRkFVTFRfQUZGSVhfQ09ORklHLCAuLi52YWx1ZSB9O1xuXG4gICAgLy8gTWFrZSBzdXJlIG5vbmUgb2YgdGhlIHZhbHVlcyBhcmUgdW5kZWZpbmVkLlxuICAgIE9iamVjdC5rZXlzKG1lcmdlZCkuZm9yRWFjaCgoazoga2V5b2YgU2t5QWZmaXhDb25maWcpID0+IHtcbiAgICAgIGlmIChtZXJnZWRba10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAobWVyZ2VkIGFzIGFueSlba10gPSBERUZBVUxUX0FGRklYX0NPTkZJR1trXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NvbmZpZyA9IG1lcmdlZDtcbiAgfVxuXG4gIHByaXZhdGUgYWZmaXhlZFJlY3Q6IENsaWVudFJlY3Q7XG5cbiAgcHJpdmF0ZSBiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBiYXNlUmVjdDogQ2xpZW50UmVjdDtcblxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXQ6IFNreUFmZml4T2Zmc2V0O1xuXG4gIHByaXZhdGUgY3VycmVudFBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQ7XG5cbiAgcHJpdmF0ZSBvdmVyZmxvd1BhcmVudHM6IEhUTUxFbGVtZW50W107XG5cbiAgcHJpdmF0ZSByZXNpemVMaXN0ZW5lcjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2Nyb2xsTGlzdGVuZXJzOiAoKCkgPT4gdm9pZClbXTtcblxuICBwcml2YXRlIF9jb25maWc6IFNreUFmZml4Q29uZmlnO1xuXG4gIHByaXZhdGUgX29mZnNldENoYW5nZSA9IG5ldyBTdWJqZWN0PFNreUFmZml4T2Zmc2V0Q2hhbmdlPigpO1xuXG4gIHByaXZhdGUgX292ZXJmbG93U2Nyb2xsID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9wbGFjZW1lbnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFmZml4ZWRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBBZmZpeGVzIGFuIGVsZW1lbnQgdG8gYSBiYXNlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBiYXNlRWxlbWVudCBUaGUgYmFzZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZmZpeCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYWZmaXhUbyhiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbmZpZz86IFNreUFmZml4Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5iYXNlRWxlbWVudCA9IGJhc2VFbGVtZW50O1xuICAgIHRoaXMub3ZlcmZsb3dQYXJlbnRzID0gZ2V0T3ZlcmZsb3dQYXJlbnRzKGJhc2VFbGVtZW50KTtcblxuICAgIHRoaXMuYWZmaXgoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5pc1N0aWNreSkge1xuICAgICAgdGhpcy5hZGRTY3JvbGxMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMuYWRkUmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmUtcnVucyB0aGUgYWZmaXggY2FsY3VsYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZmZpeCgpOiB2b2lkIHtcbiAgICAvLyBSZXNldCBjdXJyZW50IHBsYWNlbWVudCB0byBwcmVmZXJyZWQgcGxhY2VtZW50LlxuICAgIHRoaXMuY3VycmVudFBsYWNlbWVudCA9IHRoaXMuY29uZmlnLnBsYWNlbWVudDtcbiAgICB0aGlzLmFmZml4KCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGFmZml4ZXIuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5fcGxhY2VtZW50Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fb2Zmc2V0Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fb3ZlcmZsb3dTY3JvbGwuY29tcGxldGUoKTtcblxuICAgIHRoaXMuX29mZnNldENoYW5nZSA9XG4gICAgICB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UgPVxuICAgICAgdGhpcy5fb3ZlcmZsb3dTY3JvbGwgPVxuICAgICAgICB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFmZml4KCk6IHZvaWQge1xuICAgIHRoaXMuYmFzZVJlY3QgPSB0aGlzLmJhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuYWZmaXhlZFJlY3QgPSB0aGlzLmFmZml4ZWRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXQoKTtcblxuICAgIGlmICh0aGlzLmlzTmV3T2Zmc2V0KG9mZnNldCkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5hZmZpeGVkRWxlbWVudCwgJ3RvcCcsIGAke29mZnNldC50b3B9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5hZmZpeGVkRWxlbWVudCwgJ2xlZnQnLCBgJHtvZmZzZXQubGVmdH1weGApO1xuICAgICAgdGhpcy5fb2Zmc2V0Q2hhbmdlLm5leHQoeyBvZmZzZXQgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPZmZzZXQoKTogU2t5QWZmaXhPZmZzZXQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0QXV0b0ZpdENvbnRleHRQYXJlbnQoKTtcblxuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gNDtcbiAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuXG4gICAgbGV0IGlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUgPSBmYWxzZTtcbiAgICBsZXQgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldDtcbiAgICBsZXQgcGxhY2VtZW50ID0gdGhpcy5jb25maWcucGxhY2VtZW50O1xuXG4gICAgZG8ge1xuICAgICAgb2Zmc2V0ID0gdGhpcy5nZXRQcmVmZXJyZWRPZmZzZXQocGxhY2VtZW50KTtcbiAgICAgIGlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUgPSBpc09mZnNldEZ1bGx5VmlzaWJsZVdpdGhpblBhcmVudChcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIHRoaXMuY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVBdXRvRml0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUpIHtcbiAgICAgICAgcGxhY2VtZW50ID1cbiAgICAgICAgICBhdHRlbXB0cyAlIDIgPT09IDBcbiAgICAgICAgICAgID8gZ2V0SW52ZXJzZVBsYWNlbWVudChwbGFjZW1lbnQpXG4gICAgICAgICAgICA6IGdldE5leHRQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMrKztcbiAgICB9IHdoaWxlICghaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSAmJiBhdHRlbXB0cyA8IG1heEF0dGVtcHRzKTtcblxuICAgIGlmIChpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy5pc0Jhc2VFbGVtZW50VmlzaWJsZSgpKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5vdGlmeVBsYWNlbWVudENoYW5nZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgdGhpcy5ub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gTm8gc3VpdGFibGUgcGxhY2VtZW50IHdhcyBmb3VuZCwgc28gcmV2ZXJ0IHRvIHByZWZlcnJlZCBwbGFjZW1lbnQuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJlZmVycmVkT2Zmc2V0KHRoaXMuY29uZmlnLnBsYWNlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50KTogU2t5QWZmaXhPZmZzZXQge1xuICAgIGNvbnN0IGFmZml4ZWRSZWN0ID0gdGhpcy5hZmZpeGVkUmVjdDtcbiAgICBjb25zdCBiYXNlUmVjdCA9IHRoaXMuYmFzZVJlY3Q7XG5cbiAgICBjb25zdCBob3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy5jb25maWcuaG9yaXpvbnRhbEFsaWdubWVudDtcbiAgICBjb25zdCB2ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuY29uZmlnLnZlcnRpY2FsQWxpZ25tZW50O1xuICAgIGNvbnN0IGVuYWJsZUF1dG9GaXQgPSB0aGlzLmNvbmZpZy5lbmFibGVBdXRvRml0O1xuXG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGxldCBsZWZ0OiBudW1iZXI7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnIHx8IHBsYWNlbWVudCA9PT0gJ2JlbG93Jykge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJykge1xuICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBiYXNlUmVjdC5ib3R0b207XG5cbiAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0ICsgYmFzZVJlY3Qud2lkdGggLyAyIC0gYWZmaXhlZFJlY3Qud2lkdGggLyAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QucmlnaHQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QucmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3A7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3AgKyBiYXNlUmVjdC5oZWlnaHQgLyAyIC0gYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCA9IGJhc2VSZWN0LmJvdHRvbSAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldCA9IHsgbGVmdCwgdG9wIH07XG4gICAgaWYgKGVuYWJsZUF1dG9GaXQpIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuYWRqdXN0T2Zmc2V0VG9PdmVyZmxvd1BhcmVudCh7IC4uLm9mZnNldCB9LCBwbGFjZW1lbnQpO1xuICAgIH1cblxuICAgIG9mZnNldC5ib3R0b20gPSBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgIG9mZnNldC5yaWdodCA9IG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGg7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNsaWdodGx5IGFkanVzdCB0aGUgb2Zmc2V0IHRvIGZpdCB3aXRoaW4gdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzIGlmXG4gICAqIHRoZSBhZmZpeGVkIGVsZW1lbnQgd291bGQgb3RoZXJ3aXNlIGJlIGNsaXBwZWQuXG4gICAqL1xuICBwcml2YXRlIGFkanVzdE9mZnNldFRvT3ZlcmZsb3dQYXJlbnQoXG4gICAgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldCxcbiAgICBwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50XG4gICk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG4gICAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChcbiAgICAgIHBhcmVudCxcbiAgICAgIHRoaXMuY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCBhZmZpeGVkUmVjdCA9IHRoaXMuYWZmaXhlZFJlY3Q7XG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLmJhc2VSZWN0O1xuXG4gICAgLy8gQSBwaXhlbCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGxlZXdheSBiZXR3ZWVuIHRoZSBlZGdlIG9mIHRoZSBvdmVyZmxvdyBwYXJlbnQgYW5kIHRoZSBlZGdlXG4gICAgLy8gb2YgdGhlIGJhc2UgZWxlbWVudCBiZWZvcmUgaXQgZGlzc2FwZWFycyBmcm9tIHZpZXcuXG4gICAgLy8gSWYgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgYmFzZSBlbGVtZW50IGlzIGxlc3MgdGhhbiB0aGlzIHBpeGVsIHZhbHVlLCB0aGUgYXV0by1maXRcbiAgICAvLyBmdW5jdGlvbmFsaXR5IGF0dGVtcHRzIHRvIGZpbmQgYW5vdGhlciBwbGFjZW1lbnQuXG4gICAgY29uc3QgZGVmYXVsdFBpeGVsVG9sZXJhbmNlID0gNDA7XG4gICAgbGV0IHBpeGVsVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICBjb25zdCBvcmlnaW5hbE9mZnNldFRvcCA9IG9mZnNldC50b3A7XG4gICAgY29uc3Qgb3JpZ2luYWxPZmZzZXRMZWZ0ID0gb2Zmc2V0LmxlZnQ7XG5cbiAgICBzd2l0Y2ggKHBsYWNlbWVudCkge1xuICAgICAgY2FzZSAnYWJvdmUnOlxuICAgICAgY2FzZSAnYmVsb3cnOlxuICAgICAgICAvLyBLZWVwIHRoZSBhZmZpeGVkIGVsZW1lbnQgd2l0aGluIHRoZSBvdmVyZmxvdyBwYXJlbnQuXG4gICAgICAgIGlmIChvZmZzZXQubGVmdCA8IHBhcmVudE9mZnNldC5sZWZ0KSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoID4gcGFyZW50T2Zmc2V0LnJpZ2h0KSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBwYXJlbnRPZmZzZXQucmlnaHQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBhIHNtYWxsZXIgcGl4ZWwgdG9sZXJhbmNlIGlmIHRoZSBiYXNlIGVsZW1lbnQgd2lkdGggaXMgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LlxuICAgICAgICBwaXhlbFRvbGVyYW5jZSA9IE1hdGgubWluKGRlZmF1bHRQaXhlbFRvbGVyYW5jZSwgYmFzZVJlY3Qud2lkdGgpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYWZmaXhlZCBlbGVtZW50IG5ldmVyIGRldGFjaGVzIGZyb20gdGhlIGJhc2UgZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9mZnNldC5sZWZ0ICsgcGl4ZWxUb2xlcmFuY2UgPiBiYXNlUmVjdC5yaWdodCB8fFxuICAgICAgICAgIG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGggLSBwaXhlbFRvbGVyYW5jZSA8IGJhc2VSZWN0LmxlZnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBvcmlnaW5hbE9mZnNldExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIC8vIEtlZXAgdGhlIGFmZml4ZWQgZWxlbWVudCB3aXRoaW4gdGhlIG92ZXJmbG93IHBhcmVudC5cbiAgICAgICAgaWYgKG9mZnNldC50b3AgPCBwYXJlbnRPZmZzZXQudG9wKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IHBhcmVudE9mZnNldC50b3A7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCA+IHBhcmVudE9mZnNldC5ib3R0b20pIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gcGFyZW50T2Zmc2V0LmJvdHRvbSAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBhIHNtYWxsZXIgcGl4ZWwgdG9sZXJhbmNlIGlmIHRoZSBiYXNlIGVsZW1lbnQgaGVpZ2h0IGlzIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC5cbiAgICAgICAgcGl4ZWxUb2xlcmFuY2UgPSBNYXRoLm1pbihkZWZhdWx0UGl4ZWxUb2xlcmFuY2UsIGJhc2VSZWN0LmhlaWdodCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhZmZpeGVkIGVsZW1lbnQgbmV2ZXIgZGV0YWNoZXMgZnJvbSB0aGUgYmFzZSBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2Zmc2V0LnRvcCArIHBpeGVsVG9sZXJhbmNlID4gYmFzZVJlY3QuYm90dG9tIHx8XG4gICAgICAgICAgb2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCAtIHBpeGVsVG9sZXJhbmNlIDwgYmFzZVJlY3QudG9wXG4gICAgICAgICkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBvcmlnaW5hbE9mZnNldFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICBwcml2YXRlIGdldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5vdmVyZmxvd1BhcmVudHNbdGhpcy5vdmVyZmxvd1BhcmVudHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBib2R5RWxlbWVudCA9IHRoaXMub3ZlcmZsb3dQYXJlbnRzWzBdO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF1dG9GaXRDb250ZXh0ID09PSBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50XG4gICAgICA/IHRoaXMuZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKVxuICAgICAgOiBib2R5RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UubmV4dCh7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVTY3JvbGxMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKCk7XG5cbiAgICB0aGlzLl9jb25maWcgPVxuICAgICAgdGhpcy5hZmZpeGVkUmVjdCA9XG4gICAgICB0aGlzLmJhc2VFbGVtZW50ID1cbiAgICAgIHRoaXMuYmFzZVJlY3QgPVxuICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID1cbiAgICAgIHRoaXMuY3VycmVudE9mZnNldCA9XG4gICAgICB0aGlzLm92ZXJmbG93UGFyZW50cyA9XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNOZXdPZmZzZXQob2Zmc2V0OiBTa3lBZmZpeE9mZnNldCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0LnRvcCA9PT0gb2Zmc2V0LnRvcCAmJlxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0LmxlZnQgPT09IG9mZnNldC5sZWZ0XG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGlzQmFzZUVsZW1lbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gICAgICB0aGlzLmdldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KCksXG4gICAgICB7XG4gICAgICAgIHRvcDogdGhpcy5iYXNlUmVjdC50b3AsXG4gICAgICAgIGxlZnQ6IHRoaXMuYmFzZVJlY3QubGVmdCxcbiAgICAgICAgcmlnaHQ6IHRoaXMuYmFzZVJlY3QucmlnaHQsXG4gICAgICAgIGJvdHRvbTogdGhpcy5iYXNlUmVjdC5ib3R0b20sXG4gICAgICB9LFxuICAgICAgdGhpcy5jb25maWcuYXV0b0ZpdE92ZXJmbG93T2Zmc2V0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU2Nyb2xsTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJzID0gdGhpcy5vdmVyZmxvd1BhcmVudHMubWFwKChwYXJlbnRFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgPyAnd2luZG93JyA6IHBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4ob3ZlcmZsb3csICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWZmaXgoKTtcbiAgICAgICAgdGhpcy5fb3ZlcmZsb3dTY3JvbGwubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICB0aGlzLmFmZml4KClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVNjcm9sbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lcnMpIHtcbiAgICAgIC8vIFJlbW92ZSByZW5kZXJlci1nZW5lcmF0ZWQgbGlzdGVuZXJzIGJ5IGNhbGxpbmcgdGhlIGxpc3RlbmVyIGl0c2VsZi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzkzNjgjaXNzdWVjb21tZW50LTIyNzE5OTc3OFxuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCkpO1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
322
|
+
const baseRect = __classPrivateFieldGet(this, _SkyAffixer_baseElement, "f").getBoundingClientRect();
|
323
|
+
return isOffsetPartiallyVisibleWithinParent(__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_getImmediateOverflowParent).call(this), {
|
324
|
+
top: baseRect.top,
|
325
|
+
left: baseRect.left,
|
326
|
+
right: baseRect.right,
|
327
|
+
bottom: baseRect.bottom,
|
328
|
+
}, __classPrivateFieldGet(this, _SkyAffixer_instances, "a", _SkyAffixer_config_get).autoFitOverflowOffset);
|
329
|
+
}, _SkyAffixer_addScrollListeners = function _SkyAffixer_addScrollListeners() {
|
330
|
+
__classPrivateFieldSet(this, _SkyAffixer_scrollListeners, __classPrivateFieldGet(this, _SkyAffixer_overflowParents, "f").map((parentElement) => {
|
331
|
+
const overflow = parentElement === document.body ? 'window' : parentElement;
|
332
|
+
return __classPrivateFieldGet(this, _SkyAffixer_renderer, "f").listen(overflow, 'scroll', () => {
|
333
|
+
__classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_affix).call(this);
|
334
|
+
__classPrivateFieldGet(this, _SkyAffixer_overflowScroll, "f").next();
|
335
|
+
});
|
336
|
+
}), "f");
|
337
|
+
}, _SkyAffixer_addResizeListener = function _SkyAffixer_addResizeListener() {
|
338
|
+
__classPrivateFieldSet(this, _SkyAffixer_resizeListener, fromEvent(window, 'resize').subscribe(() => __classPrivateFieldGet(this, _SkyAffixer_instances, "m", _SkyAffixer_affix).call(this)), "f");
|
339
|
+
}, _SkyAffixer_removeResizeListener = function _SkyAffixer_removeResizeListener() {
|
340
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_resizeListener, "f")) {
|
341
|
+
__classPrivateFieldGet(this, _SkyAffixer_resizeListener, "f").unsubscribe();
|
342
|
+
__classPrivateFieldSet(this, _SkyAffixer_resizeListener, undefined, "f");
|
343
|
+
}
|
344
|
+
}, _SkyAffixer_removeScrollListeners = function _SkyAffixer_removeScrollListeners() {
|
345
|
+
if (__classPrivateFieldGet(this, _SkyAffixer_scrollListeners, "f")) {
|
346
|
+
// Remove renderer-generated listeners by calling the listener itself.
|
347
|
+
// https://github.com/angular/angular/issues/9368#issuecomment-227199778
|
348
|
+
__classPrivateFieldGet(this, _SkyAffixer_scrollListeners, "f").forEach((listener) => listener());
|
349
|
+
__classPrivateFieldSet(this, _SkyAffixer_scrollListeners, undefined, "f");
|
350
|
+
}
|
351
|
+
};
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFDaEMsb0NBQW9DLEdBQ3JDLE1BQU0sYUFBYSxDQUFDO0FBa0JyQixNQUFNLG9CQUFvQixHQUEwQjtJQUNsRCxjQUFjLEVBQUUsc0JBQXNCLENBQUMsY0FBYztJQUNyRCxhQUFhLEVBQUUsS0FBSztJQUNwQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLE9BQU87Q0FDbkIsQ0FBQztBQUVGLE1BQU0sT0FBTyxVQUFVO0lBNEVyQixZQUFZLGNBQTJCLEVBQUUsUUFBbUI7O1FBOUI1RCw2Q0FBNkI7UUFFN0IsMENBQXNDO1FBRXRDLDRDQUEyQztRQUUzQywrQ0FBaUQ7UUFFakQsMkNBQTZDO1FBRTdDLDhDQUFtRDtRQUVuRCxzQ0FBa0MsRUFBRSxFQUFDO1FBRXJDLDZDQUErQjtRQUUvQixnREFBcUM7UUFFckMsOENBQW1EO1FBRW5ELGlEQUF5RDtRQUV6RCx1Q0FBcUI7UUFFckIsNkNBQTBDO1FBRTFDLDhDQUE2QztRQUU3Qyw4QkFBa0Msb0JBQW9CLEVBQUM7UUFHckQsdUJBQUEsSUFBSSw4QkFBbUIsY0FBYyxNQUFBLENBQUM7UUFDdEMsdUJBQUEsSUFBSSx3QkFBYSxRQUFRLE1BQUEsQ0FBQztR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QUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNwRCx1QkFBQSxJQUFJLGdEQUFPLE1BQVgsSUFBSSxDQUFTLENBQUM7WUFDZCx1QkFBQSxJQUFJLGtDQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLE1BQUEsQ0FBQztBQUNMLENBQUM7SUFHQyx1QkFBQSxJQUFJLDhCQUFtQixTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEUsdUJBQUEsSUFBSSxnREFBTyxNQUFYLElBQUksQ0FBUyxDQUNkLE1BQUEsQ0FBQztBQUNKLENBQUM7SUFHQyxJQUFJLHVCQUFBLElBQUksa0NBQWdCLEVBQUU7UUFDeEIsdUJBQUEsSUFBSSxrQ0FBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyx1QkFBQSxJQUFJLDhCQUFtQixTQUFTLE1BQUEsQ0FBQztLQUNsQztBQUNILENBQUM7SUFHQyxJQUFJLHVCQUFBLElBQUksbUNBQWlCLEVBQUU7UUFDekIsc0VBQXNFO1FBQ3RFLHdFQUF3RTtRQUN4RSx1QkFBQSxJQUFJLG1DQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCx1QkFBQSxJQUFJLCtCQUFvQixTQUFTLE1BQUEsQ0FBQztLQUNuQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5QWZmaXhBdXRvRml0Q29udGV4dCB9IGZyb20gJy4vYWZmaXgtYXV0by1maXQtY29udGV4dCc7XG5pbXBvcnQgeyBTa3lBZmZpeENvbmZpZyB9IGZyb20gJy4vYWZmaXgtY29uZmlnJztcbmltcG9ydCB7IFNreUFmZml4T2Zmc2V0IH0gZnJvbSAnLi9hZmZpeC1vZmZzZXQnO1xuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXRDaGFuZ2UgfSBmcm9tICcuL2FmZml4LW9mZnNldC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5QWZmaXhQbGFjZW1lbnQgfSBmcm9tICcuL2FmZml4LXBsYWNlbWVudCc7XG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudENoYW5nZSB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50LWNoYW5nZSc7XG5pbXBvcnQgeyBnZXRJbnZlcnNlUGxhY2VtZW50LCBnZXROZXh0UGxhY2VtZW50IH0gZnJvbSAnLi9hZmZpeC11dGlscyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50T2Zmc2V0LFxuICBnZXRPdmVyZmxvd1BhcmVudHMsXG4gIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50LFxuICBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG59IGZyb20gJy4vZG9tLXV0aWxzJztcblxuLyoqXG4gKiBNYWtlIHNwZWNpZmljIHByb3BlcnRpZXMgcmVxdWlyZWQsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0b1xuICogZG8gbnVsbCBjaGVja3MgdGhyb3VnaG91dCB0aGlzIGZpbGUuXG4gKi9cbnR5cGUgQWZmaXhDb25maWdPckRlZmF1bHRzID0gU2t5QWZmaXhDb25maWcgJlxuICBSZXF1aXJlZDxcbiAgICBQaWNrPFxuICAgICAgU2t5QWZmaXhDb25maWcsXG4gICAgICB8ICdhdXRvRml0Q29udGV4dCdcbiAgICAgIHwgJ2VuYWJsZUF1dG9GaXQnXG4gICAgICB8ICdob3Jpem9udGFsQWxpZ25tZW50J1xuICAgICAgfCAnaXNTdGlja3knXG4gICAgICB8ICdwbGFjZW1lbnQnXG4gICAgPlxuICA+O1xuXG5jb25zdCBERUZBVUxUX0FGRklYX0NPTkZJRzogQWZmaXhDb25maWdPckRlZmF1bHRzID0ge1xuICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudCxcbiAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gIGhvcml6b250YWxBbGlnbm1lbnQ6ICdjZW50ZXInLFxuICBpc1N0aWNreTogZmFsc2UsXG4gIHBsYWNlbWVudDogJ2Fib3ZlJyxcbn07XG5cbmV4cG9ydCBjbGFzcyBTa3lBZmZpeGVyIHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFmZml4ZWQgZWxlbWVudCdzIG9mZnNldCBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBvZmZzZXRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLiNvZmZzZXRDaGFuZ2VPYnM7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYmFzZSBlbGVtZW50J3MgbmVhcmVzdCBvdmVyZmxvdyBwYXJlbnQgaXMgc2Nyb2xsaW5nLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZFxuICAgKiB0byBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgYWN0aW9uIGR1cmluZyB0aGUgc2Nyb2xsIGV2ZW50IGJ1dCBkb24ndCB3YW50IHRvIGdlbmVyYXRlIGFub3RoZXJcbiAgICogZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG92ZXJmbG93U2Nyb2xsKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNvdmVyZmxvd1Njcm9sbE9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBwbGFjZW1lbnQgdmFsdWUgY2hhbmdlcy4gQSBgbnVsbGAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYSBzdWl0YWJsZVxuICAgKiBwbGFjZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZW1lbnRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLiNwbGFjZW1lbnRDaGFuZ2VPYnM7XG4gIH1cblxuICBnZXQgI2NvbmZpZygpOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMge1xuICAgIHJldHVybiB0aGlzLiNfY29uZmlnO1xuICB9XG5cbiAgc2V0ICNjb25maWcodmFsdWU6IFNreUFmZml4Q29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWVyZ2VkOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMgPSB7XG4gICAgICAuLi5ERUZBVUxUX0FGRklYX0NPTkZJRyxcbiAgICAgIC4uLnZhbHVlLFxuICAgIH07XG5cbiAgICAvLyBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgdmFsdWVzIGFyZSB1bmRlZmluZWQuXG4gICAgbGV0IGtleToga2V5b2YgdHlwZW9mIG1lcmdlZDtcbiAgICBmb3IgKGtleSBpbiBtZXJnZWQpIHtcbiAgICAgIGlmIChtZXJnZWRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChtZXJnZWQgYXMgYW55KVtrZXldID0gREVGQVVMVF9BRkZJWF9DT05GSUdba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNfY29uZmlnID0gbWVyZ2VkO1xuICB9XG5cbiAgI2FmZml4ZWRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAjYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICNjdXJyZW50T2Zmc2V0OiBTa3lBZmZpeE9mZnNldCB8IHVuZGVmaW5lZDtcblxuICAjY3VycmVudFBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgI29mZnNldENoYW5nZTogU3ViamVjdDxTa3lBZmZpeE9mZnNldENoYW5nZT47XG5cbiAgI29mZnNldENoYW5nZU9iczogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT47XG5cbiAgI292ZXJmbG93UGFyZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICNvdmVyZmxvd1Njcm9sbDogU3ViamVjdDx2b2lkPjtcblxuICAjb3ZlcmZsb3dTY3JvbGxPYnM6IE9ic2VydmFibGU8dm9pZD47XG5cbiAgI3BsYWNlbWVudENoYW5nZTogU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT47XG5cbiAgI3BsYWNlbWVudENoYW5nZU9iczogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT47XG5cbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgI3Jlc2l6ZUxpc3RlbmVyOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI3Njcm9sbExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gfCB1bmRlZmluZWQ7XG5cbiAgI19jb25maWc6IEFmZml4Q29uZmlnT3JEZWZhdWx0cyA9IERFRkFVTFRfQUZGSVhfQ09ORklHO1xuXG4gIGNvbnN0cnVjdG9yKGFmZml4ZWRFbGVtZW50OiBIVE1MRWxlbWVudCwgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuI2FmZml4ZWRFbGVtZW50ID0gYWZmaXhlZEVsZW1lbnQ7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMuI29mZnNldENoYW5nZSA9IG5ldyBTdWJqZWN0PFNreUFmZml4T2Zmc2V0Q2hhbmdlPigpO1xuICAgIHRoaXMuI292ZXJmbG93U2Nyb2xsID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLiNwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4oKTtcblxuICAgIHRoaXMuI29mZnNldENoYW5nZU9icyA9IHRoaXMuI29mZnNldENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbE9icyA9IHRoaXMuI292ZXJmbG93U2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI3BsYWNlbWVudENoYW5nZU9icyA9IHRoaXMuI3BsYWNlbWVudENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZmZpeGVzIGFuIGVsZW1lbnQgdG8gYSBiYXNlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBiYXNlRWxlbWVudCBUaGUgYmFzZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZmZpeCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYWZmaXhUbyhiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbmZpZz86IFNreUFmZml4Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy4jcmVzZXQoKTtcblxuICAgIHRoaXMuI2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLiNiYXNlRWxlbWVudCA9IGJhc2VFbGVtZW50O1xuICAgIHRoaXMuI292ZXJmbG93UGFyZW50cyA9IGdldE92ZXJmbG93UGFyZW50cyhiYXNlRWxlbWVudCk7XG5cbiAgICB0aGlzLiNhZmZpeCgpO1xuXG4gICAgaWYgKHRoaXMuI2NvbmZpZy5pc1N0aWNreSkge1xuICAgICAgdGhpcy4jYWRkU2Nyb2xsTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLiNhZGRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKTogU2t5QWZmaXhDb25maWcge1xuICAgIHJldHVybiB0aGlzLiNjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogUmUtcnVucyB0aGUgYWZmaXggY2FsY3VsYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZmZpeCgpOiB2b2lkIHtcbiAgICAvLyBSZXNldCBjdXJyZW50IHBsYWNlbWVudCB0byBwcmVmZXJyZWQgcGxhY2VtZW50LlxuICAgIHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgPSB0aGlzLiNjb25maWcucGxhY2VtZW50O1xuICAgIHRoaXMuI2FmZml4KCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGFmZml4ZXIuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldCgpO1xuICAgIHRoaXMuI3BsYWNlbWVudENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI29mZnNldENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI292ZXJmbG93U2Nyb2xsLmNvbXBsZXRlKCk7XG4gIH1cblxuICAjYWZmaXgoKTogdm9pZCB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy4jZ2V0T2Zmc2V0KCk7XG5cbiAgICBpZiAodGhpcy4jaXNOZXdPZmZzZXQob2Zmc2V0KSkge1xuICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0U3R5bGUodGhpcy4jYWZmaXhlZEVsZW1lbnQsICd0b3AnLCBgJHtvZmZzZXQudG9wfXB4YCk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRTdHlsZSh0aGlzLiNhZmZpeGVkRWxlbWVudCwgJ2xlZnQnLCBgJHtvZmZzZXQubGVmdH1weGApO1xuXG4gICAgICB0aGlzLiNvZmZzZXRDaGFuZ2UubmV4dCh7IG9mZnNldCB9KTtcbiAgICB9XG4gIH1cblxuICAjZ2V0T2Zmc2V0KCk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuXG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSA0O1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgICBsZXQgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQ6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PjtcbiAgICBsZXQgcGxhY2VtZW50ID0gdGhpcy4jY29uZmlnLnBsYWNlbWVudDtcblxuICAgIGRvIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuI2dldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQpO1xuICAgICAgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgdGhpcy4jY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLiNjb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICAgIHBsYWNlbWVudCA9XG4gICAgICAgICAgYXR0ZW1wdHMgJSAyID09PSAwXG4gICAgICAgICAgICA/IGdldEludmVyc2VQbGFjZW1lbnQocGxhY2VtZW50KVxuICAgICAgICAgICAgOiBnZXROZXh0UGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzKys7XG4gICAgfSB3aGlsZSAoIWlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUgJiYgYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyk7XG5cbiAgICBpZiAoaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSkge1xuICAgICAgaWYgKHRoaXMuI2lzQmFzZUVsZW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgICAgdGhpcy4jbm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2NvbmZpZy5lbmFibGVBdXRvRml0KSB7XG4gICAgICB0aGlzLiNub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gTm8gc3VpdGFibGUgcGxhY2VtZW50IHdhcyBmb3VuZCwgc28gcmV2ZXJ0IHRvIHByZWZlcnJlZCBwbGFjZW1lbnQuXG4gICAgcmV0dXJuIHRoaXMuI2dldFByZWZlcnJlZE9mZnNldCh0aGlzLiNjb25maWcucGxhY2VtZW50KTtcbiAgfVxuXG4gICNnZXRQcmVmZXJyZWRPZmZzZXQocGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudCk6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PiB7XG4gICAgaWYgKCF0aGlzLiNiYXNlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwIH07XG4gICAgfVxuXG4gICAgY29uc3QgYWZmaXhlZFJlY3QgPSB0aGlzLiNhZmZpeGVkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBiYXNlUmVjdCA9IHRoaXMuI2Jhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuI2NvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50O1xuICAgIGNvbnN0IHZlcnRpY2FsQWxpZ25tZW50ID0gdGhpcy4jY29uZmlnLnZlcnRpY2FsQWxpZ25tZW50O1xuICAgIGNvbnN0IGVuYWJsZUF1dG9GaXQgPSB0aGlzLiNjb25maWcuZW5hYmxlQXV0b0ZpdDtcblxuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJyB8fCBwbGFjZW1lbnQgPT09ICdiZWxvdycpIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScpIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgdG9wID0gdG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QuYm90dG9tO1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LmxlZnQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCArIGJhc2VSZWN0LndpZHRoIC8gMiAtIGFmZml4ZWRSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wICsgYmFzZVJlY3QuaGVpZ2h0IC8gMiAtIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC5ib3R0b20gLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0OiBSZXF1aXJlZDxTa3lBZmZpeE9mZnNldD4gPSB7IHRvcCwgbGVmdCwgYm90dG9tOiAwLCByaWdodDogMCB9O1xuXG4gICAgaWYgKGVuYWJsZUF1dG9GaXQpIHtcbiAgICAgIGNvbnN0IGFkanVzdG1lbnRzID0gdGhpcy4jYWRqdXN0T2Zmc2V0VG9PdmVyZmxvd1BhcmVudChcbiAgICAgICAgeyB0b3AsIGxlZnQgfSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICB0aGlzLiNiYXNlRWxlbWVudFxuICAgICAgKTtcbiAgICAgIG9mZnNldC50b3AgPSBhZGp1c3RtZW50cy50b3A7XG4gICAgICBvZmZzZXQubGVmdCA9IGFkanVzdG1lbnRzLmxlZnQ7XG4gICAgfVxuXG4gICAgb2Zmc2V0LmJvdHRvbSA9IG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgb2Zmc2V0LnJpZ2h0ID0gb2Zmc2V0LmxlZnQgKyBhZmZpeGVkUmVjdC53aWR0aDtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2xpZ2h0bHkgYWRqdXN0IHRoZSBvZmZzZXQgdG8gZml0IHdpdGhpbiB0aGUgc2Nyb2xsIHBhcmVudCdzIGJvdW5kYXJpZXMgaWZcbiAgICogdGhlIGFmZml4ZWQgZWxlbWVudCB3b3VsZCBvdGhlcndpc2UgYmUgY2xpcHBlZC5cbiAgICovXG4gICNhZGp1c3RPZmZzZXRUb092ZXJmbG93UGFyZW50KFxuICAgIG9mZnNldDogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sXG4gICAgcGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudCxcbiAgICBiYXNlRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuI2dldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG4gICAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChcbiAgICAgIHBhcmVudCxcbiAgICAgIHRoaXMuI2NvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgYWZmaXhlZFJlY3QgPSB0aGlzLiNhZmZpeGVkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBiYXNlUmVjdCA9IGJhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgLy8gQSBwaXhlbCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGxlZXdheSBiZXR3ZWVuIHRoZSBlZGdlIG9mIHRoZSBvdmVyZmxvdyBwYXJlbnQgYW5kIHRoZSBlZGdlXG4gICAgLy8gb2YgdGhlIGJhc2UgZWxlbWVudCBiZWZvcmUgaXQgZGlzc2FwZWFycyBmcm9tIHZpZXcuXG4gICAgLy8gSWYgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgYmFzZSBlbGVtZW50IGlzIGxlc3MgdGhhbiB0aGlzIHBpeGVsIHZhbHVlLCB0aGUgYXV0by1maXRcbiAgICAvLyBmdW5jdGlvbmFsaXR5IGF0dGVtcHRzIHRvIGZpbmQgYW5vdGhlciBwbGFjZW1lbnQuXG4gICAgY29uc3QgZGVmYXVsdFBpeGVsVG9sZXJhbmNlID0gNDA7XG4gICAgbGV0IHBpeGVsVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICBjb25zdCBvcmlnaW5hbE9mZnNldFRvcCA9IG9mZnNldC50b3A7XG4gICAgY29uc3Qgb3JpZ2luYWxPZmZzZXRMZWZ0ID0gb2Zmc2V0LmxlZnQ7XG5cbiAgICBzd2l0Y2ggKHBsYWNlbWVudCkge1xuICAgICAgY2FzZSAnYWJvdmUnOlxuICAgICAgY2FzZSAnYmVsb3cnOlxuICAgICAgICAvLyBLZWVwIHRoZSBhZmZpeGVkIGVsZW1lbnQgd2l0aGluIHRoZSBvdmVyZmxvdyBwYXJlbnQuXG4gICAgICAgIGlmIChvZmZzZXQubGVmdCA8IHBhcmVudE9mZnNldC5sZWZ0KSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoID4gcGFyZW50T2Zmc2V0LnJpZ2h0KSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBwYXJlbnRPZmZzZXQucmlnaHQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBhIHNtYWxsZXIgcGl4ZWwgdG9sZXJhbmNlIGlmIHRoZSBiYXNlIGVsZW1lbnQgd2lkdGggaXMgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LlxuICAgICAgICBwaXhlbFRvbGVyYW5jZSA9IE1hdGgubWluKGRlZmF1bHRQaXhlbFRvbGVyYW5jZSwgYmFzZVJlY3Qud2lkdGgpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYWZmaXhlZCBlbGVtZW50IG5ldmVyIGRldGFjaGVzIGZyb20gdGhlIGJhc2UgZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9mZnNldC5sZWZ0ICsgcGl4ZWxUb2xlcmFuY2UgPiBiYXNlUmVjdC5yaWdodCB8fFxuICAgICAgICAgIG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGggLSBwaXhlbFRvbGVyYW5jZSA8IGJhc2VSZWN0LmxlZnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgPSBvcmlnaW5hbE9mZnNldExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIC8vIEtlZXAgdGhlIGFmZml4ZWQgZWxlbWVudCB3aXRoaW4gdGhlIG92ZXJmbG93IHBhcmVudC5cbiAgICAgICAgaWYgKG9mZnNldC50b3AgPCBwYXJlbnRPZmZzZXQudG9wKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IHBhcmVudE9mZnNldC50b3A7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCA+IHBhcmVudE9mZnNldC5ib3R0b20pIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gcGFyZW50T2Zmc2V0LmJvdHRvbSAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBhIHNtYWxsZXIgcGl4ZWwgdG9sZXJhbmNlIGlmIHRoZSBiYXNlIGVsZW1lbnQgaGVpZ2h0IGlzIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC5cbiAgICAgICAgcGl4ZWxUb2xlcmFuY2UgPSBNYXRoLm1pbihkZWZhdWx0UGl4ZWxUb2xlcmFuY2UsIGJhc2VSZWN0LmhlaWdodCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhZmZpeGVkIGVsZW1lbnQgbmV2ZXIgZGV0YWNoZXMgZnJvbSB0aGUgYmFzZSBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2Zmc2V0LnRvcCArIHBpeGVsVG9sZXJhbmNlID4gYmFzZVJlY3QuYm90dG9tIHx8XG4gICAgICAgICAgb2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCAtIHBpeGVsVG9sZXJhbmNlIDwgYmFzZVJlY3QudG9wXG4gICAgICAgICkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBvcmlnaW5hbE9mZnNldFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICAjZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLiNvdmVyZmxvd1BhcmVudHNbdGhpcy4jb3ZlcmZsb3dQYXJlbnRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgI2dldEF1dG9GaXRDb250ZXh0UGFyZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBib2R5RWxlbWVudCA9IHRoaXMuI292ZXJmbG93UGFyZW50c1swXTtcblxuICAgIHJldHVybiB0aGlzLiNjb25maWcuYXV0b0ZpdENvbnRleHQgPT09IFNreUFmZml4QXV0b0ZpdENvbnRleHQuT3ZlcmZsb3dQYXJlbnRcbiAgICAgID8gdGhpcy4jZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKVxuICAgICAgOiBib2R5RWxlbWVudDtcbiAgfVxuXG4gICNub3RpZnlQbGFjZW1lbnRDaGFuZ2UocGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jY3VycmVudFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLiNjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50ID8/IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuI3BsYWNlbWVudENoYW5nZS5uZXh0KHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI3Jlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuI3JlbW92ZVNjcm9sbExpc3RlbmVycygpO1xuICAgIHRoaXMuI3JlbW92ZVJlc2l6ZUxpc3RlbmVyKCk7XG5cbiAgICB0aGlzLiNvdmVyZmxvd1BhcmVudHMgPSBbXTtcblxuICAgIHRoaXMuI2NvbmZpZyA9XG4gICAgICB0aGlzLiNiYXNlRWxlbWVudCA9XG4gICAgICB0aGlzLiNjdXJyZW50UGxhY2VtZW50ID1cbiAgICAgIHRoaXMuI2N1cnJlbnRPZmZzZXQgPVxuICAgICAgICB1bmRlZmluZWQ7XG4gIH1cblxuICAjaXNOZXdPZmZzZXQob2Zmc2V0OiBTa3lBZmZpeE9mZnNldCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLiNjdXJyZW50T2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLiNjdXJyZW50T2Zmc2V0LnRvcCA9PT0gb2Zmc2V0LnRvcCAmJlxuICAgICAgdGhpcy4jY3VycmVudE9mZnNldC5sZWZ0ID09PSBvZmZzZXQubGVmdFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuI2N1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICNpc0Jhc2VFbGVtZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuI2Jhc2VFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLiNiYXNlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJldHVybiBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gICAgICB0aGlzLiNnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpLFxuICAgICAge1xuICAgICAgICB0b3A6IGJhc2VSZWN0LnRvcCxcbiAgICAgICAgbGVmdDogYmFzZVJlY3QubGVmdCxcbiAgICAgICAgcmlnaHQ6IGJhc2VSZWN0LnJpZ2h0LFxuICAgICAgICBib3R0b206IGJhc2VSZWN0LmJvdHRvbSxcbiAgICAgIH0sXG4gICAgICB0aGlzLiNjb25maWcuYXV0b0ZpdE92ZXJmbG93T2Zmc2V0XG4gICAgKTtcbiAgfVxuXG4gICNhZGRTY3JvbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jc2Nyb2xsTGlzdGVuZXJzID0gdGhpcy4jb3ZlcmZsb3dQYXJlbnRzLm1hcCgocGFyZW50RWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPVxuICAgICAgICBwYXJlbnRFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5ID8gJ3dpbmRvdycgOiBwYXJlbnRFbGVtZW50O1xuICAgICAgcmV0dXJuIHRoaXMuI3JlbmRlcmVyLmxpc3RlbihvdmVyZmxvdywgJ3Njcm9sbCcsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYWZmaXgoKTtcbiAgICAgICAgdGhpcy4jb3ZlcmZsb3dTY3JvbGwubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAjYWRkUmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVzaXplTGlzdGVuZXIgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICB0aGlzLiNhZmZpeCgpXG4gICAgKTtcbiAgfVxuXG4gICNyZW1vdmVSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jcmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuI3Jlc2l6ZUxpc3RlbmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLiNyZXNpemVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAjcmVtb3ZlU2Nyb2xsTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNzY3JvbGxMaXN0ZW5lcnMpIHtcbiAgICAgIC8vIFJlbW92ZSByZW5kZXJlci1nZW5lcmF0ZWQgbGlzdGVuZXJzIGJ5IGNhbGxpbmcgdGhlIGxpc3RlbmVyIGl0c2VsZi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzkzNjgjaXNzdWVjb21tZW50LTIyNzE5OTc3OFxuICAgICAgdGhpcy4jc2Nyb2xsTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcigpKTtcbiAgICAgIHRoaXMuI3Njcm9sbExpc3RlbmVycyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|