appium-xcuitest-driver 3.47.0 → 3.50.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/README.md +3 -1
- package/build/lib/commands/gesture.js +5 -1
- package/build/lib/desired-caps.js +7 -1
- package/build/lib/driver.js +27 -5
- package/lib/commands/gesture.js +4 -0
- package/lib/desired-caps.js +6 -0
- package/lib/driver.js +23 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -155,7 +155,9 @@ Capability | Description
|
|
|
155
155
|
|`appium:autoAcceptAlerts`| Accept all iOS alerts automatically if they pop up. This includes privacy access permission alerts (e.g., location, contacts, photos). Default is `false`. |`true` or `false`|
|
|
156
156
|
|`appium:autoDismissAlerts`| Dismiss all iOS alerts automatically if they pop up. This includes privacy access permission alerts (e.g., location, contacts, photos). Default is `false`. |`true` or `false`|
|
|
157
157
|
|`appium:disableAutomaticScreenshots`| Disable automatic screenshots taken by XCTest at every interaction. Default is up to `WebDriverAgent`'s config to decide, which currently defaults to `true`. |`true` or `false`|
|
|
158
|
-
|`appium:shouldTerminateApp`| Specify if the app should be terminated on session end. This capability only has an effect if an application identifier has been passed to the test session (either explicitly, by setting bundleId, or implicitly, by providing app). Default is `true`. |`true` or `false`|
|
|
158
|
+
|`appium:shouldTerminateApp`| Specify if the app should be terminated on session end. This capability only has an effect if an application identifier has been passed to the test session (either explicitly, by setting bundleId, or implicitly, by providing app). Default is `true` unless `noReset` capability is set to `true`. |`true` or `false`|
|
|
159
|
+
|`appium:forceAppLaunch`| Specify if the app should be forcefully restarted if it is already running on session startup. This capability only has an effect if an application identifier has been passed to the test session (either explicitly, by setting bundleId, or implicitly, by providing app). Default is `true` unless `noReset` capability is set to `true`. |`true` or `false`|
|
|
160
|
+
|`appium:useNativeCachingStrategy`| Set this capability to `false` in order to use the custom elements caching strategy. This might help to avoid stale element exception on property change. By default the native XCTest cache resolution is used (`true`) for all native locators (e.g. all, but xpath). Check the corresponding [WebDriverAgent pull request](https://github.com/appium/WebDriverAgent/pull/516) for more details. |`true` or `false`|
|
|
159
161
|
|
|
160
162
|
### Simulator
|
|
161
163
|
|
|
@@ -164,6 +164,10 @@ commands.performActions = async function performActions(actions) {
|
|
|
164
164
|
});
|
|
165
165
|
};
|
|
166
166
|
|
|
167
|
+
commands.releaseActions = function releaseActions() {
|
|
168
|
+
_logger.default.warn('On this platform, releaseActions is a no-op');
|
|
169
|
+
};
|
|
170
|
+
|
|
167
171
|
commands.performTouch = async function performTouch(gestures) {
|
|
168
172
|
_logger.default.debug(`Received the following touch action: ${gesturesChainToString(gestures)}`);
|
|
169
173
|
|
|
@@ -423,4 +427,4 @@ var _default = extensions;
|
|
|
423
427
|
exports.default = _default;require('source-map-support').install();
|
|
424
428
|
|
|
425
429
|
|
|
426
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJ0b0VsZW1lbnRJZCIsIm9wdHMiLCJlbGVtZW50IiwibG9nIiwiaW5mbyIsImVsIiwiZWxlbWVudElkIiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJ0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQiLCJkcml2ZXIiLCJmaW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMiLCJtb3ZlVG8iLCJ4b2Zmc2V0IiwieW9mZnNldCIsImlzV2ViQ29udGV4dCIsIngiLCJ5IiwiZ2V0TG9jYXRpb24iLCJjb29yZHMiLCJjdXJXZWJDb29yZHMiLCJhdG9tc0VsZW1lbnQiLCJ1c2VBdG9tc0VsZW1lbnQiLCJyZWxDb29yZHMiLCJleGVjdXRlQXRvbSIsIl8iLCJpc05pbCIsImN1ckNvb3JkcyIsImVycm9ycyIsIlVua25vd25FeGNlcHRpb24iLCJlbFBvcyIsInJlcXVpcmVGbG9hdFBhcmFtZXRlciIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJtZXRob2ROYW1lIiwiaXNVbmRlZmluZWQiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsInJlc3VsdCIsInBhcnNlRmxvYXQiLCJpc05hTiIsInJlcXVpcmVJbnRQYXJhbWV0ZXIiLCJwYXJzZUludCIsIm1vYmlsZVNoYWtlIiwiaXNTaW11bGF0b3IiLCJVbmtub3duRXJyb3IiLCJkZXZpY2UiLCJzaGFrZSIsImNsaWNrIiwibmF0aXZlQ2xpY2siLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiZGVidWciLCJnZXN0dXJlc0NoYWluVG9TdHJpbmciLCJnZXN0dXJlcyIsImtleXNUb0luY2x1ZGUiLCJtYXAiLCJpdGVtIiwib3RoZXJLZXlzIiwiZGlmZmVyZW5jZSIsImtleXMiLCJpc0FycmF5IiwiaW50ZXJzZWN0aW9uIiwibGVuZ3RoIiwiYWN0aW9uIiwiaXNQbGFpbk9iamVjdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwicGVyZm9ybUFjdGlvbnMiLCJhY3Rpb25zIiwicHJlcHJvY2Vzc2VkQWN0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJwYXJhbWV0ZXJzIiwicG9pbnRlclR5cGUiLCJtb2RpZmllZEFjdGlvbiIsImNsb25lIiwiZmlsdGVyIiwiaW5uZXJBY3Rpb24iLCJkdXJhdGlvbiIsInByb3h5Q29tbWFuZCIsInBlcmZvcm1Ub3VjaCIsImUiLCJlcnJvckFuZFRocm93IiwibWVzc2FnZSIsInBlcmZvcm1NdWx0aUFjdGlvbiIsImkiLCJlbmRwb2ludCIsIm1vYmlsZVNjcm9sbCIsInN3aXBlIiwicGFyYW1zIiwibmFtZSIsImRpcmVjdGlvbiIsImluY2x1ZGVzIiwidG9Mb3dlckNhc2UiLCJtc2ciLCJwcmVkaWNhdGVTdHJpbmciLCJ0b1Zpc2libGUiLCJkaXN0YW5jZSIsIm1vYmlsZVN3aXBlIiwibW9iaWxlUGluY2giLCJzY2FsZSIsInZlbG9jaXR5IiwibW9iaWxlRG91YmxlVGFwIiwibW9iaWxlVHdvRmluZ2VyVGFwIiwibW9iaWxlVG91Y2hBbmRIb2xkIiwibW9iaWxlVGFwIiwibW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwiZnJvbVgiLCJmcm9tWSIsInRvWCIsInRvWSIsIm1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMiLCJudW1iZXJPZlRhcHMiLCJudW1iZXJPZlRvdWNoZXMiLCJtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlIiwiaXNTdHJpbmciLCJvcmRlciIsIm9mZnNldCIsIm1vYmlsZVJvdGF0ZUVsZW1lbnQiLCJyb3RhdGlvbiIsImdldENvb3JkaW5hdGVzIiwiZ2VzdHVyZSIsImNvb3JkaW5hdGVzIiwiYXJlT2Zmc2V0cyIsIm9wdGlvblgiLCJvcHRpb25zIiwib3B0aW9uWSIsInJlY3QiLCJnZXRFbGVtZW50UmVjdCIsInBvcyIsInNpemUiLCJ3Iiwid2lkdGgiLCJoIiwiaGVpZ2h0Iiwib2Zmc2V0WCIsIm9mZnNldFkiLCJhcHBseU1vdmVUb09mZnNldCIsImZpcnN0Q29vcmRpbmF0ZXMiLCJzZWNvbmRDb29yZGluYXRlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsT0FBTyxHQUFHLEVBQWhCO0FBQUEsTUFBb0JDLFVBQVUsR0FBRyxFQUFqQztBQUFBLE1BQXFDQyxRQUFRLEdBQUcsRUFBaEQ7Ozs7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsSUFBSSxHQUFHLEVBQTdCLEVBQWlDO0FBQy9CLE1BQUlBLElBQUksQ0FBQ0MsT0FBVCxFQUFrQjtBQUNoQkMsb0JBQUlDLElBQUosQ0FBVSwrRUFBVjtBQUNEOztBQUNELFFBQU1DLEVBQUUsR0FBR0osSUFBSSxDQUFDSyxTQUFMLElBQWtCTCxJQUFJLENBQUNDLE9BQWxDO0FBQ0EsU0FBT0csRUFBRSxHQUFHRSxvQkFBS0MsYUFBTCxDQUFtQkgsRUFBbkIsQ0FBSCxHQUE0QixJQUFyQztBQUNEOztBQUVELGVBQWVJLHdCQUFmLENBQXlDQyxNQUF6QyxFQUFpRFQsSUFBSSxHQUFHLEVBQXhELEVBQTREO0FBQzFELFNBQU9ELFdBQVcsQ0FBQ0MsSUFBRCxDQUFYLElBQ0ZNLG9CQUFLQyxhQUFMLENBQW1CLE1BQU1FLE1BQU0sQ0FBQ0MsMkJBQVAsQ0FBb0MsWUFBcEMsRUFBa0QsNEJBQWxELEVBQStFLEtBQS9FLENBQXpCLENBREw7QUFFRDs7QUFFRFosUUFBUSxDQUFDYSxNQUFULEdBQWtCLGVBQWVBLE1BQWYsQ0FBdUJQLEVBQXZCLEVBQTJCUSxPQUFPLEdBQUcsQ0FBckMsRUFBd0NDLE9BQU8sR0FBRyxDQUFsRCxFQUFxRDtBQUNyRVQsRUFBQUEsRUFBRSxHQUFHRSxvQkFBS0MsYUFBTCxDQUFtQkgsRUFBbkIsQ0FBTDs7QUFFQSxNQUFJLEtBQUtVLFlBQUwsRUFBSixFQUF5QjtBQUN2QixRQUFJO0FBQUNDLE1BQUFBLENBQUQ7QUFBSUMsTUFBQUE7QUFBSixRQUFTLE1B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LENBQUM5RyxDQUFaLEdBQWlCZ0gsT0FBTyxJQUFJLENBQTVCO0FBQ0FGLElBQUFBLFdBQVcsQ0FBQzdHLENBQVosR0FBaUJpSCxPQUFPLElBQUksQ0FBNUI7QUFDRDs7QUFDRCxTQUFPSixXQUFQO0FBQ0QsQ0EzQ0Q7O0FBNkNBakksT0FBTyxDQUFDZ0osaUJBQVIsR0FBNEIsU0FBU0EsaUJBQVQsQ0FBNEJDLGdCQUE1QixFQUE4Q0MsaUJBQTlDLEVBQWlFO0FBQzNGLE1BQUlBLGlCQUFpQixDQUFDaEIsVUFBdEIsRUFBa0M7QUFDaEMsV0FBTztBQUNML0csTUFBQUEsQ0FBQyxFQUFFOEgsZ0JBQWdCLENBQUM5SCxDQUFqQixHQUFxQitILGlCQUFpQixDQUFDL0gsQ0FEckM7QUFFTEMsTUFBQUEsQ0FBQyxFQUFFNkgsZ0JBQWdCLENBQUM3SCxDQUFqQixHQUFxQjhILGlCQUFpQixDQUFDOUg7QUFGckMsS0FBUDtBQUlELEdBTEQsTUFLTztBQUNMLFdBQU84SCxpQkFBUDtBQUNEO0FBQ0YsQ0FURDs7QUFXQXRFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjNUUsVUFBZCxFQUEwQkQsT0FBMUIsRUFBbUNFLFFBQW5DO2VBRWVELFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cblxuY29uc3QgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge30sIGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHRvRWxlbWVudElkIChvcHRzID0ge30pIHtcbiAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgIGxvZy5pbmZvKGBUaGUgJ2VsZW1lbnQnIGFyZ3VtZW50IG5hbWUgaXMgZGVwcmVjYXRlZC4gQ29uc2lkZXIgdXNpbmcgJ2VsZW1lbnRJZCcgaW5zdGVhZGApO1xuICB9XG4gIGNvbnN0IGVsID0gb3B0cy5lbGVtZW50SWQgfHwgb3B0cy5lbGVtZW50O1xuICByZXR1cm4gZWwgPyB1dGlsLnVud3JhcEVsZW1lbnQoZWwpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkIChkcml2ZXIsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gdG9FbGVtZW50SWQob3B0cylcbiAgICB8fCB1dGlsLnVud3JhcEVsZW1lbnQoYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhgY2xhc3MgbmFtZWAsIGBYQ1VJRWxlbWVudFR5cGVBcHBsaWNhdGlvbmAsIGZhbHNlKSk7XG59XG5cbmNvbW1hbmRzLm1vdmVUbyA9IGFzeW5jIGZ1bmN0aW9uIG1vdmVUbyAoZWwsIHhvZmZzZXQgPSAwLCB5b2Zmc2V0ID0gMCkge1xuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG5cbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgbGV0IGNvb3JkcyA9IHtcbiAgICAgIHg6IHggKyB4b2Zmc2V0LFxuICAgICAgeTogeSArIHlvZmZzZXRcbiAgICB9O1xuICAgIHRoaXMuY3VyV2ViQ29vcmRzID0gY29vcmRzO1xuICAgIGxldCBhdG9tc0VsZW1lbnQgPSB0aGlzLnVzZUF0b21zRWxlbWVudChlbCk7XG4gICAgbGV0IHJlbENvb3JkcyA9IHt4OiB4b2Zmc2V0LCB5OiB5b2Zmc2V0fTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdtb3ZlX21vdXNlJywgW2F0b21zRWxlbWVudCwgcmVsQ29vcmRzXSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNOaWwoZWwpKSB7XG4gICAgICBpZiAoIXRoaXMuY3VyQ29vcmRzKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkV4Y2VwdGlvbihcbiAgICAgICAgICAnQ3VycmVudCBjdXJzb3IgcG9zaXRpb24gdW5rbm93biwgcGxlYXNlIHVzZSBtb3ZlVG8gd2l0aCBhbiBlbGVtZW50IHRoZSBmaXJzdCB0aW1lLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IHRoaXMuY3VyQ29vcmRzLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiB0aGlzLmN1ckNvb3Jkcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVsUG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbCk7XG4gICAgICB0aGlzLmN1ckNvb3JkcyA9IHtcbiAgICAgICAgeDogZWxQb3MueCArIHhvZmZzZXQsXG4gICAgICAgIHk6IGVsUG9zLnkgKyB5b2Zmc2V0XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gcmVxdWlyZUZsb2F0UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVJbnRQYXJhbWV0ZXIgKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgbWV0aG9kTmFtZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbVZhbHVlKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFwiJHtwYXJhbU5hbWV9XCIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgXCIke21ldGhvZE5hbWV9XCIgY2FsbGApO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlSW50KHBhcmFtVmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBpbnRlZ2VyLiBcIiR7cGFyYW1WYWx1ZX1cIiBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29tbWFuZHMubW9iaWxlU2hha2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTaGFrZSAoKSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoJ1NoYWtlIGlzIG5vdCBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaGFrZSgpO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiBjbGljayAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvbW1hbmRzIHRoYXQgbWFwIGhlcmUsIHNvIG1hbnVhbGx5IHByb3h5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubmF0aXZlQ2xpY2soZWwpO1xuICB9XG4gIGVsID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKChhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcCB8fCAoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QpIHtcbiAgICAvLyBhdG9tcy1iYXNlZCBjbGlja3MgZG9uJ3QgYWx3YXlzIHdvcmsgaW4gc2FmYXJpIDdcbiAgICBsb2cuZGVidWcoJ1VzaW5nIG5hdGl2ZSB3ZWIgdGFwJyk7XG4gICAgYXdhaXQgdGhpcy5uYXRpdmVXZWJUYXAoZWwpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMudXNlQXRvbXNFbGVtZW50KGVsKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnY2xpY2snLCBbYXRvbXNFbGVtZW50XSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdlc3R1cmVzQ2hhaW5Ub1N0cmluZyAoZ2VzdHVyZXMsIGtleXNUb0luY2x1ZGUgPSBbJ29wdGlvbnMnXSkge1xuICByZXR1cm4gZ2VzdHVyZXMubWFwKChpdGVtKSA9PiB7XG4gICAgbGV0IG90aGVyS2V5cyA9IF8uZGlmZmVyZW5jZShfLmtleXMoaXRlbSksIFsnYWN0aW9uJ10pO1xuICAgIG90aGVyS2V5cyA9IF8uaXNBcnJheShrZXlzVG9JbmNsdWRlKSA/IF8uaW50ZXJzZWN0aW9uKG90aGVyS2V5cywga2V5c1RvSW5jbHVkZSkgOiBvdGhlcktleXM7XG4gICAgaWYgKG90aGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBgJHtpdGVtLmFjdGlvbn1gICtcbiAgICAgICAgYCgke18ubWFwKG90aGVyS2V5cywgKHgpID0+IHggKyAnPScgKyAoXy5pc1BsYWluT2JqZWN0KGl0ZW1beF0pID8gSlNPTi5zdHJpbmdpZnkoaXRlbVt4XSkgOiBpdGVtW3hdKSkuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW0uYWN0aW9uO1xuICB9KS5qb2luKCctJyk7XG59XG5cbmNvbW1hbmRzLnBlcmZvcm1BY3Rpb25zID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUFjdGlvbnMgKGFjdGlvbnMpIHtcbiAgbG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIFczQyBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KGFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICAvLyBUaGlzIGlzIG1hbmRhdG9yeSwgc2luY2UgV0RBIG9ubHkgc3VwcG9ydHMgVE9VQ0ggcG9pbnRlciB0eXBlXG4gIC8vIGFuZCBTZWxlbml1bSBBUEkgdXNlcyBNT1VTRSBhcyB0aGUgZGVmYXVsdCBvbmVcbiAgY29uc3QgcHJlcHJvY2Vzc2VkQWN0aW9ucyA9IGFjdGlvbnNcbiAgICAubWFwKChhY3Rpb24pID0+IE9iamVjdC5hc3NpZ24oe30sIGFjdGlvbiwgYWN0aW9uLnR5cGUgPT09ICdwb2ludGVyJyA/IHtcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgcG9pbnRlclR5cGU6ICd0b3VjaCdcbiAgICAgIH1cbiAgICB9IDoge30pKVxuICAgIC5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgY29uc3QgbW9kaWZpZWRBY3Rpb24gPSBfLmNsb25lKGFjdGlvbikgfHwge307XG4gICAgICAvLyBTZWxlbml1bSBBUEkgdW5leHBlY3RlZGx5IGluc2VydHMgemVybyBwYXVzZXMsIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFdEQVxuICAgICAgbW9kaWZpZWRBY3Rpb24uYWN0aW9ucyA9IChhY3Rpb24uYWN0aW9ucyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcigoaW5uZXJBY3Rpb24pID0+ICEoaW5uZXJBY3Rpb24udHlwZSA9PT0gJ3BhdXNlJyAmJiBpbm5lckFjdGlvbi5kdXJhdGlvbiA9PT0gMCkpO1xuICAgICAgcmV0dXJuIG1vZGlmaWVkQWN0aW9uO1xuICAgIH0pO1xuICBsb2cuZGVidWcoYFByZXByb2Nlc3NlZCBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KHByZXByb2Nlc3NlZEFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hY3Rpb25zJywgJ1BPU1QnLCB7YWN0aW9uczogcHJlcHJvY2Vzc2VkQWN0aW9uc30pO1xufTtcblxuY29tbWFuZHMucGVyZm9ybVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVRvdWNoIChnZXN0dXJlcykge1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdG91Y2ggYWN0aW9uOiAke2dlc3R1cmVzQ2hhaW5Ub1N0cmluZyhnZXN0dXJlcyl9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zOiBnZXN0dXJlc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnVGhlIFRvdWNoIEFQSSBpcyBhaW1lZCBmb3IgdXNhZ2UgaW4gTkFUSVZFIGNvbnRleHQuICcgK1xuICAgICAgJ0NvbnNpZGVyIHVzaW5nIFwiZXhlY3V0ZVwiIEFQSSB3aXRoIGN1c3RvbSBldmVudHMgdHJpZ2dlciBzY3JpcHQgJyArXG4gICAgICBgdG8gZW11bGF0ZSB0b3VjaCBldmVudHMgYmVpbmcgaW4gV0VCVklFVyBjb250ZXh0LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1NdWx0aUFjdGlvbiAoYWN0aW9ucykge1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgbXVsdGkgdG91Y2ggYWN0aW9uOmApO1xuICBmb3IgKGxldCBpIGluIGFjdGlvbnMpIHtcbiAgICBsb2cuZGVidWcoYCAgICAke3BhcnNlSW50KGksIDEwKSArIDF9OiAke18ubWFwKGFjdGlvbnNbaV0sICdhY3Rpb24nKS5qb2luKCctJyl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ1RoZSBNdWx0aVRvdWNoIEFQSSBpcyBhaW1lZCBmb3IgdXNhZ2UgaW4gTkFUSVZFIGNvbnRleHQuICcgK1xuICAgICAgJ0NvbnNpZGVyIHVzaW5nIFwiZXhlY3V0ZVwiIEFQSSB3aXRoIGN1c3RvbSBldmVudHMgdHJpZ2dlciBzY3JpcHQgJyArXG4gICAgICBgdG8gZW11bGF0ZSBtdWx0aXRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMubmF0aXZlQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiBuYXRpdmVDbGljayAoZWwpIHtcbiAgZWwgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICBsZXQgZW5kcG9pbnQgPSBgL2VsZW1lbnQvJHtlbH0vY2xpY2tgO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge30pO1xufTtcblxuLypcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvQ29tbWFuZHMvRkJFbGVtZW50Q29tbWFuZHMubVxuICogdG8gZ2V0IHRoZSBpbmZvIGFib3V0IGF2YWlsYWJsZSBXREEgZ2VzdHVyZXMgQVBJXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9yZWZlcmVuY2UveGN0ZXN0L3hjdWllbGVtZW50IGFuZFxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWNvb3JkaW5hdGUgdG8gZ2V0IHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZlxuICogYWxsIFhDVGVzdCBnZXN0dXJlc1xuKi9cblxuaGVscGVycy5tb2JpbGVTY3JvbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGwgKG9wdHMgPSB7fSwgc3dpcGUgPSBmYWxzZSkge1xuICAvLyBXREEgc3VwcG9ydHMgZm91ciBzY3JvbGxpbmcgc3RyYXRlZ2llczogcHJlZGljYXRpb24gYmFzZWQgb24gbmFtZSwgZGlyZWN0aW9uLFxuICAvLyBwcmVkaWNhdGVTdHJpbmcsIGFuZCB0b1Zpc2libGUsIGluIHRoYXQgb3JkZXIuIFN3aXBpbmcgcmVxdWlyZXMgZGlyZWN0aW9uLlxuICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgaWYgKG9wdHMubmFtZSAmJiAhc3dpcGUpIHtcbiAgICBwYXJhbXMubmFtZSA9IG9wdHMubmFtZTtcbiAgfSBlbHNlIGlmIChvcHRzLmRpcmVjdGlvbikge1xuICAgIGlmICghWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXS5pbmNsdWRlcyhvcHRzLmRpcmVjdGlvbi50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgbGV0IG1zZyA9ICdEaXJlY3Rpb24gbXVzdCBiZSB1cCwgZG93biwgbGVmdCBvciByaWdodCc7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICAgIH1cbiAgICBwYXJhbXMuZGlyZWN0aW9uID0gb3B0cy5kaXJlY3Rpb247XG4gIH0gZWxzZSBpZiAob3B0cy5wcmVkaWNhdGVTdHJpbmcgJiYgIXN3aXBlKSB7XG4gICAgcGFyYW1zLnByZWRpY2F0ZVN0cmluZyA9IG9wdHMucHJlZGljYXRlU3RyaW5nO1xuICB9IGVsc2UgaWYgKG9wdHMudG9WaXNpYmxlICYmICFzd2lwZSkge1xuICAgIHBhcmFtcy50b1Zpc2libGUgPSBvcHRzLnRvVmlzaWJsZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtc2cgPSBzd2lwZVxuICAgICAgPyAnTW9iaWxlIHN3aXBlIHJlcXVpcmVzIGRpcmVjdGlvbidcbiAgICAgIDogJ01vYmlsZSBzY3JvbGwgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzOiBuYW1lLCBkaXJlY3Rpb24sIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZS4gU3BlY2lmeSBvbmUgb2YgdGhlc2UnO1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IobXNnKTtcbiAgfVxuXG4gIC8vIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgcGFzcyBhIGRpc3RhbmNlIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSByYXRpbyBvZlxuICAvLyBzY3JlZW4gaGVpZ2h0LCBzbyAxLjAgbWVhbnMgYSBmdWxsIHNjcmVlbidzIHdvcnRoIG9mIHNjcm9sbGluZ1xuICBpZiAoIXN3aXBlICYmIG9wdHMuZGlzdGFuY2UpIHtcbiAgICBwYXJhbXMuZGlzdGFuY2UgPSBvcHRzLmRpc3RhbmNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9LyR7c3dpcGUgPyAnc3dpcGUnIDogJ3Njcm9sbCd9YDtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVN3aXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVTY3JvbGwob3B0cywgdHJ1ZSk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVBpbmNoID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2ggKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgc2NhbGU6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignc2NhbGUnLCBvcHRzLnNjYWxlLCAncGluY2gnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdwaW5jaCcpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3BpbmNoYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEb3VibGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIERvdWJsZSB0YXAgZWxlbWVudFxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kb3VibGVUYXBgLCAnUE9TVCcpO1xuICB9XG4gIC8vIERvdWJsZSB0YXAgY29vcmRpbmF0ZXNcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ2RvdWJsZVRhcCcpLFxuICAgIHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ2RvdWJsZVRhcCcpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kb3VibGVUYXAnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVR3b0ZpbmdlclRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR3b0ZpbmdlclRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3R3b0ZpbmdlclRhcGAsICdQT1NUJyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRvdWNoQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRvdWNoQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBkdXJhdGlvbjogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdkdXJhdGlvbicsIG9wdHMuZHVyYXRpb24sICd0b3VjaEFuZEhvbGQnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIExvbmcgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdG91Y2hBbmRIb2xkYCwgJ1BPU1QnLCBwYXJhbXMpO1xuICB9XG4gIC8vIExvbmcgdGFwIGNvb3JkaW5hdGVzXG4gIHBhcmFtcy54ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndG91Y2hBbmRIb2xkJyk7XG4gIHBhcmFtcy55ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndG91Y2hBbmRIb2xkJyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaEFuZEhvbGQnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICd0YXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICd0YXAnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKSB8fCAnMCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS90YXAvJHtlbGVtZW50SWR9YCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVgnLCBvcHRzLmZyb21YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVknLCBvcHRzLmZyb21ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWCcsIG9wdHMudG9YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWScsIG9wdHMudG9ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIHJldHVybiBlbGVtZW50SWRcbiAgICAvLyBEcmFnIGVsZW1lbnRcbiAgICA/IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2RyYWdmcm9tdG9mb3JkdXJhdGlvbmAsICdQT1NUJywgcGFyYW1zKVxuICAgIC8vIERyYWcgY29vcmRpbmF0ZXNcbiAgICA6IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2RyYWdmcm9tdG9mb3JkdXJhdGlvbicsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3IgdGFwV2l0aE51bWJlck9mVGFwcyBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgbnVtYmVyT2ZUYXBzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRhcHMnLCBvcHRzLm51bWJlck9mVGFwcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgICBudW1iZXJPZlRvdWNoZXM6IHJlcXVpcmVJbnRQYXJhbWV0ZXIoJ251bWJlck9mVG91Y2hlcycsIG9wdHMubnVtYmVyT2ZUb3VjaGVzLCAndGFwV2l0aE51bWJlck9mVGFwcycpLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdGFwV2l0aE51bWJlck9mVGFwc2AsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igc2VsZWN0UGlja2VyV2hlZWxWYWx1ZSBtZXRob2QnKTtcbiAgfVxuICBpZiAoIV8uaXNTdHJpbmcob3B0cy5vcmRlcikgfHwgIVsnbmV4dCcsICdwcmV2aW91cyddLmluY2x1ZGVzKG9wdHMub3JkZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBUaGUgbWFuZGF0b3J5ICdvcmRlcicgcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIGVxdWFsIGVpdGhlciB0byAnbmV4dCcgb3IgJ3ByZXZpb3VzJy4gYCArXG4gICAgICBgJyR7b3B0cy5vcmRlcn0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7b3JkZXI6IG9wdHMub3JkZXJ9O1xuICBpZiAob3B0cy5vZmZzZXQpIHtcbiAgICBwYXJhbXMub2Zmc2V0ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdvZmZzZXQnLCBvcHRzLm9mZnNldCwgJ3NlbGVjdFBpY2tlcldoZWVsVmFsdWUnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvcGlja2Vyd2hlZWwvJHtlbGVtZW50SWR9L3NlbGVjdGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlUm90YXRlRWxlbWVudCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJvdGF0ZUVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igcm90YXRlRWxlbWVudCBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgcm90YXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigncm90YXRpb24nLCBvcHRzLnJvdGF0aW9uLCAncm90YXRlRWxlbWVudCcpLFxuICAgIHZlbG9jaXR5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3ZlbG9jaXR5Jywgb3B0cy52ZWxvY2l0eSwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3JvdGF0ZWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q29vcmRpbmF0ZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29yZGluYXRlcyAoZ2VzdHVyZSkge1xuICAvLyBkZWZhdWx0c1xuICBsZXQgY29vcmRpbmF0ZXMgPSB7eDogMCwgeTogMCwgYXJlT2Zmc2V0czogZmFsc2V9O1xuXG4gIGxldCBvcHRpb25YID0gbnVsbDtcbiAgaWYgKGdlc3R1cmUub3B0aW9ucy54KSB7XG4gICAgb3B0aW9uWCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIGdlc3R1cmUub3B0aW9ucy54LCAnZ2V0Q29vcmRpbmF0ZXMnKTtcbiAgfVxuICBsZXQgb3B0aW9uWSA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueSkge1xuICAgIG9wdGlvblkgPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBnZXN0dXJlLm9wdGlvbnMueSwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IHRoZSBlbGVtZW50IGNvb3JkaW5hdGVzLlxuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChnZXN0dXJlLm9wdGlvbnMpO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgbGV0IHJlY3QgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRSZWN0KGVsZW1lbnRJZCk7XG4gICAgbGV0IHBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gICAgbGV0IHNpemUgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gICAgLy8gZGVmYXVsdHNcbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuXG4gICAgLy8gZ2V0IHRoZSByZWFsIG9mZnNldHNcbiAgICBpZiAob3B0aW9uWCB8fCBvcHRpb25ZKSB7XG4gICAgICBvZmZzZXRYID0gKG9wdGlvblggfHwgMCk7XG4gICAgICBvZmZzZXRZID0gKG9wdGlvblkgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldFggPSAoc2l6ZS53IC8gMik7XG4gICAgICBvZmZzZXRZID0gKHNpemUuaCAvIDIpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMueCA9IHBvcy54ICsgb2Zmc2V0WDtcbiAgICBjb29yZGluYXRlcy55ID0gcG9zLnkgKyBvZmZzZXRZO1xuICB9IGVsc2Uge1xuICAgIC8vIG1vdmVUbyBjb29yZGluYXRlcyBhcmUgcGFzc2VkIGluIGFzIG9mZnNldHNcbiAgICBjb29yZGluYXRlcy5hcmVPZmZzZXRzID0gKGdlc3R1cmUuYWN0aW9uID09PSAnbW92ZVRvJyk7XG4gICAgY29vcmRpbmF0ZXMueCA9IChvcHRpb25YIHx8IDApO1xuICAgIGNvb3JkaW5hdGVzLnkgPSAob3B0aW9uWSB8fCAwKTtcbiAgfVxuICByZXR1cm4gY29vcmRpbmF0ZXM7XG59O1xuXG5oZWxwZXJzLmFwcGx5TW92ZVRvT2Zmc2V0ID0gZnVuY3Rpb24gYXBwbHlNb3ZlVG9PZmZzZXQgKGZpcnN0Q29vcmRpbmF0ZXMsIHNlY29uZENvb3JkaW5hdGVzKSB7XG4gIGlmIChzZWNvbmRDb29yZGluYXRlcy5hcmVPZmZzZXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGZpcnN0Q29vcmRpbmF0ZXMueCArIHNlY29uZENvb3JkaW5hdGVzLngsXG4gICAgICB5OiBmaXJzdENvb3JkaW5hdGVzLnkgKyBzZWNvbmRDb29yZGluYXRlcy55LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNlY29uZENvb3JkaW5hdGVzO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGhlbHBlcnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGV4dGVuc2lvbnMsIGhlbHBlcnMsIGNvbW1hbmRzLCBnZXN0dXJlc0NoYWluVG9TdHJpbmcgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
430
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJ0b0VsZW1lbnRJZCIsIm9wdHMiLCJlbGVtZW50IiwibG9nIiwiaW5mbyIsImVsIiwiZWxlbWVudElkIiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJ0b0VsZW1lbnRPckFwcGxpY2F0aW9uSWQiLCJkcml2ZXIiLCJmaW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMiLCJtb3ZlVG8iLCJ4b2Zmc2V0IiwieW9mZnNldCIsImlzV2ViQ29udGV4dCIsIngiLCJ5IiwiZ2V0TG9jYXRpb24iLCJjb29yZHMiLCJjdXJXZWJDb29yZHMiLCJhdG9tc0VsZW1lbnQiLCJ1c2VBdG9tc0VsZW1lbnQiLCJyZWxDb29yZHMiLCJleGVjdXRlQXRvbSIsIl8iLCJpc05pbCIsImN1ckNvb3JkcyIsImVycm9ycyIsIlVua25vd25FeGNlcHRpb24iLCJlbFBvcyIsInJlcXVpcmVGbG9hdFBhcmFtZXRlciIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJtZXRob2ROYW1lIiwiaXNVbmRlZmluZWQiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsInJlc3VsdCIsInBhcnNlRmxvYXQiLCJpc05hTiIsInJlcXVpcmVJbnRQYXJhbWV0ZXIiLCJwYXJzZUludCIsIm1vYmlsZVNoYWtlIiwiaXNTaW11bGF0b3IiLCJVbmtub3duRXJyb3IiLCJkZXZpY2UiLCJzaGFrZSIsImNsaWNrIiwibmF0aXZlQ2xpY2siLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiZGVidWciLCJnZXN0dXJlc0NoYWluVG9TdHJpbmciLCJnZXN0dXJlcyIsImtleXNUb0luY2x1ZGUiLCJtYXAiLCJpdGVtIiwib3RoZXJLZXlzIiwiZGlmZmVyZW5jZSIsImtleXMiLCJpc0FycmF5IiwiaW50ZXJzZWN0aW9uIiwibGVuZ3RoIiwiYWN0aW9uIiwiaXNQbGFpbk9iamVjdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqb2luIiwicGVyZm9ybUFjdGlvbnMiLCJhY3Rpb25zIiwicHJlcHJvY2Vzc2VkQWN0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJwYXJhbWV0ZXJzIiwicG9pbnRlclR5cGUiLCJtb2RpZmllZEFjdGlvbiIsImNsb25lIiwiZmlsdGVyIiwiaW5uZXJBY3Rpb24iLCJkdXJhdGlvbiIsInByb3h5Q29tbWFuZCIsInJlbGVhc2VBY3Rpb25zIiwid2FybiIsInBlcmZvcm1Ub3VjaCIsImUiLCJlcnJvckFuZFRocm93IiwibWVzc2FnZSIsInBlcmZvcm1NdWx0aUFjdGlvbiIsImkiLCJlbmRwb2ludCIsIm1vYmlsZVNjcm9sbCIsInN3aXBlIiwicGFyYW1zIiwibmFtZSIsImRpcmVjdGlvbiIsImluY2x1ZGVzIiwidG9Mb3dlckNhc2UiLCJtc2ciLCJwcmVkaWNhdGVTdHJpbmciLCJ0b1Zpc2libGUiLCJkaXN0YW5jZSIsIm1vYmlsZVN3aXBlIiwibW9iaWxlUGluY2giLCJzY2FsZSIsInZlbG9jaXR5IiwibW9iaWxlRG91YmxlVGFwIiwibW9iaWxlVHdvRmluZ2VyVGFwIiwibW9iaWxlVG91Y2hBbmRIb2xkIiwibW9iaWxlVGFwIiwibW9iaWxlRHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwiZnJvbVgiLCJmcm9tWSIsInRvWCIsInRvWSIsIm1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMiLCJudW1iZXJPZlRhcHMiLCJudW1iZXJPZlRvdWNoZXMiLCJtb2JpbGVTZWxlY3RQaWNrZXJXaGVlbFZhbHVlIiwiaXNTdHJpbmciLCJvcmRlciIsIm9mZnNldCIsIm1vYmlsZVJvdGF0ZUVsZW1lbnQiLCJyb3RhdGlvbiIsImdldENvb3JkaW5hdGVzIiwiZ2VzdHVyZSIsImNvb3JkaW5hdGVzIiwiYXJlT2Zmc2V0cyIsIm9wdGlvblgiLCJvcHRpb25zIiwib3B0aW9uWSIsInJlY3QiLCJnZXRFbGVtZW50UmVjdCIsInBvcyIsInNpemUiLCJ3Iiwid2lkdGgiLCJoIiwiaGVpZ2h0Iiwib2Zmc2V0WCIsIm9mZnNldFkiLCJhcHBseU1vdmVUb09mZnNldCIsImZpcnN0Q29vcmRpbmF0ZXMiLCJzZWNvbmRDb29yZGluYXRlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsT0FBTyxHQUFHLEVBQWhCO0FBQUEsTUFBb0JDLFVBQVUsR0FBRyxFQUFqQztBQUFBLE1BQXFDQyxRQUFRLEdBQUcsRUFBaEQ7Ozs7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsSUFBSSxHQUFHLEVBQTdCLEVBQWlDO0FBQy9CLE1BQUlBLElBQUksQ0FBQ0MsT0FBVCxFQUFrQjtBQUNoQkMsb0JBQUlDLElBQUosQ0FBVSwrRUFBVjtBQUNEOztBQUNELFFBQU1DLEVBQUUsR0FBR0osSUFBSSxDQUFDSyxTQUFMLElBQWtCTCxJQUFJLENBQUNDLE9BQWxDO0FBQ0EsU0FBT0csRUFBRSxHQUFHRSxvQkFBS0MsYUFBTCxDQUFtQkgsRUFBbkIsQ0FBSCxHQUE0QixJQUFyQztBQUNEOztBQUVELGVBQWVJLHdCQUFmLENBQXlDQyxNQUF6QyxFQUFpRFQsSUFBSSxHQUFHLEVBQXhELEVBQTREO0FBQzFELFNBQU9ELFdBQVcsQ0FBQ0MsSUFBRCxDQUFYLElBQ0ZNLG9CQUFLQyxhQUFMLENBQW1CLE1BQU1FLE1BQU0sQ0FBQ0MsMkJBQVAsQ0FBb0MsWUFBcEMsRUFBa0QsNEJBQWxELEVBQStFLEtBQS9FLENBQXpCLENBREw7QUFFRDs7QUFFRFosUUFBUSxDQUFDYSxNQUFULEdBQWtCLGVBQWVBLE1BQWYsQ0FBdUJQLEVBQXZCLEVBQTJCUSxPQUFPLEdBQUcsQ0FBckMsRUFBd0NDLE9BQU8sR0FBRyxDQUFsRCxFQUFxRDtBQUNyRVQsRUFBQUEsRUFBRSxHQUFHRSxvQkFBS0MsYUFBTCxDQUFtQkgsRUFBbkIsQ0FBTDs7QUFFQSxNQUFJLEtBQUtVLFlBQUwsRUFBSixFQUF5QjtBQUN2QixRQUFJO0FBQUNDLE1BQUFBLENBQUQ7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QUFKLEdBQVE2SCxPQUF4QjtBQUNELEdBckJELE1BcUJPO0FBRUxkLElBQUFBLFdBQVcsQ0FBQ0MsVUFBWixHQUEwQkYsT0FBTyxDQUFDOUQsTUFBUixLQUFtQixRQUE3QztBQUNBK0QsSUFBQUEsV0FBVyxDQUFDaEgsQ0FBWixHQUFpQmtILE9BQU8sSUFBSSxDQUE1QjtBQUNBRixJQUFBQSxXQUFXLENBQUMvRyxDQUFaLEdBQWlCbUgsT0FBTyxJQUFJLENBQTVCO0FBQ0Q7O0FBQ0QsU0FBT0osV0FBUDtBQUNELENBM0NEOztBQTZDQW5JLE9BQU8sQ0FBQ2tKLGlCQUFSLEdBQTRCLFNBQVNBLGlCQUFULENBQTRCQyxnQkFBNUIsRUFBOENDLGlCQUE5QyxFQUFpRTtBQUMzRixNQUFJQSxpQkFBaUIsQ0FBQ2hCLFVBQXRCLEVBQWtDO0FBQ2hDLFdBQU87QUFDTGpILE1BQUFBLENBQUMsRUFBRWdJLGdCQUFnQixDQUFDaEksQ0FBakIsR0FBcUJpSSxpQkFBaUIsQ0FBQ2pJLENBRHJDO0FBRUxDLE1BQUFBLENBQUMsRUFBRStILGdCQUFnQixDQUFDL0gsQ0FBakIsR0FBcUJnSSxpQkFBaUIsQ0FBQ2hJO0FBRnJDLEtBQVA7QUFJRCxHQUxELE1BS087QUFDTCxXQUFPZ0ksaUJBQVA7QUFDRDtBQUNGLENBVEQ7O0FBV0F4RSxNQUFNLENBQUNDLE1BQVAsQ0FBYzVFLFVBQWQsRUFBMEJELE9BQTFCLEVBQW1DRSxRQUFuQztlQUVlRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5cbmNvbnN0IGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiB0b0VsZW1lbnRJZCAob3B0cyA9IHt9KSB7XG4gIGlmIChvcHRzLmVsZW1lbnQpIHtcbiAgICBsb2cuaW5mbyhgVGhlICdlbGVtZW50JyBhcmd1bWVudCBuYW1lIGlzIGRlcHJlY2F0ZWQuIENvbnNpZGVyIHVzaW5nICdlbGVtZW50SWQnIGluc3RlYWRgKTtcbiAgfVxuICBjb25zdCBlbCA9IG9wdHMuZWxlbWVudElkIHx8IG9wdHMuZWxlbWVudDtcbiAgcmV0dXJuIGVsID8gdXRpbC51bndyYXBFbGVtZW50KGVsKSA6IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCAoZHJpdmVyLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIHRvRWxlbWVudElkKG9wdHMpXG4gICAgfHwgdXRpbC51bndyYXBFbGVtZW50KGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoYGNsYXNzIG5hbWVgLCBgWENVSUVsZW1lbnRUeXBlQXBwbGljYXRpb25gLCBmYWxzZSkpO1xufVxuXG5jb21tYW5kcy5tb3ZlVG8gPSBhc3luYyBmdW5jdGlvbiBtb3ZlVG8gKGVsLCB4b2Zmc2V0ID0gMCwgeW9mZnNldCA9IDApIHtcbiAgZWwgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuXG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgbGV0IHt4LCB5fSA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24oZWwpO1xuICAgIGxldCBjb29yZHMgPSB7XG4gICAgICB4OiB4ICsgeG9mZnNldCxcbiAgICAgIHk6IHkgKyB5b2Zmc2V0XG4gICAgfTtcbiAgICB0aGlzLmN1cldlYkNvb3JkcyA9IGNvb3JkcztcbiAgICBsZXQgYXRvbXNFbGVtZW50ID0gdGhpcy51c2VBdG9tc0VsZW1lbnQoZWwpO1xuICAgIGxldCByZWxDb29yZHMgPSB7eDogeG9mZnNldCwgeTogeW9mZnNldH07XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnbW92ZV9tb3VzZScsIFthdG9tc0VsZW1lbnQsIHJlbENvb3Jkc10pO1xuICB9IGVsc2Uge1xuICAgIGlmIChfLmlzTmlsKGVsKSkge1xuICAgICAgaWYgKCF0aGlzLmN1ckNvb3Jkcykge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FeGNlcHRpb24oXG4gICAgICAgICAgJ0N1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIHVua25vd24sIHBsZWFzZSB1c2UgbW92ZVRvIHdpdGggYW4gZWxlbWVudCB0aGUgZmlyc3QgdGltZS4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VyQ29vcmRzID0ge1xuICAgICAgICB4OiB0aGlzLmN1ckNvb3Jkcy54ICsgeG9mZnNldCxcbiAgICAgICAgeTogdGhpcy5jdXJDb29yZHMueSArIHlvZmZzZXRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlbFBvcyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24oZWwpO1xuICAgICAgdGhpcy5jdXJDb29yZHMgPSB7XG4gICAgICAgIHg6IGVsUG9zLnggKyB4b2Zmc2V0LFxuICAgICAgICB5OiBlbFBvcy55ICsgeW9mZnNldFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlcXVpcmVGbG9hdFBhcmFtZXRlciAocGFyYW1OYW1lLCBwYXJhbVZhbHVlLCBtZXRob2ROYW1lKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtVmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgXCIke3BhcmFtTmFtZX1cIiBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBcIiR7bWV0aG9kTmFtZX1cIiBjYWxsYCk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gcGFyc2VGbG9hdChwYXJhbVZhbHVlKTtcbiAgaWYgKGlzTmFOKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBzaG91bGQgYmUgYSB2YWxpZCBudW1iZXIuIFwiJHtwYXJhbVZhbHVlfVwiIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlSW50UGFyYW1ldGVyIChwYXJhbU5hbWUsIHBhcmFtVmFsdWUsIG1ldGhvZE5hbWUpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBcIiR7cGFyYW1OYW1lfVwiIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgZm9yIFwiJHttZXRob2ROYW1lfVwiIGNhbGxgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBwYXJzZUludChwYXJhbVZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihyZXN1bHQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgXCIke3BhcmFtTmFtZX1cIiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgdmFsaWQgaW50ZWdlci4gXCIke3BhcmFtVmFsdWV9XCIgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbW1hbmRzLm1vYmlsZVNoYWtlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2hha2UgKCkge1xuICBpZiAoIXRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKCdTaGFrZSBpcyBub3Qgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlcycpO1xuICB9XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2hha2UoKTtcbn07XG5cbmNvbW1hbmRzLmNsaWNrID0gYXN5bmMgZnVuY3Rpb24gY2xpY2sgKGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIC8vIHRoZXJlIGFyZSBtdWx0aXBsZSBjb21tYW5kcyB0aGF0IG1hcCBoZXJlLCBzbyBtYW51YWxseSBwcm94eVxuICAgIHJldHVybiBhd2FpdCB0aGlzLm5hdGl2ZUNsaWNrKGVsKTtcbiAgfVxuICBlbCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICgoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXAgfHwgKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwU3RyaWN0KSB7XG4gICAgLy8gYXRvbXMtYmFzZWQgY2xpY2tzIGRvbid0IGFsd2F5cyB3b3JrIGluIHNhZmFyaSA3XG4gICAgbG9nLmRlYnVnKCdVc2luZyBuYXRpdmUgd2ViIHRhcCcpO1xuICAgIGF3YWl0IHRoaXMubmF0aXZlV2ViVGFwKGVsKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLnVzZUF0b21zRWxlbWVudChlbCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2NsaWNrJywgW2F0b21zRWxlbWVudF0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXN0dXJlc0NoYWluVG9TdHJpbmcgKGdlc3R1cmVzLCBrZXlzVG9JbmNsdWRlID0gWydvcHRpb25zJ10pIHtcbiAgcmV0dXJuIGdlc3R1cmVzLm1hcCgoaXRlbSkgPT4ge1xuICAgIGxldCBvdGhlcktleXMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGl0ZW0pLCBbJ2FjdGlvbiddKTtcbiAgICBvdGhlcktleXMgPSBfLmlzQXJyYXkoa2V5c1RvSW5jbHVkZSkgPyBfLmludGVyc2VjdGlvbihvdGhlcktleXMsIGtleXNUb0luY2x1ZGUpIDogb3RoZXJLZXlzO1xuICAgIGlmIChvdGhlcktleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYCR7aXRlbS5hY3Rpb259YCArXG4gICAgICAgIGAoJHtfLm1hcChvdGhlcktleXMsICh4KSA9PiB4ICsgJz0nICsgKF8uaXNQbGFpbk9iamVjdChpdGVtW3hdKSA/IEpTT04uc3RyaW5naWZ5KGl0ZW1beF0pIDogaXRlbVt4XSkpLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIHJldHVybiBpdGVtLmFjdGlvbjtcbiAgfSkuam9pbignLScpO1xufVxuXG5jb21tYW5kcy5wZXJmb3JtQWN0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1BY3Rpb25zIChhY3Rpb25zKSB7XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBXM0MgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShhY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgLy8gVGhpcyBpcyBtYW5kYXRvcnksIHNpbmNlIFdEQSBvbmx5IHN1cHBvcnRzIFRPVUNIIHBvaW50ZXIgdHlwZVxuICAvLyBhbmQgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgb25lXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSlcbiAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkQWN0aW9uID0gXy5jbG9uZShhY3Rpb24pIHx8IHt9O1xuICAgICAgLy8gU2VsZW5pdW0gQVBJIHVuZXhwZWN0ZWRseSBpbnNlcnRzIHplcm8gcGF1c2VzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBXREFcbiAgICAgIG1vZGlmaWVkQWN0aW9uLmFjdGlvbnMgPSAoYWN0aW9uLmFjdGlvbnMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKGlubmVyQWN0aW9uKSA9PiAhKGlubmVyQWN0aW9uLnR5cGUgPT09ICdwYXVzZScgJiYgaW5uZXJBY3Rpb24uZHVyYXRpb24gPT09IDApKTtcbiAgICAgIHJldHVybiBtb2RpZmllZEFjdGlvbjtcbiAgICB9KTtcbiAgbG9nLmRlYnVnKGBQcmVwcm9jZXNzZWQgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShwcmVwcm9jZXNzZWRBY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYWN0aW9ucycsICdQT1NUJywge2FjdGlvbnM6IHByZXByb2Nlc3NlZEFjdGlvbnN9KTtcbn07XG5cbmNvbW1hbmRzLnJlbGVhc2VBY3Rpb25zID0gZnVuY3Rpb24gcmVsZWFzZUFjdGlvbnMgKCkge1xuICBsb2cud2FybignT24gdGhpcyBwbGF0Zm9ybSwgcmVsZWFzZUFjdGlvbnMgaXMgYSBuby1vcCcpO1xufTtcblxuY29tbWFuZHMucGVyZm9ybVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVRvdWNoIChnZXN0dXJlcykge1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgdG91Y2ggYWN0aW9uOiAke2dlc3R1cmVzQ2hhaW5Ub1N0cmluZyhnZXN0dXJlcyl9YCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL3RvdWNoL3BlcmZvcm0nLCAnUE9TVCcsIHthY3Rpb25zOiBnZXN0dXJlc30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnVGhlIFRvdWNoIEFQSSBpcyBhaW1lZCBmb3IgdXNhZ2UgaW4gTkFUSVZFIGNvbnRleHQuICcgK1xuICAgICAgJ0NvbnNpZGVyIHVzaW5nIFwiZXhlY3V0ZVwiIEFQSSB3aXRoIGN1c3RvbSBldmVudHMgdHJpZ2dlciBzY3JpcHQgJyArXG4gICAgICBgdG8gZW11bGF0ZSB0b3VjaCBldmVudHMgYmVpbmcgaW4gV0VCVklFVyBjb250ZXh0LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnBlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1NdWx0aUFjdGlvbiAoYWN0aW9ucykge1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgbXVsdGkgdG91Y2ggYWN0aW9uOmApO1xuICBmb3IgKGxldCBpIGluIGFjdGlvbnMpIHtcbiAgICBsb2cuZGVidWcoYCAgICAke3BhcnNlSW50KGksIDEwKSArIDF9OiAke18ubWFwKGFjdGlvbnNbaV0sICdhY3Rpb24nKS5qb2luKCctJyl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywge2FjdGlvbnN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ1RoZSBNdWx0aVRvdWNoIEFQSSBpcyBhaW1lZCBmb3IgdXNhZ2UgaW4gTkFUSVZFIGNvbnRleHQuICcgK1xuICAgICAgJ0NvbnNpZGVyIHVzaW5nIFwiZXhlY3V0ZVwiIEFQSSB3aXRoIGN1c3RvbSBldmVudHMgdHJpZ2dlciBzY3JpcHQgJyArXG4gICAgICBgdG8gZW11bGF0ZSBtdWx0aXRvdWNoIGV2ZW50cyBiZWluZyBpbiBXRUJWSUVXIGNvbnRleHQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuY29tbWFuZHMubmF0aXZlQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiBuYXRpdmVDbGljayAoZWwpIHtcbiAgZWwgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICBsZXQgZW5kcG9pbnQgPSBgL2VsZW1lbnQvJHtlbH0vY2xpY2tgO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge30pO1xufTtcblxuLypcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvQ29tbWFuZHMvRkJFbGVtZW50Q29tbWFuZHMubVxuICogdG8gZ2V0IHRoZSBpbmZvIGFib3V0IGF2YWlsYWJsZSBXREEgZ2VzdHVyZXMgQVBJXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9yZWZlcmVuY2UveGN0ZXN0L3hjdWllbGVtZW50IGFuZFxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3JlZmVyZW5jZS94Y3Rlc3QveGN1aWNvb3JkaW5hdGUgdG8gZ2V0IHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZlxuICogYWxsIFhDVGVzdCBnZXN0dXJlc1xuKi9cblxuaGVscGVycy5tb2JpbGVTY3JvbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGwgKG9wdHMgPSB7fSwgc3dpcGUgPSBmYWxzZSkge1xuICAvLyBXREEgc3VwcG9ydHMgZm91ciBzY3JvbGxpbmcgc3RyYXRlZ2llczogcHJlZGljYXRpb24gYmFzZWQgb24gbmFtZSwgZGlyZWN0aW9uLFxuICAvLyBwcmVkaWNhdGVTdHJpbmcsIGFuZCB0b1Zpc2libGUsIGluIHRoYXQgb3JkZXIuIFN3aXBpbmcgcmVxdWlyZXMgZGlyZWN0aW9uLlxuICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgaWYgKG9wdHMubmFtZSAmJiAhc3dpcGUpIHtcbiAgICBwYXJhbXMubmFtZSA9IG9wdHMubmFtZTtcbiAgfSBlbHNlIGlmIChvcHRzLmRpcmVjdGlvbikge1xuICAgIGlmICghWyd1cCcsICdkb3duJywgJ2xlZnQnLCAncmlnaHQnXS5pbmNsdWRlcyhvcHRzLmRpcmVjdGlvbi50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgbGV0IG1zZyA9ICdEaXJlY3Rpb24gbXVzdCBiZSB1cCwgZG93biwgbGVmdCBvciByaWdodCc7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICAgIH1cbiAgICBwYXJhbXMuZGlyZWN0aW9uID0gb3B0cy5kaXJlY3Rpb247XG4gIH0gZWxzZSBpZiAob3B0cy5wcmVkaWNhdGVTdHJpbmcgJiYgIXN3aXBlKSB7XG4gICAgcGFyYW1zLnByZWRpY2F0ZVN0cmluZyA9IG9wdHMucHJlZGljYXRlU3RyaW5nO1xuICB9IGVsc2UgaWYgKG9wdHMudG9WaXNpYmxlICYmICFzd2lwZSkge1xuICAgIHBhcmFtcy50b1Zpc2libGUgPSBvcHRzLnRvVmlzaWJsZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtc2cgPSBzd2lwZVxuICAgICAgPyAnTW9iaWxlIHN3aXBlIHJlcXVpcmVzIGRpcmVjdGlvbidcbiAgICAgIDogJ01vYmlsZSBzY3JvbGwgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzOiBuYW1lLCBkaXJlY3Rpb24sIHByZWRpY2F0ZVN0cmluZywgYW5kIHRvVmlzaWJsZS4gU3BlY2lmeSBvbmUgb2YgdGhlc2UnO1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IobXNnKTtcbiAgfVxuXG4gIC8vIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgcGFzcyBhIGRpc3RhbmNlIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSByYXRpbyBvZlxuICAvLyBzY3JlZW4gaGVpZ2h0LCBzbyAxLjAgbWVhbnMgYSBmdWxsIHNjcmVlbidzIHdvcnRoIG9mIHNjcm9sbGluZ1xuICBpZiAoIXN3aXBlICYmIG9wdHMuZGlzdGFuY2UpIHtcbiAgICBwYXJhbXMuZGlzdGFuY2UgPSBvcHRzLmRpc3RhbmNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudElkID0gYXdhaXQgdG9FbGVtZW50T3JBcHBsaWNhdGlvbklkKHRoaXMsIG9wdHMpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9LyR7c3dpcGUgPyAnc3dpcGUnIDogJ3Njcm9sbCd9YDtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVN3aXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVTY3JvbGwob3B0cywgdHJ1ZSk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVBpbmNoID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2ggKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgc2NhbGU6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignc2NhbGUnLCBvcHRzLnNjYWxlLCAncGluY2gnKSxcbiAgICB2ZWxvY2l0eTogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd2ZWxvY2l0eScsIG9wdHMudmVsb2NpdHksICdwaW5jaCcpXG4gIH07XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3BpbmNoYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEb3VibGVUYXAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVUYXAgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIERvdWJsZSB0YXAgZWxlbWVudFxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS9lbGVtZW50LyR7ZWxlbWVudElkfS9kb3VibGVUYXBgLCAnUE9TVCcpO1xuICB9XG4gIC8vIERvdWJsZSB0YXAgY29vcmRpbmF0ZXNcbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIG9wdHMueCwgJ2RvdWJsZVRhcCcpLFxuICAgIHk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneScsIG9wdHMueSwgJ2RvdWJsZVRhcCcpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kb3VibGVUYXAnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVR3b0ZpbmdlclRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR3b0ZpbmdlclRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGVsZW1lbnRJZCA9IGF3YWl0IHRvRWxlbWVudE9yQXBwbGljYXRpb25JZCh0aGlzLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3R3b0ZpbmdlclRhcGAsICdQT1NUJyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRvdWNoQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRvdWNoQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBkdXJhdGlvbjogcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdkdXJhdGlvbicsIG9wdHMuZHVyYXRpb24sICd0b3VjaEFuZEhvbGQnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIC8vIExvbmcgdGFwIGVsZW1lbnRcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdG91Y2hBbmRIb2xkYCwgJ1BPU1QnLCBwYXJhbXMpO1xuICB9XG4gIC8vIExvbmcgdGFwIGNvb3JkaW5hdGVzXG4gIHBhcmFtcy54ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd4Jywgb3B0cy54LCAndG91Y2hBbmRIb2xkJyk7XG4gIHBhcmFtcy55ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCd5Jywgb3B0cy55LCAndG91Y2hBbmRIb2xkJyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS90b3VjaEFuZEhvbGQnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICB4OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3gnLCBvcHRzLngsICd0YXAnKSxcbiAgICB5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBvcHRzLnksICd0YXAnKVxuICB9O1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKSB8fCAnMCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3dkYS90YXAvJHtlbGVtZW50SWR9YCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuaGVscGVycy5tb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgZHVyYXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZHVyYXRpb24nLCBvcHRzLmR1cmF0aW9uLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVg6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVgnLCBvcHRzLmZyb21YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgZnJvbVk6IHJlcXVpcmVGbG9hdFBhcmFtZXRlcignZnJvbVknLCBvcHRzLmZyb21ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9YOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWCcsIG9wdHMudG9YLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJyksXG4gICAgdG9ZOiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3RvWScsIG9wdHMudG9ZLCAnZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uJylcbiAgfTtcbiAgY29uc3QgZWxlbWVudElkID0gdG9FbGVtZW50SWQob3B0cyk7XG4gIHJldHVybiBlbGVtZW50SWRcbiAgICAvLyBEcmFnIGVsZW1lbnRcbiAgICA/IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L2RyYWdmcm9tdG9mb3JkdXJhdGlvbmAsICdQT1NUJywgcGFyYW1zKVxuICAgIC8vIERyYWcgY29vcmRpbmF0ZXNcbiAgICA6IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2RyYWdmcm9tdG9mb3JkdXJhdGlvbicsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRhcFdpdGhOdW1iZXJPZlRhcHMgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3IgdGFwV2l0aE51bWJlck9mVGFwcyBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgbnVtYmVyT2ZUYXBzOiByZXF1aXJlSW50UGFyYW1ldGVyKCdudW1iZXJPZlRhcHMnLCBvcHRzLm51bWJlck9mVGFwcywgJ3RhcFdpdGhOdW1iZXJPZlRhcHMnKSxcbiAgICBudW1iZXJPZlRvdWNoZXM6IHJlcXVpcmVJbnRQYXJhbWV0ZXIoJ251bWJlck9mVG91Y2hlcycsIG9wdHMubnVtYmVyT2ZUb3VjaGVzLCAndGFwV2l0aE51bWJlck9mVGFwcycpLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvZWxlbWVudC8ke2VsZW1lbnRJZH0vdGFwV2l0aE51bWJlck9mVGFwc2AsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igc2VsZWN0UGlja2VyV2hlZWxWYWx1ZSBtZXRob2QnKTtcbiAgfVxuICBpZiAoIV8uaXNTdHJpbmcob3B0cy5vcmRlcikgfHwgIVsnbmV4dCcsICdwcmV2aW91cyddLmluY2x1ZGVzKG9wdHMub3JkZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBUaGUgbWFuZGF0b3J5ICdvcmRlcicgcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIGVxdWFsIGVpdGhlciB0byAnbmV4dCcgb3IgJ3ByZXZpb3VzJy4gYCArXG4gICAgICBgJyR7b3B0cy5vcmRlcn0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7b3JkZXI6IG9wdHMub3JkZXJ9O1xuICBpZiAob3B0cy5vZmZzZXQpIHtcbiAgICBwYXJhbXMub2Zmc2V0ID0gcmVxdWlyZUZsb2F0UGFyYW1ldGVyKCdvZmZzZXQnLCBvcHRzLm9mZnNldCwgJ3NlbGVjdFBpY2tlcldoZWVsVmFsdWUnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC93ZGEvcGlja2Vyd2hlZWwvJHtlbGVtZW50SWR9L3NlbGVjdGAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlUm90YXRlRWxlbWVudCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJvdGF0ZUVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChvcHRzKTtcbiAgaWYgKCFlbGVtZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdFbGVtZW50IGlkIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igcm90YXRlRWxlbWVudCBtZXRob2QnKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgcm90YXRpb246IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigncm90YXRpb24nLCBvcHRzLnJvdGF0aW9uLCAncm90YXRlRWxlbWVudCcpLFxuICAgIHZlbG9jaXR5OiByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3ZlbG9jaXR5Jywgb3B0cy52ZWxvY2l0eSwgJ3JvdGF0ZUVsZW1lbnQnKSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvd2RhL2VsZW1lbnQvJHtlbGVtZW50SWR9L3JvdGF0ZWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q29vcmRpbmF0ZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29yZGluYXRlcyAoZ2VzdHVyZSkge1xuICAvLyBkZWZhdWx0c1xuICBsZXQgY29vcmRpbmF0ZXMgPSB7eDogMCwgeTogMCwgYXJlT2Zmc2V0czogZmFsc2V9O1xuXG4gIGxldCBvcHRpb25YID0gbnVsbDtcbiAgaWYgKGdlc3R1cmUub3B0aW9ucy54KSB7XG4gICAgb3B0aW9uWCA9IHJlcXVpcmVGbG9hdFBhcmFtZXRlcigneCcsIGdlc3R1cmUub3B0aW9ucy54LCAnZ2V0Q29vcmRpbmF0ZXMnKTtcbiAgfVxuICBsZXQgb3B0aW9uWSA9IG51bGw7XG4gIGlmIChnZXN0dXJlLm9wdGlvbnMueSkge1xuICAgIG9wdGlvblkgPSByZXF1aXJlRmxvYXRQYXJhbWV0ZXIoJ3knLCBnZXN0dXJlLm9wdGlvbnMueSwgJ2dldENvb3JkaW5hdGVzJyk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IHRoZSBlbGVtZW50IGNvb3JkaW5hdGVzLlxuICBjb25zdCBlbGVtZW50SWQgPSB0b0VsZW1lbnRJZChnZXN0dXJlLm9wdGlvbnMpO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgbGV0IHJlY3QgPSBhd2FpdCB0aGlzLmdldEVsZW1lbnRSZWN0KGVsZW1lbnRJZCk7XG4gICAgbGV0IHBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gICAgbGV0IHNpemUgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gICAgLy8gZGVmYXVsdHNcbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuXG4gICAgLy8gZ2V0IHRoZSByZWFsIG9mZnNldHNcbiAgICBpZiAob3B0aW9uWCB8fCBvcHRpb25ZKSB7XG4gICAgICBvZmZzZXRYID0gKG9wdGlvblggfHwgMCk7XG4gICAgICBvZmZzZXRZID0gKG9wdGlvblkgfHwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldFggPSAoc2l6ZS53IC8gMik7XG4gICAgICBvZmZzZXRZID0gKHNpemUuaCAvIDIpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBvZmZzZXRzXG4gICAgY29vcmRpbmF0ZXMueCA9IHBvcy54ICsgb2Zmc2V0WDtcbiAgICBjb29yZGluYXRlcy55ID0gcG9zLnkgKyBvZmZzZXRZO1xuICB9IGVsc2Uge1xuICAgIC8vIG1vdmVUbyBjb29yZGluYXRlcyBhcmUgcGFzc2VkIGluIGFzIG9mZnNldHNcbiAgICBjb29yZGluYXRlcy5hcmVPZmZzZXRzID0gKGdlc3R1cmUuYWN0aW9uID09PSAnbW92ZVRvJyk7XG4gICAgY29vcmRpbmF0ZXMueCA9IChvcHRpb25YIHx8IDApO1xuICAgIGNvb3JkaW5hdGVzLnkgPSAob3B0aW9uWSB8fCAwKTtcbiAgfVxuICByZXR1cm4gY29vcmRpbmF0ZXM7XG59O1xuXG5oZWxwZXJzLmFwcGx5TW92ZVRvT2Zmc2V0ID0gZnVuY3Rpb24gYXBwbHlNb3ZlVG9PZmZzZXQgKGZpcnN0Q29vcmRpbmF0ZXMsIHNlY29uZENvb3JkaW5hdGVzKSB7XG4gIGlmIChzZWNvbmRDb29yZGluYXRlcy5hcmVPZmZzZXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGZpcnN0Q29vcmRpbmF0ZXMueCArIHNlY29uZENvb3JkaW5hdGVzLngsXG4gICAgICB5OiBmaXJzdENvb3JkaW5hdGVzLnkgKyBzZWNvbmRDb29yZGluYXRlcy55LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNlY29uZENvb3JkaW5hdGVzO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGhlbHBlcnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGV4dGVuc2lvbnMsIGhlbHBlcnMsIGNvbW1hbmRzLCBnZXN0dXJlc0NoYWluVG9TdHJpbmcgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZXN0dXJlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -329,6 +329,12 @@ const desiredCapConstraints = {
|
|
|
329
329
|
},
|
|
330
330
|
shouldTerminateApp: {
|
|
331
331
|
isBoolean: true
|
|
332
|
+
},
|
|
333
|
+
forceAppLaunch: {
|
|
334
|
+
isBoolean: true
|
|
335
|
+
},
|
|
336
|
+
useNativeCachingStrategy: {
|
|
337
|
+
isBoolean: true
|
|
332
338
|
}
|
|
333
339
|
};
|
|
334
340
|
exports.desiredCapConstraints = desiredCapConstraints;
|
|
@@ -336,4 +342,4 @@ var _default = desiredCapConstraints;
|
|
|
336
342
|
exports.default = _default;require('source-map-support').install();
|
|
337
343
|
|
|
338
344
|
|
|
339
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXNpcmVkLWNhcHMuanMiXSwibmFtZXMiOlsiUExBVEZPUk1fTkFNRV9JT1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJwbGF0Zm9ybU5hbWUiLCJwcmVzZW5jZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwiYnJvd3Nlck5hbWUiLCJhcHAiLCJjYWxlbmRhckZvcm1hdCIsImJ1bmRsZUlkIiwidWRpZCIsImF1dG9BY2NlcHRBbGVydHMiLCJpc0Jvb2xlYW4iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsIm5hdGl2ZVdlYlRhcCIsInNhZmFyaUluaXRpYWxVcmwiLCJzYWZhcmlBbGxvd1BvcHVwcyIsInNhZmFyaUlnbm9yZUZyYXVkV2FybmluZyIsInNhZmFyaU9wZW5MaW5rc0luQmFja2dyb3VuZCIsInNhZmFyaVNob3dGdWxsUmVzcG9uc2UiLCJrZWVwS2V5Q2hhaW5zIiwibG9jYXRpb25TZXJ2aWNlc0VuYWJsZWQiLCJsb2NhdGlvblNlcnZpY2VzQXV0aG9yaXplZCIsImxvY2FsaXphYmxlU3RyaW5nc0RpciIsInByb2Nlc3NBcmd1bWVudHMiLCJzaG93SU9TTG9nIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaXNOdW1iZXIiLCJjbGVhclN5c3RlbUZpbGVzIiwiY3VzdG9tU1NMQ2VydCIsIndlYmtpdFJlc3BvbnNlVGltZW91dCIsIndlYmtpdERlYnVnUHJveHlQb3J0IiwicmVtb3RlRGVidWdQcm94eSIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsImVuYWJsZUFzeW5jRXhlY3V0ZUZyb21IdHRwcyIsImZ1bGxDb250ZXh0TGlzdCIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJza2lwTG9nQ2FwdHVyZSIsImRldmljZU5hbWUiLCJzaG93WGNvZGVMb2ciLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFCYXNlVXJsIiwiaW9zSW5zdGFsbFBhdXNlIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ0YXBXaXRoU2hvcnRQcmVzc0R1cmF0aW9uIiwic2NhbGVGYWN0b3IiLCJ1c2VQcmVidWlsdFdEQSIsIndlYkRyaXZlckFnZW50VXJsIiwiZGVyaXZlZERhdGFQYXRoIiwibGF1bmNoV2l0aElEQiIsInVzZU5ld1dEQSIsIndkYUxhdW5jaFRpbWVvdXQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiY29tbWFuZFRpbWVvdXRzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInByZWJ1aWxkV0RBIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvckRldmljZXNTZXRQYXRoIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwidXNlU2ltcGxlQnVpbGRUZXN0Iiwid2FpdEZvclF1aWVzY2VuY2UiLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJuYXRpdmVUeXBpbmciLCJzaW1wbGVJc1Zpc2libGVDaGVjayIsInNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyIiwiaXNIZWFkbGVzcyIsInVzZVhjdGVzdHJ1bkZpbGUiLCJhYnNvbHV0ZVdlYkxvY2F0aW9ucyIsInNpbXVsYXRvcldpbmRvd0NlbnRlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic2ltdWxhdG9yVHJhY2VQb2ludGVyIiwidXNlSlNPTlNvdXJjZSIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwic2h1dGRvd25PdGhlclNpbXVsYXRvcnMiLCJrZXljaGFpbnNFeGNsdWRlUGF0dGVybnMiLCJzaG93U2FmYXJpQ29uc29sZUxvZyIsInNob3dTYWZhcmlOZXR3b3JrTG9nIiwic2FmYXJpR2FyYmFnZUNvbGxlY3QiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsImlzT2JqZWN0Iiwic2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbiIsInNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwic2FmYXJpU29ja2V0Q2h1bmtTaXplIiwibWpwZWdTZXJ2ZXJQb3J0IiwicmVkdWNlTW90aW9uIiwibWpwZWdTY3JlZW5zaG90VXJsIiwicGVybWlzc2lvbnMiLCJzY3JlZW5zaG90UXVhbGl0eSIsIndkYUV2ZW50bG9vcElkbGVEZWxheSIsIm90aGVyQXBwcyIsImluY2x1ZGVTYWZhcmlJbldlYnZpZXdzIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJ3ZWJ2aWV3Q29ubmVjdFRpbWVvdXQiLCJpb3NTaW11bGF0b3JMb2dzUHJlZGljYXRlIiwiYXBwUHVzaFRpbWVvdXQiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJzYWZhcmlXZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwid2FpdEZvcklkbGVUaW1lb3V0IiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMiLCJpbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8iLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJzaG91bGRUZXJtaW5hdGVBcHAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE1BQU1BLGlCQUFpQixHQUFHLEtBQTFCOztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLE1BQTNCOztBQUVBLE1BQU1DLHFCQUFxQixHQUFHO0FBQzVCQyxFQUFBQSxZQUFZLEVBQUU7QUFDWkMsSUFBQUEsUUFBUSxFQUFFLElBREU7QUFFWkMsSUFBQUEsUUFBUSxFQUFFLElBRkU7QUFHWkMsSUFBQUEsd0JBQXdCLEVBQUUsQ0FBQ04saUJBQUQsRUFBb0JDLGtCQUFwQjtBQUhk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RGdCLEdBbFVEO0FBcVU1QnNHLEVBQUFBLGtCQUFrQixFQUFFO0FBQ2xCdEcsSUFBQUEsU0FBUyxFQUFFO0FBRE87QUFyVVEsQ0FBOUI7O2VBMlVlWCxxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZXNlIHBsYXRmb3JtIG5hbWVzIHNob3VsZCBiZSB2YWxpZCBpbiBzaW11bGF0b3IgbmFtZVxuY29uc3QgUExBVEZPUk1fTkFNRV9JT1MgPSAnaU9TJztcbmNvbnN0IFBMQVRGT1JNX05BTUVfVFZPUyA9ICd0dk9TJztcblxuY29uc3QgZGVzaXJlZENhcENvbnN0cmFpbnRzID0ge1xuICBwbGF0Zm9ybU5hbWU6IHsgLy8gb3ZlcnJpZGVcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgICBpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmU6IFtQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TXVxuICB9LFxuICBicm93c2VyTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNhbGVuZGFyRm9ybWF0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYnVuZGxlSWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1ZGlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYXV0b0FjY2VwdEFsZXJ0czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBhdXRvRGlzbWlzc0FsZXJ0czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBuYXRpdmVXZWJUYXA6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpSW5pdGlhbFVybDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUFsbG93UG9wdXBzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUlnbm9yZUZyYXVkV2FybmluZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzYWZhcmlPcGVuTGlua3NJbkJhY2tncm91bmQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpU2hvd0Z1bGxSZXNwb25zZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBrZWVwS2V5Q2hhaW5zOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGxvY2F0aW9uU2VydmljZXNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGxvY2F0aW9uU2VydmljZXNBdXRob3JpemVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGxvY2FsaXphYmxlU3RyaW5nc0Rpcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHByb2Nlc3NBcmd1bWVudHM6IHtcbiAgICAvLyByZWNvZ25pemUgdGhlIGNhcCxcbiAgICAvLyBidXQgdmFsaWRhdGUgaW4gdGhlIGRyaXZlciN2YWxpZGF0ZURlc2lyZWRDYXBzIG1ldGhvZFxuICB9LFxuICBzaG93SU9TTG9nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdlYnZpZXdDb25uZWN0UmV0cmllczoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGNsZWFyU3lzdGVtRmlsZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY3VzdG9tU1NMQ2VydDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHdlYmtpdFJlc3BvbnNlVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHdlYmtpdERlYnVnUHJveHlQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgcmVtb3RlRGVidWdQcm94eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBlbmFibGVBc3luY0V4ZWN1dGVGcm9tSHR0cHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZnVsbENvbnRleHRMaXN0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlnbm9yZUFib3V0QmxhbmtVcmw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2tpcExvZ0NhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGV2aWNlTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNob3dYY29kZUxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3ZGFMb2NhbFBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB3ZGFCYXNlVXJsOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW9zSW5zdGFsbFBhdXNlOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgeGNvZGVDb25maWdGaWxlOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgeGNvZGVPcmdJZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHhjb2RlU2lnbmluZ0lkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5QYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5QYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGJvb3RzdHJhcFBhdGg6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZ2VudFBhdGg6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB0YXBXaXRoU2hvcnRQcmVzc0R1cmF0aW9uOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgc2NhbGVGYWN0b3I6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1c2VQcmVidWlsdFdEQToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3ZWJEcml2ZXJBZ2VudFVybDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGRlcml2ZWREYXRhUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxhdW5jaFdpdGhJREI6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdXNlTmV3V0RBOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdkYUxhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB3ZGFDb25uZWN0aW9uVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHVwZGF0ZWRXREFCdW5kbGVJZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNvbW1hbmRUaW1lb3V0czoge1xuICAgIC8vIHJlY29nbml6ZSB0aGUgY2FwLFxuICAgIC8vIGJ1dCB2YWxpZGF0ZSBpbiB0aGUgZHJpdmVyI3ZhbGlkYXRlRGVzaXJlZENhcHMgbWV0aG9kXG4gIH0sXG4gIHdkYVN0YXJ0dXBSZXRyaWVzOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWw6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBwcmVidWlsZFdEQToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvckRldmljZXNTZXRQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZVNpbXBsZUJ1aWxkVGVzdDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3YWl0Rm9yUXVpZXNjZW5jZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtYXhUeXBpbmdGcmVxdWVuY3k6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBuYXRpdmVUeXBpbmc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2ltcGxlSXNWaXNpYmxlQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaXNIZWFkbGVzczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VYY3Rlc3RydW5GaWxlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFic29sdXRlV2ViTG9jYXRpb25zOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvcldpbmRvd0NlbnRlcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgc2ltdWxhdG9yVHJhY2VQb2ludGVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZUpTT05Tb3VyY2U6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5zRXhjbHVkZVBhdHRlcm5zOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaUNvbnNvbGVMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaU5ldHdvcmtMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2FyYmFnZUNvbGxlY3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVNvY2tldENodW5rU2l6ZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIG1qcGVnU2VydmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlZHVjZU1vdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtanBlZ1NjcmVlbnNob3RVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwZXJtaXNzaW9uczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNjcmVlbnNob3RRdWFsaXR5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhRXZlbnRsb29wSWRsZURlbGF5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgb3RoZXJBcHBzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW5jbHVkZVNhZmFyaUluV2Vidmlld3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHM6IHtcbiAgICAvLyByZWNvZ25pemUgdGhlIGNhcGFiaWxpdHlcbiAgICAvLyBidXQgdmFsaWRhdGUgaW4gZHJpdmVyI3ZhbGlkYXRlRGVzaXJlZENhcHNcbiAgfSxcbiAgd2Vidmlld0Nvbm5lY3RUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgaW9zU2ltdWxhdG9yTG9nc1ByZWRpY2F0ZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFB1c2hUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgd2FpdEZvcklkbGVUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgcmVzdWx0QnVuZGxlUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHJlc3VsdEJ1bmRsZVZlcnNpb246IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHNob3VsZFRlcm1pbmF0ZUFwcDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfVxufTtcblxuZXhwb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH07XG5leHBvcnQgZGVmYXVsdCBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4iXSwiZmlsZSI6ImxpYi9kZXNpcmVkLWNhcHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
345
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXNpcmVkLWNhcHMuanMiXSwibmFtZXMiOlsiUExBVEZPUk1fTkFNRV9JT1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJwbGF0Zm9ybU5hbWUiLCJwcmVzZW5jZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwiYnJvd3Nlck5hbWUiLCJhcHAiLCJjYWxlbmRhckZvcm1hdCIsImJ1bmRsZUlkIiwidWRpZCIsImF1dG9BY2NlcHRBbGVydHMiLCJpc0Jvb2xlYW4iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsIm5hdGl2ZVdlYlRhcCIsInNhZmFyaUluaXRpYWxVcmwiLCJzYWZhcmlBbGxvd1BvcHVwcyIsInNhZmFyaUlnbm9yZUZyYXVkV2FybmluZyIsInNhZmFyaU9wZW5MaW5rc0luQmFja2dyb3VuZCIsInNhZmFyaVNob3dGdWxsUmVzcG9uc2UiLCJrZWVwS2V5Q2hhaW5zIiwibG9jYXRpb25TZXJ2aWNlc0VuYWJsZWQiLCJsb2NhdGlvblNlcnZpY2VzQXV0aG9yaXplZCIsImxvY2FsaXphYmxlU3RyaW5nc0RpciIsInByb2Nlc3NBcmd1bWVudHMiLCJzaG93SU9TTG9nIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaXNOdW1iZXIiLCJjbGVhclN5c3RlbUZpbGVzIiwiY3VzdG9tU1NMQ2VydCIsIndlYmtpdFJlc3BvbnNlVGltZW91dCIsIndlYmtpdERlYnVnUHJveHlQb3J0IiwicmVtb3RlRGVidWdQcm94eSIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsImVuYWJsZUFzeW5jRXhlY3V0ZUZyb21IdHRwcyIsImZ1bGxDb250ZXh0TGlzdCIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJza2lwTG9nQ2FwdHVyZSIsImRldmljZU5hbWUiLCJzaG93WGNvZGVMb2ciLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFCYXNlVXJsIiwiaW9zSW5zdGFsbFBhdXNlIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ0YXBXaXRoU2hvcnRQcmVzc0R1cmF0aW9uIiwic2NhbGVGYWN0b3IiLCJ1c2VQcmVidWlsdFdEQSIsIndlYkRyaXZlckFnZW50VXJsIiwiZGVyaXZlZERhdGFQYXRoIiwibGF1bmNoV2l0aElEQiIsInVzZU5ld1dEQSIsIndkYUxhdW5jaFRpbWVvdXQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiY29tbWFuZFRpbWVvdXRzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInByZWJ1aWxkV0RBIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvckRldmljZXNTZXRQYXRoIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwidXNlU2ltcGxlQnVpbGRUZXN0Iiwid2FpdEZvclF1aWVzY2VuY2UiLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJuYXRpdmVUeXBpbmciLCJzaW1wbGVJc1Zpc2libGVDaGVjayIsInNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyIiwiaXNIZWFkbGVzcyIsInVzZVhjdGVzdHJ1bkZpbGUiLCJhYnNvbHV0ZVdlYkxvY2F0aW9ucyIsInNpbXVsYXRvcldpbmRvd0NlbnRlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic2ltdWxhdG9yVHJhY2VQb2ludGVyIiwidXNlSlNPTlNvdXJjZSIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwic2h1dGRvd25PdGhlclNpbXVsYXRvcnMiLCJrZXljaGFpbnNFeGNsdWRlUGF0dGVybnMiLCJzaG93U2FmYXJpQ29uc29sZUxvZyIsInNob3dTYWZhcmlOZXR3b3JrTG9nIiwic2FmYXJpR2FyYmFnZUNvbGxlY3QiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsImlzT2JqZWN0Iiwic2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbiIsInNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwic2FmYXJpU29ja2V0Q2h1bmtTaXplIiwibWpwZWdTZXJ2ZXJQb3J0IiwicmVkdWNlTW90aW9uIiwibWpwZWdTY3JlZW5zaG90VXJsIiwicGVybWlzc2lvbnMiLCJzY3JlZW5zaG90UXVhbGl0eSIsIndkYUV2ZW50bG9vcElkbGVEZWxheSIsIm90aGVyQXBwcyIsImluY2x1ZGVTYWZhcmlJbldlYnZpZXdzIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJ3ZWJ2aWV3Q29ubmVjdFRpbWVvdXQiLCJpb3NTaW11bGF0b3JMb2dzUHJlZGljYXRlIiwiYXBwUHVzaFRpbWVvdXQiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJzYWZhcmlXZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwid2FpdEZvcklkbGVUaW1lb3V0IiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMiLCJpbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8iLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJzaG91bGRUZXJtaW5hdGVBcHAiLCJmb3JjZUFwcExhdW5jaCIsInVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsTUFBTUEsaUJBQWlCLEdBQUcsS0FBMUI7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsTUFBM0I7O0FBRUEsTUFBTUMscUJBQXFCLEdBQUc7QUFDNUJDLEVBQUFBLFlBQVksRUFBRTtBQUNaQyxJQUFBQSxRQUFRLEVBQUUsSUFERTtBQUVaQyxJQUFBQSxRQUFRLEVBQUUsSUFGRTtBQUdaQyxJQUFB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RUFBQUEsMkJBQTJCLEVBQUU7QUFDM0JyRyxJQUFBQSxTQUFTLEVBQUU7QUFEZ0IsR0FsVUQ7QUFxVTVCc0csRUFBQUEsa0JBQWtCLEVBQUU7QUFDbEJ0RyxJQUFBQSxTQUFTLEVBQUU7QUFETyxHQXJVUTtBQXdVNUJ1RyxFQUFBQSxjQUFjLEVBQUU7QUFDZHZHLElBQUFBLFNBQVMsRUFBRTtBQURHLEdBeFVZO0FBMlU1QndHLEVBQUFBLHdCQUF3QixFQUFFO0FBQ3hCeEcsSUFBQUEsU0FBUyxFQUFFO0FBRGE7QUEzVUUsQ0FBOUI7O2VBaVZlWCxxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZXNlIHBsYXRmb3JtIG5hbWVzIHNob3VsZCBiZSB2YWxpZCBpbiBzaW11bGF0b3IgbmFtZVxuY29uc3QgUExBVEZPUk1fTkFNRV9JT1MgPSAnaU9TJztcbmNvbnN0IFBMQVRGT1JNX05BTUVfVFZPUyA9ICd0dk9TJztcblxuY29uc3QgZGVzaXJlZENhcENvbnN0cmFpbnRzID0ge1xuICBwbGF0Zm9ybU5hbWU6IHsgLy8gb3ZlcnJpZGVcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgICBpbmNsdXNpb25DYXNlSW5zZW5zaXRpdmU6IFtQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TXVxuICB9LFxuICBicm93c2VyTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNhbGVuZGFyRm9ybWF0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYnVuZGxlSWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1ZGlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYXV0b0FjY2VwdEFsZXJ0czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBhdXRvRGlzbWlzc0FsZXJ0czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBuYXRpdmVXZWJUYXA6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpSW5pdGlhbFVybDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUFsbG93UG9wdXBzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUlnbm9yZUZyYXVkV2FybmluZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzYWZhcmlPcGVuTGlua3NJbkJhY2tncm91bmQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpU2hvd0Z1bGxSZXNwb25zZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBrZWVwS2V5Q2hhaW5zOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGxvY2F0aW9uU2VydmljZXNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGxvY2F0aW9uU2VydmljZXNBdXRob3JpemVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGxvY2FsaXphYmxlU3RyaW5nc0Rpcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHByb2Nlc3NBcmd1bWVudHM6IHtcbiAgICAvLyByZWNvZ25pemUgdGhlIGNhcCxcbiAgICAvLyBidXQgdmFsaWRhdGUgaW4gdGhlIGRyaXZlciN2YWxpZGF0ZURlc2lyZWRDYXBzIG1ldGhvZFxuICB9LFxuICBzaG93SU9TTG9nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdlYnZpZXdDb25uZWN0UmV0cmllczoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGNsZWFyU3lzdGVtRmlsZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY3VzdG9tU1NMQ2VydDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHdlYmtpdFJlc3BvbnNlVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHdlYmtpdERlYnVnUHJveHlQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgcmVtb3RlRGVidWdQcm94eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBlbmFibGVBc3luY0V4ZWN1dGVGcm9tSHR0cHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZnVsbENvbnRleHRMaXN0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlnbm9yZUFib3V0QmxhbmtVcmw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2tpcExvZ0NhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGV2aWNlTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNob3dYY29kZUxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3ZGFMb2NhbFBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB3ZGFCYXNlVXJsOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW9zSW5zdGFsbFBhdXNlOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgeGNvZGVDb25maWdGaWxlOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgeGNvZGVPcmdJZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHhjb2RlU2lnbmluZ0lkOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5QYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5QYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGJvb3RzdHJhcFBhdGg6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZ2VudFBhdGg6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB0YXBXaXRoU2hvcnRQcmVzc0R1cmF0aW9uOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgc2NhbGVGYWN0b3I6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1c2VQcmVidWlsdFdEQToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3ZWJEcml2ZXJBZ2VudFVybDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGRlcml2ZWREYXRhUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxhdW5jaFdpdGhJREI6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdXNlTmV3V0RBOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHdkYUxhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICB3ZGFDb25uZWN0aW9uVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHVwZGF0ZWRXREFCdW5kbGVJZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNvbW1hbmRUaW1lb3V0czoge1xuICAgIC8vIHJlY29nbml6ZSB0aGUgY2FwLFxuICAgIC8vIGJ1dCB2YWxpZGF0ZSBpbiB0aGUgZHJpdmVyI3ZhbGlkYXRlRGVzaXJlZENhcHMgbWV0aG9kXG4gIH0sXG4gIHdkYVN0YXJ0dXBSZXRyaWVzOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWw6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBwcmVidWlsZFdEQToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvckRldmljZXNTZXRQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZVNpbXBsZUJ1aWxkVGVzdDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB3YWl0Rm9yUXVpZXNjZW5jZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtYXhUeXBpbmdGcmVxdWVuY3k6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBuYXRpdmVUeXBpbmc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2ltcGxlSXNWaXNpYmxlQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaXNIZWFkbGVzczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VYY3Rlc3RydW5GaWxlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFic29sdXRlV2ViTG9jYXRpb25zOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvcldpbmRvd0NlbnRlcjoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgc2ltdWxhdG9yVHJhY2VQb2ludGVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVzZUpTT05Tb3VyY2U6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5Y2hhaW5zRXhjbHVkZVBhdHRlcm5zOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaUNvbnNvbGVMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd1NhZmFyaU5ldHdvcmtMb2c6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2FyYmFnZUNvbGxlY3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVNvY2tldENodW5rU2l6ZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIG1qcGVnU2VydmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlZHVjZU1vdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBtanBlZ1NjcmVlbnNob3RVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBwZXJtaXNzaW9uczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNjcmVlbnNob3RRdWFsaXR5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgd2RhRXZlbnRsb29wSWRsZURlbGF5OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgb3RoZXJBcHBzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW5jbHVkZVNhZmFyaUluV2Vidmlld3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHM6IHtcbiAgICAvLyByZWNvZ25pemUgdGhlIGNhcGFiaWxpdHlcbiAgICAvLyBidXQgdmFsaWRhdGUgaW4gZHJpdmVyI3ZhbGlkYXRlRGVzaXJlZENhcHNcbiAgfSxcbiAgd2Vidmlld0Nvbm5lY3RUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgaW9zU2ltdWxhdG9yTG9nc1ByZWRpY2F0ZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFB1c2hUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgd2FpdEZvcklkbGVUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgcmVzdWx0QnVuZGxlUGF0aDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHJlc3VsdEJ1bmRsZVZlcnNpb246IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHNob3VsZFRlcm1pbmF0ZUFwcDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgZm9yY2VBcHBMYXVuY2g6IHtcbiAgICBpc0Jvb2xlYW46IHRydWUsXG4gIH0sXG4gIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfVxufTtcblxuZXhwb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH07XG5leHBvcnQgZGVmYXVsdCBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4iXSwiZmlsZSI6ImxpYi9kZXNpcmVkLWNhcHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/build/lib/driver.js
CHANGED
|
@@ -906,7 +906,7 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
906
906
|
}
|
|
907
907
|
|
|
908
908
|
async startWdaSession(bundleId, processArguments) {
|
|
909
|
-
var _this$opts$wdaEventlo, _this$opts$waitForQui, _this$opts$simpleIsVi, _this$opts$maxTypingF, _this$opts$shouldUseS, _this$opts$shouldTerm;
|
|
909
|
+
var _this$opts$wdaEventlo, _this$opts$waitForQui, _this$opts$simpleIsVi, _this$opts$maxTypingF, _this$opts$shouldUseS, _this$opts$shouldTerm, _this$opts$forceAppLa, _this$opts$useNativeC;
|
|
910
910
|
|
|
911
911
|
const args = processArguments ? processArguments.args || [] : [];
|
|
912
912
|
|
|
@@ -929,6 +929,16 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
929
929
|
args.push('-AppleLocale', this.opts.locale);
|
|
930
930
|
}
|
|
931
931
|
|
|
932
|
+
if (this.opts.noReset) {
|
|
933
|
+
if (_lodash.default.isNil(this.opts.shouldTerminateApp)) {
|
|
934
|
+
this.opts.shouldTerminateApp = false;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
if (_lodash.default.isNil(this.opts.forceAppLaunch)) {
|
|
938
|
+
this.opts.forceAppLaunch = false;
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
|
|
932
942
|
const wdaCaps = {
|
|
933
943
|
bundleId: this.opts.autoLaunch === false ? undefined : bundleId,
|
|
934
944
|
arguments: args,
|
|
@@ -942,7 +952,9 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
942
952
|
shouldUseCompactResponses: this.opts.shouldUseCompactResponses,
|
|
943
953
|
elementResponseFields: this.opts.elementResponseFields,
|
|
944
954
|
disableAutomaticScreenshots: this.opts.disableAutomaticScreenshots,
|
|
945
|
-
shouldTerminateApp: (_this$opts$shouldTerm = this.opts.shouldTerminateApp) !== null && _this$opts$shouldTerm !== void 0 ? _this$opts$shouldTerm : true
|
|
955
|
+
shouldTerminateApp: (_this$opts$shouldTerm = this.opts.shouldTerminateApp) !== null && _this$opts$shouldTerm !== void 0 ? _this$opts$shouldTerm : true,
|
|
956
|
+
forceAppLaunch: (_this$opts$forceAppLa = this.opts.forceAppLaunch) !== null && _this$opts$forceAppLa !== void 0 ? _this$opts$forceAppLa : true,
|
|
957
|
+
useNativeCachingStrategy: (_this$opts$useNativeC = this.opts.useNativeCachingStrategy) !== null && _this$opts$useNativeC !== void 0 ? _this$opts$useNativeC : true
|
|
946
958
|
};
|
|
947
959
|
|
|
948
960
|
if (this.opts.autoAcceptAlerts) {
|
|
@@ -1143,13 +1155,23 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
1143
1155
|
return;
|
|
1144
1156
|
}
|
|
1145
1157
|
|
|
1158
|
+
let appsList;
|
|
1159
|
+
|
|
1146
1160
|
try {
|
|
1147
|
-
|
|
1161
|
+
appsList = this.helpers.parseCapsArray(otherApps);
|
|
1148
1162
|
} catch (e) {
|
|
1149
1163
|
_logger.default.errorAndThrow(`Could not parse "otherApps" capability: ${e.message}`);
|
|
1150
1164
|
}
|
|
1151
1165
|
|
|
1152
|
-
|
|
1166
|
+
if (_lodash.default.isEmpty(appsList)) {
|
|
1167
|
+
_logger.default.info(`Got zero apps from 'otherApps' capability value. Doing nothing`);
|
|
1168
|
+
|
|
1169
|
+
return;
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
const appPaths = await _bluebird.default.all(appsList.map(app => this.helpers.configureApp(app, '.app')));
|
|
1173
|
+
|
|
1174
|
+
for (const otherApp of appPaths) {
|
|
1153
1175
|
await (0, _simulatorManagement.installToSimulator)(this.opts.device, otherApp, undefined, {
|
|
1154
1176
|
noReset: this.opts.noReset,
|
|
1155
1177
|
newSimulator: this.lifecycleData.createSim
|
|
@@ -1262,4 +1284,4 @@ var _default = XCUITestDriver;
|
|
|
1262
1284
|
exports.default = _default;require('source-map-support').install();
|
|
1263
1285
|
|
|
1264
1286
|
|
|
1265
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJOT19QUk9YWV9OQVRJVkVfTElTVCIsIk5PX1BST1hZX1dFQl9MSVNUIiwiY29uY2F0IiwiTUVNT0laRURfRlVOQ1RJT05TIiwiWENVSVRlc3REcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0SW9zIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwibG9ncyIsImZuIiwiXyIsIm1lbW9pemUiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwid2ViRWxlbWVudElkcyIsIl9jdXJyZW50VXJsIiwiY3VyQ29udGV4dCIsInhjb2RlVmVyc2lvbiIsImNvbnRleHRzIiwiaW1wbGljaXRXYWl0TXMiLCJhc3luY2xpYldhaXRNcyIsInBhZ2VMb2FkTXMiLCJsYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQiLCJyZW1vdGUiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwibGlmZWN5Y2xlRGF0YSIsInNlc3Npb25JZCIsImNhcHMiLCJzdGFydCIsIk9iamVjdCIsImFzc2lnbiIsInVkaWQiLCJoYXMiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibG9nIiwiaW5mbyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsImUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVTZXNzaW9uIiwibm9SZXNldCIsImZ1bGxSZXNldCIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwibG9nRXZlbnQiLCJ0b0xvd2VyIiwiYXBwIiwidW5kZWZpbmVkIiwicHJvY2Vzc0FyZ3VtZW50cyIsImJ1bmRsZUlkIiwic2FmYXJpSW5pdGlhbFVybCIsImlzUmVhbERldmljZSIsImFkZHJlc3MiLCJwb3J0IiwiY29uZmlndXJlQXBwIiwicnVuUmVzZXQiLCJXZWJEcml2ZXJBZ2VudCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiY2F0Y2giLCJkZWJ1ZyIsIm1lbW9pemVkTG9nSW5mbyIsImxvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNpbSIsImN1c3RvbVNTTENlcnQiLCJjZXJ0SGVhZCIsInRydW5jYXRlIiwibGVuZ3RoIiwic2ltY3RsIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaWduIiwic3RhcnRTaW0iLCJsYXVuY2hXaXRoSURCIiwiaWRiIiwiSURCIiwiY29ubmVjdCIsIm1lc3NhZ2UiLCJpbnN0YWxsQVVUIiwiaXNBcHBJbnN0YWxsZWQiLCJlcnJvckFuZFRocm93IiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJ0b1BhaXJzIiwicGFyc2UiLCJzZXRQZXJtaXNzaW9ucyIsIndhcm4iLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJlbmFibGVDYWxlbmRhckFjY2VzcyIsImRpc2FibGVDYWxlbmRhckFjY2VzcyIsInN0YXJ0V2RhIiwic2V0UmVkdWNlTW90aW9uIiwic2V0SW5pdGlhbE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJvcGVuVXJsIiwiYXV0b1dlYnZpZXciLCJuYXZUb0luaXRpYWxXZWJ2aWV3Iiwic2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsIndkYUJhc2VVcmwiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwidXJsIiwiZGV2aWNlUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJuYW1lIiwidXNlWGN0ZXN0cnVuRmlsZSIsImlzU291cmNlRnJlc2giLCJkZXJpdmVkRGF0YVBhdGgiLCJwYXRoIiwibm9ybWFsaXplIiwiaXNCdXN5IiwiYm9vdHN0cmFwUGF0aCIsImFjcXVpcmUiLCJ1c2VOZXdXREEiLCJxdWl0QW5kVW5pbnN0YWxsIiwic2V0dXBDYWNoaW5nIiwibXNnIiwicmVzdWx0QnVuZGxlUGF0aCIsInN0YXJ0dXBSZXRyaWVzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJzdGFydHVwUmV0cnlJbnRlcnZhbCIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInJldHJpZXMiLCJtYWpvciIsImxhdW5jaCIsImVyciIsImVycm9yTXNnIiwib3JpZ2luYWxTdGFja3RyYWNlIiwic3RhcnRXZGFTZXNzaW9uIiwic3RhY2siLCJjbGVhclN5c3RlbUZpbGVzIiwiZnVsbHlTdGFydGVkIiwic2VydmVyIiwicmVjb3JkZXIiLCJjb21wYWN0IiwiX3JlY2VudFNjcmVlblJlY29yZGVyIiwiX2F1ZGlvUmVjb3JkZXIiLCJpbnRlcnJ1cHQiLCJjbGVhbnVwIiwiX3BlcmZSZWNvcmRlcnMiLCJCIiwiYWxsIiwibWFwIiwieCIsInN0b3AiLCJzdG9wUmVtb3RlIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd24iLCJjcmVhdGVTaW0iLCJkZWxldGUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsIndkYUNhcHMiLCJhdXRvTGF1bmNoIiwiYXJndW1lbnRzIiwiZW52aXJvbm1lbnQiLCJldmVudGxvb3BJZGxlRGVsYXlTZWMiLCJ3ZGFFdmVudGxvb3BJZGxlRGVsYXkiLCJzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZSIsIndhaXRGb3JRdWllc2NlbmNlIiwic2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uIiwic2ltcGxlSXNWaXNpYmxlQ2hlY2siLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciIsIndhaXRGb3JJZGxlVGltZW91dCIsImVsZW1lbnRSZXNwb25zZUZpZWxkcyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInNob3VsZFRlcm1pbmF0ZUFwcCIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY29lcmNlVmVyc2lvbiIsInZlcmlmeVByb2Nlc3NBcmd1bWVudCIsImlzTmlsIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5Iiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FBR3hCQyxFQUFBQSxXQUFXLEVBQUUsRUFIVztBQUl4QkMsRUFBQUEsUUFBUSxFQUFFLEtBSmM7QUFLeEJDLEVBQUFBLGlCQUFpQixFQUFFLElBTEs7QUFNeEJDLEVBQUFBLGVBQWUsRUFBRSxLQU5PO0FBT3hCQyxFQUFBQSxlQUFlLEVBQUUsSUFQTztBQVF4QkMsRUFBQUEsd0JBQXdCLEVBQUU7QUFSRixDQUExQjtBQVVBLE1BQU1DLGdCQUFnQixHQUFHLHdCQUF6QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLENBQWhDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBckM7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyx5RkFBbEM7QUFDQSxNQUFNQywwQkFBMEIsR0FBRyxLQUFuQztBQUNBLE1BQU1DLGdCQUFnQixHQUFHO0FBQ3ZCQyxFQUFBQSxZ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eUJBQTdCOztBQUNBLFdBQUtBLHlCQUFMLEdBQWlDLE1BQU0sQ0FBRSxDQUF6Qzs7QUFDQSxVQUFJO0FBQ0YsY0FBTSxLQUFLNU8sUUFBTCxDQUFjMUYsSUFBZCxDQUFOO0FBQ0QsT0FGRCxTQUVVO0FBQ1IsYUFBS3NVLHlCQUFMLEdBQWlDRCxlQUFqQztBQUNEO0FBQ0Y7O0FBQ0QsVUFBTSxNQUFNRixLQUFOLEVBQU47QUFDRDs7QUE1bUNxQzs7O0FBK21DeENwUixNQUFNLENBQUNDLE1BQVAsQ0FBY25ELGNBQWMsQ0FBQzBVLFNBQTdCLEVBQXdDQyxjQUF4QztlQUVlM1UsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHV0aWwsIG1qcGVnIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7IFdlYkRyaXZlckFnZW50IH0gZnJvbSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2ltLCBnZXRFeGlzdGluZ1NpbSwgcnVuU2ltdWxhdG9yUmVzZXQsIGluc3RhbGxUb1NpbXVsYXRvcixcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnMsIHNodXRkb3duU2ltdWxhdG9yLCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlc1xufSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGdldFNpbXVsYXRvciwgaW5zdGFsbFNTTENlcnQsIGhhc1NTTENlcnQgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcblxuXG5jb25zdCBTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUgPSAnc2h1dGRvd25fb3RoZXJfc2ltcyc7XG5jb25zdCBDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIID0gJ2N1c3RvbWl6ZV9yZXN1bHRfYnVuZGxlX3BhdGgnO1xuXG5jb25zdCBkZWZhdWx0U2VydmVyQ2FwcyA9IHtcbiAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgYnJvd3Nlck5hbWU6ICcnLFxuICBwbGF0Zm9ybTogJ01BQycsXG4gIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogZmFsc2UsXG59O1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTID0gMjtcbmNvbnN0IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgPSAxO1xuY29uc3QgV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS14Y3VpdGVzdC1kcml2ZXIvYmxvYi9tYXN0ZXIvZG9jcy9yZWFsLWRldmljZS1jb25maWcubWQnO1xuY29uc3QgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUwgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7XG4gIG5hdGl2ZVdlYlRhcDogZmFsc2UsXG4gIG5hdGl2ZVdlYlRhcFN0cmljdDogZmFsc2UsXG4gIHVzZUpTT05Tb3VyY2U6IGZhbHNlLFxuICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0cnVlLFxuICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiAndHlwZSxsYWJlbCcsXG4gIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9VdGlsaXRpZXMvRkJDb25maWd1cmF0aW9uLm0gZm9yIGZvbGxvd2luZyBzZXR0aW5ncycgdmFsdWVzXG4gIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk6IDI1LFxuICBtanBlZ1NlcnZlckZyYW1lcmF0ZTogMTAsXG4gIHNjcmVlbnNob3RRdWFsaXR5OiAxLFxuICBtanBlZ1NjYWxpbmdGYWN0b3I6IDEwMCxcbiAgLy8gc2V0IGByZWR1Y2VNb3Rpb25gIHRvIGBudWxsYCBzbyB0aGF0IGl0IHdpbGwgYmUgdmVyaWZpZWQgYnV0IHN0aWxsIHNldCBlaXRoZXIgdHJ1ZS9mYWxzZVxuICByZWR1Y2VNb3Rpb246IG51bGwsXG59O1xuLy8gVGhpcyBsb2NrIGFzc3VyZXMsIHRoYXQgZWFjaCBkcml2ZXIgc2Vzc2lvbiBkb2VzIG5vdFxuLy8gYWZmZWN0IHNoYXJlZCByZXNvdXJjZXMgb2YgdGhlIG90aGVyIHBhcmFsbGVsIHNlc3Npb25zXG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuY29uc3QgTk9fUFJPWFlfTkFUSVZFX0xJU1QgPSBbXG4gIFsnREVMRVRFJywgL3dpbmRvdy9dLFxuICBbJ0dFVCcsIC9eXFwvc2Vzc2lvblxcL1teXFwvXSskL10sXG4gIFsnR0VUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydHRVQnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnR0VUJywgL2FwcGl1bS9dLFxuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvY29udGV4dC9dLFxuICBbJ0dFVCcsIC9sb2NhdGlvbi9dLFxuICBbJ0dFVCcsIC9sb2cvXSxcbiAgWydHRVQnLCAvc2NyZWVuc2hvdC9dLFxuICBbJ0dFVCcsIC9zaXplL10sXG4gIFsnR0VUJywgL3NvdXJjZS9dLFxuICBbJ0dFVCcsIC90aW1lb3V0cyQvXSxcbiAgWydHRVQnLCAvdXJsL10sXG4gIFsnR0VUJywgL3dpbmRvdy9dLFxuICBbJ1BPU1QnLCAvYWNjZXB0X2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9hY3Rpb25zJC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnUE9TVCcsIC9hcHBpdW0vXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2lzX2xvY2tlZC9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvbG9jay9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvdW5sb2NrL10sXG4gIFsnUE9TVCcsIC9iYWNrL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY29udGV4dC9dLFxuICBbJ1BPU1QnLCAvZGlzbWlzc19hbGVydC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudFxcL2FjdGl2ZS9dLCAvLyBNSlNPTldQIGdldCBhY3RpdmUgZWxlbWVudCBzaG91bGQgcHJveHlcbiAgWydQT1NUJywgL2VsZW1lbnQkL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50cyQvXSxcbiAgWydQT1NUJywgL2V4ZWN1dGUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL2xvZy9dLFxuICBbJ1BPU1QnLCAvbW92ZXRvL10sXG4gIFsnUE9TVCcsIC9yZWNlaXZlX2FzeW5jX3Jlc3BvbnNlL10sIC8vIGFsd2F5cywgaW4gY2FzZSBjb250ZXh0IHN3aXRjaGVzIHdoaWxlIHdhaXRpbmdcbiAgWydQT1NUJywgL3Nlc3Npb25cXC9bXlxcL10rXFwvbG9jYXRpb24vXSwgLy8gZ2VvIGxvY2F0aW9uLCBidXQgbm90IGVsZW1lbnQgbG9jYXRpb25cbiAgWydQT1NUJywgL3NoYWtlL10sXG4gIFsnUE9TVCcsIC90aW1lb3V0cy9dLFxuICBbJ1BPU1QnLCAvdG91Y2gvXSxcbiAgWydQT1NUJywgL3VybC9dLFxuICBbJ1BPU1QnLCAvdmFsdWUvXSxcbiAgWydQT1NUJywgL3dpbmRvdy9dLFxuICBbJ0RFTEVURScsIC9jb29raWUvXSxcbiAgWydHRVQnLCAvY29va2llL10sXG4gIFsnUE9TVCcsIC9jb29raWUvXSxcbl07XG5jb25zdCBOT19QUk9YWV9XRUJfTElTVCA9IFtcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2VsZW1lbnQvXSxcbiAgWydHRVQnLCAvdGV4dC9dLFxuICBbJ0dFVCcsIC90aXRsZS9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NsaWNrL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50L10sXG4gIFsnUE9TVCcsIC9mb3J3YXJkL10sXG4gIFsnUE9TVCcsIC9mcmFtZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvcmVmcmVzaC9dLFxuXS5jb25jYXQoTk9fUFJPWFlfTkFUSVZFX0xJU1QpO1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG4gICdnZXRTY3JlZW5JbmZvJyxcbl07XG5cbmNsYXNzIFhDVUlUZXN0RHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICAgICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgIF07XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgIF07XG4gICAgdGhpcy5yZXNldElvcygpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoREVGQVVMVF9TRVRUSU5HUywgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMubG9ncyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdGl2ZVdlYlRhcCcgJiYga2V5ICE9PSAnbmF0aXZlV2ViVGFwU3RyaWN0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICAgIHNldHRpbmdzOiB7W2tleV06IHZhbHVlfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub3B0c1trZXldID0gISF2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0SW9zICgpIHtcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge307XG4gICAgdGhpcy53ZGEgPSBudWxsO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbXTtcbiAgICB0aGlzLnNhZmFyaSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gbnVsbDtcblxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy53ZWJFbGVtZW50SWRzID0gW107XG4gICAgdGhpcy5fY3VycmVudFVybCA9IG51bGw7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHt9O1xuICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICB0aGlzLmFzeW5jbGliV2FpdE1zID0gMDtcbiAgICB0aGlzLnBhZ2VMb2FkTXMgPSA2MDAwO1xuICAgIHRoaXMubGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEgPSB7fTsgLy8gdGhpcyBpcyB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBzdGF0ZSB3ZSBzdGFydCBzbyB3aGVuIHdlIGRlbGV0ZSB0aGUgc2Vzc2lvbiB3ZSBjYW4gcHV0IHRoaW5ncyBiYWNrXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE8gYWRkIHZhbGlkYXRpb24gb24gY2Fwc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcblxuICAgICAgLy8gbWVyZ2Ugc2VydmVyIGNhcGFiaWxpdGllcyArIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjYXBzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNlcnZlckNhcHMsIGNhcHMpO1xuICAgICAgLy8gdXBkYXRlIHRoZSB1ZGlkIHdpdGggd2hhdCBpcyBhY3R1YWxseSB1c2VkXG4gICAgICBjYXBzLnVkaWQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXAgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcFN0cmljdCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwU3RyaWN0JykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwU3RyaWN0OiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwU3RyaWN0fSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgdXNlSlNPTlNvdXJjZSBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAndXNlSlNPTlNvdXJjZScpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3VzZUpTT05Tb3VyY2U6IHRoaXMub3B0cy51c2VKU09OU291cmNlfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3ZGFTZXR0aW5ncyA9IHtcbiAgICAgICAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogREVGQVVMVF9TRVRUSU5HUy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzLFxuICAgICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiBERUZBVUxUX1NFVFRJTkdTLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICB9O1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ2VsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzID0gdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMgPSB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyRnJhbWVyYXRlJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJGcmFtZXJhdGUgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJGcmFtZXJhdGU7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyB0aGUgcXVhbGl0eSBvZiBwaG9uZSBzY3JlZW5zaG90OiAnJHt0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHl9J2ApO1xuICAgICAgICB3ZGFTZXR0aW5ncy5zY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSBXREEgZ2V0cyBvdXIgZGVmYXVsdHMgaW5zdGVhZCBvZiB3aGF0ZXZlciBpdHMgb3duIG1pZ2h0IGJlXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHdkYVNldHRpbmdzKTtcblxuICAgICAgLy8gdHVybiBvbiBtanBlZyBzdHJlYW0gcmVhZGluZyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgdGhpcy5vcHRzLm5vUmVzZXQgPSAhIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSAhIXRoaXMub3B0cy5mdWxsUmVzZXQ7XG5cbiAgICBhd2FpdCBwcmludFVzZXIoKTtcblxuICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gbnVsbDsgLy8gRm9yIFdEQSBhbmQgeGNvZGVidWlsZFxuICAgIGNvbnN0IHtkZXZpY2UsIHVkaWQsIHJlYWxEZXZpY2V9ID0gYXdhaXQgdGhpcy5kZXRlcm1pbmVEZXZpY2UoKTtcbiAgICBsb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgJ3NpbXVsYXRvckRldmljZXNTZXRQYXRoJyBjYXBhYmlsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3IgZGV2aWNlc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgc2ltdWxhdG9yIGRldmljZXMgc2V0IHBhdGggdG8gJyR7dGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5vcHRzLmRldmljZS5kZXZpY2VzU2V0UGF0aCA9IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGlzIG5vIHBsYXRmb3JtVmVyc2lvbiwgZ2V0IGl0IGZyb20gdGhlIGRldmljZVxuICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICBsb2cuaW5mbyhgTm9ybWFsaXplZCBwbGF0Zm9ybVZlcnNpb24gY2FwYWJpbGl0eSB2YWx1ZSAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgdG8gJyR7bm9ybWFsaXplZFZlcnNpb259J2ApO1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnOS4zJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhdGZvcm0gdmVyc2lvbiBtdXN0IGJlIDkuMyBvciBhYm92ZS4gJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnhjb2RlVmVyc2lvbikgJiYgKCF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwgfHwgIXRoaXMub3B0cy5yZWFsRGV2aWNlKSkge1xuICAgICAgLy8gbm8gYHdlYkRyaXZlckFnZW50VXJsYCwgb3Igb24gYSBzaW11bGF0b3IsIHNvIHdlIG5lZWQgYW4gWGNvZGUgdmVyc2lvblxuICAgICAgdGhpcy54Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCd4Y29kZURldGFpbHNSZXRyaWV2ZWQnKTtcblxuICAgIGlmIChfLnRvTG93ZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKSA9PT0gJ3NhZmFyaScpIHtcbiAgICAgIGxvZy5pbmZvKCdTYWZhcmkgdGVzdCByZXF1ZXN0ZWQnKTtcbiAgICAgIHRoaXMuc2FmYXJpID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyA9IHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzIHx8IHt9O1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gU0FGQVJJX0JVTkRMRV9JRDtcbiAgICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLm9wdHMuc2FmYXJpSW5pdGlhbFVybCB8fCAoXG4gICAgICAgIHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICAgICA/ICdodHRwOi8vYXBwaXVtLmlvJ1xuICAgICAgICAgIDogYGh0dHA6Ly8ke3RoaXMub3B0cy5hZGRyZXNzfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYFxuICAgICAgKTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4yJykpIHtcbiAgICAgICAgLy8gdGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBvbiAxMi4yIGFuZCBhYm92ZVxuICAgICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cy5hcmdzID0gWyctdScsIHRoaXMuX2N1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcCB8fCB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQXBwKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcENvbmZpZ3VyZWQnKTtcblxuICAgIC8vIGZhaWwgdmVyeSBlYXJseSBpZiB0aGUgYXBwIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3RcbiAgICAvLyBvciBpZiBidW5kbGUgaWQgZG9lc24ndCBwb2ludCB0byBhbiBpbnN0YWxsZWQgYXBwXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGNoZWNrQXBwUHJlc2VudCh0aGlzLm9wdHMuYXBwKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoKTtcblxuICAgIHRoaXMud2RhID0gbmV3IFdlYkRyaXZlckFnZW50KHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLm9wdHMpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKS5jYXRjaCgoZSkgPT4gbG9nLmRlYnVnKGUpKTtcblxuICAgIGNvbnN0IG1lbW9pemVkTG9nSW5mbyA9IF8ubWVtb2l6ZShmdW5jdGlvbiBsb2dJbmZvICgpIHtcbiAgICAgIGxvZy5pbmZvKFwiJ3NraXBMb2dDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ3Mgc3VjaCBhcyBjcmFzaCwgc3lzdGVtLCBzYWZhcmkgY29uc29sZSBhbmQgc2FmYXJpIG5ldHdvcmsuXCIpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0TG9nQ2FwdHVyZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2tpcExvZ0NhcHR1cmUpIHtcbiAgICAgICAgbWVtb2l6ZWRMb2dJbmZvKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnbG9nQ2FwdHVyZVN0YXJ0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc0xvZ0NhcHR1cmVTdGFydGVkID0gYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBTYWZhcmkgZ2xvYmFsIHByZWZlcmVuY2VzIHVwZGF0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvY2FsQ29uZmlnID0gYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXModGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCksIGFzeW5jIChzaW0pID0+IHtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3Ioc2ltKTtcblxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIG5lZWRzIHRvIGJlIGNoYW5nZXMgYSBwcmlvcmksIHNvIGNoYW5nZSBmaXJzdC5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBzaHV0ZG93biBwcm9jZXNzIGNoYW5nZXMgdGhlIHNldHRpbmdzLCBzbyByZXNldCB0aGVtLFxuICAgICAgICAvLyBrbm93aW5nIHRoYXQgdGhlIHNpbSBpcyBhbHJlYWR5IHNodXRcbiAgICAgICAgYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXMoc2ltLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KSB7XG4gICAgICAgIGNvbnN0IGNlcnRIZWFkID0gXy50cnVuY2F0ZSh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwge2xlbmd0aDogMjB9KTtcbiAgICAgICAgbG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2ltY3RsLmFkZFJvb3RDZXJ0aWZpY2F0ZSh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwge3JhdzogdHJ1ZX0pO1xuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICBpZiAoYXdhaXQgaGFzU1NMQ2VydCh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwgdGhpcy5vcHRzLnVkaWQpKSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLmluZm8oYE1ha2luZyBzdXJlIFNpbXVsYXRvciBpcyBzaHV0IGRvd24sICcgK1xuICAgICAgICAgICAgICAnc28gdGhhdCBTU0wgY2VydGlmaWNhdGUgaW5zdGFsbGF0aW9uIHRha2VzIGVmZmVjdGApO1xuICAgICAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgICAgICBhd2FpdCBpbnN0YWxsU1NMQ2VydCh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCwgdGhpcy5vcHRzLnVkaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTaW0oKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5sYXVuY2hXaXRoSURCICYmIHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlkYiA9IG5ldyBJREIoe3VkaWR9KTtcbiAgICAgICAgICBhd2FpdCBpZGIuY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub3B0cy5kZXZpY2UuaWRiID0gaWRiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmluZm8oYGlkYiB3aWxsIG5vdCBiZSB1c2VkIGZvciBTaW11bGF0b3IgaW50ZXJhY3Rpb24uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ0V2ZW50KCdzaW1TdGFydGVkJyk7XG4gICAgICBpZiAoIWlzTG9nQ2FwdHVyZVN0YXJ0ZWQpIHtcbiAgICAgICAgLy8gUmV0cnkgbG9nIGNhcHR1cmUgaWYgU2ltdWxhdG9yIHdhcyBub3QgcnVubmluZyBiZWZvcmVcbiAgICAgICAgYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFVVCgpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnYXBwSW5zdGFsbGVkJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugb25seSBoYXZlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBubyBhcHAsIGZhaWwgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwICYmIHRoaXMub3B0cy5idW5kbGVJZCAmJiAhdGhpcy5zYWZhcmkpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYnVuZGxlSWQpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBBcHAgd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB1bmtub3duYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5wZXJtaXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICBsb2cuZGVidWcoJ1NldHRpbmcgdGhlIHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBiZWZvcmUgV0RBIGlzIHN0YXJ0ZWQnKTtcbiAgICAgICAgZm9yIChjb25zdCBbYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZ10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UodGhpcy5vcHRzLnBlcm1pc3Npb25zKSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNldFBlcm1pc3Npb25zKGJ1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybignU2V0dGluZyBwZXJtaXNzaW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBTaW11bGF0b3IuICcgK1xuICAgICAgICAgICdUaGUgXCJwZXJtaXNzaW9uc1wiIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZW5hYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kaXNhYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhKHRoaXMub3B0cy5zZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRSZWR1Y2VNb3Rpb24odGhpcy5vcHRzLnJlZHVjZU1vdGlvbik7XG5cbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIHRoaXMubG9nRXZlbnQoJ29yaWVudGF0aW9uU2V0Jyk7XG5cbiAgICAvLyByZWFsIGRldmljZXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyLCBhZnRlciB0aGUgd2ViIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmICF0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnV2FpdGluZyBmb3IgaW5pdGlhbCB3ZWJ2aWV3Jyk7XG4gICAgICBhd2FpdCB0aGlzLm5hdlRvSW5pdGlhbFdlYnZpZXcoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2luaXRpYWxXZWJ2aWV3TmF2aWdhdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLmlzUmVhbERldmljZSgpICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBXZWJEcml2ZXJBZ2VudFJ1bm5lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gVGhlIGlkIG9mIHRoZSB0YXJnZXQgc2Vzc2lvbiB0byBsYXVuY2ggV0RBIHdpdGguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgYSByZWFsIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHN0YXJ0V2RhIChzZXNzaW9uSWQsIHJlYWxEZXZpY2UpIHtcbiAgICAvLyBEb24ndCBjbGVhbnVwIHRoZSBwcm9jZXNzZXMgaWYgd2ViRHJpdmVyQWdlbnRVcmwgaXMgc2V0XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgYXdhaXQgdGhpcy53ZGEuY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlUG9ydEZvcndhcmRpbmcgPSB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiAhdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmxcbiAgICAgICYmIGlzTG9jYWxIb3N0KHRoaXMud2RhLndkYUJhc2VVcmwpO1xuICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkLCB0aGlzLndkYS51cmwucG9ydCwge1xuICAgICAgZGV2aWNlUG9ydDogdXNlUG9ydEZvcndhcmRpbmcgPyB0aGlzLndkYS53ZGFSZW1vdGVQb3J0IDogbnVsbCxcbiAgICAgIHVzZVBvcnRGb3J3YXJkaW5nLFxuICAgIH0pO1xuXG4gICAgLy8gTGV0IG11bHRpcGxlIFdEQSBiaW5hcmllcyB3aXRoIGRpZmZlcmVudCBkZXJpdmVkIGRhdGEgZm9sZGVycyBiZSBidWlsdCBpbiBwYXJhbGxlbFxuICAgIC8vIENvbmN1cnJlbnQgV0RBIGJ1aWxkcyBmcm9tIHRoZSBzYW1lIHNvdXJjZSB3aWxsIGNhdXNlIHhjb2RlYnVpbGQgc3luY2hyb25pemF0aW9uIGVycm9yc1xuICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgIGlmICh0aGlzLm9wdHMudXNlWGN0ZXN0cnVuRmlsZSB8fCAhKGF3YWl0IHRoaXMud2RhLmlzU291cmNlRnJlc2goKSkpIHtcbiAgICAgIC8vIEZpcnN0LXRpbWUgY29tcGlsYXRpb24gaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgd2hpY2ggaXMgZG9uZSBmYXN0ZXIgaWYgZXhlY3V0ZWRcbiAgICAgIC8vIHNlcXVlbnRpYWxseS4gWGNvZGVidWlsZCBzcHJlYWRzIHRoZSBsb2FkIGNhdXNlZCBieSB0aGUgY2xhbmcgY29tcGlsZXIgdG8gYWxsIGF2YWlsYWJsZSBDUFUgY29yZXNcbiAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgV2ViRHJpdmVyQWdlbnQgaW5pdGlhbGl6YXRpb24gd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIGtleSAnJHtzeW5jaHJvbml6YXRpb25LZXl9J2ApO1xuICAgIGlmIChTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmlzQnVzeSgpICYmICF0aGlzLm9wdHMuZGVyaXZlZERhdGFQYXRoICYmICF0aGlzLm9wdHMuYm9vdHN0cmFwUGF0aCkge1xuICAgICAgbG9nLmRlYnVnKGBDb25zaWRlciBzZXR0aW5nIGEgdW5pcXVlICdkZXJpdmVkRGF0YVBhdGgnIGNhcGFiaWxpdHkgdmFsdWUgZm9yIGVhY2ggcGFyYWxsZWwgZHJpdmVyIGluc3RhbmNlIGAgK1xuICAgICAgICBgdG8gYXZvaWQgY29uZmxpY3RzIGFuZCBzcGVlZCB1cCB0aGUgYnVpbGRpbmcgcHJvY2Vzc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBDYXBhYmlsaXR5ICd1c2VOZXdXREEnIHNldCB0byB0cnVlLCBzbyB1bmluc3RhbGxpbmcgV0RBIGJlZm9yZSBwcm9jZWVkaW5nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhVW5pbnN0YWxsZWQnKTtcbiAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnNldHVwQ2FjaGluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBsb2NhbCBoZWxwZXIgZm9yIHRoZSB0d28gcGxhY2VzIHdlIG5lZWQgdG8gdW5pbnN0YWxsIHdkYSBhbmQgcmUtc3RhcnQgaXRcbiAgICAgIGNvbnN0IHF1aXRBbmRVbmluc3RhbGwgPSBhc3luYyAobXNnKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdOb3QgcXVpdHRpbmcvdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50IHNpbmNlIHdlYkRyaXZlckFnZW50VXJsIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cud2FybignUXVpdHRpbmcgYW5kIHVuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCcpO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2VkIGluIHRoZSBmb2xsb3dpbmcgV0RBIGJ1aWxkXG4gICAgICBpZiAodGhpcy5vcHRzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnR1cFJldHJpZXMgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMgfHwgKHRoaXMuaXNSZWFsRGV2aWNlKCkgPyBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTIDogV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMpO1xuICAgICAgY29uc3Qgc3RhcnR1cFJldHJ5SW50ZXJ2YWwgPSB0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgfHwgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUw7XG4gICAgICBsb2cuZGVidWcoYFRyeWluZyB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCAke3N0YXJ0dXBSZXRyaWVzfSB0aW1lcyB3aXRoICR7c3RhcnR1cFJldHJ5SW50ZXJ2YWx9bXMgaW50ZXJ2YWxgKTtcbiAgICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGVzZSB2YWx1ZXMgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgd2RhU3RhcnR1cFJldHJpZXMvd2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgY2FwYWJpbGl0aWVzYCk7XG4gICAgICB9XG4gICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHN0YXJ0dXBSZXRyaWVzLCBzdGFydHVwUmV0cnlJbnRlcnZhbCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEF0dGVtcHRlZCcpO1xuICAgICAgICBpZiAocmV0cnlDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2cuaW5mbyhgUmV0cnlpbmcgV0RBIHN0YXJ0dXAgKCR7cmV0cnlDb3VudCArIDF9IG9mICR7c3RhcnR1cFJldHJpZXN9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gb24geGNvZGUgMTAgaW5zdGFsbGQgd2lsbCBvZnRlbiB0cnkgdG8gYWNjZXNzIHRoZSBhcHAgZnJvbSBpdHMgc3RhZ2luZ1xuICAgICAgICAgIC8vIGRpcmVjdG9yeSBiZWZvcmUgZnVsbHkgbW92aW5nIGl0IHRoZXJlLCBhbmQgZmFpbC4gUmV0cnlpbmcgb25jZVxuICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGhlbHBzXG4gICAgICAgICAgY29uc3QgcmV0cmllcyA9IHRoaXMueGNvZGVWZXJzaW9uLm1ham9yID49IDEwID8gMiA6IDE7XG4gICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBhd2FpdCByZXRyeShyZXRyaWVzLCB0aGlzLndkYS5sYXVuY2guYmluZCh0aGlzLndkYSksIHNlc3Npb25JZCwgcmVhbERldmljZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0RmFpbGVkJyk7XG4gICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gbGF1bmNoIFdlYkRyaXZlckFnZW50IGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAuIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLndkYS5wcm94eVJlcVJlcy5iaW5kKHRoaXMud2RhKTtcbiAgICAgICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsU3RhY2t0cmFjZSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgxNSwgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvbkF0dGVtcHRlZCcpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdTZW5kaW5nIGNyZWF0ZVNlc3Npb24gY29tbWFuZCB0byBXREEnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gdGhpcy5jYWNoZWRXZGFTdGF0dXMgfHwgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXZGFTZXNzaW9uKHRoaXMub3B0cy5idW5kbGVJZCwgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsU3RhY2t0cmFjZSA9IGVyci5zdGFjaztcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGBGYWlsZWQgdG8gY3JlYXRlIFdEQSBzZXNzaW9uICgke2Vyci5tZXNzYWdlfSkuIFJldHJ5aW5nLi4uYCk7XG4gICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uU3RhcnRlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAob3JpZ2luYWxTdGFja3RyYWNlKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcob3JpZ2luYWxTdGFja3RyYWNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCBzZXNzaW9uIGJlY2F1c2Ugb2YgeGNvZGVidWlsZCBmYWlsdXJlOiAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIGVycm9yTXNnICs9IGAgTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBhd2FpdCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwKHRoaXMud2RhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIGV4cGVjdCBjZXJ0YWluIHNvY2tldCBlcnJvcnMgdW50aWwgdGhpcyBwb2ludCwgYnV0IG5vd1xuICAgICAgICAvLyBtYXJrIHRoaW5ncyBhcyBmdWxseSB3b3JraW5nXG4gICAgICAgIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0ZWQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcnVuUmVzZXQgKG9wdHMgPSBudWxsKSB7XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRTdGFydGVkJyk7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGF3YWl0IHJ1blJlYWxEZXZpY2VSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHJ1blNpbXVsYXRvclJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgncmVzZXRDb21wbGV0ZScpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgYXdhaXQgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZGVyIG9mIF8uY29tcGFjdChbdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIsIHRoaXMuX2F1ZGlvUmVjb3JkZXJdKSkge1xuICAgICAgYXdhaXQgcmVjb3JkZXIuaW50ZXJydXB0KHRydWUpO1xuICAgICAgYXdhaXQgcmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3BlcmZSZWNvcmRlcnMpKSB7XG4gICAgICBhd2FpdCBCLmFsbCh0aGlzLl9wZXJmUmVjb3JkZXJzLm1hcCgoeCkgPT4geC5zdG9wKHRydWUpKSk7XG4gICAgICB0aGlzLl9wZXJmUmVjb3JkZXJzID0gW107XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdG9wKCk7XG5cbiAgICBpZiAodGhpcy53ZGEgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jbGVhclN5c3RlbUZpbGVzKSB7XG4gICAgICAgIGxldCBzeW5jaHJvbml6YXRpb25LZXkgPSBYQ1VJVGVzdERyaXZlci5uYW1lO1xuICAgICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgICBpZiAoZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2xlYXJTeXN0ZW1GaWxlcyh0aGlzLndkYSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKCdOb3QgY2xlYXJpbmcgbG9nIGZpbGVzLiBVc2UgYGNsZWFyU3lzdGVtRmlsZXNgIGNhcGFiaWxpdHkgdG8gdHVybiBvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGUpIHtcbiAgICAgIGxvZy5kZWJ1ZygnRm91bmQgYSByZW1vdGUgZGVidWdnZXIgc2Vzc2lvbi4gUmVtb3ZpbmcuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcFJlbW90ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge1xuICAgICAgICBlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd246IHRydWUsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSAmJiAhdGhpcy5vcHRzLm5vUmVzZXQgJiYgISF0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSkge1xuICAgICAgICBsb2cuZGVidWcoYERlbGV0aW5nIHNpbXVsYXRvciBjcmVhdGVkIGZvciB0aGlzIHJ1biAodWRpZDogJyR7dGhpcy5vcHRzLnVkaWR9JylgKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGVsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5sb2dzKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dzLnN5c2xvZy5zdG9wQ2FwdHVyZSgpO1xuICAgICAgdGhpcy5sb2dzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldElvcygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuXG5cbiAgICBpZiAodGhpcy53ZGEgJiYgdGhpcy53ZGEuZnVsbHlTdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy53ZGEuandwcm94eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gYW4gZXJyb3IgaGVyZSBzaG91bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIHJlc3Qgb2YgY2xlYW4gdXBcbiAgICAgICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBERUxFVEUgc2Vzc2lvbiBvbiBXREE6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcgc2h1dGRvd24uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwgJiYgdGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgIGlmIChjbWQgPT09ICdyZWNlaXZlQXN5bmNSZXNwb25zZScpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmVBc3luY1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBvbmNlIHRoaXMgZml4IGdldHMgaW50byBiYXNlIGRyaXZlciByZW1vdmUgZnJvbSBoZXJlXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUFwcCAoKSB7XG4gICAgZnVuY3Rpb24gYXBwSXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICAgICAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXBwIG5hbWUgaXMgYSBidW5kbGVJZCBhc3NpZ24gaXQgdG8gdGhlIGJ1bmRsZUlkIHByb3BlcnR5XG4gICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IHRoaXMub3B0cy5hcHA7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gJyc7XG4gICAgfVxuICAgIC8vIHdlIGhhdmUgYSBidW5kbGUgSUQsIGJ1dCBubyBhcHAsIG9yIGFwcCBpcyBhbHNvIGEgYnVuZGxlXG4gICAgaWYgKCh0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmJ1bmRsZUlkKSkgJiZcbiAgICAgICAgKHRoaXMub3B0cy5hcHAgPT09ICcnIHx8IGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nLmRlYnVnKCdBcHAgaXMgYW4gaU9TIGJ1bmRsZSwgd2lsbCBhdHRlbXB0IHRvIHJ1biBhcyBwcmUtZXhpc3RpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igc3VwcG9ydGVkIGJ1aWxkLWluIGFwcHNcbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLlByZWZlcmVuY2VzJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2NhbGVuZGFyJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5tb2JpbGVjYWwnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBkb3dubG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsICcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIGFwcDogJHt0aGlzLm9wdHMuYXBwfS4gYCArXG4gICAgICAgIGBBcHAgcGF0aHMgbmVlZCB0byBiZSBhYnNvbHV0ZSBvciBhbiBVUkwgdG8gYSBjb21wcmVzc2VkIGFwcCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURldmljZSAoKSB7XG4gICAgLy8gaW4gdGhlIG9uZSBjYXNlIHdoZXJlIHdlIGNyZWF0ZSBhIHNpbSwgd2Ugd2lsbCBzZXQgdGhpcyBzdGF0ZVxuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSBmYWxzZTtcblxuICAgIC8vIGlmIHdlIGdldCBnZW5lcmljIG5hbWVzLCB0cmFuc2xhdGUgdGhlbVxuICAgIHRoaXMub3B0cy5kZXZpY2VOYW1lID0gdHJhbnNsYXRlRGV2aWNlTmFtZSh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLm9wdHMuZGV2aWNlTmFtZSk7XG5cbiAgICBjb25zdCBzZXR1cFZlcnNpb25DYXBzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBpT1MgU0RLIFZlcnNpb24gc2V0IHRvICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufSdgKTtcbiAgICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbikge1xuICAgICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICBsb2cud2FybihgQ2Fubm90IGRldGVjdCBhbnkgY29ubmVjdGVkIHJlYWwgZGV2aWNlcy4gRmFsbGluZyBiYWNrIHRvIFNpbXVsYXRvci4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcbiAgICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgLy8gTm8gbWF0Y2hpbmcgU2ltdWxhdG9yIGlzIGZvdW5kLiBUaHJvdyBhbiBlcnJvclxuICAgICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBkZXRlY3QgdWRpZCBmb3IgJHt0aGlzLm9wdHMuZGV2aWNlTmFtZX0gU2ltdWxhdG9yIHJ1bm5pbmcgaU9TICR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXRjaGluZyBTaW11bGF0b3IgZXhpc3RzIGFuZCBpcyBmb3VuZC4gVXNlIGl0XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBjb25zdCBkZXZpY2VQbGF0Zm9ybSA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbihhd2FpdCBkZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBkZXZpY2VQbGF0Zm9ybSkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGRldmljZVBsYXRmb3JtO1xuICAgICAgICAgICAgbG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgbG9nLmRlYnVnKGBBdmFpbGFibGUgZGV2aWNlczogJHtkZXZpY2VzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGlmICghZGV2aWNlcy5pbmNsdWRlcyh0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAvLyBjaGVjayBmb3IgYSBwYXJ0aWN1bGFyIHNpbXVsYXRvclxuICAgICAgICAgIGxvZy5kZWJ1ZyhgTm8gcmVhbCBkZXZpY2Ugd2l0aCB1ZGlkICcke3RoaXMub3B0cy51ZGlkfScuIExvb2tpbmcgZm9yIHNpbXVsYXRvcmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRTaW11bGF0b3IodGhpcy5vcHRzLnVkaWQsIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1NldFBhdGg6IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGV2aWNlIG9yIHNpbXVsYXRvciBVRElEOiAnJHt0aGlzLm9wdHMudWRpZH0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFJlYWxEZXZpY2VPYmoodGhpcy5vcHRzLnVkaWQpO1xuICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IHRydWUsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSB0aGUgZGV2aWNlIHdpbGwgYmUgYSBTaW11bGF0b3JcbiAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgaWYgKHRoaXMub3B0cy5lbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbikge1xuICAgICAgbG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICBsb2cuaW5mbygnU2ltdWxhdG9yIHVkaWQgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gbm8gZGV2aWNlIG9mIHRoaXMgdHlwZSBleGlzdHMsIG9yIHRoZXkgcmVxdWVzdCBuZXcgc2ltLCBzbyBjcmVhdGUgb25lXG4gICAgbG9nLmluZm8oJ1VzaW5nIGRlc2lyZWQgY2FwcyB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jcmVhdGVTaW0oKTtcbiAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2ltICgpIHtcbiAgICBjb25zdCBydW5PcHRzID0ge1xuICAgICAgc2NhbGVGYWN0b3I6IHRoaXMub3B0cy5zY2FsZUZhY3RvcixcbiAgICAgIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiAhIXRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCxcbiAgICAgIHBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jOiB0aGlzLm9wdHMuc2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMgPz8gJ29mZicsXG4gICAgICBpc0hlYWRsZXNzOiAhIXRoaXMub3B0cy5pc0hlYWRsZXNzLFxuICAgICAgdHJhY2VQb2ludGVyOiB0aGlzLm9wdHMuc2ltdWxhdG9yVHJhY2VQb2ludGVyLFxuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBhZGQgdGhlIHdpbmRvdyBjZW50ZXIsIGlmIGl0IGlzIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyKSB7XG4gICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd0NlbnRlciA9IHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dCkpIHtcbiAgICAgIHJ1bk9wdHMuc3RhcnR1cFRpbWVvdXQgPSB0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0byB3b3JrYXJvdW5kIFhDVGVzdCBidWcgYWJvdXQgY2hhbmdpbmcgU2ltdWxhdG9yXG4gICAgLy8gb3JpZW50YXRpb24gaXMgbm90IHN5bmNocm9uaXplZCB0byB0aGUgYWN0dWFsIHdpbmRvdyBvcmllbnRhdGlvblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gXy5pc1N0cmluZyh0aGlzLm9wdHMub3JpZW50YXRpb24pICYmIHRoaXMub3B0cy5vcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIHN3aXRjaCAob3JpZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0xBTkRTQ0FQRSc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnTGFuZHNjYXBlTGVmdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDkwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BPUlRSQUlUJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdQb3J0cmFpdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucnVuKHJ1bk9wdHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2ltICgpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gdHJ1ZTtcblxuICAgIC8vIEdldCBwbGF0Zm9ybSBuYW1lIGZyb20gY29uc3Qgc2luY2UgaXQgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yXG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5pc1R2T1MoKSA/IFBMQVRGT1JNX05BTUVfVFZPUyA6IFBMQVRGT1JNX05BTUVfSU9TO1xuXG4gICAgLy8gY3JlYXRlIHNpbSBmb3IgY2Fwc1xuICAgIGNvbnN0IHNpbSA9IGF3YWl0IGNyZWF0ZVNpbSh0aGlzLm9wdHMsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsb2cuaW5mbyhgV2FpdGluZyBmb3IgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdG8gYmUgaW4gZm9yZWdyb3VuZGApO1xuICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQoQVBQX0xBVU5DSF9USU1FT1VUIC8gMjAwLCAxMCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCAyMDAsIGNoZWNrU3RhdHVzKTtcbiAgICBsb2cuaW5mbyhgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hlZCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXZGFTZXNzaW9uIChidW5kbGVJZCwgcHJvY2Vzc0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuYXJncyB8fCBbXSkgOiBbXTtcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmFyZ3MgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNvbnN0IGVudiA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5lbnYgfHwge30pIDoge307XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmVudiBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGEgZGljdGlvbmFyeS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGVudil9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubGFuZ3VhZ2UpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgICAgYXJncy5wdXNoKCctTlNMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxvY2FsZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTG9jYWxlJywgdGhpcy5vcHRzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2RhQ2FwcyA9IHtcbiAgICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBidW5kbGVJZCxcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBldmVudGxvb3BJZGxlRGVsYXlTZWM6IHRoaXMub3B0cy53ZGFFdmVudGxvb3BJZGxlRGVsYXkgPz8gMCxcbiAgICAgIHNob3VsZFdhaXRGb3JRdWllc2NlbmNlOiB0aGlzLm9wdHMud2FpdEZvclF1aWVzY2VuY2UgPz8gdHJ1ZSxcbiAgICAgIHNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbjogdGhpcy5vcHRzLnNpbXBsZUlzVmlzaWJsZUNoZWNrID8/IGZhbHNlLFxuICAgICAgbWF4VHlwaW5nRnJlcXVlbmN5OiB0aGlzLm9wdHMubWF4VHlwaW5nRnJlcXVlbmN5ID8/IDYwLFxuICAgICAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHRoaXMub3B0cy5zaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciA/PyB0cnVlLFxuICAgICAgd2FpdEZvcklkbGVUaW1lb3V0OiB0aGlzLm9wdHMud2FpdEZvcklkbGVUaW1lb3V0LFxuICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICBlbGVtZW50UmVzcG9uc2VGaWVsZHM6IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VGaWVsZHMsXG4gICAgICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHRoaXMub3B0cy5kaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMsXG4gICAgICBzaG91bGRUZXJtaW5hdGVBcHA6IHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPz8gdHJ1ZVxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgbG9nLmluZm8oJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBpbmNsdWRlIG5laXRoZXIgYW4gYXBwIG5vciBhIGJ1bmRsZUlkLiAnICtcbiAgICAgICAgJ1dlYkRyaXZlckFnZW50IHdpbGwgYmUgc3RhcnRlZCB3aXRob3V0IHRoZSBkZWZhdWx0IGFwcCcpO1xuICAgIH1cblxuICAgIGlmICghdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy53YXJuKGAncGxhdGZvcm1WZXJzaW9uJyBjYXBhYmlsaXR5ICgnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nKSBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGBDb25zaWRlciBmaXhpbmcgaXQgb3IgYmUgcmVhZHkgdG8gZXhwZXJpZW5jZSBhbiBpbmNvbnNpc3RlbnQgZHJpdmVyIGJlaGF2aW9yLmApO1xuICAgIH1cblxuICAgIGxldCB2ZXJpZnlQcm9jZXNzQXJndW1lbnQgPSAocHJvY2Vzc0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3Qge2FyZ3MsIGVudn0gPSBwcm9jZXNzQXJndW1lbnRzO1xuICAgICAgaWYgKCFfLmlzTmlsKGFyZ3MpICYmICFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5lbnYgbXVzdCBiZSBhbiBvYmplY3QgPGtleSx2YWx1ZT4gcGFpciB7YTpiLCBjOmR9Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGBwcm9jZXNzQXJndW1lbnRzYCBzaG91bGQgYmUgSlNPTiBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYXJndW1lbnRzIGFuZC8gZW52aXJvbm1lbnQgZGV0YWlsc1xuICAgIGlmIChjYXBzLnByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OXG4gICAgICAgICAgY2Fwcy5wcm9jZXNzQXJndW1lbnRzID0gSlNPTi5wYXJzZShjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgcHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGEgSlNPTiBmb3JtYXQgb3IgYW4gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgJ2tleWNoYWluUGF0aCcgaXMgc2V0LCAna2V5Y2hhaW5QYXNzd29yZCcgbXVzdCBhbHNvIGJlIHNldCAoYW5kIHZpY2UgdmVyc2EpLmApO1xuICAgIH1cblxuICAgIC8vIGByZXNldE9uU2Vzc2lvblN0YXJ0T25seWAgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPSAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkpIHx8IHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seTtcbiAgICB0aGlzLm9wdHMudXNlTmV3V0RBID0gdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMudXNlTmV3V0RBKSA/IHRoaXMub3B0cy51c2VOZXdXREEgOiBmYWxzZTtcblxuICAgIGlmIChjYXBzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgY2Fwcy5jb21tYW5kVGltZW91dHMgPSBub3JtYWxpemVDb21tYW5kVGltZW91dHMoY2Fwcy5jb21tYW5kVGltZW91dHMpO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3R9ID0gdXJsLnBhcnNlKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm90b2NvbCkgfHwgXy5pc0VtcHR5KGhvc3QpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnd2ViRHJpdmVyQWdlbnRVcmwnIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHZhbGlkIFdlYkRyaXZlckFnZW50IHNlcnZlciBVUkwuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudFVybH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgICAgaWYgKGNhcHMuYnVuZGxlSWQpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICBsb2cud2FybihgVGhlIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBlcm1pc3Npb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybXNdIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKGNhcHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhidW5kbGVJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkoYnVuZGxlSWQpfScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChwZXJtcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkocGVybXMpfScgbXVzdCBiZSBhIEpTT04gb2JqZWN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnJHtjYXBzLnBlcm1pc3Npb25zfScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBmb3JtYXQgYCArXG4gICAgICAgICAgYHtcIjxidW5kbGVJZDE+XCI6IHtcIjxzZXJ2aWNlTmFtZTE+XCI6IFwiPHNlcnZpY2VTdGF0dXMxPlwiLCAuLi59LCAuLi59LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGxhdGZvcm1WZXJzaW9uICYmICF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgb3RoZXJBcHBzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG90aGVyQXBwIG9mIG90aGVyQXBwcykge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIG90aGVyQXBwLCB1bmRlZmluZWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVkdWNlTW90aW9uIGFzICdpc0VuYWJsZWQnIG9ubHkgd2hlbiB0aGUgY2FwYWJpbGl0aWVzIGhhcyAncmVkdWNlTW90aW9uJ1xuICAgKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGZvciByZWFsIGRldmljZXMuXG4gICAqIEBwYXJhbSB7P2Jvb2xlYW59IGlzRW5hYmxlZCBXZXRoZXIgZW5hYmxlIHJlZHVjZU1vdGlvblxuICAgKi9cbiAgYXN5bmMgc2V0UmVkdWNlTW90aW9uIChpc0VuYWJsZWQpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhXy5pc0Jvb2xlYW4oaXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBTZXR0aW5nIHJlZHVjZU1vdGlvbiB0byAke2lzRW5hYmxlZH1gKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtyZWR1Y2VNb3Rpb246IGlzRW5hYmxlZH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0SW5pdGlhbE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICAgIGlmICghXy5pc1N0cmluZyhvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5pbmZvKCdTa2lwcGluZyBzZXR0aW5nIG9mIHRoZSBpbml0aWFsIGRpc3BsYXkgb3JpZW50YXRpb24uICcgK1xuICAgICAgICAnU2V0IHRoZSBcIm9yaWVudGF0aW9uXCIgY2FwYWJpbGl0eSB0byBlaXRoZXIgXCJMQU5EU0NBUEVcIiBvciBcIlBPUlRSQUlUXCIsIGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKCFfLmluY2x1ZGVzKFsnTEFORFNDQVBFJywgJ1BPUlRSQUlUJ10sIG9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gc2V0IGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvb3JpZW50YXRpb24nLCAnUE9TVCcsIHtvcmllbnRhdGlvbn0pO1xuICAgICAgdGhpcy5vcHRzLmN1ck9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIGZhaWxlZCB3aXRoOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRDb21tYW5kVGltZW91dCAoY21kTmFtZSkge1xuICAgIGlmICh0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBpZiAoY21kTmFtZSAmJiBfLmhhcyh0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzLCBjbWROYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tjbWROYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW0RFRkFVTFRfVElNRU9VVF9LRVldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2Vzc2lvbiBjYXBhYmlsaXRpZXMgbWVyZ2VkIHdpdGggd2hhdCBXREEgcmVwb3J0c1xuICAgKiBUaGlzIGlzIGEgbGlicmFyeSBjb21tYW5kIGJ1dCBuZWVkcyB0byBjYWxsICdzdXBlcicgc28gY2FuJ3QgYmUgb25cbiAgICogYSBoZWxwZXIgb2JqZWN0XG4gICAqL1xuICBhc3luYyBnZXRTZXNzaW9uICgpIHtcbiAgICAvLyBjYWxsIHN1cGVyIHRvIGdldCBldmVudCB0aW1pbmdzLCBldGMuLi5cbiAgICBjb25zdCBkcml2ZXJTZXNzaW9uID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIGlmICghdGhpcy53ZGFDYXBzKSB7XG4gICAgICB0aGlzLndkYUNhcHMgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnLycsICdHRVQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRHZXREZXZpY2VDYXBzID0gXy5pc0Jvb2xlYW4odGhpcy5vcHRzLmluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbylcbiAgICAgID8gdGhpcy5vcHRzLmluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mb1xuICAgICAgOiB0cnVlOyAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHNob3VsZEdldERldmljZUNhcHMgJiYgIXRoaXMuZGV2aWNlQ2Fwcykge1xuICAgICAgY29uc3Qge3N0YXR1c0JhclNpemUsIHNjYWxlfSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuSW5mbygpO1xuICAgICAgdGhpcy5kZXZpY2VDYXBzID0ge1xuICAgICAgICBwaXhlbFJhdGlvOiBzY2FsZSxcbiAgICAgICAgc3RhdEJhckhlaWdodDogc3RhdHVzQmFyU2l6ZS5oZWlnaHQsXG4gICAgICAgIHZpZXdwb3J0UmVjdDogYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFJlY3QoKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGxvZy5pbmZvKCdNZXJnaW5nIFdEQSBjYXBzIG92ZXIgQXBwaXVtIGNhcHMgZm9yIHNlc3Npb24gZGV0YWlsIHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe3VkaWQ6IHRoaXMub3B0cy51ZGlkfSwgZHJpdmVyU2Vzc2lvbixcbiAgICAgIHRoaXMud2RhQ2Fwcy5jYXBhYmlsaXRpZXMsIHRoaXMuZGV2aWNlQ2FwcyB8fCB7fSk7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSByZXNldCBoYXBwZW5zIGV2ZW4gaWYgbm9SZXNldCBpcyBzZXQgdG8gdHJ1ZVxuICAgICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgICAgb3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICBvcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2h1dGRvd25IYW5kbGVyID0gdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duO1xuICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KG9wdHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gc2h1dGRvd25IYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBzdXBlci5yZXNldCgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oWENVSVRlc3REcml2ZXIucHJvdG90eXBlLCBjb21tYW5kcyk7XG5cbmV4cG9ydCBkZWZhdWx0IFhDVUlUZXN0RHJpdmVyO1xuZXhwb3J0IHsgWENVSVRlc3REcml2ZXIgfTtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
1287
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJOT19QUk9YWV9OQVRJVkVfTElTVCIsIk5PX1BST1hZX1dFQl9MSVNUIiwiY29uY2F0IiwiTUVNT0laRURfRlVOQ1RJT05TIiwiWENVSVRlc3REcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0SW9zIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwibG9ncyIsImZuIiwiXyIsIm1lbW9pemUiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwid2ViRWxlbWVudElkcyIsIl9jdXJyZW50VXJsIiwiY3VyQ29udGV4dCIsInhjb2RlVmVyc2lvbiIsImNvbnRleHRzIiwiaW1wbGljaXRXYWl0TXMiLCJhc3luY2xpYldhaXRNcyIsInBhZ2VMb2FkTXMiLCJsYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQiLCJyZW1vdGUiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwibGlmZWN5Y2xlRGF0YSIsInNlc3Npb25JZCIsImNhcHMiLCJzdGFydCIsIk9iamVjdCIsImFzc2lnbiIsInVkaWQiLCJoYXMiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibG9nIiwiaW5mbyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsImUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVTZXNzaW9uIiwibm9SZXNldCIsImZ1bGxSZXNldCIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwibG9nRXZlbnQiLCJ0b0xvd2VyIiwiYXBwIiwidW5kZWZpbmVkIiwicHJvY2Vzc0FyZ3VtZW50cyIsImJ1bmRsZUlkIiwic2FmYXJpSW5pdGlhbFVybCIsImlzUmVhbERldmljZSIsImFkZHJlc3MiLCJwb3J0IiwiY29uZmlndXJlQXBwIiwicnVuUmVzZXQiLCJXZWJEcml2ZXJBZ2VudCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiY2F0Y2giLCJkZWJ1ZyIsIm1lbW9pemVkTG9nSW5mbyIsImxvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNpbSIsImN1c3RvbVNTTENlcnQiLCJjZXJ0SGVhZCIsInRydW5jYXRlIiwibGVuZ3RoIiwic2ltY3RsIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaWduIiwic3RhcnRTaW0iLCJsYXVuY2hXaXRoSURCIiwiaWRiIiwiSURCIiwiY29ubmVjdCIsIm1lc3NhZ2UiLCJpbnN0YWxsQVVUIiwiaXNBcHBJbnN0YWxsZWQiLCJlcnJvckFuZFRocm93IiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJ0b1BhaXJzIiwicGFyc2UiLCJzZXRQZXJtaXNzaW9ucyIsIndhcm4iLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJlbmFibGVDYWxlbmRhckFjY2VzcyIsImRpc2FibGVDYWxlbmRhckFjY2VzcyIsInN0YXJ0V2RhIiwic2V0UmVkdWNlTW90aW9uIiwic2V0SW5pdGlhbE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJvcGVuVXJsIiwiYXV0b1dlYnZpZXciLCJuYXZUb0luaXRpYWxXZWJ2aWV3Iiwic2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsIndkYUJhc2VVcmwiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwidXJsIiwiZGV2aWNlUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJuYW1lIiwidXNlWGN0ZXN0cnVuRmlsZSIsImlzU291cmNlRnJlc2giLCJkZXJpdmVkRGF0YVBhdGgiLCJwYXRoIiwibm9ybWFsaXplIiwiaXNCdXN5IiwiYm9vdHN0cmFwUGF0aCIsImFjcXVpcmUiLCJ1c2VOZXdXREEiLCJxdWl0QW5kVW5pbnN0YWxsIiwic2V0dXBDYWNoaW5nIiwibXNnIiwicmVzdWx0QnVuZGxlUGF0aCIsInN0YXJ0dXBSZXRyaWVzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJzdGFydHVwUmV0cnlJbnRlcnZhbCIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInJldHJpZXMiLCJtYWpvciIsImxhdW5jaCIsImVyciIsImVycm9yTXNnIiwib3JpZ2luYWxTdGFja3RyYWNlIiwic3RhcnRXZGFTZXNzaW9uIiwic3RhY2siLCJjbGVhclN5c3RlbUZpbGVzIiwiZnVsbHlTdGFydGVkIiwic2VydmVyIiwicmVjb3JkZXIiLCJjb21wYWN0IiwiX3JlY2VudFNjcmVlblJlY29yZGVyIiwiX2F1ZGlvUmVjb3JkZXIiLCJpbnRlcnJ1cHQiLCJjbGVhbnVwIiwiX3BlcmZSZWNvcmRlcnMiLCJCIiwiYWxsIiwibWFwIiwieCIsInN0b3AiLCJzdG9wUmVtb3RlIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd24iLCJjcmVhdGVTaW0iLCJkZWxldGUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJhdXRvQWNjZXB0QWxlcnRzIiwiZGVmYXVsdEFsZXJ0QWN0aW9uIiwiYXV0b0Rpc21pc3NBbGVydHMiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNXZWJ2aWV3IiwiY2FuUHJveHkiLCJpc1dlYkNvbnRleHQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5IiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FBR3hCQyxFQUFBQSxXQUFXLEVBQUUsRUFIVztBQUl4QkMsRUFBQUEsUUFBUSxFQUFFLEtBSmM7QUFLeEJDLEVBQUFBLGlCQUFpQixFQUFFLElBTEs7QUFNeEJDLEVBQUFBLGVBQWUsRUFBRSxLQU5PO0FBT3hCQyxFQUFBQSxlQUFlLEVBQUUsSUFQTztBQVF4QkMsRUFBQUEsd0JBQXdCLEVBQUU7QUFSRixDQUExQjtBQVVBLE1BQU1DLGdCQUFnQixHQUFHLHdCQUF6QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLENBQWhDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBckM7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyx5RkFBbEM7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RUFBTjtBQUNEOztBQWhvQ3FDOzs7QUFtb0N4Q3hSLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjbkQsY0FBYyxDQUFDOFUsU0FBN0IsRUFBd0NDLGNBQXhDO2VBRWUvVSxjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge1xuICBjcmVhdGVTaW0sIGdldEV4aXN0aW5nU2ltLCBydW5TaW11bGF0b3JSZXNldCwgaW5zdGFsbFRvU2ltdWxhdG9yLFxuICBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycywgc2h1dGRvd25TaW11bGF0b3IsIHNldExvY2FsZUFuZFByZWZlcmVuY2VzXG59IGZyb20gJy4vc2ltdWxhdG9yLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgZ2V0U2ltdWxhdG9yLCBpbnN0YWxsU1NMQ2VydCwgaGFzU1NMQ2VydCB9IGZyb20gJ2FwcGl1bS1pb3Mtc2ltdWxhdG9yJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSwgZXh0cmFjdEJ1bmRsZUlkIH0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0VWRpZCwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbixcbiAgY2hlY2tBcHBQcmVzZW50LCBnZXREcml2ZXJJbmZvLFxuICBjbGVhclN5c3RlbUZpbGVzLCB0cmFuc2xhdGVEZXZpY2VOYW1lLCBub3JtYWxpemVDb21tYW5kVGltZW91dHMsXG4gIERFRkFVTFRfVElNRU9VVF9LRVksIG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAsXG4gIHByaW50VXNlciwgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzLFxuICBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24sIGlzTG9jYWxIb3N0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgcnVuUmVhbERldmljZVJlc2V0LCBpbnN0YWxsVG9SZWFsRGV2aWNlLFxuICBnZXRSZWFsRGV2aWNlT2JqXG59IGZyb20gJy4vcmVhbC1kZXZpY2UtbWFuYWdlbWVudCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgSURCIGZyb20gJ2FwcGl1bS1pZGInO1xuaW1wb3J0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIGZyb20gJy4vZGV2aWNlLWNvbm5lY3Rpb25zLWZhY3RvcnknO1xuXG5cbmNvbnN0IFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSA9ICdzaHV0ZG93bl9vdGhlcl9zaW1zJztcbmNvbnN0IENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEggPSAnY3VzdG9taXplX3Jlc3VsdF9idW5kbGVfcGF0aCc7XG5cbmNvbnN0IGRlZmF1bHRTZXJ2ZXJDYXBzID0ge1xuICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICBicm93c2VyTmFtZTogJycsXG4gIHBsYXRmb3JtOiAnTUFDJyxcbiAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiBmYWxzZSxcbn07XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMgPSAyO1xuY29uc3QgV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA9IDE7XG5jb25zdCBXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXhjdWl0ZXN0LWRyaXZlci9ibG9iL21hc3Rlci9kb2NzL3JlYWwtZGV2aWNlLWNvbmZpZy5tZCc7XG5jb25zdCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9TRVRUSU5HUyA9IHtcbiAgbmF0aXZlV2ViVGFwOiBmYWxzZSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiBmYWxzZSxcbiAgdXNlSlNPTlNvdXJjZTogZmFsc2UsXG4gIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRydWUsXG4gIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6ICd0eXBlLGxhYmVsJyxcbiAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L2Jsb2IvbWFzdGVyL1dlYkRyaXZlckFnZW50TGliL1V0aWxpdGllcy9GQkNvbmZpZ3VyYXRpb24ubSBmb3IgZm9sbG93aW5nIHNldHRpbmdzJyB2YWx1ZXNcbiAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTogMjUsXG4gIG1qcGVnU2VydmVyRnJhbWVyYXRlOiAxMCxcbiAgc2NyZWVuc2hvdFF1YWxpdHk6IDEsXG4gIG1qcGVnU2NhbGluZ0ZhY3RvcjogMTAwLFxuICAvLyBzZXQgYHJlZHVjZU1vdGlvbmAgdG8gYG51bGxgIHNvIHRoYXQgaXQgd2lsbCBiZSB2ZXJpZmllZCBidXQgc3RpbGwgc2V0IGVpdGhlciB0cnVlL2ZhbHNlXG4gIHJlZHVjZU1vdGlvbjogbnVsbCxcbn07XG4vLyBUaGlzIGxvY2sgYXNzdXJlcywgdGhhdCBlYWNoIGRyaXZlciBzZXNzaW9uIGRvZXMgbm90XG4vLyBhZmZlY3Qgc2hhcmVkIHJlc291cmNlcyBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgc2Vzc2lvbnNcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCBOT19QUk9YWV9OQVRJVkVfTElTVCA9IFtcbiAgWydERUxFVEUnLCAvd2luZG93L10sXG4gIFsnR0VUJywgL15cXC9zZXNzaW9uXFwvW15cXC9dKyQvXSxcbiAgWydHRVQnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ0dFVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydHRVQnLCAvYXBwaXVtL10sXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9jb250ZXh0L10sXG4gIFsnR0VUJywgL2xvY2F0aW9uL10sXG4gIFsnR0VUJywgL2xvZy9dLFxuICBbJ0dFVCcsIC9zY3JlZW5zaG90L10sXG4gIFsnR0VUJywgL3NpemUvXSxcbiAgWydHRVQnLCAvc291cmNlL10sXG4gIFsnR0VUJywgL3RpbWVvdXRzJC9dLFxuICBbJ0dFVCcsIC91cmwvXSxcbiAgWydHRVQnLCAvd2luZG93L10sXG4gIFsnUE9TVCcsIC9hY2NlcHRfYWxlcnQvXSxcbiAgWydQT1NUJywgL2FjdGlvbnMkL10sXG4gIFsnUE9TVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnUE9TVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydQT1NUJywgL2FwcGl1bS9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvaXNfbG9ja2VkL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9sb2NrL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC91bmxvY2svXSxcbiAgWydQT1NUJywgL2JhY2svXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jb250ZXh0L10sXG4gIFsnUE9TVCcsIC9kaXNtaXNzX2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9lbGVtZW50XFwvYWN0aXZlL10sIC8vIE1KU09OV1AgZ2V0IGFjdGl2ZSBlbGVtZW50IHNob3VsZCBwcm94eVxuICBbJ1BPU1QnLCAvZWxlbWVudCQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRzJC9dLFxuICBbJ1BPU1QnLCAvZXhlY3V0ZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvbG9nL10sXG4gIFsnUE9TVCcsIC9tb3ZldG8vXSxcbiAgWydQT1NUJywgL3JlY2VpdmVfYXN5bmNfcmVzcG9uc2UvXSwgLy8gYWx3YXlzLCBpbiBjYXNlIGNvbnRleHQgc3dpdGNoZXMgd2hpbGUgd2FpdGluZ1xuICBbJ1BPU1QnLCAvc2Vzc2lvblxcL1teXFwvXStcXC9sb2NhdGlvbi9dLCAvLyBnZW8gbG9jYXRpb24sIGJ1dCBub3QgZWxlbWVudCBsb2NhdGlvblxuICBbJ1BPU1QnLCAvc2hha2UvXSxcbiAgWydQT1NUJywgL3RpbWVvdXRzL10sXG4gIFsnUE9TVCcsIC90b3VjaC9dLFxuICBbJ1BPU1QnLCAvdXJsL10sXG4gIFsnUE9TVCcsIC92YWx1ZS9dLFxuICBbJ1BPU1QnLCAvd2luZG93L10sXG4gIFsnREVMRVRFJywgL2Nvb2tpZS9dLFxuICBbJ0dFVCcsIC9jb29raWUvXSxcbiAgWydQT1NUJywgL2Nvb2tpZS9dLFxuXTtcbmNvbnN0IE5PX1BST1hZX1dFQl9MSVNUID0gW1xuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvZWxlbWVudC9dLFxuICBbJ0dFVCcsIC90ZXh0L10sXG4gIFsnR0VUJywgL3RpdGxlL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY2xpY2svXSxcbiAgWydQT1NUJywgL2VsZW1lbnQvXSxcbiAgWydQT1NUJywgL2ZvcndhcmQvXSxcbiAgWydQT1NUJywgL2ZyYW1lL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9yZWZyZXNoL10sXG5dLmNvbmNhdChOT19QUk9YWV9OQVRJVkVfTElTVCk7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbiAgJ2dldFNjcmVlbkluZm8nLFxuXTtcblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLndlYkVsZW1lbnRJZHMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRyaXZlckluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlckluZm8gPSBhd2FpdCBnZXREcml2ZXJJbmZvKCk7XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSB7YnVpbGQ6IHt2ZXJzaW9uOiB0aGlzLmRyaXZlckluZm8udmVyc2lvbn19O1xuICAgIGlmICh0aGlzLmNhY2hlZFdkYVN0YXR1cykge1xuICAgICAgc3RhdHVzLndkYSA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBhZGQgdmFsaWRhdGlvbiBvbiBjYXBzXG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5vcHRzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHRoZSBxdWFsaXR5IG9mIHBob25lIHNjcmVlbnNob3Q6ICcke3RoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eX0nYCk7XG4gICAgICAgIHdkYVNldHRpbmdzLnNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIFdEQSBnZXRzIG91ciBkZWZhdWx0cyBpbnN0ZWFkIG9mIHdoYXRldmVyIGl0cyBvd24gbWlnaHQgYmVcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Mod2RhU2V0dGluZ3MpO1xuXG4gICAgICAvLyB0dXJuIG9uIG1qcGVnIHN0cmVhbSByZWFkaW5nIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICB0aGlzLm9wdHMubm9SZXNldCA9ICEhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9ICEhdGhpcy5vcHRzLmZ1bGxSZXNldDtcblxuICAgIGF3YWl0IHByaW50VXNlcigpO1xuXG4gICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBudWxsOyAvLyBGb3IgV0RBIGFuZCB4Y29kZWJ1aWxkXG4gICAgY29uc3Qge2RldmljZSwgdWRpZCwgcmVhbERldmljZX0gPSBhd2FpdCB0aGlzLmRldGVybWluZURldmljZSgpO1xuICAgIGxvZy5pbmZvKGBEZXRlcm1pbmluZyBkZXZpY2UgdG8gcnVuIHRlc3RzIG9uOiB1ZGlkOiAnJHt1ZGlkfScsIHJlYWwgZGV2aWNlOiAke3JlYWxEZXZpY2V9YCk7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IGRldmljZTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLnJlYWxEZXZpY2UgPSByZWFsRGV2aWNlO1xuXG4gICAgaWYgKHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCkge1xuICAgICAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICAgICAgbG9nLmluZm8oYFRoZSAnc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgnIGNhcGFiaWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvciBkZXZpY2VzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyBzaW11bGF0b3IgZGV2aWNlcyBzZXQgcGF0aCB0byAnJHt0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGh9J2ApO1xuICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmRldmljZXNTZXRQYXRoID0gdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMgbm8gcGxhdGZvcm1WZXJzaW9uLCBnZXQgaXQgZnJvbSB0aGUgZGV2aWNlXG4gICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYE5vIHBsYXRmb3JtVmVyc2lvbiBzcGVjaWZpZWQuIFVzaW5nIGRldmljZSB2ZXJzaW9uOiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gbm9ybWFsaXplZFZlcnNpb24pIHtcbiAgICAgIGxvZy5pbmZvKGBOb3JtYWxpemVkIHBsYXRmb3JtVmVyc2lvbiBjYXBhYmlsaXR5IHZhbHVlICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyB0byAnJHtub3JtYWxpemVkVmVyc2lvbn0nYCk7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplZFZlcnNpb247XG4gICAgfVxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICc5LjMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgOS4zIG9yIGFib3ZlLiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMueGNvZGVWZXJzaW9uKSAmJiAoIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCB8fCAhdGhpcy5vcHRzLnJlYWxEZXZpY2UpKSB7XG4gICAgICAvLyBubyBgd2ViRHJpdmVyQWdlbnRVcmxgLCBvciBvbiBhIHNpbXVsYXRvciwgc28gd2UgbmVlZCBhbiBYY29kZSB2ZXJzaW9uXG4gICAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrWGNvZGVWZXJzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3hjb2RlRGV0YWlsc1JldHJpZXZlZCcpO1xuXG4gICAgaWYgKF8udG9Mb3dlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpID09PSAnc2FmYXJpJykge1xuICAgICAgbG9nLmluZm8oJ1NhZmFyaSB0ZXN0IHJlcXVlc3RlZCcpO1xuICAgICAgdGhpcy5zYWZhcmkgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzID0gdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgfHwge307XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBTQUZBUklfQlVORExFX0lEO1xuICAgICAgdGhpcy5fY3VycmVudFVybCA9IHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsIHx8IChcbiAgICAgICAgdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgICAgID8gJ2h0dHA6Ly9hcHBpdW0uaW8nXG4gICAgICAgICAgOiBgaHR0cDovLyR7dGhpcy5vcHRzLmFkZHJlc3N9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgXG4gICAgICApO1xuICAgICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjInKSkge1xuICAgICAgICAvLyB0aGlzIG9wdGlvbiBkb2VzIG5vdCB3b3JrIG9uIDEyLjIgYW5kIGFib3ZlXG4gICAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzLmFyZ3MgPSBbJy11JywgdGhpcy5fY3VycmVudFVybF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwIHx8IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVBcHAoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwQ29uZmlndXJlZCcpO1xuXG4gICAgLy8gZmFpbCB2ZXJ5IGVhcmx5IGlmIHRoZSBhcHAgZG9lc24ndCBhY3R1YWxseSBleGlzdFxuICAgIC8vIG9yIGlmIGJ1bmRsZSBpZCBkb2Vzbid0IHBvaW50IHRvIGFuIGluc3RhbGxlZCBhcHBcbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBQcmVzZW50KHRoaXMub3B0cy5hcHApO1xuXG4gICAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0QnVuZGxlSWQodGhpcy5vcHRzLmFwcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5ydW5SZXNldCgpO1xuXG4gICAgdGhpcy53ZGEgPSBuZXcgV2ViRHJpdmVyQWdlbnQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMub3B0cyk7XG4gICAgLy8gRGVyaXZlZCBkYXRhIHBhdGggcmV0cmlldmFsIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb25cbiAgICAvLyBXZSBjb3VsZCBzdGFydCB0aGF0IG5vdyBpbiBiYWNrZ3JvdW5kIGFuZCBnZXQgdGhlIGNhY2hlZCByZXN1bHRcbiAgICAvLyB3aGVuZXZlciBpdCBpcyBuZWVkZWRcbiAgICB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpLmNhdGNoKChlKSA9PiBsb2cuZGVidWcoZSkpO1xuXG4gICAgY29uc3QgbWVtb2l6ZWRMb2dJbmZvID0gXy5tZW1vaXplKGZ1bmN0aW9uIGxvZ0luZm8gKCkge1xuICAgICAgbG9nLmluZm8oXCInc2tpcExvZ0NhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9ncyBzdWNoIGFzIGNyYXNoLCBzeXN0ZW0sIHNhZmFyaSBjb25zb2xlIGFuZCBzYWZhcmkgbmV0d29yay5cIik7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRMb2dDYXB0dXJlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5za2lwTG9nQ2FwdHVyZSkge1xuICAgICAgICBtZW1vaXplZExvZ0luZm8oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdsb2dDYXB0dXJlU3RhcnRlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzTG9nQ2FwdHVyZVN0YXJ0ZWQgPSBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcblxuICAgIGxvZy5pbmZvKGBTZXR0aW5nIHVwICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnc2ltdWxhdG9yJ31gKTtcblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2h1dGRvd25PdGhlclNpbXVsYXRvcnMpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUpO1xuICAgICAgICBhd2FpdCBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyh0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIHNpbXVsYXRvciBpcyBzdGFydGVkXG4gICAgICAvLyBpZiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoaXMgY2FwIHdvbid0IHdvcmssIHdoaWNoIGlzIGRvY3VtZW50ZWRcbiAgICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzKHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFNhZmFyaSBnbG9iYWwgcHJlZmVyZW5jZXMgdXBkYXRlZGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSwgYXN5bmMgKHNpbSkgPT4ge1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcihzaW0pO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgbmVlZHMgdG8gYmUgY2hhbmdlcyBhIHByaW9yaSwgc28gY2hhbmdlIGZpcnN0LlxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIHNodXRkb3duIHByb2Nlc3MgY2hhbmdlcyB0aGUgc2V0dGluZ3MsIHNvIHJlc2V0IHRoZW0sXG4gICAgICAgIC8vIGtub3dpbmcgdGhhdCB0aGUgc2ltIGlzIGFscmVhZHkgc2h1dFxuICAgICAgICBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyhzaW0sIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpIHtcbiAgICAgICAgY29uc3QgY2VydEhlYWQgPSBfLnRydW5jYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7bGVuZ3RoOiAyMH0pO1xuICAgICAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyB0aGUgY3VzdG9tIFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwuYWRkUm9vdENlcnRpZmljYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7cmF3OiB0cnVlfSk7XG4gICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgIGlmIChhd2FpdCBoYXNTU0xDZXJ0KHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9JyBhbHJlYWR5IGluc3RhbGxlZGApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgTWFraW5nIHN1cmUgU2ltdWxhdG9yIGlzIHNodXQgZG93biwgJyArXG4gICAgICAgICAgICAgICdzbyB0aGF0IFNTTCBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb24gdGFrZXMgZWZmZWN0YCk7XG4gICAgICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgICAgIGF3YWl0IGluc3RhbGxTU0xDZXJ0KHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB0aGlzLm9wdHMudWRpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNpbSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmxhdW5jaFdpdGhJREIgJiYgdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaWRiID0gbmV3IElEQih7dWRpZH0pO1xuICAgICAgICAgIGF3YWl0IGlkYi5jb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5vcHRzLmRldmljZS5pZGIgPSBpZGI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgaWRiIHdpbGwgbm90IGJlIHVzZWQgZm9yIFNpbXVsYXRvciBpbnRlcmFjdGlvbi4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nRXZlbnQoJ3NpbVN0YXJ0ZWQnKTtcbiAgICAgIGlmICghaXNMb2dDYXB0dXJlU3RhcnRlZCkge1xuICAgICAgICAvLyBSZXRyeSBsb2cgY2FwdHVyZSBpZiBTaW11bGF0b3Igd2FzIG5vdCBydW5uaW5nIGJlZm9yZVxuICAgICAgICBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQVVUKCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdhcHBJbnN0YWxsZWQnKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBvbmx5IGhhdmUgYnVuZGxlIGlkZW50aWZpZXIgYW5kIG5vIGFwcCwgZmFpbCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5vcHRzLmJ1bmRsZUlkICYmICF0aGlzLnNhZmFyaSkge1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5idW5kbGVJZCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYEFwcCB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHVua25vd25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKCdTZXR0aW5nIHBlcm1pc3Npb25zIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFNpbXVsYXRvci4gJyArXG4gICAgICAgICAgJ1RoZSBcInBlcm1pc3Npb25zXCIgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5lbmFibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRpc2FibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RhcnRXZGEodGhpcy5vcHRzLnNlc3Npb25JZCwgcmVhbERldmljZSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFJlZHVjZU1vdGlvbih0aGlzLm9wdHMucmVkdWNlTW90aW9uKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgdGhpcy5sb2dFdmVudCgnb3JpZW50YXRpb25TZXQnKTtcblxuICAgIC8vIHJlYWwgZGV2aWNlcyB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIsIGFmdGVyIHRoZSB3ZWIgY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgIXRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbG9nLmRlYnVnKCdXYWl0aW5nIGZvciBpbml0aWFsIHdlYnZpZXcnKTtcbiAgICAgIGF3YWl0IHRoaXMubmF2VG9Jbml0aWFsV2VidmlldygpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnaW5pdGlhbFdlYnZpZXdOYXZpZ2F0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFdlYkRyaXZlckFnZW50UnVubmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSBUaGUgaWQgb2YgdGhlIHRhcmdldCBzZXNzaW9uIHRvIGxhdW5jaCBXREEgd2l0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIHRlc3QgdGFyZ2V0IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgc3RhcnRXZGEgKHNlc3Npb25JZCwgcmVhbERldmljZSkge1xuICAgIC8vIERvbid0IGNsZWFudXAgdGhlIHByb2Nlc3NlcyBpZiB3ZWJEcml2ZXJBZ2VudFVybCBpcyBzZXRcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBhd2FpdCB0aGlzLndkYS5jbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VQb3J0Rm9yd2FyZGluZyA9IHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmICF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybFxuICAgICAgJiYgaXNMb2NhbEhvc3QodGhpcy53ZGEud2RhQmFzZVVybCk7XG4gICAgYXdhaXQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVxdWVzdENvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQsIHRoaXMud2RhLnVybC5wb3J0LCB7XG4gICAgICBkZXZpY2VQb3J0OiB1c2VQb3J0Rm9yd2FyZGluZyA/IHRoaXMud2RhLndkYVJlbW90ZVBvcnQgOiBudWxsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgfSk7XG5cbiAgICAvLyBMZXQgbXVsdGlwbGUgV0RBIGJpbmFyaWVzIHdpdGggZGlmZmVyZW50IGRlcml2ZWQgZGF0YSBmb2xkZXJzIGJlIGJ1aWx0IGluIHBhcmFsbGVsXG4gICAgLy8gQ29uY3VycmVudCBXREEgYnVpbGRzIGZyb20gdGhlIHNhbWUgc291cmNlIHdpbGwgY2F1c2UgeGNvZGVidWlsZCBzeW5jaHJvbml6YXRpb24gZXJyb3JzXG4gICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgaWYgKHRoaXMub3B0cy51c2VYY3Rlc3RydW5GaWxlIHx8ICEoYXdhaXQgdGhpcy53ZGEuaXNTb3VyY2VGcmVzaCgpKSkge1xuICAgICAgLy8gRmlyc3QtdGltZSBjb21waWxhdGlvbiBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCB3aGljaCBpcyBkb25lIGZhc3RlciBpZiBleGVjdXRlZFxuICAgICAgLy8gc2VxdWVudGlhbGx5LiBYY29kZWJ1aWxkIHNwcmVhZHMgdGhlIGxvYWQgY2F1c2VkIGJ5IHRoZSBjbGFuZyBjb21waWxlciB0byBhbGwgYXZhaWxhYmxlIENQVSBjb3Jlc1xuICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyBXZWJEcml2ZXJBZ2VudCBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5ICcke3N5bmNocm9uaXphdGlvbktleX0nYCk7XG4gICAgaWYgKFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuaXNCdXN5KCkgJiYgIXRoaXMub3B0cy5kZXJpdmVkRGF0YVBhdGggJiYgIXRoaXMub3B0cy5ib290c3RyYXBQYXRoKSB7XG4gICAgICBsb2cuZGVidWcoYENvbnNpZGVyIHNldHRpbmcgYSB1bmlxdWUgJ2Rlcml2ZWREYXRhUGF0aCcgY2FwYWJpbGl0eSB2YWx1ZSBmb3IgZWFjaCBwYXJhbGxlbCBkcml2ZXIgaW5zdGFuY2UgYCArXG4gICAgICAgIGB0byBhdm9pZCBjb25mbGljdHMgYW5kIHNwZWVkIHVwIHRoZSBidWlsZGluZyBwcm9jZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBsb2cuZGVidWcoYENhcGFiaWxpdHkgJ3VzZU5ld1dEQScgc2V0IHRvIHRydWUsIHNvIHVuaW5zdGFsbGluZyBXREEgYmVmb3JlIHByb2NlZWRpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFVbmluc3RhbGxlZCcpO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEuc2V0dXBDYWNoaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvY2FsIGhlbHBlciBmb3IgdGhlIHR3byBwbGFjZXMgd2UgbmVlZCB0byB1bmluc3RhbGwgd2RhIGFuZCByZS1zdGFydCBpdFxuICAgICAgY29uc3QgcXVpdEFuZFVuaW5zdGFsbCA9IGFzeW5jIChtc2cpID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ05vdCBxdWl0dGluZy91bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQgc2luY2Ugd2ViRHJpdmVyQWdlbnRVcmwgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy53YXJuKCdRdWl0dGluZyBhbmQgdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZWQgaW4gdGhlIGZvbGxvd2luZyBXREEgYnVpbGRcbiAgICAgIGlmICh0aGlzLm9wdHMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydHVwUmV0cmllcyA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcyB8fCAodGhpcy5pc1JlYWxEZXZpY2UoKSA/IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgOiBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyk7XG4gICAgICBjb25zdCBzdGFydHVwUmV0cnlJbnRlcnZhbCA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCB8fCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTDtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50ICR7c3RhcnR1cFJldHJpZXN9IHRpbWVzIHdpdGggJHtzdGFydHVwUmV0cnlJbnRlcnZhbH1tcyBpbnRlcnZhbGApO1xuICAgICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcykgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsKSkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZXNlIHZhbHVlcyBjYW4gYmUgY3VzdG9taXplZCBieSBjaGFuZ2luZyB3ZGFTdGFydHVwUmV0cmllcy93ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCBjYXBhYmlsaXRpZXNgKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3RhcnR1cFJldHJpZXMsIHN0YXJ0dXBSZXRyeUludGVydmFsLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0QXR0ZW1wdGVkJyk7XG4gICAgICAgIGlmIChyZXRyeUNvdW50ID4gMCkge1xuICAgICAgICAgIGxvZy5pbmZvKGBSZXRyeWluZyBXREEgc3RhcnR1cCAoJHtyZXRyeUNvdW50ICsgMX0gb2YgJHtzdGFydHVwUmV0cmllc30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBvbiB4Y29kZSAxMCBpbnN0YWxsZCB3aWxsIG9mdGVuIHRyeSB0byBhY2Nlc3MgdGhlIGFwcCBmcm9tIGl0cyBzdGFnaW5nXG4gICAgICAgICAgLy8gZGlyZWN0b3J5IGJlZm9yZSBmdWxseSBtb3ZpbmcgaXQgdGhlcmUsIGFuZCBmYWlsLiBSZXRyeWluZyBvbmNlXG4gICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaGVscHNcbiAgICAgICAgICBjb25zdCByZXRyaWVzID0gdGhpcy54Y29kZVZlcnNpb24ubWFqb3IgPj0gMTAgPyAyIDogMTtcbiAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IGF3YWl0IHJldHJ5KHJldHJpZXMsIHRoaXMud2RhLmxhdW5jaC5iaW5kKHRoaXMud2RhKSwgc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRGYWlsZWQnKTtcbiAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBsYXVuY2ggV2ViRHJpdmVyQWdlbnQgYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYC4gTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMud2RhLnByb3h5UmVxUmVzLmJpbmQodGhpcy53ZGEpO1xuICAgICAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBsZXQgb3JpZ2luYWxTdGFja3RyYWNlID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZXRyeUludGVydmFsKDE1LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uQXR0ZW1wdGVkJyk7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1NlbmRpbmcgY3JlYXRlU2Vzc2lvbiBjb21tYW5kIHRvIFdEQScpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cyB8fCBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdkYVNlc3Npb24odGhpcy5vcHRzLmJ1bmRsZUlkLCB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxTdGFja3RyYWNlID0gZXJyLnN0YWNrO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYEZhaWxlZCB0byBjcmVhdGUgV0RBIHNlc3Npb24gKCR7ZXJyLm1lc3NhZ2V9KS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25TdGFydGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChvcmlnaW5hbFN0YWNrdHJhY2UpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhvcmlnaW5hbFN0YWNrdHJhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50IHNlc3Npb24gYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYCBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGF3YWl0IG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAodGhpcy53ZGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgZXhwZWN0IGNlcnRhaW4gc29ja2V0IGVycm9ycyB1bnRpbCB0aGlzIHBvaW50LCBidXQgbm93XG4gICAgICAgIC8vIG1hcmsgdGhpbmdzIGFzIGZ1bGx5IHdvcmtpbmdcbiAgICAgICAgdGhpcy53ZGEuZnVsbHlTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRlZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBydW5SZXNldCAob3B0cyA9IG51bGwpIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldFN0YXJ0ZWQnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgcnVuUmVhbERldmljZVJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgcnVuU2ltdWxhdG9yUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldENvbXBsZXRlJyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBhd2FpdCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgXy5jb21wYWN0KFt0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlcl0pKSB7XG4gICAgICBhd2FpdCByZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSk7XG4gICAgICBhd2FpdCByZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fcGVyZlJlY29yZGVycykpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHRoaXMuX3BlcmZSZWNvcmRlcnMubWFwKCh4KSA9PiB4LnN0b3AodHJ1ZSkpKTtcbiAgICAgIHRoaXMuX3BlcmZSZWNvcmRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcblxuICAgIGlmICh0aGlzLndkYSAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMpIHtcbiAgICAgICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGVhclN5c3RlbUZpbGVzKHRoaXMud2RhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ05vdCBjbGVhcmluZyBsb2cgZmlsZXMuIFVzZSBgY2xlYXJTeXN0ZW1GaWxlc2AgY2FwYWJpbGl0eSB0byB0dXJuIG9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgbG9nLmRlYnVnKCdGb3VuZCBhIHJlbW90ZSBkZWJ1Z2dlciBzZXNzaW9uLiBSZW1vdmluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wUmVtb3RlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XG4gICAgICAgIGVuZm9yY2VTaW11bGF0b3JTaHV0ZG93bjogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpICYmICF0aGlzLm9wdHMubm9SZXNldCAmJiAhIXRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgc2ltdWxhdG9yIGNyZWF0ZWQgZm9yIHRoaXMgcnVuICh1ZGlkOiAnJHt0aGlzLm9wdHMudWRpZH0nKWApO1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kZWxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmxvZ3MpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ3Muc3lzbG9nLnN0b3BDYXB0dXJlKCk7XG4gICAgICB0aGlzLmxvZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgbG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0SW9zKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG5cblxuICAgIGlmICh0aGlzLndkYSAmJiB0aGlzLndkYS5mdWxseVN0YXJ0ZWQpIHtcbiAgICAgIGlmICh0aGlzLndkYS5qd3Byb3h5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBhbiBlcnJvciBoZXJlIHNob3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgcmVzdCBvZiBjbGVhbiB1cFxuICAgICAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIERFTEVURSBzZXNzaW9uIG9uIFdEQTogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZyBzaHV0ZG93bi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCAmJiB0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZWxlYXNlQ29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgY29tbWFuZCAnJHtjbWR9J2ApO1xuXG4gICAgaWYgKGNtZCA9PT0gJ3JlY2VpdmVBc3luY1Jlc3BvbnNlJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjZWl2ZUFzeW5jUmVzcG9uc2UoLi4uYXJncyk7XG4gICAgfVxuICAgIC8vIFRPRE86IG9uY2UgdGhpcyBmaXggZ2V0cyBpbnRvIGJhc2UgZHJpdmVyIHJlbW92ZSBmcm9tIGhlcmVcbiAgICBpZiAoY21kID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlQXBwICgpIHtcbiAgICBmdW5jdGlvbiBhcHBJc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gICAgICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xuICAgIH1cblxuICAgIC8vIHRoZSBhcHAgbmFtZSBpcyBhIGJ1bmRsZUlkIGFzc2lnbiBpdCB0byB0aGUgYnVuZGxlSWQgcHJvcGVydHlcbiAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSAnJztcbiAgICB9XG4gICAgLy8gd2UgaGF2ZSBhIGJ1bmRsZSBJRCwgYnV0IG5vIGFwcCwgb3IgYXBwIGlzIGFsc28gYSBidW5kbGVcbiAgICBpZiAoKHRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYnVuZGxlSWQpKSAmJlxuICAgICAgICAodGhpcy5vcHRzLmFwcCA9PT0gJycgfHwgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICBsb2cuZGVidWcoJ0FwcCBpcyBhbiBpT1MgYnVuZGxlLCB3aWxsIGF0dGVtcHQgdG8gcnVuIGFzIHByZS1leGlzdGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBzdXBwb3J0ZWQgYnVpbGQtaW4gYXBwc1xuICAgIHN3aXRjaCAoXy50b0xvd2VyKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUuUHJlZmVyZW5jZXMnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnY2FsZW5kYXInOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLm1vYmlsZWNhbCc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGRvd25sb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgJy5hcHAnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXBwOiAke3RoaXMub3B0cy5hcHB9LiBgICtcbiAgICAgICAgYEFwcCBwYXRocyBuZWVkIHRvIGJlIGFic29sdXRlIG9yIGFuIFVSTCB0byBhIGNvbXByZXNzZWQgYXBwIGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYGlPUyBTREsgVmVyc2lvbiBzZXQgdG8gJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259J2ApO1xuICAgICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKSB7XG4gICAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gWGNvZGUgc3VwcG9ydHM6ICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcyBpZiBhIHNpbXVsYXRvciBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBwbGF0Zm9ybSB2ZXJzaW9uLmApO1xuICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy51ZGlkKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVkaWQudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBhd2FpdCBkZXRlY3RVZGlkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRyeWluZyB0byBmaW5kIG1hdGNoaW5nIFVESUQgZm9yIFNpbXVsYXRvclxuICAgICAgICAgIGxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGRldGVjdCB1ZGlkIGZvciAke3RoaXMub3B0cy5kZXZpY2VOYW1lfSBTaW11bGF0b3IgcnVubmluZyBpT1MgJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hdGNoaW5nIFNpbXVsYXRvciBleGlzdHMgYW5kIGlzIGZvdW5kLiBVc2UgaXRcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGNvbnN0IGRldmljZVBsYXRmb3JtID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKGF3YWl0IGRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKSk7XG4gICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IGRldmljZVBsYXRmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gZGV2aWNlUGxhdGZvcm07XG4gICAgICAgICAgICBsb2cuaW5mbyhgU2V0IHBsYXRmb3JtVmVyc2lvbiB0byAnJHtkZXZpY2VQbGF0Zm9ybX0nIHRvIG1hdGNoIHRoZSBkZXZpY2Ugd2l0aCBnaXZlbiBVRElEYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgY29ubmVjdGVkIGRldmljZS4gSWYgbm90LCB0aGUgdWRpZCBwYXNzZWQgaW4gaXMgaW52YWxpZFxuICAgICAgICBjb25zdCBkZXZpY2VzID0gYXdhaXQgZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgICBsb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgbG9nLmRlYnVnKGBObyByZWFsIGRldmljZSB3aXRoIHVkaWQgJyR7dGhpcy5vcHRzLnVkaWR9Jy4gTG9va2luZyBmb3Igc2ltdWxhdG9yYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFNpbXVsYXRvcih0aGlzLm9wdHMudWRpZCwge1xuICAgICAgICAgICAgICBkZXZpY2VzU2V0UGF0aDogdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkZXZpY2Ugb3Igc2ltdWxhdG9yIFVESUQ6ICcke3RoaXMub3B0cy51ZGlkfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0UmVhbERldmljZU9iaih0aGlzLm9wdHMudWRpZCk7XG4gICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogdHJ1ZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBrbm93IGZvciBzdXJlIHRoZSBkZXZpY2Ugd2lsbCBiZSBhIFNpbXVsYXRvclxuICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICBpZiAodGhpcy5vcHRzLmVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uKSB7XG4gICAgICBsb2cuZGVidWcoYE5ldyBzaW11bGF0b3IgaXMgcmVxdWVzdGVkLiBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHNldCAnZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24nIGNhcGFiaWxpdHkgdG8gZmFsc2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBzaW11bGF0b3IgdG8gdXNlLCBnaXZlbiB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG5cbiAgICAgIC8vIGNoZWNrIGZvciBhbiBleGlzdGluZyBzaW11bGF0b3JcbiAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICBsb2cuaW5mbygnVXNpbmcgZGVzaXJlZCBjYXBzIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3InKTtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVNpbSgpO1xuICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTaW0gKCkge1xuICAgIGNvbnN0IHJ1bk9wdHMgPSB7XG4gICAgICBzY2FsZUZhY3RvcjogdGhpcy5vcHRzLnNjYWxlRmFjdG9yLFxuICAgICAgY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ6ICEhdGhpcy5vcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkLFxuICAgICAgcGFzdGVib2FyZEF1dG9tYXRpY1N5bmM6IHRoaXMub3B0cy5zaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyA/PyAnb2ZmJyxcbiAgICAgIGlzSGVhZGxlc3M6ICEhdGhpcy5vcHRzLmlzSGVhZGxlc3MsXG4gICAgICB0cmFjZVBvaW50ZXI6IHRoaXMub3B0cy5zaW11bGF0b3JUcmFjZVBvaW50ZXIsXG4gICAgICBkZXZpY2VQcmVmZXJlbmNlczoge30sXG4gICAgfTtcblxuICAgIC8vIGFkZCB0aGUgd2luZG93IGNlbnRlciwgaWYgaXQgaXMgc3BlY2lmaWVkXG4gICAgaWYgKHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXIpIHtcbiAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Q2VudGVyID0gdGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0ludGVnZXIodGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0KSkge1xuICAgICAgcnVuT3B0cy5zdGFydHVwVGltZW91dCA9IHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIHRvIHdvcmthcm91bmQgWENUZXN0IGJ1ZyBhYm91dCBjaGFuZ2luZyBTaW11bGF0b3JcbiAgICAvLyBvcmllbnRhdGlvbiBpcyBub3Qgc3luY2hyb25pemVkIHRvIHRoZSBhY3R1YWwgd2luZG93IG9yaWVudGF0aW9uXG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBfLmlzU3RyaW5nKHRoaXMub3B0cy5vcmllbnRhdGlvbikgJiYgdGhpcy5vcHRzLm9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgICAgY2FzZSAnTEFORFNDQVBFJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdMYW5kc2NhcGVMZWZ0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gOTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUE9SVFJBSVQnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ1BvcnRyYWl0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5ydW4ocnVuT3B0cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaW0gKCkge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSB0cnVlO1xuXG4gICAgLy8gR2V0IHBsYXRmb3JtIG5hbWUgZnJvbSBjb25zdCBzaW5jZSBpdCBtdXN0IGJlIGNhc2Ugc2Vuc2l0aXZlIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3JcbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLmlzVHZPUygpID8gUExBVEZPUk1fTkFNRV9UVk9TIDogUExBVEZPUk1fTkFNRV9JT1M7XG5cbiAgICAvLyBjcmVhdGUgc2ltIGZvciBjYXBzXG4gICAgY29uc3Qgc2ltID0gYXdhaXQgY3JlYXRlU2ltKHRoaXMub3B0cywgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgQ3JlYXRlZCBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3NpbS51ZGlkfScuYCk7XG5cbiAgICByZXR1cm4gc2ltO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoQXBwICgpIHtcbiAgICBjb25zdCBBUFBfTEFVTkNIX1RJTUVPVVQgPSAyMCAqIDEwMDA7XG5cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hBdHRlbXB0ZWQnKTtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bC5sYXVuY2hBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcblxuICAgIGxldCBjaGVja1N0YXR1cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgbGV0IGN1cnJlbnRBcHAgPSByZXNwb25zZS5jdXJyZW50QXBwLmJ1bmRsZUlEO1xuICAgICAgaWYgKGN1cnJlbnRBcHAgIT09IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBub3QgaW4gZm9yZWdyb3VuZC4gJHtjdXJyZW50QXBwfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIGxvZy5pbmZvKGAke3RoaXMub3B0cy5idW5kbGVJZH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaGVkJyk7XG4gIH1cblxuICBhc3luYyBzdGFydFdkYVNlc3Npb24gKGJ1bmRsZUlkLCBwcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5hcmdzIHx8IFtdKSA6IFtdO1xuICAgIGlmICghXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuYXJncyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoYXJncyl9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgY29uc3QgZW52ID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmVudiB8fCB7fSkgOiB7fTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuZW52IGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBkaWN0aW9uYXJ5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoZW52KX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sYW5ndWFnZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgICBhcmdzLnB1c2goJy1OU0xhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubG9jYWxlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMb2NhbGUnLCB0aGlzLm9wdHMubG9jYWxlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHApKSB7XG4gICAgICAgIHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RhQ2FwcyA9IHtcbiAgICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBidW5kbGVJZCxcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBldmVudGxvb3BJZGxlRGVsYXlTZWM6IHRoaXMub3B0cy53ZGFFdmVudGxvb3BJZGxlRGVsYXkgPz8gMCxcbiAgICAgIHNob3VsZFdhaXRGb3JRdWllc2NlbmNlOiB0aGlzLm9wdHMud2FpdEZvclF1aWVzY2VuY2UgPz8gdHJ1ZSxcbiAgICAgIHNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbjogdGhpcy5vcHRzLnNpbXBsZUlzVmlzaWJsZUNoZWNrID8/IGZhbHNlLFxuICAgICAgbWF4VHlwaW5nRnJlcXVlbmN5OiB0aGlzLm9wdHMubWF4VHlwaW5nRnJlcXVlbmN5ID8/IDYwLFxuICAgICAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHRoaXMub3B0cy5zaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciA/PyB0cnVlLFxuICAgICAgd2FpdEZvcklkbGVUaW1lb3V0OiB0aGlzLm9wdHMud2FpdEZvcklkbGVUaW1lb3V0LFxuICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICBlbGVtZW50UmVzcG9uc2VGaWVsZHM6IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VGaWVsZHMsXG4gICAgICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHRoaXMub3B0cy5kaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMsXG4gICAgICBzaG91bGRUZXJtaW5hdGVBcHA6IHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlQXBwTGF1bmNoOiB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPz8gdHJ1ZSxcbiAgICAgIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneTogdGhpcy5vcHRzLnVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSA/PyB0cnVlLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgbG9nLmluZm8oJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBpbmNsdWRlIG5laXRoZXIgYW4gYXBwIG5vciBhIGJ1bmRsZUlkLiAnICtcbiAgICAgICAgJ1dlYkRyaXZlckFnZW50IHdpbGwgYmUgc3RhcnRlZCB3aXRob3V0IHRoZSBkZWZhdWx0IGFwcCcpO1xuICAgIH1cblxuICAgIGlmICghdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy53YXJuKGAncGxhdGZvcm1WZXJzaW9uJyBjYXBhYmlsaXR5ICgnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nKSBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGBDb25zaWRlciBmaXhpbmcgaXQgb3IgYmUgcmVhZHkgdG8gZXhwZXJpZW5jZSBhbiBpbmNvbnNpc3RlbnQgZHJpdmVyIGJlaGF2aW9yLmApO1xuICAgIH1cblxuICAgIGxldCB2ZXJpZnlQcm9jZXNzQXJndW1lbnQgPSAocHJvY2Vzc0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3Qge2FyZ3MsIGVudn0gPSBwcm9jZXNzQXJndW1lbnRzO1xuICAgICAgaWYgKCFfLmlzTmlsKGFyZ3MpICYmICFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5lbnYgbXVzdCBiZSBhbiBvYmplY3QgPGtleSx2YWx1ZT4gcGFpciB7YTpiLCBjOmR9Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGBwcm9jZXNzQXJndW1lbnRzYCBzaG91bGQgYmUgSlNPTiBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYXJndW1lbnRzIGFuZC8gZW52aXJvbm1lbnQgZGV0YWlsc1xuICAgIGlmIChjYXBzLnByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OXG4gICAgICAgICAgY2Fwcy5wcm9jZXNzQXJndW1lbnRzID0gSlNPTi5wYXJzZShjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgcHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGEgSlNPTiBmb3JtYXQgb3IgYW4gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgJ2tleWNoYWluUGF0aCcgaXMgc2V0LCAna2V5Y2hhaW5QYXNzd29yZCcgbXVzdCBhbHNvIGJlIHNldCAoYW5kIHZpY2UgdmVyc2EpLmApO1xuICAgIH1cblxuICAgIC8vIGByZXNldE9uU2Vzc2lvblN0YXJ0T25seWAgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPSAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkpIHx8IHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seTtcbiAgICB0aGlzLm9wdHMudXNlTmV3V0RBID0gdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMudXNlTmV3V0RBKSA/IHRoaXMub3B0cy51c2VOZXdXREEgOiBmYWxzZTtcblxuICAgIGlmIChjYXBzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgY2Fwcy5jb21tYW5kVGltZW91dHMgPSBub3JtYWxpemVDb21tYW5kVGltZW91dHMoY2Fwcy5jb21tYW5kVGltZW91dHMpO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3R9ID0gdXJsLnBhcnNlKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm90b2NvbCkgfHwgXy5pc0VtcHR5KGhvc3QpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnd2ViRHJpdmVyQWdlbnRVcmwnIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHZhbGlkIFdlYkRyaXZlckFnZW50IHNlcnZlciBVUkwuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudFVybH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgICAgaWYgKGNhcHMuYnVuZGxlSWQpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICBsb2cud2FybihgVGhlIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBlcm1pc3Npb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybXNdIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKGNhcHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhidW5kbGVJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkoYnVuZGxlSWQpfScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChwZXJtcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkocGVybXMpfScgbXVzdCBiZSBhIEpTT04gb2JqZWN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnJHtjYXBzLnBlcm1pc3Npb25zfScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBmb3JtYXQgYCArXG4gICAgICAgICAgYHtcIjxidW5kbGVJZDE+XCI6IHtcIjxzZXJ2aWNlTmFtZTE+XCI6IFwiPHNlcnZpY2VTdGF0dXMxPlwiLCAuLi59LCAuLi59LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGxhdGZvcm1WZXJzaW9uICYmICF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXBwc0xpc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGFwcHNMaXN0ID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgbG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyByZWR1Y2VNb3Rpb24gdG8gJHtpc0VuYWJsZWR9YCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7cmVkdWNlTW90aW9uOiBpc0VuYWJsZWR9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEluaXRpYWxPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL29yaWVudGF0aW9uJywgJ1BPU1QnLCB7b3JpZW50YXRpb259KTtcbiAgICAgIHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICBsb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/lib/commands/gesture.js
CHANGED
|
@@ -130,6 +130,10 @@ commands.performActions = async function performActions (actions) {
|
|
|
130
130
|
return await this.proxyCommand('/actions', 'POST', {actions: preprocessedActions});
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
+
commands.releaseActions = function releaseActions () {
|
|
134
|
+
log.warn('On this platform, releaseActions is a no-op');
|
|
135
|
+
};
|
|
136
|
+
|
|
133
137
|
commands.performTouch = async function performTouch (gestures) {
|
|
134
138
|
log.debug(`Received the following touch action: ${gesturesChainToString(gestures)}`);
|
|
135
139
|
try {
|
package/lib/desired-caps.js
CHANGED
package/lib/driver.js
CHANGED
|
@@ -956,6 +956,15 @@ class XCUITestDriver extends BaseDriver {
|
|
|
956
956
|
args.push('-AppleLocale', this.opts.locale);
|
|
957
957
|
}
|
|
958
958
|
|
|
959
|
+
if (this.opts.noReset) {
|
|
960
|
+
if (_.isNil(this.opts.shouldTerminateApp)) {
|
|
961
|
+
this.opts.shouldTerminateApp = false;
|
|
962
|
+
}
|
|
963
|
+
if (_.isNil(this.opts.forceAppLaunch)) {
|
|
964
|
+
this.opts.forceAppLaunch = false;
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
|
|
959
968
|
const wdaCaps = {
|
|
960
969
|
bundleId: this.opts.autoLaunch === false ? undefined : bundleId,
|
|
961
970
|
arguments: args,
|
|
@@ -969,7 +978,9 @@ class XCUITestDriver extends BaseDriver {
|
|
|
969
978
|
shouldUseCompactResponses: this.opts.shouldUseCompactResponses,
|
|
970
979
|
elementResponseFields: this.opts.elementResponseFields,
|
|
971
980
|
disableAutomaticScreenshots: this.opts.disableAutomaticScreenshots,
|
|
972
|
-
shouldTerminateApp: this.opts.shouldTerminateApp ?? true
|
|
981
|
+
shouldTerminateApp: this.opts.shouldTerminateApp ?? true,
|
|
982
|
+
forceAppLaunch: this.opts.forceAppLaunch ?? true,
|
|
983
|
+
useNativeCachingStrategy: this.opts.useNativeCachingStrategy ?? true,
|
|
973
984
|
};
|
|
974
985
|
if (this.opts.autoAcceptAlerts) {
|
|
975
986
|
wdaCaps.defaultAlertAction = 'accept';
|
|
@@ -1170,12 +1181,21 @@ class XCUITestDriver extends BaseDriver {
|
|
|
1170
1181
|
log.warn('Capability otherApps is only supported for Simulators');
|
|
1171
1182
|
return;
|
|
1172
1183
|
}
|
|
1184
|
+
let appsList;
|
|
1173
1185
|
try {
|
|
1174
|
-
|
|
1186
|
+
appsList = this.helpers.parseCapsArray(otherApps);
|
|
1175
1187
|
} catch (e) {
|
|
1176
1188
|
log.errorAndThrow(`Could not parse "otherApps" capability: ${e.message}`);
|
|
1177
1189
|
}
|
|
1178
|
-
|
|
1190
|
+
if (_.isEmpty(appsList)) {
|
|
1191
|
+
log.info(`Got zero apps from 'otherApps' capability value. Doing nothing`);
|
|
1192
|
+
return;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
const appPaths = await B.all(appsList.map(
|
|
1196
|
+
(app) => this.helpers.configureApp(app, '.app')
|
|
1197
|
+
));
|
|
1198
|
+
for (const otherApp of appPaths) {
|
|
1179
1199
|
await installToSimulator(this.opts.device, otherApp, undefined, {
|
|
1180
1200
|
noReset: this.opts.noReset,
|
|
1181
1201
|
newSimulator: this.lifecycleData.createSim,
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"xcuitest",
|
|
9
9
|
"xctest"
|
|
10
10
|
],
|
|
11
|
-
"version": "3.
|
|
11
|
+
"version": "3.50.0",
|
|
12
12
|
"author": "appium",
|
|
13
13
|
"license": "Apache-2.0",
|
|
14
14
|
"repository": {
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"appium-ios-simulator": "^3.28.0",
|
|
54
54
|
"appium-remote-debugger": "^8.13.2",
|
|
55
55
|
"appium-support": "^2.47.1",
|
|
56
|
-
"appium-webdriveragent": "^3.
|
|
56
|
+
"appium-webdriveragent": "^3.12.0",
|
|
57
57
|
"appium-xcode": "^3.8.0",
|
|
58
58
|
"async-lock": "^1.0.0",
|
|
59
59
|
"asyncbox": "^2.3.1",
|