appium-android-driver 5.8.8 → 5.8.10

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.
Files changed (73) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/index.js +1 -1
  3. package/build/lib/android-helpers.js +8 -6
  4. package/build/lib/android-helpers.js.map +1 -1
  5. package/build/lib/bootstrap.js +1 -1
  6. package/build/lib/bootstrap.js.map +1 -1
  7. package/build/lib/commands/actions.js +1 -1
  8. package/build/lib/commands/actions.js.map +1 -1
  9. package/build/lib/commands/alert.js +1 -1
  10. package/build/lib/commands/alert.js.map +1 -1
  11. package/build/lib/commands/app-management.js +1 -1
  12. package/build/lib/commands/app-management.js.map +1 -1
  13. package/build/lib/commands/context.js +1 -1
  14. package/build/lib/commands/context.js.map +1 -1
  15. package/build/lib/commands/coverage.js +1 -1
  16. package/build/lib/commands/coverage.js.map +1 -1
  17. package/build/lib/commands/element.js +1 -1
  18. package/build/lib/commands/element.js.map +1 -1
  19. package/build/lib/commands/emu-console.js +1 -1
  20. package/build/lib/commands/emu-console.js.map +1 -1
  21. package/build/lib/commands/execute.js +1 -1
  22. package/build/lib/commands/execute.js.map +1 -1
  23. package/build/lib/commands/file-actions.js +1 -1
  24. package/build/lib/commands/file-actions.js.map +1 -1
  25. package/build/lib/commands/find.js +1 -1
  26. package/build/lib/commands/find.js.map +1 -1
  27. package/build/lib/commands/general.js +1 -1
  28. package/build/lib/commands/general.js.map +1 -1
  29. package/build/lib/commands/ime.js +1 -1
  30. package/build/lib/commands/ime.js.map +1 -1
  31. package/build/lib/commands/index.js +1 -1
  32. package/build/lib/commands/index.js.map +1 -1
  33. package/build/lib/commands/intent.js +1 -1
  34. package/build/lib/commands/intent.js.map +1 -1
  35. package/build/lib/commands/log.js +1 -1
  36. package/build/lib/commands/log.js.map +1 -1
  37. package/build/lib/commands/media-projection.js +1 -1
  38. package/build/lib/commands/media-projection.js.map +1 -1
  39. package/build/lib/commands/network.js +1 -1
  40. package/build/lib/commands/network.js.map +1 -1
  41. package/build/lib/commands/performance.js +1 -1
  42. package/build/lib/commands/performance.js.map +1 -1
  43. package/build/lib/commands/permissions.js +1 -1
  44. package/build/lib/commands/permissions.js.map +1 -1
  45. package/build/lib/commands/recordscreen.js +1 -1
  46. package/build/lib/commands/recordscreen.js.map +1 -1
  47. package/build/lib/commands/shell.js +1 -1
  48. package/build/lib/commands/shell.js.map +1 -1
  49. package/build/lib/commands/streamscreen.js +1 -1
  50. package/build/lib/commands/streamscreen.js.map +1 -1
  51. package/build/lib/commands/system-bars.js +1 -1
  52. package/build/lib/commands/system-bars.js.map +1 -1
  53. package/build/lib/commands/touch.js +1 -1
  54. package/build/lib/commands/touch.js.map +1 -1
  55. package/build/lib/desired-caps.js +1 -1
  56. package/build/lib/desired-caps.js.map +1 -1
  57. package/build/lib/driver.js +1 -1
  58. package/build/lib/driver.js.map +1 -1
  59. package/build/lib/logger.js +1 -1
  60. package/build/lib/logger.js.map +1 -1
  61. package/build/lib/method-map.js +1 -1
  62. package/build/lib/method-map.js.map +1 -1
  63. package/build/lib/uiautomator.js +1 -1
  64. package/build/lib/uiautomator.js.map +1 -1
  65. package/build/lib/unlock-helpers.js +1 -1
  66. package/build/lib/unlock-helpers.js.map +1 -1
  67. package/build/lib/utils.js +1 -1
  68. package/build/lib/utils.js.map +1 -1
  69. package/build/lib/webview-helpers.js +1 -1
  70. package/build/lib/webview-helpers.js.map +1 -1
  71. package/lib/android-helpers.js +12 -8
  72. package/lib/commands/performance.js +17 -0
  73. package/package.json +2 -2
@@ -276,4 +276,4 @@ commands.mobileUnlock = async function mobileUnlock(opts = {}) {
276
276
  Object.assign(extensions, commands, helpers);
277
277
  var _default = extensions;
278
278
  exports.default = _default;
279
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT01FTlRfRk9STUFUX0lTTzg2MDEiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwia2V5cyIsIl8iLCJpc0FycmF5Iiwiam9pbiIsInBhcmFtcyIsInRleHQiLCJyZXBsYWNlIiwib3B0cyIsInVuaWNvZGVLZXlib2FyZCIsImRvU2VuZEtleXMiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwiZ2V0RGV2aWNlVGltZSIsImZvcm1hdCIsImxvZyIsImRlYnVnIiwiZGV2aWNlVGltZXN0YW1wIiwiYWRiIiwic2hlbGwiLCJ0cmltIiwicGFyc2VkVGltZXN0YW1wIiwibW9tZW50IiwidXRjIiwiaXNWYWxpZCIsIndhcm4iLCJ1dGNPZmZzZXQiLCJfdHptIiwibW9iaWxlR2V0RGV2aWNlVGltZSIsImdldFBhZ2VTb3VyY2UiLCJiYWNrIiwiaXNLZXlib2FyZFNob3duIiwiaXNTb2Z0S2V5Ym9hcmRQcmVzZW50IiwiaGlkZUtleWJvYXJkIiwib3BlblNldHRpbmdzQWN0aXZpdHkiLCJzZXR0aW5nIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSIsIndhaXRGb3JOb3RBY3Rpdml0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImdldEN1cnJlbnRQYWNrYWdlIiwiYmFja2dyb3VuZCIsInNlY29uZHMiLCJnb1RvSG9tZSIsInNsZWVwTXMiLCJ0aHJlc2hvbGRNcyIsImludGVydmFsTXMiLCJtaW4iLCJwYXJzZUludCIsInByb2dyZXNzQ2IiLCJlbGFwc2VkTXMiLCJwcm9ncmVzcyIsIndhaXRTZWNzIiwidG9GaXhlZCIsInByb2dyZXNzUGN0IiwibG9uZ1NsZWVwIiwiYXJncyIsIl9jYWNoZWRBY3Rpdml0eUFyZ3MiLCJhY3RpdmF0ZUFwcCIsImlnbiIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5Iiwic3BsaXQiLCJpbmNsdWRlcyIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiaW50ZW50QWN0aW9uIiwiY2F0ZWdvcnkiLCJpbnRlbnRDYXRlZ29yeSIsImZsYWdzIiwiaW50ZW50RmxhZ3MiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5Iiwid2FpdEZvckxhdW5jaCIsImFwcFdhaXRGb3JMYXVuY2giLCJ3YWl0RHVyYXRpb24iLCJhcHBXYWl0RHVyYXRpb24iLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInN0b3BBcHAiLCJ1c2VyIiwidXNlclByb2ZpbGUiLCJ1dGlsIiwiZmlsdGVyT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0QXBwIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJhcGtTdHJpbmdzIiwiYW5kcm9pZEhlbHBlcnMiLCJwdXNoU3RyaW5ncyIsImxhdW5jaEFwcCIsImluaXRBVVQiLCJzdGFydEFVVCIsInN0YXJ0QWN0aXZpdHkiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJoYXNWYWx1ZSIsInJlc2V0IiwicmVzZXRBcHAiLCJPYmplY3QiLCJhc3NpZ24iLCJmYXN0UmVzZXQiLCJzZXRDb250ZXh0IiwiaXNDaHJvbWVTZXNzaW9uIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic2V0VXJsIiwidXJpIiwic3RhcnRVcmkiLCJjbG9zZUFwcCIsImZvcmNlU3RvcCIsImdldERpc3BsYXlEZW5zaXR5Iiwib3V0IiwidmFsIiwiaXNOYU4iLCJlcnJvckFuZFRocm93IiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsIm1vYmlsZUdldE5vdGlmaWNhdGlvbnMiLCJnZXROb3RpZmljYXRpb25zIiwibW9iaWxlTGlzdFNtcyIsImdldFNtc0xpc3QiLCJtb2JpbGVVbmxvY2siLCJ0eXBlIiwic3RyYXRlZ3kiLCJ0aW1lb3V0TXMiLCJ1bmxvY2siLCJ1bmxvY2tLZXkiLCJ1bmxvY2tUeXBlIiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgbG9uZ1NsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IE1PTUVOVF9GT1JNQVRfSVNPODYwMSA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGtleXMgKGtleXMpIHtcbiAgLy8gUHJvdG9jb2wgc2VuZHMgYW4gYXJyYXk7IHJldGhpbmsgYXBwcm9hY2hcbiAga2V5cyA9IF8uaXNBcnJheShrZXlzKSA/IGtleXMuam9pbignJykgOiBrZXlzO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIHRleHQ6IGtleXMsXG4gICAgcmVwbGFjZTogZmFsc2VcbiAgfTtcbiAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQpIHtcbiAgICBwYXJhbXMudW5pY29kZUtleWJvYXJkID0gdHJ1ZTtcbiAgfVxuICBhd2FpdCB0aGlzLmRvU2VuZEtleXMocGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiBkb1NlbmRLZXlzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3NldFRleHQnLCBwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlJ3MgdGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBUaGUgc2V0IG9mIGZvcm1hdCBzcGVjaWZpZXJzLiBSZWFkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8gdG8gZ2V0IHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUgZm9ybWF0IHNwZWNpZmllcnMuIFRoZSBkZWZhdWx0IGZvcm1hdCBpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBZWVlZLU1NLUREVEhIOm1tOnNzWmAsIHdoaWNoIGNvbXBsaWVzIHRvIElTTy04NjAxXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLmdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VUaW1lIChmb3JtYXQgPSBNT01FTlRfRk9STUFUX0lTTzg2MDEpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ0F0dGVtcHRpbmcgdG8gY2FwdHVyZSBhbmRyb2lkIGRldmljZSBkYXRlIGFuZCB0aW1lLiAnICtcbiAgICBgVGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgJyR7Zm9ybWF0fSdgKTtcbiAgY29uc3QgZGV2aWNlVGltZXN0YW1wID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZGF0ZScsICcrJVktJW0tJWRUJVQleiddKSkudHJpbSgpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRldmljZSB0aW1lc3RhbXA6ICR7ZGV2aWNlVGltZXN0YW1wfWApO1xuICBjb25zdCBwYXJzZWRUaW1lc3RhbXAgPSBtb21lbnQudXRjKGRldmljZVRpbWVzdGFtcCwgJ1lZWVktTU0tRERUSEg6bW06c3NaWicpO1xuICBpZiAoIXBhcnNlZFRpbWVzdGFtcC5pc1ZhbGlkKCkpIHtcbiAgICB0aGlzLmxvZy53YXJuKCdDYW5ub3QgcGFyc2UgdGhlIHJldHVybmVkIHRpbWVzdGFtcC4gUmV0dXJuaW5nIGFzIGlzJyk7XG4gICAgcmV0dXJuIGRldmljZVRpbWVzdGFtcDtcbiAgfVxuICByZXR1cm4gcGFyc2VkVGltZXN0YW1wLnV0Y09mZnNldChwYXJzZWRUaW1lc3RhbXAuX3R6bSB8fCAwKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlVGltZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmb3JtYXQgW1lZWVktTU0tRERUSEg6bW06c3NaXSAtIFNlZSBnZXREZXZpY2VUaW1lI2Zvcm1hdFxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGRldmljZSB0aW1lXG4gKlxuICogQHBhcmFtIHtEZXZpY2VUaW1lT3B0aW9uc30gb3B0c1xuICogQHJldHVybiB7c3RyaW5nfSBGb3JtYXR0ZWQgZGF0ZXRpbWUgc3RyaW5nIG9yIHRoZSByYXcgY29tbWFuZCBvdXRwdXQgaWYgZm9ybWF0dGluZyBmYWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0RGV2aWNlVGltZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVRpbWUob3B0cy5mb3JtYXQpO1xufTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc291cmNlJyk7XG59O1xuXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gYmFjayAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwcmVzc0JhY2snKTtcbn07XG5cbmNvbW1hbmRzLmlzS2V5Ym9hcmRTaG93biA9IGFzeW5jIGZ1bmN0aW9uIGlzS2V5Ym9hcmRTaG93biAoKSB7XG4gIGNvbnN0IHtpc0tleWJvYXJkU2hvd259ID0gYXdhaXQgdGhpcy5hZGIuaXNTb2Z0S2V5Ym9hcmRQcmVzZW50KCk7XG4gIHJldHVybiBpc0tleWJvYXJkU2hvd247XG59O1xuXG5jb21tYW5kcy5oaWRlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBoaWRlS2V5Ym9hcmQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaGlkZUtleWJvYXJkKCk7XG59O1xuXG5jb21tYW5kcy5vcGVuU2V0dGluZ3NBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXR0aW5nc0FjdGl2aXR5IChzZXR0aW5nKSB7XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2FtJywgJ3N0YXJ0JywgJy1hJywgYGFuZHJvaWQuc2V0dGluZ3MuJHtzZXR0aW5nfWBdKTtcbiAgYXdhaXQgdGhpcy5hZGIud2FpdEZvck5vdEFjdGl2aXR5KGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCA1MDAwKTtcbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dTaXplICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2dldERldmljZVNpemUnKTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dSZWN0ICgpIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCB0aGlzLmdldFdpbmRvd1NpemUoKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50QWN0aXZpdHkgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwQWN0aXZpdHk7XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50UGFja2FnZSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRQYWNrYWdlICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCkpLmFwcFBhY2thZ2U7XG59O1xuXG5jb21tYW5kcy5iYWNrZ3JvdW5kID0gYXN5bmMgZnVuY3Rpb24gYmFja2dyb3VuZCAoc2Vjb25kcykge1xuICBpZiAoc2Vjb25kcyA8IDApIHtcbiAgICAvLyBpZiB1c2VyIHBhc3NlcyBpbiBhIG5lZ2F0aXZlIHNlY29uZHMgdmFsdWUsIGludGVycHJldCB0aGF0IGFzIHRoZSBpbnN0cnVjdGlvblxuICAgIC8vIHRvIG5vdCBicmluZyB0aGUgYXBwIGJhY2sgYXQgYWxsXG4gICAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcbiAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcblxuICAvLyBwZW9wbGUgY2FuIHdhaXQgZm9yIGEgbG9uZyB0aW1lLCBzbyB0byBiZSBzYWZlIGxldCdzIHVzZSB0aGUgbG9uZ1NsZWVwIGZ1bmN0aW9uIGFuZCBsb2dcbiAgLy8gcHJvZ3Jlc3MgcGVyaW9kaWNhbGx5LlxuICBjb25zdCBzbGVlcE1zID0gc2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IHRocmVzaG9sZE1zID0gMzAgKiAxMDAwOyAvLyB1c2UgdGhlIHNwaW4td2FpdCBmb3IgYW55dGhpbmcgb3ZlciB0aGlzIHRocmVzaG9sZFxuICAvLyBmb3Igb3VyIHNwaW4gaW50ZXJ2YWwsIHVzZSAxJSBvZiB0aGUgdG90YWwgd2FpdCB0aW1lLCBidXQgbm90aGluZyBiaWdnZXIgdGhhbiAzMHNcbiAgY29uc3QgaW50ZXJ2YWxNcyA9IF8ubWluKFszMCAqIDEwMDAsIHBhcnNlSW50KHNsZWVwTXMgLyAxMDAsIDEwKV0pO1xuICBjb25zdCBwcm9ncmVzc0NiID0gKHtlbGFwc2VkTXMsIHByb2dyZXNzfSkgPT4ge1xuICAgIGNvbnN0IHdhaXRTZWNzID0gKGVsYXBzZWRNcyAvIDEwMDApLnRvRml4ZWQoMCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NQY3QgPSAocHJvZ3Jlc3MgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgdGhpcy5sb2cuZGVidWcoYFdhaXRlZCAke3dhaXRTZWNzfXMgc28gZmFyICgke3Byb2dyZXNzUGN0fSUpYCk7XG4gIH07XG4gIGF3YWl0IGxvbmdTbGVlcChzbGVlcE1zLCB7dGhyZXNob2xkTXMsIGludGVydmFsTXMsIHByb2dyZXNzQ2J9KTtcblxuICBsZXQgYXJncztcbiAgaWYgKHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyAmJiB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXSkge1xuICAgIC8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCB3aXRoIGBzdGFydEFjdGl2aXR5YCwgc28gdXNlIHRob3NlIGFyZ3MgdG8gcmVzdGFydFxuICAgIGFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEFjdGl2YXRpbmcgYXBwICcke2FwcFBhY2thZ2V9JyBpbiBvcmRlciB0byByZXN0b3JlIGl0YCk7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKGFwcFBhY2thZ2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGFyZ3MgPSAoKGFwcFBhY2thZ2UgPT09IHRoaXMub3B0cy5hcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5ID09PSB0aGlzLm9wdHMuYXBwQWN0aXZpdHkpIHx8XG4gICAgICAgICAgICAoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlICYmICh0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5IHx8ICcnKS5zcGxpdCgnLCcpLmluY2x1ZGVzKGFwcEFjdGl2aXR5KSkpXG4gICAgICA/IHsvLyB0aGUgYWN0aXZpdHkgaXMgdGhlIG9yaWdpbmFsIHNlc3Npb24gYWN0aXZpdHksIHNvIHVzZSB0aGUgb3JpZ2luYWwgYXJnc1xuICAgICAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnksXG4gICAgICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgICAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICAgICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgICAgICBzdG9wQXBwOiBmYWxzZSxcbiAgICAgICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlfVxuICAgICAgOiB7Ly8gdGhlIGFjdGl2aXR5IHdhcyBzdGFydGVkIHNvbWUgb3RoZXIgd2F5LCBzbyB1c2UgZGVmYXVsdHNcbiAgICAgICAgcGtnOiBhcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgICAgIHdhaXRQa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlfTtcbiAgfVxuICBhcmdzID0gYXdhaXQgdXRpbC5maWx0ZXJPYmplY3QoYXJncyk7XG4gIHRoaXMubG9nLmRlYnVnKGBCcmluZ2luZyBhcHBsaWNhdGlvbiBiYWNrIHRvIGZvcmVncm91bmQgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTdHJpbmdzIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gKG1hcHBpbmcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhsYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgbXV0YXRpbmcgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIGJ1dCBpdCdzIGhvdyBhcHBpdW0gY3VycmVudGx5IHdvcmtzXG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigndXBkYXRlU3RyaW5ncycpO1xuICB9XG5cbiAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xufTtcblxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG4gIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFjdGl2aXR5IChhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSxcbiAgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSwgaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nIGFuZCBhY3Rpdml0eSAnJHthcHBBY3Rpdml0eX0nYCk7XG5cbiAgLy8gZG9udFN0b3BBcHBPblJlc2V0IGlzIGJvdGggYW4gYXJndW1lbnQgaGVyZSwgYW5kIGEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gIC8vIGlmIHRoZSBhcmd1bWVudCBpcyBzZXQsIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgY2FwXG4gIGlmICghdXRpbC5oYXNWYWx1ZShkb250U3RvcEFwcE9uUmVzZXQpKSB7XG4gICAgZG9udFN0b3BBcHBPblJlc2V0ID0gISF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0O1xuICB9XG5cbiAgbGV0IGFyZ3MgPSB7XG4gICAgcGtnOiBhcHBQYWNrYWdlLFxuICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICB3YWl0UGtnOiBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogaW50ZW50QWN0aW9uLFxuICAgIGNhdGVnb3J5OiBpbnRlbnRDYXRlZ29yeSxcbiAgICBmbGFnczogaW50ZW50RmxhZ3MsXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgc3RvcEFwcDogIWRvbnRTdG9wQXBwT25SZXNldFxuICB9O1xuICB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgfHwge307XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcmdzLndhaXRQa2d9LyR7YXJncy53YWl0QWN0aXZpdHl9YF0gPSBhcmdzO1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLnJlc2V0ID0gYXN5bmMgZnVuY3Rpb24gcmVzZXQgKCkge1xuICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7ZmFzdFJlc2V0OiB0cnVlfSkpO1xuICAvLyByZXNldCBjb250ZXh0IHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9uIGNvbnRleHQgd2Ugd2lsbCBlbmQgdXAgYWZ0ZXIgYXBwIGxhdW5jaC5cbiAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmlzQ2hyb21lU2Vzc2lvbiA/IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKCkgOiB0aGlzLnN0YXJ0QVVUKCk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFVVCA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QVVUICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoe1xuICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlLFxuICB9KTtcbn07XG5cbi8vIHdlIG92ZXJyaWRlIHNldFVybCB0byB0YWtlIGFuIGFuZHJvaWQgVVJJIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBkZWVwLWxpbmtpbmdcbi8vIGluc2lkZSBhbiBhcHAsIHNpbWlsYXIgdG8gc3RhcnRpbmcgYW4gaW50ZW50XG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBzZXRVcmwgKHVyaSkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmksIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbn07XG5cbi8vIGNsb3NpbmcgYXBwIHVzaW5nIGZvcmNlIHN0b3BcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAvLyByZXNldCBjb250ZXh0IHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9uIGNvbnRleHQgd2Ugd2lsbCBlbmQgdXAgYWZ0ZXIgYXBwIGxhdW5jaC5cbiAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KCk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgLy8gZmlyc3QgdHJ5IHRoZSBwcm9wZXJ0eSBmb3IgZGV2aWNlc1xuICBsZXQgb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydnZXRwcm9wJywgJ3JvLnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIHRyeSBnZXR0aW5nIHRoZSBlbXVsYXRvciBwcm9wZXJ0eVxuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBmYWxsYmFjayB0byB0cnlpbmcgcHJvcGVydHkgZm9yIGVtdWxhdG9yc1xuICBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncWVtdS5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgZGVuc2l0eSB2YWx1ZSB3YXMgTmFOOiBcIiR7b3V0fVwiYCk7XG4gIH1cbiAgLy8gY291bGRuJ3QgZ2V0IGFueXRoaW5nLCBzbyBlcnJvciBvdXRcbiAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRmFpbGVkIHRvIGdldCBkaXNwbGF5IGRlbnNpdHkgcHJvcGVydHkuJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthY3Rpb259ID0gb3B0cztcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGFjdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnYWN0aW9uJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5hZGIucGVyZm9ybUVkaXRvckFjdGlvbihhY3Rpb24pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcmVjZW50IHN5c3RlbSBub3RpZmljYXRpb25zLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgYWRiLmdldE5vdGlmaWNhdGlvbnNgIGZvclxuICogbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldE5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXROb3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmdldE5vdGlmaWNhdGlvbnMoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBTTVMgbWVzc2FnZXMgd2l0aCB0aGVpciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgYWRiLmdldFNtc0xpc3RgIGZvclxuICogbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RTbXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0U21zIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmdldFNtc0xpc3Qob3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVubG9ja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXkgVGhlIHVubG9jayBrZXkuIFRoZSB2YWx1ZSBvZiB0aGlzIGtleSBkZXBlbmRzXG4gKiBvbiB0aGUgYWN0dWFsIHVubG9jayB0eXBlIGFuZCBjb3VsZCBiZSBhIHBpbi9wYXNzd29yZC9wYXR0ZXJuIHZhbHVlIG9yXG4gKiBhIGJpb21ldHJpYyBmaW5nZXIgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBUaGUgdW5sb2NrIHR5cGUuIFRoZSBmb2xsb3dpbmcgdW5sb2NrIHR5cGVzXG4gKiBhcmUgc3VwcG9ydGVkOiBgcGluYCwgYHBpbldpdGhLZXlFdmVudGAsIGBwYXNzd29yZGAsIGBwYXR0ZXJuYCBhbmQgYGZpbmdlcnByaW50YC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc3RyYXRlZ3kgRWl0aGVyICdsb2Nrc2V0dGluZ3MnIChkZWZhdWx0KSBvciAndWlhdXRvbWF0b3InLlxuICogU2V0dGluZyBpdCB0byAndWlhdXRvbWF0b3InIHdpbGwgZW5mb3JjZSB0aGUgZHJpdmVyIHRvIGF2b2lkIHVzaW5nIHNwZWNpYWxcbiAqIEFEQiBzaG9ydGN1dHMgaW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHVubG9jayBwcm9jZWR1cmUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRpbWVvdXRNcyBbMjAwMF0gVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIHNjcmVlbiBnZXRzIHVubG9ja2VkXG4gKi9cblxuLyoqXG4gKiBVbmxvY2tzIHRoZSBkZXZpY2UgaWYgaXQgaXMgbG9ja2VkLiBOb29wIGlmIHRoZSBkZXZpY2UncyBzY3JlZW4gaXMgbm90IGxvY2tlZC5cbiAqXG4gKiBAcGFyYW0gez9VbmxvY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdW5sb2NrIG9wZXJhdGlvbiBmYWlscyBvciB0aGUgcHJvdmlkZWRcbiAqIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVubG9jayAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsga2V5LCB0eXBlLCBzdHJhdGVneSwgdGltZW91dE1zIH0gPSBvcHRzO1xuICBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHtcbiAgICB1bmxvY2tLZXk6IGtleSxcbiAgICB1bmxvY2tUeXBlOiB0eXBlLFxuICAgIHVubG9ja1N0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dDogdGltZW91dE1zLFxuICB9KTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsc0JBQXNCO0FBRXBELElBQUlDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFBQTtBQUVqREYsUUFBUSxDQUFDRyxJQUFJLEdBQUcsZUFBZUEsSUFBSSxDQUFFQSxJQUFJLEVBQUU7RUFFekNBLElBQUksR0FBR0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLElBQUksQ0FBQyxHQUFHQSxJQUFJLENBQUNHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBR0gsSUFBSTtFQUM3QyxJQUFJSSxNQUFNLEdBQUc7SUFDWEMsSUFBSSxFQUFFTCxJQUFJO0lBQ1ZNLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFDRCxJQUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxlQUFlLEVBQUU7SUFDN0JKLE1BQU0sQ0FBQ0ksZUFBZSxHQUFHLElBQUk7RUFDL0I7RUFDQSxNQUFNLElBQUksQ0FBQ0MsVUFBVSxDQUFDTCxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVEUCxRQUFRLENBQUNZLFVBQVUsR0FBRyxlQUFlQSxVQUFVLENBQUVMLE1BQU0sRUFBRTtFQUN2RCxPQUFPLE1BQU0sSUFBSSxDQUFDTSxTQUFTLENBQUNDLFVBQVUsQ0FBQyxTQUFTLEVBQUVQLE1BQU0sQ0FBQztBQUMzRCxDQUFDO0FBV0RQLFFBQVEsQ0FBQ2UsYUFBYSxHQUFHLGVBQWVBLGFBQWEsQ0FBRUMsTUFBTSxHQUFHakIscUJBQXFCLEVBQUU7RUFDckYsSUFBSSxDQUFDa0IsR0FBRyxDQUFDQyxLQUFLLENBQUMsc0RBQXNELEdB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
279
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYW5kcm9pZEhlbHBlcnMiLCJfc3VwcG9ydCIsIl9tb21lbnQiLCJfYXN5bmNib3giLCJfZHJpdmVyIiwiTU9NRU5UX0ZPUk1BVF9JU084NjAxIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImV4cG9ydHMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJpc0tleWJvYXJkU2hvd24iLCJpc1NvZnRLZXlib2FyZFByZXNlbnQiLCJoaWRlS2V5Ym9hcmQiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJsb25nU2xlZXAiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwibW9iaWxlR2V0Tm90aWZpY2F0aW9ucyIsImdldE5vdGlmaWNhdGlvbnMiLCJtb2JpbGVMaXN0U21zIiwiZ2V0U21zTGlzdCIsIm1vYmlsZVVubG9jayIsInR5cGUiLCJzdHJhdGVneSIsInRpbWVvdXRNcyIsInVubG9jayIsInVubG9ja0tleSIsInVubG9ja1R5cGUiLCJ1bmxvY2tTdHJhdGVneSIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBsb25nU2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgTU9NRU5UX0ZPUk1BVF9JU084NjAxID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlzID0gYXN5bmMgZnVuY3Rpb24ga2V5cyAoa2V5cykge1xuICAvLyBQcm90b2NvbCBzZW5kcyBhbiBhcnJheTsgcmV0aGluayBhcHByb2FjaFxuICBrZXlzID0gXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXM7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgdGV4dDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9O1xuICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCkge1xuICAgIHBhcmFtcy51bmljb2RlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIGF3YWl0IHRoaXMuZG9TZW5kS2V5cyhwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZG9TZW5kS2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGRvU2VuZEtleXMgKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBkZXZpY2UncyB0aW1lc3RhbXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFRoZSBzZXQgb2YgZm9ybWF0IHNwZWNpZmllcnMuIFJlYWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSBmb3JtYXQgc3BlY2lmaWVycy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYFlZWVktTU0tRERUSEg6bW06c3NaYCwgd2hpY2ggY29tcGxpZXMgdG8gSVNPLTg2MDFcbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGRhdGV0aW1lIHN0cmluZyBvciB0aGUgcmF3IGNvbW1hbmQgb3V0cHV0IGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAqL1xuY29tbWFuZHMuZ2V0RGV2aWNlVGltZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVRpbWUgKGZvcm1hdCA9IE1PTUVOVF9GT1JNQVRfSVNPODYwMSkge1xuICB0aGlzLmxvZy5kZWJ1ZygnQXR0ZW1wdGluZyB0byBjYXB0dXJlIGFuZHJvaWQgZGV2aWNlIGRhdGUgYW5kIHRpbWUuICcgK1xuICAgIGBUaGUgZm9ybWF0IHNwZWNpZmllciBpcyAnJHtmb3JtYXR9J2ApO1xuICBjb25zdCBkZXZpY2VUaW1lc3RhbXAgPSAoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydkYXRlJywgJyslWS0lbS0lZFQlVCV6J10pKS50cmltKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBHb3QgZGV2aWNlIHRpbWVzdGFtcDogJHtkZXZpY2VUaW1lc3RhbXB9YCk7XG4gIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IG1vbWVudC51dGMoZGV2aWNlVGltZXN0YW1wLCAnWVlZWS1NTS1ERFRISDptbTpzc1paJyk7XG4gIGlmICghcGFyc2VkVGltZXN0YW1wLmlzVmFsaWQoKSkge1xuICAgIHRoaXMubG9nLndhcm4oJ0Nhbm5vdCBwYXJzZSB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiBSZXR1cm5pbmcgYXMgaXMnKTtcbiAgICByZXR1cm4gZGV2aWNlVGltZXN0YW1wO1xuICB9XG4gIHJldHVybiBwYXJzZWRUaW1lc3RhbXAudXRjT2Zmc2V0KHBhcnNlZFRpbWVzdGFtcC5fdHptIHx8IDApLmZvcm1hdChmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VUaW1lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZvcm1hdCBbWVlZWS1NTS1ERFRISDptbTpzc1pdIC0gU2VlIGdldERldmljZVRpbWUjZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWVcbiAqXG4gKiBAcGFyYW0ge0RldmljZVRpbWVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VUaW1lIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlVGltZShvcHRzLmZvcm1hdCk7XG59O1xuXG5jb21tYW5kcy5nZXRQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzb3VyY2UnKTtcbn07XG5cbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiBiYWNrICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzQmFjaycpO1xufTtcblxuY29tbWFuZHMuaXNLZXlib2FyZFNob3duID0gYXN5bmMgZnVuY3Rpb24gaXNLZXlib2FyZFNob3duICgpIHtcbiAgY29uc3Qge2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmFkYi5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRTaG93bjtcbn07XG5cbmNvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5oaWRlS2V5Ym9hcmQoKTtcbn07XG5cbmNvbW1hbmRzLm9wZW5TZXR0aW5nc0FjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gb3BlblNldHRpbmdzQWN0aXZpdHkgKHNldHRpbmcpIHtcbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG4gIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnYW0nLCAnc3RhcnQnLCAnLWEnLCBgYW5kcm9pZC5zZXR0aW5ncy4ke3NldHRpbmd9YF0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1NpemUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZ2V0RGV2aWNlU2l6ZScpO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1JlY3QgKCkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRBY3Rpdml0eSAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpKS5hcHBBY3Rpdml0eTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRQYWNrYWdlID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFBhY2thZ2UgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwUGFja2FnZTtcbn07XG5cbmNvbW1hbmRzLmJhY2tncm91bmQgPSBhc3luYyBmdW5jdGlvbiBiYWNrZ3JvdW5kIChzZWNvbmRzKSB7XG4gIGlmIChzZWNvbmRzIDwgMCkge1xuICAgIC8vIGlmIHVzZXIgcGFzc2VzIGluIGEgbmVnYXRpdmUgc2Vjb25kcyB2YWx1ZSwgaW50ZXJwcmV0IHRoYXQgYXMgdGhlIGluc3RydWN0aW9uXG4gICAgLy8gdG8gbm90IGJyaW5nIHRoZSBhcHAgYmFjayBhdCBhbGxcbiAgICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuXG4gIC8vIHBlb3BsZSBjYW4gd2FpdCBmb3IgYSBsb25nIHRpbWUsIHNvIHRvIGJlIHNhZmUgbGV0J3MgdXNlIHRoZSBsb25nU2xlZXAgZnVuY3Rpb24gYW5kIGxvZ1xuICAvLyBwcm9ncmVzcyBwZXJpb2RpY2FsbHkuXG4gIGNvbnN0IHNsZWVwTXMgPSBzZWNvbmRzICogMTAwMDtcbiAgY29uc3QgdGhyZXNob2xkTXMgPSAzMCAqIDEwMDA7IC8vIHVzZSB0aGUgc3Bpbi13YWl0IGZvciBhbnl0aGluZyBvdmVyIHRoaXMgdGhyZXNob2xkXG4gIC8vIGZvciBvdXIgc3BpbiBpbnRlcnZhbCwgdXNlIDElIG9mIHRoZSB0b3RhbCB3YWl0IHRpbWUsIGJ1dCBub3RoaW5nIGJpZ2dlciB0aGFuIDMwc1xuICBjb25zdCBpbnRlcnZhbE1zID0gXy5taW4oWzMwICogMTAwMCwgcGFyc2VJbnQoc2xlZXBNcyAvIDEwMCwgMTApXSk7XG4gIGNvbnN0IHByb2dyZXNzQ2IgPSAoe2VsYXBzZWRNcywgcHJvZ3Jlc3N9KSA9PiB7XG4gICAgY29uc3Qgd2FpdFNlY3MgPSAoZWxhcHNlZE1zIC8gMTAwMCkudG9GaXhlZCgwKTtcbiAgICBjb25zdCBwcm9ncmVzc1BjdCA9IChwcm9ncmVzcyAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGVkICR7d2FpdFNlY3N9cyBzbyBmYXIgKCR7cHJvZ3Jlc3NQY3R9JSlgKTtcbiAgfTtcbiAgYXdhaXQgbG9uZ1NsZWVwKHNsZWVwTXMsIHt0aHJlc2hvbGRNcywgaW50ZXJ2YWxNcywgcHJvZ3Jlc3NDYn0pO1xuXG4gIGxldCBhcmdzO1xuICBpZiAodGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzICYmIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcHBQYWNrYWdlfS8ke2FwcEFjdGl2aXR5fWBdKSB7XG4gICAgLy8gdGhlIGFjdGl2aXR5IHdhcyBzdGFydGVkIHdpdGggYHN0YXJ0QWN0aXZpdHlgLCBzbyB1c2UgdGhvc2UgYXJncyB0byByZXN0YXJ0XG4gICAgYXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcHBQYWNrYWdlfS8ke2FwcEFjdGl2aXR5fWBdO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQWN0aXZhdGluZyBhcHAgJyR7YXBwUGFja2FnZX0nIGluIG9yZGVyIHRvIHJlc3RvcmUgaXRgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwUGFja2FnZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXJncyA9ICgoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkgPT09IHRoaXMub3B0cy5hcHBBY3Rpdml0eSkgfHxcbiAgICAgICAgICAgIChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UgJiYgKHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgJycpLnNwbGl0KCcsJykuaW5jbHVkZXMoYXBwQWN0aXZpdHkpKSlcbiAgICAgID8gey8vIHRoZSBhY3Rpdml0eSBpcyB0aGUgb3JpZ2luYWwgc2Vzc2lvbiBhY3Rpdml0eSwgc28gdXNlIHRoZSBvcmlnaW5hbCBhcmdzXG4gICAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICAgICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICAgICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGV9XG4gICAgICA6IHsvLyB0aGUgYWN0aXZpdHkgd2FzIHN0YXJ0ZWQgc29tZSBvdGhlciB3YXksIHNvIHVzZSBkZWZhdWx0c1xuICAgICAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgd2FpdFBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgc3RvcEFwcDogZmFsc2V9O1xuICB9XG4gIGFyZ3MgPSBhd2FpdCB1dGlsLmZpbHRlck9iamVjdChhcmdzKTtcbiAgdGhpcy5sb2cuZGVidWcoYEJyaW5naW5nIGFwcGxpY2F0aW9uIGJhY2sgdG8gZm9yZWdyb3VuZCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN0cmluZ3MgKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgTm8gbGFuZ3VhZ2Ugc3BlY2lmaWVkLCByZXR1cm5pbmcgc3RyaW5ncyBmb3I6ICR7bGFuZ3VhZ2V9YCk7XG4gIH1cblxuICAvLyBDbGllbnRzIHJlcXVpcmUgdGhlIHJlc3VsdGluZyBtYXBwaW5nIHRvIGhhdmUgYm90aCBrZXlzXG4gIC8vIGFuZCB2YWx1ZXMgb2YgdHlwZSBzdHJpbmdcbiAgY29uc3QgcHJlcHJvY2Vzc1N0cmluZ3NNYXAgPSAobWFwcGluZykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBfLmlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGlmICh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBzdHJpbmdzXG4gICAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xuICB9XG5cbiAgdGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKGxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgaWYgKHRoaXMuYm9vdHN0cmFwKSB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBtdXRhdGluZyB0aGUgY3VycmVudCBsYW5ndWFnZSwgYnV0IGl0J3MgaG93IGFwcGl1bSBjdXJyZW50bHkgd29ya3NcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCd1cGRhdGVTdHJpbmdzJyk7XG4gIH1cblxuICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG59O1xuXG5jb21tYW5kcy5sYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAgKCkge1xuICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcbiAgYXdhaXQgdGhpcy5zdGFydEFVVCgpO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5LCBpbnRlbnRBY3Rpb24sIGludGVudENhdGVnb3J5LCBpbnRlbnRGbGFncyxcbiAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsIGRvbnRTdG9wQXBwT25SZXNldCkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgcGFja2FnZSAnJHthcHBQYWNrYWdlfScgYW5kIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fSdgKTtcblxuICAvLyBkb250U3RvcEFwcE9uUmVzZXQgaXMgYm90aCBhbiBhcmd1bWVudCBoZXJlLCBhbmQgYSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAgLy8gaWYgdGhlIGFyZ3VtZW50IGlzIHNldCwgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBjYXBcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGRvbnRTdG9wQXBwT25SZXNldCkpIHtcbiAgICBkb250U3RvcEFwcE9uUmVzZXQgPSAhIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQ7XG4gIH1cblxuICBsZXQgYXJncyA9IHtcbiAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgIHdhaXRQa2c6IGFwcFdhaXRQYWNrYWdlIHx8IGFwcFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiBhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiBpbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IGludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiBpbnRlbnRGbGFncyxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhZG9udFN0b3BBcHBPblJlc2V0XG4gIH07XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyB8fCB7fTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FyZ3Mud2FpdFBrZ30vJHthcmdzLndhaXRBY3Rpdml0eX1gXSA9IGFyZ3M7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtmYXN0UmVzZXQ6IHRydWV9KSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuaXNDaHJvbWVTZXNzaW9uID8gdGhpcy5zdGFydENocm9tZVNlc3Npb24oKSA6IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QVVUID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBVVQgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcCh7XG4gICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCxcbiAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gIH0pO1xufTtcblxuLy8gd2Ugb3ZlcnJpZGUgc2V0VXJsIHRvIHRha2UgYW4gYW5kcm9pZCBVUkkgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGRlZXAtbGlua2luZ1xuLy8gaW5zaWRlIGFuIGFwcCwgc2ltaWxhciB0byBzdGFydGluZyBhbiBpbnRlbnRcbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uIHNldFVybCAodXJpKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVyaSwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLy8gY2xvc2luZyBhcHAgdXNpbmcgZm9yY2Ugc3RvcFxuY29tbWFuZHMuY2xvc2VBcHAgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFwcCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICAvLyBmaXJzdCB0cnkgdGhlIHByb3BlcnR5IGZvciBkZXZpY2VzXG4gIGxldCBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncm8uc2YubGNkX2RlbnNpdHknXSk7XG4gIGlmIChvdXQpIHtcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQob3V0LCAxMCk7XG4gICAgLy8gaWYgdGhlIHZhbHVlIGlzIE5hTiwgdHJ5IGdldHRpbmcgdGhlIGVtdWxhdG9yIHByb3BlcnR5XG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGZhbGxiYWNrIHRvIHRyeWluZyBwcm9wZXJ0eSBmb3IgZW11bGF0b3JzXG4gIG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdxZW11LnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBjb3VsZG4ndCBnZXQgYW55dGhpbmcsIHNvIGVycm9yIG91dFxuICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGYWlsZWQgdG8gZ2V0IGRpc3BsYXkgZGVuc2l0eSBwcm9wZXJ0eS4nKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FjdGlvbn0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoYWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdhY3Rpb24nIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmFkYi5wZXJmb3JtRWRpdG9yQWN0aW9uKGFjdGlvbik7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgc3lzdGVtIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBhZGIuZ2V0Tm90aWZpY2F0aW9uc2AgZm9yXG4gKiBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldE5vdGlmaWNhdGlvbnMgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZ2V0Tm90aWZpY2F0aW9ucygpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTbXNMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heCBbMTAwXSAtIFRoZSBtYXhpbXVtIGNvdW50IG9mIHJlY2VudCBTTVMgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcmVjZW50IFNNUyBtZXNzYWdlcyB3aXRoIHRoZWlyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBhZGIuZ2V0U21zTGlzdGAgZm9yXG4gKiBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdFNtcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUxpc3RTbXMgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZ2V0U21zTGlzdChvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVW5sb2NrT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleSBUaGUgdW5sb2NrIGtleS4gVGhlIHZhbHVlIG9mIHRoaXMga2V5IGRlcGVuZHNcbiAqIG9uIHRoZSBhY3R1YWwgdW5sb2NrIHR5cGUgYW5kIGNvdWxkIGJlIGEgcGluL3Bhc3N3b3JkL3BhdHRlcm4gdmFsdWUgb3JcbiAqIGEgYmlvbWV0cmljIGZpbmdlciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSB1bmxvY2sgdHlwZS4gVGhlIGZvbGxvd2luZyB1bmxvY2sgdHlwZXNcbiAqIGFyZSBzdXBwb3J0ZWQ6IGBwaW5gLCBgcGluV2l0aEtleUV2ZW50YCwgYHBhc3N3b3JkYCwgYHBhdHRlcm5gIGFuZCBgZmluZ2VycHJpbnRgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzdHJhdGVneSBFaXRoZXIgJ2xvY2tzZXR0aW5ncycgKGRlZmF1bHQpIG9yICd1aWF1dG9tYXRvcicuXG4gKiBTZXR0aW5nIGl0IHRvICd1aWF1dG9tYXRvcicgd2lsbCBlbmZvcmNlIHRoZSBkcml2ZXIgdG8gYXZvaWQgdXNpbmcgc3BlY2lhbFxuICogQURCIHNob3J0Y3V0cyBpbiBvcmRlciB0byBzcGVlZCB1cCB0aGUgdW5sb2NrIHByb2NlZHVyZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdGltZW91dE1zIFsyMDAwXSBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgc2NyZWVuIGdldHMgdW5sb2NrZWRcbiAqL1xuXG4vKipcbiAqIFVubG9ja3MgdGhlIGRldmljZSBpZiBpdCBpcyBsb2NrZWQuIE5vb3AgaWYgdGhlIGRldmljZSdzIHNjcmVlbiBpcyBub3QgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSB7P1VubG9ja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB1bmxvY2sgb3BlcmF0aW9uIGZhaWxzIG9yIHRoZSBwcm92aWRlZFxuICogYXJndW1lbnRzIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVW5sb2NrIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBrZXksIHR5cGUsIHN0cmF0ZWd5LCB0aW1lb3V0TXMgfSA9IG9wdHM7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwge1xuICAgIHVubG9ja0tleToga2V5LFxuICAgIHVubG9ja1R5cGU6IHR5cGUsXG4gICAgdW5sb2NrU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgIHVubG9ja1N1Y2Nlc3NUaW1lb3V0OiB0aW1lb3V0TXMsXG4gIH0pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxlQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFFQSxNQUFNTSxxQkFBcUIsR0FBRyxzQkFBc0I7QUFFcEQsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQ0MsT0FBQSxDQUFBRixPQUFBLEdBQUFBLE9BQUE7QUFBQUUsT0FBQSxDQUFBSCxRQUFBLEdBQUFBLFFBQUE7QUFFakRBLFFBQVEsQ0FBQ0ksSUFBSSxHQUFHLGVBQWVBLElBQUlBLENBQUVBLElBQUksRUFBRTtFQUV6Q0EsSUFBSSxHQUFHQyxlQUFDLENBQUNDLE9BQU8sQ0FBQ0YsSUFBSSxDQUFDLEdBQUdBLElBQUksQ0FBQ0csSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHSCxJQUFJO0VBQzdDLElBQUlJLE1BQU0sR0FBRztJQUNYQyxJQUFJLEVBQUVMLElBQUk7SUFDVk0sT0FBTyxFQUFFO0VBQ1gsQ0FBQztFQUNELElBQUksSUFBSSxDQUFDQyxJ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
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","names":["MOMENT_FORMAT_ISO8601","commands","helpers","extensions","keys","_","isArray","join","params","text","replace","opts","unicodeKeyboard","doSendKeys","bootstrap","sendAction","getDeviceTime","format","log","debug","deviceTimestamp","adb","shell","trim","parsedTimestamp","moment","utc","isValid","warn","utcOffset","_tzm","mobileGetDeviceTime","getPageSource","back","isKeyboardShown","isSoftKeyboardPresent","hideKeyboard","openSettingsActivity","setting","appPackage","appActivity","getFocusedPackageAndActivity","waitForNotActivity","getWindowSize","getWindowRect","width","height","x","y","getCurrentActivity","getCurrentPackage","background","seconds","goToHome","sleepMs","thresholdMs","intervalMs","min","parseInt","progressCb","elapsedMs","progress","waitSecs","toFixed","progressPct","longSleep","args","_cachedActivityArgs","activateApp","ign","appWaitPackage","appWaitActivity","split","includes","pkg","activity","action","intentAction","category","intentCategory","flags","intentFlags","waitPkg","waitActivity","waitForLaunch","appWaitForLaunch","waitDuration","appWaitDuration","optionalIntentArguments","stopApp","user","userProfile","util","filterObject","JSON","stringify","startApp","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","toPairs","isString","apkStrings","androidHelpers","pushStrings","launchApp","initAUT","startAUT","startActivity","dontStopAppOnReset","hasValue","reset","resetApp","Object","assign","fastReset","setContext","isChromeSession","startChromeSession","setUrl","uri","startUri","closeApp","forceStop","getDisplayDensity","out","val","isNaN","errorAndThrow","mobilePerformEditorAction","errors","InvalidArgumentError","performEditorAction","mobileGetNotifications","getNotifications","mobileListSms","getSmsList","mobileUnlock","type","strategy","timeoutMs","unlock","unlockKey","unlockType","unlockStrategy","unlockSuccessTimeout"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport { util } from '@appium/support';\nimport moment from 'moment';\nimport { longSleep } from 'asyncbox';\nimport { errors } from 'appium/driver';\n\nconst MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keys = async function keys (keys) {\n // Protocol sends an array; rethink approach\n keys = _.isArray(keys) ? keys.join('') : keys;\n let params = {\n text: keys,\n replace: false\n };\n if (this.opts.unicodeKeyboard) {\n params.unicodeKeyboard = true;\n }\n await this.doSendKeys(params);\n};\n\ncommands.doSendKeys = async function doSendKeys (params) {\n return await this.bootstrap.sendAction('setText', params);\n};\n\n/**\n * Retrieves the current device's timestamp.\n *\n * @param {string} format - The set of format specifiers. Read\n * https://momentjs.com/docs/ to get the full list of supported\n * datetime format specifiers. The default format is\n * `YYYY-MM-DDTHH:mm:ssZ`, which complies to ISO-8601\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.getDeviceTime = async function getDeviceTime (format = MOMENT_FORMAT_ISO8601) {\n this.log.debug('Attempting to capture android device date and time. ' +\n `The format specifier is '${format}'`);\n const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();\n this.log.debug(`Got device timestamp: ${deviceTimestamp}`);\n const parsedTimestamp = moment.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');\n if (!parsedTimestamp.isValid()) {\n this.log.warn('Cannot parse the returned timestamp. Returning as is');\n return deviceTimestamp;\n }\n return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);\n};\n\n/**\n * @typedef {Object} DeviceTimeOptions\n * @property {string} format [YYYY-MM-DDTHH:mm:ssZ] - See getDeviceTime#format\n */\n\n/**\n * Retrieves the current device time\n *\n * @param {DeviceTimeOptions} opts\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.mobileGetDeviceTime = async function mobileGetDeviceTime (opts = {}) {\n return await this.getDeviceTime(opts.format);\n};\n\ncommands.getPageSource = async function getPageSource () {\n return await this.bootstrap.sendAction('source');\n};\n\ncommands.back = async function back () {\n return await this.bootstrap.sendAction('pressBack');\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();\n return isKeyboardShown;\n};\n\ncommands.hideKeyboard = async function hideKeyboard () {\n return await this.adb.hideKeyboard();\n};\n\ncommands.openSettingsActivity = async function openSettingsActivity (setting) {\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);\n await this.adb.waitForNotActivity(appPackage, appActivity, 5000);\n};\n\ncommands.getWindowSize = async function getWindowSize () {\n return await this.bootstrap.sendAction('getDeviceSize');\n};\n\n// For W3C\ncommands.getWindowRect = async function getWindowRect () {\n const { width, height } = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0\n };\n};\n\ncommands.getCurrentActivity = async function getCurrentActivity () {\n return (await this.adb.getFocusedPackageAndActivity()).appActivity;\n};\n\ncommands.getCurrentPackage = async function getCurrentPackage () {\n return (await this.adb.getFocusedPackageAndActivity()).appPackage;\n};\n\ncommands.background = async function background (seconds) {\n if (seconds < 0) {\n // if user passes in a negative seconds value, interpret that as the instruction\n // to not bring the app back at all\n await this.adb.goToHome();\n return true;\n }\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.goToHome();\n\n // people can wait for a long time, so to be safe let's use the longSleep function and log\n // progress periodically.\n const sleepMs = seconds * 1000;\n const thresholdMs = 30 * 1000; // use the spin-wait for anything over this threshold\n // for our spin interval, use 1% of the total wait time, but nothing bigger than 30s\n const intervalMs = _.min([30 * 1000, parseInt(sleepMs / 100, 10)]);\n const progressCb = ({elapsedMs, progress}) => {\n const waitSecs = (elapsedMs / 1000).toFixed(0);\n const progressPct = (progress * 100).toFixed(2);\n this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);\n };\n await longSleep(sleepMs, {thresholdMs, intervalMs, progressCb});\n\n let args;\n if (this._cachedActivityArgs && this._cachedActivityArgs[`${appPackage}/${appActivity}`]) {\n // the activity was started with `startActivity`, so use those args to restart\n args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];\n } else {\n try {\n this.log.debug(`Activating app '${appPackage}' in order to restore it`);\n await this.activateApp(appPackage);\n return true;\n } catch (ign) {}\n args = ((appPackage === this.opts.appPackage && appActivity === this.opts.appActivity) ||\n (appPackage === this.opts.appWaitPackage && (this.opts.appWaitActivity || '').split(',').includes(appActivity)))\n ? {// the activity is the original session activity, so use the original args\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: false,\n user: this.opts.userProfile}\n : {// the activity was started some other way, so use defaults\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appPackage,\n waitActivity: appActivity,\n stopApp: false};\n }\n args = await util.filterObject(args);\n this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);\n return await this.adb.startApp(args);\n};\n\ncommands.getStrings = async function getStrings (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = (mapping) => {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n this.apkStrings[language] = await androidHelpers.pushStrings(language, this.adb, this.opts);\n if (this.bootstrap) {\n // TODO: This is mutating the current language, but it's how appium currently works\n await this.bootstrap.sendAction('updateStrings');\n }\n\n return preprocessStringsMap(this.apkStrings[language]);\n};\n\ncommands.launchApp = async function launchApp () {\n await this.initAUT();\n await this.startAUT();\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags,\n optionalIntentArguments, dontStopAppOnReset) {\n this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);\n\n // dontStopAppOnReset is both an argument here, and a desired capability\n // if the argument is set, use it, otherwise use the cap\n if (!util.hasValue(dontStopAppOnReset)) {\n dontStopAppOnReset = !!this.opts.dontStopAppOnReset;\n }\n\n let args = {\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appWaitPackage || appPackage,\n waitActivity: appWaitActivity || appActivity,\n action: intentAction,\n category: intentCategory,\n flags: intentFlags,\n optionalIntentArguments,\n stopApp: !dontStopAppOnReset\n };\n this._cachedActivityArgs = this._cachedActivityArgs || {};\n this._cachedActivityArgs[`${args.waitPkg}/${args.waitActivity}`] = args;\n await this.adb.startApp(args);\n};\n\ncommands.reset = async function reset () {\n await androidHelpers.resetApp(this.adb, Object.assign({}, this.opts, {fastReset: true}));\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n return await this.isChromeSession ? this.startChromeSession() : this.startAUT();\n};\n\ncommands.startAUT = async function startAUT () {\n await this.adb.startApp({\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: !this.opts.dontStopAppOnReset,\n user: this.opts.userProfile,\n });\n};\n\n// we override setUrl to take an android URI which can be used for deep-linking\n// inside an app, similar to starting an intent\ncommands.setUrl = async function setUrl (uri) {\n await this.adb.startUri(uri, this.opts.appPackage);\n};\n\n// closing app using force stop\ncommands.closeApp = async function closeApp () {\n await this.adb.forceStop(this.opts.appPackage);\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n // first try the property for devices\n let out = await this.adb.shell(['getprop', 'ro.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n // if the value is NaN, try getting the emulator property\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // fallback to trying property for emulators\n out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // couldn't get anything, so error out\n this.log.errorAndThrow('Failed to get display density property.');\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = opts;\n if (!util.hasValue(action)) {\n throw new errors.InvalidArgumentError(`'action' argument is required`);\n }\n\n await this.adb.performEditorAction(action);\n};\n\n/**\n * Retrieves the list of recent system notifications.\n *\n * @returns {Object} See the documentation on `adb.getNotifications` for\n * more details\n */\ncommands.mobileGetNotifications = async function mobileGetNotifications () {\n return await this.adb.getNotifications();\n};\n\n/**\n * @typedef {Object} SmsListOptions\n * @property {number} max [100] - The maximum count of recent SMS messages\n * to retrieve\n */\n\n/**\n * Retrieves the list of recent SMS messages with their properties.\n *\n * @param {SmsListOptions} opts\n * @returns {Object} See the documentation on `adb.getSmsList` for\n * more details\n */\ncommands.mobileListSms = async function mobileListSms (opts = {}) {\n return await this.adb.getSmsList(opts);\n};\n\n/**\n * @typedef {Object} UnlockOptions\n * @property {string} key The unlock key. The value of this key depends\n * on the actual unlock type and could be a pin/password/pattern value or\n * a biometric finger id.\n * @property {string} type The unlock type. The following unlock types\n * are supported: `pin`, `pinWithKeyEvent`, `password`, `pattern` and `fingerprint`.\n * @property {?string} strategy Either 'locksettings' (default) or 'uiautomator'.\n * Setting it to 'uiautomator' will enforce the driver to avoid using special\n * ADB shortcuts in order to speed up the unlock procedure.\n * @property {?number} timeoutMs [2000] The maximum time in milliseconds\n * to wait until the screen gets unlocked\n */\n\n/**\n * Unlocks the device if it is locked. Noop if the device's screen is not locked.\n *\n * @param {?UnlockOptions} opts\n * @throws {Error} if unlock operation fails or the provided\n * arguments are not valid\n */\ncommands.mobileUnlock = async function mobileUnlock (opts = {}) {\n const { key, type, strategy, timeoutMs } = opts;\n await androidHelpers.unlock(this, this.adb, {\n unlockKey: key,\n unlockType: type,\n unlockStrategy: strategy,\n unlockSuccessTimeout: timeoutMs,\n });\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_androidHelpers","_support","_moment","_asyncbox","_driver","MOMENT_FORMAT_ISO8601","commands","helpers","extensions","exports","keys","_","isArray","join","params","text","replace","opts","unicodeKeyboard","doSendKeys","bootstrap","sendAction","getDeviceTime","format","log","debug","deviceTimestamp","adb","shell","trim","parsedTimestamp","moment","utc","isValid","warn","utcOffset","_tzm","mobileGetDeviceTime","getPageSource","back","isKeyboardShown","isSoftKeyboardPresent","hideKeyboard","openSettingsActivity","setting","appPackage","appActivity","getFocusedPackageAndActivity","waitForNotActivity","getWindowSize","getWindowRect","width","height","x","y","getCurrentActivity","getCurrentPackage","background","seconds","goToHome","sleepMs","thresholdMs","intervalMs","min","parseInt","progressCb","elapsedMs","progress","waitSecs","toFixed","progressPct","longSleep","args","_cachedActivityArgs","activateApp","ign","appWaitPackage","appWaitActivity","split","includes","pkg","activity","action","intentAction","category","intentCategory","flags","intentFlags","waitPkg","waitActivity","waitForLaunch","appWaitForLaunch","waitDuration","appWaitDuration","optionalIntentArguments","stopApp","user","userProfile","util","filterObject","JSON","stringify","startApp","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","toPairs","isString","apkStrings","androidHelpers","pushStrings","launchApp","initAUT","startAUT","startActivity","dontStopAppOnReset","hasValue","reset","resetApp","Object","assign","fastReset","setContext","isChromeSession","startChromeSession","setUrl","uri","startUri","closeApp","forceStop","getDisplayDensity","out","val","isNaN","errorAndThrow","mobilePerformEditorAction","errors","InvalidArgumentError","performEditorAction","mobileGetNotifications","getNotifications","mobileListSms","getSmsList","mobileUnlock","type","strategy","timeoutMs","unlock","unlockKey","unlockType","unlockStrategy","unlockSuccessTimeout","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport { util } from '@appium/support';\nimport moment from 'moment';\nimport { longSleep } from 'asyncbox';\nimport { errors } from 'appium/driver';\n\nconst MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keys = async function keys (keys) {\n // Protocol sends an array; rethink approach\n keys = _.isArray(keys) ? keys.join('') : keys;\n let params = {\n text: keys,\n replace: false\n };\n if (this.opts.unicodeKeyboard) {\n params.unicodeKeyboard = true;\n }\n await this.doSendKeys(params);\n};\n\ncommands.doSendKeys = async function doSendKeys (params) {\n return await this.bootstrap.sendAction('setText', params);\n};\n\n/**\n * Retrieves the current device's timestamp.\n *\n * @param {string} format - The set of format specifiers. Read\n * https://momentjs.com/docs/ to get the full list of supported\n * datetime format specifiers. The default format is\n * `YYYY-MM-DDTHH:mm:ssZ`, which complies to ISO-8601\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.getDeviceTime = async function getDeviceTime (format = MOMENT_FORMAT_ISO8601) {\n this.log.debug('Attempting to capture android device date and time. ' +\n `The format specifier is '${format}'`);\n const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();\n this.log.debug(`Got device timestamp: ${deviceTimestamp}`);\n const parsedTimestamp = moment.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');\n if (!parsedTimestamp.isValid()) {\n this.log.warn('Cannot parse the returned timestamp. Returning as is');\n return deviceTimestamp;\n }\n return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);\n};\n\n/**\n * @typedef {Object} DeviceTimeOptions\n * @property {string} format [YYYY-MM-DDTHH:mm:ssZ] - See getDeviceTime#format\n */\n\n/**\n * Retrieves the current device time\n *\n * @param {DeviceTimeOptions} opts\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.mobileGetDeviceTime = async function mobileGetDeviceTime (opts = {}) {\n return await this.getDeviceTime(opts.format);\n};\n\ncommands.getPageSource = async function getPageSource () {\n return await this.bootstrap.sendAction('source');\n};\n\ncommands.back = async function back () {\n return await this.bootstrap.sendAction('pressBack');\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();\n return isKeyboardShown;\n};\n\ncommands.hideKeyboard = async function hideKeyboard () {\n return await this.adb.hideKeyboard();\n};\n\ncommands.openSettingsActivity = async function openSettingsActivity (setting) {\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);\n await this.adb.waitForNotActivity(appPackage, appActivity, 5000);\n};\n\ncommands.getWindowSize = async function getWindowSize () {\n return await this.bootstrap.sendAction('getDeviceSize');\n};\n\n// For W3C\ncommands.getWindowRect = async function getWindowRect () {\n const { width, height } = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0\n };\n};\n\ncommands.getCurrentActivity = async function getCurrentActivity () {\n return (await this.adb.getFocusedPackageAndActivity()).appActivity;\n};\n\ncommands.getCurrentPackage = async function getCurrentPackage () {\n return (await this.adb.getFocusedPackageAndActivity()).appPackage;\n};\n\ncommands.background = async function background (seconds) {\n if (seconds < 0) {\n // if user passes in a negative seconds value, interpret that as the instruction\n // to not bring the app back at all\n await this.adb.goToHome();\n return true;\n }\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.goToHome();\n\n // people can wait for a long time, so to be safe let's use the longSleep function and log\n // progress periodically.\n const sleepMs = seconds * 1000;\n const thresholdMs = 30 * 1000; // use the spin-wait for anything over this threshold\n // for our spin interval, use 1% of the total wait time, but nothing bigger than 30s\n const intervalMs = _.min([30 * 1000, parseInt(sleepMs / 100, 10)]);\n const progressCb = ({elapsedMs, progress}) => {\n const waitSecs = (elapsedMs / 1000).toFixed(0);\n const progressPct = (progress * 100).toFixed(2);\n this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);\n };\n await longSleep(sleepMs, {thresholdMs, intervalMs, progressCb});\n\n let args;\n if (this._cachedActivityArgs && this._cachedActivityArgs[`${appPackage}/${appActivity}`]) {\n // the activity was started with `startActivity`, so use those args to restart\n args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];\n } else {\n try {\n this.log.debug(`Activating app '${appPackage}' in order to restore it`);\n await this.activateApp(appPackage);\n return true;\n } catch (ign) {}\n args = ((appPackage === this.opts.appPackage && appActivity === this.opts.appActivity) ||\n (appPackage === this.opts.appWaitPackage && (this.opts.appWaitActivity || '').split(',').includes(appActivity)))\n ? {// the activity is the original session activity, so use the original args\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: false,\n user: this.opts.userProfile}\n : {// the activity was started some other way, so use defaults\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appPackage,\n waitActivity: appActivity,\n stopApp: false};\n }\n args = await util.filterObject(args);\n this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);\n return await this.adb.startApp(args);\n};\n\ncommands.getStrings = async function getStrings (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = (mapping) => {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n this.apkStrings[language] = await androidHelpers.pushStrings(language, this.adb, this.opts);\n if (this.bootstrap) {\n // TODO: This is mutating the current language, but it's how appium currently works\n await this.bootstrap.sendAction('updateStrings');\n }\n\n return preprocessStringsMap(this.apkStrings[language]);\n};\n\ncommands.launchApp = async function launchApp () {\n await this.initAUT();\n await this.startAUT();\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags,\n optionalIntentArguments, dontStopAppOnReset) {\n this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);\n\n // dontStopAppOnReset is both an argument here, and a desired capability\n // if the argument is set, use it, otherwise use the cap\n if (!util.hasValue(dontStopAppOnReset)) {\n dontStopAppOnReset = !!this.opts.dontStopAppOnReset;\n }\n\n let args = {\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appWaitPackage || appPackage,\n waitActivity: appWaitActivity || appActivity,\n action: intentAction,\n category: intentCategory,\n flags: intentFlags,\n optionalIntentArguments,\n stopApp: !dontStopAppOnReset\n };\n this._cachedActivityArgs = this._cachedActivityArgs || {};\n this._cachedActivityArgs[`${args.waitPkg}/${args.waitActivity}`] = args;\n await this.adb.startApp(args);\n};\n\ncommands.reset = async function reset () {\n await androidHelpers.resetApp(this.adb, Object.assign({}, this.opts, {fastReset: true}));\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n return await this.isChromeSession ? this.startChromeSession() : this.startAUT();\n};\n\ncommands.startAUT = async function startAUT () {\n await this.adb.startApp({\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: !this.opts.dontStopAppOnReset,\n user: this.opts.userProfile,\n });\n};\n\n// we override setUrl to take an android URI which can be used for deep-linking\n// inside an app, similar to starting an intent\ncommands.setUrl = async function setUrl (uri) {\n await this.adb.startUri(uri, this.opts.appPackage);\n};\n\n// closing app using force stop\ncommands.closeApp = async function closeApp () {\n await this.adb.forceStop(this.opts.appPackage);\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n // first try the property for devices\n let out = await this.adb.shell(['getprop', 'ro.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n // if the value is NaN, try getting the emulator property\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // fallback to trying property for emulators\n out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // couldn't get anything, so error out\n this.log.errorAndThrow('Failed to get display density property.');\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = opts;\n if (!util.hasValue(action)) {\n throw new errors.InvalidArgumentError(`'action' argument is required`);\n }\n\n await this.adb.performEditorAction(action);\n};\n\n/**\n * Retrieves the list of recent system notifications.\n *\n * @returns {Object} See the documentation on `adb.getNotifications` for\n * more details\n */\ncommands.mobileGetNotifications = async function mobileGetNotifications () {\n return await this.adb.getNotifications();\n};\n\n/**\n * @typedef {Object} SmsListOptions\n * @property {number} max [100] - The maximum count of recent SMS messages\n * to retrieve\n */\n\n/**\n * Retrieves the list of recent SMS messages with their properties.\n *\n * @param {SmsListOptions} opts\n * @returns {Object} See the documentation on `adb.getSmsList` for\n * more details\n */\ncommands.mobileListSms = async function mobileListSms (opts = {}) {\n return await this.adb.getSmsList(opts);\n};\n\n/**\n * @typedef {Object} UnlockOptions\n * @property {string} key The unlock key. The value of this key depends\n * on the actual unlock type and could be a pin/password/pattern value or\n * a biometric finger id.\n * @property {string} type The unlock type. The following unlock types\n * are supported: `pin`, `pinWithKeyEvent`, `password`, `pattern` and `fingerprint`.\n * @property {?string} strategy Either 'locksettings' (default) or 'uiautomator'.\n * Setting it to 'uiautomator' will enforce the driver to avoid using special\n * ADB shortcuts in order to speed up the unlock procedure.\n * @property {?number} timeoutMs [2000] The maximum time in milliseconds\n * to wait until the screen gets unlocked\n */\n\n/**\n * Unlocks the device if it is locked. Noop if the device's screen is not locked.\n *\n * @param {?UnlockOptions} opts\n * @throws {Error} if unlock operation fails or the provided\n * arguments are not valid\n */\ncommands.mobileUnlock = async function mobileUnlock (opts = {}) {\n const { key, type, strategy, timeoutMs } = opts;\n await androidHelpers.unlock(this, this.adb, {\n unlockKey: key,\n unlockType: type,\n unlockStrategy: strategy,\n unlockSuccessTimeout: timeoutMs,\n });\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AAEA,MAAMM,qBAAqB,GAAG,sBAAsB;AAEpD,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAF,OAAA,GAAAA,OAAA;AAAAE,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAEjDA,QAAQ,CAACI,IAAI,GAAG,eAAeA,IAAIA,CAAEA,IAAI,EAAE;EAEzCA,IAAI,GAAGC,eAAC,CAACC,OAAO,CAACF,IAAI,CAAC,GAAGA,IAAI,CAACG,IAAI,CAAC,EAAE,CAAC,GAAGH,IAAI;EAC7C,IAAII,MAAM,GAAG;IACXC,IAAI,EAAEL,IAAI;IACVM,OAAO,EAAE;EACX,CAAC;EACD,IAAI,IAAI,CAACC,IAAI,CAACC,eAAe,EAAE;IAC7BJ,MAAM,CAACI,eAAe,GAAG,IAAI;EAC/B;EACA,MAAM,IAAI,CAACC,UAAU,CAACL,MAAM,CAAC;AAC/B,CAAC;AAEDR,QAAQ,CAACa,UAAU,GAAG,eAAeA,UAAUA,CAAEL,MAAM,EAAE;EACvD,OAAO,MAAM,IAAI,CAACM,SAAS,CAACC,UAAU,CAAC,SAAS,EAAEP,MAAM,CAAC;AAC3D,CAAC;AAWDR,QAAQ,CAACgB,aAAa,GAAG,eAAeA,aAAaA,CAAEC,MAAM,GAAGlB,qBAAqB,EAAE;EACrF,IAAI,CAACmB,GAAG,CAACC,KAAK,CAAC,sDAAsD,GAClE,4BAA2BF,MAAO,GAAE,CAAC;EACxC,MAAMG,eAAe,GAAG,CAAC,MAAM,IAAI,CAACC,GAAG,CAACC,KAAK,CAAC,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAEC,IAAI,EAAE;EACjF,IAAI,CAACL,GAAG,CAACC,KAAK,CAAE,yBAAwBC,eAAgB,EAAC,CAAC;EAC1D,MAAMI,eAAe,GAAGC,eAAM,CAACC,GAAG,CAACN,eAAe,EAAE,uBAAuB,CAAC;EAC5E,IAAI,CAACI,eAAe,CAACG,OAAO,EAAE,EAAE;IAC9B,IAAI,CAACT,GAAG,CAACU,IAAI,CAAC,sDAAsD,CAAC;IACrE,OAAOR,eAAe;EACxB;EACA,OAAOI,eAAe,CAACK,SAAS,CAACL,eAAe,CAACM,IAAI,IAAI,CAAC,CAAC,CAACb,MAAM,CAACA,MAAM,CAAC;AAC5E,CAAC;AAaDjB,QAAQ,CAAC+B,mBAAmB,GAAG,eAAeA,mBAAmBA,CAAEpB,IAAI,GAAG,CAAC,CAAC,EAAE;EAC5E,OAAO,MAAM,IAAI,CAACK,aAAa,CAACL,IAAI,CAACM,MAAM,CAAC;AAC9C,CAAC;AAEDjB,QAAQ,CAACgC,aAAa,GAAG,eAAeA,aAAaA,CAAA,EAAI;EACvD,OAAO,MAAM,IAAI,CAAClB,SAAS,CAACC,UAAU,CAAC,QAAQ,CAAC;AAClD,CAAC;AAEDf,QAAQ,CAACiC,IAAI,GAAG,eAAeA,IAAIA,CAAA,EAAI;EACrC,OAAO,MAAM,IAAI,CAACnB,SAAS,CAACC,UAAU,CAAC,WAAW,CAAC;AACrD,CAAC;AAEDf,QAAQ,CAACkC,eAAe,GAAG,eAAeA,eAAeA,CAAA,EAAI;EAC3D,MAAM;IAACA;EAAe,CAAC,GAAG,MAAM,IAAI,CAACb,GAAG,CAACc,qBAAqB,EAAE;EAChE,OAAOD,eAAe;AACxB,CAAC;AAEDlC,QAAQ,CAACoC,YAAY,GAAG,eAAeA,YAAYA,CAAA,EAAI;EACrD,OAAO,MAAM,IAAI,CAACf,GAAG,CAACe,YAAY,EAAE;AACtC,CAAC;AAEDpC,QAAQ,CAACqC,oBAAoB,GAAG,eAAeA,oBAAoBA,CAAEC,OAAO,EAAE;EAC5E,IAAI;IAACC,UAAU;IAAEC;EAAW,CAAC,GAAG,MAAM,IAAI,CAACnB,GAAG,CAACoB,4BAA4B,EAAE;EAC7E,MAAM,IAAI,CAACpB,GAAG,CAACC,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAG,oBAAmBgB,OAAQ,EAAC,CAAC,CAAC;EAC1E,MAAM,IAAI,CAACjB,GAAG,CAACqB,kBAAkB,CAACH,UAAU,EAAEC,WAAW,EAAE,IAAI,CAAC;AAClE,CAAC;AAEDxC,QAAQ,CAAC2C,aAAa,GAAG,eAAeA,aAAaA,CAAA,EAAI;EACvD,OAAO,MAAM,IAAI,CAAC7B,SAAS,CAACC,UAAU,CAAC,eAAe,CAAC;AACzD,CAAC;AAGDf,QAAQ,CAAC4C,aAAa,GAAG,eAAeA,aAAaA,CAAA,EAAI;EACvD,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAG,MAAM,IAAI,CAACH,aAAa,EAAE;EACpD,OAAO;IACLE,KAAK;IACLC,MAAM;IACNC,CAAC,EAAE,CAAC;IACJC,CAAC,EAAE;EACL,CAAC;AACH,CAAC;AAEDhD,QAAQ,CAACiD,kBAAkB,GAAG,eAAeA,kBAAkBA,CAAA,EAAI;EACjE,OAAO,CAAC,MAAM,IAAI,CAAC5B,GAAG,CAACoB,4BAA4B,EAAE,EAAED,WAAW;AACpE,CAAC;AAEDxC,QAAQ,CAACkD,iBAAiB,GAAG,eAAeA,iBAAiBA,CAAA,EAAI;EAC/D,OAAO,CAAC,MAAM,IAAI,CAAC7B,GAAG,CAACoB,4BAA4B,EAAE,EAAEF,UAAU;AACnE,CAAC;AAEDvC,QAAQ,CAACmD,UAAU,GAAG,eAAeA,UAAUA,CAAEC,OAAO,EAAE;EACxD,IAAIA,OAAO,GAAG,CAAC,EAAE;IAGf,MAAM,IAAI,CAAC/B,GAAG,CAACgC,QAAQ,EAAE;IACzB,OAAO,IAAI;EACb;EACA,IAAI;IAACd,UAAU;IAAEC;EAAW,CAAC,GAAG,MAAM,IAAI,CAACnB,GAAG,CAACoB,4BAA4B,EAAE;EAC7E,MAAM,IAAI,CAACpB,GAAG,CAACgC,QAAQ,EAAE;EAIzB,MAAMC,OAAO,GAAGF,OAAO,GAAG,IAAI;EAC9B,MAAMG,WAAW,GAAG,EAAE,GAAG,IAAI;EAE7B,MAAMC,UAAU,GAAGnD,eAAC,CAACoD,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,EAAEC,QAAQ,CAACJ,OAAO,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;EAClE,MAAMK,UAAU,GAAGA,CAAC;IAACC,SAAS;IAAEC;EAAQ,CAAC,KAAK;IAC5C,MAAMC,QAAQ,GAAG,CAACF,SAAS,GAAG,IAAI,EAAEG,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAMC,WAAW,GAAG,CAACH,QAAQ,GAAG,GAAG,EAAEE,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC7C,GAAG,CAACC,KAAK,CAAE,UAAS2C,QAAS,aAAYE,WAAY,IAAG,CAAC;EAChE,CAAC;EACD,MAAM,IAAAC,mBAAS,EAACX,OAAO,EAAE;IAACC,WAAW;IAAEC,UAAU;IAAEG;EAAU,CAAC,CAAC;EAE/D,IAAIO,IAAI;EACR,IAAI,IAAI,CAACC,mBAAmB,IAAI,IAAI,CAACA,mBAAmB,CAAE,GAAE5B,UAAW,IAAGC,WAAY,EAAC,CAAC,EAAE;IAExF0B,IAAI,GAAG,IAAI,CAACC,mBAAmB,CAAE,GAAE5B,UAAW,IAAGC,WAAY,EAAC,CAAC;EACjE,CAAC,MAAM;IACL,IAAI;MACF,IAAI,CAACtB,GAAG,CAACC,KAAK,CAAE,mBAAkBoB,UAAW,0BAAyB,CAAC;MACvE,MAAM,IAAI,CAAC6B,WAAW,CAAC7B,UAAU,CAAC;MAClC,OAAO,IAAI;IACb,CAAC,CAAC,OAAO8B,GAAG,EAAE,CAAC;IACfH,IAAI,GAAK3B,UAAU,KAAK,IAAI,CAAC5B,IAAI,CAAC4B,UAAU,IAAIC,WAAW,KAAK,IAAI,CAAC7B,IAAI,CAAC6B,WAAW,IAC5ED,UAAU,KAAK,IAAI,CAAC5B,IAAI,CAAC2D,cAAc,IAAI,CAAC,IAAI,CAAC3D,IAAI,CAAC4D,eAAe,IAAI,EAAE,EAAEC,KAAK,CAAC,GAAG,CAAC,CAACC,QAAQ,CAACjC,WAAW,CAAE,GACnH;MACAkC,GAAG,EAAE,IAAI,CAAC/D,IAAI,CAAC4B,UAAU;MACzBoC,QAAQ,EAAE,IAAI,CAAChE,IAAI,CAAC6B,WAAW;MAC/BoC,MAAM,EAAE,IAAI,CAACjE,IAAI,CAACkE,YAAY;MAC9BC,QAAQ,EAAE,IAAI,CAACnE,IAAI,CAACoE,cAAc;MAClCC,KAAK,EAAE,IAAI,CAACrE,IAAI,CAACsE,WAAW;MAC5BC,OAAO,EAAE,IAAI,CAACvE,IAAI,CAAC2D,cAAc;MACjCa,YAAY,EAAE,IAAI,CAACxE,IAAI,CAAC4D,eAAe;MACvCa,aAAa,EAAE,IAAI,CAACzE,IAAI,CAAC0E,gBAAgB;MACzCC,YAAY,EAAE,IAAI,CAAC3E,IAAI,CAAC4E,eAAe;MACvCC,uBAAuB,EAAE,IAAI,CAAC7E,IAAI,CAAC6E,uBAAuB;MAC1DC,OAAO,EAAE,KAAK;MACdC,IAAI,EAAE,IAAI,CAAC/E,IAAI,CAACgF;IAAW,CAAC,GAC5B;MACAjB,GAAG,EAAEnC,UAAU;MACfoC,QAAQ,EAAEnC,WAAW;MACrB0C,OAAO,EAAE3C,UAAU;MACnB4C,YAAY,EAAE3C,WAAW;MACzBiD,OAAO,EAAE;IAAK,CAAC;EACrB;EACAvB,IAAI,GAAG,MAAM0B,aAAI,CAACC,YAAY,CAAC3B,IAAI,CAAC;EACpC,IAAI,CAAChD,GAAG,CAACC,KAAK,CAAE,2DAA0D2E,IAAI,CAACC,SAAS,CAAC7B,IAAI,CAAE,EAAC,CAAC;EACjG,OAAO,MAAM,IAAI,CAAC7C,GAAG,CAAC2E,QAAQ,CAAC9B,IAAI,CAAC;AACtC,CAAC;AAEDlE,QAAQ,CAACiG,UAAU,GAAG,eAAeA,UAAUA,CAAEC,QAAQ,EAAE;EACzD,IAAI,CAACA,QAAQ,EAAE;IACbA,QAAQ,GAAG,MAAM,IAAI,CAAC7E,GAAG,CAAC8E,iBAAiB,EAAE;IAC7C,IAAI,CAACjF,GAAG,CAACkF,IAAI,CAAE,iDAAgDF,QAAS,EAAC,CAAC;EAC5E;EAIA,MAAMG,oBAAoB,GAAIC,OAAO,IAAK;IACxC,MAAMC,MAAM,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIpG,eAAC,CAACqG,OAAO,CAACJ,OAAO,CAAC,EAAE;MAC7CC,MAAM,CAACC,GAAG,CAAC,GAAGnG,eAAC,CAACsG,QAAQ,CAACF,KAAK,CAAC,GAAGA,KAAK,GAAGX,IAAI,CAACC,SAAS,CAACU,KAAK,CAAC;IACjE;IACA,OAAOF,MAAM;EACf,CAAC;EAED,IAAI,IAAI,CAACK,UAAU,CAACV,QAAQ,CAAC,EAAE;IAE7B,OAAOG,oBAAoB,CAAC,IAAI,CAACO,UAAU,CAACV,QAAQ,CAAC,CAAC;EACxD;EAEA,IAAI,CAACU,UAAU,CAACV,QAAQ,CAAC,GAAG,MAAMW,uBAAc,CAACC,WAAW,CAACZ,QAAQ,EAAE,IAAI,CAAC7E,GAAG,EAAE,IAAI,CAACV,IAAI,CAAC;EAC3F,IAAI,IAAI,CAACG,SAAS,EAAE;IAElB,MAAM,IAAI,CAACA,SAAS,CAACC,UAAU,CAAC,eAAe,CAAC;EAClD;EAEA,OAAOsF,oBAAoB,CAAC,IAAI,CAACO,UAAU,CAACV,QAAQ,CAAC,CAAC;AACxD,CAAC;AAEDlG,QAAQ,CAAC+G,SAAS,GAAG,eAAeA,SAASA,CAAA,EAAI;EAC/C,MAAM,IAAI,CAACC,OAAO,EAAE;EACpB,MAAM,IAAI,CAACC,QAAQ,EAAE;AACvB,CAAC;AAEDjH,QAAQ,CAACkH,aAAa,GAAG,eAAeA,aAAaA,CAAE3E,UAAU,EAAEC,WAAW,EAC5E8B,cAAc,EAAEC,eAAe,EAAEM,YAAY,EAAEE,cAAc,EAAEE,WAAW,EAC1EO,uBAAuB,EAAE2B,kBAAkB,EAAE;EAC7C,IAAI,CAACjG,GAAG,CAACC,KAAK,CAAE,qBAAoBoB,UAAW,mBAAkBC,WAAY,GAAE,CAAC;EAIhF,IAAI,CAACoD,aAAI,CAACwB,QAAQ,CAACD,kBAAkB,CAAC,EAAE;IACtCA,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAACxG,IAAI,CAACwG,kBAAkB;EACrD;EAEA,IAAIjD,IAAI,GAAG;IACTQ,GAAG,EAAEnC,UAAU;IACfoC,QAAQ,EAAEnC,WAAW;IACrB0C,OAAO,EAAEZ,cAAc,IAAI/B,UAAU;IACrC4C,YAAY,EAAEZ,eAAe,IAAI/B,WAAW;IAC5CoC,MAAM,EAAEC,YAAY;IACpBC,QAAQ,EAAEC,cAAc;IACxBC,KAAK,EAAEC,WAAW;IAClBO,uBAAuB;IACvBC,OAAO,EAAE,CAAC0B;EACZ,CAAC;EACD,IAAI,CAAChD,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,IAAI,CAAC,CAAC;EACzD,IAAI,CAACA,mBAAmB,CAAE,GAAED,IAAI,CAACgB,OAAQ,IAAGhB,IAAI,CAACiB,YAAa,EAAC,CAAC,GAAGjB,IAAI;EACvE,MAAM,IAAI,CAAC7C,GAAG,CAAC2E,QAAQ,CAAC9B,IAAI,CAAC;AAC/B,CAAC;AAEDlE,QAAQ,CAACqH,KAAK,GAAG,eAAeA,KAAKA,CAAA,EAAI;EACvC,MAAMR,uBAAc,CAACS,QAAQ,CAAC,IAAI,CAACjG,GAAG,EAAEkG,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC7G,IAAI,EAAE;IAAC8G,SAAS,EAAE;EAAI,CAAC,CAAC,CAAC;EAExF,MAAM,IAAI,CAACC,UAAU,EAAE;EACvB,OAAO,OAAM,IAAI,CAACC,eAAe,IAAG,IAAI,CAACC,kBAAkB,EAAE,GAAG,IAAI,CAACX,QAAQ,EAAE;AACjF,CAAC;AAEDjH,QAAQ,CAACiH,QAAQ,GAAG,eAAeA,QAAQA,CAAA,EAAI;EAC7C,MAAM,IAAI,CAAC5F,GAAG,CAAC2E,QAAQ,CAAC;IACtBtB,GAAG,EAAE,IAAI,CAAC/D,IAAI,CAAC4B,UAAU;IACzBoC,QAAQ,EAAE,IAAI,CAAChE,IAAI,CAAC6B,WAAW;IAC/BoC,MAAM,EAAE,IAAI,CAACjE,IAAI,CAACkE,YAAY;IAC9BC,QAAQ,EAAE,IAAI,CAACnE,IAAI,CAACoE,cAAc;IAClCC,KAAK,EAAE,IAAI,CAACrE,IAAI,CAACsE,WAAW;IAC5BC,OAAO,EAAE,IAAI,CAACvE,IAAI,CAAC2D,cAAc;IACjCa,YAAY,EAAE,IAAI,CAACxE,IAAI,CAAC4D,eAAe;IACvCa,aAAa,EAAE,IAAI,CAACzE,IAAI,CAAC0E,gBAAgB;IACzCC,YAAY,EAAE,IAAI,CAAC3E,IAAI,CAAC4E,eAAe;IACvCC,uBAAuB,EAAE,IAAI,CAAC7E,IAAI,CAAC6E,uBAAuB;IAC1DC,OAAO,EAAE,CAAC,IAAI,CAAC9E,IAAI,CAACwG,kBAAkB;IACtCzB,IAAI,EAAE,IAAI,CAAC/E,IAAI,CAACgF;EAClB,CAAC,CAAC;AACJ,CAAC;AAID3F,QAAQ,CAAC6H,MAAM,GAAG,eAAeA,MAAMA,CAAEC,GAAG,EAAE;EAC5C,MAAM,IAAI,CAACzG,GAAG,CAAC0G,QAAQ,CAACD,GAAG,EAAE,IAAI,CAACnH,IAAI,CAAC4B,UAAU,CAAC;AACpD,CAAC;AAGDvC,QAAQ,CAACgI,QAAQ,GAAG,eAAeA,QAAQA,CAAA,EAAI;EAC7C,MAAM,IAAI,CAAC3G,GAAG,CAAC4G,SAAS,CAAC,IAAI,CAACtH,IAAI,CAAC4B,UAAU,CAAC;EAE9C,MAAM,IAAI,CAACmF,UAAU,EAAE;AACzB,CAAC;AAED1H,QAAQ,CAACkI,iBAAiB,GAAG,eAAeA,iBAAiBA,CAAA,EAAI;EAE/D,IAAIC,GAAG,GAAG,MAAM,IAAI,CAAC9G,GAAG,CAACC,KAAK,CAAC,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;EAChE,IAAI6G,GAAG,EAAE;IACP,IAAIC,GAAG,GAAG1E,QAAQ,CAACyE,GAAG,EAAE,EAAE,CAAC;IAE3B,IAAI,CAACE,KAAK,CAACD,GAAG,CAAC,EAAE;MACf,OAAOA,GAAG;IACZ;IACA,IAAI,CAAClH,GAAG,CAACC,KAAK,CAAE,kCAAiCgH,GAAI,GAAE,CAAC;EAC1D;EAEAA,GAAG,GAAG,MAAM,IAAI,CAAC9G,GAAG,CAACC,KAAK,CAAC,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;EAC9D,IAAI6G,GAAG,EAAE;IACP,IAAIC,GAAG,GAAG1E,QAAQ,CAACyE,GAAG,EAAE,EAAE,CAAC;IAC3B,IAAI,CAACE,KAAK,CAACD,GAAG,CAAC,EAAE;MACf,OAAOA,GAAG;IACZ;IACA,IAAI,CAAClH,GAAG,CAACC,KAAK,CAAE,kCAAiCgH,GAAI,GAAE,CAAC;EAC1D;EAEA,IAAI,CAACjH,GAAG,CAACoH,aAAa,CAAC,yCAAyC,CAAC;AACnE,CAAC;AAEDtI,QAAQ,CAACuI,yBAAyB,GAAG,eAAeA,yBAAyBA,CAAE5H,IAAI,GAAG,CAAC,CAAC,EAAE;EACxF,MAAM;IAACiE;EAAM,CAAC,GAAGjE,IAAI;EACrB,IAAI,CAACiF,aAAI,CAACwB,QAAQ,CAACxC,MAAM,CAAC,EAAE;IAC1B,MAAM,IAAI4D,cAAM,CAACC,oBAAoB,CAAE,+BAA8B,CAAC;EACxE;EAEA,MAAM,IAAI,CAACpH,GAAG,CAACqH,mBAAmB,CAAC9D,MAAM,CAAC;AAC5C,CAAC;AAQD5E,QAAQ,CAAC2I,sBAAsB,GAAG,eAAeA,sBAAsBA,CAAA,EAAI;EACzE,OAAO,MAAM,IAAI,CAACtH,GAAG,CAACuH,gBAAgB,EAAE;AAC1C,CAAC;AAeD5I,QAAQ,CAAC6I,aAAa,GAAG,eAAeA,aAAaA,CAAElI,IAAI,GAAG,CAAC,CAAC,EAAE;EAChE,OAAO,MAAM,IAAI,CAACU,GAAG,CAACyH,UAAU,CAACnI,IAAI,CAAC;AACxC,CAAC;AAuBDX,QAAQ,CAAC+I,YAAY,GAAG,eAAeA,YAAYA,CAAEpI,IAAI,GAAG,CAAC,CAAC,EAAE;EAC9D,MAAM;IAAE6F,GAAG;IAAEwC,IAAI;IAAEC,QAAQ;IAAEC;EAAU,CAAC,GAAGvI,IAAI;EAC/C,MAAMkG,uBAAc,CAACsC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC9H,GAAG,EAAE;IAC1C+H,SAAS,EAAE5C,GAAG;IACd6C,UAAU,EAAEL,IAAI;IAChBM,cAAc,EAAEL,QAAQ;IACxBM,oBAAoB,EAAEL;EACxB,CAAC,CAAC;AACJ,CAAC;AAED3B,MAAM,CAACC,MAAM,CAACtH,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,IAAAuJ,QAAA,GAE9BtJ,UAAU;AAAAC,OAAA,CAAAsJ,OAAA,GAAAD,QAAA"}
@@ -43,4 +43,4 @@ commands.deactivateIMEEngine = async function deactivateIMEEngine() {
43
43
  Object.assign(extensions, commands, helpers);
44
44
  var _default = extensions;
45
45
  exports.default = _default;
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiaXNJTUVBY3RpdmF0ZWQiLCJhdmFpbGFibGVJTUVFbmdpbmVzIiwibG9nIiwiZGVidWciLCJlbmdpbmVzIiwiYWRiIiwiYXZhaWxhYmxlSU1FcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRBY3RpdmVJTUVFbmdpbmUiLCJkZWZhdWx0SU1FIiwiYWN0aXZhdGVJTUVFbmdpbmUiLCJpbWVJZCIsImF2YWlsYWJsZUVuZ2luZXMiLCJpbmRleE9mIiwiZXJyb3JzIiwiSU1FTm90QXZhaWxhYmxlRXJyb3IiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJkZWFjdGl2YXRlSU1FRW5naW5lIiwiY3VycmVudEVuZ2luZSIsImRpc2FibGVJTUUiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmlzSU1FQWN0aXZhdGVkID0gYXN5bmMgZnVuY3Rpb24gaXNJTUVBY3RpdmF0ZWQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgLy8gSU1FIGlzIGFsd2F5cyBhY3RpdmF0ZWQgb24gQW5kcm9pZCBkZXZpY2VzXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29tbWFuZHMuYXZhaWxhYmxlSU1FRW5naW5lcyA9IGFzeW5jIGZ1bmN0aW9uIGF2YWlsYWJsZUlNRUVuZ2luZXMgKCkge1xuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyBhdmFpbGFibGUgSU1FcycpO1xuICBsZXQgZW5naW5lcyA9IGF3YWl0IHRoaXMuYWRiLmF2YWlsYWJsZUlNRXMoKTtcbiAgdGhpcy5sb2cuZGVidWcoYEVuZ2luZXM6ICR7SlNPTi5zdHJpbmdpZnkoZW5naW5lcyl9YCk7XG4gIHJldHVybiBlbmdpbmVzO1xufTtcblxuY29tbWFuZHMuZ2V0QWN0aXZlSU1FRW5naW5lID0gYXN5bmMgZnVuY3Rpb24gZ2V0QWN0aXZlSU1FRW5naW5lICgpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgY3VycmVudCBkZWZhdWx0IElNRScpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZGVmYXVsdElNRSgpO1xufTtcblxuY29tbWFuZHMuYWN0aXZhdGVJTUVFbmdpbmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZUlNRUVuZ2luZSAoaW1lSWQpIHtcbiAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gYWN0aXZhdGUgSU1FICR7aW1lSWR9YCk7XG4gIGxldCBhdmFpbGFibGVFbmdpbmVzID0gYXdhaXQgdGhpcy5hZGIuYXZhaWxhYmxlSU1FcygpO1xuICBpZiAoYXZhaWxhYmxlRW5naW5lcy5pbmRleE9mKGltZUlkKSA9PT0gLTEpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnSU1FIG5vdCBmb3VuZCwgZmFpbGluZycpO1xuICAgIHRocm93IG5ldyBlcnJvcnMuSU1FTm90QXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuICB0aGlzLmxvZy5kZWJ1ZygnRm91bmQgaW5zdGFsbGVkIElNRSwgYXR0ZW1wdGluZyB0byBhY3RpdmF0ZScpO1xuICBhd2FpdCB0aGlzLmFkYi5lbmFibGVJTUUoaW1lSWQpO1xuICBhd2FpdCB0aGlzLmFkYi5zZXRJTUUoaW1lSWQpO1xufTtcblxuY29tbWFuZHMuZGVhY3RpdmF0ZUlNRUVuZ2luZSA9IGFzeW5jIGZ1bmN0aW9uIGRlYWN0aXZhdGVJTUVFbmdpbmUgKCkge1xuICBsZXQgY3VycmVudEVuZ2luZSA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlSU1FRW5naW5lKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIGRlYWN0aXZhdGUgJHtjdXJyZW50RW5naW5lfWApO1xuICBhd2FpdCB0aGlzLmFkYi5kaXNhYmxlSU1FKGN1cnJlbnRFbmdpbmUpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBRUEsSUFBSUEsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQztBQUFBO0FBRWpERixRQUFRLENBQUNHLGNBQWMsR0FBRyxlQUFlQSxjQUFjLEdBQUk7RUFFekQsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVESCxRQUFRLENBQUNJLG1CQUFtQixHQUFHLGVBQWVBLG1CQUFtQixHQUFJO0VBQ25FLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsMkJBQTJCLENBQUM7RUFDM0MsSUFBSUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNDLGFBQWEsRUFBRTtFQUM1QyxJQUFJLENBQUNKLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLFlBQVdJLElBQUksQ0FBQ0MsU0FBUyxDQUFDSixPQUFPLENBQUUsRUFBQyxDQUFDO0VBQ3JELE9BQU9BLE9BQU87QUFDaEIsQ0FBQztBQUVEUCxRQUFRLENBQUNZLGtCQUFrQixHQUFHLGVBQWVBLGtCQUFrQixHQUFJO0VBQ2pFLElBQUksQ0FBQ1AsR0FBRyxDQUFDQyxLQUFLLENBQUMsZ0NBQWdDLENBQUM7RUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQ0UsR0FBRyxDQUFDSyxVQUFVLEVBQUU7QUFDcEMsQ0FBQztBQUVEYixRQUFRLENBQUNjLGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQixDQUFFQyxLQUFLLEVBQUU7RUFDcEUsSUFBSSxDQUFDVixHQUFHLENBQUNDLEtBQUssQ0FBRSw4QkFBNkJTLEtBQU0sRUFBQyxDQUFDO0VBQ3JELElBQUlDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDUixHQUFHLENBQUNDLGFBQWEsRUFBRTtFQUNyRCxJQUFJTyxnQkFBZ0IsQ0FBQ0MsT0FBTyxDQUFDRixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUMxQyxJQUFJLENBQUNWLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0lBQ3hDLE1BQU0sSUFBSVksY0FBTSxDQUFDQyxvQkFBb0IsRUFBRTtFQUN6QztFQUNBLElBQUksQ0FBQ2QsR0FBRyxDQUFDQyxLQUFLLENBQUMsNkNBQTZDLENBQUM7RUFDN0QsTUFBTSxJQUFJLENBQUNFLEdBQUcsQ0FBQ1ksU0FBUyxDQUFDTCxLQUFLLENBQUM7RUFDL0IsTUFBTSxJQUFJLENBQUNQLEdBQUcsQ0FBQ2EsTUFBTSxDQUFDTixLQUFLLENBQUM7QUFDOUIsQ0FBQztBQUVEZixRQUFRLENBQUNzQixtQkFBbUIsR0FBRyxlQUFlQSxtQkFBbUIsR0FBSTtFQUNuRSxJQUFJQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUNYLGtCQUFrQixFQUFFO0VBQ25ELElBQUksQ0FBQ1AsR0FBRyxDQUFDQyxLQUFLLENBQUUsNEJBQTJCaUIsYUFBYyxFQUFDLENBQUM7RUFDM0QsTUFBTSxJQUFJLENBQUNmLEdBQUcsQ0FBQ2dCLFVBQVUsQ0FBQ0QsYUFBYSxDQUFDO0FBQzFDLENBQUM7QUFFREUsTUFBTSxDQUFDQyxNQUFNLENBQUN4QixVQUFVLEVBQUVGLFFBQVEsRUFBRUMsT0FBTyxDQUFDO0FBQUMsZUFFOUJDLFVBQVU7QUFBQSJ9
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHJpdmVyIiwicmVxdWlyZSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJleHBvcnRzIiwiaXNJTUVBY3RpdmF0ZWQiLCJhdmFpbGFibGVJTUVFbmdpbmVzIiwibG9nIiwiZGVidWciLCJlbmdpbmVzIiwiYWRiIiwiYXZhaWxhYmxlSU1FcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRBY3RpdmVJTUVFbmdpbmUiLCJkZWZhdWx0SU1FIiwiYWN0aXZhdGVJTUVFbmdpbmUiLCJpbWVJZCIsImF2YWlsYWJsZUVuZ2luZXMiLCJpbmRleE9mIiwiZXJyb3JzIiwiSU1FTm90QXZhaWxhYmxlRXJyb3IiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJkZWFjdGl2YXRlSU1FRW5naW5lIiwiY3VycmVudEVuZ2luZSIsImRpc2FibGVJTUUiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmlzSU1FQWN0aXZhdGVkID0gYXN5bmMgZnVuY3Rpb24gaXNJTUVBY3RpdmF0ZWQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgLy8gSU1FIGlzIGFsd2F5cyBhY3RpdmF0ZWQgb24gQW5kcm9pZCBkZXZpY2VzXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29tbWFuZHMuYXZhaWxhYmxlSU1FRW5naW5lcyA9IGFzeW5jIGZ1bmN0aW9uIGF2YWlsYWJsZUlNRUVuZ2luZXMgKCkge1xuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyBhdmFpbGFibGUgSU1FcycpO1xuICBsZXQgZW5naW5lcyA9IGF3YWl0IHRoaXMuYWRiLmF2YWlsYWJsZUlNRXMoKTtcbiAgdGhpcy5sb2cuZGVidWcoYEVuZ2luZXM6ICR7SlNPTi5zdHJpbmdpZnkoZW5naW5lcyl9YCk7XG4gIHJldHVybiBlbmdpbmVzO1xufTtcblxuY29tbWFuZHMuZ2V0QWN0aXZlSU1FRW5naW5lID0gYXN5bmMgZnVuY3Rpb24gZ2V0QWN0aXZlSU1FRW5naW5lICgpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgY3VycmVudCBkZWZhdWx0IElNRScpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZGVmYXVsdElNRSgpO1xufTtcblxuY29tbWFuZHMuYWN0aXZhdGVJTUVFbmdpbmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZUlNRUVuZ2luZSAoaW1lSWQpIHtcbiAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gYWN0aXZhdGUgSU1FICR7aW1lSWR9YCk7XG4gIGxldCBhdmFpbGFibGVFbmdpbmVzID0gYXdhaXQgdGhpcy5hZGIuYXZhaWxhYmxlSU1FcygpO1xuICBpZiAoYXZhaWxhYmxlRW5naW5lcy5pbmRleE9mKGltZUlkKSA9PT0gLTEpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnSU1FIG5vdCBmb3VuZCwgZmFpbGluZycpO1xuICAgIHRocm93IG5ldyBlcnJvcnMuSU1FTm90QXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuICB0aGlzLmxvZy5kZWJ1ZygnRm91bmQgaW5zdGFsbGVkIElNRSwgYXR0ZW1wdGluZyB0byBhY3RpdmF0ZScpO1xuICBhd2FpdCB0aGlzLmFkYi5lbmFibGVJTUUoaW1lSWQpO1xuICBhd2FpdCB0aGlzLmFkYi5zZXRJTUUoaW1lSWQpO1xufTtcblxuY29tbWFuZHMuZGVhY3RpdmF0ZUlNRUVuZ2luZSA9IGFzeW5jIGZ1bmN0aW9uIGRlYWN0aXZhdGVJTUVFbmdpbmUgKCkge1xuICBsZXQgY3VycmVudEVuZ2luZSA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlSU1FRW5naW5lKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIGRlYWN0aXZhdGUgJHtjdXJyZW50RW5naW5lfWApO1xuICBhd2FpdCB0aGlzLmFkYi5kaXNhYmxlSU1FKGN1cnJlbnRFbmdpbmUpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUlDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUNDLE9BQUEsQ0FBQUYsT0FBQSxHQUFBQSxPQUFBO0FBQUFFLE9BQUEsQ0FBQUgsUUFBQSxHQUFBQSxRQUFBO0FBRWpEQSxRQUFRLENBQUNJLGNBQWMsR0FBRyxlQUFlQSxjQUFjQSxDQUFBLEVBQUk7RUFFekQsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVESixRQUFRLENBQUNLLG1CQUFtQixHQUFHLGVBQWVBLG1CQUFtQkEsQ0FBQSxFQUFJO0VBQ25FLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsMkJBQTJCLENBQUM7RUFDM0MsSUFBSUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNDLGFBQWEsRUFBRTtFQUM1QyxJQUFJLENBQUNKLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLFlBQVdJLElBQUksQ0FBQ0MsU0FBUyxDQUFDSixPQUFPLENBQUUsRUFBQyxDQUFDO0VBQ3JELE9BQU9BLE9BQU87QUFDaEIsQ0FBQztBQUVEUixRQUFRLENBQUNhLGtCQUFrQixHQUFHLGVBQWVBLGtCQUFrQkEsQ0FBQSxFQUFJO0VBQ2pFLElBQUksQ0FBQ1AsR0FBRyxDQUFDQyxLQUFLLENBQUMsZ0NBQWdDLENBQUM7RUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQ0UsR0FBRyxDQUFDSyxVQUFVLEVBQUU7QUFDcEMsQ0FBQztBQUVEZCxRQUFRLENBQUNlLGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQkEsQ0FBRUMsS0FBSyxFQUFFO0VBQ3BFLElBQUksQ0FBQ1YsR0FBRyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCUyxLQUFNLEVBQUMsQ0FBQztFQUNyRCxJQUFJQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQ1IsR0FBRyxDQUFDQyxhQUFhLEVBQUU7RUFDckQsSUFBSU8sZ0JBQWdCLENBQUNDLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDMUMsSUFBSSxDQUFDVixHQUFHLENBQUNDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztJQUN4QyxNQUFNLElBQUlZLGNBQU0sQ0FBQ0Msb0JBQW9CLEVBQUU7RUFDekM7RUFDQSxJQUFJLENBQUNkLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLDZDQUE2QyxDQUFDO0VBQzdELE1BQU0sSUFBSSxDQUFDRSxHQUFHLENBQUNZLFNBQVMsQ0FBQ0wsS0FBSyxDQUFDO0VBQy9CLE1BQU0sSUFBSSxDQUFDUCxHQUFHLENBQUNhLE1BQU0sQ0FBQ04sS0FBSyxDQUFDO0FBQzlCLENBQUM7QUFFRGhCLFFBQVEsQ0FBQ3VCLG1CQUFtQixHQUFHLGVBQWVBLG1CQUFtQkEsQ0FBQSxFQUFJO0VBQ25FLElBQUlDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsa0JBQWtCLEVBQUU7RUFDbkQsSUFBSSxDQUFDUCxHQUFHLENBQUNDLEtBQUssQ0FBRSw0QkFBMkJpQixhQUFjLEVBQUMsQ0FBQztFQUMzRCxNQUFNLElBQUksQ0FBQ2YsR0FBRyxDQUFDZ0IsVUFBVSxDQUFDRCxhQUFhLENBQUM7QUFDMUMsQ0FBQztBQUVERSxNQUFNLENBQUNDLE1BQU0sQ0FBQ3pCLFVBQVUsRUFBRUYsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFBQyxJQUFBMkIsUUFBQSxHQUU5QjFCLFVBQVU7QUFBQUMsT0FBQSxDQUFBMEIsT0FBQSxHQUFBRCxRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"ime.js","names":["commands","helpers","extensions","isIMEActivated","availableIMEEngines","log","debug","engines","adb","availableIMEs","JSON","stringify","getActiveIMEEngine","defaultIME","activateIMEEngine","imeId","availableEngines","indexOf","errors","IMENotAvailableError","enableIME","setIME","deactivateIMEEngine","currentEngine","disableIME","Object","assign"],"sources":["../../../lib/commands/ime.js"],"sourcesContent":["import { errors } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.isIMEActivated = async function isIMEActivated () { // eslint-disable-line require-await\n // IME is always activated on Android devices\n return true;\n};\n\ncommands.availableIMEEngines = async function availableIMEEngines () {\n this.log.debug('Retrieving available IMEs');\n let engines = await this.adb.availableIMEs();\n this.log.debug(`Engines: ${JSON.stringify(engines)}`);\n return engines;\n};\n\ncommands.getActiveIMEEngine = async function getActiveIMEEngine () {\n this.log.debug('Retrieving current default IME');\n return await this.adb.defaultIME();\n};\n\ncommands.activateIMEEngine = async function activateIMEEngine (imeId) {\n this.log.debug(`Attempting to activate IME ${imeId}`);\n let availableEngines = await this.adb.availableIMEs();\n if (availableEngines.indexOf(imeId) === -1) {\n this.log.debug('IME not found, failing');\n throw new errors.IMENotAvailableError();\n }\n this.log.debug('Found installed IME, attempting to activate');\n await this.adb.enableIME(imeId);\n await this.adb.setIME(imeId);\n};\n\ncommands.deactivateIMEEngine = async function deactivateIMEEngine () {\n let currentEngine = await this.getActiveIMEEngine();\n this.log.debug(`Attempting to deactivate ${currentEngine}`);\n await this.adb.disableIME(currentEngine);\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA;AAEA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjDF,QAAQ,CAACG,cAAc,GAAG,eAAeA,cAAc,GAAI;EAEzD,OAAO,IAAI;AACb,CAAC;AAEDH,QAAQ,CAACI,mBAAmB,GAAG,eAAeA,mBAAmB,GAAI;EACnE,IAAI,CAACC,GAAG,CAACC,KAAK,CAAC,2BAA2B,CAAC;EAC3C,IAAIC,OAAO,GAAG,MAAM,IAAI,CAACC,GAAG,CAACC,aAAa,EAAE;EAC5C,IAAI,CAACJ,GAAG,CAACC,KAAK,CAAE,YAAWI,IAAI,CAACC,SAAS,CAACJ,OAAO,CAAE,EAAC,CAAC;EACrD,OAAOA,OAAO;AAChB,CAAC;AAEDP,QAAQ,CAACY,kBAAkB,GAAG,eAAeA,kBAAkB,GAAI;EACjE,IAAI,CAACP,GAAG,CAACC,KAAK,CAAC,gCAAgC,CAAC;EAChD,OAAO,MAAM,IAAI,CAACE,GAAG,CAACK,UAAU,EAAE;AACpC,CAAC;AAEDb,QAAQ,CAACc,iBAAiB,GAAG,eAAeA,iBAAiB,CAAEC,KAAK,EAAE;EACpE,IAAI,CAACV,GAAG,CAACC,KAAK,CAAE,8BAA6BS,KAAM,EAAC,CAAC;EACrD,IAAIC,gBAAgB,GAAG,MAAM,IAAI,CAACR,GAAG,CAACC,aAAa,EAAE;EACrD,IAAIO,gBAAgB,CAACC,OAAO,CAACF,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;IAC1C,IAAI,CAACV,GAAG,CAACC,KAAK,CAAC,wBAAwB,CAAC;IACxC,MAAM,IAAIY,cAAM,CAACC,oBAAoB,EAAE;EACzC;EACA,IAAI,CAACd,GAAG,CAACC,KAAK,CAAC,6CAA6C,CAAC;EAC7D,MAAM,IAAI,CAACE,GAAG,CAACY,SAAS,CAACL,KAAK,CAAC;EAC/B,MAAM,IAAI,CAACP,GAAG,CAACa,MAAM,CAACN,KAAK,CAAC;AAC9B,CAAC;AAEDf,QAAQ,CAACsB,mBAAmB,GAAG,eAAeA,mBAAmB,GAAI;EACnE,IAAIC,aAAa,GAAG,MAAM,IAAI,CAACX,kBAAkB,EAAE;EACnD,IAAI,CAACP,GAAG,CAACC,KAAK,CAAE,4BAA2BiB,aAAc,EAAC,CAAC;EAC3D,MAAM,IAAI,CAACf,GAAG,CAACgB,UAAU,CAACD,aAAa,CAAC;AAC1C,CAAC;AAEDE,MAAM,CAACC,MAAM,CAACxB,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
1
+ {"version":3,"file":"ime.js","names":["_driver","require","commands","helpers","extensions","exports","isIMEActivated","availableIMEEngines","log","debug","engines","adb","availableIMEs","JSON","stringify","getActiveIMEEngine","defaultIME","activateIMEEngine","imeId","availableEngines","indexOf","errors","IMENotAvailableError","enableIME","setIME","deactivateIMEEngine","currentEngine","disableIME","Object","assign","_default","default"],"sources":["../../../lib/commands/ime.js"],"sourcesContent":["import { errors } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.isIMEActivated = async function isIMEActivated () { // eslint-disable-line require-await\n // IME is always activated on Android devices\n return true;\n};\n\ncommands.availableIMEEngines = async function availableIMEEngines () {\n this.log.debug('Retrieving available IMEs');\n let engines = await this.adb.availableIMEs();\n this.log.debug(`Engines: ${JSON.stringify(engines)}`);\n return engines;\n};\n\ncommands.getActiveIMEEngine = async function getActiveIMEEngine () {\n this.log.debug('Retrieving current default IME');\n return await this.adb.defaultIME();\n};\n\ncommands.activateIMEEngine = async function activateIMEEngine (imeId) {\n this.log.debug(`Attempting to activate IME ${imeId}`);\n let availableEngines = await this.adb.availableIMEs();\n if (availableEngines.indexOf(imeId) === -1) {\n this.log.debug('IME not found, failing');\n throw new errors.IMENotAvailableError();\n }\n this.log.debug('Found installed IME, attempting to activate');\n await this.adb.enableIME(imeId);\n await this.adb.setIME(imeId);\n};\n\ncommands.deactivateIMEEngine = async function deactivateIMEEngine () {\n let currentEngine = await this.getActiveIMEEngine();\n this.log.debug(`Attempting to deactivate ${currentEngine}`);\n await this.adb.disableIME(currentEngine);\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAIC,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAF,OAAA,GAAAA,OAAA;AAAAE,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAEjDA,QAAQ,CAACI,cAAc,GAAG,eAAeA,cAAcA,CAAA,EAAI;EAEzD,OAAO,IAAI;AACb,CAAC;AAEDJ,QAAQ,CAACK,mBAAmB,GAAG,eAAeA,mBAAmBA,CAAA,EAAI;EACnE,IAAI,CAACC,GAAG,CAACC,KAAK,CAAC,2BAA2B,CAAC;EAC3C,IAAIC,OAAO,GAAG,MAAM,IAAI,CAACC,GAAG,CAACC,aAAa,EAAE;EAC5C,IAAI,CAACJ,GAAG,CAACC,KAAK,CAAE,YAAWI,IAAI,CAACC,SAAS,CAACJ,OAAO,CAAE,EAAC,CAAC;EACrD,OAAOA,OAAO;AAChB,CAAC;AAEDR,QAAQ,CAACa,kBAAkB,GAAG,eAAeA,kBAAkBA,CAAA,EAAI;EACjE,IAAI,CAACP,GAAG,CAACC,KAAK,CAAC,gCAAgC,CAAC;EAChD,OAAO,MAAM,IAAI,CAACE,GAAG,CAACK,UAAU,EAAE;AACpC,CAAC;AAEDd,QAAQ,CAACe,iBAAiB,GAAG,eAAeA,iBAAiBA,CAAEC,KAAK,EAAE;EACpE,IAAI,CAACV,GAAG,CAACC,KAAK,CAAE,8BAA6BS,KAAM,EAAC,CAAC;EACrD,IAAIC,gBAAgB,GAAG,MAAM,IAAI,CAACR,GAAG,CAACC,aAAa,EAAE;EACrD,IAAIO,gBAAgB,CAACC,OAAO,CAACF,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;IAC1C,IAAI,CAACV,GAAG,CAACC,KAAK,CAAC,wBAAwB,CAAC;IACxC,MAAM,IAAIY,cAAM,CAACC,oBAAoB,EAAE;EACzC;EACA,IAAI,CAACd,GAAG,CAACC,KAAK,CAAC,6CAA6C,CAAC;EAC7D,MAAM,IAAI,CAACE,GAAG,CAACY,SAAS,CAACL,KAAK,CAAC;EAC/B,MAAM,IAAI,CAACP,GAAG,CAACa,MAAM,CAACN,KAAK,CAAC;AAC9B,CAAC;AAEDhB,QAAQ,CAACuB,mBAAmB,GAAG,eAAeA,mBAAmBA,CAAA,EAAI;EACnE,IAAIC,aAAa,GAAG,MAAM,IAAI,CAACX,kBAAkB,EAAE;EACnD,IAAI,CAACP,GAAG,CAACC,KAAK,CAAE,4BAA2BiB,aAAc,EAAC,CAAC;EAC3D,MAAM,IAAI,CAACf,GAAG,CAACgB,UAAU,CAACD,aAAa,CAAC;AAC1C,CAAC;AAEDE,MAAM,CAACC,MAAM,CAACzB,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,IAAA2B,QAAA,GAE9B1B,UAAU;AAAAC,OAAA,CAAA0B,OAAA,GAAAD,QAAA"}
@@ -34,4 +34,4 @@ exports.commands = commands;
34
34
  Object.assign(commands, _find.default, _general.default, _alert.default, _element.default, _context.default, _actions.default, _touch.default, _ime.default, _network.default, _coverage.default, _recordscreen.default, _intent.default, _streamscreen.default, _performance.default, _execute.default, _shell.default, _emuConsole.default, _systemBars.default, _appManagement.default, _fileActions.default, _log.default, _mediaProjection.default, _permissions.default);
35
35
  var _default = commands;
36
36
  exports.default = _default;
37
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRDbWRzIiwiZ2VuZXJhbENtZHMiLCJhbGVydENtZHMiLCJlbGVtZW50Q21kcyIsImNvbnRleHRDbWRzIiwiYWN0aW9uQ21kcyIsInRvdWNoQ21kcyIsImltZUNtZHMiLCJuZXR3b3JrQ21kcyIsImNvdmVyYWdlQ21kcyIsInJlY29yZHNjcmVlbkNtZHMiLCJpbnRlbnRDbWRzIiwic2NyZWVuU3RyZWFtQ21kcyIsInBlcmZvcm1hbmNlQ21kcyIsImV4ZWN1dGVDbWRzIiwic2hlbGxDbWRzIiwiZW11Q29uc29sZUNtZHMiLCJzeXN0ZW1CYXJzQ21kcyIsImFwcE1hbmFnZW1lbnRDbWRzIiwiZmlsZUFjdGlvbnNDbWRzIiwibG9nQ21kcyIsIm1lZGlhUHJvamVjdGlvbkNtZHMiLCJwZXJtaXNzaW9uc0NvbW1hbmRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaW5kQ21kcyBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IGdlbmVyYWxDbWRzIGZyb20gJy4vZ2VuZXJhbCc7XG5pbXBvcnQgYWxlcnRDbWRzIGZyb20gJy4vYWxlcnQnO1xuaW1wb3J0IGVsZW1lbnRDbWRzIGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgY29udGV4dENtZHMgZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCBhY3Rpb25DbWRzIGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgdG91Y2hDbWRzIGZyb20gJy4vdG91Y2gnO1xuaW1wb3J0IGltZUNtZHMgZnJvbSAnLi9pbWUnO1xuaW1wb3J0IG5ldHdvcmtDbWRzIGZyb20gJy4vbmV0d29yayc7XG5pbXBvcnQgY292ZXJhZ2VDbWRzIGZyb20gJy4vY292ZXJhZ2UnO1xuaW1wb3J0IHJlY29yZHNjcmVlbkNtZHMgZnJvbSAnLi9yZWNvcmRzY3JlZW4nO1xuaW1wb3J0IHNjcmVlblN0cmVhbUNtZHMgZnJvbSAnLi9zdHJlYW1zY3JlZW4nO1xuaW1wb3J0IHBlcmZvcm1hbmNlQ21kcyBmcm9tICcuL3BlcmZvcm1hbmNlJztcbmltcG9ydCBleGVjdXRlQ21kcyBmcm9tICcuL2V4ZWN1dGUnO1xuaW1wb3J0IHNoZWxsQ21kcyBmcm9tICcuL3NoZWxsJztcbmltcG9ydCBlbXVDb25zb2xlQ21kcyBmcm9tICcuL2VtdS1jb25zb2xlJztcbmltcG9ydCBmaWxlQWN0aW9uc0NtZHMgZnJvbSAnLi9maWxlLWFjdGlvbnMnO1xuaW1wb3J0IGFwcE1hbmFnZW1lbnRDbWRzIGZyb20gJy4vYXBwLW1hbmFnZW1lbnQnO1xuaW1wb3J0IGludGVudENtZHMgZnJvbSAnLi9pbnRlbnQnO1xuaW1wb3J0IHN5c3RlbUJhcnNDbWRzIGZyb20gJy4vc3lzdGVtLWJhcnMnO1xuaW1wb3J0IGxvZ0NtZHMgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IG1lZGlhUHJvamVjdGlvbkNtZHMgZnJvbSAnLi9tZWRpYS1wcm9qZWN0aW9uJztcbmltcG9ydCBwZXJtaXNzaW9uc0NvbW1hbmRzIGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG5cbmxldCBjb21tYW5kcyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgY29tbWFuZHMsXG4gIGZpbmRDbWRzLFxuICBnZW5lcmFsQ21kcyxcbiAgYWxlcnRDbWRzLFxuICBlbGVtZW50Q21kcyxcbiAgY29udGV4dENtZHMsXG4gIGFjdGlvbkNtZHMsXG4gIHRvdWNoQ21kcyxcbiAgaW1lQ21kcyxcbiAgbmV0d29ya0NtZHMsXG4gIGNvdmVyYWdlQ21kcyxcbiAgcmVjb3Jkc2NyZWVuQ21kcyxcbiAgaW50ZW50Q21kcyxcbiAgc2NyZWVuU3RyZWFtQ21kcyxcbiAgcGVyZm9ybWFuY2VDbWRzLFxuICBleGVjdXRlQ21kcyxcbiAgc2hlbGxDbWRzLFxuICBlbXVDb25zb2xlQ21kcyxcbiAgc3lzdGVtQmFyc0NtZHMsXG4gIGFwcE1hbmFnZW1lbnRDbWRzLFxuICBmaWxlQWN0aW9uc0NtZHMsXG4gIGxvZ0NtZHMsXG4gIG1lZGlhUHJvamVjdGlvbkNtZHMsXG4gIHBlcm1pc3Npb25zQ29tbWFuZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsSUFBSUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQ2xCQyxNQUFNLENBQUNDLE1BQU0sQ0FDWEYsUUFBUSxFQUNSRyxhQUFRLEVBQ1JDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsZ0JBQVcsRUFDWEMsZ0JBQVcsRUFDWEMsZ0JBQVUsRUFDVkMsY0FBUyxFQUNUQyxZQUFPLEVBQ1BDLGdCQUFXLEVBQ1hDLGlCQUFZLEVBQ1pDLHFCQUFnQixFQUNoQkMsZUFBVSxFQUNWQyxxQkFBZ0IsRUFDaEJDLG9CQUFlLEVBQ2ZDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsbUJBQWMsRUFDZEMsbUJBQWMsRUFDZEMsc0JBQWlCLEVBQ2pCQyxvQkFBZSxFQUNmQyxZQUFPLEVBQ1BDLHdCQUFtQixFQUNuQkMsb0JBQW1CLENBRXBCO0FBQUMsZUFHYXpCLFFBQVE7QUFBQSJ9
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmluZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dlbmVyYWwiLCJfYWxlcnQiLCJfZWxlbWVudCIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfdG91Y2giLCJfaW1lIiwiX25ldHdvcmsiLCJfY292ZXJhZ2UiLCJfcmVjb3Jkc2NyZWVuIiwiX3N0cmVhbXNjcmVlbiIsIl9wZXJmb3JtYW5jZSIsIl9leGVjdXRlIiwiX3NoZWxsIiwiX2VtdUNvbnNvbGUiLCJfZmlsZUFjdGlvbnMiLCJfYXBwTWFuYWdlbWVudCIsIl9pbnRlbnQiLCJfc3lzdGVtQmFycyIsIl9sb2ciLCJfbWVkaWFQcm9qZWN0aW9uIiwiX3Blcm1pc3Npb25zIiwiY29tbWFuZHMiLCJleHBvcnRzIiwiT2JqZWN0IiwiYXNzaWduIiwiZmluZENtZHMiLCJnZW5lcmFsQ21kcyIsImFsZXJ0Q21kcyIsImVsZW1lbnRDbWRzIiwiY29udGV4dENtZHMiLCJhY3Rpb25DbWRzIiwidG91Y2hDbWRzIiwiaW1lQ21kcyIsIm5ldHdvcmtDbWRzIiwiY292ZXJhZ2VDbWRzIiwicmVjb3Jkc2NyZWVuQ21kcyIsImludGVudENtZHMiLCJzY3JlZW5TdHJlYW1DbWRzIiwicGVyZm9ybWFuY2VDbWRzIiwiZXhlY3V0ZUNtZHMiLCJzaGVsbENtZHMiLCJlbXVDb25zb2xlQ21kcyIsInN5c3RlbUJhcnNDbWRzIiwiYXBwTWFuYWdlbWVudENtZHMiLCJmaWxlQWN0aW9uc0NtZHMiLCJsb2dDbWRzIiwibWVkaWFQcm9qZWN0aW9uQ21kcyIsInBlcm1pc3Npb25zQ29tbWFuZHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgZ2VuZXJhbENtZHMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCBhbGVydENtZHMgZnJvbSAnLi9hbGVydCc7XG5pbXBvcnQgZWxlbWVudENtZHMgZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCBjb250ZXh0Q21kcyBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IGFjdGlvbkNtZHMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB0b3VjaENtZHMgZnJvbSAnLi90b3VjaCc7XG5pbXBvcnQgaW1lQ21kcyBmcm9tICcuL2ltZSc7XG5pbXBvcnQgbmV0d29ya0NtZHMgZnJvbSAnLi9uZXR3b3JrJztcbmltcG9ydCBjb3ZlcmFnZUNtZHMgZnJvbSAnLi9jb3ZlcmFnZSc7XG5pbXBvcnQgcmVjb3Jkc2NyZWVuQ21kcyBmcm9tICcuL3JlY29yZHNjcmVlbic7XG5pbXBvcnQgc2NyZWVuU3RyZWFtQ21kcyBmcm9tICcuL3N0cmVhbXNjcmVlbic7XG5pbXBvcnQgcGVyZm9ybWFuY2VDbWRzIGZyb20gJy4vcGVyZm9ybWFuY2UnO1xuaW1wb3J0IGV4ZWN1dGVDbWRzIGZyb20gJy4vZXhlY3V0ZSc7XG5pbXBvcnQgc2hlbGxDbWRzIGZyb20gJy4vc2hlbGwnO1xuaW1wb3J0IGVtdUNvbnNvbGVDbWRzIGZyb20gJy4vZW11LWNvbnNvbGUnO1xuaW1wb3J0IGZpbGVBY3Rpb25zQ21kcyBmcm9tICcuL2ZpbGUtYWN0aW9ucyc7XG5pbXBvcnQgYXBwTWFuYWdlbWVudENtZHMgZnJvbSAnLi9hcHAtbWFuYWdlbWVudCc7XG5pbXBvcnQgaW50ZW50Q21kcyBmcm9tICcuL2ludGVudCc7XG5pbXBvcnQgc3lzdGVtQmFyc0NtZHMgZnJvbSAnLi9zeXN0ZW0tYmFycyc7XG5pbXBvcnQgbG9nQ21kcyBmcm9tICcuL2xvZyc7XG5pbXBvcnQgbWVkaWFQcm9qZWN0aW9uQ21kcyBmcm9tICcuL21lZGlhLXByb2plY3Rpb24nO1xuaW1wb3J0IHBlcm1pc3Npb25zQ29tbWFuZHMgZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5cblxubGV0IGNvbW1hbmRzID0ge307XG5PYmplY3QuYXNzaWduKFxuICBjb21tYW5kcyxcbiAgZmluZENtZHMsXG4gIGdlbmVyYWxDbWRzLFxuICBhbGVydENtZHMsXG4gIGVsZW1lbnRDbWRzLFxuICBjb250ZXh0Q21kcyxcbiAgYWN0aW9uQ21kcyxcbiAgdG91Y2hDbWRzLFxuICBpbWVDbWRzLFxuICBuZXR3b3JrQ21kcyxcbiAgY292ZXJhZ2VDbWRzLFxuICByZWNvcmRzY3JlZW5DbWRzLFxuICBpbnRlbnRDbWRzLFxuICBzY3JlZW5TdHJlYW1DbWRzLFxuICBwZXJmb3JtYW5jZUNtZHMsXG4gIGV4ZWN1dGVDbWRzLFxuICBzaGVsbENtZHMsXG4gIGVtdUNvbnNvbGVDbWRzLFxuICBzeXN0ZW1CYXJzQ21kcyxcbiAgYXBwTWFuYWdlbWVudENtZHMsXG4gIGZpbGVBY3Rpb25zQ21kcyxcbiAgbG9nQ21kcyxcbiAgbWVkaWFQcm9qZWN0aW9uQ21kcyxcbiAgcGVybWlzc2lvbnNDb21tYW5kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLFFBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFNBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLGFBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFZLFlBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFhLFFBQUEsR0FBQWQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFjLE1BQUEsR0FBQWYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFlLFdBQUEsR0FBQWhCLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBZ0IsWUFBQSxHQUFBakIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFpQixjQUFBLEdBQUFsQixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQWtCLE9BQUEsR0FBQW5CLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBbUIsV0FBQSxHQUFBcEIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFvQixJQUFBLEdBQUFyQixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQXFCLGdCQUFBLEdBQUF0QixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQXNCLFlBQUEsR0FBQXZCLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFJdUIsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFELFFBQUEsR0FBQUEsUUFBQTtBQUNsQkUsTUFBTSxDQUFDQyxNQUFNLENBQ1hILFFBQVEsRUFDUkksYUFBUSxFQUNSQyxnQkFBVyxFQUNYQyxjQUFTLEVBQ1RDLGdCQUFXLEVBQ1hDLGdCQUFXLEVBQ1hDLGdCQUFVLEVBQ1ZDLGNBQVMsRUFDVEMsWUFBTyxFQUNQQyxnQkFBVyxFQUNYQyxpQkFBWSxFQUNaQyxxQkFBZ0IsRUFDaEJDLGVBQVUsRUFDVkMscUJBQWdCLEVBQ2hCQyxvQkFBZSxFQUNmQyxnQkFBVyxFQUNYQyxjQUFTLEVBQ1RDLG1CQUFjLEVBQ2RDLG1CQUFjLEVBQ2RDLHNCQUFpQixFQUNqQkMsb0JBQWUsRUFDZkMsWUFBTyxFQUNQQyx3QkFBbUIsRUFDbkJDLG9CQUFtQixDQUVwQjtBQUFDLElBQUFDLFFBQUEsR0FHYTNCLFFBQVE7QUFBQUMsT0FBQSxDQUFBMkIsT0FBQSxHQUFBRCxRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["commands","Object","assign","findCmds","generalCmds","alertCmds","elementCmds","contextCmds","actionCmds","touchCmds","imeCmds","networkCmds","coverageCmds","recordscreenCmds","intentCmds","screenStreamCmds","performanceCmds","executeCmds","shellCmds","emuConsoleCmds","systemBarsCmds","appManagementCmds","fileActionsCmds","logCmds","mediaProjectionCmds","permissionsCommands"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport generalCmds from './general';\nimport alertCmds from './alert';\nimport elementCmds from './element';\nimport contextCmds from './context';\nimport actionCmds from './actions';\nimport touchCmds from './touch';\nimport imeCmds from './ime';\nimport networkCmds from './network';\nimport coverageCmds from './coverage';\nimport recordscreenCmds from './recordscreen';\nimport screenStreamCmds from './streamscreen';\nimport performanceCmds from './performance';\nimport executeCmds from './execute';\nimport shellCmds from './shell';\nimport emuConsoleCmds from './emu-console';\nimport fileActionsCmds from './file-actions';\nimport appManagementCmds from './app-management';\nimport intentCmds from './intent';\nimport systemBarsCmds from './system-bars';\nimport logCmds from './log';\nimport mediaProjectionCmds from './media-projection';\nimport permissionsCommands from './permissions';\n\n\nlet commands = {};\nObject.assign(\n commands,\n findCmds,\n generalCmds,\n alertCmds,\n elementCmds,\n contextCmds,\n actionCmds,\n touchCmds,\n imeCmds,\n networkCmds,\n coverageCmds,\n recordscreenCmds,\n intentCmds,\n screenStreamCmds,\n performanceCmds,\n executeCmds,\n shellCmds,\n emuConsoleCmds,\n systemBarsCmds,\n appManagementCmds,\n fileActionsCmds,\n logCmds,\n mediaProjectionCmds,\n permissionsCommands,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,IAAIA,QAAQ,GAAG,CAAC,CAAC;AAAC;AAClBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,gBAAU,EACVC,cAAS,EACTC,YAAO,EACPC,gBAAW,EACXC,iBAAY,EACZC,qBAAgB,EAChBC,eAAU,EACVC,qBAAgB,EAChBC,oBAAe,EACfC,gBAAW,EACXC,cAAS,EACTC,mBAAc,EACdC,mBAAc,EACdC,sBAAiB,EACjBC,oBAAe,EACfC,YAAO,EACPC,wBAAmB,EACnBC,oBAAmB,CAEpB;AAAC,eAGazB,QAAQ;AAAA"}
1
+ {"version":3,"file":"index.js","names":["_find","_interopRequireDefault","require","_general","_alert","_element","_context","_actions","_touch","_ime","_network","_coverage","_recordscreen","_streamscreen","_performance","_execute","_shell","_emuConsole","_fileActions","_appManagement","_intent","_systemBars","_log","_mediaProjection","_permissions","commands","exports","Object","assign","findCmds","generalCmds","alertCmds","elementCmds","contextCmds","actionCmds","touchCmds","imeCmds","networkCmds","coverageCmds","recordscreenCmds","intentCmds","screenStreamCmds","performanceCmds","executeCmds","shellCmds","emuConsoleCmds","systemBarsCmds","appManagementCmds","fileActionsCmds","logCmds","mediaProjectionCmds","permissionsCommands","_default","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport generalCmds from './general';\nimport alertCmds from './alert';\nimport elementCmds from './element';\nimport contextCmds from './context';\nimport actionCmds from './actions';\nimport touchCmds from './touch';\nimport imeCmds from './ime';\nimport networkCmds from './network';\nimport coverageCmds from './coverage';\nimport recordscreenCmds from './recordscreen';\nimport screenStreamCmds from './streamscreen';\nimport performanceCmds from './performance';\nimport executeCmds from './execute';\nimport shellCmds from './shell';\nimport emuConsoleCmds from './emu-console';\nimport fileActionsCmds from './file-actions';\nimport appManagementCmds from './app-management';\nimport intentCmds from './intent';\nimport systemBarsCmds from './system-bars';\nimport logCmds from './log';\nimport mediaProjectionCmds from './media-projection';\nimport permissionsCommands from './permissions';\n\n\nlet commands = {};\nObject.assign(\n commands,\n findCmds,\n generalCmds,\n alertCmds,\n elementCmds,\n contextCmds,\n actionCmds,\n touchCmds,\n imeCmds,\n networkCmds,\n coverageCmds,\n recordscreenCmds,\n intentCmds,\n screenStreamCmds,\n performanceCmds,\n executeCmds,\n shellCmds,\n emuConsoleCmds,\n systemBarsCmds,\n appManagementCmds,\n fileActionsCmds,\n logCmds,\n mediaProjectionCmds,\n permissionsCommands,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,MAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,IAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,SAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,aAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,aAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,YAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,QAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,MAAA,GAAAf,sBAAA,CAAAC,OAAA;AACA,IAAAe,WAAA,GAAAhB,sBAAA,CAAAC,OAAA;AACA,IAAAgB,YAAA,GAAAjB,sBAAA,CAAAC,OAAA;AACA,IAAAiB,cAAA,GAAAlB,sBAAA,CAAAC,OAAA;AACA,IAAAkB,OAAA,GAAAnB,sBAAA,CAAAC,OAAA;AACA,IAAAmB,WAAA,GAAApB,sBAAA,CAAAC,OAAA;AACA,IAAAoB,IAAA,GAAArB,sBAAA,CAAAC,OAAA;AACA,IAAAqB,gBAAA,GAAAtB,sBAAA,CAAAC,OAAA;AACA,IAAAsB,YAAA,GAAAvB,sBAAA,CAAAC,OAAA;AAGA,IAAIuB,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AAClBE,MAAM,CAACC,MAAM,CACXH,QAAQ,EACRI,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,gBAAU,EACVC,cAAS,EACTC,YAAO,EACPC,gBAAW,EACXC,iBAAY,EACZC,qBAAgB,EAChBC,eAAU,EACVC,qBAAgB,EAChBC,oBAAe,EACfC,gBAAW,EACXC,cAAS,EACTC,mBAAc,EACdC,mBAAc,EACdC,sBAAiB,EACjBC,oBAAe,EACfC,YAAO,EACPC,wBAAmB,EACnBC,oBAAmB,CAEpB;AAAC,IAAAC,QAAA,GAGa3B,QAAQ;AAAAC,OAAA,CAAA2B,OAAA,GAAAD,QAAA"}
@@ -163,4 +163,4 @@ commands.mobileStopService = async function mobileStopService(opts = {}) {
163
163
  };
164
164
  var _default = commands;
165
165
  exports.default = _default;
166
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOT19WQUxVRV9BUkdfVFlQRSIsIlNVUFBPUlRFRF9FWFRSQV9UWVBFUyIsIkFQSV9MRVZFTF9BTkRST0lEXzgiLCJjb21tYW5kcyIsInBhcnNlSW50ZW50U3BlYyIsIm9wdHMiLCJpbnRlbnQiLCJhY3Rpb24iLCJ1cmkiLCJtaW1lVHlwZSIsImlkZW50aWZpZXIiLCJjYXRlZ29yaWVzIiwiY29tcG9uZW50IiwiZXh0cmFzIiwiZmxhZ3MiLCJyZXN1bHRBcmdzIiwicHVzaCIsIl8iLCJpc05pbCIsImlzQXJyYXkiLCJmbGF0TWFwIiwibWFwIiwiY05hbWUiLCJwYWNrYWdlIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJpdGVtIiwidHlwZSIsImtleSIsInZhbHVlIiwiaW5jbHVkZXMiLCJpc0VtcHR5IiwiaXNTdHJpbmciLCJ0cmltIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzVW5kZWZpbmVkIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsInVzZXIiLCJ3YWl0Iiwic3RvcCIsIndpbmRvd2luZ01vZGUiLCJhY3Rpdml0eVR5cGUiLCJkaXNwbGF5IiwiY21kIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJzaGVsbCIsIm1vYmlsZUJyb2FkY2FzdCIsInJlY2VpdmVyUGVybWlzc2lvbiIsImFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzIiwibW9iaWxlU3RhcnRTZXJ2aWNlIiwiZm9yZWdyb3VuZCIsIm1vYmlsZVN0b3BTZXJ2aWNlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2ludGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IE5PX1ZBTFVFX0FSR19UWVBFID0gJ3NuJztcbmNvbnN0IFNVUFBPUlRFRF9FWFRSQV9UWVBFUyA9IFtcbiAgJ3MnLCBOT19WQUxVRV9BUkdfVFlQRSwgJ3onLCAnaScsICdsJywgJ2YnLCAndScsICdjbicsXG4gICdpYScsICdpYWwnLCAnbGEnLCAnbGFsJywgJ2ZhJywgJ2ZhbCcsICdzYScsICdzYWwnLFxuXTtcbmNvbnN0IEFQSV9MRVZFTF9BTkRST0lEXzggPSAyNjtcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gcGFyc2VJbnRlbnRTcGVjIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGludGVudCxcbiAgICBhY3Rpb24sXG4gICAgdXJpLFxuICAgIG1pbWVUeXBlLFxuICAgIGlkZW50aWZpZXIsXG4gICAgY2F0ZWdvcmllcyxcbiAgICBjb21wb25lbnQsXG4gICAgZXh0cmFzLFxuICAgIGZsYWdzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QXJncyA9IFtdO1xuICBpZiAoaW50ZW50KSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKGludGVudCk7XG4gIH1cbiAgaWYgKGFjdGlvbikge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmICh1cmkpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy1kJywgdXJpKTtcbiAgfVxuICBpZiAobWltZVR5cGUpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy10JywgbWltZVR5cGUpO1xuICB9XG4gIGlmICghXy5pc05pbChpZGVudGlmaWVyKSkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWknLCBpZGVudGlmaWVyKTtcbiAgfVxuICBpZiAoY2F0ZWdvcmllcykge1xuICAgIGlmIChfLmlzQXJyYXkoY2F0ZWdvcmllcykpIHtcbiAgICAgIHJlc3VsdEFyZ3MucHVzaCguLi4oXy5mbGF0TWFwKGNhdGVnb3JpZXMubWFwKChjTmFtZSkgPT4gWyctYycsIGNOYW1lXSkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdEFyZ3MucHVzaCgnLWMnLCBjYXRlZ29yaWVzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLW4nLCBjb21wb25lbnQpO1xuICB9XG4gIGlmIChvcHRzLnBhY2thZ2UpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goJy1wJywgb3B0cy5wYWNrYWdlKTtcbiAgfVxuICBpZiAoZXh0cmFzKSB7XG4gICAgaWYgKCFfLmlzQXJyYXkoZXh0cmFzKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2V4dHJhcycgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXh0cmFzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShpdGVtKSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBFeHRyYSBhcmd1bWVudCAnJHtpdGVtfScgbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgfVxuICAgICAgY29uc3QgW3R5cGUsIGtleSwgdmFsdWVdID0gaXRlbTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhTVVBQT1JURURfRVhUUkFfVFlQRVMsIHR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEV4dHJhIGFyZ3VtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBrbm93bi4gYCArXG4gICAgICAgICAgYFN1cHBvcnRlZCBpbnRlbnQgYXJndW1lbnQgdHlwZXMgYXJlOiAke1NVUFBPUlRFRF9FWFRSQV9UWVBFU31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0VtcHR5KGtleSkgfHwgKF8uaXNTdHJpbmcoa2V5KSAmJiBfLnRyaW0oa2V5KSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEV4dHJhIGFyZ3VtZW50J3Mga2V5IGluICcke0pTT04uc3RyaW5naWZ5KGl0ZW0pfScgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBpZGVudGlmaWVyYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IE5PX1ZBTFVFX0FSR19UWVBFKSB7XG4gICAgICAgIHJlc3VsdEFyZ3MucHVzaChgLS1lJHt0eXBlfWAsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEludGVudCBhcmd1bWVudCB0eXBlICcke3R5cGV9JyBpbiAnJHtKU09OLnN0cmluZ2lmeShpdGVtKX0nIHJlcXVpcmVzIGEgYCArXG4gICAgICAgICAgYHZhbGlkIHZhbHVlIHRvIGJlIHByb3ZpZGVkYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0QXJncy5wdXNoKGAtLWUke3R5cGV9YCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChmbGFncykge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdEFyZ3M7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRBY3Rpdml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydjdXJyZW50J10gLSBUaGUgdXNlciBJRCBmb3Igd2hpY2ggdGhlIHNlcnZpY2UgaXMgc3RhcnRlZC5cbiAqIFRoZSBgY3VycmVudGAgdXNlciBpZCBpcyB1c2VkIGJ5IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHdhaXQgW2ZhbHNlXSAtIFNldCBpdCB0byBgdHJ1ZWAgaWYgeW91IHdhbnQgdG8gYmxvY2sgdGhlIG1ldGhvZCBjYWxsXG4gKiB1bnRpbCB0aGUgYWN0aXZpdHkgbWFuYWdlcidzIHByb2Nlc3MgcmV0dXJucyB0aGUgY29udHJvbCB0byB0aGUgc3lzdGVtLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gc3RvcCBbZmFsc2VdIC0gU2V0IGl0IHRvIGB0cnVlYCB0byBmb3JjZSBzdG9wIHRoZSB0YXJnZXRcbiAqIGFwcCBiZWZvcmUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB3aW5kb3dpbmdNb2RlIC0gVGhlIHdpbmRvd2luZyBtb2RlIHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgaW50by5cbiAqIENoZWNrIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2luZG93Q29uZmlndXJhdGlvbi5qYXZhXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHBvc3NpYmxlIHdpbmRvd2luZyBtb2RlcyAoY29uc3RhbnRzIHN0YXJ0aW5nIHdpdGggYFdJTkRPV0lOR19NT0RFX2ApLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWN0aXZpdHlUeXBlIC0gVGhlIGFjdGl2aXR5IHR5cGUgdG8gbGF1bmNoIHRoZSBhY3Rpdml0eSBhcy5cbiAqIENoZWNrIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2luZG93Q29uZmlndXJhdGlvbi5qYXZhXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHBvc3NpYmxlIGFjdGl2aXR5IHR5cGVzIChjb25zdGFudHMgc3RhcnRpbmcgd2l0aCBgQUNUSVZJVFlfVFlQRV9gKS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGRpc3BsYXkgLSBUaGUgZGlzcGxheSBpZGVudGlmaWVyIHRvIGxhdW5jaCB0aGUgYWN0aXZpdHkgaW50by5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaW50ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGFjdGl2aXR5IGludGVudCB0byBzdGFydCwgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYWNrYWdlIC0gUGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVyaSAtIFVuaWZpZWQgcmVzb3VyY2UgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtaW1lVHlwZSAtIE1pbWUgdHlwZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZGVudGlmaWVyIC0gT3B0aW9uYWwgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfEFycmF5PHN0cmluZz59IGNhdGVnb3JpZXMgLSBPbmUgb3IgbW9yZSBjYXRlZ29yeSBuYW1lc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21wb25lbnQgLSBDb21wb25lbnQgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuIE11c3QgYmUgcmVwcmVzZW50ZWRcbiAqIGFzIGFycmF5IG9mIGFycmF5cywgd2hlcmUgZWFjaCBzdWJhcnJheSBpdGVtIGNvbnRhaW5zIHR3byBvciB0aHJlZSBzdHJpbmcgaXRlbXM6XG4gKiB2YWx1ZSB0eXBlLCBrZXkgbmFtZSBhbmQgdGhlIHZhbHVlIGl0c2VsZi5cbiAqIFN1cHBvcnRlZCB2YWx1ZSB0eXBlcyBhcmU6XG4gKiAtIHM6IHN0cmluZy4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIHN0cmluZ1xuICogLSBzbjogbnVsbC4gVmFsdWUgaXMgaWdub3JlZCBmb3IgdGhpcyB0eXBlXG4gKiAtIHo6IGJvb2xlYW4uIFZhbHVlIG11c3QgYmUgZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgXG4gKiAtIGk6IGludGVnZXIuIFZhbHVlIG11c3QgYmUgYSB2YWxpZCA0LWJ5dGUgaW50ZWdlciBudW1iZXJcbiAqIC0gbDogbG9uZy4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIDgtYnl0ZSBsb25nIG51bWJlclxuICogLSBmOiBmbG9hdDogVmFsdWUgbXVzdCBiZSBhIHZhbGlkIGZsb2F0IG51bWJlclxuICogLSB1OiB1cmkuIFZhbHVlIG11c3QgYmUgYSB2YWxpZCB1bmlmb3JtIHJlc291cmNlIGlkZW50aWZpZXIgc3RyaW5nXG4gKiAtIGNuOiBjb21wb25lbnQgbmFtZS4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIGNvbXBvbmVudCBuYW1lIHN0cmluZ1xuICogLSBpYTogSW50ZWdlcltdLiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBpbnRlZ2Vyc1xuICogLSBpYWw6IExpc3Q8SW50ZWdlcj4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzXG4gKiAtIGxhOiBMb25nW10uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGxvbmcgbnVtYmVyc1xuICogLSBsYWw6IExpc3Q8TG9uZz4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGxvbmcgbnVtYmVyc1xuICogLSBmYTogRmxvYXRbXS4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmxvYXQgbnVtYmVyc1xuICogLSBmYWw6IExpc3Q8RmxvYXQ+LiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBmbG9hdCBudW1iZXJzXG4gKiAtIHNhOiBTdHJpbmdbXS4gVmFsdWUgbXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gVG8gZW1iZWQgYSBjb21tYSBpbnRvIGEgc3RyaW5nLFxuICogZXNjYXBlIGl0IHVzaW5nIFwiXFwsXCJcbiAqIC0gc2FsOiBMaXN0PFN0cmluZz4uIFZhbHVlIG11c3QgYmUgY29tbWEtc2VwYXJhdGVkIHN0cmluZ3MuIFRvIGVtYmVkIGEgY29tbWEgaW50byBhIHN0cmluZyxcbiAqIGVzY2FwZSBpdCB1c2luZyBcIlxcLFwiXG4gKiBGb3IgZXhhbXBsZTogW1sncycsICd2YXJOYW1lMScsICdNeSBTdHJpbmcxJ10sIFsncycsICd2YXJOYW1lMicsICdNeSBTdHJpbmcyJ10sIFsnaWEnLCAnYXJyTmFtZScsICcxLDIsMyw0J11dXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZsYWdzIC0gSW50ZW50IHN0YXJ0dXAtc3BlY2lmaWMgZmxhZ3MgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQuaHRtbFxuICogZm9yIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBmbGFnIHZhbHVlcyAoY29uc3RhbnRzIHN0YXJ0aW5nIHdpdGggRkxBR19BQ1RJVklUWV8pLlxuICogRmxhZyB2YWx1ZXMgY291bGQgYmUgbWVyZ2VkIHVzaW5nIHRoZSBsb2dpY2FsICdvcicgb3BlcmF0aW9uLlxuICogRm9yIGV4YW1wbGUsIDB4MTAyMDAwMDAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHR3byBmbGFnczpcbiAqIDB4MTAwMDAwMDAgYEZMQUdfQUNUSVZJVFlfTkVXX1RBU0tgIHwgMHgwMDIwMDAwMCBgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRGBcbiAqL1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RhcnRBY3Rpdml0eU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydEFjdGl2aXR5IChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgd2FpdCxcbiAgICBzdG9wLFxuICAgIHdpbmRvd2luZ01vZGUsXG4gICAgYWN0aXZpdHlUeXBlLFxuICAgIGRpc3BsYXksXG4gIH0gPSBvcHRzO1xuICBjb25zdCBjbWQgPSBbXG4gICAgJ2FtJywgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSA/ICdzdGFydCcgOiAnc3RhcnQtYWN0aXZpdHknLFxuICBdO1xuICBpZiAoIV8uaXNOaWwodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgaWYgKHdhaXQpIHtcbiAgICBjbWQucHVzaCgnLVcnKTtcbiAgfVxuICBpZiAoc3RvcCkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmICghXy5pc05pbCh3aW5kb3dpbmdNb2RlKSkge1xuICAgIGNtZC5wdXNoKCctLXdpbmRvd2luZ01vZGUnLCB3aW5kb3dpbmdNb2RlKTtcbiAgfVxuICBpZiAoIV8uaXNOaWwoYWN0aXZpdHlUeXBlKSkge1xuICAgIGNtZC5wdXNoKCctLWFjdGl2aXR5VHlwZScsIGFjdGl2aXR5VHlwZSk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKGRpc3BsYXkpKSB7XG4gICAgY21kLnB1c2goJy0tZGlzcGxheScsIGRpc3BsYXkpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJyb2FkY2FzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydhbGwnXSAtIFRoZSB1c2VyIElEIGZvciB3aGljaCB0aGUgYnJvYWRjYXN0IGlzIHNlbnQuXG4gKiBUaGUgYGN1cnJlbnRgIGFsaWFzIGFzc3VtZXMgdGhlIGN1cnJlbnQgdXNlciBJRC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcmVjZWl2ZXJQZXJtaXNzaW9uIC0gUmVxdWlyZSByZWNlaXZlciB0byBob2xkIHRoZSBnaXZlbiBwZXJtaXNzaW9uLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gYWxsb3dCYWNrZ3JvdW5kQWN0aXZpdHlTdGFydHMgW2ZhbHNlXSAtIFdoZXRoZXIgdGhlIHJlY2VpdmVyIG1heVxuICogc3RhcnQgYWN0aXZpdGllcyBldmVuIGlmIGluIHRoZSBiYWNrZ3JvdW5kLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpbnRlbnQgLSBUaGUgbmFtZSBvZiB0aGUgaW50ZW50IHRvIGJyb2FkY2FzdCB0bywgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gQWN0aW9uIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuXG4gKiBTZWUgYWJvdmUgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cblxuLyoqXG4gKiBTZW5kIGEgYnJvYWRjYXN0IGludGVudC5cbiAqXG4gKiBAcGFyYW0ge0Jyb2FkY2FzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIGFjdGl2aXR5XG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJyb2FkY2FzdCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUJyb2FkY2FzdCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHJlY2VpdmVyUGVybWlzc2lvbixcbiAgICBhbGxvd0JhY2tncm91bmRBY3Rpdml0eVN0YXJ0cyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nLCAnYnJvYWRjYXN0J107XG4gIGlmICghXy5pc05pbCh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAocmVjZWl2ZXJQZXJtaXNzaW9uKSB7XG4gICAgY21kLnB1c2goJy0tcmVjZWl2ZXItcGVybWlzc2lvbicsIHJlY2VpdmVyUGVybWlzc2lvbik7XG4gIH1cbiAgaWYgKGFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzKSB7XG4gICAgY21kLnB1c2goJy0tYWxsb3ctYmFja2dyb3VuZC1hY3Rpdml0eS1zdGFydHMnKTtcbiAgfVxuICBjbWQucHVzaCguLi4ocGFyc2VJbnRlbnRTcGVjKG9wdHMpKSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFNlcnZpY2VPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8bnVtYmVyfSB1c2VyIFsnY3VycmVudCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQuXG4gKiBUaGUgYGN1cnJlbnRgIHVzZXIgaWQgaXMgdXNlZCBieSBkZWZhdWx0XG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBmb3JlZ3JvdW5kIFtmYWxzZV0gLSBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdXIgc2VydmljZSBtdXN0IGJlXG4gKiBzdGFydGVkIGFzIGZvcmVncm91bmQgc2VydmljZS4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiB0aGUgQVBJIGxldmVsIG9mIHRoZVxuICogZGV2aWNlIHVuZGVyIHRlc3QgaXMgYmVsb3cgMjYgKEFuZHJvaWQgOCkuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGludGVudCB0byBzdGFydCwgZm9yIGV4YW1wbGVcbiAqIGBjb20uc29tZS5wYWNrYWdlLm5hbWUvLllvdXJTZXJ2aWNlU3ViQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gYWN0aW9uIC0gQWN0aW9uIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGV4dHJhcyAtIE9wdGlvbmFsIGludGVudCBhcmd1bWVudHMuXG4gKiBTZWUgYWJvdmUgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogU3RhcnRzIHRoZSBnaXZlbiBzZXJ2aWNlIGludGVudC5cbiAqXG4gKiBAcGFyYW0ge1N0YXJ0U2VydmljZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RhcnRpbmcgdGhlIHNlcnZpY2VcbiAqIG9yIHJlcXVpcmVkIG9wdGlvbnMgYXJlIG1pc3NpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRTZXJ2aWNlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgZm9yZWdyb3VuZCxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFsnYW0nXTtcbiAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSB7XG4gICAgY21kLnB1c2goJ3N0YXJ0c2VydmljZScpO1xuICB9IGVsc2Uge1xuICAgIGNtZC5wdXNoKGZvcmVncm91bmQgPyAnc3RhcnQtZm9yZWdyb3VuZC1zZXJ2aWNlJyA6ICdzdGFydC1zZXJ2aWNlJyk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BTZXJ2aWNlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB1c2VyIFsnY3VycmVudCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIHJ1bm5pbmcuXG4gKiBUaGUgYGN1cnJlbnRgIHVzZXIgaWQgaXMgdXNlZCBieSBkZWZhdWx0XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGludGVudCB0byBzdG9wLCBmb3IgZXhhbXBsZVxuICogYGNvbS5zb21lLnBhY2thZ2UubmFtZS8uWW91clNlcnZpY2VTdWJDbGFzc05hbWVgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmkgLSBVbmlmaWVkIHJlc291cmNlIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWltZVR5cGUgLSBNaW1lIHR5cGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWRlbnRpZmllciAtIE9wdGlvbmFsIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xBcnJheTxzdHJpbmc+fSBjYXRlZ29yaWVzIC0gT25lIG9yIG1vcmUgY2F0ZWdvcnkgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tcG9uZW50IC0gQ29tcG9uZW50IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFja2FnZSAtIFBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gZXh0cmFzIC0gT3B0aW9uYWwgaW50ZW50IGFyZ3VtZW50cy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmbGFncyAtIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICovXG5cbi8qKlxuICogU3RvcHMgdGhlIGdpdmVuIHNlcnZpY2UgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RvcFNlcnZpY2VPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHN0b3BwaW5nIHRoZSBzZXJ2aWNlXG4gKiBvciByZXF1aXJlZCBvcHRpb25zIGFyZSBtaXNzaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0b3BTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RvcFNlcnZpY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFtcbiAgICAnYW0nLFxuICAgIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgQVBJX0xFVkVMX0FORFJPSURfOCkgPyAnc3RvcHNlcnZpY2UnIDogJ3N0b3Atc2VydmljZSdcbiAgXTtcbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsSUFBSTtBQUM5QixNQUFNQyxxQkFBcUIsR0FBRyxDQUM1QixHQUFHLEVBQUVELGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUNyRCxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUNuRDtBQUNELE1BQU1FLG1CQUFtQixHQUFHLEVBQUU7QUFFOUIsTUFBTUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBRXBCLFNBQVNDLGVBQWUsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ25DLE1BQU07SUFDSkMsTUFBTTtJQUNOQyxNQUFNO0lBQ05DLEdBQUc7SUFDSEMsUUFBUTtJQUNSQyxVQUFVO0lBQ1ZDLFVBQVU7SUFDVkMsU0FBUztJQUNUQyxNQUFNO0lBQ05DO0VBQ0YsQ0FBQyxHQUFHVCxJQUFJO0VBQ1IsTUFBTVUsVUFBVSxHQUFHLEVBQUU7RUFDckIsSUFBSVQsTUFBTSxFQUFFO0lBQ1ZTLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDVixNQUFNLENBQUM7RUFDekI7RUFDQSxJQUFJQyxNQUFNLEVBQUU7SUFDVlEsVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFVCxNQUFNLENBQUM7RUFDL0I7RUFDQSxJQUFJQyxHQUFHLEVBQUU7SUFDUE8sVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFUixHQUFHLENBQUM7RUFDNUI7RUFDQSxJQUFJQyxRQUFRLEVBQUU7SUFDWk0sVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFUCxRQUFRLENBQUM7RUFDakM7RUFDQSxJQUFJLENBQUNRLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDUixVQUFVLENBQUMsRUFBRTtJQUN4QkssVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFTixVQUFVLENBQUM7RUFDbkM7RUFDQSxJQUFJQyxVQUFVLEVBQUU7SUFDZCxJQUFJTSxlQUFDLENBQUNFLE9BQU8sQ0FBQ1IsVUFBVSxDQUFDLEVBQUU7TUFDekJJLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDLEdBQUlDLGVBQUMsQ0FBQ0csT0FBTyxDQUFDVCxVQUFVLENBQUNVLEdBQUcsQ0FBRUMsS0FBSyxJQUFLLENBQUMsSUFBSSxFQUFFQSxLQUFLLENBQUMsQ0FBQyxDQUFFLENBQUM7SUFDM0UsQ0FBQyxNQUFNO01BQ0xQLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRUwsVUFBVSxDQUFDO0lBQ25DO0VBQ0Y7RUFDQSxJQUFJQyxTQUFTLEVBQUU7SUFDYkcsVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFSixTQUFTLENBQUM7RUFDbEM7RUFDQSxJQUFJUCxJQUFJLENBQUNrQixPQUFPLEVBQUU7SUFDaEJSLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRVgsSUFBSSxDQUFDa0IsT0FBTyxDQUFDO0VBQ3JDO0VBQ0EsSUFBSVYsTUFBTSxFQUFFO0lBQ1YsSUFBSSxDQUFDSSxlQUFDLENBQUNFLE9BQU8sQ0FBQ04sTUFBTSxDQUFDLEVBQUU7TUFDdEIsTUFBTSxJQUFJVyxjQUFNLENBQUNDLG9CQUFvQixDQUFFLDJCQUEwQixDQUFDO0lBQ3BFO0lBQ0EsS0FBSyxNQUFNQyxJQUFJLElBQUliLE1BQU0sRUFBRTtNQUN6QixJQUFJLENBQUNJLGVBQUMsQ0FBQ0UsT0FBTyxDQUFDTyxJQUFJLENBQUMsRUFBRTtRQUNwQixNQUFNLElBQUlGLGNBQU0sQ0FBQ0Msb0JBQW9CLENBQUUsbUJBQWtCQyxJQUFLLG9CQUFtQixDQUFDO01BQ3BGO01BQ0EsTUFBTSxDQUFDQyxJQUFJLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxDQUFDLEdBQUdILElBQUk7TUFDL0IsSUFBSSxDQUFDVCxlQUFDLENBQUNhLFFBQVEsQ0FBQzdCLHFCQUFxQixFQUFFMEIsSUFBSSxDQUFDLEVBQUU7UUFDNUMsTUFBTSxJQUFJSCxjQUFNLENBQUNDLG9CQUFvQixDQUNsQyx3QkFBdUJFLElBQUssa0JBQWlCLEdBQzdDLHdDQUF1QzFCLHFCQUFzQixFQUFDLENBQ2hFO01BQ0g7TUFDQSxJQUFJZ0IsZUFBQyxDQUFDYyxPQUFPLENBQUNILEdBQUcsQ0FBQyxJQUFLWCxlQUFDLENBQUNlLFFBQVEsQ0FBQ0osR0FBRyxDQUFDLElBQUlYLGVBQUMsQ0FBQ2dCLElBQUksQ0FBQ0wsR0FBRyxDQUFDLEtBQUssRUFBRyxFQUFFO1FBQzdELE1BQU0sSUFBSUosY0FBTSxDQUFDQyxvQkFBb0IsQ0FDbEMsNEJBQTJCUyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1QsSUFBSSxDQUFFLHFDQUFvQyxDQUN0RjtNQUNIO01BQ0EsSUFBSUMsSUFBSSxLQUFLM0IsaUJBQWlCLEVBQUU7UUFDOUJlLFVBQVUsQ0FBQ0MsSUFBSSxDQUFFLE1BQUtXLElBQUssRUFBQyxFQUFFQyxHQUFHLENBQUM7TUFDcEMsQ0FBQyxNQUFNLElBQUlYLGVBQUMsQ0FBQ21CLFdBQVcsQ0FBQ1AsS0FBSyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxJQUFJTCxjQUFNLENBQUNDLG9CQUFvQixDQUNsQyx5QkFBd0JFLElBQUssU0FBUU8sSUFBSSxDQUFDQyxTQUFTLENBQUNULElBQUksQ0FBRSxlQUFjLEdBQ3hFLDRCQUEyQixDQUM3QjtNQUNILENBQUMsTUFBTTtRQUNMWCxVQUFVLENBQUNDLElBQUksQ0FBRSxNQUFLVyxJQUFLLEVBQUMsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLENBQUM7TUFDM0M7SUFDRjtFQUNGO0VBQ0EsSUFBSWYsS0FBSyxFQUFFO0lBQ1RDLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRUYsS0FBSyxDQUFDO0VBQzlCO0VBQ0EsT0FBT0MsVUFBVTtBQUNuQjtBQWlFQVosUUFBUSxDQUFDa0MsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLENBQUVoQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDNUUsTUFBTTtJQUNKaUMsSUFBSTtJQUNKQyxJQUFJO0lBQ0pDLElBQUk7SUFDSkMsYUFBYTtJQUNiQyxZQUFZO0lBQ1pDO0VBQ0YsQ0FBQyxHQUFHdEMsSUFBSTtFQUNSLE1BQU11QyxHQUFHLEdBQUcsQ0FDVixJQUFJLEVBQUcsT0FBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsV0FBVyxFQUFFLElBQUc1QyxtQkFBbUIsR0FBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQ3hGO0VBQ0QsSUFBSSxDQUFDZSxlQUFDLENBQUNDLEtBQUssQ0FBQ29CLElBQUksQ0FBQyxFQUFFO0lBQ2xCTSxHQUFHLENBQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFc0IsSUFBSSxDQUFDO0VBQzFCO0VBQ0EsSUFBSUMsSUFBSSxFQUFFO0lBQ1JLLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7RUFDQSxJQUFJd0IsSUFBSSxFQUFFO0lBQ1JJLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDaEI7RUFDQSxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDdUIsYUFBYSxDQUFDLEVBQUU7SUFDM0JHLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRXlCLGFBQWEsQ0FBQztFQUM1QztFQUNBLElBQUksQ0FBQ3hCLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDd0IsWUFBWSxDQUFDLEVBQUU7SUFDMUJFLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTBCLFlBQVksQ0FBQztFQUMxQztFQUNBLElBQUksQ0FBQ3pCLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDeUIsT0FBTyxDQUFDLEVBQUU7SUFDckJDLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUUyQixPQUFPLENBQUM7RUFDaEM7RUFDQUMsR0FBRyxDQUFDNUIsSUFBSSxDQUFDLEdBQUlaLGVBQWUsQ0FBQ0MsSUFBSSxDQUFFLENBQUM7RUFDcEMsT0FBTyxNQUFNLElBQUksQ0FBQ3dDLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDSCxHQUFHLENBQUM7QUFDbEMsQ0FBQztBQWlDRHpDLFFBQVEsQ0FBQzZDLGVBQWUsR0FBRyxlQUFlQSxlQUFlLENBQUUzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEUsTUFBTTtJQUNKaUMsSUFBSTtJQUNKVyxrQkFBa0I7SUFDbEJDO0VBQ0YsQ0FBQyxHQUFHN0MsSUFBSTtFQUNSLE1BQU11QyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO0VBQy9CLElBQUksQ0FBQzNCLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDb0IsSUFBSSxDQUFDLEVBQUU7SUFDbEJNLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUVzQixJQUFJLENBQUM7RUFDMUI7RUFDQSxJQUFJVyxrQkFBa0IsRUFBRTtJQUN0QkwsR0FBRyxDQUFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFaUMsa0JBQWtCLENBQUM7RUFDdkQ7RUFDQSxJQUFJQyw2QkFBNkIsRUFBRTtJQUNqQ04sR0FBRyxDQUFDNUIsSUFBSSxDQUFDLG9DQUFvQyxDQUFDO0VBQ2hEO0VBQ0E0QixHQUFHLENBQUM1QixJQUFJLENBQUMsR0FBSVosZUFBZSxDQUFDQyxJQUFJLENBQUUsQ0FBQztFQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDd0MsR0FBRyxDQUFDRSxLQUFLLENBQUNILEdBQUcsQ0FBQztBQUNsQyxDQUFDO0FBZ0NEekMsUUFBUSxDQUFDZ0Qsa0JBQWtCLEdBQUcsZUFBZUEsa0JBQWtCLENBQUU5QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDMUUsTUFBTTtJQUNKaUMsSUFBSTtJQUNKYztFQUNGLENBQUMsR0FBRy9DLElBQUk7RUFDUixNQUFNdUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0VBQ2xCLElBQUksT0FBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsV0FBVyxFQUFFLElBQUc1QyxtQkFBbUIsRUFBRTtJQUN0RDBDLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUM7RUFDMUIsQ0FBQyxNQUFNO0lBQ0w0QixHQUFHLENBQUM1QixJQUFJLENBQUNvQyxVQUFVLEdBQUcsMEJBQTBCLEdBQUcsZUFBZSxDQUFDO0VBQ3JFO0VBQ0EsSUFBSSxDQUFDbkMsZUFBQyxDQUFDQyxLQUFLLENBQUNvQixJQUFJLENBQUMsRUFBRTtJQUNsQk0sR0FBRyxDQUFDNUIsSUFBSSxDQUFDLFFBQVEsRUFBRXNCLElBQUksQ0FBQztFQUMxQjtFQUNBTSxHQUFHLENBQUM1QixJQUFJLENBQUMsR0FBSVosZUFBZSxDQUFDQyxJQUFJLENBQUUsQ0FBQztFQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDd0MsR0FBRyxDQUFDRSxLQUFLLENBQUNILEdBQUcsQ0FBQztBQUNsQyxDQUFDO0FBNEJEekMsUUFBUSxDQUFDa0QsaUJBQWlCLEdBQUcsZUFBZUEsaUJBQWlCLENBQUVoRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDeEUsTUFBTTtJQUNKaUM7RUFDRixDQUFDLEdBQUdqQyxJQUFJO0VBQ1IsTUFBTXVDLEdBQUcsR0FBRyxDQUNWLElBQUksRUFDSCxPQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxXQUFXLEVBQUUsSUFBRzVDLG1CQUFtQixHQUFJLGFBQWEsR0FBRyxjQUFjLENBQ3RGO0VBQ0QsSUFBSSxDQUFDZSxlQUFDLENBQUNDLEtBQUssQ0FBQ29CLElBQUksQ0FBQyxFQUFFO0lBQ2xCTSxHQUFHLENBQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFc0IsSUFBSSxDQUFDO0VBQzFCO0VBQ0FNLEdBQUcsQ0FBQzVCLElBQUksQ0FBQyxHQUFJWixlQUFlLENBQUNDLElBQUksQ0FBRSxDQUFDO0VBQ3BDLE9BQU8sTUFBTSxJQUFJLENBQUN3QyxHQUFHLENBQUNFLEtBQUssQ0FBQ0gsR0FBRyxDQUFDO0FBQ2xDLENBQUM7QUFBQyxlQUlhekMsUUFBUTtBQUFBIn0=
166
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiTk9fVkFMVUVfQVJHX1RZUEUiLCJTVVBQT1JURURfRVhUUkFfVFlQRVMiLCJBUElfTEVWRUxfQU5EUk9JRF84IiwiY29tbWFuZHMiLCJleHBvcnRzIiwicGFyc2VJbnRlbnRTcGVjIiwib3B0cyIsImludGVudCIsImFjdGlvbiIsInVyaSIsIm1pbWVUeXBlIiwiaWRlbnRpZmllciIsImNhdGVnb3JpZXMiLCJjb21wb25lbnQiLCJleHRyYXMiLCJmbGFncyIsInJlc3VsdEFyZ3MiLCJwdXNoIiwiXyIsImlzTmlsIiwiaXNBcnJheSIsImZsYXRNYXAiLCJtYXAiLCJjTmFtZSIsInBhY2thZ2UiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIml0ZW0iLCJ0eXBlIiwia2V5IiwidmFsdWUiLCJpbmNsdWRlcyIsImlzRW1wdHkiLCJpc1N0cmluZyIsInRyaW0iLCJKU09OIiwic3RyaW5naWZ5IiwiaXNVbmRlZmluZWQiLCJtb2JpbGVTdGFydEFjdGl2aXR5IiwidXNlciIsIndhaXQiLCJzdG9wIiwid2luZG93aW5nTW9kZSIsImFjdGl2aXR5VHlwZSIsImRpc3BsYXkiLCJjbWQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsInNoZWxsIiwibW9iaWxlQnJvYWRjYXN0IiwicmVjZWl2ZXJQZXJtaXNzaW9uIiwiYWxsb3dCYWNrZ3JvdW5kQWN0aXZpdHlTdGFydHMiLCJtb2JpbGVTdGFydFNlcnZpY2UiLCJmb3JlZ3JvdW5kIiwibW9iaWxlU3RvcFNlcnZpY2UiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW50ZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgTk9fVkFMVUVfQVJHX1RZUEUgPSAnc24nO1xuY29uc3QgU1VQUE9SVEVEX0VYVFJBX1RZUEVTID0gW1xuICAncycsIE5PX1ZBTFVFX0FSR19UWVBFLCAneicsICdpJywgJ2wnLCAnZicsICd1JywgJ2NuJyxcbiAgJ2lhJywgJ2lhbCcsICdsYScsICdsYWwnLCAnZmEnLCAnZmFsJywgJ3NhJywgJ3NhbCcsXG5dO1xuY29uc3QgQVBJX0xFVkVMX0FORFJPSURfOCA9IDI2O1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiBwYXJzZUludGVudFNwZWMgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaW50ZW50LFxuICAgIGFjdGlvbixcbiAgICB1cmksXG4gICAgbWltZVR5cGUsXG4gICAgaWRlbnRpZmllcixcbiAgICBjYXRlZ29yaWVzLFxuICAgIGNvbXBvbmVudCxcbiAgICBleHRyYXMsXG4gICAgZmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRBcmdzID0gW107XG4gIGlmIChpbnRlbnQpIHtcbiAgICByZXN1bHRBcmdzLnB1c2goaW50ZW50KTtcbiAgfVxuICBpZiAoYWN0aW9uKSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKCctYScsIGFjdGlvbik7XG4gIH1cbiAgaWYgKHVyaSkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLWQnLCB1cmkpO1xuICB9XG4gIGlmIChtaW1lVHlwZSkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLXQnLCBtaW1lVHlwZSk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKGlkZW50aWZpZXIpKSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKCctaScsIGlkZW50aWZpZXIpO1xuICB9XG4gIGlmIChjYXRlZ29yaWVzKSB7XG4gICAgaWYgKF8uaXNBcnJheShjYXRlZ29yaWVzKSkge1xuICAgICAgcmVzdWx0QXJncy5wdXNoKC4uLihfLmZsYXRNYXAoY2F0ZWdvcmllcy5tYXAoKGNOYW1lKSA9PiBbJy1jJywgY05hbWVdKSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0QXJncy5wdXNoKCctYycsIGNhdGVnb3JpZXMpO1xuICAgIH1cbiAgfVxuICBpZiAoY29tcG9uZW50KSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKCctbicsIGNvbXBvbmVudCk7XG4gIH1cbiAgaWYgKG9wdHMucGFja2FnZSkge1xuICAgIHJlc3VsdEFyZ3MucHVzaCgnLXAnLCBvcHRzLnBhY2thZ2UpO1xuICB9XG4gIGlmIChleHRyYXMpIHtcbiAgICBpZiAoIV8uaXNBcnJheShleHRyYXMpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnZXh0cmFzJyBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHRyYXMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEV4dHJhIGFyZ3VtZW50ICcke2l0ZW19JyBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBbdHlwZSwga2V5LCB2YWx1ZV0gPSBpdGVtO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKFNVUFBPUlRFRF9FWFRSQV9UWVBFUywgdHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgRXh0cmEgYXJndW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IGtub3duLiBgICtcbiAgICAgICAgICBgU3VwcG9ydGVkIGludGVudCBhcmd1bWVudCB0eXBlcyBhcmU6ICR7U1VQUE9SVEVEX0VYVFJBX1RZUEVTfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzRW1wdHkoa2V5KSB8fCAoXy5pc1N0cmluZyhrZXkpICYmIF8udHJpbShrZXkpID09PSAnJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgRXh0cmEgYXJndW1lbnQncyBrZXkgaW4gJyR7SlNPTi5zdHJpbmdpZnkoaXRlbSl9JyBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGlkZW50aWZpZXJgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gTk9fVkFMVUVfQVJHX1RZUEUpIHtcbiAgICAgICAgcmVzdWx0QXJncy5wdXNoKGAtLWUke3R5cGV9YCwga2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgSW50ZW50IGFyZ3VtZW50IHR5cGUgJyR7dHlwZX0nIGluICcke0pTT04uc3RyaW5naWZ5KGl0ZW0pfScgcmVxdWlyZXMgYSBgICtcbiAgICAgICAgICBgdmFsaWQgdmFsdWUgdG8gYmUgcHJvdmlkZWRgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRBcmdzLnB1c2goYC0tZSR7dHlwZX1gLCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGZsYWdzKSB7XG4gICAgcmVzdWx0QXJncy5wdXNoKCctZicsIGZsYWdzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0QXJncztcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydEFjdGl2aXR5T3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gdXNlciBbJ2N1cnJlbnQnXSAtIFRoZSB1c2VyIElEIGZvciB3aGljaCB0aGUgc2VydmljZSBpcyBzdGFydGVkLlxuICogVGhlIGBjdXJyZW50YCB1c2VyIGlkIGlzIHVzZWQgYnkgZGVmYXVsdFxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gd2FpdCBbZmFsc2VdIC0gU2V0IGl0IHRvIGB0cnVlYCBpZiB5b3Ugd2FudCB0byBibG9jayB0aGUgbWV0aG9kIGNhbGxcbiAqIHVudGlsIHRoZSBhY3Rpdml0eSBtYW5hZ2VyJ3MgcHJvY2VzcyByZXR1cm5zIHRoZSBjb250cm9sIHRvIHRoZSBzeXN0ZW0uXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBzdG9wIFtmYWxzZV0gLSBTZXQgaXQgdG8gYHRydWVgIHRvIGZvcmNlIHN0b3AgdGhlIHRhcmdldFxuICogYXBwIGJlZm9yZSBzdGFydGluZyB0aGUgYWN0aXZpdHlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHdpbmRvd2luZ01vZGUgLSBUaGUgd2luZG93aW5nIG1vZGUgdG8gbGF1bmNoIHRoZSBhY3Rpdml0eSBpbnRvLlxuICogQ2hlY2sgaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZnJhbWV3b3Jrcy9iYXNlLysvbWFzdGVyL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9XaW5kb3dDb25maWd1cmF0aW9uLmphdmFcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gcG9zc2libGUgd2luZG93aW5nIG1vZGVzIChjb25zdGFudHMgc3RhcnRpbmcgd2l0aCBgV0lORE9XSU5HX01PREVfYCkuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBhY3Rpdml0eVR5cGUgLSBUaGUgYWN0aXZpdHkgdHlwZSB0byBsYXVuY2ggdGhlIGFjdGl2aXR5IGFzLlxuICogQ2hlY2sgaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZnJhbWV3b3Jrcy9iYXNlLysvbWFzdGVyL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9XaW5kb3dDb25maWd1cmF0aW9uLmphdmFcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gcG9zc2libGUgYWN0aXZpdHkgdHlwZXMgKGNvbnN0YW50cyBzdGFydGluZyB3aXRoIGBBQ1RJVklUWV9UWVBFX2ApLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gZGlzcGxheSAtIFRoZSBkaXNwbGF5IGlkZW50aWZpZXIgdG8gbGF1bmNoIHRoZSBhY3Rpdml0eSBpbnRvLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpbnRlbnQgLSBUaGUgbmFtZSBvZiB0aGUgYWN0aXZpdHkgaW50ZW50IHRvIHN0YXJ0LCBmb3IgZXhhbXBsZVxuICogYGNvbS5zb21lLnBhY2thZ2UubmFtZS8uWW91clNlcnZpY2VTdWJDbGFzc05hbWVgXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGFjdGlvbiAtIEFjdGlvbiBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBhY2thZ2UgLSBQYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXJpIC0gVW5pZmllZCByZXNvdXJjZSBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1pbWVUeXBlIC0gTWltZSB0eXBlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkZW50aWZpZXIgLSBPcHRpb25hbCBpZGVudGlmaWVyXG4gKiBAcHJvcGVydHkgez9zdHJpbmd8QXJyYXk8c3RyaW5nPn0gY2F0ZWdvcmllcyAtIE9uZSBvciBtb3JlIGNhdGVnb3J5IG5hbWVzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbXBvbmVudCAtIENvbXBvbmVudCBuYW1lXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xBcnJheTxzdHJpbmc+Pn0gZXh0cmFzIC0gT3B0aW9uYWwgaW50ZW50IGFyZ3VtZW50cy4gTXVzdCBiZSByZXByZXNlbnRlZFxuICogYXMgYXJyYXkgb2YgYXJyYXlzLCB3aGVyZSBlYWNoIHN1YmFycmF5IGl0ZW0gY29udGFpbnMgdHdvIG9yIHRocmVlIHN0cmluZyBpdGVtczpcbiAqIHZhbHVlIHR5cGUsIGtleSBuYW1lIGFuZCB0aGUgdmFsdWUgaXRzZWxmLlxuICogU3VwcG9ydGVkIHZhbHVlIHR5cGVzIGFyZTpcbiAqIC0gczogc3RyaW5nLiBWYWx1ZSBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nXG4gKiAtIHNuOiBudWxsLiBWYWx1ZSBpcyBpZ25vcmVkIGZvciB0aGlzIHR5cGVcbiAqIC0gejogYm9vbGVhbi4gVmFsdWUgbXVzdCBiZSBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWBcbiAqIC0gaTogaW50ZWdlci4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIDQtYnl0ZSBpbnRlZ2VyIG51bWJlclxuICogLSBsOiBsb25nLiBWYWx1ZSBtdXN0IGJlIGEgdmFsaWQgOC1ieXRlIGxvbmcgbnVtYmVyXG4gKiAtIGY6IGZsb2F0OiBWYWx1ZSBtdXN0IGJlIGEgdmFsaWQgZmxvYXQgbnVtYmVyXG4gKiAtIHU6IHVyaS4gVmFsdWUgbXVzdCBiZSBhIHZhbGlkIHVuaWZvcm0gcmVzb3VyY2UgaWRlbnRpZmllciBzdHJpbmdcbiAqIC0gY246IGNvbXBvbmVudCBuYW1lLiBWYWx1ZSBtdXN0IGJlIGEgdmFsaWQgY29tcG9uZW50IG5hbWUgc3RyaW5nXG4gKiAtIGlhOiBJbnRlZ2VyW10uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzXG4gKiAtIGlhbDogTGlzdDxJbnRlZ2VyPi4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnNcbiAqIC0gbGE6IExvbmdbXS4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgbG9uZyBudW1iZXJzXG4gKiAtIGxhbDogTGlzdDxMb25nPi4gVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgbG9uZyBudW1iZXJzXG4gKiAtIGZhOiBGbG9hdFtdLiBWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9mIGNvbW1hLXNlcGFyYXRlZCBmbG9hdCBudW1iZXJzXG4gKiAtIGZhbDogTGlzdDxGbG9hdD4uIFZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGZsb2F0IG51bWJlcnNcbiAqIC0gc2E6IFN0cmluZ1tdLiBWYWx1ZSBtdXN0IGJlIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmdzLiBUbyBlbWJlZCBhIGNvbW1hIGludG8gYSBzdHJpbmcsXG4gKiBlc2NhcGUgaXQgdXNpbmcgXCJcXCxcIlxuICogLSBzYWw6IExpc3Q8U3RyaW5nPi4gVmFsdWUgbXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gVG8gZW1iZWQgYSBjb21tYSBpbnRvIGEgc3RyaW5nLFxuICogZXNjYXBlIGl0IHVzaW5nIFwiXFwsXCJcbiAqIEZvciBleGFtcGxlOiBbWydzJywgJ3Zhck5hbWUxJywgJ015IFN0cmluZzEnXSwgWydzJywgJ3Zhck5hbWUyJywgJ015IFN0cmluZzInXSwgWydpYScsICdhcnJOYW1lJywgJzEsMiwzLDQnXV1cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmxhZ3MgLSBJbnRlbnQgc3RhcnR1cC1zcGVjaWZpYyBmbGFncyBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9jb250ZW50L0ludGVudC5odG1sXG4gKiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZsYWcgdmFsdWVzIChjb25zdGFudHMgc3RhcnRpbmcgd2l0aCBGTEFHX0FDVElWSVRZXykuXG4gKiBGbGFnIHZhbHVlcyBjb3VsZCBiZSBtZXJnZWQgdXNpbmcgdGhlIGxvZ2ljYWwgJ29yJyBvcGVyYXRpb24uXG4gKiBGb3IgZXhhbXBsZSwgMHgxMDIwMDAwMCBpcyB0aGUgY29tYmluYXRpb24gb2YgdHdvIGZsYWdzOlxuICogMHgxMDAwMDAwMCBgRkxBR19BQ1RJVklUWV9ORVdfVEFTS2AgfCAweDAwMjAwMDAwIGBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEYFxuICovXG5cbi8qKlxuICogU3RhcnRzIHRoZSBnaXZlbiBhY3Rpdml0eSBpbnRlbnQuXG4gKlxuICogQHBhcmFtIHtTdGFydEFjdGl2aXR5T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbW1hbmQgb3V0cHV0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBzdGFydGluZyB0aGUgYWN0aXZpdHlcbiAqIG9yIHJlcXVpcmVkIG9wdGlvbnMgYXJlIG1pc3NpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN0YXJ0QWN0aXZpdHkgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICB3YWl0LFxuICAgIHN0b3AsXG4gICAgd2luZG93aW5nTW9kZSxcbiAgICBhY3Rpdml0eVR5cGUsXG4gICAgZGlzcGxheSxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IGNtZCA9IFtcbiAgICAnYW0nLCAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IEFQSV9MRVZFTF9BTkRST0lEXzgpID8gJ3N0YXJ0JyA6ICdzdGFydC1hY3Rpdml0eScsXG4gIF07XG4gIGlmICghXy5pc05pbCh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAod2FpdCkge1xuICAgIGNtZC5wdXNoKCctVycpO1xuICB9XG4gIGlmIChzdG9wKSB7XG4gICAgY21kLnB1c2goJy1TJyk7XG4gIH1cbiAgaWYgKCFfLmlzTmlsKHdpbmRvd2luZ01vZGUpKSB7XG4gICAgY21kLnB1c2goJy0td2luZG93aW5nTW9kZScsIHdpbmRvd2luZ01vZGUpO1xuICB9XG4gIGlmICghXy5pc05pbChhY3Rpdml0eVR5cGUpKSB7XG4gICAgY21kLnB1c2goJy0tYWN0aXZpdHlUeXBlJywgYWN0aXZpdHlUeXBlKTtcbiAgfVxuICBpZiAoIV8uaXNOaWwoZGlzcGxheSkpIHtcbiAgICBjbWQucHVzaCgnLS1kaXNwbGF5JywgZGlzcGxheSk7XG4gIH1cbiAgY21kLnB1c2goLi4uKHBhcnNlSW50ZW50U3BlYyhvcHRzKSkpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQnJvYWRjYXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gdXNlciBbJ2FsbCddIC0gVGhlIHVzZXIgSUQgZm9yIHdoaWNoIHRoZSBicm9hZGNhc3QgaXMgc2VudC5cbiAqIFRoZSBgY3VycmVudGAgYWxpYXMgYXNzdW1lcyB0aGUgY3VycmVudCB1c2VyIElELlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZWNlaXZlclBlcm1pc3Npb24gLSBSZXF1aXJlIHJlY2VpdmVyIHRvIGhvbGQgdGhlIGdpdmVuIHBlcm1pc3Npb24uXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBhbGxvd0JhY2tncm91bmRBY3Rpdml0eVN0YXJ0cyBbZmFsc2VdIC0gV2hldGhlciB0aGUgcmVjZWl2ZXIgbWF5XG4gKiBzdGFydCBhY3Rpdml0aWVzIGV2ZW4gaWYgaW4gdGhlIGJhY2tncm91bmQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGludGVudCAtIFRoZSBuYW1lIG9mIHRoZSBpbnRlbnQgdG8gYnJvYWRjYXN0IHRvLCBmb3IgZXhhbXBsZVxuICogYGNvbS5zb21lLnBhY2thZ2UubmFtZS8uWW91clNlcnZpY2VTdWJDbGFzc05hbWVgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmkgLSBVbmlmaWVkIHJlc291cmNlIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWltZVR5cGUgLSBNaW1lIHR5cGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWRlbnRpZmllciAtIE9wdGlvbmFsIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xBcnJheTxzdHJpbmc+fSBjYXRlZ29yaWVzIC0gT25lIG9yIG1vcmUgY2F0ZWdvcnkgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tcG9uZW50IC0gQ29tcG9uZW50IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFja2FnZSAtIFBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gZXh0cmFzIC0gT3B0aW9uYWwgaW50ZW50IGFyZ3VtZW50cy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmbGFncyAtIEludGVudCBzdGFydHVwLXNwZWNpZmljIGZsYWdzIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLlxuICogU2VlIGFib3ZlIGZvciB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uXG4gKi9cblxuXG4vKipcbiAqIFNlbmQgYSBicm9hZGNhc3QgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7QnJvYWRjYXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbW1hbmQgb3V0cHV0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBzdGFydGluZyB0aGUgYWN0aXZpdHlcbiAqIG9yIHJlcXVpcmVkIG9wdGlvbnMgYXJlIG1pc3NpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlQnJvYWRjYXN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQnJvYWRjYXN0IChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVzZXIsXG4gICAgcmVjZWl2ZXJQZXJtaXNzaW9uLFxuICAgIGFsbG93QmFja2dyb3VuZEFjdGl2aXR5U3RhcnRzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgY21kID0gWydhbScsICdicm9hZGNhc3QnXTtcbiAgaWYgKCFfLmlzTmlsKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGlmIChyZWNlaXZlclBlcm1pc3Npb24pIHtcbiAgICBjbWQucHVzaCgnLS1yZWNlaXZlci1wZXJtaXNzaW9uJywgcmVjZWl2ZXJQZXJtaXNzaW9uKTtcbiAgfVxuICBpZiAoYWxsb3dCYWNrZ3JvdW5kQWN0aXZpdHlTdGFydHMpIHtcbiAgICBjbWQucHVzaCgnLS1hbGxvdy1iYWNrZ3JvdW5kLWFjdGl2aXR5LXN0YXJ0cycpO1xuICB9XG4gIGNtZC5wdXNoKC4uLihwYXJzZUludGVudFNwZWMob3B0cykpKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0U2VydmljZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHVzZXIgWydjdXJyZW50J10gLSBUaGUgdXNlciBJRCBmb3Igd2hpY2ggdGhlIHNlcnZpY2UgaXMgc3RhcnRlZC5cbiAqIFRoZSBgY3VycmVudGAgdXNlciBpZCBpcyB1c2VkIGJ5IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGZvcmVncm91bmQgW2ZhbHNlXSAtIFNldCBpdCB0byBgdHJ1ZWAgaWYgeW91ciBzZXJ2aWNlIG11c3QgYmVcbiAqIHN0YXJ0ZWQgYXMgZm9yZWdyb3VuZCBzZXJ2aWNlLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIHRoZSBBUEkgbGV2ZWwgb2YgdGhlXG4gKiBkZXZpY2UgdW5kZXIgdGVzdCBpcyBiZWxvdyAyNiAoQW5kcm9pZCA4KS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaW50ZW50IC0gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgaW50ZW50IHRvIHN0YXJ0LCBmb3IgZXhhbXBsZVxuICogYGNvbS5zb21lLnBhY2thZ2UubmFtZS8uWW91clNlcnZpY2VTdWJDbGFzc05hbWVgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBhY3Rpb24gLSBBY3Rpb24gbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSB1cmkgLSBVbmlmaWVkIHJlc291cmNlIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWltZVR5cGUgLSBNaW1lIHR5cGVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWRlbnRpZmllciAtIE9wdGlvbmFsIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xBcnJheTxzdHJpbmc+fSBjYXRlZ29yaWVzIC0gT25lIG9yIG1vcmUgY2F0ZWdvcnkgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tcG9uZW50IC0gQ29tcG9uZW50IG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGFja2FnZSAtIFBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gZXh0cmFzIC0gT3B0aW9uYWwgaW50ZW50IGFyZ3VtZW50cy5cbiAqIFNlZSBhYm92ZSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmbGFncyAtIEludGVudCBzdGFydHVwLXNwZWNpZmljIGZsYWdzIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLlxuICogU2VlIGFib3ZlIGZvciB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uXG4gKi9cblxuLyoqXG4gKiBTdGFydHMgdGhlIGdpdmVuIHNlcnZpY2UgaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7U3RhcnRTZXJ2aWNlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbW1hbmQgb3V0cHV0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBzdGFydGluZyB0aGUgc2VydmljZVxuICogb3IgcmVxdWlyZWQgb3B0aW9ucyBhcmUgbWlzc2luZ1xuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydFNlcnZpY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydFNlcnZpY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICBmb3JlZ3JvdW5kLFxuICB9ID0gb3B0cztcbiAgY29uc3QgY21kID0gWydhbSddO1xuICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IEFQSV9MRVZFTF9BTkRST0lEXzgpIHtcbiAgICBjbWQucHVzaCgnc3RhcnRzZXJ2aWNlJyk7XG4gIH0gZWxzZSB7XG4gICAgY21kLnB1c2goZm9yZWdyb3VuZCA/ICdzdGFydC1mb3JlZ3JvdW5kLXNlcnZpY2UnIDogJ3N0YXJ0LXNlcnZpY2UnKTtcbiAgfVxuICBpZiAoIV8uaXNOaWwodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgY21kLnB1c2goLi4uKHBhcnNlSW50ZW50U3BlYyhvcHRzKSkpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RvcFNlcnZpY2VPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IHVzZXIgWydjdXJyZW50J10gLSBUaGUgdXNlciBJRCBmb3Igd2hpY2ggdGhlIHNlcnZpY2UgaXMgcnVubmluZy5cbiAqIFRoZSBgY3VycmVudGAgdXNlciBpZCBpcyB1c2VkIGJ5IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaW50ZW50IC0gVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgaW50ZW50IHRvIHN0b3AsIGZvciBleGFtcGxlXG4gKiBgY29tLnNvbWUucGFja2FnZS5uYW1lLy5Zb3VyU2VydmljZVN1YkNsYXNzTmFtZWAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGFjdGlvbiAtIEFjdGlvbiBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVyaSAtIFVuaWZpZWQgcmVzb3VyY2UgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtaW1lVHlwZSAtIE1pbWUgdHlwZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBpZGVudGlmaWVyIC0gT3B0aW9uYWwgaWRlbnRpZmllclxuICogQHByb3BlcnR5IHs/c3RyaW5nfEFycmF5PHN0cmluZz59IGNhdGVnb3JpZXMgLSBPbmUgb3IgbW9yZSBjYXRlZ29yeSBuYW1lc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21wb25lbnQgLSBDb21wb25lbnQgbmFtZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYWNrYWdlIC0gUGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkge0FycmF5PEFycmF5PHN0cmluZz4+fSBleHRyYXMgLSBPcHRpb25hbCBpbnRlbnQgYXJndW1lbnRzLlxuICogU2VlIGFib3ZlIGZvciB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZsYWdzIC0gU2VlIGFib3ZlIGZvciB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uXG4gKi9cblxuLyoqXG4gKiBTdG9wcyB0aGUgZ2l2ZW4gc2VydmljZSBpbnRlbnQuXG4gKlxuICogQHBhcmFtIHtTdG9wU2VydmljZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgc3RvcHBpbmcgdGhlIHNlcnZpY2VcbiAqIG9yIHJlcXVpcmVkIG9wdGlvbnMgYXJlIG1pc3NpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlU3RvcFNlcnZpY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdG9wU2VydmljZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICB9ID0gb3B0cztcbiAgY29uc3QgY21kID0gW1xuICAgICdhbScsXG4gICAgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCBBUElfTEVWRUxfQU5EUk9JRF84KSA/ICdzdG9wc2VydmljZScgOiAnc3RvcC1zZXJ2aWNlJ1xuICBdO1xuICBpZiAoIV8uaXNOaWwodXNlcikpIHtcbiAgICBjbWQucHVzaCgnLS11c2VyJywgdXNlcik7XG4gIH1cbiAgY21kLnB1c2goLi4uKHBhcnNlSW50ZW50U3BlYyhvcHRzKSkpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFB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