appium-adb 8.18.0 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/build/index.js +1 -1
- package/build/lib/adb.js +1 -1
- package/build/lib/helpers.js +54 -49
- package/build/lib/logcat.js +4 -4
- package/build/lib/logger.js +3 -3
- package/build/lib/tools/aab-utils.js +157 -0
- package/build/lib/tools/adb-commands.js +11 -11
- package/build/lib/tools/adb-emu-commands.js +7 -7
- package/build/lib/tools/android-manifest.js +13 -13
- package/build/lib/tools/apk-signing.js +27 -22
- package/build/lib/tools/apk-utils.js +13 -13
- package/build/lib/tools/apks-utils.js +13 -14
- package/build/lib/tools/index.js +5 -3
- package/build/lib/tools/lockmgmt.js +3 -3
- package/build/lib/tools/settings-client-commands.js +7 -7
- package/build/lib/tools/system-calls.js +27 -27
- package/lib/helpers.js +1 -1
- package/lib/logcat.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/tools/aab-utils.js +158 -0
- package/lib/tools/adb-commands.js +1 -1
- package/lib/tools/adb-emu-commands.js +1 -1
- package/lib/tools/android-manifest.js +1 -1
- package/lib/tools/apk-signing.js +4 -4
- package/lib/tools/apk-utils.js +6 -7
- package/lib/tools/apks-utils.js +6 -6
- package/lib/tools/index.js +2 -0
- package/lib/tools/lockmgmt.js +1 -1
- package/lib/tools/settings-client-commands.js +1 -1
- package/lib/tools/system-calls.js +1 -1
- package/package.json +12 -8
- package/lib/.DS_Store +0 -0
|
@@ -17,7 +17,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
17
17
|
|
|
18
18
|
var _net = _interopRequireDefault(require("net"));
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _support = require("@appium/support");
|
|
21
21
|
|
|
22
22
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
23
23
|
|
|
@@ -106,7 +106,7 @@ async function listEmulators() {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
async function getAvdConfigPaths(avdsRoot) {
|
|
109
|
-
const configs = await
|
|
109
|
+
const configs = await _support.fs.glob('*.ini', {
|
|
110
110
|
cwd: avdsRoot,
|
|
111
111
|
absolute: true
|
|
112
112
|
});
|
|
@@ -295,7 +295,7 @@ emuMethods.execEmuConsoleCommand = async function execTelnet(cmd, opts = {}) {
|
|
|
295
295
|
if (!isCommandSent) {
|
|
296
296
|
clearTimeout(initTimeoutObj);
|
|
297
297
|
serverResponse = [];
|
|
298
|
-
const cmdStr = _lodash.default.isArray(cmd) ?
|
|
298
|
+
const cmdStr = _lodash.default.isArray(cmd) ? _support.util.quote(cmd) : `${cmd}`;
|
|
299
299
|
|
|
300
300
|
_logger.default.debug(`Executing Emulator console command: ${cmdStr}`);
|
|
301
301
|
|
|
@@ -324,11 +324,11 @@ emuMethods.execEmuConsoleCommand = async function execTelnet(cmd, opts = {}) {
|
|
|
324
324
|
emuMethods.getEmuVersionInfo = async function getEmuVersionInfo() {
|
|
325
325
|
const propsPath = _path.default.join(this.sdkRoot, 'emulator', 'source.properties');
|
|
326
326
|
|
|
327
|
-
if (!(await
|
|
327
|
+
if (!(await _support.fs.exists(propsPath))) {
|
|
328
328
|
return {};
|
|
329
329
|
}
|
|
330
330
|
|
|
331
|
-
const content = await
|
|
331
|
+
const content = await _support.fs.readFile(propsPath, 'utf8');
|
|
332
332
|
const revisionMatch = /^Pkg\.Revision=([\d.]+)$/m.exec(content);
|
|
333
333
|
const result = {};
|
|
334
334
|
|
|
@@ -365,7 +365,7 @@ emuMethods.getEmuImageProperties = async function getEmuImageProperties(avdName)
|
|
|
365
365
|
throw new Error(msg);
|
|
366
366
|
}
|
|
367
367
|
|
|
368
|
-
return _ini.default.parse(await
|
|
368
|
+
return _ini.default.parse(await _support.fs.readFile(avd.config, 'utf8'));
|
|
369
369
|
};
|
|
370
370
|
|
|
371
371
|
emuMethods.checkAvdExist = async function checkAvdExist(avdName) {
|
|
@@ -394,4 +394,4 @@ var _default = emuMethods;
|
|
|
394
394
|
exports.default = _default;require('source-map-support').install();
|
|
395
395
|
|
|
396
396
|
|
|
397
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIl0sIm5hbWVzIjpbIlBIT05FX05VTUJFUl9QQVRURVJOIiwiZW11TWV0aG9kcyIsIlBPV0VSX0FDX1NUQVRFUyIsIk9iamVjdCIsImZyZWV6ZSIsIlBPV0VSX0FDX09OIiwiUE9XRVJfQUNfT0ZGIiwiR1NNX0NBTExfQUNUSU9OUyIsIkdTTV9DQUxMIiwiR1NNX0FDQ0VQVCIsIkdTTV9DQU5DRUwiLCJHU01fSE9MRCIsIkdTTV9WT0lDRV9TVEFURVMiLCJHU01fVk9JQ0VfVU5SRUdJU1RFUkVEIiwiR1NNX1ZPSUNFX0hPTUUiLCJHU01fVk9JQ0VfUk9BTUlORyIsIkdTTV9WT0lDRV9TRUFSQ0hJTkciLCJHU01fVk9JQ0VfREVOSUVEIiwiR1NNX1ZPSUNFX09GRiIsIkdTTV9WT0lDRV9PTiIsIkdTTV9TSUdOQUxfU1RSRU5HVEhTIiwiTkVUV09SS19TUEVFRCIsIkdTTSIsIlNDU0QiLCJHUFJTIiwiRURHRSIsIlVNVFMiLCJIU0RQQSIsIkxURSIsIkVWRE8iLCJGVUxMIiwiU0VOU09SUyIsIkFDQ0VMRVJBVElPTiIsIkdZUk9TQ09QRSIsIk1BR05FVElDX0ZJRUxEIiwiT1JJRU5UQVRJT04iLCJURU1QRVJBVFVSRSIsIlBST1hJTUlUWSIsIkxJR0hUIiwiUFJFU1NVUkUiLCJIVU1JRElUWSIsIk1BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCIsIkdZUk9TQ09QRV9VTkNBTElCUkFURUQiLCJISU5HRV9BTkdMRTAiLCJISU5HRV9BTkdMRTEiLCJISU5HRV9BTkdMRTIiLCJIRUFSVF9SQVRFIiwiUkdCQ19MSUdIVCIsImxpc3RFbXVsYXRvcnMiLCJhdmRzUm9vdCIsInByb2Nlc3MiLCJlbnYiLCJBTkRST0lEX0FWRF9IT01FIiwiZ2V0QXZkQ29uZmlnUGF0aHMiLCJsb2ciLCJ3YXJuIiwicHJlZnNSb290IiwicGF0aCIsInJlc29sdmUiLCJkZWJ1ZyIsImNvbmZpZ3MiLCJmcyIsImdsb2IiLCJjd2QiLCJhYnNvbHV0ZSIsIm1hcCIsImNvbmZQYXRoIiwiYXZkTmFtZSIsImJhc2VuYW1lIiwic3BsaXQiLCJzbGljZSIsImpvaW4iLCJuYW1lIiwiY29uZmlnIiwiZmlsdGVyIiwiXyIsInRyaW0iLCJpc0VtdWxhdG9yQ29ubmVjdGVkIiwiZW11bGF0b3JzIiwiZ2V0Q29ubmVjdGVkRW11bGF0b3JzIiwiZmluZCIsIngiLCJ1ZGlkIiwiY3VyRGV2aWNlSWQiLCJ2ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCIsIkVycm9yIiwiZmluZ2VycHJpbnQiLCJmaW5nZXJwcmludElkIiwibGV2ZWwiLCJnZXRBcGlMZXZlbCIsImFkYkV4ZWNFbXUiLCJyb3RhdGUiLCJwb3dlckFDIiwic3RhdGUiLCJ2YWx1ZXMiLCJpbmRleE9mIiwiVHlwZUVycm9yIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwidmFsdWUiLCJpbmNsdWRlcyIsImlzTmlsIiwicG93ZXJDYXBhY2l0eSIsInBlcmNlbnQiLCJwYXJzZUludCIsImlzTmFOIiwicG93ZXJPRkYiLCJzZW5kU01TIiwicGhvbmVOdW1iZXIiLCJtZXNzYWdlIiwicmVwbGFjZSIsInRlc3QiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic3RyZW5ndGgiLCJpbmZvIiwiZ3NtVm9pY2UiLCJuZXR3b3JrU3BlZWQiLCJzcGVlZCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImV4ZWNUZWxuZXQiLCJjbWQiLCJvcHRzIiwicG9ydCIsInBvcnRNYXRjaCIsImV4ZWMiLCJob3N0IiwiZXhlY1RpbWVvdXQiLCJjb25uVGltZW91dCIsImluaXRUaW1lb3V0IiwicmVzZXRUZWxuZXRBdXRoVG9rZW4iLCJva0ZsYWciLCJub2tGbGFnIiwiZW9sIiwiY2xpZW50IiwibmV0IiwiY29ubmVjdCIsIkIiLCJyZWplY3QiLCJjb25uVGltZW91dE9iaiIsInNldFRpbWVvdXQiLCJleGVjVGltZW91dE9iaiIsImluaXRUaW1lb3V0T2JqIiwiaXNDb21tYW5kU2VudCIsInNlcnZlclJlc3BvbnNlIiwib25jZSIsImUiLCJjbGVhclRpbWVvdXQiLCJvbiIsImNodW5rIiwicHVzaCIsIm91dHB1dCIsIkJ1ZmZlciIsImNvbmNhdCIsInRvU3RyaW5nIiwiY21kU3RyIiwiaXNBcnJheSIsInV0aWwiLCJxdW90ZSIsIndyaXRlIiwiZW5kIiwib3V0cHV0QXJyIiwibGVuZ3RoIiwibGFzdCIsImdldEVtdVZlcnNpb25JbmZvIiwicHJvcHNQYXRoIiwic2RrUm9vdCIsImV4aXN0cyIsImNvbnRlbnQiLCJyZWFkRmlsZSIsInJldmlzaW9uTWF0Y2giLCJyZXN1bHQiLCJyZXZpc2lvbiIsImJ1aWxkSWRNYXRjaCIsImJ1aWxkSWQiLCJnZXRFbXVJbWFnZVByb3BlcnRpZXMiLCJhdmRzIiwiYXZkIiwibXNnIiwiaXNFbXB0eSIsImluaSIsInBhcnNlIiwiY2hlY2tBdmRFeGlzdCIsInNvbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsb0JBQW9CLEdBQUcscURBQTdCO0FBRUEsTUFBTUMsVUFBVSxHQUFHLEVBQW5CO0FBQ0FBLFVBQVUsQ0FBQ0MsZUFBWCxHQUE2QkMsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDekNDLEVBQUFBLFdBQVcsRUFBRSxJQUQ0QjtBQUV6Q0MsRUFBQUEsWUFBWSxFQUFFO0FBRjJCLENBQWQsQ0FBN0I7QUFJQUwsVUFBVSxDQUFDTSxnQkFBWCxHQUE4QkosTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDMUNJLEVBQUFBLFFBQVEsRUFBRSxNQURnQztBQUUxQ0MsRUFBQUEsVUFBVSxFQUFFLFFBRjhCO0FBRzFDQyxFQUFBQSxVQUFVLEVBQUUsUUFIOEI7QUFJMUNDLEVBQUFBLFFBQVEsRUFBRTtBQUpnQyxDQUFkLENBQTlCO0FBTUFWLFVBQVUsQ0FBQ1csZ0JBQVgsR0FBOEJULE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzFDUyxFQUFBQSxzQkFBc0IsRUFBRSxjQURrQjtBQUUxQ0MsRUFB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QUFQO0FBQ0QsQ0FiRDs7QUFzQkF4RSxVQUFVLENBQUNzTCxhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJwSCxPQUE5QixFQUF1QztBQUNoRSxRQUFNOEcsSUFBSSxHQUFHLE1BQU1qSSxhQUFhLEVBQWhDOztBQUNBLE1BQUksQ0FBQ2lJLElBQUksQ0FBQ08sSUFBTCxDQUFVLENBQUM7QUFBQ2hILElBQUFBO0FBQUQsR0FBRCxLQUFZQSxJQUFJLEtBQUtMLE9BQS9CLENBQUwsRUFBOEM7QUFDNUMsUUFBSWdILEdBQUcsR0FBSSxRQUFPaEgsT0FBUSxzQkFBMUI7O0FBQ0EsUUFBSVEsZ0JBQUV5RyxPQUFGLENBQVVILElBQVYsQ0FBSixFQUFxQjtBQUNuQkUsTUFBQUEsR0FBRyxJQUFLLGdEQUFSO0FBQ0QsS0FGRCxNQUVPO0FBQ0xBLE1BQUFBLEdBQUcsSUFBSyxtREFBa0RGLElBQUksQ0FBQ2hILEdBQUwsQ0FBUyxDQUFDO0FBQUNPLFFBQUFBO0FBQUQsT0FBRCxLQUFZQSxJQUFyQixDQUEyQixHQUFyRjtBQUNEOztBQUNELFVBQU0sSUFBSWEsS0FBSixDQUFVOEYsR0FBVixDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0QsQ0FaRDs7ZUFjZWxMLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgeyB1dGlsLCBmcyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGluaSBmcm9tICdpbmknO1xuXG5jb25zdCBQSE9ORV9OVU1CRVJfUEFUVEVSTiA9IC9eWytdP1soXT9bMC05XSpbKV0/Wy1cXHMuXT9bMC05XSpbLVxccy5dP1swLTldezIsfSQvaW07XG5cbmNvbnN0IGVtdU1ldGhvZHMgPSB7fTtcbmVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFBPV0VSX0FDX09OOiAnb24nLFxuICBQT1dFUl9BQ19PRkY6ICdvZmYnXG59KTtcbmVtdU1ldGhvZHMuR1NNX0NBTExfQUNUSU9OUyA9IE9iamVjdC5mcmVlemUoe1xuICBHU01fQ0FMTDogJ2NhbGwnLFxuICBHU01fQUNDRVBUOiAnYWNjZXB0JyxcbiAgR1NNX0NBTkNFTDogJ2NhbmNlbCcsXG4gIEdTTV9IT0xEOiAnaG9sZCdcbn0pO1xuZW11TWV0aG9kcy5HU01fVk9JQ0VfU1RBVEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEdTTV9WT0lDRV9VTlJFR0lTVEVSRUQ6ICd1bnJlZ2lzdGVyZWQnLFxuICBHU01fVk9JQ0VfSE9NRTogJ2hvbWUnLFxuICBHU01fVk9JQ0VfUk9BTUlORzogJ3JvYW1pbmcnLFxuICBHU01fVk9JQ0VfU0VBUkNISU5HOiAnc2VhcmNoaW5nJyxcbiAgR1NNX1ZPSUNFX0RFTklFRDogJ2RlbmllZCcsXG4gIEdTTV9WT0lDRV9PRkY6ICdvZmYnLFxuICBHU01fVk9JQ0VfT046ICdvbidcbn0pO1xuZW11TWV0aG9kcy5HU01fU0lHTkFMX1NUUkVOR1RIUyA9IFswLCAxLCAyLCAzLCA0XTtcblxuZW11TWV0aG9kcy5ORVRXT1JLX1NQRUVEID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEdTTTogJ2dzbScsIC8vIEdTTS9DU0QgKHVwOiAxNC40LCBkb3duOiAxNC40KS5cbiAgU0NTRDogJ3Njc2QnLCAvLyBIU0NTRCAodXA6IDE0LjQsIGRvd246IDU3LjYpLlxuICBHUFJTOiAnZ3BycycsIC8vIEdQUlMgKHVwOiAyOC44LCBkb3duOiA1Ny42KS5cbiAgRURHRTogJ2VkZ2UnLCAvLyBFREdFL0VHUFJTICh1cDogNDczLjYsIGRvd246IDQ3My42KS5cbiAgVU1UUzogJ3VtdHMnLCAvLyBVTVRTLzNHICh1cDogMzg0LjAsIGRvd246IDM4NC4wKS5cbiAgSFNEUEE6ICdoc2RwYScsIC8vIEhTRFBBICh1cDogNTc2MC4wLCBkb3duOiAxMyw5ODAuMCkuXG4gIExURTogJ2x0ZScsIC8vIExURSAodXA6IDU4LDAwMCwgZG93bjogMTczLDAwMCkuXG4gIEVWRE86ICdldmRvJywgLy8gRVZETyAodXA6IDc1LDAwMCwgZG93bjogMjgwLDAwMCkuXG4gIEZVTEw6ICdmdWxsJyAvLyBObyBsaW1pdCwgdGhlIGRlZmF1bHQgKHVwOiAwLjAsIGRvd246IDAuMCkuXG59KTtcblxuZW11TWV0aG9kcy5TRU5TT1JTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFDQ0VMRVJBVElPTjogJ2FjY2VsZXJhdGlvbicsXG4gIEdZUk9TQ09QRTogJ2d5cm9zY29wZScsXG4gIE1BR05FVElDX0ZJRUxEOiAnbWFnbmV0aWMtZmllbGQnLFxuICBPUklFTlRBVElPTjogJ29yaWVudGF0aW9uJyxcbiAgVEVNUEVSQVRVUkU6ICd0ZW1wZXJhdHVyZScsXG4gIFBST1hJTUlUWTogJ3Byb3hpbWl0eScsXG4gIExJR0hUOiAnbGlnaHQnLFxuICBQUkVTU1VSRTogJ3ByZXNzdXJlJyxcbiAgSFVNSURJVFk6ICdodW1pZGl0eScsXG4gIE1BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRDogJ21hZ25ldGljLWZpZWxkLXVuY2FsaWJyYXRlZCcsXG4gIEdZUk9TQ09QRV9VTkNBTElCUkFURUQ6ICdneXJvc2NvcGUtdW5jYWxpYnJhdGVkJyxcbiAgSElOR0VfQU5HTEUwOiAnaGluZ2UtYW5nbGUwJyxcbiAgSElOR0VfQU5HTEUxOiAnaGluZ2UtYW5nbGUxJyxcbiAgSElOR0VfQU5HTEUyOiAnaGluZ2UtYW5nbGUyJyxcbiAgSEVBUlRfUkFURTogJ2hlYXJ0LXJhdGUnLFxuICBSR0JDX0xJR0hUOiAncmdiYy1saWdodCcsXG59KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbXVJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSBFbXVsYXRvciBuYW1lLCBmb3IgZXhhbXBsZSBgUGl4ZWxfWExfQVBJXzMwYFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbmZpZyBGdWxsIHBhdGggdG8gdGhlIGVtdWxhdG9yIGNvbmZpZyAuaW5pIGZpbGUsXG4gKiBmb3IgZXhhbXBsZSBgL1VzZXJzL3VzZXIvLmFuZHJvaWQvYXZkL1BpeGVsX1hMX0FQSV8zMC5pbmlgXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIEFuZHJvaWQgZW11bGF0b3JzXG4gKlxuICogQHJldHVybnMge0FycmF5PEVtdUluZm8+fVxuICovXG5hc3luYyBmdW5jdGlvbiBsaXN0RW11bGF0b3JzICgpIHtcbiAgbGV0IGF2ZHNSb290ID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9BVkRfSE9NRTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhhdmRzUm9vdCkpIHtcbiAgICByZXR1cm4gYXdhaXQgZ2V0QXZkQ29uZmlnUGF0aHMoYXZkc1Jvb3QpO1xuICB9XG5cbiAgaWYgKGF2ZHNSb290KSB7XG4gICAgbG9nLndhcm4oYFRoZSB2YWx1ZSBvZiB0aGUgQU5EUk9JRF9BVkRfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHthdmRzUm9vdH0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZzUm9vdCA9IGF3YWl0IGdldEFuZHJvaWRQcmVmc1Jvb3QoKTtcbiAgaWYgKCFwcmVmc1Jvb3QpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhdmRzUm9vdCA9IHBhdGgucmVzb2x2ZShwcmVmc1Jvb3QsICdhdmQnKTtcbiAgaWYgKCFhd2FpdCBkaXJFeGlzdHMoYXZkc1Jvb3QpKSB7XG4gICAgbG9nLmRlYnVnKGBWaXJ0dWFsIGRldmljZXMgY29uZmlnIHJvb3QgJyR7YXZkc1Jvb3R9JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldEF2ZENvbmZpZ1BhdGhzKGF2ZHNSb290KTtcbn1cblxuLyoqXG4gKiBHZXQgY29uZmlndXJhdGlvbiBwYXRocyBvZiBhbGwgdmlydHVhbCBkZXZpY2VzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZHNSb290IFBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBBVkQgLmluaSBmaWxlc1xuICogQHJldHVybnMge0FycmF5PEVtdUluZm8+fVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBdmRDb25maWdQYXRocyAoYXZkc1Jvb3QpIHtcbiAgY29uc3QgY29uZmlncyA9IGF3YWl0IGZzLmdsb2IoJyouaW5pJywge1xuICAgIGN3ZDogYXZkc1Jvb3QsXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICByZXR1cm4gY29uZmlncy5tYXAoKGNvbmZQYXRoKSA9PiB7XG4gICAgY29uc3QgYXZkTmFtZSA9IHBhdGguYmFzZW5hbWUoY29uZlBhdGgpLnNwbGl0KCcuJykuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICByZXR1cm4ge25hbWU6IGF2ZE5hbWUsIGNvbmZpZzogY29uZlBhdGh9O1xuICB9KS5maWx0ZXIoKHtuYW1lfSkgPT4gXy50cmltKG5hbWUpKTtcbn1cblxuLyoqXG4gKiBDaGVjayB0aGUgZW11bGF0b3Igc3RhdGUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBFbXVsYXRvciBpcyB2aXNpYmxlIHRvIGFkYi5cbiAqL1xuZW11TWV0aG9kcy5pc0VtdWxhdG9yQ29ubmVjdGVkID0gYXN5bmMgZnVuY3Rpb24gaXNFbXVsYXRvckNvbm5lY3RlZCAoKSB7XG4gIGxldCBlbXVsYXRvcnMgPSBhd2FpdCB0aGlzLmdldENvbm5lY3RlZEVtdWxhdG9ycygpO1xuICByZXR1cm4gISFfLmZpbmQoZW11bGF0b3JzLCAoeCkgPT4geCAmJiB4LnVkaWQgPT09IHRoaXMuY3VyRGV2aWNlSWQpO1xufTtcblxuLyoqXG4gKiBWZXJpZnkgdGhlIGVtdWxhdG9yIGlzIGNvbm5lY3RlZC5cbiAqXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgRW11bGF0b3IgaXMgbm90IHZpc2libGUgdG8gYWRiLlxuICovXG5lbXVNZXRob2RzLnZlcmlmeUVtdWxhdG9yQ29ubmVjdGVkID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5RW11bGF0b3JDb25uZWN0ZWQgKCkge1xuICBpZiAoIShhd2FpdCB0aGlzLmlzRW11bGF0b3JDb25uZWN0ZWQoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBlbXVsYXRvciBcIiR7dGhpcy5jdXJEZXZpY2VJZH1cIiB3YXMgdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZGApO1xuICB9XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgZmluZ2VycHJpbnQgdG91Y2ggZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmluZ2VycHJpbnRJZCAtIFRoZSBJRCBvZiB0aGUgZmluZ2VycHJpbnQuXG4gKi9cbmVtdU1ldGhvZHMuZmluZ2VycHJpbnQgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludCAoZmluZ2VycHJpbnRJZCkge1xuICBpZiAoIWZpbmdlcnByaW50SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmdlcnByaW50IGlkIHBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuICAvLyB0aGUgbWV0aG9kIHVzZWQgb25seSB3b3JrcyBmb3IgQVBJIGxldmVsIDIzIGFuZCBhYm92ZVxuICBsZXQgbGV2ZWwgPSBhd2FpdCB0aGlzLmdldEFwaUxldmVsKCk7XG4gIGlmIChsZXZlbCA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgQVBJIExldmVsIG11c3QgYmUgPj0gMjMuIEN1cnJlbnQgQXBpIGxldmVsICcke2xldmVsfSdgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydmaW5nZXInLCAndG91Y2gnLCBmaW5nZXJwcmludElkXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgZGlzcGxheSBvcmllbnRhdGlvbiBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICogVGhlIG9yaWVudGF0aW9uIGlzIGNoYW5nZWQgKFBJLzIgaXMgYWRkZWQpIGV2ZXJ5IHRpbWVcbiAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqL1xuZW11TWV0aG9kcy5yb3RhdGUgPSBhc3luYyBmdW5jdGlvbiByb3RhdGUgKCkge1xuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydyb3RhdGUnXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgc3RhdGUgY2hhbmdlIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIFsnb24nXSAtIEVpdGhlciAnb24nIG9yICdvZmYnLlxuICovXG5lbXVNZXRob2RzLnBvd2VyQUMgPSBhc3luYyBmdW5jdGlvbiBwb3dlckFDIChzdGF0ZSA9ICdvbicpIHtcbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTKS5pbmRleE9mKHN0YXRlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBXcm9uZyBwb3dlciBBQyBzdGF0ZSBzZW50ICcke3N0YXRlfScuIGBcbiAgICAgICsgYFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMpfV1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydwb3dlcicsICdhYycsIHN0YXRlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2Vuc29ycyB2YWx1ZXMgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2Vuc29yIC0gU2Vuc29yIHR5cGUgZGVjbGFyZWQgaW4gU0VOU09SUyBpdGVtcy5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWUgIC0gTnVtYmVyIHRvIHNldCBhcyB0aGUgc2Vuc29yIHZhbHVlLlxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgc2Vuc29yIHR5cGUgb3Igc2Vuc29yIHZhbHVlIGlzIG5vdCBkZWZpbmVkXG4gKi9cbmVtdU1ldGhvZHMuc2Vuc29yU2V0ID0gYXN5bmMgZnVuY3Rpb24gc2Vuc29yU2V0IChzZW5zb3IsIHZhbHVlKSB7XG4gIGlmICghXy5pbmNsdWRlcyhlbXVNZXRob2RzLlNFTlNPUlMsIHNlbnNvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCBzZW5zb3Igc2VudCAnJHtzZW5zb3J9Jy4gYFxuICAgICAgKyBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLlNFTlNPUlMpfV1gKTtcbiAgfVxuICBpZiAoXy5pc05pbCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTWlzc2luZy9pbnZhbGlkIHNlbnNvciB2YWx1ZSBhcmd1bWVudC4gYFxuICAgICAgKyBgWW91IG5lZWQgdG8gcHJvdmlkZSBhIHZhbGlkIHZhbHVlIHRvIHNldCB0byB0aGUgc2Vuc29yIGluIGBcbiAgICAgICsgYGZvcm1hdCA8dmFsdWUtYT5bOjx2YWx1ZS1iPls6PHZhbHVlLWM+Wy4uLl1dXS5gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydzZW5zb3InLCAnc2V0Jywgc2Vuc29yLCB2YWx1ZV0pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIHBvd2VyIGNhcGFjaXR5IGNoYW5nZSBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGVyY2VudCBbMTAwXSAtIFBlcmNlbnRhZ2UgdmFsdWUgaW4gcmFuZ2UgWzAsIDEwMF0uXG4gKi9cbmVtdU1ldGhvZHMucG93ZXJDYXBhY2l0eSA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQ2FwYWNpdHkgKHBlcmNlbnQgPSAxMDApIHtcbiAgcGVyY2VudCA9IHBhcnNlSW50KHBlcmNlbnQsIDEwKTtcbiAgaWYgKGlzTmFOKHBlcmNlbnQpIHx8IHBlcmNlbnQgPCAwIHx8IHBlcmNlbnQgPiAxMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwZXJjZW50YWdlIHZhbHVlIHNob3VsZCBiZSB2YWxpZCBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsncG93ZXInLCAnY2FwYWNpdHknLCBwZXJjZW50XSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgb2ZmIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKi9cbmVtdU1ldGhvZHMucG93ZXJPRkYgPSBhc3luYyBmdW5jdGlvbiBwb3dlck9GRiAoKSB7XG4gIGF3YWl0IHRoaXMucG93ZXJBQyhlbXVNZXRob2RzLlBPV0VSX0FDX1NUQVRFUy5QT1dFUl9BQ19PRkYpO1xuICBhd2FpdCB0aGlzLnBvd2VyQ2FwYWNpdHkoMCk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2VuZCBTTVMgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBob25lTnVtYmVyIC0gVGhlIHBob25lIG51bWJlciBvZiBtZXNzYWdlIHNlbmRlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFsnJ10gLSBUaGUgbWVzc2FnZSBjb250ZW50LlxuICogQHRocm93cyB7ZXJyb3J9IElmIHBob25lIG51bWJlciBoYXMgaW52YWxpZCBmb3JtYXQuXG4gKi9cbmVtdU1ldGhvZHMuc2VuZFNNUyA9IGFzeW5jIGZ1bmN0aW9uIHNlbmRTTVMgKHBob25lTnVtYmVyLCBtZXNzYWdlID0gJycpIHtcbiAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuICBpZiAobWVzc2FnZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbmRpbmcgYW4gU01TIHJlcXVpcmVzIGEgbWVzc2FnZScpO1xuICB9XG4gIHBob25lTnVtYmVyID0gYCR7cGhvbmVOdW1iZXJ9YC5yZXBsYWNlKC9cXHMqLywgJycpO1xuICBpZiAoIVBIT05FX05VTUJFUl9QQVRURVJOLnRlc3QocGhvbmVOdW1iZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlbmRTTVMgcGhvbmVOdW1iZXIgcGFyYW0gJHtwaG9uZU51bWJlcn1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydzbXMnLCAnc2VuZCcsIHBob25lTnVtYmVyLCBtZXNzYWdlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIGNhbGwgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBob25lTnVtYmVyIC0gVGhlIHBob25lIG51bWJlciBvZiB0aGUgY2FsbGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiBbJyddIC0gT25lIG9mIGF2YWlsYWJsZSBHU00gY2FsbCBhY3Rpb25zLlxuICogQHRocm93cyB7ZXJyb3J9IElmIHBob25lIG51bWJlciBoYXMgaW52YWxpZCBmb3JtYXQuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX2FjdGlvbl8gdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZW11TWV0aG9kcy5nc21DYWxsID0gYXN5bmMgZnVuY3Rpb24gZ3NtQ2FsbCAocGhvbmVOdW1iZXIsIGFjdGlvbiA9ICcnKSB7XG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9DQUxMX0FDVElPTlMpLmluZGV4T2YoYWN0aW9uKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ3NtIGFjdGlvbiBwYXJhbSAke2FjdGlvbn0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5HU01fQ0FMTF9BQ1RJT05TKX1gKTtcbiAgfVxuICBwaG9uZU51bWJlciA9IGAke3Bob25lTnVtYmVyfWAucmVwbGFjZSgvXFxzKi8sICcnKTtcbiAgaWYgKCFQSE9ORV9OVU1CRVJfUEFUVEVSTi50ZXN0KHBob25lTnVtYmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc21DYWxsIHBob25lTnVtYmVyIHBhcmFtICR7cGhvbmVOdW1iZXJ9YCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnZ3NtJywgYWN0aW9uLCBwaG9uZU51bWJlcl0pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIEdTTSBzaWduYWwgc3RyZW5ndGggY2hhbmdlIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBzdHJlbmd0aCBbNF0gLSBBIG51bWJlciBpbiByYW5nZSBbMCwgNF07XG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3N0cmVuZ3RoXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbVNpZ25hbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbVNpZ25hbCAoc3RyZW5ndGggPSA0KSB7XG4gIHN0cmVuZ3RoID0gcGFyc2VJbnQoc3RyZW5ndGgsIDEwKTtcbiAgaWYgKGVtdU1ldGhvZHMuR1NNX1NJR05BTF9TVFJFTkdUSFMuaW5kZXhPZihzdHJlbmd0aCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNpZ25hbCBzdHJlbmd0aCBwYXJhbSAke3N0cmVuZ3RofS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9TSUdOQUxfU1RSRU5HVEhTKX1gKTtcbiAgfVxuICBsb2cuaW5mbygnZ3NtIHNpZ25hbC1wcm9maWxlIDxzdHJlbmd0aD4gY2hhbmdlcyB0aGUgcmVwb3J0ZWQgc3RyZW5ndGggb24gbmV4dCAoMTVzKSB1cGRhdGUuJyk7XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2dzbScsICdzaWduYWwtcHJvZmlsZScsIHN0cmVuZ3RoXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIHZvaWNlIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIFsnb24nXSAtIEVpdGhlciAnb24nIG9yICdvZmYnLlxuICogQHRocm93cyB7ZXJyb3J9IElmIF9zdGF0ZV8gdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZW11TWV0aG9kcy5nc21Wb2ljZSA9IGFzeW5jIGZ1bmN0aW9uIGdzbVZvaWNlIChzdGF0ZSA9ICdvbicpIHtcbiAgLy8gZ3NtIHZvaWNlIDxzdGF0ZT4gYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHlvdXIgR1BSUyBjb25uZWN0aW9uXG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMpLmluZGV4T2Yoc3RhdGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc20gdm9pY2Ugc3RhdGUgcGFyYW0gJHtzdGF0ZX0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5HU01fVk9JQ0VfU1RBVEVTKX1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydnc20nLCAndm9pY2UnLCBzdGF0ZV0pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIG5ldHdvcmsgc3BlZWQgY2hhbmdlIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWVkIFsnZnVsbCddIC0gT25lIG9mIHBvc3NpYmxlIE5FVFdPUktfU1BFRUQgdmFsdWVzLlxuICogQHRocm93cyB7ZXJyb3J9IElmIF9zcGVlZF8gdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZW11TWV0aG9kcy5uZXR3b3JrU3BlZWQgPSBhc3luYyBmdW5jdGlvbiBuZXR3b3JrU3BlZWQgKHNwZWVkID0gJ2Z1bGwnKSB7XG4gIC8vIG5ldHdvcmsgc3BlZWQgPHNwZWVkPiBhbGxvd3MgeW91IHRvIHNldCB0aGUgbmV0d29yayBzcGVlZCBlbXVsYXRpb24uXG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLk5FVFdPUktfU1BFRUQpLmluZGV4T2Yoc3BlZWQpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXR3b3JrIHNwZWVkIHBhcmFtICR7c3BlZWR9LiBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuTkVUV09SS19TUEVFRCl9YCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnbmV0d29yaycsICdzcGVlZCcsIHNwZWVkXSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNUZWxuZXRPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXhlY1RpbWVvdXQgWzYwMDAwXSBBIHRpbWVvdXQgdXNlZCB0byB3YWl0IGZvciBhIHNlcnZlclxuICogcmVwbHkgdG8gdGhlIGdpdmVuIGNvbW1hbmRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25uVGltZW91dCBbNTAwMF0gQ29uc29sZSBjb25uZWN0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5pdFRpbWVvdXQgWzUwMDBdIFRlbG5ldCBjb25zb2xlIGluaXRpYWxpemF0aW9uIHRpbWVvdXRcbiAqIGluIG1pbGxpc2Vjb25kcyAodGhlIHRpbWUgYmV0d2VlbiBjb25uZWN0aW9uIGhhcHBlbnMgYW5kIHRoZSBjb21tYW5kIHByb21wdFxuICogaXMgYXZhaWxhYmxlKVxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gcG9ydCBUaGUgZW11bGF0b3IgcG9ydCBudW1iZXIuIFRoZSBtZXRob2Qgd2lsbCB0cnkgdG8gcGFyc2UgaXRcbiAqIGZyb20gdGhlIGN1cnJlbnQgZGV2aWNlIGlkZW50aWZpZXIgaWYgdW5zZXRcbiAqL1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCB0aHJvdWdoIGVtdWxhdG9yIHRlbG5ldCBjb25zb2xlIGludGVyZmFjZSBhbmQgcmV0dXJucyBpdHMgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fHN0cmluZ30gY21kIC0gVGhlIGFjdHVhbCBjb21tYW5kIHRvIGV4ZWN1dGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL3J1bi9lbXVsYXRvci1jb25zb2xlIGZvciBtb3JlIGRldGFpbHNcbiAqIG9uIGF2YWlsYWJsZSBjb21tYW5kc1xuICogQHBhcmFtIHtFeGVjVGVsbmV0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbW1hbmQgb3V0cHV0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNvbm5lY3RpbmcgdG8gdGhlIFRlbG5ldCBjb25zb2xlXG4gKiBvciBpZiB0aGUgZ2l2ZW4gY29tbWFuZCByZXR1cm5lZCBub24tT0sgcmVzcG9uc2VcbiAqL1xuZW11TWV0aG9kcy5leGVjRW11Q29uc29sZUNvbW1hbmQgPSBhc3luYyBmdW5jdGlvbiBleGVjVGVsbmV0IChjbWQsIG9wdHMgPSB7fSkge1xuICBsZXQgcG9ydCA9IHBhcnNlSW50KG9wdHMucG9ydCwgMTApO1xuICBpZiAoIXBvcnQpIHtcbiAgICBjb25zdCBwb3J0TWF0Y2ggPSAvZW11bGF0b3ItKFxcZCspL2kuZXhlYyh0aGlzLmN1ckRldmljZUlkKTtcbiAgICBpZiAoIXBvcnRNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGNvbnNvbGUgcG9ydCBudW1iZXIgZnJvbSB0aGUgZGV2aWNlIGlkZW50aWZpZXIgJyR7dGhpcy5jdXJEZXZpY2VJZH0nLiBgICtcbiAgICAgICAgYElzIGl0IGFuIGVtdWxhdG9yP2ApO1xuICAgIH1cbiAgICBwb3J0ID0gcGFyc2VJbnQocG9ydE1hdGNoWzFdLCAxMCk7XG4gIH1cbiAgY29uc3QgaG9zdCA9ICcxMjcuMC4wLjEnO1xuICBjb25zdCB7XG4gICAgZXhlY1RpbWVvdXQgPSA2MDAwMCxcbiAgICBjb25uVGltZW91dCA9IDUwMDAsXG4gICAgaW5pdFRpbWVvdXQgPSA1MDAwLFxuICB9ID0gb3B0cztcbiAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuXG4gIGNvbnN0IG9rRmxhZyA9IC9eT0skL207XG4gIGNvbnN0IG5va0ZsYWcgPSAvXktPXFxiL207XG4gIGNvbnN0IGVvbCA9ICdcXHJcXG4nO1xuICBjb25zdCBjbGllbnQgPSBuZXQuY29ubmVjdCh7XG4gICAgaG9zdCxcbiAgICBwb3J0LFxuICB9KTtcblxuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNvbm5UaW1lb3V0T2JqID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fSBgICtcbiAgICAgICAgYGFmdGVyICR7Y29ublRpbWVvdXR9bXNgKSksIGNvbm5UaW1lb3V0KTtcbiAgICBsZXQgZXhlY1RpbWVvdXRPYmo7XG4gICAgbGV0IGluaXRUaW1lb3V0T2JqO1xuICAgIGxldCBpc0NvbW1hbmRTZW50ID0gZmFsc2U7XG4gICAgbGV0IHNlcnZlclJlc3BvbnNlID0gW107XG5cbiAgICBjbGllbnQub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGNvbm5UaW1lb3V0T2JqKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCkpO1xuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uY2UoJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoY29ublRpbWVvdXRPYmopO1xuICAgICAgaW5pdFRpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaWQgbm90IGdldCB0aGUgaW5pdGlhbCByZXNwb25zZSBmcm9tIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fSBgICtcbiAgICAgICAgICBgYWZ0ZXIgJHtpbml0VGltZW91dH1tc2ApKSwgaW5pdFRpbWVvdXQpO1xuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBzZXJ2ZXJSZXNwb25zZS5wdXNoKGNodW5rKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc2VydmVyUmVzcG9uc2UpLnRvU3RyaW5nKCd1dGY4JykudHJpbSgpO1xuICAgICAgaWYgKG9rRmxhZy50ZXN0KG91dHB1dCkpIHtcbiAgICAgICAgLy8gVGhlIGluaXRpYWwgaW5jb21pbmcgZGF0YSBjaHVuayBjb25maXJtcyB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5IGZvciBpbnB1dFxuICAgICAgICBpZiAoIWlzQ29tbWFuZFNlbnQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoaW5pdFRpbWVvdXRPYmopO1xuICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gW107XG4gICAgICAgICAgY29uc3QgY21kU3RyID0gXy5pc0FycmF5KGNtZCkgPyB1dGlsLnF1b3RlKGNtZCkgOiBgJHtjbWR9YDtcbiAgICAgICAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyBFbXVsYXRvciBjb25zb2xlIGNvbW1hbmQ6ICR7Y21kU3RyfWApO1xuICAgICAgICAgIGNsaWVudC53cml0ZShjbWRTdHIpO1xuICAgICAgICAgIGNsaWVudC53cml0ZShlb2wpO1xuICAgICAgICAgIGlzQ29tbWFuZFNlbnQgPSB0cnVlO1xuICAgICAgICAgIGV4ZWNUaW1lb3V0T2JqID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmcm9tIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fSBgICtcbiAgICAgICAgICAgICAgYHRvICcke2NtZH0nIGNvbW1hbmQgYWZ0ZXIgJHtleGVjVGltZW91dH1tc2ApKSwgZXhlY1RpbWVvdXQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVvdXQoZXhlY1RpbWVvdXRPYmopO1xuICAgICAgICBjbGllbnQuZW5kKCk7XG4gICAgICAgIGNvbnN0IG91dHB1dEFyciA9IG91dHB1dC5zcGxpdChlb2wpO1xuICAgICAgICAvLyByZW1vdmUgdGhlIHJlZHVuZGFudCBPSyBmbGFnIGZyb20gdGhlIHJlc3VsdGluZyBjb21tYW5kIG91dHB1dFxuICAgICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXRBcnIuc2xpY2UoMCwgb3V0cHV0QXJyLmxlbmd0aCAtIDEpLmpvaW4oJ1xcbicpLnRyaW0oKSk7XG4gICAgICB9IGVsc2UgaWYgKG5va0ZsYWcudGVzdChvdXRwdXQpKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpbml0VGltZW91dE9iaik7XG4gICAgICAgIGNsZWFyVGltZW91dChleGVjVGltZW91dE9iaik7XG4gICAgICAgIGNsaWVudC5lbmQoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QXJyID0gb3V0cHV0LnNwbGl0KGVvbCk7XG4gICAgICAgIHJldHVybiByZWplY3QoXy50cmltKF8ubGFzdChvdXRwdXRBcnIpKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbXVWZXJzaW9uSW5mb1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZXZpc2lvbiBUaGUgYWN0dWFsIHJldmlzaW9uIG51bWJlciwgZm9yIGV4YW1wbGUgJzMwLjAuNSdcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gYnVpbGRJZCBUaGUgYnVpbGQgaWRlbnRpZmllciwgZm9yIGV4YW1wbGUgNjMwNjA0N1xuICovXG5cbi8qKlxuICogUmV0cmlldmVzIGVtdWxhdG9yIHZlcnNpb24gZnJvbSB0aGUgZmlsZSBzeXN0ZW1cbiAqXG4gKiBAcmV0dXJucyB7RW11VmVyc2lvbkluZm99IElmIG5vIHZlcnNpb24gaW5mbyBjb3VsZCBiZSBwYXJzZWQgdGhlbiBhbiBlbXB0eVxuICogb2JqZWN0IGlzIHJldHVybmVkXG4gKi9cbmVtdU1ldGhvZHMuZ2V0RW11VmVyc2lvbkluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRFbXVWZXJzaW9uSW5mbyAoKSB7XG4gIGNvbnN0IHByb3BzUGF0aCA9IHBhdGguam9pbih0aGlzLnNka1Jvb3QsICdlbXVsYXRvcicsICdzb3VyY2UucHJvcGVydGllcycpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwcm9wc1BhdGgpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BzUGF0aCwgJ3V0ZjgnKTtcbiAgY29uc3QgcmV2aXNpb25NYXRjaCA9IC9eUGtnXFwuUmV2aXNpb249KFtcXGQuXSspJC9tLmV4ZWMoY29udGVudCk7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBpZiAocmV2aXNpb25NYXRjaCkge1xuICAgIHJlc3VsdC5yZXZpc2lvbiA9IHJldmlzaW9uTWF0Y2hbMV07XG4gIH1cbiAgY29uc3QgYnVpbGRJZE1hdGNoID0gL15Qa2dcXC5CdWlsZElkPShcXGQrKSQvbS5leGVjKGNvbnRlbnQpO1xuICBpZiAoYnVpbGRJZE1hdGNoKSB7XG4gICAgcmVzdWx0LmJ1aWxkSWQgPSBwYXJzZUludChidWlsZElkTWF0Y2hbMV0sIDEwKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZW11bGF0b3IgaW1hZ2UgcHJvcGVydGllcyBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmROYW1lIEVtdWxhdG9yIG5hbWUuIFNob3VsZCBOT1Qgc3RhcnQgd2l0aCAnQCcgY2hhcmFjdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBleHRyYWN0aW5nIHRoZSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgY29udGVudCBvZiBlbXVsYXRvciBpbWFnZSBwcm9wZXJ0aWVzIGZpbGUuXG4gKiBVc3VhbGx5IHRoaXMgY29uZmlndXJhdGlvbiAuaW5pIGZpbGUgaGFzIHRoZSBmb2xsb3dpbmcgY29udGVudDpcbiAqICAgYXZkLmluaS5lbmNvZGluZz1VVEYtOFxuICogICBwYXRoPS9Vc2Vycy91c2VybmFtZS8uYW5kcm9pZC9hdmQvUGl4ZWxfWExfQVBJXzMwLmF2ZFxuICogICBwYXRoLnJlbD1hdmQvUGl4ZWxfWExfQVBJXzMwLmF2ZFxuICogICB0YXJnZXQ9YW5kcm9pZC0zMFxuICovXG5lbXVNZXRob2RzLmdldEVtdUltYWdlUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uIGdldEVtdUltYWdlUHJvcGVydGllcyAoYXZkTmFtZSkge1xuICBjb25zdCBhdmRzID0gYXdhaXQgbGlzdEVtdWxhdG9ycygpO1xuICBjb25zdCBhdmQgPSBhdmRzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PT0gYXZkTmFtZSk7XG4gIGlmICghYXZkKSB7XG4gICAgbGV0IG1zZyA9IGBDYW5ub3QgZmluZCAnJHthdmROYW1lfScgZW11bGF0b3IuIGA7XG4gICAgaWYgKF8uaXNFbXB0eShhdmRzKSkge1xuICAgICAgbXNnICs9IGBObyBlbXVsYXRvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIG9uIHlvdXIgc3lzdGVtYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9IGBBdmFpbGFibGUgYXZkIG5hbWVzIGFyZTogJHthdmRzLm1hcCgoe25hbWV9KSA9PiBuYW1lKX1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gaW5pLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGF2ZC5jb25maWcsICd1dGY4JykpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiBlbXVsYXRvciBleGlzdHMgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGF2ZHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgLSBUaGUgbmFtZSBvZiBlbXVsYXRvciB0byB2ZXJpZnkgZm9yIGV4aXN0ZW5jZS5cbiAqIFNob3VsZCBOT1Qgc3RhcnQgd2l0aCAnQCcgY2hhcmFjdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtdWxhdG9yIHdpdGggZ2l2ZW4gbmFtZSBkb2VzIG5vdCBleGlzdC5cbiAqL1xuZW11TWV0aG9kcy5jaGVja0F2ZEV4aXN0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tBdmRFeGlzdCAoYXZkTmFtZSkge1xuICBjb25zdCBhdmRzID0gYXdhaXQgbGlzdEVtdWxhdG9ycygpO1xuICBpZiAoIWF2ZHMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSBhdmROYW1lKSkge1xuICAgIGxldCBtc2cgPSBgQXZkICcke2F2ZE5hbWV9JyBpcyBub3QgYXZhaWxhYmxlLiBgO1xuICAgIGlmIChfLmlzRW1wdHkoYXZkcykpIHtcbiAgICAgIG1zZyArPSBgTm8gZW11bGF0b3JzIGhhdmUgYmVlbiBkZXRlY3RlZCBvbiB5b3VyIHN5c3RlbWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSBgUGxlYXNlIHNlbGVjdCB5b3VyIGF2ZCBuYW1lIGZyb20gb25lIG9mIHRoZXNlOiAnJHthdmRzLm1hcCgoe25hbWV9KSA9PiBuYW1lKX0nYDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbXVNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYWRiLWVtdS1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
397
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIl0sIm5hbWVzIjpbIlBIT05FX05VTUJFUl9QQVRURVJOIiwiZW11TWV0aG9kcyIsIlBPV0VSX0FDX1NUQVRFUyIsIk9iamVjdCIsImZyZWV6ZSIsIlBPV0VSX0FDX09OIiwiUE9XRVJfQUNfT0ZGIiwiR1NNX0NBTExfQUNUSU9OUyIsIkdTTV9DQUxMIiwiR1NNX0FDQ0VQVCIsIkdTTV9DQU5DRUwiLCJHU01fSE9MRCIsIkdTTV9WT0lDRV9TVEFURVMiLCJHU01fVk9JQ0VfVU5SRUdJU1RFUkVEIiwiR1NNX1ZPSUNFX0hPTUUiLCJHU01fVk9JQ0VfUk9BTUlORyIsIkdTTV9WT0lDRV9TRUFSQ0hJTkciLCJHU01fVk9JQ0VfREVOSUVEIiwiR1NNX1ZPSUNFX09GRiIsIkdTTV9WT0lDRV9PTiIsIkdTTV9TSUdOQUxfU1RSRU5HVEhTIiwiTkVUV09SS19TUEVFRCIsIkdTTSIsIlNDU0QiLCJHUFJTIiwiRURHRSIsIlVNVFMiLCJIU0RQQSIsIkxURSIsIkVWRE8iLCJGVUxMIiwiU0VOU09SUyIsIkFDQ0VMRVJBVElPTiIsIkdZUk9TQ09QRSIsIk1BR05FVElDX0ZJRUxEIiwiT1JJRU5UQVRJT04iLCJURU1QRVJBVFVSRSIsIlBST1hJTUlUWSIsIkxJR0hUIiwiUFJFU1NVUkUiLCJIVU1JRElUWSIsIk1BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCIsIkdZUk9TQ09QRV9VTkNBTElCUkFURUQiLCJISU5HRV9BTkdMRTAiLCJISU5HRV9BTkdMRTEiLCJISU5HRV9BTkdMRTIiLCJIRUFSVF9SQVRFIiwiUkdCQ19MSUdIVCIsImxpc3RFbXVsYXRvcnMiLCJhdmRzUm9vdCIsInByb2Nlc3MiLCJlbnYiLCJBTkRST0lEX0FWRF9IT01FIiwiZ2V0QXZkQ29uZmlnUGF0aHMiLCJsb2ciLCJ3YXJuIiwicHJlZnNSb290IiwicGF0aCIsInJlc29sdmUiLCJkZWJ1ZyIsImNvbmZpZ3MiLCJmcyIsImdsb2IiLCJjd2QiLCJhYnNvbHV0ZSIsIm1hcCIsImNvbmZQYXRoIiwiYXZkTmFtZSIsImJhc2VuYW1lIiwic3BsaXQiLCJzbGljZSIsImpvaW4iLCJuYW1lIiwiY29uZmlnIiwiZmlsdGVyIiwiXyIsInRyaW0iLCJpc0VtdWxhdG9yQ29ubmVjdGVkIiwiZW11bGF0b3JzIiwiZ2V0Q29ubmVjdGVkRW11bGF0b3JzIiwiZmluZCIsIngiLCJ1ZGlkIiwiY3VyRGV2aWNlSWQiLCJ2ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCIsIkVycm9yIiwiZmluZ2VycHJpbnQiLCJmaW5nZXJwcmludElkIiwibGV2ZWwiLCJnZXRBcGlMZXZlbCIsImFkYkV4ZWNFbXUiLCJyb3RhdGUiLCJwb3dlckFDIiwic3RhdGUiLCJ2YWx1ZXMiLCJpbmRleE9mIiwiVHlwZUVycm9yIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwidmFsdWUiLCJpbmNsdWRlcyIsImlzTmlsIiwicG93ZXJDYXBhY2l0eSIsInBlcmNlbnQiLCJwYXJzZUludCIsImlzTmFOIiwicG93ZXJPRkYiLCJzZW5kU01TIiwicGhvbmVOdW1iZXIiLCJtZXNzYWdlIiwicmVwbGFjZSIsInRlc3QiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic3RyZW5ndGgiLCJpbmZvIiwiZ3NtVm9pY2UiLCJuZXR3b3JrU3BlZWQiLCJzcGVlZCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImV4ZWNUZWxuZXQiLCJjbWQiLCJvcHRzIiwicG9ydCIsInBvcnRNYXRjaCIsImV4ZWMiLCJob3N0IiwiZXhlY1RpbWVvdXQiLCJjb25uVGltZW91dCIsImluaXRUaW1lb3V0IiwicmVzZXRUZWxuZXRBdXRoVG9rZW4iLCJva0ZsYWciLCJub2tGbGFnIiwiZW9sIiwiY2xpZW50IiwibmV0IiwiY29ubmVjdCIsIkIiLCJyZWplY3QiLCJjb25uVGltZW91dE9iaiIsInNldFRpbWVvdXQiLCJleGVjVGltZW91dE9iaiIsImluaXRUaW1lb3V0T2JqIiwiaXNDb21tYW5kU2VudCIsInNlcnZlclJlc3BvbnNlIiwib25jZSIsImUiLCJjbGVhclRpbWVvdXQiLCJvbiIsImNodW5rIiwicHVzaCIsIm91dHB1dCIsIkJ1ZmZlciIsImNvbmNhdCIsInRvU3RyaW5nIiwiY21kU3RyIiwiaXNBcnJheSIsInV0aWwiLCJxdW90ZSIsIndyaXRlIiwiZW5kIiwib3V0cHV0QXJyIiwibGVuZ3RoIiwibGFzdCIsImdldEVtdVZlcnNpb25JbmZvIiwicHJvcHNQYXRoIiwic2RrUm9vdCIsImV4aXN0cyIsImNvbnRlbnQiLCJyZWFkRmlsZSIsInJldmlzaW9uTWF0Y2giLCJyZXN1bHQiLCJyZXZpc2lvbiIsImJ1aWxkSWRNYXRjaCIsImJ1aWxkSWQiLCJnZXRFbXVJbWFnZVByb3BlcnRpZXMiLCJhdmRzIiwiYXZkIiwibXNnIiwiaXNFbXB0eSIsImluaSIsInBhcnNlIiwiY2hlY2tBdmRFeGlzdCIsInNvbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsb0JBQW9CLEdBQUcscURBQTdCO0FBRUEsTUFBTUMsVUFBVSxHQUFHLEVBQW5CO0FBQ0FBLFVBQVUsQ0FBQ0MsZUFBWCxHQUE2QkMsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDekNDLEVBQUFBLFdBQVcsRUFBRSxJQUQ0QjtBQUV6Q0MsRUFBQUEsWUFBWSxFQUFFO0FBRjJCLENBQWQsQ0FBN0I7QUFJQUwsVUFBVSxDQUFDTSxnQkFBWCxHQUE4QkosTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDMUNJLEVBQUFBLFFBQVEsRUFBRSxNQURnQztBQUUxQ0MsRUFBQUEsVUFBVSxFQUFFLFFBRjhCO0FBRzFDQyxFQUFBQSxVQUFVLEVBQUUsUUFIOEI7QUFJMUNDLEVBQUFBLFFBQVEsRUFBRTtBQUpnQyxDQUFkLENBQTlCO0FBTUFWLFVBQVUsQ0FBQ1csZ0JBQVgsR0FBOEJULE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzFDUyxFQUFBQSxzQkFBc0IsRUFBRSxjQURrQjtBQUUxQ0MsRUFB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QUNELENBYkQ7O0FBc0JBeEUsVUFBVSxDQUFDc0wsYUFBWCxHQUEyQixlQUFlQSxhQUFmLENBQThCcEgsT0FBOUIsRUFBdUM7QUFDaEUsUUFBTThHLElBQUksR0FBRyxNQUFNakksYUFBYSxFQUFoQzs7QUFDQSxNQUFJLENBQUNpSSxJQUFJLENBQUNPLElBQUwsQ0FBVSxDQUFDO0FBQUNoSCxJQUFBQTtBQUFELEdBQUQsS0FBWUEsSUFBSSxLQUFLTCxPQUEvQixDQUFMLEVBQThDO0FBQzVDLFFBQUlnSCxHQUFHLEdBQUksUUFBT2hILE9BQVEsc0JBQTFCOztBQUNBLFFBQUlRLGdCQUFFeUcsT0FBRixDQUFVSCxJQUFWLENBQUosRUFBcUI7QUFDbkJFLE1BQUFBLEdBQUcsSUFBSyxnREFBUjtBQUNELEtBRkQsTUFFTztBQUNMQSxNQUFBQSxHQUFHLElBQUssbURBQWtERixJQUFJLENBQUNoSCxHQUFMLENBQVMsQ0FBQztBQUFDTyxRQUFBQTtBQUFELE9BQUQsS0FBWUEsSUFBckIsQ0FBMkIsR0FBckY7QUFDRDs7QUFDRCxVQUFNLElBQUlhLEtBQUosQ0FBVThGLEdBQVYsQ0FBTjtBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNELENBWkQ7O2VBY2VsTCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IHsgdXRpbCwgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgaW5pIGZyb20gJ2luaSc7XG5cbmNvbnN0IFBIT05FX05VTUJFUl9QQVRURVJOID0gL15bK10/WyhdP1swLTldKlspXT9bLVxccy5dP1swLTldKlstXFxzLl0/WzAtOV17Mix9JC9pbTtcblxuY29uc3QgZW11TWV0aG9kcyA9IHt9O1xuZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMgPSBPYmplY3QuZnJlZXplKHtcbiAgUE9XRVJfQUNfT046ICdvbicsXG4gIFBPV0VSX0FDX09GRjogJ29mZidcbn0pO1xuZW11TWV0aG9kcy5HU01fQ0FMTF9BQ1RJT05TID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEdTTV9DQUxMOiAnY2FsbCcsXG4gIEdTTV9BQ0NFUFQ6ICdhY2NlcHQnLFxuICBHU01fQ0FOQ0VMOiAnY2FuY2VsJyxcbiAgR1NNX0hPTEQ6ICdob2xkJ1xufSk7XG5lbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMgPSBPYmplY3QuZnJlZXplKHtcbiAgR1NNX1ZPSUNFX1VOUkVHSVNURVJFRDogJ3VucmVnaXN0ZXJlZCcsXG4gIEdTTV9WT0lDRV9IT01FOiAnaG9tZScsXG4gIEdTTV9WT0lDRV9ST0FNSU5HOiAncm9hbWluZycsXG4gIEdTTV9WT0lDRV9TRUFSQ0hJTkc6ICdzZWFyY2hpbmcnLFxuICBHU01fVk9JQ0VfREVOSUVEOiAnZGVuaWVkJyxcbiAgR1NNX1ZPSUNFX09GRjogJ29mZicsXG4gIEdTTV9WT0lDRV9PTjogJ29uJ1xufSk7XG5lbXVNZXRob2RzLkdTTV9TSUdOQUxfU1RSRU5HVEhTID0gWzAsIDEsIDIsIDMsIDRdO1xuXG5lbXVNZXRob2RzLk5FVFdPUktfU1BFRUQgPSBPYmplY3QuZnJlZXplKHtcbiAgR1NNOiAnZ3NtJywgLy8gR1NNL0NTRCAodXA6IDE0LjQsIGRvd246IDE0LjQpLlxuICBTQ1NEOiAnc2NzZCcsIC8vIEhTQ1NEICh1cDogMTQuNCwgZG93bjogNTcuNikuXG4gIEdQUlM6ICdncHJzJywgLy8gR1BSUyAodXA6IDI4LjgsIGRvd246IDU3LjYpLlxuICBFREdFOiAnZWRnZScsIC8vIEVER0UvRUdQUlMgKHVwOiA0NzMuNiwgZG93bjogNDczLjYpLlxuICBVTVRTOiAndW10cycsIC8vIFVNVFMvM0cgKHVwOiAzODQuMCwgZG93bjogMzg0LjApLlxuICBIU0RQQTogJ2hzZHBhJywgLy8gSFNEUEEgKHVwOiA1NzYwLjAsIGRvd246IDEzLDk4MC4wKS5cbiAgTFRFOiAnbHRlJywgLy8gTFRFICh1cDogNTgsMDAwLCBkb3duOiAxNzMsMDAwKS5cbiAgRVZETzogJ2V2ZG8nLCAvLyBFVkRPICh1cDogNzUsMDAwLCBkb3duOiAyODAsMDAwKS5cbiAgRlVMTDogJ2Z1bGwnIC8vIE5vIGxpbWl0LCB0aGUgZGVmYXVsdCAodXA6IDAuMCwgZG93bjogMC4wKS5cbn0pO1xuXG5lbXVNZXRob2RzLlNFTlNPUlMgPSBPYmplY3QuZnJlZXplKHtcbiAgQUNDRUxFUkFUSU9OOiAnYWNjZWxlcmF0aW9uJyxcbiAgR1lST1NDT1BFOiAnZ3lyb3Njb3BlJyxcbiAgTUFHTkVUSUNfRklFTEQ6ICdtYWduZXRpYy1maWVsZCcsXG4gIE9SSUVOVEFUSU9OOiAnb3JpZW50YXRpb24nLFxuICBURU1QRVJBVFVSRTogJ3RlbXBlcmF0dXJlJyxcbiAgUFJPWElNSVRZOiAncHJveGltaXR5JyxcbiAgTElHSFQ6ICdsaWdodCcsXG4gIFBSRVNTVVJFOiAncHJlc3N1cmUnLFxuICBIVU1JRElUWTogJ2h1bWlkaXR5JyxcbiAgTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEOiAnbWFnbmV0aWMtZmllbGQtdW5jYWxpYnJhdGVkJyxcbiAgR1lST1NDT1BFX1VOQ0FMSUJSQVRFRDogJ2d5cm9zY29wZS11bmNhbGlicmF0ZWQnLFxuICBISU5HRV9BTkdMRTA6ICdoaW5nZS1hbmdsZTAnLFxuICBISU5HRV9BTkdMRTE6ICdoaW5nZS1hbmdsZTEnLFxuICBISU5HRV9BTkdMRTI6ICdoaW5nZS1hbmdsZTInLFxuICBIRUFSVF9SQVRFOiAnaGVhcnQtcmF0ZScsXG4gIFJHQkNfTElHSFQ6ICdyZ2JjLWxpZ2h0Jyxcbn0pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVtdUluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIEVtdWxhdG9yIG5hbWUsIGZvciBleGFtcGxlIGBQaXhlbF9YTF9BUElfMzBgXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29uZmlnIEZ1bGwgcGF0aCB0byB0aGUgZW11bGF0b3IgY29uZmlnIC5pbmkgZmlsZSxcbiAqIGZvciBleGFtcGxlIGAvVXNlcnMvdXNlci8uYW5kcm9pZC9hdmQvUGl4ZWxfWExfQVBJXzMwLmluaWBcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgQW5kcm9pZCBlbXVsYXRvcnNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8RW11SW5mbz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3RFbXVsYXRvcnMgKCkge1xuICBsZXQgYXZkc1Jvb3QgPSBwcm9jZXNzLmVudi5BTkRST0lEX0FWRF9IT01FO1xuICBpZiAoYXdhaXQgZGlyRXhpc3RzKGF2ZHNSb290KSkge1xuICAgIHJldHVybiBhd2FpdCBnZXRBdmRDb25maWdQYXRocyhhdmRzUm9vdCk7XG4gIH1cblxuICBpZiAoYXZkc1Jvb3QpIHtcbiAgICBsb2cud2FybihgVGhlIHZhbHVlIG9mIHRoZSBBTkRST0lEX0FWRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlICcke2F2ZHNSb290fScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICB9XG5cbiAgY29uc3QgcHJlZnNSb290ID0gYXdhaXQgZ2V0QW5kcm9pZFByZWZzUm9vdCgpO1xuICBpZiAoIXByZWZzUm9vdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGF2ZHNSb290ID0gcGF0aC5yZXNvbHZlKHByZWZzUm9vdCwgJ2F2ZCcpO1xuICBpZiAoIWF3YWl0IGRpckV4aXN0cyhhdmRzUm9vdCkpIHtcbiAgICBsb2cuZGVidWcoYFZpcnR1YWwgZGV2aWNlcyBjb25maWcgcm9vdCAnJHthdmRzUm9vdH0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYXdhaXQgZ2V0QXZkQ29uZmlnUGF0aHMoYXZkc1Jvb3QpO1xufVxuXG4vKipcbiAqIEdldCBjb25maWd1cmF0aW9uIHBhdGhzIG9mIGFsbCB2aXJ0dWFsIGRldmljZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkc1Jvb3QgUGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIEFWRCAuaW5pIGZpbGVzXG4gKiBAcmV0dXJucyB7QXJyYXk8RW11SW5mbz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEF2ZENvbmZpZ1BhdGhzIChhdmRzUm9vdCkge1xuICBjb25zdCBjb25maWdzID0gYXdhaXQgZnMuZ2xvYignKi5pbmknLCB7XG4gICAgY3dkOiBhdmRzUm9vdCxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiBjb25maWdzLm1hcCgoY29uZlBhdGgpID0+IHtcbiAgICBjb25zdCBhdmROYW1lID0gcGF0aC5iYXNlbmFtZShjb25mUGF0aCkuc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkuam9pbignLicpO1xuICAgIHJldHVybiB7bmFtZTogYXZkTmFtZSwgY29uZmlnOiBjb25mUGF0aH07XG4gIH0pLmZpbHRlcigoe25hbWV9KSA9PiBfLnRyaW0obmFtZSkpO1xufVxuXG4vKipcbiAqIENoZWNrIHRoZSBlbXVsYXRvciBzdGF0ZS5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIEVtdWxhdG9yIGlzIHZpc2libGUgdG8gYWRiLlxuICovXG5lbXVNZXRob2RzLmlzRW11bGF0b3JDb25uZWN0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0VtdWxhdG9yQ29ubmVjdGVkICgpIHtcbiAgbGV0IGVtdWxhdG9ycyA9IGF3YWl0IHRoaXMuZ2V0Q29ubmVjdGVkRW11bGF0b3JzKCk7XG4gIHJldHVybiAhIV8uZmluZChlbXVsYXRvcnMsICh4KSA9PiB4ICYmIHgudWRpZCA9PT0gdGhpcy5jdXJEZXZpY2VJZCk7XG59O1xuXG4vKipcbiAqIFZlcmlmeSB0aGUgZW11bGF0b3IgaXMgY29ubmVjdGVkLlxuICpcbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBFbXVsYXRvciBpcyBub3QgdmlzaWJsZSB0byBhZGIuXG4gKi9cbmVtdU1ldGhvZHMudmVyaWZ5RW11bGF0b3JDb25uZWN0ZWQgPSBhc3luYyBmdW5jdGlvbiB2ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCAoKSB7XG4gIGlmICghKGF3YWl0IHRoaXMuaXNFbXVsYXRvckNvbm5lY3RlZCgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGVtdWxhdG9yIFwiJHt0aGlzLmN1ckRldmljZUlkfVwiIHdhcyB1bmV4cGVjdGVkbHkgZGlzY29ubmVjdGVkYCk7XG4gIH1cbn07XG5cbi8qKlxuICogRW11bGF0ZSBmaW5nZXJwcmludCB0b3VjaCBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaW5nZXJwcmludElkIC0gVGhlIElEIG9mIHRoZSBmaW5nZXJwcmludC5cbiAqL1xuZW11TWV0aG9kcy5maW5nZXJwcmludCA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50IChmaW5nZXJwcmludElkKSB7XG4gIGlmICghZmluZ2VycHJpbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmluZ2VycHJpbnQgaWQgcGFyYW1ldGVyIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG4gIC8vIHRoZSBtZXRob2QgdXNlZCBvbmx5IHdvcmtzIGZvciBBUEkgbGV2ZWwgMjMgYW5kIGFib3ZlXG4gIGxldCBsZXZlbCA9IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGxldmVsIDwgMjMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERldmljZSBBUEkgTGV2ZWwgbXVzdCBiZSA+PSAyMy4gQ3VycmVudCBBcGkgbGV2ZWwgJyR7bGV2ZWx9J2ApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2ZpbmdlcicsICd0b3VjaCcsIGZpbmdlcnByaW50SWRdKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlIHRoZSBkaXNwbGF5IG9yaWVudGF0aW9uIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKiBUaGUgb3JpZW50YXRpb24gaXMgY2hhbmdlZCAoUEkvMiBpcyBhZGRlZCkgZXZlcnkgdGltZVxuICogdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICovXG5lbXVNZXRob2RzLnJvdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHJvdGF0ZSAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3JvdGF0ZSddKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBwb3dlciBzdGF0ZSBjaGFuZ2Ugb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgWydvbiddIC0gRWl0aGVyICdvbicgb3IgJ29mZicuXG4gKi9cbmVtdU1ldGhvZHMucG93ZXJBQyA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQUMgKHN0YXRlID0gJ29uJykge1xuICBpZiAoXy52YWx1ZXMoZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMpLmluZGV4T2Yoc3RhdGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdyb25nIHBvd2VyIEFDIHN0YXRlIHNlbnQgJyR7c3RhdGV9Jy4gYFxuICAgICAgKyBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLlBPV0VSX0FDX1NUQVRFUyl9XWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3Bvd2VyJywgJ2FjJywgc3RhdGVdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5zb3JzIHZhbHVlcyBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZW5zb3IgLSBTZW5zb3IgdHlwZSBkZWNsYXJlZCBpbiBTRU5TT1JTIGl0ZW1zLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZSAgLSBOdW1iZXIgdG8gc2V0IGFzIHRoZSBzZW5zb3IgdmFsdWUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBzZW5zb3IgdHlwZSBvciBzZW5zb3IgdmFsdWUgaXMgbm90IGRlZmluZWRcbiAqL1xuZW11TWV0aG9kcy5zZW5zb3JTZXQgPSBhc3luYyBmdW5jdGlvbiBzZW5zb3JTZXQgKHNlbnNvciwgdmFsdWUpIHtcbiAgaWYgKCFfLmluY2x1ZGVzKGVtdU1ldGhvZHMuU0VOU09SUywgc2Vuc29yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHNlbnNvciBzZW50ICcke3NlbnNvcn0nLiBgXG4gICAgICArIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuU0VOU09SUyl9XWApO1xuICB9XG4gIGlmIChfLmlzTmlsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nL2ludmFsaWQgc2Vuc29yIHZhbHVlIGFyZ3VtZW50LiBgXG4gICAgICArIGBZb3UgbmVlZCB0byBwcm92aWRlIGEgdmFsaWQgdmFsdWUgdG8gc2V0IHRvIHRoZSBzZW5zb3IgaW4gYFxuICAgICAgKyBgZm9ybWF0IDx2YWx1ZS1hPls6PHZhbHVlLWI+Wzo8dmFsdWUtYz5bLi4uXV1dLmApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3NlbnNvcicsICdzZXQnLCBzZW5zb3IsIHZhbHVlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgY2FwYWNpdHkgY2hhbmdlIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwZXJjZW50IFsxMDBdIC0gUGVyY2VudGFnZSB2YWx1ZSBpbiByYW5nZSBbMCwgMTAwXS5cbiAqL1xuZW11TWV0aG9kcy5wb3dlckNhcGFjaXR5ID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJDYXBhY2l0eSAocGVyY2VudCA9IDEwMCkge1xuICBwZXJjZW50ID0gcGFyc2VJbnQocGVyY2VudCwgMTApO1xuICBpZiAoaXNOYU4ocGVyY2VudCkgfHwgcGVyY2VudCA8IDAgfHwgcGVyY2VudCA+IDEwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBlcmNlbnRhZ2UgdmFsdWUgc2hvdWxkIGJlIHZhbGlkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDBgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydwb3dlcicsICdjYXBhY2l0eScsIHBlcmNlbnRdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBwb3dlciBvZmYgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqL1xuZW11TWV0aG9kcy5wb3dlck9GRiA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyT0ZGICgpIHtcbiAgYXdhaXQgdGhpcy5wb3dlckFDKGVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTLlBPV0VSX0FDX09GRik7XG4gIGF3YWl0IHRoaXMucG93ZXJDYXBhY2l0eSgwKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5kIFNNUyBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGhvbmVOdW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIG9mIG1lc3NhZ2Ugc2VuZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgWycnXSAtIFRoZSBtZXNzYWdlIGNvbnRlbnQuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgcGhvbmUgbnVtYmVyIGhhcyBpbnZhbGlkIGZvcm1hdC5cbiAqL1xuZW11TWV0aG9kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UgPSAnJykge1xuICBtZXNzYWdlID0gbWVzc2FnZS50cmltKCk7XG4gIGlmIChtZXNzYWdlID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VuZGluZyBhbiBTTVMgcmVxdWlyZXMgYSBtZXNzYWdlJyk7XG4gIH1cbiAgcGhvbmVOdW1iZXIgPSBgJHtwaG9uZU51bWJlcn1gLnJlcGxhY2UoL1xccyovLCAnJyk7XG4gIGlmICghUEhPTkVfTlVNQkVSX1BBVFRFUk4udGVzdChwaG9uZU51bWJlcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VuZFNNUyBwaG9uZU51bWJlciBwYXJhbSAke3Bob25lTnVtYmVyfWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3NtcycsICdzZW5kJywgcGhvbmVOdW1iZXIsIG1lc3NhZ2VdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBHU00gY2FsbCBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGhvbmVOdW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIG9mIHRoZSBjYWxsZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIFsnJ10gLSBPbmUgb2YgYXZhaWxhYmxlIEdTTSBjYWxsIGFjdGlvbnMuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgcGhvbmUgbnVtYmVyIGhhcyBpbnZhbGlkIGZvcm1hdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBfYWN0aW9uXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbUNhbGwgPSBhc3luYyBmdW5jdGlvbiBnc21DYWxsIChwaG9uZU51bWJlciwgYWN0aW9uID0gJycpIHtcbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuR1NNX0NBTExfQUNUSU9OUykuaW5kZXhPZihhY3Rpb24pID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc20gYWN0aW9uIHBhcmFtICR7YWN0aW9ufS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9DQUxMX0FDVElPTlMpfWApO1xuICB9XG4gIHBob25lTnVtYmVyID0gYCR7cGhvbmVOdW1iZXJ9YC5yZXBsYWNlKC9cXHMqLywgJycpO1xuICBpZiAoIVBIT05FX05VTUJFUl9QQVRURVJOLnRlc3QocGhvbmVOdW1iZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdzbUNhbGwgcGhvbmVOdW1iZXIgcGFyYW0gJHtwaG9uZU51bWJlcn1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydnc20nLCBhY3Rpb24sIHBob25lTnVtYmVyXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIHNpZ25hbCBzdHJlbmd0aCBjaGFuZ2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHN0cmVuZ3RoIFs0XSAtIEEgbnVtYmVyIGluIHJhbmdlIFswLCA0XTtcbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBfc3RyZW5ndGhfIHZhbHVlIGlzIGludmFsaWQuXG4gKi9cbmVtdU1ldGhvZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzdHJlbmd0aCA9IDQpIHtcbiAgc3RyZW5ndGggPSBwYXJzZUludChzdHJlbmd0aCwgMTApO1xuICBpZiAoZW11TWV0aG9kcy5HU01fU0lHTkFMX1NUUkVOR1RIUy5pbmRleE9mKHN0cmVuZ3RoKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2lnbmFsIHN0cmVuZ3RoIHBhcmFtICR7c3RyZW5ndGh9LiBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuR1NNX1NJR05BTF9TVFJFTkdUSFMpfWApO1xuICB9XG4gIGxvZy5pbmZvKCdnc20gc2lnbmFsLXByb2ZpbGUgPHN0cmVuZ3RoPiBjaGFuZ2VzIHRoZSByZXBvcnRlZCBzdHJlbmd0aCBvbiBuZXh0ICgxNXMpIHVwZGF0ZS4nKTtcbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnZ3NtJywgJ3NpZ25hbC1wcm9maWxlJywgc3RyZW5ndGhdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBHU00gdm9pY2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgWydvbiddIC0gRWl0aGVyICdvbicgb3IgJ29mZicuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3N0YXRlXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbVZvaWNlID0gYXN5bmMgZnVuY3Rpb24gZ3NtVm9pY2UgKHN0YXRlID0gJ29uJykge1xuICAvLyBnc20gdm9pY2UgPHN0YXRlPiBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgeW91ciBHUFJTIGNvbm5lY3Rpb25cbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuR1NNX1ZPSUNFX1NUQVRFUykuaW5kZXhPZihzdGF0ZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdzbSB2b2ljZSBzdGF0ZSBwYXJhbSAke3N0YXRlfS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMpfWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2dzbScsICd2b2ljZScsIHN0YXRlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgbmV0d29yayBzcGVlZCBjaGFuZ2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlZWQgWydmdWxsJ10gLSBPbmUgb2YgcG9zc2libGUgTkVUV09SS19TUEVFRCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3NwZWVkXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAoc3BlZWQgPSAnZnVsbCcpIHtcbiAgLy8gbmV0d29yayBzcGVlZCA8c3BlZWQ+IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBuZXR3b3JrIHNwZWVkIGVtdWxhdGlvbi5cbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuTkVUV09SS19TUEVFRCkuaW5kZXhPZihzcGVlZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5ldHdvcmsgc3BlZWQgcGFyYW0gJHtzcGVlZH0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWyduZXR3b3JrJywgJ3NwZWVkJywgc3BlZWRdKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXhlY1RlbG5ldE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBleGVjVGltZW91dCBbNjAwMDBdIEEgdGltZW91dCB1c2VkIHRvIHdhaXQgZm9yIGEgc2VydmVyXG4gKiByZXBseSB0byB0aGUgZ2l2ZW4gY29tbWFuZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbm5UaW1lb3V0IFs1MDAwXSBDb25zb2xlIGNvbm5lY3Rpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbml0VGltZW91dCBbNTAwMF0gVGVsbmV0IGNvbnNvbGUgaW5pdGlhbGl6YXRpb24gdGltZW91dFxuICogaW4gbWlsbGlzZWNvbmRzICh0aGUgdGltZSBiZXR3ZWVuIGNvbm5lY3Rpb24gaGFwcGVucyBhbmQgdGhlIGNvbW1hbmQgcHJvbXB0XG4gKiBpcyBhdmFpbGFibGUpXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBwb3J0IFRoZSBlbXVsYXRvciBwb3J0IG51bWJlci4gVGhlIG1ldGhvZCB3aWxsIHRyeSB0byBwYXJzZSBpdFxuICogZnJvbSB0aGUgY3VycmVudCBkZXZpY2UgaWRlbnRpZmllciBpZiB1bnNldFxuICovXG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIHRocm91Z2ggZW11bGF0b3IgdGVsbmV0IGNvbnNvbGUgaW50ZXJmYWNlIGFuZCByZXR1cm5zIGl0cyBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz58c3RyaW5nfSBjbWQgLSBUaGUgYWN0dWFsIGNvbW1hbmQgdG8gZXhlY3V0ZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vcnVuL2VtdWxhdG9yLWNvbnNvbGUgZm9yIG1vcmUgZGV0YWlsc1xuICogb24gYXZhaWxhYmxlIGNvbW1hbmRzXG4gKiBAcGFyYW0ge0V4ZWNUZWxuZXRPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY29ubmVjdGluZyB0byB0aGUgVGVsbmV0IGNvbnNvbGVcbiAqIG9yIGlmIHRoZSBnaXZlbiBjb21tYW5kIHJldHVybmVkIG5vbi1PSyByZXNwb25zZVxuICovXG5lbXVNZXRob2RzLmV4ZWNFbXVDb25zb2xlQ29tbWFuZCA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWNUZWxuZXQgKGNtZCwgb3B0cyA9IHt9KSB7XG4gIGxldCBwb3J0ID0gcGFyc2VJbnQob3B0cy5wb3J0LCAxMCk7XG4gIGlmICghcG9ydCkge1xuICAgIGNvbnN0IHBvcnRNYXRjaCA9IC9lbXVsYXRvci0oXFxkKykvaS5leGVjKHRoaXMuY3VyRGV2aWNlSWQpO1xuICAgIGlmICghcG9ydE1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgY29uc29sZSBwb3J0IG51bWJlciBmcm9tIHRoZSBkZXZpY2UgaWRlbnRpZmllciAnJHt0aGlzLmN1ckRldmljZUlkfScuIGAgK1xuICAgICAgICBgSXMgaXQgYW4gZW11bGF0b3I/YCk7XG4gICAgfVxuICAgIHBvcnQgPSBwYXJzZUludChwb3J0TWF0Y2hbMV0sIDEwKTtcbiAgfVxuICBjb25zdCBob3N0ID0gJzEyNy4wLjAuMSc7XG4gIGNvbnN0IHtcbiAgICBleGVjVGltZW91dCA9IDYwMDAwLFxuICAgIGNvbm5UaW1lb3V0ID0gNTAwMCxcbiAgICBpbml0VGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnJlc2V0VGVsbmV0QXV0aFRva2VuKCk7XG5cbiAgY29uc3Qgb2tGbGFnID0gL15PSyQvbTtcbiAgY29uc3Qgbm9rRmxhZyA9IC9eS09cXGIvbTtcbiAgY29uc3QgZW9sID0gJ1xcclxcbic7XG4gIGNvbnN0IGNsaWVudCA9IG5ldC5jb25uZWN0KHtcbiAgICBob3N0LFxuICAgIHBvcnQsXG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY29ublRpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICBgYWZ0ZXIgJHtjb25uVGltZW91dH1tc2ApKSwgY29ublRpbWVvdXQpO1xuICAgIGxldCBleGVjVGltZW91dE9iajtcbiAgICBsZXQgaW5pdFRpbWVvdXRPYmo7XG4gICAgbGV0IGlzQ29tbWFuZFNlbnQgPSBmYWxzZTtcbiAgICBsZXQgc2VydmVyUmVzcG9uc2UgPSBbXTtcblxuICAgIGNsaWVudC5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoY29ublRpbWVvdXRPYmopO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9LiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub25jZSgnY29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChjb25uVGltZW91dE9iaik7XG4gICAgICBpbml0VGltZW91dE9iaiA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpZCBub3QgZ2V0IHRoZSBpbml0aWFsIHJlc3BvbnNlIGZyb20gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICAgIGBhZnRlciAke2luaXRUaW1lb3V0fW1zYCkpLCBpbml0VGltZW91dCk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIHNlcnZlclJlc3BvbnNlLnB1c2goY2h1bmspO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzZXJ2ZXJSZXNwb25zZSkudG9TdHJpbmcoJ3V0ZjgnKS50cmltKCk7XG4gICAgICBpZiAob2tGbGFnLnRlc3Qob3V0cHV0KSkge1xuICAgICAgICAvLyBUaGUgaW5pdGlhbCBpbmNvbWluZyBkYXRhIGNodW5rIGNvbmZpcm1zIHRoZSBpbnRlcmZhY2UgaXMgcmVhZHkgZm9yIGlucHV0XG4gICAgICAgIGlmICghaXNDb21tYW5kU2VudCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChpbml0VGltZW91dE9iaik7XG4gICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSBbXTtcbiAgICAgICAgICBjb25zdCBjbWRTdHIgPSBfLmlzQXJyYXkoY21kKSA/IHV0aWwucXVvdGUoY21kKSA6IGAke2NtZH1gO1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIEVtdWxhdG9yIGNvbnNvbGUgY29tbWFuZDogJHtjbWRTdHJ9YCk7XG4gICAgICAgICAgY2xpZW50LndyaXRlKGNtZFN0cik7XG4gICAgICAgICAgY2xpZW50LndyaXRlKGVvbCk7XG4gICAgICAgICAgaXNDb21tYW5kU2VudCA9IHRydWU7XG4gICAgICAgICAgZXhlY1RpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZyb20gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICAgICAgICBgdG8gJyR7Y21kfScgY29tbWFuZCBhZnRlciAke2V4ZWNUaW1lb3V0fW1zYCkpLCBleGVjVGltZW91dCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZW91dChleGVjVGltZW91dE9iaik7XG4gICAgICAgIGNsaWVudC5lbmQoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QXJyID0gb3V0cHV0LnNwbGl0KGVvbCk7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgcmVkdW5kYW50IE9LIGZsYWcgZnJvbSB0aGUgcmVzdWx0aW5nIGNvbW1hbmQgb3V0cHV0XG4gICAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dEFyci5zbGljZSgwLCBvdXRwdXRBcnIubGVuZ3RoIC0gMSkuam9pbignXFxuJykudHJpbSgpKTtcbiAgICAgIH0gZWxzZSBpZiAobm9rRmxhZy50ZXN0KG91dHB1dCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGluaXRUaW1lb3V0T2JqKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGV4ZWNUaW1lb3V0T2JqKTtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgICBjb25zdCBvdXRwdXRBcnIgPSBvdXRwdXQuc3BsaXQoZW9sKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChfLnRyaW0oXy5sYXN0KG91dHB1dEFycikpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVtdVZlcnNpb25JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHJldmlzaW9uIFRoZSBhY3R1YWwgcmV2aXNpb24gbnVtYmVyLCBmb3IgZXhhbXBsZSAnMzAuMC41J1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBidWlsZElkIFRoZSBidWlsZCBpZGVudGlmaWVyLCBmb3IgZXhhbXBsZSA2MzA2MDQ3XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgZW11bGF0b3IgdmVyc2lvbiBmcm9tIHRoZSBmaWxlIHN5c3RlbVxuICpcbiAqIEByZXR1cm5zIHtFbXVWZXJzaW9uSW5mb30gSWYgbm8gdmVyc2lvbiBpbmZvIGNvdWxkIGJlIHBhcnNlZCB0aGVuIGFuIGVtcHR5XG4gKiBvYmplY3QgaXMgcmV0dXJuZWRcbiAqL1xuZW11TWV0aG9kcy5nZXRFbXVWZXJzaW9uSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldEVtdVZlcnNpb25JbmZvICgpIHtcbiAgY29uc3QgcHJvcHNQYXRoID0gcGF0aC5qb2luKHRoaXMuc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BzUGF0aCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcHNQYXRoLCAndXRmOCcpO1xuICBjb25zdCByZXZpc2lvbk1hdGNoID0gL15Qa2dcXC5SZXZpc2lvbj0oW1xcZC5dKykkL20uZXhlYyhjb250ZW50KTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGlmIChyZXZpc2lvbk1hdGNoKSB7XG4gICAgcmVzdWx0LnJldmlzaW9uID0gcmV2aXNpb25NYXRjaFsxXTtcbiAgfVxuICBjb25zdCBidWlsZElkTWF0Y2ggPSAvXlBrZ1xcLkJ1aWxkSWQ9KFxcZCspJC9tLmV4ZWMoY29udGVudCk7XG4gIGlmIChidWlsZElkTWF0Y2gpIHtcbiAgICByZXN1bHQuYnVpbGRJZCA9IHBhcnNlSW50KGJ1aWxkSWRNYXRjaFsxXSwgMTApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBlbXVsYXRvciBpbWFnZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgRW11bGF0b3IgbmFtZS4gU2hvdWxkIE5PVCBzdGFydCB3aXRoICdAJyBjaGFyYWN0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGV4dHJhY3RpbmcgdGhlIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjb250ZW50IG9mIGVtdWxhdG9yIGltYWdlIHByb3BlcnRpZXMgZmlsZS5cbiAqIFVzdWFsbHkgdGhpcyBjb25maWd1cmF0aW9uIC5pbmkgZmlsZSBoYXMgdGhlIGZvbGxvd2luZyBjb250ZW50OlxuICogICBhdmQuaW5pLmVuY29kaW5nPVVURi04XG4gKiAgIHBhdGg9L1VzZXJzL3VzZXJuYW1lLy5hbmRyb2lkL2F2ZC9QaXhlbF9YTF9BUElfMzAuYXZkXG4gKiAgIHBhdGgucmVsPWF2ZC9QaXhlbF9YTF9BUElfMzAuYXZkXG4gKiAgIHRhcmdldD1hbmRyb2lkLTMwXG4gKi9cbmVtdU1ldGhvZHMuZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzIChhdmROYW1lKSB7XG4gIGNvbnN0IGF2ZHMgPSBhd2FpdCBsaXN0RW11bGF0b3JzKCk7XG4gIGNvbnN0IGF2ZCA9IGF2ZHMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSBhdmROYW1lKTtcbiAgaWYgKCFhdmQpIHtcbiAgICBsZXQgbXNnID0gYENhbm5vdCBmaW5kICcke2F2ZE5hbWV9JyBlbXVsYXRvci4gYDtcbiAgICBpZiAoXy5pc0VtcHR5KGF2ZHMpKSB7XG4gICAgICBtc2cgKz0gYE5vIGVtdWxhdG9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQgb24geW91ciBzeXN0ZW1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgKz0gYEF2YWlsYWJsZSBhdmQgbmFtZXMgYXJlOiAke2F2ZHMubWFwKCh7bmFtZX0pID0+IG5hbWUpfWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9XG4gIHJldHVybiBpbmkucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoYXZkLmNvbmZpZywgJ3V0ZjgnKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGdpdmVuIGVtdWxhdG9yIGV4aXN0cyBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXZkcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkTmFtZSAtIFRoZSBuYW1lIG9mIGVtdWxhdG9yIHRvIHZlcmlmeSBmb3IgZXhpc3RlbmNlLlxuICogU2hvdWxkIE5PVCBzdGFydCB3aXRoICdAJyBjaGFyYWN0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZW11bGF0b3Igd2l0aCBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LlxuICovXG5lbXVNZXRob2RzLmNoZWNrQXZkRXhpc3QgPSBhc3luYyBmdW5jdGlvbiBjaGVja0F2ZEV4aXN0IChhdmROYW1lKSB7XG4gIGNvbnN0IGF2ZHMgPSBhd2FpdCBsaXN0RW11bGF0b3JzKCk7XG4gIGlmICghYXZkcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IGF2ZE5hbWUpKSB7XG4gICAgbGV0IG1zZyA9IGBBdmQgJyR7YXZkTmFtZX0nIGlzIG5vdCBhdmFpbGFibGUuIGA7XG4gICAgaWYgKF8uaXNFbXB0eShhdmRzKSkge1xuICAgICAgbXNnICs9IGBObyBlbXVsYXRvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIG9uIHlvdXIgc3lzdGVtYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9IGBQbGVhc2Ugc2VsZWN0IHlvdXIgYXZkIG5hbWUgZnJvbSBvbmUgb2YgdGhlc2U6ICcke2F2ZHMubWFwKCh7bmFtZX0pID0+IG5hbWUpfSdgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVtdU1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -15,7 +15,7 @@ var _logger = _interopRequireDefault(require("../logger.js"));
|
|
|
15
15
|
|
|
16
16
|
var _helpers = require("../helpers.js");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _support = require("@appium/support");
|
|
19
19
|
|
|
20
20
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
21
21
|
|
|
@@ -133,15 +133,15 @@ manifestMethods.compileManifest = async function compileManifest(manifest, manif
|
|
|
133
133
|
|
|
134
134
|
const androidJarPath = _path.default.resolve(platformPath, 'android.jar');
|
|
135
135
|
|
|
136
|
-
if (await
|
|
137
|
-
await
|
|
136
|
+
if (await _support.fs.exists(resultPath)) {
|
|
137
|
+
await _support.fs.rimraf(resultPath);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
try {
|
|
141
141
|
await this.initAapt2();
|
|
142
142
|
const args = ['link', '-o', resultPath, '--manifest', manifest, '--rename-manifest-package', manifestPackage, '--rename-instrumentation-target-package', targetPackage, '-I', androidJarPath, '-v'];
|
|
143
143
|
|
|
144
|
-
_logger.default.debug(`Compiling the manifest using '${
|
|
144
|
+
_logger.default.debug(`Compiling the manifest using '${_support.util.quote([this.binaries.aapt2, ...args])}'`);
|
|
145
145
|
|
|
146
146
|
await (0, _teen_process.exec)(this.binaries.aapt2, args);
|
|
147
147
|
} catch (e) {
|
|
@@ -150,7 +150,7 @@ manifestMethods.compileManifest = async function compileManifest(manifest, manif
|
|
|
150
150
|
await this.initAapt();
|
|
151
151
|
const args = ['package', '-M', manifest, '--rename-manifest-package', manifestPackage, '--rename-instrumentation-target-package', targetPackage, '-I', androidJarPath, '-F', resultPath, '-f'];
|
|
152
152
|
|
|
153
|
-
_logger.default.debug(`Compiling the manifest using '${
|
|
153
|
+
_logger.default.debug(`Compiling the manifest using '${_support.util.quote([this.binaries.aapt, ...args])}'`);
|
|
154
154
|
|
|
155
155
|
try {
|
|
156
156
|
await (0, _teen_process.exec)(this.binaries.aapt, args);
|
|
@@ -165,14 +165,14 @@ manifestMethods.compileManifest = async function compileManifest(manifest, manif
|
|
|
165
165
|
manifestMethods.insertManifest = async function insertManifest(manifest, srcApk, dstApk) {
|
|
166
166
|
_logger.default.debug(`Inserting manifest '${manifest}', src: '${srcApk}', dst: '${dstApk}'`);
|
|
167
167
|
|
|
168
|
-
await
|
|
168
|
+
await _support.zip.assertValidZip(srcApk);
|
|
169
169
|
await (0, _helpers.unzipFile)(`${manifest}.apk`);
|
|
170
170
|
|
|
171
171
|
const manifestName = _path.default.basename(manifest);
|
|
172
172
|
|
|
173
173
|
try {
|
|
174
174
|
await this.initAapt();
|
|
175
|
-
await
|
|
175
|
+
await _support.fs.copyFile(srcApk, dstApk);
|
|
176
176
|
|
|
177
177
|
_logger.default.debug('Moving manifest');
|
|
178
178
|
|
|
@@ -186,24 +186,24 @@ manifestMethods.insertManifest = async function insertManifest(manifest, srcApk,
|
|
|
186
186
|
} catch (e) {
|
|
187
187
|
_logger.default.debug('Cannot insert manifest using aapt. Defaulting to zip. ' + `Original error: ${e.stderr || e.message}`);
|
|
188
188
|
|
|
189
|
-
const tmpRoot = await
|
|
189
|
+
const tmpRoot = await _support.tempDir.openDir();
|
|
190
190
|
|
|
191
191
|
try {
|
|
192
192
|
_logger.default.debug(`Extracting the source apk at '${srcApk}'`);
|
|
193
193
|
|
|
194
|
-
await
|
|
194
|
+
await _support.zip.extractAllTo(srcApk, tmpRoot);
|
|
195
195
|
|
|
196
196
|
_logger.default.debug('Moving manifest');
|
|
197
197
|
|
|
198
|
-
await
|
|
198
|
+
await _support.fs.mv(manifest, _path.default.resolve(tmpRoot, manifestName));
|
|
199
199
|
|
|
200
200
|
_logger.default.debug(`Collecting the destination apk at '${dstApk}'`);
|
|
201
201
|
|
|
202
|
-
await
|
|
202
|
+
await _support.zip.toArchive(dstApk, {
|
|
203
203
|
cwd: tmpRoot
|
|
204
204
|
});
|
|
205
205
|
} finally {
|
|
206
|
-
await
|
|
206
|
+
await _support.fs.rimraf(tmpRoot);
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -228,4 +228,4 @@ var _default = manifestMethods;
|
|
|
228
228
|
exports.default = _default;require('source-map-support').install();
|
|
229
229
|
|
|
230
230
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hbmRyb2lkLW1hbmlmZXN0LmpzIl0sIm5hbWVzIjpbIm1hbmlmZXN0TWV0aG9kcyIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwiZXh0cmFjdEJhc2VBcGsiLCJtYW5pZmVzdCIsImFwa1JlYWRlciIsIkFwa1JlYWRlciIsIm9wZW4iLCJyZWFkTWFuaWZlc3QiLCJlIiwibG9nIiwiZGVidWciLCJFcnJvciIsInBrZyIsImFjdGl2aXR5IiwiaW5mbyIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInRhcmdldFNka1ZlcnNpb25Gcm9tTWFuaWZlc3QiLCJvcmlnaW5hbEFwcFBhdGgiLCJnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXIiLCJ1c2VzU2RrIiwiXyIsImlzSW50ZWdlciIsInRhcmdldFNka1ZlcnNpb24iLCJnZXRUYXJnZXRTZGtWaWFBYXB0IiwiaW5pdEFhcHQiLCJhcmdzIiwic3Rkb3V0IiwiYmluYXJpZXMiLCJhYXB0IiwiZXhlYyIsInBhcnNlSW50IiwidmVyc2lvbkdldHRlcnMiLCJ0b29sTmFtZSIsInZlcnNpb25HZXR0ZXIiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hcCIsInBhaXIiLCJ0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0ciLCJjbWRPdXRwdXQiLCJzaGVsbCIsIlJlZ0V4cCIsImxlbmd0aCIsImNvbXBpbGVNYW5pZmVzdCIsIm1hbmlmZXN0UGFja2FnZSIsInRhcmdldFBhY2thZ2UiLCJwbGF0Zm9ybSIsInBsYXRmb3JtUGF0aCIsInNka1Jvb3QiLCJyZXN1bHRQYXRoIiwiYW5kcm9pZEphclBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwicmltcmFmIiwiaW5pdEFhcHQyIiwidXRpbCIsInF1b3RlIiwiYWFwdDIiLCJzdGRlcnIiLCJlMSIsImluc2VydE1hbmlmZXN0Iiwic3JjQXBrIiwiZHN0QXBrIiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJtYW5pZmVzdE5hbWUiLCJiYXNlbmFtZSIsImNvcHlGaWxlIiwiaWduIiwiY3dkIiwiZGlybmFtZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsImV4dHJhY3RBbGxUbyIsIm12IiwidG9BcmNoaXZlIiwiaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IiwidXNlc1Blcm1pc3Npb25zIiwic29tZSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsZUFBZSxHQUFHLEVBQXRCOztBQWdCQUEsZUFBZSxDQUFDQyxvQ0FBaEIsR0FBdUQsZUFBZUEsb0NBQWYsQ0FBcURDLE9BQXJELEVBQThEO0FBQ25ILE1BQUlBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkMsdUJBQWpCLENBQUosRUFBc0M7QUFDcENGLElBQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtHLGNBQUwsQ0FBb0JILE9BQXBCLENBQWhCO0FBQ0Q7O0FBRUQsTUFBSUksUUFBSjs7QUFDQSxNQUFJO0FBQ0YsVUFBTUMsU0FBUyxHQUFHLE1BQU1DLHlCQUFVQyxJQUFWLENBQWVQLE9BQWYsQ0FBeEI7QUFDQUksSUFBQUEsUUFBUSxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0csWUFBVixFQUFqQjtBQUNELEdBSEQsQ0FHRSxPQUFPQyxDQUFQLEVBQVU7QUFDVkMsb0JBQUlDLEtBQUosQ0FBVUYsQ0FBVjs7QUFDQSxVQUFNLElBQUlHLEtBQUosQ0FBVyxtQ0FBa0NaLE9BQVEsS0FBM0MsR0FDYixvQ0FERyxDQUFOO0FBRUQ7O0FBQ0QsUUFBTTtBQUFDYSxJQUFBQSxHQUFEO0FBQU1DLElBQUFBO0FBQU4sTUFBa0IsNEJBQWNWLFFBQWQsQ0FBeEI7O0FBQ0FNLGtCQUFJSyxJQUFKLENBQVUsa0JBQWlCRixHQUFJLEdBQS9COztBQUNBSCxrQkFBSUssSUFBSixDQUFVLHdCQUF1QkQs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S0FBSyw2QkFBM0QsQ0FBUDtBQUNELENBVEQ7O2VBV2V2RixlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBnZXRBbmRyb2lkUGxhdGZvcm1BbmRQYXRoLCB1bnppcEZpbGUsXG4gIEFQS1NfRVhURU5TSU9OLCBwYXJzZU1hbmlmZXN0IH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBmcywgemlwLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEFwa1JlYWRlciBmcm9tICdhZGJraXQtYXBrcmVhZGVyJztcblxubGV0IG1hbmlmZXN0TWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFQS0luZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcGtQYWNrYWdlIC0gVGhlIG5hbWUgb2YgYXBwbGljYXRpb24gcGFja2FnZSwgZm9yIGV4YW1wbGUgJ2NvbS5hY21lLmFwcCcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBrQWN0aXZpdHkgLSBUaGUgbmFtZSBvZiBtYWluIGFwcGxpY2F0aW9uIGFjdGl2aXR5LlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwYWNrYWdlIGFuZCBtYWluIGFjdGl2aXR5IG5hbWUgZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gYXBwbGljYXRpb24gLmFwayhzKSBwYWNrYWdlXG4gKiBAcmV0dXJuIHtBUEtJbmZvfSBUaGUgcGFyc2VkIGFwcGxpY2F0aW9uIGluZm8uXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgZ2l2ZW5cbiAqICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBwYWNrYWdlLlxuICovXG5tYW5pZmVzdE1ldGhvZHMucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gcGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwcFBhdGgpO1xuICB9XG5cbiAgbGV0IG1hbmlmZXN0O1xuICB0cnkge1xuICAgIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICAgIG1hbmlmZXN0ID0gYXdhaXQgYXBrUmVhZGVyLnJlYWRNYW5pZmVzdCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgYSBtYW5pZmVzdCBmcm9tICcke2FwcFBhdGh9Jy4gYCArXG4gICAgICBgSXMgaXQgYSB2YWxpZCBBbmRyb2lkIGFwcGxpY2F0aW9uP2ApO1xuICB9XG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHBhcnNlTWFuaWZlc3QobWFuaWZlc3QpO1xuICBsb2cuaW5mbyhgUGFja2FnZSBuYW1lOiAnJHtwa2d9J2ApO1xuICBsb2cuaW5mbyhgTWFpbiBhY3Rpdml0eSBuYW1lOiAnJHthY3Rpdml0eX0nYCk7XG4gIHJldHVybiB7XG4gICAgYXBrUGFja2FnZTogcGtnLFxuICAgIGFwa0FjdGl2aXR5OiBhY3Rpdml0eSxcbiAgfTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gLmFwayhzKSBwYWNrYWdlLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVyc2lvbiBvZiB0aGUgdGFyZ2V0IFNESy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBnaXZlblxuICogICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHBhY2thZ2UuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gdGFyZ2V0U2RrVmVyc2lvbkZyb21NYW5pZmVzdCAoYXBwUGF0aCkge1xuICBsb2cuZGVidWcoYEV4dHJhY3RpbmcgdGFyZ2V0IFNESyB2ZXJzaW9uIG9mICcke2FwcFBhdGh9J2ApO1xuICBjb25zdCBvcmlnaW5hbEFwcFBhdGggPSBhcHBQYXRoO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGdldFRhcmdldFNka1ZpYUFwa1JlYWRlciA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGtSZWFkZXIgPSBhd2FpdCBBcGtSZWFkZXIub3BlbihhcHBQYXRoKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgICBpZiAobWFuaWZlc3QudXNlc1NkayAmJiBfLmlzSW50ZWdlcihtYW5pZmVzdC51c2VzU2RrLnRhcmdldFNka1ZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gbWFuaWZlc3QudXNlc1Nkay50YXJnZXRTZGtWZXJzaW9uO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0YXJnZXRTZGtWZXJzaW9uIGluIHRoZSBtYW5pZmVzdCcpO1xuICB9O1xuICBjb25zdCBnZXRUYXJnZXRTZGtWaWFBYXB0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBjb25zdCBhcmdzID0gWydkdW1wJywgJ2JhZGdpbmcnLCBhcHBQYXRoXTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy5hYXB0LCBhcmdzKTtcbiAgICBjb25zdCB0YXJnZXRTZGtWZXJzaW9uID0gL3RhcmdldFNka1ZlcnNpb246JyhbXiddKyknL2cuZXhlYyhzdGRvdXQpO1xuICAgIGlmICghdGFyZ2V0U2RrVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKHN0ZG91dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgY29tbWFuZCBvdXRwdXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRhcmdldFNka1ZlcnNpb25bMV0sIDEwKTtcbiAgfTtcbiAgY29uc3QgdmVyc2lvbkdldHRlcnMgPSBbXG4gICAgWydBcGtSZWFkZXInLCBnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXJdLFxuICAgIFsnYWFwdCcsIGdldFRhcmdldFNka1ZpYUFhcHRdLFxuICBdO1xuICBmb3IgKGNvbnN0IFt0b29sTmFtZSwgdmVyc2lvbkdldHRlcl0gb2YgdmVyc2lvbkdldHRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHZlcnNpb25HZXR0ZXIoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgQ2Fubm90IGV4dHJhY3QgdGFyZ2V0U2RrVmVyc2lvbiBvZiAnJHtvcmlnaW5hbEFwcFBhdGh9JyB1c2luZyAke3Rvb2xOYW1lfS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgdGhlIHRhcmdldCBTREsgdmVyc2lvbiBudW1iZXIgb2YgJyR7b3JpZ2luYWxBcHBQYXRofScgdXNpbmcgZWl0aGVyIG9mIGAgK1xuICAgIGAke0pTT04uc3RyaW5naWZ5KHZlcnNpb25HZXR0ZXJzLm1hcCgocGFpcikgPT4gcGFpclswXSkpfSB0b29scy4gYCArXG4gICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBwYWNrYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgcGFja2FnZSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICogQHBhcmFtIHs/c3RyaW5nfSBjbWRPdXRwdXQgLSBPcHRpb25hbCBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdW1wc3lzIHBhY2thZ2VfIGNvbW1hbmQuIEl0IG1heSBzcGVlZCB1cCB0aGUgbWV0aG9kIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlcnNpb24gb2YgdGhlIHRhcmdldCBTREsuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgPSBhc3luYyBmdW5jdGlvbiB0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgKHBrZywgY21kT3V0cHV0ID0gbnVsbCkge1xuICBsZXQgc3Rkb3V0ID0gY21kT3V0cHV0IHx8IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBwa2ddKTtcbiAgbGV0IHRhcmdldFNka1ZlcnNpb24gPSBuZXcgUmVnRXhwKC90YXJnZXRTZGs9KFteXFxzXFxzXSspL2cpLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKHRhcmdldFNka1ZlcnNpb24gJiYgdGFyZ2V0U2RrVmVyc2lvbi5sZW5ndGggPj0gMikge1xuICAgIHRhcmdldFNka1ZlcnNpb24gPSB0YXJnZXRTZGtWZXJzaW9uWzFdO1xuICB9IGVsc2Uge1xuICAgIC8vIHRhcmdldFNkayBub3QgZm91bmQgaW4gdGhlIGR1bXAsIGFzc2lnbmluZyAwIHRvIHRhcmdldFNka1ZlcnNpb25cbiAgICB0YXJnZXRTZGtWZXJzaW9uID0gMDtcbiAgfVxuICByZXR1cm4gcGFyc2VJbnQodGFyZ2V0U2RrVmVyc2lvbiwgMTApO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHBhY2thZ2UgbWFuaWZlc3QgKHVzdWFsbHkgQW5kcm9pZE1hbmlmZXN0LnhtbCkuXG4gKiBgJHttYW5pZmVzdH0uYXBrYCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kXG4gKiBjb250YWluaW5nIHRoZSBjb21waWxlZCBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFuaWZlc3QgLSBGdWxsIHBhdGggdG8gdGhlIGluaXRpYWwgbWFuaWZlc3QgdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbWFuaWZlc3QgcGFja2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gcGFja2FnZVxuICovXG5tYW5pZmVzdE1ldGhvZHMuY29tcGlsZU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1hbmlmZXN0IChtYW5pZmVzdCwgbWFuaWZlc3RQYWNrYWdlLCB0YXJnZXRQYWNrYWdlKSB7XG4gIGNvbnN0IHtwbGF0Zm9ybSwgcGxhdGZvcm1QYXRofSA9IGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgodGhpcy5zZGtSb290KTtcbiAgaWYgKCFwbGF0Zm9ybSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBUaGUgcmVxdWlyZWQgcGxhdGZvcm0gZG9lcyBub3QgZXhpc3QgKEFQSSBsZXZlbCA+PSAxNyknKTtcbiAgfVxuICBjb25zdCByZXN1bHRQYXRoID0gYCR7bWFuaWZlc3R9LmFwa2A7XG4gIGNvbnN0IGFuZHJvaWRKYXJQYXRoID0gcGF0aC5yZXNvbHZlKHBsYXRmb3JtUGF0aCwgJ2FuZHJvaWQuamFyJyk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYocmVzdWx0UGF0aCk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYWFwdDJcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2xpbmsnLFxuICAgICAgJy1vJywgcmVzdWx0UGF0aCxcbiAgICAgICctLW1hbmlmZXN0JywgbWFuaWZlc3QsXG4gICAgICAnLS1yZW5hbWUtbWFuaWZlc3QtcGFja2FnZScsIG1hbmlmZXN0UGFja2FnZSxcbiAgICAgICctLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UnLCB0YXJnZXRQYWNrYWdlLFxuICAgICAgJy1JJywgYW5kcm9pZEphclBhdGgsXG4gICAgICAnLXYnLFxuICAgIF07XG4gICAgbG9nLmRlYnVnKGBDb21waWxpbmcgdGhlIG1hbmlmZXN0IHVzaW5nICcke3V0aWwucXVvdGUoW3RoaXMuYmluYXJpZXMuYWFwdDIsIC4uLmFyZ3NdKX0nYCk7XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQyLCBhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0IHVzaW5nIGFhcHQyLiBEZWZhdWx0aW5nIHRvIGFhcHQuICcgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0KCk7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdwYWNrYWdlJyxcbiAgICAgICctTScsIG1hbmlmZXN0LFxuICAgICAgJy0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UnLCBtYW5pZmVzdFBhY2thZ2UsXG4gICAgICAnLS1yZW5hbWUtaW5zdHJ1bWVudGF0aW9uLXRhcmdldC1wYWNrYWdlJywgdGFyZ2V0UGFja2FnZSxcbiAgICAgICctSScsIGFuZHJvaWRKYXJQYXRoLFxuICAgICAgJy1GJywgcmVzdWx0UGF0aCxcbiAgICAgICctZicsXG4gICAgXTtcbiAgICBsb2cuZGVidWcoYENvbXBpbGluZyB0aGUgbWFuaWZlc3QgdXNpbmcgJyR7dXRpbC5xdW90ZShbdGhpcy5iaW5hcmllcy5hYXB0LCAuLi5hcmdzXSl9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuYWFwdCwgYXJncyk7XG4gICAgfSBjYXRjaCAoZTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBPcmlnaW5hbCBlcnJvcjogJHtlMS5zdGRlcnIgfHwgZTEubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGBDb21waWxlZCB0aGUgbWFuaWZlc3QgYXQgJyR7cmVzdWx0UGF0aH0nYCk7XG59O1xuXG4vKipcbiAqIFJlcGxhY2UvaW5zZXJ0IHRoZSBzcGVjaWFsbHkgcHJlY29tcGlsZWQgbWFuaWZlc3QgZmlsZSBpbnRvIHRoZVxuICogcGFydGljdWxhciBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdCAtIEZ1bGwgcGF0aCB0byB0aGUgcHJlY29tcGlsZWQgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgYGNvbXBpbGVNYW5pZmVzdGAgbWV0aG9kIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgLmFwayBleHRlbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNBcGsgLSBGdWxsIHBhdGggdG8gdGhlIGV4aXN0aW5nIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UsIHdoZXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYW5pZmVzdCBoYXMgdG8gYmUgaW5zZXRyZWQgdG8uIFRoaXMgcGFja2FnZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgTk9UIGJlIG1vZGlmaWVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdEFwayAtIEZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIHBhY2thZ2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgd2lsbCBiZSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaW5zZXJ0TWFuaWZlc3QgPSBhc3luYyBmdW5jdGlvbiBpbnNlcnRNYW5pZmVzdCAobWFuaWZlc3QsIHNyY0FwaywgZHN0QXBrKSB7XG4gIGxvZy5kZWJ1ZyhgSW5zZXJ0aW5nIG1hbmlmZXN0ICcke21hbmlmZXN0fScsIHNyYzogJyR7c3JjQXBrfScsIGRzdDogJyR7ZHN0QXBrfSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHNyY0Fwayk7XG4gIGF3YWl0IHVuemlwRmlsZShgJHttYW5pZmVzdH0uYXBrYCk7XG4gIGNvbnN0IG1hbmlmZXN0TmFtZSA9IHBhdGguYmFzZW5hbWUobWFuaWZlc3QpO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNBcGssIGRzdEFwayk7XG4gICAgbG9nLmRlYnVnKCdNb3ZpbmcgbWFuaWZlc3QnKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICAgJ3JlbW92ZScsIGRzdEFwaywgbWFuaWZlc3ROYW1lXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICdhZGQnLCBkc3RBcGssIG1hbmlmZXN0TmFtZVxuICAgIF0sIHtjd2Q6IHBhdGguZGlybmFtZShtYW5pZmVzdCl9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGluc2VydCBtYW5pZmVzdCB1c2luZyBhYXB0LiBEZWZhdWx0aW5nIHRvIHppcC4gJyArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgLy8gVW5mb3J0dW5hdGVseSBOb2RlSlMgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVsaWFibGUgbWV0aG9kc1xuICAgICAgLy8gdG8gcmVwbGFjZSBmaWxlcyBpbnNpZGUgemlwIGFyY2hpdmVzIHdpdGhvdXQgbG9hZGluZyB0aGVcbiAgICAgIC8vIHdob2xlIGFyY2hpdmUgY29udGVudCBpbnRvIFJBTVxuICAgICAgbG9nLmRlYnVnKGBFeHRyYWN0aW5nIHRoZSBzb3VyY2UgYXBrIGF0ICcke3NyY0Fwa30nYCk7XG4gICAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHNyY0FwaywgdG1wUm9vdCk7XG4gICAgICBsb2cuZGVidWcoJ01vdmluZyBtYW5pZmVzdCcpO1xuICAgICAgYXdhaXQgZnMubXYobWFuaWZlc3QsIHBhdGgucmVzb2x2ZSh0bXBSb290LCBtYW5pZmVzdE5hbWUpKTtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29sbGVjdGluZyB0aGUgZGVzdGluYXRpb24gYXBrIGF0ICcke2RzdEFwa30nYCk7XG4gICAgICBhd2FpdCB6aXAudG9BcmNoaXZlKGRzdEFwaywge1xuICAgICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoYE1hbmlmZXN0IGluc2VydGlvbiBpbnRvICcke2RzdEFwa30nIGlzIGNvbXBsZXRlZGApO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHBhY2thZ2UgbWFuaWZlc3QgY29udGFpbnMgSW50ZXJuZXQgcGVybWlzc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgZnVsbCBwYXRoIHRvIC5hcGsocykgcGFja2FnZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hbmlmZXN0IHJlcXVpcmVzIEludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgaWYgJyR7YXBwUGF0aH0nIHJlcXVpcmVzIGludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uIGluIHRoZSBtYW5pZmVzdGApO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgcmV0dXJuIChtYW5pZmVzdC51c2VzUGVybWlzc2lvbnMgfHwgW10pLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWFuaWZlc3RNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYW5kcm9pZC1tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hbmRyb2lkLW1hbmlmZXN0LmpzIl0sIm5hbWVzIjpbIm1hbmlmZXN0TWV0aG9kcyIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwiZXh0cmFjdEJhc2VBcGsiLCJtYW5pZmVzdCIsImFwa1JlYWRlciIsIkFwa1JlYWRlciIsIm9wZW4iLCJyZWFkTWFuaWZlc3QiLCJlIiwibG9nIiwiZGVidWciLCJFcnJvciIsInBrZyIsImFjdGl2aXR5IiwiaW5mbyIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInRhcmdldFNka1ZlcnNpb25Gcm9tTWFuaWZlc3QiLCJvcmlnaW5hbEFwcFBhdGgiLCJnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXIiLCJ1c2VzU2RrIiwiXyIsImlzSW50ZWdlciIsInRhcmdldFNka1ZlcnNpb24iLCJnZXRUYXJnZXRTZGtWaWFBYXB0IiwiaW5pdEFhcHQiLCJhcmdzIiwic3Rkb3V0IiwiYmluYXJpZXMiLCJhYXB0IiwiZXhlYyIsInBhcnNlSW50IiwidmVyc2lvbkdldHRlcnMiLCJ0b29sTmFtZSIsInZlcnNpb25HZXR0ZXIiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hcCIsInBhaXIiLCJ0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0ciLCJjbWRPdXRwdXQiLCJzaGVsbCIsIlJlZ0V4cCIsImxlbmd0aCIsImNvbXBpbGVNYW5pZmVzdCIsIm1hbmlmZXN0UGFja2FnZSIsInRhcmdldFBhY2thZ2UiLCJwbGF0Zm9ybSIsInBsYXRmb3JtUGF0aCIsInNka1Jvb3QiLCJyZXN1bHRQYXRoIiwiYW5kcm9pZEphclBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwicmltcmFmIiwiaW5pdEFhcHQyIiwidXRpbCIsInF1b3RlIiwiYWFwdDIiLCJzdGRlcnIiLCJlMSIsImluc2VydE1hbmlmZXN0Iiwic3JjQXBrIiwiZHN0QXBrIiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJtYW5pZmVzdE5hbWUiLCJiYXNlbmFtZSIsImNvcHlGaWxlIiwiaWduIiwiY3dkIiwiZGlybmFtZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsImV4dHJhY3RBbGxUbyIsIm12IiwidG9BcmNoaXZlIiwiaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IiwidXNlc1Blcm1pc3Npb25zIiwic29tZSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsZUFBZSxHQUFHLEVBQXRCOztBQWdCQUEsZUFBZSxDQUFDQyxvQ0FBaEIsR0FBdUQsZUFBZUEsb0NBQWYsQ0FBcURDLE9BQXJELEVBQThEO0FBQ25ILE1BQUlBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkMsdUJBQWpCLENBQUosRUFBc0M7QUFDcENGLElBQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtHLGNBQUwsQ0FBb0JILE9BQXBCLENBQWhCO0FBQ0Q7O0FBRUQsTUFBSUksUUFBSjs7QUFDQSxNQUFJO0FBQ0YsVUFBTUMsU0FBUyxHQUFHLE1BQU1DLHlCQUFVQyxJQUFWLENBQWVQLE9BQWYsQ0FBeEI7QUFDQUksSUFBQUEsUUFBUSxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0csWUFBVixFQUFqQjtBQUNELEdBSEQsQ0FHRSxPQUFPQyxDQUFQLEVBQVU7QUFDVkMsb0JBQUlDLEtBQUosQ0FBVUYsQ0FBVjs7QUFDQSxVQUFNLElBQUlHLEtBQUosQ0FBVyxtQ0FBa0NaLE9BQVEsS0FBM0MsR0FDYixvQ0FERyxDQUFOO0FBRUQ7O0FBQ0QsUUFBTTtBQUFDYSxJQUFBQSxHQUFEO0FBQU1DLElBQUFBO0FBQU4sTUFBa0IsNEJBQWNWLFFBQWQsQ0FBeEI7O0FBQ0FNLGtCQUFJSyxJQUFKLENBQVUsa0JBQWlCRixHQUFJLEdBQS9COztBQUNBSCxrQkFBSUssSUFBSixDQUFVLHdCQUF1QkQs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RCxDQUFQO0FBQ0QsQ0FURDs7ZUFXZXZGLGUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgQVBLU19FWFRFTlNJT04sIHBhcnNlTWFuaWZlc3QgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IGZzLCB6aXAsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEFwa1JlYWRlciBmcm9tICdhZGJraXQtYXBrcmVhZGVyJztcblxubGV0IG1hbmlmZXN0TWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFQS0luZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcGtQYWNrYWdlIC0gVGhlIG5hbWUgb2YgYXBwbGljYXRpb24gcGFja2FnZSwgZm9yIGV4YW1wbGUgJ2NvbS5hY21lLmFwcCcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBrQWN0aXZpdHkgLSBUaGUgbmFtZSBvZiBtYWluIGFwcGxpY2F0aW9uIGFjdGl2aXR5LlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwYWNrYWdlIGFuZCBtYWluIGFjdGl2aXR5IG5hbWUgZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gYXBwbGljYXRpb24gLmFwayhzKSBwYWNrYWdlXG4gKiBAcmV0dXJuIHtBUEtJbmZvfSBUaGUgcGFyc2VkIGFwcGxpY2F0aW9uIGluZm8uXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgZ2l2ZW5cbiAqICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBwYWNrYWdlLlxuICovXG5tYW5pZmVzdE1ldGhvZHMucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gcGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwcFBhdGgpO1xuICB9XG5cbiAgbGV0IG1hbmlmZXN0O1xuICB0cnkge1xuICAgIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICAgIG1hbmlmZXN0ID0gYXdhaXQgYXBrUmVhZGVyLnJlYWRNYW5pZmVzdCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgYSBtYW5pZmVzdCBmcm9tICcke2FwcFBhdGh9Jy4gYCArXG4gICAgICBgSXMgaXQgYSB2YWxpZCBBbmRyb2lkIGFwcGxpY2F0aW9uP2ApO1xuICB9XG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHBhcnNlTWFuaWZlc3QobWFuaWZlc3QpO1xuICBsb2cuaW5mbyhgUGFja2FnZSBuYW1lOiAnJHtwa2d9J2ApO1xuICBsb2cuaW5mbyhgTWFpbiBhY3Rpdml0eSBuYW1lOiAnJHthY3Rpdml0eX0nYCk7XG4gIHJldHVybiB7XG4gICAgYXBrUGFja2FnZTogcGtnLFxuICAgIGFwa0FjdGl2aXR5OiBhY3Rpdml0eSxcbiAgfTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gLmFwayhzKSBwYWNrYWdlLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVyc2lvbiBvZiB0aGUgdGFyZ2V0IFNESy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBnaXZlblxuICogICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHBhY2thZ2UuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gdGFyZ2V0U2RrVmVyc2lvbkZyb21NYW5pZmVzdCAoYXBwUGF0aCkge1xuICBsb2cuZGVidWcoYEV4dHJhY3RpbmcgdGFyZ2V0IFNESyB2ZXJzaW9uIG9mICcke2FwcFBhdGh9J2ApO1xuICBjb25zdCBvcmlnaW5hbEFwcFBhdGggPSBhcHBQYXRoO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGdldFRhcmdldFNka1ZpYUFwa1JlYWRlciA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGtSZWFkZXIgPSBhd2FpdCBBcGtSZWFkZXIub3BlbihhcHBQYXRoKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgICBpZiAobWFuaWZlc3QudXNlc1NkayAmJiBfLmlzSW50ZWdlcihtYW5pZmVzdC51c2VzU2RrLnRhcmdldFNka1ZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gbWFuaWZlc3QudXNlc1Nkay50YXJnZXRTZGtWZXJzaW9uO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0YXJnZXRTZGtWZXJzaW9uIGluIHRoZSBtYW5pZmVzdCcpO1xuICB9O1xuICBjb25zdCBnZXRUYXJnZXRTZGtWaWFBYXB0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBjb25zdCBhcmdzID0gWydkdW1wJywgJ2JhZGdpbmcnLCBhcHBQYXRoXTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy5hYXB0LCBhcmdzKTtcbiAgICBjb25zdCB0YXJnZXRTZGtWZXJzaW9uID0gL3RhcmdldFNka1ZlcnNpb246JyhbXiddKyknL2cuZXhlYyhzdGRvdXQpO1xuICAgIGlmICghdGFyZ2V0U2RrVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKHN0ZG91dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgY29tbWFuZCBvdXRwdXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRhcmdldFNka1ZlcnNpb25bMV0sIDEwKTtcbiAgfTtcbiAgY29uc3QgdmVyc2lvbkdldHRlcnMgPSBbXG4gICAgWydBcGtSZWFkZXInLCBnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXJdLFxuICAgIFsnYWFwdCcsIGdldFRhcmdldFNka1ZpYUFhcHRdLFxuICBdO1xuICBmb3IgKGNvbnN0IFt0b29sTmFtZSwgdmVyc2lvbkdldHRlcl0gb2YgdmVyc2lvbkdldHRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHZlcnNpb25HZXR0ZXIoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgQ2Fubm90IGV4dHJhY3QgdGFyZ2V0U2RrVmVyc2lvbiBvZiAnJHtvcmlnaW5hbEFwcFBhdGh9JyB1c2luZyAke3Rvb2xOYW1lfS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgdGhlIHRhcmdldCBTREsgdmVyc2lvbiBudW1iZXIgb2YgJyR7b3JpZ2luYWxBcHBQYXRofScgdXNpbmcgZWl0aGVyIG9mIGAgK1xuICAgIGAke0pTT04uc3RyaW5naWZ5KHZlcnNpb25HZXR0ZXJzLm1hcCgocGFpcikgPT4gcGFpclswXSkpfSB0b29scy4gYCArXG4gICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBwYWNrYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgcGFja2FnZSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICogQHBhcmFtIHs/c3RyaW5nfSBjbWRPdXRwdXQgLSBPcHRpb25hbCBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdW1wc3lzIHBhY2thZ2VfIGNvbW1hbmQuIEl0IG1heSBzcGVlZCB1cCB0aGUgbWV0aG9kIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlcnNpb24gb2YgdGhlIHRhcmdldCBTREsuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgPSBhc3luYyBmdW5jdGlvbiB0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgKHBrZywgY21kT3V0cHV0ID0gbnVsbCkge1xuICBsZXQgc3Rkb3V0ID0gY21kT3V0cHV0IHx8IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBwa2ddKTtcbiAgbGV0IHRhcmdldFNka1ZlcnNpb24gPSBuZXcgUmVnRXhwKC90YXJnZXRTZGs9KFteXFxzXFxzXSspL2cpLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKHRhcmdldFNka1ZlcnNpb24gJiYgdGFyZ2V0U2RrVmVyc2lvbi5sZW5ndGggPj0gMikge1xuICAgIHRhcmdldFNka1ZlcnNpb24gPSB0YXJnZXRTZGtWZXJzaW9uWzFdO1xuICB9IGVsc2Uge1xuICAgIC8vIHRhcmdldFNkayBub3QgZm91bmQgaW4gdGhlIGR1bXAsIGFzc2lnbmluZyAwIHRvIHRhcmdldFNka1ZlcnNpb25cbiAgICB0YXJnZXRTZGtWZXJzaW9uID0gMDtcbiAgfVxuICByZXR1cm4gcGFyc2VJbnQodGFyZ2V0U2RrVmVyc2lvbiwgMTApO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHBhY2thZ2UgbWFuaWZlc3QgKHVzdWFsbHkgQW5kcm9pZE1hbmlmZXN0LnhtbCkuXG4gKiBgJHttYW5pZmVzdH0uYXBrYCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kXG4gKiBjb250YWluaW5nIHRoZSBjb21waWxlZCBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFuaWZlc3QgLSBGdWxsIHBhdGggdG8gdGhlIGluaXRpYWwgbWFuaWZlc3QgdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbWFuaWZlc3QgcGFja2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gcGFja2FnZVxuICovXG5tYW5pZmVzdE1ldGhvZHMuY29tcGlsZU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1hbmlmZXN0IChtYW5pZmVzdCwgbWFuaWZlc3RQYWNrYWdlLCB0YXJnZXRQYWNrYWdlKSB7XG4gIGNvbnN0IHtwbGF0Zm9ybSwgcGxhdGZvcm1QYXRofSA9IGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgodGhpcy5zZGtSb290KTtcbiAgaWYgKCFwbGF0Zm9ybSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBUaGUgcmVxdWlyZWQgcGxhdGZvcm0gZG9lcyBub3QgZXhpc3QgKEFQSSBsZXZlbCA+PSAxNyknKTtcbiAgfVxuICBjb25zdCByZXN1bHRQYXRoID0gYCR7bWFuaWZlc3R9LmFwa2A7XG4gIGNvbnN0IGFuZHJvaWRKYXJQYXRoID0gcGF0aC5yZXNvbHZlKHBsYXRmb3JtUGF0aCwgJ2FuZHJvaWQuamFyJyk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYocmVzdWx0UGF0aCk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYWFwdDJcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2xpbmsnLFxuICAgICAgJy1vJywgcmVzdWx0UGF0aCxcbiAgICAgICctLW1hbmlmZXN0JywgbWFuaWZlc3QsXG4gICAgICAnLS1yZW5hbWUtbWFuaWZlc3QtcGFja2FnZScsIG1hbmlmZXN0UGFja2FnZSxcbiAgICAgICctLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UnLCB0YXJnZXRQYWNrYWdlLFxuICAgICAgJy1JJywgYW5kcm9pZEphclBhdGgsXG4gICAgICAnLXYnLFxuICAgIF07XG4gICAgbG9nLmRlYnVnKGBDb21waWxpbmcgdGhlIG1hbmlmZXN0IHVzaW5nICcke3V0aWwucXVvdGUoW3RoaXMuYmluYXJpZXMuYWFwdDIsIC4uLmFyZ3NdKX0nYCk7XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQyLCBhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0IHVzaW5nIGFhcHQyLiBEZWZhdWx0aW5nIHRvIGFhcHQuICcgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0KCk7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdwYWNrYWdlJyxcbiAgICAgICctTScsIG1hbmlmZXN0LFxuICAgICAgJy0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UnLCBtYW5pZmVzdFBhY2thZ2UsXG4gICAgICAnLS1yZW5hbWUtaW5zdHJ1bWVudGF0aW9uLXRhcmdldC1wYWNrYWdlJywgdGFyZ2V0UGFja2FnZSxcbiAgICAgICctSScsIGFuZHJvaWRKYXJQYXRoLFxuICAgICAgJy1GJywgcmVzdWx0UGF0aCxcbiAgICAgICctZicsXG4gICAgXTtcbiAgICBsb2cuZGVidWcoYENvbXBpbGluZyB0aGUgbWFuaWZlc3QgdXNpbmcgJyR7dXRpbC5xdW90ZShbdGhpcy5iaW5hcmllcy5hYXB0LCAuLi5hcmdzXSl9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuYWFwdCwgYXJncyk7XG4gICAgfSBjYXRjaCAoZTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBPcmlnaW5hbCBlcnJvcjogJHtlMS5zdGRlcnIgfHwgZTEubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGBDb21waWxlZCB0aGUgbWFuaWZlc3QgYXQgJyR7cmVzdWx0UGF0aH0nYCk7XG59O1xuXG4vKipcbiAqIFJlcGxhY2UvaW5zZXJ0IHRoZSBzcGVjaWFsbHkgcHJlY29tcGlsZWQgbWFuaWZlc3QgZmlsZSBpbnRvIHRoZVxuICogcGFydGljdWxhciBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdCAtIEZ1bGwgcGF0aCB0byB0aGUgcHJlY29tcGlsZWQgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgYGNvbXBpbGVNYW5pZmVzdGAgbWV0aG9kIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgLmFwayBleHRlbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNBcGsgLSBGdWxsIHBhdGggdG8gdGhlIGV4aXN0aW5nIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UsIHdoZXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYW5pZmVzdCBoYXMgdG8gYmUgaW5zZXRyZWQgdG8uIFRoaXMgcGFja2FnZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgTk9UIGJlIG1vZGlmaWVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdEFwayAtIEZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIHBhY2thZ2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgd2lsbCBiZSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaW5zZXJ0TWFuaWZlc3QgPSBhc3luYyBmdW5jdGlvbiBpbnNlcnRNYW5pZmVzdCAobWFuaWZlc3QsIHNyY0FwaywgZHN0QXBrKSB7XG4gIGxvZy5kZWJ1ZyhgSW5zZXJ0aW5nIG1hbmlmZXN0ICcke21hbmlmZXN0fScsIHNyYzogJyR7c3JjQXBrfScsIGRzdDogJyR7ZHN0QXBrfSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHNyY0Fwayk7XG4gIGF3YWl0IHVuemlwRmlsZShgJHttYW5pZmVzdH0uYXBrYCk7XG4gIGNvbnN0IG1hbmlmZXN0TmFtZSA9IHBhdGguYmFzZW5hbWUobWFuaWZlc3QpO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNBcGssIGRzdEFwayk7XG4gICAgbG9nLmRlYnVnKCdNb3ZpbmcgbWFuaWZlc3QnKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICAgJ3JlbW92ZScsIGRzdEFwaywgbWFuaWZlc3ROYW1lXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICdhZGQnLCBkc3RBcGssIG1hbmlmZXN0TmFtZVxuICAgIF0sIHtjd2Q6IHBhdGguZGlybmFtZShtYW5pZmVzdCl9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGluc2VydCBtYW5pZmVzdCB1c2luZyBhYXB0LiBEZWZhdWx0aW5nIHRvIHppcC4gJyArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgLy8gVW5mb3J0dW5hdGVseSBOb2RlSlMgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVsaWFibGUgbWV0aG9kc1xuICAgICAgLy8gdG8gcmVwbGFjZSBmaWxlcyBpbnNpZGUgemlwIGFyY2hpdmVzIHdpdGhvdXQgbG9hZGluZyB0aGVcbiAgICAgIC8vIHdob2xlIGFyY2hpdmUgY29udGVudCBpbnRvIFJBTVxuICAgICAgbG9nLmRlYnVnKGBFeHRyYWN0aW5nIHRoZSBzb3VyY2UgYXBrIGF0ICcke3NyY0Fwa30nYCk7XG4gICAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHNyY0FwaywgdG1wUm9vdCk7XG4gICAgICBsb2cuZGVidWcoJ01vdmluZyBtYW5pZmVzdCcpO1xuICAgICAgYXdhaXQgZnMubXYobWFuaWZlc3QsIHBhdGgucmVzb2x2ZSh0bXBSb290LCBtYW5pZmVzdE5hbWUpKTtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29sbGVjdGluZyB0aGUgZGVzdGluYXRpb24gYXBrIGF0ICcke2RzdEFwa30nYCk7XG4gICAgICBhd2FpdCB6aXAudG9BcmNoaXZlKGRzdEFwaywge1xuICAgICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoYE1hbmlmZXN0IGluc2VydGlvbiBpbnRvICcke2RzdEFwa30nIGlzIGNvbXBsZXRlZGApO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHBhY2thZ2UgbWFuaWZlc3QgY29udGFpbnMgSW50ZXJuZXQgcGVybWlzc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgZnVsbCBwYXRoIHRvIC5hcGsocykgcGFja2FnZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hbmlmZXN0IHJlcXVpcmVzIEludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgaWYgJyR7YXBwUGF0aH0nIHJlcXVpcmVzIGludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uIGluIHRoZSBtYW5pZmVzdGApO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgcmV0dXJuIChtYW5pZmVzdC51c2VzUGVybWlzc2lvbnMgfHwgW10pLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWFuaWZlc3RNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYW5kcm9pZC1tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|