oxygen-cli 1.34.2 → 1.35.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -1
- package/build/lib/util.js +5 -1
- package/build/ox_modules/module-email.js +67 -7
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.35.2 (2024-07-30)
|
|
4
|
+
|
|
5
|
+
#### :beetle: Bug Fix
|
|
6
|
+
* Fix invalid transaction hierarchy in results when using hooks.
|
|
7
|
+
|
|
8
|
+
## v1.35.0 (2024-06-18)
|
|
9
|
+
|
|
10
|
+
#### :tada: New Feature
|
|
11
|
+
* Add support for sending emails with `email` module.
|
|
12
|
+
|
|
3
13
|
## v1.34.1 (2024-06-10)
|
|
4
14
|
|
|
5
15
|
#### :house: Internal
|
|
@@ -7,7 +17,7 @@
|
|
|
7
17
|
|
|
8
18
|
## v1.34.0 (2024-06-07)
|
|
9
19
|
|
|
10
|
-
#### :
|
|
20
|
+
#### :tada: New Feature
|
|
11
21
|
* Add NTLM authentication support to `http` module.
|
|
12
22
|
|
|
13
23
|
## v1.33.6 (2024-06-06)
|
package/build/lib/util.js
CHANGED
|
@@ -287,6 +287,10 @@ var self = module.exports = {
|
|
|
287
287
|
return null;
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
+
if (['beforeTest', 'beforeSuite', 'beforeCase', 'afterCase', 'afterSuite', 'afterTest'].includes(method)) {
|
|
291
|
+
global._lastTransactionName = null;
|
|
292
|
+
}
|
|
293
|
+
|
|
290
294
|
try {
|
|
291
295
|
if (global.chaiAndMockeryLoaded) {} else {
|
|
292
296
|
const chai = require('chai');
|
|
@@ -442,4 +446,4 @@ var self = module.exports = {
|
|
|
442
446
|
}
|
|
443
447
|
}
|
|
444
448
|
};
|
|
445
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiZG93bmxvYWQiLCJyZXF1ZXN0IiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSIsIkRPV05MT0FEX1JFVFJJRVMiLCJET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUiLCJnZXRWaWRlb0F0dGFjaG1lbnRQYXRoIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiY3dkIiwiZ2V0Q3dkIiwiYXR0YWNobWVudHNEaXJQYXRoIiwiam9pbiIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJwcm9jZXNzIiwicm9vdFBhdGgiLCJ0cmltIiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImdldFRpbWVTdGFtcCIsInV0YyIsInZhbHVlT2YiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic3VpdGVEZWYiLCJ0ZXN0Q29uZmlnIiwiaXRlcmF0aW9uQ291bnQiLCJzdWl0ZSIsImlkIiwibmFtZSIsIml0ZXJhdGlvbnMiLCJzdWl0ZUZpbGVQYXRoIiwidGFyZ2V0IiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImNhc2VzIiwiZm9yRWFjaCIsImNhc2VEZWYiLCJ0YyIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlc29sdmVQYXRoIiwiZm9ybWF0IiwicHVzaCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsImZpbGVQYXRoIiwicGFyYW1GaWxlIiwicGFyYW1Nb2RlIiwibm9QYXJhbUF1dG9TZWFyY2giLCJmaWxlTmFtZU5vRXh0IiwidGVzdGNhc2UiLCJyZW9wZW5TZXNzaW9uIiwiZGlybmFtZSIsImZpbGUiLCJtb2RlIiwibWFpbkZpbGVQYXRoIiwicGFyYW1PcHRzIiwiYXV0b1NlYXJjaCIsInBhcmFtRmlsZVBhdGgiLCJpc0Fic29sdXRlIiwibG9hZFBhcmFtZXRlck1hbmFnZXIiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJpbml0IiwicGF0aFRvUmVzb2x2ZSIsImJhc2VGb2xkZXIiLCJyZXNvbHZlIiwibWFrZVNlcmlhbGl6YWJsZSIsImVyciIsImRlc3Ryb3lDaXJjdWxhciIsImZyb20iLCJzZWVuIiwidG8iLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsInNsaWNlIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJtZXRob2RBcmdzIiwic3RyaW5naWZ5IiwiYXJncyIsImluZGVudGF0aW9uIiwiU3RyaW5nIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInZhbHVlIiwiRXJyb3IiLCJSZWdFeHAiLCJzb3VyY2UiLCJmbGFncyIsInJlcGxhY2UiLCJlbmRzV2l0aCIsImUiLCJjb25zb2xlIiwid2FybiIsImluc3BlY3QiLCJkZXB0aCIsImlzSW5EZWJ1Z01vZGUiLCJsb2FkVGVzdEhvb2tzIiwiaG9va3MiLCJleGVjdXRlVGVzdEhvb2siLCJtZXRob2QiLCJnbG9iYWwiLCJjaGFpQW5kTW9ja2VyeUxvYWRlZCIsImNoYWkiLCJtb2NrZXJ5IiwiZW5hYmxlIiwidXNlQ2xlYW5DYWNoZSIsIndhcm5PblJlcGxhY2UiLCJ3YXJuT25VbnJlZ2lzdGVyZWQiLCJyZWdpc3Rlck1vY2siLCJhcHBseSIsInVuZGVmaW5lZCIsImVycm9yIiwiZ2V0T3hNb2R1bGVzRGlyIiwiX19kaXJuYW1lIiwiaG9va0xvZ3MiLCJsb2dnZXIiLCJvcmlnbG9nIiwibG9nIiwib3JpZ0RlYnVnIiwiZGVidWciLCJvcmlnSW5mbyIsImluZm8iLCJvcmlnV2FybiIsIm9yaWdFcnJvciIsInByb2Nlc3NBcmdzIiwiYXJndW1lbnRBcnJheSIsIm1hcCIsIml0ZW0iLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJzdGVwcyIsImxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4IiwibmV3U3RlcHMiLCJpZHgiLCJpbmNsdWRlcyIsInN0YXR1cyIsImRlY3J5cHQiLCJ0ZXh0IiwiZW5jcnlwdGVkVGV4dCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsImRlY3J5cHRlZCIsInVwZGF0ZSIsImNvbmNhdCIsImZpbmFsIiwicmV0VmFsIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIkNSWVBUT19FUlJPUiIsImVuY3J5cHQiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuY3J5cHRlZCIsInNsZWVwIiwidGltZW91dCIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiZG93bmxvYWRWaWRlbyIsInZpZGVvVXJsIiwibG9jYWxWaWRlb0ZpbGVQYXRoIiwiaSIsIndyaXRlRmlsZVN5bmMiLCJ1cmwiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVk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QVAsRUFBVTtBQUNOcUIsUUFBQUEsS0FBSyxHQUFHckIsQ0FBUjtBQUNIOztBQUNELFlBQU1uRyxJQUFJLENBQUNrSyxLQUFMLENBQVcvSyx3QkFBWCxDQUFOO0FBQ0g7O0FBQ0QsUUFBSSxDQUFDcUksS0FBTCxFQUFZO0FBRVIsWUFBTWxJLE9BQU8sR0FBRztBQUNacUwsUUFBQUEsR0FBRyxFQUFFSixRQURPO0FBRVozRCxRQUFBQSxNQUFNLEVBQUUsUUFGSTtBQUdaZ0UsUUFBQUEsSUFBSSxFQUFFLEtBSE07QUFJWkMsUUFBQUEsa0JBQWtCLEVBQUU7QUFKUixPQUFoQjs7QUFPQSxVQUFJO0FBQ0EsZUFBTyxJQUFJVCxPQUFKLENBQVksQ0FBQ2hHLE9BQUQsRUFBVTBHLE1BQVYsS0FBcUI7QUFDcEMzTSxVQUFBQSxPQUFPLENBQUNtQixPQUFELEVBQVUsQ0FBQ2dGLEdBQUQsRUFBTXlHLEdBQU4sRUFBV0MsSUFBWCxLQUFvQjtBQUFFNUcsWUFBQUEsT0FBTyxDQUFDRSxHQUFHLEdBQUcsSUFBSCxHQUFVa0csa0JBQWQsQ0FBUDtBQUEyQyxXQUEzRSxDQUFQO0FBQ0gsU0FGTSxDQUFQO0FBR0gsT0FKRCxDQUtBLE9BQU9yRSxDQUFQLEVBQVU7QUFDTkMsUUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsc0RBQWIsRUFBcUVGLENBQUMsQ0FBQzhFLE9BQXZFO0FBQ0g7QUFDSixLQWpCRCxNQWtCSztBQUNEN0UsTUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsZ0RBQWIsRUFBK0RtQixLQUFLLENBQUN5RCxPQUFyRTtBQUNIO0FBQ0o7QUF2WXVCLENBQTVCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaW50ZXJuYWwgT3h5Z2VuIHVzZVxyXG4gKi9cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcclxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IHBhc3N3b3JkID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykuZW5jcnlwdGlvbktleTtcclxuY29uc3Qga2V5ID0gY3J5cHRvLnNjcnlwdFN5bmMocGFzc3dvcmQsICdHZkcnLCAyNCk7XHJcbmNvbnN0IGl2ID0gQnVmZmVyLmFsbG9jKDE2LCAwKTtcclxuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xOTItY2JjJztcclxuY29uc3QgZG93bmxvYWQgPSByZXF1aXJlKCdkb3dubG9hZCcpO1xyXG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZSgncmVxdWVzdCcpO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG5jb25zdCBDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSA9ICcuY2ItYXR0YWNobWVudHMnO1xyXG5jb25zdCBET1dOTE9BRF9SRVRSSUVTID0gNDA7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJZX1dBSVRfVElNRSA9IDI1MDA7XHJcblxyXG5mdW5jdGlvbiBnZXRWaWRlb0F0dGFjaG1lbnRQYXRoKGZpbGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBjd2QgPSBnZXRDd2Qob3B0aW9ucyk7XHJcbiAgICBjb25zdCBhdHRhY2htZW50c0RpclBhdGggPSBwYXRoLmpvaW4oY3dkLCBDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSk7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYXR0YWNobWVudHNEaXJQYXRoKSkge1xyXG4gICAgICAgIGZzLm1rZGlyU3luYyhhdHRhY2htZW50c0RpclBhdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGguam9pbihhdHRhY2htZW50c0RpclBhdGgsIGZpbGVOYW1lKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q3dkID0gKG9wdGlvbnMpID0+IHtcclxuICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xyXG5cclxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3dkKSB7XHJcbiAgICAgICAgY3dkID0gb3B0aW9ucy5jd2Q7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMucm9vdFBhdGgpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLnJvb3RQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjd2QudHJpbSgpO1xyXG59O1xyXG5cclxudmFyIHNlbGYgPSBtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZUlkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VGltZVN0YW1wOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50LnV0YygpLnZhbHVlT2YoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbjogYXN5bmMgZnVuY3Rpb24oc3VpdGVEZWYsIHRlc3RDb25maWcsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLmlkID0gbnVsbDtcclxuICAgICAgICBzdWl0ZS5uYW1lID0gc3VpdGVEZWYubmFtZTtcclxuICAgICAgICBzdWl0ZS5pZCA9IHN1aXRlRGVmLmlkO1xyXG4gICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGVEZWYuaXRlcmF0aW9ucyB8fCBzdWl0ZURlZi5pdGVyYXRpb25Db3VudCB8fCB0ZXN0Q29uZmlnLml0ZXJhdGlvbnMgfHwgaXRlcmF0aW9uQ291bnQ7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVGaWxlUGF0aCA9IHN1aXRlRGVmLnBhdGggfHwgcGF0aC5qb2luKHRlc3RDb25maWcudGFyZ2V0LmN3ZCwgJ3N1aXRlcycsIGAke3N1aXRlRGVmLm5hbWV9Lmpzb25gKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoc3VpdGVGaWxlUGF0aCwgdGVzdENvbmZpZy5wYXJhbWV0ZXJzLCB0ZXN0Q29uZmlnLnRhcmdldC5jd2QpO1xyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgc3VpdGUucGFyYW1NYW5hZ2VyLmdldE1vZGUoKSA9PSAnYWxsJykge1xyXG4gICAgICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlLnBhcmFtTWFuYWdlci5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWl0ZS5jYXBhYmlsaXRpZXMgPSBzdWl0ZURlZi5jYXBhYmlsaXRpZXMgfHwgdGVzdENvbmZpZy5jYXBhYmlsaXRpZXMgfHwge307XHJcbiAgICAgICAgc3VpdGUuZW52aXJvbm1lbnQgPSB0ZXN0Q29uZmlnLmVudmlyb25tZW50IHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUub3B0aW9ucyA9IHRlc3RDb25maWcub3B0aW9ucyB8fCBudWxsO1xyXG4gICAgICAgIHN1aXRlLnBhcmFsbGVsID0gc3VpdGVEZWYucGFyYWxsZWwgfHwgdGVzdENvbmZpZy5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLmNvbmN1cnJlbmN5IHx8IDE7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBlYWNoIHRlc3QgY2FzZVxyXG4gICAgICAgIHN1aXRlRGVmLmNhc2VzLmZvckVhY2goY2FzZURlZiA9PiB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGVzdGNhc2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICAgICAgaWYgKGNhc2VEZWYubmFtZSlcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBjYXNlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChjYXNlRGVmLnBhdGgpO1xyXG4gICAgICAgICAgICB0Yy5wYXRoID0gc2VsZi5yZXNvbHZlUGF0aChjYXNlRGVmLnBhdGgsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgICAgIHRjLmZvcm1hdCA9ICdqcyc7XHJcbiAgICAgICAgICAgIHRjLml0ZXJhdGlvbkNvdW50ID0gY2FzZURlZi5pdGVyYXRpb25zIHx8IGNhc2VEZWYuaXRlcmF0aW9uQ291bnQgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXEnKTtcclxuICAgICAgICAgICAgYXdhaXQgcGFyYW1NYW5hZ2VyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtTWFuYWdlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc29sdmVQYXRoOiBmdW5jdGlvbihwYXRoVG9SZXNvbHZlLCBiYXNlRm9sZGVyKSB7XHJcbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShwYXRoVG9SZXNvbHZlKSlcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGhUb1Jlc29sdmU7XHJcbiAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoVG9SZXNvbHZlKTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVNlcmlhbGl6YWJsZTogZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXN0cm95Q2lyY3VsYXIoZXJyLCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcnI7XHJcblxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25wYWNrZXIvZGVzdHJveS1jaXJjdWxhclxyXG4gICAgICAgIGZ1bmN0aW9uIGRlc3Ryb3lDaXJjdWxhcihmcm9tLCBzZWVuKSB7XHJcbiAgICAgICAgICAgIHZhciB0byA9IEFycmF5LmlzQXJyYXkoZnJvbSkgPyBbXSA6IHt9O1xyXG4gICAgICAgICAgICBzZWVuLnB1c2goZnJvbSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZyb20pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZyb21ba2V5XSB8fCAodHlwZW9mIGZyb21ba2V5XSAhPSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShmcm9tW2tleV0pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZW4uaW5kZXhPZihmcm9tW2tleV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGRlc3Ryb3lDaXJjdWxhcihmcm9tW2tleV0sIHNlZW4uc2xpY2UoMCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHRvW2tleV0gPSAnW0NpcmN1bGFyXSc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdG87XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRNZXRob2RTaWduYXR1cmU6IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIG1ldGhvZEFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlTmFtZSArICcuJyArIG1ldGhvZE5hbWUgKyAnKCcgKyBzZWxmLnN0cmluZ2lmeShtZXRob2RBcmdzLCAwKSArICcpJztcclxuICAgIH0sXHJcblxyXG4gICAgLypcclxuICAgICAqIFVzZWQgdG8gc2VyaWFsaXplIG94eWdlbiBjb21tYW5kIHBhcmFtZXRlcnMuIFByb2R1Y2VzIGEgbm9uLWNvbXBsaWFudCBKU09OIHNlcmlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGFyZ3MsIGluZGVudGF0aW9uID0gMCkge1xyXG4gICAgICAgIC8vIHJldHVybiBzdHJpbmdzIGFzIGlzIChvdGhlcndpc2UgaWYgd2Ugc2VyaWFsaXplIHN0cmluZyBpdCB3aWxsIGdldCB3cmFwcGVkIGluIGRvdWJsZSBxdW90ZXMpXHJcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJyB8fCBhcmdzIGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBhcmdzWzBdIGluc3RhbmNlb2YgU3RyaW5nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdHI7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyID0gSlNPTi5zdHJpbmdpZnkoYXJncywgKGtleSwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7ICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL2pzYmkvaXNzdWVzLzMwXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdW5kZWZpbmVkIGlzIGluc2lkZSBhbiBhcnJheSB0aGVuIGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBudWxsLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIgaWYgd2UganVzdCByZXR1cm4gJ3VuZGVmaW5lZCcgaGVyZSBhcyBzdHJpbmcsIGl0IHdpbGwgYmUgZW5jbG9zZWQgaW4gcXVvdGVzLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHJldHVybiBtYWdpYyBzdHJpbmcgaW5zdGVhZCBhbmQgdHJpbSB0aGUgcXVvdGVzIGxhdGVyIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdfX1VOREVGSU5FRCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy8nICsgdmFsdWUuc291cmNlICsgJy8nICsgdmFsdWUuZmxhZ3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH0sIGluZGVudGF0aW9uKTtcclxuICAgICAgICAgICAgLy8gdHJpbSB0aGUgZW5jbG9zaW5nIGFycmF5IGFuZCBhbnkgd2hpdGVzcGFjZVxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcW3sxfVxccyp8XFxzKlxcXXsxfSQvZywgJycpO1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgc3BhY2UgYmVmb3JlIGxhc3QgfSBhbmQgXSwgdG8gbWFrZSBpbmRlbnRhdGlvbiBtdGNoIHRoZSBvcGVuaW5nIGJyYWNrZXRcclxuICAgICAgICAgICAgaWYgKHN0ci5lbmRzV2l0aCgnICB9JykpIHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDMpICsgJ30nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgXScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICddJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IG1hZ2ljICd1bmRlZmluZWQnIHN0cmluZyB0byBwcm9wZXIgcmVwcmVzZW50YXRpb25cclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1wiX19VTkRFRklORURcIi9nLCAndW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzZXJpYWxpemUgY29tbWFuZCBhcmd1bWVudHM6ICcsIGUpO1xyXG4gICAgICAgICAgICAvLyBpZiBKU09OLnN0cmluZ2lmeSBmYWlscywgdGhlbiBmYWxsYmFjayB0byB1dGlsLmluc3BlY3QuXHJcbiAgICAgICAgICAgIC8vICh3ZSBkb24ndCB1c2UgdXRpbC5pbnNwZWN0IGluaXRpYWx5IGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IG91dHB1dCBpbmRlbnRhdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuIHV0aWwuaW5zcGVjdChhcmdzWzBdLCB7IGRlcHRoOiAzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc0luRGVidWdNb2RlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyB0aGlzIGFsd2F5cyB0cnVlO1xyXG4gICAgICAgIC8vIGNvbnN0IGFyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2LmpvaW4oKTtcclxuXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Byb2Nlc3MuZGVidWdQb3J0JywgcHJvY2Vzcy5kZWJ1Z1BvcnQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpXCIsIGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnZGVidWcnKVwiLCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpKTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIHByb2Nlc3MuZGVidWdQb3J0IHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKSB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpIHx8IGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJyk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFRlc3RIb29rczogZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gICAgICAgIGxldCBob29rcyA9IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudGFyZ2V0ICYmIG9wdGlvbnMudGFyZ2V0Lm5hbWUgPT09ICdveHlnZW4uY29uZicpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGhvb2tzID0gcmVxdWlyZShvcHRpb25zLnRhcmdldC5wYXRoKS5ob29rcyB8fCBEVU1NWV9IT09LUztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBsb2FkaW5nIHVzZXIgaG9va3M6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhvb2tzO1xyXG4gICAgfSxcclxuXHJcbiAgICBleGVjdXRlVGVzdEhvb2s6IGFzeW5jIGZ1bmN0aW9uKGhvb2tzLCBtZXRob2QsIGFyZ3MpIHtcclxuICAgICAgICAvLyBpZiBob29rIGlzIG5vdCBkZWZpbmVkLCBqdXN0IHF1aWV0bHkgaWdub3JlIGl0XHJcbiAgICAgICAgaWYgKCFob29rcyB8fCAhbWV0aG9kIHx8ICFob29rc1ttZXRob2RdIHx8IHR5cGVvZiBob29rc1ttZXRob2RdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZXJ5ID0gcmVxdWlyZSgnbW9ja2VyeScpO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5lbmFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsZWFuQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uUmVwbGFjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uVW5yZWdpc3RlcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hhaScsIGNoYWkpO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgaG9va3NbbWV0aG9kXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIb29rIFwiJHttZXRob2R9XCIgaGFzIHRocm93biBhbiBlcnJvcjogJHtlLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRPeE1vZHVsZXNEaXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb3hfbW9kdWxlcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBob29rTG9ncyhsb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBvcmlnbG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0RlYnVnID0gY29uc29sZS5kZWJ1ZztcclxuICAgICAgICBjb25zdCBvcmlnSW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgICBjb25zdCBvcmlnV2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgICBjb25zdCBvcmlnRXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzQXJncyA9IChhcmd1bWVudEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudEFycmF5ICYmIGFyZ3VtZW50QXJyYXkubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudEFycmF5Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7aXRlbX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHt1dGlsLmluc3BlY3QoaXRlbSl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ2xvZy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdEZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdJbmZvLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnV2Fybi5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoc3RlcHMpIHtcclxuICAgICAgICBpZiAoc3RlcHMgJiYgc3RlcHMubGVuZ3RoICYmIHN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gWy4uLnN0ZXBzXTtcclxuICAgICAgICAgICAgc3RlcHMubWFwKChpdGVtLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLmluY2x1ZGVzICYmIGl0ZW0ubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uKCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBpZHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9PT0gJ251bWJlcicgJiYgaXRlbS5zdGF0dXMgJiYgaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RlcHNbbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXhdWydzdGF0dXMnXSA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGVwcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH0sXHJcblxyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGVuY3J5cHRlZFRleHQgPSBCdWZmZXIuZnJvbSh0ZXh0LCAnaGV4Jyk7XHJcbiAgICAgICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkVGV4dCk7XHJcbiAgICAgICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWYWwgPSBkZWNyeXB0ZWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNyeXB0UmVzdWx0KHJldFZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3h5Z2VuRXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNSWVBUT19FUlJPUiwgXCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgZG9lc24ndCBzZWVtIHRvIGJlIGEgdmFsaWQgY2lwaGVyIHByb2R1Y2VkIGJ5ICd1dGlscy5lbmNyeXB0J1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZSh0ZXh0KTtcclxuICAgICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNsZWVwOiBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcclxuICAgIH0sXHJcblxyXG4gICAgZG93bmxvYWRWaWRlbzogYXN5bmMgZnVuY3Rpb24oZmlsZU5hbWUsIHZpZGVvVXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxWaWRlb0ZpbGVQYXRoID0gZ2V0VmlkZW9BdHRhY2htZW50UGF0aChmaWxlTmFtZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxET1dOTE9BRF9SRVRSSUVTOyBpKyspIHtcclxuICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGxvY2FsVmlkZW9GaWxlUGF0aCwgYXdhaXQgZG93bmxvYWQodmlkZW9VcmwpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgc2VsZi5zbGVlcChET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgdmlkZW8gZmlsZSBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogdmlkZW9VcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHsgcmVzb2x2ZShlcnIgPyBudWxsIDogbG9jYWxWaWRlb0ZpbGVQYXRoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZGVsZXRlIHZpZGVvIGZpbGUgZnJvbSB0aGUgcmVtb3RlIHNlcnZlcjogJywgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZG93bmxvYWQgYW5kIHNhdmUgdmlkZW8gYXR0YWNobWVudDogJywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufTtcclxuIl19
|
|
449
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiZG93bmxvYWQiLCJyZXF1ZXN0IiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSIsIkRPV05MT0FEX1JFVFJJRVMiLCJET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUiLCJnZXRWaWRlb0F0dGFjaG1lbnRQYXRoIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiY3dkIiwiZ2V0Q3dkIiwiYXR0YWNobWVudHNEaXJQYXRoIiwiam9pbiIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJwcm9jZXNzIiwicm9vdFBhdGgiLCJ0cmltIiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImdldFRpbWVTdGFtcCIsInV0YyIsInZhbHVlT2YiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic3VpdGVEZWYiLCJ0ZXN0Q29uZmlnIiwiaXRlcmF0aW9uQ291bnQiLCJzdWl0ZSIsImlkIiwibmFtZSIsIml0ZXJhdGlvbnMiLCJzdWl0ZUZpbGVQYXRoIiwidGFyZ2V0IiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImNhc2VzIiwiZm9yRWFjaCIsImNhc2VEZWYiLCJ0YyIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlc29sdmVQYXRoIiwiZm9ybWF0IiwicHVzaCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsImZpbGVQYXRoIiwicGFyYW1GaWxlIiwicGFyYW1Nb2RlIiwibm9QYXJhbUF1dG9TZWFyY2giLCJmaWxlTmFtZU5vRXh0IiwidGVzdGNhc2UiLCJyZW9wZW5TZXNzaW9uIiwiZGlybmFtZSIsImZpbGUiLCJtb2RlIiwibWFpbkZpbGVQYXRoIiwicGFyYW1PcHRzIiwiYXV0b1NlYXJjaCIsInBhcmFtRmlsZVBhdGgiLCJpc0Fic29sdXRlIiwibG9hZFBhcmFtZXRlck1hbmFnZXIiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJpbml0IiwicGF0aFRvUmVzb2x2ZSIsImJhc2VGb2xkZXIiLCJyZXNvbHZlIiwibWFrZVNlcmlhbGl6YWJsZSIsImVyciIsImRlc3Ryb3lDaXJjdWxhciIsImZyb20iLCJzZWVuIiwidG8iLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsInNsaWNlIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJtZXRob2RBcmdzIiwic3RyaW5naWZ5IiwiYXJncyIsImluZGVudGF0aW9uIiwiU3RyaW5nIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInZhbHVlIiwiRXJyb3IiLCJSZWdFeHAiLCJzb3VyY2UiLCJmbGFncyIsInJlcGxhY2UiLCJlbmRzV2l0aCIsImUiLCJjb25zb2xlIiwid2FybiIsImluc3BlY3QiLCJkZXB0aCIsImlzSW5EZWJ1Z01vZGUiLCJsb2FkVGVzdEhvb2tzIiwiaG9va3MiLCJleGVjdXRlVGVzdEhvb2siLCJtZXRob2QiLCJpbmNsdWRlcyIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4Iiwic3RhdHVzIiwiZGVjcnlwdCIsInRleHQiLCJlbmNyeXB0ZWRUZXh0IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwiZGVjcnlwdGVkIiwidXBkYXRlIiwiY29uY2F0IiwiZmluYWwiLCJyZXRWYWwiLCJPeHlnZW5FcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1JZUFRPX0VSUk9SIiwiZW5jcnlwdCIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInNldFRpbWVvdXQiLCJkb3dubG9hZFZpZGVvIiwidmlkZW9VcmwiLCJsb2NhbFZpZGVvRmlsZVBhdGgiLCJpIiwid3JpdGVGaWxlU3luYyIsInVybCIsImpz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Y2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5jb25zdCBkb3dubG9hZCA9IHJlcXVpcmUoJ2Rvd25sb2FkJyk7XHJcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdyZXF1ZXN0Jyk7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbmNvbnN0IENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FID0gJy5jYi1hdHRhY2htZW50cyc7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJJRVMgPSA0MDtcclxuY29uc3QgRE9XTkxPQURfUkVUUllfV0FJVF9USU1FID0gMjUwMDtcclxuXHJcbmZ1bmN0aW9uIGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGN3ZCA9IGdldEN3ZChvcHRpb25zKTtcclxuICAgIGNvbnN0IGF0dGFjaG1lbnRzRGlyUGF0aCA9IHBhdGguam9pbihjd2QsIENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhhdHRhY2htZW50c0RpclBhdGgpKSB7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGF0dGFjaG1lbnRzRGlyUGF0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKGF0dGFjaG1lbnRzRGlyUGF0aCwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDd2QgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jd2QpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLmN3ZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb290UGF0aCkge1xyXG4gICAgICAgIGN3ZCA9IG9wdGlvbnMucm9vdFBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN3ZC50cmltKCk7XHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50IHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgY2FzZURlZi5pdGVyYXRpb25Db3VudCB8fCAxO1xyXG4gICAgICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUgPSBudWxsLCBwYXJhbU1vZGUgPSBudWxsLCBub1BhcmFtQXV0b1NlYXJjaCA9IHRydWUsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgdGVzdGNhc2UgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgIHRlc3RjYXNlLm5hbWUgPSBmaWxlTmFtZU5vRXh0O1xyXG4gICAgICAgIHRlc3RjYXNlLnBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0ZXN0Y2FzZS5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgIHRlc3RjYXNlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHRlc3RjYXNlLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSB0ZXN0Y2FzZS5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGVzdGNhc2UpO1xyXG4gICAgICAgIGlmICh0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnJlb3BlblNlc3Npb24gPSB0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjd2QgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihmaWxlUGF0aCwgeyBmaWxlOiBwYXJhbUZpbGUsIG1vZGU6IHBhcmFtTW9kZSB9LCBjd2QpO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgaXMgJ2FsbCcgdGhlbiBjaGFuZ2UgaXRlcmF0aW9uQ291bnQgdG8gdGhlIGFtb3VudCBvZiByb3dzIGluIHRoZSBwYXJhbSBmaWxlXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBwYXJhbU1vZGUgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZVBhdGgsIHBhcmFtT3B0cyA9IG51bGwsIGN3ZCA9IG51bGwsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwYXJhbUZpbGVQYXRoID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5maWxlID8gcGFyYW1PcHRzLmZpbGUgOiBudWxsO1xyXG4gICAgICAgIGxldCBwYXJhbU1vZGUgPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLm1vZGUgPyBwYXJhbU9wdHMubW9kZSA6ICdzZXEnO1xyXG5cclxuICAgICAgICBpZiAocGFyYW1GaWxlUGF0aCAmJiBjd2QgJiYgIXBhdGguaXNBYnNvbHV0ZShwYXJhbUZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBwYXJhbUZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgcGFyYW1GaWxlUGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5sb2FkUGFyYW1ldGVyTWFuYWdlcihtYWluRmlsZVBhdGgsIHBhcmFtRmlsZVBhdGgsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlOiBhc3luYyBmdW5jdGlvbiAoZmlsZVBhdGgsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyB8fCB7fSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgdGVzdENvbmZpZy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogcGFyYW1GaWxlLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogcGFyYW1Nb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHJlcXVpcmUoZmlsZVBhdGgpLCB0ZXN0Q29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RmlsZU5hbWVXaXRob3V0RXh0OiBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVQYXRoTm9FeHQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoZmlsZUV4dCkpO1xyXG4gICAgICAgIHJldHVybiBmaWxlUGF0aE5vRXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkUGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGUsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgcGFyYW1NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAvLyBpZiBwYXJhbSBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY2hlY2sgaWYgSlMgZmlsZSBpcyBjb21pbmcgaW4gcGFpciB3aXRoIGEgcGFyYW1ldGVyIGZpbGUgXHJcbiAgICAgICAgLy8gKGN1cnJlbnRseSBzdXBwb3J0aW5nIENTViBvciBUWFQpXHJcbiAgICAgICAgaWYgKCFwYXJhbUZpbGUgJiYgYXV0b1NlYXJjaCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KG1haW5GaWxlKTtcclxuICAgICAgICAgICAgdmFyIGNzdlBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy5jc3YnKTtcclxuICAgICAgICAgICAgdmFyIHR4dFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy50eHQnKTtcclxuICAgICAgICAgICAgdmFyIHhsc1BhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHMnKTtcclxuICAgICAgICAgICAgdmFyIHhsc3hQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzeCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY3N2UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gY3N2UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmModHh0UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gdHh0UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzUGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzUGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzeFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc3hQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICBwYXJhbU1hbmFnZXIgPSBuZXcgcmVxdWlyZSgnLi9wYXJhbS1tYW5hZ2VyJykocGFyYW1GaWxlLCBwYXJhbU1vZGUgfHwgJ3NlcScpO1xyXG4gICAgICAgICAgICBhd2FpdCBwYXJhbU1hbmFnZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1NYW5hZ2VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHBhdGhUb1Jlc29sdmUsIGJhc2VGb2xkZXIpIHtcclxuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHBhdGhUb1Jlc29sdmUpKVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0aFRvUmVzb2x2ZTtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGhUb1Jlc29sdmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlU2VyaWFsaXphYmxlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3lDaXJjdWxhcihlcnIsIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycjtcclxuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pvbnBhY2tlci9kZXN0cm95LWNpcmN1bGFyXHJcbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveUNpcmN1bGFyKGZyb20sIHNlZW4pIHtcclxuICAgICAgICAgICAgdmFyIHRvID0gQXJyYXkuaXNBcnJheShmcm9tKSA/IFtdIDoge307XHJcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZnJvbVtrZXldIHx8ICh0eXBlb2YgZnJvbVtrZXldICE9ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZyb21ba2V5XSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vlbi5pbmRleE9mKGZyb21ba2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZGVzdHJveUNpcmN1bGFyKGZyb21ba2V5XSwgc2Vlbi5zbGljZSgwKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgdG9ba2V5XSA9ICdbQ2lyY3VsYXJdJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1ldGhvZFNpZ25hdHVyZTogZnVuY3Rpb24obW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgbWV0aG9kQXJncykge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVOYW1lICsgJy4nICsgbWV0aG9kTmFtZSArICcoJyArIHNlbGYuc3RyaW5naWZ5KG1ldGhvZEFyZ3MsIDApICsgJyknO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKlxyXG4gICAgICogVXNlZCB0byBzZXJpYWxpemUgb3h5Z2VuIGNvbW1hbmQgcGFyYW1ldGVycy4gUHJvZHVjZXMgYSBub24tY29tcGxpYW50IEpTT04gc2VyaWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoYXJncywgaW5kZW50YXRpb24gPSAwKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHN0cmluZ3MgYXMgaXMgKG90aGVyd2lzZSBpZiB3ZSBzZXJpYWxpemUgc3RyaW5nIGl0IHdpbGwgZ2V0IHdyYXBwZWQgaW4gZG91YmxlIHF1b3RlcylcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnIHx8IGFyZ3MgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IGFyZ3NbMF0gaW5zdGFuY2VvZiBTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0cjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShhcmdzLCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHsgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvanNiaS9pc3N1ZXMvMzBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB1bmRlZmluZWQgaXMgaW5zaWRlIGFuIGFycmF5IHRoZW4gaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIG51bGwuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciBpZiB3ZSBqdXN0IHJldHVybiAndW5kZWZpbmVkJyBoZXJlIGFzIHN0cmluZywgaXQgd2lsbCBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gcmV0dXJuIG1hZ2ljIHN0cmluZyBpbnN0ZWFkIGFuZCB0cmltIHRoZSBxdW90ZXMgbGF0ZXIgb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ19fVU5ERUZJTkVEJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLycgKyB2YWx1ZS5zb3VyY2UgKyAnLycgKyB2YWx1ZS5mbGFncztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSwgaW5kZW50YXRpb24pO1xyXG4gICAgICAgICAgICAvLyB0cmltIHRoZSBlbmNsb3NpbmcgYXJyYXkgYW5kIGFueSB3aGl0ZXNwYWNlXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eXFxbezF9XFxzKnxcXHMqXFxdezF9JC9nLCAnJyk7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBzcGFjZSBiZWZvcmUgbGFzdCB9IGFuZCBdLCB0byBtYWtlIGluZGVudGF0aW9uIG10Y2ggdGhlIG9wZW5pbmcgYnJhY2tldFxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIH0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnfSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0ci5lbmRzV2l0aCgnICBdJykpIHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDMpICsgJ10nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbWFnaWMgJ3VuZGVmaW5lZCcgc3RyaW5nIHRvIHByb3BlciByZXByZXNlbnRhdGlvblxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXCJfX1VOREVGSU5FRFwiL2csICd1bmRlZmluZWQnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNlcmlhbGl6ZSBjb21tYW5kIGFyZ3VtZW50czogJywgZSk7XHJcbiAgICAgICAgICAgIC8vIGlmIEpTT04uc3RyaW5naWZ5IGZhaWxzLCB0aGVuIGZhbGxiYWNrIHRvIHV0aWwuaW5zcGVjdC5cclxuICAgICAgICAgICAgLy8gKHdlIGRvbid0IHVzZSB1dGlsLmluc3BlY3QgaW5pdGlhbHkgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3V0cHV0IGluZGVudGF0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5pbnNwZWN0KGFyZ3NbMF0sIHsgZGVwdGg6IDMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzSW5EZWJ1Z01vZGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbigpO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncHJvY2Vzcy5kZWJ1Z1BvcnQnLCBwcm9jZXNzLmRlYnVnUG9ydCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJykpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gcHJvY2Vzcy5kZWJ1Z1BvcnQgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpIHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykgfHwgYXJndi5pbmNsdWRlcygnZGVidWcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkVGVzdEhvb2tzOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IGhvb2tzID0gRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50YXJnZXQgJiYgb3B0aW9ucy50YXJnZXQubmFtZSA9PT0gJ294eWdlbi5jb25mJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaG9va3MgPSByZXF1aXJlKG9wdGlvbnMudGFyZ2V0LnBhdGgpLmhvb2tzIHx8IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGxvYWRpbmcgdXNlciBob29rczonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaG9va3M7XHJcbiAgICB9LFxyXG5cclxuICAgIGV4ZWN1dGVUZXN0SG9vazogYXN5bmMgZnVuY3Rpb24oaG9va3MsIG1ldGhvZCwgYXJncykge1xyXG4gICAgICAgIC8vIGlmIGhvb2sgaXMgbm90IGRlZmluZWQsIGp1c3QgcXVpZXRseSBpZ25vcmUgaXRcclxuICAgICAgICBpZiAoIWhvb2tzIHx8ICFtZXRob2QgfHwgIWhvb2tzW21ldGhvZF0gfHwgdHlwZW9mIGhvb2tzW21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHdoZW4gZXhlY3V0aW5nIGhvb2tzIChleGNlcHQgY29tbWFuZCBzdGFydC9lbmQgaG9va3MpXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRlc3Qgc3RlcHMgd2lsbCBiZSBtZXNzZWQgdXAuIGUuZy4gdHJhbnNhY3Rpb24gZnJvbSBjYXNlIDEgd2lsbCBiZSBzaG93biBpbiBjYXNlIDIsIGV0Yy5cclxuICAgICAgICBpZiAoWydiZWZvcmVUZXN0JywgJ2JlZm9yZVN1aXRlJywgJ2JlZm9yZUNhc2UnLCAnYWZ0ZXJDYXNlJywgJ2FmdGVyU3VpdGUnLCAnYWZ0ZXJUZXN0J10uaW5jbHVkZXMobWV0aG9kKSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkVmlkZW86IGFzeW5jIGZ1bmN0aW9uKGZpbGVOYW1lLCB2aWRlb1VybCwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsVmlkZW9GaWxlUGF0aCA9IGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8RE9XTkxPQURfUkVUUklFUzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhsb2NhbFZpZGVvRmlsZVBhdGgsIGF3YWl0IGRvd25sb2FkKHZpZGVvVXJsKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHNlbGYuc2xlZXAoRE9XTkxPQURfUkVUUllfV0FJVF9USU1FKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIHZpZGVvIGZpbGUgZnJvbSB0aGUgc2VydmVyXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHZpZGVvVXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7IHJlc29sdmUoZXJyID8gbnVsbCA6IGxvY2FsVmlkZW9GaWxlUGF0aCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRlbGV0ZSB2aWRlbyBmaWxlIGZyb20gdGhlIHJlbW90ZSBzZXJ2ZXI6ICcsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBzYXZlIHZpZGVvIGF0dGFjaG1lbnQ6ICcsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn07XHJcbiJdfQ==
|
|
@@ -23,15 +23,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
23
23
|
* @name email
|
|
24
24
|
* @description Provides methods for working with email via IMAP.
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
const nodemailer = require('nodemailer');
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const imaps = require('imap-simple');
|
|
29
|
+
|
|
30
|
+
const simpleParser = require('mailparser').simpleParser;
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
const errHelper = require('../errors/helper');
|
|
32
33
|
|
|
34
|
+
const AUTH_TIMEOUT = 30000;
|
|
35
|
+
|
|
36
|
+
module.exports = function () {
|
|
33
37
|
var _config;
|
|
34
38
|
|
|
39
|
+
var _smtpConfig;
|
|
40
|
+
|
|
35
41
|
module.isInitialized = function () {
|
|
36
42
|
return _config !== undefined;
|
|
37
43
|
};
|
|
@@ -43,12 +49,12 @@ module.exports = function () {
|
|
|
43
49
|
* @param {String} host - Host name (e.g. 'imap.gmail.com').
|
|
44
50
|
* @param {Number} port - Port number (e.g. 993).
|
|
45
51
|
* @param {Boolean} tls - true to use TLS, false otherwise.
|
|
46
|
-
* @param {Number} authTimeout - Authentication timeout in milliseconds.
|
|
52
|
+
* @param {Number=} authTimeout - Authentication timeout in milliseconds.
|
|
47
53
|
* @param {Boolean=} enableSNI - Enable sending SNI when establishing the connection. This is required for some mail servers. Default is false.
|
|
48
54
|
*/
|
|
49
55
|
|
|
50
56
|
|
|
51
|
-
module.init = function (user, password, host, port, tls, authTimeout, enableSNI) {
|
|
57
|
+
module.init = function (user, password, host, port, tls, authTimeout = AUTH_TIMEOUT, enableSNI = undefined) {
|
|
52
58
|
_utils.default.assertArgumentNonEmptyString(user, 'user');
|
|
53
59
|
|
|
54
60
|
_utils.default.assertArgumentNonEmptyString(password, 'password');
|
|
@@ -70,6 +76,13 @@ module.exports = function () {
|
|
|
70
76
|
tls: tls,
|
|
71
77
|
authTimeout: authTimeout
|
|
72
78
|
}
|
|
79
|
+
};
|
|
80
|
+
_smtpConfig = {
|
|
81
|
+
username: user,
|
|
82
|
+
password,
|
|
83
|
+
host: host,
|
|
84
|
+
port,
|
|
85
|
+
tls
|
|
73
86
|
}; // set servername if SNI is enabled or we are using Gmail
|
|
74
87
|
|
|
75
88
|
if (enableSNI || host === 'imap.gmail.com') {
|
|
@@ -206,7 +219,54 @@ module.exports = function () {
|
|
|
206
219
|
|
|
207
220
|
return mail;
|
|
208
221
|
};
|
|
222
|
+
/**
|
|
223
|
+
* @summary Send email using SMTP.
|
|
224
|
+
* @function send
|
|
225
|
+
* @param {String|Array} to - Receiver's email address.
|
|
226
|
+
* @param {String} subject - Email subject.
|
|
227
|
+
* @param {String} content - Email body as a plain text.
|
|
228
|
+
* @param {String=} html - Optional, Email body as HTML.
|
|
229
|
+
*/
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
module.send = async function (to, subject, content, html = undefined) {
|
|
233
|
+
let err = undefined;
|
|
234
|
+
|
|
235
|
+
try {
|
|
236
|
+
// Create a SMTP transporter object
|
|
237
|
+
const transporter = nodemailer.createTransport({
|
|
238
|
+
host: _smtpConfig.host,
|
|
239
|
+
port: _smtpConfig.port,
|
|
240
|
+
secure: _smtpConfig.tls,
|
|
241
|
+
auth: {
|
|
242
|
+
user: _smtpConfig.username,
|
|
243
|
+
pass: _smtpConfig.password
|
|
244
|
+
},
|
|
245
|
+
sendmail: false,
|
|
246
|
+
logger: false,
|
|
247
|
+
transactionLog: false,
|
|
248
|
+
debug: false
|
|
249
|
+
}); // Message object
|
|
250
|
+
|
|
251
|
+
const message = {
|
|
252
|
+
to: to,
|
|
253
|
+
// Subject of the message
|
|
254
|
+
subject: subject || '',
|
|
255
|
+
// plaintext body
|
|
256
|
+
text: content,
|
|
257
|
+
// HTML body
|
|
258
|
+
html: html
|
|
259
|
+
};
|
|
260
|
+
await transporter.sendMail(message);
|
|
261
|
+
} catch (e) {
|
|
262
|
+
err = e;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (err) {
|
|
266
|
+
throw new _OxygenError.default(errHelper.errorCode.EMAIL_ERROR, err.toString());
|
|
267
|
+
}
|
|
268
|
+
};
|
|
209
269
|
|
|
210
270
|
return module;
|
|
211
271
|
};
|
|
212
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJlcnJIZWxwZXIiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiX2NvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidGxzT3B0aW9ucyIsInNlcnZlcm5hbWUiLCJnZXRMYXN0RW1haWwiLCJzaW5jZU1pbnV0ZXMiLCJzdWJqZWN0IiwidGltZW91dCIsIm1haWwiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImVyciIsImNvbm5lY3Rpb24iLCJjb25uZWN0Iiwib3BlbkJveCIsInN0YXJ0RGF0ZSIsInNldFRpbWUiLCJ0b0lTT1N0cmluZyIsInNlYXJjaENyaXRlcmlhIiwiZmV0Y2hPcHRpb25zIiwiYm9kaWVzIiwic3RydWN0IiwibWFya1NlZW4iLCJyZXN1bHRzIiwic2VhcmNoIiwicmVzdWx0IiwiaGVhZGVyUGFydCIsIl8iLCJmaW5kIiwicGFydHMiLCJib2R5UGFydCIsImlkIiwiYXR0cmlidXRlcyIsInVpZCIsImlkSGVhZGVyIiwic2ltcGxlIiwiYm9keSIsImF0dGFjaG1lbnRzIiwiZ2V0UGFydHMiLCJwYXJ0IiwiZGlzcG9zaXRpb24iLCJ0eXBlIiwidG9VcHBlckNhc2UiLCJwYXJ0RGF0YSIsImdldFBhcnREYXRhIiwicHVzaCIsImZpbGVuYW1lIiwicGFyYW1zIiwiZGF0YSIsImh0bWwiLCJ0ZXh0QXNIdG1sIiwidGV4dCIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJ0byIsImZyb20iLCJkYXRlIiwiZSIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCJdLCJtYXBwaW5ncyI6Ijs7OztBQWNBOztBQUNBOztBQUNBOzs7O0FBaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQSxJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF2Qjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsS0FBSyxHQUFHSCxPQUFPLENBQUMsYUFBRCxDQUFuQjs7QUFDQSxRQUFNSSxZQUFZLEdBQUdKLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JJLFlBQTNDOztBQUNBLE1BQUlDLE9BQUo7O0FBRUFKLEVBQUFBLE1BQU0sQ0FBQ0ssYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU9ELE9BQU8sS0FBS0UsU0FBbkI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lOLEVBQUFBLE1BQU0sQ0FBQ08sSUFBUCxHQUFjLFVBQVNDLElBQVQsRUFBZUMsUUFBZixFQUF5QkMsSUFBekIsRUFBK0JDLElBQS9CLEVBQXFDQyxHQUFyQyxFQUEwQ0MsV0FBMUMsRUFBdURDLFNBQXZELEVBQWtFO0FBQzVFQyxtQkFBTUMsNEJBQU4sQ0FBbUNSLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBTyxtQkFBTUMsNEJBQU4sQ0FBbUNQLFFBQW5DLEVBQTZDLFVBQTdDOztBQUNBTSxtQkFBTUMsNEJBQU4sQ0FBbUNOLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBSyxtQkFBTUUsK0JBQU4sQ0FBc0NOLElBQXRDLEVBQTRDLE1BQTVDOztBQUNBSSxtQkFBTUcsa0JBQU4sQ0FBeUJOLEdBQXpCLEVBQThCLEtBQTlCOztBQUNBRyxtQkFBTUUsK0JBQU4sQ0FBc0NKLFdBQXRDLEVBQW1ELGFBQW5EOztB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QUFTO0FBQ0wsWUFBTSxJQUFJZ0Qsb0JBQUosQ0FBWWhGLFNBQVMsQ0FBQ2lGLFNBQVYsQ0FBb0JDLFdBQWhDLEVBQTZDbEQsR0FBRyxDQUFDbUQsUUFBSixFQUE3QyxDQUFOO0FBQ0gsS0FGRCxNQUVPLElBQUksQ0FBQ3ZELElBQUwsRUFBVztBQUNkLFlBQU0sSUFBSW9ELG9CQUFKLENBQVloRixTQUFTLENBQUNpRixTQUFWLENBQW9CRyxPQUFoQyxFQUF5QyxrQ0FBa0N6RCxPQUFsQyxHQUE0QyxNQUFyRixDQUFOO0FBQ0g7O0FBRUQsV0FBT0MsSUFBUDtBQUNILEdBL0ZEOztBQWlHQSxTQUFPMUIsTUFBUDtBQUNILENBL0tEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuICAgIGNvbnN0IHNpbXBsZVBhcnNlciA9IHJlcXVpcmUoJ21haWxwYXJzZXInKS5zaW1wbGVQYXJzZXI7XHJcbiAgICB2YXIgX2NvbmZpZztcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0IGVtYWlsIGNvbm5lY3Rpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZCAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgLSBIb3N0IG5hbWUgKGUuZy4gJ2ltYXAuZ21haWwuY29tJykuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRscyAtIHRydWUgdG8gdXNlIFRMUywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGF1dGhUaW1lb3V0IC0gQXV0aGVudGljYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBlbmFibGVTTkkgLSBFbmFibGUgc2VuZGluZyBTTkkgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNvbWUgbWFpbCBzZXJ2ZXJzLiBEZWZhdWx0IGlzIGZhbHNlLiBcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbih1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgdGxzLCBhdXRoVGltZW91dCwgZW5hYmxlU05JKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh1c2VyLCAndXNlcicpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcocGFzc3dvcmQsICdwYXNzd29yZCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdCwgJ2hvc3QnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHBvcnQsICdwb3J0Jyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sKHRscywgJ3RscycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYXV0aFRpbWVvdXQsICdhdXRoVGltZW91dCcpO1xyXG5cclxuICAgICAgICBfY29uZmlnID0ge1xyXG4gICAgICAgICAgICBpbWFwOiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgICAgICB0bHM6IHRscyxcclxuICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0OiBhdXRoVGltZW91dFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlcnZlcm5hbWUgaWYgU05JIGlzIGVuYWJsZWQgb3Igd2UgYXJlIHVzaW5nIEdtYWlsXHJcbiAgICAgICAgaWYgKGVuYWJsZVNOSSB8fCBob3N0ID09PSAnaW1hcC5nbWFpbC5jb20nKSB7XHJcbiAgICAgICAgICAgIF9jb25maWcuaW1hcC50bHNPcHRpb25zID0geyBzZXJ2ZXJuYW1lOiBob3N0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IHVuc2VlbiBlbWFpbC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0RW1haWxcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzaW5jZU1pbnV0ZXMgLSBTZWFyY2ggZm9yIGVtYWlscyByZWNlaXZlZCBzaW5jZSB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBtaW51dGVzIGludG8gcGFzdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ2V4fSBzdWJqZWN0IC0gUmV0dXJuIGVtYWlsIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc3ViamVjdC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IC0gVGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBFbWFpbCBib2R5LCB0ZXh0LCB0ZXh0QXNIdG1sLCBhdHRhY2htZW50cyBpZiBhbnksIGFuZCBUTywgRlJPTSwgU1VCSkVDVCwgREFURSBoZWFkZXJzLlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiBlbWFpbC5pbml0KCdbWU9VUl9FTUFJTF1AZ21haWwuY29tJywgJ3Bhc3N3b3JkJywgJ2ltYXAuZ21haWwuY29tJywgOTkzLCB0cnVlLCAzMDAwKTtcclxuICAgICAqIHZhciBtYWlsID0gZW1haWwuZ2V0TGFzdEVtYWlsKDYwLCAnZW1haWwgc3ViamVjdCcsIDUwMDApO1xyXG4gICAgICogbG9nLmluZm8obWFpbCk7XHJcbiAgICAgKiBcclxuICAgICAqIGlmKHIuYXR0YWNobWVudHMgJiYgci5hdHRhY2htZW50cy5sZW5ndGggPiAwKXtcclxuICAgICAqIFx0Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICogXHRyLmF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICogXHRcdGxldCBmaWxlRGVzY3JpcHRvcjtcclxuICAgICAqIFx0XHR0cnl7XHJcbiAgICAgKiBcdFx0XHRmaWxlRGVzY3JpcHRvciA9IGZzLm9wZW5TeW5jKGF0dGFjaG1lbnQuZmlsZW5hbWUsICd3Jyk7XHJcbiAgICAgKiBcdFx0fSBjYXRjaChlKSB7XHJcbiAgICAgKiBcdFx0XHR0aHJvdyAnY291bGQgbm90IG9wZW4gZmlsZTogJyArIGU7XHJcbiAgICAgKiBcdFx0fVxyXG4gICAgICogXHRcdFxyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZURlc2NyaXB0b3IsIGF0dGFjaG1lbnQuZGF0YSk7XHJcbiAgICAgKiBcdFx0fSBjYXRjaChlKSB7XHJcbiAgICAgKiBcdFx0XHR0aHJvdyAnZXJyb3Igd3JpdGluZyBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0ZnMuY2xvc2VTeW5jKGZpbGVEZXNjcmlwdG9yKTtcclxuICAgICAqIFx0fSk7XHJcbiAgICAgKiB9XHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0RW1haWwgPSBhc3luYyBmdW5jdGlvbihzaW5jZU1pbnV0ZXMsIHN1YmplY3QsIHRpbWVvdXQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHNpbmNlTWludXRlcywgJ3NpbmNlTWludXRlcycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgdmFyIG1haWw7XHJcbiAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdmFyIGVycjtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFlcnIgJiYgIW1haWwgJiYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGltYXBzLmNvbm5lY3QoX2NvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLm9wZW5Cb3goJ0lOQk9YJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2ggdW5zZWVuIGVtYWlscyBmcm9tIHRoZSBsYXN0IHNpbmNlTWludXRlc1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0VGltZShEYXRlLm5vdygpIC0gKHNpbmNlTWludXRlcyAqIDYwICogMTAwMCkpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoQ3JpdGVyaWEgPSBbJ1VOU0VFTicsIFsnU0lOQ0UnLCBzdGFydERhdGVdXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCBjZXJ0YWluIGhlYWRlcnMgYW5kIHN0cmlwcGVkIGRvd24gYm9keVxyXG4gICAgICAgICAgICAgICAgdmFyIGZldGNoT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBib2RpZXM6IFsnSEVBREVSLkZJRUxEUyAoRlJPTSBUTyBTVUJKRUNUIERBVEUpJywgJ1RFWFQnXSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFya1NlZW46IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjb25uZWN0aW9uLnNlYXJjaChzZWFyY2hDcml0ZXJpYSwgZmV0Y2hPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByZXN1bHQgb2YgcmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlclBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMF0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keVBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMV0gfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0LmF0dHJpYnV0ZXMudWlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkSGVhZGVyID0gJ0ltYXAtSWQ6ICcraWQrJ1xcclxcbic7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2ltcGxlID0gYXdhaXQgc2ltcGxlUGFyc2VyKGlkSGVhZGVyK2JvZHlQYXJ0LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpbWFwcy5nZXRQYXJ0cyhyZXN1bHQuYXR0cmlidXRlcy5zdHJ1Y3QpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQuZGlzcG9zaXRpb24gJiYgcGFydC5kaXNwb3NpdGlvbi50eXBlLnRvVXBwZXJDYXNlKCkgPT09ICdBVFRBQ0hNRU5UJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydERhdGEgPSBhd2FpdCBjb25uZWN0aW9uLmdldFBhcnREYXRhKHJlc3VsdCwgcGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogcGFydC5kaXNwb3NpdGlvbi5wYXJhbXMuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFydERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dEFzSHRtbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlLmh0bWwgfHwgc2ltcGxlLnRleHQgfHwgc2ltcGxlLnRleHRBc0h0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VkIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHlQYXJ0LnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBzaW1wbGUuaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbCA9IHNpbXBsZS50ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJqZWN0LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHN1YmplY3QudGVzdChoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QgPT09IGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0byA9IGhlYWRlclBhcnQuYm9keS50byA/IGhlYWRlclBhcnQuYm9keS50b1swXSA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBoZWFkZXJQYXJ0LmJvZHkuZnJvbVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogaGVhZGVyUGFydC5ib2R5LmRhdGVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbDogdGV4dEFzSHRtbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBodG1sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFtYWlsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgXCJDb3VsZG4ndCBnZXQgYW4gZW1haWwgd2l0aGluIFwiICsgdGltZW91dCArICcgbXMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWFpbDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
|
|
272
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJub2RlbWFpbGVyIiwicmVxdWlyZSIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiZXJySGVscGVyIiwiQVVUSF9USU1FT1VUIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9jb25maWciLCJfc210cENvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidXNlcm5hbWUiLCJ0bHNPcHRpb25zIiwic2VydmVybmFtZSIsImdldExhc3RFbWFpbCIsInNpbmNlTWludXRlcyIsInN1YmplY3QiLCJ0aW1lb3V0IiwibWFpbCIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiZXJyIiwiY29ubmVjdGlvbiIsImNvbm5lY3QiLCJvcGVuQm94Iiwic3RhcnREYXRlIiwic2V0VGltZSIsInRvSVNPU3RyaW5nIiwic2VhcmNoQ3JpdGVyaWEiLCJmZXRjaE9wdGlvbnMiLCJib2RpZXMiLCJzdHJ1Y3QiLCJtYXJrU2VlbiIsInJlc3VsdHMiLCJzZWFyY2giLCJyZXN1bHQiLCJoZWFkZXJQYXJ0IiwiXyIsImZpbmQiLCJwYXJ0cyIsImJvZHlQYXJ0IiwiaWQiLCJhdHRyaWJ1dGVzIiwidWlkIiwiaWRIZWFkZXIiLCJzaW1wbGUiLCJib2R5IiwiYXR0YWNobWVudHMiLCJnZXRQYXJ0cyIsInBhcnQiLCJkaXNwb3NpdGlvbiIsInR5cGUiLCJ0b1VwcGVyQ2FzZSIsInBhcnREYXRhIiwiZ2V0UGFydERhdGEiLCJwdXNoIiwiZmlsZW5hbWUiLCJwYXJhbXMiLCJkYXRhIiwiaHRtbCIsInRleHRBc0h0bWwiLCJ0ZXh0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsInRvIiwiZnJvbSIsImRhdGUiLCJlIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVNQUlMX0VSUk9SIiwidG9TdHJpbmciLCJUSU1FT1VUIiwic2VuZCIsImNvbnRlbnQiLCJ0cmFuc3BvcnRlciIsImNyZWF0ZVRyYW5zcG9ydCIsInNlY3VyZSIsImF1dGgiLCJwYXNzIiwic2VuZG1haWwiLCJsb2dnZXIiLCJ0cmFuc2FjdGlvbkxvZyIsImRlYnVnIiwibWVzc2FnZSIsInNlbmRNYWlsIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7O0FBQ0E7O0FBQ0E7Ozs7QUFoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBLE1BQU1BLFVBQVUsR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBMUI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JFLFlBQTNDOztBQUVBLE1BQU1DLFNBQVMsR0FBR0gsT0FBTyxDQUFDLGtCQUFELENBQXpCOztBQUNBLE1BQU1JLFlBQVksR0FBRyxLQUFyQjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsT0FBSjs7QUFDQSxNQUFJQyxXQUFKOztBQUVBSCxFQUFBQSxNQUFNLENBQUNJLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPRixPQUFPLEtBQUtHLFNBQW5CO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJTCxFQUFBQSxNQUFNLENBQUNNLElBQVAsR0FBYyxVQUFTQyxJQUFULEVBQWVDLFFBQWYsRUFBeUJDLElBQXpCLEVBQStCQyxJQUEvQixFQUFxQ0MsR0FBckMsRUFBMENDLFdBQVcsR0FBR2IsWUFBeEQsRUFBc0VjLFNBQVMsR0FBR1IsU0FBbEYsRUFBNkY7QUFDdkdTLG1CQUFNQyw0QkFBTixDQUFtQ1IsSUFBbkMsRUFBeUMsTUFBekM7O0FBQ0FPLG1CQUFNQyw0QkFBTixDQUFtQ1AsUUFBbkMsRUFBNkMsVUFBN0M7O0FBQ0FNLG1CQUFNQyw0QkFBTixDQUFtQ04sSUFBbkMsRUFBeUMsTUFBekM7O0FBQ0FLLG1CQUFNRSwrQkFBTixDQUFzQ04sSUFBdEMsRUFBNEMsTUFBNUM7O0FBQ0FJLG1CQUFNRyxrQkFBTixDQUF5Qk4sR0FBekIsRUFBOEIsS0FBOUI7O0FBQ0FHLG1CQUFNRSwrQkFBTixDQUFzQ0osV0FBdEMsRUFBbUQsYUFBbkQ7O0FBRUFWLElBQUFBLE9BQU8sR0FBRztBQUNOZ0IsTUFBQUEsSUFBSSxFQUFFO0FBQ0ZYLFFBQUFBLElBQUksRUFBRUEsSUFESjtBQUVGQyxRQUFBQSxRQUFRLEVBQUVBLFFBRlI7QUFHRkMsUUFBQUEsSUFBSSxFQUFFQSxJQUhKO0FBSUZDLFFBQUFBLElBQUksRUFBRUEsSUFKSjtBQUtGQyxRQUFBQSxHQUFHLEVBQUVBLEdBTEg7QUFNRkMsUUFBQUEsV0FBVyxFQUFFQTtBQU5YO0FBREEsS0FBVjtBQVVBVCxJQUFBQSxXQUFXLEdBQUc7QUFDVmdCLE1BQUFBLFFBQVEsRUFBRVosSUFEQTtBQUVWQyxNQUFBQSxRQUZVO0FBR1ZDLE1BQUFBLElBQUksRUFBRUEsSUFISTtBQUlWQyxNQUFBQSxJQUpVO0FBS1ZDLE1BQUFBO0FBTFUsS0FBZCxDQWxCdUcsQ0EwQnZHOztBQUNBLFFBQUlFLFNBQVMsSUFBSUosSUFBSSxLQUFLLGdCQUExQixFQUE0QztBQUN4Q1AsTUFBQUEsT0FBTyxDQUFDZ0IsSUFBUixDQUFhRSxVQUFiLEdBQTBCO0FBQUVDLFFBQUFBLFVBQVUsRUFBRVo7QUFBZCxPQUExQjtBQUNIO0FBQ0osR0E5QkQ7QUFnQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lULEVBQUFBLE1BQU0sQ0FBQ3NCLFlBQVAsR0FBc0IsZ0JBQWVDLFlBQWYsRUFBNkJDLE9BQTdCLEVBQXNDQyxPQUF0QyxFQUErQztBQUNqRVgsbUJBQU1FLCtCQUFOLENBQXNDTyxZQUF0QyxFQUFvRCxjQUFwRDs7QUFDQVQsbUJBQU1FLCtCQUFOLENBQXNDUyxPQUF0QyxFQUErQyxTQUEvQzs7QUFFQSxRQUFJQyxJQUFKO0FBQ0EsUUFBSUMsR0FBRyxHQUFJLElBQUlDLElBQUosRUFBRCxDQUFhQyxPQUFiLEVBQVY7QUFDQSxRQUFJQyxHQUFKOztBQUVBLFdBQU8sQ0FBQ0EsR0FBRCxJQUFRLENBQUNKLElBQVQsSUFBbUIsSUFBSUUsSUFBSixFQUFELENBQWFDLE9BQWIsS0FBeUJGLEdBQTFCLEdBQWlDRixPQUF6RCxFQUFrRTtBQUM5RCxVQUFJO0FBQ0EsY0FBTU0sVUFBVSxHQUFHLE1BQU1uQyxLQUFLLENBQUNvQyxPQUFOLENBQWM5QixPQUFkLENBQXpCO0FBQ0EsY0FBTTZCLFVBQVUsQ0FBQ0UsT0FBWCxDQUFtQixPQUFuQixDQUFOLENBRkEsQ0FJQTs7QUFDQSxZQUFJQyxTQUFTLEdBQUcsSUFBSU4sSUFBSixFQUFoQjtBQUNBTSxRQUFBQSxTQUFTLENBQUNDLE9BQVYsQ0FBa0JQLElBQUksQ0FBQ0QsR0FBTCxLQUFjSixZQUFZLEdBQUcsRUFBZixHQUFvQixJQUFwRDtBQUNBVyxRQUFBQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0UsV0FBVixFQUFaO0FBQ0EsWUFBSUMsY0FBYyxHQUFHLENBQUMsUUFBRCxFQUFXLENBQUMsT0FBRCxFQUFVSCxTQUFWLENBQVgsQ0FBckIsQ0FSQSxDQVVBOztBQUNBLFlBQUlJLFlBQVksR0FBRztBQUNmQyxVQUFBQSxNQUFNLEVBQUUsQ0FBQyxzQ0FBRCxFQUF5QyxNQUF6QyxDQURPO0FBRWZDLFVBQUFBLE1BQU0sRUFBRSxJQUZPO0FBR2ZDLFVBQUFBLFFBQVEsRUFBRTtBQUhLLFNBQW5CO0FBTUEsY0FBTUMsT0FBTyxHQUFHLE1BQU1YLFVBQVUsQ0FBQ1ksTUFBWCxDQUFrQk4sY0FBbEIsRUFBa0NDLFlBQWxDLENBQXRCOztBQUVBLGFBQUssSUFBSU0sTUFBVCxJQUFtQkYsT0FBbkIsRUFBNEI7QUFDeEIsZ0JBQU1HLFVBQVUsR0FBR0MsZ0JBQUVDLElBQUYsQ0FBT0gsTUFBTSxDQUFDSSxLQUFkLEVBQXFCO0FBQUUscUJBQVNWLFlBQVksQ0FBQ0MsTUFBYixDQUFvQixDQUFwQjtBQUFYLFdBQXJCLENBQW5COztBQUNBLGdCQUFNVSxRQUFRLEdBQUdILGdCQUFFQyxJQUFGLENBQU9ILE1BQU0sQ0FBQ0ksS0FBZCxFQUFxQjtBQUFFLHFCQUFTVixZQUFZLENBQUNDLE1BQWIsQ0FBb0IsQ0FBcEI7QUFBWCxXQUFyQixDQUFqQjs7QUFFQSxnQkFBTVcsRUFBRSxHQUFHTixNQUFNLENBQUNPLFVBQVAsQ0FBa0JDLEdBQTdCO0FBQ0EsZ0JBQU1DLFFBQVEsR0FBRyxjQUFZSCxFQUFaLEdBQWUsTUFBaEM7QUFDQSxnQkFBTUksTUFBTSxHQUFHLE1BQU16RCxZQUFZLENBQUN3RCxRQUFRLEdBQUNKLFFBQVEsQ0FBQ00sSUFBbkIsQ0FBakM7QUFDQSxnQkFBTUMsV0FBVyxHQUFHLEVBQXBCO0FBQ0EsZ0JBQU1SLEtBQUssR0FBR3BELEtBQUssQ0FBQzZELFFBQU4sQ0FBZWIsTUFBTSxDQUFDTyxVQUFQLENBQWtCWCxNQUFqQyxDQUFkOztBQUVBLGVBQUssTUFBTWtCLElBQVgsSUFBbUJWLEtBQW5CLEVBQTBCO0FBQ3RCLGdCQUFJVSxJQUFJLENBQUNDLFdBQUwsSUFBb0JELElBQUksQ0FBQ0MsV0FBTCxDQUFpQkMsSUFBakIsQ0FBc0JDLFdBQXRCLE9BQXdDLFlBQWhFLEVBQThFO0FBQzFFLG9CQUFNQyxRQUFRLEdBQUcsTUFBTS9CLFVBQVUsQ0FBQ2dDLFdBQVgsQ0FBdUJuQixNQUF2QixFQUErQmMsSUFBL0IsQ0FBdkI7QUFDQUYsY0FBQUEsV0FBVyxDQUFDUSxJQUFaLENBQWlCO0FBQ2JDLGdCQUFBQSxRQUFRLEVBQUVQLElBQUksQ0FBQ0MsV0FBTCxDQUFpQk8sTUFBakIsQ0FBd0JELFFBRHJCO0FBRWJFLGdCQUFBQSxJQUFJLEVBQUVMO0FBRk8sZUFBakI7QUFJSDtBQUNKOztBQUVELGNBQUlQLElBQUo7QUFDQSxjQUFJYSxJQUFKO0FBQ0EsY0FBSUMsVUFBSjs7QUFDQSxjQUFJZixNQUFNLENBQUNjLElBQVAsSUFBZWQsTUFBTSxDQUFDZ0IsSUFBdEIsSUFBOEJoQixNQUFNLENBQUNlLFVBQXpDLEVBQXFEO0FBQ2pEO0FBQ0FkLFlBQUFBLElBQUksR0FBR04sUUFBUSxDQUFDcUIsSUFBaEI7QUFDQUYsWUFBQUEsSUFBSSxHQUFHZCxNQUFNLENBQUNjLElBQWQ7QUFDQUMsWUFBQUEsVUFBVSxHQUFHZixNQUFNLENBQUNlLFVBQXBCO0FBQ0gsV0FMRCxNQUtPO0FBQ0g7QUFDQWQsWUFBQUEsSUFBSSxHQUFHTixRQUFRLENBQUNNLElBQWhCO0FBQ0g7O0FBRUQsY0FBSVYsVUFBSixFQUFnQjtBQUNaLGdCQUNJckIsT0FBTyxLQUNGQSxPQUFPLENBQUMrQyxXQUFSLENBQW9CQyxJQUFwQixLQUE2QixRQUE3QixJQUF5Q2hELE9BQU8sQ0FBQ2lELElBQVIsQ0FBYTVCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQi9CLE9BQWhCLENBQXdCLENBQXhCLENBQWIsQ0FBMUMsSUFDQ0EsT0FBTyxLQUFLcUIsVUFBVSxDQUFDVSxJQUFYLENBQWdCL0IsT0FBaEIsQ0FBd0IsQ0FBeEIsQ0FGVixDQURYLEVBS0U7QUFDRSxrQkFBSWtELEVBQUUsR0FBRzdCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQm1CLEVBQWhCLEdBQXFCN0IsVUFBVSxDQUFDVSxJQUFYLENBQWdCbUIsRUFBaEIsQ0FBbUIsQ0FBbkIsQ0FBckIsR0FBNkMsSUFBdEQ7QUFFQWhELGNBQUFBLElBQUksR0FBRztBQUNIaUQsZ0JBQUFBLElBQUksRUFBRTlCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQm9CLElBQWhCLENBQXFCLENBQXJCLENBREg7QUFFSEQsZ0JBQUFBLEVBQUUsRUFBRUEsRUFGRDtBQUdIbEQsZ0JBQUFBLE9BQU8sRUFBRXFCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQi9CLE9BQWhCLENBQXdCLENBQXhCLENBSE47QUFJSG9ELGdCQUFBQSxJQUFJLEVBQUUvQixVQUFVLENBQUNVLElBQVgsQ0FBZ0JxQixJQUFoQixDQUFxQixDQUFyQixDQUpIO0FBS0hyQixnQkFBQUEsSUFBSSxFQUFFQSxJQUxIO0FBTUhDLGdCQUFBQSxXQUFXLEVBQUVBLFdBTlY7QUFPSGEsZ0JBQUFBLFVBQVUsRUFBRUEsVUFQVDtBQVFIRCxnQkFBQUEsSUFBSSxFQUFFQTtBQVJILGVBQVA7QUFVSDtBQUNKO0FBQ0o7QUFDSixPQTFFRCxDQTBFRSxPQUFPUyxDQUFQLEVBQVU7QUFDUi9DLFFBQUFBLEdBQUcsR0FBRytDLENBQU47QUFDSDtBQUNKOztBQUVELFFBQUkvQyxHQUFKLEVBQVM7QUFDTCxZQUFNLElBQUlnRCxvQkFBSixDQUFZaEYsU0FBUyxDQUFDaUYsU0FBVixDQUFvQkMsV0FBaEMsRUFBNkNsRCxHQUFHLENBQUNtRCxRQUFKLEVBQTdDLENBQU47QUFDSCxLQUZELE1BRU8sSUFBSSxDQUFDdkQsSUFBTCxFQUFXO0FBQ2QsWUFBTSxJQUFJb0Qsb0JBQUosQ0FBWWhGLFNBQVMsQ0FBQ2lGLFNBQVYsQ0FBb0JHLE9BQWhDLEVBQXlDLGtDQUFrQ3pELE9BQWxDLEdBQTRDLE1BQXJGLENBQU47QUFDSDs7QUFFRCxXQUFPQyxJQUFQO0FBQ0gsR0EvRkQ7QUFpR0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0kxQixFQUFBQSxNQUFNLENBQUNtRixJQUFQLEdBQWMsZ0JBQWVULEVBQWYsRUFBbUJsRCxPQUFuQixFQUE0QjRELE9BQTVCLEVBQXFDaEIsSUFBSSxHQUFHL0QsU0FBNUMsRUFBdUQ7QUFDakUsUUFBSXlCLEdBQUcsR0FBR3pCLFNBQVY7O0FBQ0EsUUFBSTtBQUNBO0FBQ0EsWUFBTWdGLFdBQVcsR0FBRzNGLFVBQVUsQ0FBQzRGLGVBQVgsQ0FBMkI7QUFDM0M3RSxRQUFBQSxJQUFJLEVBQUVOLFdBQVcsQ0FBQ00sSUFEeUI7QUFFM0NDLFFBQUFBLElBQUksRUFBRVAsV0FBVyxDQUFDTyxJQUZ5QjtBQUczQzZFLFFBQUFBLE1BQU0sRUFBRXBGLFdBQVcsQ0FBQ1EsR0FIdUI7QUFJM0M2RSxRQUFBQSxJQUFJLEVBQUU7QUFDRmpGLFVBQUFBLElBQUksRUFBRUosV0FBVyxDQUFDZ0IsUUFEaEI7QUFFRnNFLFVBQUFBLElBQUksRUFBRXRGLFdBQVcsQ0FBQ0s7QUFGaEIsU0FKcUM7QUFRM0NrRixRQUFBQSxRQUFRLEVBQUUsS0FSaUM7QUFTM0NDLFFBQUFBLE1BQU0sRUFBRSxLQVRtQztBQVUzQ0MsUUFBQUEsY0FBYyxFQUFFLEtBVjJCO0FBVzNDQyxRQUFBQSxLQUFLLEVBQUU7QUFYb0MsT0FBM0IsQ0FBcEIsQ0FGQSxDQWdCQTs7QUFDQSxZQUFNQyxPQUFPLEdBQUc7QUFDWnBCLFFBQUFBLEVBQUUsRUFBRUEsRUFEUTtBQUVaO0FBQ0FsRCxRQUFBQSxPQUFPLEVBQUVBLE9BQU8sSUFBSSxFQUhSO0FBSVo7QUFDQThDLFFBQUFBLElBQUksRUFBRWMsT0FMTTtBQU1aO0FBQ0FoQixRQUFBQSxJQUFJLEVBQUVBO0FBUE0sT0FBaEI7QUFVQSxZQUFNaUIsV0FBVyxDQUFDVSxRQUFaLENBQXFCRCxPQUFyQixDQUFOO0FBQ0gsS0E1QkQsQ0E2QkEsT0FBT2pCLENBQVAsRUFBVTtBQUNOL0MsTUFBQUEsR0FBRyxHQUFHK0MsQ0FBTjtBQUNIOztBQUNELFFBQUkvQyxHQUFKLEVBQVM7QUFDTCxZQUFNLElBQUlnRCxvQkFBSixDQUFZaEYsU0FBUyxDQUFDaUYsU0FBVixDQUFvQkMsV0FBaEMsRUFBNkNsRCxHQUFHLENBQUNtRCxRQUFKLEVBQTdDLENBQU47QUFDSDtBQUNKLEdBckNEOztBQXVDQSxTQUFPakYsTUFBUDtBQUNILENBcE9EIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmNvbnN0IG5vZGVtYWlsZXIgPSByZXF1aXJlKCdub2RlbWFpbGVyJyk7XHJcbmNvbnN0IGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuY29uc3Qgc2ltcGxlUGFyc2VyID0gcmVxdWlyZSgnbWFpbHBhcnNlcicpLnNpbXBsZVBhcnNlcjtcclxuXHJcbmNvbnN0IGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuY29uc3QgQVVUSF9USU1FT1VUID0gMzAwMDA7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIF9jb25maWc7XHJcbiAgICB2YXIgX3NtdHBDb25maWc7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2NvbmZpZyAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldCBlbWFpbCBjb25uZWN0aW9uIGRldGFpbHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZSAoZS5nLiAneW91ckBlbWFpbC5hZGRyZXNzJykuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmQgLSBQYXNzd29yZC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBob3N0IC0gSG9zdCBuYW1lIChlLmcuICdpbWFwLmdtYWlsLmNvbScpLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHBvcnQgLSBQb3J0IG51bWJlciAoZS5nLiA5OTMpLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSB0bHMgLSB0cnVlIHRvIHVzZSBUTFMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gYXV0aFRpbWVvdXQgLSBBdXRoZW50aWNhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IGVuYWJsZVNOSSAtIEVuYWJsZSBzZW5kaW5nIFNOSSB3aGVuIGVzdGFibGlzaGluZyB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3Igc29tZSBtYWlsIHNlcnZlcnMuIERlZmF1bHQgaXMgZmFsc2UuIFxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0LCB0bHMsIGF1dGhUaW1lb3V0ID0gQVVUSF9USU1FT1VULCBlbmFibGVTTkkgPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHVzZXIsICd1c2VyJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0LCAnaG9zdCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUocG9ydCwgJ3BvcnQnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wodGxzLCAndGxzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShhdXRoVGltZW91dCwgJ2F1dGhUaW1lb3V0Jyk7XHJcblxyXG4gICAgICAgIF9jb25maWcgPSB7XHJcbiAgICAgICAgICAgIGltYXA6IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXIsXHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgICAgIHRsczogdGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aFRpbWVvdXQ6IGF1dGhUaW1lb3V0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIF9zbXRwQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB1c2VybmFtZTogdXNlcixcclxuICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgIGhvc3Q6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQsXHJcbiAgICAgICAgICAgIHRscyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBzZXQgc2VydmVybmFtZSBpZiBTTkkgaXMgZW5hYmxlZCBvciB3ZSBhcmUgdXNpbmcgR21haWxcclxuICAgICAgICBpZiAoZW5hYmxlU05JIHx8IGhvc3QgPT09ICdpbWFwLmdtYWlsLmNvbScpIHtcclxuICAgICAgICAgICAgX2NvbmZpZy5pbWFwLnRsc09wdGlvbnMgPSB7IHNlcnZlcm5hbWU6IGhvc3QgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIGxhc3QgdW5zZWVuIGVtYWlsLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RFbWFpbFxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHNpbmNlTWludXRlcyAtIFNlYXJjaCBmb3IgZW1haWxzIHJlY2VpdmVkIHNpbmNlIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIG1pbnV0ZXMgaW50byBwYXN0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnZXh9IHN1YmplY3QgLSBSZXR1cm4gZW1haWwgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBzdWJqZWN0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEVtYWlsIGJvZHksIHRleHQsIHRleHRBc0h0bWwsIGF0dGFjaG1lbnRzIGlmIGFueSwgYW5kIFRPLCBGUk9NLCBTVUJKRUNULCBEQVRFIGhlYWRlcnMuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIGVtYWlsLmluaXQoJ1tZT1VSX0VNQUlMXUBnbWFpbC5jb20nLCAncGFzc3dvcmQnLCAnaW1hcC5nbWFpbC5jb20nLCA5OTMsIHRydWUsIDMwMDApO1xyXG4gICAgICogdmFyIG1haWwgPSBlbWFpbC5nZXRMYXN0RW1haWwoNjAsICdlbWFpbCBzdWJqZWN0JywgNTAwMCk7XHJcbiAgICAgKiBsb2cuaW5mbyhtYWlsKTtcclxuICAgICAqIFxyXG4gICAgICogaWYoci5hdHRhY2htZW50cyAmJiByLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICogXHRjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgKiBcdHIuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgKiBcdFx0bGV0IGZpbGVEZXNjcmlwdG9yO1xyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZpbGVEZXNjcmlwdG9yID0gZnMub3BlblN5bmMoYXR0YWNobWVudC5maWxlbmFtZSwgJ3cnKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdjb3VsZCBub3Qgb3BlbiBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0dHJ5e1xyXG4gICAgICogXHRcdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlRGVzY3JpcHRvciwgYXR0YWNobWVudC5kYXRhKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdlcnJvciB3cml0aW5nIGZpbGU6ICcgKyBlO1xyXG4gICAgICogXHRcdH1cclxuICAgICAqIFx0XHRcclxuICAgICAqIFx0XHRmcy5jbG9zZVN5bmMoZmlsZURlc2NyaXB0b3IpO1xyXG4gICAgICogXHR9KTtcclxuICAgICAqIH1cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RFbWFpbCA9IGFzeW5jIGZ1bmN0aW9uKHNpbmNlTWludXRlcywgc3ViamVjdCwgdGltZW91dCkge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoc2luY2VNaW51dGVzLCAnc2luY2VNaW51dGVzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG5cclxuICAgICAgICB2YXIgbWFpbDtcclxuICAgICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuICAgICAgICB2YXIgZXJyO1xyXG5cclxuICAgICAgICB3aGlsZSAoIWVyciAmJiAhbWFpbCAmJiAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIG5vdykgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgaW1hcHMuY29ubmVjdChfY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ub3BlbkJveCgnSU5CT1gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCB1bnNlZW4gZW1haWxzIGZyb20gdGhlIGxhc3Qgc2luY2VNaW51dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRUaW1lKERhdGUubm93KCkgLSAoc2luY2VNaW51dGVzICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hDcml0ZXJpYSA9IFsnVU5TRUVOJywgWydTSU5DRScsIHN0YXJ0RGF0ZV1dO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZldGNoIGNlcnRhaW4gaGVhZGVycyBhbmQgc3RyaXBwZWQgZG93biBib2R5XHJcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZGllczogWydIRUFERVIuRklFTERTIChGUk9NIFRPIFNVQkpFQ1QgREFURSknLCAnVEVYVCddLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtYXJrU2VlbjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNvbm5lY3Rpb24uc2VhcmNoKHNlYXJjaENyaXRlcmlhLCBmZXRjaE9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1swXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5UGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1sxXSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSByZXN1bHQuYXR0cmlidXRlcy51aWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRIZWFkZXIgPSAnSW1hcC1JZDogJytpZCsnXFxyXFxuJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW1wbGUgPSBhd2FpdCBzaW1wbGVQYXJzZXIoaWRIZWFkZXIrYm9keVBhcnQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGltYXBzLmdldFBhcnRzKHJlc3VsdC5hdHRyaWJ1dGVzLnN0cnVjdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5kaXNwb3NpdGlvbiAmJiBwYXJ0LmRpc3Bvc2l0aW9uLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0FUVEFDSE1FTlQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0RGF0YSA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0UGFydERhdGEocmVzdWx0LCBwYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBwYXJ0LmRpc3Bvc2l0aW9uLnBhcmFtcy5maWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJ0RGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaW1wbGUuaHRtbCB8fCBzaW1wbGUudGV4dCB8fCBzaW1wbGUudGV4dEFzSHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZWQgc3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHNpbXBsZS5odG1sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sID0gc2ltcGxlLnRleHRBc0h0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlclBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgc3ViamVjdC50ZXN0KGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViamVjdCA9PT0gaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gaGVhZGVyUGFydC5ib2R5LnRvID8gaGVhZGVyUGFydC5ib2R5LnRvWzBdIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGhlYWRlclBhcnQuYm9keS5mcm9tWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBoZWFkZXJQYXJ0LmJvZHkuZGF0ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sOiB0ZXh0QXNIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTUFJTF9FUlJPUiwgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW1haWwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBcIkNvdWxkbid0IGdldCBhbiBlbWFpbCB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJyBtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYWlsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNlbmQgZW1haWwgdXNpbmcgU01UUC5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gdG8gLSBSZWNlaXZlcidzIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3ViamVjdCAtIEVtYWlsIHN1YmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudCAtIEVtYWlsIGJvZHkgYXMgYSBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBodG1sIC0gT3B0aW9uYWwsIEVtYWlsIGJvZHkgYXMgSFRNTC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmQgPSBhc3luYyBmdW5jdGlvbih0bywgc3ViamVjdCwgY29udGVudCwgaHRtbCA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxldCBlcnIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgU01UUCB0cmFuc3BvcnRlciBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0ZXIgPSBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XHJcbiAgICAgICAgICAgICAgICBob3N0OiBfc210cENvbmZpZy5ob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogX3NtdHBDb25maWcucG9ydCxcclxuICAgICAgICAgICAgICAgIHNlY3VyZTogX3NtdHBDb25maWcudGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IF9zbXRwQ29uZmlnLnVzZXJuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3M6IF9zbXRwQ29uZmlnLnBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNlbmRtYWlsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxvZ2dlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkxvZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWVzc2FnZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgIC8vIFN1YmplY3Qgb2YgdGhlIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3QgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAvLyBwbGFpbnRleHQgYm9keVxyXG4gICAgICAgICAgICAgICAgdGV4dDogY29udGVudCxcclxuICAgICAgICAgICAgICAgIC8vIEhUTUwgYm9keVxyXG4gICAgICAgICAgICAgICAgaHRtbDogaHRtbCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRyYW5zcG9ydGVyLnNlbmRNYWlsKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oxygen-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.35.2",
|
|
4
4
|
"description": "Automation framework for testing modern applications",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -72,14 +72,14 @@
|
|
|
72
72
|
"cucumber": "6.0.5",
|
|
73
73
|
"deasync": "0.1.28",
|
|
74
74
|
"decache": "4.6.2",
|
|
75
|
-
"des.js": "
|
|
75
|
+
"des.js": "1.1.0",
|
|
76
76
|
"download": "8.0.0",
|
|
77
77
|
"easyxml": "2.0.1",
|
|
78
78
|
"ejs": "3.1.9",
|
|
79
79
|
"esm": "3.2.25",
|
|
80
80
|
"fast-xml-parser": "4.2.5",
|
|
81
81
|
"fibers": "5.0.3",
|
|
82
|
-
"form-data": "
|
|
82
|
+
"form-data": "4.0.0",
|
|
83
83
|
"glob": "7.2.3",
|
|
84
84
|
"glob-to-regexp": "0.4.1",
|
|
85
85
|
"global-agent": "3.0.0",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"imap-simple": "5.1.0",
|
|
88
88
|
"is-glob": "4.0.3",
|
|
89
89
|
"jimp": "0.16.3",
|
|
90
|
-
"js-md4": "
|
|
90
|
+
"js-md4": "0.3.2",
|
|
91
91
|
"junit-report-builder": "3.0.1",
|
|
92
92
|
"lodash": "4.17.21",
|
|
93
93
|
"mailparser": "3.5.0",
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
"mockery": "2.1.0",
|
|
96
96
|
"moment": "2.29.4",
|
|
97
97
|
"node-addon-api": "3.0.2",
|
|
98
|
+
"nodemailer": "6.9.13",
|
|
98
99
|
"object-hash": "3.0.0",
|
|
99
100
|
"objects-to-csv": "1.3.6",
|
|
100
101
|
"pdf2json": "1.2.5",
|