@ethlete/core 4.14.0 → 4.15.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/CHANGELOG.md +10 -0
- package/esm2022/lib/utils/scrollable.utils.mjs +17 -6
- package/esm2022/lib/utils/signal.utils.mjs +19 -14
- package/fesm2022/ethlete-core.mjs +35 -19
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/lib/utils/scrollable.utils.d.ts +1 -0
- package/lib/utils/signal.utils.d.ts +1 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @ethlete/core
|
|
2
2
|
|
|
3
|
+
## 4.15.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`6a46084`](https://github.com/ethlete-io/ethdk/commit/6a460843b241a14ba550d8c82ec5df74f1945229) Thanks [@TomTomB](https://github.com/TomTomB)! - Add `getElementScrollCoordinates` util. This util computes a `ScrollToOptions` object based on the provided element and scrollable container. This object can be used to scroll the scrollable container to the element.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [`6a46084`](https://github.com/ethlete-io/ethdk/commit/6a460843b241a14ba550d8c82ec5df74f1945229) Thanks [@TomTomB](https://github.com/TomTomB)! - Use renderer instead of setting properties directly using native dom apis inside signal utils
|
|
12
|
+
|
|
3
13
|
## 4.14.0
|
|
4
14
|
|
|
5
15
|
### Minor Changes
|
|
@@ -46,16 +46,24 @@ export const isElementVisible = (options) => {
|
|
|
46
46
|
element,
|
|
47
47
|
};
|
|
48
48
|
};
|
|
49
|
-
export const
|
|
49
|
+
export const getElementScrollCoordinates = (options) => {
|
|
50
50
|
let { container } = options;
|
|
51
51
|
const { element, direction, behavior = 'smooth', origin = 'nearest', scrollBlockMargin = 0, scrollInlineMargin = 0, } = options;
|
|
52
52
|
if (!element || container === null) {
|
|
53
|
-
return
|
|
53
|
+
return {
|
|
54
|
+
behavior,
|
|
55
|
+
left: undefined,
|
|
56
|
+
top: undefined,
|
|
57
|
+
};
|
|
54
58
|
}
|
|
55
59
|
container ||= document.documentElement;
|
|
56
60
|
const canScroll = elementCanScroll(container);
|
|
57
61
|
if (!canScroll) {
|
|
58
|
-
return
|
|
62
|
+
return {
|
|
63
|
+
behavior,
|
|
64
|
+
left: undefined,
|
|
65
|
+
top: undefined,
|
|
66
|
+
};
|
|
59
67
|
}
|
|
60
68
|
const elementRect = element.getBoundingClientRect();
|
|
61
69
|
const containerRect = container.getBoundingClientRect();
|
|
@@ -126,11 +134,14 @@ export const scrollToElement = (options) => {
|
|
|
126
134
|
scrollToElementNearest();
|
|
127
135
|
break;
|
|
128
136
|
}
|
|
129
|
-
|
|
137
|
+
return {
|
|
130
138
|
behavior,
|
|
131
139
|
left: shouldScrollLeft ? scrollLeftTo : undefined,
|
|
132
140
|
top: shouldScrollTop ? scrollTopTo : undefined,
|
|
133
|
-
}
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
export const scrollToElement = (options) => {
|
|
144
|
+
options.container?.scrollTo(getElementScrollCoordinates(options));
|
|
134
145
|
};
|
|
135
146
|
export const getElementVisibleStates = (options) => {
|
|
136
147
|
let { container } = options;
|
|
@@ -146,4 +157,4 @@ export const getElementVisibleStates = (options) => {
|
|
|
146
157
|
.filter(Boolean);
|
|
147
158
|
return elementVisibleStates;
|
|
148
159
|
};
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsU0FBcUIsRUFBRSxFQUFFO0lBQzlFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekUsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM3QixPQUFPLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sWUFBWSxHQUFHLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQWdERixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWdDLEVBQW1DLEVBQUU7SUFDcEcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsS0FBSyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFB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QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi9jbGFtcC51dGlsJztcblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRDYW5TY3JvbGwgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGRpcmVjdGlvbj86ICd4JyB8ICd5JykgPT4ge1xuICBjb25zdCB7IHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggfSA9IGVsZW1lbnQ7XG5cbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ3gnKSB7XG4gICAgcmV0dXJuIHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGg7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodCB8fCBzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJc0VsZW1lbnRWaXNpYmxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBjaGVjayBpZiBpdCBpcyB2aXNpYmxlIGluc2lkZSBhIGNvbnRhaW5lci5cbiAgICovXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgdG8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyJ3MgcmVjdCB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluc2lkZS4gQ2FuIGJlIHN1cHBsaWVkIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIERPTSByZWFkcy5cbiAgICogQGRlZmF1bHQgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAqL1xuICBjb250YWluZXJSZWN0PzogRE9NUmVjdCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbi5cbiAgICovXG4gIGlubGluZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBibG9jayBkaXJlY3Rpb24uXG4gICAqL1xuICBibG9jazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGVsZW1lbnQgdGhhdCBpcyB2aXNpYmxlIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLlxuICAgKi9cbiAgaW5saW5lSW50ZXJzZWN0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uLlxuICAgKi9cbiAgYmxvY2tJbnRlcnNlY3Rpb246IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCBpcyBiZWluZyBjaGVja2VkIGZvciB2aXNpYmlsaXR5LlxuICAgKi9cbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRWaXNpYmxlID0gKG9wdGlvbnM6IElzRWxlbWVudFZpc2libGVPcHRpb25zKTogQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHwgbnVsbCA9PiB7XG4gIGxldCB7IGNvbnRhaW5lciB9ID0gb3B0aW9ucztcbiAgY29uc3QgeyBlbGVtZW50IH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IGNhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwoY29udGFpbmVyKTtcblxuICBpZiAoIWNhblNjcm9sbCkge1xuICAgIHJldHVybiB7IGlubGluZTogdHJ1ZSwgYmxvY2s6IHRydWUsIGJsb2NrSW50ZXJzZWN0aW9uOiAxMDAsIGlubGluZUludGVyc2VjdGlvbjogMTAwLCBlbGVtZW50IH07XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBvcHRpb25zLmNvbnRhaW5lclJlY3QgfHwgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVTdGFydCA9IGVsZW1lbnRSZWN0LmxlZnQ7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja1N0YXJ0ID0gZWxlbWVudFJlY3QudG9wO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZVN0YXJ0ID0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICBjb25zdCBjb250YWluZXJCbG9ja1N0YXJ0ID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgY29uc3QgZWxXaXRoID0gZWxlbWVudFJlY3Qud2lkdGggfHwgMTtcbiAgY29uc3QgZWxIZWlnaHQgPSBlbGVtZW50UmVjdC5oZWlnaHQgfHwgMTtcblxuICBjb25zdCBlbGVtZW50SW5saW5lRW5kID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxXaXRoO1xuICBjb25zdCBlbGVtZW50QmxvY2tFbmQgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsSGVpZ2h0O1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZUVuZCA9IGNvbnRhaW5lcklubGluZVN0YXJ0ICsgY29udGFpbmVyUmVjdC53aWR0aDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tFbmQgPSBjb250YWluZXJCbG9ja1N0YXJ0ICsgY29udGFpbmVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgaXNFbGVtZW50SW5saW5lVmlzaWJsZSA9IGVsZW1lbnRJbmxpbmVTdGFydCA+PSBjb250YWluZXJJbmxpbmVTdGFydCAmJiBlbGVtZW50SW5saW5lRW5kIDw9IGNvbnRhaW5lcklubGluZUVuZDtcbiAgY29uc3QgaXNFbGVtZW50QmxvY2tWaXNpYmxlID0gZWxlbWVudEJsb2NrU3RhcnQgPj0gY29udGFpbmVyQmxvY2tTdGFydCAmJiBlbGVtZW50QmxvY2tFbmQgPD0gY29udGFpbmVyQmxvY2tFbmQ7XG5cbiAgY29uc3QgaW5saW5lSW50ZXJzZWN0aW9uID1cbiAgICBNYXRoLm1pbihlbGVtZW50SW5saW5lRW5kLCBjb250YWluZXJJbmxpbmVFbmQpIC0gTWF0aC5tYXgoZWxlbWVudElubGluZVN0YXJ0LCBjb250YWluZXJJbmxpbmVTdGFydCk7XG4gIGNvbnN0IGJsb2NrSW50ZXJzZWN0aW9uID1cbiAgICBNYXRoLm1pbihlbGVtZW50QmxvY2tFbmQsIGNvbnRhaW5lckJsb2NrRW5kKSAtIE1hdGgubWF4KGVsZW1lbnRCbG9ja1N0YXJ0LCBjb250YWluZXJCbG9ja1N0YXJ0KTtcblxuICBjb25zdCBpbmxpbmVJbnRlcnNlY3Rpb25QZXJjZW50YWdlID0gY2xhbXAoKGlubGluZUludGVyc2VjdGlvbiAvIGVsV2l0aCkgKiAxMDApO1xuICBjb25zdCBibG9ja0ludGVyc2VjdGlvblBlcmNlbnRhZ2UgPSBjbGFtcCgoYmxvY2tJbnRlcnNlY3Rpb24gLyBlbEhlaWdodCkgKiAxMDApO1xuXG4gIHJldHVybiB7XG4gICAgaW5saW5lOiBpc0VsZW1lbnRJbmxpbmVWaXNpYmxlLFxuICAgIGJsb2NrOiBpc0VsZW1lbnRCbG9ja1Zpc2libGUsXG4gICAgaW5saW5lSW50ZXJzZWN0aW9uOiBpbmxpbmVJbnRlcnNlY3Rpb25QZXJjZW50YWdlLFxuICAgIGJsb2NrSW50ZXJzZWN0aW9uOiBibG9ja0ludGVyc2VjdGlvblBlcmNlbnRhZ2UsXG4gICAgZWxlbWVudCxcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBzY3JvbGwgdG8uXG4gICAqL1xuICBlbGVtZW50PzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Nyb2xsIGNvbnRhaW5lciB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgaW4uXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIHRvIHNjcm9sbCBpbi5cbiAgICogQGRlZmF1bHQgJ2JvdGgnXG4gICAqL1xuICBkaXJlY3Rpb24/OiAnaW5saW5lJyB8ICdibG9jaycgfCAnYm90aCc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcmlnaW4gb2YgdGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLlxuICAgKiBAZGVmYXVsdCAnbmVhcmVzdCdcbiAgICovXG4gIG9yaWdpbj86ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ25lYXJlc3QnO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Nyb2xsIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCAnc21vb3RoJ1xuICAgKi9cbiAgYmVoYXZpb3I/OiBTY3JvbGxCZWhhdmlvcjtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBpbmxpbmUtbWFyZ2luXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNjcm9sbElubGluZU1hcmdpbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBibG9jay1tYXJnaW5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc2Nyb2xsQmxvY2tNYXJnaW4/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSAob3B0aW9uczogU2Nyb2xsVG9FbGVtZW50T3B0aW9ucykgPT4ge1xuICBsZXQgeyBjb250YWluZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGRpcmVjdGlvbixcbiAgICBiZWhhdmlvciA9ICdzbW9vdGgnLFxuICAgIG9yaWdpbiA9ICduZWFyZXN0JyxcbiAgICBzY3JvbGxCbG9ja01hcmdpbiA9IDAsXG4gICAgc2Nyb2xsSW5saW5lTWFyZ2luID0gMCxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgaWYgKCFlbGVtZW50IHx8IGNvbnRhaW5lciA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IGNhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwoY29udGFpbmVyKTtcblxuICBpZiAoIWNhblNjcm9sbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCB9ID0gY29udGFpbmVyO1xuICBjb25zdCB7IHdpZHRoOiBlbGVtZW50V2lkdGgsIGhlaWdodDogZWxlbWVudEhlaWdodCwgbGVmdDogZWxlbWVudExlZnQsIHRvcDogZWxlbWVudFRvcCB9ID0gZWxlbWVudFJlY3Q7XG4gIGNvbnN0IHsgd2lkdGg6IGNvbnRhaW5lcldpZHRoLCBoZWlnaHQ6IGNvbnRhaW5lckhlaWdodCwgbGVmdDogY29udGFpbmVyTGVmdCwgdG9wOiBjb250YWluZXJUb3AgfSA9IGNvbnRhaW5lclJlY3Q7XG5cbiAgY29uc3Qgc2hvdWxkU2Nyb2xsTGVmdCA9IGRpcmVjdGlvbiA9PT0gJ2lubGluZScgfHwgZGlyZWN0aW9uID09PSAnYm90aCcgfHwgIWRpcmVjdGlvbjtcbiAgY29uc3Qgc2hvdWxkU2Nyb2xsVG9wID0gZGlyZWN0aW9uID09PSAnYmxvY2snIHx8IGRpcmVjdGlvbiA9PT0gJ2JvdGgnIHx8ICFkaXJlY3Rpb247XG5cbiAgbGV0IHNjcm9sbExlZnRUbyA9IHNjcm9sbExlZnQ7XG4gIGxldCBzY3JvbGxUb3BUbyA9IHNjcm9sbFRvcDtcblxuICBjb25zdCBzY3JvbGxUb0VsZW1lbnRTdGFydCA9ICgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3A7XG4gICAgY29uc3QgcmVsYXRpdmVMZWZ0ID0gZWxlbWVudExlZnQgLSBjb250YWluZXJMZWZ0O1xuXG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxUb3AgPSByZWxhdGl2ZVRvcDtcbiAgICBjb25zdCBhbW91bnRUb1Njcm9sbExlZnQgPSByZWxhdGl2ZUxlZnQ7XG5cbiAgICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcCArIGFtb3VudFRvU2Nyb2xsVG9wO1xuICAgIGNvbnN0IHNjcm9sbExlZnRQb3NpdGlvbiA9IHNjcm9sbExlZnQgKyBhbW91bnRUb1Njcm9sbExlZnQ7XG5cbiAgICBzY3JvbGxMZWZ0VG8gPSBzY3JvbGxMZWZ0UG9zaXRpb24gLSBzY3JvbGxJbmxpbmVNYXJnaW47XG4gICAgc2Nyb2xsVG9wVG8gPSBzY3JvbGxUb3BQb3NpdGlvbiAtIHNjcm9sbEJsb2NrTWFyZ2luO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvRWxlbWVudEVuZCA9ICgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3A7XG4gICAgY29uc3QgcmVsYXRpdmVMZWZ0ID0gZWxlbWVudExlZnQgLSBjb250YWluZXJMZWZ0O1xuXG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxUb3AgPSByZWxhdGl2ZVRvcCAtIGNvbnRhaW5lckhlaWdodCArIGVsZW1lbnRIZWlnaHQ7XG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxMZWZ0ID0gcmVsYXRpdmVMZWZ0IC0gY29udGFpbmVyV2lkdGggKyBlbGVtZW50V2lkdGg7XG5cbiAgICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcCArIGFtb3VudFRvU2Nyb2xsVG9wO1xuICAgIGNvbnN0IHNjcm9sbExlZnRQb3NpdGlvbiA9IHNjcm9sbExlZnQgKyBhbW91bnRUb1Njcm9sbExlZnQ7XG5cbiAgICBzY3JvbGxMZWZ0VG8gPSBzY3JvbGxMZWZ0UG9zaXRpb24gKyBzY3JvbGxJbmxpbmVNYXJnaW47XG4gICAgc2Nyb2xsVG9wVG8gPSBzY3JvbGxUb3BQb3NpdGlvbiArIHNjcm9sbEJsb2NrTWFyZ2luO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvRWxlbWVudENlbnRlciA9ICgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3A7XG4gICAgY29uc3QgcmVsYXRpdmVMZWZ0ID0gZWxlbWVudExlZnQgLSBjb250YWluZXJMZWZ0O1xuXG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxUb3AgPSByZWxhdGl2ZVRvcCAtIGNvbnRhaW5lckhlaWdodCAvIDIgKyBlbGVtZW50SGVpZ2h0IC8gMjtcbiAgICBjb25zdCBhbW91bnRUb1Njcm9sbExlZnQgPSByZWxhdGl2ZUxlZnQgLSBjb250YWluZXJXaWR0aCAvIDIgKyBlbGVtZW50V2lkdGggLyAyO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb24gPSBzY3JvbGxUb3AgKyBhbW91bnRUb1Njcm9sbFRvcDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0UG9zaXRpb24gPSBzY3JvbGxMZWZ0ICsgYW1vdW50VG9TY3JvbGxMZWZ0O1xuXG4gICAgc2Nyb2xsTGVmdFRvID0gc2Nyb2xsTGVmdFBvc2l0aW9uO1xuICAgIHNjcm9sbFRvcFRvID0gc2Nyb2xsVG9wUG9zaXRpb247XG4gIH07XG5cbiAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50TmVhcmVzdCA9ICgpID0+IHtcbiAgICBjb25zdCBpc0Fib3ZlID0gZWxlbWVudFJlY3QuYm90dG9tIDwgY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3QgaXNQYXJ0aWFsQWJvdmUgPSBlbGVtZW50UmVjdC50b3AgPCBjb250YWluZXJSZWN0LnRvcCAmJiBlbGVtZW50UmVjdC5ib3R0b20gPiBjb250YWluZXJSZWN0LnRvcDtcblxuICAgIGNvbnN0IGlzQmVsb3cgPSBlbGVtZW50UmVjdC50b3AgPiBjb250YWluZXJSZWN0LmJvdHRvbTtcbiAgICBjb25zdCBpc1BhcnRpYWxCZWxvdyA9IGVsZW1lbnRSZWN0LnRvcCA8IGNvbnRhaW5lclJlY3QuYm90dG9tICYmIGVsZW1lbnRSZWN0LmJvdHRvbSA+IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgY29uc3QgaXNMZWZ0ID0gZWxlbWVudFJlY3QucmlnaHQgPCBjb250YWluZXJSZWN0LmxlZnQ7XG4gICAgY29uc3QgaXNQYXJ0aWFsTGVmdCA9IGVsZW1lbnRSZWN0LmxlZnQgPCBjb250YWluZXJSZWN0LmxlZnQgJiYgZWxlbWVudFJlY3QucmlnaHQgPiBjb250YWluZXJSZWN0LmxlZnQ7XG5cbiAgICBjb25zdCBpc1JpZ2h0ID0gZWxlbWVudFJlY3QubGVmdCA+IGNvbnRhaW5lclJlY3QucmlnaHQ7XG4gICAgY29uc3QgaXNQYXJ0aWFsUmlnaHQgPSBlbGVtZW50UmVjdC5sZWZ0IDwgY29udGFpbmVyUmVjdC5yaWdodCAmJiBlbGVtZW50UmVjdC5yaWdodCA+IGNvbnRhaW5lclJlY3QucmlnaHQ7XG5cbiAgICBpZiAoaXNBYm92ZSB8fCBpc1BhcnRpYWxBYm92ZSB8fCBpc0xlZnQgfHwgaXNQYXJ0aWFsTGVmdCkge1xuICAgICAgc2Nyb2xsVG9FbGVtZW50U3RhcnQoKTtcbiAgICB9IGVsc2UgaWYgKGlzQmVsb3cgfHwgaXNQYXJ0aWFsQmVsb3cgfHwgaXNSaWdodCB8fCBpc1BhcnRpYWxSaWdodCkge1xuICAgICAgc2Nyb2xsVG9FbGVtZW50RW5kKCk7XG4gICAgfVxuICB9O1xuXG4gIHN3aXRjaCAob3JpZ2luKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgc2Nyb2xsVG9FbGVtZW50U3RhcnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBzY3JvbGxUb0VsZW1lbnRFbmQoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBzY3JvbGxUb0VsZW1lbnRDZW50ZXIoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25lYXJlc3QnOlxuICAgICAgc2Nyb2xsVG9FbGVtZW50TmVhcmVzdCgpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb250YWluZXIuc2Nyb2xsVG8oe1xuICAgIGJlaGF2aW9yLFxuICAgIGxlZnQ6IHNob3VsZFNjcm9sbExlZnQgPyBzY3JvbGxMZWZ0VG8gOiB1bmRlZmluZWQsXG4gICAgdG9wOiBzaG91bGRTY3JvbGxUb3AgPyBzY3JvbGxUb3BUbyA6IHVuZGVmaW5lZCxcbiAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdldFZpc2libGVFbGVtZW50c09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciB0byBjaGVjayBmb3IgdmlzaWJsZSBlbGVtZW50cy5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50cyB0byBjaGVjayBpZiB0aGV5IGFyZSB2aXNpYmxlIGluc2lkZSBhIGNvbnRhaW5lci5cbiAgICovXG4gIGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudFZpc2libGVTdGF0ZXMgPSAob3B0aW9uczogR2V0VmlzaWJsZUVsZW1lbnRzT3B0aW9ucykgPT4ge1xuICBsZXQgeyBjb250YWluZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgZWxlbWVudHMgfSA9IG9wdGlvbnM7XG5cbiAgY29udGFpbmVyIHx8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBlbGVtZW50VmlzaWJsZVN0YXRlcyA9IGVsZW1lbnRzXG4gICAgLm1hcCgoZSkgPT4ge1xuICAgICAgaWYgKCFlIHx8ICFjb250YWluZXIpIHJldHVybiBudWxsO1xuXG4gICAgICByZXR1cm4gaXNFbGVtZW50VmlzaWJsZSh7IGNvbnRhaW5lciwgZWxlbWVudDogZSwgY29udGFpbmVyUmVjdDogcmVjdCB9KTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5W107XG5cbiAgcmV0dXJuIGVsZW1lbnRWaXNpYmxlU3RhdGVzO1xufTtcbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3Njcm9sbGFibGUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQW9CLEVBQUUsU0FBcUIsRUFBRSxFQUFFO0lBQzlFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekUsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM3QixPQUFPLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sWUFBWSxHQUFHLFlBQVksSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQWdERixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWdDLEVBQW1DLEVBQUU7SUFDcEcsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsS0FBSyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFB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RUFBRSxFQUFFO1FBQ1QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVsQyxPQUFPLGdCQUFnQixDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBK0IsQ0FBQztJQUVqRCxPQUFPLG9CQUFvQixDQUFDO0FBQzlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi9jbGFtcC51dGlsJztcblxuZXhwb3J0IGNvbnN0IGVsZW1lbnRDYW5TY3JvbGwgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGRpcmVjdGlvbj86ICd4JyB8ICd5JykgPT4ge1xuICBjb25zdCB7IHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggfSA9IGVsZW1lbnQ7XG5cbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ3gnKSB7XG4gICAgcmV0dXJuIHNjcm9sbFdpZHRoID4gY2xpZW50V2lkdGg7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodCB8fCBzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJc0VsZW1lbnRWaXNpYmxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBjaGVjayBpZiBpdCBpcyB2aXNpYmxlIGluc2lkZSBhIGNvbnRhaW5lci5cbiAgICovXG4gIGVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgdG8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgKi9cbiAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyJ3MgcmVjdCB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluc2lkZS4gQ2FuIGJlIHN1cHBsaWVkIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIERPTSByZWFkcy5cbiAgICogQGRlZmF1bHQgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAqL1xuICBjb250YWluZXJSZWN0PzogRE9NUmVjdCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgaW5saW5lIGRpcmVjdGlvbi5cbiAgICovXG4gIGlubGluZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSBibG9jayBkaXJlY3Rpb24uXG4gICAqL1xuICBibG9jazogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIGVsZW1lbnQgdGhhdCBpcyB2aXNpYmxlIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uLlxuICAgKi9cbiAgaW5saW5lSW50ZXJzZWN0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSBlbGVtZW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgYmxvY2sgZGlyZWN0aW9uLlxuICAgKi9cbiAgYmxvY2tJbnRlcnNlY3Rpb246IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCBpcyBiZWluZyBjaGVja2VkIGZvciB2aXNpYmlsaXR5LlxuICAgKi9cbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRWaXNpYmxlID0gKG9wdGlvbnM6IElzRWxlbWVudFZpc2libGVPcHRpb25zKTogQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHwgbnVsbCA9PiB7XG4gIGxldCB7IGNvbnRhaW5lciB9ID0gb3B0aW9ucztcbiAgY29uc3QgeyBlbGVtZW50IH0gPSBvcHRpb25zO1xuXG4gIGlmICghZWxlbWVudCB8fCBjb250YWluZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IGNhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwoY29udGFpbmVyKTtcblxuICBpZiAoIWNhblNjcm9sbCkge1xuICAgIHJldHVybiB7IGlubGluZTogdHJ1ZSwgYmxvY2s6IHRydWUsIGJsb2NrSW50ZXJzZWN0aW9uOiAxMDAsIGlubGluZUludGVyc2VjdGlvbjogMTAwLCBlbGVtZW50IH07XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBvcHRpb25zLmNvbnRhaW5lclJlY3QgfHwgY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbmxpbmVTdGFydCA9IGVsZW1lbnRSZWN0LmxlZnQ7XG4gIGNvbnN0IGVsZW1lbnRCbG9ja1N0YXJ0ID0gZWxlbWVudFJlY3QudG9wO1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZVN0YXJ0ID0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICBjb25zdCBjb250YWluZXJCbG9ja1N0YXJ0ID0gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgY29uc3QgZWxXaXRoID0gZWxlbWVudFJlY3Qud2lkdGggfHwgMTtcbiAgY29uc3QgZWxIZWlnaHQgPSBlbGVtZW50UmVjdC5oZWlnaHQgfHwgMTtcblxuICBjb25zdCBlbGVtZW50SW5saW5lRW5kID0gZWxlbWVudElubGluZVN0YXJ0ICsgZWxXaXRoO1xuICBjb25zdCBlbGVtZW50QmxvY2tFbmQgPSBlbGVtZW50QmxvY2tTdGFydCArIGVsSGVpZ2h0O1xuXG4gIGNvbnN0IGNvbnRhaW5lcklubGluZUVuZCA9IGNvbnRhaW5lcklubGluZVN0YXJ0ICsgY29udGFpbmVyUmVjdC53aWR0aDtcbiAgY29uc3QgY29udGFpbmVyQmxvY2tFbmQgPSBjb250YWluZXJCbG9ja1N0YXJ0ICsgY29udGFpbmVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgaXNFbGVtZW50SW5saW5lVmlzaWJsZSA9IGVsZW1lbnRJbmxpbmVTdGFydCA+PSBjb250YWluZXJJbmxpbmVTdGFydCAmJiBlbGVtZW50SW5saW5lRW5kIDw9IGNvbnRhaW5lcklubGluZUVuZDtcbiAgY29uc3QgaXNFbGVtZW50QmxvY2tWaXNpYmxlID0gZWxlbWVudEJsb2NrU3RhcnQgPj0gY29udGFpbmVyQmxvY2tTdGFydCAmJiBlbGVtZW50QmxvY2tFbmQgPD0gY29udGFpbmVyQmxvY2tFbmQ7XG5cbiAgY29uc3QgaW5saW5lSW50ZXJzZWN0aW9uID1cbiAgICBNYXRoLm1pbihlbGVtZW50SW5saW5lRW5kLCBjb250YWluZXJJbmxpbmVFbmQpIC0gTWF0aC5tYXgoZWxlbWVudElubGluZVN0YXJ0LCBjb250YWluZXJJbmxpbmVTdGFydCk7XG4gIGNvbnN0IGJsb2NrSW50ZXJzZWN0aW9uID1cbiAgICBNYXRoLm1pbihlbGVtZW50QmxvY2tFbmQsIGNvbnRhaW5lckJsb2NrRW5kKSAtIE1hdGgubWF4KGVsZW1lbnRCbG9ja1N0YXJ0LCBjb250YWluZXJCbG9ja1N0YXJ0KTtcblxuICBjb25zdCBpbmxpbmVJbnRlcnNlY3Rpb25QZXJjZW50YWdlID0gY2xhbXAoKGlubGluZUludGVyc2VjdGlvbiAvIGVsV2l0aCkgKiAxMDApO1xuICBjb25zdCBibG9ja0ludGVyc2VjdGlvblBlcmNlbnRhZ2UgPSBjbGFtcCgoYmxvY2tJbnRlcnNlY3Rpb24gLyBlbEhlaWdodCkgKiAxMDApO1xuXG4gIHJldHVybiB7XG4gICAgaW5saW5lOiBpc0VsZW1lbnRJbmxpbmVWaXNpYmxlLFxuICAgIGJsb2NrOiBpc0VsZW1lbnRCbG9ja1Zpc2libGUsXG4gICAgaW5saW5lSW50ZXJzZWN0aW9uOiBpbmxpbmVJbnRlcnNlY3Rpb25QZXJjZW50YWdlLFxuICAgIGJsb2NrSW50ZXJzZWN0aW9uOiBibG9ja0ludGVyc2VjdGlvblBlcmNlbnRhZ2UsXG4gICAgZWxlbWVudCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50U2Nyb2xsQ29vcmRpbmF0ZXMgPSAob3B0aW9uczogU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyk6IFNjcm9sbFRvT3B0aW9ucyA9PiB7XG4gIGxldCB7IGNvbnRhaW5lciB9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgZGlyZWN0aW9uLFxuICAgIGJlaGF2aW9yID0gJ3Ntb290aCcsXG4gICAgb3JpZ2luID0gJ25lYXJlc3QnLFxuICAgIHNjcm9sbEJsb2NrTWFyZ2luID0gMCxcbiAgICBzY3JvbGxJbmxpbmVNYXJnaW4gPSAwLFxuICB9ID0gb3B0aW9ucztcblxuICBpZiAoIWVsZW1lbnQgfHwgY29udGFpbmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJlaGF2aW9yLFxuICAgICAgbGVmdDogdW5kZWZpbmVkLFxuICAgICAgdG9wOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnRhaW5lciB8fD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIGNvbnN0IGNhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwoY29udGFpbmVyKTtcblxuICBpZiAoIWNhblNjcm9sbCkge1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcixcbiAgICAgIGxlZnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRvcDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IGNvbnRhaW5lcjtcbiAgY29uc3QgeyB3aWR0aDogZWxlbWVudFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnRIZWlnaHQsIGxlZnQ6IGVsZW1lbnRMZWZ0LCB0b3A6IGVsZW1lbnRUb3AgfSA9IGVsZW1lbnRSZWN0O1xuICBjb25zdCB7IHdpZHRoOiBjb250YWluZXJXaWR0aCwgaGVpZ2h0OiBjb250YWluZXJIZWlnaHQsIGxlZnQ6IGNvbnRhaW5lckxlZnQsIHRvcDogY29udGFpbmVyVG9wIH0gPSBjb250YWluZXJSZWN0O1xuXG4gIGNvbnN0IHNob3VsZFNjcm9sbExlZnQgPSBkaXJlY3Rpb24gPT09ICdpbmxpbmUnIHx8IGRpcmVjdGlvbiA9PT0gJ2JvdGgnIHx8ICFkaXJlY3Rpb247XG4gIGNvbnN0IHNob3VsZFNjcm9sbFRvcCA9IGRpcmVjdGlvbiA9PT0gJ2Jsb2NrJyB8fCBkaXJlY3Rpb24gPT09ICdib3RoJyB8fCAhZGlyZWN0aW9uO1xuXG4gIGxldCBzY3JvbGxMZWZ0VG8gPSBzY3JvbGxMZWZ0O1xuICBsZXQgc2Nyb2xsVG9wVG8gPSBzY3JvbGxUb3A7XG5cbiAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50U3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpdmVUb3AgPSBlbGVtZW50VG9wIC0gY29udGFpbmVyVG9wO1xuICAgIGNvbnN0IHJlbGF0aXZlTGVmdCA9IGVsZW1lbnRMZWZ0IC0gY29udGFpbmVyTGVmdDtcblxuICAgIGNvbnN0IGFtb3VudFRvU2Nyb2xsVG9wID0gcmVsYXRpdmVUb3A7XG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxMZWZ0ID0gcmVsYXRpdmVMZWZ0O1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb24gPSBzY3JvbGxUb3AgKyBhbW91bnRUb1Njcm9sbFRvcDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0UG9zaXRpb24gPSBzY3JvbGxMZWZ0ICsgYW1vdW50VG9TY3JvbGxMZWZ0O1xuXG4gICAgc2Nyb2xsTGVmdFRvID0gc2Nyb2xsTGVmdFBvc2l0aW9uIC0gc2Nyb2xsSW5saW5lTWFyZ2luO1xuICAgIHNjcm9sbFRvcFRvID0gc2Nyb2xsVG9wUG9zaXRpb24gLSBzY3JvbGxCbG9ja01hcmdpbjtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0VsZW1lbnRFbmQgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpdmVUb3AgPSBlbGVtZW50VG9wIC0gY29udGFpbmVyVG9wO1xuICAgIGNvbnN0IHJlbGF0aXZlTGVmdCA9IGVsZW1lbnRMZWZ0IC0gY29udGFpbmVyTGVmdDtcblxuICAgIGNvbnN0IGFtb3VudFRvU2Nyb2xsVG9wID0gcmVsYXRpdmVUb3AgLSBjb250YWluZXJIZWlnaHQgKyBlbGVtZW50SGVpZ2h0O1xuICAgIGNvbnN0IGFtb3VudFRvU2Nyb2xsTGVmdCA9IHJlbGF0aXZlTGVmdCAtIGNvbnRhaW5lcldpZHRoICsgZWxlbWVudFdpZHRoO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb24gPSBzY3JvbGxUb3AgKyBhbW91bnRUb1Njcm9sbFRvcDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0UG9zaXRpb24gPSBzY3JvbGxMZWZ0ICsgYW1vdW50VG9TY3JvbGxMZWZ0O1xuXG4gICAgc2Nyb2xsTGVmdFRvID0gc2Nyb2xsTGVmdFBvc2l0aW9uICsgc2Nyb2xsSW5saW5lTWFyZ2luO1xuICAgIHNjcm9sbFRvcFRvID0gc2Nyb2xsVG9wUG9zaXRpb24gKyBzY3JvbGxCbG9ja01hcmdpbjtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0VsZW1lbnRDZW50ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpdmVUb3AgPSBlbGVtZW50VG9wIC0gY29udGFpbmVyVG9wO1xuICAgIGNvbnN0IHJlbGF0aXZlTGVmdCA9IGVsZW1lbnRMZWZ0IC0gY29udGFpbmVyTGVmdDtcblxuICAgIGNvbnN0IGFtb3VudFRvU2Nyb2xsVG9wID0gcmVsYXRpdmVUb3AgLSBjb250YWluZXJIZWlnaHQgLyAyICsgZWxlbWVudEhlaWdodCAvIDI7XG4gICAgY29uc3QgYW1vdW50VG9TY3JvbGxMZWZ0ID0gcmVsYXRpdmVMZWZ0IC0gY29udGFpbmVyV2lkdGggLyAyICsgZWxlbWVudFdpZHRoIC8gMjtcblxuICAgIGNvbnN0IHNjcm9sbFRvcFBvc2l0aW9uID0gc2Nyb2xsVG9wICsgYW1vdW50VG9TY3JvbGxUb3A7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdFBvc2l0aW9uID0gc2Nyb2xsTGVmdCArIGFtb3VudFRvU2Nyb2xsTGVmdDtcblxuICAgIHNjcm9sbExlZnRUbyA9IHNjcm9sbExlZnRQb3NpdGlvbjtcbiAgICBzY3JvbGxUb3BUbyA9IHNjcm9sbFRvcFBvc2l0aW9uO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvRWxlbWVudE5lYXJlc3QgPSAoKSA9PiB7XG4gICAgY29uc3QgaXNBYm92ZSA9IGVsZW1lbnRSZWN0LmJvdHRvbSA8IGNvbnRhaW5lclJlY3QudG9wO1xuICAgIGNvbnN0IGlzUGFydGlhbEFib3ZlID0gZWxlbWVudFJlY3QudG9wIDwgY29udGFpbmVyUmVjdC50b3AgJiYgZWxlbWVudFJlY3QuYm90dG9tID4gY29udGFpbmVyUmVjdC50b3A7XG5cbiAgICBjb25zdCBpc0JlbG93ID0gZWxlbWVudFJlY3QudG9wID4gY29udGFpbmVyUmVjdC5ib3R0b207XG4gICAgY29uc3QgaXNQYXJ0aWFsQmVsb3cgPSBlbGVtZW50UmVjdC50b3AgPCBjb250YWluZXJSZWN0LmJvdHRvbSAmJiBlbGVtZW50UmVjdC5ib3R0b20gPiBjb250YWluZXJSZWN0LmJvdHRvbTtcblxuICAgIGNvbnN0IGlzTGVmdCA9IGVsZW1lbnRSZWN0LnJpZ2h0IDwgY29udGFpbmVyUmVjdC5sZWZ0O1xuICAgIGNvbnN0IGlzUGFydGlhbExlZnQgPSBlbGVtZW50UmVjdC5sZWZ0IDwgY29udGFpbmVyUmVjdC5sZWZ0ICYmIGVsZW1lbnRSZWN0LnJpZ2h0ID4gY29udGFpbmVyUmVjdC5sZWZ0O1xuXG4gICAgY29uc3QgaXNSaWdodCA9IGVsZW1lbnRSZWN0LmxlZnQgPiBjb250YWluZXJSZWN0LnJpZ2h0O1xuICAgIGNvbnN0IGlzUGFydGlhbFJpZ2h0ID0gZWxlbWVudFJlY3QubGVmdCA8IGNvbnRhaW5lclJlY3QucmlnaHQgJiYgZWxlbWVudFJlY3QucmlnaHQgPiBjb250YWluZXJSZWN0LnJpZ2h0O1xuXG4gICAgaWYgKGlzQWJvdmUgfHwgaXNQYXJ0aWFsQWJvdmUgfHwgaXNMZWZ0IHx8IGlzUGFydGlhbExlZnQpIHtcbiAgICAgIHNjcm9sbFRvRWxlbWVudFN0YXJ0KCk7XG4gICAgfSBlbHNlIGlmIChpc0JlbG93IHx8IGlzUGFydGlhbEJlbG93IHx8IGlzUmlnaHQgfHwgaXNQYXJ0aWFsUmlnaHQpIHtcbiAgICAgIHNjcm9sbFRvRWxlbWVudEVuZCgpO1xuICAgIH1cbiAgfTtcblxuICBzd2l0Y2ggKG9yaWdpbikge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHNjcm9sbFRvRWxlbWVudFN0YXJ0KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgc2Nyb2xsVG9FbGVtZW50RW5kKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgc2Nyb2xsVG9FbGVtZW50Q2VudGVyKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZWFyZXN0JzpcbiAgICAgIHNjcm9sbFRvRWxlbWVudE5lYXJlc3QoKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiZWhhdmlvcixcbiAgICBsZWZ0OiBzaG91bGRTY3JvbGxMZWZ0ID8gc2Nyb2xsTGVmdFRvIDogdW5kZWZpbmVkLFxuICAgIHRvcDogc2hvdWxkU2Nyb2xsVG9wID8gc2Nyb2xsVG9wVG8gOiB1bmRlZmluZWQsXG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbFRvRWxlbWVudE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gc2Nyb2xsIHRvLlxuICAgKi9cbiAgZWxlbWVudD86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBjb250YWluZXIgdG8gc2Nyb2xsIHRvIHRoZSBlbGVtZW50IGluLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiB0byBzY3JvbGwgaW4uXG4gICAqIEBkZWZhdWx0ICdib3RoJ1xuICAgKi9cbiAgZGlyZWN0aW9uPzogJ2lubGluZScgfCAnYmxvY2snIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luIG9mIHRoZSBlbGVtZW50IHRvIHNjcm9sbCB0by5cbiAgICogQGRlZmF1bHQgJ25lYXJlc3QnXG4gICAqL1xuICBvcmlnaW4/OiAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICduZWFyZXN0JztcblxuICAvKipcbiAgICogVGhlIHNjcm9sbCBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgJ3Ntb290aCdcbiAgICovXG4gIGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgaW5saW5lLW1hcmdpblxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzY3JvbGxJbmxpbmVNYXJnaW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JvbGwgYmxvY2stbWFyZ2luXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNjcm9sbEJsb2NrTWFyZ2luPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKG9wdGlvbnM6IFNjcm9sbFRvRWxlbWVudE9wdGlvbnMpID0+IHtcbiAgb3B0aW9ucy5jb250YWluZXI/LnNjcm9sbFRvKGdldEVsZW1lbnRTY3JvbGxDb29yZGluYXRlcyhvcHRpb25zKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdldFZpc2libGVFbGVtZW50c09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciB0byBjaGVjayBmb3IgdmlzaWJsZSBlbGVtZW50cy5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAqL1xuICBjb250YWluZXI/OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50cyB0byBjaGVjayBpZiB0aGV5IGFyZSB2aXNpYmxlIGluc2lkZSBhIGNvbnRhaW5lci5cbiAgICovXG4gIGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudFZpc2libGVTdGF0ZXMgPSAob3B0aW9uczogR2V0VmlzaWJsZUVsZW1lbnRzT3B0aW9ucykgPT4ge1xuICBsZXQgeyBjb250YWluZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgZWxlbWVudHMgfSA9IG9wdGlvbnM7XG5cbiAgY29udGFpbmVyIHx8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBlbGVtZW50VmlzaWJsZVN0YXRlcyA9IGVsZW1lbnRzXG4gICAgLm1hcCgoZSkgPT4ge1xuICAgICAgaWYgKCFlIHx8ICFjb250YWluZXIpIHJldHVybiBudWxsO1xuXG4gICAgICByZXR1cm4gaXNFbGVtZW50VmlzaWJsZSh7IGNvbnRhaW5lciwgZWxlbWVudDogZSwgY29udGFpbmVyUmVjdDogcmVjdCB9KTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5W107XG5cbiAgcmV0dXJuIGVsZW1lbnRWaXNpYmxlU3RhdGVzO1xufTtcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { coerceElement } from '@angular/cdk/coercion';
|
|
2
|
-
import { DestroyRef, ElementRef, Injector, NgZone, QueryList, afterNextRender, computed, effect, inject, isDevMode, isSignal, runInInjectionContext, signal, untracked, } from '@angular/core';
|
|
2
|
+
import { DestroyRef, ElementRef, Injector, NgZone, QueryList, Renderer2, RendererStyleFlags2, afterNextRender, computed, effect, inject, isDevMode, isSignal, runInInjectionContext, signal, untracked, } from '@angular/core';
|
|
3
3
|
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { Observable, debounceTime, distinctUntilChanged, map, merge, of, pairwise, startWith, switchMap } from 'rxjs';
|
|
5
5
|
import { RouterStateService } from '../services';
|
|
@@ -132,15 +132,16 @@ export const signalIsRendered = () => {
|
|
|
132
132
|
return isRendered.asReadonly();
|
|
133
133
|
};
|
|
134
134
|
export const signalClasses = (el, classMap) => {
|
|
135
|
+
const renderer = inject(Renderer2);
|
|
135
136
|
return buildSignalEffects(el, {
|
|
136
137
|
tokenMap: classMap,
|
|
137
|
-
cleanupFn: (el, tokens) =>
|
|
138
|
+
cleanupFn: (el, tokens) => tokens.forEach((token) => renderer.removeClass(el, token)),
|
|
138
139
|
updateFn: (el, tokens, condition) => {
|
|
139
140
|
if (!condition) {
|
|
140
|
-
|
|
141
|
+
tokens.forEach((token) => renderer.removeClass(el, token));
|
|
141
142
|
}
|
|
142
143
|
else {
|
|
143
|
-
|
|
144
|
+
tokens.forEach((token) => renderer.addClass(el, token));
|
|
144
145
|
}
|
|
145
146
|
},
|
|
146
147
|
});
|
|
@@ -148,6 +149,7 @@ export const signalClasses = (el, classMap) => {
|
|
|
148
149
|
export const signalHostClasses = (classMap) => signalClasses(inject(ElementRef), classMap);
|
|
149
150
|
const ALWAYS_TRUE_ATTRIBUTE_KEYS = ['disabled', 'readonly', 'required', 'checked', 'selected', 'hidden', 'inert'];
|
|
150
151
|
export const signalAttributes = (el, attributeMap) => {
|
|
152
|
+
const renderer = inject(Renderer2);
|
|
151
153
|
return buildSignalEffects(el, {
|
|
152
154
|
tokenMap: attributeMap,
|
|
153
155
|
cleanupFn: (el, tokens) => tokens.forEach((token) => el.removeAttribute(token)),
|
|
@@ -155,18 +157,18 @@ export const signalAttributes = (el, attributeMap) => {
|
|
|
155
157
|
for (const token of tokens) {
|
|
156
158
|
if (ALWAYS_TRUE_ATTRIBUTE_KEYS.includes(token)) {
|
|
157
159
|
if (condition) {
|
|
158
|
-
|
|
160
|
+
renderer.setAttribute(el, token, '');
|
|
159
161
|
}
|
|
160
162
|
else {
|
|
161
|
-
|
|
163
|
+
renderer.removeAttribute(el, token);
|
|
162
164
|
}
|
|
163
165
|
continue;
|
|
164
166
|
}
|
|
165
167
|
if (condition === null || condition === undefined) {
|
|
166
|
-
|
|
168
|
+
renderer.removeAttribute(el, token);
|
|
167
169
|
}
|
|
168
170
|
else {
|
|
169
|
-
|
|
171
|
+
renderer.setAttribute(el, token, `${condition}`);
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
},
|
|
@@ -174,16 +176,17 @@ export const signalAttributes = (el, attributeMap) => {
|
|
|
174
176
|
};
|
|
175
177
|
export const signalHostAttributes = (attributeMap) => signalAttributes(inject(ElementRef), attributeMap);
|
|
176
178
|
export const signalStyles = (el, styleMap) => {
|
|
179
|
+
const renderer = inject(Renderer2);
|
|
177
180
|
return buildSignalEffects(el, {
|
|
178
181
|
tokenMap: styleMap,
|
|
179
|
-
cleanupFn: (el, tokens) => tokens.forEach((token) =>
|
|
182
|
+
cleanupFn: (el, tokens) => tokens.forEach((token) => renderer.removeStyle(el, token)),
|
|
180
183
|
updateFn: (el, tokens, condition) => {
|
|
181
184
|
for (const token of tokens) {
|
|
182
185
|
if (condition === null || condition === undefined) {
|
|
183
|
-
|
|
186
|
+
renderer.removeStyle(el, token);
|
|
184
187
|
}
|
|
185
188
|
else {
|
|
186
|
-
|
|
189
|
+
renderer.setStyle(el, token, `${condition}`, RendererStyleFlags2.DashCase);
|
|
187
190
|
}
|
|
188
191
|
}
|
|
189
192
|
},
|
|
@@ -284,8 +287,10 @@ export const signalElementScrollState = (el, options) => {
|
|
|
284
287
|
const scrollPosition = initialScrollPosition();
|
|
285
288
|
const element = elements().currentElement;
|
|
286
289
|
if (scrollPosition && element) {
|
|
287
|
-
|
|
288
|
-
|
|
290
|
+
if (scrollPosition.left !== undefined)
|
|
291
|
+
element.scrollLeft = scrollPosition.left;
|
|
292
|
+
if (scrollPosition.top !== undefined)
|
|
293
|
+
element.scrollTop = scrollPosition.top;
|
|
289
294
|
ref.destroy();
|
|
290
295
|
}
|
|
291
296
|
});
|
|
@@ -552,4 +557,4 @@ export const createCanAnimateSignal = () => {
|
|
|
552
557
|
state: value,
|
|
553
558
|
};
|
|
554
559
|
};
|
|
555
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTRCdEQsU0FBUyxlQUFlLENBQUMsRUFBVztJQUNsQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksZ0JBQWdCLElBQUksR0FBRyxJQUFJLGlCQUFp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RTVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEtBQUssRUFBRSxLQUFLO0tBQ2IsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUVsZW1lbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgRGVzdHJveVJlZixcbiAgRWZmZWN0UmVmLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3RvcixcbiAgTmdab25lLFxuICBRdWVyeUxpc3QsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG4gIGlzU2lnbmFsLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIG1lcmdlLCBvZiwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBuZXh0RnJhbWUgfSBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5pbXBvcnQgeyBlcXVhbCB9IGZyb20gJy4vZXF1YWwudXRpbCc7XG5pbXBvcnQgeyBpc0VsZW1lbnRWaXNpYmxlIH0gZnJvbSAnLi9zY3JvbGxhYmxlLnV0aWxzJztcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgQXJyYXk8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IE9ic2VydmFibGU8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBTaWduYWw8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBFbGVtZW50U2lnbmFsO1xuXG50eXBlIEVsZW1lbnRTaWduYWwgPSBTaWduYWw8e1xuICAvKiogQGRlcHJlY2F0ZWQgQWx3YXlzIHVzZSBjdXJyZW50RWxlbWVudHMgICovXG4gIGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqIEBkZXByZWNhdGVkIEFsd2F5cyB1c2UgcHJldmlvdXNFbGVtZW50cyAgKi9cbiAgcHJldmlvdXNFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIGN1cnJlbnRFbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbiAgcHJldmlvdXNFbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbn0+O1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTaWduYWwoZWw6IHVua25vd24pOiBlbCBpcyBFbGVtZW50U2lnbmFsIHtcbiAgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIGNvbnN0IHZhbCA9IGVsKCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiAnY3VycmVudEVsZW1lbnQnIGluIHZhbCAmJiAncHJldmlvdXNFbGVtZW50JyBpbiB2YWw7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IGRvY3VtZW50RWxlbWVudFNpZ25hbCA9ICgpOiBFbGVtZW50U2lnbmFsID0+XG4gIHNpZ25hbCh7XG4gICAgY3VycmVudEVsZW1lbnQ6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBwcmV2aW91c0VsZW1lbnQ6IG51bGwsXG4gICAgY3VycmVudEVsZW1lbnRzOiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSxcbiAgICBwcmV2aW91c0VsZW1lbnRzOiBbXSxcbiAgfSk7XG5cbmNvbnN0IGJ1aWxkRWxlbWVudFNpZ25hbCA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEVsZW1lbnRTaWduYWwgPT4ge1xuICBpZiAoZWwgPT09IG51bGwgfHwgZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzaWduYWwoeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBjdXJyZW50RWxlbWVudHM6IFtdLCBwcmV2aW91c0VsZW1lbnRzOiBbXSB9KTtcbiAgfVxuXG4gIGlmIChpc0VsZW1lbnRTaWduYWwoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgbGV0IG1FbFNpZ25hbDogU2lnbmFsPEhUTUxFbGVtZW50W10gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHN3aXRjaEVsZW1lbnQgPSAoKSA9PlxuICAgIHN3aXRjaE1hcCgoZWxPclJlZjogU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSkgPT4ge1xuICAgICAgaWYgKGVsT3JSZWYgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICAgICAgcmV0dXJuIGVsT3JSZWYuY2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChlbE9yUmVmKSxcbiAgICAgICAgICBtYXAoKCkgPT4gZWxPclJlZi50b0FycmF5KCkubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWxPclJlZikpIHtcbiAgICAgICAgcmV0dXJuIG9mKGVsT3JSZWYubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2VyY2VkRWwgPSBjb2VyY2VFbGVtZW50KGVsT3JSZWYpO1xuICAgICAgICByZXR1cm4gb2YoY29lcmNlZEVsID8gW2NvZXJjZWRFbF0gOiBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBpZiAoZWwgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgbUVsU2lnbmFsID0gdG9TaWduYWwoZWwucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChpc1NpZ25hbChlbCkpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbCh0b09ic2VydmFibGUoZWwpLnBpcGUoc3dpdGNoRWxlbWVudCgpKSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChcbiAgICAgIGVsLmNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGVsKSxcbiAgICAgICAgbWFwKCgpID0+IGVsLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICksXG4gICAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCB9LFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbUVsU2lnbmFsID0gc2lnbmFsKFtjb2VyY2VFbGVtZW50KGVsKV0pO1xuICB9XG5cbiAgcmV0dXJuIHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZShtRWxTaWduYWwpLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbcHJldmlvdXNFbGVtZW50cywgY3VycmVudEVsZW1lbnRzXSkgPT4gKHtcbiAgICAgICAgcHJldmlvdXNFbGVtZW50czogcHJldmlvdXNFbGVtZW50cyA/PyBbXSxcbiAgICAgICAgY3VycmVudEVsZW1lbnRzOiBjdXJyZW50RWxlbWVudHMgPz8gW10sXG4gICAgICAgIGN1cnJlbnRFbGVtZW50OiBjdXJyZW50RWxlbWVudHM/LlswXSA/PyBudWxsLFxuICAgICAgICBwcmV2aW91c0VsZW1lbnQ6IHByZXZpb3VzRWxlbWVudHM/LlswXSA/PyBudWxsLFxuICAgICAgfSkpLFxuICAgICksXG4gICAgeyBpbml0aWFsVmFsdWU6IHsgY3VycmVudEVsZW1lbnQ6IG51bGwsIHByZXZpb3VzRWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50czogW10sIGN1cnJlbnRFbGVtZW50czogW10gfSB9LFxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFNpZ25hbEVmZmVjdHNDb25maWc8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+IHtcbiAgLyoqIFRoZSB0b2tlbnMgdG8gYXBwbHkgYW5kIHRoZWlyIHNpZ25hbCB2YWx1ZSAgKi9cbiAgdG9rZW5NYXA6IFQ7XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGZvciBlbGVtZW50cyB0aGF0IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBzaWduYWwgZWZmZWN0cyAqL1xuICBjbGVhbnVwRm46IChlbDogSFRNTEVsZW1lbnQsIHRva2Vuczogc3RyaW5nW10pID0+IHZvaWQ7XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGZvciBlbGVtZW50cyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIHNpZ25hbCBlZmZlY3RzIG9yIHdoZW4gdGhlaXIgc2lnbmFsIHZhbHVlIGNoYW5nZXMgKi9cbiAgdXBkYXRlRm46IChlbDogSFRNTEVsZW1lbnQsIHRva2Vuczogc3RyaW5nW10sIGNvbmRpdGlvblJlc3VsdDogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2lnbmFsRWZmZWN0cyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oXG4gIGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsXG4gIGNvbmZpZzogQnVpbGRTaWduYWxFZmZlY3RzQ29uZmlnPFQ+LFxuKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50RWxlbWVudHMsIHByZXZpb3VzRWxlbWVudHMgfSA9IGVsZW1lbnRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IHByZXZpb3VzRWwgb2YgcHJldmlvdXNFbGVtZW50cykge1xuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50cy5pbmNsdWRlcyhwcmV2aW91c0VsKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHRva2VucyA9IE9iamVjdC5rZXlzKGNvbmZpZy50b2tlbk1hcClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkuc3BsaXQoJyAnKSlcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgaWYgKCF0b2tlbnMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uZmlnLmNsZWFudXBGbihwcmV2aW91c0VsLCB0b2tlbnMpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY3VycmVudEVsIG9mIGN1cnJlbnRFbGVtZW50cykge1xuICAgICAgaWYgKHByZXZpb3VzRWxlbWVudHMuaW5jbHVkZXMoY3VycmVudEVsKSkgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3QgW3Rva2VucywgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudG9rZW5NYXApKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAgIGNvbmZpZy51cGRhdGVGbihjdXJyZW50RWwsIHRva2VuQXJyYXksIGNvbmRpdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBlZmZlY3RzOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2Vuczogc3RyaW5nKSA9PiB0b2tlbnMgaW4gZWZmZWN0cztcblxuICBjb25zdCBwdXNoID0gKHRva2Vuczogc3RyaW5nLCBzaWduYWw6IFNpZ25hbDx1bmtub3duPikgPT4ge1xuICAgIGlmIChoYXModG9rZW5zKSkgcmV0dXJuO1xuXG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3RzW3Rva2Vuc10gPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRFbGVtZW50cyB9ID0gdW50cmFja2VkKCgpID0+IGVsZW1lbnRzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uZmlnLnVwZGF0ZUZuKGVsLCB0b2tlbkFycmF5LCBzaWduYWwoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHB1c2hNYW55ID0gKG1hcDogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuICAgIGZvciAoY29uc3QgW3Rva2Vucywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2Vucywgc2lnbmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlID0gKHRva2Vuczogc3RyaW5nKSA9PiB7XG4gICAgZWZmZWN0c1t0b2tlbnNdPy5kZXN0cm95KCk7XG5cbiAgICBkZWxldGUgZWZmZWN0c1t0b2tlbnNdO1xuXG4gICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50cykge1xuICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgaWYgKCF0b2tlbkFycmF5Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbmZpZy5jbGVhbnVwRm4oZWwsIHRva2VuQXJyYXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmVNYW55ID0gKHRva2Vuczogc3RyaW5nW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgcmVtb3ZlKHRva2VuKTtcbiAgICB9XG4gIH07XG5cbiAgcHVzaE1hbnkoY29uZmlnLnRva2VuTWFwKTtcblxuICByZXR1cm4geyByZW1vdmUsIHJlbW92ZU1hbnksIGhhcywgcHVzaCwgcHVzaE1hbnkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxJc1JlbmRlcmVkID0gKCkgPT4ge1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBhZnRlck5leHRSZW5kZXIoKCkgPT4gaXNSZW5kZXJlZC5zZXQodHJ1ZSkpO1xuXG4gIHJldHVybiBpc1JlbmRlcmVkLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxDbGFzc2VzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBjbGFzc01hcDogVCkgPT4ge1xuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKGVsLCB7XG4gICAgdG9rZW5NYXA6IGNsYXNzTWFwLFxuICAgIGNsZWFudXBGbjogKGVsLCB0b2tlbnMpID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoLi4udG9rZW5zKSxcbiAgICB1cGRhdGVGbjogKGVsLCB0b2tlbnMsIGNvbmRpdGlvbikgPT4ge1xuICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSguLi50b2tlbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCguLi50b2tlbnMpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RDbGFzc2VzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihjbGFzc01hcDogVCkgPT5cbiAgc2lnbmFsQ2xhc3NlcyhpbmplY3QoRWxlbWVudFJlZiksIGNsYXNzTWFwKTtcblxuY29uc3QgQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMgPSBbJ2Rpc2FibGVkJywgJ3JlYWRvbmx5JywgJ3JlcXVpcmVkJywgJ2NoZWNrZWQnLCAnc2VsZWN0ZWQnLCAnaGlkZGVuJywgJ2luZXJ0J107XG5cbmV4cG9ydCBjb25zdCBzaWduYWxBdHRyaWJ1dGVzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihcbiAgZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSxcbiAgYXR0cmlidXRlTWFwOiBULFxuKSA9PiB7XG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoZWwsIHtcbiAgICB0b2tlbk1hcDogYXR0cmlidXRlTWFwLFxuICAgIGNsZWFudXBGbjogKGVsLCB0b2tlbnMpID0+IHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gZWwucmVtb3ZlQXR0cmlidXRlKHRva2VuKSksXG4gICAgdXBkYXRlRm46IChlbCwgdG9rZW5zLCBjb25kaXRpb24pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICAgIGlmIChBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUy5pbmNsdWRlcyh0b2tlbikpIHtcbiAgICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUodG9rZW4sICcnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKHRva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKHRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUodG9rZW4sIGAke2NvbmRpdGlvbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RBdHRyaWJ1dGVzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihhdHRyaWJ1dGVNYXA6IFQpID0+XG4gIHNpZ25hbEF0dHJpYnV0ZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBhdHRyaWJ1dGVNYXApO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsU3R5bGVzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBzdHlsZU1hcDogVCkgPT4ge1xuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKGVsLCB7XG4gICAgdG9rZW5NYXA6IHN0eWxlTWFwLFxuICAgIGNsZWFudXBGbjogKGVsLCB0b2tlbnMpID0+IHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkodG9rZW4pKSxcbiAgICB1cGRhdGVGbjogKGVsLCB0b2tlbnMsIGNvbmRpdGlvbikgPT4ge1xuICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gbnVsbCB8fCBjb25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KHRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSh0b2tlbiwgYCR7Y29uZGl0aW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdFN0eWxlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oc3R5bGVNYXA6IFQpID0+XG4gIHNpZ25hbFN0eWxlcyhpbmplY3QoRWxlbWVudFJlZiksIHN0eWxlTWFwKTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpY2FsU2l6ZSB7XG4gIGlubGluZVNpemU6IG51bWJlcjtcbiAgYmxvY2tTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudERpbWVuc2lvbnMge1xuICByZWN0OiBET01SZWN0UmVhZE9ubHkgfCBudWxsO1xuICBib3JkZXJCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG4gIGNvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG4gIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IExvZ2ljYWxTaXplIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUpID0+IHtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgY29uc3QgaW5pdGlhbFZhbHVlID0gKCkgPT4gKHtcbiAgICByZWN0OiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA/PyBudWxsLFxuICAgIGJvcmRlckJveFNpemU6IG51bGwsXG4gICAgY29udGVudEJveFNpemU6IG51bGwsXG4gICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogbnVsbCxcbiAgfSk7XG5cbiAgY29uc3QgZWxlbWVudERpbWVuc2lvbnNTaWduYWwgPSBzaWduYWw8RWxlbWVudERpbWVuc2lvbnM+KGluaXRpYWxWYWx1ZSgpKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGNvbnN0IGRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBlbnRyeS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGJvcmRlckJveFNpemUgPSBlbnRyeS5ib3JkZXJCb3hTaXplPy5bMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGNvbnRlbnRCb3hTaXplID0gZW50cnkuY29udGVudEJveFNpemU/LlswXSA/PyBudWxsO1xuXG4gICAgICB6b25lLnJ1bigoKSA9PlxuICAgICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoe1xuICAgICAgICAgIHJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGJvcmRlckJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBib3JkZXJCb3hTaXplLmlubGluZVNpemUsIGJsb2NrU2l6ZTogYm9yZGVyQm94U2l6ZS5ibG9ja1NpemUgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBjb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGNvbnRlbnRCb3hTaXplLmlubGluZVNpemUsIGJsb2NrU2l6ZTogY29udGVudEJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAgIGVsZW1lbnREaW1lbnNpb25zU2lnbmFsLnNldChpbml0aWFsVmFsdWUoKSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wdXRlZERpc3BsYXkgPSBnZXRDb21wdXRlZFN0eWxlKGVscy5jdXJyZW50RWxlbWVudCkuZGlzcGxheTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy0nKTtcblxuICAgICAgICBpZiAoY29tcHV0ZWREaXNwbGF5ID09PSAnaW5saW5lJyAmJiBpc0Rldk1vZGUoKSAmJiBjdXJyZW50RWxJc0FuZ3VsYXJDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEVsZW1lbnQgPCR7ZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PiBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCBhbmQgaGFzIGEgZGlzcGxheSBvZiAnaW5saW5lJy4gSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBiZSBvYnNlcnZlZCBmb3IgZGltZW5zaW9ucy4gUGxlYXNlIGNoYW5nZSBpdCB0byAnYmxvY2snIG9yIHNvbWV0aGluZyBlbHNlLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnREaW1lbnNpb25zID0gKCkgPT4gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoaW5qZWN0KEVsZW1lbnRSZWYpKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwgPSBzaWduYWw8TXV0YXRpb25SZWNvcmQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlKSA9PiB7XG4gICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGVudHJ5ID0gZVswXTtcblxuICAgIGlmIChlbnRyeSkge1xuICAgICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQoZW50cnkpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50TXV0YXRpb25zU2lnbmFsLnNldChudWxsKTtcblxuICAgICAgaWYgKGVscy5wcmV2aW91c0VsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxzLmN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50TXV0YXRpb25zU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudE11dGF0aW9ucyA9IChvcHRpb25zPzogTXV0YXRpb25PYnNlcnZlckluaXQpID0+XG4gIHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IHR5cGUgU2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlT3B0aW9ucyA9IHtcbiAgLyoqIFRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiB0byBzY3JvbGwgdG8uIE9uY2UgYSB0cnV0aHkgdmFsdWUgZ2V0J3MgZW1pdHRlZCwgYWxsIGZ1cnRoZXIgdmFsdWVzIHdpbGwgYmUgaWdub3JlZC4gKi9cbiAgaW5pdGlhbFNjcm9sbFBvc2l0aW9uPzogU2lnbmFsPHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGw+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogU2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlT3B0aW9ucykgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zID0gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoZWxlbWVudHMpO1xuICBjb25zdCBlbGVtZW50TXV0YXRpb25zID0gc2lnbmFsRWxlbWVudE11dGF0aW9ucyhlbGVtZW50cywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgY29uc3QgaW5pdGlhbFNjcm9sbFBvc2l0aW9uID0gb3B0aW9ucz8uaW5pdGlhbFNjcm9sbFBvc2l0aW9uO1xuXG4gIGlmIChpbml0aWFsU2Nyb2xsUG9zaXRpb24pIHtcbiAgICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBpbml0aWFsU2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gJiYgZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi54O1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFBvc2l0aW9uLnk7XG4gICAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50O1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBlbGVtZW50RGltZW5zaW9ucygpO1xuXG4gICAgY29uc3Qgbm90U2Nyb2xsYWJsZSA9ICgpID0+ICh7XG4gICAgICBjYW5TY3JvbGw6IGZhbHNlLFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5OiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbFZlcnRpY2FsbHk6IGZhbHNlLFxuICAgICAgc2Nyb2xsV2lkdGg6IGVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IG51bGwsXG4gICAgICBzY3JvbGxIZWlnaHQ6IGVsZW1lbnQ/LnNjcm9sbEhlaWdodCA/PyBudWxsLFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgLy8gQ2hhbmdlcyB0byB0aGUgRE9NIGNhbiBhZmZlY3QgdGhlIHNjcm9sbCBzdGF0ZSBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIWRpbWVuc2lvbnMucmVjdCB8fCAhaXNSZW5kZXJlZCgpKSByZXR1cm4gbm90U2Nyb2xsYWJsZSgpO1xuXG4gICAgY29uc3QgeyBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0IH0gPSBlbGVtZW50O1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZGltZW5zaW9ucy5yZWN0O1xuXG4gICAgY29uc3QgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID0gc2Nyb2xsV2lkdGggPiB3aWR0aDtcbiAgICBjb25zdCBjYW5TY3JvbGxWZXJ0aWNhbGx5ID0gc2Nyb2xsSGVpZ2h0ID4gaGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblNjcm9sbDogY2FuU2Nyb2xsSG9yaXpvbnRhbGx5IHx8IGNhblNjcm9sbFZlcnRpY2FsbHksXG4gICAgICBjYW5TY3JvbGxIb3Jpem9udGFsbHksXG4gICAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICBlbGVtZW50RGltZW5zaW9uczogZGltZW5zaW9ucyxcbiAgICB9O1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudFNjcm9sbFN0YXRlID0gKCkgPT4gc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCB0eXBlIFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zID0gT21pdDxJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQsICdyb290Jz4gJiB7XG4gIHJvb3Q/OiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGU7XG4gIGVuYWJsZWQ/OiBTaWduYWw8dW5rbm93bj47XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbiA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMpID0+IHtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCByb290ID0gb3B0aW9ucz8ucm9vdCA/IGJ1aWxkRWxlbWVudFNpZ25hbChvcHRpb25zPy5yb290KSA6IGRvY3VtZW50RWxlbWVudFNpZ25hbCgpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGlzRW5hYmxlZCA9IG9wdGlvbnM/LmVuYWJsZWQgPz8gc2lnbmFsKHRydWUpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdPihbXSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsPihudWxsKTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsID0gcm9vdCgpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4gb2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpKTtcblxuICAgICAgY29uc3QgbmV3T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgICAgICAgIGxldCBjdXJyZW50VmFsdWVzID0gdW50cmFja2VkKCgpID0+IFsuLi5lbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsKCldKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdFbnRyeUluZGV4ID0gY3VycmVudFZhbHVlcy5maW5kSW5kZXgoKHYpID0+IHYudGFyZ2V0ID09PSBlbnRyeS50YXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBjdXJyZW50VmFsdWVzID0gW1xuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRWYWx1ZXMuc2xpY2UoMCwgZXhpc3RpbmdFbnRyeUluZGV4KSxcbiAgICAgICAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKGV4aXN0aW5nRW50cnlJbmRleCArIDEpLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IFsuLi5jdXJyZW50VmFsdWVzLCBlbnRyeV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQoY3VycmVudFZhbHVlcykpO1xuICAgICAgICB9LFxuICAgICAgICB7IC4uLm9wdGlvbnMsIHJvb3Q6IHJvb3RFbCB9LFxuICAgICAgKTtcblxuICAgICAgb2JzZXJ2ZXIuc2V0KG5ld09ic2VydmVyKTtcbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IG9icyA9IG9ic2VydmVyKCk7XG4gICAgICBjb25zdCBlbmFibGVkID0gaXNFbmFibGVkKCk7XG5cbiAgICAgIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KFtdKTtcblxuICAgICAgaWYgKGVscy5wcmV2aW91c0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBvYnM/LmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudHMubGVuZ3RoICYmICEhZW5hYmxlZCkge1xuICAgICAgICBjb25zdCByb290RWwgPSB1bnRyYWNrZWQoKCkgPT4gcm9vdCgpLmN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgY29uc3Qgcm9vdEJvdW5kcyA9IHJvb3RFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgLy8gY2hlY2sgc3luYyBmb3IgaW50ZXJzZWN0aW9ucyBzaW5jZSB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVyIGFzeW5jIGFuZCB3ZSBwcm9iYWJseSB3YW50IHRvIGtub3cgdGhlIGluaXRpYWwgc3RhdGVcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVscy5jdXJyZW50RWxlbWVudHNcbiAgICAgICAgICAubWFwKChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmlzaWJpbGl0eSA9IGlzRWxlbWVudFZpc2libGUoe1xuICAgICAgICAgICAgICBjb250YWluZXI6IHJvb3RFbCxcbiAgICAgICAgICAgICAgZWxlbWVudDogZWwsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCF2aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHZpc2liaWxpdHkgZGF0YSBmb3VuZCBmb3IgZWxlbWVudC4nLCB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWwsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiByb290RWwsXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmxpbmVJbnRlcnNlY3Rpb25SYXRpbyA9IHZpc2liaWxpdHkuaW5saW5lSW50ZXJzZWN0aW9uIC8gMTAwO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJbnRlcnNlY3Rpb25SYXRpbyA9IHZpc2liaWxpdHkuYmxvY2tJbnRlcnNlY3Rpb24gLyAxMDA7XG4gICAgICAgICAgICBjb25zdCBpc0ludGVyc2VjdGluZyA9IGlubGluZUludGVyc2VjdGlvblJhdGlvID4gMCAmJiBibG9ja0ludGVyc2VjdGlvblJhdGlvID4gMDtcbiAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblJhdGlvID0gTWF0aC5taW4oaW5saW5lSW50ZXJzZWN0aW9uUmF0aW8sIGJsb2NrSW50ZXJzZWN0aW9uUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgZWxCb3VuZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uRW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgPSB7XG4gICAgICAgICAgICAgIGJvdW5kaW5nQ2xpZW50UmVjdDogZWxCb3VuZHMsXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvblJhdGlvLFxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25SZWN0OiBlbEJvdW5kcyxcbiAgICAgICAgICAgICAgaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgICAgICAgIHJvb3RCb3VuZHM6IHJvb3RCb3VuZHMgPz8gbnVsbCxcbiAgICAgICAgICAgICAgdGFyZ2V0OiBlbCxcbiAgICAgICAgICAgICAgdGltZTogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uRW50cnk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKChlKTogZSBpcyBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5ID0+IGUgIT09IG51bGwpO1xuXG4gICAgICAgIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KGVudHJpZXMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxzLmN1cnJlbnRFbGVtZW50cykge1xuICAgICAgICAgIG9icz8ub2JzZXJ2ZShlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlcigpPy5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50SW50ZXJzZWN0aW9uID0gKG9wdGlvbnM/OiBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucykgPT5cbiAgc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbihpbmplY3QoRWxlbWVudFJlZiksIG9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsRWxlbWVudENoaWxkcmVuID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuICBjb25zdCBlbGVtZW50TXV0YXRpb25zID0gc2lnbmFsRWxlbWVudE11dGF0aW9ucyhlbGVtZW50cywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcblxuICAgIC8vIFdlIGFyZSBub3QgaW50ZXJlc3RlZCB3aGF0IHRoZSBtdXRhdGlvbiBpcywganVzdCB0aGF0IHRoZXJlIGlzIG9uZS5cbiAgICAvLyBDaGFuZ2VzIHRvIHRoZSBET00gbWF5IGFmZmVjdCB0aGUgY2hpbGRyZW4gb2YgdGhlIGVsZW1lbnQuXG4gICAgZWxlbWVudE11dGF0aW9ucygpO1xuXG4gICAgaWYgKCFlbHMuY3VycmVudEVsZW1lbnQpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxzLmN1cnJlbnRFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGVscy5jdXJyZW50RWxlbWVudC5jaGlsZHJlbltpbmRleF07XG5cbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXZpb3VzU2lnbmFsVmFsdWUgPSA8VD4oc2lnbmFsOiBTaWduYWw8VD4pID0+IHtcbiAgY29uc3Qgb2JzID0gdG9PYnNlcnZhYmxlKHNpZ25hbCkucGlwZShcbiAgICBwYWlyd2lzZSgpLFxuICAgIG1hcCgoW3ByZXZdKSA9PiBwcmV2KSxcbiAgKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzeW5jU2lnbmFsID0gPFQ+KGZyb206IFNpZ25hbDxUPiwgdG86IFdyaXRhYmxlU2lnbmFsPFQ+KSA9PiB7XG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZm9ybVZhbCA9IGZyb20oKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0by5zZXQoZm9ybVZhbCk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDMwMFxuICAgKi9cbiAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVib3VuY2VGaXJzdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBjb250cm9sVmFsdWVTaWduYWwgPSA8VCBleHRlbmRzIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIHwgRm9ybUFycmF5PihcbiAgY29udHJvbDogVCxcbiAgb3B0aW9ucz86IENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3QgdmNzT2JzID0gb3B0aW9ucz8uZGVib3VuY2VUaW1lXG4gICAgPyBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZShvcHRpb25zPy5kZWJvdW5jZVRpbWUgPz8gMzAwKSlcbiAgICA6IGNvbnRyb2wudmFsdWVDaGFuZ2VzO1xuXG4gIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxSZXR1cm5UeXBlPFRbJ2dldFJhd1ZhbHVlJ10+PiA9IG9wdGlvbnM/LmRlYm91bmNlRmlyc3RcbiAgICA/IG1lcmdlKG9mKGNvbnRyb2wudmFsdWUpLCB2Y3NPYnMpXG4gICAgOiB2Y3NPYnMucGlwZShzdGFydFdpdGgoY29udHJvbC5nZXRSYXdWYWx1ZSgpKSk7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBlcXVhbChhLCBiKSkpLCB7XG4gICAgcmVxdWlyZVN5bmM6IHRydWUsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUaGUgZmlyc3QgaXRlbSBpbiB0aGUgcGFpciBpcyB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHRoZSBzZWNvbmQgaXRlbSBpcyB0aGUgY3VycmVudCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbFdpdGhQcmV2aW91cyA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAgfCBGb3JtQXJyYXk+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoY29udHJvbFZhbHVlU2lnbmFsKGNvbnRyb2wsIG9wdGlvbnMpKS5waXBlKFxuICAgIHBhaXJ3aXNlKCksXG4gICAgc3RhcnRXaXRoKFtudWxsLCBjb250cm9sLmdldFJhd1ZhbHVlKCldKSxcbiAgKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGNvbnRyb2xWYWx1ZVNpZ25hbGAgaW5zdGVhZCB3aXRoIGBkZWJvdW5jZVRpbWVgIG9wdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDMwMFxuICAgKi9cbiAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgc2V0IHRvIGAzMDBgIGFuZCBgZGVib3VuY2VGaXJzdGAgc2V0IHRvIGB0cnVlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbCA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2w+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogRGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4gY29udHJvbFZhbHVlU2lnbmFsKGNvbnRyb2wsIG9wdGlvbnMgPz8geyBkZWJvdW5jZVRpbWU6IDMwMCwgZGVib3VuY2VGaXJzdDogdHJ1ZSB9KTtcblxuZXhwb3J0IHR5cGUgSW5qZWN0VXRpbENvbmZpZyA9IHtcbiAgLyoqIFRoZSBpbmplY3RvciB0byB1c2UgZm9yIHRoZSBpbmplY3Rpb24uIE11c3QgYmUgcHJvdmlkZWQgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZnJvbSB3aXRoaW4gYSBpbmplY3Rpb24gY29udGV4dC4gKi9cbiAgaW5qZWN0b3I/OiBJbmplY3Rvcjtcbn07XG5cbmV4cG9ydCB0eXBlIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8SW4sIE91dD4gPSB7XG4gIC8qKlxuICAgKiBBIHRyYW5zZm9ybSBmdW5jdGlvbiBzaW1pbGFyIHRvIHRoZSBgdHJhbnNmb3JtYCBmdW5jdGlvbiBpbiBBbmd1bGFyIGlucHV0IGJpbmRpbmdzLlxuICAgKiBDYW4gYmUgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyByZXR1cm5lZC5cbiAgICogRS5nLiB0cmFuc2Zvcm1pbmcgYFwidHJ1ZVwiYCB0byBgdHJ1ZWAgZm9yIGEgYm9vbGVhbiBhdHRyaWJ1dGUuXG4gICAqL1xuICB0cmFuc2Zvcm0/OiAodmFsdWU6IEluKSA9PiBPdXQ7XG59O1xuXG5leHBvcnQgY29uc3QgaW5qZWN0T3JSdW5JbkNvbnRleHQgPSA8VD4oZm46ICgpID0+IFQsIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcpID0+IHtcbiAgaWYgKGNvbmZpZz8uaW5qZWN0b3IpIHtcbiAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGNvbmZpZy5pbmplY3RvciwgZm4pO1xuICB9XG5cbiAgcmV0dXJuIGZuKCk7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtT3JSZXR1cm4gPSA8SW4sIE91dD4oc3JjOiBTaWduYWw8SW4+LCBjb25maWc/OiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPEluLCBPdXQ+KSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVyID0gY29uZmlnPy50cmFuc2Zvcm07XG5cbiAgaWYgKHRyYW5zZm9ybWVyKSB7XG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHRyYW5zZm9ybWVyKHNyYygpKSk7XG4gIH1cblxuICByZXR1cm4gc3JjIGFzIHVua25vd24gYXMgU2lnbmFsPE91dD47XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcm91dGUgZnJhZ21lbnQgKHRoZSBwYXJ0IGFmdGVyIHRoZSAjIGluc2lkZSB0aGUgdXJsIGlmIHByZXNlbnQpICovXG5leHBvcnQgY29uc3QgaW5qZWN0RnJhZ21lbnQgPSA8VCA9IHN0cmluZyB8IG51bGw+KFxuICBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnICYgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxzdHJpbmcgfCBudWxsLCBUPixcbikgPT4ge1xuICByZXR1cm4gaW5qZWN0T3JSdW5JbkNvbnRleHQoKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuICAgIGNvbnN0IHNyYyA9IHRvU2lnbmFsKHJvdXRlclN0YXRlU2VydmljZS5mcmFnbWVudCQsIHsgaW5pdGlhbFZhbHVlOiByb3V0ZXJTdGF0ZVNlcnZpY2UuZnJhZ21lbnQgfSk7XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSBxdWVyeSBwYXJhbWV0ZXJzIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UXVlcnlQYXJhbXMgPSAoY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZykgPT4ge1xuICByZXR1cm4gaW5qZWN0T3JSdW5JbkNvbnRleHQoKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIHRvU2lnbmFsKHJvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtcyQsIHsgaW5pdGlhbFZhbHVlOiByb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMgfSk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHJvdXRlIGRhdGEgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZURhdGEgPSAoY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZykgPT4ge1xuICByZXR1cm4gaW5qZWN0T3JSdW5JbkNvbnRleHQoKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIHRvU2lnbmFsKHJvdXRlclN0YXRlU2VydmljZS5kYXRhJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5kYXRhIH0pO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCB0aGUgY3VycmVudCByb3V0ZSB0aXRsZSBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFJvdXRlVGl0bGUgPSA8VCA9IHN0cmluZyB8IG51bGw+KFxuICBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnICYgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxzdHJpbmcgfCBudWxsLCBUPixcbikgPT4ge1xuICByZXR1cm4gaW5qZWN0T3JSdW5JbkNvbnRleHQoKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuICAgIGNvbnN0IHNyYyA9IHRvU2lnbmFsKHJvdXRlclN0YXRlU2VydmljZS50aXRsZSQsIHsgaW5pdGlhbFZhbHVlOiByb3V0ZXJTdGF0ZVNlcnZpY2UudGl0bGUgfSk7XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSBwYXRoIHBhcmFtZXRlcnMgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RQYXRoUGFyYW1zID0gKGNvbmZpZz86IEluamVjdFV0aWxDb25maWcpID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcblxuICAgIHJldHVybiB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UucGF0aFBhcmFtcyQsIHsgaW5pdGlhbFZhbHVlOiByb3V0ZXJTdGF0ZVNlcnZpY2UucGF0aFBhcmFtcyB9KTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzcGVjaWZpYyBxdWVyeSBwYXJhbWV0ZXIgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RRdWVyeVBhcmFtID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gaW5qZWN0UXVlcnlQYXJhbXMoY29uZmlnKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gcXVlcnlQYXJhbXMoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhIHNwZWNpZmljIHJvdXRlIGRhdGEgaXRlbSBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFJvdXRlRGF0YUl0ZW0gPSA8VCA9IHVua25vd24+KFxuICBrZXk6IHN0cmluZyxcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8dW5rbm93biwgVD4sXG4pID0+IHtcbiAgY29uc3QgZGF0YSA9IGluamVjdFJvdXRlRGF0YShjb25maWcpO1xuICBjb25zdCBzcmMgPSBjb21wdXRlZCgoKSA9PiBkYXRhKClba2V5XSA/PyBudWxsKSBhcyBTaWduYWw8VD47XG5cbiAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzcGVjaWZpYyBwYXRoIHBhcmFtZXRlciBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbSA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGtleTogc3RyaW5nLFxuICBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnICYgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxzdHJpbmcgfCBudWxsLCBUPixcbikgPT4ge1xuICBjb25zdCBwYXRoUGFyYW1zID0gaW5qZWN0UGF0aFBhcmFtcyhjb25maWcpO1xuICBjb25zdCBzcmMgPSBjb21wdXRlZCgoKSA9PiBwYXRoUGFyYW1zKClba2V5XSA/PyBudWxsKSBhcyBTaWduYWw8c3RyaW5nIHwgbnVsbD47XG5cbiAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJc1JlbmRlcmVkU2lnbmFsID0gKCkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICBpZiAoIXZhbHVlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdSZW5kZXIgc2lnbmFsIHdhcyBub3Qgc2V0IHRvIHRydWUuIFRoaXMgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE1ha2Ugc3VyZSB0byAuYmluZCgpIHRoZSByZW5kZXIgc2lnbmFsIGF0IHRoZSBlbmQgb2YgdGhlIGNvbnN0cnVjdG9yLicsXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogdmFsdWUsXG4gICAgYmluZDogKCkgPT4gZWZmZWN0KCgpID0+IHZhbHVlLnNldCh0cnVlKSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDYW5BbmltYXRlU2lnbmFsID0gKCkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICB2YWx1ZS5zZXQodHJ1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHZhbHVlLFxuICB9O1xufTtcbiJdfQ==
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsbUJBQW1CLEVBR25CLGVBQWUsRUFDZixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBNEJ0RCxTQUFTLGVBQWUsQ0FBQyxFQUFXO0lBQ2xDLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakIsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDakIsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxnQkFB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QUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQ1gsOElBQThJLENBQy9JLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsS0FBSyxFQUFFLEtBQUs7UUFDWixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUN2RSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxFQUFFO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSztLQUNiLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEVmZmVjdFJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG4gIGlzU2lnbmFsLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIG1lcmdlLCBvZiwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBuZXh0RnJhbWUgfSBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5pbXBvcnQgeyBlcXVhbCB9IGZyb20gJy4vZXF1YWwudXRpbCc7XG5pbXBvcnQgeyBpc0VsZW1lbnRWaXNpYmxlIH0gZnJvbSAnLi9zY3JvbGxhYmxlLnV0aWxzJztcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgQXJyYXk8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IE9ic2VydmFibGU8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBTaWduYWw8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBFbGVtZW50U2lnbmFsO1xuXG50eXBlIEVsZW1lbnRTaWduYWwgPSBTaWduYWw8e1xuICAvKiogQGRlcHJlY2F0ZWQgQWx3YXlzIHVzZSBjdXJyZW50RWxlbWVudHMgICovXG4gIGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqIEBkZXByZWNhdGVkIEFsd2F5cyB1c2UgcHJldmlvdXNFbGVtZW50cyAgKi9cbiAgcHJldmlvdXNFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIGN1cnJlbnRFbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbiAgcHJldmlvdXNFbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbn0+O1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTaWduYWwoZWw6IHVua25vd24pOiBlbCBpcyBFbGVtZW50U2lnbmFsIHtcbiAgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIGNvbnN0IHZhbCA9IGVsKCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiAnY3VycmVudEVsZW1lbnQnIGluIHZhbCAmJiAncHJldmlvdXNFbGVtZW50JyBpbiB2YWw7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IGRvY3VtZW50RWxlbWVudFNpZ25hbCA9ICgpOiBFbGVtZW50U2lnbmFsID0+XG4gIHNpZ25hbCh7XG4gICAgY3VycmVudEVsZW1lbnQ6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBwcmV2aW91c0VsZW1lbnQ6IG51bGwsXG4gICAgY3VycmVudEVsZW1lbnRzOiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSxcbiAgICBwcmV2aW91c0VsZW1lbnRzOiBbXSxcbiAgfSk7XG5cbmNvbnN0IGJ1aWxkRWxlbWVudFNpZ25hbCA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEVsZW1lbnRTaWduYWwgPT4ge1xuICBpZiAoZWwgPT09IG51bGwgfHwgZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzaWduYWwoeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBjdXJyZW50RWxlbWVudHM6IFtdLCBwcmV2aW91c0VsZW1lbnRzOiBbXSB9KTtcbiAgfVxuXG4gIGlmIChpc0VsZW1lbnRTaWduYWwoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgbGV0IG1FbFNpZ25hbDogU2lnbmFsPEhUTUxFbGVtZW50W10gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHN3aXRjaEVsZW1lbnQgPSAoKSA9PlxuICAgIHN3aXRjaE1hcCgoZWxPclJlZjogU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSkgPT4ge1xuICAgICAgaWYgKGVsT3JSZWYgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICAgICAgcmV0dXJuIGVsT3JSZWYuY2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChlbE9yUmVmKSxcbiAgICAgICAgICBtYXAoKCkgPT4gZWxPclJlZi50b0FycmF5KCkubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWxPclJlZikpIHtcbiAgICAgICAgcmV0dXJuIG9mKGVsT3JSZWYubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2VyY2VkRWwgPSBjb2VyY2VFbGVtZW50KGVsT3JSZWYpO1xuICAgICAgICByZXR1cm4gb2YoY29lcmNlZEVsID8gW2NvZXJjZWRFbF0gOiBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBpZiAoZWwgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgbUVsU2lnbmFsID0gdG9TaWduYWwoZWwucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChpc1NpZ25hbChlbCkpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbCh0b09ic2VydmFibGUoZWwpLnBpcGUoc3dpdGNoRWxlbWVudCgpKSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChcbiAgICAgIGVsLmNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGVsKSxcbiAgICAgICAgbWFwKCgpID0+IGVsLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICksXG4gICAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCB9LFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbUVsU2lnbmFsID0gc2lnbmFsKFtjb2VyY2VFbGVtZW50KGVsKV0pO1xuICB9XG5cbiAgcmV0dXJuIHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZShtRWxTaWduYWwpLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbcHJldmlvdXNFbGVtZW50cywgY3VycmVudEVsZW1lbnRzXSkgPT4gKHtcbiAgICAgICAgcHJldmlvdXNFbGVtZW50czogcHJldmlvdXNFbGVtZW50cyA/PyBbXSxcbiAgICAgICAgY3VycmVudEVsZW1lbnRzOiBjdXJyZW50RWxlbWVudHMgPz8gW10sXG4gICAgICAgIGN1cnJlbnRFbGVtZW50OiBjdXJyZW50RWxlbWVudHM/LlswXSA/PyBudWxsLFxuICAgICAgICBwcmV2aW91c0VsZW1lbnQ6IHByZXZpb3VzRWxlbWVudHM/LlswXSA/PyBudWxsLFxuICAgICAgfSkpLFxuICAgICksXG4gICAgeyBpbml0aWFsVmFsdWU6IHsgY3VycmVudEVsZW1lbnQ6IG51bGwsIHByZXZpb3VzRWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50czogW10sIGN1cnJlbnRFbGVtZW50czogW10gfSB9LFxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFNpZ25hbEVmZmVjdHNDb25maWc8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+IHtcbiAgLyoqIFRoZSB0b2tlbnMgdG8gYXBwbHkgYW5kIHRoZWlyIHNpZ25hbCB2YWx1ZSAgKi9cbiAgdG9rZW5NYXA6IFQ7XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGZvciBlbGVtZW50cyB0aGF0IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBzaWduYWwgZWZmZWN0cyAqL1xuICBjbGVhbnVwRm46IChlbDogSFRNTEVsZW1lbnQsIHRva2Vuczogc3RyaW5nW10pID0+IHZvaWQ7XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIGZvciBlbGVtZW50cyB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlIHNpZ25hbCBlZmZlY3RzIG9yIHdoZW4gdGhlaXIgc2lnbmFsIHZhbHVlIGNoYW5nZXMgKi9cbiAgdXBkYXRlRm46IChlbDogSFRNTEVsZW1lbnQsIHRva2Vuczogc3RyaW5nW10sIGNvbmRpdGlvblJlc3VsdDogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2lnbmFsRWZmZWN0cyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oXG4gIGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsXG4gIGNvbmZpZzogQnVpbGRTaWduYWxFZmZlY3RzQ29uZmlnPFQ+LFxuKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50RWxlbWVudHMsIHByZXZpb3VzRWxlbWVudHMgfSA9IGVsZW1lbnRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IHByZXZpb3VzRWwgb2YgcHJldmlvdXNFbGVtZW50cykge1xuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50cy5pbmNsdWRlcyhwcmV2aW91c0VsKSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHRva2VucyA9IE9iamVjdC5rZXlzKGNvbmZpZy50b2tlbk1hcClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkuc3BsaXQoJyAnKSlcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgaWYgKCF0b2tlbnMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uZmlnLmNsZWFudXBGbihwcmV2aW91c0VsLCB0b2tlbnMpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY3VycmVudEVsIG9mIGN1cnJlbnRFbGVtZW50cykge1xuICAgICAgaWYgKHByZXZpb3VzRWxlbWVudHMuaW5jbHVkZXMoY3VycmVudEVsKSkgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3QgW3Rva2VucywgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudG9rZW5NYXApKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICAgIGNvbmZpZy51cGRhdGVGbihjdXJyZW50RWwsIHRva2VuQXJyYXksIGNvbmRpdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBlZmZlY3RzOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2Vuczogc3RyaW5nKSA9PiB0b2tlbnMgaW4gZWZmZWN0cztcblxuICBjb25zdCBwdXNoID0gKHRva2Vuczogc3RyaW5nLCBzaWduYWw6IFNpZ25hbDx1bmtub3duPikgPT4ge1xuICAgIGlmIChoYXModG9rZW5zKSkgcmV0dXJuO1xuXG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3RzW3Rva2Vuc10gPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRFbGVtZW50cyB9ID0gdW50cmFja2VkKCgpID0+IGVsZW1lbnRzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uZmlnLnVwZGF0ZUZuKGVsLCB0b2tlbkFycmF5LCBzaWduYWwoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHB1c2hNYW55ID0gKG1hcDogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuICAgIGZvciAoY29uc3QgW3Rva2Vucywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2Vucywgc2lnbmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlID0gKHRva2Vuczogc3RyaW5nKSA9PiB7XG4gICAgZWZmZWN0c1t0b2tlbnNdPy5kZXN0cm95KCk7XG5cbiAgICBkZWxldGUgZWZmZWN0c1t0b2tlbnNdO1xuXG4gICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50cykge1xuICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgaWYgKCF0b2tlbkFycmF5Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbmZpZy5jbGVhbnVwRm4oZWwsIHRva2VuQXJyYXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmVNYW55ID0gKHRva2Vuczogc3RyaW5nW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgcmVtb3ZlKHRva2VuKTtcbiAgICB9XG4gIH07XG5cbiAgcHVzaE1hbnkoY29uZmlnLnRva2VuTWFwKTtcblxuICByZXR1cm4geyByZW1vdmUsIHJlbW92ZU1hbnksIGhhcywgcHVzaCwgcHVzaE1hbnkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxJc1JlbmRlcmVkID0gKCkgPT4ge1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBhZnRlck5leHRSZW5kZXIoKCkgPT4gaXNSZW5kZXJlZC5zZXQodHJ1ZSkpO1xuXG4gIHJldHVybiBpc1JlbmRlcmVkLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxDbGFzc2VzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBjbGFzc01hcDogVCkgPT4ge1xuICBjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoZWwsIHtcbiAgICB0b2tlbk1hcDogY2xhc3NNYXAsXG4gICAgY2xlYW51cEZuOiAoZWwsIHRva2VucykgPT4gdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgdG9rZW4pKSxcbiAgICB1cGRhdGVGbjogKGVsLCB0b2tlbnMsIGNvbmRpdGlvbikgPT4ge1xuICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgdG9rZW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gcmVuZGVyZXIuYWRkQ2xhc3MoZWwsIHRva2VuKSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCcsICdoaWRkZW4nLCAnaW5lcnQnXTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBhdHRyaWJ1dGVNYXA6IFQsXG4pID0+IHtcbiAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKGVsLCB7XG4gICAgdG9rZW5NYXA6IGF0dHJpYnV0ZU1hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IGVsLnJlbW92ZUF0dHJpYnV0ZSh0b2tlbikpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBpZiAoQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMuaW5jbHVkZXModG9rZW4pKSB7XG4gICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCB0b2tlbiwgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZWwsIHRva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsLCB0b2tlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCB0b2tlbiwgYCR7Y29uZGl0aW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgcmV0dXJuIGJ1aWxkU2lnbmFsRWZmZWN0cyhlbCwge1xuICAgIHRva2VuTWFwOiBzdHlsZU1hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCB0b2tlbikpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsIHRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgdG9rZW4sIGAke2NvbmRpdGlvbn1gLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naWNhbFNpemUge1xuICBpbmxpbmVTaXplOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREaW1lbnNpb25zIHtcbiAgcmVjdDogRE9NUmVjdFJlYWRPbmx5IHwgbnVsbDtcbiAgYm9yZGVyQm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBjb250ZW50Qm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50RGltZW5zaW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICgpID0+ICh7XG4gICAgcmVjdDogZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbCxcbiAgICBib3JkZXJCb3hTaXplOiBudWxsLFxuICAgIGNvbnRlbnRCb3hTaXplOiBudWxsLFxuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zU2lnbmFsID0gc2lnbmFsPEVsZW1lbnREaW1lbnNpb25zPihpbml0aWFsVmFsdWUoKSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGUpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBlWzBdO1xuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjb25zdCBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplID0gZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBib3JkZXJCb3hTaXplID0gZW50cnkuYm9yZGVyQm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBjb250ZW50Qm94U2l6ZSA9IGVudHJ5LmNvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcblxuICAgICAgem9uZS5ydW4oKCkgPT5cbiAgICAgICAgZWxlbWVudERpbWVuc2lvbnNTaWduYWwuc2V0KHtcbiAgICAgICAgICByZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBib3JkZXJCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogYm9yZGVyQm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGJvcmRlckJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogY29udGVudEJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBjb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGNvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuaW5saW5lU2l6ZSwgYmxvY2tTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoaW5pdGlhbFZhbHVlKCkpO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWREaXNwbGF5ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbHMuY3VycmVudEVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbElzQW5ndWxhckNvbXBvbmVudCA9IGVscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctJyk7XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkRGlzcGxheSA9PT0gJ2lubGluZScgJiYgaXNEZXZNb2RlKCkgJiYgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBFbGVtZW50IDwke2Vscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gaXMgYW4gQW5ndWxhciBjb21wb25lbnQgYW5kIGhhcyBhIGRpc3BsYXkgb2YgJ2lubGluZScuIElubGluZSBlbGVtZW50cyBjYW5ub3QgYmUgb2JzZXJ2ZWQgZm9yIGRpbWVuc2lvbnMuIFBsZWFzZSBjaGFuZ2UgaXQgdG8gJ2Jsb2NrJyBvciBzb21ldGhpbmcgZWxzZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudERpbWVuc2lvbnNTaWduYWwuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50RGltZW5zaW9ucyA9ICgpID0+IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGluamVjdChFbGVtZW50UmVmKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50TXV0YXRpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBNdXRhdGlvbk9ic2VydmVySW5pdCkgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICBjb25zdCBlbGVtZW50TXV0YXRpb25zU2lnbmFsID0gc2lnbmFsPE11dGF0aW9uUmVjb3JkIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHpvbmUucnVuKCgpID0+IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuc2V0KGVudHJ5KSk7XG4gICAgfVxuICB9KTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZWxzID0gZWxlbWVudHMoKTtcblxuICAgICAgZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQobnVsbCk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcblxuICByZXR1cm4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRNdXRhdGlvbnMgPSAob3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PlxuICBzaWduYWxFbGVtZW50TXV0YXRpb25zKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCB0eXBlIFNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZU9wdGlvbnMgPSB7XG4gIC8qKiBUaGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRpb24gdG8gc2Nyb2xsIHRvLiBPbmNlIGEgdHJ1dGh5IHZhbHVlIGdldCdzIGVtaXR0ZWQsIGFsbCBmdXJ0aGVyIHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQuICovXG4gIGluaXRpYWxTY3JvbGxQb3NpdGlvbj86IFNpZ25hbDxTY3JvbGxUb09wdGlvbnMgfCBudWxsPjtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IFNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZU9wdGlvbnMpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCBlbGVtZW50RGltZW5zaW9ucyA9IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zKGVsZW1lbnRzKTtcbiAgY29uc3QgZWxlbWVudE11dGF0aW9ucyA9IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoZWxlbWVudHMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxTY3JvbGxQb3NpdGlvbiA9IG9wdGlvbnM/LmluaXRpYWxTY3JvbGxQb3NpdGlvbjtcblxuICBpZiAoaW5pdGlhbFNjcm9sbFBvc2l0aW9uKSB7XG4gICAgY29uc3QgcmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gaW5pdGlhbFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudDtcblxuICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uICYmIGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uLmxlZnQgIT09IHVuZGVmaW5lZCkgZWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ubGVmdDtcbiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uLnRvcCAhPT0gdW5kZWZpbmVkKSBlbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFBvc2l0aW9uLnRvcDtcbiAgICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ7XG4gICAgY29uc3QgZGltZW5zaW9ucyA9IGVsZW1lbnREaW1lbnNpb25zKCk7XG5cbiAgICBjb25zdCBub3RTY3JvbGxhYmxlID0gKCkgPT4gKHtcbiAgICAgIGNhblNjcm9sbDogZmFsc2UsXG4gICAgICBjYW5TY3JvbGxIb3Jpem9udGFsbHk6IGZhbHNlLFxuICAgICAgY2FuU2Nyb2xsVmVydGljYWxseTogZmFsc2UsXG4gICAgICBzY3JvbGxXaWR0aDogZWxlbWVudD8uc2Nyb2xsV2lkdGggPz8gbnVsbCxcbiAgICAgIHNjcm9sbEhlaWdodDogZWxlbWVudD8uc2Nyb2xsSGVpZ2h0ID8/IG51bGwsXG4gICAgICBlbGVtZW50RGltZW5zaW9uczogZGltZW5zaW9ucyxcbiAgICB9KTtcblxuICAgIC8vIFdlIGFyZSBub3QgaW50ZXJlc3RlZCB3aGF0IHRoZSBtdXRhdGlvbiBpcywganVzdCB0aGF0IHRoZXJlIGlzIG9uZS5cbiAgICAvLyBDaGFuZ2VzIHRvIHRoZSBET00gY2FuIGFmZmVjdCB0aGUgc2Nyb2xsIHN0YXRlIG9mIHRoZSBlbGVtZW50LlxuICAgIGVsZW1lbnRNdXRhdGlvbnMoKTtcblxuICAgIGlmICghZWxlbWVudCB8fCAhZGltZW5zaW9ucy5yZWN0IHx8ICFpc1JlbmRlcmVkKCkpIHJldHVybiBub3RTY3JvbGxhYmxlKCk7XG5cbiAgICBjb25zdCB7IHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQgfSA9IGVsZW1lbnQ7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBkaW1lbnNpb25zLnJlY3Q7XG5cbiAgICBjb25zdCBjYW5TY3JvbGxIb3Jpem9udGFsbHkgPSBzY3JvbGxXaWR0aCA+IHdpZHRoO1xuICAgIGNvbnN0IGNhblNjcm9sbFZlcnRpY2FsbHkgPSBzY3JvbGxIZWlnaHQgPiBoZWlnaHQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2FuU2Nyb2xsOiBjYW5TY3JvbGxIb3Jpem9udGFsbHkgfHwgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgIGNhblNjcm9sbEhvcml6b250YWxseSxcbiAgICAgIGNhblNjcm9sbFZlcnRpY2FsbHksXG4gICAgICBzY3JvbGxXaWR0aCxcbiAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIH07XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50U2Nyb2xsU3RhdGUgPSAoKSA9PiBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUoaW5qZWN0KEVsZW1lbnRSZWYpKTtcblxuZXhwb3J0IHR5cGUgU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMgPSBPbWl0PEludGVyc2VjdGlvbk9ic2VydmVySW5pdCwgJ3Jvb3QnPiAmIHtcbiAgcm9vdD86IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZTtcbiAgZW5hYmxlZD86IFNpZ25hbDx1bmtub3duPjtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucykgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHJvb3QgPSBvcHRpb25zPy5yb290ID8gYnVpbGRFbGVtZW50U2lnbmFsKG9wdGlvbnM/LnJvb3QpIDogZG9jdW1lbnRFbGVtZW50U2lnbmFsKCk7XG4gIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcbiAgY29uc3QgaXNFbmFibGVkID0gb3B0aW9ucz8uZW5hYmxlZCA/PyBzaWduYWwodHJ1ZSk7XG5cbiAgY29uc3QgZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCA9IHNpZ25hbDxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10+KFtdKTtcblxuICBjb25zdCBvYnNlcnZlciA9IHNpZ25hbDxJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGw+KG51bGwpO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCByb290RWwgPSByb290KCkuY3VycmVudEVsZW1lbnQ7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiBvYnNlcnZlcigpPy5kaXNjb25uZWN0KCkpO1xuXG4gICAgICBjb25zdCBuZXdPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZXMgPSB1bnRyYWNrZWQoKCkgPT4gWy4uLmVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwoKV0pO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0VudHJ5SW5kZXggPSBjdXJyZW50VmFsdWVzLmZpbmRJbmRleCgodikgPT4gdi50YXJnZXQgPT09IGVudHJ5LnRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChleGlzdGluZ0VudHJ5SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSBbXG4gICAgICAgICAgICAgICAgLi4uY3VycmVudFZhbHVlcy5zbGljZSgwLCBleGlzdGluZ0VudHJ5SW5kZXgpLFxuICAgICAgICAgICAgICAgIGVudHJ5LFxuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRWYWx1ZXMuc2xpY2UoZXhpc3RpbmdFbnRyeUluZGV4ICsgMSksXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjdXJyZW50VmFsdWVzID0gWy4uLmN1cnJlbnRWYWx1ZXMsIGVudHJ5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLnNldChjdXJyZW50VmFsdWVzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgLi4ub3B0aW9ucywgcm9vdDogcm9vdEVsIH0sXG4gICAgICApO1xuXG4gICAgICBvYnNlcnZlci5zZXQobmV3T2JzZXJ2ZXIpO1xuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuICAgICAgY29uc3Qgb2JzID0gb2JzZXJ2ZXIoKTtcbiAgICAgIGNvbnN0IGVuYWJsZWQgPSBpc0VuYWJsZWQoKTtcblxuICAgICAgZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQoW10pO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIG9icz8uZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxzLmN1cnJlbnRFbGVtZW50cy5sZW5ndGggJiYgISFlbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHJvb3RFbCA9IHVudHJhY2tlZCgoKSA9PiByb290KCkuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBjb25zdCByb290Qm91bmRzID0gcm9vdEVsPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAvLyBjaGVjayBzeW5jIGZvciBpbnRlcnNlY3Rpb25zIHNpbmNlIHRoZSBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgYXN5bmMgYW5kIHdlIHByb2JhYmx5IHdhbnQgdG8ga25vdyB0aGUgaW5pdGlhbCBzdGF0ZVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZWxzLmN1cnJlbnRFbGVtZW50c1xuICAgICAgICAgIC5tYXAoKGVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmlsaXR5ID0gaXNFbGVtZW50VmlzaWJsZSh7XG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogcm9vdEVsLFxuICAgICAgICAgICAgICBlbGVtZW50OiBlbCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gdmlzaWJpbGl0eSBkYXRhIGZvdW5kIGZvciBlbGVtZW50LicsIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbCxcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IHJvb3RFbCxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlubGluZUludGVyc2VjdGlvblJhdGlvID0gdmlzaWJpbGl0eS5pbmxpbmVJbnRlcnNlY3Rpb24gLyAxMDA7XG4gICAgICAgICAgICBjb25zdCBibG9ja0ludGVyc2VjdGlvblJhdGlvID0gdmlzaWJpbGl0eS5ibG9ja0ludGVyc2VjdGlvbiAvIDEwMDtcbiAgICAgICAgICAgIGNvbnN0IGlzSW50ZXJzZWN0aW5nID0gaW5saW5lSW50ZXJzZWN0aW9uUmF0aW8gPiAwICYmIGJsb2NrSW50ZXJzZWN0aW9uUmF0aW8gPiAwO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uUmF0aW8gPSBNYXRoLm1pbihpbmxpbmVJbnRlcnNlY3Rpb25SYXRpbywgYmxvY2tJbnRlcnNlY3Rpb25SYXRpbyk7XG4gICAgICAgICAgICBjb25zdCBlbEJvdW5kcyA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25FbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSA9IHtcbiAgICAgICAgICAgICAgYm91bmRpbmdDbGllbnRSZWN0OiBlbEJvdW5kcyxcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW8sXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvblJlY3Q6IGVsQm91bmRzLFxuICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZyxcbiAgICAgICAgICAgICAgcm9vdEJvdW5kczogcm9vdEJvdW5kcyA/PyBudWxsLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGVsLFxuICAgICAgICAgICAgICB0aW1lOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb25FbnRyeTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgPT4gZSAhPT0gbnVsbCk7XG5cbiAgICAgICAgZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQoZW50cmllcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbHMuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgb2JzPy5vYnNlcnZlKGVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAob3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PlxuICBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKGluamVjdChFbGVtZW50UmVmKSwgb3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50Q2hpbGRyZW4gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSkgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnMgPSBzaWduYWxFbGVtZW50TXV0YXRpb25zKGVsZW1lbnRzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSB9KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBtYXkgYWZmZWN0IHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVscy5jdXJyZW50RWxlbWVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmlvdXNTaWduYWxWYWx1ZSA9IDxUPihzaWduYWw6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoc2lnbmFsKS5waXBlKFxuICAgIHBhaXJ3aXNlKCksXG4gICAgbWFwKChbcHJldl0pID0+IHByZXYpLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN5bmNTaWduYWwgPSA8VD4oZnJvbTogU2lnbmFsPFQ+LCB0bzogV3JpdGFibGVTaWduYWw8VD4pID0+IHtcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsID0gZnJvbSgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRvLnNldChmb3JtVmFsKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJvdW5jZUZpcnN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbCA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAgfCBGb3JtQXJyYXk+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCB2Y3NPYnMgPSBvcHRpb25zPy5kZWJvdW5jZVRpbWVcbiAgICA/IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKG9wdGlvbnM/LmRlYm91bmNlVGltZSA/PyAzMDApKVxuICAgIDogY29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFJldHVyblR5cGU8VFsnZ2V0UmF3VmFsdWUnXT4+ID0gb3B0aW9ucz8uZGVib3VuY2VGaXJzdFxuICAgID8gbWVyZ2Uob2YoY29udHJvbC52YWx1ZSksIHZjc09icylcbiAgICA6IHZjc09icy5waXBlKHN0YXJ0V2l0aChjb250cm9sLmdldFJhd1ZhbHVlKCkpKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSksIHtcbiAgICByZXF1aXJlU3luYzogdHJ1ZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBwYWlyIGlzIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIHRoZSBjdXJyZW50IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsV2l0aFByZXZpb3VzID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucykpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBzdGFydFdpdGgoW251bGwsIGNvbnRyb2wuZ2V0UmF3VmFsdWUoKV0pLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBzZXQgdG8gYDMwMGAgYW5kIGBkZWJvdW5jZUZpcnN0YCBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgY29uc3QgZGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiBjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucyA/PyB7IGRlYm91bmNlVGltZTogMzAwLCBkZWJvdW5jZUZpcnN0OiB0cnVlIH0pO1xuXG5leHBvcnQgdHlwZSBJbmplY3RVdGlsQ29uZmlnID0ge1xuICAvKiogVGhlIGluamVjdG9yIHRvIHVzZSBmb3IgdGhlIGluamVjdGlvbi4gTXVzdCBiZSBwcm92aWRlZCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIHdpdGhpbiBhIGluamVjdGlvbiBjb250ZXh0LiAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufTtcblxuZXhwb3J0IHR5cGUgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxJbiwgT3V0PiA9IHtcbiAgLyoqXG4gICAqIEEgdHJhbnNmb3JtIGZ1bmN0aW9uIHNpbWlsYXIgdG8gdGhlIGB0cmFuc2Zvcm1gIGZ1bmN0aW9uIGluIEFuZ3VsYXIgaW5wdXQgYmluZGluZ3MuXG4gICAqIENhbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgdmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLlxuICAgKiBFLmcuIHRyYW5zZm9ybWluZyBgXCJ0cnVlXCJgIHRvIGB0cnVlYCBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZS5cbiAgICovXG4gIHRyYW5zZm9ybT86ICh2YWx1ZTogSW4pID0+IE91dDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmplY3RPclJ1bkluQ29udGV4dCA9IDxUPihmbjogKCkgPT4gVCwgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZykgPT4ge1xuICBpZiAoY29uZmlnPy5pbmplY3Rvcikge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoY29uZmlnLmluamVjdG9yLCBmbik7XG4gIH1cblxuICByZXR1cm4gZm4oKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1PclJldHVybiA9IDxJbiwgT3V0PihzcmM6IFNpZ25hbDxJbj4sIGNvbmZpZz86IEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8SW4sIE91dD4pID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjb25maWc/LnRyYW5zZm9ybTtcblxuICBpZiAodHJhbnNmb3JtZXIpIHtcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gdHJhbnNmb3JtZXIoc3JjKCkpKTtcbiAgfVxuXG4gIHJldHVybiBzcmMgYXMgdW5rbm93biBhcyBTaWduYWw8T3V0Pjtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyB0aGUgY3VycmVudCByb3V0ZSBmcmFnbWVudCAodGhlIHBhcnQgYWZ0ZXIgdGhlICMgaW5zaWRlIHRoZSB1cmwgaWYgcHJlc2VudCkgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RGcmFnbWVudCA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gICAgY29uc3Qgc3JjID0gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLmZyYWdtZW50JCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5mcmFnbWVudCB9KTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHF1ZXJ5IHBhcmFtZXRlcnMgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RRdWVyeVBhcmFtcyA9IChjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgICByZXR1cm4gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1zJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtcyB9KTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcm91dGUgZGF0YSBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFJvdXRlRGF0YSA9IChjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgICByZXR1cm4gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLmRhdGEkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLmRhdGEgfSk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IHRoZSBjdXJyZW50IHJvdXRlIHRpdGxlIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVUaXRsZSA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gICAgY29uc3Qgc3JjID0gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLnRpdGxlJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS50aXRsZSB9KTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBhdGggcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbXMgPSAoY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZykgPT4ge1xuICByZXR1cm4gaW5qZWN0T3JSdW5JbkNvbnRleHQoKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIHRvU2lnbmFsKHJvdXRlclN0YXRlU2VydmljZS5wYXRoUGFyYW1zJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5wYXRoUGFyYW1zIH0pO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhIHNwZWNpZmljIHF1ZXJ5IHBhcmFtZXRlciBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFF1ZXJ5UGFyYW0gPSA8VCA9IHN0cmluZyB8IG51bGw+KFxuICBrZXk6IHN0cmluZyxcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBpbmplY3RRdWVyeVBhcmFtcyhjb25maWcpO1xuICBjb25zdCBzcmMgPSBjb21wdXRlZCgoKSA9PiBxdWVyeVBhcmFtcygpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPHN0cmluZyB8IG51bGw+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcm91dGUgZGF0YSBpdGVtIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVEYXRhSXRlbSA9IDxUID0gdW5rbm93bj4oXG4gIGtleTogc3RyaW5nLFxuICBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnICYgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzx1bmtub3duLCBUPixcbikgPT4ge1xuICBjb25zdCBkYXRhID0gaW5qZWN0Um91dGVEYXRhKGNvbmZpZyk7XG4gIGNvbnN0IHNyYyA9IGNvbXB1dGVkKCgpID0+IGRhdGEoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxUPjtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhIHNwZWNpZmljIHBhdGggcGFyYW1ldGVyIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UGF0aFBhcmFtID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IHBhdGhQYXJhbXMgPSBpbmplY3RQYXRoUGFyYW1zKGNvbmZpZyk7XG4gIGNvbnN0IHNyYyA9IGNvbXB1dGVkKCgpID0+IHBhdGhQYXJhbXMoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUlzUmVuZGVyZWRTaWduYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc2lnbmFsKGZhbHNlKTtcblxuICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgIGlmICghdmFsdWUoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1JlbmRlciBzaWduYWwgd2FzIG5vdCBzZXQgdG8gdHJ1ZS4gVGhpcyBjYW4gY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4gTWFrZSBzdXJlIHRvIC5iaW5kKCkgdGhlIHJlbmRlciBzaWduYWwgYXQgdGhlIGVuZCBvZiB0aGUgY29uc3RydWN0b3IuJyxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB2YWx1ZSxcbiAgICBiaW5kOiAoKSA9PiBlZmZlY3QoKCkgPT4gdmFsdWUuc2V0KHRydWUpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbkFuaW1hdGVTaWduYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc2lnbmFsKGZhbHNlKTtcblxuICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgIHZhbHVlLnNldCh0cnVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogdmFsdWUsXG4gIH07XG59O1xuIl19
|