appium-android-driver 5.8.3 → 5.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/build/lib/android-helpers.js +3 -26
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/driver.js +5 -2
- package/build/lib/driver.js.map +1 -1
- package/lib/android-helpers.js +4 -37
- package/lib/driver.js +5 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [5.8.5](https://github.com/appium/appium-android-driver/compare/v5.8.4...v5.8.5) (2022-12-24)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* Bump Appium Settings dependency ([#779](https://github.com/appium/appium-android-driver/issues/779)) ([8d96ec9](https://github.com/appium/appium-android-driver/commit/8d96ec99a2e9f0215d96d822aa23293582a3187f))
|
|
7
|
+
|
|
8
|
+
## [5.8.4](https://github.com/appium/appium-android-driver/compare/v5.8.3...v5.8.4) (2022-12-16)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* **deps-dev:** bump @appium/test-support from 2.0.2 to 3.0.0 ([#777](https://github.com/appium/appium-android-driver/issues/777)) ([c5fab48](https://github.com/appium/appium-android-driver/commit/c5fab48bc5f9936bb5bde55a0ecb55d020a259fd))
|
|
14
|
+
|
|
1
15
|
## [5.8.3](https://github.com/appium/appium-android-driver/compare/v5.8.2...v5.8.3) (2022-12-14)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -57,7 +57,6 @@ const CHROME_BROWSER_PACKAGE_ACTIVITY = {
|
|
|
57
57
|
};
|
|
58
58
|
const SETTINGS_HELPER_PKG_ID = 'io.appium.settings';
|
|
59
59
|
exports.SETTINGS_HELPER_PKG_ID = SETTINGS_HELPER_PKG_ID;
|
|
60
|
-
const SETTINGS_HELPER_UNLOCK_ACTIVITY = '.Unlock';
|
|
61
60
|
const EMULATOR_PATTERN = /\bemulator\b/i;
|
|
62
61
|
const APP_STATE = Object.freeze({
|
|
63
62
|
NOT_INSTALLED: 0,
|
|
@@ -588,28 +587,6 @@ helpers.pushStrings = async function pushStrings(language, adb, opts) {
|
|
|
588
587
|
}
|
|
589
588
|
return {};
|
|
590
589
|
};
|
|
591
|
-
helpers.unlockWithHelperApp = async function unlockWithHelperApp(adb) {
|
|
592
|
-
_logger.default.info('Unlocking screen');
|
|
593
|
-
let firstRun = true;
|
|
594
|
-
await (0, _asyncbox.retry)(3, async function launchHelper() {
|
|
595
|
-
if (firstRun) {
|
|
596
|
-
firstRun = false;
|
|
597
|
-
} else {
|
|
598
|
-
try {
|
|
599
|
-
if (!(await adb.isScreenLocked())) {
|
|
600
|
-
return;
|
|
601
|
-
}
|
|
602
|
-
} catch (e) {
|
|
603
|
-
_logger.default.warn(`Error in isScreenLocked: ${e.message}`);
|
|
604
|
-
_logger.default.warn('"adb shell dumpsys window" command has timed out.');
|
|
605
|
-
_logger.default.warn('The reason of this timeout is the delayed adb response. Resetting adb server can improve it.');
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
_logger.default.info(`Launching ${SETTINGS_HELPER_UNLOCK_ACTIVITY}`);
|
|
609
|
-
await adb.shell(['am', 'start', '-n', `${SETTINGS_HELPER_PKG_ID}/${SETTINGS_HELPER_UNLOCK_ACTIVITY}`, '-c', 'android.intent.category.LAUNCHER', '-a', 'android.intent.action.MAIN', '-f', '0x10200000']);
|
|
610
|
-
await _bluebird.default.delay(1000);
|
|
611
|
-
});
|
|
612
|
-
};
|
|
613
590
|
helpers.unlock = async function unlock(driver, adb, capabilities) {
|
|
614
591
|
if (!(await adb.isScreenLocked())) {
|
|
615
592
|
_logger.default.info('Screen already unlocked, doing nothing');
|
|
@@ -617,8 +594,8 @@ helpers.unlock = async function unlock(driver, adb, capabilities) {
|
|
|
617
594
|
}
|
|
618
595
|
_logger.default.debug('Screen is locked, trying to unlock');
|
|
619
596
|
if (!capabilities.unlockType && !capabilities.unlockKey) {
|
|
620
|
-
_logger.default.
|
|
621
|
-
await
|
|
597
|
+
_logger.default.info(`Neither 'unlockType' nor 'unlockKey' capability is provided. ` + `Assuming the device is locked with a simple lock screen.`);
|
|
598
|
+
await adb.dismissKeyguard();
|
|
622
599
|
return;
|
|
623
600
|
}
|
|
624
601
|
const {
|
|
@@ -784,4 +761,4 @@ helpers.bootstrap = _bootstrap.default;
|
|
|
784
761
|
helpers.unlocker = _unlockHelpers.default;
|
|
785
762
|
var _default = helpers;
|
|
786
763
|
exports.default = _default;
|
|
787
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT0NLX0FQUF9JRFNfU1RPUkUiLCJQQUNLQUdFX0lOU1RBTExfVElNRU9VVCIsIkNIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkiLCJjaHJvbWUiLCJwa2ciLCJhY3Rpdml0eSIsImNocm9taXVtIiwiY2hyb21lYmV0YSIsImJyb3dzZXIiLCJkZWZhdWx0IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIlNFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFkiLCJFTVVMQVRPUl9QQVRURVJOIiwiQVBQX1NUQVRFIiwiT2JqZWN0IiwiZnJlZXplIiwiTk9UX0lOU1RBTExFRCIsIk5PVF9SVU5OSU5HIiwiUlVOTklOR19JTl9CQUNLR1JPVU5EIiwiUlVOTklOR19JTl9GT1JFR1JPVU5EIiwiZW5zdXJlTmV0d29ya1NwZWVkIiwiYWRiIiwibmV0d29ya1NwZWVkIiwiXyIsInZhbHVlcyIsIk5FVFdPUktfU1BFRUQiLCJpbmNsdWRlcyIsImxvZ2dlciIsIndhcm4iLCJGVUxMIiwicHJlcGFyZUF2ZEFyZ3MiLCJvcHRzIiwiaXNIZWFkbGVzcyIsImF2ZEFyZ3MiLCJyZXN1bHQiLCJpc0FycmF5IiwicHVzaCIsInV0aWwiLCJzaGVsbFBhcnNlIiwidG9DcmVkZW50aWFsVHlwZSIsInVubG9ja1R5cGUiLCJQSU5fVU5MT0NLIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJQQVNTV09SRF9VTkxPQ0siLCJQQVRURVJOX1VOTE9DSyIsIkVycm9yIiwiaGVscGVycyIsImNyZWF0ZUJhc2VBREIiLCJhZGJQb3J0Iiwic3VwcHJlc3NLaWxsU2VydmVyIiwicmVtb3RlQWRiSG9zdCIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJhZGJFeGVjVGltZW91dCIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJyZW1vdGVBcHBzQ2FjaGVMaW1pdCIsImJ1aWxkVG9vbHNWZXJzaW9uIiwiYWxsb3dPZmZsaW5lRGV2aWNlcyIsImFsbG93RGVsYXlBZGIiLCJBREIiLCJjcmVhdGVBREIiLCJwcmVwYXJlRW11bGF0b3IiLCJhdmQiLCJhdmRFbnYiLCJlbnYiLCJsYW5ndWFnZSIsImxvY2FsZSIsImNvdW50cnkiLCJhdmRMYXVuY2hUaW1lb3V0IiwibGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsInJlYWR5VGltZW91dCIsImF2ZE5hbWUiLCJyZXBsYWNlIiwiaXNFbXVsYXRvclJ1bm5pbmciLCJnZXRSdW5uaW5nQVZEV2l0aFJldHJ5IiwiZSIsImRlYnVnIiwibWVzc2FnZSIsImFyZ3MiLCJraWxsRW11bGF0b3IiLCJsYXVuY2hBVkQiLCJlbnN1cmVEZXZpY2VMb2NhbGUiLCJzY3JpcHQiLCJpc1N0cmluZyIsInNldERldmljZUxhbmd1YWdlQ291bnRyeSIsImVuc3VyZUN1cnJlbnRMb2NhbGUiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJ1ZGlkIiwiZW1Qb3J0IiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJpbmZvIiwiZGV2aWNlcyIsImdldERldmljZXNXaXRoUmV0cnkiLCJtYXAiLCJlcnJvckFuZFRocm93IiwiZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyIsInBsYXRmb3JtVmVyc2lvbiIsInRyaW0iLCJzZW12ZXIiLCJjb2VyY2UiLCJhdmFpbERldmljZXMiLCJwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUiLCJkZXZpY2UiLCJzZXREZXZpY2VJZCIsInJhd0RldmljZU9TIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlT1MiLCJib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQiLCJ2YWxpZCIsImJvdGhWZXJzaW9uc0FyZVN0cmluZ3MiLCJ2ZXJzaW9uIiwidG9Mb3dlciIsIm1ham9yIiwibWlub3IiLCJndCIsImtleXMiLCJqb2luIiwic2V0RW11bGF0b3JQb3J0IiwidmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyIsImtleSIsIm5hbWUiLCJtYXRjaCIsImV4ZWMiLCJpbmRleCIsInN1YnN0cmluZyIsImdldExhdW5jaEluZm8iLCJhcHAiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsInJlc2V0QXBwIiwiZmFzdFJlc2V0IiwiZnVsbFJlc2V0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiYXV0b0dyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsImlzSW5zdGFsbGVkIiwiaXNBcHBJbnN0YWxsZWQiLCJmb3JjZVN0b3AiLCJpZ24iLCJvdXRwdXQiLCJjbGVhciIsInRvTG93ZXJDYXNlIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsImVycm9yIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbCIsImdyYW50UGVybWlzc2lvbnMiLCJ0aW1lb3V0IiwiaW5zdGFsbEFwayIsImVuZm9yY2VBcHBJbnN0YWxsIiwiYXBwU3RhdGUiLCJ3YXNVbmluc3RhbGxlZCIsImluc3RhbGxPclVwZ3JhZGUiLCJlbmZvcmNlQ3VycmVudEJ1aWxkIiwiaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsImluc3RhbGxPdGhlckFwa3MiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwib3RoZXJBcHAiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYXBwUGFja2FnZXMiLCJmaWx0ZXJQYWNrYWdlcyIsImdldFRoaXJkUGFydHlQYWNrYWdlcyIsInBhY2thZ2VzU3RyaW5nIiwic2hlbGwiLCJhcHBQYWNrYWdlc0FycmF5Iiwic3BsaXQiLCJFT0wiLCJkaWZmZXJlbmNlIiwiZXJyIiwiaW5pdFVuaWNvZGVLZXlib2FyZCIsImRlZmF1bHRJTUUiLCJhcHBpdW1JTUUiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJzZXRNb2NrTG9jYXRpb25BcHAiLCJnZXRBcGlMZXZlbCIsInBrZ0lkcyIsImZpbGVFeGlzdHMiLCJKU09OIiwicGFyc2UiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJzcmNQYXRoIiwicGF0aCIsInBvc2l4IiwiYmFzZW5hbWUiLCJmcyIsIndyaXRlRmlsZSIsInN0cmluZ2lmeSIsInB1c2hGaWxlIiwicmltcmFmIiwicmVzZXRNb2NrTG9jYXRpb24iLCJ0aGlyZFBhcnR5UGtnSWRzUHJvbWlzZSIsInRoaXJkUGFydHlQa2dJZHMiLCJyZXN1bHRQa2dzIiwiaW50ZXJzZWN0aW9uIiwic2l6ZSIsInBrZ0lkIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeSIsInJldHJ5SW5zdGFsbEhlbHBlckFwcCIsInB1c2hTZXR0aW5nc0FwcCIsInRocm93RXJyb3IiLCJzZXR0aW5nc0Fwa1BhdGgiLCJwcm9jZXNzRXhpc3RzIiwiYXBpTGV2ZWwiLCJwZXJtcyIsIngiLCJyZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwIiwiaXNFbXVsYXRvciIsInB1c2hTdHJpbmdzIiwicmVtb3RlRGlyIiwic3RyaW5nc0pzb24iLCJyZW1vdGVGaWxlIiwicmVzb2x2ZSIsInB1bGxBcGsiLCJ0bXBEaXIiLCJpc0VtcHR5IiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImRlbGF5IiwidW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCIsInVubG9ja2VyIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJpc05pbCIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJmYXN0VW5sb2NrIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwidW5sb2NrTWV0aG9kIiwicGluVW5sb2NrIiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGFzc3dvcmRVbmxvY2siLCJwYXR0ZXJuVW5sb2NrIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ2ZXJpZnlVbmxvY2siLCJ0aW1lb3V0TXMiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzVW5kZWZpbmVkIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwib2JqIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHBhdGggYXMgc2V0dGluZ3NBcGtQYXRoIH0gZnJvbSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmltcG9ydCBCb290c3RyYXAgZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFEQiBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgdW5sb2NrZXIsIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULFxuICBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbn0gZnJvbSAnLi91bmxvY2staGVscGVycyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IE1PQ0tfQVBQX0lEU19TVE9SRSA9ICcvZGF0YS9sb2NhbC90bXAvbW9ja19hcHBzLmpzb24nO1xuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGxldCBpc0VtdWxhdG9yUnVubmluZyA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkRXaXRoUmV0cnkoYXZkTmFtZSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZGVidWcoYEVtdWxhdG9yICcke2F2ZE5hbWV9JyBpcyBub3QgcnVubmluZzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgaXNFbXVsYXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKGlzRW11bGF0b3JSdW5uaW5nKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIHByb3ZpZGUgJ2FwcCcgb3B0aW9uIHRvIGluc3RhbGwgJyR7YXBwUGFja2FnZX0nIG9yIGAgK1xuICAgICAgYGNvbnNpZGVyIHNldHRpbmcgJ25vUmVzZXQnIHRvICd0cnVlJyBpZiAnJHthcHBQYWNrYWdlfScgaXMgc3VwcG9zZWQgdG8gYmUgcHJlaW5zdGFsbGVkLmApO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGxldCBwa2dJZHMgPSBbXTtcbiAgICBpZiAoYXdhaXQgYWRiLmZpbGVFeGlzdHMoTU9DS19BUFBfSURTX1NUT1JFKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGtnSWRzID0gSlNPTi5wYXJzZShhd2FpdCBhZGIuc2hlbGwoWydjYXQnLCBNT0NLX0FQUF9JRFNfU1RPUkVdKSk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIGlmIChwa2dJZHMuaW5jbHVkZXMoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwa2dJZHMucHVzaChhcHApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5wb3NpeC5qb2luKHRtcFJvb3QsIHBhdGgucG9zaXguYmFzZW5hbWUoTU9DS19BUFBfSURTX1NUT1JFKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBKU09OLnN0cmluZ2lmeShwa2dJZHMpLCAndXRmOCcpO1xuICAgICAgYXdhaXQgYWRiLnB1c2hGaWxlKHNyY1BhdGgsIE1PQ0tfQVBQX0lEU19TVE9SRSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHBlcnNpc3QgbW9jayBsb2NhdGlvbiBhcHAgaWQgJyR7YXBwfSc6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLnJlc2V0TW9ja0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gcmVzZXRNb2NrTG9jYXRpb24gKGFkYikge1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydzZXR0aW5ncycsICdwdXQnLCAnc2VjdXJlJywgJ21vY2tfbG9jYXRpb24nLCAnMCddKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aGlyZFBhcnR5UGtnSWRzUHJvbWlzZSA9IGhlbHBlcnMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYik7XG4gICAgbGV0IHBrZ0lkcyA9IFtdO1xuICAgIGlmIChhd2FpdCBhZGIuZmlsZUV4aXN0cyhNT0NLX0FQUF9JRFNfU1RPUkUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwa2dJZHMgPSBKU09OLnBhcnNlKGF3YWl0IGFkYi5zaGVsbChbJ2NhdCcsIE1PQ0tfQVBQX0lEU19TVE9SRV0pKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgY29uc3QgdGhpcmRQYXJ0eVBrZ0lkcyA9IGF3YWl0IHRoaXJkUGFydHlQa2dJZHNQcm9taXNlO1xuICAgIC8vIE9ubHkgaW5jbHVkZSBjdXJyZW50bHkgaW5zdGFsbGVkIHBhY2thZ2VzXG4gICAgY29uc3QgcmVzdWx0UGtncyA9IF8uaW50ZXJzZWN0aW9uKHBrZ0lkcywgdGhpcmRQYXJ0eVBrZ0lkcyk7XG4gICAgaWYgKF8uc2l6ZShyZXN1bHRQa2dzKSA8PSAxKSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgcmVzdWx0UGtnc1swXSA/PyBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2RlbnknXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgbW9ja19sb2NhdGlvbiBwZXJtaXNzaW9uIGZvciB0aGUgZm9sbG93aW5nIGFwcHM6ICR7cmVzdWx0UGtnc31gKTtcbiAgICBhd2FpdCBCLmFsbChyZXN1bHRQa2dzLm1hcCgocGtnSWQpID0+IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgcGtnSWQsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnZGVueSddKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9KSgpKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcmVzZXQgbW9jayBsb2NhdGlvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5pbnN0YWxsSGVscGVyQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhlbHBlckFwcCAoYWRiLCBhcGtQYXRoLCBwYWNrYWdlSWQpIHtcbiAgLy8gU29tZXRpbWVzIGFkYiBwdXNoIG9yIGFkYiBpbnN0YWwgdGFrZSBtb3JlIHRpbWUgdGhhbiBleHBlY3RlZCB0byBpbnN0YWxsIGFuIGFwcFxuICAvLyBlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzL2lzc3Vlcy80MCNpc3N1ZWNvbW1lbnQtNDc2NTkzMTc0XG4gIGF3YWl0IHJldHJ5KDIsIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBrUGF0aCwgcGFja2FnZUlkLCB7Z3JhbnRQZXJtaXNzaW9uczogdHJ1ZX0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUHVzaGVzIGFuZCBpbnN0YWxscyBpby5hcHBpdW0uc2V0dGluZ3MgYXBwLlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzZXR0aW5nIGFwcCBpcyByZXF1aXJlZFxuICpcbiAqIEBwYXJhbSB7QWRifSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdGhyb3dFcnJvciBbZmFsc2VdIC0gV2hldGhlciB0aHJvdyBhbiBlcnJvciBpZiBTZXR0aW5ncyBhcHAgZmFpbHMgdG8gc3RhcnRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aHJvd0Vycm9yIGlzIHRydWUgYW5kIHNvbWV0aGluZyBoYXBwZW5zIGluIGluc3RhbGxhdGlvbiBzdGVwXG4gKi9cbmhlbHBlcnMucHVzaFNldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcHVzaFNldHRpbmdzQXBwIChhZGIsIHRocm93RXJyb3IgPSBmYWxzZSwgb3B0cyA9IHt9KSB7XG4gIGxvZ2dlci5kZWJ1ZygnUHVzaGluZyBzZXR0aW5ncyBhcGsgdG8gZGV2aWNlLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAoYWRiLCBzZXR0aW5nc0Fwa1BhdGgsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHRocm93RXJyb3IpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBJZ25vcmVkIGVycm9yIHdoaWxlIGluc3RhbGxpbmcgJyR7c2V0dGluZ3NBcGtQYXRofSc6IGAgK1xuICAgICAgICAgICAgICAgIGAnJHtlcnIubWVzc2FnZX0nLiBGZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhpcyBoZWxwZXIgYCArXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUgdGhlIGFwayBzdWNoIGFzIHRvZ2dsZSBXaUZpIGFuZCBnZXR0aW5nIGxvY2F0aW9uICcgK1xuICAgICAgICAgICAgICAgICd3aWxsIHJhaXNlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0uJyk7XG4gIH1cblxuICAvLyBSZWluc3RhbGwgd291bGQgc3RvcCB0aGUgc2V0dGluZ3MgaGVscGVyIHByb2Nlc3MgYW55d2F5LCBzb1xuICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGlsbCBydW5uaW5nXG4gIGlmIChhd2FpdCBhZGIucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfUEtHX0lEKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSBpcyBhbHJlYWR5IHJ1bm5pbmcuIGAgK1xuICAgICAgYFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgaXRzIHBlcm1pc3Npb25zLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmIChhcGlMZXZlbCA+PSAyOSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzI2ludGVybmFsLWF1ZGlvLS12aWRlby1yZWNvcmRpbmdcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdQUk9KRUNUX01FRElBJywgJ2FsbG93J10pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgfVxuICB9XG4gIGlmIChhcGlMZXZlbCA8PSAyMykgeyAvLyBBbmRyb2lkIDYtIGRldmljZXMgc2hvdWxkIGhhdmUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgIGNvbnN0IHBlcm1zID0gWydTRVRfQU5JTUFUSU9OX1NDQUxFJywgJ0NIQU5HRV9DT05GSUdVUkFUSU9OJywgJ0FDQ0VTU19GSU5FX0xPQ0FUSU9OJ107XG4gICAgbG9nZ2VyLmluZm8oYEdyYW50aW5nIHBlcm1pc3Npb25zICR7cGVybXN9IHRvICcke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9J2ApO1xuICAgIGF3YWl0IGFkYi5ncmFudFBlcm1pc3Npb25zKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHBlcm1zLm1hcCgoeCkgPT4gYGFuZHJvaWQucGVybWlzc2lvbi4ke3h9YCkpO1xuICB9XG5cbiAgLy8gbGF1bmNoIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAgZHVlIHRvIHNldHRpbmdzIGZhaWxpbmcgdG8gYmUgc2V0XG4gIC8vIGlmIHRoZSBhcHAgaXMgbm90IGxhdW5jaGVkIHByaW9yIHRvIHN0YXJ0IHRoZSBzZXNzaW9uIG9uIGFuZHJvaWQgNytcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy84OTU3XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoe1xuICAgICAgdGltZW91dDogaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykgPyAzMDAwMCA6IDUwMDBcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgc3RyaW5nLnhtbCBhbmQgY29udmVydHMgaXQgdG8gc3RyaW5nLmpzb24gYW5kIHB1c2hlc1xuICogaXQgdG8gL2RhdGEvbG9jYWwvdG1wL3N0cmluZy5qc29uIG9uIGZvciB1c2Ugb2YgYm9vdHN0cmFwXG4gKiBJZiBhcHAgaXMgbm90IHByZXNlbnQgdG8gZXh0cmFjdCBzdHJpbmcueG1sIGl0IGRlbGV0ZXMgcmVtb3RlIHN0cmluZ3MuanNvblxuICogSWYgYXBwIGRvZXMgbm90IGhhdmUgc3RyaW5ncy54bWwgd2UgcHVzaCBhbiBlbXB0eSBqc29uIG9iamVjdCB0byByZW1vdGVcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UgYWJicmV2aWF0aW9uLCBmb3IgZXhhbXBsZSAnZnInLiBUaGUgZGVmYXVsdCBsYW5ndWFnZVxuICogaXMgdXNlZCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBkZWZpbmVkLlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRpY3Rpb25hcnksIHdoZXJlIHN0cmluZyByZXNvdXJjZSBpZGVudGlmaWVycyBhcmUga2V5c1xuICogYWxvbmcgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIG9yIGFuIGVtcHR5IG9iamVjdFxuICogaWYgbm8gbWF0Y2hpbmcgcmVzb3VyY2VzIHdlcmUgZXh0cmFjdGVkLlxuICovXG5oZWxwZXJzLnB1c2hTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gcHVzaFN0cmluZ3MgKGxhbmd1YWdlLCBhZGIsIG9wdHMpIHtcbiAgY29uc3QgcmVtb3RlRGlyID0gJy9kYXRhL2xvY2FsL3RtcCc7XG4gIGNvbnN0IHN0cmluZ3NKc29uID0gJ3N0cmluZ3MuanNvbic7XG4gIGNvbnN0IHJlbW90ZUZpbGUgPSBwYXRoLnBvc2l4LnJlc29sdmUocmVtb3RlRGlyLCBzdHJpbmdzSnNvbik7XG5cbiAgLy8gY2xlYW4gdXAgcmVtb3RlIHN0cmluZy5qc29uIGlmIHByZXNlbnRcbiAgYXdhaXQgYWRiLnJpbXJhZihyZW1vdGVGaWxlKTtcblxuICBsZXQgYXBwO1xuICB0cnkge1xuICAgIGFwcCA9IG9wdHMuYXBwIHx8IGF3YWl0IGFkYi5wdWxsQXBrKG9wdHMuYXBwUGFja2FnZSwgb3B0cy50bXBEaXIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuaW5mbyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7b3B0cy5hcHBQYWNrYWdlfScgdG8gJyR7b3B0cy50bXBEaXJ9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KG9wdHMuYXBwUGFja2FnZSkgfHwgIShhd2FpdCBmcy5leGlzdHMoYXBwKSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIGFwcCBvciBwYWNrYWdlIHNwZWNpZmllZC4gUmV0dXJuaW5nIGVtcHR5IHN0cmluZ3NgKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBzdHJpbmdzVG1wRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG1wRGlyLCBvcHRzLmFwcFBhY2thZ2UpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRXh0cmFjdGluZyBzdHJpbmdzIGZyb20gYXBrJywgYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgY29uc3Qge2Fwa1N0cmluZ3MsIGxvY2FsUGF0aH0gPSBhd2FpdCBhZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGF3YWl0IGFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRGlyKTtcbiAgICByZXR1cm4gYXBrU3RyaW5ncztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYENvdWxkIG5vdCBnZXQgc3RyaW5ncywgY29udGludWluZyBhbnl3YXkuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbCgnZWNobycsIFtgJ3t9JyA+ICR7cmVtb3RlRmlsZX1gXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHN0cmluZ3NUbXBEaXIpO1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcCA9IGFzeW5jIGZ1bmN0aW9uIHVubG9ja1dpdGhIZWxwZXJBcHAgKGFkYikge1xuICBsb2dnZXIuaW5mbygnVW5sb2NraW5nIHNjcmVlbicpO1xuXG4gIC8vIFVubG9jayBzdWNjZWVkIHdpdGggYSBjb3VwbGUgb2YgcmV0cmllcy5cbiAgbGV0IGZpcnN0UnVuID0gdHJ1ZTtcbiAgYXdhaXQgcmV0cnkoMywgYXN5bmMgZnVuY3Rpb24gbGF1bmNoSGVscGVyICgpIHtcbiAgICAvLyBUbyByZWR1Y2UgYSB0aW1lIHRvIGNhbGwgYWRiLmlzU2NyZWVuTG9ja2VkKCkgc2luY2UgYGFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd2AgaXMgZWFzeSB0byBoYW5nIGFkYiBjb21tYW5kc1xuICAgIGlmIChmaXJzdFJ1bikge1xuICAgICAgZmlyc3RSdW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBFcnJvciBpbiBpc1NjcmVlbkxvY2tlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdcImFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd1wiIGNvbW1hbmQgaGFzIHRpbWVkIG91dC4nKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1RoZSByZWFzb24gb2YgdGhpcyB0aW1lb3V0IGlzIHRoZSBkZWxheWVkIGFkYiByZXNwb25zZS4gUmVzZXR0aW5nIGFkYiBzZXJ2ZXIgY2FuIGltcHJvdmUgaXQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYExhdW5jaGluZyAke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8ke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnLWEnLCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgIF0pO1xuICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gIH0pO1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuXG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLndhaXRGb3JEZXZpY2UoKTtcbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvciwgb3B0cyk7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgaWYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0TW9ja0xvY2F0aW9uKGFkYik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBNEI7QUFBQTtBQUU1QixNQUFNQSxrQkFBa0IsR0FBRyxnQ0FBZ0M7QUFDM0QsTUFBTUMsdUJBQXVCLEdBQUcsS0FBSztBQUVyQyxNQUFNQywrQkFBK0IsR0FBRztFQUN0Q0MsTUFBTSxFQUFFO0lBQ05DLEdBQUcsRUFBRSxvQkFBb0I7SUFDekJDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsUUFBUSxFQUFFO0lBQ1JGLEdBQUcsRUFBRSwyQkFBMkI7SUFDaENDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsVUFBVSxFQUFFO0lBQ1ZILEdBQUcsRUFBRSxpQkFBaUI7SUFDdEJDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREcsT0FBTyxFQUFFO0lBQ1BKLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUJDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRCxrQkFBa0IsRUFBRTtJQUNsQkQsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNELGtCQUFrQixFQUFFO0lBQ2xCRCxHQUFHLEVBQUUsNEJBQTRCO0lBQ2pDQyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RJLE9BQU8sRUFBRTtJQUNQTCxHQUFHLEVBQUUsb0JBQW9CO0lBQ3pCQyxRQUFRLEVBQUU7RUFDWjtBQUNGLENBQUM7QUFDRCxNQUFNSyxzQkFBc0IsR0FBRyxvQkFBb0I7QUFBQztBQUNwRCxNQUFNQywrQkFBK0Is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
|
|
764
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT0NLX0FQUF9JRFNfU1RPUkUiLCJQQUNLQUdFX0lOU1RBTExfVElNRU9VVCIsIkNIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkiLCJjaHJvbWUiLCJwa2ciLCJhY3Rpdml0eSIsImNocm9taXVtIiwiY2hyb21lYmV0YSIsImJyb3dzZXIiLCJkZWZhdWx0IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJPYmplY3QiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJpc0VtdWxhdG9yUnVubmluZyIsImdldFJ1bm5pbmdBVkRXaXRoUmV0cnkiLCJlIiwiZGVidWciLCJtZXNzYWdlIiwiYXJncyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwia2V5IiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwicGtnSWRzIiwiZmlsZUV4aXN0cyIsIkpTT04iLCJwYXJzZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInNyY1BhdGgiLCJwYXRoIiwicG9zaXgiLCJiYXNlbmFtZSIsImZzIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwicHVzaEZpbGUiLCJyaW1yYWYiLCJyZXNldE1vY2tMb2NhdGlvbiIsInRoaXJkUGFydHlQa2dJZHNQcm9taXNlIiwidGhpcmRQYXJ0eVBrZ0lkcyIsInJlc3VsdFBrZ3MiLCJpbnRlcnNlY3Rpb24iLCJzaXplIiwicGtnSWQiLCJpbnN0YWxsSGVscGVyQXBwIiwiYXBrUGF0aCIsInBhY2thZ2VJZCIsInJldHJ5IiwicmV0cnlJbnN0YWxsSGVscGVyQXBwIiwicHVzaFNldHRpbmdzQXBwIiwidGhyb3dFcnJvciIsInNldHRpbmdzQXBrUGF0aCIsInByb2Nlc3NFeGlzdHMiLCJhcGlMZXZlbCIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJpc0VtdWxhdG9yIiwicHVzaFN0cmluZ3MiLCJyZW1vdGVEaXIiLCJzdHJpbmdzSnNvbiIsInJlbW90ZUZpbGUiLCJyZXNvbHZlIiwicHVsbEFwayIsInRtcERpciIsImlzRW1wdHkiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsImlzU2NyZWVuTG9ja2VkIiwidW5sb2NrS2V5IiwiZGlzbWlzc0tleWd1YXJkIiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCIsInVubG9ja2VyIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJpc05pbCIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJmYXN0VW5sb2NrIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwidW5sb2NrTWV0aG9kIiwicGluVW5sb2NrIiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGFzc3dvcmRVbmxvY2siLCJwYXR0ZXJuVW5sb2NrIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ2ZXJpZnlVbmxvY2siLCJ0aW1lb3V0TXMiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzVW5kZWZpbmVkIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwib2JqIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHBhdGggYXMgc2V0dGluZ3NBcGtQYXRoIH0gZnJvbSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmltcG9ydCBCb290c3RyYXAgZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFEQiBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgdW5sb2NrZXIsIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULFxuICBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbn0gZnJvbSAnLi91bmxvY2staGVscGVycyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IE1PQ0tfQVBQX0lEU19TVE9SRSA9ICcvZGF0YS9sb2NhbC90bXAvbW9ja19hcHBzLmpzb24nO1xuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgRU1VTEFUT1JfUEFUVEVSTiA9IC9cXGJlbXVsYXRvclxcYi9pO1xuLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBpbiBzeW5jIHdpdGhcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZS94Y3VpYXBwbGljYXRpb25zdGF0ZXJ1bm5pbmdiYWNrZ3JvdW5kP2xhbmd1YWdlPW9iamNcbmNvbnN0IEFQUF9TVEFURSA9IE9iamVjdC5mcmVlemUoe1xuICBOT1RfSU5TVEFMTEVEOiAwLFxuICBOT1RfUlVOTklORzogMSxcbiAgUlVOTklOR19JTl9CQUNLR1JPVU5EOiAzLFxuICBSVU5OSU5HX0lOX0ZPUkVHUk9VTkQ6IDRcbn0pO1xuXG5cbmZ1bmN0aW9uIGVuc3VyZU5ldHdvcmtTcGVlZCAoYWRiLCBuZXR3b3JrU3BlZWQpIHtcbiAgaWYgKF8udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKS5pbmNsdWRlcyhuZXR3b3JrU3BlZWQpKSB7XG4gICAgcmV0dXJuIG5ldHdvcmtTcGVlZDtcbiAgfVxuICBsb2dnZXIud2FybihgV3JvbmcgbmV0d29yayBzcGVlZCBwYXJhbSAnJHtuZXR3b3JrU3BlZWR9JywgdXNpbmcgZGVmYXVsdDogJHthZGIuTkVUV09SS19TUEVFRC5GVUxMfS4gYCArXG4gICAgYFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoYWRiLk5FVFdPUktfU1BFRUQpfWApO1xuICByZXR1cm4gYWRiLk5FVFdPUktfU1BFRUQuRlVMTDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUF2ZEFyZ3MgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgbmV0d29ya1NwZWVkLFxuICAgIGlzSGVhZGxlc3MsXG4gICAgYXZkQXJncyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBpZiAoYXZkQXJncykge1xuICAgIGlmIChfLmlzQXJyYXkoYXZkQXJncykpIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmF2ZEFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCguLi4odXRpbC5zaGVsbFBhcnNlKGAke2F2ZEFyZ3N9YCkpKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5ldHdvcmtTcGVlZCkge1xuICAgIHJlc3VsdC5wdXNoKCctbmV0c3BlZWQnLCBlbnN1cmVOZXR3b3JrU3BlZWQoYWRiLCBuZXR3b3JrU3BlZWQpKTtcbiAgfVxuICBpZiAoaXNIZWFkbGVzcykge1xuICAgIHJlc3VsdC5wdXNoKCctbm8td2luZG93Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdG9DcmVkZW50aWFsVHlwZSAodW5sb2NrVHlwZSkge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgW1BJTl9VTkxPQ0tdOiAncGluJyxcbiAgICBbUElOX1VOTE9DS19LRVlfRVZFTlRdOiAncGluJyxcbiAgICBbUEFTU1dPUkRfVU5MT0NLXTogJ3Bhc3N3b3JkJyxcbiAgICBbUEFUVEVSTl9VTkxPQ0tdOiAncGF0dGVybicsXG4gIH1bdW5sb2NrVHlwZV07XG4gIGlmIChyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIHR5cGUgJyR7dW5sb2NrVHlwZX0nIGlzIG5vdCBrbm93bmApO1xufVxuXG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuaGVscGVycy5jcmVhdGVCYXNlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQmFzZUFEQiAob3B0cyA9IHt9KSB7XG4gIC8vIGZpbHRlciBvdXQgYW55IHVud2FudGVkIG9wdGlvbnMgc2VudCBpblxuICAvLyB0aGlzIGxpc3Qgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgQURCIHRha2VzIG1vcmUgYXJndW1lbnRzXG4gIGNvbnN0IHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IEFEQi5jcmVhdGVBREIoe1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0pO1xufTtcblxuaGVscGVycy5wcmVwYXJlRW11bGF0b3IgPSBhc3luYyBmdW5jdGlvbiBwcmVwYXJlRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgYXZkLFxuICAgIGF2ZEVudjogZW52LFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZTogY291bnRyeSxcbiAgICBhdmRMYXVuY2hUaW1lb3V0OiBsYXVuY2hUaW1lb3V0LFxuICAgIGF2ZFJlYWR5VGltZW91dDogcmVhZHlUaW1lb3V0LFxuICB9ID0gb3B0cztcbiAgaWYgKCFhdmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsYXVuY2ggQVZEIHdpdGhvdXQgQVZEIG5hbWUnKTtcbiAgfVxuXG4gIGNvbnN0IGF2ZE5hbWUgPSBhdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgbGV0IGlzRW11bGF0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIuZ2V0UnVubmluZ0FWRFdpdGhSZXRyeShhdmROYW1lLCA1MDAwKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRW11bGF0b3IgJyR7YXZkTmFtZX0nIGlzIG5vdCBydW5uaW5nOiAke2UubWVzc2FnZX1gKTtcbiAgICBpc0VtdWxhdG9yUnVubmluZyA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBwcmVwYXJlQXZkQXJncyhhZGIsIG9wdHMpO1xuICBpZiAoaXNFbXVsYXRvclJ1bm5pbmcpIHtcbiAgICBpZiAoYXJncy5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEtpbGxpbmcgJyR7YXZkTmFtZX0nIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgd2lwZWQgYXQgc3RhcnQuYCk7XG4gICAgICBhd2FpdCBhZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vdCBsYXVuY2hpbmcgQVZEIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBydW5uaW5nLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBhd2FpdCBhZGIubGF1bmNoQVZEKGF2ZCwge1xuICAgIGFyZ3MsXG4gICAgZW52LFxuICAgIGxhbmd1YWdlLFxuICAgIGNvdW50cnksXG4gICAgbGF1bmNoVGltZW91dCxcbiAgICByZWFkeVRpbWVvdXQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgYW5kIGVuc3VyZSB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBUaGUgbGFuZ3VhZ2UgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byBsb3dlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyLDh9LiBlLmcuIGVuLCBqYSA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudHJ5IC0gQ291bnRyeS4gVGhlIGNvdW50cnkgKHJlZ2lvbikgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB1cHBlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyfSB8IFswLTldezN9LiBlLmcuIFVTLCBKUCA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7P3N0cmluZ30gc2NyaXB0IC0gU2NyaXB0LiBUaGUgc2NyaXB0IGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB0aXRsZSBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXs0fS4gZS5nLiBIYW5zIGluIHpoLUhhbnMtQ04gOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbGVkIHRvIHNldCBsb2NhbGUgcHJvcGVybHlcbiAqL1xuaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUgPSBhc3luYyBmdW5jdGlvbiBlbnN1cmVEZXZpY2VMb2NhbGUgKGFkYiwgbGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGxhbmd1YWdlKSAmJiAhXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvZ2dlci53YXJuKGBzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkgcmVxdWlyZXMgbGFuZ3VhZ2Ugb3IgY291bnRyeS5gKTtcbiAgICBsb2dnZXIud2FybihgR290IGxhbmd1YWdlOiAnJHtsYW5ndWFnZX0nIGFuZCBjb3VudHJ5OiAnJHtjb3VudHJ5fSdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBhZGIuc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5KGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpO1xuXG4gIGlmICghYXdhaXQgYWRiLmVuc3VyZUN1cnJlbnRMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCkpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gc2NyaXB0ID8gYGxhbmd1YWdlOiAke2xhbmd1YWdlfSwgY291bnRyeTogJHtjb3VudHJ5fSBhbmQgc2NyaXB0OiAke3NjcmlwdH1gIDogYGxhbmd1YWdlOiAke2xhbmd1YWdlfSBhbmQgY291bnRyeTogJHtjb3VudHJ5fWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0ICR7bWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VJbmZvRnJvbUNhcHMgKG9wdHMgPSB7fSkge1xuICAvLyB3ZSBjYW4gY3JlYXRlIGEgdGhyb3dhd2F5IEFEQiBpbnN0YW5jZSBoZXJlLCBzbyB0aGVyZSBpcyBubyBkZXBlbmRlbmN5XG4gIC8vIG9uIGluc3RhbnRpYXRpbmcgb24gZWFybGllciAoYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBubyB1ZGlkKVxuICAvLyB3ZSBjYW4gb25seSB1c2UgdGhpcyBBREIgb2JqZWN0IGZvciBjb21tYW5kcyB0aGF0IHdvdWxkIG5vdCBiZSBjb25mdXNlZFxuICAvLyBpZiBtdWx0aXBsZSBkZXZpY2VzIGFyZSBjb25uZWN0ZWRcbiAgY29uc3QgYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVCYXNlQURCKG9wdHMpO1xuICBsZXQgdWRpZCA9IG9wdHMudWRpZDtcbiAgbGV0IGVtUG9ydCA9IG51bGw7XG5cbiAgLy8gYSBzcGVjaWZpYyBhdmQgbmFtZSB3YXMgZ2l2ZW4uIHRyeSB0byBpbml0aWFsaXplIHdpdGggdGhhdFxuICBpZiAob3B0cy5hdmQpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnByZXBhcmVFbXVsYXRvcihhZGIsIG9wdHMpO1xuICAgIHVkaWQgPSBhZGIuY3VyRGV2aWNlSWQ7XG4gICAgZW1Qb3J0ID0gYWRiLmVtdWxhdG9yUG9ydDtcbiAgfSBlbHNlIHtcbiAgICAvLyBubyBhdmQgZ2l2ZW4uIGxldHMgdHJ5IHdoYXRldmVyJ3MgcGx1Z2dlZCBpbiBkZXZpY2VzL2VtdWxhdG9yc1xuICAgIGxvZ2dlci5pbmZvKCdSZXRyaWV2aW5nIGRldmljZSBsaXN0Jyk7XG4gICAgbGV0IGRldmljZXMgPSBhd2FpdCBhZGIuZ2V0RGV2aWNlc1dpdGhSZXRyeSgpO1xuXG4gICAgLy8gdWRpZCB3YXMgZ2l2ZW4sIGxldHMgdHJ5IHRvIGluaXQgd2l0aCB0aGF0IGRldmljZVxuICAgIGlmICh1ZGlkKSB7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoXy5tYXAoZGV2aWNlcywgJ3VkaWQnKSwgdWRpZCkpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYERldmljZSAke3VkaWR9IHdhcyBub3QgaW4gdGhlIGxpc3Qgb2YgY29ubmVjdGVkIGRldmljZXNgKTtcbiAgICAgIH1cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgIG9wdHMucGxhdGZvcm1WZXJzaW9uID0gYCR7b3B0cy5wbGF0Zm9ybVZlcnNpb259YC50cmltKCk7XG5cbiAgICAgIC8vIGEgcGxhdGZvcm0gdmVyc2lvbiB3YXMgZ2l2ZW4uIGxldHMgdHJ5IHRvIGZpbmQgYSBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBvc1xuICAgICAgY29uc3QgcGxhdGZvcm1WZXJzaW9uID0gc2VtdmVyLmNvZXJjZShvcHRzLnBsYXRmb3JtVmVyc2lvbikgfHwgb3B0cy5wbGF0Zm9ybVZlcnNpb247XG4gICAgICBsb2dnZXIuaW5mbyhgTG9va2luZyBmb3IgYSBkZXZpY2Ugd2l0aCBBbmRyb2lkICcke3BsYXRmb3JtVmVyc2lvbn0nYCk7XG5cbiAgICAgIC8vIGluIGNhc2Ugd2UgZmFpbCB0byBmaW5kIHNvbWV0aGluZywgZ2l2ZSB0aGUgdXNlciBhIHVzZWZ1bCBsb2cgdGhhdCBoYXNcbiAgICAgIC8vIHRoZSBkZXZpY2UgdWRpZHMgYW5kIG9zIHZlcnNpb25zIHNvIHRoZXkga25vdyB3aGF0J3MgYXZhaWxhYmxlXG4gICAgICBjb25zdCBhdmFpbERldmljZXMgPSBbXTtcbiAgICAgIGxldCBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSBudWxsO1xuICAgICAgLy8gZmlyc3QgdHJ5IHN0YXJ0ZWQgZGV2aWNlcy9lbXVsYXRvcnNcbiAgICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIGRldmljZXMpIHtcbiAgICAgICAgLy8gZGlyZWN0IGFkYiBjYWxscyB0byB0aGUgc3BlY2lmaWMgZGV2aWNlXG4gICAgICAgIGF3YWl0IGFkYi5zZXREZXZpY2VJZChkZXZpY2UudWRpZCk7XG4gICAgICAgIGNvbnN0IHJhd0RldmljZU9TID0gYXdhaXQgYWRiLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgICAvLyBUaGUgZGV2aWNlIE9TIGNvdWxkIGVpdGhlciBiZSBhIG51bWJlciwgbGlrZSBgNi4wYFxuICAgICAgICAvLyBvciBhbiBhYmJyZXZpYXRpb24sIGxpa2UgYFJgXG4gICAgICAgIGF2YWlsRGV2aWNlcy5wdXNoKGAke2RldmljZS51ZGlkfSAoJHtyYXdEZXZpY2VPU30pYCk7XG4gICAgICAgIGNvbnN0IGRldmljZU9TID0gc2VtdmVyLmNvZXJjZShyYXdEZXZpY2VPUykgfHwgcmF3RGV2aWNlT1M7XG4gICAgICAgIGlmICghZGV2aWNlT1MpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCA9IHNlbXZlci52YWxpZChkZXZpY2VPUykgJiYgc2VtdmVyLnZhbGlkKHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGJvdGhWZXJzaW9uc0FyZVN0cmluZ3MgPSBfLmlzU3RyaW5nKGRldmljZU9TKSAmJiBfLmlzU3RyaW5nKHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICAgIGlmIChib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgJiYgZGV2aWNlT1MudmVyc2lvbiA9PT0gcGxhdGZvcm1WZXJzaW9uLnZlcnNpb25cbiAgICAgICAgICAgIHx8IGJvdGhWZXJzaW9uc0FyZVN0cmluZ3MgJiYgXy50b0xvd2VyKGRldmljZU9TKSA9PT0gXy50b0xvd2VyKHBsYXRmb3JtVmVyc2lvbikpIHtcbiAgICAgICAgICAvLyBHb3QgYW4gZXhhY3QgbWF0Y2ggLSBwcm9jZWVkIGltbWVkaWF0ZWx5XG4gICAgICAgICAgdWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCFib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQpIHtcbiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBwb2ludCB0byBjaGVjayBmb3IgcGFydGlhbCBtYXRjaCBpZiBlaXRoZXIgb2YgdmVyc2lvbiBudW1iZXJzIGlzIG5vdCBjb2VyY2libGVcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoIV8uaW5jbHVkZXMob3B0cy5wbGF0Zm9ybVZlcnNpb24sICcuJykgJiYgcGxhdGZvcm1WZXJzaW9uLm1ham9yID09PSBkZXZpY2VPUy5tYWpvclxuICAgICAgICAgICAgfHwgcGxhdGZvcm1WZXJzaW9uLm1ham9yID09PSBkZXZpY2VPUy5tYWpvciAmJiBwbGF0Zm9ybVZlcnNpb24ubWlub3IgPT09IGRldmljZU9TLm1pbm9yKVxuICAgICAgICAgICAgLy8gR290IGEgcGFydGlhbCBtYXRjaCAtIG1ha2Ugc3VyZSB3ZSBjb25zaWRlciB0aGUgbW9zdCByZWNlbnRcbiAgICAgICAgICAgIC8vIGRldmljZSB2ZXJzaW9uIGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBzeXN0ZW1cbiAgICAgICAgICAgICYmIChwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgJiYgc2VtdmVyLmd0KGRldmljZU9TLCBfLnZhbHVlcyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdKVxuICAgICAgICAgICAgICAgIHx8ICFwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpKSB7XG4gICAgICAgICAgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0ge1tkZXZpY2UudWRpZF06IGRldmljZU9TfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF1ZGlkICYmIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSkge1xuICAgICAgICB1ZGlkID0gXy5rZXlzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF07XG4gICAgICAgIGF3YWl0IGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1ZGlkKSB7XG4gICAgICAgIC8vIHdlIGNvdWxkbid0IGZpbmQgYW55dGhpbmchIHF1aXRcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFVuYWJsZSB0byBmaW5kIGFuIGFjdGl2ZSBkZXZpY2Ugb3IgZW11bGF0b3IgYCArXG4gICAgICAgICAgYHdpdGggT1MgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn0uIFRoZSBmb2xsb3dpbmcgYXJlIGF2YWlsYWJsZTogYCArXG4gICAgICAgICAgYXZhaWxEZXZpY2VzLmpvaW4oJywgJykpO1xuICAgICAgfVxuXG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYSB1ZGlkIHdhcyBub3QgZ2l2ZW4sIGdyYWIgdGhlIGZpcnN0IGRldmljZSB3ZSBzZWVcbiAgICAgIHVkaWQgPSBkZXZpY2VzWzBdLnVkaWQ7XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbyhgVXNpbmcgZGV2aWNlOiAke3VkaWR9YCk7XG4gIHJldHVybiB7dWRpZCwgZW1Qb3J0fTtcbn07XG5cbi8vIHJldHVybnMgYSBuZXcgYWRiIGluc3RhbmNlIHdpdGggZGV2aWNlSWQgc2V0XG5oZWxwZXJzLmNyZWF0ZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFEQiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gb3B0cztcbiAgY29uc3QgYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVCYXNlQURCKG9wdHMpO1xuICBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gIGlmIChlbVBvcnQpIHtcbiAgICBhZGIuc2V0RW11bGF0b3JQb3J0KGVtUG9ydCk7XG4gIH1cblxuICByZXR1cm4gYWRiO1xufTtcblxuaGVscGVycy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzID0gZnVuY3Rpb24gdmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyAob3B0cykge1xuICBmb3IgKGNvbnN0IGtleSBvZiBbJ2FwcFBhY2thZ2UnLCAnYXBwQWN0aXZpdHknLCAnYXBwV2FpdFBhY2thZ2UnLCAnYXBwV2FpdEFjdGl2aXR5J10pIHtcbiAgICBjb25zdCBuYW1lID0gb3B0c1trZXldO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSAvKFteXFx3LiosXSkrLy5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBDYXBhYmlsaXR5ICcke2tleX0nIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5jbHVkZSBsYXRpbiBsZXR0ZXJzLCBkaWdpdHMsIHVuZGVyc2NvcmUsIGRvdCwgY29tbWEgYW5kIGFzdGVyaXNrIGNoYXJhY3RlcnMuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEN1cnJlbnQgdmFsdWUgJyR7bmFtZX0nIGhhcyBub24tbWF0Y2hpbmcgY2hhcmFjdGVyIGF0IGluZGV4ICR7bWF0Y2guaW5kZXh9OiAnJHtuYW1lLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCArIDEpfSdgKTtcbiAgfVxufTtcblxuaGVscGVycy5nZXRMYXVuY2hJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0TGF1bmNoSW5mbyAoYWRiLCBvcHRzKSB7XG4gIGxldCB7YXBwLCBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eX0gPSBvcHRzO1xuICBpZiAoIWFwcCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBhcHAgc2VudCBpbiwgbm90IHBhcnNpbmcgcGFja2FnZS9hY3Rpdml0eScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyhvcHRzKTtcblxuICBpZiAoYXBwUGFja2FnZSAmJiBhcHBBY3Rpdml0eSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnUGFyc2luZyBwYWNrYWdlIGFuZCBhY3Rpdml0eSBmcm9tIGFwcCBtYW5pZmVzdCcpO1xuICBsZXQge2Fwa1BhY2thZ2UsIGFwa0FjdGl2aXR5fSA9XG4gICAgYXdhaXQgYWRiLnBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdChhcHApO1xuICBpZiAoYXBrUGFja2FnZSAmJiAhYXBwUGFja2FnZSkge1xuICAgIGFwcFBhY2thZ2UgPSBhcGtQYWNrYWdlO1xuICB9XG4gIGlmICghYXBwV2FpdFBhY2thZ2UpIHtcbiAgICBhcHBXYWl0UGFja2FnZSA9IGFwcFBhY2thZ2U7XG4gIH1cbiAgaWYgKGFwa0FjdGl2aXR5ICYmICFhcHBBY3Rpdml0eSkge1xuICAgIGFwcEFjdGl2aXR5ID0gYXBrQWN0aXZpdHk7XG4gIH1cbiAgaWYgKCFhcHBXYWl0QWN0aXZpdHkpIHtcbiAgICBhcHBXYWl0QWN0aXZpdHkgPSBhcHBBY3Rpdml0eTtcbiAgfVxuICBsb2dnZXIuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGFuZCBhY3Rpdml0eSBhcmU6ICR7YXBrUGFja2FnZX0vJHthcGtBY3Rpdml0eX1gKTtcbiAgcmV0dXJuIHthcHBQYWNrYWdlLCBhcHBXYWl0UGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRBY3Rpdml0eX07XG59O1xuXG5oZWxwZXJzLnJlc2V0QXBwID0gYXN5bmMgZnVuY3Rpb24gcmVzZXRBcHAgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHBQYWNrYWdlJyBvcHRpb24gaXMgcmVxdWlyZWRcIik7XG4gIH1cblxuICBjb25zdCBpc0luc3RhbGxlZCA9IGF3YWl0IGFkYi5pc0FwcEluc3RhbGxlZChhcHBQYWNrYWdlKTtcblxuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLmZvcmNlU3RvcChhcHBQYWNrYWdlKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgLy8gZnVsbFJlc2V0IGhhcyBwcmlvcml0eSBvdmVyIGZhc3RSZXNldFxuICAgIGlmICghZnVsbFJlc2V0ICYmIGZhc3RSZXNldCkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLmNsZWFyKGFwcFBhY2thZ2UpO1xuICAgICAgaWYgKF8uaXNTdHJpbmcob3V0cHV0KSAmJiBvdXRwdXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZmFpbGVkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgdGhlIGFwcGxpY2F0aW9uIGRhdGEgb2YgJyR7YXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtvdXRwdXR9YCk7XG4gICAgICB9XG4gICAgICAvLyBleGVjdXRpbmcgYHNoZWxsIHBtIGNsZWFyYCByZXNldHMgcHJldmlvdXNseSBhc3NpZ25lZCBhcHBsaWNhdGlvbiBwZXJtaXNzaW9ucyBhcyB3ZWxsXG4gICAgICBpZiAoYXV0b0dyYW50UGVybWlzc2lvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhZGIuZ3JhbnRBbGxQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYFVuYWJsZSB0byBncmFudCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgUGVyZm9ybWVkIGZhc3QgcmVzZXQgb24gdGhlIGluc3RhbGxlZCAnJHthcHBQYWNrYWdlfScgYXBwbGljYXRpb24gKHN0b3AgYW5kIGNsZWFyKWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghYXBwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFaXRoZXIgcHJvdmlkZSAnYXBwJyBvcHRpb24gdG8gaW5zdGFsbCAnJHthcHBQYWNrYWdlfScgb3IgYCArXG4gICAgICBgY29uc2lkZXIgc2V0dGluZyAnbm9SZXNldCcgdG8gJ3RydWUnIGlmICcke2FwcFBhY2thZ2V9JyBpcyBzdXBwb3NlZCB0byBiZSBwcmVpbnN0YWxsZWQuYCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFJ1bm5pbmcgZnVsbCByZXNldCBvbiAnJHthcHBQYWNrYWdlfScgKHJlaW5zdGFsbClgKTtcbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgYXdhaXQgYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKTtcbiAgfVxuICBhd2FpdCBhZGIuaW5zdGFsbChhcHAsIHtcbiAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gIH0pO1xufTtcblxuaGVscGVycy5pbnN0YWxsQXBrID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwayAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgZW5mb3JjZUFwcEluc3RhbGwsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwIHx8ICFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcCcgYW5kICdhcHBQYWNrYWdlJyBvcHRpb25zIGFyZSByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGlmIChmdWxsUmVzZXQpIHtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcFN0YXRlLFxuICAgIHdhc1VuaW5zdGFsbGVkXG4gIH0gPSBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcHAsIGFwcFBhY2thZ2UsIHtcbiAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgZW5mb3JjZUN1cnJlbnRCdWlsZDogZW5mb3JjZUFwcEluc3RhbGwsXG4gIH0pO1xuXG4gIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgdGhlIG5ld2x5IGluc3RhbGxlZCBhcHBcbiAgY29uc3QgaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAgPSAhd2FzVW5pbnN0YWxsZWRcbiAgICAmJiBhcHBTdGF0ZSAhPT0gYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIGlmIChmYXN0UmVzZXQgJiYgaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHApIHtcbiAgICBsb2dnZXIuaW5mbyhgUGVyZm9ybWluZyBmYXN0IHJlc2V0IG9uICcke2FwcFBhY2thZ2V9J2ApO1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnN0YWxscyBhbiBhcnJheSBvZiBhcGtzXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRzIGRlZmluZWQgaW4gZHJpdmVyLmpzXG4gKi9cbmhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxPdGhlckFwa3MgKG90aGVyQXBwcywgYWRiLCBvcHRzKSB7XG4gIGxldCB7XG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgLy8gSW5zdGFsbCBhbGwgb2YgdGhlIEFQSydzIGFzeW5jaHJvbm91c2x5XG4gIGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKG90aGVyQXBwKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBJbnN0YWxsaW5nIGFwcDogJHtvdGhlckFwcH1gKTtcbiAgICByZXR1cm4gYWRiLmluc3RhbGxPclVwZ3JhZGUob3RoZXJBcHAsIG51bGwsIHtcbiAgICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgfSk7XG4gIH0pKTtcbn07XG5cbi8qKlxuICogVW5pbnN0YWxsIGFuIGFycmF5IG9mIHBhY2thZ2VzXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFwcFBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2UgbmFtZXMgdG8gdW5pbnN0YWxsLiBJZiB0aGlzIGluY2x1ZGVzIGAnKidgLCB1bmluc3RhbGwgYWxsIG9mIDNyZCBwYXJ0eSBhcHBzXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKi9cbmhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyA9IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbE90aGVyUGFja2FnZXMgKGFkYiwgYXBwUGFja2FnZXMsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgaWYgKGFwcFBhY2thZ2VzLmluY2x1ZGVzKCcqJykpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1VuaW5zdGFsbCB0aGlyZCBwYXJ0eSBwYWNrYWdlcycpO1xuICAgIGFwcFBhY2thZ2VzID0gYXdhaXQgdGhpcy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiLCBmaWx0ZXJQYWNrYWdlcyk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFVuaW5zdGFsbGluZyBwYWNrYWdlczogJHthcHBQYWNrYWdlc31gKTtcbiAgYXdhaXQgQi5hbGwoYXBwUGFja2FnZXMubWFwKChhcHBQYWNrYWdlKSA9PiBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpKSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGlyZCBwYXJ0eSBwYWNrYWdlcyBmaWx0ZXJlZCB3aXRoIGBmaWx0ZXJQYWNrYWdlc2BcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSBvZiBpbnN0YWxsZWQgdGhpcmQgcGFyeSBwYWNrYWdlc1xuICovXG5oZWxwZXJzLmdldFRoaXJkUGFydHlQYWNrYWdlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldFRoaXJkUGFydHlQYWNrYWdlcyAoYWRiLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZXNTdHJpbmcgPSBhd2FpdCBhZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgJy0zJ10pO1xuICAgIGNvbnN0IGFwcFBhY2thZ2VzQXJyYXkgPSBwYWNrYWdlc1N0cmluZy50cmltKCkucmVwbGFjZSgvcGFja2FnZTovZywgJycpLnNwbGl0KEVPTCk7XG4gICAgbG9nZ2VyLmRlYnVnKGAnJHthcHBQYWNrYWdlc0FycmF5fScgZmlsdGVyZWQgd2l0aCAnJHtmaWx0ZXJQYWNrYWdlc30nYCk7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcHBQYWNrYWdlc0FycmF5LCBmaWx0ZXJQYWNrYWdlcyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZ2V0IHBhY2thZ2VzIHdpdGggJ2FkYiBzaGVsbCBwbSBsaXN0IHBhY2thZ2VzIC0zJzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGluaXRVbmljb2RlS2V5Ym9hcmQgKGFkYikge1xuICBsb2dnZXIuZGVidWcoJ0VuYWJsaW5nIFVuaWNvZGUga2V5Ym9hcmQgc3VwcG9ydCcpO1xuXG4gIC8vIGdldCB0aGUgZGVmYXVsdCBJTUUgc28gd2UgY2FuIHJldHVybiBiYWNrIHRvIGl0IGxhdGVyIGlmIHdlIHdhbnRcbiAgbGV0IGRlZmF1bHRJTUUgPSBhd2FpdCBhZGIuZGVmYXVsdElNRSgpO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5zZXR0aW5nIHByZXZpb3VzIElNRSAke2RlZmF1bHRJTUV9YCk7XG4gIGNvbnN0IGFwcGl1bUlNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9Ly5Vbmljb2RlSU1FYDtcbiAgbG9nZ2VyLmRlYnVnKGBTZXR0aW5nIElNRSB0byAnJHthcHBpdW1JTUV9J2ApO1xuICBhd2FpdCBhZGIuZW5hYmxlSU1FKGFwcGl1bUlNRSk7XG4gIGF3YWl0IGFkYi5zZXRJTUUoYXBwaXVtSU1FKTtcbiAgcmV0dXJuIGRlZmF1bHRJTUU7XG59O1xuXG5oZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldE1vY2tMb2NhdGlvbkFwcCAoYWRiLCBhcHApIHtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPCAyMykge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnc2V0dGluZ3MnLCAncHV0JywgJ3NlY3VyZScsICdtb2NrX2xvY2F0aW9uJywgJzEnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBhcHAsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnYWxsb3cnXSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHNldCBtb2NrIGxvY2F0aW9uIGZvciBhcHAgJyR7YXBwfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgbGV0IHBrZ0lkcyA9IFtdO1xuICAgIGlmIChhd2FpdCBhZGIuZmlsZUV4aXN0cyhNT0NLX0FQUF9JRFNfU1RPUkUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwa2dJZHMgPSBKU09OLnBhcnNlKGF3YWl0IGFkYi5zaGVsbChbJ2NhdCcsIE1PQ0tfQVBQX0lEU19TVE9SRV0pKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgaWYgKHBrZ0lkcy5pbmNsdWRlcyhhcHApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBrZ0lkcy5wdXNoKGFwcCk7XG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIGNvbnN0IHNyY1BhdGggPSBwYXRoLnBvc2l4LmpvaW4odG1wUm9vdCwgcGF0aC5wb3NpeC5iYXNlbmFtZShNT0NLX0FQUF9JRFNfU1RPUkUpKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHNyY1BhdGgsIEpTT04uc3RyaW5naWZ5KHBrZ0lkcyksICd1dGY4Jyk7XG4gICAgICBhd2FpdCBhZGIucHVzaEZpbGUoc3JjUGF0aCwgTU9DS19BUFBfSURTX1NUT1JFKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcGVyc2lzdCBtb2NrIGxvY2F0aW9uIGFwcCBpZCAnJHthcHB9JzogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVzZXRNb2NrTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiByZXNldE1vY2tMb2NhdGlvbiAoYWRiKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcwJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRoaXJkUGFydHlQa2dJZHNQcm9taXNlID0gaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiKTtcbiAgICBsZXQgcGtnSWRzID0gW107XG4gICAgaWYgKGF3YWl0IGFkYi5maWxlRXhpc3RzKE1PQ0tfQVBQX0lEU19TVE9SRSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBrZ0lkcyA9IEpTT04ucGFyc2UoYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgTU9DS19BUFBfSURTX1NUT1JFXSkpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICBjb25zdCB0aGlyZFBhcnR5UGtnSWRzID0gYXdhaXQgdGhpcmRQYXJ0eVBrZ0lkc1Byb21pc2U7XG4gICAgLy8gT25seSBpbmNsdWRlIGN1cnJlbnRseSBpbnN0YWxsZWQgcGFja2FnZXNcbiAgICBjb25zdCByZXN1bHRQa2dzID0gXy5pbnRlcnNlY3Rpb24ocGtnSWRzLCB0aGlyZFBhcnR5UGtnSWRzKTtcbiAgICBpZiAoXy5zaXplKHJlc3VsdFBrZ3MpIDw9IDEpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCByZXN1bHRQa2dzWzBdID8/IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnZGVueSddKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFJlc2V0dGluZyBtb2NrX2xvY2F0aW9uIHBlcm1pc3Npb24gZm9yIHRoZSBmb2xsb3dpbmcgYXBwczogJHtyZXN1bHRQa2dzfWApO1xuICAgIGF3YWl0IEIuYWxsKHJlc3VsdFBrZ3MubWFwKChwa2dJZCkgPT4gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBwa2dJZCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdkZW55J10pO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH0pKCkpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byByZXNldCBtb2NrIGxvY2F0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnkoMiwgYXN5bmMgZnVuY3Rpb24gcmV0cnlJbnN0YWxsSGVscGVyQXBwICgpIHtcbiAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yIFtmYWxzZV0gLSBXaGV0aGVyIHRocm93IGFuIGVycm9yIGlmIFNldHRpbmdzIGFwcCBmYWlscyB0byBzdGFydFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlLCBvcHRzID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3b3VsZCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsID49IDI5KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgJ1BST0pFQ1RfTUVESUEnLCAnYWxsb3cnXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDw9IDIzKSB7IC8vIEFuZHJvaWQgNi0gZGV2aWNlcyBzaG91bGQgaGF2ZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgY29uc3QgcGVybXMgPSBbJ1NFVF9BTklNQVRJT05fU0NBTEUnLCAnQ0hBTkdFX0NPTkZJR1VSQVRJT04nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXTtcbiAgICBsb2dnZXIuaW5mbyhgR3JhbnRpbmcgcGVybWlzc2lvbnMgJHtwZXJtc30gdG8gJyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0nYCk7XG4gICAgYXdhaXQgYWRiLmdyYW50UGVybWlzc2lvbnMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcGVybXMubWFwKCh4KSA9PiBgYW5kcm9pZC5wZXJtaXNzaW9uLiR7eH1gKSk7XG4gIH1cblxuICAvLyBsYXVuY2ggaW8uYXBwaXVtLnNldHRpbmdzIGFwcCBkdWUgdG8gc2V0dGluZ3MgZmFpbGluZyB0byBiZSBzZXRcbiAgLy8gaWYgdGhlIGFwcCBpcyBub3QgbGF1bmNoZWQgcHJpb3IgdG8gc3RhcnQgdGhlIHNlc3Npb24gb24gYW5kcm9pZCA3K1xuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzg5NTdcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCh7XG4gICAgICB0aW1lb3V0OiBoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSA/IDMwMDAwIDogNTAwMFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdHJpbmcueG1sIGFuZCBjb252ZXJ0cyBpdCB0byBzdHJpbmcuanNvbiBhbmQgcHVzaGVzXG4gKiBpdCB0byAvZGF0YS9sb2NhbC90bXAvc3RyaW5nLmpzb24gb24gZm9yIHVzZSBvZiBib290c3RyYXBcbiAqIElmIGFwcCBpcyBub3QgcHJlc2VudCB0byBleHRyYWN0IHN0cmluZy54bWwgaXQgZGVsZXRlcyByZW1vdGUgc3RyaW5ncy5qc29uXG4gKiBJZiBhcHAgZG9lcyBub3QgaGF2ZSBzdHJpbmdzLnhtbCB3ZSBwdXNoIGFuIGVtcHR5IGpzb24gb2JqZWN0IHRvIHJlbW90ZVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZSBhYmJyZXZpYXRpb24sIGZvciBleGFtcGxlICdmcicuIFRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gKiBpcyB1c2VkIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGRlZmluZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIERyaXZlciBvcHRpb25zIGRpY3Rpb25hcnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGljdGlvbmFyeSwgd2hlcmUgc3RyaW5nIHJlc291cmNlIGlkZW50aWZpZXJzIGFyZSBrZXlzXG4gKiBhbG9uZyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2Ugb3IgYW4gZW1wdHkgb2JqZWN0XG4gKiBpZiBubyBtYXRjaGluZyByZXNvdXJjZXMgd2VyZSBleHRyYWN0ZWQuXG4gKi9cbmhlbHBlcnMucHVzaFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBwdXNoU3RyaW5ncyAobGFuZ3VhZ2UsIGFkYiwgb3B0cykge1xuICBjb25zdCByZW1vdGVEaXIgPSAnL2RhdGEvbG9jYWwvdG1wJztcbiAgY29uc3Qgc3RyaW5nc0pzb24gPSAnc3RyaW5ncy5qc29uJztcbiAgY29uc3QgcmVtb3RlRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShyZW1vdGVEaXIsIHN0cmluZ3NKc29uKTtcblxuICAvLyBjbGVhbiB1cCByZW1vdGUgc3RyaW5nLmpzb24gaWYgcHJlc2VudFxuICBhd2FpdCBhZGIucmltcmFmKHJlbW90ZUZpbGUpO1xuXG4gIGxldCBhcHA7XG4gIHRyeSB7XG4gICAgYXBwID0gb3B0cy5hcHAgfHwgYXdhaXQgYWRiLnB1bGxBcGsob3B0cy5hcHBQYWNrYWdlLCBvcHRzLnRtcERpcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5pbmZvKGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHtvcHRzLmFwcFBhY2thZ2V9JyB0byAnJHtvcHRzLnRtcERpcn0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkob3B0cy5hcHBQYWNrYWdlKSB8fCAhKGF3YWl0IGZzLmV4aXN0cyhhcHApKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gYXBwIG9yIHBhY2thZ2Ugc3BlY2lmaWVkLiBSZXR1cm5pbmcgZW1wdHkgc3RyaW5nc2ApO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3NUbXBEaXIgPSBwYXRoLnJlc29sdmUob3B0cy50bXBEaXIsIG9wdHMuYXBwUGFja2FnZSk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0aW5nIHN0cmluZ3MgZnJvbSBhcGsnLCBhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBjb25zdCB7YXBrU3RyaW5ncywgbG9jYWxQYXRofSA9IGF3YWl0IGFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgYXdhaXQgYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVEaXIpO1xuICAgIHJldHVybiBhcGtTdHJpbmdzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgQ291bGQgbm90IGdldCBzdHJpbmdzLCBjb250aW51aW5nIGFueXdheS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKCdlY2hvJywgW2Ane30nID4gJHtyZW1vdGVGaWxlfWBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc3RyaW5nc1RtcERpcik7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdTY3JlZW4gaXMgbG9ja2VkLCB0cnlpbmcgdG8gdW5sb2NrJyk7XG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTmVpdGhlciAndW5sb2NrVHlwZScgbm9yICd1bmxvY2tLZXknIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQuIGAgK1xuICAgICAgYEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBzaW1wbGUgbG9jayBzY3JlZW4uYCk7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLndhaXRGb3JEZXZpY2UoKTtcbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvciwgb3B0cyk7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpKSB7XG4gICAgaWYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0TW9ja0xvY2F0aW9uKGFkYik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBNEI7QUFBQTtBQUU1QixNQUFNQSxrQkFB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
|