appium-xcuitest-driver 3.55.0 → 3.56.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
@@ -300,6 +300,8 @@ keyboardAutocorrection | boolean | Changes the 'Auto-Correction' preference in _
300
300
  keyboardPrediction | boolean | Changes the 'Predictive' preference in _Keyboards_ setting. Defaults to `false`.
301
301
  nativeWebTap | boolean | See the description of the corresponding capability.
302
302
  nativeWebTapStrict | boolean | See the description of the corresponding capability.
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
+ nativeWebTapSmartAppBannerVisibility | enum | The same as `nativeWebTapTabBarVisibility`, this keyword will bypass finding whether the existence of the _**smart app banner**_.
303
305
  useJSONSource | boolean | See the description of the corresponding capability.
304
306
 
305
307
  ## Element Location
@@ -82,9 +82,17 @@ commands.mobileRemoveApp = async function mobileRemoveApp(opts = {}) {
82
82
  };
83
83
 
84
84
  commands.mobileLaunchApp = async function mobileLaunchApp(opts = {}) {
85
- return await this.proxyCommand('/wda/apps/launch', 'POST', { ...requireOptions(opts, ['bundleId']),
86
- arguments: _lodash.default.isArray(opts.arguments) ? opts.arguments : [opts.arguments]
87
- });
85
+ const launchOptions = requireOptions(opts, ['bundleId']);
86
+
87
+ if (opts.arguments) {
88
+ launchOptions.arguments = _lodash.default.isArray(opts.arguments) ? opts.arguments : [opts.arguments];
89
+ }
90
+
91
+ if (opts.environment) {
92
+ launchOptions.environment = opts.environment;
93
+ }
94
+
95
+ return await this.proxyCommand('/wda/apps/launch', 'POST', launchOptions);
88
96
  };
89
97
 
90
98
  commands.mobileTerminateApp = async function mobileTerminateApp(opts = {}) {
@@ -152,4 +160,4 @@ var _default = commands;
152
160
  exports.default = _default;require('source-map-support').install();
153
161
 
154
162
 
155
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJwcm94eUNvbW1hbmQiLCJhcmd1bWVudHMiLCJpc0FycmF5IiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEs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S2MsbUJBQUwsQ0FBeUI7QUFBQ2QsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNrRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JoRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzJDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGbEQsSUFGSjtBQUdBLFFBQU1tRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUtyRCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNZ0MsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZXpELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvbGF1bmNoJywgJ1BPU1QnLCB7XG4gICAgLi4ucmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSxcbiAgICBhcmd1bWVudHM6IF8uaXNBcnJheShvcHRzLmFyZ3VtZW50cykgPyBvcHRzLmFyZ3VtZW50cyA6IFtvcHRzLmFyZ3VtZW50c10sXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlVGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVGVybWluYXRlQXBwIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvdGVybWluYXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQWN0aXZhdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9hY3RpdmF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBtdXN0IGNvbnRhaW4gYGJ1bmRsZUlkYCBwcm9wZXJ0eVxuICogQHJldHVybnMge251bWJlcn0gVGhlIGFjdHVhbCBhcHBsaWNhdGlvbiBzdGF0ZSBjb2RlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZT9sYW5ndWFnZT1vYmpjXG4gKiB0byBnZXQgdGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVRdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUXVlcnlBcHBTdGF0ZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL3N0YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoKSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7YXBwOiBhcHBQYXRofSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
163
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNB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R0FBd0IsZUFBZUEsWUFBZixDQUE2QnJCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDbUQsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdEIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNvRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JsRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzZDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGcEQsSUFGSjtBQUdBLFFBQU1xRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt2RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNa0MsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTNELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgpIHtcbiAgYXdhaXQgdGhpcy5tb2JpbGVJbnN0YWxsQXBwKHthcHA6IGFwcFBhdGh9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _xmldom = _interopRequireDefault(require("xmldom"));
14
+ var _xmldom = _interopRequireDefault(require("@xmldom/xmldom"));
15
15
 
16
16
  var _js2xmlparser = _interopRequireDefault(require("js2xmlparser2"));
17
17
 
@@ -29,7 +29,7 @@ commands.getPageSource = async function getPageSource() {
29
29
  }
30
30
 
31
31
  if ((await this.settings.getSettings()).useJSONSource) {
32
- let srcTree = await this.mobileGetSource({
32
+ const srcTree = await this.mobileGetSource({
33
33
  format: 'json'
34
34
  });
35
35
  return getSourceXml(getTreeForXML(srcTree));
@@ -39,10 +39,10 @@ commands.getPageSource = async function getPageSource() {
39
39
  };
40
40
 
41
41
  helpers.getNativePageSource = async function getNativePageSource() {
42
- let srcTree = await this.proxyCommand('/source', 'GET');
43
- let parser = new _xmldom.default.DOMParser();
44
- let tree = parser.parseFromString(srcTree);
45
- let doc = parser.parseFromString(APPIUM_SRC_XML);
42
+ const srcTree = await this.proxyCommand('/source', 'GET');
43
+ const parser = new _xmldom.default.DOMParser();
44
+ const tree = parser.parseFromString(srcTree);
45
+ const doc = parser.parseFromString(APPIUM_SRC_XML);
46
46
  doc.documentElement.appendChild(tree.documentElement);
47
47
  return new _xmldom.default.XMLSerializer().serializeToString(doc);
48
48
  };
@@ -126,4 +126,4 @@ var _default = extensions;
126
126
  exports.default = _default;require('source-map-support').install();
127
127
 
128
128
 
129
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9TUkNfWE1MIiwiZ2V0UGFnZVNvdXJjZSIsImlzV2ViQ29udGV4dCIsInNjcmlwdCIsImV4ZWN1dGVBdG9tIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInVzZUpTT05Tb3VyY2UiLCJzcmNUcmVlIiwibW9iaWxlR2V0U291cmNlIiwiZm9ybWF0IiwiZ2V0U291cmNlWG1sIiwiZ2V0VHJlZUZvclhNTCIsImdldE5hdGl2ZVBhZ2VTb3VyY2UiLCJwcm94eUNvbW1hbmQiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwiXyIsImlzU3RyaW5nIiwicGFyYW1zTWFwIiwiZXhjbHVkZWRBdHRyaWJ1dGVzIiwiZXhjbHVkZWRfYXR0cmlidXRlcyIsInF1ZXJ5IiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImdldFRyZWUiLCJlbGVtZW50IiwiZWxlbWVudEluZGV4IiwicGFyZW50UGF0aCIsImN1clBhdGgiLCJyZWN0Iiwic3VidHJlZSIsInR5cGUiLCJlbmFibGVkIiwicGFyc2VJbnQiLCJpc0VuYWJsZWQiLCJ2aXNpYmxlIiwiaXNWaXNpYmxlIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsIm5hbWUiLCJsYWJlbCIsInZhbHVlIiwiaSIsImNoaWxkcmVuIiwibGVuZ3RoIiwicHVzaCIsImpzb25Tb3VyY2UiLCJ3cmFwQXJyYXkiLCJlbGVtZW50TmFtZSIsImRlY2xhcmF0aW9uIiwiaW5jbHVkZSIsInByZXR0eVByaW50aW5nIiwiaW5kZW50U3RyaW5nIiwiYXNz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RUFBcURGLENBQUMsRUFBdEQsRUFBMEQ7QUFDeERkLE1BQUFBLE9BQU8sQ0FBQyxHQUFELENBQVAsQ0FBYWlCLElBQWIsQ0FBa0J2QixPQUFPLENBQUNDLE9BQU8sQ0FBQ29CLFFBQVIsQ0FBaUJELENBQWpCLENBQUQsRUFBc0JBLENBQXRCLEVBQXlCaEIsT0FBekIsQ0FBekI7QUFDRDs7QUFDRCxXQUFPO0FBQ0wsT0FBRSxrQkFBaUJILE9BQU8sQ0FBQ00sSUFBSyxFQUFoQyxHQUFvQ0Q7QUFEL0IsS0FBUDtBQUdEOztBQUNELE1BQUkzQixJQUFJLEdBQUdxQixPQUFPLENBQUMvQixPQUFELEVBQVUsQ0FBVixFQUFhLEVBQWIsQ0FBbEI7QUFDQSxTQUFPVSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1AsWUFBVCxDQUF1Qm9ELFVBQXZCLEVBQW1DO0FBQ2pDLFNBQU8sMkJBQU8sV0FBUCxFQUFvQkEsVUFBcEIsRUFBZ0M7QUFDckNDLElBQUFBLFNBQVMsRUFBRTtBQUFDakIsTUFBQUEsT0FBTyxFQUFFLEtBQVY7QUFBaUJrQixNQUFBQSxXQUFXLEVBQUU7QUFBOUIsS0FEMEI7QUFFckNDLElBQUFBLFdBQVcsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUU7QUFBVixLQUZ3QjtBQUdyQ0MsSUFBQUEsY0FBYyxFQUFFO0FBQUNDLE1BQUFBLFlBQVksRUFBRTtBQUFmO0FBSHFCLEdBQWhDLENBQVA7QUFLRDs7QUFHRHJDLE1BQU0sQ0FBQ3NDLE1BQVAsQ0FBY3ZFLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4bWxkb20gZnJvbSAneG1sZG9tJztcbmltcG9ydCBqczJ4bWwgZnJvbSAnanMyeG1scGFyc2VyMic7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb25zdCBBUFBJVU1fU1JDX1hNTCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48QXBwaXVtQVVULz4nO1xuXG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBnZXRQYWdlU291cmNlICgpIHtcbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwnO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG4gIH1cblxuICBpZiAoKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkudXNlSlNPTlNvdXJjZSkge1xuICAgIGxldCBzcmNUcmVlID0gYXdhaXQgdGhpcy5tb2JpbGVHZXRTb3VyY2Uoe2Zvcm1hdDogJ2pzb24nfSk7XG4gICAgcmV0dXJuIGdldFNvdXJjZVhtbChnZXRUcmVlRm9yWE1MKHNyY1RyZWUpKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5nZXROYXRpdmVQYWdlU291cmNlKCk7XG59O1xuXG5oZWxwZXJzLmdldE5hdGl2ZVBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBnZXROYXRpdmVQYWdlU291cmNlICgpIHtcbiAgbGV0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3NvdXJjZScsICdHRVQnKTtcblxuICBsZXQgcGFyc2VyID0gbmV3IHhtbGRvbS5ET01QYXJzZXIoKTtcblxuICBsZXQgdHJlZSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3JjVHJlZSk7XG5cbiAgbGV0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoQVBQSVVNX1NSQ19YTUwpO1xuICBkb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRyZWUuZG9jdW1lbnRFbGVtZW50KTtcblxuICByZXR1cm4gbmV3IHhtbGRvbS5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlR2V0U291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0U291cmNlIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMuZm9ybWF0KSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldE5hdGl2ZVBhZ2VTb3VyY2UoKTtcbiAgfVxuICBjb25zdCBwYXJhbXNNYXAgPSB7XG4gICAgZm9ybWF0OiBvcHRzLmZvcm1hdCxcbiAgfTtcbiAgaWYgKG9wdHMuZXhjbHVkZWRBdHRyaWJ1dGVzKSB7XG4gICAgcGFyYW1zTWFwLmV4Y2x1ZGVkX2F0dHJpYnV0ZXMgPSBvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcztcbiAgfVxuICBjb25zdCBxdWVyeSA9IE9iamVjdC5lbnRyaWVzKHBhcmFtc01hcClcbiAgICAubWFwKChbaywgdl0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YClcbiAgICAuam9pbignJicpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zb3VyY2U/JHtxdWVyeX1gLCAnR0VUJyk7XG59O1xuXG4vKiBXaWxsIGdldCBKU09OIG9mIHRoZSBmb3JtOlxuICogICB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgIGlzVmlzaWJsZTogJzEnLFxuICogICAgIGZyYW1lOiAne3swLCAwfSwgezM3NSwgNjY3fX0nLFxuICogICAgIGNoaWxkcmVuOlxuICogICAgICBbIHsgaXNFbmFibGVkOiAnMScsXG4gKiAgICAgICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICAgICAgIGZyYW1lOiAne3swLCAwfSwgezM3NSwgNjY3fX0nLFxuICogICAgICAgICAgY2hpbGRyZW46IFtdLFxuICogICAgICAgICAgcmVjdDogeyB4OiAwLCB5OiAwLCB3aWR0aDogMzc1LCBoZWlnaHQ6IDY2NyB9LFxuICogICAgICAgICAgdmFsdWU6IG51bGwsXG4gKiAgICAgICAgICBsYWJlbDogbnVsbCxcbiAqICAgICAgICAgIHR5cGU6ICdPdGhlcicsXG4gKiAgICAgICAgICBuYW1lOiBudWxsLFxuICogICAgICAgICAgcmF3SWRlbnRpZmllcjogbnVsbCB9LFxuICogICAgIHJlY3Q6IHsgb3JpZ2luOiB7IHg6IDAsIHk6IDAgfSwgc2l6ZTogeyB3aWR0aDogMzc1LCBoZWlnaHQ6IDY2NyB9IH0sXG4gKiAgICAgdmFsdWU6IG51bGwsXG4gKiAgICAgbGFiZWw6ICdVSUNhdGFsb2cnLFxuICogICAgIHR5cGU6ICdBcHBsaWNhdGlvbicsXG4gKiAgICAgbmFtZTogJ1VJQ2F0YWxvZycsXG4gKiAgICAgcmF3SWRlbnRpZmllcjogbnVsbCB9XG4gKi9cbmZ1bmN0aW9uIGdldFRyZWVGb3JYTUwgKHNyY1RyZWUpIHtcbiAgZnVuY3Rpb24gZ2V0VHJlZSAoZWxlbWVudCwgZWxlbWVudEluZGV4LCBwYXJlbnRQYXRoKSB7XG4gICAgbGV0IGN1clBhdGggPSBgJHtwYXJlbnRQYXRofS8ke2VsZW1lbnRJbmRleH1gO1xuICAgIGxldCByZWN0ID0gZWxlbWVudC5yZWN0IHx8IHt9O1xuICAgIGxldCBzdWJ0cmVlID0ge1xuICAgICAgJ0AnOiB7XG4gICAgICAgIHR5cGU6IGBYQ1VJRWxlbWVudFR5cGUke2VsZW1lbnQudHlwZX1gLFxuICAgICAgICBlbmFibGVkOiBwYXJzZUludChlbGVtZW50LmlzRW5hYmxlZCwgMTApID09PSAxLFxuICAgICAgICB2aXNpYmxlOiBwYXJzZUludChlbGVtZW50LmlzVmlzaWJsZSwgMTApID09PSAxLFxuICAgICAgICB4OiByZWN0LngsXG4gICAgICAgIHk6IHJlY3QueSxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICB9LFxuICAgICAgJz4nOiBbXVxuICAgIH07XG4gICAgaWYgKGVsZW1lbnQubmFtZSAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLm5hbWUgPSBlbGVtZW50Lm5hbWU7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICBzdWJ0cmVlWydAJ10ubGFiZWwgPSBlbGVtZW50LmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLnZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN1YnRyZWVbJz4nXS5wdXNoKGdldFRyZWUoZWxlbWVudC5jaGlsZHJlbltpXSwgaSwgY3VyUGF0aCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW2BYQ1VJRWxlbWVudFR5cGUke2VsZW1lbnQudHlwZX1gXTogc3VidHJlZVxuICAgIH07XG4gIH1cbiAgbGV0IHRyZWUgPSBnZXRUcmVlKHNyY1RyZWUsIDAsICcnKTtcbiAgcmV0dXJuIHRyZWU7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZVhtbCAoanNvblNvdXJjZSkge1xuICByZXR1cm4ganMyeG1sKCdBcHBpdW1BVVQnLCBqc29uU291cmNlLCB7XG4gICAgd3JhcEFycmF5OiB7ZW5hYmxlZDogZmFsc2UsIGVsZW1lbnROYW1lOiAnZWxlbWVudCd9LFxuICAgIGRlY2xhcmF0aW9uOiB7aW5jbHVkZTogdHJ1ZX0sXG4gICAgcHJldHR5UHJpbnRpbmc6IHtpbmRlbnRTdHJpbmc6ICcgICd9XG4gIH0pO1xufVxuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
129
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9TUkNfWE1MIiwiZ2V0UGFnZVNvdXJjZSIsImlzV2ViQ29udGV4dCIsInNjcmlwdCIsImV4ZWN1dGVBdG9tIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInVzZUpTT05Tb3VyY2UiLCJzcmNUcmVlIiwibW9iaWxlR2V0U291cmNlIiwiZm9ybWF0IiwiZ2V0U291cmNlWG1sIiwiZ2V0VHJlZUZvclhNTCIsImdldE5hdGl2ZVBhZ2VTb3VyY2UiLCJwcm94eUNvbW1hbmQiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwiXyIsImlzU3RyaW5nIiwicGFyYW1zTWFwIiwiZXhjbHVkZWRBdHRyaWJ1dGVzIiwiZXhjbHVkZWRfYXR0cmlidXRlcyIsInF1ZXJ5IiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImdldFRyZWUiLCJlbGVtZW50IiwiZWxlbWVudEluZGV4IiwicGFyZW50UGF0aCIsImN1clBhdGgiLCJyZWN0Iiwic3VidHJlZSIsInR5cGUiLCJlbmFibGVkIiwicGFyc2VJbnQiLCJpc0VuYWJsZWQiLCJ2aXNpYmxlIiwiaXNWaXNpYmxlIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsIm5hbWUiLCJsYWJlbCIsInZhbHVlIiwiaSIsImNoaWxkcmVuIiwibGVuZ3RoIiwicHVzaCIsImpzb25Tb3VyY2UiLCJ3cmFwQXJyYXkiLCJlbGVtZW50TmFtZSIsImRlY2xhcmF0aW9uIiwiaW5jbHVkZSIsInByZXR0eVByaW50aW5nIiwiaW5kZW50U3RyaW5nIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7OztBQUVBLE1BQU1DLGNBQWMsR0FBRyxvREFBdkI7O0FBR0FILFFBQVEsQ0FBQ0ksYUFBVCxHQUF5QixlQUFlQSxhQUFmLEdBQWdDO0FBQ3ZELE1BQUksS0FBS0MsWUFBTCxFQUFKLEVBQXlCO0FBQ3ZCLFVBQU1DLE1BQU0sR0FBRywyQ0FBZjtBQUNBLFdBQU8sTUFBTSxLQUFLQyxXQUFMLENBQWlCLGdCQUFqQixFQUFtQyxDQUFDRCxNQUFELEVBQVMsRUFBVCxDQUFuQyxDQUFiO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDLE1BQU0sS0FBS0UsUUFBTCxDQUFjQyxXQUFkLEVBQVAsRUFBb0NDLGFBQXhDLEVBQXVEO0FBQ3JELFVBQU1DLE9BQU8sR0FBRyxNQUFNLEtBQUtDLGVBQUwsQ0FBcUI7QUFBQ0MsTUFBQUEsTUFBTSxFQUFFO0FBQVQsS0FBckIsQ0FBdEI7QUFDQSxXQUFPQyxZQUFZLENBQUNDLGFBQWEsQ0FBQ0osT0FBRCxDQUFkLENBQW5CO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNLEtBQUtLLG1CQUFMLEVBQWI7QUFDRCxDQVhEOztBQWFBZixPQUFPLENBQUNlLG1CQUFSLEdBQThCLGVBQWVBLG1CQUFmLEdBQXNDO0FBQ2xFLFFBQU1MLE9BQU8sR0FBRyxNQUFNLEtBQUtNLFlBQUwsQ0FBa0IsU0FBbEIsRUFBNkIsS0FBN0IsQ0FBdEI7QUFDQSxRQUFNQyxNQUFNLEdBQUcsSUFBSUMsZ0JBQU9DLFNBQVgsRUFBZjtBQUNBLFFBQU1DLElBQUksR0FBR0gsTUFBTSxDQUFDSSxlQUFQLENBQXVCWCxPQUF2QixDQUFiO0FBQ0EsUUFBTVksR0FBRyxHQUFHTCxNQUFNLENBQUNJLGVBQVAsQ0FBdUJuQixjQUF2QixDQUFaO0FBQ0FvQixFQUFBQSxHQUFHLENBQUNDLGVBQUosQ0FBb0JDLFdBQXBCLENBQWdDSixJQUFJLENBQUNHLGVBQXJDO0FBQ0EsU0FBTyxJQUFJTCxnQkFBT08sYUFBWCxHQUEyQkMsaUJBQTNCLENBQTZDSixHQUE3QyxDQUFQO0FBQ0QsQ0FQRDs7QUFTQXRCLE9BQU8sQ0FBQ1csZUFBUixHQUEwQixlQUFlQSxlQUFmLENBQWdDZ0IsSUFBSSxHQUFHLEVBQXZDLEVBQTJDO0FBQ25FLE1BQUksQ0FBQ0MsZ0JBQUVDLFFBQUYsQ0FBV0YsSUFBSSxDQUFDZixNQUFoQixDQUFMLEVBQThCO0FBQzVCLFdBQU8sTUFBTSxLQUFLRyxtQkFBTCxFQUFiO0FBQ0Q7O0FBQ0QsUUFBTWUsU0FBUyxHQUFHO0FBQ2hCbEIsSUFBQUEsTUFBTSxFQUFFZSxJQUFJLENBQUNmO0FBREcsR0FBbEI7O0FBR0EsTUFBSWUsSUFBSSxDQUFDSSxrQkFBVCxFQUE2QjtBQUMzQkQsSUFBQUEsU0FBUyxDQUFDRSxtQkFBVixHQUFnQ0wsSUFBSSxDQUFDSSxrQkFBckM7QUFDRDs7QUFDRCxRQUFNRSxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlTCxTQUFmLEVBQ1hNLEdBRFcsQ0FDUCxDQUFDLENBQUNDLENBQUQsRUFBSUMsQ0FBSixDQUFELEtBQWEsR0FBRUMsa0JBQWtCLENBQUNGLENBQUQsQ0FBSSxJQUFHRSxrQkFBa0IsQ0FBQ0QsQ0FBRCxDQUFJLEVBRHZELEVBRVhFLElBRlcsQ0FFTixHQUZNLENBQWQ7QUFHQSxTQUFPLE1BQU0sS0FBS3hCLFlBQUwsQ0FBbUIsV0FBVWlCLEtBQU0sRUFBbkMsRUFBc0MsS0FBdEMsQ0FBYjtBQUNELENBZEQ7O0FBc0NBLFNBQVNuQixhQUFULENBQXdCSixPQUF4QixFQUFpQztBQUMvQixXQUFTK0IsT0FBVCxDQUFrQkMsT0FBbEIsRUFBMkJDLFlBQTNCLEVBQXlDQyxVQUF6QyxFQUFxRDtBQUNuRCxRQUFJQyxPQUFPLEdBQUksR0FBRUQsVUFBVyxJQUFHRCxZQUFhLEVBQTVDO0FBQ0EsUUFBSUcsSUFBSSxHQUFHSixPQUFPLENBQUNJLElBQVIsSUFBZ0IsRUFBM0I7QUFDQSxRQUFJQyxPQUFPLEdBQUc7QUFDWixXQUFLO0FBQ0hDLFFBQUFBLElBQUksRUFBRyxrQkFBaUJOLE9BQU8sQ0FBQ00sSUFBSyxFQURsQztBQUVIQyxRQUFBQSxPQUFPLEVBQUVDLFFBQVEsQ0FBQ1IsT0FBTyxDQUFDUyxTQUFULEVBQW9CLEVBQXBCLENBQVIsS0FBb0MsQ0FGMUM7QUFHSEMsUUFBQUEsT0FBTyxFQUFFRixRQUFRLENBQUNSLE9BQU8sQ0FBQ1csU0FBVCxFQUFvQixFQUFwQixDQUFSLEtBQW9DLENBSDFDO0FBSUhDLFFBQUFBLENBQUMsRUFBRVIsSUFBSSxDQUFDUSxDQUpMO0FBS0hDLFFBQUFBLENBQUMsRUFBRVQsSUFBSSxDQUFDUyxDQUxMO0FBTUhDLFFBQUFBLEtBQUssRUFBRVYsSUFBSSxDQUFDVSxLQU5UO0FBT0hDLFFBQUFBLE1BQU0sRUFBRVgsSUFBSSxDQUFDVztBQVBWLE9BRE87QUFVWixXQUFLO0FBVk8sS0FBZDs7QUFZQSxRQUFJZixPQUFPLENBQUNnQixJQUFSLEtBQWlCLElBQXJCLEVBQTJCO0FBQ3pCWCxNQUFBQSxPQUFPLENBQUMsR0FBRCxDQUFQLENBQWFXLElBQWIsR0FBb0JoQixPQUFPLENBQUNnQixJQUE1QjtBQUNEOztBQUNELFFBQUloQixPQUFPLENBQUNpQixLQUFSLEtBQWtCLElBQXRCLEVBQTRCO0FBQzFCWixNQUFBQSxPQUFPLENBQUMsR0FBRCxDQUFQLENBQWFZLEtBQWIsR0FBcUJqQixPQUFPLENBQUNpQixLQUE3QjtBQUNEOztBQUNELFFBQUlqQixPQUFPLENBQUNrQixLQUFSLEtBQWtCLElBQXRCLEVBQTRCO0FBQzFCYixNQUFBQSxPQUFPLENBQUMsR0FBRCxDQUFQLENBQWFhLEtBQWIsR0FBcUJsQixPQUFPLENBQUNrQixLQUE3QjtBQUNEOztBQUNELFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxDQUFDbkIsT0FBTyxDQUFDb0IsUUFBUixJQUFvQixFQUFyQixFQUF5QkMsTUFBN0MsRUFBcURGLENBQUMsRUFBdEQsRUFBMEQ7QUFDeERkLE1BQUFBLE9BQU8sQ0FBQyxHQUFELENBQVAsQ0FBYWlCLElBQWIsQ0FBa0J2QixPQUFPLENBQUNDLE9BQU8sQ0FBQ29CLFFBQVIsQ0FBaUJELENBQWpCLENBQUQsRUFBc0JBLENBQXRCLEVBQXlCaEIsT0FBekIsQ0FBekI7QUFDRDs7QUFDRCxXQUFPO0FBQ0wsT0FBRSxrQkFBaUJILE9BQU8sQ0FBQ00sSUFBSyxFQUFoQyxHQUFvQ0Q7QUFEL0IsS0FBUDtBQUdEOztBQUNELE1BQUkzQixJQUFJLEdBQUdxQixPQUFPLENBQUMvQixPQUFELEVBQVUsQ0FBVixFQUFhLEVBQWIsQ0FBbEI7QUFDQSxTQUFPVSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1AsWUFBVCxDQUF1Qm9ELFVBQXZCLEVBQW1DO0FBQ2pDLFNBQU8sMkJBQU8sV0FBUCxFQUFvQkEsVUFBcEIsRUFBZ0M7QUFDckNDLElBQUFBLFNBQVMsRUFBRTtBQUFDakIsTUFBQUEsT0FBTyxFQUFFLEtBQVY7QUFBaUJrQixNQUFBQSxXQUFXLEVBQUU7QUFBOUIsS0FEMEI7QUFFckNDLElBQUFBLFdBQVcsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUU7QUFBVixLQUZ3QjtBQUdyQ0MsSUFBQUEsY0FBYyxFQUFFO0FBQUNDLE1BQUFBLFlBQVksRUFBRTtBQUFmO0FBSHFCLEdBQWhDLENBQVA7QUFLRDs7QUFHRHJDLE1BQU0sQ0FBQ3NDLE1BQVAsQ0FBY3ZFLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4bWxkb20gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IGpzMnhtbCBmcm9tICdqczJ4bWxwYXJzZXIyJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IEFQUElVTV9TUkNfWE1MID0gJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PjxBcHBpdW1BVVQvPic7XG5cblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCc7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbiAgfVxuXG4gIGlmICgoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS51c2VKU09OU291cmNlKSB7XG4gICAgY29uc3Qgc3JjVHJlZSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0U291cmNlKHtmb3JtYXQ6ICdqc29uJ30pO1xuICAgIHJldHVybiBnZXRTb3VyY2VYbWwoZ2V0VHJlZUZvclhNTChzcmNUcmVlKSk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TmF0aXZlUGFnZVNvdXJjZSgpO1xufTtcblxuaGVscGVycy5nZXROYXRpdmVQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmF0aXZlUGFnZVNvdXJjZSAoKSB7XG4gIGNvbnN0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3NvdXJjZScsICdHRVQnKTtcbiAgY29uc3QgcGFyc2VyID0gbmV3IHhtbGRvbS5ET01QYXJzZXIoKTtcbiAgY29uc3QgdHJlZSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3JjVHJlZSk7XG4gIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoQVBQSVVNX1NSQ19YTUwpO1xuICBkb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRyZWUuZG9jdW1lbnRFbGVtZW50KTtcbiAgcmV0dXJuIG5ldyB4bWxkb20uWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGRvYyk7XG59O1xuXG5oZWxwZXJzLm1vYmlsZUdldFNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldFNvdXJjZSAob3B0cyA9IHt9KSB7XG4gIGlmICghXy5pc1N0cmluZyhvcHRzLmZvcm1hdCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROYXRpdmVQYWdlU291cmNlKCk7XG4gIH1cbiAgY29uc3QgcGFyYW1zTWFwID0ge1xuICAgIGZvcm1hdDogb3B0cy5mb3JtYXQsXG4gIH07XG4gIGlmIChvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcykge1xuICAgIHBhcmFtc01hcC5leGNsdWRlZF9hdHRyaWJ1dGVzID0gb3B0cy5leGNsdWRlZEF0dHJpYnV0ZXM7XG4gIH1cbiAgY29uc3QgcXVlcnkgPSBPYmplY3QuZW50cmllcyhwYXJhbXNNYXApXG4gICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWApXG4gICAgLmpvaW4oJyYnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc291cmNlPyR7cXVlcnl9YCwgJ0dFVCcpO1xufTtcblxuLyogV2lsbCBnZXQgSlNPTiBvZiB0aGUgZm9ybTpcbiAqICAgeyBpc0VuYWJsZWQ6ICcxJyxcbiAqICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICBjaGlsZHJlbjpcbiAqICAgICAgWyB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgICAgICAgaXNWaXNpYmxlOiAnMScsXG4gKiAgICAgICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAqICAgICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSxcbiAqICAgICAgICAgIHZhbHVlOiBudWxsLFxuICogICAgICAgICAgbGFiZWw6IG51bGwsXG4gKiAgICAgICAgICB0eXBlOiAnT3RoZXInLFxuICogICAgICAgICAgbmFtZTogbnVsbCxcbiAqICAgICAgICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfSxcbiAqICAgICByZWN0OiB7IG9yaWdpbjogeyB4OiAwLCB5OiAwIH0sIHNpemU6IHsgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSB9LFxuICogICAgIHZhbHVlOiBudWxsLFxuICogICAgIGxhYmVsOiAnVUlDYXRhbG9nJyxcbiAqICAgICB0eXBlOiAnQXBwbGljYXRpb24nLFxuICogICAgIG5hbWU6ICdVSUNhdGFsb2cnLFxuICogICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfVxuICovXG5mdW5jdGlvbiBnZXRUcmVlRm9yWE1MIChzcmNUcmVlKSB7XG4gIGZ1bmN0aW9uIGdldFRyZWUgKGVsZW1lbnQsIGVsZW1lbnRJbmRleCwgcGFyZW50UGF0aCkge1xuICAgIGxldCBjdXJQYXRoID0gYCR7cGFyZW50UGF0aH0vJHtlbGVtZW50SW5kZXh9YDtcbiAgICBsZXQgcmVjdCA9IGVsZW1lbnQucmVjdCB8fCB7fTtcbiAgICBsZXQgc3VidHJlZSA9IHtcbiAgICAgICdAJzoge1xuICAgICAgICB0eXBlOiBgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YCxcbiAgICAgICAgZW5hYmxlZDogcGFyc2VJbnQoZWxlbWVudC5pc0VuYWJsZWQsIDEwKSA9PT0gMSxcbiAgICAgICAgdmlzaWJsZTogcGFyc2VJbnQoZWxlbWVudC5pc1Zpc2libGUsIDEwKSA9PT0gMSxcbiAgICAgICAgeDogcmVjdC54LFxuICAgICAgICB5OiByZWN0LnksXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgfSxcbiAgICAgICc+JzogW11cbiAgICB9O1xuICAgIGlmIChlbGVtZW50Lm5hbWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS5uYW1lID0gZWxlbWVudC5uYW1lO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLmxhYmVsID0gZWxlbWVudC5sYWJlbDtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS52YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGVsZW1lbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdWJ0cmVlWyc+J10ucHVzaChnZXRUcmVlKGVsZW1lbnQuY2hpbGRyZW5baV0sIGksIGN1clBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFtgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YF06IHN1YnRyZWVcbiAgICB9O1xuICB9XG4gIGxldCB0cmVlID0gZ2V0VHJlZShzcmNUcmVlLCAwLCAnJyk7XG4gIHJldHVybiB0cmVlO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VYbWwgKGpzb25Tb3VyY2UpIHtcbiAgcmV0dXJuIGpzMnhtbCgnQXBwaXVtQVVUJywganNvblNvdXJjZSwge1xuICAgIHdyYXBBcnJheToge2VuYWJsZWQ6IGZhbHNlLCBlbGVtZW50TmFtZTogJ2VsZW1lbnQnfSxcbiAgICBkZWNsYXJhdGlvbjoge2luY2x1ZGU6IHRydWV9LFxuICAgIHByZXR0eVByaW50aW5nOiB7aW5kZW50U3RyaW5nOiAnICAnfVxuICB9KTtcbn1cblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvc291cmNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -51,6 +51,10 @@ const {
51
51
  const ATOM_WAIT_TIMEOUT_MS = 2 * 60000;
52
52
  const ATOM_INITIAL_WAIT_MS = 1000;
53
53
  const ON_OBSTRUCTING_ALERT_EVENT = 'alert';
54
+ const VISIBLE = 'visible';
55
+ const INVISIBLE = 'invisible';
56
+ const DETECT = 'detect';
57
+ const VISIBILITIES = [VISIBLE, INVISIBLE, DETECT];
54
58
  const commands = {},
55
59
  helpers = {},
56
60
  extensions = {};
@@ -398,6 +402,23 @@ extensions.getSafariIsNotched = _lodash.default.memoize(async function getSafari
398
402
  extensions.getExtraTranslateWebCoordsOffset = async function getExtraTranslateWebCoordsOffset(wvPos, realDims) {
399
403
  let topOffset = 0;
400
404
  let bottomOffset = 0;
405
+ const {
406
+ nativeWebTapTabBarVisibility,
407
+ nativeWebTapSmartAppBannerVisibility
408
+ } = await this.settings.getSettings();
409
+
410
+ let tabBarVisibility = _lodash.default.lowerCase(nativeWebTapTabBarVisibility);
411
+
412
+ let bannerVisibility = _lodash.default.lowerCase(nativeWebTapSmartAppBannerVisibility);
413
+
414
+ if (!VISIBILITIES.includes(tabBarVisibility)) {
415
+ tabBarVisibility = DETECT;
416
+ }
417
+
418
+ if (!VISIBILITIES.includes(bannerVisibility)) {
419
+ bannerVisibility = DETECT;
420
+ }
421
+
401
422
  const isIphone = await this.getSafariIsIphone();
402
423
  const isNotched = isIphone && (await this.getSafariIsNotched());
403
424
  const orientation = realDims.h > realDims.w ? 'PORTRAIT' : 'LANDSCAPE';
@@ -426,25 +447,37 @@ extensions.getExtraTranslateWebCoordsOffset = async function getExtraTranslateWe
426
447
  }
427
448
 
428
449
  if (orientation === 'LANDSCAPE' || !isIphone) {
429
- const tabs = await this.findNativeElementOrElements('-ios predicate string', `name LIKE '*, Tab' AND visible = 1`, true);
430
-
431
- if (tabs.length > 0) {
450
+ if (tabBarVisibility === VISIBLE) {
432
451
  topOffset += TAB_BAR_OFFSET;
452
+ } else if (tabBarVisibility === DETECT) {
453
+ const contextsAndViews = await this.getContextsAndViews();
454
+ const tabs = contextsAndViews.filter(ctx => ctx.id.startsWith('WEBVIEW_'));
455
+
456
+ if (tabs.length > 1) {
457
+ _logger.default.debug(`Found ${tabs.length} tabs. Assuming the tab bar is visible`);
458
+
459
+ topOffset += TAB_BAR_OFFSET;
460
+ }
433
461
  }
434
462
  }
435
463
  }
436
464
 
437
- topOffset += await this.getExtraNativeWebTapOffset();
465
+ topOffset += await this.getExtraNativeWebTapOffset(isIphone, bannerVisibility);
438
466
  wvPos.y += topOffset;
439
467
  realDims.h -= topOffset + bottomOffset;
440
468
  };
441
469
 
442
- extensions.getExtraNativeWebTapOffset = async function getExtraNativeWebTapOffset() {
470
+ extensions.getExtraNativeWebTapOffset = async function getExtraNativeWebTapOffset(isIphone, bannerVisibility) {
443
471
  let offset = 0;
444
- const banners = await this.findNativeElementOrElements('accessibility id', 'Close app download offer', true);
445
472
 
446
- if (banners.length > 0) {
447
- offset += (await this.getSafariIsIphone()) ? IPHONE_WEB_COORD_SMART_APP_BANNER_OFFSET : IPAD_WEB_COORD_SMART_APP_BANNER_OFFSET;
473
+ if (bannerVisibility === VISIBLE) {
474
+ offset += isIphone ? IPHONE_WEB_COORD_SMART_APP_BANNER_OFFSET : IPAD_WEB_COORD_SMART_APP_BANNER_OFFSET;
475
+ } else if (bannerVisibility === DETECT) {
476
+ const banners = await this.findNativeElementOrElements('accessibility id', 'Close app download offer', true);
477
+
478
+ if (banners.length > 0) {
479
+ offset += isIphone ? IPHONE_WEB_COORD_SMART_APP_BANNER_OFFSET : IPAD_WEB_COORD_SMART_APP_BANNER_OFFSET;
480
+ }
448
481
  }
449
482
 
450
483
  _logger.default.debug(`Additional native web tap offset computed: ${offset}`);
@@ -500,16 +533,16 @@ extensions.nativeWebTap = async function nativeWebTap(el) {
500
533
 
501
534
  _logger.default.warn('Unable to do simple native web tap. Attempting to convert coordinates');
502
535
 
503
- await this.executeAtom('get_size', [atomsElement]);
504
- await this.executeAtom('get_top_left_coordinates', [atomsElement]);
536
+ await _bluebird.default.Promise.all([this.executeAtom('get_size', [atomsElement]), this.executeAtom('get_top_left_coordinates', [atomsElement])]);
537
+ const [size, coordinates] = await _bluebird.default.Promise.all([this.executeAtom('get_size', [atomsElement]), this.executeAtom('get_top_left_coordinates', [atomsElement])]);
505
538
  const {
506
539
  width,
507
540
  height
508
- } = await this.executeAtom('get_size', [atomsElement]);
541
+ } = size;
509
542
  let {
510
543
  x,
511
544
  y
512
- } = await this.executeAtom('get_top_left_coordinates', [atomsElement]);
545
+ } = coordinates;
513
546
  x += width / 2;
514
547
  y += height / 2;
515
548
  this.curWebCoords = {
@@ -529,15 +562,16 @@ extensions.clickCoords = async function clickCoords(coords) {
529
562
  extensions.translateWebCoords = async function translateWebCoords(coords) {
530
563
  _logger.default.debug(`Translating coordinates (${JSON.stringify(coords)}) to web coordinates`);
531
564
 
532
- let webview = await (0, _asyncbox.retryInterval)(5, 100, async () => {
533
- const webviews = await this.findNativeElementOrElements('class name', 'XCUIElementTypeWebView', true);
565
+ let webview;
534
566
 
535
- if (webviews.length === 0) {
536
- throw new Error(`No webviews found. Unable to translate web coordinates for native web tap`);
537
- }
567
+ try {
568
+ webview = await (0, _asyncbox.retryInterval)(5, 100, async () => await this.findNativeElementOrElements('class name', 'XCUIElementTypeWebView', false));
569
+ } catch (ign) {}
570
+
571
+ if (!webview) {
572
+ throw new Error(`No WebView found. Unable to translate web coordinates for native web tap.`);
573
+ }
538
574
 
539
- return webviews[0];
540
- });
541
575
  webview = _appiumSupport.util.unwrapElement(webview);
542
576
  const rect = await this.proxyCommand(`/element/${webview}/rect`, 'GET');
543
577
  const wvPos = {
@@ -675,4 +709,4 @@ var _default = commands;
675
709
  exports.default = _default;require('source-map-support').install();
676
710
 
677
711
 
678
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImlzVmFsaWRFbGVtZW50SWRlbnRpZmllciIsImlkIiwiXyIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc0VtcHR5IiwiaXNOYU4iLCJzZXRGcmFtZSIsImZyYW1lIiwiaXNXZWJDb250ZXh0IiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImlzTnVsbCIsImN1cldlYkZyYW1lcyIsImxvZyIsImRlYnVnIiwiaGFzRWxlbWVudElkIiwiYXRvbXNFbGVtZW50IiwiZ2V0QXRvbXNFbGVtZW50IiwidmFsdWUiLCJleGVjdXRlQXRvbSIsIldJTkRPVyIsInVuc2hpZnQiLCJhdG9tIiwiaXNVbmRlZmluZWQiLCJOb1N1Y2hGcmFtZUVycm9yIiwiZ2V0Q3NzUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJlbCIsInN1Ym1pdCIsInJlZnJlc2giLCJnZXRVcmwiLCJyZW1vdGUiLCJleGVjdXRlIiwidGl0bGUiLCJnZXRDb29raWVzIiwic2NyaXB0IiwianNDb29raWVzIiwiY29va2llcyIsIm5hbWUiLCJ0b1BhaXJzIiwiY29va2llVXRpbHMiLCJjcmVhdGVKV1BDb29raWUiLCJ1bmRlZmluZWQiLCJwdXNoIiwiZXJyIiwiZXJyb3IiLCJVbmtub3duRXJyb3IiLCJzZXRDb29raWUiLCJjb29raWUiLCJjbG9uZSIsInBhdGgiLCJqc0Nvb2tpZSIsImNyZWF0ZUpTQ29va2llIiwiZXhwaXJlcyIsImV4cGlyeSIsIkRhdGUiLCJ0b1VUQ1N0cmluZyIsImRvbWFpbiIsImh0dHBPbmx5Iiwic2VjdXJlIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlbGV0ZUNvb2tpZSIsImNvb2tpZU5hbWUiLCJpbmRleE9mIiwibWFwIiwiX2RlbGV0ZUNvb2tpZSIsImRlbGV0ZUNvb2tpZXMiLCJsZW5ndGgiLCJ3ZWJDb29raWUiLCJleHBpcmVDb29raWUiLCJjYWNoZVdlYkVsZW1lbnRzIiwicmF3RWxlbWVudHMiLCJpc0FycmF5IiwiaXNQbGFpbk9iamVjdCIsImNhY2hlRWxlbWVudCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm1hbnkiLCJjdHgiLCJjb250ZXh0RWxlbWVudCIsImlzTmlsIiwiZWxlbWVudCIsImRvRmluZCIsImltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJpc0Z1bmN0aW9uIiwibWF0Y2giLCJzaXplIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiZ2V0RWxlbWVudElkIiwiaGFzVmFsdWUiLCJnZXRTYWZhcmlJc0lwaG9uZSIsIm1lbW9pemUiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsIndhcm4iLCJnZXRTYWZhcmlEZXZpY2VTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJub3JtSGVpZ2h0Iiwibm9ybVdpZHRoIiwiZ2V0U2FmYXJpSXNOb3RjaGVkIiwiZGV2aWNlIiwiZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQiLCJ3dlBvcyIsInJlYWxEaW1zIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwiaXNJcGhvbmUiLCJpc05vdGNoZWQiLCJvcmllbnRhdGlvbiIsIm5vdGNoT2Zmc2V0IiwiY29tcGFyZVZlcnNpb25zIiwib3B0cyIsInBsYXRmb3JtVmVyc2lvbiIsImlzU2Nyb2xsZWQiLCJ0YWJzIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3Iiwid2Vidmlld3MiLCJFcnJvciIsImNtZCIsInd2RGltcyIsImltcGxpY2l0V2FpdE1zIiwic2V0SW1wbGljaXRXYWl0IiwieFJhdGlvIiwieVJhdGlvIiwibmV3Q29vcmRzIiwiY2hlY2tGb3JBbGVydCIsImdldEFsZXJ0VGV4dCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInRpbWVkQXRvbVByb21pc2UiLCJ0aW1lb3V0IiwiaGFuZGxlUHJvbWlzZUVycm9yIiwicCIsIm9yaWdpbmFsRXJyb3IiLCJBZ2dyZWdhdGVFcnJvciIsIlRpbWVvdXRFcnJvciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiYW55IiwiZGVsYXkiLCJpc0Z1bGZpbGxlZCIsIl93YWl0aW5nQXRvbXMiLCJjb3VudCIsImFsZXJ0Tm90aWZpZXIiLCJFdmVudEVtaXR0ZXIiLCJhbGVydE1vbml0b3IiLCJvbkFsZXJ0Q2FsbGJhY2siLCJpc1Jlc29sdmVkIiwiZW1pdCIsImlnbiIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIm9uY2UiLCJ0aGVuIiwiY2F0Y2giLCJyZW1vdmVMaXN0ZW5lciIsIm1vYmlsZVdlYk5hdiIsIm5hdlR5cGUiLCJhbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHFCQUFxQixHQUFHLEVBQTlCO0FBQ0EsTUFBTUMsOEJBQThCLEdBQUcsRUFBdkM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxFQUFqQztBQUNBLE1BQU1DLHlCQUF5QixHQUFHLEVBQWxDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsRUFBckM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRyxFQUF4QztBQUNBLE1BQU1DLHdCQUF3QixHQUFHLEVBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLEVBQXZCO0FBQ0EsTUFBTUMsd0NBQXdDLEdBQUcsRUFBakQ7QUFDQSxNQUFNQyxzQ0FB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QWlDVyxjQUFqQyxDQUFnRDVOLDBCQUFoRCxFQUE0RW9OLGVBQTVFO0FBQ0Q7O0FBQ0QsU0FBS0wsYUFBTCxDQUFtQkMsS0FBbkI7QUFDRDtBQUNGLENBbEVEOztBQW9FQTdNLFVBQVUsQ0FBQzBOLFlBQVgsR0FBMEIsZUFBZUEsWUFBZixDQUE2QkMsT0FBN0IsRUFBc0M7QUFDOUQsT0FBSzFMLE1BQUwsQ0FBWTJMLDRCQUFaLEdBQTJDLElBQTNDOztBQUNBLE1BQUk7QUFDRixVQUFNLEtBQUt2TSxXQUFMLENBQWlCLGdCQUFqQixFQUFtQyxDQUFFLFdBQVVzTSxPQUFRLEtBQXBCLEVBQTBCLElBQTFCLENBQW5DLENBQU47QUFDRCxHQUZELFNBRVU7QUFDUixTQUFLMUwsTUFBTCxDQUFZMkwsNEJBQVosR0FBMkMsS0FBM0M7QUFDRDtBQUNGLENBUEQ7O0FBU0FDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjaE8sUUFBZCxFQUF3QkUsVUFBeEIsRUFBb0NELE9BQXBDO2VBRWVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbl07XG5cbmNvbnN0IHsgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgfSA9IHV0aWw7XG5cbmNvbnN0IEFUT01fV0FJVF9USU1FT1VUX01TID0gMiAqIDYwMDAwO1xuY29uc3QgQVRPTV9JTklUSUFMX1dBSVRfTVMgPSAxMDAwO1xuXG5jb25zdCBPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCA9ICdhbGVydCc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIgKGlkKSB7XG4gIGlmICghXy5pc1N0cmluZyhpZCkgJiYgIV8uaXNOdW1iZXIoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGlkKSAmJiBfLmlzRW1wdHkoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzTnVtYmVyKGlkKSAmJiBpc05hTihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNvbW1hbmRzLnNldEZyYW1lID0gYXN5bmMgZnVuY3Rpb24gc2V0RnJhbWUgKGZyYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgaWYgKF8uaXNOdWxsKGZyYW1lKSkge1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgbG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGF0b20gPSBfLmlzTnVtYmVyKGZyYW1lKSA/ICdmcmFtZV9ieV9pbmRleCcgOiAnZnJhbWVfYnlfaWRfb3JfbmFtZSc7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGF0b20sIFtmcmFtZV0pO1xuICAgIGlmIChfLmlzTnVsbCh2YWx1ZSkgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZS5XSU5ET1cpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEZyYW1lRXJyb3IoKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0Q3NzUHJvcGVydHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDc3NQcm9wZXJ0eSAocHJvcGVydHlOYW1lLCBlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF92YWx1ZV9vZl9jc3NfcHJvcGVydHknLCBbYXRvbXNFbGVtZW50LCBwcm9wZXJ0eU5hbWVdKTtcbn07XG5cbmNvbW1hbmRzLnN1Ym1pdCA9IGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdCAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3N1Ym1pdCcsIFthdG9tc0VsZW1lbnRdKTtcbn07XG5cbmNvbW1hbmRzLnJlZnJlc2ggPSBhc3luYyBmdW5jdGlvbiByZWZyZXNoICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdyZWZyZXNoJywgW10pO1xufTtcblxuY29tbWFuZHMuZ2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gZ2V0VXJsICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZSgnd2luZG93LmxvY2F0aW9uLmhyZWYnKTtcbn07XG5cbmNvbW1hbmRzLnRpdGxlID0gYXN5bmMgZnVuY3Rpb24gdGl0bGUgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCd0aXRsZScsIFtdLCB0cnVlKTtcbn07XG5cbmNvbW1hbmRzLmdldENvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgYWxsIGNvb2tpZXMnKTtcblxuICBsZXQgc2NyaXB0ID0gJ3JldHVybiBkb2N1bWVudC5jb29raWUnO1xuICBsZXQganNDb29raWVzID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xuXG4gIGxldCBjb29raWVzID0gW107XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY29va2llVXRpbHMuY3JlYXRlSldQQ29va2llKHVuZGVmaW5lZCwganNDb29raWVzKSkpIHtcbiAgICAgIGNvb2tpZXMucHVzaCh7bmFtZSwgdmFsdWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihlcnIpO1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBFcnJvciBwYXJzaW5nIGNvb2tpZXMgZnJvbSByZXN1bHQ6ICcke2pzQ29va2llc30nYCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnNldENvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZSAoY29va2llKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29va2llID0gXy5jbG9uZShjb29raWUpO1xuXG4gIC8vIGlmIGBwYXRoYCBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkLCBTYWZhcmkgd2lsbCBub3QgdXBkYXRlIGNvb2tpZXMgYXMgZXhwZWN0ZWQ7IGVnIGlzc3VlICMxNzA4XG4gIGlmICghY29va2llLnBhdGgpIHtcbiAgICBjb29raWUucGF0aCA9ICcvJztcbiAgfVxuXG4gIGNvbnN0IGpzQ29va2llID0gY29va2llVXRpbHMuY3JlYXRlSlNDb29raWUoY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSwge1xuICAgIGV4cGlyZXM6IF8uaXNOdW1iZXIoY29va2llLmV4cGlyeSkgPyAobmV3IERhdGUoY29va2llLmV4cGlyeSAqIDEwMDApKS50b1VUQ1N0cmluZygpIDpcbiAgICAgIGNvb2tpZS5leHBpcnksXG4gICAgcGF0aDogY29va2llLnBhdGgsXG4gICAgZG9tYWluOiBjb29raWUuZG9tYWluLFxuICAgIGh0dHBPbmx5OiBjb29raWUuaHR0cE9ubHksXG4gICAgc2VjdXJlOiBjb29raWUuc2VjdXJlXG4gIH0pO1xuICBsZXQgc2NyaXB0ID0gYGRvY3VtZW50LmNvb2tpZSA9ICR7SlNPTi5zdHJpbmdpZnkoanNDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIGNvb2tpZSBleGlzdGVuY2VcbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKF8uaW5kZXhPZihfLm1hcChjb29raWVzLCAnbmFtZScpLCBjb29raWVOYW1lKSA9PT0gLTEpIHtcbiAgICBsb2cuZGVidWcoYENvb2tpZSAnJHtjb29raWVOYW1lfScgbm90IGZvdW5kLiBJZ25vcmluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llTmFtZSk7XG59O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKGNvb2tpZXMubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWUubmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuaGVscGVycy5fZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gX2RlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBsb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfSdgKTtcbiAgbGV0IHdlYkNvb2tpZSA9IGNvb2tpZVV0aWxzLmV4cGlyZUNvb2tpZShjb29raWVOYW1lLCB7cGF0aDogJy8nfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJhd0VsZW1lbnRzKSB7XG4gIGlmICghKF8uaXNBcnJheShyYXdFbGVtZW50cykgfHwgXy5pc1BsYWluT2JqZWN0KHJhd0VsZW1lbnRzKSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FcnJvcihgV2ViIGVsZW1lbnQgaWRlbnRpZmllcnMgY2Fubm90IGJlIHBhcnNlZCBmcm9tIGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkocmF3RWxlbWVudHMpKTtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlRWxlbWVudCA9IChlbCkgPT4ge1xuICAgIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FcnJvcihgVGhlIHdlYiBlbGVtZW50IGlkZW50aWZpZXIgJHtKU09OLnN0cmluZ2lmeShlbElkKX0gY2Fubm90IGJlIHBhcnNlZGApO1xuICAgIH1cbiAgICAvLyBJbiBuZXdlciBkZWJ1Z2dlciByZWxlYXNlcyBlbGVtZW50IGlkZW50aWZpZXJzIGxvb2sgbGlrZSBgOndkYzoxNjI4MTUxNjQ5MzI1YFxuICAgIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgICBjb25zdCBjYWNoZUlkID0gXy5pbmNsdWRlcyhlbElkLCAnOicpID8gZWxJZCA6IHV0aWwudXVpZFY0KCk7XG4gICAgdGhpcy53ZWJFbGVtZW50c0NhY2hlLnNldChjYWNoZUlkLCBlbElkKTtcbiAgICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbiAgfTtcblxuICByZXR1cm4gXy5pc0FycmF5KHJhd0VsZW1lbnRzKSA/IHJhd0VsZW1lbnRzLm1hcChjYWNoZUVsZW1lbnQpIDogY2FjaGVFbGVtZW50KHJhd0VsZW1lbnRzKTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKCFlbGVtZW50IHx8IF8uc2l6ZShlbGVtZW50KSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzSXBob25lICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Jyk7XG4gICAgcmV0dXJuIHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpcGhvbmUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gdXNlcmFnZW50LiBBc3N1bWluZyBpUGhvbmVgKTtcbiAgICBsb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0cnVlO1xufSk7XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlEZXZpY2VTaXplICgpIHtcbiAgY29uc3Qgc2NyaXB0ID0gJ3JldHVybiB7aGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW8sIHdpZHRoOiB3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb307JztcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKHNjcmlwdCk7XG4gIGNvbnN0IFtub3JtSGVpZ2h0LCBub3JtV2lkdGhdID0gaGVpZ2h0ID4gd2lkdGggPyBbaGVpZ2h0LCB3aWR0aF0gOiBbd2lkdGgsIGhlaWdodF07XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IG5vcm1XaWR0aCxcbiAgICBoZWlnaHQ6IG5vcm1IZWlnaHQsXG4gIH07XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNOb3RjaGVkICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNhZmFyaURldmljZVNpemUoKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBOT1RDSEVEX0RFVklDRV9TSVpFUykge1xuICAgICAgaWYgKGRldmljZS53ID09PSB3aWR0aCAmJiBkZXZpY2UuaCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCAod3ZQb3MsIHJlYWxEaW1zKSB7XG4gIGxldCB0b3BPZmZzZXQgPSAwO1xuICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcblxuICBjb25zdCBpc0lwaG9uZSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKTtcbiAgY29uc3QgaXNOb3RjaGVkID0gaXNJcGhvbmUgJiYgYXdhaXQgdGhpcy5nZXRTYWZhcmlJc05vdGNoZWQoKTtcblxuICBjb25zdCBvcmllbnRhdGlvbiA9IHJlYWxEaW1zLmggPiByZWFsRGltcy53ID8gJ1BPUlRSQUlUJyA6ICdMQU5EU0NBUEUnO1xuXG4gIGNvbnN0IG5vdGNoT2Zmc2V0ID0gaXNOb3RjaGVkXG4gICAgPyB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPScsICcxMy4wJylcbiAgICAgID8gSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xM1xuICAgICAgOiBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXG4gICAgOiAwO1xuXG4gIGNvbnN0IGlzU2Nyb2xsZWQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID4gMCcpO1xuICBpZiAoaXNTY3JvbGxlZCkge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzTm90Y2hlZCkge1xuICAgICAgdG9wT2Zmc2V0IC09IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaVBob25lIGlzIGxhbmRzY2FwZSB0aGVuIHRoZXJlIGlzIG5vIHRvcCBiYXJcbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnICYmIGlzSXBob25lKSB7XG4gICAgICB0b3BPZmZzZXQgPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgIGNvbnN0IHRhYnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJywgYG5hbWUgTElLRSAnKiwgVGFiJyBBTkQgdmlzaWJsZSA9IDFgLCB0cnVlKTtcbiAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcE9mZnNldCArPSBhd2FpdCB0aGlzLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0KCk7XG5cbiAgd3ZQb3MueSArPSB0b3BPZmZzZXQ7XG4gIHJlYWxEaW1zLmggLT0gKHRvcE9mZnNldCArIGJvdHRvbU9mZnNldCk7XG59O1xuXG5leHRlbnNpb25zLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgKCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICAvLyB0cnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNtYXJ0IEFwcCBCYW5uZXJcbiAgY29uc3QgYmFubmVycyA9IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgJ0Nsb3NlIGFwcCBkb3dubG9hZCBvZmZlcicsIHRydWUpO1xuICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgb2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBsb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSk7XG5cbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSk7XG4gIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSk7XG4gIHggKz0gd2lkdGggLyAyO1xuICB5ICs9IGhlaWdodCAvIDI7XG5cbiAgdGhpcy5jdXJXZWJDb29yZHMgPSB7eCwgeX07XG4gIGF3YWl0IHRoaXMuY2xpY2tXZWJDb29yZHMoKTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja0Nvb3JkcyAoY29vcmRzKSB7XG4gIGF3YWl0IHRoaXMucGVyZm9ybVRvdWNoKFtcbiAgICB7XG4gICAgICBhY3Rpb246ICd0YXAnLFxuICAgICAgb3B0aW9uczogY29vcmRzLFxuICAgIH0sXG4gIF0pO1xufTtcblxuZXh0ZW5zaW9ucy50cmFuc2xhdGVXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiB0cmFuc2xhdGVXZWJDb29yZHMgKGNvb3Jkcykge1xuICBsb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXcgPSBhd2FpdCByZXRyeUludGVydmFsKDUsIDEwMCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdlYnZpZXdzID0gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlV2ViVmlldycsIHRydWUpO1xuICAgIGlmICh3ZWJ2aWV3cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gd2Vidmlld3MgZm91bmQuIFVuYWJsZSB0byB0cmFuc2xhdGUgd2ViIGNvb3JkaW5hdGVzIGZvciBuYXRpdmUgd2ViIHRhcGApO1xuICAgIH1cbiAgICByZXR1cm4gd2Vidmlld3NbMF07XG4gIH0pO1xuICB3ZWJ2aWV3ID0gdXRpbC51bndyYXBFbGVtZW50KHdlYnZpZXcpO1xuXG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt3ZWJ2aWV3fS9yZWN0YCwgJ0dFVCcpO1xuICBjb25zdCB3dlBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gIGNvbnN0IHJlYWxEaW1zID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICBjb25zdCBjbWQgPSAnKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt3OiB3aW5kb3cuaW5uZXJXaWR0aCwgaDogd2luZG93LmlubmVySGVpZ2h0fTsgfSkoKSc7XG4gIGNvbnN0IHd2RGltcyA9IGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoY21kKTtcblxuICAvLyBrZWVwIHRyYWNrIG9mIGltcGxpY2l0IHdhaXQsIGFuZCBzZXQgbG9jYWxseSB0byAwXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDk4OFxuICBjb25zdCBpbXBsaWNpdFdhaXRNcyA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KDApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQod3ZQb3MsIHJlYWxEaW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdChpbXBsaWNpdFdhaXRNcyk7XG4gIH1cblxuICBpZiAod3ZEaW1zICYmIHJlYWxEaW1zICYmIHd2UG9zKSB7XG4gICAgbGV0IHhSYXRpbyA9IHJlYWxEaW1zLncgLyB3dkRpbXMudztcbiAgICBsZXQgeVJhdGlvID0gcmVhbERpbXMuaCAvIHd2RGltcy5oO1xuICAgIGxldCBuZXdDb29yZHMgPSB7XG4gICAgICB4OiB3dlBvcy54ICsgTWF0aC5yb3VuZCh4UmF0aW8gKiBjb29yZHMueCksXG4gICAgICB5OiB3dlBvcy55ICsgTWF0aC5yb3VuZCh5UmF0aW8gKiBjb29yZHMueSksXG4gICAgfTtcblxuICAgIC8vIGFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgY29vcmRpbmF0ZXMsIHNpbmNlIGl0IGlzIHNvbWV0aW1lcyBicm9rZW5cbiAgICAvLyAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvOTE1OVxuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB3dlBvczogJHtKU09OLnN0cmluZ2lmeSh3dlBvcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHhSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh4UmF0aW8pfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgbG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgICAgICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy93ZWIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
712
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiVklTSUJMRSIsIklOVklTSUJMRSIsIkRFVEVDVCIsIlZJU0lCSUxJVElFUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50cyIsInJhd0VsZW1lbnRzIiwiaXNBcnJheSIsImlzUGxhaW5PYmplY3QiLCJjYWNoZUVsZW1lbnQiLCJlbElkIiwidW53cmFwRWxlbWVudCIsImNhY2hlSWQiLCJpbmNsdWRlcyIsInV1aWRWNCIsIndlYkVsZW1lbnRzQ2FjaGUiLCJzZXQiLCJ3cmFwRWxlbWVudCIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwic2l6ZSIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImNsaWNrV2ViQ29vcmRzIiwiY29vcmRzIiwidHJhbnNsYXRlV2ViQ29vcmRzIiwiY3VyV2ViQ29vcmRzIiwiY2xpY2tDb29yZHMiLCJhcmdzIiwiYWx3YXlzRGVmYXVsdEZyYW1lIiwiZnJhbWVzIiwicHJvbWlzZSIsIndhaXRGb3JBdG9tIiwiZXhlY3V0ZUF0b21Bc3luYyIsInJlc3BvbnNlVXJsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJhc3luY1Byb21pc2UiLCJlbE9ySWQiLCJoYXMiLCJTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciIsIkVMRU1FTlQiLCJnZXQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsImFyZyIsImdldEVsZW1lbnRJZCIsImhhc1ZhbHVlIiwiZ2V0U2FmYXJpSXNJcGhvbmUiLCJtZW1vaXplIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsImRldmljZSIsImdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0Iiwid3ZQb3MiLCJyZWFsRGltcyIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJpc0lwaG9uZSIsImlzTm90Y2hlZCIsIm9yaWVudGF0aW9uIiwibm90Y2hPZmZzZXQiLCJjb21wYXJlVmVyc2lvbnMiLCJvcHRzIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTY3JvbGxlZCIsImNvbnRleHRzQW5kVmlld3MiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidGFicyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCIsInkiLCJvZmZzZXQiLCJiYW5uZXJzIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwidGFwV2ViRWxlbWVudE5hdGl2ZWx5IiwiZHJpdmVyIiwidGV4dCIsImVscyIsInJlY3QiLCJwcm94eUNvbW1hbmQiLCJlbDIiLCJyZWN0MiIsIngiLCJNYXRoIiwicm91bmQiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJQcm9taXNlIiwiYWxsIiwiY29vcmRpbmF0ZXMiLCJwZXJmb3JtVG91Y2giLCJhY3Rpb24iLCJvcHRpb25zIiwid2VidmlldyIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFB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RWVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbl07XG5cbmNvbnN0IHsgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgfSA9IHV0aWw7XG5cbmNvbnN0IEFUT01fV0FJVF9USU1FT1VUX01TID0gMiAqIDYwMDAwO1xuY29uc3QgQVRPTV9JTklUSUFMX1dBSVRfTVMgPSAxMDAwO1xuXG5jb25zdCBPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCA9ICdhbGVydCc7XG5cbmNvbnN0IFZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBJTlZJU0lCTEUgPSAnaW52aXNpYmxlJztcbmNvbnN0IERFVEVDVCA9ICdkZXRlY3QnO1xuY29uc3QgVklTSUJJTElUSUVTID0gW1ZJU0lCTEUsIElOVklTSUJMRSwgREVURUNUXTtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50SWRlbnRpZmllciAoaWQpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGlkKSAmJiAhXy5pc051bWJlcihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoaWQpICYmIF8uaXNFbXB0eShpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNOdW1iZXIoaWQpICYmIGlzTmFOKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY29tbWFuZHMuc2V0RnJhbWUgPSBhc3luYyBmdW5jdGlvbiBzZXRGcmFtZSAoZnJhbWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBpZiAoXy5pc051bGwoZnJhbWUpKSB7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICBsb2cuZGVidWcoJ0xlYXZpbmcgd2ViIGZyYW1lIGFuZCBnb2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChmcmFtZSkpIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChmcmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfZnJhbWVfd2luZG93JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRDc3NQcm9wZXJ0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldENzc1Byb3BlcnR5IChwcm9wZXJ0eU5hbWUsIGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3ZhbHVlX29mX2Nzc19wcm9wZXJ0eScsIFthdG9tc0VsZW1lbnQsIHByb3BlcnR5TmFtZV0pO1xufTtcblxuY29tbWFuZHMuc3VibWl0ID0gYXN5bmMgZnVuY3Rpb24gc3VibWl0IChlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnc3VibWl0JywgW2F0b21zRWxlbWVudF0pO1xufTtcblxuY29tbWFuZHMucmVmcmVzaCA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2ggKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3JlZnJlc2gnLCBbXSk7XG59O1xuXG5jb21tYW5kcy5nZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBnZXRVcmwgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKCd3aW5kb3cubG9jYXRpb24uaHJlZicpO1xufTtcblxuY29tbWFuZHMudGl0bGUgPSBhc3luYyBmdW5jdGlvbiB0aXRsZSAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3RpdGxlJywgW10sIHRydWUpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBhbGwgY29va2llcycpO1xuXG4gIGxldCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmNvb2tpZSc7XG4gIGxldCBqc0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG5cbiAgbGV0IGNvb2tpZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjb29raWVVdGlscy5jcmVhdGVKV1BDb29raWUodW5kZWZpbmVkLCBqc0Nvb2tpZXMpKSkge1xuICAgICAgY29va2llcy5wdXNoKHtuYW1lLCB2YWx1ZX0pO1xuICAgIH1cbiAgICByZXR1cm4gY29va2llcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIGxvZy5kZWJ1ZyhgQ29va2llICcke2Nvb2tpZU5hbWV9JyBub3QgZm91bmQuIElnbm9yaW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWVOYW1lKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBkZWxldGVDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoY29va2llcy5sZW5ndGgpIHtcbiAgICBmb3IgKGxldCBjb29raWUgb2YgY29va2llcykge1xuICAgICAgYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZS5uYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5oZWxwZXJzLl9kZWxldGVDb29raWUgPSBhc3luYyBmdW5jdGlvbiBfZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9J2ApO1xuICBsZXQgd2ViQ29va2llID0gY29va2llVXRpbHMuZXhwaXJlQ29va2llKGNvb2tpZU5hbWUsIHtwYXRoOiAnLyd9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KHdlYkNvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnRzID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50cyAocmF3RWxlbWVudHMpIHtcbiAgaWYgKCEoXy5pc0FycmF5KHJhd0VsZW1lbnRzKSB8fCBfLmlzUGxhaW5PYmplY3QocmF3RWxlbWVudHMpKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBXZWIgZWxlbWVudCBpZGVudGlmaWVycyBjYW5ub3QgYmUgcGFyc2VkIGZyb20gYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShyYXdFbGVtZW50cykpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVFbGVtZW50ID0gKGVsKSA9PiB7XG4gICAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIoZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBUaGUgd2ViIGVsZW1lbnQgaWRlbnRpZmllciAke0pTT04uc3RyaW5naWZ5KGVsSWQpfSBjYW5ub3QgYmUgcGFyc2VkYCk7XG4gICAgfVxuICAgIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gICAgLy8gV2UgYXNzdW1lIGl0IGlzIHNhZmUgdG8gdXNlIHRoZXNlIHRvIGlkZW50aWZ5IGNhY2hlZCBlbGVtZW50c1xuICAgIGNvbnN0IGNhY2hlSWQgPSBfLmluY2x1ZGVzKGVsSWQsICc6JykgPyBlbElkIDogdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICAgIHJldHVybiB1dGlsLndyYXBFbGVtZW50KGNhY2hlSWQpO1xuICB9O1xuXG4gIHJldHVybiBfLmlzQXJyYXkocmF3RWxlbWVudHMpID8gcmF3RWxlbWVudHMubWFwKGNhY2hlRWxlbWVudCkgOiBjYWNoZUVsZW1lbnQocmF3RWxlbWVudHMpO1xufTtcblxuZXh0ZW5zaW9ucy5maW5kV2ViRWxlbWVudE9yRWxlbWVudHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kV2ViRWxlbWVudE9yRWxlbWVudHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbWFueSwgY3R4KSB7XG4gIGNvbnN0IGNvbnRleHRFbGVtZW50ID0gXy5pc05pbChjdHgpID8gbnVsbCA6IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGN0eCk7XG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGBmaW5kX2VsZW1lbnQke21hbnkgPyAncycgOiAnJ31gLCBbc3RyYXRlZ3ksIHNlbGVjdG9yLCBjb250ZXh0RWxlbWVudF0pO1xuICAgIHJldHVybiAhXy5pc051bGwoZWxlbWVudCk7XG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRGb3JDb25kaXRpb24oZG9GaW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICYmIF8uaXNGdW5jdGlvbihlcnIubWVzc2FnZS5tYXRjaCkgJiYgZXJyLm1lc3NhZ2UubWF0Y2goL0NvbmRpdGlvbiB1bm1ldC8pKSB7XG4gICAgICAvLyBjb25kaXRpb24gd2FzIG5vdCBtZXQgc2V0dGluZyByZXMgdG8gZW1wdHkgYXJyYXlcbiAgICAgIGVsZW1lbnQgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbiAgfVxuICBpZiAoIWVsZW1lbnQgfHwgXy5zaXplKGVsZW1lbnQpID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja1dlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrV2ViQ29vcmRzICgpIHtcbiAgbGV0IGNvb3JkcyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlV2ViQ29vcmRzKHRoaXMuY3VyV2ViQ29vcmRzKTtcbiAgYXdhaXQgdGhpcy5jbGlja0Nvb3Jkcyhjb29yZHMpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tIChhdG9tLCBhcmdzLCBhbHdheXNEZWZhdWx0RnJhbWUgPSBmYWxzZSkge1xuICBsZXQgZnJhbWVzID0gYWx3YXlzRGVmYXVsdEZyYW1lID09PSB0cnVlID8gW10gOiB0aGlzLmN1cldlYkZyYW1lcztcbiAgbGV0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b21Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIHJlc3BvbnNlVXJsKSB7XG4gIC8vIHNhdmUgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBtZXRob2RzIG9mIHRoZSBwcm9taXNlIHRvIGJlIHdhaXRlZCBmb3JcbiAgbGV0IHByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5hc3luY1Byb21pc2UgPSB7cmVzb2x2ZSwgcmVqZWN0fTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoYXRvbSwgYXJncywgdGhpcy5jdXJXZWJGcmFtZXMsIHJlc3BvbnNlVXJsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmdldEF0b21zRWxlbWVudCA9IGZ1bmN0aW9uIGdldEF0b21zRWxlbWVudCAoZWxPcklkKSB7XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWxPcklkKTtcbiAgaWYgKCF0aGlzLndlYkVsZW1lbnRzQ2FjaGUuaGFzKGVsSWQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcigpO1xuICB9XG4gIHJldHVybiB7RUxFTUVOVDogdGhpcy53ZWJFbGVtZW50c0NhY2hlLmdldChlbElkKX07XG59O1xuXG5oZWxwZXJzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zID0gZnVuY3Rpb24gY29udmVydEVsZW1lbnRzRm9yQXRvbXMgKGFyZ3MgPSBbXSkge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChhcmcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdG9tc0VsZW1lbnQoYXJnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNBcnJheShhcmcpID8gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmcpIDogYXJnO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0RWxlbWVudElkID0gZnVuY3Rpb24gZ2V0RWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LkVMRU1FTlQgfHwgZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl07XG59O1xuXG5oZWxwZXJzLmhhc0VsZW1lbnRJZCA9IGZ1bmN0aW9uIGhhc0VsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gdXRpbC5oYXNWYWx1ZShlbGVtZW50KSAmJiAodXRpbC5oYXNWYWx1ZShlbGVtZW50LkVMRU1FTlQpIHx8IHV0aWwuaGFzVmFsdWUoZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl0pKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNJcGhvbmUgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICByZXR1cm4gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn0pO1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzTm90Y2hlZCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSBkaW1lbnNpb25zLiBBc3N1bWluZyB0aGUgZGV2aWNlIGlzIG5vdCBub3RjaGVkYCk7XG4gICAgbG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5XG4gIH0gPSBhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGxldCB0YWJCYXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSk7XG4gIGxldCBiYW5uZXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5KTtcbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXModGFiQmFyVmlzaWJpbGl0eSkpIHtcbiAgICB0YWJCYXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKGJhbm5lclZpc2liaWxpdHkpKSB7XG4gICAgYmFubmVyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuICBjb25zdCBpc05vdGNoZWQgPSBpc0lwaG9uZSAmJiBhd2FpdCB0aGlzLmdldFNhZmFyaUlzTm90Y2hlZCgpO1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uID0gcmVhbERpbXMuaCA+IHJlYWxEaW1zLncgPyAnUE9SVFJBSVQnIDogJ0xBTkRTQ0FQRSc7XG5cbiAgY29uc3Qgbm90Y2hPZmZzZXQgPSBpc05vdGNoZWRcbiAgICA/IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc9JywgJzEzLjAnKVxuICAgICAgPyBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzXG4gICAgICA6IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NcbiAgICA6IDA7XG5cbiAgY29uc3QgaXNTY3JvbGxlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAwJyk7XG4gIGlmIChpc1Njcm9sbGVkKSB7XG4gICAgdG9wT2Zmc2V0ID0gSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUICsgbm90Y2hPZmZzZXQ7XG5cbiAgICBpZiAoaXNOb3RjaGVkKSB7XG4gICAgICB0b3BPZmZzZXQgLT0gSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpUGhvbmUgaXMgbGFuZHNjYXBlIHRoZW4gdGhlcmUgaXMgbm8gdG9wIGJhclxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgJiYgaXNJcGhvbmUpIHtcbiAgICAgIHRvcE9mZnNldCA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzSXBob25lKSB7XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdQT1JUUkFJVCcpIHtcbiAgICAgICAgLy8gVGhlIGJvdHRvbSBiYXIgaXMgb25seSB2aXNpYmxlIHdoZW4gcG9ydHJhaXRcbiAgICAgICAgYm90dG9tT2Zmc2V0ID0gSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wT2Zmc2V0ID0gSVBIT05FX0xBTkRTQ0FQRV9UT1BfQkFSX0hFSUdIVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnIHx8ICFpc0lwaG9uZSkge1xuICAgICAgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAgICAgLy8gVGFicyBvbmx5IGFwcGVhciBpZiB0aGUgZGV2aWNlIGlzIGxhbmRzY2FwZSBvciBpZiBpdCdzIGFuIGlQYWQgc28gd2Ugb25seSBjaGVjayB2aXNpYmlsaXR5IGluIHRoaXMgY2FzZVxuICAgICAgICAvLyBBc3N1bWUgdGhhdCBlYWNoIHRhYiBiYXIgaXMgYSBXZWJWaWV3XG4gICAgICAgIGNvbnN0IGNvbnRleHRzQW5kVmlld3MgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzQW5kVmlld3MoKTtcbiAgICAgICAgY29uc3QgdGFicyA9IGNvbnRleHRzQW5kVmlld3MuZmlsdGVyKChjdHgpID0+IGN0eC5pZC5zdGFydHNXaXRoKCdXRUJWSUVXXycpKTtcblxuICAgICAgICBpZiAodGFicy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgbG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBsb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG5cbiAgY29uc3QgW3NpemUsIGNvb3JkaW5hdGVzXSA9IGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHNpemU7XG4gIGxldCB7eCwgeX0gPSBjb29yZGluYXRlcztcbiAgeCArPSB3aWR0aCAvIDI7XG4gIHkgKz0gaGVpZ2h0IC8gMjtcblxuICB0aGlzLmN1cldlYkNvb3JkcyA9IHt4LCB5fTtcbiAgYXdhaXQgdGhpcy5jbGlja1dlYkNvb3JkcygpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrQ29vcmRzIChjb29yZHMpIHtcbiAgYXdhaXQgdGhpcy5wZXJmb3JtVG91Y2goW1xuICAgIHtcbiAgICAgIGFjdGlvbjogJ3RhcCcsXG4gICAgICBvcHRpb25zOiBjb29yZHMsXG4gICAgfSxcbiAgXSk7XG59O1xuXG5leHRlbnNpb25zLnRyYW5zbGF0ZVdlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZVdlYkNvb3JkcyAoY29vcmRzKSB7XG4gIGxvZy5kZWJ1ZyhgVHJhbnNsYXRpbmcgY29vcmRpbmF0ZXMgKCR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0pIHRvIHdlYiBjb29yZGluYXRlc2ApO1xuXG4gIC8vIGFic29sdXRpemUgd2ViIGNvb3Jkc1xuICBsZXQgd2VidmlldztcbiAgdHJ5IHtcbiAgICB3ZWJ2aWV3ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCAxMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVdlYlZpZXcnLCBmYWxzZSkpO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgaWYgKCF3ZWJ2aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBXZWJWaWV3IGZvdW5kLiBVbmFibGUgdG8gdHJhbnNsYXRlIHdlYiBjb29yZGluYXRlcyBmb3IgbmF0aXZlIHdlYiB0YXAuYCk7XG4gIH1cblxuICB3ZWJ2aWV3ID0gdXRpbC51bndyYXBFbGVtZW50KHdlYnZpZXcpO1xuXG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt3ZWJ2aWV3fS9yZWN0YCwgJ0dFVCcpO1xuICBjb25zdCB3dlBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gIGNvbnN0IHJlYWxEaW1zID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICBjb25zdCBjbWQgPSAnKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt3OiB3aW5kb3cuaW5uZXJXaWR0aCwgaDogd2luZG93LmlubmVySGVpZ2h0fTsgfSkoKSc7XG4gIGNvbnN0IHd2RGltcyA9IGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoY21kKTtcblxuICAvLyBrZWVwIHRyYWNrIG9mIGltcGxpY2l0IHdhaXQsIGFuZCBzZXQgbG9jYWxseSB0byAwXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDk4OFxuICBjb25zdCBpbXBsaWNpdFdhaXRNcyA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KDApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQod3ZQb3MsIHJlYWxEaW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdChpbXBsaWNpdFdhaXRNcyk7XG4gIH1cblxuICBpZiAod3ZEaW1zICYmIHJlYWxEaW1zICYmIHd2UG9zKSB7XG4gICAgbGV0IHhSYXRpbyA9IHJlYWxEaW1zLncgLyB3dkRpbXMudztcbiAgICBsZXQgeVJhdGlvID0gcmVhbERpbXMuaCAvIHd2RGltcy5oO1xuICAgIGxldCBuZXdDb29yZHMgPSB7XG4gICAgICB4OiB3dlBvcy54ICsgTWF0aC5yb3VuZCh4UmF0aW8gKiBjb29yZHMueCksXG4gICAgICB5OiB3dlBvcy55ICsgTWF0aC5yb3VuZCh5UmF0aW8gKiBjb29yZHMueSksXG4gICAgfTtcblxuICAgIC8vIGFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgY29vcmRpbmF0ZXMsIHNpbmNlIGl0IGlzIHNvbWV0aW1lcyBicm9rZW5cbiAgICAvLyAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvOTE1OVxuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB3dlBvczogJHtKU09OLnN0cmluZ2lmeSh3dlBvcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHhSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh4UmF0aW8pfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgbG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgICAgICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy93ZWIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==