appium-xcuitest-driver 4.18.1 → 4.18.3
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 +14 -0
- package/build/lib/commands/web.js +1 -53
- package/build/lib/commands/web.js.map +1 -1
- package/lib/commands/web.js +0 -58
- package/npm-shrinkwrap.json +474 -421
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [4.18.3](https://github.com/appium/appium-xcuitest-driver/compare/v4.18.2...v4.18.3) (2023-02-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* Bump @appium/docutils from 0.1.6 to 0.2.2 ([#1509](https://github.com/appium/appium-xcuitest-driver/issues/1509)) ([5e7c927](https://github.com/appium/appium-xcuitest-driver/commit/5e7c927353e38b096d0e7e82f52163e0e022e6bd))
|
|
7
|
+
|
|
8
|
+
## [4.18.2](https://github.com/appium/appium-xcuitest-driver/compare/v4.18.1...v4.18.2) (2023-02-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* remove unused cookies code ([#1508](https://github.com/appium/appium-xcuitest-driver/issues/1508)) ([1f5e2c4](https://github.com/appium/appium-xcuitest-driver/commit/1f5e2c4ef17b2698a4f8a156fcccac7f3406b659))
|
|
14
|
+
|
|
1
15
|
## [4.18.1](https://github.com/appium/appium-xcuitest-driver/compare/v4.18.0...v4.18.1) (2023-02-23)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -132,27 +132,6 @@ commands.title = async function title() {
|
|
|
132
132
|
}
|
|
133
133
|
return await this.executeAtom('title', [], true);
|
|
134
134
|
};
|
|
135
|
-
commands.getCookies = async function getCookies() {
|
|
136
|
-
if (!this.isWebContext()) {
|
|
137
|
-
throw new _driver.errors.NotImplementedError();
|
|
138
|
-
}
|
|
139
|
-
this.log.debug('Retrieving all cookies');
|
|
140
|
-
let script = 'return document.cookie';
|
|
141
|
-
let jsCookies = await this.executeAtom('execute_script', [script, []]);
|
|
142
|
-
let cookies = [];
|
|
143
|
-
try {
|
|
144
|
-
for (let [name, value] of _lodash.default.toPairs(_cookies.default.createJWPCookie(undefined, jsCookies))) {
|
|
145
|
-
cookies.push({
|
|
146
|
-
name,
|
|
147
|
-
value
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
return cookies;
|
|
151
|
-
} catch (err) {
|
|
152
|
-
this.log.error(err);
|
|
153
|
-
throw new _driver.errors.UnknownError(`Error parsing cookies from result: '${jsCookies}'`);
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
135
|
commands.setCookie = async function setCookie(cookie) {
|
|
157
136
|
if (!this.isWebContext()) {
|
|
158
137
|
throw new _driver.errors.NotImplementedError();
|
|
@@ -171,37 +150,6 @@ commands.setCookie = async function setCookie(cookie) {
|
|
|
171
150
|
let script = `document.cookie = ${JSON.stringify(jsCookie)}`;
|
|
172
151
|
await this.executeAtom('execute_script', [script, []]);
|
|
173
152
|
};
|
|
174
|
-
commands.deleteCookie = async function deleteCookie(cookieName) {
|
|
175
|
-
if (!this.isWebContext()) {
|
|
176
|
-
throw new _driver.errors.NotImplementedError();
|
|
177
|
-
}
|
|
178
|
-
let cookies = await this.getCookies();
|
|
179
|
-
if (_lodash.default.indexOf(_lodash.default.map(cookies, 'name'), cookieName) === -1) {
|
|
180
|
-
this.log.debug(`Cookie '${cookieName}' not found. Ignoring.`);
|
|
181
|
-
return true;
|
|
182
|
-
}
|
|
183
|
-
return await this._deleteCookie(cookieName);
|
|
184
|
-
};
|
|
185
|
-
commands.deleteCookies = async function deleteCookies() {
|
|
186
|
-
if (!this.isWebContext()) {
|
|
187
|
-
throw new _driver.errors.NotImplementedError();
|
|
188
|
-
}
|
|
189
|
-
let cookies = await this.getCookies();
|
|
190
|
-
if (cookies.length) {
|
|
191
|
-
for (let cookie of cookies) {
|
|
192
|
-
await this._deleteCookie(cookie.name);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return true;
|
|
196
|
-
};
|
|
197
|
-
helpers._deleteCookie = async function _deleteCookie(cookieName) {
|
|
198
|
-
this.log.debug(`Deleting cookie '${cookieName}'`);
|
|
199
|
-
let webCookie = _cookies.default.expireCookie(cookieName, {
|
|
200
|
-
path: '/'
|
|
201
|
-
});
|
|
202
|
-
let script = `document.cookie = ${JSON.stringify(webCookie)}`;
|
|
203
|
-
await this.executeAtom('execute_script', [script, []]);
|
|
204
|
-
};
|
|
205
153
|
helpers.cacheWebElement = function cacheWebElement(el) {
|
|
206
154
|
if (!_lodash.default.isPlainObject(el)) {
|
|
207
155
|
return el;
|
|
@@ -609,4 +557,4 @@ commands.mobileUpdateSafariPreferences = async function mobileUpdateSafariPrefer
|
|
|
609
557
|
Object.assign(commands, extensions, helpers);
|
|
610
558
|
var _default = commands;
|
|
611
559
|
exports.default = _default;
|
|
612
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXN5bmNib3giLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibHVlYmlyZCIsIl9kcml2ZXIiLCJfY29va2llcyIsIl9ldmVudHMiLCJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbiAge3c6IDEwODAsIGg6IDIzNDB9LCAvLyAxMyBtaW5pLCAxMiBtaW5pXG4gIHt3OiAxMTcwLCBoOiAyNTMyfSwgLy8gMTQsIDEzLCAxMyBQcm8sIDEyLCAxMiBQcm9cbiAge3c6IDEyODQsIGg6IDI3Nzh9LCAvLyAxNCBQbHVzLCAxMyBQcm8gTWF4LCAxMiBQcm8gTWF4XG4gIHt3OiAxMTc5LCBoOiAyNTU2fSwgLy8gMTQgUHJvXG4gIHt3OiAxMjkwLCBoOiAyNzk2fSwgLy8gMTQgUHJvIE1heFxuXTtcblxuY29uc3QgeyBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiB9ID0gdXRpbDtcblxuY29uc3QgQVRPTV9XQUlUX1RJTUVPVVRfTVMgPSAyICogNjAwMDA7XG5jb25zdCBBVE9NX0lOSVRJQUxfV0FJVF9NUyA9IDEwMDA7XG5cbmNvbnN0IE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UID0gJ2FsZXJ0JztcblxuY29uc3QgVklTSUJMRSA9ICd2aXNpYmxlJztcbmNvbnN0IElOVklTSUJMRSA9ICdpbnZpc2libGUnO1xuY29uc3QgREVURUNUID0gJ2RldGVjdCc7XG5jb25zdCBWSVNJQklMSVRJRVMgPSBbVklTSUJMRSwgSU5WSVNJQkxFLCBERVRFQ1RdO1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgU2FmYXJpJ3MgdGFiIChzZWFyY2ggYmFyKS5cbi8vIFNpbmNlIGlPUyAxNSwgdGhlIGJhciBpcyB0aGUgYm90dG9tIGJ5IGRlZmF1bHQuXG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX1RPUCA9ICd0b3AnO1xuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IFRBQl9CQVJfUE9TU0lUSU9OUyA9IFtUQUJfQkFSX1BPU0lUSU9OX1RPUCwgVEFCX0JBUl9QT1NJVElPTl9CT1RUT01dO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyIChpZCkge1xuICBpZiAoIV8uaXNTdHJpbmcoaWQpICYmICFfLmlzTnVtYmVyKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhpZCkgJiYgXy5pc0VtcHR5KGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc051bWJlcihpZCkgJiYgaXNOYU4oaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb21tYW5kcy5zZXRGcmFtZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEZyYW1lIChmcmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChfLmlzTnVsbChmcmFtZSkpIHtcbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMubG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldENzc1Byb3BlcnR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3NzUHJvcGVydHkgKHByb3BlcnR5TmFtZSwgZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdmFsdWVfb2ZfY3NzX3Byb3BlcnR5JywgW2F0b21zRWxlbWVudCwgcHJvcGVydHlOYW1lXSk7XG59O1xuXG5jb21tYW5kcy5zdWJtaXQgPSBhc3luYyBmdW5jdGlvbiBzdWJtaXQgKGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdzdWJtaXQnLCBbYXRvbXNFbGVtZW50XSk7XG59O1xuXG5jb21tYW5kcy5yZWZyZXNoID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgncmVmcmVzaCcsIFtdKTtcbn07XG5cbmNvbW1hbmRzLmdldFVybCA9IGFzeW5jIGZ1bmN0aW9uIGdldFVybCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoJ3dpbmRvdy5sb2NhdGlvbi5ocmVmJyk7XG59O1xuXG5jb21tYW5kcy50aXRsZSA9IGFzeW5jIGZ1bmN0aW9uIHRpdGxlICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgndGl0bGUnLCBbXSwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5nZXRDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgYWxsIGNvb2tpZXMnKTtcblxuICBsZXQgc2NyaXB0ID0gJ3JldHVybiBkb2N1bWVudC5jb29raWUnO1xuICBsZXQganNDb29raWVzID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xuXG4gIGxldCBjb29raWVzID0gW107XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY29va2llVXRpbHMuY3JlYXRlSldQQ29va2llKHVuZGVmaW5lZCwganNDb29raWVzKSkpIHtcbiAgICAgIGNvb2tpZXMucHVzaCh7bmFtZSwgdmFsdWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb29raWUgJyR7Y29va2llTmFtZX0nIG5vdCBmb3VuZC4gSWdub3JpbmcuYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZU5hbWUpO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxldCBjb29raWVzID0gYXdhaXQgdGhpcy5nZXRDb29raWVzKCk7XG4gIGlmIChjb29raWVzLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGNvb2tpZSBvZiBjb29raWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llLm5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmhlbHBlcnMuX2RlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIF9kZWxldGVDb29raWUgKGNvb2tpZU5hbWUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfSdgKTtcbiAgbGV0IHdlYkNvb2tpZSA9IGNvb2tpZVV0aWxzLmV4cGlyZUNvb2tpZShjb29raWVOYW1lLCB7cGF0aDogJy8nfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50ID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50IChlbCkge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgY29uc3QgY2FjaGVJZCA9IF8uaW5jbHVkZXMoZWxJZCwgJzonKSA/IGVsSWQgOiB1dGlsLnV1aWRWNCgpO1xuICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHRvQ2FjaGVkID0gKHYpID0+IF8uaXNBcnJheSh2KSB8fCBfLmlzUGxhaW5PYmplY3QodilcbiAgICA/IHRoaXMuY2FjaGVXZWJFbGVtZW50cyh2KVxuICAgIDogdjtcblxuICBpZiAoXy5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiByZXNwb25zZS5tYXAodG9DYWNoZWQpO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7Li4ucmVzcG9uc2UsIC4uLih0aGlzLmNhY2hlV2ViRWxlbWVudChyZXNwb25zZSkpfTtcbiAgICByZXR1cm4gXy50b1BhaXJzKHJlc3VsdCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdG9DYWNoZWQodmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlJcGhvbmUpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpSXBob25lO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudCcpO1xuICAgIHRoaXMuX2lzU2FmYXJpSXBob25lID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIHVzZXJhZ2VudC4gQXNzdW1pbmcgaVBob25lYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZSA/PyB0cnVlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpRGV2aWNlU2l6ZSAoKSB7XG4gIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4ge2hlaWdodDogd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoICogd2luZG93LmRldmljZVBpeGVsUmF0aW99Oyc7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQpO1xuICBjb25zdCBbbm9ybUhlaWdodCwgbm9ybVdpZHRoXSA9IGhlaWdodCA+IHdpZHRoID8gW2hlaWdodCwgd2lkdGhdIDogW3dpZHRoLCBoZWlnaHRdO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBub3JtV2lkdGgsXG4gICAgaGVpZ2h0OiBub3JtSGVpZ2h0LFxuICB9O1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlOb3RjaGVkKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaU5vdGNoZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5faXNTYWZhcmlOb3RjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkID8/IGZhbHNlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5LFxuICAgIHNhZmFyaVRhYkJhclBvc2l0aW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzE1LjAnKSAmJiBpc0lwaG9uZVxuICAgICAgPyBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA6IFRBQl9CQVJfUE9TSVRJT05fVE9QLFxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGNvbnN0IHRhYkJhclBvc2l0aW9uID0gXy5sb3dlckNhc2Uoc2FmYXJpVGFiQmFyUG9zaXRpb24pO1xuXG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBpZiAoIVRBQl9CQVJfUE9TU0lUSU9OUy5pbmNsdWRlcyh0YWJCYXJQb3NpdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYCR7c2FmYXJpVGFiQmFyUG9zaXRpb259IGlzIGludmFsaWQgYXMgU2FmYXJpIHRhYiBiYXIgcG9zaXRpb24uIEF2YWlsYWJsZSBwb3NpdGlvbnMgYXJlICR7VEFCX0JBUl9QT1NTSVRJT05TfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGlzTm90Y2hlZCA9IGlzSXBob25lICYmIGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNOb3RjaGVkKCk7XG5cbiAgY29uc3Qgb3JpZW50YXRpb24gPSByZWFsRGltcy5oID4gcmVhbERpbXMudyA/ICdQT1JUUkFJVCcgOiAnTEFORFNDQVBFJztcblxuICBjb25zdCBub3RjaE9mZnNldCA9IGlzTm90Y2hlZFxuICAgID8gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz0nLCAnMTMuMCcpXG4gICAgICA/IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTNcbiAgICAgIDogSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU1xuICAgIDogMDtcblxuICBjb25zdCBpc1Njcm9sbGVkID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA+IDAnKTtcbiAgaWYgKGlzU2Nyb2xsZWQpIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc05vdGNoZWQpIHtcbiAgICAgIHRvcE9mZnNldCAtPSBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlQaG9uZSBpcyBsYW5kc2NhcGUgdGhlbiB0aGVyZSBpcyBubyB0b3AgYmFyXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyAmJiBpc0lwaG9uZSkge1xuICAgICAgdG9wT2Zmc2V0ID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9wT2Zmc2V0ID0gdGFiQmFyUG9zaXRpb24gPT09IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID8gMCA6IElQSE9ORV9UT1BfQkFSX0hFSUdIVDtcbiAgICB0b3BPZmZzZXQgKz0gbm90Y2hPZmZzZXQ7XG4gICAgdGhpcy5sb2cuZGVidWcoYHRhYkJhclBvc2l0aW9uIGFuZCB0b3BPZmZzZXQ6ICR7dGFiQmFyUG9zaXRpb259LCAke3RvcE9mZnNldH1gKTtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWFjaCB0YWIgYmFyIGlzIGEgV2ViVmlld1xuICAgICAgICBjb25zdCBjb250ZXh0c0FuZFZpZXdzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZXh0c0FuZFZpZXdzLmZpbHRlcigoY3R4KSA9PiBjdHguaWQuc3RhcnRzV2l0aCgnV0VCVklFV18nKSk7XG5cbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoYEFkZGl0aW9uYWwgbmF0aXZlIHdlYiB0YXAgb2Zmc2V0IGNvbXB1dGVkOiAke29mZnNldH1gKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRhcFdlYkVsZW1lbnROYXRpdmVseSAoZHJpdmVyLCBhdG9tc0VsZW1lbnQpIHtcbiAgLy8gdHJ5IHRvIGdldCB0aGUgdGV4dCBvZiB0aGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZVxuICAvLyBuYXRpdmUgY29udGV4dFxuICB0cnkge1xuICAgIGxldCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfdGV4dCcsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF9hdHRyaWJ1dGVfdmFsdWUnLCBbYXRvbXNFbGVtZW50LCAndmFsdWUnXSk7XG4gICAgfVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCB0ZXh0LCB0cnVlKTtcbiAgICAgIGlmIChlbHMubGVuZ3RoID09PSAxIHx8IGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZWwgPSBlbHNbMF07XG4gICAgICAgIC8vIHVzZSB0YXAgYmVjYXVzZSBvbiBpT1MgMTEuMiBhbmQgYmVsb3cgYG5hdGl2ZUNsaWNrYCBjcmFzaGVzIFdEQVxuICAgICAgICBjb25zdCByZWN0ID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwpfS9yZWN0YCwgJ0dFVCcpO1xuICAgICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGVsMiA9IGVsc1sxXTtcbiAgICAgICAgICBjb25zdCByZWN0MiA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsMil9L3JlY3RgLCAnR0VUJyk7XG5cbiAgICAgICAgICBpZiAoKHJlY3QueCAhPT0gcmVjdDIueCB8fCByZWN0LnkgIT09IHJlY3QyLnkpIHx8XG4gICAgICAgICAgKHJlY3Qud2lkdGggIT09IHJlY3QyLndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Mi5oZWlnaHQpKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSAyIG5hdGl2ZSBlbGVtZW50cyBhcmUgbm90IHJlZmVycmluZyB0byB0aGUgc2FtZSB3ZWIgZWxlbWVudFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChyZWN0LnggKyByZWN0LndpZHRoIC8gMiksXG4gICAgICAgICAgeTogTWF0aC5yb3VuZChyZWN0LnkgKyByZWN0LmhlaWdodCAvIDIpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkcml2ZXIuY2xpY2tDb29yZHMoY29vcmRzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBhbnkgZmFpbHVyZSBzaG91bGQgZmFsbCB0aHJvdWdoIGFuZCB0cmlnZ2VyIHRoZSBtb3JlIGVsYWJvcmF0ZVxuICAgIC8vIG1ldGhvZCBvZiBjbGlja2luZ1xuICAgIGRyaXZlci5sb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sb2cud2FybignVW5hYmxlIHRvIGRvIHNpbXBsZSBuYXRpdmUgd2ViIHRhcC4gQXR0ZW1wdGluZyB0byBjb252ZXJ0IGNvb3JkaW5hdGVzJyk7XG5cbiAgLy8gYGdldF90b3BfbGVmdF9jb29yZGluYXRlc2AgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgc29tZXRpbWVzLFxuICAvLyB1bmxlc3Mgd2UgcHJlLWNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbHNcbiAgYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcblxuICBjb25zdCBbc2l6ZSwgY29vcmRpbmF0ZXNdID0gYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gc2l6ZTtcbiAgbGV0IHt4LCB5fSA9IGNvb3JkaW5hdGVzO1xuICB4ICs9IHdpZHRoIC8gMjtcbiAgeSArPSBoZWlnaHQgLyAyO1xuXG4gIHRoaXMuY3VyV2ViQ29vcmRzID0ge3gsIHl9O1xuICBhd2FpdCB0aGlzLmNsaWNrV2ViQ29vcmRzKCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tDb29yZHMgKGNvb3Jkcykge1xuICBhd2FpdCB0aGlzLnBlcmZvcm1Ub3VjaChbXG4gICAge1xuICAgICAgYWN0aW9uOiAndGFwJyxcbiAgICAgIG9wdGlvbnM6IGNvb3JkcyxcbiAgICB9LFxuICBdKTtcbn07XG5cbmV4dGVuc2lvbnMudHJhbnNsYXRlV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlV2ViQ29vcmRzIChjb29yZHMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXc7XG4gIHRyeSB7XG4gICAgd2VidmlldyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMTAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVXZWJWaWV3JywgZmFsc2UpKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGlmICghd2Vidmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gV2ViVmlldyBmb3VuZC4gVW5hYmxlIHRvIHRyYW5zbGF0ZSB3ZWIgY29vcmRpbmF0ZXMgZm9yIG5hdGl2ZSB3ZWIgdGFwLmApO1xuICB9XG5cbiAgd2VidmlldyA9IHV0aWwudW53cmFwRWxlbWVudCh3ZWJ2aWV3KTtcblxuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7d2Vidmlld30vcmVjdGAsICdHRVQnKTtcbiAgY29uc3Qgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBjb25zdCByZWFsRGltcyA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgY29uc3QgY21kID0gJyhmdW5jdGlvbiAoKSB7IHJldHVybiB7dzogd2luZG93LmlubmVyV2lkdGgsIGg6IHdpbmRvdy5pbm5lckhlaWdodH07IH0pKCknO1xuICBjb25zdCB3dkRpbXMgPSBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKGNtZCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiBpbXBsaWNpdCB3YWl0LCBhbmQgc2V0IGxvY2FsbHkgdG8gMFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ5ODhcbiAgY29uc3QgaW1wbGljaXRXYWl0TXMgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCgwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0KHd2UG9zLCByZWFsRGltcyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoaW1wbGljaXRXYWl0TXMpO1xuICB9XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIE1hdGgucm91bmQoeVJhdGlvICogY29vcmRzLnkpLFxuICAgIH07XG5cbiAgICAvLyBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIGNvb3JkaW5hdGVzLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgYnJva2VuXG4gICAgLy8gICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzkxNTlcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICByZWN0OiAke0pTT04uc3RyaW5naWZ5KHJlY3QpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZQb3M6ICR7SlNPTi5zdHJpbmdpZnkod3ZQb3MpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZEaW1zOiAke0pTT04uc3RyaW5naWZ5KHd2RGltcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB4UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeFJhdGlvKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCB3ZWIgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0gYCArXG4gICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvciByZWNlaXZlZCB3aGlsZSBleGVjdXRpbmcgYXRvbTogJHtvcmlnaW5hbEVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZvciBhdG9tIGV4ZWN1dGlvbiBhZnRlciBgICtcbiAgICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgfVxuICB9O1xuICAvLyBpZiB0aGUgYXRvbSBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoaW4gQVRPTV9JTklUSUFMX1dBSVRfTVNcbiAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBhbiBhbGVydCBwcmVzZW5jZVxuICBhd2FpdCBoYW5kbGVQcm9taXNlRXJyb3IoQi5hbnkoW0IuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMpLCB0aW1lZEF0b21Qcm9taXNlXSkpO1xuICBpZiAodGltZWRBdG9tUHJvbWlzZS5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRpbWVkQXRvbVByb21pc2U7XG4gIH1cblxuICAvLyAuLi5vdGhlcndpc2UgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYWxlcnQgY292ZXJpbmcgdGhlIGVsZW1lbnRcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QodGhpcy5fd2FpdGluZ0F0b21zKSkge1xuICAgIHRoaXMuX3dhaXRpbmdBdG9tcyA9IHtcbiAgICAgIGNvdW50OiAwLFxuICAgICAgYWxlcnROb3RpZmllcjogbmV3IEV2ZW50RW1pdHRlcigpLFxuICAgICAgYWxlcnRNb25pdG9yOiBCLnJlc29sdmUoKSxcbiAgICB9O1xuICB9XG4gIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCsrO1xuXG4gIGxldCBvbkFsZXJ0Q2FsbGJhY2s7XG4gIHRyeSB7XG4gICAgLy8gb25seSByZXN0YXJ0IHRoZSBtb25pdG9yIGlmIGl0IGlzIG5vdCBydW5uaW5nIGFscmVhZHlcbiAgICBpZiAodGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvci5pc1Jlc29sdmVkKCkpIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IgPSBCLnJlc29sdmUoKGFzeW5jICgpID0+IHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCA+IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tGb3JBbGVydCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLmVtaXQoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvbkFsZXJ0Q2FsbGJhY2sgPSAoKSA9PiByZWplY3QobmV3IGVycm9ycy5VbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IoKSk7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5vbmNlKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgICAgaGFuZGxlUHJvbWlzZUVycm9yKHRpbWVkQXRvbVByb21pc2UpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChvbkFsZXJ0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgIH1cbiAgICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQtLTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5tb2JpbGVXZWJOYXYgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVXZWJOYXYgKG5hdlR5cGUpIHtcbiAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYGhpc3RvcnkuJHtuYXZUeXBlfSgpO2AsIG51bGxdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2FmYXJpT3B0c1xuICogQHByb3BlcnR5IHtvYmplY3R9IHByZWZlcmVuY2VzIEFuIG9iamVjdCBjb250YWluaW5nIFNhZmFyaSBzZXR0aW5ncyB0byBiZSB1cGRhdGVkLlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNldHRpbmcgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcyBjb3VsZCBiZSByZXRyaWV2ZWQgYnlcbiAqIGNoYW5naW5nIHRoZSBjb3JyZXNwb25kaW5nIFNhZmFyaSBzZXR0aW5ncyBpbiB0aGUgVUkgYW5kIHRoZW4gaW5zcGVjdGluZ1xuICogJ0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tLmFwcGxlLm1vYmlsZXNhZmFyaS5wbGlzdCcgZmlsZSBpbnNpZGUgb2ZcbiAqIGNvbS5hcHBsZS5tb2JpbGVzYWZhcmkgYXBwIGNvbnRhaW5lci5cbiAqIFRoZSBmdWxsIHBhdGggdG8gdGhlIE1vYmlsZSBTYWZhcmkncyBjb250YWluZXIgY291bGQgYmUgcmV0cmlldmVkIGZyb21cbiAqIGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgPHNpbV91ZGlkPiBjb20uYXBwbGUubW9iaWxlc2FmYXJpIGRhdGFgXG4gKiBjb21tYW5kIG91dHB1dC5cbiAqIFVzZSB0aGUgYHhjcnVuIHNpbWN0bCBzcGF3biA8c2ltX3VkaWQ+IGRlZmF1bHRzIHJlYWQgPHBhdGhfdG9fcGxpc3Q+YCBjb21tYW5kXG4gKiB0byBwcmludCB0aGUgcGxpc3QgY29udGVudCB0byB0aGUgVGVybWluYWwuXG4gKi9cblxuLyoqXG4gKiBVcGRhdGVzIHByZWZlcmVuY2VzIG9mIE1vYmlsZSBTYWZhcmkgb24gU2ltdWxhdG9yXG4gKlxuICogQHBhcmFtIHtTYWZhcmlPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVXBkYXRlU2FmYXJpUHJlZmVyZW5jZXMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBleHRlbnNpb24gaXMgb25seSBhdmFpbGFibGUgZm9yIFNpbXVsYXRvcicpO1xuICB9XG4gIGNvbnN0IHsgcHJlZmVyZW5jZXMgfSA9IG9wdHM7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHByZWZlcmVuY2VzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1wicHJlZmVyZW5jZXNcIiBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0Jyk7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZyhgQWJvdXQgdG8gdXBkYXRlIFNhZmFyaSBwcmVmZXJlbmNlczogJHtKU09OLnN0cmluZ2lmeShwcmVmZXJlbmNlcyl9YCk7XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpU2V0dGluZ3MocHJlZmVyZW5jZXMpO1xufTtcblxuT2JqZWN0LmFzc2lnbihjb21tYW5kcywgZXh0ZW5zaW9ucywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQVAsT0FBQTtBQUVBLE1BQU1RLHFCQUFxQixHQUFHLEVBQUU7QUFDaEMsTUFBTUMsOEJBQThCLEdBQUcsRUFBRTtBQUN6QyxNQUFNQyx3QkFB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
|
|
560
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXN5bmNib3giLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibHVlYmlyZCIsIl9kcml2ZXIiLCJfY29va2llcyIsIl9ldmVudHMiLCJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjb29raWVVdGlscyIsImNyZWF0ZUpTQ29va2llIiwibmFtZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsInNjcmlwdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYWNoZVdlYkVsZW1lbnQiLCJpc1BsYWluT2JqZWN0IiwiZWxJZCIsInVud3JhcEVsZW1lbnQiLCJjYWNoZUlkIiwiaW5jbHVkZXMiLCJ1dWlkVjQiLCJ3ZWJFbGVtZW50c0NhY2hlIiwic2V0Iiwid3JhcEVsZW1lbnQiLCJjYWNoZVdlYkVsZW1lbnRzIiwicmVzcG9uc2UiLCJ0b0NhY2hlZCIsInYiLCJpc0FycmF5IiwibWFwIiwicmVzdWx0IiwidG9QYWlycyIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJlcnIiLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbiAge3c6IDEwODAsIGg6IDIzNDB9LCAvLyAxMyBtaW5pLCAxMiBtaW5pXG4gIHt3OiAxMTcwLCBoOiAyNTMyfSwgLy8gMTQsIDEzLCAxMyBQcm8sIDEyLCAxMiBQcm9cbiAge3c6IDEyODQsIGg6IDI3Nzh9LCAvLyAxNCBQbHVzLCAxMyBQcm8gTWF4LCAxMiBQcm8gTWF4XG4gIHt3OiAxMTc5LCBoOiAyNTU2fSwgLy8gMTQgUHJvXG4gIHt3OiAxMjkwLCBoOiAyNzk2fSwgLy8gMTQgUHJvIE1heFxuXTtcblxuY29uc3QgeyBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiB9ID0gdXRpbDtcblxuY29uc3QgQVRPTV9XQUlUX1RJTUVPVVRfTVMgPSAyICogNjAwMDA7XG5jb25zdCBBVE9NX0lOSVRJQUxfV0FJVF9NUyA9IDEwMDA7XG5cbmNvbnN0IE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UID0gJ2FsZXJ0JztcblxuY29uc3QgVklTSUJMRSA9ICd2aXNpYmxlJztcbmNvbnN0IElOVklTSUJMRSA9ICdpbnZpc2libGUnO1xuY29uc3QgREVURUNUID0gJ2RldGVjdCc7XG5jb25zdCBWSVNJQklMSVRJRVMgPSBbVklTSUJMRSwgSU5WSVNJQkxFLCBERVRFQ1RdO1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgU2FmYXJpJ3MgdGFiIChzZWFyY2ggYmFyKS5cbi8vIFNpbmNlIGlPUyAxNSwgdGhlIGJhciBpcyB0aGUgYm90dG9tIGJ5IGRlZmF1bHQuXG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX1RPUCA9ICd0b3AnO1xuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IFRBQl9CQVJfUE9TU0lUSU9OUyA9IFtUQUJfQkFSX1BPU0lUSU9OX1RPUCwgVEFCX0JBUl9QT1NJVElPTl9CT1RUT01dO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyIChpZCkge1xuICBpZiAoIV8uaXNTdHJpbmcoaWQpICYmICFfLmlzTnVtYmVyKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhpZCkgJiYgXy5pc0VtcHR5KGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc051bWJlcihpZCkgJiYgaXNOYU4oaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb21tYW5kcy5zZXRGcmFtZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEZyYW1lIChmcmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChfLmlzTnVsbChmcmFtZSkpIHtcbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMubG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldENzc1Byb3BlcnR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3NzUHJvcGVydHkgKHByb3BlcnR5TmFtZSwgZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdmFsdWVfb2ZfY3NzX3Byb3BlcnR5JywgW2F0b21zRWxlbWVudCwgcHJvcGVydHlOYW1lXSk7XG59O1xuXG5jb21tYW5kcy5zdWJtaXQgPSBhc3luYyBmdW5jdGlvbiBzdWJtaXQgKGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdzdWJtaXQnLCBbYXRvbXNFbGVtZW50XSk7XG59O1xuXG5jb21tYW5kcy5yZWZyZXNoID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgncmVmcmVzaCcsIFtdKTtcbn07XG5cbmNvbW1hbmRzLmdldFVybCA9IGFzeW5jIGZ1bmN0aW9uIGdldFVybCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoJ3dpbmRvdy5sb2NhdGlvbi5ocmVmJyk7XG59O1xuXG5jb21tYW5kcy50aXRsZSA9IGFzeW5jIGZ1bmN0aW9uIHRpdGxlICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgndGl0bGUnLCBbXSwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5zZXRDb29raWUgPSBhc3luYyBmdW5jdGlvbiBzZXRDb29raWUgKGNvb2tpZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvb2tpZSA9IF8uY2xvbmUoY29va2llKTtcblxuICAvLyBpZiBgcGF0aGAgZmllbGQgaXMgbm90IHNwZWNpZmllZCwgU2FmYXJpIHdpbGwgbm90IHVwZGF0ZSBjb29raWVzIGFzIGV4cGVjdGVkOyBlZyBpc3N1ZSAjMTcwOFxuICBpZiAoIWNvb2tpZS5wYXRoKSB7XG4gICAgY29va2llLnBhdGggPSAnLyc7XG4gIH1cblxuICBjb25zdCBqc0Nvb2tpZSA9IGNvb2tpZVV0aWxzLmNyZWF0ZUpTQ29va2llKGNvb2tpZS5uYW1lLCBjb29raWUudmFsdWUsIHtcbiAgICBleHBpcmVzOiBfLmlzTnVtYmVyKGNvb2tpZS5leHBpcnkpID8gKG5ldyBEYXRlKGNvb2tpZS5leHBpcnkgKiAxMDAwKSkudG9VVENTdHJpbmcoKSA6XG4gICAgICBjb29raWUuZXhwaXJ5LFxuICAgIHBhdGg6IGNvb2tpZS5wYXRoLFxuICAgIGRvbWFpbjogY29va2llLmRvbWFpbixcbiAgICBodHRwT25seTogY29va2llLmh0dHBPbmx5LFxuICAgIHNlY3VyZTogY29va2llLnNlY3VyZVxuICB9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KGpzQ29va2llKX1gO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG59O1xuXG5oZWxwZXJzLmNhY2hlV2ViRWxlbWVudCA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudCAoZWwpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICBpZiAoIWlzVmFsaWRFbGVtZW50SWRlbnRpZmllcihlbElkKSkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuICAvLyBJbiBuZXdlciBkZWJ1Z2dlciByZWxlYXNlcyBlbGVtZW50IGlkZW50aWZpZXJzIGxvb2sgbGlrZSBgOndkYzoxNjI4MTUxNjQ5MzI1YFxuICAvLyBXZSBhc3N1bWUgaXQgaXMgc2FmZSB0byB1c2UgdGhlc2UgdG8gaWRlbnRpZnkgY2FjaGVkIGVsZW1lbnRzXG4gIGNvbnN0IGNhY2hlSWQgPSBfLmluY2x1ZGVzKGVsSWQsICc6JykgPyBlbElkIDogdXRpbC51dWlkVjQoKTtcbiAgdGhpcy53ZWJFbGVtZW50c0NhY2hlLnNldChjYWNoZUlkLCBlbElkKTtcbiAgcmV0dXJuIHV0aWwud3JhcEVsZW1lbnQoY2FjaGVJZCk7XG59O1xuXG5oZWxwZXJzLmNhY2hlV2ViRWxlbWVudHMgPSBmdW5jdGlvbiBjYWNoZVdlYkVsZW1lbnRzIChyZXNwb25zZSkge1xuICBjb25zdCB0b0NhY2hlZCA9ICh2KSA9PiBfLmlzQXJyYXkodikgfHwgXy5pc1BsYWluT2JqZWN0KHYpXG4gICAgPyB0aGlzLmNhY2hlV2ViRWxlbWVudHModilcbiAgICA6IHY7XG5cbiAgaWYgKF8uaXNBcnJheShyZXNwb25zZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UubWFwKHRvQ2FjaGVkKTtcbiAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2UpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gey4uLnJlc3BvbnNlLCAuLi4odGhpcy5jYWNoZVdlYkVsZW1lbnQocmVzcG9uc2UpKX07XG4gICAgcmV0dXJuIF8udG9QYWlycyhyZXN1bHQpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2Nba2V5XSA9IHRvQ2FjaGVkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG5leHRlbnNpb25zLmZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyAoc3RyYXRlZ3ksIHNlbGVjdG9yLCBtYW55LCBjdHgpIHtcbiAgY29uc3QgY29udGV4dEVsZW1lbnQgPSBfLmlzTmlsKGN0eCkgPyBudWxsIDogdGhpcy5nZXRBdG9tc0VsZW1lbnQoY3R4KTtcbiAgbGV0IGVsZW1lbnQ7XG4gIGxldCBkb0ZpbmQgPSBhc3luYyAoKSA9PiB7XG4gICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYGZpbmRfZWxlbWVudCR7bWFueSA/ICdzJyA6ICcnfWAsIFtzdHJhdGVneSwgc2VsZWN0b3IsIGNvbnRleHRFbGVtZW50XSk7XG4gICAgcmV0dXJuICFfLmlzTnVsbChlbGVtZW50KTtcbiAgfTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbihkb0ZpbmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgXy5pc0Z1bmN0aW9uKGVyci5tZXNzYWdlLm1hdGNoKSAmJiBlcnIubWVzc2FnZS5tYXRjaCgvQ29uZGl0aW9uIHVubWV0LykpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiB3YXMgbm90IG1ldCBzZXR0aW5nIHJlcyB0byBlbXB0eSBhcnJheVxuICAgICAgZWxlbWVudCA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hbnkpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoZWxlbWVudCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcigpO1xuICB9XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tXZWJDb29yZHMgKCkge1xuICBsZXQgY29vcmRzID0gYXdhaXQgdGhpcy50cmFuc2xhdGVXZWJDb29yZHModGhpcy5jdXJXZWJDb29yZHMpO1xuICBhd2FpdCB0aGlzLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b20gKGF0b20sIGFyZ3MsIGFsd2F5c0RlZmF1bHRGcmFtZSA9IGZhbHNlKSB7XG4gIGxldCBmcmFtZXMgPSBhbHdheXNEZWZhdWx0RnJhbWUgPT09IHRydWUgPyBbXSA6IHRoaXMuY3VyV2ViRnJhbWVzO1xuICBsZXQgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tKGF0b20sIGFyZ3MsIGZyYW1lcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b21Bc3luYyAoYXRvbSwgYXJncywgcmVzcG9uc2VVcmwpIHtcbiAgLy8gc2F2ZSB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IG1ldGhvZHMgb2YgdGhlIHByb21pc2UgdG8gYmUgd2FpdGVkIGZvclxuICBsZXQgcHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLmFzeW5jUHJvbWlzZSA9IHtyZXNvbHZlLCByZWplY3R9O1xuICB9KTtcbiAgYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYyhhdG9tLCBhcmdzLCB0aGlzLmN1cldlYkZyYW1lcywgcmVzcG9uc2VVcmwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZ2V0QXRvbXNFbGVtZW50ID0gZnVuY3Rpb24gZ2V0QXRvbXNFbGVtZW50IChlbE9ySWQpIHtcbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbE9ySWQpO1xuICBpZiAoIXRoaXMud2ViRWxlbWVudHNDYWNoZS5oYXMoZWxJZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHtFTEVNRU5UOiB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuZ2V0KGVsSWQpfTtcbn07XG5cbmhlbHBlcnMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMgPSBmdW5jdGlvbiBjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyAoYXJncyA9IFtdKSB7XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKGhlbHBlcnMuaGFzRWxlbWVudElkKGFyZykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0b21zRWxlbWVudChhcmcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0FycmF5KGFyZykgPyB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZykgOiBhcmc7XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXRFbGVtZW50SWQgPSBmdW5jdGlvbiBnZXRFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuRUxFTUVOVCB8fCBlbGVtZW50W1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXTtcbn07XG5cbmhlbHBlcnMuaGFzRWxlbWVudElkID0gZnVuY3Rpb24gaGFzRWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiB1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpICYmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQuRUxFTUVOVCkgfHwgdXRpbC5oYXNWYWx1ZShlbGVtZW50W1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXSkpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc0lwaG9uZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzSXBob25lICgpIHtcbiAgaWYgKF8uaXNCb29sZWFuKHRoaXMuX2lzU2FmYXJpSXBob25lKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICB0aGlzLl9pc1NhZmFyaUlwaG9uZSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpcGhvbmUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlJcGhvbmUgPz8gdHJ1ZTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNOb3RjaGVkID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNOb3RjaGVkICgpIHtcbiAgaWYgKF8uaXNCb29sZWFuKHRoaXMuX2lzU2FmYXJpTm90Y2hlZCkpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNhZmFyaURldmljZVNpemUoKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBOT1RDSEVEX0RFVklDRV9TSVpFUykge1xuICAgICAgaWYgKGRldmljZS53ID09PSB3aWR0aCAmJiBkZXZpY2UuaCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2lzU2FmYXJpTm90Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIGRpbWVuc2lvbnMuIEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbm90IG5vdGNoZWRgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpTm90Y2hlZCA/PyBmYWxzZTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCAod3ZQb3MsIHJlYWxEaW1zKSB7XG4gIGxldCB0b3BPZmZzZXQgPSAwO1xuICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcblxuICBjb25zdCBpc0lwaG9uZSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKTtcblxuICAvLyBObyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFNtYXJ0IEFwcCBCYW5uZXIgb3IgVGFiIEJhciBpcyB2aXNpYmxlIG9yIG5vdFxuICAvLyBpZiBhbHJlYWR5IGRlZmluZWQgYnkgbmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSBvciBuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkgaW4gc2V0dGluZ3MuXG4gIGNvbnN0IHtcbiAgICBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5LFxuICAgIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSxcbiAgICBzYWZhcmlUYWJCYXJQb3NpdGlvbiA9IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxNS4wJykgJiYgaXNJcGhvbmVcbiAgICAgID8gVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gOiBUQUJfQkFSX1BPU0lUSU9OX1RPUCxcbiAgfSA9IGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKTtcbiAgbGV0IHRhYkJhclZpc2liaWxpdHkgPSBfLmxvd2VyQ2FzZShuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5KTtcbiAgbGV0IGJhbm5lclZpc2liaWxpdHkgPSBfLmxvd2VyQ2FzZShuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkpO1xuICBjb25zdCB0YWJCYXJQb3NpdGlvbiA9IF8ubG93ZXJDYXNlKHNhZmFyaVRhYkJhclBvc2l0aW9uKTtcblxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyh0YWJCYXJWaXNpYmlsaXR5KSkge1xuICAgIHRhYkJhclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXMoYmFubmVyVmlzaWJpbGl0eSkpIHtcbiAgICBiYW5uZXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG5cbiAgaWYgKCFUQUJfQkFSX1BPU1NJVElPTlMuaW5jbHVkZXModGFiQmFyUG9zaXRpb24pKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGAke3NhZmFyaVRhYkJhclBvc2l0aW9ufSBpcyBpbnZhbGlkIGFzIFNhZmFyaSB0YWIgYmFyIHBvc2l0aW9uLiBBdmFpbGFibGUgcG9zaXRpb25zIGFyZSAke1RBQl9CQVJfUE9TU0lUSU9OU30uYCk7XG4gIH1cblxuICBjb25zdCBpc05vdGNoZWQgPSBpc0lwaG9uZSAmJiBhd2FpdCB0aGlzLmdldFNhZmFyaUlzTm90Y2hlZCgpO1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uID0gcmVhbERpbXMuaCA+IHJlYWxEaW1zLncgPyAnUE9SVFJBSVQnIDogJ0xBTkRTQ0FQRSc7XG5cbiAgY29uc3Qgbm90Y2hPZmZzZXQgPSBpc05vdGNoZWRcbiAgICA/IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc9JywgJzEzLjAnKVxuICAgICAgPyBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzXG4gICAgICA6IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NcbiAgICA6IDA7XG5cbiAgY29uc3QgaXNTY3JvbGxlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAwJyk7XG4gIGlmIChpc1Njcm9sbGVkKSB7XG4gICAgdG9wT2Zmc2V0ID0gSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUICsgbm90Y2hPZmZzZXQ7XG5cbiAgICBpZiAoaXNOb3RjaGVkKSB7XG4gICAgICB0b3BPZmZzZXQgLT0gSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpUGhvbmUgaXMgbGFuZHNjYXBlIHRoZW4gdGhlcmUgaXMgbm8gdG9wIGJhclxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgJiYgaXNJcGhvbmUpIHtcbiAgICAgIHRvcE9mZnNldCA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcE9mZnNldCA9IHRhYkJhclBvc2l0aW9uID09PSBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA/IDAgOiBJUEhPTkVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgdG9wT2Zmc2V0ICs9IG5vdGNoT2Zmc2V0O1xuICAgIHRoaXMubG9nLmRlYnVnKGB0YWJCYXJQb3NpdGlvbiBhbmQgdG9wT2Zmc2V0OiAke3RhYkJhclBvc2l0aW9ufSwgJHt0b3BPZmZzZXR9YCk7XG5cbiAgICBpZiAoaXNJcGhvbmUpIHtcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ1BPUlRSQUlUJykge1xuICAgICAgICAvLyBUaGUgYm90dG9tIGJhciBpcyBvbmx5IHZpc2libGUgd2hlbiBwb3J0cmFpdFxuICAgICAgICBib3R0b21PZmZzZXQgPSBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BPZmZzZXQgPSBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgfHwgIWlzSXBob25lKSB7XG4gICAgICBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgICAgICB0b3BPZmZzZXQgKz0gVEFCX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2UgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgICAgICAvLyBUYWJzIG9ubHkgYXBwZWFyIGlmIHRoZSBkZXZpY2UgaXMgbGFuZHNjYXBlIG9yIGlmIGl0J3MgYW4gaVBhZCBzbyB3ZSBvbmx5IGNoZWNrIHZpc2liaWxpdHkgaW4gdGhpcyBjYXNlXG4gICAgICAgIC8vIEFzc3VtZSB0aGF0IGVhY2ggdGFiIGJhciBpcyBhIFdlYlZpZXdcbiAgICAgICAgY29uc3QgY29udGV4dHNBbmRWaWV3cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cygpO1xuICAgICAgICBjb25zdCB0YWJzID0gY29udGV4dHNBbmRWaWV3cy5maWx0ZXIoKGN0eCkgPT4gY3R4LmlkLnN0YXJ0c1dpdGgoJ1dFQlZJRVdfJykpO1xuXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt0YWJzLmxlbmd0aH0gdGFicy4gQXNzdW1pbmcgdGhlIHRhYiBiYXIgaXMgdmlzaWJsZWApO1xuICAgICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcE9mZnNldCArPSBhd2FpdCB0aGlzLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0KGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KTtcblxuICB3dlBvcy55ICs9IHRvcE9mZnNldDtcbiAgcmVhbERpbXMuaCAtPSAodG9wT2Zmc2V0ICsgYm90dG9tT2Zmc2V0KTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCAoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgfSBlbHNlIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAvLyB0cnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNtYXJ0IEFwcCBCYW5uZXJcbiAgICBjb25zdCBiYW5uZXJzID0gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnQ2xvc2UgYXBwIGRvd25sb2FkIG9mZmVyJywgdHJ1ZSk7XG4gICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBkcml2ZXIubG9nLndhcm4oYEVycm9yIGF0dGVtcHRpbmcgdG8gY2xpY2s6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHRlbnNpb25zLm5hdGl2ZVdlYlRhcCA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZVdlYlRhcCAoZWwpIHtcbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuXG4gIC8vIGlmIHN0cmljdCBuYXRpdmUgdGFwLCBkbyBub3QgdHJ5IHRvIGRvIGl0IHdpdGggV0RBIGRpcmVjdGx5XG4gIGlmICghKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwU3RyaWN0ICYmIGF3YWl0IHRhcFdlYkVsZW1lbnROYXRpdmVseSh0aGlzLCBhdG9tc0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG5cbiAgY29uc3QgW3NpemUsIGNvb3JkaW5hdGVzXSA9IGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHNpemU7XG4gIGxldCB7eCwgeX0gPSBjb29yZGluYXRlcztcbiAgeCArPSB3aWR0aCAvIDI7XG4gIHkgKz0gaGVpZ2h0IC8gMjtcblxuICB0aGlzLmN1cldlYkNvb3JkcyA9IHt4LCB5fTtcbiAgYXdhaXQgdGhpcy5jbGlja1dlYkNvb3JkcygpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrQ29vcmRzIChjb29yZHMpIHtcbiAgYXdhaXQgdGhpcy5wZXJmb3JtVG91Y2goW1xuICAgIHtcbiAgICAgIGFjdGlvbjogJ3RhcCcsXG4gICAgICBvcHRpb25zOiBjb29yZHMsXG4gICAgfSxcbiAgXSk7XG59O1xuXG5leHRlbnNpb25zLnRyYW5zbGF0ZVdlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZVdlYkNvb3JkcyAoY29vcmRzKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBUcmFuc2xhdGluZyBjb29yZGluYXRlcyAoJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSkgdG8gd2ViIGNvb3JkaW5hdGVzYCk7XG5cbiAgLy8gYWJzb2x1dGl6ZSB3ZWIgY29vcmRzXG4gIGxldCB3ZWJ2aWV3O1xuICB0cnkge1xuICAgIHdlYnZpZXcgPSBhd2FpdCByZXRyeUludGVydmFsKDUsIDEwMCwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlV2ViVmlldycsIGZhbHNlKSk7XG4gIH0gY2F0Y2ggKGlnbikge31cblxuICBpZiAoIXdlYnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIFdlYlZpZXcgZm91bmQuIFVuYWJsZSB0byB0cmFuc2xhdGUgd2ViIGNvb3JkaW5hdGVzIGZvciBuYXRpdmUgd2ViIHRhcC5gKTtcbiAgfVxuXG4gIHdlYnZpZXcgPSB1dGlsLnVud3JhcEVsZW1lbnQod2Vidmlldyk7XG5cbiAgY29uc3QgcmVjdCA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3dlYnZpZXd9L3JlY3RgLCAnR0VUJyk7XG4gIGNvbnN0IHd2UG9zID0ge3g6IHJlY3QueCwgeTogcmVjdC55fTtcbiAgY29uc3QgcmVhbERpbXMgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gIGNvbnN0IGNtZCA9ICcoZnVuY3Rpb24gKCkgeyByZXR1cm4ge3c6IHdpbmRvdy5pbm5lcldpZHRoLCBoOiB3aW5kb3cuaW5uZXJIZWlnaHR9OyB9KSgpJztcbiAgY29uc3Qgd3ZEaW1zID0gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZShjbWQpO1xuXG4gIC8vIGtlZXAgdHJhY2sgb2YgaW1wbGljaXQgd2FpdCwgYW5kIHNldCBsb2NhbGx5IHRvIDBcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0OTg4XG4gIGNvbnN0IGltcGxpY2l0V2FpdE1zID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoMCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCh3dlBvcywgcmVhbERpbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KGltcGxpY2l0V2FpdE1zKTtcbiAgfVxuXG4gIGlmICh3dkRpbXMgJiYgcmVhbERpbXMgJiYgd3ZQb3MpIHtcbiAgICBsZXQgeFJhdGlvID0gcmVhbERpbXMudyAvIHd2RGltcy53O1xuICAgIGxldCB5UmF0aW8gPSByZWFsRGltcy5oIC8gd3ZEaW1zLmg7XG4gICAgbGV0IG5ld0Nvb3JkcyA9IHtcbiAgICAgIHg6IHd2UG9zLnggKyBNYXRoLnJvdW5kKHhSYXRpbyAqIGNvb3Jkcy54KSxcbiAgICAgIHk6IHd2UG9zLnkgKyBNYXRoLnJvdW5kKHlSYXRpbyAqIGNvb3Jkcy55KSxcbiAgICB9O1xuXG4gICAgLy8gYWRkaXRpb25hbCBsb2dnaW5nIGZvciBjb29yZGluYXRlcywgc2luY2UgaXQgaXMgc29tZXRpbWVzIGJyb2tlblxuICAgIC8vICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy85MTU5XG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCBjb29yZGluYXRlczogJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHd2UG9zOiAke0pTT04uc3RyaW5naWZ5KHd2UG9zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHJlYWxEaW1zOiAke0pTT04uc3RyaW5naWZ5KHJlYWxEaW1zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgeFJhdGlvOiAke0pTT04uc3RyaW5naWZ5KHhSYXRpbyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB5UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeVJhdGlvKX1gKTtcblxuICAgIHRoaXMubG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgYGludG8gcmVhbCBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHJldHVybiBuZXdDb29yZHM7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY2hlY2tGb3JBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yQWxlcnQgKCkge1xuICByZXR1cm4gXy5pc1N0cmluZyhhd2FpdCB0aGlzLmdldEFsZXJ0VGV4dCgpKTtcbn07XG5cbmV4dGVuc2lvbnMud2FpdEZvckF0b20gPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXRvbSAocHJvbWlzZSkge1xuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuXG4gIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGFsZXJ0IHdoaWxlIHRoZSBhdG9tIGlzIGJlaW5nIGV4ZWN1dGVkLlxuICAvLyBzbyBub3RpZnkgb3Vyc2VsdmVzIHdoZW4gaXQgaGFwcGVuc1xuICBjb25zdCB0aW1lZEF0b21Qcm9taXNlID0gQi5yZXNvbHZlKHByb21pc2UpLnRpbWVvdXQoQVRPTV9XQUlUX1RJTUVPVVRfTVMpO1xuICBjb25zdCBoYW5kbGVQcm9taXNlRXJyb3IgPSBhc3luYyAocCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSAoZXJyIGluc3RhbmNlb2YgQi5BZ2dyZWdhdGVFcnJvcikgPyBlcnJbMF0gOiBlcnI7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhZmFyaU9wdHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwcmVmZXJlbmNlcyBBbiBvYmplY3QgY29udGFpbmluZyBTYWZhcmkgc2V0dGluZ3MgdG8gYmUgdXBkYXRlZC5cbiAqIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzZXR0aW5nIG5hbWVzIGFuZCB0aGVpciB2YWx1ZXMgY291bGQgYmUgcmV0cmlldmVkIGJ5XG4gKiBjaGFuZ2luZyB0aGUgY29ycmVzcG9uZGluZyBTYWZhcmkgc2V0dGluZ3MgaW4gdGhlIFVJIGFuZCB0aGVuIGluc3BlY3RpbmdcbiAqICdMaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5hcHBsZS5tb2JpbGVzYWZhcmkucGxpc3QnIGZpbGUgaW5zaWRlIG9mXG4gKiBjb20uYXBwbGUubW9iaWxlc2FmYXJpIGFwcCBjb250YWluZXIuXG4gKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBNb2JpbGUgU2FmYXJpJ3MgY29udGFpbmVyIGNvdWxkIGJlIHJldHJpZXZlZCBmcm9tXG4gKiBgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyIDxzaW1fdWRpZD4gY29tLmFwcGxlLm1vYmlsZXNhZmFyaSBkYXRhYFxuICogY29tbWFuZCBvdXRwdXQuXG4gKiBVc2UgdGhlIGB4Y3J1biBzaW1jdGwgc3Bhd24gPHNpbV91ZGlkPiBkZWZhdWx0cyByZWFkIDxwYXRoX3RvX3BsaXN0PmAgY29tbWFuZFxuICogdG8gcHJpbnQgdGhlIHBsaXN0IGNvbnRlbnQgdG8gdGhlIFRlcm1pbmFsLlxuICovXG5cbi8qKlxuICogVXBkYXRlcyBwcmVmZXJlbmNlcyBvZiBNb2JpbGUgU2FmYXJpIG9uIFNpbXVsYXRvclxuICpcbiAqIEBwYXJhbSB7U2FmYXJpT3B0c30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBTaW11bGF0b3InKTtcbiAgfVxuICBjb25zdCB7IHByZWZlcmVuY2VzIH0gPSBvcHRzO1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChwcmVmZXJlbmNlcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdcInByZWZlcmVuY2VzXCIgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoYEFib3V0IHRvIHVwZGF0ZSBTYWZhcmkgcHJlZmVyZW5jZXM6ICR7SlNPTi5zdHJpbmdpZnkocHJlZmVyZW5jZXMpfWApO1xuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnVwZGF0ZVNhZmFyaVNldHRpbmdzKHByZWZlcmVuY2VzKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFFQSxNQUFNUSxxQkFBcUIsR0FBRyxFQUFFO0FBQ2hDLE1BQU1DLDhCQUE4QixHQUFHLEVBQUU7QUFDekMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyx5QkFBeUIsR0FBRyxFQUFFO0FBQ3BDLE1BQU1DLDRCQUE0QixHQUFHLEVBQUU7QUFFdkMsTUFBTUMsK0JBQStCLEdBQUcsRUFBRTtBQUMxQyxNQUFN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
|