appium-adb 9.10.13 → 9.10.14
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/build/lib/tools/apk-utils.js +35 -2
- package/build/lib/tools/apk-utils.js.map +1 -1
- package/build/lib/tools/settings-client-commands.js +44 -3
- package/build/lib/tools/settings-client-commands.js.map +1 -1
- package/lib/tools/apk-utils.js +59 -0
- package/lib/tools/settings-client-commands.js +30 -1
- package/package.json +1 -1
|
@@ -26,8 +26,9 @@ apkUtilsMethods.APP_INSTALL_STATE = {
|
|
|
26
26
|
OLDER_VERSION_INSTALLED: 'olderVersionInstalled'
|
|
27
27
|
};
|
|
28
28
|
const REMOTE_CACHE_ROOT = '/data/local/tmp/appium_cache';
|
|
29
|
-
|
|
30
29
|
exports.REMOTE_CACHE_ROOT = REMOTE_CACHE_ROOT;
|
|
30
|
+
const RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';
|
|
31
|
+
|
|
31
32
|
apkUtilsMethods.isAppInstalled = async function isAppInstalled(pkg) {
|
|
32
33
|
_logger.default.debug(`Getting install status for ${pkg}`);
|
|
33
34
|
const installedPattern = new RegExp(`^\\s*Package\\s+\\[${_lodash.default.escapeRegExp(pkg)}\\][^:]+:$`, 'm');
|
|
@@ -755,6 +756,38 @@ apkUtilsMethods.pullApk = async function pullApk(pkg, tmpDir) {
|
|
|
755
756
|
_logger.default.debug(`Pulled app for package '${pkg}' to '${tmpApp}'`);
|
|
756
757
|
return tmpApp;
|
|
757
758
|
};
|
|
759
|
+
|
|
760
|
+
apkUtilsMethods.activateApp = async function activateApp(appId) {
|
|
761
|
+
_logger.default.debug(`Activating '${appId}'`);
|
|
762
|
+
const apiLevel = await this.getApiLevel();
|
|
763
|
+
if (apiLevel < 24) {
|
|
764
|
+
const cmd = ['monkey', '-p', appId, '-c', 'android.intent.category.LAUNCHER', '1'];
|
|
765
|
+
let output = '';
|
|
766
|
+
try {
|
|
767
|
+
output = await this.shell(cmd);
|
|
768
|
+
_logger.default.debug(`Command stdout: ${output}`);
|
|
769
|
+
} catch (e) {
|
|
770
|
+
_logger.default.errorAndThrow(`Cannot activate '${appId}'. Original error: ${e.message}`);
|
|
771
|
+
}
|
|
772
|
+
if (output.includes('monkey aborted')) {
|
|
773
|
+
_logger.default.errorAndThrow(`Cannot activate '${appId}'. Are you sure it is installed?`);
|
|
774
|
+
}
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
let activityName = await this.resolveLaunchableActivity(appId);
|
|
778
|
+
if (activityName === RESOLVER_ACTIVITY_NAME) {
|
|
779
|
+
_logger.default.debug(`The launchable activity name of '${appId}' was resolved to '${activityName}'. ` + `Switching the resolver to not use cmd`);
|
|
780
|
+
activityName = await this.resolveLaunchableActivity(appId, {
|
|
781
|
+
preferCmd: false
|
|
782
|
+
});
|
|
783
|
+
}
|
|
784
|
+
const stdout = await this.shell(['am', apiLevel < 26 ? 'start' : 'start-activity', '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER',
|
|
785
|
+
'-f', '0x10200000', '-n', activityName]);
|
|
786
|
+
_logger.default.debug(stdout);
|
|
787
|
+
if (/^error:/mi.test(stdout)) {
|
|
788
|
+
throw new Error(`Cannot activate '${appId}'. Original error: ${stdout}`);
|
|
789
|
+
}
|
|
790
|
+
};
|
|
758
791
|
var _default = apkUtilsMethods;
|
|
759
792
|
exports.default = _default;
|
|
760
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcGtVdGlsc01ldGhvZHMiLCJBUFBfSU5TVEFMTF9TVEFURSIsIlVOS05PV04iLCJOT1RfSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJTQU1FX1ZFUlNJT05fSU5TVEFMTEVEIiwiT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJSRU1PVEVfQ0FDSEVfUk9PVCIsImlzQXBwSW5zdGFsbGVkIiwicGtnIiwibG9nIiwiZGVidWciLCJpbnN0YWxsZWRQYXR0ZXJuIiwiUmVnRXhwIiwiXyIsImVzY2FwZVJlZ0V4cCIsInN0ZG91dCIsInNoZWxsIiwiaXNJbnN0YWxsZWQiLCJ0ZXN0IiwiZSIsIkVycm9yIiwibWVzc2FnZSIsInN0YXJ0VXJpIiwidXJpIiwib3B0cyIsIndhaXRGb3JMYXVuY2giLCJhcmdzIiwicHVzaCIsImVzY2FwZVNoZWxsQXJnIiwicmVzIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsInN0YXJ0QXBwIiwic3RhcnRBcHBPcHRpb25zIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjbG9uZSIsInJlcGxhY2UiLCJkZWZhdWx0cyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJyZXRyeSIsInN0b3BBcHAiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiY21kIiwiYnVpbGRTdGFydENtZCIsImludGVudE5hbWUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInNoZWxsT3B0cyIsImlzSW50ZWdlciIsIndhaXREdXJhdGlvbiIsInRpbWVvdXQiLCJzdGFydHNXaXRoIiwid2FpdEZvckFjdGl2aXR5IiwiYXBwRGVzY3JpcHRvciIsImR1bXBXaW5kb3dzIiwiZHVtcHN5c0FyZyIsImdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkiLCJudWxsRm9jdXNlZEFwcFJlIiwiZm9jdXNlZEFwcFJlIiwibnVsbEN1cnJlbnRGb2N1c1JlIiwiY3VycmVudEZvY3VzQXBwUmUiLCJmb2N1c2VkQXBwQ2FuZGlkYXRlcyIsImN1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwicGF0dGVybiIsIm1hdGNoIiwiZXhlYyIsImFwcFBhY2thZ2UiLCJ0cmltIiwiYXBwQWN0aXZpdHkiLCJsZW5ndGgiLCJpbnRlcnNlY3Rpb25XaXRoIiwiaXNFcXVhbCIsIndhaXRGb3JBY3Rpdml0eU9yTm90Iiwid2FpdEZvclN0b3AiLCJ3YWl0TXMiLCJzcGxpdE5hbWVzIiwibmFtZXMiLCJzcGxpdCIsIm1hcCIsIm5hbWUiLCJhbGxQYWNrYWdlcyIsImFsbEFjdGl2aXRpZXMiLCJwb3NzaWJsZUFjdGl2aXR5TmFtZXMiLCJvbmVBY3Rpdml0eSIsImN1cnJlbnRQa2ciLCJqb2luIiwicG9zc2libGVBY3Rpdml0eVBhdHRlcm5zIiwiYWN0TmFtZSIsImNvbmRpdGlvbkZ1bmMiLCJmdWxseVF1YWxpZmllZEFjdGl2aXR5IiwiaXNBY3Rpdml0eUZvdW5kIiwic29tZSIsInAiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwicGFyc2VJbnQiLCJpbnRlcnZhbE1zIiwiYWN0Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwidW5pbnN0YWxsQXBrIiwib3B0aW9ucyIsImluZm8iLCJrZWVwRGF0YSIsImZvcmNlU3RvcCIsImFkYkV4ZWMiLCJpbnN0YWxsRnJvbURldmljZVBhdGgiLCJhcGtQYXRoT25EZXZpY2UiLCJpbmRleE9mIiwiY2FjaGVBcGsiLCJhcGtQYXRoIiwiYXBwSGFzaCIsImZzIiwiaGFzaCIsInJlbW90ZVBhdGgiLCJwYXRoIiwicG9zaXgiLCJyZW1vdGVDYWNoZWRGaWxlcyIsImVycm9yTWFya2VyIiwibHNPdXRwdXQiLCJfYXJlRXh0ZW5kZWRMc09wdGlvbnNTdXBwb3J0ZWQiLCJpc0Jvb2xlYW4iLCJpc1N0cmluZyIsInN1YnN0cmluZyIsIngiLCJmaWx0ZXIiLCJCb29sZWFuIiwidG9IYXNoIiwicGFyc2UiLCJjYXRjaCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNpemUiLCJzdGF0IiwiYmFzZW5hbWUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInJlbW90ZUFwcHNDYWNoZSIsIkxSVSIsIm1heCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiZGlmZmVyZW5jZSIsImtleXMiLCJmb3JFYWNoIiwiZGVsIiwic2V0IiwiZW50cmllc1RvQ2xlYW51cCIsImhhcyIsInNsaWNlIiwiaXNFbXB0eSIsIndhcm4iLCJpbnN0YWxsIiwiYXBwUGF0aCIsImVuZHNXaXRoIiwiQVBLU19FWFRFTlNJT04iLCJpbnN0YWxsQXBrcyIsImNsb25lRGVlcCIsImFkYkV4ZWNUaW1lb3V0IiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwiQVBLX0lOU1RBTExfVElNRU9VVCIsInRpbWVvdXRDYXBOYW1lIiwiaW5zdGFsbEFyZ3MiLCJidWlsZEluc3RhbGxBcmdzIiwibm9JbmNyZW1lbnRhbCIsImlzSW5jcmVtZW50YWxJbnN0YWxsU3VwcG9ydGVkIiwiaW5zdGFsbE9wdHMiLCJpbnN0YWxsQ21kIiwicGVyZm9ybUFwcEluc3RhbGwiLCJzaG91bGRDYWNoZUFwcCIsImlzU3RyZWFtZWRJbnN0YWxsU3VwcG9ydGVkIiwiY2xlYXJDYWNoZSIsImNhY2hlQXBwIiwiY2FjaGVkQXBwUGF0aCIsInBtSW5zdGFsbENtZEJ5UmVtb3RlUGF0aCIsIm91dHB1dCIsIm5ld0NhY2hlZEFwcFBhdGgiLCJ0cnVuY2F0ZWRPdXRwdXQiLCJzdWJzdHIiLCJpc1Rlc3RQYWNrYWdlT25seUVycm9yIiwibXNnIiwiZXJyIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJhcGtJbmZvIiwiZ2V0QXBrSW5mbyIsInZlcnNpb25Db2RlIiwicGtnVmVyc2lvbkNvZGUiLCJ2ZXJzaW9uTmFtZSIsInBrZ1ZlcnNpb25OYW1lU3RyIiwiZ2V0UGFja2FnZUluZm8iLCJwa2dWZXJzaW9uTmFtZSIsInNlbXZlciIsInZhbGlkIiwiY29lcmNlIiwiYXBrVmVyc2lvbkNvZGUiLCJhcGtWZXJzaW9uTmFtZVN0ciIsImFwa1ZlcnNpb25OYW1lIiwic2F0aXNmaWVzIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwidW5pbnN0YWxsUGFja2FnZSIsIk9iamVjdCIsImFzc2lnbiIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsImxhbmd1YWdlIiwib3V0Iiwib3JpZ2luYWxBcHBQYXRoIiwiZXh0cmFjdExhbmd1YWdlQXBrIiwiYXBrU3RyaW5ncyIsImNvbmZpZ01hcmtlciIsImluaXRBYXB0IiwiZm9ybWF0Q29uZmlnTWFya2VyIiwiYmluYXJpZXMiLCJhYXB0IiwidW5pcSIsIm9zIiwiRU9MIiwicGFyc2VBYXB0U3RyaW5ncyIsInN0ZGVyciIsImluaXRBYXB0MiIsImFhcHQyIiwicGFyc2VBYXB0MlN0cmluZ3MiLCJsb2NhbFBhdGgiLCJyZXNvbHZlIiwibWtkaXJwIiwid3JpdGVGaWxlIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldERldmljZUxhbmd1YWdlIiwiZ2V0RGV2aWNlU3lzTGFuZ3VhZ2UiLCJnZXREZXZpY2VQcm9kdWN0TGFuZ3VhZ2UiLCJnZXREZXZpY2VMb2NhbGUiLCJnZXREZXZpY2VDb3VudHJ5IiwiY291bnRyeSIsImdldERldmljZVN5c0NvdW50cnkiLCJnZXREZXZpY2VQcm9kdWN0Q291bnRyeSIsImxvY2FsZSIsImdldERldmljZVN5c0xvY2FsZSIsImdldERldmljZVByb2R1Y3RMb2NhbGUiLCJzZXREZXZpY2VMb2NhbGUiLCJ2YWxpZGF0ZUxvY2FsZSIsInNwbGl0X2xvY2FsZSIsInNldERldmljZUxhbmd1YWdlQ291bnRyeSIsImVuc3VyZUN1cnJlbnRMb2NhbGUiLCJzY3JpcHQiLCJoYXNMYW5ndWFnZSIsImhhc0NvdW50cnkiLCJyZXRyeUludGVydmFsIiwiY3VyTGFuZ3VhZ2UiLCJjdXJDb3VudHJ5IiwiY3VyTG9jYWxlIiwibG9jYWxlQ29kZSIsImVycm9yIiwicmVjb25uZWN0IiwiaWduIiwicmVzdGFydEFkYiIsInRvVXBwZXJDYXNlIiwic2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCIsImV4aXN0cyIsImV4dHJhY3RCYXNlQXBrIiwiYXBrUmVhZGVyIiwiQXBrUmVhZGVyIiwib3BlbiIsIm1hbmlmZXN0IiwicmVhZE1hbmlmZXN0IiwicGFyc2VNYW5pZmVzdCIsInJlc3VsdCIsInZlcnNpb25OYW1lTWF0Y2giLCJ2ZXJzaW9uQ29kZU1hdGNoIiwicHVsbEFwayIsInRtcERpciIsInBhY2thZ2VNYXJrZXIiLCJ0bXBBcHAiLCJwdWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Rvb2xzL2Fway11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBidWlsZFN0YXJ0Q21kLCBBUEtTX0VYVEVOU0lPTiwgYnVpbGRJbnN0YWxsQXJncyxcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULFxuICBwYXJzZU1hbmlmZXN0LCBwYXJzZUFhcHRTdHJpbmdzLCBwYXJzZUFhcHQyU3RyaW5ncywgZm9ybWF0Q29uZmlnTWFya2VyLFxuICBlc2NhcGVTaGVsbEFyZyxcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBmcywgdXRpbCwgbWtkaXJwLCB0aW1pbmcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCBBcGtSZWFkZXIgZnJvbSAnYWRia2l0LWFwa3JlYWRlcic7XG5cbmNvbnN0IGFwa1V0aWxzTWV0aG9kcyA9IHt9O1xuXG5hcGtVdGlsc01ldGhvZHMuQVBQX0lOU1RBTExfU1RBVEUgPSB7XG4gIFVOS05PV046ICd1bmtub3duJyxcbiAgTk9UX0lOU1RBTExFRDogJ25vdEluc3RhbGxlZCcsXG4gIE5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEOiAnbmV3ZXJWZXJzaW9uSW5zdGFsbGVkJyxcbiAgU0FNRV9WRVJTSU9OX0lOU1RBTExFRDogJ3NhbWVWZXJzaW9uSW5zdGFsbGVkJyxcbiAgT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQ6ICdvbGRlclZlcnNpb25JbnN0YWxsZWQnLFxufTtcbmNvbnN0IFJFTU9URV9DQUNIRV9ST09UID0gJy9kYXRhL2xvY2FsL3RtcC9hcHBpdW1fY2FjaGUnO1xuXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcGFydGljdWxhciBwYWNrYWdlIGlzIHByZXNlbnQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBkZXRlY3RpbmcgYXBwbGljYXRpb24gc3RhdGVcbiAqL1xuYXBrVXRpbHNNZXRob2RzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKHBrZykge1xuICBsb2cuZGVidWcoYEdldHRpbmcgaW5zdGFsbCBzdGF0dXMgZm9yICR7cGtnfWApO1xuICBjb25zdCBpbnN0YWxsZWRQYXR0ZXJuID0gbmV3IFJlZ0V4cChgXlxcXFxzKlBhY2thZ2VcXFxccytcXFxcWyR7Xy5lc2NhcGVSZWdFeHAocGtnKX1cXFxcXVteOl0rOiRgLCAnbScpO1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBwa2ddKTtcbiAgICBjb25zdCBpc0luc3RhbGxlZCA9IGluc3RhbGxlZFBhdHRlcm4udGVzdChzdGRvdXQpO1xuICAgIGxvZy5kZWJ1ZyhgJyR7cGtnfScgaXMkeyFpc0luc3RhbGxlZCA/ICcgbm90JyA6ICcnfSBpbnN0YWxsZWRgKTtcbiAgICByZXR1cm4gaXNJbnN0YWxsZWQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpbmRpbmcgaWYgJyR7cGtnfScgaXMgaW5zdGFsbGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRVcmlPcHRpb25zXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgdGhlIHBhcnRpY3VsYXIgVVJJIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpIC0gVGhlIG5hbWUgb2YgVVJJIHRvIHN0YXJ0LlxuICogQHBhcmFtIHtzdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHN0YXJ0IHRoZSBVUkkgd2l0aC5cbiAqIEBwYXJhbSB7U3RhcnRVcmlPcHRpb25zfSBvcHRzXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5zdGFydFVyaSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VXJpICh1cmksIHBrZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB3YWl0Rm9yTGF1bmNoID0gdHJ1ZSxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCF1cmkgfHwgIXBrZykge1xuICAgIHRocm93IG5ldyBFcnJvcignVVJJIGFuZCBwYWNrYWdlIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbJ2FtJywgJ3N0YXJ0J107XG4gIGlmICh3YWl0Rm9yTGF1bmNoKSB7XG4gICAgYXJncy5wdXNoKCctVycpO1xuICB9XG4gIGFyZ3MucHVzaCgnLWEnLCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVcnLFxuICAgICctZCcsIGVzY2FwZVNoZWxsQXJnKHVyaSksXG4gICAgcGtnKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gICAgaWYgKHJlcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd1bmFibGUgdG8gcmVzb2x2ZSBpbnRlbnQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBhdHRlbXB0aW5nIHRvIHN0YXJ0IFVSSS4gT3JpZ2luYWwgZXJyb3I6ICR7ZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydEFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gcGtnIC0gVGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHBhY2thZ2VcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aXZpdHkgLSBUaGUgbmFtZSBvZiB0aGUgbWFpbiBhcHBsaWNhdGlvbiBhY3Rpdml0eS5cbiAqIFRoaXMgb3IgYWN0aW9uIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gbGF1bmNoIGFuIGFwcC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gVGhlIG5hbWUgb2YgdGhlIGludGVudCBhY3Rpb24gdGhhdCB3aWxsIGxhdW5jaCB0aGUgcmVxdWlyZWQgYXBwLlxuICogVGhpcyBvciBhY3Rpdml0eSBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGxhdW5jaCBhbiBhcHAuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSByZXRyeSBbdHJ1ZV0gLSBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWBcbiAqIGFuZCB0aGUgYWN0aXZpdHkgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoICcuJyB0aGVuIHRoZSBtZXRob2RcbiAqIHdpbGwgdHJ5IHRvIGFkZCB0aGUgbWlzc2luZyBkb3QgYW5kIHN0YXJ0IHRoZSBhY3Rpdml0eSBvbmNlIG1vcmVcbiAqIGlmIHRoZSBmaXJzdCBzdGFydHVwIHRyeSBmYWlscy5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHN0b3BBcHAgW3RydWVdIC0gU2V0IGl0IHRvIGB0cnVlYCBpbiBvcmRlciB0byBmb3JjZWZ1bGx5XG4gKiBzdG9wIHRoZSBhY3Rpdml0eSBpZiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHdhaXRQa2cgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3YWl0IHRvIG9uXG4gKiBzdGFydHVwICh0aGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhpcyBuYW1lIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUsIHdoaWNoIGlzIHNldCBhcyBgcGtnYClcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gd2FpdEFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5IHRvIHdhaXQgdG8gb25cbiAqIHN0YXJ0dXAgKHRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGlzIG5hbWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSwgd2hpY2ggaXMgc2V0IGFzIGBhY3Rpdml0eWApXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHdhaXREdXJhdGlvbiAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiBgd2FpdEFjdGl2aXR5YCBpcyBmb2N1c2VkXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8bnVtYmVyfSB1c2VyIC0gVGhlIG51bWJlciBvZiB0aGUgdXNlciBwcm9maWxlIHRvIHN0YXJ0XG4gKiB0aGUgZ2l2ZW4gYWN0aXZpdHkgd2l0aC4gVGhlIGRlZmF1bHQgT1MgdXNlciBwcm9maWxlICh1c3VhbGx5IHplcm8pIGlzIHVzZWRcbiAqIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyB1bnNldFxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gd2FpdEZvckxhdW5jaCBbdHJ1ZV0gLSBpZiBgZmFsc2VgIHRoZW4gYWRiIHdvbid0IHdhaXRcbiAqIGZvciB0aGUgc3RhcnRlZCBhY3Rpdml0eSB0byByZXR1cm4gdGhlIGNvbnRyb2xcbiAqL1xuXG4vKipcbiAqIFN0YXJ0IHRoZSBwYXJ0aWN1bGFyIHBhY2thZ2UvYWN0aXZpdHkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7U3RhcnRBcHBPcHRpb25zfSBzdGFydEFwcE9wdGlvbnMgW3t9XSAtIFN0YXJ0dXAgb3B0aW9ucyBtYXBwaW5nLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgb3V0cHV0IG9mIHRoZSBjb3JyZXNwb25kaW5nIGFkYiBjb21tYW5kLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIHdoaWxlIGV4ZWN1dGluZyB0aGUgYWN0aXZpdHlcbiAqL1xuYXBrVXRpbHNNZXRob2RzLnN0YXJ0QXBwID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBcHAgKHN0YXJ0QXBwT3B0aW9ucyA9IHt9KSB7XG4gIGlmICghc3RhcnRBcHBPcHRpb25zLnBrZyB8fCAhKHN0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eSB8fCBzdGFydEFwcE9wdGlvbnMuYWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGtnLCBhbmQgYWN0aXZpdHkgb3IgaW50ZW50IGFjdGlvbiwgYXJlIHJlcXVpcmVkIHRvIHN0YXJ0IGFuIGFwcGxpY2F0aW9uJyk7XG4gIH1cblxuICBzdGFydEFwcE9wdGlvbnMgPSBfLmNsb25lKHN0YXJ0QXBwT3B0aW9ucyk7XG4gIGlmIChzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHkpIHtcbiAgICBzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHkgPSBzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHkucmVwbGFjZSgnJCcsICdcXFxcJCcpO1xuICB9XG4gIC8vIGluaXRpYWxpemluZyBkZWZhdWx0c1xuICBfLmRlZmF1bHRzKHN0YXJ0QXBwT3B0aW9ucywge1xuICAgIHdhaXRQa2c6IHN0YXJ0QXBwT3B0aW9ucy5wa2csXG4gICAgd2FpdEZvckxhdW5jaDogdHJ1ZSxcbiAgICB3YWl0QWN0aXZpdHk6IGZhbHNlLFxuICAgIHJldHJ5OiB0cnVlLFxuICAgIHN0b3BBcHA6IHRydWVcbiAgfSk7XG4gIC8vIHByZXZlbnRpbmcgbnVsbCB3YWl0cGtnXG4gIHN0YXJ0QXBwT3B0aW9ucy53YWl0UGtnID0gc3RhcnRBcHBPcHRpb25zLndhaXRQa2cgfHwgc3RhcnRBcHBPcHRpb25zLnBrZztcblxuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKTtcbiAgY29uc3QgY21kID0gYnVpbGRTdGFydENtZChzdGFydEFwcE9wdGlvbnMsIGFwaUxldmVsKTtcbiAgY29uc3QgaW50ZW50TmFtZSA9IGAke3N0YXJ0QXBwT3B0aW9ucy5hY3Rpb259JHtzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPyAnICcgKyBzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgOiAnJ31gO1xuICB0cnkge1xuICAgIGNvbnN0IHNoZWxsT3B0cyA9IHt9O1xuICAgIGlmIChfLmlzSW50ZWdlcihzdGFydEFwcE9wdGlvbnMud2FpdER1cmF0aW9uKSAmJiBzdGFydEFwcE9wdGlvbnMud2FpdER1cmF0aW9uID49IDApIHtcbiAgICAgIHNoZWxsT3B0cy50aW1lb3V0ID0gc3RhcnRBcHBPcHRpb25zLndhaXREdXJhdGlvbjtcbiAgICB9XG4gICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChjbWQsIHNoZWxsT3B0cyk7XG4gICAgaWYgKHN0ZG91dC5pbmNsdWRlcygnRXJyb3I6IEFjdGl2aXR5IGNsYXNzJykgJiYgc3Rkb3V0LmluY2x1ZGVzKCdkb2VzIG5vdCBleGlzdCcpKSB7XG4gICAgICBpZiAoc3RhcnRBcHBPcHRpb25zLnJldHJ5ICYmICFzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV2UgdHJpZWQgdG8gc3RhcnQgYW4gYWN0aXZpdHkgdGhhdCBkb2Vzbid0IGV4aXN0LCBgICtcbiAgICAgICAgICAgICAgICAgIGByZXRyeWluZyB3aXRoICcuJHtzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHl9JyBhY3Rpdml0eSBuYW1lYCk7XG4gICAgICAgIHN0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eSA9IGAuJHtzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHl9YDtcbiAgICAgICAgc3RhcnRBcHBPcHRpb25zLnJldHJ5ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0QXBwKHN0YXJ0QXBwT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGl2aXR5IG5hbWUgJyR7c3RhcnRBcHBPcHRpb25zLmFjdGl2aXR5fScgdXNlZCB0byBzdGFydCB0aGUgYXBwIGRvZXNuJ3QgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGV4aXN0IG9yIGNhbm5vdCBiZSBsYXVuY2hlZCEgTWFrZSBzdXJlIGl0IGV4aXN0cyBhbmQgaXMgYSBsYXVuY2hhYmxlIGFjdGl2aXR5YCk7XG4gICAgfSBlbHNlIGlmIChzdGRvdXQuaW5jbHVkZXMoJ0Vycm9yOiBJbnRlbnQgZG9lcyBub3QgbWF0Y2ggYW55IGFjdGl2aXRpZXMnKSB8fCBzdGRvdXQuaW5jbHVkZXMoJ0Vycm9yOiBBY3Rpdml0eSBub3Qgc3RhcnRlZCwgdW5hYmxlIHRvIHJlc29sdmUgSW50ZW50JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aXZpdHkgZm9yIGludGVudCAnJHtpbnRlbnROYW1lfScgdXNlZCB0byBzdGFydCB0aGUgYXBwIGRvZXNuJ3QgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGV4aXN0IG9yIGNhbm5vdCBiZSBsYXVuY2hlZCEgTWFrZSBzdXJlIGl0IGV4aXN0cyBhbmQgaXMgYSBsYXVuY2hhYmxlIGFjdGl2aXR5YCk7XG4gICAgfSBlbHNlIGlmIChzdGRvdXQuaW5jbHVkZXMoJ2phdmEubGFuZy5TZWN1cml0eUV4Y2VwdGlvbicpKSB7XG4gICAgICAvLyBpZiB0aGUgYXBwIGlzIGRpc2FibGVkIG9uIGEgcmVhbCBkZXZpY2UgaXQgd2lsbCB0aHJvdyBhIHNlY3VyaXR5IGV4Y2VwdGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGVybWlzc2lvbiB0byBzdGFydCAnJHtzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHl9JyBhY3Rpdml0eSBoYXMgYmVlbiBkZW5pZWQuYCArXG4gICAgICAgICAgICAgICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgYWN0aXZpdHkvcGFja2FnZSBuYW1lcyBhcmUgY29ycmVjdC5gKTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0QXBwT3B0aW9ucy53YWl0QWN0aXZpdHkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckFjdGl2aXR5KHN0YXJ0QXBwT3B0aW9ucy53YWl0UGtnLCBzdGFydEFwcE9wdGlvbnMud2FpdEFjdGl2aXR5LCBzdGFydEFwcE9wdGlvbnMud2FpdER1cmF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZG91dDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IGFwcERlc2NyaXB0b3IgPSBzdGFydEFwcE9wdGlvbnMucGtnIHx8IGludGVudE5hbWU7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RhcnQgdGhlICcke2FwcERlc2NyaXB0b3J9JyBhcHBsaWNhdGlvbi4gYCArXG4gICAgICBgQ29uc2lkZXIgY2hlY2tpbmcgdGhlIGRyaXZlcidzIHRyb3VibGVzaG9vdGluZyBkb2N1bWVudGF0aW9uLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBjYWxsIGBhZGIgZHVtcHN5cyB3aW5kb3cgd2luZG93cy9kaXNwbGF5c2BcbiAqL1xuYXBrVXRpbHNNZXRob2RzLmR1bXBXaW5kb3dzID0gYXN5bmMgZnVuY3Rpb24gZHVtcFdpbmRvd3MgKCkge1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKTtcblxuICAvLyBXaXRoIHZlcnNpb24gMjksIEFuZHJvaWQgY2hhbmdlZCB0aGUgZHVtcHN5cyBzeW50YXhcbiAgY29uc3QgZHVtcHN5c0FyZyA9IGFwaUxldmVsID49IDI5ID8gJ2Rpc3BsYXlzJyA6ICd3aW5kb3dzJztcbiAgY29uc3QgY21kID0gWydkdW1wc3lzJywgJ3dpbmRvdycsIGR1bXBzeXNBcmddO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhY2thZ2VBY3Rpdml0eUluZm9cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYXBwUGFja2FnZSAtIFRoZSBuYW1lIG9mIGFwcGxpY2F0aW9uIHBhY2thZ2UsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXhhbXBsZSAnY29tLmFjbWUuYXBwJy5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYXBwQWN0aXZpdHkgLSBUaGUgbmFtZSBvZiBtYWluIGFwcGxpY2F0aW9uIGFjdGl2aXR5LlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBuYW1lIG9mIGN1cnJlbnRseSBmb2N1c2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5LlxuICpcbiAqIEByZXR1cm4ge1BhY2thZ2VBY3Rpdml0eUluZm99IFRoZSBtYXBwaW5nLCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyBhcmUgJ2FwcFBhY2thZ2UnIGFuZCAnYXBwQWN0aXZpdHknLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIGRhdGEuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBmb2N1c2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5Jyk7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgc3Rkb3V0ID0gYXdhaXQgdGhpcy5kdW1wV2luZG93cygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENvdWxkIG5vdCByZXRyaWV2ZSB0aGUgY3VycmVudGx5IGZvY3VzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG51bGxGb2N1c2VkQXBwUmUgPSAvXlxccyptRm9jdXNlZEFwcD1udWxsL207XG4gIC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IveFo4dkY3LzFcbiAgY29uc3QgZm9jdXNlZEFwcFJlID0gbmV3IFJlZ0V4cChcbiAgICAnXlxcXFxzKm1Gb2N1c2VkQXBwLitSZWNvcmRcXFxcey4qXFxcXHMoW15cXFxcc1xcXFwvXFxcXH1dKylcXFxcLyhbXlxcXFxzXFxcXC9cXFxcfVxcXFwsXSspXFxcXCw/KFxcXFxzW15cXFxcc1xcXFwvXFxcXH1dKykqXFxcXH0nLFxuICAgICdtZydcbiAgKTtcbiAgY29uc3QgbnVsbEN1cnJlbnRGb2N1c1JlID0gL15cXHMqbUN1cnJlbnRGb2N1cz1udWxsL207XG4gIGNvbnN0IGN1cnJlbnRGb2N1c0FwcFJlID0gbmV3IFJlZ0V4cCgnXlxcXFxzKm1DdXJyZW50Rm9jdXMuK1xcXFx7LitcXFxccyhbXlxcXFxzXFxcXC9dKylcXFxcLyhbXlxcXFxzXSspXFxcXGInLCAnbWcnKTtcblxuICBjb25zdCBmb2N1c2VkQXBwQ2FuZGlkYXRlcyA9IFtdO1xuICBjb25zdCBjdXJyZW50Rm9jdXNBcHBDYW5kaWRhdGVzID0gW107XG4gIGZvciAoY29uc3QgW2NhbmRpZGF0ZXMsIHBhdHRlcm5dIG9mIFtcbiAgICBbZm9jdXNlZEFwcENhbmRpZGF0ZXMsIGZvY3VzZWRBcHBSZV0sXG4gICAgW2N1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXMsIGN1cnJlbnRGb2N1c0FwcFJlXVxuICBdKSB7XG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KSkpIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgIGFwcFBhY2thZ2U6IG1hdGNoWzFdLnRyaW0oKSxcbiAgICAgICAgYXBwQWN0aXZpdHk6IG1hdGNoWzJdLnRyaW0oKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChmb2N1c2VkQXBwQ2FuZGlkYXRlcy5sZW5ndGggPiAxICYmIGN1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNzEwNlxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbldpdGgoZm9jdXNlZEFwcENhbmRpZGF0ZXMsIGN1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXMsIF8uaXNFcXVhbClbMF1cbiAgICAgID8/IGZvY3VzZWRBcHBDYW5kaWRhdGVzWzBdO1xuICB9XG4gIGlmIChmb2N1c2VkQXBwQ2FuZGlkYXRlcy5sZW5ndGggPiAwIHx8IGN1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBmb2N1c2VkQXBwQ2FuZGlkYXRlc1swXSA/PyBjdXJyZW50Rm9jdXNBcHBDYW5kaWRhdGVzWzBdO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIFtudWxsRm9jdXNlZEFwcFJlLCBudWxsQ3VycmVudEZvY3VzUmVdKSB7XG4gICAgaWYgKHBhdHRlcm4uZXhlYyhzdGRvdXQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcHBQYWNrYWdlOiBudWxsLFxuICAgICAgICBhcHBBY3Rpdml0eTogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBsb2cuZGVidWcoc3Rkb3V0KTtcbiAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmV0cmlldmUgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5Jyk7XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIHRoZSBnaXZlbiBhY3Rpdml0eSB0byBiZSBmb2N1c2VkL25vbi1mb2N1c2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3YWl0IGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBhY3Rpdml0eSwgYmVsb25naW5nIHRvIHRoYXQgcGFja2FnZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHtib29sZWFufSB3YWl0Rm9yU3RvcCAtIFdoZXRoZXIgdG8gd2FpdCB1bnRpbCB0aGUgYWN0aXZpdHkgaXMgZm9jdXNlZCAodHJ1ZSlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpcyBub3QgZm9jdXNlZCAoZmFsc2UpLlxuICogQHBhcmFtIHtudW1iZXJ9IHdhaXRNcyBbMjAwMDBdIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1lb3V0IG9jY3Vycy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aW1lb3V0IGhhcHBlbnMuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy53YWl0Rm9yQWN0aXZpdHlPck5vdCA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBY3Rpdml0eU9yTm90IChwa2csIGFjdGl2aXR5LCB3YWl0Rm9yU3RvcCwgd2FpdE1zID0gMjAwMDApIHtcbiAgaWYgKCFwa2cgfHwgIWFjdGl2aXR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYWNrYWdlIGFuZCBhY3Rpdml0eSByZXF1aXJlZC4nKTtcbiAgfVxuICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt3YWl0TXN9bXMgZm9yIGFjdGl2aXR5IG1hdGNoaW5nIHBrZzogJyR7cGtnfScgYW5kIGAgK1xuICAgICAgICAgICAgYGFjdGl2aXR5OiAnJHthY3Rpdml0eX0nIHRvJHt3YWl0Rm9yU3RvcCA/ICcgbm90JyA6ICcnfSBiZSBmb2N1c2VkYCk7XG5cbiAgY29uc3Qgc3BsaXROYW1lcyA9IChuYW1lcykgPT4gbmFtZXMuc3BsaXQoJywnKS5tYXAoKG5hbWUpID0+IG5hbWUudHJpbSgpKTtcbiAgY29uc3QgYWxsUGFja2FnZXMgPSBzcGxpdE5hbWVzKHBrZyk7XG4gIGNvbnN0IGFsbEFjdGl2aXRpZXMgPSBzcGxpdE5hbWVzKGFjdGl2aXR5KTtcblxuICBjb25zdCBwb3NzaWJsZUFjdGl2aXR5TmFtZXMgPSBbXTtcbiAgZm9yIChjb25zdCBvbmVBY3Rpdml0eSBvZiBhbGxBY3Rpdml0aWVzKSB7XG4gICAgaWYgKG9uZUFjdGl2aXR5LnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgLy8gYWRkIHRoZSBwYWNrYWdlIG5hbWUgaWYgYWN0aXZpdHkgaXMgbm90IGZ1bGwgcXVhbGlmaWVkXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRQa2cgb2YgYWxsUGFja2FnZXMpIHtcbiAgICAgICAgcG9zc2libGVBY3Rpdml0eU5hbWVzLnB1c2goYCR7Y3VycmVudFBrZ30ke29uZUFjdGl2aXR5fWAucmVwbGFjZSgvXFwuKy9nLCAnLicpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWNjZXB0IGZ1bGx5IHF1YWxpZmllZCBhY3Rpdml0eSBuYW1lLlxuICAgICAgcG9zc2libGVBY3Rpdml0eU5hbWVzLnB1c2gob25lQWN0aXZpdHkpO1xuICAgICAgcG9zc2libGVBY3Rpdml0eU5hbWVzLnB1c2goYCR7cGtnfS4ke29uZUFjdGl2aXR5fWApO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoYFBvc3NpYmxlIGFjdGl2aXRpZXMsIHRvIGJlIGNoZWNrZWQ6ICR7cG9zc2libGVBY3Rpdml0eU5hbWVzLm1hcCgobmFtZSkgPT4gYCcke25hbWV9J2ApLmpvaW4oJywgJyl9YCk7XG5cbiAgY29uc3QgcG9zc2libGVBY3Rpdml0eVBhdHRlcm5zID0gcG9zc2libGVBY3Rpdml0eU5hbWVzLm1hcChcbiAgICAoYWN0TmFtZSkgPT4gbmV3IFJlZ0V4cChgXiR7YWN0TmFtZS5yZXBsYWNlKC9cXC4vZywgJ1xcXFwuJykucmVwbGFjZSgvXFwqL2csICcuKj8nKS5yZXBsYWNlKC9cXCQvZywgJ1xcXFwkJyl9JGApXG4gICk7XG5cbiAgY29uc3QgY29uZGl0aW9uRnVuYyA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXBwUGFja2FnZTtcbiAgICBsZXQgYXBwQWN0aXZpdHk7XG4gICAgdHJ5IHtcbiAgICAgICh7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYXBwQWN0aXZpdHkgJiYgYXBwUGFja2FnZSkge1xuICAgICAgY29uc3QgZnVsbHlRdWFsaWZpZWRBY3Rpdml0eSA9IGFwcEFjdGl2aXR5LnN0YXJ0c1dpdGgoJy4nKSA/IGAke2FwcFBhY2thZ2V9JHthcHBBY3Rpdml0eX1gIDogYXBwQWN0aXZpdHk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kIHBhY2thZ2U6ICcke2FwcFBhY2thZ2V9JyBhbmQgZnVsbHkgcXVhbGlmaWVkIGFjdGl2aXR5IG5hbWUgOiAnJHtmdWxseVF1YWxpZmllZEFjdGl2aXR5fSdgKTtcbiAgICAgIGNvbnN0IGlzQWN0aXZpdHlGb3VuZCA9IF8uaW5jbHVkZXMoYWxsUGFja2FnZXMsIGFwcFBhY2thZ2UpXG4gICAgICAgICYmIHBvc3NpYmxlQWN0aXZpdHlQYXR0ZXJucy5zb21lKChwKSA9PiBwLnRlc3QoZnVsbHlRdWFsaWZpZWRBY3Rpdml0eSkpO1xuICAgICAgaWYgKCghd2FpdEZvclN0b3AgJiYgaXNBY3Rpdml0eUZvdW5kKSB8fCAod2FpdEZvclN0b3AgJiYgIWlzQWN0aXZpdHlGb3VuZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5kZWJ1ZygnSW5jb3JyZWN0IHBhY2thZ2UgYW5kIGFjdGl2aXR5LiBSZXRyeWluZy4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbkZ1bmMsIHtcbiAgICAgIHdhaXRNczogcGFyc2VJbnQod2FpdE1zLCAxMCksXG4gICAgICBpbnRlcnZhbE1zOiA1MDAsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9zc2libGVBY3Rpdml0eU5hbWVzLm1hcCgobmFtZSkgPT4gYCcke25hbWV9J2ApLmpvaW4oJyBvciAnKX0gbmV2ZXIgJHt3YWl0Rm9yU3RvcCA/ICdzdG9wcGVkJyA6ICdzdGFydGVkJ30uIGAgK1xuICAgICAgYENvbnNpZGVyIGNoZWNraW5nIHRoZSBkcml2ZXIncyB0cm91Ymxlc2hvb3RpbmcgZG9jdW1lbnRhdGlvbi5gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZ2l2ZW4gYWN0aXZpdHkgdG8gYmUgZm9jdXNlZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3YWl0IGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBhY3Rpdml0eSwgYmVsb25naW5nIHRvIHRoYXQgcGFja2FnZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IHdhaXRNcyBbMjAwMDBdIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1lb3V0IG9jY3Vycy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aW1lb3V0IGhhcHBlbnMuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy53YWl0Rm9yQWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQWN0aXZpdHkgKHBrZywgYWN0LCB3YWl0TXMgPSAyMDAwMCkge1xuICBhd2FpdCB0aGlzLndhaXRGb3JBY3Rpdml0eU9yTm90KHBrZywgYWN0LCBmYWxzZSwgd2FpdE1zKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgdGhlIGdpdmVuIGFjdGl2aXR5IHRvIGJlIG5vbi1mb2N1c2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3YWl0IGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBhY3Rpdml0eSwgYmVsb25naW5nIHRvIHRoYXQgcGFja2FnZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IHdhaXRNcyBbMjAwMDBdIC0gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1lb3V0IG9jY3Vycy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aW1lb3V0IGhhcHBlbnMuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy53YWl0Rm9yTm90QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yTm90QWN0aXZpdHkgKHBrZywgYWN0LCB3YWl0TXMgPSAyMDAwMCkge1xuICBhd2FpdCB0aGlzLndhaXRGb3JBY3Rpdml0eU9yTm90KHBrZywgYWN0LCB0cnVlLCB3YWl0TXMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbYWRiRXhlY1RpbWVvdXRdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB1bmluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2VlcERhdGEgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGtlZXAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkYXRhIGFuZCBjYWNoZSBmb2xkZXJzIGFmdGVyIHVuaW5zdGFsbC5cbiAqL1xuXG4vKipcbiAqIFVuaW5zdGFsbCB0aGUgZ2l2ZW4gcGFja2FnZSBmcm9tIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGtnIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gYmUgdW5pbnN0YWxsZWQuXG4gKiBAcGFyYW0gez9Vbmluc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiB1bmluc3RhbGwgb3B0aW9ucy5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhY2thZ2Ugd2FzIGZvdW5kIG9uIHRoZSBkZXZpY2UgYW5kXG4gKiAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy51bmluc3RhbGxBcGsgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxBcGsgKHBrZywgb3B0aW9ucyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZyhgVW5pbnN0YWxsaW5nICR7cGtnfWApO1xuICBpZiAoIWF3YWl0IHRoaXMuaXNBcHBJbnN0YWxsZWQocGtnKSkge1xuICAgIGxvZy5pbmZvKGAke3BrZ30gd2FzIG5vdCB1bmluc3RhbGxlZCwgYmVjYXVzZSBpdCB3YXMgbm90IHByZXNlbnQgb24gdGhlIGRldmljZWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNtZCA9IFsndW5pbnN0YWxsJ107XG4gIGlmIChvcHRpb25zLmtlZXBEYXRhKSB7XG4gICAgY21kLnB1c2goJy1rJyk7XG4gIH1cbiAgY21kLnB1c2gocGtnKTtcblxuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZm9yY2VTdG9wKHBrZyk7XG4gICAgc3Rkb3V0ID0gKGF3YWl0IHRoaXMuYWRiRXhlYyhjbWQsIHt0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXR9KSkudHJpbSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gdW5pbnN0YWxsIEFQSy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG4gIGxvZy5kZWJ1ZyhgJ2FkYiAke2NtZC5qb2luKCcgJyl9JyBjb21tYW5kIG91dHB1dDogJHtzdGRvdXR9YCk7XG4gIGlmIChzdGRvdXQuaW5jbHVkZXMoJ1N1Y2Nlc3MnKSkge1xuICAgIGxvZy5pbmZvKGAke3BrZ30gd2FzIHN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZGApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxvZy5pbmZvKGAke3BrZ30gd2FzIG5vdCB1bmluc3RhbGxlZGApO1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEluc3RhbGwgdGhlIHBhY2thZ2UgYWZ0ZXIgaXQgd2FzIHB1c2hlZCB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa1BhdGhPbkRldmljZSAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIHBhY2thZ2Ugb24gdGhlIGRldmljZSBmaWxlIHN5c3RlbS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzIFt7fV0gLSBBZGRpdGlvbmFsIGV4ZWMgb3B0aW9ucy4gU2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL25vZGUtdGVlbl9wcm9jZXNzfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBwYXJhbWV0ZXIuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSBkdXJpbmcgYXBwbGljYXRpb24gaW5zdGFsbC5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmluc3RhbGxGcm9tRGV2aWNlUGF0aCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxGcm9tRGV2aWNlUGF0aCAoYXBrUGF0aE9uRGV2aWNlLCBvcHRzID0ge30pIHtcbiAgbGV0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2hlbGwoWydwbScsICdpbnN0YWxsJywgJy1yJywgYXBrUGF0aE9uRGV2aWNlXSwgb3B0cyk7XG4gIGlmIChzdGRvdXQuaW5kZXhPZignRmFpbHVyZScpICE9PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVtb3RlIGluc3RhbGwgZmFpbGVkOiAke3N0ZG91dH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0IFthZGJFeGVjVGltZW91dF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB1cGxvYWRlZCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uLlxuICovXG5cbi8qKlxuICogQ2FjaGVzIHRoZSBnaXZlbiBBUEsgYXQgYSByZW1vdGUgbG9jYXRpb24gdG8gc3BlZWQgdXAgZnVydGhlciBBUEsgZGVwbG95bWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa1BhdGggLSBGdWxsIHBhdGggdG8gdGhlIGFwayBvbiB0aGUgbG9jYWwgRlNcbiAqIEBwYXJhbSB7P0NhY2hpbmdPcHRpb25zfSBvcHRpb25zIC0gQ2FjaGluZyBvcHRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEZ1bGwgcGF0aCB0byB0aGUgY2FjaGVkIGFwayBvbiB0aGUgcmVtb3RlIGZpbGUgc3lzdGVtXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBjYWNoaW5nIHRoZSBhcHBcbiAqL1xuYXBrVXRpbHNNZXRob2RzLmNhY2hlQXBrID0gYXN5bmMgZnVuY3Rpb24gY2FjaGVBcGsgKGFwa1BhdGgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBhcHBIYXNoID0gYXdhaXQgZnMuaGFzaChhcGtQYXRoKTtcbiAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGgucG9zaXguam9pbihSRU1PVEVfQ0FDSEVfUk9PVCwgYCR7YXBwSGFzaH0uYXBrYCk7XG4gIGNvbnN0IHJlbW90ZUNhY2hlZEZpbGVzID0gW107XG4gIC8vIEdldCBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSByZW1vdGUgY2FjaGUgb3IgY3JlYXRlIGl0IGZvciB0aGUgZmlyc3QgdGltZVxuICB0cnkge1xuICAgIGNvbnN0IGVycm9yTWFya2VyID0gJ19FUlJPUl8nO1xuICAgIGxldCBsc091dHB1dCA9IG51bGw7XG4gICAgaWYgKHRoaXMuX2FyZUV4dGVuZGVkTHNPcHRpb25zU3VwcG9ydGVkID09PSB0cnVlIHx8ICFfLmlzQm9vbGVhbih0aGlzLl9hcmVFeHRlbmRlZExzT3B0aW9uc1N1cHBvcnRlZCkpIHtcbiAgICAgIGxzT3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbYGxzIC10IC0xICR7UkVNT1RFX0NBQ0hFX1JPT1R9IDI+JjEgfHwgZWNobyAke2Vycm9yTWFya2VyfWBdKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzU3RyaW5nKGxzT3V0cHV0KSB8fCAobHNPdXRwdXQuaW5jbHVkZXMoZXJyb3JNYXJrZXIpICYmICFsc091dHB1dC5pbmNsdWRlcyhSRU1PVEVfQ0FDSEVfUk9PVCkpKSB7XG4gICAgICBpZiAoIV8uaXNCb29sZWFuKHRoaXMuX2FyZUV4dGVuZGVkTHNPcHRpb25zU3VwcG9ydGVkKSkge1xuICAgICAgICBsb2cuZGVidWcoJ1RoZSBjdXJyZW50IEFuZHJvaWQgQVBJIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5kZWQgbHMgb3B0aW9ucy4gJyArXG4gICAgICAgICAgJ0RlZmF1bHRpbmcgdG8gbm8tb3B0aW9ucyBjYWxsJyk7XG4gICAgICB9XG4gICAgICBsc091dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW2BscyAke1JFTU9URV9DQUNIRV9ST09UfSAyPiYxIHx8IGVjaG8gJHtlcnJvck1hcmtlcn1gXSk7XG4gICAgICB0aGlzLl9hcmVFeHRlbmRlZExzT3B0aW9uc1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hcmVFeHRlbmRlZExzT3B0aW9uc1N1cHBvcnRlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChsc091dHB1dC5pbmNsdWRlcyhlcnJvck1hcmtlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihsc091dHB1dC5zdWJzdHJpbmcoMCwgbHNPdXRwdXQuaW5kZXhPZihlcnJvck1hcmtlcikpKTtcbiAgICB9XG4gICAgcmVtb3RlQ2FjaGVkRmlsZXMucHVzaCguLi4oXG4gICAgICBsc091dHB1dC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgoeCkgPT4geC50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICApKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgR290IGFuIGVycm9yICcke2UubWVzc2FnZS50cmltKCl9JyB3aGlsZSBnZXR0aW5nIHRoZSBsaXN0IG9mIGZpbGVzIGluIHRoZSBjYWNoZS4gYCArXG4gICAgICBgQXNzdW1pbmcgdGhlIGNhY2hlIGRvZXMgbm90IGV4aXN0IHlldGApO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoWydta2RpcicsICctcCcsIFJFTU9URV9DQUNIRV9ST09UXSk7XG4gIH1cbiAgbG9nLmRlYnVnKGBUaGUgY291bnQgb2YgYXBwbGljYXRpb25zIGluIHRoZSBjYWNoZTogJHtyZW1vdGVDYWNoZWRGaWxlcy5sZW5ndGh9YCk7XG4gIGNvbnN0IHRvSGFzaCA9IChyZW1vdGVQYXRoKSA9PiBwYXRoLnBvc2l4LnBhcnNlKHJlbW90ZVBhdGgpLm5hbWU7XG4gIC8vIFB1c2ggdGhlIGFwayB0byB0aGUgcmVtb3RlIGNhY2hlIGlmIG5lZWRlZFxuICBpZiAocmVtb3RlQ2FjaGVkRmlsZXMuc29tZSgoeCkgPT4gdG9IYXNoKHgpID09PSBhcHBIYXNoKSkge1xuICAgIGxvZy5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7YXBrUGF0aH0nIGlzIGFscmVhZHkgY2FjaGVkIHRvICcke3JlbW90ZVBhdGh9J2ApO1xuICAgIC8vIFVwZGF0ZSB0aGUgYXBwbGljYXRpb24gdGltZXN0YW1wIGFzeW5jaHJvbm91c2x5IGluIG9yZGVyIHRvIGJ1bXAgaXRzIHBvc2l0aW9uXG4gICAgLy8gaW4gdGhlIHNvcnRlZCBscyBvdXRwdXRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgIHRoaXMuc2hlbGwoWyd0b3VjaCcsICctYW0nLCByZW1vdGVQYXRoXSkuY2F0Y2goKCkgPT4ge30pO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKGBDYWNoaW5nIHRoZSBhcHBsaWNhdGlvbiBhdCAnJHthcGtQYXRofScgdG8gJyR7cmVtb3RlUGF0aH0nYCk7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLnB1c2goYXBrUGF0aCwgcmVtb3RlUGF0aCwge3RpbWVvdXQ6IG9wdGlvbnMudGltZW91dH0pO1xuICAgIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoYXBrUGF0aCk7XG4gICAgbG9nLmluZm8oYFRoZSB1cGxvYWQgb2YgJyR7cGF0aC5iYXNlbmFtZShhcGtQYXRoKX0nICgke3V0aWwudG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9KSBgICtcbiAgICAgIGB0b29rICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gIH1cbiAgaWYgKCF0aGlzLnJlbW90ZUFwcHNDYWNoZSkge1xuICAgIHRoaXMucmVtb3RlQXBwc0NhY2hlID0gbmV3IExSVSh7XG4gICAgICBtYXg6IHRoaXMucmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgfSk7XG4gIH1cbiAgLy8gQ2xlYW51cCB0aGUgaW52YWxpZCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4gIF8uZGlmZmVyZW5jZShbLi4udGhpcy5yZW1vdGVBcHBzQ2FjaGUua2V5cygpXSwgcmVtb3RlQ2FjaGVkRmlsZXMubWFwKHRvSGFzaCkpXG4gICAgLmZvckVhY2goKGhhc2gpID0+IHRoaXMucmVtb3RlQXBwc0NhY2hlLmRlbChoYXNoKSk7XG4gIC8vIEJ1bXAgdGhlIGNhY2hlIHJlY29yZCBmb3IgdGhlIHJlY2VudGx5IGNhY2hlZCBpdGVtXG4gIHRoaXMucmVtb3RlQXBwc0NhY2hlLnNldChhcHBIYXNoLCByZW1vdGVQYXRoKTtcbiAgLy8gSWYgdGhlIHJlbW90ZSBjYWNoZSBleGNlZWRzIHRoaXMucmVtb3RlQXBwc0NhY2hlTGltaXQsIHJlbW92ZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyaWVzXG4gIGNvbnN0IGVudHJpZXNUb0NsZWFudXAgPSByZW1vdGVDYWNoZWRGaWxlc1xuICAgIC5tYXAoKHgpID0+IHBhdGgucG9zaXguam9pbihSRU1PVEVfQ0FDSEVfUk9PVCwgeCkpXG4gICAgLmZpbHRlcigoeCkgPT4gIXRoaXMucmVtb3RlQXBwc0NhY2hlLmhhcyh0b0hhc2goeCkpKVxuICAgIC5zbGljZSh0aGlzLnJlbW90ZUFwcHNDYWNoZUxpbWl0IC0gWy4uLnRoaXMucmVtb3RlQXBwc0NhY2hlLmtleXMoKV0ubGVuZ3RoKTtcbiAgaWYgKCFfLmlzRW1wdHkoZW50cmllc1RvQ2xlYW51cCkpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zaGVsbChbJ3JtJywgJy1mJywgLi4uZW50cmllc1RvQ2xlYW51cF0pO1xuICAgICAgbG9nLmRlYnVnKGBEZWxldGVkICR7ZW50cmllc1RvQ2xlYW51cC5sZW5ndGh9IGV4cGlyZWQgYXBwbGljYXRpb24gY2FjaGUgZW50cmllc2ApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgZGVsZXRlICR7ZW50cmllc1RvQ2xlYW51cC5sZW5ndGh9IGV4cGlyZWQgYXBwbGljYXRpb24gY2FjaGUgZW50cmllcy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW1vdGVQYXRoO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthbmRyb2lkSW5zdGFsbFRpbWVvdXRdIC0gVGhlIHRpbWVvdXQgb3B0aW9uIG5hbWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzIGNhbiBpbmNyZWFzZSB0aGUgdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBub0luY3JlbWVudGFsIFtmYWxzZV0gLSBGb3JjZWZ1bGx5IGRpc2FibGVzIGluY3JlbWVudGFsIGluc3RhbGxzIGlmIHNldCB0byBgdHJ1ZWAuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcHJldmlldy9mZWF0dXJlcyNpbmNyZW1lbnRhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5cbi8qKlxuICogSW5zdGFsbCB0aGUgcGFja2FnZSBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIHBhY2thZ2UuXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgaW5zdGFsbGF0aW9uIG9wdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYW4gdW5leHBlY3RlZCBlcnJvciBoYXBwZW5zIGR1cmluZyBpbnN0YWxsLlxuICovXG5hcGtVdGlsc01ldGhvZHMuaW5zdGFsbCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGwgKGFwcFBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnN0YWxsQXBrcyhhcHBQYXRoLCBvcHRpb25zKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBfLmNsb25lRGVlcChvcHRpb25zKTtcbiAgXy5kZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgcmVwbGFjZTogdHJ1ZSxcbiAgICB0aW1lb3V0OiB0aGlzLmFkYkV4ZWNUaW1lb3V0ID09PSBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPyBBUEtfSU5TVEFMTF9USU1FT1VUIDogdGhpcy5hZGJFeGVjVGltZW91dCxcbiAgICB0aW1lb3V0Q2FwTmFtZTogJ2FuZHJvaWRJbnN0YWxsVGltZW91dCcsXG4gIH0pO1xuXG4gIGNvbnN0IGluc3RhbGxBcmdzID0gYnVpbGRJbnN0YWxsQXJncyhhd2FpdCB0aGlzLmdldEFwaUxldmVsKCksIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5ub0luY3JlbWVudGFsICYmIGF3YWl0IHRoaXMuaXNJbmNyZW1lbnRhbEluc3RhbGxTdXBwb3J0ZWQoKSkge1xuICAgIC8vIEFkYiB0aHJvd3MgYW4gZXJyb3IgaWYgaXQgZG9lcyBub3Qga25vdyBhYm91dCBhbiBhcmcsXG4gICAgLy8gd2hpY2ggaXMgdGhlIGNhc2UgaGVyZSBmb3Igb2xkZXIgYWRiIHZlcnNpb25zLlxuICAgIGluc3RhbGxBcmdzLnB1c2goJy0tbm8taW5jcmVtZW50YWwnKTtcbiAgfVxuICBjb25zdCBpbnN0YWxsT3B0cyA9IHtcbiAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgdGltZW91dENhcE5hbWU6IG9wdGlvbnMudGltZW91dENhcE5hbWUsXG4gIH07XG4gIGNvbnN0IGluc3RhbGxDbWQgPSBbXG4gICAgJ2luc3RhbGwnLFxuICAgIC4uLmluc3RhbGxBcmdzLFxuICAgIGFwcFBhdGgsXG4gIF07XG4gIGxldCBwZXJmb3JtQXBwSW5zdGFsbCA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiRXhlYyhpbnN0YWxsQ21kLCBpbnN0YWxsT3B0cyk7XG4gIC8vIHRoaXMucmVtb3RlQXBwc0NhY2hlTGltaXQgPD0gMCBtZWFucyBubyBjYWNoaW5nIHNob3VsZCBiZSBhcHBsaWVkXG4gIGxldCBzaG91bGRDYWNoZUFwcCA9IHRoaXMucmVtb3RlQXBwc0NhY2hlTGltaXQgPiAwO1xuICBpZiAoc2hvdWxkQ2FjaGVBcHApIHtcbiAgICBzaG91bGRDYWNoZUFwcCA9ICEoYXdhaXQgdGhpcy5pc1N0cmVhbWVkSW5zdGFsbFN1cHBvcnRlZCgpKTtcbiAgICBpZiAoIXNob3VsZENhY2hlQXBwKSB7XG4gICAgICBsb2cuaW5mbyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke2FwcFBhdGh9JyB3aWxsIG5vdCBiZSBjYWNoZWQsIGJlY2F1c2UgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhcyBgICtcbiAgICAgICAgYGNvbmZpcm1lZCB0aGUgc3VwcG9ydCBvZiBzdHJlYW1lZCBpbnN0YWxsc2ApO1xuICAgIH1cbiAgfVxuICBpZiAoc2hvdWxkQ2FjaGVBcHApIHtcbiAgICBjb25zdCBjbGVhckNhY2hlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbG9nLmluZm8oYENsZWFyaW5nIHRoZSBjYWNoZSBhdCAnJHtSRU1PVEVfQ0FDSEVfUk9PVH0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNoZWxsKFsncm0nLCAnLXJmJywgYCR7UkVNT1RFX0NBQ0hFX1JPT1R9LypgXSk7XG4gICAgfTtcbiAgICBjb25zdCBjYWNoZUFwcCA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuY2FjaGVBcGsoYXBwUGF0aCwge1xuICAgICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0LFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWNoZWRBcHBQYXRoID0gYXdhaXQgY2FjaGVBcHAoKTtcbiAgICAgIHBlcmZvcm1BcHBJbnN0YWxsID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwbUluc3RhbGxDbWRCeVJlbW90ZVBhdGggPSAocmVtb3RlUGF0aCkgPT4gW1xuICAgICAgICAgICdwbScsICdpbnN0YWxsJyxcbiAgICAgICAgICAuLi5pbnN0YWxsQXJncyxcbiAgICAgICAgICByZW1vdGVQYXRoLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKHBtSW5zdGFsbENtZEJ5UmVtb3RlUGF0aChjYWNoZWRBcHBQYXRoKSwgaW5zdGFsbE9wdHMpO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTM5NzBcbiAgICAgICAgaWYgKC9cXGJJTlNUQUxMX0ZBSUxFRF9JTlNVRkZJQ0lFTlRfU1RPUkFHRVxcYi8udGVzdChvdXRwdXQpKSB7XG4gICAgICAgICAgbG9nLndhcm4oYFRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgaW5zdGFsbGluZyAnJHthcHBQYXRofScgYCArXG4gICAgICAgICAgICBgYmVjYXVzZSBvZiB0aGUgaW5zdWZmaWNpZW50IGRldmljZSBzdG9yYWdlIHNwYWNlYCk7XG4gICAgICAgICAgYXdhaXQgY2xlYXJDYWNoZSgpO1xuICAgICAgICAgIGxvZy5pbmZvKGBDb25zaWRlciBkZWNyZWFzaW5nIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjYWNoZWQgYXBwcyBgICtcbiAgICAgICAgICAgIGAoY3VycmVudGx5ICR7dGhpcy5yZW1vdGVBcHBzQ2FjaGVMaW1pdH0pIHRvIGF2b2lkIHN1Y2ggaXNzdWVzIGluIHRoZSBmdXR1cmVgKTtcbiAgICAgICAgICBjb25zdCBuZXdDYWNoZWRBcHBQYXRoID0gYXdhaXQgY2FjaGVBcHAoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zaGVsbChwbUluc3RhbGxDbWRCeVJlbW90ZVBhdGgobmV3Q2FjaGVkQXBwUGF0aCksIGluc3RhbGxPcHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoZSk7XG4gICAgICBsb2cud2FybihgVGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBjYWNoaW5nICcke2FwcFBhdGh9JzogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICBsb2cud2FybignRmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBwcm9jZWR1cmUnKTtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGUoKTtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHBlcmZvcm1BcHBJbnN0YWxsKCk7XG4gICAgbG9nLmluZm8oYFRoZSBpbnN0YWxsYXRpb24gb2YgJyR7cGF0aC5iYXNlbmFtZShhcHBQYXRoKX0nIHRvb2sgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICBjb25zdCB0cnVuY2F0ZWRPdXRwdXQgPSAoIV8uaXNTdHJpbmcob3V0cHV0KSB8fCBvdXRwdXQubGVuZ3RoIDw9IDMwMCkgP1xuICAgICAgb3V0cHV0IDogYCR7b3V0cHV0LnN1YnN0cigwLCAxNTApfS4uLiR7b3V0cHV0LnN1YnN0cihvdXRwdXQubGVuZ3RoIC0gMTUwKX1gO1xuICAgIGxvZy5kZWJ1ZyhgSW5zdGFsbCBjb21tYW5kIHN0ZG91dDogJHt0cnVuY2F0ZWRPdXRwdXR9YCk7XG4gICAgaWYgKC9cXFtJTlNUQUxMW0EtWl9dK0ZBSUxFRFtBLVpfXStcXF0vLnRlc3Qob3V0cHV0KSkge1xuICAgICAgaWYgKHRoaXMuaXNUZXN0UGFja2FnZU9ubHlFcnJvcihvdXRwdXQpKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBTZXQgJ2FsbG93VGVzdFBhY2thZ2VzJyBjYXBhYmlsaXR5IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdCBwYWNrYWdlcyBpbnN0YWxsYXRpb24uYDtcbiAgICAgICAgbG9nLndhcm4obXNnKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke291dHB1dH1cXG4ke21zZ31gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihvdXRwdXQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gb24gc29tZSBzeXN0ZW1zIHRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgYXBwIGFscmVhZHlcbiAgICAvLyBleGlzdHNcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdJTlNUQUxMX0ZBSUxFRF9BTFJFQURZX0VYSVNUUycpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgQXBwbGljYXRpb24gJyR7YXBwUGF0aH0nIGFscmVhZHkgaW5zdGFsbGVkLiBDb250aW51aW5nLmApO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gc3RhdGUgb2YgdGhlIHBhcnRpY3VsYXIgYXBwbGljYXRpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgYXBwbGljYXRpb25cbiAqIEBwYXJhbSB7P3N0cmluZ30gcGtnIC0gUGFja2FnZSBpZGVudGlmaWVyLiBJZiBvbWl0dGVkIHRoZW4gdGhlIHNjcmlwdCB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHRyYWN0IGl0IG9uIGl0cyBvd25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XU9uZSBvZiBgQVBQX0lOU1RBTExfU1RBVEVgIGNvbnN0YW50c1xuICovXG5hcGtVdGlsc01ldGhvZHMuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBnZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZSAoYXBwUGF0aCwgcGtnID0gbnVsbCkge1xuICBsZXQgYXBrSW5mbyA9IG51bGw7XG4gIGlmICghcGtnKSB7XG4gICAgYXBrSW5mbyA9IGF3YWl0IHRoaXMuZ2V0QXBrSW5mbyhhcHBQYXRoKTtcbiAgICBwa2cgPSBhcGtJbmZvLm5hbWU7XG4gIH1cbiAgaWYgKCFwa2cpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHJlYWQgdGhlIHBhY2thZ2UgbmFtZSBvZiAnJHthcHBQYXRofSdgKTtcbiAgICByZXR1cm4gdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5VTktOT1dOO1xuICB9XG5cbiAgaWYgKCFhd2FpdCB0aGlzLmlzQXBwSW5zdGFsbGVkKHBrZykpIHtcbiAgICBsb2cuZGVidWcoYEFwcCAnJHthcHBQYXRofScgaXMgbm90IGluc3RhbGxlZGApO1xuICAgIHJldHVybiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cblxuICBjb25zdCB7dmVyc2lvbkNvZGU6IHBrZ1ZlcnNpb25Db2RlLCB2ZXJzaW9uTmFtZTogcGtnVmVyc2lvbk5hbWVTdHJ9ID0gYXdhaXQgdGhpcy5nZXRQYWNrYWdlSW5mbyhwa2cpO1xuICBjb25zdCBwa2dWZXJzaW9uTmFtZSA9IHNlbXZlci52YWxpZChzZW12ZXIuY29lcmNlKHBrZ1ZlcnNpb25OYW1lU3RyKSk7XG4gIGlmICghYXBrSW5mbykge1xuICAgIGFwa0luZm8gPSBhd2FpdCB0aGlzLmdldEFwa0luZm8oYXBwUGF0aCk7XG4gIH1cbiAgY29uc3Qge3ZlcnNpb25Db2RlOiBhcGtWZXJzaW9uQ29kZSwgdmVyc2lvbk5hbWU6IGFwa1ZlcnNpb25OYW1lU3RyfSA9IGFwa0luZm87XG4gIGNvbnN0IGFwa1ZlcnNpb25OYW1lID0gc2VtdmVyLnZhbGlkKHNlbXZlci5jb2VyY2UoYXBrVmVyc2lvbk5hbWVTdHIpKTtcblxuICBpZiAoIV8uaXNJbnRlZ2VyKGFwa1ZlcnNpb25Db2RlKSB8fCAhXy5pc0ludGVnZXIocGtnVmVyc2lvbkNvZGUpKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCByZWFkIHZlcnNpb24gY29kZXMgb2YgJyR7YXBwUGF0aH0nIGFuZC9vciAnJHtwa2d9J2ApO1xuICAgIGlmICghXy5pc1N0cmluZyhhcGtWZXJzaW9uTmFtZSkgfHwgIV8uaXNTdHJpbmcocGtnVmVyc2lvbk5hbWUpKSB7XG4gICAgICBsb2cud2FybihgQ2Fubm90IHJlYWQgdmVyc2lvbiBuYW1lcyBvZiAnJHthcHBQYXRofScgYW5kL29yICcke3BrZ30nYCk7XG4gICAgICByZXR1cm4gdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5VTktOT1dOO1xuICAgIH1cbiAgfVxuICBpZiAoXy5pc0ludGVnZXIoYXBrVmVyc2lvbkNvZGUpICYmIF8uaXNJbnRlZ2VyKHBrZ1ZlcnNpb25Db2RlKSkge1xuICAgIGlmIChwa2dWZXJzaW9uQ29kZSA+IGFwa1ZlcnNpb25Db2RlKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZSB2ZXJzaW9uIGNvZGUgb2YgdGhlIGluc3RhbGxlZCAnJHtwa2d9JyBpcyBncmVhdGVyIHRoYW4gdGhlIGFwcGxpY2F0aW9uIHZlcnNpb24gY29kZSAoJHtwa2dWZXJzaW9uQ29kZX0gPiAke2Fwa1ZlcnNpb25Db2RlfSlgKTtcbiAgICAgIHJldHVybiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEO1xuICAgIH1cbiAgICAvLyBWZXJzaW9uIGNvZGVzIG1pZ2h0IG5vdCBiZSBtYWludGFpbmVkLiBDaGVjayB2ZXJzaW9uIG5hbWVzLlxuICAgIGlmIChwa2dWZXJzaW9uQ29kZSA9PT0gYXBrVmVyc2lvbkNvZGUpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGFwa1ZlcnNpb25OYW1lKSAmJiBfLmlzU3RyaW5nKHBrZ1ZlcnNpb25OYW1lKSAmJiBzZW12ZXIuc2F0aXNmaWVzKHBrZ1ZlcnNpb25OYW1lLCBgPj0ke2Fwa1ZlcnNpb25OYW1lfWApKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZlcnNpb24gbmFtZSBvZiB0aGUgaW5zdGFsbGVkICcke3BrZ30nIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIGFwcGxpY2F0aW9uIHZlcnNpb24gbmFtZSAoJyR7cGtnVmVyc2lvbk5hbWV9JyA+PSAnJHthcGtWZXJzaW9uTmFtZX0nKWApO1xuICAgICAgICByZXR1cm4gc2VtdmVyLnNhdGlzZmllcyhwa2dWZXJzaW9uTmFtZSwgYD4ke2Fwa1ZlcnNpb25OYW1lfWApXG4gICAgICAgICAgPyB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEXG4gICAgICAgICAgOiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLlNBTUVfVkVSU0lPTl9JTlNUQUxMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNTdHJpbmcoYXBrVmVyc2lvbk5hbWUpIHx8ICFfLmlzU3RyaW5nKHBrZ1ZlcnNpb25OYW1lKSkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSB2ZXJzaW9uIG5hbWUgb2YgdGhlIGluc3RhbGxlZCAnJHtwa2d9JyBpcyBlcXVhbCB0byBhcHBsaWNhdGlvbiB2ZXJzaW9uIG5hbWUgKCR7cGtnVmVyc2lvbkNvZGV9ID09PSAke2Fwa1ZlcnNpb25Db2RlfSlgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuU0FNRV9WRVJTSU9OX0lOU1RBTExFRDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhhcGtWZXJzaW9uTmFtZSkgJiYgXy5pc1N0cmluZyhwa2dWZXJzaW9uTmFtZSkgJiYgc2VtdmVyLnNhdGlzZmllcyhwa2dWZXJzaW9uTmFtZSwgYD49JHthcGtWZXJzaW9uTmFtZX1gKSkge1xuICAgIGxvZy5kZWJ1ZyhgVGhlIHZlcnNpb24gbmFtZSBvZiB0aGUgaW5zdGFsbGVkICcke3BrZ30nIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIGFwcGxpY2F0aW9uIHZlcnNpb24gbmFtZSAoJyR7cGtnVmVyc2lvbk5hbWV9JyA+PSAnJHthcGtWZXJzaW9uTmFtZX0nKWApO1xuICAgIHJldHVybiBzZW12ZXIuc2F0aXNmaWVzKHBrZ1ZlcnNpb25OYW1lLCBgPiR7YXBrVmVyc2lvbk5hbWV9YClcbiAgICAgID8gdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRFxuICAgICAgOiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLlNBTUVfVkVSU0lPTl9JTlNUQUxMRUQ7XG4gIH1cblxuICBsb2cuZGVidWcoYFRoZSBpbnN0YWxsZWQgJyR7cGtnfScgcGFja2FnZSBpcyBvbGRlciB0aGFuICcke2FwcFBhdGh9JyAoJHtwa2dWZXJzaW9uQ29kZX0gPCAke2Fwa1ZlcnNpb25Db2RlfSBvciAnJHtwa2dWZXJzaW9uTmFtZX0nIDwgJyR7YXBrVmVyc2lvbk5hbWV9JyknYCk7XG4gIHJldHVybiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3JVcGdyYWRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBTRENhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuZm9yY2VDdXJyZW50QnVpbGQgW2ZhbHNlXSAtIFNldCB0byBgdHJ1ZWAgaW4gb3JkZXIgdG8gYWx3YXlzIHByZWZlclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBidWlsZCBvdmVyIGFueSBpbnN0YWxsZWQgcGFja2FnZXMgaGF2aW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIGlkZW50aWZpZXJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPclVwZ3JhZGVSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gd2FzVW5pbnN0YWxsZWQgLSBFcXVhbHMgdG8gYHRydWVgIGlmIHRoZSB0YXJnZXQgYXBwIGhhcyBiZWVuIHVuaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIGJlaW5nIGluc3RhbGxlZFxuICogQHByb3BlcnR5IHtBUFBfSU5TVEFMTF9TVEFURX0gYXBwU3RhdGUgLSBPbmUgb2YgYGFkYi5BUFBfSU5TVEFMTF9TVEFURWAgc3RhdGVzLCB3aGljaCByZWZsZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhdGUgb2YgdGhlIGFwcGxpY2F0aW9uIGJlZm9yZSBiZWluZyBpbnN0YWxsZWQuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBwYWNrYWdlIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIG9yIHVwZ3JhZGUgaXQgaWYgYW4gb2xkZXJcbiAqIHZlcnNpb24gb2YgdGhlIHNhbWUgcGFja2FnZSBpcyBhbHJlYWR5IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIHBhY2thZ2UuXG4gKiBAcGFyYW0gez9zdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsZWQgcGFja2FnZS4gVGhlIG1ldGhvZCB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm0gZmFzdGVyIGlmIGl0IGlzIHNldC5cbiAqIEBwYXJhbSB7P0luc3RhbGxPclVwZ3JhZGVPcHRpb25zfSBvcHRpb25zIC0gU2V0IG9mIGluc3RhbGwgb3B0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbiB1bmV4cGVjdGVkIGVycm9yIGhhcHBlbnMgZHVyaW5nIGluc3RhbGwuXG4gKiBAcmV0dXJucyB7SW5zdGFsbE9yVXBncmFkZVJlc3VsdH1cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmluc3RhbGxPclVwZ3JhZGUgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3JVcGdyYWRlIChhcHBQYXRoLCBwa2cgPSBudWxsLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKCFwa2cpIHtcbiAgICBjb25zdCBhcGtJbmZvID0gYXdhaXQgdGhpcy5nZXRBcGtJbmZvKGFwcFBhdGgpO1xuICAgIHBrZyA9IGFwa0luZm8ubmFtZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBlbmZvcmNlQ3VycmVudEJ1aWxkLFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlKGFwcFBhdGgsIHBrZyk7XG4gIGxldCB3YXNVbmluc3RhbGxlZCA9IGZhbHNlO1xuICBjb25zdCB1bmluc3RhbGxQYWNrYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghYXdhaXQgdGhpcy51bmluc3RhbGxBcGsocGtnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtwa2d9JyBwYWNrYWdlIGNhbm5vdCBiZSB1bmluc3RhbGxlZGApO1xuICAgIH1cbiAgICB3YXNVbmluc3RhbGxlZCA9IHRydWU7XG4gIH07XG4gIHN3aXRjaCAoYXBwU3RhdGUpIHtcbiAgICBjYXNlIHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRDpcbiAgICAgIGxvZy5kZWJ1ZyhgSW5zdGFsbGluZyAnJHthcHBQYXRofSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbChhcHBQYXRoLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7cmVwbGFjZTogZmFsc2V9KSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcHBTdGF0ZSxcbiAgICAgICAgd2FzVW5pbnN0YWxsZWQsXG4gICAgICB9O1xuICAgIGNhc2UgdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRDpcbiAgICAgIGlmIChlbmZvcmNlQ3VycmVudEJ1aWxkKSB7XG4gICAgICAgIGxvZy5pbmZvKGBEb3duZ3JhZGluZyAnJHtwa2d9JyBhcyByZXF1ZXN0ZWRgKTtcbiAgICAgICAgYXdhaXQgdW5pbnN0YWxsUGFja2FnZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgaXMgbm8gbmVlZCB0byBkb3duZ3JhZGUgJyR7cGtnfSdgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFwcFN0YXRlLFxuICAgICAgICB3YXNVbmluc3RhbGxlZCxcbiAgICAgIH07XG4gICAgY2FzZSB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLlNBTUVfVkVSU0lPTl9JTlNUQUxMRUQ6XG4gICAgICBpZiAoZW5mb3JjZUN1cnJlbnRCdWlsZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgVGhlcmUgaXMgbm8gbmVlZCB0byBpbnN0YWxsL3VwZ3JhZGUgJyR7YXBwUGF0aH0nYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcHBTdGF0ZSxcbiAgICAgICAgd2FzVW5pbnN0YWxsZWQsXG4gICAgICB9O1xuICAgIGNhc2UgdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5PTERFUl9WRVJTSU9OX0lOU1RBTExFRDpcbiAgICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIHVwZ3JhZGUgb2YgJyR7YXBwUGF0aH0nYCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbG9nLmRlYnVnKGBUaGUgY3VycmVudCBpbnN0YWxsIHN0YXRlIG9mICcke2FwcFBhdGh9JyBpcyB1bmtub3duLiBJbnN0YWxsaW5nIGFueXdheWApO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW5zdGFsbChhcHBQYXRoLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7cmVwbGFjZTogdHJ1ZX0pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBpbnN0YWxsL3VwZ3JhZGUgJyR7cGtnfScgYmVjYXVzZSBvZiAnJHtlcnIubWVzc2FnZX0nLiBUcnlpbmcgZnVsbCByZWluc3RhbGxgKTtcbiAgICBhd2FpdCB1bmluc3RhbGxQYWNrYWdlKCk7XG4gICAgYXdhaXQgdGhpcy5pbnN0YWxsKGFwcFBhdGgsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtyZXBsYWNlOiBmYWxzZX0pKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFwcFN0YXRlLFxuICAgIHdhc1VuaW5zdGFsbGVkLFxuICB9O1xufTtcblxuLyoqXG4gKiBFeHRyYWN0IHN0cmluZyByZXNvdXJjZXMgZnJvbSB0aGUgZ2l2ZW4gcGFja2FnZSBvbiBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGsocykgcGFja2FnZS5cbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdG8gZXh0cmFjdCB0aGUgcmVzb3VyY2VzIGZvci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpcyB1c2VkIGlmIHRoaXMgZXF1YWxzIHRvIGBudWxsYC9gdW5kZWZpbmVkYFxuICogQHBhcmFtIHtzdHJpbmd9IG91dCAtIFRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgdGhlIGV4dHJhY3RlZCBmaWxlIHRvLlxuICogQHJldHVybiB7T2JqZWN0fSBBIG1hcHBpbmcgb2JqZWN0LCB3aGVyZSBwcm9wZXJ0aWVzIGFyZTogJ2Fwa1N0cmluZ3MnLCBjb250YWluaW5nXG4gKiAgICAgICAgICAgICAgICAgIHBhcnNlZCByZXNvdXJjZSBmaWxlIHJlcHJlc2VudGVkIGFzIEpTT04gb2JqZWN0LCBhbmQgJ2xvY2FsUGF0aCcsXG4gKiAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIGV4dHJhY3RlZCBmaWxlIG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmV4dHJhY3RTdHJpbmdzRnJvbUFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RTdHJpbmdzRnJvbUFwayAoYXBwUGF0aCwgbGFuZ3VhZ2UsIG91dCkge1xuICBsb2cuZGVidWcoYEV4dHJhY3Rpbmcgc3RyaW5ncyBmcm9tIGZvciBsYW5ndWFnZTogJHtsYW5ndWFnZSB8fCAnZGVmYXVsdCd9YCk7XG4gIGNvbnN0IG9yaWdpbmFsQXBwUGF0aCA9IGFwcFBhdGg7XG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RMYW5ndWFnZUFwayhhcHBQYXRoLCBsYW5ndWFnZSk7XG4gIH1cblxuICBsZXQgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgY29uZmlnTWFya2VyO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcblxuICAgIGNvbmZpZ01hcmtlciA9IGF3YWl0IGZvcm1hdENvbmZpZ01hcmtlcihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy5hYXB0LCBbXG4gICAgICAgICdkJywgJ2NvbmZpZ3VyYXRpb25zJywgYXBwUGF0aCxcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIF8udW5pcShzdGRvdXQuc3BsaXQob3MuRU9MKSk7XG4gICAgfSwgbGFuZ3VhZ2UsICcoZGVmYXVsdCknKTtcblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICdkJywgJy0tdmFsdWVzJywgJ3Jlc291cmNlcycsIGFwcFBhdGgsXG4gICAgXSk7XG4gICAgYXBrU3RyaW5ncyA9IHBhcnNlQWFwdFN0cmluZ3Moc3Rkb3V0LCBjb25maWdNYXJrZXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKCdDYW5ub3QgZXh0cmFjdCByZXNvdXJjZXMgdXNpbmcgYWFwdC4gVHJ5aW5nIGFhcHQyLiAnICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG5cbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuXG4gICAgY29uZmlnTWFya2VyID0gYXdhaXQgZm9ybWF0Q29uZmlnTWFya2VyKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQyLCBbXG4gICAgICAgICdkJywgJ2NvbmZpZ3VyYXRpb25zJywgYXBwUGF0aCxcbiAgICAgIF0pO1xuICAgICAgcmV0dXJuIF8udW5pcShzdGRvdXQuc3BsaXQob3MuRU9MKSk7XG4gICAgfSwgbGFuZ3VhZ2UsICcnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy5hYXB0MiwgW1xuICAgICAgICAnZCcsICdyZXNvdXJjZXMnLCBhcHBQYXRoLFxuICAgICAgXSk7XG4gICAgICBhcGtTdHJpbmdzID0gcGFyc2VBYXB0MlN0cmluZ3Moc3Rkb3V0LCBjb25maWdNYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgcmVzb3VyY2VzIGZyb20gJyR7b3JpZ2luYWxBcHBQYXRofScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkoYXBrU3RyaW5ncykpIHtcbiAgICBsb2cud2FybihgTm8gc3RyaW5ncyBoYXZlIGJlZW4gZm91bmQgaW4gJyR7b3JpZ2luYWxBcHBQYXRofScgcmVzb3VyY2VzIGAgK1xuICAgICAgYGZvciAnJHtjb25maWdNYXJrZXIgfHwgJ2RlZmF1bHQnfScgY29uZmlndXJhdGlvbmApO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgZXh0cmFjdGVkICR7Xy5rZXlzKGFwa1N0cmluZ3MpLmxlbmd0aH0gc3RyaW5ncyBmcm9tIGAgK1xuICAgICAgYCcke29yaWdpbmFsQXBwUGF0aH0nIHJlc291cmNlcyBmb3IgJyR7Y29uZmlnTWFya2VyIHx8ICdkZWZhdWx0J30nIGNvbmZpZ3VyYXRpb25gKTtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsUGF0aCA9IHBhdGgucmVzb2x2ZShvdXQsICdzdHJpbmdzLmpzb24nKTtcbiAgYXdhaXQgbWtkaXJwKG91dCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShsb2NhbFBhdGgsIEpTT04uc3RyaW5naWZ5KGFwa1N0cmluZ3MsIG51bGwsIDIpLCAndXRmLTgnKTtcbiAgcmV0dXJuIHthcGtTdHJpbmdzLCBsb2NhbFBhdGh9O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxhbmd1YWdlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb2YgZGV2aWNlIGxhbmd1YWdlLlxuICovXG5hcGtVdGlsc01ldGhvZHMuZ2V0RGV2aWNlTGFuZ3VhZ2UgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VMYW5ndWFnZSAoKSB7XG4gIGxldCBsYW5ndWFnZTtcbiAgaWYgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmdldERldmljZVN5c0xhbmd1YWdlKCk7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmdldERldmljZVByb2R1Y3RMYW5ndWFnZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5ndWFnZSA9IChhd2FpdCB0aGlzLmdldERldmljZUxvY2FsZSgpKS5zcGxpdCgnLScpWzBdO1xuICB9XG4gIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjb3VudHJ5IG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb2YgZGV2aWNlIGNvdW50cnkuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5nZXREZXZpY2VDb3VudHJ5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlQ291bnRyeSAoKSB7XG4gIC8vIHRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCBpbiBBUEkgPCAyM1xuICBsZXQgY291bnRyeSA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlU3lzQ291bnRyeSgpO1xuICBpZiAoIWNvdW50cnkpIHtcbiAgICBjb3VudHJ5ID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQcm9kdWN0Q291bnRyeSgpO1xuICB9XG4gIHJldHVybiBjb3VudHJ5O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIGRldmljZSBsb2NhbGUuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5nZXREZXZpY2VMb2NhbGUgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VMb2NhbGUgKCkge1xuICAvLyB0aGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgaW4gQVBJID49IDIzXG4gIGxldCBsb2NhbGUgPSBhd2FpdCB0aGlzLmdldERldmljZVN5c0xvY2FsZSgpO1xuICBpZiAoIWxvY2FsZSkge1xuICAgIGxvY2FsZSA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlUHJvZHVjdExvY2FsZSgpO1xuICB9XG4gIHJldHVybiBsb2NhbGU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0IGFuZCB0aGUgZm9ybWF0IG9mIHRoZSBsb2NhbGUgaXMgZW4tVVMsIGZvciBleGFtcGxlLlxuICogVGhpcyBtZXRob2QgY2FsbCBzZXREZXZpY2VMYW5ndWFnZUNvdW50cnksIHNvLCBwbGVhc2UgdXNlIHNldERldmljZUxhbmd1YWdlQ291bnRyeSBhcyBwb3NzaWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlIC0gTmFtZXMgb2YgdGhlIGRldmljZSBsYW5ndWFnZSBhbmQgdGhlIGNvdW50cnkgY29ubmVjdGVkIHdpdGggYC1gLiBlLmcuIGVuLVVTLlxuICovXG5hcGtVdGlsc01ldGhvZHMuc2V0RGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlTG9jYWxlIChsb2NhbGUpIHtcbiAgY29uc3QgdmFsaWRhdGVMb2NhbGUgPSBuZXcgUmVnRXhwKC9bYS16QS1aXSstW2EtekEtWjAtOV0rLyk7XG4gIGlmICghdmFsaWRhdGVMb2NhbGUudGVzdChsb2NhbGUpKSB7XG4gICAgbG9nLndhcm4oYHNldERldmljZUxvY2FsZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDogZW4tVVMgb3IgamEtSlBgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc3BsaXRfbG9jYWxlID0gbG9jYWxlLnNwbGl0KCctJyk7XG4gIGF3YWl0IHRoaXMuc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5KHNwbGl0X2xvY2FsZVswXSwgc3BsaXRfbG9jYWxlWzFdKTtcbn07XG5cbi8qKlxuICogTWFrZSBzdXJlIGN1cnJlbnQgZGV2aWNlIGxvY2FsZSBpcyBleHBlY3RlZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIFRoZSBsYW5ndWFnZSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIGxvd2VyIGNhc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBsYW5ndWFnZSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIGxvd2VyIGNhc2UuXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBJZiBjdXJyZW50IGxvY2FsZSBpcyBsYW5ndWFnZSBhbmQgY291bnRyeSBhcyBhcmd1bWVudHMsIHJldHVybiB0cnVlLlxuICovXG5hcGtVdGlsc01ldGhvZHMuZW5zdXJlQ3VycmVudExvY2FsZSA9IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUN1cnJlbnRMb2NhbGUgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGNvbnN0IGhhc0xhbmd1YWdlID0gXy5pc1N0cmluZyhsYW5ndWFnZSk7XG4gIGNvbnN0IGhhc0NvdW50cnkgPSBfLmlzU3RyaW5nKGNvdW50cnkpO1xuXG4gIGlmICghaGFzTGFuZ3VhZ2UgJiYgIWhhc0NvdW50cnkpIHtcbiAgICBsb2cud2FybignZW5zdXJlQ3VycmVudExvY2FsZSByZXF1aXJlcyBsYW5ndWFnZSBvciBjb3VudHJ5Jyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZ2V0IGxvd2VyIGNhc2UgdmVyc2lvbnMgb2YgdGhlIHN0cmluZ3NcbiAgbGFuZ3VhZ2UgPSAobGFuZ3VhZ2UgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvdW50cnkgPSAoY291bnRyeSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKTtcblxuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgICAgIGxldCBjdXJMYW5ndWFnZSwgY3VyQ291bnRyeTtcbiAgICAgICAgaWYgKGhhc0xhbmd1YWdlKSB7XG4gICAgICAgICAgY3VyTGFuZ3VhZ2UgPSAoYXdhaXQgdGhpcy5nZXREZXZpY2VMYW5ndWFnZSgpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmICghaGFzQ291bnRyeSAmJiBsYW5ndWFnZSA9PT0gY3VyTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQ291bnRyeSkge1xuICAgICAgICAgIGN1ckNvdW50cnkgPSAoYXdhaXQgdGhpcy5nZXREZXZpY2VDb3VudHJ5KCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKCFoYXNMYW5ndWFnZSAmJiBjb3VudHJ5ID09PSBjdXJDb3VudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhbmd1YWdlID09PSBjdXJMYW5ndWFnZSAmJiBjb3VudHJ5ID09PSBjdXJDb3VudHJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1ckxvY2FsZSA9IChhd2FpdCB0aGlzLmdldERldmljZUxvY2FsZSgpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyB6aC1oYW5zLWNuIDogemgtY25cbiAgICAgICAgY29uc3QgbG9jYWxlQ29kZSA9IHNjcmlwdCA/IGAke2xhbmd1YWdlfS0ke3NjcmlwdC50b0xvd2VyQ2FzZSgpfS0ke2NvdW50cnl9YCA6IGAke2xhbmd1YWdlfS0ke2NvdW50cnl9YDtcblxuICAgICAgICBpZiAobG9jYWxlQ29kZSA9PT0gY3VyTG9jYWxlKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZXF1ZXN0ZWQgbG9jYWxlIGlzIGVxdWFsIHRvIGN1cnJlbnQgbG9jYWxlOiAnJHtjdXJMb2NhbGV9J2ApO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBpZiB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciwgcmVzdGFydCBhZGIgYW5kIHJldHJ5XG4gICAgICBsb2cuZXJyb3IoYFVuYWJsZSB0byBjaGVjayBkZXZpY2UgbG9jYWxpemF0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNvbm5lY3QoKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBZGIoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICovXG5hcGtVdGlsc01ldGhvZHMuc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5ID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IChsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0ID0gbnVsbCkge1xuICBsZXQgaGFzTGFuZ3VhZ2UgPSBsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKTtcbiAgbGV0IGhhc0NvdW50cnkgPSBjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSk7XG4gIGlmICghaGFzTGFuZ3VhZ2UgfHwgIWhhc0NvdW50cnkpIHtcbiAgICBsb2cud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGF0IGxlYXN0YCk7XG4gICAgbG9nLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKTtcblxuICBsYW5ndWFnZSA9IChsYW5ndWFnZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY291bnRyeSA9IChjb3VudHJ5IHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgbGV0IGN1ckxhbmd1YWdlID0gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlTGFuZ3VhZ2UoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgY3VyQ291bnRyeSA9IChhd2FpdCB0aGlzLmdldERldmljZUNvdW50cnkoKSkudG9VcHBlckNhc2UoKTtcblxuICAgIGlmIChsYW5ndWFnZSAhPT0gY3VyTGFuZ3VhZ2UgfHwgY291bnRyeSAhPT0gY3VyQ291bnRyeSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwKGxhbmd1YWdlLCBjb3VudHJ5KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGN1ckxvY2FsZSA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9jYWxlKCk7XG5cbiAgICAvLyB6aC1IYW5zLUNOIDogemgtQ05cbiAgICBjb25zdCBsb2NhbGVDb2RlID0gc2NyaXB0ID8gYCR7bGFuZ3VhZ2V9LSR7c2NyaXB0fS0ke2NvdW50cnl9YCA6IGAke2xhbmd1YWdlfS0ke2NvdW50cnl9YDtcbiAgICBsb2cuZGVidWcoYEN1cnJlbnQgbG9jYWxlOiAnJHtjdXJMb2NhbGV9JzsgcmVxdWVzdGVkIGxvY2FsZTogJyR7bG9jYWxlQ29kZX0nYCk7XG4gICAgaWYgKGxvY2FsZUNvZGUudG9Mb3dlckNhc2UoKSAhPT0gY3VyTG9jYWxlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcChsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXBwSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBQYWNrYWdlIG5hbWUsIGZvciBleGFtcGxlICdjb20uYWNtZS5hcHAnLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcnNpb25Db2RlIC0gVmVyc2lvbiBjb2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb25OYW1lIC0gVmVyc2lvbiBuYW1lLCBmb3IgZXhhbXBsZSAnMS4wJy5cbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgcGFja2FnZSBpbmZvIGZyb20gbG9jYWwgYXBrIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgZnVsbCBwYXRoIHRvIGV4aXN0aW5nIC5hcGsocykgcGFja2FnZSBvbiB0aGUgbG9jYWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uXG4gKiBAcmV0dXJuIHs/QXBwSW5mb30gVGhlIHBhcnNlZCBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmdldEFwa0luZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRBcGtJbmZvIChhcHBQYXRoKSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGFwcFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCBwYXRoICR7YXBwUGF0aH0gZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuXG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwcFBhdGgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhcGtSZWFkZXIgPSBhd2FpdCBBcGtSZWFkZXIub3BlbihhcHBQYXRoKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgICBjb25zdCB7cGtnLCB2ZXJzaW9uTmFtZSwgdmVyc2lvbkNvZGV9ID0gcGFyc2VNYW5pZmVzdChtYW5pZmVzdCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHBrZyxcbiAgICAgIHZlcnNpb25Db2RlLFxuICAgICAgdmVyc2lvbk5hbWUsXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy53YXJuKGBFcnJvciAnJHtlLm1lc3NhZ2V9JyB3aGlsZSBnZXR0aW5nIGJhZGdpbmcgaW5mb2ApO1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBwYWNrYWdlIGluZm8gZnJvbSB0aGUgaW5zdGFsbGVkIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2UuXG4gKiBAcmV0dXJuIHs/QXBwSW5mb30gVGhlIHBhcnNlZCBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmdldFBhY2thZ2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFja2FnZUluZm8gKHBrZykge1xuICBsb2cuZGVidWcoYEdldHRpbmcgcGFja2FnZSBpbmZvIGZvciAnJHtwa2d9J2ApO1xuICBsZXQgcmVzdWx0ID0ge25hbWU6IHBrZ307XG4gIHRyeSB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAncGFja2FnZScsIHBrZ10pO1xuICAgIGNvbnN0IHZlcnNpb25OYW1lTWF0Y2ggPSBuZXcgUmVnRXhwKC92ZXJzaW9uTmFtZT0oW1xcZCsuXSspLykuZXhlYyhzdGRvdXQpO1xuICAgIGlmICh2ZXJzaW9uTmFtZU1hdGNoKSB7XG4gICAgICByZXN1bHQudmVyc2lvbk5hbWUgPSB2ZXJzaW9uTmFtZU1hdGNoWzFdO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uQ29kZU1hdGNoID0gbmV3IFJlZ0V4cCgvdmVyc2lvbkNvZGU9KFxcZCspLykuZXhlYyhzdGRvdXQpO1xuICAgIGlmICh2ZXJzaW9uQ29kZU1hdGNoKSB7XG4gICAgICByZXN1bHQudmVyc2lvbkNvZGUgPSBwYXJzZUludCh2ZXJzaW9uQ29kZU1hdGNoWzFdLCAxMCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBFcnJvciAnJHtlcnIubWVzc2FnZX0nIHdoaWxlIGR1bXBpbmcgcGFja2FnZSBpbmZvYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRmV0Y2hlcyBiYXNlLmFwayBvZiB0aGUgZ2l2ZW4gcGFja2FnZSB0byB0aGUgbG9jYWwgZmlsZSBzeXN0ZW1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGtnIFRoZSBwYWNrYWdlIGlkZW50aWZpZXIgKG11c3QgYmUgYWxyZWFkeSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0bXBEaXIgVGhlIGRlc3RpbmF0aW9uIGZvbGRlciBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGRvd25sb2FkZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgLmFwa1xuICovXG5hcGtVdGlsc01ldGhvZHMucHVsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIHB1bGxBcGsgKHBrZywgdG1wRGlyKSB7XG4gIGNvbnN0IHN0ZG91dCA9IF8udHJpbShhd2FpdCB0aGlzLnNoZWxsKFsncG0nLCAncGF0aCcsIHBrZ10pKTtcbiAgY29uc3QgcGFja2FnZU1hcmtlciA9ICdwYWNrYWdlOic7XG4gIGlmICghXy5zdGFydHNXaXRoKHN0ZG91dCwgcGFja2FnZU1hcmtlcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwdWxsIHRoZSAuYXBrIHBhY2thZ2UgZm9yICcke3BrZ30nLiBPcmlnaW5hbCBlcnJvcjogJHtzdGRvdXR9YCk7XG4gIH1cblxuICBjb25zdCByZW1vdGVQYXRoID0gc3Rkb3V0LnJlcGxhY2UocGFja2FnZU1hcmtlciwgJycpO1xuICBjb25zdCB0bXBBcHAgPSBwYXRoLnJlc29sdmUodG1wRGlyLCBgJHtwa2d9LmFwa2ApO1xuICBhd2FpdCB0aGlzLnB1bGwocmVtb3RlUGF0aCwgdG1wQXBwKTtcbiAgbG9nLmRlYnVnKGBQdWxsZWQgYXBwIGZvciBwYWNrYWdlICcke3BrZ30nIHRvICcke3RtcEFwcH0nYCk7XG4gIHJldHVybiB0bXBBcHA7XG59O1xuXG5leHBvcnQgeyBSRU1PVEVfQ0FDSEVfUk9PVCB9O1xuZXhwb3J0IGRlZmF1bHQgYXBrVXRpbHNNZXRob2RzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCQSxlQUFlLENBQUNDLGlCQUFpQixHQUFHO0VBQ2xDQyxPQUFPLEVBQUUsU0FBUztFQUNsQkMsYUFBYSxFQUFFLGNBQWM7RUFDN0JDLHVCQUF1QixFQUFFLHVCQUF1QjtFQUNoREMsc0JBQXNCLEVBQUUsc0JBQXNCO0VBQzlDQyx1QkFBdUIsRUFBRTtBQUMzQixDQUFDO0FBQ0QsTUFBTUMsaUJBQWlCLEdBQUcsOEJBQThCOztBQUFDO0FBVXpEUCxlQUFlLENBQUNRLGNBQWMsR0FBRyxlQUFlQSxjQUFjLENBQUVDLEdBQUcsRUFBRTtFQUNuRUMsZUFBRyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCRixHQUFJLEVBQUMsQ0FBQztFQUM5QyxNQUFNRyxnQkFBZ0IsR0FBRyxJQUFJQyxNQUFNLENBQUUsc0JBQXFCQyxlQUFDLENBQUNDLFlBQVksQ0FBQ04sR0FBRyxDQUFF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
|
|
793
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcGtVdGlsc01ldGhvZHMiLCJBUFBfSU5TVEFMTF9TVEFURSIsIlVOS05PV04iLCJOT1RfSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJTQU1FX1ZFUlNJT05fSU5TVEFMTEVEIiwiT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJSRU1PVEVfQ0FDSEVfUk9PVCIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJpc0FwcEluc3RhbGxlZCIsInBrZyIsImxvZyIsImRlYnVnIiwiaW5zdGFsbGVkUGF0dGVybiIsIlJlZ0V4cCIsIl8iLCJlc2NhcGVSZWdFeHAiLCJzdGRvdXQiLCJzaGVsbCIsImlzSW5zdGFsbGVkIiwidGVzdCIsImUiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFydFVyaSIsInVyaSIsIm9wdHMiLCJ3YWl0Rm9yTGF1bmNoIiwiYXJncyIsInB1c2giLCJlc2NhcGVTaGVsbEFyZyIsInJlcyIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJzdGFydEFwcCIsInN0YXJ0QXBwT3B0aW9ucyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiY2xvbmUiLCJyZXBsYWNlIiwiZGVmYXVsdHMiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5IiwicmV0cnkiLCJzdG9wQXBwIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsImJ1aWxkU3RhcnRDbWQiLCJpbnRlbnROYW1lIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJzaGVsbE9wdHMiLCJpc0ludGVnZXIiLCJ3YWl0RHVyYXRpb24iLCJ0aW1lb3V0Iiwic3RhcnRzV2l0aCIsIndhaXRGb3JBY3Rpdml0eSIsImFwcERlc2NyaXB0b3IiLCJkdW1wV2luZG93cyIsImR1bXBzeXNBcmciLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5IiwibnVsbEZvY3VzZWRBcHBSZSIsImZvY3VzZWRBcHBSZSIsIm51bGxDdXJyZW50Rm9jdXNSZSIsImN1cnJlbnRGb2N1c0FwcFJlIiwiZm9jdXNlZEFwcENhbmRpZGF0ZXMiLCJjdXJyZW50Rm9jdXNBcHBDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsInBhdHRlcm4iLCJtYXRjaCIsImV4ZWMiLCJhcHBQYWNrYWdlIiwidHJpbSIsImFwcEFjdGl2aXR5IiwibGVuZ3RoIiwiaW50ZXJzZWN0aW9uV2l0aCIsImlzRXF1YWwiLCJ3YWl0Rm9yQWN0aXZpdHlPck5vdCIsIndhaXRGb3JTdG9wIiwid2FpdE1zIiwic3BsaXROYW1lcyIsIm5hbWVzIiwic3BsaXQiLCJtYXAiLCJuYW1lIiwiYWxsUGFja2FnZXMiLCJhbGxBY3Rpdml0aWVzIiwicG9zc2libGVBY3Rpdml0eU5hbWVzIiwib25lQWN0aXZpdHkiLCJjdXJyZW50UGtnIiwiam9pbiIsInBvc3NpYmxlQWN0aXZpdHlQYXR0ZXJucyIsImFjdE5hbWUiLCJjb25kaXRpb25GdW5jIiwiZnVsbHlRdWFsaWZpZWRBY3Rpdml0eSIsImlzQWN0aXZpdHlGb3VuZCIsInNvbWUiLCJwIiwid2FpdEZvckNvbmRpdGlvbiIsInBhcnNlSW50IiwiaW50ZXJ2YWxNcyIsImFjdCIsIndhaXRGb3JOb3RBY3Rpdml0eSIsInVuaW5zdGFsbEFwayIsIm9wdGlvbnMiLCJpbmZvIiwia2VlcERhdGEiLCJmb3JjZVN0b3AiLCJhZGJFeGVjIiwiaW5zdGFsbEZyb21EZXZpY2VQYXRoIiwiYXBrUGF0aE9uRGV2aWNlIiwiaW5kZXhPZiIsImNhY2hlQXBrIiwiYXBrUGF0aCIsImFwcEhhc2giLCJmcyIsImhhc2giLCJyZW1vdGVQYXRoIiwicGF0aCIsInBvc2l4IiwicmVtb3RlQ2FjaGVkRmlsZXMiLCJlcnJvck1hcmtlciIsImxzT3V0cHV0IiwiX2FyZUV4dGVuZGVkTHNPcHRpb25zU3VwcG9ydGVkIiwiaXNCb29sZWFuIiwiaXNTdHJpbmciLCJzdWJzdHJpbmciLCJ4IiwiZmlsdGVyIiwiQm9vbGVhbiIsInRvSGFzaCIsInBhcnNlIiwiY2F0Y2giLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJzaXplIiwic3RhdCIsImJhc2VuYW1lIiwidXRpbCIsInRvUmVhZGFibGVTaXplU3RyaW5nIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJyZW1vdGVBcHBzQ2FjaGUiLCJMUlUiLCJtYXgiLCJyZW1vdGVBcHBzQ2FjaGVMaW1pdCIsImRpZmZlcmVuY2UiLCJrZXlzIiwiZm9yRWFjaCIsImRlbCIsInNldCIsImVudHJpZXNUb0NsZWFudXAiLCJoYXMiLCJzbGljZSIsImlzRW1wdHkiLCJ3YXJuIiwiaW5zdGFsbCIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwiaW5zdGFsbEFwa3MiLCJjbG9uZURlZXAiLCJhZGJFeGVjVGltZW91dCIsIkRFRkFVTFRfQURCX0VYRUNfVElNRU9VVCIsIkFQS19JTlNUQUxMX1RJTUVPVVQiLCJ0aW1lb3V0Q2FwTmFtZSIsImluc3RhbGxBcmdzIiwiYnVpbGRJbnN0YWxsQXJncyIsIm5vSW5jcmVtZW50YWwiLCJpc0luY3JlbWVudGFsSW5zdGFsbFN1cHBvcnRlZCIsImluc3RhbGxPcHRzIiwiaW5zdGFsbENtZCIsInBlcmZvcm1BcHBJbnN0YWxsIiwic2hvdWxkQ2FjaGVBcHAiLCJpc1N0cmVhbWVkSW5zdGFsbFN1cHBvcnRlZCIsImNsZWFyQ2FjaGUiLCJjYWNoZUFwcCIsImNhY2hlZEFwcFBhdGgiLCJwbUluc3RhbGxDbWRCeVJlbW90ZVBhdGgiLCJvdXRwdXQiLCJuZXdDYWNoZWRBcHBQYXRoIiwidHJ1bmNhdGVkT3V0cHV0Iiwic3Vic3RyIiwiaXNUZXN0UGFja2FnZU9ubHlFcnJvciIsIm1zZyIsImVyciIsImdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlIiwiYXBrSW5mbyIsImdldEFwa0luZm8iLCJ2ZXJzaW9uQ29kZSIsInBrZ1ZlcnNpb25Db2RlIiwidmVyc2lvbk5hbWUiLCJwa2dWZXJzaW9uTmFtZVN0ciIsImdldFBhY2thZ2VJbmZvIiwicGtnVmVyc2lvbk5hbWUiLCJzZW12ZXIiLCJ2YWxpZCIsImNvZXJjZSIsImFwa1ZlcnNpb25Db2RlIiwiYXBrVmVyc2lvbk5hbWVTdHIiLCJhcGtWZXJzaW9uTmFtZSIsInNhdGlzZmllcyIsImluc3RhbGxPclVwZ3JhZGUiLCJlbmZvcmNlQ3VycmVudEJ1aWxkIiwiYXBwU3RhdGUiLCJ3YXNVbmluc3RhbGxlZCIsInVuaW5zdGFsbFBhY2thZ2UiLCJPYmplY3QiLCJhc3NpZ24iLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJsYW5ndWFnZSIsIm91dCIsIm9yaWdpbmFsQXBwUGF0aCIsImV4dHJhY3RMYW5ndWFnZUFwayIsImFwa1N0cmluZ3MiLCJjb25maWdNYXJrZXIiLCJpbml0QWFwdCIsImZvcm1hdENvbmZpZ01hcmtlciIsImJpbmFyaWVzIiwiYWFwdCIsInVuaXEiLCJvcyIsIkVPTCIsInBhcnNlQWFwdFN0cmluZ3MiLCJzdGRlcnIiLCJpbml0QWFwdDIiLCJhYXB0MiIsInBhcnNlQWFwdDJTdHJpbmdzIiwibG9jYWxQYXRoIiwicmVzb2x2ZSIsIm1rZGlycCIsIndyaXRlRmlsZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREZXZpY2VMYW5ndWFnZSIsImdldERldmljZVN5c0xhbmd1YWdlIiwiZ2V0RGV2aWNlUHJvZHVjdExhbmd1YWdlIiwiZ2V0RGV2aWNlTG9jYWxlIiwiZ2V0RGV2aWNlQ291bnRyeSIsImNvdW50cnkiLCJnZXREZXZpY2VTeXNDb3VudHJ5IiwiZ2V0RGV2aWNlUHJvZHVjdENvdW50cnkiLCJsb2NhbGUiLCJnZXREZXZpY2VTeXNMb2NhbGUiLCJnZXREZXZpY2VQcm9kdWN0TG9jYWxlIiwic2V0RGV2aWNlTG9jYWxlIiwidmFsaWRhdGVMb2NhbGUiLCJzcGxpdF9sb2NhbGUiLCJzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkiLCJlbnN1cmVDdXJyZW50TG9jYWxlIiwic2NyaXB0IiwiaGFzTGFuZ3VhZ2UiLCJoYXNDb3VudHJ5IiwicmV0cnlJbnRlcnZhbCIsImN1ckxhbmd1YWdlIiwiY3VyQ291bnRyeSIsImN1ckxvY2FsZSIsImxvY2FsZUNvZGUiLCJlcnJvciIsInJlY29ubmVjdCIsImlnbiIsInJlc3RhcnRBZGIiLCJ0b1VwcGVyQ2FzZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJleGlzdHMiLCJleHRyYWN0QmFzZUFwayIsImFwa1JlYWRlciIsIkFwa1JlYWRlciIsIm9wZW4iLCJtYW5pZmVzdCIsInJlYWRNYW5pZmVzdCIsInBhcnNlTWFuaWZlc3QiLCJyZXN1bHQiLCJ2ZXJzaW9uTmFtZU1hdGNoIiwidmVyc2lvbkNvZGVNYXRjaCIsInB1bGxBcGsiLCJ0bXBEaXIiLCJwYWNrYWdlTWFya2VyIiwidG1wQXBwIiwicHVsbCIsImFjdGl2YXRlQXBwIiwiYXBwSWQiLCJlcnJvckFuZFRocm93IiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi90b29scy9hcGstdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYnVpbGRTdGFydENtZCwgQVBLU19FWFRFTlNJT04sIGJ1aWxkSW5zdGFsbEFyZ3MsXG4gIEFQS19JTlNUQUxMX1RJTUVPVVQsIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCxcbiAgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsIGZvcm1hdENvbmZpZ01hcmtlcixcbiAgZXNjYXBlU2hlbGxBcmcsXG59IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1rZGlycCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgQXBrUmVhZGVyIGZyb20gJ2FkYmtpdC1hcGtyZWFkZXInO1xuXG5jb25zdCBhcGtVdGlsc01ldGhvZHMgPSB7fTtcblxuYXBrVXRpbHNNZXRob2RzLkFQUF9JTlNUQUxMX1NUQVRFID0ge1xuICBVTktOT1dOOiAndW5rbm93bicsXG4gIE5PVF9JTlNUQUxMRUQ6ICdub3RJbnN0YWxsZWQnLFxuICBORVdFUl9WRVJTSU9OX0lOU1RBTExFRDogJ25ld2VyVmVyc2lvbkluc3RhbGxlZCcsXG4gIFNBTUVfVkVSU0lPTl9JTlNUQUxMRUQ6ICdzYW1lVmVyc2lvbkluc3RhbGxlZCcsXG4gIE9MREVSX1ZFUlNJT05fSU5TVEFMTEVEOiAnb2xkZXJWZXJzaW9uSW5zdGFsbGVkJyxcbn07XG5jb25zdCBSRU1PVEVfQ0FDSEVfUk9PVCA9ICcvZGF0YS9sb2NhbC90bXAvYXBwaXVtX2NhY2hlJztcbmNvbnN0IFJFU09MVkVSX0FDVElWSVRZX05BTUUgPSAnYW5kcm9pZC9jb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuUmVzb2x2ZXJBY3Rpdml0eSc7XG5cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwYXJ0aWN1bGFyIHBhY2thZ2UgaXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGRldGVjdGluZyBhcHBsaWNhdGlvbiBzdGF0ZVxuICovXG5hcGtVdGlsc01ldGhvZHMuaXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0FwcEluc3RhbGxlZCAocGtnKSB7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBpbnN0YWxsIHN0YXR1cyBmb3IgJHtwa2d9YCk7XG4gIGNvbnN0IGluc3RhbGxlZFBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeXFxcXHMqUGFja2FnZVxcXFxzK1xcXFxbJHtfLmVzY2FwZVJlZ0V4cChwa2cpfVxcXFxdW146XSs6JGAsICdtJyk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAncGFja2FnZScsIHBrZ10pO1xuICAgIGNvbnN0IGlzSW5zdGFsbGVkID0gaW5zdGFsbGVkUGF0dGVybi50ZXN0KHN0ZG91dCk7XG4gICAgbG9nLmRlYnVnKGAnJHtwa2d9JyBpcyR7IWlzSW5zdGFsbGVkID8gJyBub3QnIDogJyd9IGluc3RhbGxlZGApO1xuICAgIHJldHVybiBpc0luc3RhbGxlZDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZmluZGluZyBpZiAnJHtwa2d9JyBpcyBpbnN0YWxsZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFVyaU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHdhaXRGb3JMYXVuY2ggW3RydWVdIC0gaWYgYGZhbHNlYCB0aGVuIGFkYiB3b24ndCB3YWl0XG4gKiBmb3IgdGhlIHN0YXJ0ZWQgYWN0aXZpdHkgdG8gcmV0dXJuIHRoZSBjb250cm9sXG4gKi9cblxuLyoqXG4gKiBTdGFydCB0aGUgcGFydGljdWxhciBVUkkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmkgLSBUaGUgbmFtZSBvZiBVUkkgdG8gc3RhcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGtnIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gc3RhcnQgdGhlIFVSSSB3aXRoLlxuICogQHBhcmFtIHtTdGFydFVyaU9wdGlvbnN9IG9wdHNcbiAqL1xuYXBrVXRpbHNNZXRob2RzLnN0YXJ0VXJpID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRVcmkgKHVyaSwgcGtnLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHdhaXRGb3JMYXVuY2ggPSB0cnVlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIXVyaSB8fCAhcGtnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVUkkgYW5kIHBhY2thZ2UgYXJndW1lbnRzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnYW0nLCAnc3RhcnQnXTtcbiAgaWYgKHdhaXRGb3JMYXVuY2gpIHtcbiAgICBhcmdzLnB1c2goJy1XJyk7XG4gIH1cbiAgYXJncy5wdXNoKCctYScsICdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsXG4gICAgJy1kJywgZXNjYXBlU2hlbGxBcmcodXJpKSxcbiAgICBwa2cpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgICBpZiAocmVzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3VuYWJsZSB0byByZXNvbHZlIGludGVudCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGF0dGVtcHRpbmcgdG8gc3RhcnQgVVJJLiBPcmlnaW5hbCBlcnJvcjogJHtlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0QXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gcGFja2FnZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBtYWluIGFwcGxpY2F0aW9uIGFjdGl2aXR5LlxuICogVGhpcyBvciBhY3Rpb24gaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBsYXVuY2ggYW4gYXBwLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBUaGUgbmFtZSBvZiB0aGUgaW50ZW50IGFjdGlvbiB0aGF0IHdpbGwgbGF1bmNoIHRoZSByZXF1aXJlZCBhcHAuXG4gKiBUaGlzIG9yIGFjdGl2aXR5IGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gbGF1bmNoIGFuIGFwcC5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHJldHJ5IFt0cnVlXSAtIElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYFxuICogYW5kIHRoZSBhY3Rpdml0eSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggJy4nIHRoZW4gdGhlIG1ldGhvZFxuICogd2lsbCB0cnkgdG8gYWRkIHRoZSBtaXNzaW5nIGRvdCBhbmQgc3RhcnQgdGhlIGFjdGl2aXR5IG9uY2UgbW9yZVxuICogaWYgdGhlIGZpcnN0IHN0YXJ0dXAgdHJ5IGZhaWxzLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gc3RvcEFwcCBbdHJ1ZV0gLSBTZXQgaXQgdG8gYHRydWVgIGluIG9yZGVyIHRvIGZvcmNlZnVsbHlcbiAqIHN0b3AgdGhlIGFjdGl2aXR5IGlmIGl0IGlzIGFscmVhZHkgcnVubmluZy5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gd2FpdFBrZyAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHdhaXQgdG8gb25cbiAqIHN0YXJ0dXAgKHRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGlzIG5hbWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSwgd2hpY2ggaXMgc2V0IGFzIGBwa2dgKVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB3YWl0QWN0aXZpdHkgLSBUaGUgbmFtZSBvZiB0aGUgYWN0aXZpdHkgdG8gd2FpdCB0byBvblxuICogc3RhcnR1cCAodGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoaXMgbmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lLCB3aGljaCBpcyBzZXQgYXMgYGFjdGl2aXR5YClcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2FpdER1cmF0aW9uIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqIGB3YWl0QWN0aXZpdHlgIGlzIGZvY3VzZWRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgLSBUaGUgbnVtYmVyIG9mIHRoZSB1c2VyIHByb2ZpbGUgdG8gc3RhcnRcbiAqIHRoZSBnaXZlbiBhY3Rpdml0eSB3aXRoLiBUaGUgZGVmYXVsdCBPUyB1c2VyIHByb2ZpbGUgKHVzdWFsbHkgemVybykgaXMgdXNlZFxuICogd2hlbiB0aGlzIHByb3BlcnR5IGlzIHVuc2V0XG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgdGhlIHBhcnRpY3VsYXIgcGFja2FnZS9hY3Rpdml0eSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtTdGFydEFwcE9wdGlvbnN9IHN0YXJ0QXBwT3B0aW9ucyBbe31dIC0gU3RhcnR1cCBvcHRpb25zIG1hcHBpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBvdXRwdXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYWRiIGNvbW1hbmQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hpbGUgZXhlY3V0aW5nIHRoZSBhY3Rpdml0eVxuICovXG5hcGtVdGlsc01ldGhvZHMuc3RhcnRBcHAgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFwcCAoc3RhcnRBcHBPcHRpb25zID0ge30pIHtcbiAgaWYgKCFzdGFydEFwcE9wdGlvbnMucGtnIHx8ICEoc3RhcnRBcHBPcHRpb25zLmFjdGl2aXR5IHx8IHN0YXJ0QXBwT3B0aW9ucy5hY3Rpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwa2csIGFuZCBhY3Rpdml0eSBvciBpbnRlbnQgYWN0aW9uLCBhcmUgcmVxdWlyZWQgdG8gc3RhcnQgYW4gYXBwbGljYXRpb24nKTtcbiAgfVxuXG4gIHN0YXJ0QXBwT3B0aW9ucyA9IF8uY2xvbmUoc3RhcnRBcHBPcHRpb25zKTtcbiAgaWYgKHN0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eSkge1xuICAgIHN0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eSA9IHN0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eS5yZXBsYWNlKCckJywgJ1xcXFwkJyk7XG4gIH1cbiAgLy8gaW5pdGlhbGl6aW5nIGRlZmF1bHRzXG4gIF8uZGVmYXVsdHMoc3RhcnRBcHBPcHRpb25zLCB7XG4gICAgd2FpdFBrZzogc3RhcnRBcHBPcHRpb25zLnBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoOiB0cnVlLFxuICAgIHdhaXRBY3Rpdml0eTogZmFsc2UsXG4gICAgcmV0cnk6IHRydWUsXG4gICAgc3RvcEFwcDogdHJ1ZVxuICB9KTtcbiAgLy8gcHJldmVudGluZyBudWxsIHdhaXRwa2dcbiAgc3RhcnRBcHBPcHRpb25zLndhaXRQa2cgPSBzdGFydEFwcE9wdGlvbnMud2FpdFBrZyB8fCBzdGFydEFwcE9wdGlvbnMucGtnO1xuXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpO1xuICBjb25zdCBjbWQgPSBidWlsZFN0YXJ0Q21kKHN0YXJ0QXBwT3B0aW9ucywgYXBpTGV2ZWwpO1xuICBjb25zdCBpbnRlbnROYW1lID0gYCR7c3RhcnRBcHBPcHRpb25zLmFjdGlvbn0ke3N0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50cyA/ICcgJyArIHN0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50cyA6ICcnfWA7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2hlbGxPcHRzID0ge307XG4gICAgaWYgKF8uaXNJbnRlZ2VyKHN0YXJ0QXBwT3B0aW9ucy53YWl0RHVyYXRpb24pICYmIHN0YXJ0QXBwT3B0aW9ucy53YWl0RHVyYXRpb24gPj0gMCkge1xuICAgICAgc2hlbGxPcHRzLnRpbWVvdXQgPSBzdGFydEFwcE9wdGlvbnMud2FpdER1cmF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGNtZCwgc2hlbGxPcHRzKTtcbiAgICBpZiAoc3Rkb3V0LmluY2x1ZGVzKCdFcnJvcjogQWN0aXZpdHkgY2xhc3MnKSAmJiBzdGRvdXQuaW5jbHVkZXMoJ2RvZXMgbm90IGV4aXN0JykpIHtcbiAgICAgIGlmIChzdGFydEFwcE9wdGlvbnMucmV0cnkgJiYgIXN0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBXZSB0cmllZCB0byBzdGFydCBhbiBhY3Rpdml0eSB0aGF0IGRvZXNuJ3QgZXhpc3QsIGAgK1xuICAgICAgICAgICAgICAgICAgYHJldHJ5aW5nIHdpdGggJy4ke3N0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eX0nIGFjdGl2aXR5IG5hbWVgKTtcbiAgICAgICAgc3RhcnRBcHBPcHRpb25zLmFjdGl2aXR5ID0gYC4ke3N0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eX1gO1xuICAgICAgICBzdGFydEFwcE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRBcHAoc3RhcnRBcHBPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aXZpdHkgbmFtZSAnJHtzdGFydEFwcE9wdGlvbnMuYWN0aXZpdHl9JyB1c2VkIHRvIHN0YXJ0IHRoZSBhcHAgZG9lc24ndCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgZXhpc3Qgb3IgY2Fubm90IGJlIGxhdW5jaGVkISBNYWtlIHN1cmUgaXQgZXhpc3RzIGFuZCBpcyBhIGxhdW5jaGFibGUgYWN0aXZpdHlgKTtcbiAgICB9IGVsc2UgaWYgKHN0ZG91dC5pbmNsdWRlcygnRXJyb3I6IEludGVudCBkb2VzIG5vdCBtYXRjaCBhbnkgYWN0aXZpdGllcycpIHx8IHN0ZG91dC5pbmNsdWRlcygnRXJyb3I6IEFjdGl2aXR5IG5vdCBzdGFydGVkLCB1bmFibGUgdG8gcmVzb2x2ZSBJbnRlbnQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpdml0eSBmb3IgaW50ZW50ICcke2ludGVudE5hbWV9JyB1c2VkIHRvIHN0YXJ0IHRoZSBhcHAgZG9lc24ndCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgZXhpc3Qgb3IgY2Fubm90IGJlIGxhdW5jaGVkISBNYWtlIHN1cmUgaXQgZXhpc3RzIGFuZCBpcyBhIGxhdW5jaGFibGUgYWN0aXZpdHlgKTtcbiAgICB9IGVsc2UgaWYgKHN0ZG91dC5pbmNsdWRlcygnamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uJykpIHtcbiAgICAgIC8vIGlmIHRoZSBhcHAgaXMgZGlzYWJsZWQgb24gYSByZWFsIGRldmljZSBpdCB3aWxsIHRocm93IGEgc2VjdXJpdHkgZXhjZXB0aW9uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwZXJtaXNzaW9uIHRvIHN0YXJ0ICcke3N0YXJ0QXBwT3B0aW9ucy5hY3Rpdml0eX0nIGFjdGl2aXR5IGhhcyBiZWVuIGRlbmllZC5gICtcbiAgICAgICAgICAgICAgICAgICAgICBgTWFrZSBzdXJlIHRoZSBhY3Rpdml0eS9wYWNrYWdlIG5hbWVzIGFyZSBjb3JyZWN0LmApO1xuICAgIH1cbiAgICBpZiAoc3RhcnRBcHBPcHRpb25zLndhaXRBY3Rpdml0eSkge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQWN0aXZpdHkoc3RhcnRBcHBPcHRpb25zLndhaXRQa2csIHN0YXJ0QXBwT3B0aW9ucy53YWl0QWN0aXZpdHksIHN0YXJ0QXBwT3B0aW9ucy53YWl0RHVyYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gc3Rkb3V0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgYXBwRGVzY3JpcHRvciA9IHN0YXJ0QXBwT3B0aW9ucy5wa2cgfHwgaW50ZW50TmFtZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzdGFydCB0aGUgJyR7YXBwRGVzY3JpcHRvcn0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBDb25zaWRlciBjaGVja2luZyB0aGUgZHJpdmVyJ3MgdHJvdWJsZXNob290aW5nIGRvY3VtZW50YXRpb24uIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgbWV0aG9kIHRvIGNhbGwgYGFkYiBkdW1wc3lzIHdpbmRvdyB3aW5kb3dzL2Rpc3BsYXlzYFxuICovXG5hcGtVdGlsc01ldGhvZHMuZHVtcFdpbmRvd3MgPSBhc3luYyBmdW5jdGlvbiBkdW1wV2luZG93cyAoKSB7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpO1xuXG4gIC8vIFdpdGggdmVyc2lvbiAyOSwgQW5kcm9pZCBjaGFuZ2VkIHRoZSBkdW1wc3lzIHN5bnRheFxuICBjb25zdCBkdW1wc3lzQXJnID0gYXBpTGV2ZWwgPj0gMjkgPyAnZGlzcGxheXMnIDogJ3dpbmRvd3MnO1xuICBjb25zdCBjbWQgPSBbJ2R1bXBzeXMnLCAnd2luZG93JywgZHVtcHN5c0FyZ107XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2hlbGwoY21kKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFja2FnZUFjdGl2aXR5SW5mb1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhcHBQYWNrYWdlIC0gVGhlIG5hbWUgb2YgYXBwbGljYXRpb24gcGFja2FnZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlICdjb20uYWNtZS5hcHAnLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhcHBBY3Rpdml0eSAtIFRoZSBuYW1lIG9mIG1haW4gYXBwbGljYXRpb24gYWN0aXZpdHkuXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIG5hbWUgb2YgY3VycmVudGx5IGZvY3VzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkuXG4gKlxuICogQHJldHVybiB7UGFja2FnZUFjdGl2aXR5SW5mb30gVGhlIG1hcHBpbmcsIHdoZXJlIHByb3BlcnR5IG5hbWVzIGFyZSAnYXBwUGFja2FnZScgYW5kICdhcHBBY3Rpdml0eScuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3Igd2hpbGUgcGFyc2luZyB0aGUgZGF0YS5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5ICgpIHtcbiAgbG9nLmRlYnVnKCdHZXR0aW5nIGZvY3VzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHknKTtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICBzdGRvdXQgPSBhd2FpdCB0aGlzLmR1bXBXaW5kb3dzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ291bGQgbm90IHJldHJpZXZlIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBwYWNrYWdlIGFuZCBhY3Rpdml0eS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbnVsbEZvY3VzZWRBcHBSZSA9IC9eXFxzKm1Gb2N1c2VkQXBwPW51bGwvbTtcbiAgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci94Wjh2RjcvMVxuICBjb25zdCBmb2N1c2VkQXBwUmUgPSBuZXcgUmVnRXhwKFxuICAgICdeXFxcXHMqbUZvY3VzZWRBcHAuK1JlY29yZFxcXFx7LipcXFxccyhbXlxcXFxzXFxcXC9cXFxcfV0rKVxcXFwvKFteXFxcXHNcXFxcL1xcXFx9XFxcXCxdKylcXFxcLD8oXFxcXHNbXlxcXFxzXFxcXC9cXFxcfV0rKSpcXFxcfScsXG4gICAgJ21nJ1xuICApO1xuICBjb25zdCBudWxsQ3VycmVudEZvY3VzUmUgPSAvXlxccyptQ3VycmVudEZvY3VzPW51bGwvbTtcbiAgY29uc3QgY3VycmVudEZvY3VzQXBwUmUgPSBuZXcgUmVnRXhwKCdeXFxcXHMqbUN1cnJlbnRGb2N1cy4rXFxcXHsuK1xcXFxzKFteXFxcXHNcXFxcL10rKVxcXFwvKFteXFxcXHNdKylcXFxcYicsICdtZycpO1xuXG4gIGNvbnN0IGZvY3VzZWRBcHBDYW5kaWRhdGVzID0gW107XG4gIGNvbnN0IGN1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXMgPSBbXTtcbiAgZm9yIChjb25zdCBbY2FuZGlkYXRlcywgcGF0dGVybl0gb2YgW1xuICAgIFtmb2N1c2VkQXBwQ2FuZGlkYXRlcywgZm9jdXNlZEFwcFJlXSxcbiAgICBbY3VycmVudEZvY3VzQXBwQ2FuZGlkYXRlcywgY3VycmVudEZvY3VzQXBwUmVdXG4gIF0pIHtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IHBhdHRlcm4uZXhlYyhzdGRvdXQpKSkge1xuICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgYXBwUGFja2FnZTogbWF0Y2hbMV0udHJpbSgpLFxuICAgICAgICBhcHBBY3Rpdml0eTogbWF0Y2hbMl0udHJpbSgpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGZvY3VzZWRBcHBDYW5kaWRhdGVzLmxlbmd0aCA+IDEgJiYgY3VycmVudEZvY3VzQXBwQ2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE3MTA2XG4gICAgcmV0dXJuIF8uaW50ZXJzZWN0aW9uV2l0aChmb2N1c2VkQXBwQ2FuZGlkYXRlcywgY3VycmVudEZvY3VzQXBwQ2FuZGlkYXRlcywgXy5pc0VxdWFsKVswXVxuICAgICAgPz8gZm9jdXNlZEFwcENhbmRpZGF0ZXNbMF07XG4gIH1cbiAgaWYgKGZvY3VzZWRBcHBDYW5kaWRhdGVzLmxlbmd0aCA+IDAgfHwgY3VycmVudEZvY3VzQXBwQ2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGZvY3VzZWRBcHBDYW5kaWRhdGVzWzBdID8/IGN1cnJlbnRGb2N1c0FwcENhbmRpZGF0ZXNbMF07XG4gIH1cblxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgW251bGxGb2N1c2VkQXBwUmUsIG51bGxDdXJyZW50Rm9jdXNSZV0pIHtcbiAgICBpZiAocGF0dGVybi5leGVjKHN0ZG91dCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFwcFBhY2thZ2U6IG51bGwsXG4gICAgICAgIGFwcEFjdGl2aXR5OiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGxvZy5kZWJ1ZyhzdGRvdXQpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXRyaWV2ZSB0aGUgY3VycmVudGx5IGZvY3VzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHknKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgdGhlIGdpdmVuIGFjdGl2aXR5IHRvIGJlIGZvY3VzZWQvbm9uLWZvY3VzZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5LCBiZWxvbmdpbmcgdG8gdGhhdCBwYWNrYWdlLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2FpdCBmb3IuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHdhaXRGb3JTdG9wIC0gV2hldGhlciB0byB3YWl0IHVudGlsIHRoZSBhY3Rpdml0eSBpcyBmb2N1c2VkICh0cnVlKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGlzIG5vdCBmb2N1c2VkIChmYWxzZSkuXG4gKiBAcGFyYW0ge251bWJlcn0gd2FpdE1zIFsyMDAwMF0gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHRpbWVvdXQgb2NjdXJzLlxuICogQHRocm93cyB7ZXJyb3J9IElmIHRpbWVvdXQgaGFwcGVucy5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLndhaXRGb3JBY3Rpdml0eU9yTm90ID0gYXN5bmMgZnVuY3Rpb24gd2FpdEZvckFjdGl2aXR5T3JOb3QgKHBrZywgYWN0aXZpdHksIHdhaXRGb3JTdG9wLCB3YWl0TXMgPSAyMDAwMCkge1xuICBpZiAoIXBrZyB8fCAhYWN0aXZpdHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgYW5kIGFjdGl2aXR5IHJlcXVpcmVkLicpO1xuICB9XG4gIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3dhaXRNc31tcyBmb3IgYWN0aXZpdHkgbWF0Y2hpbmcgcGtnOiAnJHtwa2d9JyBhbmQgYCArXG4gICAgICAgICAgICBgYWN0aXZpdHk6ICcke2FjdGl2aXR5fScgdG8ke3dhaXRGb3JTdG9wID8gJyBub3QnIDogJyd9IGJlIGZvY3VzZWRgKTtcblxuICBjb25zdCBzcGxpdE5hbWVzID0gKG5hbWVzKSA9PiBuYW1lcy5zcGxpdCgnLCcpLm1hcCgobmFtZSkgPT4gbmFtZS50cmltKCkpO1xuICBjb25zdCBhbGxQYWNrYWdlcyA9IHNwbGl0TmFtZXMocGtnKTtcbiAgY29uc3QgYWxsQWN0aXZpdGllcyA9IHNwbGl0TmFtZXMoYWN0aXZpdHkpO1xuXG4gIGNvbnN0IHBvc3NpYmxlQWN0aXZpdHlOYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IG9uZUFjdGl2aXR5IG9mIGFsbEFjdGl2aXRpZXMpIHtcbiAgICBpZiAob25lQWN0aXZpdHkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAvLyBhZGQgdGhlIHBhY2thZ2UgbmFtZSBpZiBhY3Rpdml0eSBpcyBub3QgZnVsbCBxdWFsaWZpZWRcbiAgICAgIGZvciAoY29uc3QgY3VycmVudFBrZyBvZiBhbGxQYWNrYWdlcykge1xuICAgICAgICBwb3NzaWJsZUFjdGl2aXR5TmFtZXMucHVzaChgJHtjdXJyZW50UGtnfSR7b25lQWN0aXZpdHl9YC5yZXBsYWNlKC9cXC4rL2csICcuJykpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhY2NlcHQgZnVsbHkgcXVhbGlmaWVkIGFjdGl2aXR5IG5hbWUuXG4gICAgICBwb3NzaWJsZUFjdGl2aXR5TmFtZXMucHVzaChvbmVBY3Rpdml0eSk7XG4gICAgICBwb3NzaWJsZUFjdGl2aXR5TmFtZXMucHVzaChgJHtwa2d9LiR7b25lQWN0aXZpdHl9YCk7XG4gICAgfVxuICB9XG4gIGxvZy5kZWJ1ZyhgUG9zc2libGUgYWN0aXZpdGllcywgdG8gYmUgY2hlY2tlZDogJHtwb3NzaWJsZUFjdGl2aXR5TmFtZXMubWFwKChuYW1lKSA9PiBgJyR7bmFtZX0nYCkuam9pbignLCAnKX1gKTtcblxuICBjb25zdCBwb3NzaWJsZUFjdGl2aXR5UGF0dGVybnMgPSBwb3NzaWJsZUFjdGl2aXR5TmFtZXMubWFwKFxuICAgIChhY3ROYW1lKSA9PiBuZXcgUmVnRXhwKGBeJHthY3ROYW1lLnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKS5yZXBsYWNlKC9cXCovZywgJy4qPycpLnJlcGxhY2UoL1xcJC9nLCAnXFxcXCQnKX0kYClcbiAgKTtcblxuICBjb25zdCBjb25kaXRpb25GdW5jID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBhcHBQYWNrYWdlO1xuICAgIGxldCBhcHBBY3Rpdml0eTtcbiAgICB0cnkge1xuICAgICAgKHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcHBBY3Rpdml0eSAmJiBhcHBQYWNrYWdlKSB7XG4gICAgICBjb25zdCBmdWxseVF1YWxpZmllZEFjdGl2aXR5ID0gYXBwQWN0aXZpdHkuc3RhcnRzV2l0aCgnLicpID8gYCR7YXBwUGFja2FnZX0ke2FwcEFjdGl2aXR5fWAgOiBhcHBBY3Rpdml0eTtcbiAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcGFja2FnZTogJyR7YXBwUGFja2FnZX0nIGFuZCBmdWxseSBxdWFsaWZpZWQgYWN0aXZpdHkgbmFtZSA6ICcke2Z1bGx5UXVhbGlmaWVkQWN0aXZpdHl9J2ApO1xuICAgICAgY29uc3QgaXNBY3Rpdml0eUZvdW5kID0gXy5pbmNsdWRlcyhhbGxQYWNrYWdlcywgYXBwUGFja2FnZSlcbiAgICAgICAgJiYgcG9zc2libGVBY3Rpdml0eVBhdHRlcm5zLnNvbWUoKHApID0+IHAudGVzdChmdWxseVF1YWxpZmllZEFjdGl2aXR5KSk7XG4gICAgICBpZiAoKCF3YWl0Rm9yU3RvcCAmJiBpc0FjdGl2aXR5Rm91bmQpIHx8ICh3YWl0Rm9yU3RvcCAmJiAhaXNBY3Rpdml0eUZvdW5kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKCdJbmNvcnJlY3QgcGFja2FnZSBhbmQgYWN0aXZpdHkuIFJldHJ5aW5nLicpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oY29uZGl0aW9uRnVuYywge1xuICAgICAgd2FpdE1zOiBwYXJzZUludCh3YWl0TXMsIDEwKSxcbiAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3NzaWJsZUFjdGl2aXR5TmFtZXMubWFwKChuYW1lKSA9PiBgJyR7bmFtZX0nYCkuam9pbignIG9yICcpfSBuZXZlciAke3dhaXRGb3JTdG9wID8gJ3N0b3BwZWQnIDogJ3N0YXJ0ZWQnfS4gYCArXG4gICAgICBgQ29uc2lkZXIgY2hlY2tpbmcgdGhlIGRyaXZlcidzIHRyb3VibGVzaG9vdGluZyBkb2N1bWVudGF0aW9uLmApO1xuICB9XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIHRoZSBnaXZlbiBhY3Rpdml0eSB0byBiZSBmb2N1c2VkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5LCBiZWxvbmdpbmcgdG8gdGhhdCBwYWNrYWdlLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2FpdCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gd2FpdE1zIFsyMDAwMF0gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHRpbWVvdXQgb2NjdXJzLlxuICogQHRocm93cyB7ZXJyb3J9IElmIHRpbWVvdXQgaGFwcGVucy5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLndhaXRGb3JBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBY3Rpdml0eSAocGtnLCBhY3QsIHdhaXRNcyA9IDIwMDAwKSB7XG4gIGF3YWl0IHRoaXMud2FpdEZvckFjdGl2aXR5T3JOb3QocGtnLCBhY3QsIGZhbHNlLCB3YWl0TXMpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZ2l2ZW4gYWN0aXZpdHkgdG8gYmUgbm9uLWZvY3VzZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHdhaXQgZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5LCBiZWxvbmdpbmcgdG8gdGhhdCBwYWNrYWdlLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd2FpdCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gd2FpdE1zIFsyMDAwMF0gLSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHRpbWVvdXQgb2NjdXJzLlxuICogQHRocm93cyB7ZXJyb3J9IElmIHRpbWVvdXQgaGFwcGVucy5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLndhaXRGb3JOb3RBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JOb3RBY3Rpdml0eSAocGtnLCBhY3QsIHdhaXRNcyA9IDIwMDAwKSB7XG4gIGF3YWl0IHRoaXMud2FpdEZvckFjdGl2aXR5T3JOb3QocGtnLCBhY3QsIHRydWUsIHdhaXRNcyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVuaW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFthZGJFeGVjVGltZW91dF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVuaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBrZWVwRGF0YSBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8ga2VlcCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRhdGEgYW5kIGNhY2hlIGZvbGRlcnMgYWZ0ZXIgdW5pbnN0YWxsLlxuICovXG5cbi8qKlxuICogVW5pbnN0YWxsIHRoZSBnaXZlbiBwYWNrYWdlIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBiZSB1bmluc3RhbGxlZC5cbiAqIEBwYXJhbSB7P1VuaW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIHVuaW5zdGFsbCBvcHRpb25zLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgb24gdGhlIGRldmljZSBhbmRcbiAqICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZC5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLnVuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbEFwayAocGtnLCBvcHRpb25zID0ge30pIHtcbiAgbG9nLmRlYnVnKGBVbmluc3RhbGxpbmcgJHtwa2d9YCk7XG4gIGlmICghYXdhaXQgdGhpcy5pc0FwcEluc3RhbGxlZChwa2cpKSB7XG4gICAgbG9nLmluZm8oYCR7cGtnfSB3YXMgbm90IHVuaW5zdGFsbGVkLCBiZWNhdXNlIGl0IHdhcyBub3QgcHJlc2VudCBvbiB0aGUgZGV2aWNlYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY21kID0gWyd1bmluc3RhbGwnXTtcbiAgaWYgKG9wdGlvbnMua2VlcERhdGEpIHtcbiAgICBjbWQucHVzaCgnLWsnKTtcbiAgfVxuICBjbWQucHVzaChwa2cpO1xuXG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5mb3JjZVN0b3AocGtnKTtcbiAgICBzdGRvdXQgPSAoYXdhaXQgdGhpcy5hZGJFeGVjKGNtZCwge3RpbWVvdXQ6IG9wdGlvbnMudGltZW91dH0pKS50cmltKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byB1bmluc3RhbGwgQVBLLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGAnYWRiICR7Y21kLmpvaW4oJyAnKX0nIGNvbW1hbmQgb3V0cHV0OiAke3N0ZG91dH1gKTtcbiAgaWYgKHN0ZG91dC5pbmNsdWRlcygnU3VjY2VzcycpKSB7XG4gICAgbG9nLmluZm8oYCR7cGtnfSB3YXMgc3VjY2Vzc2Z1bGx5IHVuaW5zdGFsbGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbG9nLmluZm8oYCR7cGtnfSB3YXMgbm90IHVuaW5zdGFsbGVkYCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgcGFja2FnZSBhZnRlciBpdCB3YXMgcHVzaGVkIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrUGF0aE9uRGV2aWNlIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgcGFja2FnZSBvbiB0aGUgZGV2aWNlIGZpbGUgc3lzdGVtLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdHMgW3t9XSAtIEFkZGl0aW9uYWwgZXhlYyBvcHRpb25zLiBTZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vbm9kZS10ZWVuX3Byb2Nlc3N9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIHBhcmFtZXRlci5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIGR1cmluZyBhcHBsaWNhdGlvbiBpbnN0YWxsLlxuICovXG5hcGtVdGlsc01ldGhvZHMuaW5zdGFsbEZyb21EZXZpY2VQYXRoID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEZyb21EZXZpY2VQYXRoIChhcGtQYXRoT25EZXZpY2UsIG9wdHMgPSB7fSkge1xuICBsZXQgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ3BtJywgJ2luc3RhbGwnLCAnLXInLCBhcGtQYXRoT25EZXZpY2VdLCBvcHRzKTtcbiAgaWYgKHN0ZG91dC5pbmRleE9mKCdGYWlsdXJlJykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZW1vdGUgaW5zdGFsbCBmYWlsZWQ6ICR7c3Rkb3V0fWApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhY2hpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRpbWVvdXQgW2FkYkV4ZWNUaW1lb3V0XSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVwbG9hZGVkIHRvIHRoZSByZW1vdGUgbG9jYXRpb24uXG4gKi9cblxuLyoqXG4gKiBDYWNoZXMgdGhlIGdpdmVuIEFQSyBhdCBhIHJlbW90ZSBsb2NhdGlvbiB0byBzcGVlZCB1cCBmdXJ0aGVyIEFQSyBkZXBsb3ltZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgYXBrIG9uIHRoZSBsb2NhbCBGU1xuICogQHBhcmFtIHs/Q2FjaGluZ09wdGlvbnN9IG9wdGlvbnMgLSBDYWNoaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRnVsbCBwYXRoIHRvIHRoZSBjYWNoZWQgYXBrIG9uIHRoZSByZW1vdGUgZmlsZSBzeXN0ZW1cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGNhY2hpbmcgdGhlIGFwcFxuICovXG5hcGtVdGlsc01ldGhvZHMuY2FjaGVBcGsgPSBhc3luYyBmdW5jdGlvbiBjYWNoZUFwayAoYXBrUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGFwcEhhc2ggPSBhd2FpdCBmcy5oYXNoKGFwa1BhdGgpO1xuICBjb25zdCByZW1vdGVQYXRoID0gcGF0aC5wb3NpeC5qb2luKFJFTU9URV9DQUNIRV9ST09ULCBgJHthcHBIYXNofS5hcGtgKTtcbiAgY29uc3QgcmVtb3RlQ2FjaGVkRmlsZXMgPSBbXTtcbiAgLy8gR2V0IGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHJlbW90ZSBjYWNoZSBvciBjcmVhdGUgaXQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gIHRyeSB7XG4gICAgY29uc3QgZXJyb3JNYXJrZXIgPSAnX0VSUk9SXyc7XG4gICAgbGV0IGxzT3V0cHV0ID0gbnVsbDtcbiAgICBpZiAodGhpcy5fYXJlRXh0ZW5kZWRMc09wdGlvbnNTdXBwb3J0ZWQgPT09IHRydWUgfHwgIV8uaXNCb29sZWFuKHRoaXMuX2FyZUV4dGVuZGVkTHNPcHRpb25zU3VwcG9ydGVkKSkge1xuICAgICAgbHNPdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFtgbHMgLXQgLTEgJHtSRU1PVEVfQ0FDSEVfUk9PVH0gMj4mMSB8fCBlY2hvICR7ZXJyb3JNYXJrZXJ9YF0pO1xuICAgIH1cbiAgICBpZiAoIV8uaXNTdHJpbmcobHNPdXRwdXQpIHx8IChsc091dHB1dC5pbmNsdWRlcyhlcnJvck1hcmtlcikgJiYgIWxzT3V0cHV0LmluY2x1ZGVzKFJFTU9URV9DQUNIRV9ST09UKSkpIHtcbiAgICAgIGlmICghXy5pc0Jvb2xlYW4odGhpcy5fYXJlRXh0ZW5kZWRMc09wdGlvbnNTdXBwb3J0ZWQpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnVGhlIGN1cnJlbnQgQW5kcm9pZCBBUEkgZG9lcyBub3Qgc3VwcG9ydCBleHRlbmRlZCBscyBvcHRpb25zLiAnICtcbiAgICAgICAgICAnRGVmYXVsdGluZyB0byBuby1vcHRpb25zIGNhbGwnKTtcbiAgICAgIH1cbiAgICAgIGxzT3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbYGxzICR7UkVNT1RFX0NBQ0hFX1JPT1R9IDI+JjEgfHwgZWNobyAke2Vycm9yTWFya2VyfWBdKTtcbiAgICAgIHRoaXMuX2FyZUV4dGVuZGVkTHNPcHRpb25zU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2FyZUV4dGVuZGVkTHNPcHRpb25zU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGxzT3V0cHV0LmluY2x1ZGVzKGVycm9yTWFya2VyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGxzT3V0cHV0LnN1YnN0cmluZygwLCBsc091dHB1dC5pbmRleE9mKGVycm9yTWFya2VyKSkpO1xuICAgIH1cbiAgICByZW1vdGVDYWNoZWRGaWxlcy5wdXNoKC4uLihcbiAgICAgIGxzT3V0cHV0LnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKCh4KSA9PiB4LnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGBHb3QgYW4gZXJyb3IgJyR7ZS5tZXNzYWdlLnRyaW0oKX0nIHdoaWxlIGdldHRpbmcgdGhlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIGNhY2hlLiBgICtcbiAgICAgIGBBc3N1bWluZyB0aGUgY2FjaGUgZG9lcyBub3QgZXhpc3QgeWV0YCk7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ21rZGlyJywgJy1wJywgUkVNT1RFX0NBQ0hFX1JPT1RdKTtcbiAgfVxuICBsb2cuZGVidWcoYFRoZSBjb3VudCBvZiBhcHBsaWNhdGlvbnMgaW4gdGhlIGNhY2hlOiAke3JlbW90ZUNhY2hlZEZpbGVzLmxlbmd0aH1gKTtcbiAgY29uc3QgdG9IYXNoID0gKHJlbW90ZVBhdGgpID0+IHBhdGgucG9zaXgucGFyc2UocmVtb3RlUGF0aCkubmFtZTtcbiAgLy8gUHVzaCB0aGUgYXBrIHRvIHRoZSByZW1vdGUgY2FjaGUgaWYgbmVlZGVkXG4gIGlmIChyZW1vdGVDYWNoZWRGaWxlcy5zb21lKCh4KSA9PiB0b0hhc2goeCkgPT09IGFwcEhhc2gpKSB7XG4gICAgbG9nLmluZm8oYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHthcGtQYXRofScgaXMgYWxyZWFkeSBjYWNoZWQgdG8gJyR7cmVtb3RlUGF0aH0nYCk7XG4gICAgLy8gVXBkYXRlIHRoZSBhcHBsaWNhdGlvbiB0aW1lc3RhbXAgYXN5bmNocm9ub3VzbHkgaW4gb3JkZXIgdG8gYnVtcCBpdHMgcG9zaXRpb25cbiAgICAvLyBpbiB0aGUgc29ydGVkIGxzIG91dHB1dFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgdGhpcy5zaGVsbChbJ3RvdWNoJywgJy1hbScsIHJlbW90ZVBhdGhdKS5jYXRjaCgoKSA9PiB7fSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmluZm8oYENhY2hpbmcgdGhlIGFwcGxpY2F0aW9uIGF0ICcke2Fwa1BhdGh9JyB0byAnJHtyZW1vdGVQYXRofSdgKTtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGF3YWl0IHRoaXMucHVzaChhcGtQYXRoLCByZW1vdGVQYXRoLCB7dGltZW91dDogb3B0aW9ucy50aW1lb3V0fSk7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChhcGtQYXRoKTtcbiAgICBsb2cuaW5mbyhgVGhlIHVwbG9hZCBvZiAnJHtwYXRoLmJhc2VuYW1lKGFwa1BhdGgpfScgKCR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0pIGAgK1xuICAgICAgYHRvb2sgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgfVxuICBpZiAoIXRoaXMucmVtb3RlQXBwc0NhY2hlKSB7XG4gICAgdGhpcy5yZW1vdGVBcHBzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogdGhpcy5yZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICB9KTtcbiAgfVxuICAvLyBDbGVhbnVwIHRoZSBpbnZhbGlkIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiAgXy5kaWZmZXJlbmNlKFsuLi50aGlzLnJlbW90ZUFwcHNDYWNoZS5rZXlzKCldLCByZW1vdGVDYWNoZWRGaWxlcy5tYXAodG9IYXNoKSlcbiAgICAuZm9yRWFjaCgoaGFzaCkgPT4gdGhpcy5yZW1vdGVBcHBzQ2FjaGUuZGVsKGhhc2gpKTtcbiAgLy8gQnVtcCB0aGUgY2FjaGUgcmVjb3JkIGZvciB0aGUgcmVjZW50bHkgY2FjaGVkIGl0ZW1cbiAgdGhpcy5yZW1vdGVBcHBzQ2FjaGUuc2V0KGFwcEhhc2gsIHJlbW90ZVBhdGgpO1xuICAvLyBJZiB0aGUgcmVtb3RlIGNhY2hlIGV4Y2VlZHMgdGhpcy5yZW1vdGVBcHBzQ2FjaGVMaW1pdCwgcmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJpZXNcbiAgY29uc3QgZW50cmllc1RvQ2xlYW51cCA9IHJlbW90ZUNhY2hlZEZpbGVzXG4gICAgLm1hcCgoeCkgPT4gcGF0aC5wb3NpeC5qb2luKFJFTU9URV9DQUNIRV9ST09ULCB4KSlcbiAgICAuZmlsdGVyKCh4KSA9PiAhdGhpcy5yZW1vdGVBcHBzQ2FjaGUuaGFzKHRvSGFzaCh4KSkpXG4gICAgLnNsaWNlKHRoaXMucmVtb3RlQXBwc0NhY2hlTGltaXQgLSBbLi4udGhpcy5yZW1vdGVBcHBzQ2FjaGUua2V5cygpXS5sZW5ndGgpO1xuICBpZiAoIV8uaXNFbXB0eShlbnRyaWVzVG9DbGVhbnVwKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNoZWxsKFsncm0nLCAnLWYnLCAuLi5lbnRyaWVzVG9DbGVhbnVwXSk7XG4gICAgICBsb2cuZGVidWcoYERlbGV0ZWQgJHtlbnRyaWVzVG9DbGVhbnVwLmxlbmd0aH0gZXhwaXJlZCBhcHBsaWNhdGlvbiBjYWNoZSBlbnRyaWVzYCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBkZWxldGUgJHtlbnRyaWVzVG9DbGVhbnVwLmxlbmd0aH0gZXhwaXJlZCBhcHBsaWNhdGlvbiBjYWNoZSBlbnRyaWVzLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbW90ZVBhdGg7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FuZHJvaWRJbnN0YWxsVGltZW91dF0gLSBUaGUgdGltZW91dCBvcHRpb24gbmFtZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMgY2FuIGluY3JlYXNlIHRoZSB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vSW5jcmVtZW50YWwgW2ZhbHNlXSAtIEZvcmNlZnVsbHkgZGlzYWJsZXMgaW5jcmVtZW50YWwgaW5zdGFsbHMgaWYgc2V0IHRvIGB0cnVlYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9wcmV2aWV3L2ZlYXR1cmVzI2luY3JlbWVudGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBwYWNrYWdlIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgbG9jYWwgcGFja2FnZS5cbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBpbnN0YWxsYXRpb24gb3B0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhbiB1bmV4cGVjdGVkIGVycm9yIGhhcHBlbnMgZHVyaW5nIGluc3RhbGwuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5pbnN0YWxsID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbCAoYXBwUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmluc3RhbGxBcGtzKGFwcFBhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyA9IF8uY2xvbmVEZWVwKG9wdGlvbnMpO1xuICBfLmRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICByZXBsYWNlOiB0cnVlLFxuICAgIHRpbWVvdXQ6IHRoaXMuYWRiRXhlY1RpbWVvdXQgPT09IERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCA/IEFQS19JTlNUQUxMX1RJTUVPVVQgOiB0aGlzLmFkYkV4ZWNUaW1lb3V0LFxuICAgIHRpbWVvdXRDYXBOYW1lOiAnYW5kcm9pZEluc3RhbGxUaW1lb3V0JyxcbiAgfSk7XG5cbiAgY29uc3QgaW5zdGFsbEFyZ3MgPSBidWlsZEluc3RhbGxBcmdzKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLm5vSW5jcmVtZW50YWwgJiYgYXdhaXQgdGhpcy5pc0luY3JlbWVudGFsSW5zdGFsbFN1cHBvcnRlZCgpKSB7XG4gICAgLy8gQWRiIHRocm93cyBhbiBlcnJvciBpZiBpdCBkb2VzIG5vdCBrbm93IGFib3V0IGFuIGFyZyxcbiAgICAvLyB3aGljaCBpcyB0aGUgY2FzZSBoZXJlIGZvciBvbGRlciBhZGIgdmVyc2lvbnMuXG4gICAgaW5zdGFsbEFyZ3MucHVzaCgnLS1uby1pbmNyZW1lbnRhbCcpO1xuICB9XG4gIGNvbnN0IGluc3RhbGxPcHRzID0ge1xuICAgIHRpbWVvdXQ6IG9wdGlvbnMudGltZW91dCxcbiAgICB0aW1lb3V0Q2FwTmFtZTogb3B0aW9ucy50aW1lb3V0Q2FwTmFtZSxcbiAgfTtcbiAgY29uc3QgaW5zdGFsbENtZCA9IFtcbiAgICAnaW5zdGFsbCcsXG4gICAgLi4uaW5zdGFsbEFyZ3MsXG4gICAgYXBwUGF0aCxcbiAgXTtcbiAgbGV0IHBlcmZvcm1BcHBJbnN0YWxsID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5hZGJFeGVjKGluc3RhbGxDbWQsIGluc3RhbGxPcHRzKTtcbiAgLy8gdGhpcy5yZW1vdGVBcHBzQ2FjaGVMaW1pdCA8PSAwIG1lYW5zIG5vIGNhY2hpbmcgc2hvdWxkIGJlIGFwcGxpZWRcbiAgbGV0IHNob3VsZENhY2hlQXBwID0gdGhpcy5yZW1vdGVBcHBzQ2FjaGVMaW1pdCA+IDA7XG4gIGlmIChzaG91bGRDYWNoZUFwcCkge1xuICAgIHNob3VsZENhY2hlQXBwID0gIShhd2FpdCB0aGlzLmlzU3RyZWFtZWRJbnN0YWxsU3VwcG9ydGVkKCkpO1xuICAgIGlmICghc2hvdWxkQ2FjaGVBcHApIHtcbiAgICAgIGxvZy5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7YXBwUGF0aH0nIHdpbGwgbm90IGJlIGNhY2hlZCwgYmVjYXVzZSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QgaGFzIGAgK1xuICAgICAgICBgY29uZmlybWVkIHRoZSBzdXBwb3J0IG9mIHN0cmVhbWVkIGluc3RhbGxzYCk7XG4gICAgfVxuICB9XG4gIGlmIChzaG91bGRDYWNoZUFwcCkge1xuICAgIGNvbnN0IGNsZWFyQ2FjaGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsb2cuaW5mbyhgQ2xlYXJpbmcgdGhlIGNhY2hlIGF0ICcke1JFTU9URV9DQUNIRV9ST09UfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2hlbGwoWydybScsICctcmYnLCBgJHtSRU1PVEVfQ0FDSEVfUk9PVH0vKmBdKTtcbiAgICB9O1xuICAgIGNvbnN0IGNhY2hlQXBwID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5jYWNoZUFwayhhcHBQYXRoLCB7XG4gICAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZEFwcFBhdGggPSBhd2FpdCBjYWNoZUFwcCgpO1xuICAgICAgcGVyZm9ybUFwcEluc3RhbGwgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBtSW5zdGFsbENtZEJ5UmVtb3RlUGF0aCA9IChyZW1vdGVQYXRoKSA9PiBbXG4gICAgICAgICAgJ3BtJywgJ2luc3RhbGwnLFxuICAgICAgICAgIC4uLmluc3RhbGxBcmdzLFxuICAgICAgICAgIHJlbW90ZVBhdGgsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwocG1JbnN0YWxsQ21kQnlSZW1vdGVQYXRoKGNhY2hlZEFwcFBhdGgpLCBpbnN0YWxsT3B0cyk7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xMzk3MFxuICAgICAgICBpZiAoL1xcYklOU1RBTExfRkFJTEVEX0lOU1VGRklDSUVOVF9TVE9SQUdFXFxiLy50ZXN0KG91dHB1dCkpIHtcbiAgICAgICAgICBsb2cud2FybihgVGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBpbnN0YWxsaW5nICcke2FwcFBhdGh9JyBgICtcbiAgICAgICAgICAgIGBiZWNhdXNlIG9mIHRoZSBpbnN1ZmZpY2llbnQgZGV2aWNlIHN0b3JhZ2Ugc3BhY2VgKTtcbiAgICAgICAgICBhd2FpdCBjbGVhckNhY2hlKCk7XG4gICAgICAgICAgbG9nLmluZm8oYENvbnNpZGVyIGRlY3JlYXNpbmcgdGhlIG1heGltdW0gYW1vdW50IG9mIGNhY2hlZCBhcHBzIGAgK1xuICAgICAgICAgICAgYChjdXJyZW50bHkgJHt0aGlzLnJlbW90ZUFwcHNDYWNoZUxpbWl0fSkgdG8gYXZvaWQgc3VjaCBpc3N1ZXMgaW4gdGhlIGZ1dHVyZWApO1xuICAgICAgICAgIGNvbnN0IG5ld0NhY2hlZEFwcFBhdGggPSBhd2FpdCBjYWNoZUFwcCgpO1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNoZWxsKHBtSW5zdGFsbENtZEJ5UmVtb3RlUGF0aChuZXdDYWNoZWRBcHBQYXRoKSwgaW5zdGFsbE9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIGxvZy53YXJuKGBUaGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGNhY2hpbmcgJyR7YXBwUGF0aH0nOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdGYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIHByb2NlZHVyZScpO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZSgpO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcGVyZm9ybUFwcEluc3RhbGwoKTtcbiAgICBsb2cuaW5mbyhgVGhlIGluc3RhbGxhdGlvbiBvZiAnJHtwYXRoLmJhc2VuYW1lKGFwcFBhdGgpfScgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIGNvbnN0IHRydW5jYXRlZE91dHB1dCA9ICghXy5pc1N0cmluZyhvdXRwdXQpIHx8IG91dHB1dC5sZW5ndGggPD0gMzAwKSA/XG4gICAgICBvdXRwdXQgOiBgJHtvdXRwdXQuc3Vic3RyKDAsIDE1MCl9Li4uJHtvdXRwdXQuc3Vic3RyKG91dHB1dC5sZW5ndGggLSAxNTApfWA7XG4gICAgbG9nLmRlYnVnKGBJbnN0YWxsIGNvbW1hbmQgc3Rkb3V0OiAke3RydW5jYXRlZE91dHB1dH1gKTtcbiAgICBpZiAoL1xcW0lOU1RBTExbQS1aX10rRkFJTEVEW0EtWl9dK1xcXS8udGVzdChvdXRwdXQpKSB7XG4gICAgICBpZiAodGhpcy5pc1Rlc3RQYWNrYWdlT25seUVycm9yKG91dHB1dCkpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYFNldCAnYWxsb3dUZXN0UGFja2FnZXMnIGNhcGFiaWxpdHkgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0IHBhY2thZ2VzIGluc3RhbGxhdGlvbi5gO1xuICAgICAgICBsb2cud2Fybihtc2cpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b3V0cHV0fVxcbiR7bXNnfWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBvbiBzb21lIHN5c3RlbXMgdGhpcyB3aWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBhcHAgYWxyZWFkeVxuICAgIC8vIGV4aXN0c1xuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0lOU1RBTExfRkFJTEVEX0FMUkVBRFlfRVhJU1RTJykpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBBcHBsaWNhdGlvbiAnJHthcHBQYXRofScgYWxyZWFkeSBpbnN0YWxsZWQuIENvbnRpbnVpbmcuYCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBzdGF0ZSBvZiB0aGUgcGFydGljdWxhciBhcHBsaWNhdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBhcHBsaWNhdGlvblxuICogQHBhcmFtIHs/c3RyaW5nfSBwa2cgLSBQYWNrYWdlIGlkZW50aWZpZXIuIElmIG9taXR0ZWQgdGhlbiB0aGUgc2NyaXB0IHdpbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4dHJhY3QgaXQgb24gaXRzIG93blxuICogQHJldHVybnMge3N0cmluZ31dT25lIG9mIGBBUFBfSU5TVEFMTF9TVEFURWAgY29uc3RhbnRzXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5nZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlIChhcHBQYXRoLCBwa2cgPSBudWxsKSB7XG4gIGxldCBhcGtJbmZvID0gbnVsbDtcbiAgaWYgKCFwa2cpIHtcbiAgICBhcGtJbmZvID0gYXdhaXQgdGhpcy5nZXRBcGtJbmZvKGFwcFBhdGgpO1xuICAgIHBrZyA9IGFwa0luZm8ubmFtZTtcbiAgfVxuICBpZiAoIXBrZykge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgcGFja2FnZSBuYW1lIG9mICcke2FwcFBhdGh9J2ApO1xuICAgIHJldHVybiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLlVOS05PV047XG4gIH1cblxuICBpZiAoIWF3YWl0IHRoaXMuaXNBcHBJbnN0YWxsZWQocGtnKSkge1xuICAgIGxvZy5kZWJ1ZyhgQXBwICcke2FwcFBhdGh9JyBpcyBub3QgaW5zdGFsbGVkYCk7XG4gICAgcmV0dXJuIHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgfVxuXG4gIGNvbnN0IHt2ZXJzaW9uQ29kZTogcGtnVmVyc2lvbkNvZGUsIHZlcnNpb25OYW1lOiBwa2dWZXJzaW9uTmFtZVN0cn0gPSBhd2FpdCB0aGlzLmdldFBhY2thZ2VJbmZvKHBrZyk7XG4gIGNvbnN0IHBrZ1ZlcnNpb25OYW1lID0gc2VtdmVyLnZhbGlkKHNlbXZlci5jb2VyY2UocGtnVmVyc2lvbk5hbWVTdHIpKTtcbiAgaWYgKCFhcGtJbmZvKSB7XG4gICAgYXBrSW5mbyA9IGF3YWl0IHRoaXMuZ2V0QXBrSW5mbyhhcHBQYXRoKTtcbiAgfVxuICBjb25zdCB7dmVyc2lvbkNvZGU6IGFwa1ZlcnNpb25Db2RlLCB2ZXJzaW9uTmFtZTogYXBrVmVyc2lvbk5hbWVTdHJ9ID0gYXBrSW5mbztcbiAgY29uc3QgYXBrVmVyc2lvbk5hbWUgPSBzZW12ZXIudmFsaWQoc2VtdmVyLmNvZXJjZShhcGtWZXJzaW9uTmFtZVN0cikpO1xuXG4gIGlmICghXy5pc0ludGVnZXIoYXBrVmVyc2lvbkNvZGUpIHx8ICFfLmlzSW50ZWdlcihwa2dWZXJzaW9uQ29kZSkpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHJlYWQgdmVyc2lvbiBjb2RlcyBvZiAnJHthcHBQYXRofScgYW5kL29yICcke3BrZ30nYCk7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGFwa1ZlcnNpb25OYW1lKSB8fCAhXy5pc1N0cmluZyhwa2dWZXJzaW9uTmFtZSkpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB2ZXJzaW9uIG5hbWVzIG9mICcke2FwcFBhdGh9JyBhbmQvb3IgJyR7cGtnfSdgKTtcbiAgICAgIHJldHVybiB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLlVOS05PV047XG4gICAgfVxuICB9XG4gIGlmIChfLmlzSW50ZWdlcihhcGtWZXJzaW9uQ29kZSkgJiYgXy5pc0ludGVnZXIocGtnVmVyc2lvbkNvZGUpKSB7XG4gICAgaWYgKHBrZ1ZlcnNpb25Db2RlID4gYXBrVmVyc2lvbkNvZGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZlcnNpb24gY29kZSBvZiB0aGUgaW5zdGFsbGVkICcke3BrZ30nIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYXBwbGljYXRpb24gdmVyc2lvbiBjb2RlICgke3BrZ1ZlcnNpb25Db2RlfSA+ICR7YXBrVmVyc2lvbkNvZGV9KWApO1xuICAgICAgcmV0dXJuIHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQ7XG4gICAgfVxuICAgIC8vIFZlcnNpb24gY29kZXMgbWlnaHQgbm90IGJlIG1haW50YWluZWQuIENoZWNrIHZlcnNpb24gbmFtZXMuXG4gICAgaWYgKHBrZ1ZlcnNpb25Db2RlID09PSBhcGtWZXJzaW9uQ29kZSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoYXBrVmVyc2lvbk5hbWUpICYmIF8uaXNTdHJpbmcocGtnVmVyc2lvbk5hbWUpICYmIHNlbXZlci5zYXRpc2ZpZXMocGtnVmVyc2lvbk5hbWUsIGA+PSR7YXBrVmVyc2lvbk5hbWV9YCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgdmVyc2lvbiBuYW1lIG9mIHRoZSBpbnN0YWxsZWQgJyR7cGtnfScgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYXBwbGljYXRpb24gdmVyc2lvbiBuYW1lICgnJHtwa2dWZXJzaW9uTmFtZX0nID49ICcke2Fwa1ZlcnNpb25OYW1lfScpYCk7XG4gICAgICAgIHJldHVybiBzZW12ZXIuc2F0aXNmaWVzKHBrZ1ZlcnNpb25OYW1lLCBgPiR7YXBrVmVyc2lvbk5hbWV9YClcbiAgICAgICAgICA/IHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRURcbiAgICAgICAgICA6IHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuU0FNRV9WRVJTSU9OX0lOU1RBTExFRDtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc1N0cmluZyhhcGtWZXJzaW9uTmFtZSkgfHwgIV8uaXNTdHJpbmcocGtnVmVyc2lvbk5hbWUpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZlcnNpb24gbmFtZSBvZiB0aGUgaW5zdGFsbGVkICcke3BrZ30nIGlzIGVxdWFsIHRvIGFwcGxpY2F0aW9uIHZlcnNpb24gbmFtZSAoJHtwa2dWZXJzaW9uQ29kZX0gPT09ICR7YXBrVmVyc2lvbkNvZGV9KWApO1xuICAgICAgICByZXR1cm4gdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5TQU1FX1ZFUlNJT05fSU5TVEFMTEVEO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGFwa1ZlcnNpb25OYW1lKSAmJiBfLmlzU3RyaW5nKHBrZ1ZlcnNpb25OYW1lKSAmJiBzZW12ZXIuc2F0aXNmaWVzKHBrZ1ZlcnNpb25OYW1lLCBgPj0ke2Fwa1ZlcnNpb25OYW1lfWApKSB7XG4gICAgbG9nLmRlYnVnKGBUaGUgdmVyc2lvbiBuYW1lIG9mIHRoZSBpbnN0YWxsZWQgJyR7cGtnfScgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYXBwbGljYXRpb24gdmVyc2lvbiBuYW1lICgnJHtwa2dWZXJzaW9uTmFtZX0nID49ICcke2Fwa1ZlcnNpb25OYW1lfScpYCk7XG4gICAgcmV0dXJuIHNlbXZlci5zYXRpc2ZpZXMocGtnVmVyc2lvbk5hbWUsIGA+JHthcGtWZXJzaW9uTmFtZX1gKVxuICAgICAgPyB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEXG4gICAgICA6IHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuU0FNRV9WRVJTSU9OX0lOU1RBTExFRDtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgVGhlIGluc3RhbGxlZCAnJHtwa2d9JyBwYWNrYWdlIGlzIG9sZGVyIHRoYW4gJyR7YXBwUGF0aH0nICgke3BrZ1ZlcnNpb25Db2RlfSA8ICR7YXBrVmVyc2lvbkNvZGV9IG9yICcke3BrZ1ZlcnNpb25OYW1lfScgPCAnJHthcGtWZXJzaW9uTmFtZX0nKSdgKTtcbiAgcmV0dXJuIHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPclVwZ3JhZGVPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIFNEQ2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5mb3JjZUN1cnJlbnRCdWlsZCBbZmFsc2VdIC0gU2V0IHRvIGB0cnVlYCBpbiBvcmRlciB0byBhbHdheXMgcHJlZmVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGJ1aWxkIG92ZXIgYW55IGluc3RhbGxlZCBwYWNrYWdlcyBoYXZpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgaWRlbnRpZmllclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9yVXBncmFkZVJlc3VsdFxuICogQHByb3BlcnR5IHtib29sZWFufSB3YXNVbmluc3RhbGxlZCAtIEVxdWFscyB0byBgdHJ1ZWAgaWYgdGhlIHRhcmdldCBhcHAgaGFzIGJlZW4gdW5pbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgYmVpbmcgaW5zdGFsbGVkXG4gKiBAcHJvcGVydHkge0FQUF9JTlNUQUxMX1NUQVRFfSBhcHBTdGF0ZSAtIE9uZSBvZiBgYWRiLkFQUF9JTlNUQUxMX1NUQVRFYCBzdGF0ZXMsIHdoaWNoIHJlZmxlY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiB0aGUgYXBwbGljYXRpb24gYmVmb3JlIGJlaW5nIGluc3RhbGxlZC5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGwgdGhlIHBhY2thZ2UgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gb3IgdXBncmFkZSBpdCBpZiBhbiBvbGRlclxuICogdmVyc2lvbiBvZiB0aGUgc2FtZSBwYWNrYWdlIGlzIGFscmVhZHkgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgbG9jYWwgcGFja2FnZS5cbiAqIEBwYXJhbSB7P3N0cmluZ30gcGtnIC0gVGhlIG5hbWUgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlLiBUaGUgbWV0aG9kIHdpbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybSBmYXN0ZXIgaWYgaXQgaXMgc2V0LlxuICogQHBhcmFtIHs/SW5zdGFsbE9yVXBncmFkZU9wdGlvbnN9IG9wdGlvbnMgLSBTZXQgb2YgaW5zdGFsbCBvcHRpb25zLlxuICogQHRocm93cyB7RXJyb3J9IElmIGFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFwcGVucyBkdXJpbmcgaW5zdGFsbC5cbiAqIEByZXR1cm5zIHtJbnN0YWxsT3JVcGdyYWRlUmVzdWx0fVxuICovXG5hcGtVdGlsc01ldGhvZHMuaW5zdGFsbE9yVXBncmFkZSA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxPclVwZ3JhZGUgKGFwcFBhdGgsIHBrZyA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIXBrZykge1xuICAgIGNvbnN0IGFwa0luZm8gPSBhd2FpdCB0aGlzLmdldEFwa0luZm8oYXBwUGF0aCk7XG4gICAgcGtnID0gYXBrSW5mby5uYW1lO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQsXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBhcHBTdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUoYXBwUGF0aCwgcGtnKTtcbiAgbGV0IHdhc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGNvbnN0IHVuaW5zdGFsbFBhY2thZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLnVuaW5zdGFsbEFwayhwa2cpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3BrZ30nIHBhY2thZ2UgY2Fubm90IGJlIHVuaW5zdGFsbGVkYCk7XG4gICAgfVxuICAgIHdhc1VuaW5zdGFsbGVkID0gdHJ1ZTtcbiAgfTtcbiAgc3dpdGNoIChhcHBTdGF0ZSkge1xuICAgIGNhc2UgdGhpcy5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEOlxuICAgICAgbG9nLmRlYnVnKGBJbnN0YWxsaW5nICcke2FwcFBhdGh9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsKGFwcFBhdGgsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtyZXBsYWNlOiBmYWxzZX0pKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFwcFN0YXRlLFxuICAgICAgICB3YXNVbmluc3RhbGxlZCxcbiAgICAgIH07XG4gICAgY2FzZSB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEOlxuICAgICAgaWYgKGVuZm9yY2VDdXJyZW50QnVpbGQpIHtcbiAgICAgICAgbG9nLmluZm8oYERvd25ncmFkaW5nICcke3BrZ30nIGFzIHJlcXVlc3RlZGApO1xuICAgICAgICBhd2FpdCB1bmluc3RhbGxQYWNrYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBubyBuZWVkIHRvIGRvd25ncmFkZSAnJHtwa2d9J2ApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXBwU3RhdGUsXG4gICAgICAgIHdhc1VuaW5zdGFsbGVkLFxuICAgICAgfTtcbiAgICBjYXNlIHRoaXMuQVBQX0lOU1RBTExfU1RBVEUuU0FNRV9WRVJTSU9OX0lOU1RBTExFRDpcbiAgICAgIGlmIChlbmZvcmNlQ3VycmVudEJ1aWxkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBubyBuZWVkIHRvIGluc3RhbGwvdXBncmFkZSAnJHthcHBQYXRofSdgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFwcFN0YXRlLFxuICAgICAgICB3YXNVbmluc3RhbGxlZCxcbiAgICAgIH07XG4gICAgY2FzZSB0aGlzLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEOlxuICAgICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgdXBncmFkZSBvZiAnJHthcHBQYXRofSdgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZGVidWcoYFRoZSBjdXJyZW50IGluc3RhbGwgc3RhdGUgb2YgJyR7YXBwUGF0aH0nIGlzIHVua25vd24uIEluc3RhbGxpbmcgYW55d2F5YCk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbnN0YWxsKGFwcFBhdGgsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtyZXBsYWNlOiB0cnVlfSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IGluc3RhbGwvdXBncmFkZSAnJHtwa2d9JyBiZWNhdXNlIG9mICcke2Vyci5tZXNzYWdlfScuIFRyeWluZyBmdWxsIHJlaW5zdGFsbGApO1xuICAgIGF3YWl0IHVuaW5zdGFsbFBhY2thZ2UoKTtcbiAgICBhd2FpdCB0aGlzLmluc3RhbGwoYXBwUGF0aCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge3JlcGxhY2U6IGZhbHNlfSkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYXBwU3RhdGUsXG4gICAgd2FzVW5pbnN0YWxsZWQsXG4gIH07XG59O1xuXG4vKipcbiAqIEV4dHJhY3Qgc3RyaW5nIHJlc291cmNlcyBmcm9tIHRoZSBnaXZlbiBwYWNrYWdlIG9uIGxvY2FsIGZpbGUgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwayhzKSBwYWNrYWdlLlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIFRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0byBleHRyYWN0IHRoZSByZXNvdXJjZXMgZm9yLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIHVzZWQgaWYgdGhpcyBlcXVhbHMgdG8gYG51bGxgL2B1bmRlZmluZWRgXG4gKiBAcGFyYW0ge3N0cmluZ30gb3V0IC0gVGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIGZvbGRlciBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSB0aGUgZXh0cmFjdGVkIGZpbGUgdG8uXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgbWFwcGluZyBvYmplY3QsIHdoZXJlIHByb3BlcnRpZXMgYXJlOiAnYXBrU3RyaW5ncycsIGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgcGFyc2VkIHJlc291cmNlIGZpbGUgcmVwcmVzZW50ZWQgYXMgSlNPTiBvYmplY3QsIGFuZCAnbG9jYWxQYXRoJyxcbiAqICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgZXh0cmFjdGVkIGZpbGUgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hcGtVdGlsc01ldGhvZHMuZXh0cmFjdFN0cmluZ3NGcm9tQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFN0cmluZ3NGcm9tQXBrIChhcHBQYXRoLCBsYW5ndWFnZSwgb3V0KSB7XG4gIGxvZy5kZWJ1ZyhgRXh0cmFjdGluZyBzdHJpbmdzIGZyb20gZm9yIGxhbmd1YWdlOiAke2xhbmd1YWdlIHx8ICdkZWZhdWx0J31gKTtcbiAgY29uc3Qgb3JpZ2luYWxBcHBQYXRoID0gYXBwUGF0aDtcbiAgaWYgKGFwcFBhdGguZW5kc1dpdGgoQVBLU19FWFRFTlNJT04pKSB7XG4gICAgYXBwUGF0aCA9IGF3YWl0IHRoaXMuZXh0cmFjdExhbmd1YWdlQXBrKGFwcFBhdGgsIGxhbmd1YWdlKTtcbiAgfVxuXG4gIGxldCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBjb25maWdNYXJrZXI7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbml0QWFwdCgpO1xuXG4gICAgY29uZmlnTWFya2VyID0gYXdhaXQgZm9ybWF0Q29uZmlnTWFya2VyKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICAgJ2QnLCAnY29uZmlndXJhdGlvbnMnLCBhcHBQYXRoLFxuICAgICAgXSk7XG4gICAgICByZXR1cm4gXy51bmlxKHN0ZG91dC5zcGxpdChvcy5FT0wpKTtcbiAgICB9LCBsYW5ndWFnZSwgJyhkZWZhdWx0KScpO1xuXG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuYWFwdCwgW1xuICAgICAgJ2QnLCAnLS12YWx1ZXMnLCAncmVzb3VyY2VzJywgYXBwUGF0aCxcbiAgICBdKTtcbiAgICBhcGtTdHJpbmdzID0gcGFyc2VBYXB0U3RyaW5ncyhzdGRvdXQsIGNvbmZpZ01hcmtlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZGVidWcoJ0Nhbm5vdCBleHRyYWN0IHJlc291cmNlcyB1c2luZyBhYXB0LiBUcnlpbmcgYWFwdDIuICcgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQyKCk7XG5cbiAgICBjb25maWdNYXJrZXIgPSBhd2FpdCBmb3JtYXRDb25maWdNYXJrZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuYWFwdDIsIFtcbiAgICAgICAgJ2QnLCAnY29uZmlndXJhdGlvbnMnLCBhcHBQYXRoLFxuICAgICAgXSk7XG4gICAgICByZXR1cm4gXy51bmlxKHN0ZG91dC5zcGxpdChvcy5FT0wpKTtcbiAgICB9LCBsYW5ndWFnZSwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQyLCBbXG4gICAgICAgICdkJywgJ3Jlc291cmNlcycsIGFwcFBhdGgsXG4gICAgICBdKTtcbiAgICAgIGFwa1N0cmluZ3MgPSBwYXJzZUFhcHQyU3RyaW5ncyhzdGRvdXQsIGNvbmZpZ01hcmtlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZXh0cmFjdCByZXNvdXJjZXMgZnJvbSAnJHtvcmlnaW5hbEFwcFBhdGh9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShhcGtTdHJpbmdzKSkge1xuICAgIGxvZy53YXJuKGBObyBzdHJpbmdzIGhhdmUgYmVlbiBmb3VuZCBpbiAnJHtvcmlnaW5hbEFwcFBhdGh9JyByZXNvdXJjZXMgYCArXG4gICAgICBgZm9yICcke2NvbmZpZ01hcmtlciB8fCAnZGVmYXVsdCd9JyBjb25maWd1cmF0aW9uYCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmluZm8oYFN1Y2Nlc3NmdWxseSBleHRyYWN0ZWQgJHtfLmtleXMoYXBrU3RyaW5ncykubGVuZ3RofSBzdHJpbmdzIGZyb20gYCArXG4gICAgICBgJyR7b3JpZ2luYWxBcHBQYXRofScgcmVzb3VyY2VzIGZvciAnJHtjb25maWdNYXJrZXIgfHwgJ2RlZmF1bHQnfScgY29uZmlndXJhdGlvbmApO1xuICB9XG5cbiAgY29uc3QgbG9jYWxQYXRoID0gcGF0aC5yZXNvbHZlKG91dCwgJ3N0cmluZ3MuanNvbicpO1xuICBhd2FpdCBta2RpcnAob3V0KTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKGxvY2FsUGF0aCwgSlNPTi5zdHJpbmdpZnkoYXBrU3RyaW5ncywgbnVsbCwgMiksICd1dGYtOCcpO1xuICByZXR1cm4ge2Fwa1N0cmluZ3MsIGxvY2FsUGF0aH07XG59O1xuXG4vKipcbiAqIEdldCB0aGUgbGFuZ3VhZ2UgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvZiBkZXZpY2UgbGFuZ3VhZ2UuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5nZXREZXZpY2VMYW5ndWFnZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZUxhbmd1YWdlICgpIHtcbiAgbGV0IGxhbmd1YWdlO1xuICBpZiAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlU3lzTGFuZ3VhZ2UoKTtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlUHJvZHVjdExhbmd1YWdlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxhbmd1YWdlID0gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9jYWxlKCkpLnNwbGl0KCctJylbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvdW50cnkgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvZiBkZXZpY2UgY291bnRyeS5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmdldERldmljZUNvdW50cnkgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VDb3VudHJ5ICgpIHtcbiAgLy8gdGhpcyBtZXRob2QgaXMgb25seSB1c2VkIGluIEFQSSA8IDIzXG4gIGxldCBjb3VudHJ5ID0gYXdhaXQgdGhpcy5nZXREZXZpY2VTeXNDb3VudHJ5KCk7XG4gIGlmICghY291bnRyeSkge1xuICAgIGNvdW50cnkgPSBhd2FpdCB0aGlzLmdldERldmljZVByb2R1Y3RDb3VudHJ5KCk7XG4gIH1cbiAgcmV0dXJuIGNvdW50cnk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb2YgZGV2aWNlIGxvY2FsZS5cbiAqL1xuYXBrVXRpbHNNZXRob2RzLmdldERldmljZUxvY2FsZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZUxvY2FsZSAoKSB7XG4gIC8vIHRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCBpbiBBUEkgPj0gMjNcbiAgbGV0IGxvY2FsZSA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlU3lzTG9jYWxlKCk7XG4gIGlmICghbG9jYWxlKSB7XG4gICAgbG9jYWxlID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQcm9kdWN0TG9jYWxlKCk7XG4gIH1cbiAgcmV0dXJuIGxvY2FsZTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QgYW5kIHRoZSBmb3JtYXQgb2YgdGhlIGxvY2FsZSBpcyBlbi1VUywgZm9yIGV4YW1wbGUuXG4gKiBUaGlzIG1ldGhvZCBjYWxsIHNldERldmljZUxhbmd1YWdlQ291bnRyeSwgc28sIHBsZWFzZSB1c2Ugc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgLSBOYW1lcyBvZiB0aGUgZGV2aWNlIGxhbmd1YWdlIGFuZCB0aGUgY291bnRyeSBjb25uZWN0ZWQgd2l0aCBgLWAuIGUuZy4gZW4tVVMuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5zZXREZXZpY2VMb2NhbGUgPSBhc3luYyBmdW5jdGlvbiBzZXREZXZpY2VMb2NhbGUgKGxvY2FsZSkge1xuICBjb25zdCB2YWxpZGF0ZUxvY2FsZSA9IG5ldyBSZWdFeHAoL1thLXpBLVpdKy1bYS16QS1aMC05XSsvKTtcbiAgaWYgKCF2YWxpZGF0ZUxvY2FsZS50ZXN0KGxvY2FsZSkpIHtcbiAgICBsb2cud2Fybihgc2V0RGV2aWNlTG9jYWxlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiBlbi1VUyBvciBqYS1KUGApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzcGxpdF9sb2NhbGUgPSBsb2NhbGUuc3BsaXQoJy0nKTtcbiAgYXdhaXQgdGhpcy5zZXREZXZpY2VMYW5ndWFnZUNvdW50cnkoc3BsaXRfbG9jYWxlWzBdLCBzcGxpdF9sb2NhbGVbMV0pO1xufTtcblxuLyoqXG4gKiBNYWtlIHN1cmUgY3VycmVudCBkZXZpY2UgbG9jYWxlIGlzIGV4cGVjdGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudHJ5IC0gQ291bnRyeS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7P3N0cmluZ30gc2NyaXB0IC0gU2NyaXB0LiBUaGUgc2NyaXB0IGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB0aXRsZSBjYXNlLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IElmIGN1cnJlbnQgbG9jYWxlIGlzIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGFzIGFyZ3VtZW50cywgcmV0dXJuIHRydWUuXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5lbnN1cmVDdXJyZW50TG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ3VycmVudExvY2FsZSAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgaGFzTGFuZ3VhZ2UgPSBfLmlzU3RyaW5nKGxhbmd1YWdlKTtcbiAgY29uc3QgaGFzQ291bnRyeSA9IF8uaXNTdHJpbmcoY291bnRyeSk7XG5cbiAgaWYgKCFoYXNMYW5ndWFnZSAmJiAhaGFzQ291bnRyeSkge1xuICAgIGxvZy53YXJuKCdlbnN1cmVDdXJyZW50TG9jYWxlIHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnknKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBnZXQgbG93ZXIgY2FzZSB2ZXJzaW9ucyBvZiB0aGUgc3RyaW5nc1xuICBsYW5ndWFnZSA9IChsYW5ndWFnZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY291bnRyeSA9IChjb3VudHJ5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpO1xuXG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKDUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAgICAgbGV0IGN1ckxhbmd1YWdlLCBjdXJDb3VudHJ5O1xuICAgICAgICBpZiAoaGFzTGFuZ3VhZ2UpIHtcbiAgICAgICAgICBjdXJMYW5ndWFnZSA9IChhd2FpdCB0aGlzLmdldERldmljZUxhbmd1YWdlKCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKCFoYXNDb3VudHJ5ICYmIGxhbmd1YWdlID09PSBjdXJMYW5ndWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNDb3VudHJ5KSB7XG4gICAgICAgICAgY3VyQ291bnRyeSA9IChhd2FpdCB0aGlzLmdldERldmljZUNvdW50cnkoKSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoIWhhc0xhbmd1YWdlICYmIGNvdW50cnkgPT09IGN1ckNvdW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGFuZ3VhZ2UgPT09IGN1ckxhbmd1YWdlICYmIGNvdW50cnkgPT09IGN1ckNvdW50cnkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VyTG9jYWxlID0gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9jYWxlKCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIHpoLWhhbnMtY24gOiB6aC1jblxuICAgICAgICBjb25zdCBsb2NhbGVDb2RlID0gc2NyaXB0ID8gYCR7bGFuZ3VhZ2V9LSR7c2NyaXB0LnRvTG93ZXJDYXNlKCl9LSR7Y291bnRyeX1gIDogYCR7bGFuZ3VhZ2V9LSR7Y291bnRyeX1gO1xuXG4gICAgICAgIGlmIChsb2NhbGVDb2RlID09PSBjdXJMb2NhbGUpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFJlcXVlc3RlZCBsb2NhbGUgaXMgZXF1YWwgdG8gY3VycmVudCBsb2NhbGU6ICcke2N1ckxvY2FsZX0nYCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yLCByZXN0YXJ0IGFkYiBhbmQgcmV0cnlcbiAgICAgIGxvZy5lcnJvcihgVW5hYmxlIHRvIGNoZWNrIGRldmljZSBsb2NhbGl6YXRpb246ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlY29ubmVjdCgpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydEFkYigpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBUaGUgbGFuZ3VhZ2UgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byBsb3dlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyLDh9LiBlLmcuIGVuLCBqYSA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudHJ5IC0gQ291bnRyeS4gVGhlIGNvdW50cnkgKHJlZ2lvbikgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB1cHBlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyfSB8IFswLTldezN9LiBlLmcuIFVTLCBKUCA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7P3N0cmluZ30gc2NyaXB0IC0gU2NyaXB0LiBUaGUgc2NyaXB0IGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB0aXRsZSBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXs0fS4gZS5nLiBIYW5zIGluIHpoLUhhbnMtQ04gOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5zZXREZXZpY2VMYW5ndWFnZUNvdW50cnkgPSBhc3luYyBmdW5jdGlvbiBzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGxldCBoYXNMYW5ndWFnZSA9IGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpO1xuICBsZXQgaGFzQ291bnRyeSA9IGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KTtcbiAgaWYgKCFoYXNMYW5ndWFnZSB8fCAhaGFzQ291bnRyeSkge1xuICAgIGxvZy53YXJuKGBzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkgcmVxdWlyZXMgbGFuZ3VhZ2UgYW5kIGNvdW50cnkgYXQgbGVhc3RgKTtcbiAgICBsb2cud2FybihgR290IGxhbmd1YWdlOiAnJHtsYW5ndWFnZX0nIGFuZCBjb3VudHJ5OiAnJHtjb3VudHJ5fSdgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpO1xuXG4gIGxhbmd1YWdlID0gKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb3VudHJ5ID0gKGNvdW50cnkgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICBsZXQgY3VyTGFuZ3VhZ2UgPSAoYXdhaXQgdGhpcy5nZXREZXZpY2VMYW5ndWFnZSgpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGxldCBjdXJDb3VudHJ5ID0gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlQ291bnRyeSgpKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgaWYgKGxhbmd1YWdlICE9PSBjdXJMYW5ndWFnZSB8fCBjb3VudHJ5ICE9PSBjdXJDb3VudHJ5KSB7XG4gICAgICBhd2FpdCB0aGlzLnNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAobGFuZ3VhZ2UsIGNvdW50cnkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgY3VyTG9jYWxlID0gYXdhaXQgdGhpcy5nZXREZXZpY2VMb2NhbGUoKTtcblxuICAgIC8vIHpoLUhhbnMtQ04gOiB6aC1DTlxuICAgIGNvbnN0IGxvY2FsZUNvZGUgPSBzY3JpcHQgPyBgJHtsYW5ndWFnZX0tJHtzY3JpcHR9LSR7Y291bnRyeX1gIDogYCR7bGFuZ3VhZ2V9LSR7Y291bnRyeX1gO1xuICAgIGxvZy5kZWJ1ZyhgQ3VycmVudCBsb2NhbGU6ICcke2N1ckxvY2FsZX0nOyByZXF1ZXN0ZWQgbG9jYWxlOiAnJHtsb2NhbGVDb2RlfSdgKTtcbiAgICBpZiAobG9jYWxlQ29kZS50b0xvd2VyQ2FzZSgpICE9PSBjdXJMb2NhbGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHBJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFBhY2thZ2UgbmFtZSwgZm9yIGV4YW1wbGUgJ2NvbS5hY21lLmFwcCcuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyc2lvbkNvZGUgLSBWZXJzaW9uIGNvZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbk5hbWUgLSBWZXJzaW9uIG5hbWUsIGZvciBleGFtcGxlICcxLjAnLlxuICovXG5cbi8qKlxuICogR2V0IHRoZSBwYWNrYWdlIGluZm8gZnJvbSBsb2NhbCBhcGsgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gZXhpc3RpbmcgLmFwayhzKSBwYWNrYWdlIG9uIHRoZSBsb2NhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHN5c3RlbS5cbiAqIEByZXR1cm4gez9BcHBJbmZvfSBUaGUgcGFyc2VkIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLlxuICovXG5hcGtVdGlsc01ldGhvZHMuZ2V0QXBrSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldEFwa0luZm8gKGFwcFBhdGgpIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0IHBhdGggJHthcHBQYXRofSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG5cbiAgaWYgKGFwcFBhdGguZW5kc1dpdGgoQVBLU19FWFRFTlNJT04pKSB7XG4gICAgYXBwUGF0aCA9IGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBwUGF0aCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgYXBrUmVhZGVyLnJlYWRNYW5pZmVzdCgpO1xuICAgIGNvbnN0IHtwa2csIHZlcnNpb25OYW1lLCB2ZXJzaW9uQ29kZX0gPSBwYXJzZU1hbmlmZXN0KG1hbmlmZXN0KTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcGtnLFxuICAgICAgdmVyc2lvbkNvZGUsXG4gICAgICB2ZXJzaW9uTmFtZSxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oYEVycm9yICcke2UubWVzc2FnZX0nIHdoaWxlIGdldHRpbmcgYmFkZ2luZyBpbmZvYCk7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHBhY2thZ2UgaW5mbyBmcm9tIHRoZSBpbnN0YWxsZWQgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBrZyAtIFRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsZWQgcGFja2FnZS5cbiAqIEByZXR1cm4gez9BcHBJbmZvfSBUaGUgcGFyc2VkIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uLlxuICovXG5hcGtVdGlsc01ldGhvZHMuZ2V0UGFja2FnZUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRQYWNrYWdlSW5mbyAocGtnKSB7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBwYWNrYWdlIGluZm8gZm9yICcke3BrZ30nYCk7XG4gIGxldCByZXN1bHQgPSB7bmFtZTogcGtnfTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFsnZHVtcHN5cycsICdwYWNrYWdlJywgcGtnXSk7XG4gICAgY29uc3QgdmVyc2lvbk5hbWVNYXRjaCA9IG5ldyBSZWdFeHAoL3ZlcnNpb25OYW1lPShbXFxkKy5dKykvKS5leGVjKHN0ZG91dCk7XG4gICAgaWYgKHZlcnNpb25OYW1lTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uTmFtZSA9IHZlcnNpb25OYW1lTWF0Y2hbMV07XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25Db2RlTWF0Y2ggPSBuZXcgUmVnRXhwKC92ZXJzaW9uQ29kZT0oXFxkKykvKS5leGVjKHN0ZG91dCk7XG4gICAgaWYgKHZlcnNpb25Db2RlTWF0Y2gpIHtcbiAgICAgIHJlc3VsdC52ZXJzaW9uQ29kZSA9IHBhcnNlSW50KHZlcnNpb25Db2RlTWF0Y2hbMV0sIDEwKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYEVycm9yICcke2Vyci5tZXNzYWdlfScgd2hpbGUgZHVtcGluZyBwYWNrYWdlIGluZm9gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBGZXRjaGVzIGJhc2UuYXBrIG9mIHRoZSBnaXZlbiBwYWNrYWdlIHRvIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgVGhlIHBhY2thZ2UgaWRlbnRpZmllciAobXVzdCBiZSBhbHJlYWR5IGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlKVxuICogQHBhcmFtIHtzdHJpbmd9IHRtcERpciBUaGUgZGVzdGluYXRpb24gZm9sZGVyIHBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZ1bGwgcGF0aCB0byB0aGUgZG93bmxvYWRlZCBmaWxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGZldGNoaW5nIHRoZSAuYXBrXG4gKi9cbmFwa1V0aWxzTWV0aG9kcy5wdWxsQXBrID0gYXN5bmMgZnVuY3Rpb24gcHVsbEFwayAocGtnLCB0bXBEaXIpIHtcbiAgY29uc3Qgc3Rkb3V0ID0gXy50cmltKGF3YWl0IHRoaXMuc2hlbGwoWydwbScsICdwYXRoJywgcGtnXSkpO1xuICBjb25zdCBwYWNrYWdlTWFya2VyID0gJ3BhY2thZ2U6JztcbiAgaWYgKCFfLnN0YXJ0c1dpdGgoc3Rkb3V0LCBwYWNrYWdlTWFya2VyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHB1bGwgdGhlIC5hcGsgcGFja2FnZSBmb3IgJyR7cGtnfScuIE9yaWdpbmFsIGVycm9yOiAke3N0ZG91dH1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlbW90ZVBhdGggPSBzdGRvdXQucmVwbGFjZShwYWNrYWdlTWFya2VyLCAnJyk7XG4gIGNvbnN0IHRtcEFwcCA9IHBhdGgucmVzb2x2ZSh0bXBEaXIsIGAke3BrZ30uYXBrYCk7XG4gIGF3YWl0IHRoaXMucHVsbChyZW1vdGVQYXRoLCB0bXBBcHApO1xuICBsb2cuZGVidWcoYFB1bGxlZCBhcHAgZm9yIHBhY2thZ2UgJyR7cGtnfScgdG8gJyR7dG1wQXBwfSdgKTtcbiAgcmV0dXJuIHRtcEFwcDtcbn07XG5cbi8qKlxuICogQWN0aXZhdGVzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBvciBsYXVuY2hlcyBpdCBpZiBuZWNlc3NhcnkuXG4gKiBUaGUgYWN0aW9uIGxpdGVyYWxseSBzaW11bGF0ZXNcbiAqIGNsaWNraW5nIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGljb24gb24gdGhlIGRhc2hib2FyZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXBwIGNhbm5vdCBiZSBhY3RpdmF0ZWRcbiAqL1xuYXBrVXRpbHNNZXRob2RzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIGxvZy5kZWJ1ZyhgQWN0aXZhdGluZyAnJHthcHBJZH0nYCk7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpO1xuICAvLyBGYWxsYmFjayB0byBNb25rZXkgaW4gb2xkZXIgQVBJc1xuICBpZiAoYXBpTGV2ZWwgPCAyNCkge1xuICAgIC8vIFRoZSBtb25rZXkgY29tbWFuZCBjb3VsZCByYWlzZSBhbiBpc3N1ZSBhcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NDg2MDQ3NS9ob3ctdG8tdXNlLXRoZS1tb25rZXktY29tbWFuZC13aXRoLWFuLWFuZHJvaWQtc3lzdGVtLXRoYXQtZG9lc250LWhhdmUtcGh5c2ljYWxcbiAgICAvLyBidXQgJy0tcGN0LXN5c2tleXMgMCcgY291bGQgY2F1c2UgYW5vdGhlciBiYWNrZ3JvdW5kIHByb2Nlc3MgaXNzdWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjk0MSNpc3N1ZWNvbW1lbnQtMTEyOTgzNzI4NVxuICAgIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAgICctcCcsIGFwcElkLFxuICAgICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICcxJ107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGNtZCk7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke291dHB1dH1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5pbmNsdWRlcygnbW9ua2V5IGFib3J0ZWQnKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBBcmUgeW91IHN1cmUgaXQgaXMgaW5zdGFsbGVkP2ApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgYWN0aXZpdHlOYW1lID0gYXdhaXQgdGhpcy5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkKTtcbiAgaWYgKGFjdGl2aXR5TmFtZSA9PT0gUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNzEyOFxuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBUaGUgbGF1bmNoYWJsZSBhY3Rpdml0eSBuYW1lIG9mICcke2FwcElkfScgd2FzIHJlc29sdmVkIHRvICcke2FjdGl2aXR5TmFtZX0nLiBgICtcbiAgICAgIGBTd2l0Y2hpbmcgdGhlIHJlc29sdmVyIHRvIG5vdCB1c2UgY21kYFxuICAgICk7XG4gICAgYWN0aXZpdHlOYW1lID0gYXdhaXQgdGhpcy5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkLCB7cHJlZmVyQ21kOiBmYWxzZX0pO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgKGFwaUxldmVsIDwgMjYpID8gJ3N0YXJ0JyA6ICdzdGFydC1hY3Rpdml0eScsXG4gICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIC8vIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQjRkxBR19BQ1RJVklUWV9ORVdfVEFTS1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAnLWYnLCAnMHgxMDIwMDAwMCcsXG4gICAgJy1uJywgYWN0aXZpdHlOYW1lLFxuICBdKTtcbiAgbG9nLmRlYnVnKHN0ZG91dCk7XG4gIGlmICgvXmVycm9yOi9taS50ZXN0KHN0ZG91dCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtzdGRvdXR9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IFJFTU9URV9DQUNIRV9ST09UIH07XG5leHBvcnQgZGVmYXVsdCBhcGtVdGlsc01ldGhvZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFFMUJBLGVBQWUsQ0FBQ0MsaUJBQWlCLEdBQUc7RUFDbENDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxhQUFhLEVBQUUsY0FBYztFQUM3QkMsdUJBQXVCLEVBQUUsdUJBQXVCO0VBQ2hEQyxzQkFBc0IsRUFBRSxzQkFBc0I7RUFDOUNDLHVCQUF1QixFQUFFO0FBQzNCLENBQUM7QUFDRCxNQUFNQyxpQkFBaUIsR0FBRyw4QkFBOEI7QUFBQztBQUN6RCxNQUFNQyxzQkFBc0IsR0FBRyxtREFBbUQ7O0FBVWxGUixlQUFlLENBQUNTLGNBQWMsR0FBRyxlQUFlQSxjQUFjLENBQUVDLEdBQUcsRUFBRTtFQUNuRUMsZUFBRyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCRixHQUFJLEVBQUMsQ0FBQztFQUM5QyxNQUFNRyxnQkFBZ0IsR0FBRyxJQUFJQyxNQUFNLENBQUUsc0JBQXFCQyxlQUFDLENBQUNDLFlBQVksQ0FBQ04sR0FBRyxDQUFFLFlBQVcsRUFBRSxHQUFHLENBQUM7RUFDL0YsSUFBSTtJQUNGLE1BQU1PLE1BQU0sR0FBRyxNQUFNLElB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
|