appium-espresso-driver 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,7 +26,7 @@ On top of standard Appium requirements Espresso driver also expects the followin
26
26
  - Windows, Linux and macOS are supported as hosts
27
27
  - [Android SDK Platform tools](https://developer.android.com/studio/releases/platform-tools) must be installed. [Android Studio IDE](https://developer.android.com/studio) also provides a convenient UI to install and manage the tools.
28
28
  - ANDROID_HOME or ANDROID_SDK_ROOT [environment variable](https://developer.android.com/studio/command-line/variables) must be set
29
- - Java JDK must be installed and [JAVA_HOME](https://www.baeldung.com/java-home-on-windows-7-8-10-mac-os-x-linux) environment variable must be set. Android SDK below API 30 requires Java 8. Android SDK 30 and above requires Java 9 or newer.
29
+ - Java JDK must be installed and [JAVA_HOME](https://www.baeldung.com/java-home-on-windows-7-8-10-mac-os-x-linux) environment variable must be set. Java major version must be 11 or newer.
30
30
  - [Emulator](https://developer.android.com/studio/run/managing-avds) platform image must be installed if you plan to run your tests on it. [Android Studio IDE](https://developer.android.com/studio) also provides a convenient UI to install and manage emulators.
31
31
  - Real Android devices must have [USB debugging enabled](https://developer.android.com/studio/debug/dev-options) and should be visible as `online` in `adb devices -l` output.
32
32
  - The minimum version of Android API must be 5.0 (API level 21) (6.0 is recommended as version 5 has some known compatibility issues).
@@ -65,7 +65,7 @@ appium:showGradleLog | Whether to include Gradle log to the regular server logs
65
65
 
66
66
  Capability Name | Description
67
67
  --- | ---
68
- appium:app | Full path to the application to be tested (the app must be located on the same machine where the server is running). Only `.apk` application extension is supported. `.aab` files need to be [converted](https://stackoverflow.com/questions/53040047/generate-apk-file-from-aab-file-android-app-bundle) to `.apk` format using [bundletool](https://developer.android.com/studio/command-line/bundletool) first in order to be used with this driver. Could also be an URL to a remote location. If neither of the `app` or `appPackage` capabilities are provided then the driver will fail to start a session. Also, if `app` capability is not provided it is expected that the app under test is already installed on the device under test and `noReset` is equal to `true`.
68
+ appium:app | Full path to the application to be tested (the app must be located on the same machine where the server is running). The `.apk` application extension is supported. Since driver version 2.1.0 `.aab` files are supported as well (they get converted to `.apk` format automatically if [bundletool.jar](https://github.com/google/bundletool/releases) could be found in your PATH). For older driver versions `.aab` files need to be [converted](https://stackoverflow.com/questions/53040047/generate-apk-file-from-aab-file-android-app-bundle) manually to `.apk` format using [bundletool](https://developer.android.com/studio/command-line/bundletool) first. Could also be an URL to a remote location. If neither of the `app` or `appPackage` capabilities are provided then the driver will fail to start a session. Also, if `app` capability is not provided it is expected that the app under test is already installed on the device under test and `noReset` is equal to `true`.
69
69
  appium:appPackage | Application package identifier to be started. If not provided then Espresso will try to detect it automatically from the package provided by the `app` capability. Read [How To Troubleshoot Activities Startup](https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md) for more details
70
70
  appium:appActivity | Main application activity identifier. If not provided then Espresso will try to detect it automatically from the package provided by the `app` capability. Read [How To Troubleshoot Activities Startup](https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md) for more details
71
71
  appium:appWaitActivity | Identifier of the first activity that the application invokes. If not provided then equals to `appium:appActivity`. Read [How To Troubleshoot Activities Startup](https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md) for more details
@@ -40,7 +40,6 @@ const SYSTEM_PORT_RANGE = [8300, 8399];
40
40
  const DEVICE_PORT = 6791;
41
41
  const NO_PROXY = [['GET', new RegExp('^/session/(?!.*/)')], ['GET', new RegExp('^/session/[^/]+/appium/device/current_activity')], ['GET', new RegExp('^/session/[^/]+/appium/device/current_package')], ['GET', new RegExp('^/session/[^/]+/appium/device/display_density')], ['GET', new RegExp('^/session/[^/]+/appium/device/is_keyboard_shown')], ['GET', new RegExp('^/session/[^/]+/appium/device/system_bars')], ['GET', new RegExp('^/session/[^/]+/appium/device/system_time')], ['GET', new RegExp('^/session/[^/]+/appium/settings')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/contexts')], ['GET', new RegExp('^/session/[^/]+/ime/[^/]+')], ['GET', new RegExp('^/session/[^/]+/network_connection')], ['GET', new RegExp('^/session/[^/]+/timeouts')], ['GET', new RegExp('^/session/[^/]+/url')], ['POST', new RegExp('^/session/[^/]+/appium/app/background')], ['POST', new RegExp('^/session/[^/]+/appium/app/close')], ['POST', new RegExp('^/session/[^/]+/appium/app/launch')], ['POST', new RegExp('^/session/[^/]+/appium/app/reset')], ['POST', new RegExp('^/session/[^/]+/appium/app/strings')], ['POST', new RegExp('^/session/[^/]+/appium/compare_images')], ['POST', new RegExp('^/session/[^/]+/appium/device/activate_app')], ['POST', new RegExp('^/session/[^/]+/appium/device/app_installed')], ['POST', new RegExp('^/session/[^/]+/appium/device/app_state')], ['POST', new RegExp('^/session/[^/]+/appium/device/finger_print')], ['POST', new RegExp('^/session/[^/]+/appium/device/get_clipboard')], ['POST', new RegExp('^/session/[^/]+/appium/device/install_app')], ['POST', new RegExp('^/session/[^/]+/appium/device/is_locked')], ['POST', new RegExp('^/session/[^/]+/appium/device/lock')], ['POST', new RegExp('^/session/[^/]+/appium/device/pull_file')], ['POST', new RegExp('^/session/[^/]+/appium/device/pull_folder')], ['POST', new RegExp('^/session/[^/]+/appium/device/push_file')], ['POST', new RegExp('^/session/[^/]+/appium/device/remove_app')], ['POST', new RegExp('^/session/[^/]+/appium/device/start_activity')], ['POST', new RegExp('^/session/[^/]+/appium/device/terminate_app')], ['POST', new RegExp('^/session/[^/]+/appium/device/unlock')], ['POST', new RegExp('^/session/[^/]+/appium/getPerformanceData')], ['POST', new RegExp('^/session/[^/]+/appium/performanceData/types')], ['POST', new RegExp('^/session/[^/]+/appium/settings')], ['POST', new RegExp('^/session/[^/]+/appium/execute_driver')], ['POST', new RegExp('^/session/[^/]+/appium/start_recording_screen')], ['POST', new RegExp('^/session/[^/]+/appium/stop_recording_screen')], ['POST', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/execute')], ['POST', new RegExp('^/session/[^/]+/execute/async')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['POST', new RegExp('^/session/[^/]+/execute_async')], ['POST', new RegExp('^/session/[^/]+/ime/[^/]+')], ['POST', new RegExp('^/session/[^/]+/location')], ['POST', new RegExp('^/session/[^/]+/network_connection')], ['POST', new RegExp('^/session/[^/]+/timeouts')], ['POST', new RegExp('^/session/[^/]+/url')], ['GET', new RegExp('^/session/[^/]+/log/types')], ['POST', new RegExp('^/session/[^/]+/log')], ['GET', new RegExp('^/session/[^/]+/se/log/types')], ['POST', new RegExp('^/session/[^/]+/se/log')]];
42
42
  const CHROME_NO_PROXY = [['GET', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/element/[^/]+/rect')], ['GET', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/execute$')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['GET', new RegExp('^/session/[^/]+/log/types')], ['POST', new RegExp('^/session/[^/]+/log')], ['GET', new RegExp('^/session/[^/]+/se/log/types')], ['POST', new RegExp('^/session/[^/]+/se/log')]];
43
- const APP_EXTENSION = '.apk';
44
43
 
45
44
  class EspressoDriver extends _baseDriver.BaseDriver {
46
45
  constructor(opts = {}, shouldValidateCaps = true) {
@@ -85,12 +84,11 @@ class EspressoDriver extends _baseDriver.BaseDriver {
85
84
 
86
85
  if (this.isChromeSession) {
87
86
  if (this.opts.app) {
88
- _logger.default.warn(`
89
- 'browserName' capability will be ignored.
90
- Chrome browser cannot be run in Espresso sessions because Espresso automation doesn't have permission to access Chrome.
91
- `);
87
+ _logger.default.warn(`'browserName' capability will be ignored`);
88
+
89
+ _logger.default.warn(`Chrome browser cannot be run in Espresso sessions because Espresso automation doesn't ` + `have permission to access Chrome`);
92
90
  } else {
93
- _logger.default.errorAndThrow(`Chrome browser sessions cannot be run in Espresso because Espresso automation doesn't have permission to access Chrome`);
91
+ _logger.default.errorAndThrow(`Chrome browser sessions cannot be run in Espresso because Espresso ` + `automation doesn't have permission to access Chrome`);
94
92
  }
95
93
  }
96
94
 
@@ -99,22 +97,34 @@ class EspressoDriver extends _baseDriver.BaseDriver {
99
97
  this.addWipeDataToAvdArgs();
100
98
  }
101
99
 
100
+ this.opts.systemPort = this.opts.systemPort || (await (0, _portscanner.findAPortNotInUse)(SYSTEM_PORT_RANGE[0], SYSTEM_PORT_RANGE[1]));
101
+ this.opts.adbPort = this.opts.adbPort || _appiumAdb.DEFAULT_ADB_PORT;
102
+ const {
103
+ udid,
104
+ emPort
105
+ } = await helpers.getDeviceInfoFromCaps(this.opts);
106
+ this.opts.udid = udid;
107
+ this.opts.emPort = emPort;
108
+ this.adb = await _appiumAndroidDriver.androidHelpers.createADB(this.opts);
109
+
102
110
  if (this.opts.app) {
103
- this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);
104
- await this.checkAppPresent();
111
+ this.opts.app = await this.helpers.configureApp(this.opts.app, {
112
+ onPostProcess: this.onPostConfigureApp.bind(this),
113
+ supportedExtensions: ['.apk', '.aab']
114
+ });
105
115
  } else if (this.appOnDevice) {
106
116
  _logger.default.info(`App file was not listed, instead we're going to run ` + `${this.opts.appPackage} directly on the device`);
107
117
 
108
- await this.checkPackagePresent();
118
+ if (!(await this.adb.isAppInstalled(this.opts.appPackage))) {
119
+ _logger.default.errorAndThrow(`Could not find the package '${this.opts.appPackage}' ` + `installed on the device`);
120
+ }
109
121
  }
110
122
 
111
- this.opts.systemPort = this.opts.systemPort || (await (0, _portscanner.findAPortNotInUse)(SYSTEM_PORT_RANGE[0], SYSTEM_PORT_RANGE[1]));
112
- this.opts.adbPort = this.opts.adbPort || _appiumAdb.DEFAULT_ADB_PORT;
113
123
  await this.startEspressoSession();
114
124
  return [sessionId, caps];
115
125
  } catch (e) {
116
126
  await this.deleteSession();
117
- e.message += '. Check https://github.com/appium/appium-espresso-driver#troubleshooting regarding advanced session startup troubleshooting.';
127
+ e.message += `${_lodash.default.endsWith(e.message, '.') ? '' : '.'} Check ` + 'https://github.com/appium/appium-espresso-driver#troubleshooting ' + 'regarding advanced session startup troubleshooting.';
118
128
 
119
129
  if ((0, _baseDriver.isErrorType)(e, _baseDriver.errors.SessionNotCreatedError)) {
120
130
  throw e;
@@ -126,6 +136,53 @@ class EspressoDriver extends _baseDriver.BaseDriver {
126
136
  }
127
137
  }
128
138
 
139
+ async onPostConfigureApp({
140
+ cachedAppInfo,
141
+ isUrl,
142
+ appPath
143
+ }) {
144
+ const presignApp = async appLocation => {
145
+ if (this.opts.noSign) {
146
+ _logger.default.info('Skipping application signing because noSign capability is set to true. ' + 'Having the application under test with improper signature/non-signed will cause ' + 'Espresso automation startup failure.');
147
+ } else if (!(await this.adb.checkApkCert(appLocation, this.opts.appPackage))) {
148
+ await this.adb.sign(appLocation, this.opts.appPackage);
149
+ }
150
+ };
151
+
152
+ const isApk = _lodash.default.endsWith(_lodash.default.toLower(appPath), '.apk');
153
+
154
+ const shouldResultAppPathBeCached = !isApk || isApk && isUrl;
155
+ let pathInCache = null;
156
+ let isResultAppPathAlreadyCached = false;
157
+
158
+ if (_lodash.default.isPlainObject(cachedAppInfo)) {
159
+ const packageHash = await _support.fs.hash(appPath);
160
+
161
+ if (packageHash === cachedAppInfo.packageHash && (await _support.fs.exists(cachedAppInfo.fullPath))) {
162
+ isResultAppPathAlreadyCached = true;
163
+ pathInCache = cachedAppInfo.fullPath;
164
+ }
165
+ }
166
+
167
+ if (!isResultAppPathAlreadyCached) {
168
+ if (shouldResultAppPathBeCached) {
169
+ pathInCache = isApk ? appPath : await this.adb.extractUniversalApk(appPath);
170
+
171
+ if (!isApk && isUrl) {
172
+ await _support.fs.rimraf(appPath);
173
+ }
174
+
175
+ await presignApp(pathInCache);
176
+ } else if (isApk) {
177
+ await presignApp(appPath);
178
+ }
179
+ }
180
+
181
+ return shouldResultAppPathBeCached ? {
182
+ appPath: pathInCache
183
+ } : false;
184
+ }
185
+
129
186
  get driverData() {
130
187
  return {};
131
188
  }
@@ -162,14 +219,6 @@ class EspressoDriver extends _baseDriver.BaseDriver {
162
219
  async startEspressoSession() {
163
220
  _logger.default.info(`EspressoDriver version: ${_package.version}`);
164
221
 
165
- let {
166
- udid,
167
- emPort
168
- } = await helpers.getDeviceInfoFromCaps(this.opts);
169
- this.opts.udid = udid;
170
- this.opts.emPort = emPort;
171
- this.adb = await _appiumAndroidDriver.androidHelpers.createADB(this.opts);
172
-
173
222
  if ((await this.adb.getApiLevel()) >= 28) {
174
223
  _logger.default.warn('Relaxing hidden api policy');
175
224
 
@@ -323,12 +372,6 @@ class EspressoDriver extends _baseDriver.BaseDriver {
323
372
  }
324
373
 
325
374
  if (this.opts.app) {
326
- if (this.opts.noSign) {
327
- _logger.default.info('Skipping application signing because noSign capability is set to true. ' + 'Having the application under test with improper signature/non-signed will cause ' + 'Espresso automation startup failure.');
328
- } else if (!(await this.adb.checkApkCert(this.opts.app, this.opts.appPackage))) {
329
- await this.adb.sign(this.opts.app, this.opts.appPackage);
330
- }
331
-
332
375
  await helpers.installApk(this.adb, this.opts);
333
376
  }
334
377
 
@@ -420,14 +463,6 @@ class EspressoDriver extends _baseDriver.BaseDriver {
420
463
  }
421
464
  }
422
465
 
423
- async checkAppPresent() {
424
- _logger.default.debug('Checking whether app is actually present');
425
-
426
- if (!(await _support.fs.exists(this.opts.app))) {
427
- _logger.default.errorAndThrow(`Could not find app apk at '${this.opts.app}'`);
428
- }
429
- }
430
-
431
466
  async onSettingsUpdate() {}
432
467
 
433
468
  proxyActive(sessionId) {
@@ -455,6 +490,10 @@ class EspressoDriver extends _baseDriver.BaseDriver {
455
490
  return helpers.isChromeBrowser(this.opts.browserName);
456
491
  }
457
492
 
493
+ get appOnDevice() {
494
+ return !this.opts.app && this.helpers.isPackageOrBundle(this.opts.appPackage);
495
+ }
496
+
458
497
  }
459
498
 
460
499
  exports.EspressoDriver = EspressoDriver;
@@ -473,4 +512,4 @@ var _default = EspressoDriver;
473
512
  exports.default = _default;require('source-map-support').install();
474
513
 
475
514
 
476
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiU1lTVEVNX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiQVBQX0VYVEVOU0lPTiIsIkVzcHJlc3NvRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNoZWxsIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJlc3ByZXNzbyIsImp3cFByb3h5QWN0aXZlIiwiZGVmYXVsdElNRSIsImp3cFByb3h5QXZvaWQiLCJhcGtTdHJpbmdzIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsImNhcHMiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsIk9iamVjdCIsImFzc2lnbiIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJkZWZhdWx0T3B0cyIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsIl8iLCJkZWZhdWx0cyIsImlzQ2hyb21lU2Vzc2lvbiIsImFwcCIsImxvZ2dlciIsIndhcm4iLCJlcnJvckFuZFRocm93IiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsImFkZFdpcGVEYXRhVG9BdmRBcmdzIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiYXBwUGFja2FnZSIsImNoZWNrUGFja2FnZVByZXNlbnQiLCJzeXN0ZW1Qb3J0Iiwic3RhcnRFc3ByZXNzb1Nlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsIm1lc3NhZ2UiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZXJyIiwic3RhY2siLCJkcml2ZXJEYXRhIiwiaXNFbXVsYXRvciIsImFkYiIsImF2ZCIsImRldmljZU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiYXZkQXJncyIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJ2ZXJzaW9uIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJhcHBJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsImluaXREZXZpY2UiLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJ3YXNBbmltYXRpb25FbmFibGVkIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdEVzcHJlc3NvU2VydmVyIiwiZGVidWciLCJmb3J3YXJkUG9ydCIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJpbml0QVVUIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsIkVzcHJlc3NvUnVubmVyIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZm9yY2VFc3ByZXNzb1JlYnVpbGQiLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2hvd0dyYWRsZUxvZyIsInNlcnZlckxhdW5jaFRpbWVvdXQiLCJlc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJURVNUX0FQS19QS0ciLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJzaWduIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsImlnbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiZm9yY2VTdG9wIiwic3RvcExvZ2NhdCIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwidW5kZWZpbmVkIiwicmVtb3ZlUG9ydEZvcndhcmQiLCJlcnJvciIsImZzIiwiZXhpc3RzIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJjbWQiLCJmbiIsInRvUGFpcnMiLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQSxNQUFNQSxPQUFPLEdBQUdDLG1DQUFoQjtBQUlBLE1BQU1DLGlCQUFpQixHQUFHLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FBMUI7QUFJQSxNQUFNQyxXQUFXLEdBQUcsSUFBcEI7QUFNQSxNQUFNQyxRQUFRLEdBQUcsQ0FDZixDQUFDLEtBQUQsRUFBUSxJQUFJQyxNQUFKLENBQVcsbUJBQVgsQ0FBUixDQURlLEVBRWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLGdEQUFYLENBQVIsQ0FGZSxFQUdmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywrQ0FBWCxDQUFSLENBSGUsRUFJZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBUixDQUplLEVBS2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLGlEQUFYLENBQVIsQ0FMZSxFQU1mLENB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RW1DLFFBQUYsQ0FBVyxDQUFDLG9CQUFELENBQVgsRUFBbUNrSCxHQUFuQyxDQUFMLEVBQThDO0FBQzVDaE0sSUFBQUEsY0FBYyxDQUFDbU0sU0FBZixDQUF5QkgsR0FBekIsSUFBZ0NDLEVBQWhDO0FBQ0Q7QUFDRjs7QUFHRCxLQUFLLElBQUksQ0FBQ0QsR0FBRCxFQUFNQyxFQUFOLENBQVQsSUFBc0J0SixnQkFBRXVKLE9BQUYsQ0FBVUUsaUJBQVYsQ0FBdEIsRUFBMkM7QUFDekNwTSxFQUFBQSxjQUFjLENBQUNtTSxTQUFmLENBQXlCSCxHQUF6QixJQUFnQ0MsRUFBaEM7QUFDRDs7ZUFHY2pNLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc0Vycm9yVHlwZSwgRGV2aWNlU2V0dGluZ3N9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgRXNwcmVzc29SdW5uZXIsIFRFU1RfQVBLX1BLRyB9IGZyb20gJy4vZXNwcmVzc28tcnVubmVyJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENhcENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi91dGlscyc7XG5cblxuLy8gVE9ETyBtZXJnZSBvdXIgb3duIGhlbHBlcnMgb250byB0aGlzIGxhdGVyXG5jb25zdCBoZWxwZXJzID0gYW5kcm9pZEhlbHBlcnM7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBFc3ByZXNzbyBIVFRQIHNlcnZlciBvbiB0aGUgZGV2aWNlXG5jb25zdCBTWVNURU1fUE9SVF9SQU5HRSA9IFs4MzAwLCA4Mzk5XTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBlc3ByZXNzbyBzZXJ2ZXIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsXG4vLyBmb3J3YXJkIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MTtcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBlc3ByZXNzbyBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBlc3ByZXNzbyBzZXJ2ZXIuXG4vLyBUT0RPOiBOZWVkIHRvIHNlZ3JlZ2F0ZSB0aGUgcGF0aHMgYmV0dGVyIHdheSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIHdoZXJldmVyIGFwcGxpY2FibGUuXG4vLyAoTm90IHNlZ3JlZ2F0aW5nIHJpZ2h0IGF3YXkgYmVjYXVzZSBtb3JlIHBhdGhzIHRvIGJlIGFkZGVkIGluIHRoZSBOT19QUk9YWSBsaXN0KVxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uLyg/IS4qLyknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9jdXJyZW50X3BhY2thZ2UnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZGlzcGxheV9kZW5zaXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2lzX2tleWJvYXJkX3Nob3duJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N5c3RlbV9iYXJzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N5c3RlbV90aW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvYmFja2dyb3VuZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvY2xvc2UnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2xhdW5jaCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvcmVzZXQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3N0cmluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vY29tcGFyZV9pbWFnZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FjdGl2YXRlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYXBwX2luc3RhbGxlZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYXBwX3N0YXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9maW5nZXJfcHJpbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2luc3RhbGxfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19sb2NrZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2xvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZmlsZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVsbF9mb2xkZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1c2hfZmlsZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcmVtb3ZlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3Rlcm1pbmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3VubG9jaycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9nZXRQZXJmb3JtYW5jZURhdGEnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vcGVyZm9ybWFuY2VEYXRhL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0YXJ0X3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RvcF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG5cbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1ldGhvZHMgYW5kIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBDaHJvbWVkcml2ZXIuXG5jb25zdCBDSFJPTUVfTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9yZWN0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG5cbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OID0gJy5hcGsnO1xuXG5cbmNsYXNzIEVzcHJlc3NvRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLmVzcHJlc3NvID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0SU1FID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcblxuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9OyAvLyBtYXAgb2YgbGFuZ3VhZ2UgLT4gc3RyaW5ncyBvYmpcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHt9LCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jYXBzKVxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgXG4gICAgICAgICAgICAnYnJvd3Nlck5hbWUnIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkLlxuICAgICAgICAgICAgQ2hyb21lIGJyb3dzZXIgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBzZXNzaW9ucyBiZWNhdXNlIEVzcHJlc3NvIGF1dG9tYXRpb24gZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZS5cbiAgICAgICAgICBgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ2hyb21lIGJyb3dzZXIgc2Vzc2lvbnMgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBiZWNhdXNlIEVzcHJlc3NvIGF1dG9tYXRpb24gZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgICAgdGhpcy5hZGRXaXBlRGF0YVRvQXZkQXJncygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIEFQUF9FWFRFTlNJT04pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICBsb2dnZXIuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgICAgYCR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VQcmVzZW50KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0cy5zeXN0ZW1Qb3J0ID0gdGhpcy5vcHRzLnN5c3RlbVBvcnQgfHwgYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2UoU1lTVEVNX1BPUlRfUkFOR0VbMF0sIFNZU1RFTV9QT1JUX1JBTkdFWzFdKTtcbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRFc3ByZXNzb1Nlc3Npb24oKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIGUubWVzc2FnZSArPSAnLiBDaGVjayBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIjdHJvdWJsZXNob290aW5nIHJlZ2FyZGluZyBhZHZhbmNlZCBzZXNzaW9uIHN0YXJ0dXAgdHJvdWJsZXNob290aW5nLic7XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnIgPSBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIGVyci5zdGFjayA9IGUuc3RhY2s7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbGUgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMi1kcml2ZXI7IGNvbnNvbGlkYXRlXG4gIGFkZFdpcGVEYXRhVG9BdmRBcmdzICgpIHtcbiAgICBpZiAoIXRoaXMub3B0cy5hdmRBcmdzKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyA9ICctd2lwZS1kYXRhJztcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdHMuYXZkQXJncy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIHRoaXMub3B0cy5hdmRBcmdzICs9ICcgLXdpcGUtZGF0YSc7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyBtdWNoIG9mIHRoaXMgbG9naWMgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICBhc3luYyBzdGFydEVzcHJlc3NvU2Vzc2lvbiAoKSB7XG4gICAgbG9nZ2VyLmluZm8oYEVzcHJlc3NvRHJpdmVyIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcblxuICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgLy8gQURCIGluc3RhbmNlXG4gICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tYW5kcm9pZC1kcml2ZXIvcHVsbC80NjEgd2hhdCBoYXBwZW5zIGlmIHRoZXIgaXMgbm8gc2V0SGlkZGVuQXBpUG9saWN5IGZvciBBbmRyb2lkIFArXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICBsb2dnZXIud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGxldCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcEluZm8gPSB0aGlzLm9wdHM7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIvaXNzdWVzLzcyXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gdHVybiBvZmYgYW5pbWF0aW9uczogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBtb2RpZmllZCBlc3ByZXNzbyBzZXJ2ZXIgZXRjXG4gICAgdGhpcy5pbml0RXNwcmVzc29TZXJ2ZXIoKTtcbiAgICAvLyBGdXJ0aGVyIHByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBlc3ByZXNzbyBwb3J0XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3J3YXJkaW5nIEVzcHJlc3NvIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvICR7dGhpcy5vcHRzLnN5c3RlbVBvcnR9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQsIERFVklDRV9QT1JUKTtcblxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIC8vIHByZXBhcmUgb3VyIGFjdHVhbCBBVVQsIGdldCBpdCBvbiB0aGUgZGV2aWNlLCBldGMuLi5cbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IGFwcEluZm8uYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSA9IGFwcEluZm8uYXBwV2FpdFBhY2thZ2UgfHwgYXBwSW5mby5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEluZm8uYXBwQWN0aXZpdHkgfHwgdGhpcy5jYXBzLmFwcEFjdGl2aXR5LFxuICAgICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBlc3ByZXNzbyBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy5lc3ByZXNzby5zdGFydFNlc3Npb24odGhpcy5jYXBzKTtcbiAgICBpZiAodGhpcy5jYXBzLmF1dG9MYXVuY2ggPT09IGZhbHNlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgTm90IHdhaXRpbmcgZm9yIHRoZSBhcHBsaWNhdGlvbiBhY3Rpdml0eSB0byBzdGFydCBiZWNhdXNlICdhdXRvTGF1bmNoJyBpcyBkaXNhYmxlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkodGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlLCB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5LCB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uKTtcbiAgICB9XG4gICAgLy8gaWYgd2Ugd2FudCB0byBpbW1lZGlhdGVseSBnZXQgaW50byBhIHdlYnZpZXcsIHNldCBvdXIgY29udGV4dFxuICAgIC8vIGFwcHJvcHJpYXRlbHlcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRXZWJ2aWV3KCk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gZXNwcmVzc29cbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgIGF3YWl0IHRoaXMuYWRkRGV2aWNlSW5mb1RvQ2FwcygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdFdlYnZpZXcgKCkge1xuICAgIGNvbnN0IHZpZXdOYW1lID0gYW5kcm9pZENvbW1hbmRzLmRlZmF1bHRXZWJ2aWV3TmFtZS5jYWxsKHRoaXMpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgbG9nZ2VyLmluZm8oYFNldHRpbmcgd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGluaXRFc3ByZXNzb1NlcnZlciAoKSB7XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIGVzcHJlc3NvIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGFcbiAgICB0aGlzLmVzcHJlc3NvID0gbmV3IEVzcHJlc3NvUnVubmVyKHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxuICAgICAgc3lzdGVtUG9ydDogdGhpcy5vcHRzLnN5c3RlbVBvcnQsXG4gICAgICBkZXZpY2VQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgIGFkYjogdGhpcy5hZGIsXG4gICAgICBhcGs6IHRoaXMub3B0cy5hcHAsXG4gICAgICB0bXBEaXI6IHRoaXMub3B0cy50bXBEaXIsXG4gICAgICBhcHBQYWNrYWdlOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgIGFwcEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICBmb3JjZUVzcHJlc3NvUmVidWlsZDogISF0aGlzLm9wdHMuZm9yY2VFc3ByZXNzb1JlYnVpbGQsXG4gICAgICBlc3ByZXNzb0J1aWxkQ29uZmlnOiB0aGlzLm9wdHMuZXNwcmVzc29CdWlsZENvbmZpZyxcbiAgICAgIHNob3dHcmFkbGVMb2c6ICEhdGhpcy5vcHRzLnNob3dHcmFkbGVMb2csXG4gICAgICBzZXJ2ZXJMYXVuY2hUaW1lb3V0OiB0aGlzLm9wdHMuZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0LFxuICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB0aGlzLm9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgICAgc2tpcFNlcnZlckluc3RhbGxhdGlvbjogdGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24sXG4gICAgICB1c2VLZXlzdG9yZTogdGhpcy5vcHRzLnVzZUtleXN0b3JlLFxuICAgICAga2V5c3RvcmVQYXRoOiB0aGlzLm9wdHMua2V5c3RvcmVQYXRoLFxuICAgICAga2V5c3RvcmVQYXNzd29yZDogdGhpcy5vcHRzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAgICBrZXlBbGlhczogdGhpcy5vcHRzLmtleUFsaWFzLFxuICAgICAga2V5UGFzc3dvcmQ6IHRoaXMub3B0cy5rZXlQYXNzd29yZCxcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgfSk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIHNldCB0aGUgbG9jYWxpemVkIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlIGZyb20gdGhlIGFwa1xuICAgIC8vIFRPRE86IGluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBhcHBpdW0jNTMwOCB3aGljaCBmaXggYSByYWNlIGNvbmQtXG4gICAgLy8gaXRpb24gYnVnIGluIG9sZCBhcHBpdW0gYW5kIG5lZWQgdG8gYmUgcmVwbGljYXRlZCBoZXJlXG4gICAgLy8gdGhpcy5hcGtTdHJpbmdzW3RoaXMub3B0cy5sYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhcbiAgICAvLyAgICAgdGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1NpZ24pIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1NraXBwaW5nIGFwcGxpY2F0aW9uIHNpZ25pbmcgYmVjYXVzZSBub1NpZ24gY2FwYWJpbGl0eSBpcyBzZXQgdG8gdHJ1ZS4gJyArXG4gICAgICAgICAgJ0hhdmluZyB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCB3aXRoIGltcHJvcGVyIHNpZ25hdHVyZS9ub24tc2lnbmVkIHdpbGwgY2F1c2UgJyArXG4gICAgICAgICAgJ0VzcHJlc3NvIGF1dG9tYXRpb24gc3RhcnR1cCBmYWlsdXJlLicpO1xuICAgICAgfSBlbHNlIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaWduKHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24gY2FwYWJpbGl0eSBpcyBzZXQuIE5vdCBpbnN0YWxsaWcgZXNwcmVzc28tc2VydmVyICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLmluc3RhbGxUZXN0QXBrKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBsb2dnZXIuZGVidWcoJ0RlbGV0aW5nIGVzcHJlc3NvIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMuZXNwcmVzc28pIHtcbiAgICAgIGlmICh0aGlzLmp3cFByb3h5QWN0aXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIC8vIFRPRE8gYmVsb3cgbG9naWMgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgaWYgKHRoaXMud2FzQW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlc2V0IGFuaW1hdGlvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiZcbiAgICAgICAgICB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRlVMTF9SRVNFVCBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuc3RvcExvZ2NhdCgpO1xuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIGxvZ2dlci5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZW1vdmUgcG9ydCBmb3J3YXJkICcke2Vycm9yLm1lc3NhZ2V9J2ApO1xuICAgICAgICAvL0lnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgY2hlY2tBcHBQcmVzZW50ICgpIHtcbiAgICBsb2dnZXIuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgYXBwIGlzIGFjdHVhbGx5IHByZXNlbnQnKTtcbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAnJHt0aGlzLm9wdHMuYXBwfSdgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlICgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcgaGVyZSwgc2luY2UgY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgcHJveGllc1xuICAgIC8vIHNldHRpbmdzIHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBhbHdheXMgaGF2ZSBhbiBhY3RpdmUgcHJveHkgdG8gdGhlIGVzcHJlc3NvIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIEVzcHJlc3NvKE5PX1BST1hZKSwgYmFzZWQgb24gY3VycmVudCBjb250ZXh0IHdpbGwgcmV0dXJuIHJlbGF0ZWQgTk9fUFJPWFkgbGlzdFxuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uaXNOaWwodGhpcy5jaHJvbWVkcml2ZXIpID8gTk9fUFJPWFkgOiBDSFJPTUVfTk9fUFJPWFk7XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIC8vIHdlIGRvIHNvbWUgZGlmZmVyZW50L3NwZWNpYWwgdGhpbmdzIHdpdGggdGhlc2UgbWV0aG9kc1xuICBpZiAoIV8uaW5jbHVkZXMoWydkZWZhdWx0V2Vidmlld05hbWUnXSwgY21kKSkge1xuICAgIEVzcHJlc3NvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gIH1cbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgZXNwcmVzc28tc3BlY2lmaWMgY29tbWFuZHNcbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gIEVzcHJlc3NvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
515
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiU1lTVEVNX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiRXNwcmVzc29Ecml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwic2hlbGwiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImVzcHJlc3NvIiwiandwUHJveHlBY3RpdmUiLCJkZWZhdWx0SU1FIiwiandwUHJveHlBdm9pZCIsImFwa1N0cmluZ3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImRlZmF1bHRPcHRzIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiXyIsImRlZmF1bHRzIiwiaXNDaHJvbWVTZXNzaW9uIiwiYXBwIiwibG9nZ2VyIiwid2FybiIsImVycm9yQW5kVGhyb3ciLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwiYWRkV2lwZURhdGFUb0F2ZEFyZ3MiLCJzeXN0ZW1Qb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsImNvbmZpZ3VyZUFwcCIsIm9uUG9zdFByb2Nlc3MiLCJvblBvc3RDb25maWd1cmVBcHAiLCJzdXBwb3J0ZWRFeHRlbnNpb25zIiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiYXBwUGFja2FnZSIsImlzQXBwSW5zdGFsbGVkIiwic3RhcnRFc3ByZXNzb1Nlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsIm1lc3NhZ2UiLCJlbmRzV2l0aCIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJlcnIiLCJzdGFjayIsImNhY2hlZEFwcEluZm8iLCJpc1VybCIsImFwcFBhdGgiLCJwcmVzaWduQXBwIiwiYXBwTG9jYXRpb24iLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJzaWduIiwiaXNBcGsiLCJ0b0xvd2VyIiwic2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkIiwicGF0aEluQ2FjaGUiLCJpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkIiwiaXNQbGFpbk9iamVjdCIsInBhY2thZ2VIYXNoIiwiZnMiLCJoYXNoIiwiZXhpc3RzIiwiZnVsbFBhdGgiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwicmltcmFmIiwiZHJpdmVyRGF0YSIsImlzRW11bGF0b3IiLCJhdmQiLCJkZXZpY2VOYW1lIiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImF2ZEFyZ3MiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwidmVyc2lvbiIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJhcHBJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsImluaXREZXZpY2UiLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJ3YXNBbmltYXRpb25FbmFibGVkIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdEVzcHJlc3NvU2VydmVyIiwiZGVidWciLCJmb3J3YXJkUG9ydCIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJpbml0QVVUIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsIkVzcHJlc3NvUnVubmVyIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZm9yY2VFc3ByZXNzb1JlYnVpbGQiLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2hvd0dyYWRsZUxvZyIsInNlcnZlckxhdW5jaFRpbWVvdXQiLCJlc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJURVNUX0FQS19QS0ciLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiaW5zdGFsbFRlc3RBcGsiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJzdGRlcnIiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwiaWduIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLE9BQU8sR0FBR0MsbUNBQWhCO0FBSUEsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUExQjtBQUlBLE1BQU1DLFdBQVcsR0FBRyxJQUFwQjtBQU1BLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyxtQkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsZ0RBQVgsQ0FBUixDQUZlLEVBR2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLCtDQUFYLENBQVIsQ0FIZSxFQUlmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywrQ0FBWCxDQUFSLENBSmUsRUFLZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaURBQVgsQ0FBUixDQUxlLEVBTWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLDJDQUFYLENBQVIsQ0FOZSxFQU9mLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywyQ0FBWCxDQUFSLENBUGUsRUFRZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBUixDQVJlLEVBU2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FUZSxFQVVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBVmUsRUFXZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBUixDQVhlLEVBWWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLG9DQUFYLENBQVIsQ0FaZSxFQWFmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBYmUsRUFjZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcscUJBQVgsQ0FBUixDQWRlLEVBZWYsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLHVDQUFYLENBQVQsQ0FmZSxFQWdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWhCZSxFQWlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsbUNBQVgsQ0FBVCxDQWpCZSxFQWtCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQWxCZSxFQW1CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQW5CZSxFQW9CZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXBCZSxFQXFCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXJCZSxFQXNCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXRCZSxFQXVCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQXZCZSxFQXdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQXhCZSxFQXlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQXpCZSxFQTBCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTFCZSxFQTJCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTNCZSxFQTRCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQTVCZSxFQTZCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQTdCZSxFQThCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQTlCZSxFQStCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBVCxDQS9CZSxFQWdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMENBQVgsQ0FBVCxDQWhDZSxFQWlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQWpDZSxFQWtDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQWxDZSxFQW1DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0NBQVgsQ0FBVCxDQW5DZSxFQW9DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQXBDZSxFQXFDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXJDZSxFQXNDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBVCxDQXRDZSxFQXVDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXZDZSxFQXdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBVCxDQXhDZSxFQXlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXpDZSxFQTBDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQTFDZSxFQTJDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQTNDZSxFQTRDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0JBQVgsQ0FBVCxDQTVDZSxFQTZDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOEJBQVgsQ0FBVCxDQTdDZSxFQThDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0JBQVgsQ0FBVCxDQTlDZSxFQStDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBVCxDQS9DZSxFQWdEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBVCxDQWhEZSxFQWlEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQWpEZSxFQWtEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBVCxDQWxEZSxFQW1EZixDQUFDLE1B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Q3pDeE4sRUFBQUEsY0FBYyxDQUFDdU4sU0FBZixDQUF5QkgsR0FBekIsSUFBZ0NDLEVBQWhDO0FBQ0Q7O2VBR2NyTixjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIGVycm9ycywgaXNFcnJvclR5cGUsIERldmljZVNldHRpbmdzfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IEVzcHJlc3NvUnVubmVyLCBURVNUX0FQS19QS0cgfSBmcm9tICcuL2VzcHJlc3NvLXJ1bm5lcic7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgfSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgcXVhbGlmeUFjdGl2aXR5TmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5cbi8vIFRPRE8gbWVyZ2Ugb3VyIG93biBoZWxwZXJzIG9udG8gdGhpcyBsYXRlclxuY29uc3QgaGVscGVycyA9IGFuZHJvaWRIZWxwZXJzO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gRXNwcmVzc28gSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgU1lTVEVNX1BPUlRfUkFOR0UgPSBbODMwMCwgODM5OV07XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgZXNwcmVzc28gc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS4gV2Ugd2lsbFxuLy8gZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5jb25zdCBERVZJQ0VfUE9SVCA9IDY3OTE7XG5cbi8vIE5PX1BST1hZIGNvbnRhaW5zIHRoZSBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfYWN0aXZpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19rZXlib2FyZF9zaG93bicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFycycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fdGltZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2JhY2tncm91bmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2Nsb3NlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9sYXVuY2gnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3Jlc2V0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9zdHJpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hY3RpdmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9pbnN0YWxsZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9zdGF0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZmluZ2VyX3ByaW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pbnN0YWxsX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfbG9ja2VkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZm9sZGVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdXNoX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3JlbW92ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS90ZXJtaW5hdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS91bmxvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGVfYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuXG5jbGFzcyBFc3ByZXNzb0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgLy8gYHNoZWxsYCBvdmVyd3JpdGVzIGFkYi5zaGVsbCwgc28gcmVtb3ZlXG4gICAgZGVsZXRlIG9wdHMuc2hlbGw7XG5cbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4gICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG5cbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2FwcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYCdicm93c2VyTmFtZScgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWRgKTtcbiAgICAgICAgICBsb2dnZXIud2FybihgQ2hyb21lIGJyb3dzZXIgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBzZXNzaW9ucyBiZWNhdXNlIEVzcHJlc3NvIGF1dG9tYXRpb24gZG9lc24ndCBgICtcbiAgICAgICAgICAgICAgYGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgQ2hyb21lYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENocm9tZSBicm93c2VyIHNlc3Npb25zIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gYmVjYXVzZSBFc3ByZXNzbyBgICtcbiAgICAgICAgICAgIGBhdXRvbWF0aW9uIGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICAgIHRoaXMuYWRkV2lwZURhdGFUb0F2ZEFyZ3MoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRzLnN5c3RlbVBvcnQgPSB0aGlzLm9wdHMuc3lzdGVtUG9ydFxuICAgICAgICB8fCBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShTWVNURU1fUE9SVF9SQU5HRVswXSwgU1lTVEVNX1BPUlRfUkFOR0VbMV0pO1xuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuICAgICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICAgIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG4gICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgICAgLy8gQURCIGluc3RhbmNlXG4gICAgICB0aGlzLmFkYiA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLmNyZWF0ZUFEQih0aGlzLm9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgICAgICBvblBvc3RQcm9jZXNzOiB0aGlzLm9uUG9zdENvbmZpZ3VyZUFwcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IFsnLmFwaycsICcuYWFiJ11cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIGxvZ2dlci5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCB0aGUgcGFja2FnZSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgYGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEVzcHJlc3NvU2Vzc2lvbigpO1xuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgZS5tZXNzYWdlICs9IGAke18uZW5kc1dpdGgoZS5tZXNzYWdlLCAnLicpID8gJycgOiAnLid9IENoZWNrIGAgK1xuICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyI3Ryb3VibGVzaG9vdGluZyAnICtcbiAgICAgICAgJ3JlZ2FyZGluZyBhZHZhbmNlZCBzZXNzaW9uIHN0YXJ0dXAgdHJvdWJsZXNob290aW5nLic7XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnIgPSBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIGVyci5zdGFjayA9IGUuc3RhY2s7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25Qb3N0Q29uZmlndXJlQXBwICh7Y2FjaGVkQXBwSW5mbywgaXNVcmwsIGFwcFBhdGh9KSB7XG4gICAgY29uc3QgcHJlc2lnbkFwcCA9IGFzeW5jIChhcHBMb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1NpZ24pIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1NraXBwaW5nIGFwcGxpY2F0aW9uIHNpZ25pbmcgYmVjYXVzZSBub1NpZ24gY2FwYWJpbGl0eSBpcyBzZXQgdG8gdHJ1ZS4gJyArXG4gICAgICAgICAgJ0hhdmluZyB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCB3aXRoIGltcHJvcGVyIHNpZ25hdHVyZS9ub24tc2lnbmVkIHdpbGwgY2F1c2UgJyArXG4gICAgICAgICAgJ0VzcHJlc3NvIGF1dG9tYXRpb24gc3RhcnR1cCBmYWlsdXJlLicpO1xuICAgICAgfSBlbHNlIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcExvY2F0aW9uLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbihhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc0FwayA9IF8uZW5kc1dpdGgoXy50b0xvd2VyKGFwcFBhdGgpLCAnLmFwaycpO1xuICAgIC8vIERvIG5vdCBjYWNoZSAuYXBrIGlmIHdhcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gICAgY29uc3Qgc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkID0gIWlzQXBrIHx8IChpc0FwayAmJiBpc1VybCk7XG4gICAgbGV0IHBhdGhJbkNhY2hlID0gbnVsbDtcbiAgICBsZXQgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IGZhbHNlO1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VIYXNoID0gYXdhaXQgZnMuaGFzaChhcHBQYXRoKTtcbiAgICAgIGlmIChwYWNrYWdlSGFzaCA9PT0gY2FjaGVkQXBwSW5mby5wYWNrYWdlSGFzaCAmJiBhd2FpdCBmcy5leGlzdHMoY2FjaGVkQXBwSW5mby5mdWxsUGF0aCkpIHtcbiAgICAgICAgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IHRydWU7XG4gICAgICAgIHBhdGhJbkNhY2hlID0gY2FjaGVkQXBwSW5mby5mdWxsUGF0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkKSB7XG4gICAgICBpZiAoc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkKSB7XG4gICAgICAgIHBhdGhJbkNhY2hlID0gaXNBcGsgPyBhcHBQYXRoIDogYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFVuaXZlcnNhbEFwayhhcHBQYXRoKTtcbiAgICAgICAgaWYgKCFpc0FwayAmJiBpc1VybCkge1xuICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSB0ZW1wb3JhcmlseSBkb3dubG9hZGVkIC5hYWIgcGFja2FnZVxuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBwcmVzaWduQXBwKHBhdGhJbkNhY2hlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcGspIHtcbiAgICAgICAgLy8gSXQgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IGlkZWEgdG8gbW9kaWZ5IHRoZSBwcm92aWRlZCBhcHAgaW4tcGxhY2UsXG4gICAgICAgIC8vIGJ1dCB0aGlzIGlzIGhvdyBpdCB3YXMgYWx3YXlzIHdvcmtpbmdcbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChhcHBQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCA/IHthcHBQYXRoOiBwYXRoSW5DYWNoZX0gOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGxlIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICBsb2dnZXIuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBhZGRXaXBlRGF0YVRvQXZkQXJncyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuYXZkQXJncykge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgPSAnLXdpcGUtZGF0YSc7XG4gICAgfSBlbHNlIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyArPSAnIC13aXBlLWRhdGEnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gbXVjaCBvZiB0aGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgc3RhcnRFc3ByZXNzb1Nlc3Npb24gKCkge1xuICAgIGxvZ2dlci5pbmZvKGBFc3ByZXNzb0RyaXZlciB2ZXJzaW9uOiAke3ZlcnNpb259YCk7XG5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWFuZHJvaWQtZHJpdmVyL3B1bGwvNDYxIHdoYXQgaGFwcGVucyBpZiB0aGVyIGlzIG5vIHNldEhpZGRlbkFwaVBvbGljeSBmb3IgQW5kcm9pZCBQK1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgbG9nZ2VyLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFwcFBhY2thZ2UgZXQgYWwgZnJvbSBtYW5pZmVzdCBpZiBuZWNlc3NhcnlcbiAgICBsZXQgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAoYXBwSW5mbykge1xuICAgICAgLy8gYW5kIGdldCBpdCBvbnRvIG91ciAnb3B0cycgb2JqZWN0IHNvIHdlIHVzZSBpdCBmcm9tIG5vdyBvblxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBJbmZvID0gdGhpcy5vcHRzO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGFuIGF2ZCwgc2V0IHRoZSBsYW5ndWFnZS9sb2NhbGUsIHBpY2sgYW4gZW11bGF0b3IsIGV0Yy4uLlxuICAgIC8vIFRPRE8gd2l0aCBtdWx0aXBsZSBkZXZpY2VzIHdlJ2xsIG5lZWQgdG8gcGFyYW1ldGVyaXplIHRoaXNcbiAgICBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyL2lzc3Vlcy83MlxuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy53YXNBbmltYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHR1cm4gb2ZmIGFuaW1hdGlvbnM6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZFxuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcblxuICAgIC8vIHNldCB1cCB0aGUgbW9kaWZpZWQgZXNwcmVzc28gc2VydmVyIGV0Y1xuICAgIHRoaXMuaW5pdEVzcHJlc3NvU2VydmVyKCk7XG4gICAgLy8gRnVydGhlciBwcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgZXNwcmVzc28gcG9ydFxuICAgIGxvZ2dlci5kZWJ1ZyhgRm9yd2FyZGluZyBFc3ByZXNzbyBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byAke3RoaXMub3B0cy5zeXN0ZW1Qb3J0fWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0LCBERVZJQ0VfUE9SVCk7XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyB1bmxvY2sgdGhlIGRldmljZSB0byBwcmVwYXJlIGl0IGZvciB0ZXN0aW5nXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAnc2tpcFVubG9jaycgY2FwYWJpbGl0eSBzZXQsIHNvIHNraXBwaW5nIGRldmljZSB1bmxvY2tgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvL0FkZGluZyBBVVQgcGFja2FnZSBuYW1lIGluIHRoZSBjYXBhYmlsaXRpZXMgaWYgcGFja2FnZSBuYW1lIG5vdCBleGlzdCBpbiBjYXBzXG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UgPSBhcHBJbmZvLmFwcFdhaXRQYWNrYWdlIHx8IGFwcEluZm8uYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgICAgdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZSh0aGlzLmNhcHMuYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBJbmZvLmFwcEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZSh0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBJbmZvLmFwcFdhaXRBY3Rpdml0eSB8fCBhcHBJbmZvLmFwcEFjdGl2aXR5IHx8IHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSxcbiAgICAgICAgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKTtcbiAgICB9XG5cbiAgICAvLyBsYXVuY2ggZXNwcmVzc28gYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG4gICAgaWYgKHRoaXMuY2Fwcy5hdXRvTGF1bmNoID09PSBmYWxzZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYE5vdCB3YWl0aW5nIGZvciB0aGUgYXBwbGljYXRpb24gYWN0aXZpdHkgdG8gc3RhcnQgYmVjYXVzZSAnYXV0b0xhdW5jaCcgaXMgZGlzYWJsZWRgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGIud2FpdEZvckFjdGl2aXR5KHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSwgdGhpcy5jYXBzLmFwcFdhaXRBY3Rpdml0eSwgdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbik7XG4gICAgfVxuICAgIC8vIGlmIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ2V0IGludG8gYSB3ZWJ2aWV3LCBzZXQgb3VyIGNvbnRleHRcbiAgICAvLyBhcHByb3ByaWF0ZWx5XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgYXdhaXQgdGhpcy5pbml0V2VidmlldygpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIGVzcHJlc3NvXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRXZWJ2aWV3ICgpIHtcbiAgICBjb25zdCB2aWV3TmFtZSA9IGFuZHJvaWRDb21tYW5kcy5kZWZhdWx0V2Vidmlld05hbWUuY2FsbCh0aGlzKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCB8fCAyMDAwO1xuICAgIGxvZ2dlci5pbmZvKGBTZXR0aW5nIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgdGhpcy5zZXRDb250ZXh0LmJpbmQodGhpcyksIHZpZXdOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGFkZERldmljZUluZm9Ub0NhcHMgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBtYW51ZmFjdHVyZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlYWxEaXNwbGF5U2l6ZSxcbiAgICAgIGRpc3BsYXlEZW5zaXR5LFxuICAgIH0gPSBhd2FpdCB0aGlzLm1vYmlsZUdldERldmljZUluZm8oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlQXBpTGV2ZWwgPSBwYXJzZUludChhcGlWZXJzaW9uLCAxMCk7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IHBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IHJlYWxEaXNwbGF5U2l6ZTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuRGVuc2l0eSA9IGRpc3BsYXlEZW5zaXR5O1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBtYW51ZmFjdHVyZXI7XG4gIH1cblxuICBpbml0RXNwcmVzc29TZXJ2ZXIgKCkge1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyBlc3ByZXNzbyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4gICAgdGhpcy5lc3ByZXNzbyA9IG5ldyBFc3ByZXNzb1J1bm5lcih7XG4gICAgICBob3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCB8fCB0aGlzLm9wdHMuaG9zdCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZm9yY2VFc3ByZXNzb1JlYnVpbGQ6ICEhdGhpcy5vcHRzLmZvcmNlRXNwcmVzc29SZWJ1aWxkLFxuICAgICAgZXNwcmVzc29CdWlsZENvbmZpZzogdGhpcy5vcHRzLmVzcHJlc3NvQnVpbGRDb25maWcsXG4gICAgICBzaG93R3JhZGxlTG9nOiAhIXRoaXMub3B0cy5zaG93R3JhZGxlTG9nLFxuICAgICAgc2VydmVyTGF1bmNoVGltZW91dDogdGhpcy5vcHRzLmVzcHJlc3NvU2VydmVyTGF1bmNoVGltZW91dCxcbiAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogdGhpcy5vcHRzLmFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIHNraXBTZXJ2ZXJJbnN0YWxsYXRpb246IHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uLFxuICAgICAgdXNlS2V5c3RvcmU6IHRoaXMub3B0cy51c2VLZXlzdG9yZSxcbiAgICAgIGtleXN0b3JlUGF0aDogdGhpcy5vcHRzLmtleXN0b3JlUGF0aCxcbiAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IHRoaXMub3B0cy5rZXlzdG9yZVBhc3N3b3JkLFxuICAgICAga2V5QWxpYXM6IHRoaXMub3B0cy5rZXlBbGlhcyxcbiAgICAgIGtleVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5UGFzc3dvcmQsXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmVzcHJlc3NvLnByb3h5UmVxUmVzLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBzZXQgdGhlIGxvY2FsaXplZCBzdHJpbmdzIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZSBmcm9tIHRoZSBhcGtcbiAgICAvLyBUT0RPOiBpbmNvcnBvcmF0ZSBjaGFuZ2VzIGZyb20gYXBwaXVtIzUzMDggd2hpY2ggZml4IGEgcmFjZSBjb25kLVxuICAgIC8vIGl0aW9uIGJ1ZyBpbiBvbGQgYXBwaXVtIGFuZCBuZWVkIHRvIGJlIHJlcGxpY2F0ZWQgaGVyZVxuICAgIC8vIHRoaXMuYXBrU3RyaW5nc1t0aGlzLm9wdHMubGFuZ3VhZ2VdID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMucHVzaFN0cmluZ3MoXG4gICAgLy8gICAgIHRoaXMub3B0cy5sYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLR11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0KSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24gY2FwYWJpbGl0eSBpcyBzZXQuIE5vdCBpbnN0YWxsaWcgZXNwcmVzc28tc2VydmVyICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLmluc3RhbGxUZXN0QXBrKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBsb2dnZXIuZGVidWcoJ0RlbGV0aW5nIGVzcHJlc3NvIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMuZXNwcmVzc28pIHtcbiAgICAgIGlmICh0aGlzLmp3cFByb3h5QWN0aXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIC8vIFRPRE8gYmVsb3cgbG9naWMgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgaWYgKHRoaXMud2FzQW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlc2V0IGFuaW1hdGlvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiZcbiAgICAgICAgICB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRlVMTF9SRVNFVCBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuc3RvcExvZ2NhdCgpO1xuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIGxvZ2dlci5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZW1vdmUgcG9ydCBmb3J3YXJkICcke2Vycm9yLm1lc3NhZ2V9J2ApO1xuICAgICAgICAvL0lnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKCkge1xuICAgIC8vIGludGVudGlvbmFsbHkgZG8gbm90aGluZyBoZXJlLCBzaW5jZSBjb21tYW5kcy51cGRhdGVTZXR0aW5ncyBwcm94aWVzXG4gICAgLy8gc2V0dGluZ3MgdG8gdGhlIGVzcHJlc3NvIHNlcnZlciBhbHJlYWR5XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGFsd2F5cyBoYXZlIGFuIGFjdGl2ZSBwcm94eSB0byB0aGUgZXNwcmVzc28gc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIGVzcHJlc3NvIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCk7XG4gICAgLy8gd2UgYXJlIG1haW50YWluaW5nIHR3byBzZXRzIG9mIE5PX1BST1hZIGxpc3RzLCBvbmUgZm9yIGNocm9tZWRyaXZlcihDSFJPTUVfTk9fUFJPWFkpXG4gICAgLy8gYW5kIG9uZSBmb3IgRXNwcmVzc28oTk9fUFJPWFkpLCBiYXNlZCBvbiBjdXJyZW50IGNvbnRleHQgd2lsbCByZXR1cm4gcmVsYXRlZCBOT19QUk9YWSBsaXN0XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gXy5pc05pbCh0aGlzLmNocm9tZWRyaXZlcikgPyBOT19QUk9YWSA6IENIUk9NRV9OT19QUk9YWTtcbiAgICBpZiAodGhpcy5vcHRzLm5hdGl2ZVdlYlNjcmVlbnNob3QpIHtcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFsuLi50aGlzLmp3cFByb3h5QXZvaWQsIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV1dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBnZXQgaXNDaHJvbWVTZXNzaW9uICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0Nocm9tZUJyb3dzZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgfVxuXG4gIGdldCBhcHBPbkRldmljZSAoKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMuYXBwICYmIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIC8vIHdlIGRvIHNvbWUgZGlmZmVyZW50L3NwZWNpYWwgdGhpbmdzIHdpdGggdGhlc2UgbWV0aG9kc1xuICBpZiAoIV8uaW5jbHVkZXMoWydkZWZhdWx0V2Vidmlld05hbWUnXSwgY21kKSkge1xuICAgIEVzcHJlc3NvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gIH1cbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgZXNwcmVzc28tc3BlY2lmaWMgY29tbWFuZHNcbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gIEVzcHJlc3NvRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -211,4 +211,4 @@ var _default = ServerBuilder;
211
211
  exports.default = _default;require('source-map-support').install();
212
212
 
213
213
 
214
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXItYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJHUkFETEVfVkVSU0lPTl9LRVkiLCJHUkFETEVfVVJMX1BSRUZJWCIsIkdSQURMRV9VUkxfVEVNUExBVEUiLCJHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyIsIkRFUEVOREVOQ1lfUFJPUF9OQU1FUyIsIlZFUlNJT05fS0VZUyIsImdyYWRsZUxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyIsImFyZ3MiLCJ6aXBBbGlnbiIsImtleXN0b3JlRmlsZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiU2VydmVyQnVpbGRlciIsImNvbnN0cnVjdG9yIiwic2VydmVyUGF0aCIsInNob3dHcmFkbGVMb2ciLCJidWlsZENvbmZpZ3VyYXRpb24iLCJ2ZXJzaW9uQ29uZmlndXJhdGlvbiIsInRvb2xzVmVyc2lvbnMiLCJzZXJ2ZXJWZXJzaW9ucyIsIl8iLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImtleSIsImluY2x1ZGVzIiwibG9nIiwid2FybiIsInRlc3RBcHBQYWNrYWdlIiwic2lnbmluZ0NvbmZpZyIsInByb3BOYW1lIiwiYnVpbGQiLCJzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiIsImluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMiLCJydW5CdWlsZFByb2Nlc3MiLCJnZXRDb21tYW5kIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiYnVpbGRQcm9wZXJ0eSIsImZpbHRlciIsIm1hcCIsInNlcnZlclZlcnNpb24iLCJncmFkbGVQcm9wZXJ0eSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJCb29sZWFuIiwicHVzaCIsImtleXMiLCJ1cHBlckZpcnN0IiwiayIsInYiLCJ2ZXJzaW9uIiwicHJvcGVydGllc1BhdGgiLCJwYXRoIiwicmVzb2x2ZSIsIm9yaWdpbmFsUHJvcGVydGllcyIsImZzIiwicmVhZEZpbGUiLCJuZXdQcm9wZXJ0aWVzIiwidXBkYXRlR3JhZGxlRGlzdFVybCIsIndyaXRlRmlsZSIsInByb3BlcnRpZXNDb250ZW50IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImhhc0FkZGl0aW9uYWxEZXBzIiwiaXNBcnJheSIsIkVycm9yIiwiaXNFbXB0eSIsImxpbmUiLCJ0cmltIiwiZGVwIiwidGVzdCIsImJ1aWxkUGF0aCIsImNvbmZpZ3VyYXRpb24iLCJwcmVmaXgiLCJkZXBzIiwiaW5mbyIsImRlYnVnIiwiam9pbiIsImdyYWRsZWJ1aWxkIiwiU3ViUHJvY2VzcyIsImN3ZCIsInN0ZGlvIiwiYnVpbGRMYXN0TGluZXMiLCJsb2dNc2ciLCJvbiIsInN0YXJ0c1dpdGgiLCJFT0wiLCJsZW5ndGgiLCJzdGFydCIsImVyciIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvckFuZFRocm93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsUUFBM0I7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxrQkFBMUI7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxvRUFBNUI7O0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsRUFBbkM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDLDJCQUFELEVBQThCLG1DQUE5QixDQUE5QjtBQUVBLE1BQU1DLFlBQVksR0FBRyxDQUNuQkwsa0JBRG1CLEVBRW5CLHFCQUZtQixFQUduQixZQUhtQixFQUluQixZQUptQixFQUtuQixRQUxtQixFQU1uQixXQU5tQixFQU9uQixRQVBtQixFQVFuQixxQkFSbUIsRUFTbkIscUJBVG1CLEVBVW5CLFdBVm1CLENBQXJCOzs7QUFhQSxNQUFNTSxTQUFTLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQWxCOztBQUVBLFNBQVNDLHdCQUFULENBQW1DQyxJQUFuQyxFQUF5QztBQUN2QyxTQUFPO0FBQ0xDLElB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cyc7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCBzeXN0ZW0gfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyB1cGRhdGVEZXBlbmRlbmN5TGluZXMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgR1JBRExFX1ZFUlNJT05fS0VZID0gJ2dyYWRsZSc7XG5jb25zdCBHUkFETEVfVVJMX1BSRUZJWCA9ICdkaXN0cmlidXRpb25Vcmw9JztcbmNvbnN0IEdSQURMRV9VUkxfVEVNUExBVEUgPSAnaHR0cHNcXFxcOi8vc2VydmljZXMuZ3JhZGxlLm9yZy9kaXN0cmlidXRpb25zL2dyYWRsZS1WRVJTSU9OLWFsbC56aXAnO1xuY29uc3QgR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMgPSAxNTtcbmNvbnN0IERFUEVOREVOQ1lfUFJPUF9OQU1FUyA9IFsnYWRkaXRpb25hbEFwcERlcGVuZGVuY2llcycsICdhZGRpdGlvbmFsQW5kcm9pZFRlc3REZXBlbmRlbmNpZXMnXTtcblxuY29uc3QgVkVSU0lPTl9LRVlTID0gW1xuICBHUkFETEVfVkVSU0lPTl9LRVksXG4gICdhbmRyb2lkR3JhZGxlUGx1Z2luJyxcbiAgJ2NvbXBpbGVTZGsnLFxuICAnYnVpbGRUb29scycsXG4gICdtaW5TZGsnLFxuICAndGFyZ2V0U2RrJyxcbiAgJ2tvdGxpbicsXG4gICdzb3VyY2VDb21wYXRpYmlsaXR5JyxcbiAgJ3RhcmdldENvbXBhdGliaWxpdHknLFxuICAnanZtVGFyZ2V0Jyxcbl07XG5cbmNvbnN0IGdyYWRsZUxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0dyYWRsZScpO1xuXG5mdW5jdGlvbiBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgKGFyZ3MpIHtcbiAgcmV0dXJuIHtcbiAgICB6aXBBbGlnbjogdHJ1ZSxcbiAgICBrZXlzdG9yZUZpbGU6IGFyZ3Mua2V5c3RvcmVGaWxlLFxuICAgIGtleXN0b3JlUGFzc3dvcmQ6IGFyZ3Mua2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhczogYXJncy5rZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZDogYXJncy5rZXlQYXNzd29yZFxuICB9O1xufVxuXG5jbGFzcyBTZXJ2ZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHRoaXMuc2VydmVyUGF0aCA9IGFyZ3Muc2VydmVyUGF0aDtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBhcmdzLnNob3dHcmFkbGVMb2c7XG5cbiAgICBjb25zdCBidWlsZENvbmZpZ3VyYXRpb24gPSBhcmdzLmJ1aWxkQ29uZmlndXJhdGlvbiB8fCB7fTtcblxuICAgIGNvbnN0IHZlcnNpb25Db25maWd1cmF0aW9uID0gYnVpbGRDb25maWd1cmF0aW9uLnRvb2xzVmVyc2lvbnMgfHwge307XG4gICAgdGhpcy5zZXJ2ZXJWZXJzaW9ucyA9IF8ucmVkdWNlKHZlcnNpb25Db25maWd1cmF0aW9uLCAoYWNjLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoVkVSU0lPTl9LRVlTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgdW5leHBlY3RlZCAnJHtrZXl9JyBpbiB0b29sc1ZlcnNpb24gYmxvY2sgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy50ZXN0QXBwUGFja2FnZSA9IGFyZ3MudGVzdEFwcFBhY2thZ2U7XG4gICAgdGhpcy5zaWduaW5nQ29uZmlnID0gYXJncy5zaWduaW5nQ29uZmlnO1xuXG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gYnVpbGRDb25maWd1cmF0aW9uW3Byb3BOYW1lXSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBidWlsZCAoKSB7XG4gICAgaWYgKHRoaXMuc2VydmVyVmVyc2lvbnNbR1JBRExFX1ZFUlNJT05fS0VZXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRHcmFkbGVXcmFwcGVyVmVyc2lvbih0aGlzLnNlcnZlclZlcnNpb25zW0dSQURMRV9WRVJTSU9OX0tFWV0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcygpO1xuXG4gICAgYXdhaXQgdGhpcy5ydW5CdWlsZFByb2Nlc3MoKTtcbiAgfVxuXG4gIGdldENvbW1hbmQgKCkge1xuICAgIGNvbnN0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKSA/ICdncmFkbGV3LmJhdCcgOiAnLi9ncmFkbGV3JztcbiAgICBjb25zdCBidWlsZFByb3BlcnR5ID0gKGtleSwgdmFsdWUpID0+IHZhbHVlID8gYC1QJHtrZXl9PSR7dmFsdWV9YCA6IG51bGw7XG4gICAgbGV0IGFyZ3MgPSBWRVJTSU9OX0tFWVNcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBHUkFETEVfVkVSU0lPTl9LRVkpXG4gICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IHRoaXMuc2VydmVyVmVyc2lvbnNba2V5XTtcbiAgICAgICAgY29uc3QgZ3JhZGxlUHJvcGVydHkgPSBgYXBwaXVtJHtrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtrZXkuc2xpY2UoMSl9YDtcbiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvcGVydHkoZ3JhZGxlUHJvcGVydHksIHNlcnZlclZlcnNpb24pO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAodGhpcy5zaWduaW5nQ29uZmlnKSB7XG4gICAgICBhcmdzLnB1c2goLi4uKFxuICAgICAgICBfLmtleXModGhpcy5zaWduaW5nQ29uZmlnKVxuICAgICAgICAubWFwKChrZXkpID0+IFtgYXBwaXVtJHtfLnVwcGVyRmlyc3Qoa2V5KX1gLCB0aGlzLnNpZ25pbmdDb25maWdba2V5XV0pXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYnVpbGRQcm9wZXJ0eShrLCB2KSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVzdEFwcFBhY2thZ2UpIHtcbiAgICAgIGFyZ3MucHVzaChidWlsZFByb3BlcnR5KCdhcHBpdW1UYXJnZXRQYWNrYWdlJywgdGhpcy50ZXN0QXBwUGFja2FnZSkpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJ2FwcDphc3NlbWJsZUFuZHJvaWRUZXN0Jyk7XG5cbiAgICByZXR1cm4ge2NtZCwgYXJnc307XG4gIH1cblxuICBhc3luYyBzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiAodmVyc2lvbikge1xuICAgIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2dyYWRsZScsICd3cmFwcGVyJywgJ2dyYWRsZS13cmFwcGVyLnByb3BlcnRpZXMnKTtcbiAgICBjb25zdCBvcmlnaW5hbFByb3BlcnRpZXMgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wZXJ0aWVzUGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gdGhpcy51cGRhdGVHcmFkbGVEaXN0VXJsKG9yaWdpbmFsUHJvcGVydGllcywgdmVyc2lvbik7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb3BlcnRpZXNQYXRoLCBuZXdQcm9wZXJ0aWVzLCAndXRmOCcpO1xuICB9XG5cbiAgdXBkYXRlR3JhZGxlRGlzdFVybCAocHJvcGVydGllc0NvbnRlbnQsIHZlcnNpb24pIHtcbiAgICByZXR1cm4gcHJvcGVydGllc0NvbnRlbnQucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoYF4oJHtfLmVzY2FwZVJlZ0V4cChHUkFETEVfVVJMX1BSRUZJWCl9KS4rJGAsICdnbScpLFxuICAgICAgYCQxJHtHUkFETEVfVVJMX1RFTVBMQVRFLnJlcGxhY2UoJ1ZFUlNJT04nLCB2ZXJzaW9uKX1gXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMgKCkge1xuICAgIGxldCBoYXNBZGRpdGlvbmFsRGVwcyA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgREVQRU5ERU5DWV9QUk9QX05BTUVTKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheSh0aGlzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtwcm9wTmFtZX0nIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzRW1wdHkodGhpc1twcm9wTmFtZV0uZmlsdGVyKChsaW5lKSA9PiBfLnRyaW0obGluZSkpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpc1twcm9wTmFtZV0pIHtcbiAgICAgICAgaWYgKC9bXFxzJ1xcXFwkXS8udGVzdChkZXApKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaW5nbGUgcXVvdGVzLCBkb2xsYXIgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJyArXG4gICAgICAgICAgICBgIGFyZSBkaXNhbGxvd2VkIGluIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzOiAke2RlcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGFzQWRkaXRpb25hbERlcHMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWhhc0FkZGl0aW9uYWxEZXBzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuc2VydmVyUGF0aCwgJ2FwcCcsICdidWlsZC5ncmFkbGUua3RzJyk7XG4gICAgbGV0IGNvbmZpZ3VyYXRpb24gPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZFBhdGgsICd1dGY4Jyk7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IHByb3BOYW1lID09PSBERVBFTkRFTkNZX1BST1BfTkFNRVNbMF1cbiAgICAgICAgPyAnaW1wbGVtZW50YXRpb24nXG4gICAgICAgIDogJ2FuZHJvaWRUZXN0SW1wbGVtZW50YXRpb24nO1xuICAgICAgY29uc3QgZGVwcyA9IHRoaXNbcHJvcE5hbWVdXG4gICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSlcbiAgICAgICAgLm1hcCgobGluZSkgPT4gYCR7cHJlZml4fShcIiR7bGluZX1cIilgKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZGVwcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKGBBZGRpbmcgdGhlIGZvbGxvd2luZyAke3Byb3BOYW1lfSB0byBidWlsZC5ncmFkbGUua3RzOiAke2RlcHN9YCk7XG4gICAgICBjb25maWd1cmF0aW9uID0gdXBkYXRlRGVwZW5kZW5jeUxpbmVzKGNvbmZpZ3VyYXRpb24sIHByb3BOYW1lLCBkZXBzKTtcbiAgICB9XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGJ1aWxkUGF0aCwgY29uZmlndXJhdGlvbiwgJ3V0ZjgnKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bkJ1aWxkUHJvY2VzcyAoKSB7XG4gICAgY29uc3Qge2NtZCwgYXJnc30gPSB0aGlzLmdldENvbW1hbmQoKTtcbiAgICBsb2cuZGVidWcoYEJlZ2lubmluZyBidWlsZCB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuc2VydmVyUGF0aH0nYCk7XG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgU3ViUHJvY2VzcyhjbWQsIGFyZ3MsIHtcbiAgICAgIGN3ZDogdGhpcy5zZXJ2ZXJQYXRoLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGxldCBidWlsZExhc3RMaW5lcyA9IFtdO1xuXG4gICAgY29uc3QgbG9nTXNnID0gYE91dHB1dCBmcm9tIEdyYWRsZSAke3RoaXMuc2hvd0dyYWRsZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGA7XG4gICAgbG9nLmRlYnVnKGAke2xvZ01zZ30uIFRvIGNoYW5nZSB0aGlzLCB1c2UgJ3Nob3dHcmFkbGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIGdyYWRsZWJ1aWxkLm9uKCdzdHJlYW0tbGluZScsIChsaW5lKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG93R3JhZGxlTG9nKSB7XG4gICAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ1tTVERFUlJdJykpIHtcbiAgICAgICAgICBncmFkbGVMb2cud2FybihsaW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncmFkbGVMb2cuaW5mbyhsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGRMYXN0TGluZXMucHVzaChgJHtFT0x9JHtsaW5lfWApO1xuICAgICAgaWYgKGJ1aWxkTGFzdExpbmVzLmxlbmd0aCA+IEdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKSB7XG4gICAgICAgIGJ1aWxkTGFzdExpbmVzID0gYnVpbGRMYXN0TGluZXMuc2xpY2UoLUdSQURMRV9NQVhfRVJST1JfTE9HX0xJTkVTKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBncmFkbGVidWlsZC5zdGFydCgpO1xuICAgICAgYXdhaXQgZ3JhZGxlYnVpbGQuam9pbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gYnVpbGQgRXNwcmVzc28gc2VydmVyIC0gJHtlcnIubWVzc2FnZX1cXG5gICtcbiAgICAgICAgYEdyYWRsZSBlcnJvciBtZXNzYWdlOiR7RU9MfSR7YnVpbGRMYXN0TGluZXN9YDtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KG1zZyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFNlcnZlckJ1aWxkZXIsIFZFUlNJT05fS0VZUywgR1JBRExFX1VSTF9URU1QTEFURSwgYnVpbGRTZXJ2ZXJTaWduaW5nQ29uZmlnIH07XG5leHBvcnQgZGVmYXVsdCBTZXJ2ZXJCdWlsZGVyO1xuIl0sImZpbGUiOiJsaWIvc2VydmVyLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
214
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXItYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJHUkFETEVfVkVSU0lPTl9LRVkiLCJHUkFETEVfVVJMX1BSRUZJWCIsIkdSQURMRV9VUkxfVEVNUExBVEUiLCJHUkFETEVfTUFYX0VSUk9SX0xPR19MSU5FUyIsIkRFUEVOREVOQ1lfUFJPUF9OQU1FUyIsIlZFUlNJT05fS0VZUyIsImdyYWRsZUxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyIsImFyZ3MiLCJ6aXBBbGlnbiIsImtleXN0b3JlRmlsZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiU2VydmVyQnVpbGRlciIsImNvbnN0cnVjdG9yIiwic2VydmVyUGF0aCIsInNob3dHcmFkbGVMb2ciLCJidWlsZENvbmZpZ3VyYXRpb24iLCJ2ZXJzaW9uQ29uZmlndXJhdGlvbiIsInRvb2xzVmVyc2lvbnMiLCJzZXJ2ZXJWZXJzaW9ucyIsIl8iLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsImtleSIsImluY2x1ZGVzIiwibG9nIiwid2FybiIsInRlc3RBcHBQYWNrYWdlIiwic2lnbmluZ0NvbmZpZyIsInByb3BOYW1lIiwiYnVpbGQiLCJzZXRHcmFkbGVXcmFwcGVyVmVyc2lvbiIsImluc2VydEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMiLCJydW5CdWlsZFByb2Nlc3MiLCJnZXRDb21tYW5kIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiYnVpbGRQcm9wZXJ0eSIsImZpbHRlciIsIm1hcCIsInNlcnZlclZlcnNpb24iLCJncmFkbGVQcm9wZXJ0eSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJCb29sZWFuIiwicHVzaCIsImtleXMiLCJ1cHBlckZpcnN0IiwiayIsInYiLCJ2ZXJzaW9uIiwicHJvcGVydGllc1BhdGgiLCJwYXRoIiwicmVzb2x2ZSIsIm9yaWdpbmFsUHJvcGVydGllcyIsImZzIiwicmVhZEZpbGUiLCJuZXdQcm9wZXJ0aWVzIiwidXBkYXRlR3JhZGxlRGlzdFVybCIsIndyaXRlRmlsZSIsInByb3BlcnRpZXNDb250ZW50IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImhhc0FkZGl0aW9uYWxEZXBzIiwiaXNBcnJheSIsIkVycm9yIiwiaXNFbXB0eSIsImxpbmUiLCJ0cmltIiwiZGVwIiwidGVzdCIsImJ1aWxkUGF0aCIsImNvbmZpZ3VyYXRpb24iLCJwcmVmaXgiLCJkZXBzIiwiaW5mbyIsImRlYnVnIiwiam9pbiIsImdyYWRsZWJ1aWxkIiwiU3ViUHJvY2VzcyIsImN3ZCIsInN0ZGlvIiwiYnVpbGRMYXN0TGluZXMiLCJsb2dNc2ciLCJvbiIsInN0YXJ0c1dpdGgiLCJFT0wiLCJsZW5ndGgiLCJzdGFydCIsImVyciIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvckFuZFRocm93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsUUFBM0I7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxrQkFBMUI7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxvRUFBNUI7O0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsRUFBbkM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDLDJCQUFELEVBQThCLG1DQUE5QixDQUE5QjtBQUVBLE1BQU1DLFlBQVksR0FBRyxDQUNuQkwsa0JBRG1CLEVBRW5CLHFCQUZtQixFQUduQixZQUhtQixFQUluQixZQUptQixFQUtuQixRQUxtQixFQU1uQixXQU5tQixFQU9uQixRQVBtQixFQVFuQixxQkFSbUIsRUFTbkIscUJBVG1CLEVBVW5CLFdBVm1CLENBQXJCOzs7QUFhQSxNQUFNTSxTQUFTLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQWxCOztBQUVBLFNBQVNDLHdCQUFULENBQW1DQyxJQUFuQyxFQUF5QztBQUN2QyxTQUFPO0FBQ0xDLElB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cyc7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCBzeXN0ZW0gfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyB1cGRhdGVEZXBlbmRlbmN5TGluZXMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgR1JBRExFX1ZFUlNJT05fS0VZID0gJ2dyYWRsZSc7XG5jb25zdCBHUkFETEVfVVJMX1BSRUZJWCA9ICdkaXN0cmlidXRpb25Vcmw9JztcbmNvbnN0IEdSQURMRV9VUkxfVEVNUExBVEUgPSAnaHR0cHNcXFxcOi8vc2VydmljZXMuZ3JhZGxlLm9yZy9kaXN0cmlidXRpb25zL2dyYWRsZS1WRVJTSU9OLWFsbC56aXAnO1xuY29uc3QgR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMgPSAxNTtcbmNvbnN0IERFUEVOREVOQ1lfUFJPUF9OQU1FUyA9IFsnYWRkaXRpb25hbEFwcERlcGVuZGVuY2llcycsICdhZGRpdGlvbmFsQW5kcm9pZFRlc3REZXBlbmRlbmNpZXMnXTtcblxuY29uc3QgVkVSU0lPTl9LRVlTID0gW1xuICBHUkFETEVfVkVSU0lPTl9LRVksXG4gICdhbmRyb2lkR3JhZGxlUGx1Z2luJyxcbiAgJ2NvbXBpbGVTZGsnLFxuICAnYnVpbGRUb29scycsXG4gICdtaW5TZGsnLFxuICAndGFyZ2V0U2RrJyxcbiAgJ2tvdGxpbicsXG4gICdzb3VyY2VDb21wYXRpYmlsaXR5JyxcbiAgJ3RhcmdldENvbXBhdGliaWxpdHknLFxuICAnanZtVGFyZ2V0J1xuXTtcblxuY29uc3QgZ3JhZGxlTG9nID0gbG9nZ2VyLmdldExvZ2dlcignR3JhZGxlJyk7XG5cbmZ1bmN0aW9uIGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyAoYXJncykge1xuICByZXR1cm4ge1xuICAgIHppcEFsaWduOiB0cnVlLFxuICAgIGtleXN0b3JlRmlsZTogYXJncy5rZXlzdG9yZUZpbGUsXG4gICAga2V5c3RvcmVQYXNzd29yZDogYXJncy5rZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzOiBhcmdzLmtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkOiBhcmdzLmtleVBhc3N3b3JkXG4gIH07XG59XG5cbmNsYXNzIFNlcnZlckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgdGhpcy5zZXJ2ZXJQYXRoID0gYXJncy5zZXJ2ZXJQYXRoO1xuICAgIHRoaXMuc2hvd0dyYWRsZUxvZyA9IGFyZ3Muc2hvd0dyYWRsZUxvZztcblxuICAgIGNvbnN0IGJ1aWxkQ29uZmlndXJhdGlvbiA9IGFyZ3MuYnVpbGRDb25maWd1cmF0aW9uIHx8IHt9O1xuXG4gICAgY29uc3QgdmVyc2lvbkNvbmZpZ3VyYXRpb24gPSBidWlsZENvbmZpZ3VyYXRpb24udG9vbHNWZXJzaW9ucyB8fCB7fTtcbiAgICB0aGlzLnNlcnZlclZlcnNpb25zID0gXy5yZWR1Y2UodmVyc2lvbkNvbmZpZ3VyYXRpb24sIChhY2MsIHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChWRVJTSU9OX0tFWVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oYEdvdCB1bmV4cGVjdGVkICcke2tleX0nIGluIHRvb2xzVmVyc2lvbiBibG9jayBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLnRlc3RBcHBQYWNrYWdlID0gYXJncy50ZXN0QXBwUGFja2FnZTtcbiAgICB0aGlzLnNpZ25pbmdDb25maWcgPSBhcmdzLnNpZ25pbmdDb25maWc7XG5cbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBidWlsZENvbmZpZ3VyYXRpb25bcHJvcE5hbWVdIHx8IFtdO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJ1aWxkICgpIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJWZXJzaW9uc1tHUkFETEVfVkVSU0lPTl9LRVldKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldEdyYWRsZVdyYXBwZXJWZXJzaW9uKHRoaXMuc2VydmVyVmVyc2lvbnNbR1JBRExFX1ZFUlNJT05fS0VZXSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbnNlcnRBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKCk7XG5cbiAgICBhd2FpdCB0aGlzLnJ1bkJ1aWxkUHJvY2VzcygpO1xuICB9XG5cbiAgZ2V0Q29tbWFuZCAoKSB7XG4gICAgY29uc3QgY21kID0gc3lzdGVtLmlzV2luZG93cygpID8gJ2dyYWRsZXcuYmF0JyA6ICcuL2dyYWRsZXcnO1xuICAgIGNvbnN0IGJ1aWxkUHJvcGVydHkgPSAoa2V5LCB2YWx1ZSkgPT4gdmFsdWUgPyBgLVAke2tleX09JHt2YWx1ZX1gIDogbnVsbDtcbiAgICBsZXQgYXJncyA9IFZFUlNJT05fS0VZU1xuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IEdSQURMRV9WRVJTSU9OX0tFWSlcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzZXJ2ZXJWZXJzaW9uID0gdGhpcy5zZXJ2ZXJWZXJzaW9uc1trZXldO1xuICAgICAgICBjb25zdCBncmFkbGVQcm9wZXJ0eSA9IGBhcHBpdW0ke2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2tleS5zbGljZSgxKX1gO1xuICAgICAgICByZXR1cm4gYnVpbGRQcm9wZXJ0eShncmFkbGVQcm9wZXJ0eSwgc2VydmVyVmVyc2lvbik7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmICh0aGlzLnNpZ25pbmdDb25maWcpIHtcbiAgICAgIGFyZ3MucHVzaCguLi4oXG4gICAgICAgIF8ua2V5cyh0aGlzLnNpZ25pbmdDb25maWcpXG4gICAgICAgIC5tYXAoKGtleSkgPT4gW2BhcHBpdW0ke18udXBwZXJGaXJzdChrZXkpfWAsIHRoaXMuc2lnbmluZ0NvbmZpZ1trZXldXSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBidWlsZFByb3BlcnR5KGssIHYpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXN0QXBwUGFja2FnZSkge1xuICAgICAgYXJncy5wdXNoKGJ1aWxkUHJvcGVydHkoJ2FwcGl1bVRhcmdldFBhY2thZ2UnLCB0aGlzLnRlc3RBcHBQYWNrYWdlKSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnYXBwOmFzc2VtYmxlQW5kcm9pZFRlc3QnKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIHNldEdyYWRsZVdyYXBwZXJWZXJzaW9uICh2ZXJzaW9uKSB7XG4gICAgY29uc3QgcHJvcGVydGllc1BhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnZ3JhZGxlJywgJ3dyYXBwZXInLCAnZ3JhZGxlLXdyYXBwZXIucHJvcGVydGllcycpO1xuICAgIGNvbnN0IG9yaWdpbmFsUHJvcGVydGllcyA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB0aGlzLnVwZGF0ZUdyYWRsZURpc3RVcmwob3JpZ2luYWxQcm9wZXJ0aWVzLCB2ZXJzaW9uKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocHJvcGVydGllc1BhdGgsIG5ld1Byb3BlcnRpZXMsICd1dGY4Jyk7XG4gIH1cblxuICB1cGRhdGVHcmFkbGVEaXN0VXJsIChwcm9wZXJ0aWVzQ29udGVudCwgdmVyc2lvbikge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzQ29udGVudC5yZXBsYWNlKFxuICAgICAgbmV3IFJlZ0V4cChgXigke18uZXNjYXBlUmVnRXhwKEdSQURMRV9VUkxfUFJFRklYKX0pLiskYCwgJ2dtJyksXG4gICAgICBgJDEke0dSQURMRV9VUkxfVEVNUExBVEUucmVwbGFjZSgnVkVSU0lPTicsIHZlcnNpb24pfWBcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0QWRkaXRpb25hbERlcGVuZGVuY2llcyAoKSB7XG4gICAgbGV0IGhhc0FkZGl0aW9uYWxEZXBzID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBERVBFTkRFTkNZX1BST1BfTkFNRVMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KHRoaXNbcHJvcE5hbWVdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Byb3BOYW1lfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzW3Byb3BOYW1lXS5maWx0ZXIoKGxpbmUpID0+IF8udHJpbShsaW5lKSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzW3Byb3BOYW1lXSkge1xuICAgICAgICBpZiAoL1tcXHMnXFxcXCRdLy50ZXN0KGRlcCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpbmdsZSBxdW90ZXMsIGRvbGxhciBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMnICtcbiAgICAgICAgICAgIGAgYXJlIGRpc2FsbG93ZWQgaW4gYWRkaXRpb25hbCBkZXBlbmRlbmNpZXM6ICR7ZGVwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoYXNBZGRpdGlvbmFsRGVwcyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghaGFzQWRkaXRpb25hbERlcHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5zZXJ2ZXJQYXRoLCAnYXBwJywgJ2J1aWxkLmdyYWRsZS5rdHMnKTtcbiAgICBsZXQgY29uZmlndXJhdGlvbiA9IGF3YWl0IGZzLnJlYWRGaWxlKGJ1aWxkUGF0aCwgJ3V0ZjgnKTtcbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIERFUEVOREVOQ1lfUFJPUF9OQU1FUykge1xuICAgICAgY29uc3QgcHJlZml4ID0gcHJvcE5hbWUgPT09IERFUEVOREVOQ1lfUFJPUF9OQU1FU1swXVxuICAgICAgICA/ICdpbXBsZW1lbnRhdGlvbidcbiAgICAgICAgOiAnYW5kcm9pZFRlc3RJbXBsZW1lbnRhdGlvbic7XG4gICAgICBjb25zdCBkZXBzID0gdGhpc1twcm9wTmFtZV1cbiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gXy50cmltKGxpbmUpKVxuICAgICAgICAubWFwKChsaW5lKSA9PiBgJHtwcmVmaXh9KFwiJHtsaW5lfVwiKWApO1xuICAgICAgaWYgKF8uaXNFbXB0eShkZXBzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oYEFkZGluZyB0aGUgZm9sbG93aW5nICR7cHJvcE5hbWV9IHRvIGJ1aWxkLmdyYWRsZS5rdHM6ICR7ZGVwc31gKTtcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSB1cGRhdGVEZXBlbmRlbmN5TGluZXMoY29uZmlndXJhdGlvbiwgcHJvcE5hbWUsIGRlcHMpO1xuICAgIH1cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoYnVpbGRQYXRoLCBjb25maWd1cmF0aW9uLCAndXRmOCcpO1xuICB9XG5cbiAgYXN5bmMgcnVuQnVpbGRQcm9jZXNzICgpIHtcbiAgICBjb25zdCB7Y21kLCBhcmdzfSA9IHRoaXMuZ2V0Q29tbWFuZCgpO1xuICAgIGxvZy5kZWJ1ZyhgQmVnaW5uaW5nIGJ1aWxkIHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5zZXJ2ZXJQYXRofSdgKTtcbiAgICBjb25zdCBncmFkbGVidWlsZCA9IG5ldyBTdWJQcm9jZXNzKGNtZCwgYXJncywge1xuICAgICAgY3dkOiB0aGlzLnNlcnZlclBhdGgsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgbGV0IGJ1aWxkTGFzdExpbmVzID0gW107XG5cbiAgICBjb25zdCBsb2dNc2cgPSBgT3V0cHV0IGZyb20gR3JhZGxlICR7dGhpcy5zaG93R3JhZGxlTG9nID8gJ3dpbGwnIDogJ3dpbGwgbm90J30gYmUgbG9nZ2VkYDtcbiAgICBsb2cuZGVidWcoYCR7bG9nTXNnfS4gVG8gY2hhbmdlIHRoaXMsIHVzZSAnc2hvd0dyYWRsZUxvZycgZGVzaXJlZCBjYXBhYmlsaXR5YCk7XG4gICAgZ3JhZGxlYnVpbGQub24oJ3N0cmVhbS1saW5lJywgKGxpbmUpID0+IHtcbiAgICAgIGlmICh0aGlzLnNob3dHcmFkbGVMb2cpIHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnW1NUREVSUl0nKSkge1xuICAgICAgICAgIGdyYWRsZUxvZy53YXJuKGxpbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyYWRsZUxvZy5pbmZvKGxpbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBidWlsZExhc3RMaW5lcy5wdXNoKGAke0VPTH0ke2xpbmV9YCk7XG4gICAgICBpZiAoYnVpbGRMYXN0TGluZXMubGVuZ3RoID4gR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMpIHtcbiAgICAgICAgYnVpbGRMYXN0TGluZXMgPSBidWlsZExhc3RMaW5lcy5zbGljZSgtR1JBRExFX01BWF9FUlJPUl9MT0dfTElORVMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGdyYWRsZWJ1aWxkLnN0YXJ0KCk7XG4gICAgICBhd2FpdCBncmFkbGVidWlsZC5qb2luKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgbXNnID0gYFVuYWJsZSB0byBidWlsZCBFc3ByZXNzbyBzZXJ2ZXIgLSAke2Vyci5tZXNzYWdlfVxcbmAgK1xuICAgICAgICBgR3JhZGxlIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHtidWlsZExhc3RMaW5lc31gO1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3cobXNnKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU2VydmVyQnVpbGRlciwgVkVSU0lPTl9LRVlTLCBHUkFETEVfVVJMX1RFTVBMQVRFLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfTtcbmV4cG9ydCBkZWZhdWx0IFNlcnZlckJ1aWxkZXI7XG4iXSwiZmlsZSI6ImxpYi9zZXJ2ZXItYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -1,18 +1,20 @@
1
1
  {
2
- "version": 2,
2
+ "version": 3,
3
3
  "artifactType": {
4
4
  "type": "APK",
5
5
  "kind": "Directory"
6
6
  },
7
7
  "applicationId": "io.appium.espressoserver.test",
8
- "variantName": "processDebugAndroidTestResources",
8
+ "variantName": "debugAndroidTest",
9
9
  "elements": [
10
10
  {
11
11
  "type": "SINGLE",
12
12
  "filters": [],
13
+ "attributes": [],
13
14
  "versionCode": 0,
14
15
  "versionName": "",
15
16
  "outputFile": "app-debug-androidTest.apk"
16
17
  }
17
- ]
18
+ ],
19
+ "elementType": "File"
18
20
  }