appium-xcuitest-driver 3.58.0 → 3.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -108,7 +108,7 @@ Capability | Description
108
108
  `appium:automationName` | Must always be set to `xcuitest`. Values of `automationName` are compared case-insensitively.
109
109
  `appium:deviceName` | The name of the device under test. Consider setting `udid` for real devices and use this one for Simulator selection instead
110
110
  `appium:platformVersion` | The platform version of an emulator or a real device. This capability is used for device autodetection if `udid` is not provided
111
- `appium:udid` | UDID of the device to be tested. Could ve retrieved from Xcode->Window->Devices and Simulators window. Always set this capability if you run parallel tests or use a real device to run your tests.
111
+ `appium:udid` | UDID of the device to be tested. Could be retrieved from Xcode->Window->Devices and Simulators window. Always set this capability if you run parallel tests or use a real device to run your tests.
112
112
  `appium:noReset` | Prevents the device to be reset before the session startup if set to `true`. This means that the application under test is not going to be terminated neither its data cleaned. `false` by default
113
113
  `appium:fullReset` | Being set to `true` always enforces the application under test to be fully uninstalled before starting a new session. `false` by default
114
114
  `appium:printPageSourceOnFindFailure` | Enforces the server to dump the actual XML page source into the log if any error happens. `false` by default.
@@ -302,6 +302,7 @@ nativeWebTap | boolean | See the description of the corresponding capability.
302
302
  nativeWebTapStrict | boolean | See the description of the corresponding capability.
303
303
  nativeWebTapTabBarVisibility | enum | Bypass finding whether the existence of the _**tab bar**_ before tapping on the element. It could make native web tap faster. If it's `visible`, tab bar offset will be added without checking the existence of the tab bar. It's `invisible`, the tab bar offset will be `zero`. If you want to leave Appium to check and measure the tab bar offset, unset or set `detect`. Only applicable if `nativeWebTap` and `nativeWebTapStrict` are enabled. Unset by default.
304
304
  nativeWebTapSmartAppBannerVisibility | enum | The same as `nativeWebTapTabBarVisibility`, this keyword will bypass finding whether the existence of the _**smart app banner**_.
305
+ safariTabBarPosition | string | Handle offset of Safari tab bar in `nativeWebTap` enabled interactions. If `platformVersion` was greater than or equal to 15 and iPhone device, the value is `bottom` by default. Otherwise `top`. When the value is `top`, Appium considers offset as the bar length. iOS 15+ environment can customize the bar position in the settings app, so please adjust the offset with this. Acceptable values: `bottom`, `top`
305
306
  useJSONSource | boolean | See the description of the corresponding capability.
306
307
 
307
308
  ## Element Location
@@ -107,8 +107,8 @@ commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
107
107
  return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));
108
108
  };
109
109
 
110
- commands.installApp = async function installApp(appPath) {
111
- await this.mobileInstallApp({
110
+ commands.installApp = async function installApp(appPath, opts = {}) {
111
+ await this.mobileInstallApp({ ...(_lodash.default.isPlainObject(opts) ? opts : {}),
112
112
  app: appPath
113
113
  });
114
114
  };
@@ -160,4 +160,4 @@ var _default = commands;
160
160
  exports.default = _default;require('source-map-support').install();
161
161
 
162
162
 
163
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNB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R0FBd0IsZUFBZUEsWUFBZixDQUE2QnJCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDbUQsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdEIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNvRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JsRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzZDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGcEQsSUFGSjtBQUdBLFFBQU1xRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt2RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNa0MsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTNELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgpIHtcbiAgYXdhaXQgdGhpcy5tb2JpbGVJbnN0YWxsQXBwKHthcHA6IGFwcFBhdGh9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
163
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImlzUGxhaW5PYmplY3QiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1pbmF0ZUFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJtb2JpbGVMaXN0QXBwcyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJhcHBsaWNhdGlvblR5cGUiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsImxpc3RBcHBsaWNhdGlvbnMiLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7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RixRQUEvQixFQUF5QztBQUNqRSxTQUFPLE1BQU0sS0FBS0Qsb0JBQUwsQ0FBMEI7QUFBQ0MsSUFBQUE7QUFBRCxHQUExQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQ21ELFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2QnRCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDb0QsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdkIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNxRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JuRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzhDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGckQsSUFGSjtBQUdBLFFBQU1zRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt4RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNbUMsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -83,7 +83,7 @@ class ScreenRecorder {
83
83
  _logger.default.warn(`Cannot forward the local port ${remotePort} to ${remotePort} ` + `on the device ${this.udid}. Set the custom value to 'mjpegServerPort' ` + `capability if this is an undesired behavior.`);
84
84
  }
85
85
 
86
- const args = ['-f', 'mjpeg'];
86
+ const args = ['-f', 'mjpeg', '-reconnect', '1', '-reconnect_at_eof', '1', '-reconnect_streamed', '1', '-reconnect_delay_max', `${timeoutMs / 1000 + 1}`];
87
87
 
88
88
  if (videoFps && videoType === 'libx264') {
89
89
  args.push('-r', videoFps);
@@ -308,4 +308,4 @@ var _default = commands;
308
308
  exports.default = _default;require('source-map-support').install();
309
309
 
310
310
 
311
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9yZWNvcmRzY3JlZW4uanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJNQVhfUkVDT1JESU5HX1RJTUVfU0VDIiwiREVGQVVMVF9SRUNPUkRJTkdfVElNRV9TRUMiLCJERUZBVUxUX01KUEVHX1NFUlZFUl9QT1JUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX1FVQUxJVFkiLCJERUZBVUxUX1ZDT0RFQyIsIk1QNF9FWFQiLCJGRk1QRUdfQklOQVJZIiwiZmZtcGVnTG9nZ2VyIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiUVVBTElUWV9NQVBQSU5HIiwibG93IiwibWVkaXVtIiwiaGlnaCIsInBob3RvIiwiU2NyZWVuUmVjb3JkZXIiLCJjb25zdHJ1Y3RvciIsInVkaWQiLCJ2aWRlb1BhdGgiLCJvcHRzIiwibWFpblByb2Nlc3MiLCJ0aW1lb3V0SGFuZGxlciIsInN0YXJ0IiwidGltZW91dE1zIiwiZnMiLCJ3aGljaCIsImVyciIsIkVycm9yIiwicmVtb3RlUG9ydCIsInJlbW90ZVVybCIsInVzZVBvcnRGb3J3YXJkaW5nIiwidmlkZW9GcHMiLCJ2aWRlb1R5cGUiLCJ2aWRlb1NjYWxlIiwidmlkZW9GaWx0ZXJzIiwicGl4ZWxGb3JtYXQiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwiZGV2aWNlUG9ydCIsImxvZyIsIndhcm4iLCJhcmdzIiwicHVzaCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJ1cmwiLCJwYXJzZSIsIlN1YlByb2Nlc3MiLCJpc0NhcHR1cmVTdGFydGVkIiwib24iLCJzdGRvdXQiLCJzdGRlcnIiLCJ0cmltIiwic3RhcnRzV2l0aCIsImluZm8iLCJzdGFydHVwVGltZW91dCIsIndhaXRNcyIsImludGVydmFsTXMiLCJlIiwiaXNSdW5uaW5nIiwiam9pbiIsInNldFRpbWVvdXQiLCJpbnRlcnJ1cHQiLCJmb3JjZSIsInJlc3VsdCIsImNsZWFyVGltZW91dCIsImludGVycnVwdFByb21pc2UiLCJzdG9wIiwibWVzc2FnZSIsInJlbGVhc2VDb25uZWN0aW9uIiwiZmluaXNoIiwiY2xlYW51cCIsImV4aXN0cyIsInJpbXJhZiIsInN0YXJ0UmVjb3JkaW5nU2NyZWVuIiwib3B0aW9ucyIsInRpbWVMaW1pdCIsInZpZGVvUXVhbGl0eSIsImZvcmNlUmVzdGFydCIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsInN1ZmZpeCIsIndkYUJhc2VVcmwiLCJXREFfQkFTRV9VUkwiLCJzY3JlZW5SZWNvcmRlciIsImRldmljZSIsIm1qcGVnU2VydmVyUG9ydCIsImlzUmVhbERldmljZSIsImVycm9yQW5kVGhyb3ciLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJ0aW1lb3V0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJpc05hTiIsIm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkiLCJtanBlZ1NlcnZlckZyYW1lcmF0ZSIsInByb3h5Q29tbWFuZCIsInF1YWxpdHkiLCJfIiwiaXNJbnRlZ2VyIiwidG9Mb3dlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJrZXlzIiwidW5kZWZpbmVkIiwiZnBzIiwicGFyc2VJbnQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJzZXR0aW5ncyIsInJlbW90ZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7O0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxFQUFwQztBQUNBLE1BQU1DLDBCQUEwQixHQUFHLEtBQUssQ0FBeEM7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxJQUFsQztBQUNBLE1BQU1DLFdBQVcsR0FBRyxFQUFwQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxRQUF4QjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxPQUF2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R0FGRCxDQUVFLE9BQU90QyxDQUFQLEVBQVU7QUFDVixVQUFNZ0MsY0FBYyxDQUFDNUIsU0FBZixDQUF5QixJQUF6QixDQUFOO0FBQ0EsVUFBTTRCLGNBQWMsQ0FBQ25CLE9BQWYsRUFBTjtBQUNBLFVBQU1iLENBQU47QUFDRDs7QUFDRCxPQUFLcUMscUJBQUwsR0FBNkJMLGNBQTdCO0FBRUEsU0FBTzFCLE1BQVA7QUFDRCxDQTVGRDs7QUE2SEFsRSxRQUFRLENBQUNpRixtQkFBVCxHQUErQixlQUFlQSxtQkFBZixDQUFvQ0osT0FBTyxHQUFHLEVBQTlDLEVBQWtEO0FBQy9FLE1BQUksQ0FBQyxLQUFLb0IscUJBQVYsRUFBaUM7QUFDL0J4RCxvQkFBSWUsSUFBSixDQUFTLDREQUFUOztBQUNBLFdBQU8sRUFBUDtBQUNEOztBQUVELE1BQUk7QUFDRixVQUFNcEMsU0FBUyxHQUFHLE1BQU0sS0FBSzZFLHFCQUFMLENBQTJCekIsTUFBM0IsRUFBeEI7O0FBQ0EsUUFBSSxFQUFDLE1BQU05QyxrQkFBR2dELE1BQUgsQ0FBVXRELFNBQVYsQ0FBUCxDQUFKLEVBQWlDO0FBQy9CcUIsc0JBQUl1RCxhQUFKLENBQW1CLHlDQUFELEdBQ2YsNENBQTJDNUUsU0FBVSxHQUR4RDtBQUVEOztBQUNELFdBQU8sTUFBTSxpQ0FBcUJBLFNBQXJCLEVBQWdDeUQsT0FBTyxDQUFDd0MsVUFBeEMsRUFBb0R4QyxPQUFwRCxDQUFiO0FBQ0QsR0FQRCxTQU9VO0FBQ1IsVUFBTSxLQUFLb0IscUJBQUwsQ0FBMkJqQyxTQUEzQixDQUFxQyxJQUFyQyxDQUFOO0FBQ0EsVUFBTSxLQUFLaUMscUJBQUwsQ0FBMkJ4QixPQUEzQixFQUFOO0FBQ0EsU0FBS3dCLHFCQUFMLEdBQTZCLElBQTdCO0FBQ0Q7QUFDRixDQWxCRDs7ZUFzQmVqRyxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGVuY29kZUJhc2U2NE9yVXBsb2FkLCBpc0xvY2FsSG9zdCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuLi9kZXZpY2UtY29ubmVjdGlvbnMtZmFjdG9yeSc7XG5pbXBvcnQgeyBXREFfQkFTRV9VUkwgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcblxubGV0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IE1BWF9SRUNPUkRJTkdfVElNRV9TRUMgPSA2MCAqIDMwO1xuY29uc3QgREVGQVVMVF9SRUNPUkRJTkdfVElNRV9TRUMgPSA2MCAqIDM7XG5jb25zdCBERUZBVUxUX01KUEVHX1NFUlZFUl9QT1JUID0gOTEwMDtcbmNvbnN0IERFRkFVTFRfRlBTID0gMTA7XG5jb25zdCBERUZBVUxUX1FVQUxJVFkgPSAnbWVkaXVtJztcbmNvbnN0IERFRkFVTFRfVkNPREVDID0gJ21qcGVnJztcbmNvbnN0IE1QNF9FWFQgPSAnLm1wNCc7XG5jb25zdCBGRk1QRUdfQklOQVJZID0gJ2ZmbXBlZyc7XG5jb25zdCBmZm1wZWdMb2dnZXIgPSBsb2dnZXIuZ2V0TG9nZ2VyKEZGTVBFR19CSU5BUlkpO1xuY29uc3QgUVVBTElUWV9NQVBQSU5HID0ge1xuICBsb3c6IDEwLFxuICBtZWRpdW06IDI1LFxuICBoaWdoOiA3NSxcbiAgcGhvdG86IDEwMCxcbn07XG5cblxuY2xhc3MgU2NyZWVuUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgdmlkZW9QYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLnZpZGVvUGF0aCA9IHZpZGVvUGF0aDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5tYWluUHJvY2VzcyA9IG51bGw7XG4gICAgdGhpcy50aW1lb3V0SGFuZGxlciA9IG51bGw7XG4gIH1cblxuICBhc3luYyBzdGFydCAodGltZW91dE1zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndoaWNoKEZGTVBFR19CSU5BUlkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtGRk1QRUdfQklOQVJZfScgYmluYXJ5IGlzIG5vdCBmb3VuZCBpbiBQQVRILiBJbnN0YWxsIGl0IHVzaW5nICdicmV3IGluc3RhbGwgZmZtcGVnJy4gYCArXG4gICAgICAgIGBDaGVjayBodHRwczovL3d3dy5mZm1wZWcub3JnL2Rvd25sb2FkLmh0bWwgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICByZW1vdGVQb3J0LFxuICAgICAgcmVtb3RlVXJsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgICB2aWRlb0ZwcyxcbiAgICAgIHZpZGVvVHlwZSxcbiAgICAgIHZpZGVvU2NhbGUsXG4gICAgICB2aWRlb0ZpbHRlcnMsXG4gICAgICBwaXhlbEZvcm1hdCxcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMudWRpZCwgcmVtb3RlUG9ydCwge1xuICAgICAgICBkZXZpY2VQb3J0OiByZW1vdGVQb3J0LFxuICAgICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBmb3J3YXJkIHRoZSBsb2NhbCBwb3J0ICR7cmVtb3RlUG9ydH0gdG8gJHtyZW1vdGVQb3J0fSBgICtcbiAgICAgICAgYG9uIHRoZSBkZXZpY2UgJHt0aGlzLnVkaWR9LiBTZXQgdGhlIGN1c3RvbSB2YWx1ZSB0byAnbWpwZWdTZXJ2ZXJQb3J0JyBgICtcbiAgICAgICAgYGNhcGFiaWxpdHkgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICctZicsICdtanBlZycsXG4gICAgXTtcbiAgICAvL1BhcmFtZXRlciBgLXJgIGlzIG9wdGlvbmFsLiBTZWUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzEyMDY3XG4gICAgaWYgKHZpZGVvRnBzICYmIHZpZGVvVHlwZSA9PT0gJ2xpYngyNjQnKSB7XG4gICAgICBhcmdzLnB1c2goJy1yJywgdmlkZW9GcHMpO1xuICAgIH1cbiAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3RuYW1lfSA9IHVybC5wYXJzZShyZW1vdGVVcmwpO1xuICAgIGFyZ3MucHVzaCgnLWknLCBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9OiR7cmVtb3RlUG9ydH1gKTtcbiAgICBpZiAodmlkZW9GaWx0ZXJzIHx8IHZpZGVvU2NhbGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXZmJywgdmlkZW9GaWx0ZXJzIHx8IGBzY2FsZT0ke3ZpZGVvU2NhbGV9YCk7XG4gICAgfVxuICAgIC8vIFF1aWNrdGltZSBjb21wYXRpYmlsaXR5IHZpYSBwaXhlbEZvcm1hdDogJ3l1djQyMHAnXG4gICAgaWYgKHBpeGVsRm9ybWF0KSB7XG4gICAgICBhcmdzLnB1c2goJy1waXhfZm10JywgcGl4ZWxGb3JtYXQpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goXG4gICAgICAnLXZjb2RlYycsIHZpZGVvVHlwZSxcbiAgICAgICcteScsIHRoaXMudmlkZW9QYXRoXG4gICAgKTtcblxuICAgIHRoaXMubWFpblByb2Nlc3MgPSBuZXcgU3ViUHJvY2VzcyhGRk1QRUdfQklOQVJZLCBhcmdzKTtcbiAgICBsZXQgaXNDYXB0dXJlU3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMubWFpblByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICBpZiAoc3RkZXJyLnRyaW0oKS5zdGFydHNXaXRoKCdmcmFtZT0nKSkge1xuICAgICAgICAgIGlmICghaXNDYXB0dXJlU3RhcnRlZCkge1xuICAgICAgICAgICAgaXNDYXB0dXJlU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZmbXBlZ0xvZ2dlci5pbmZvKGAke3N0ZGVycn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMubWFpblByb2Nlc3Muc3RhcnQoMCk7XG4gICAgY29uc3Qgc3RhcnR1cFRpbWVvdXQgPSA1MDAwO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IGlzQ2FwdHVyZVN0YXJ0ZWQsIHtcbiAgICAgICAgd2FpdE1zOiBzdGFydHVwVGltZW91dCxcbiAgICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYFNjcmVlbiBjYXB0dXJlIHByb2Nlc3MgZGlkIG5vdCBzdGFydCB3aXRoaW4gJHtzdGFydHVwVGltZW91dH1tcy4gQ29udGludWluZyBhbnl3YXlgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1haW5Qcm9jZXNzLmlzUnVubmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2NyZWVuIGNhcHR1cmUgcHJvY2VzcyAnJHtGRk1QRUdfQklOQVJZfScgZGllZCB1bmV4cGVjdGVkbHkuIGAgK1xuICAgICAgICBgQ2hlY2sgc2VydmVyIGxvZ3MgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICBsb2cuaW5mbyhgU3RhcnRpbmcgc2NyZWVuIGNhcHR1cmUgb24gdGhlIGRldmljZSAnJHt0aGlzLnVkaWR9JyB3aXRoIGNvbW1hbmQ6ICcke0ZGTVBFR19CSU5BUll9ICR7YXJncy5qb2luKCcgJyl9Jy4gYCArXG4gICAgICBgV2lsbCB0aW1lb3V0IGluICR7dGltZW91dE1zfW1zYCk7XG5cbiAgICB0aGlzLnRpbWVvdXRIYW5kbGVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMuaW50ZXJydXB0KCkpIHtcbiAgICAgICAgbG9nLndhcm4oYENhbm5vdCBmaW5pc2ggdGhlIGFjdGl2ZSBzY3JlZW4gcmVjb3JkaW5nIG9uIHRoZSBkZXZpY2UgJyR7dGhpcy51ZGlkfScgYWZ0ZXIgJHt0aW1lb3V0TXN9bXMgdGltZW91dGApO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXRNcyk7XG4gIH1cblxuICBhc3luYyBpbnRlcnJ1cHQgKGZvcmNlID0gZmFsc2UpIHtcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnRpbWVvdXRIYW5kbGVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SGFuZGxlcik7XG4gICAgICB0aGlzLnRpbWVvdXRIYW5kbGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYWluUHJvY2VzcyAmJiB0aGlzLm1haW5Qcm9jZXNzLmlzUnVubmluZykge1xuICAgICAgY29uc3QgaW50ZXJydXB0UHJvbWlzZSA9IHRoaXMubWFpblByb2Nlc3Muc3RvcChmb3JjZSA/ICdTSUdURVJNJyA6ICdTSUdJTlQnKTtcbiAgICAgIHRoaXMubWFpblByb2Nlc3MgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgaW50ZXJydXB0UHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oYENhbm5vdCAke2ZvcmNlID8gJ3Rlcm1pbmF0ZScgOiAnaW50ZXJydXB0J30gJHtGRk1QRUdfQklOQVJZfS4gYCArXG4gICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVsZWFzZUNvbm5lY3Rpb24odGhpcy51ZGlkLCB0aGlzLm9wdHMucmVtb3RlUG9ydCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgZmluaXNoICgpIHtcbiAgICBhd2FpdCB0aGlzLmludGVycnVwdCgpO1xuICAgIHJldHVybiB0aGlzLnZpZGVvUGF0aDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXAgKCkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy52aWRlb1BhdGgpKSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodGhpcy52aWRlb1BhdGgpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb2ludCByZXNwb25zZSB2YWx1ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiB0aGVyZSBpcyBzY3JlZW4gcmVjb3JkaW5nIHByb2Nlc3MgaW4gcHJvZ3Jlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgZm9yY2VSZXN0YXJ0YCBwYXJhbWV0ZXIgaXMgbm90IHNldCB0byBgdHJ1ZWAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVzZXIgLSBUaGUgbmFtZSBvZiB0aGUgdXNlciBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi4gT25seSB3b3JrcyBpZiBgcmVtb3RlUGF0aGAgaXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhc3MgLSBUaGUgcGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSB3b3JrcyBpZiBgcmVtb3RlUGF0aGAgaXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZpZGVvVHlwZSAtIFRoZSB2aWRlbyBjb2RlYyB0eXBlIHVzZWQgZm9yIGVuY29kaW5nIG9mIHRoZSBiZSByZWNvcmRlZCBzY3JlZW4gY2FwdHVyZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSBgZmZtcGVnIC1jb2RlY3NgIGluIHRoZSB0ZXJtaW5hbCB0byBzZWUgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHZpZGVvIGNvZGVjcy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21qcGVnJyBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gdmlkZW9RdWFsaXR5IC0gVGhlIHZpZGVvIGVuY29kaW5nIHF1YWxpdHkgKGxvdywgbWVkaXVtLCBoaWdoLCBwaG90byAtIGRlZmF1bHRzIHRvIG1lZGl1bSkuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8bnVtYmVyfSB2aWRlb0ZwcyAtIFRoZSBGcmFtZXMgUGVyIFNlY29uZCByYXRlIG9mIHRoZSByZWNvcmRlZCB2aWRlby4gQ2hhbmdlIHRoaXMgdmFsdWUgaWYgdGhlIHJlc3VsdGluZyB2aWRlb1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvbyBzbG93IG9yIHRvbyBmYXN0LiBEZWZhdWx0cyB0byAxMC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmlkZW9GaWx0ZXJzIC0gVGhlIEZGTVBFRyB2aWRlbyBmaWx0ZXJzIHRvIGFwcGx5LiBUaGVzZSBmaWx0ZXJzIGFsbG93IHRvIHNjYWxlLCBmbGlwLCByb3RhdGUgYW5kIGRvIG1hbnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdXNlZnVsIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgc291cmNlIHZpZGVvIHN0cmVhbS4gVGhlIGZvcm1hdCBvZiB0aGUgcHJvcGVydHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBjb21wbHkgd2l0aCBodHRwczovL2ZmbXBlZy5vcmcvZmZtcGVnLWZpbHRlcnMuaHRtbFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2aWRlb1NjYWxlIC0gVGhlIHNjYWxpbmcgdmFsdWUgdG8gYXBwbHkuIFJlYWQgaHR0cHM6Ly90cmFjLmZmbXBlZy5vcmcvd2lraS9TY2FsaW5nIGZvciBwb3NzaWJsZSB2YWx1ZXMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBzY2FsZSBpcyBhcHBsaWVkIGJ5IGRlZmF1bHQuIElmIGJvdGggYHZpZGVvRmlsdGVyc2AgYW5kIGB2aWRlb1NjYWxlYCBhcmUgc2V0IHRoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgYHZpZGVvRmlsdGVyc2AgdmFsdWUgd2lsbCBiZSByZXNwZWN0ZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBpeGVsRm9ybWF0IC0gT3V0cHV0IHBpeGVsIGZvcm1hdC4gUnVuIGBmZm1wZWcgLXBpeF9mbXRzYCB0byBsaXN0IHBvc3NpYmxlIHZhbHVlcy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgUXVpY2t0aW1lIGNvbXBhdGliaWxpdHksIHNldCB0byBcInl1djQyMHBcIiBhbG9uZyB3aXRoIHZpZGVvVHlwZTogXCJsaWJ4MjY0XCIuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBmb3JjZVJlc3RhcnQgLSBXaGV0aGVyIHRvIHRyeSB0byBjYXRjaCBhbmQgdXBsb2FkL3JldHVybiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc2NyZWVuIHJlY29yZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGBmYWxzZWAsIHRoZSBkZWZhdWx0IHNldHRpbmcpIG9yIGlnbm9yZSB0aGUgcmVzdWx0IG9mIGl0IGFuZCBzdGFydCBhIG5ldyByZWNvcmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5LlxuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gdGltZUxpbWl0IC0gVGhlIG1heGltdW0gcmVjb3JkaW5nIHRpbWUsIGluIHNlY29uZHMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxODAsIHRoZSBtYXhpbXVtIHZhbHVlIGlzIDYwMCAoMTAgbWludXRlcykuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmQgdGhlIGRpc3BsYXkgb2YgZGV2aWNlcyBydW5uaW5nIGlPUyBTaW11bGF0b3Igc2luY2UgWGNvZGUgOSBvciByZWFsIGRldmljZXMgc2luY2UgaU9TIDExXG4gKiAoZmZtcGVnIHV0aWxpdHkgaXMgcmVxdWlyZWQ6ICdicmV3IGluc3RhbGwgZmZtcGVnJykuXG4gKiBJdCByZWNvcmRzIHNjcmVlbiBhY3Rpdml0eSB0byBhIE1QRUctNCBmaWxlLiBBdWRpbyBpcyBub3QgcmVjb3JkZWQgd2l0aCB0aGUgdmlkZW8gZmlsZS5cbiAqIElmIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gYWxyZWFkeSBzdGFydGVkIHRoZW4gdGhlIGNvbW1hbmQgd2lsbCBzdG9wIGl0IGZvcmNlZnVsbHkgYW5kIHN0YXJ0IGEgbmV3IG9uZS5cbiAqIFRoZSBwcmV2aW91c2x5IHJlY29yZGVkIHZpZGVvIGZpbGUgd2lsbCBiZSBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSB7P1N0YXJ0UmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHJlY29yZGVkIG1lZGlhIGZpbGUgaWZcbiAqICAgICAgICAgICAgICAgICAgIGFueSBzY3JlZW4gcmVjb3JkaW5nIGlzIGN1cnJlbnRseSBydW5uaW5nIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzY3JlZW4gcmVjb3JkaW5nIGhhcyBmYWlsZWQgdG8gc3RhcnQuXG4gKi9cbmNvbW1hbmRzLnN0YXJ0UmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdmlkZW9UeXBlID0gREVGQVVMVF9WQ09ERUMsXG4gICAgdGltZUxpbWl0ID0gREVGQVVMVF9SRUNPUkRJTkdfVElNRV9TRUMsXG4gICAgdmlkZW9RdWFsaXR5ID0gREVGQVVMVF9RVUFMSVRZLFxuICAgIHZpZGVvRnBzID0gREVGQVVMVF9GUFMsXG4gICAgdmlkZW9GaWx0ZXJzLFxuICAgIHZpZGVvU2NhbGUsXG4gICAgZm9yY2VSZXN0YXJ0LFxuICAgIHBpeGVsRm9ybWF0XG4gIH0gPSBvcHRpb25zO1xuXG4gIGxldCByZXN1bHQgPSAnJztcbiAgaWYgKCFmb3JjZVJlc3RhcnQpIHtcbiAgICBsb2cuaW5mbyhgQ2hlY2tpbmcgaWYgdGhlcmUgaXMvd2FzIGEgcHJldmlvdXMgc2NyZWVuIHJlY29yZGluZy4gYCArXG4gICAgICBgU2V0ICdmb3JjZVJlc3RhcnQnIG9wdGlvbiB0byAndHJ1ZScgaWYgeW91J2QgbGlrZSB0byBza2lwIHRoaXMgc3RlcC5gKTtcbiAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4ob3B0aW9ucyk7XG4gIH1cblxuICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgIHByZWZpeDogYGFwcGl1bV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCA4KX1gLFxuICAgIHN1ZmZpeDogTVA0X0VYVCxcbiAgfSk7XG5cbiAgY29uc3Qgd2RhQmFzZVVybCA9IHRoaXMub3B0cy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTDtcbiAgY29uc3Qgc2NyZWVuUmVjb3JkZXIgPSBuZXcgU2NyZWVuUmVjb3JkZXIodGhpcy5vcHRzLmRldmljZS51ZGlkLCB2aWRlb1BhdGgsIHtcbiAgICByZW1vdGVQb3J0OiB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0IHx8IERFRkFVTFRfTUpQRUdfU0VSVkVSX1BPUlQsXG4gICAgcmVtb3RlVXJsOiB3ZGFCYXNlVXJsLFxuICAgIHVzZVBvcnRGb3J3YXJkaW5nOiB0aGlzLmlzUmVhbERldmljZSgpICYmIGlzTG9jYWxIb3N0KHdkYUJhc2VVcmwpLFxuICAgIHZpZGVvVHlwZSxcbiAgICB2aWRlb0ZpbHRlcnMsXG4gICAgdmlkZW9TY2FsZSxcbiAgICB2aWRlb0ZwcyxcbiAgICBwaXhlbEZvcm1hdFxuICB9KTtcbiAgaWYgKCFhd2FpdCBzY3JlZW5SZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnVW5hYmxlIHRvIHN0b3Agc2NyZWVuIHJlY29yZGluZyBwcm9jZXNzJyk7XG4gIH1cbiAgaWYgKHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gcGFyc2VGbG9hdCh0aW1lTGltaXQpO1xuICBpZiAoaXNOYU4odGltZW91dFNlY29uZHMpIHx8IHRpbWVvdXRTZWNvbmRzID4gTUFYX1JFQ09SRElOR19USU1FX1NFQyB8fCB0aW1lb3V0U2Vjb25kcyA8PSAwKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSB0aW1lTGltaXQgdmFsdWUgbXVzdCBiZSBpbiByYW5nZSBbMSwgJHtNQVhfUkVDT1JESU5HX1RJTUVfU0VDfV0gc2Vjb25kcy4gYCArXG4gICAgICBgVGhlIHZhbHVlIG9mICcke3RpbWVMaW1pdH0nIGhhcyBiZWVuIHBhc3NlZCBpbnN0ZWFkLmApO1xuICB9XG5cbiAgbGV0IHtcbiAgICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5LFxuICAgIG1qcGVnU2VydmVyRnJhbWVyYXRlLFxuICB9ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnR0VUJyk7XG4gIGlmICh2aWRlb1F1YWxpdHkpIHtcbiAgICBjb25zdCBxdWFsaXR5ID0gXy5pc0ludGVnZXIodmlkZW9RdWFsaXR5KSA/IHZpZGVvUXVhbGl0eSA6IFFVQUxJVFlfTUFQUElOR1tfLnRvTG93ZXIodmlkZW9RdWFsaXR5KV07XG4gICAgaWYgKCFxdWFsaXR5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHZpZGVvUXVhbGl0eSB2YWx1ZSBzaG91bGQgYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKFFVQUxJVFlfTUFQUElORykpfSBvciBhIG51bWJlciBpbiByYW5nZSAxLi4xMDAuIGAgK1xuICAgICAgICBgJyR7dmlkZW9RdWFsaXR5fScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSAhPT0gcXVhbGl0eSA/IHF1YWxpdHkgOiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodmlkZW9GcHMpIHtcbiAgICBjb25zdCBmcHMgPSBwYXJzZUludCh2aWRlb0ZwcywgMTApO1xuICAgIGlmIChpc05hTihmcHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHZpZGVvRnBzIHZhbHVlIHNob3VsZCBiZSBhIHZhbGlkIG51bWJlciBpbiByYW5nZSAxLi42MC4gYCArXG4gICAgICAgIGAnJHt2aWRlb0Zwc30nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGUgPSBtanBlZ1NlcnZlckZyYW1lcmF0ZSAhPT0gZnBzID8gZnBzIDogdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIG1qcGVnU2VydmVyRnJhbWVyYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh1dGlsLmhhc1ZhbHVlKG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkpIHx8IHV0aWwuaGFzVmFsdWUobWpwZWdTZXJ2ZXJGcmFtZXJhdGUpKSB7XG4gICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHksXG4gICAgICAgIG1qcGVnU2VydmVyRnJhbWVyYXRlLFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzY3JlZW5SZWNvcmRlci5zdGFydCh0aW1lb3V0U2Vjb25kcyAqIDEwMDApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgc2NyZWVuUmVjb3JkZXIuaW50ZXJydXB0KHRydWUpO1xuICAgIGF3YWl0IHNjcmVlblJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB0aHJvdyBlO1xuICB9XG4gIHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyID0gc2NyZWVuUmVjb3JkZXI7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RvcFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHJlbW90ZVBhdGggLSBUaGUgcGF0aCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uLCB3aGVyZSB0aGUgcmVzdWx0aW5nIHZpZGVvIHNob3VsZCBiZSB1cGxvYWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IGh0dHAvaHR0cHMsIGZ0cC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlICh0aGUgZGVmYXVsdCBzZXR0aW5nKSBtZWFucyB0aGUgY29udGVudCBvZiByZXN1bHRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2hvdWxkIGJlIGVuY29kZWQgYXMgQmFzZTY0IGFuZCBwYXNzZWQgYXMgdGhlIGVuZHBvaW50IHJlc3BvbnNlIHZhbHVlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBnZW5lcmF0ZWQgbWVkaWEgZmlsZSBpcyB0b28gYmlnIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXQgaW50byB0aGUgYXZhaWxhYmxlIHByb2Nlc3MgbWVtb3J5LlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1c2VyIC0gVGhlIG5hbWUgb2YgdGhlIHVzZXIgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLiBPbmx5IHdvcmtzIGlmIGByZW1vdGVQYXRoYCBpcyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWV0aG9kIC0gVGhlIGh0dHAgbXVsdGlwYXJ0IHVwbG9hZCBtZXRob2QgbmFtZS4gVGhlICdQVVQnIG9uZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBoZWFkZXJzIC0gQWRkaXRpb25hbCBoZWFkZXJzIG1hcHBpbmcgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmlsZUZpZWxkTmFtZSBbZmlsZV0gLSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBmaWVsZCwgd2hlcmUgdGhlIGZpbGUgY29udGVudCBCTE9CIHNob3VsZCBiZSBzdG9yZWQgZm9yXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9PYmplY3R8QXJyYXk8UGFpcj59IGZvcm1GaWVsZHMgLSBBZGRpdGlvbmFsIGZvcm0gZmllbGRzIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKi9cblxuLyoqXG4gKiBTdG9wIHJlY29yZGluZyB0aGUgc2NyZWVuLiBJZiBubyBzY3JlZW4gcmVjb3JkaW5nIHByb2Nlc3MgaXMgcnVubmluZyB0aGVuXG4gKiB0aGUgZW5kcG9pbnQgd2lsbCB0cnkgdG8gZ2V0IHRoZSByZWNlbnRseSByZWNvcmRlZCBmaWxlLlxuICogSWYgbm8gcHJldmlvdXNseSByZWNvcmRlZCBmaWxlIGlzIGZvdW5kIGFuZCBubyBhY3RpdmUgc2NyZWVuIHJlY29yZGluZ1xuICogcHJvY2Vzc2VzIGFyZSBydW5uaW5nIHRoZW4gdGhlIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gez9TdG9wUmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHJlY29yZGVkIG1lZGlhIGZpbGUgaWYgJ3JlbW90ZVBhdGgnXG4gKiAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgaXMgZW1wdHkgb3IgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hbWUgb2YgYSBtZWRpYSBmaWxlXG4gKiAgICAgICAgICAgICAgICAgb3IgdGhlIGZpbGUgY29udGVudCBjYW5ub3QgYmUgdXBsb2FkZWQgdG8gdGhlIHJlbW90ZSBsb2NhdGlvbi5cbiAqL1xuY29tbWFuZHMuc3RvcFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIXRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyKSB7XG4gICAgbG9nLmluZm8oJ1NjcmVlbiByZWNvcmRpbmcgaXMgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3RvcC4nKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvUGF0aCA9IGF3YWl0IHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLmZpbmlzaCgpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHZpZGVvUGF0aCkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgc2NyZWVuIHJlY29yZGVyIHV0aWxpdHkgaGFzIGZhaWxlZCBgICtcbiAgICAgICAgYHRvIHN0b3JlIHRoZSBhY3R1YWwgc2NyZWVuIHJlY29yZGluZyBhdCAnJHt2aWRlb1BhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZW5jb2RlQmFzZTY0T3JVcGxvYWQodmlkZW9QYXRoLCBvcHRpb25zLnJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICBhd2FpdCB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIgPSBudWxsO1xuICB9XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL3JlY29yZHNjcmVlbi5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
311
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9yZWNvcmRzY3JlZW4uanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJNQVhfUkVDT1JESU5HX1RJTUVfU0VDIiwiREVGQVVMVF9SRUNPUkRJTkdfVElNRV9TRUMiLCJERUZBVUxUX01KUEVHX1NFUlZFUl9QT1JUIiwiREVGQVVMVF9GUFMiLCJERUZBVUxUX1FVQUxJVFkiLCJERUZBVUxUX1ZDT0RFQyIsIk1QNF9FWFQiLCJGRk1QRUdfQklOQVJZIiwiZmZtcGVnTG9nZ2VyIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiUVVBTElUWV9NQVBQSU5HIiwibG93IiwibWVkaXVtIiwiaGlnaCIsInBob3RvIiwiU2NyZWVuUmVjb3JkZXIiLCJjb25zdHJ1Y3RvciIsInVkaWQiLCJ2aWRlb1BhdGgiLCJvcHRzIiwibWFpblByb2Nlc3MiLCJ0aW1lb3V0SGFuZGxlciIsInN0YXJ0IiwidGltZW91dE1zIiwiZnMiLCJ3aGljaCIsImVyciIsIkVycm9yIiwicmVtb3RlUG9ydCIsInJlbW90ZVVybCIsInVzZVBvcnRGb3J3YXJkaW5nIiwidmlkZW9GcHMiLCJ2aWRlb1R5cGUiLCJ2aWRlb1NjYWxlIiwidmlkZW9GaWx0ZXJzIiwicGl4ZWxGb3JtYXQiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwiZGV2aWNlUG9ydCIsImxvZyIsIndhcm4iLCJhcmdzIiwicHVzaCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJ1cmwiLCJwYXJzZSIsIlN1YlByb2Nlc3MiLCJpc0NhcHR1cmVTdGFydGVkIiwib24iLCJzdGRvdXQiLCJzdGRlcnIiLCJ0cmltIiwic3RhcnRzV2l0aCIsImluZm8iLCJzdGFydHVwVGltZW91dCIsIndhaXRNcyIsImludGVydmFsTXMiLCJlIiwiaXNSdW5uaW5nIiwiam9pbiIsInNldFRpbWVvdXQiLCJpbnRlcnJ1cHQiLCJmb3JjZSIsInJlc3VsdCIsImNsZWFyVGltZW91dCIsImludGVycnVwdFByb21pc2UiLCJzdG9wIiwibWVzc2FnZSIsInJlbGVhc2VDb25uZWN0aW9uIiwiZmluaXNoIiwiY2xlYW51cCIsImV4aXN0cyIsInJpbXJhZiIsInN0YXJ0UmVjb3JkaW5nU2NyZWVuIiwib3B0aW9ucyIsInRpbWVMaW1pdCIsInZpZGVvUXVhbGl0eSIsImZvcmNlUmVzdGFydCIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsInN1ZmZpeCIsIndkYUJhc2VVcmwiLCJXREFfQkFTRV9VUkwiLCJzY3JlZW5SZWNvcmRlciIsImRldmljZSIsIm1qcGVnU2VydmVyUG9ydCIsImlzUmVhbERldmljZSIsImVycm9yQW5kVGhyb3ciLCJfcmVjZW50U2NyZWVuUmVjb3JkZXIiLCJ0aW1lb3V0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJpc05hTiIsIm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkiLCJtanBlZ1NlcnZlckZyYW1lcmF0ZSIsInByb3h5Q29tbWFuZCIsInF1YWxpdHkiLCJfIiwiaXNJbnRlZ2VyIiwidG9Mb3dlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJrZXlzIiwidW5kZWZpbmVkIiwiZnBzIiwicGFyc2VJbnQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJzZXR0aW5ncyIsInJlbW90ZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7O0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxFQUFwQztBQUNBLE1BQU1DLDBCQUEwQixHQUFHLEtBQUssQ0FBeEM7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxJQUFsQztBQUNBLE1BQU1DLFdBQVcsR0FBRyxFQUFwQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxRQUF4QjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxPQUF2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QmVqRyxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGVuY29kZUJhc2U2NE9yVXBsb2FkLCBpc0xvY2FsSG9zdCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuLi9kZXZpY2UtY29ubmVjdGlvbnMtZmFjdG9yeSc7XG5pbXBvcnQgeyBXREFfQkFTRV9VUkwgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcblxubGV0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IE1BWF9SRUNPUkRJTkdfVElNRV9TRUMgPSA2MCAqIDMwO1xuY29uc3QgREVGQVVMVF9SRUNPUkRJTkdfVElNRV9TRUMgPSA2MCAqIDM7XG5jb25zdCBERUZBVUxUX01KUEVHX1NFUlZFUl9QT1JUID0gOTEwMDtcbmNvbnN0IERFRkFVTFRfRlBTID0gMTA7XG5jb25zdCBERUZBVUxUX1FVQUxJVFkgPSAnbWVkaXVtJztcbmNvbnN0IERFRkFVTFRfVkNPREVDID0gJ21qcGVnJztcbmNvbnN0IE1QNF9FWFQgPSAnLm1wNCc7XG5jb25zdCBGRk1QRUdfQklOQVJZID0gJ2ZmbXBlZyc7XG5jb25zdCBmZm1wZWdMb2dnZXIgPSBsb2dnZXIuZ2V0TG9nZ2VyKEZGTVBFR19CSU5BUlkpO1xuY29uc3QgUVVBTElUWV9NQVBQSU5HID0ge1xuICBsb3c6IDEwLFxuICBtZWRpdW06IDI1LFxuICBoaWdoOiA3NSxcbiAgcGhvdG86IDEwMCxcbn07XG5cblxuY2xhc3MgU2NyZWVuUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgdmlkZW9QYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLnZpZGVvUGF0aCA9IHZpZGVvUGF0aDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5tYWluUHJvY2VzcyA9IG51bGw7XG4gICAgdGhpcy50aW1lb3V0SGFuZGxlciA9IG51bGw7XG4gIH1cblxuICBhc3luYyBzdGFydCAodGltZW91dE1zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndoaWNoKEZGTVBFR19CSU5BUlkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtGRk1QRUdfQklOQVJZfScgYmluYXJ5IGlzIG5vdCBmb3VuZCBpbiBQQVRILiBJbnN0YWxsIGl0IHVzaW5nICdicmV3IGluc3RhbGwgZmZtcGVnJy4gYCArXG4gICAgICAgIGBDaGVjayBodHRwczovL3d3dy5mZm1wZWcub3JnL2Rvd25sb2FkLmh0bWwgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICByZW1vdGVQb3J0LFxuICAgICAgcmVtb3RlVXJsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgICB2aWRlb0ZwcyxcbiAgICAgIHZpZGVvVHlwZSxcbiAgICAgIHZpZGVvU2NhbGUsXG4gICAgICB2aWRlb0ZpbHRlcnMsXG4gICAgICBwaXhlbEZvcm1hdCxcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlcXVlc3RDb25uZWN0aW9uKHRoaXMudWRpZCwgcmVtb3RlUG9ydCwge1xuICAgICAgICBkZXZpY2VQb3J0OiByZW1vdGVQb3J0LFxuICAgICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBmb3J3YXJkIHRoZSBsb2NhbCBwb3J0ICR7cmVtb3RlUG9ydH0gdG8gJHtyZW1vdGVQb3J0fSBgICtcbiAgICAgICAgYG9uIHRoZSBkZXZpY2UgJHt0aGlzLnVkaWR9LiBTZXQgdGhlIGN1c3RvbSB2YWx1ZSB0byAnbWpwZWdTZXJ2ZXJQb3J0JyBgICtcbiAgICAgICAgYGNhcGFiaWxpdHkgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICctZicsICdtanBlZycsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTYyOTRcbiAgICAgICctcmVjb25uZWN0JywgJzEnLFxuICAgICAgJy1yZWNvbm5lY3RfYXRfZW9mJywgJzEnLFxuICAgICAgJy1yZWNvbm5lY3Rfc3RyZWFtZWQnLCAnMScsXG4gICAgICAnLXJlY29ubmVjdF9kZWxheV9tYXgnLCBgJHt0aW1lb3V0TXMgLyAxMDAwICsgMX1gLFxuICAgIF07XG4gICAgLy9QYXJhbWV0ZXIgYC1yYCBpcyBvcHRpb25hbC4gU2VlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xMjA2N1xuICAgIGlmICh2aWRlb0ZwcyAmJiB2aWRlb1R5cGUgPT09ICdsaWJ4MjY0Jykge1xuICAgICAgYXJncy5wdXNoKCctcicsIHZpZGVvRnBzKTtcbiAgICB9XG4gICAgY29uc3Qge3Byb3RvY29sLCBob3N0bmFtZX0gPSB1cmwucGFyc2UocmVtb3RlVXJsKTtcbiAgICBhcmdzLnB1c2goJy1pJywgYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3JlbW90ZVBvcnR9YCk7XG4gICAgaWYgKHZpZGVvRmlsdGVycyB8fCB2aWRlb1NjYWxlKSB7XG4gICAgICBhcmdzLnB1c2goJy12ZicsIHZpZGVvRmlsdGVycyB8fCBgc2NhbGU9JHt2aWRlb1NjYWxlfWApO1xuICAgIH1cbiAgICAvLyBRdWlja3RpbWUgY29tcGF0aWJpbGl0eSB2aWEgcGl4ZWxGb3JtYXQ6ICd5dXY0MjBwJ1xuICAgIGlmIChwaXhlbEZvcm1hdCkge1xuICAgICAgYXJncy5wdXNoKCctcGl4X2ZtdCcsIHBpeGVsRm9ybWF0KTtcbiAgICB9XG4gICAgYXJncy5wdXNoKFxuICAgICAgJy12Y29kZWMnLCB2aWRlb1R5cGUsXG4gICAgICAnLXknLCB0aGlzLnZpZGVvUGF0aFxuICAgICk7XG5cbiAgICB0aGlzLm1haW5Qcm9jZXNzID0gbmV3IFN1YlByb2Nlc3MoRkZNUEVHX0JJTkFSWSwgYXJncyk7XG4gICAgbGV0IGlzQ2FwdHVyZVN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm1haW5Qcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgaWYgKHN0ZGVyci50cmltKCkuc3RhcnRzV2l0aCgnZnJhbWU9JykpIHtcbiAgICAgICAgICBpZiAoIWlzQ2FwdHVyZVN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGlzQ2FwdHVyZVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmZm1wZWdMb2dnZXIuaW5mbyhgJHtzdGRlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLm1haW5Qcm9jZXNzLnN0YXJ0KDApO1xuICAgIGNvbnN0IHN0YXJ0dXBUaW1lb3V0ID0gNTAwMDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiBpc0NhcHR1cmVTdGFydGVkLCB7XG4gICAgICAgIHdhaXRNczogc3RhcnR1cFRpbWVvdXQsXG4gICAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBTY3JlZW4gY2FwdHVyZSBwcm9jZXNzIGRpZCBub3Qgc3RhcnQgd2l0aGluICR7c3RhcnR1cFRpbWVvdXR9bXMuIENvbnRpbnVpbmcgYW55d2F5YCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5tYWluUHJvY2Vzcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNjcmVlbiBjYXB0dXJlIHByb2Nlc3MgJyR7RkZNUEVHX0JJTkFSWX0nIGRpZWQgdW5leHBlY3RlZGx5LiBgICtcbiAgICAgICAgYENoZWNrIHNlcnZlciBsb2dzIGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICB9XG4gICAgbG9nLmluZm8oYFN0YXJ0aW5nIHNjcmVlbiBjYXB0dXJlIG9uIHRoZSBkZXZpY2UgJyR7dGhpcy51ZGlkfScgd2l0aCBjb21tYW5kOiAnJHtGRk1QRUdfQklOQVJZfSAke2FyZ3Muam9pbignICcpfScuIGAgK1xuICAgICAgYFdpbGwgdGltZW91dCBpbiAke3RpbWVvdXRNc31tc2ApO1xuXG4gICAgdGhpcy50aW1lb3V0SGFuZGxlciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLmludGVycnVwdCgpKSB7XG4gICAgICAgIGxvZy53YXJuKGBDYW5ub3QgZmluaXNoIHRoZSBhY3RpdmUgc2NyZWVuIHJlY29yZGluZyBvbiB0aGUgZGV2aWNlICcke3RoaXMudWRpZH0nIGFmdGVyICR7dGltZW91dE1zfW1zIHRpbWVvdXRgKTtcbiAgICAgIH1cbiAgICB9LCB0aW1lb3V0TXMpO1xuICB9XG5cbiAgYXN5bmMgaW50ZXJydXB0IChmb3JjZSA9IGZhbHNlKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy50aW1lb3V0SGFuZGxlcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dEhhbmRsZXIpO1xuICAgICAgdGhpcy50aW1lb3V0SGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFpblByb2Nlc3MgJiYgdGhpcy5tYWluUHJvY2Vzcy5pc1J1bm5pbmcpIHtcbiAgICAgIGNvbnN0IGludGVycnVwdFByb21pc2UgPSB0aGlzLm1haW5Qcm9jZXNzLnN0b3AoZm9yY2UgPyAnU0lHVEVSTScgOiAnU0lHSU5UJyk7XG4gICAgICB0aGlzLm1haW5Qcm9jZXNzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGludGVycnVwdFByb21pc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBDYW5ub3QgJHtmb3JjZSA/ICd0ZXJtaW5hdGUnIDogJ2ludGVycnVwdCd9ICR7RkZNUEVHX0JJTkFSWX0uIGAgK1xuICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlbGVhc2VDb25uZWN0aW9uKHRoaXMudWRpZCwgdGhpcy5vcHRzLnJlbW90ZVBvcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaCAoKSB7XG4gICAgYXdhaXQgdGhpcy5pbnRlcnJ1cHQoKTtcbiAgICByZXR1cm4gdGhpcy52aWRlb1BhdGg7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwICgpIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMudmlkZW9QYXRoKSkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRoaXMudmlkZW9QYXRoKTtcbiAgICB9XG4gIH1cbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0UmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcmVtb3RlUGF0aCAtIFRoZSBwYXRoIHRvIHRoZSByZW1vdGUgbG9jYXRpb24sIHdoZXJlIHRoZSByZXN1bHRpbmcgdmlkZW8gc2hvdWxkIGJlIHVwbG9hZGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogaHR0cC9odHRwcywgZnRwLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbCBvciBlbXB0eSBzdHJpbmcgdmFsdWUgKHRoZSBkZWZhdWx0IHNldHRpbmcpIG1lYW5zIHRoZSBjb250ZW50IG9mIHJlc3VsdGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBzaG91bGQgYmUgZW5jb2RlZCBhcyBCYXNlNjQgYW5kIHBhc3NlZCBhcyB0aGUgZW5kcG9pbnQgcmVzcG9uc2UgdmFsdWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gaWYgdGhlIGdlbmVyYXRlZCBtZWRpYSBmaWxlIGlzIHRvbyBiaWcgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdCBpbnRvIHRoZSBhdmFpbGFibGUgcHJvY2VzcyBtZW1vcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhlcmUgaXMgc2NyZWVuIHJlY29yZGluZyBwcm9jZXNzIGluIHByb2dyZXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYGZvcmNlUmVzdGFydGAgcGFyYW1ldGVyIGlzIG5vdCBzZXQgdG8gYHRydWVgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1c2VyIC0gVGhlIG5hbWUgb2YgdGhlIHVzZXIgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLiBPbmx5IHdvcmtzIGlmIGByZW1vdGVQYXRoYCBpcyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWV0aG9kIC0gVGhlIGh0dHAgbXVsdGlwYXJ0IHVwbG9hZCBtZXRob2QgbmFtZS4gVGhlICdQVVQnIG9uZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgd29ya3MgaWYgYHJlbW90ZVBhdGhgIGlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB2aWRlb1R5cGUgLSBUaGUgdmlkZW8gY29kZWMgdHlwZSB1c2VkIGZvciBlbmNvZGluZyBvZiB0aGUgYmUgcmVjb3JkZWQgc2NyZWVuIGNhcHR1cmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgYGZmbXBlZyAtY29kZWNzYCBpbiB0aGUgdGVybWluYWwgdG8gc2VlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCB2aWRlbyBjb2RlY3MuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtanBlZycgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHZpZGVvUXVhbGl0eSAtIFRoZSB2aWRlbyBlbmNvZGluZyBxdWFsaXR5IChsb3csIG1lZGl1bSwgaGlnaCwgcGhvdG8gLSBkZWZhdWx0cyB0byBtZWRpdW0pLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gdmlkZW9GcHMgLSBUaGUgRnJhbWVzIFBlciBTZWNvbmQgcmF0ZSBvZiB0aGUgcmVjb3JkZWQgdmlkZW8uIENoYW5nZSB0aGlzIHZhbHVlIGlmIHRoZSByZXN1bHRpbmcgdmlkZW9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0b28gc2xvdyBvciB0b28gZmFzdC4gRGVmYXVsdHMgdG8gMTAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZpZGVvRmlsdGVycyAtIFRoZSBGRk1QRUcgdmlkZW8gZmlsdGVycyB0byBhcHBseS4gVGhlc2UgZmlsdGVycyBhbGxvdyB0byBzY2FsZSwgZmxpcCwgcm90YXRlIGFuZCBkbyBtYW55XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHVzZWZ1bCB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIHNvdXJjZSB2aWRlbyBzdHJlYW0uIFRoZSBmb3JtYXQgb2YgdGhlIHByb3BlcnR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgY29tcGx5IHdpdGggaHR0cHM6Ly9mZm1wZWcub3JnL2ZmbXBlZy1maWx0ZXJzLmh0bWxcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmlkZW9TY2FsZSAtIFRoZSBzY2FsaW5nIHZhbHVlIHRvIGFwcGx5LiBSZWFkIGh0dHBzOi8vdHJhYy5mZm1wZWcub3JnL3dpa2kvU2NhbGluZyBmb3IgcG9zc2libGUgdmFsdWVzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gc2NhbGUgaXMgYXBwbGllZCBieSBkZWZhdWx0LiBJZiBib3RoIGB2aWRlb0ZpbHRlcnNgIGFuZCBgdmlkZW9TY2FsZWAgYXJlIHNldCB0aGVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGB2aWRlb0ZpbHRlcnNgIHZhbHVlIHdpbGwgYmUgcmVzcGVjdGVkLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwaXhlbEZvcm1hdCAtIE91dHB1dCBwaXhlbCBmb3JtYXQuIFJ1biBgZmZtcGVnIC1waXhfZm10c2AgdG8gbGlzdCBwb3NzaWJsZSB2YWx1ZXMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIFF1aWNrdGltZSBjb21wYXRpYmlsaXR5LCBzZXQgdG8gXCJ5dXY0MjBwXCIgYWxvbmcgd2l0aCB2aWRlb1R5cGU6IFwibGlieDI2NFwiLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gZm9yY2VSZXN0YXJ0IC0gV2hldGhlciB0byB0cnkgdG8gY2F0Y2ggYW5kIHVwbG9hZC9yZXR1cm4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHNjcmVlbiByZWNvcmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChgZmFsc2VgLCB0aGUgZGVmYXVsdCBzZXR0aW5nKSBvciBpZ25vcmUgdGhlIHJlc3VsdCBvZiBpdCBhbmQgc3RhcnQgYSBuZXcgcmVjb3JkaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHRpbWVMaW1pdCAtIFRoZSBtYXhpbXVtIHJlY29yZGluZyB0aW1lLCBpbiBzZWNvbmRzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTgwLCB0aGUgbWF4aW11bSB2YWx1ZSBpcyA2MDAgKDEwIG1pbnV0ZXMpLlxuICovXG5cbi8qKlxuICogUmVjb3JkIHRoZSBkaXNwbGF5IG9mIGRldmljZXMgcnVubmluZyBpT1MgU2ltdWxhdG9yIHNpbmNlIFhjb2RlIDkgb3IgcmVhbCBkZXZpY2VzIHNpbmNlIGlPUyAxMVxuICogKGZmbXBlZyB1dGlsaXR5IGlzIHJlcXVpcmVkOiAnYnJldyBpbnN0YWxsIGZmbXBlZycpLlxuICogSXQgcmVjb3JkcyBzY3JlZW4gYWN0aXZpdHkgdG8gYSBNUEVHLTQgZmlsZS4gQXVkaW8gaXMgbm90IHJlY29yZGVkIHdpdGggdGhlIHZpZGVvIGZpbGUuXG4gKiBJZiBzY3JlZW4gcmVjb3JkaW5nIGhhcyBiZWVuIGFscmVhZHkgc3RhcnRlZCB0aGVuIHRoZSBjb21tYW5kIHdpbGwgc3RvcCBpdCBmb3JjZWZ1bGx5IGFuZCBzdGFydCBhIG5ldyBvbmUuXG4gKiBUaGUgcHJldmlvdXNseSByZWNvcmRlZCB2aWRlbyBmaWxlIHdpbGwgYmUgZGVsZXRlZC5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBjb250ZW50IG9mIHRoZSByZWNvcmRlZCBtZWRpYSBmaWxlIGlmXG4gKiAgICAgICAgICAgICAgICAgICBhbnkgc2NyZWVuIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZyBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0LlxuICovXG5jb21tYW5kcy5zdGFydFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nU2NyZWVuIChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHZpZGVvVHlwZSA9IERFRkFVTFRfVkNPREVDLFxuICAgIHRpbWVMaW1pdCA9IERFRkFVTFRfUkVDT1JESU5HX1RJTUVfU0VDLFxuICAgIHZpZGVvUXVhbGl0eSA9IERFRkFVTFRfUVVBTElUWSxcbiAgICB2aWRlb0ZwcyA9IERFRkFVTFRfRlBTLFxuICAgIHZpZGVvRmlsdGVycyxcbiAgICB2aWRlb1NjYWxlLFxuICAgIGZvcmNlUmVzdGFydCxcbiAgICBwaXhlbEZvcm1hdFxuICB9ID0gb3B0aW9ucztcblxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGlmICghZm9yY2VSZXN0YXJ0KSB7XG4gICAgbG9nLmluZm8oYENoZWNraW5nIGlmIHRoZXJlIGlzL3dhcyBhIHByZXZpb3VzIHNjcmVlbiByZWNvcmRpbmcuIGAgK1xuICAgICAgYFNldCAnZm9yY2VSZXN0YXJ0JyBvcHRpb24gdG8gJ3RydWUnIGlmIHlvdSdkIGxpa2UgdG8gc2tpcCB0aGlzIHN0ZXAuYCk7XG4gICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKG9wdGlvbnMpO1xuICB9XG5cbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICBwcmVmaXg6IGBhcHBpdW1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICBzdWZmaXg6IE1QNF9FWFQsXG4gIH0pO1xuXG4gIGNvbnN0IHdkYUJhc2VVcmwgPSB0aGlzLm9wdHMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkw7XG4gIGNvbnN0IHNjcmVlblJlY29yZGVyID0gbmV3IFNjcmVlblJlY29yZGVyKHRoaXMub3B0cy5kZXZpY2UudWRpZCwgdmlkZW9QYXRoLCB7XG4gICAgcmVtb3RlUG9ydDogdGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCB8fCBERUZBVUxUX01KUEVHX1NFUlZFUl9QT1JULFxuICAgIHJlbW90ZVVybDogd2RhQmFzZVVybCxcbiAgICB1c2VQb3J0Rm9yd2FyZGluZzogdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiBpc0xvY2FsSG9zdCh3ZGFCYXNlVXJsKSxcbiAgICB2aWRlb1R5cGUsXG4gICAgdmlkZW9GaWx0ZXJzLFxuICAgIHZpZGVvU2NhbGUsXG4gICAgdmlkZW9GcHMsXG4gICAgcGl4ZWxGb3JtYXRcbiAgfSk7XG4gIGlmICghYXdhaXQgc2NyZWVuUmVjb3JkZXIuaW50ZXJydXB0KHRydWUpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ1VuYWJsZSB0byBzdG9wIHNjcmVlbiByZWNvcmRpbmcgcHJvY2VzcycpO1xuICB9XG4gIGlmICh0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlcikge1xuICAgIGF3YWl0IHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciA9IG51bGw7XG4gIH1cblxuICBjb25zdCB0aW1lb3V0U2Vjb25kcyA9IHBhcnNlRmxvYXQodGltZUxpbWl0KTtcbiAgaWYgKGlzTmFOKHRpbWVvdXRTZWNvbmRzKSB8fCB0aW1lb3V0U2Vjb25kcyA+IE1BWF9SRUNPUkRJTkdfVElNRV9TRUMgfHwgdGltZW91dFNlY29uZHMgPD0gMCkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgdGltZUxpbWl0IHZhbHVlIG11c3QgYmUgaW4gcmFuZ2UgWzEsICR7TUFYX1JFQ09SRElOR19USU1FX1NFQ31dIHNlY29uZHMuIGAgK1xuICAgICAgYFRoZSB2YWx1ZSBvZiAnJHt0aW1lTGltaXR9JyBoYXMgYmVlbiBwYXNzZWQgaW5zdGVhZC5gKTtcbiAgfVxuXG4gIGxldCB7XG4gICAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSxcbiAgICBtanBlZ1NlcnZlckZyYW1lcmF0ZSxcbiAgfSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICBpZiAodmlkZW9RdWFsaXR5KSB7XG4gICAgY29uc3QgcXVhbGl0eSA9IF8uaXNJbnRlZ2VyKHZpZGVvUXVhbGl0eSkgPyB2aWRlb1F1YWxpdHkgOiBRVUFMSVRZX01BUFBJTkdbXy50b0xvd2VyKHZpZGVvUXVhbGl0eSldO1xuICAgIGlmICghcXVhbGl0eSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB2aWRlb1F1YWxpdHkgdmFsdWUgc2hvdWxkIGJlIG9uZSBvZiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhRVUFMSVRZX01BUFBJTkcpKX0gb3IgYSBudW1iZXIgaW4gcmFuZ2UgMS4uMTAwLiBgICtcbiAgICAgICAgYCcke3ZpZGVvUXVhbGl0eX0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSA9IG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgIT09IHF1YWxpdHkgPyBxdWFsaXR5IDogdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHZpZGVvRnBzKSB7XG4gICAgY29uc3QgZnBzID0gcGFyc2VJbnQodmlkZW9GcHMsIDEwKTtcbiAgICBpZiAoaXNOYU4oZnBzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB2aWRlb0ZwcyB2YWx1ZSBzaG91bGQgYmUgYSB2YWxpZCBudW1iZXIgaW4gcmFuZ2UgMS4uNjAuIGAgK1xuICAgICAgICBgJyR7dmlkZW9GcHN9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIG1qcGVnU2VydmVyRnJhbWVyYXRlID0gbWpwZWdTZXJ2ZXJGcmFtZXJhdGUgIT09IGZwcyA/IGZwcyA6IHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBtanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodXRpbC5oYXNWYWx1ZShtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5KSB8fCB1dGlsLmhhc1ZhbHVlKG1qcGVnU2VydmVyRnJhbWVyYXRlKSkge1xuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5LFxuICAgICAgICBtanBlZ1NlcnZlckZyYW1lcmF0ZSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgc2NyZWVuUmVjb3JkZXIuc3RhcnQodGltZW91dFNlY29uZHMgKiAxMDAwKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IHNjcmVlblJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICBhd2FpdCBzY3JlZW5SZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgdGhyb3cgZTtcbiAgfVxuICB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciA9IHNjcmVlblJlY29yZGVyO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb2ludCByZXNwb25zZSB2YWx1ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLiBPbmx5IHdvcmtzIGlmIGByZW1vdGVQYXRoYCBpcyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFzcyAtIFRoZSBwYXNzd29yZCBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi4gT25seSB3b3JrcyBpZiBgcmVtb3RlUGF0aGAgaXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1ldGhvZCAtIFRoZSBodHRwIG11bHRpcGFydCB1cGxvYWQgbWV0aG9kIG5hbWUuIFRoZSAnUFVUJyBvbmUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHdvcmtzIGlmIGByZW1vdGVQYXRoYCBpcyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCByZWNvcmRpbmcgdGhlIHNjcmVlbi4gSWYgbm8gc2NyZWVuIHJlY29yZGluZyBwcm9jZXNzIGlzIHJ1bm5pbmcgdGhlblxuICogdGhlIGVuZHBvaW50IHdpbGwgdHJ5IHRvIGdldCB0aGUgcmVjZW50bHkgcmVjb3JkZWQgZmlsZS5cbiAqIElmIG5vIHByZXZpb3VzbHkgcmVjb3JkZWQgZmlsZSBpcyBmb3VuZCBhbmQgbm8gYWN0aXZlIHNjcmVlbiByZWNvcmRpbmdcbiAqIHByb2Nlc3NlcyBhcmUgcnVubmluZyB0aGVuIHRoZSBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHs/U3RvcFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBjb250ZW50IG9mIHRoZSByZWNvcmRlZCBtZWRpYSBmaWxlIGlmICdyZW1vdGVQYXRoJ1xuICogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGlzIGVtcHR5IG9yIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBuYW1lIG9mIGEgbWVkaWEgZmlsZVxuICogICAgICAgICAgICAgICAgIG9yIHRoZSBmaWxlIGNvbnRlbnQgY2Fubm90IGJlIHVwbG9hZGVkIHRvIHRoZSByZW1vdGUgbG9jYXRpb24uXG4gKi9cbmNvbW1hbmRzLnN0b3BSZWNvcmRpbmdTY3JlZW4gPSBhc3luYyBmdW5jdGlvbiBzdG9wUmVjb3JkaW5nU2NyZWVuIChvcHRpb25zID0ge30pIHtcbiAgaWYgKCF0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlcikge1xuICAgIGxvZy5pbmZvKCdTY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIHN0b3AuJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlci5maW5pc2goKTtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh2aWRlb1BhdGgpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIHNjcmVlbiByZWNvcmRlciB1dGlsaXR5IGhhcyBmYWlsZWQgYCArXG4gICAgICAgIGB0byBzdG9yZSB0aGUgYWN0dWFsIHNjcmVlbiByZWNvcmRpbmcgYXQgJyR7dmlkZW9QYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGVuY29kZUJhc2U2NE9yVXBsb2FkKHZpZGVvUGF0aCwgb3B0aW9ucy5yZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIuY2xlYW51cCgpO1xuICAgIHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9yZWNvcmRzY3JlZW4uanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==