appium-android-driver 5.7.2 → 5.7.3

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 (55) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/index.js +1 -2
  3. package/build/lib/android-helpers.js +2 -26
  4. package/build/lib/android-helpers.js.map +1 -1
  5. package/build/lib/bootstrap.js +1 -8
  6. package/build/lib/bootstrap.js.map +1 -1
  7. package/build/lib/commands/actions.js +1 -2
  8. package/build/lib/commands/actions.js.map +1 -1
  9. package/build/lib/commands/alert.js +1 -2
  10. package/build/lib/commands/alert.js.map +1 -1
  11. package/build/lib/commands/app-management.js +2 -16
  12. package/build/lib/commands/app-management.js.map +1 -1
  13. package/build/lib/commands/context.js +1 -15
  14. package/build/lib/commands/context.js.map +1 -1
  15. package/build/lib/commands/element.js +1 -4
  16. package/build/lib/commands/element.js.map +1 -1
  17. package/build/lib/commands/emu-console.js +1 -3
  18. package/build/lib/commands/emu-console.js.map +1 -1
  19. package/build/lib/commands/file-actions.js +1 -13
  20. package/build/lib/commands/file-actions.js.map +1 -1
  21. package/build/lib/commands/find.js +1 -5
  22. package/build/lib/commands/find.js.map +1 -1
  23. package/build/lib/commands/general.js +1 -14
  24. package/build/lib/commands/general.js.map +1 -1
  25. package/build/lib/commands/index.js +2 -3
  26. package/build/lib/commands/index.js.map +1 -1
  27. package/build/lib/commands/intent.js +1 -5
  28. package/build/lib/commands/intent.js.map +1 -1
  29. package/build/lib/commands/log.js +1 -4
  30. package/build/lib/commands/log.js.map +1 -1
  31. package/build/lib/commands/media-projection.js +1 -5
  32. package/build/lib/commands/media-projection.js.map +1 -1
  33. package/build/lib/commands/network.js +1 -7
  34. package/build/lib/commands/network.js.map +1 -1
  35. package/build/lib/commands/performance.js +1 -8
  36. package/build/lib/commands/performance.js.map +1 -1
  37. package/build/lib/commands/recordscreen.js +1 -3
  38. package/build/lib/commands/recordscreen.js.map +1 -1
  39. package/build/lib/commands/streamscreen.js +4 -9
  40. package/build/lib/commands/streamscreen.js.map +1 -1
  41. package/build/lib/commands/system-bars.js +1 -4
  42. package/build/lib/commands/system-bars.js.map +1 -1
  43. package/build/lib/commands/touch.js +1 -9
  44. package/build/lib/commands/touch.js.map +1 -1
  45. package/build/lib/desired-caps.js +2 -4
  46. package/build/lib/desired-caps.js.map +1 -1
  47. package/build/lib/driver.js +1 -20
  48. package/build/lib/driver.js.map +1 -1
  49. package/build/lib/uiautomator.js +1 -3
  50. package/build/lib/uiautomator.js.map +1 -1
  51. package/build/lib/unlock-helpers.js +1 -3
  52. package/build/lib/unlock-helpers.js.map +1 -1
  53. package/build/lib/webview-helpers.js +1 -13
  54. package/build/lib/webview-helpers.js.map +1 -1
  55. package/package.json +2 -2
@@ -207,7 +207,6 @@ commands.networkSpeed = async function networkSpeed(networkSpeed) {
207
207
  }
208
208
  await this.adb.networkSpeed(networkSpeed);
209
209
  };
210
-
211
210
  commands.sensorSet = async function sensorSet(sensor = {}) {
212
211
  const {
213
212
  sensorType,
@@ -300,4 +299,4 @@ commands.getScreenshot = async function getScreenshot() {
300
299
  Object.assign(extensions, commands, helpers);
301
300
  var _default = extensions;
302
301
  exports.default = _default;
303
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzd2lwZVN0ZXBzUGVyU2VjIiwiZHJhZ1N0ZXBzUGVyU2VjIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImtleWV2ZW50Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImxvZyIsIndhcm4iLCJwcmVzc0tleUNvZGUiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwibG9uZ1ByZXNzS2V5Q29kZSIsImdldE9yaWVudGF0aW9uIiwicGFyYW1zIiwibmF0dXJhbE9yaWVudGF0aW9uIiwib3B0cyIsImFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsInRvVXBwZXJDYXNlIiwic2V0T3JpZW50YXRpb24iLCJmYWtlRmxpY2siLCJ4U3BlZWQiLCJ5U3BlZWQiLCJmYWtlRmxpY2tFbGVtZW50IiwiZWxlbWVudElkIiwieG9mZnNldCIsInlvZmZzZXQiLCJzcGVlZCIsInN3aXBlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJkdXJhdGlvbiIsInRvdWNoQ291bnQiLCJlbElkIiwic3dpcGVPcHRzIiwic3RlcHMiLCJNYXRoIiwicm91bmQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkb1N3aXBlIiwicGluY2hDbG9zZSIsInBlcmNlbnQiLCJwaW5jaE9wdHMiLCJkaXJlY3Rpb24iLCJwaW5jaE9wZW4iLCJmbGljayIsImVsZW1lbnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsImRyYWciLCJkZXN0RWxJZCIsImRyYWdPcHRzIiwiZG9EcmFnIiwibG9jayIsInNlY29uZHMiLCJhZGIiLCJpc05hTiIsImZsb2F0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJCIiwiZGVsYXkiLCJ1bmxvY2siLCJpc0xvY2tlZCIsImlzU2NyZWVuTG9ja2VkIiwiYW5kcm9pZEhlbHBlcnMiLCJjYXBzIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJzZXRMb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic2VuZFRlbG5ldENvbW1hbmQiLCJmaW5nZXJwcmludCIsImZpbmdlcnByaW50SWQiLCJpc0VtdWxhdG9yIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRTTVMiLCJwaG9uZU51bWJlciIsIm1lc3NhZ2UiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic2lnbmFsU3RyZW5naCIsImdzbVZvaWNlIiwic3RhdGUiLCJwb3dlckFDIiwicG93ZXJDYXBhY2l0eSIsImJhdHRlcnlQZXJjZW50IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwic2Vuc29yVHlwZSIsInZhbHVlIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwiLCJsb2NhbEZpbGUiLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwiZXhpc3RzIiwidW5saW5rIiwicG5nRGlyIiwiYW5kcm9pZFNjcmVlbnNob3RQYXRoIiwicG5nIiwicG9zaXgiLCJyZXNvbHZlIiwiY21kIiwic2hlbGwiLCJmaWxlU2l6ZSIsIkVycm9yIiwicHVsbCIsImppbXAiLCJyZWFkIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJleGVjIiwiZXhlY3V0YWJsZSIsImRlZmF1bHRBcmdzIiwiY29uY2F0IiwiZW5jb2RpbmciLCJpc0J1ZmZlciIsImxlbmd0aCIsInRvU3RyaW5nIiwiZ2V0U2NyZWVuc2hvdCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJpbWFnZSIsImUiLCJpbmZvIiwiZXJyIiwic2NyZWVuT3JpZW50YXRpb24iLCJnZXRTY3JlZW5PcmllbnRhdGlvbiIsInJvdGF0ZSIsImdldEJ1ZmZlciIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbWdCdWZmZXIiLCJNSU1FX1BORyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHRlbXBEaXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBqaW1wIGZyb20gJ2ppbXAnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cbmNvbnN0IHN3aXBlU3RlcHNQZXJTZWMgPSAyODtcbmNvbnN0IGRyYWdTdGVwc1BlclNlYyA9IDQwO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmtleWV2ZW50ID0gYXN5bmMgZnVuY3Rpb24ga2V5ZXZlbnQgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgLy8gVE9ETyBkZXByZWNhdGUga2V5ZXZlbnQ7IGN1cnJlbnRseSB3ZCBvbmx5IGltcGxlbWVudHMga2V5ZXZlbnRcbiAgdGhpcy5sb2cud2Fybigna2V5ZXZlbnQgd2lsbCBiZSBkZXByZWNhdGVkIHVzZSBwcmVzc0tleUNvZGUnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJlc3NLZXlDb2RlKGtleWNvZGUsIG1ldGFzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wcmVzc0tleUNvZGUgPSBhc3luYyBmdW5jdGlvbiBwcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzS2V5Q29kZScsIHtrZXljb2RlLCBtZXRhc3RhdGV9KTtcbn07XG5cbmNvbW1hbmRzLmxvbmdQcmVzc0tleUNvZGUgPSBhc3luYyBmdW5jdGlvbiBsb25nUHJlc3NLZXlDb2RlIChrZXljb2RlLCBtZXRhc3RhdGUgPSBudWxsKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdsb25nUHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMuZ2V0T3JpZW50YXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRPcmllbnRhdGlvbiAoKSB7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICBsZXQgb3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcmllbnRhdGlvbicsIHBhcmFtcyk7XG4gIHJldHVybiBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xufTtcblxuY29tbWFuZHMuc2V0T3JpZW50YXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIG9yaWVudGF0aW9uLFxuICAgIG5hdHVyYWxPcmllbnRhdGlvbjogISF0aGlzLm9wdHMuYW5kcm9pZE5hdHVyYWxPcmllbnRhdGlvbixcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGljayA9IGFzeW5jIGZ1bmN0aW9uIGZha2VGbGljayAoeFNwZWVkLCB5U3BlZWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2ZsaWNrJywge3hTcGVlZCwgeVNwZWVkfSk7XG59O1xuXG5jb21tYW5kcy5mYWtlRmxpY2tFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrRWxlbWVudCAoZWxlbWVudElkLCB4b2Zmc2V0LCB5b2Zmc2V0LCBzcGVlZCkge1xuICBsZXQgcGFyYW1zID0ge3hvZmZzZXQsIHlvZmZzZXQsIHNwZWVkLCBlbGVtZW50SWR9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpmbGljaycsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIHN3aXBlIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsSWQpIHtcbiAgaWYgKHN0YXJ0WCA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRYID0gMC41O1xuICB9XG4gIGlmIChzdGFydFkgPT09ICdudWxsJykge1xuICAgIHN0YXJ0WSA9IDAuNTtcbiAgfVxuICBsZXQgc3dpcGVPcHRzID0ge3N0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLFxuICAgICAgICAgICAgICAgICAgIHN0ZXBzOiBNYXRoLnJvdW5kKGR1cmF0aW9uICogc3dpcGVTdGVwc1BlclNlYyl9O1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnRcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZWxJZCkpIHtcbiAgICBzd2lwZU9wdHMuZWxlbWVudElkID0gZWxJZDtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1N3aXBlKHN3aXBlT3B0cyk7XG59O1xuXG5jb21tYW5kcy5kb1N3aXBlID0gYXN5bmMgZnVuY3Rpb24gZG9Td2lwZSAoc3dpcGVPcHRzKSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHN3aXBlT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6c3dpcGUnLCBzd2lwZU9wdHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnBpbmNoQ2xvc2UgPSBhc3luYyBmdW5jdGlvbiBwaW5jaENsb3NlIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnaW4nLFxuICAgIGVsZW1lbnRJZDogZWxJZCxcbiAgICBwZXJjZW50LFxuICAgIHN0ZXBzXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLnBpbmNoT3BlbiA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoT3BlbiAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCBwZXJjZW50LCBzdGVwcywgZWxJZCkge1xuICBsZXQgcGluY2hPcHRzID0ge2RpcmVjdGlvbjogJ291dCcsIGVsZW1lbnRJZDogZWxJZCwgcGVyY2VudCwgc3RlcHN9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwaW5jaCcsIHBpbmNoT3B0cyk7XG59O1xuXG5jb21tYW5kcy5mbGljayA9IGFzeW5jIGZ1bmN0aW9uIGZsaWNrIChlbGVtZW50LCB4U3BlZWQsIHlTcGVlZCwgeE9mZnNldCwgeU9mZnNldCwgc3BlZWQpIHtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBhd2FpdCB0aGlzLmZha2VGbGlja0VsZW1lbnQoZWxlbWVudCwgeE9mZnNldCwgeU9mZnNldCwgc3BlZWQpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrKHhTcGVlZCwgeVNwZWVkKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRyYWcgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxlbWVudElkLCBkZXN0RWxJZCkge1xuICBsZXQgZHJhZ09wdHMgPSB7XG4gICAgZWxlbWVudElkLCBkZXN0RWxJZCwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBkcmFnU3RlcHNQZXJTZWMpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvRHJhZyhkcmFnT3B0cyk7XG5cbn07XG5cbmNvbW1hbmRzLmRvRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRvRHJhZyAoZHJhZ09wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZHJhZ09wdHMuZWxlbWVudElkKSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmRyYWcnLCBkcmFnT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2RyYWcnLCBkcmFnT3B0cyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmxvY2sgPSBhc3luYyBmdW5jdGlvbiBsb2NrIChzZWNvbmRzKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmxvY2soKTtcbiAgaWYgKGlzTmFOKHNlY29uZHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmxvYXRTZWNvbmRzID0gcGFyc2VGbG9hdChzZWNvbmRzKTtcbiAgaWYgKGZsb2F0U2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTAwMCAqIGZsb2F0U2Vjb25kcyk7XG4gIGF3YWl0IHRoaXMudW5sb2NrKCk7XG59O1xuXG5jb21tYW5kcy5pc0xvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzTG9ja2VkICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzU2NyZWVuTG9ja2VkKCk7XG59O1xuXG5jb21tYW5kcy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKCkge1xuICByZXR1cm4gYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBvcGVuTm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcGVuTm90aWZpY2F0aW9uJyk7XG59O1xuXG5jb21tYW5kcy5zZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldExvY2F0aW9uIChsYXRpdHVkZSwgbG9uZ2l0dWRlKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zZW5kVGVsbmV0Q29tbWFuZChgZ2VvIGZpeCAke2xvbmdpdHVkZX0gJHtsYXRpdHVkZX1gKTtcbn07XG5cbmNvbW1hbmRzLmZpbmdlcnByaW50ID0gYXN5bmMgZnVuY3Rpb24gZmluZ2VycHJpbnQgKGZpbmdlcnByaW50SWQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2ZpbmdlcnByaW50IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZmluZ2VycHJpbnQoZmluZ2VycHJpbnRJZCk7XG59O1xuXG5jb21tYW5kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3NlbmRTTVMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5zZW5kU01TKHBob25lTnVtYmVyLCBtZXNzYWdlKTtcbn07XG5cbmNvbW1hbmRzLmdzbUNhbGwgPSBhc3luYyBmdW5jdGlvbiBnc21DYWxsIChwaG9uZU51bWJlciwgYWN0aW9uKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21DYWxsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtQ2FsbChwaG9uZU51bWJlciwgYWN0aW9uKTtcbn07XG5cbmNvbW1hbmRzLmdzbVNpZ25hbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbVNpZ25hbCAoc2lnbmFsU3RyZW5naCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtU2lnbmFsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtU2lnbmFsKHNpZ25hbFN0cmVuZ2gpO1xufTtcblxuY29tbWFuZHMuZ3NtVm9pY2UgPSBhc3luYyBmdW5jdGlvbiBnc21Wb2ljZSAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbVZvaWNlIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtVm9pY2Uoc3RhdGUpO1xufTtcblxuY29tbWFuZHMucG93ZXJBQyA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQUMgKHN0YXRlKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwb3dlckFDIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIucG93ZXJBQyhzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wb3dlckNhcGFjaXR5ID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJDYXBhY2l0eSAoYmF0dGVyeVBlcmNlbnQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQ2FwYWNpdHkgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckNhcGFjaXR5KGJhdHRlcnlQZXJjZW50KTtcbn07XG5cbmNvbW1hbmRzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAobmV0d29ya1NwZWVkKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCduZXR3b3JrU3BlZWQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5zb3JzIHZhbHVlcyBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlbnNvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbnNvclR5cGUgLSBzZW5zb3IgdHlwZSBkZWNsYXJlZCBpbiBhZGIuU0VOU09SU1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdmFsdWUgdG8gc2V0IHRvIHRoZSBzZW5zb3JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gU2Vuc29yXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBzZW5zb3JUeXBlIGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiB2YWx1ZSBmb3IgdGhlIHNlIHNvciBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgZGV2aWNlVHlwZSBpcyBub3QgYW4gZW11bGF0b3JcbiAqL1xuY29tbWFuZHMuc2Vuc29yU2V0ID0gYXN5bmMgZnVuY3Rpb24gc2Vuc29yU2V0IChzZW5zb3IgPSB7fSkge1xuICBjb25zdCB7c2Vuc29yVHlwZSwgdmFsdWV9ID0gc2Vuc29yO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoc2Vuc29yVHlwZSkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnc2Vuc29yVHlwZScgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBpZiAoIXV0aWwuaGFzVmFsdWUodmFsdWUpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3ZhbHVlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdzZW5zb3JTZXQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5zZW5zb3JTZXQoc2Vuc29yVHlwZSwgdmFsdWUpO1xufTtcblxuaGVscGVycy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgbG9jYWxGaWxlID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nLCBzdWZmaXg6ICcucG5nJ30pO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHBuZ0RpciA9IG9wdHMuYW5kcm9pZFNjcmVlbnNob3RQYXRoIHx8ICcvZGF0YS9sb2NhbC90bXAvJztcbiAgICBjb25zdCBwbmcgPSBwYXRoLnBvc2l4LnJlc29sdmUocG5nRGlyLCAnc2NyZWVuc2hvdC5wbmcnKTtcbiAgICBjb25zdCBjbWQgPSBbJy9zeXN0ZW0vYmluL3JtJywgYCR7cG5nfTtgLCAnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJywgcG5nXTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWF3YWl0IGFkYi5maWxlU2l6ZShwbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzaXplIG9mIHRoZSB0YWtlbiBzY3JlZW5zaG90IGVxdWFscyB0byB6ZXJvLicpO1xuICAgIH1cbiAgICBhd2FpdCBhZGIucHVsbChwbmcsIGxvY2FsRmlsZSk7XG4gICAgcmV0dXJuIGF3YWl0IGppbXAucmVhZChsb2NhbEZpbGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsRmlsZSk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0IChhZGIpIHtcbiAgbGV0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBleGVjKGFkYi5leGVjdXRhYmxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFsnZXhlYy1vdXQnLCAnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJ10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2VuY29kaW5nOiAnYmluYXJ5JywgaXNCdWZmZXI6IHRydWV9KTtcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRocm93XG4gIGlmIChjb2RlIHx8IHN0ZGVyci5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmVlbnNob3QgcmV0dXJuZWQgZXJyb3IsIGNvZGU6ICcke2NvZGV9Jywgc3RkZXJyOiAnJHtzdGRlcnIudG9TdHJpbmcoKX0nYCk7XG4gIH1cbiAgLy8gaWYgd2UgZG9uJ3QgZ2V0IGFueXRoaW5nIGF0IGFsbCwgdGhyb3dcbiAgaWYgKCFzdGRvdXQubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTY3JlZW5zaG90IHJldHVybmVkIG5vIGRhdGEnKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBqaW1wLnJlYWQoc3Rkb3V0KTtcbn07XG5cbmNvbW1hbmRzLmdldFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90ICgpIHtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICBsZXQgaW1hZ2UgPSBudWxsO1xuICBpZiAoYXBpTGV2ZWwgPiAyMCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGlzIHNjcmVlbnNob3RpbmcgYXBwcm9hY2ggaXMgd2F5IGZhc3Rlciwgc2luY2UgaXQgcmVxdWlyZXMgbGVzcyBleHRlcm5hbCBjb21tYW5kc1xuICAgICAgLy8gdG8gYmUgZXhlY3V0ZWQuIFVuZm9ydHVuYXRlbHksIGV4ZWMtb3V0IG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSBuZXdlciBBbmRyb2lkL1NESyB2ZXJzaW9ucyAoNS4wIGFuZCBsYXRlcilcbiAgICAgIGltYWdlID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0KHRoaXMuYWRiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSB3aXRoICdhZGIgZXhlYy1vdXQnIGJlY2F1c2Ugb2YgJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAnYWRiIHNoZWxsJyBjYWxsYCk7XG4gICAgfVxuICB9XG4gIGlmICghaW1hZ2UpIHtcbiAgICB0cnkge1xuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSBiZWNhdXNlIG9mICcke2UubWVzc2FnZX0nLiBgICtcbiAgICAgICAgYE1ha2Ugc3VyZSB0aGUgJ0xheW91dFBhcmFtcy5GTEFHX1NFQ1VSRScgaXMgbm90IHNldCBmb3IgYCArXG4gICAgICAgIGB0aGUgY3VycmVudCB2aWV3YDtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAvLyBBbmRyb2lkIGJ1ZyA4NDMzNzQyIC0gcm90YXRlIHNjcmVlbnNob3QgaWYgc2NyZWVuIGlzIHJvdGF0ZWRcbiAgICBsZXQgc2NyZWVuT3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5PcmllbnRhdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IGltYWdlLnJvdGF0ZSgtOTAgKiBzY3JlZW5PcmllbnRhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDb3VsZCBub3Qgcm90YXRlIHNjcmVlbnNob3QgZHVlIHRvIGVycm9yOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZ2V0QnVmZmVyID0gQi5wcm9taXNpZnkoaW1hZ2UuZ2V0QnVmZmVyLCB7Y29udGV4dDogaW1hZ2V9KTtcbiAgY29uc3QgaW1nQnVmZmVyID0gYXdhaXQgZ2V0QnVmZmVyKGppbXAuTUlNRV9QTkcpO1xuICByZXR1cm4gaW1nQnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsRUFBRTtBQUMzQixNQUFNQyxlQUFlLEdBQUcsRUFBRTtB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
302
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzd2lwZVN0ZXBzUGVyU2VjIiwiZHJhZ1N0ZXBzUGVyU2VjIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImtleWV2ZW50Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImxvZyIsIndhcm4iLCJwcmVzc0tleUNvZGUiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwibG9uZ1ByZXNzS2V5Q29kZSIsImdldE9yaWVudGF0aW9uIiwicGFyYW1zIiwibmF0dXJhbE9yaWVudGF0aW9uIiwib3B0cyIsImFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsInRvVXBwZXJDYXNlIiwic2V0T3JpZW50YXRpb24iLCJmYWtlRmxpY2siLCJ4U3BlZWQiLCJ5U3BlZWQiLCJmYWtlRmxpY2tFbGVtZW50IiwiZWxlbWVudElkIiwieG9mZnNldCIsInlvZmZzZXQiLCJzcGVlZCIsInN3aXBlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJkdXJhdGlvbiIsInRvdWNoQ291bnQiLCJlbElkIiwic3dpcGVPcHRzIiwic3RlcHMiLCJNYXRoIiwicm91bmQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkb1N3aXBlIiwicGluY2hDbG9zZSIsInBlcmNlbnQiLCJwaW5jaE9wdHMiLCJkaXJlY3Rpb24iLCJwaW5jaE9wZW4iLCJmbGljayIsImVsZW1lbnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsImRyYWciLCJkZXN0RWxJZCIsImRyYWdPcHRzIiwiZG9EcmFnIiwibG9jayIsInNlY29uZHMiLCJhZGIiLCJpc05hTiIsImZsb2F0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJCIiwiZGVsYXkiLCJ1bmxvY2siLCJpc0xvY2tlZCIsImlzU2NyZWVuTG9ja2VkIiwiYW5kcm9pZEhlbHBlcnMiLCJjYXBzIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJzZXRMb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic2VuZFRlbG5ldENvbW1hbmQiLCJmaW5nZXJwcmludCIsImZpbmdlcnByaW50SWQiLCJpc0VtdWxhdG9yIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRTTVMiLCJwaG9uZU51bWJlciIsIm1lc3NhZ2UiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic2lnbmFsU3RyZW5naCIsImdzbVZvaWNlIiwic3RhdGUiLCJwb3dlckFDIiwicG93ZXJDYXBhY2l0eSIsImJhdHRlcnlQZXJjZW50IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwic2Vuc29yVHlwZSIsInZhbHVlIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwiLCJsb2NhbEZpbGUiLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwiZXhpc3RzIiwidW5saW5rIiwicG5nRGlyIiwiYW5kcm9pZFNjcmVlbnNob3RQYXRoIiwicG5nIiwicG9zaXgiLCJyZXNvbHZlIiwiY21kIiwic2hlbGwiLCJmaWxlU2l6ZSIsIkVycm9yIiwicHVsbCIsImppbXAiLCJyZWFkIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJleGVjIiwiZXhlY3V0YWJsZSIsImRlZmF1bHRBcmdzIiwiY29uY2F0IiwiZW5jb2RpbmciLCJpc0J1ZmZlciIsImxlbmd0aCIsInRvU3RyaW5nIiwiZ2V0U2NyZWVuc2hvdCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJpbWFnZSIsImUiLCJpbmZvIiwiZXJyIiwic2NyZWVuT3JpZW50YXRpb24iLCJnZXRTY3JlZW5PcmllbnRhdGlvbiIsInJvdGF0ZSIsImdldEJ1ZmZlciIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbWdCdWZmZXIiLCJNSU1FX1BORyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHRlbXBEaXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBqaW1wIGZyb20gJ2ppbXAnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cbmNvbnN0IHN3aXBlU3RlcHNQZXJTZWMgPSAyODtcbmNvbnN0IGRyYWdTdGVwc1BlclNlYyA9IDQwO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmtleWV2ZW50ID0gYXN5bmMgZnVuY3Rpb24ga2V5ZXZlbnQgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgLy8gVE9ETyBkZXByZWNhdGUga2V5ZXZlbnQ7IGN1cnJlbnRseSB3ZCBvbmx5IGltcGxlbWVudHMga2V5ZXZlbnRcbiAgdGhpcy5sb2cud2Fybigna2V5ZXZlbnQgd2lsbCBiZSBkZXByZWNhdGVkIHVzZSBwcmVzc0tleUNvZGUnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJlc3NLZXlDb2RlKGtleWNvZGUsIG1ldGFzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wcmVzc0tleUNvZGUgPSBhc3luYyBmdW5jdGlvbiBwcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzS2V5Q29kZScsIHtrZXljb2RlLCBtZXRhc3RhdGV9KTtcbn07XG5cbmNvbW1hbmRzLmxvbmdQcmVzc0tleUNvZGUgPSBhc3luYyBmdW5jdGlvbiBsb25nUHJlc3NLZXlDb2RlIChrZXljb2RlLCBtZXRhc3RhdGUgPSBudWxsKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdsb25nUHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMuZ2V0T3JpZW50YXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRPcmllbnRhdGlvbiAoKSB7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICBsZXQgb3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcmllbnRhdGlvbicsIHBhcmFtcyk7XG4gIHJldHVybiBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xufTtcblxuY29tbWFuZHMuc2V0T3JpZW50YXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIG9yaWVudGF0aW9uLFxuICAgIG5hdHVyYWxPcmllbnRhdGlvbjogISF0aGlzLm9wdHMuYW5kcm9pZE5hdHVyYWxPcmllbnRhdGlvbixcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGljayA9IGFzeW5jIGZ1bmN0aW9uIGZha2VGbGljayAoeFNwZWVkLCB5U3BlZWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2ZsaWNrJywge3hTcGVlZCwgeVNwZWVkfSk7XG59O1xuXG5jb21tYW5kcy5mYWtlRmxpY2tFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrRWxlbWVudCAoZWxlbWVudElkLCB4b2Zmc2V0LCB5b2Zmc2V0LCBzcGVlZCkge1xuICBsZXQgcGFyYW1zID0ge3hvZmZzZXQsIHlvZmZzZXQsIHNwZWVkLCBlbGVtZW50SWR9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpmbGljaycsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zd2lwZSA9IGFzeW5jIGZ1bmN0aW9uIHN3aXBlIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsSWQpIHtcbiAgaWYgKHN0YXJ0WCA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRYID0gMC41O1xuICB9XG4gIGlmIChzdGFydFkgPT09ICdudWxsJykge1xuICAgIHN0YXJ0WSA9IDAuNTtcbiAgfVxuICBsZXQgc3dpcGVPcHRzID0ge3N0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLFxuICAgICAgICAgICAgICAgICAgIHN0ZXBzOiBNYXRoLnJvdW5kKGR1cmF0aW9uICogc3dpcGVTdGVwc1BlclNlYyl9O1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnRcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZWxJZCkpIHtcbiAgICBzd2lwZU9wdHMuZWxlbWVudElkID0gZWxJZDtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1N3aXBlKHN3aXBlT3B0cyk7XG59O1xuXG5jb21tYW5kcy5kb1N3aXBlID0gYXN5bmMgZnVuY3Rpb24gZG9Td2lwZSAoc3dpcGVPcHRzKSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHN3aXBlT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6c3dpcGUnLCBzd2lwZU9wdHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnBpbmNoQ2xvc2UgPSBhc3luYyBmdW5jdGlvbiBwaW5jaENsb3NlIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnaW4nLFxuICAgIGVsZW1lbnRJZDogZWxJZCxcbiAgICBwZXJjZW50LFxuICAgIHN0ZXBzXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLnBpbmNoT3BlbiA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoT3BlbiAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCBwZXJjZW50LCBzdGVwcywgZWxJZCkge1xuICBsZXQgcGluY2hPcHRzID0ge2RpcmVjdGlvbjogJ291dCcsIGVsZW1lbnRJZDogZWxJZCwgcGVyY2VudCwgc3RlcHN9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpwaW5jaCcsIHBpbmNoT3B0cyk7XG59O1xuXG5jb21tYW5kcy5mbGljayA9IGFzeW5jIGZ1bmN0aW9uIGZsaWNrIChlbGVtZW50LCB4U3BlZWQsIHlTcGVlZCwgeE9mZnNldCwgeU9mZnNldCwgc3BlZWQpIHtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBhd2FpdCB0aGlzLmZha2VGbGlja0VsZW1lbnQoZWxlbWVudCwgeE9mZnNldCwgeU9mZnNldCwgc3BlZWQpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrKHhTcGVlZCwgeVNwZWVkKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRyYWcgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxlbWVudElkLCBkZXN0RWxJZCkge1xuICBsZXQgZHJhZ09wdHMgPSB7XG4gICAgZWxlbWVudElkLCBkZXN0RWxJZCwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBkcmFnU3RlcHNQZXJTZWMpXG4gIH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvRHJhZyhkcmFnT3B0cyk7XG5cbn07XG5cbmNvbW1hbmRzLmRvRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRvRHJhZyAoZHJhZ09wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZHJhZ09wdHMuZWxlbWVudElkKSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmRyYWcnLCBkcmFnT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2RyYWcnLCBkcmFnT3B0cyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmxvY2sgPSBhc3luYyBmdW5jdGlvbiBsb2NrIChzZWNvbmRzKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmxvY2soKTtcbiAgaWYgKGlzTmFOKHNlY29uZHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmxvYXRTZWNvbmRzID0gcGFyc2VGbG9hdChzZWNvbmRzKTtcbiAgaWYgKGZsb2F0U2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTAwMCAqIGZsb2F0U2Vjb25kcyk7XG4gIGF3YWl0IHRoaXMudW5sb2NrKCk7XG59O1xuXG5jb21tYW5kcy5pc0xvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzTG9ja2VkICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzU2NyZWVuTG9ja2VkKCk7XG59O1xuXG5jb21tYW5kcy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKCkge1xuICByZXR1cm4gYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBvcGVuTm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdvcGVuTm90aWZpY2F0aW9uJyk7XG59O1xuXG5jb21tYW5kcy5zZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldExvY2F0aW9uIChsYXRpdHVkZSwgbG9uZ2l0dWRlKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zZW5kVGVsbmV0Q29tbWFuZChgZ2VvIGZpeCAke2xvbmdpdHVkZX0gJHtsYXRpdHVkZX1gKTtcbn07XG5cbmNvbW1hbmRzLmZpbmdlcnByaW50ID0gYXN5bmMgZnVuY3Rpb24gZmluZ2VycHJpbnQgKGZpbmdlcnByaW50SWQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2ZpbmdlcnByaW50IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZmluZ2VycHJpbnQoZmluZ2VycHJpbnRJZCk7XG59O1xuXG5jb21tYW5kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3NlbmRTTVMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5zZW5kU01TKHBob25lTnVtYmVyLCBtZXNzYWdlKTtcbn07XG5cbmNvbW1hbmRzLmdzbUNhbGwgPSBhc3luYyBmdW5jdGlvbiBnc21DYWxsIChwaG9uZU51bWJlciwgYWN0aW9uKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21DYWxsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtQ2FsbChwaG9uZU51bWJlciwgYWN0aW9uKTtcbn07XG5cbmNvbW1hbmRzLmdzbVNpZ25hbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbVNpZ25hbCAoc2lnbmFsU3RyZW5naCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtU2lnbmFsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtU2lnbmFsKHNpZ25hbFN0cmVuZ2gpO1xufTtcblxuY29tbWFuZHMuZ3NtVm9pY2UgPSBhc3luYyBmdW5jdGlvbiBnc21Wb2ljZSAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbVZvaWNlIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtVm9pY2Uoc3RhdGUpO1xufTtcblxuY29tbWFuZHMucG93ZXJBQyA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQUMgKHN0YXRlKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwb3dlckFDIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIucG93ZXJBQyhzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wb3dlckNhcGFjaXR5ID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJDYXBhY2l0eSAoYmF0dGVyeVBlcmNlbnQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQ2FwYWNpdHkgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckNhcGFjaXR5KGJhdHRlcnlQZXJjZW50KTtcbn07XG5cbmNvbW1hbmRzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAobmV0d29ya1NwZWVkKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCduZXR3b3JrU3BlZWQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5zb3JzIHZhbHVlcyBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlbnNvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbnNvclR5cGUgLSBzZW5zb3IgdHlwZSBkZWNsYXJlZCBpbiBhZGIuU0VOU09SU1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdmFsdWUgdG8gc2V0IHRvIHRoZSBzZW5zb3JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gU2Vuc29yXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBzZW5zb3JUeXBlIGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiB2YWx1ZSBmb3IgdGhlIHNlIHNvciBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgZGV2aWNlVHlwZSBpcyBub3QgYW4gZW11bGF0b3JcbiAqL1xuY29tbWFuZHMuc2Vuc29yU2V0ID0gYXN5bmMgZnVuY3Rpb24gc2Vuc29yU2V0IChzZW5zb3IgPSB7fSkge1xuICBjb25zdCB7c2Vuc29yVHlwZSwgdmFsdWV9ID0gc2Vuc29yO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoc2Vuc29yVHlwZSkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnc2Vuc29yVHlwZScgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBpZiAoIXV0aWwuaGFzVmFsdWUodmFsdWUpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3ZhbHVlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdzZW5zb3JTZXQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5zZW5zb3JTZXQoc2Vuc29yVHlwZSwgdmFsdWUpO1xufTtcblxuaGVscGVycy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgbG9jYWxGaWxlID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nLCBzdWZmaXg6ICcucG5nJ30pO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHBuZ0RpciA9IG9wdHMuYW5kcm9pZFNjcmVlbnNob3RQYXRoIHx8ICcvZGF0YS9sb2NhbC90bXAvJztcbiAgICBjb25zdCBwbmcgPSBwYXRoLnBvc2l4LnJlc29sdmUocG5nRGlyLCAnc2NyZWVuc2hvdC5wbmcnKTtcbiAgICBjb25zdCBjbWQgPSBbJy9zeXN0ZW0vYmluL3JtJywgYCR7cG5nfTtgLCAnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJywgcG5nXTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWF3YWl0IGFkYi5maWxlU2l6ZShwbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzaXplIG9mIHRoZSB0YWtlbiBzY3JlZW5zaG90IGVxdWFscyB0byB6ZXJvLicpO1xuICAgIH1cbiAgICBhd2FpdCBhZGIucHVsbChwbmcsIGxvY2FsRmlsZSk7XG4gICAgcmV0dXJuIGF3YWl0IGppbXAucmVhZChsb2NhbEZpbGUpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsRmlsZSk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0IChhZGIpIHtcbiAgbGV0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBleGVjKGFkYi5leGVjdXRhYmxlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFsnZXhlYy1vdXQnLCAnL3N5c3RlbS9iaW4vc2NyZWVuY2FwJywgJy1wJ10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2VuY29kaW5nOiAnYmluYXJ5JywgaXNCdWZmZXI6IHRydWV9KTtcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRocm93XG4gIGlmIChjb2RlIHx8IHN0ZGVyci5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNjcmVlbnNob3QgcmV0dXJuZWQgZXJyb3IsIGNvZGU6ICcke2NvZGV9Jywgc3RkZXJyOiAnJHtzdGRlcnIudG9TdHJpbmcoKX0nYCk7XG4gIH1cbiAgLy8gaWYgd2UgZG9uJ3QgZ2V0IGFueXRoaW5nIGF0IGFsbCwgdGhyb3dcbiAgaWYgKCFzdGRvdXQubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTY3JlZW5zaG90IHJldHVybmVkIG5vIGRhdGEnKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBqaW1wLnJlYWQoc3Rkb3V0KTtcbn07XG5cbmNvbW1hbmRzLmdldFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90ICgpIHtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICBsZXQgaW1hZ2UgPSBudWxsO1xuICBpZiAoYXBpTGV2ZWwgPiAyMCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGlzIHNjcmVlbnNob3RpbmcgYXBwcm9hY2ggaXMgd2F5IGZhc3Rlciwgc2luY2UgaXQgcmVxdWlyZXMgbGVzcyBleHRlcm5hbCBjb21tYW5kc1xuICAgICAgLy8gdG8gYmUgZXhlY3V0ZWQuIFVuZm9ydHVuYXRlbHksIGV4ZWMtb3V0IG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSBuZXdlciBBbmRyb2lkL1NESyB2ZXJzaW9ucyAoNS4wIGFuZCBsYXRlcilcbiAgICAgIGltYWdlID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0KHRoaXMuYWRiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSB3aXRoICdhZGIgZXhlYy1vdXQnIGJlY2F1c2Ugb2YgJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAnYWRiIHNoZWxsJyBjYWxsYCk7XG4gICAgfVxuICB9XG4gIGlmICghaW1hZ2UpIHtcbiAgICB0cnkge1xuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSBiZWNhdXNlIG9mICcke2UubWVzc2FnZX0nLiBgICtcbiAgICAgICAgYE1ha2Ugc3VyZSB0aGUgJ0xheW91dFBhcmFtcy5GTEFHX1NFQ1VSRScgaXMgbm90IHNldCBmb3IgYCArXG4gICAgICAgIGB0aGUgY3VycmVudCB2aWV3YDtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAvLyBBbmRyb2lkIGJ1ZyA4NDMzNzQyIC0gcm90YXRlIHNjcmVlbnNob3QgaWYgc2NyZWVuIGlzIHJvdGF0ZWRcbiAgICBsZXQgc2NyZWVuT3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5PcmllbnRhdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IGltYWdlLnJvdGF0ZSgtOTAgKiBzY3JlZW5PcmllbnRhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDb3VsZCBub3Qgcm90YXRlIHNjcmVlbnNob3QgZHVlIHRvIGVycm9yOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZ2V0QnVmZmVyID0gQi5wcm9taXNpZnkoaW1hZ2UuZ2V0QnVmZmVyLCB7Y29udGV4dDogaW1hZ2V9KTtcbiAgY29uc3QgaW1nQnVmZmVyID0gYXdhaXQgZ2V0QnVmZmVyKGppbXAuTUlNRV9QTkcpO1xuICByZXR1cm4gaW1nQnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsRUFBRTtBQUMzQixNQUFNQyxlQUFlLEdBQUcsRUFBRTtB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
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","names":["swipeStepsPerSec","dragStepsPerSec","commands","helpers","extensions","keyevent","keycode","metastate","log","warn","pressKeyCode","bootstrap","sendAction","longPressKeyCode","getOrientation","params","naturalOrientation","opts","androidNaturalOrientation","orientation","toUpperCase","setOrientation","fakeFlick","xSpeed","ySpeed","fakeFlickElement","elementId","xoffset","yoffset","speed","swipe","startX","startY","endX","endY","duration","touchCount","elId","swipeOpts","steps","Math","round","util","hasValue","doSwipe","pinchClose","percent","pinchOpts","direction","pinchOpen","flick","element","xOffset","yOffset","drag","destElId","dragOpts","doDrag","lock","seconds","adb","isNaN","floatSeconds","parseFloat","B","delay","unlock","isLocked","isScreenLocked","androidHelpers","caps","openNotifications","setLocation","latitude","longitude","sendTelnetCommand","fingerprint","fingerprintId","isEmulator","errorAndThrow","sendSMS","phoneNumber","message","gsmCall","action","gsmSignal","signalStrengh","gsmVoice","state","powerAC","powerCapacity","batteryPercent","networkSpeed","sensorSet","sensor","sensorType","value","getScreenshotDataWithAdbShell","localFile","tempDir","path","prefix","suffix","fs","exists","unlink","pngDir","androidScreenshotPath","png","posix","resolve","cmd","shell","fileSize","Error","pull","jimp","read","getScreenshotDataWithAdbExecOut","stdout","stderr","code","exec","executable","defaultArgs","concat","encoding","isBuffer","length","toString","getScreenshot","apiLevel","getApiLevel","image","e","info","err","screenOrientation","getScreenOrientation","rotate","getBuffer","promisify","context","imgBuffer","MIME_PNG","Object","assign"],"sources":["../../../lib/commands/actions.js"],"sourcesContent":["import androidHelpers from '../android-helpers';\nimport { fs, util, tempDir} from '@appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport jimp from 'jimp';\nimport { exec } from 'teen_process';\n\nconst swipeStepsPerSec = 28;\nconst dragStepsPerSec = 40;\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keyevent = async function keyevent (keycode, metastate = null) {\n // TODO deprecate keyevent; currently wd only implements keyevent\n this.log.warn('keyevent will be deprecated use pressKeyCode');\n return await this.pressKeyCode(keycode, metastate);\n};\n\ncommands.pressKeyCode = async function pressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('pressKeyCode', {keycode, metastate});\n};\n\ncommands.longPressKeyCode = async function longPressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('longPressKeyCode', {keycode, metastate});\n};\n\ncommands.getOrientation = async function getOrientation () {\n let params = {\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n let orientation = await this.bootstrap.sendAction('orientation', params);\n return orientation.toUpperCase();\n};\n\ncommands.setOrientation = async function setOrientation (orientation) {\n orientation = orientation.toUpperCase();\n let params = {\n orientation,\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n return await this.bootstrap.sendAction('orientation', params);\n};\n\ncommands.fakeFlick = async function fakeFlick (xSpeed, ySpeed) {\n return await this.bootstrap.sendAction('flick', {xSpeed, ySpeed});\n};\n\ncommands.fakeFlickElement = async function fakeFlickElement (elementId, xoffset, yoffset, speed) {\n let params = {xoffset, yoffset, speed, elementId};\n return await this.bootstrap.sendAction('element:flick', params);\n};\n\ncommands.swipe = async function swipe (startX, startY, endX, endY, duration, touchCount, elId) {\n if (startX === 'null') {\n startX = 0.5;\n }\n if (startY === 'null') {\n startY = 0.5;\n }\n let swipeOpts = {startX, startY, endX, endY,\n steps: Math.round(duration * swipeStepsPerSec)};\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int\n if (util.hasValue(elId)) {\n swipeOpts.elementId = elId;\n }\n return await this.doSwipe(swipeOpts);\n};\n\ncommands.doSwipe = async function doSwipe (swipeOpts) {\n if (util.hasValue(swipeOpts.elementId)) {\n return await this.bootstrap.sendAction('element:swipe', swipeOpts);\n } else {\n return await this.bootstrap.sendAction('swipe', swipeOpts);\n }\n};\n\ncommands.pinchClose = async function pinchClose (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {\n direction: 'in',\n elementId: elId,\n percent,\n steps\n };\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.pinchOpen = async function pinchOpen (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {direction: 'out', elementId: elId, percent, steps};\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.flick = async function flick (element, xSpeed, ySpeed, xOffset, yOffset, speed) {\n if (element) {\n await this.fakeFlickElement(element, xOffset, yOffset, speed);\n } else {\n await this.fakeFlick(xSpeed, ySpeed);\n }\n};\n\ncommands.drag = async function drag (startX, startY, endX, endY, duration, touchCount, elementId, destElId) {\n let dragOpts = {\n elementId, destElId, startX, startY, endX, endY,\n steps: Math.round(duration * dragStepsPerSec)\n };\n return await this.doDrag(dragOpts);\n\n};\n\ncommands.doDrag = async function doDrag (dragOpts) {\n if (util.hasValue(dragOpts.elementId)) {\n return await this.bootstrap.sendAction('element:drag', dragOpts);\n } else {\n return await this.bootstrap.sendAction('drag', dragOpts);\n }\n};\n\ncommands.lock = async function lock (seconds) {\n await this.adb.lock();\n if (isNaN(seconds)) {\n return;\n }\n\n const floatSeconds = parseFloat(seconds);\n if (floatSeconds <= 0) {\n return;\n }\n await B.delay(1000 * floatSeconds);\n await this.unlock();\n};\n\ncommands.isLocked = async function isLocked () {\n return await this.adb.isScreenLocked();\n};\n\ncommands.unlock = async function unlock () {\n return await androidHelpers.unlock(this, this.adb, this.caps);\n};\n\ncommands.openNotifications = async function openNotifications () {\n return await this.bootstrap.sendAction('openNotification');\n};\n\ncommands.setLocation = async function setLocation (latitude, longitude) {\n return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);\n};\n\ncommands.fingerprint = async function fingerprint (fingerprintId) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('fingerprint method is only available for emulators');\n }\n await this.adb.fingerprint(fingerprintId);\n};\n\ncommands.sendSMS = async function sendSMS (phoneNumber, message) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sendSMS method is only available for emulators');\n }\n await this.adb.sendSMS(phoneNumber, message);\n};\n\ncommands.gsmCall = async function gsmCall (phoneNumber, action) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmCall method is only available for emulators');\n }\n await this.adb.gsmCall(phoneNumber, action);\n};\n\ncommands.gsmSignal = async function gsmSignal (signalStrengh) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmSignal method is only available for emulators');\n }\n await this.adb.gsmSignal(signalStrengh);\n};\n\ncommands.gsmVoice = async function gsmVoice (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmVoice method is only available for emulators');\n }\n await this.adb.gsmVoice(state);\n};\n\ncommands.powerAC = async function powerAC (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerAC method is only available for emulators');\n }\n await this.adb.powerAC(state);\n};\n\ncommands.powerCapacity = async function powerCapacity (batteryPercent) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerCapacity method is only available for emulators');\n }\n await this.adb.powerCapacity(batteryPercent);\n};\n\ncommands.networkSpeed = async function networkSpeed (networkSpeed) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('networkSpeed method is only available for emulators');\n }\n await this.adb.networkSpeed(networkSpeed);\n};\n\n/**\n * Emulate sensors values on the connected emulator.\n *\n * @typedef {Object} Sensor\n * @property {string} sensorType - sensor type declared in adb.SENSORS\n * @property {string} value - value to set to the sensor\n *\n * @param {Object} Sensor\n * @throws {Error} - If sensorType is not defined\n * @throws {Error} - If value for the se sor is not defined\n * @throws {Error} - If deviceType is not an emulator\n */\ncommands.sensorSet = async function sensorSet (sensor = {}) {\n const {sensorType, value} = sensor;\n if (!util.hasValue(sensorType)) {\n this.log.errorAndThrow(`'sensorType' argument is required`);\n }\n if (!util.hasValue(value)) {\n this.log.errorAndThrow(`'value' argument is required`);\n }\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sensorSet method is only available for emulators');\n }\n await this.adb.sensorSet(sensorType, value);\n};\n\nhelpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell (adb, opts) {\n const localFile = await tempDir.path({prefix: 'appium', suffix: '.png'});\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n try {\n const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';\n const png = path.posix.resolve(pngDir, 'screenshot.png');\n const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];\n await adb.shell(cmd);\n if (!await adb.fileSize(png)) {\n throw new Error('The size of the taken screenshot equals to zero.');\n }\n await adb.pull(png, localFile);\n return await jimp.read(localFile);\n } finally {\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n }\n};\n\nhelpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut (adb) {\n let {stdout, stderr, code} = await exec(adb.executable.path,\n adb.executable.defaultArgs\n .concat(['exec-out', '/system/bin/screencap', '-p']),\n {encoding: 'binary', isBuffer: true});\n // if there is an error, throw\n if (code || stderr.length) {\n throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);\n }\n // if we don't get anything at all, throw\n if (!stdout.length) {\n throw new Error('Screenshot returned no data');\n }\n\n return await jimp.read(stdout);\n};\n\ncommands.getScreenshot = async function getScreenshot () {\n const apiLevel = await this.adb.getApiLevel();\n let image = null;\n if (apiLevel > 20) {\n try {\n // This screenshoting approach is way faster, since it requires less external commands\n // to be executed. Unfortunately, exec-out option is only supported by newer Android/SDK versions (5.0 and later)\n image = await this.getScreenshotDataWithAdbExecOut(this.adb);\n } catch (e) {\n this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` +\n `Defaulting to 'adb shell' call`);\n }\n }\n if (!image) {\n try {\n image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);\n } catch (e) {\n const err = `Cannot get screenshot data because of '${e.message}'. ` +\n `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` +\n `the current view`;\n this.log.errorAndThrow(err);\n }\n }\n if (apiLevel < 23) {\n // Android bug 8433742 - rotate screenshot if screen is rotated\n let screenOrientation = await this.adb.getScreenOrientation();\n try {\n image = await image.rotate(-90 * screenOrientation);\n } catch (err) {\n this.log.warn(`Could not rotate screenshot due to error: ${err}`);\n }\n }\n const getBuffer = B.promisify(image.getBuffer, {context: image});\n const imgBuffer = await getBuffer(jimp.MIME_PNG);\n return imgBuffer.toString('base64');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","names":["swipeStepsPerSec","dragStepsPerSec","commands","helpers","extensions","keyevent","keycode","metastate","log","warn","pressKeyCode","bootstrap","sendAction","longPressKeyCode","getOrientation","params","naturalOrientation","opts","androidNaturalOrientation","orientation","toUpperCase","setOrientation","fakeFlick","xSpeed","ySpeed","fakeFlickElement","elementId","xoffset","yoffset","speed","swipe","startX","startY","endX","endY","duration","touchCount","elId","swipeOpts","steps","Math","round","util","hasValue","doSwipe","pinchClose","percent","pinchOpts","direction","pinchOpen","flick","element","xOffset","yOffset","drag","destElId","dragOpts","doDrag","lock","seconds","adb","isNaN","floatSeconds","parseFloat","B","delay","unlock","isLocked","isScreenLocked","androidHelpers","caps","openNotifications","setLocation","latitude","longitude","sendTelnetCommand","fingerprint","fingerprintId","isEmulator","errorAndThrow","sendSMS","phoneNumber","message","gsmCall","action","gsmSignal","signalStrengh","gsmVoice","state","powerAC","powerCapacity","batteryPercent","networkSpeed","sensorSet","sensor","sensorType","value","getScreenshotDataWithAdbShell","localFile","tempDir","path","prefix","suffix","fs","exists","unlink","pngDir","androidScreenshotPath","png","posix","resolve","cmd","shell","fileSize","Error","pull","jimp","read","getScreenshotDataWithAdbExecOut","stdout","stderr","code","exec","executable","defaultArgs","concat","encoding","isBuffer","length","toString","getScreenshot","apiLevel","getApiLevel","image","e","info","err","screenOrientation","getScreenOrientation","rotate","getBuffer","promisify","context","imgBuffer","MIME_PNG","Object","assign"],"sources":["../../../lib/commands/actions.js"],"sourcesContent":["import androidHelpers from '../android-helpers';\nimport { fs, util, tempDir} from '@appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport jimp from 'jimp';\nimport { exec } from 'teen_process';\n\nconst swipeStepsPerSec = 28;\nconst dragStepsPerSec = 40;\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keyevent = async function keyevent (keycode, metastate = null) {\n // TODO deprecate keyevent; currently wd only implements keyevent\n this.log.warn('keyevent will be deprecated use pressKeyCode');\n return await this.pressKeyCode(keycode, metastate);\n};\n\ncommands.pressKeyCode = async function pressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('pressKeyCode', {keycode, metastate});\n};\n\ncommands.longPressKeyCode = async function longPressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('longPressKeyCode', {keycode, metastate});\n};\n\ncommands.getOrientation = async function getOrientation () {\n let params = {\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n let orientation = await this.bootstrap.sendAction('orientation', params);\n return orientation.toUpperCase();\n};\n\ncommands.setOrientation = async function setOrientation (orientation) {\n orientation = orientation.toUpperCase();\n let params = {\n orientation,\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n return await this.bootstrap.sendAction('orientation', params);\n};\n\ncommands.fakeFlick = async function fakeFlick (xSpeed, ySpeed) {\n return await this.bootstrap.sendAction('flick', {xSpeed, ySpeed});\n};\n\ncommands.fakeFlickElement = async function fakeFlickElement (elementId, xoffset, yoffset, speed) {\n let params = {xoffset, yoffset, speed, elementId};\n return await this.bootstrap.sendAction('element:flick', params);\n};\n\ncommands.swipe = async function swipe (startX, startY, endX, endY, duration, touchCount, elId) {\n if (startX === 'null') {\n startX = 0.5;\n }\n if (startY === 'null') {\n startY = 0.5;\n }\n let swipeOpts = {startX, startY, endX, endY,\n steps: Math.round(duration * swipeStepsPerSec)};\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int\n if (util.hasValue(elId)) {\n swipeOpts.elementId = elId;\n }\n return await this.doSwipe(swipeOpts);\n};\n\ncommands.doSwipe = async function doSwipe (swipeOpts) {\n if (util.hasValue(swipeOpts.elementId)) {\n return await this.bootstrap.sendAction('element:swipe', swipeOpts);\n } else {\n return await this.bootstrap.sendAction('swipe', swipeOpts);\n }\n};\n\ncommands.pinchClose = async function pinchClose (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {\n direction: 'in',\n elementId: elId,\n percent,\n steps\n };\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.pinchOpen = async function pinchOpen (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {direction: 'out', elementId: elId, percent, steps};\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.flick = async function flick (element, xSpeed, ySpeed, xOffset, yOffset, speed) {\n if (element) {\n await this.fakeFlickElement(element, xOffset, yOffset, speed);\n } else {\n await this.fakeFlick(xSpeed, ySpeed);\n }\n};\n\ncommands.drag = async function drag (startX, startY, endX, endY, duration, touchCount, elementId, destElId) {\n let dragOpts = {\n elementId, destElId, startX, startY, endX, endY,\n steps: Math.round(duration * dragStepsPerSec)\n };\n return await this.doDrag(dragOpts);\n\n};\n\ncommands.doDrag = async function doDrag (dragOpts) {\n if (util.hasValue(dragOpts.elementId)) {\n return await this.bootstrap.sendAction('element:drag', dragOpts);\n } else {\n return await this.bootstrap.sendAction('drag', dragOpts);\n }\n};\n\ncommands.lock = async function lock (seconds) {\n await this.adb.lock();\n if (isNaN(seconds)) {\n return;\n }\n\n const floatSeconds = parseFloat(seconds);\n if (floatSeconds <= 0) {\n return;\n }\n await B.delay(1000 * floatSeconds);\n await this.unlock();\n};\n\ncommands.isLocked = async function isLocked () {\n return await this.adb.isScreenLocked();\n};\n\ncommands.unlock = async function unlock () {\n return await androidHelpers.unlock(this, this.adb, this.caps);\n};\n\ncommands.openNotifications = async function openNotifications () {\n return await this.bootstrap.sendAction('openNotification');\n};\n\ncommands.setLocation = async function setLocation (latitude, longitude) {\n return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);\n};\n\ncommands.fingerprint = async function fingerprint (fingerprintId) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('fingerprint method is only available for emulators');\n }\n await this.adb.fingerprint(fingerprintId);\n};\n\ncommands.sendSMS = async function sendSMS (phoneNumber, message) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sendSMS method is only available for emulators');\n }\n await this.adb.sendSMS(phoneNumber, message);\n};\n\ncommands.gsmCall = async function gsmCall (phoneNumber, action) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmCall method is only available for emulators');\n }\n await this.adb.gsmCall(phoneNumber, action);\n};\n\ncommands.gsmSignal = async function gsmSignal (signalStrengh) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmSignal method is only available for emulators');\n }\n await this.adb.gsmSignal(signalStrengh);\n};\n\ncommands.gsmVoice = async function gsmVoice (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmVoice method is only available for emulators');\n }\n await this.adb.gsmVoice(state);\n};\n\ncommands.powerAC = async function powerAC (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerAC method is only available for emulators');\n }\n await this.adb.powerAC(state);\n};\n\ncommands.powerCapacity = async function powerCapacity (batteryPercent) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerCapacity method is only available for emulators');\n }\n await this.adb.powerCapacity(batteryPercent);\n};\n\ncommands.networkSpeed = async function networkSpeed (networkSpeed) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('networkSpeed method is only available for emulators');\n }\n await this.adb.networkSpeed(networkSpeed);\n};\n\n/**\n * Emulate sensors values on the connected emulator.\n *\n * @typedef {Object} Sensor\n * @property {string} sensorType - sensor type declared in adb.SENSORS\n * @property {string} value - value to set to the sensor\n *\n * @param {Object} Sensor\n * @throws {Error} - If sensorType is not defined\n * @throws {Error} - If value for the se sor is not defined\n * @throws {Error} - If deviceType is not an emulator\n */\ncommands.sensorSet = async function sensorSet (sensor = {}) {\n const {sensorType, value} = sensor;\n if (!util.hasValue(sensorType)) {\n this.log.errorAndThrow(`'sensorType' argument is required`);\n }\n if (!util.hasValue(value)) {\n this.log.errorAndThrow(`'value' argument is required`);\n }\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sensorSet method is only available for emulators');\n }\n await this.adb.sensorSet(sensorType, value);\n};\n\nhelpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell (adb, opts) {\n const localFile = await tempDir.path({prefix: 'appium', suffix: '.png'});\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n try {\n const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';\n const png = path.posix.resolve(pngDir, 'screenshot.png');\n const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];\n await adb.shell(cmd);\n if (!await adb.fileSize(png)) {\n throw new Error('The size of the taken screenshot equals to zero.');\n }\n await adb.pull(png, localFile);\n return await jimp.read(localFile);\n } finally {\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n }\n};\n\nhelpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut (adb) {\n let {stdout, stderr, code} = await exec(adb.executable.path,\n adb.executable.defaultArgs\n .concat(['exec-out', '/system/bin/screencap', '-p']),\n {encoding: 'binary', isBuffer: true});\n // if there is an error, throw\n if (code || stderr.length) {\n throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);\n }\n // if we don't get anything at all, throw\n if (!stdout.length) {\n throw new Error('Screenshot returned no data');\n }\n\n return await jimp.read(stdout);\n};\n\ncommands.getScreenshot = async function getScreenshot () {\n const apiLevel = await this.adb.getApiLevel();\n let image = null;\n if (apiLevel > 20) {\n try {\n // This screenshoting approach is way faster, since it requires less external commands\n // to be executed. Unfortunately, exec-out option is only supported by newer Android/SDK versions (5.0 and later)\n image = await this.getScreenshotDataWithAdbExecOut(this.adb);\n } catch (e) {\n this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` +\n `Defaulting to 'adb shell' call`);\n }\n }\n if (!image) {\n try {\n image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);\n } catch (e) {\n const err = `Cannot get screenshot data because of '${e.message}'. ` +\n `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` +\n `the current view`;\n this.log.errorAndThrow(err);\n }\n }\n if (apiLevel < 23) {\n // Android bug 8433742 - rotate screenshot if screen is rotated\n let screenOrientation = await this.adb.getScreenOrientation();\n try {\n image = await image.rotate(-90 * screenOrientation);\n } catch (err) {\n this.log.warn(`Could not rotate screenshot due to error: ${err}`);\n }\n }\n const getBuffer = B.promisify(image.getBuffer, {context: image});\n const imgBuffer = await getBuffer(jimp.MIME_PNG);\n return imgBuffer.toString('base64');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.helpers = exports.default = exports.commands = void 0;
7
7
  require("source-map-support/register");
8
8
  var _driver = require("appium/driver");
9
-
10
9
  let commands = {},
11
10
  helpers = {},
12
11
  extensions = {};
@@ -27,4 +26,4 @@ commands.postDismissAlert = async function postDismissAlert() {
27
26
  Object.assign(extensions, commands, helpers);
28
27
  var _default = extensions;
29
28
  exports.default = _default;
30
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0QWxlcnRUZXh0IiwiZXJyb3JzIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInNldEFsZXJ0VGV4dCIsInBvc3RBY2NlcHRBbGVydCIsInBvc3REaXNtaXNzQWxlcnQiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYWxlcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1hd2FpdCAqL1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0QWxlcnRUZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0QWxlcnRUZXh0ICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG59O1xuXG5jb21tYW5kcy5zZXRBbGVydFRleHQgPSBhc3luYyBmdW5jdGlvbiBzZXRBbGVydFRleHQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbmNvbW1hbmRzLnBvc3RBY2NlcHRBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIHBvc3RBY2NlcHRBbGVydCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xufTtcblxuY29tbWFuZHMucG9zdERpc21pc3NBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIHBvc3REaXNtaXNzQWxlcnQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQUE7QUFFakRGLFFBQVEsQ0FBQ0csWUFBWSxHQUFHLGVBQWVBLFlBQVksR0FBSTtFQUNyRCxNQUFNLElBQUlDLGNBQU0sQ0FBQ0Msc0JBQXNCLEVBQUU7QUFDM0MsQ0FBQztBQUVETCxRQUFRLENBQUNNLFlBQVksR0FBRyxlQUFlQSxZQUFZLEdBQUk7RUFDckQsTUFBTSxJQUFJRixjQUFNLENBQUNDLHNCQUFzQixFQUFFO0FBQzNDLENBQUM7QUFFREwsUUFBUSxDQUFDTyxlQUFlLEdBQUcsZUFBZUEsZUFBZSxHQUFJO0VBQzNELE1BQU0sSUFBSUgsY0FBTSxDQUFDQyxzQkFBc0IsRUFBRTtBQUMzQyxDQUFDO0FBRURMLFFBQVEsQ0FBQ1EsZ0JBQWdCLEdBQUcsZUFBZUEsZ0JBQWdCLEdBQUk7RUFDN0QsTUFBTSxJQUFJSixjQUFNLENBQUNDLHNCQUFzQixFQUFFO0FBQzNDLENBQUM7QUFFREksTUFBTSxDQUFDQyxNQUFNLENBQUNSLFVBQVUsRUFBRUYsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFBQyxlQUU5QkMsVUFBVTtBQUFBIn0=
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0QWxlcnRUZXh0IiwiZXJyb3JzIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInNldEFsZXJ0VGV4dCIsInBvc3RBY2NlcHRBbGVydCIsInBvc3REaXNtaXNzQWxlcnQiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYWxlcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1hd2FpdCAqL1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0QWxlcnRUZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0QWxlcnRUZXh0ICgpIHtcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG59O1xuXG5jb21tYW5kcy5zZXRBbGVydFRleHQgPSBhc3luYyBmdW5jdGlvbiBzZXRBbGVydFRleHQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbmNvbW1hbmRzLnBvc3RBY2NlcHRBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIHBvc3RBY2NlcHRBbGVydCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcigpO1xufTtcblxuY29tbWFuZHMucG9zdERpc21pc3NBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIHBvc3REaXNtaXNzQWxlcnQgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTtBQUVBLElBQUlBLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFBQTtBQUVqREYsUUFBUSxDQUFDRyxZQUFZLEdBQUcsZUFBZUEsWUFBWSxHQUFJO0VBQ3JELE1BQU0sSUFBSUMsY0FBTSxDQUFDQyxzQkFBc0IsRUFBRTtBQUMzQyxDQUFDO0FBRURMLFFBQVEsQ0FBQ00sWUFBWSxHQUFHLGVBQWVBLFlBQVksR0FBSTtFQUNyRCxNQUFNLElBQUlGLGNBQU0sQ0FBQ0Msc0JBQXNCLEVBQUU7QUFDM0MsQ0FBQztBQUVETCxRQUFRLENBQUNPLGVBQWUsR0FBRyxlQUFlQSxlQUFlLEdBQUk7RUFDM0QsTUFBTSxJQUFJSCxjQUFNLENBQUNDLHNCQUFzQixFQUFFO0FBQzNDLENBQUM7QUFFREwsUUFBUSxDQUFDUSxnQkFBZ0IsR0FBRyxlQUFlQSxnQkFBZ0IsR0FBSTtFQUM3RCxNQUFNLElBQUlKLGNBQU0sQ0FBQ0Msc0JBQXNCLEVBQUU7QUFDM0MsQ0FBQztBQUVESSxNQUFNLENBQUNDLE1BQU0sQ0FBQ1IsVUFBVSxFQUFFRixRQUFRLEVBQUVDLE9BQU8sQ0FBQztBQUFDLGVBRTlCQyxVQUFVO0FBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"alert.js","names":["commands","helpers","extensions","getAlertText","errors","NotYetImplementedError","setAlertText","postAcceptAlert","postDismissAlert","Object","assign"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["/* eslint-disable require-await */\nimport { errors } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.getAlertText = async function getAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.setAlertText = async function setAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postAcceptAlert = async function postAcceptAlert () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postDismissAlert = async function postDismissAlert () {\n throw new errors.NotYetImplementedError();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AACA;;AAEA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjDF,QAAQ,CAACG,YAAY,GAAG,eAAeA,YAAY,GAAI;EACrD,MAAM,IAAIC,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDL,QAAQ,CAACM,YAAY,GAAG,eAAeA,YAAY,GAAI;EACrD,MAAM,IAAIF,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDL,QAAQ,CAACO,eAAe,GAAG,eAAeA,eAAe,GAAI;EAC3D,MAAM,IAAIH,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDL,QAAQ,CAACQ,gBAAgB,GAAG,eAAeA,gBAAgB,GAAI;EAC7D,MAAM,IAAIJ,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDI,MAAM,CAACC,MAAM,CAACR,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
1
+ {"version":3,"file":"alert.js","names":["commands","helpers","extensions","getAlertText","errors","NotYetImplementedError","setAlertText","postAcceptAlert","postDismissAlert","Object","assign"],"sources":["../../../lib/commands/alert.js"],"sourcesContent":["/* eslint-disable require-await */\nimport { errors } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.getAlertText = async function getAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.setAlertText = async function setAlertText () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postAcceptAlert = async function postAcceptAlert () {\n throw new errors.NotYetImplementedError();\n};\n\ncommands.postDismissAlert = async function postDismissAlert () {\n throw new errors.NotYetImplementedError();\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;AACA;AAEA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjDF,QAAQ,CAACG,YAAY,GAAG,eAAeA,YAAY,GAAI;EACrD,MAAM,IAAIC,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDL,QAAQ,CAACM,YAAY,GAAG,eAAeA,YAAY,GAAI;EACrD,MAAM,IAAIF,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDL,QAAQ,CAACO,eAAe,GAAG,eAAeA,eAAe,GAAI;EAC3D,MAAM,IAAIH,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDL,QAAQ,CAACQ,gBAAgB,GAAG,eAAeA,gBAAgB,GAAI;EAC7D,MAAM,IAAIJ,cAAM,CAACC,sBAAsB,EAAE;AAC3C,CAAC;AAEDI,MAAM,CAACC,MAAM,CAACR,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
@@ -15,19 +15,16 @@ var _utils = require("../utils");
15
15
  const APP_EXTENSIONS = ['.apk', '.apks'];
16
16
  const RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';
17
17
  const commands = {};
18
-
19
18
  exports.commands = commands;
20
19
  commands.isAppInstalled = async function isAppInstalled(appId) {
21
20
  return await this.adb.isAppInstalled(appId);
22
21
  };
23
-
24
22
  commands.mobileIsAppInstalled = async function mobileIsAppInstalled(opts = {}) {
25
23
  const {
26
24
  appId
27
25
  } = (0, _utils.requireArgs)('appId', opts);
28
26
  return await this.isAppInstalled(appId);
29
27
  };
30
-
31
28
  commands.queryAppState = async function queryAppState(appId) {
32
29
  this.log.info(`Querying the state of '${appId}'`);
33
30
  if (!(await this.adb.isAppInstalled(appId))) {
@@ -44,14 +41,12 @@ commands.queryAppState = async function queryAppState(appId) {
44
41
  }
45
42
  return _androidHelpers.APP_STATE.RUNNING_IN_BACKGROUND;
46
43
  };
47
-
48
44
  commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
49
45
  const {
50
46
  appId
51
47
  } = (0, _utils.requireArgs)('appId', opts);
52
48
  return await this.queryAppState(appId);
53
49
  };
54
-
55
50
  commands.activateApp = async function activateApp(appId) {
56
51
  this.log.debug(`Activating '${appId}'`);
57
52
  const apiLevel = await this.adb.getApiLevel();
@@ -76,32 +71,27 @@ commands.activateApp = async function activateApp(appId) {
76
71
  preferCmd: false
77
72
  });
78
73
  }
79
- const stdout = await this.adb.shell(['am', apiLevel < 26 ? 'start' : 'start-activity', '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER',
80
- '-f', '0x10200000', '-n', activityName]);
74
+ const stdout = await this.adb.shell(['am', apiLevel < 26 ? 'start' : 'start-activity', '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER', '-f', '0x10200000', '-n', activityName]);
81
75
  this.log.debug(stdout);
82
76
  if (/^error:/mi.test(stdout)) {
83
77
  throw new Error(`Cannot activate '${appId}'. Original error: ${stdout}`);
84
78
  }
85
79
  };
86
-
87
80
  commands.mobileActivateApp = async function mobileActivateApp(opts = {}) {
88
81
  const {
89
82
  appId
90
83
  } = (0, _utils.requireArgs)('appId', opts);
91
84
  return await this.activateApp(appId);
92
85
  };
93
-
94
86
  commands.removeApp = async function removeApp(appId, options = {}) {
95
87
  return await this.adb.uninstallApk(appId, options);
96
88
  };
97
-
98
89
  commands.mobileRemoveApp = async function mobileRemoveApp(opts = {}) {
99
90
  const {
100
91
  appId
101
92
  } = (0, _utils.requireArgs)('appId', opts);
102
93
  return await this.removeApp(appId, opts);
103
94
  };
104
-
105
95
  commands.terminateApp = async function terminateApp(appId, options = {}) {
106
96
  this.log.info(`Terminating '${appId}'`);
107
97
  if (!(await this.adb.processExists(appId))) {
@@ -125,26 +115,22 @@ commands.terminateApp = async function terminateApp(appId, options = {}) {
125
115
  this.log.info(`'${appId}' has been successfully terminated`);
126
116
  return true;
127
117
  };
128
-
129
118
  commands.mobileTerminateApp = async function mobileTerminateApp(opts = {}) {
130
119
  const {
131
120
  appId
132
121
  } = (0, _utils.requireArgs)('appId', opts);
133
122
  return await this.terminateApp(appId, opts);
134
123
  };
135
-
136
124
  commands.installApp = async function installApp(appPath, options = {}) {
137
125
  const localPath = await this.helpers.configureApp(appPath, APP_EXTENSIONS);
138
126
  await this.adb.install(localPath, options);
139
127
  };
140
-
141
128
  commands.mobileInstallApp = async function mobileInstallApp(opts = {}) {
142
129
  const {
143
130
  appPath
144
131
  } = (0, _utils.requireArgs)('appPath', opts);
145
132
  return await this.installApp(appPath, opts);
146
133
  };
147
-
148
134
  commands.mobileClearApp = async function mobileClearApp(opts = {}) {
149
135
  const {
150
136
  appId
@@ -156,4 +142,4 @@ commands.mobileClearApp = async function mobileClearApp(opts = {}) {
156
142
  };
157
143
  var _default = commands;
158
144
  exports.default = _default;
159
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJtb2JpbGVJc0FwcEluc3RhbGxlZCIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwibW9iaWxlUmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVJbnN0YWxsQXBwIiwibW9iaWxlQ2xlYXJBcHAiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUFBfU1RBVEUgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyByZXF1aXJlQXJncyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTlMgPSBbJy5hcGsnLCAnLmFwa3MnXTtcbmNvbnN0IFJFU09MVkVSX0FDVElWSVRZX05BTUUgPSAnYW5kcm9pZC9jb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuUmVzb2x2ZXJBY3Rpdml0eSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWRcbiAqL1xuY29tbWFuZHMuaXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0FwcEluc3RhbGxlZCAoYXBwSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlQXBwSW5zdGFsbGVkT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqL1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBvciBub3RcbiAqXG4gKiBAcGFyYW0ge01vYmlsZUFwcEluc3RhbGxlZE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGBpc0FwcEluc3RhbGxlZGBcbiAqL1xuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pc0FwcEluc3RhbGxlZChhcHBJZCk7XG59O1xuXG4vKipcbiAqIFF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50LCB3aGljaCBkZXNjcmliZXNcbiAqICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlOlxuICogMCAtIGlzIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZFxuICogMSAtIGlmIHRoZSBhcHAgaXMgaW5zdGFsbGVkLCBidXQgaXMgbm90IHJ1bm5pbmdcbiAqIDMgLSBpZiB0aGUgYXBwIGlzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmRcbiAqIDQgLSBpZiB0aGUgYXBwIGlzIHJ1bm5pbmcgaW4gdGhlIGZvcmVncm91bmRcbiAqL1xuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGFwcElkKSB7XG4gIHRoaXMubG9nLmluZm8oYFF1ZXJ5aW5nIHRoZSBzdGF0ZSBvZiAnJHthcHBJZH0nYCk7XG4gIGlmICghYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpKSB7XG4gICAgcmV0dXJuIEFQUF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICB9XG4gIGlmICghYXdhaXQgdGhpcy5hZGIucHJvY2Vzc0V4aXN0cyhhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9SVU5OSU5HO1xuICB9XG4gIGNvbnN0IGFwcElkUmUgPSBuZXcgUmVnRXhwKGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAoYXBwSWQpfS9gKTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIChhd2FpdCB0aGlzLmFkYi5kdW1wV2luZG93cygpKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoYXBwSWRSZS50ZXN0KGxpbmUpICYmIFsnbUN1cnJlbnRGb2N1cycsICdtRm9jdXNlZEFwcCddLnNvbWUoKHgpID0+IGxpbmUuaW5jbHVkZXMoeCkpKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0JBQ0tHUk9VTkQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVF1ZXJ5QXBwU3RhdGVPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlUXVlcnlBcHBTdGF0ZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNhbWUgYXMgaW4gYHF1ZXJ5QXBwU3RhdGVgXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcHAgY2Fubm90IGJlIGFjdGl2YXRlZFxuICovXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChhcHBJZCkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgQWN0aXZhdGluZyAnJHthcHBJZH0nYCk7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgLy8gRmFsbGJhY2sgdG8gTW9ua2V5IGluIG9sZGVyIEFQSXNcbiAgaWYgKGFwaUxldmVsIDwgMjQpIHtcbiAgICAvLyBUaGUgbW9ua2V5IGNvbW1hbmQgY291bGQgcmFpc2UgYW4gaXNzdWUgYXMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQ4NjA0NzUvaG93LXRvLXVzZS10aGUtbW9ua2V5LWNvbW1hbmQtd2l0aC1hbi1hbmRyb2lkLXN5c3RlbS10aGF0LWRvZXNudC1oYXZlLXBoeXNpY2FsXG4gICAgLy8gYnV0ICctLXBjdC1zeXNrZXlzIDAnIGNvdWxkIGNhdXNlIGFub3RoZXIgYmFja2dyb3VuZCBwcm9jZXNzIGlzc3VlLiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTY5NDEjaXNzdWVjb21tZW50LTExMjk4MzcyODVcbiAgICBjb25zdCBjbWQgPSBbJ21vbmtleScsXG4gICAgICAnLXAnLCBhcHBJZCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnMSddO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtvdXRwdXR9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5pbmNsdWRlcygnbW9ua2V5IGFib3J0ZWQnKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIEFyZSB5b3Ugc3VyZSBpdCBpcyBpbnN0YWxsZWQ/YCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBhY3Rpdml0eU5hbWUgPSBhd2FpdCB0aGlzLmFkYi5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkKTtcbiAgaWYgKGFjdGl2aXR5TmFtZSA9PT0gUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNzEyOFxuICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgYFRoZSBsYXVuY2hhYmxlIGFjdGl2aXR5IG5hbWUgb2YgJyR7YXBwSWR9JyB3YXMgcmVzb2x2ZWQgdG8gJyR7YWN0aXZpdHlOYW1lfScuIGAgK1xuICAgICAgYFN3aXRjaGluZyB0aGUgcmVzb2x2ZXIgdG8gbm90IHVzZSBjbWRgXG4gICAgKTtcbiAgICBhY3Rpdml0eU5hbWUgPSBhd2FpdCB0aGlzLmFkYi5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkLCB7cHJlZmVyQ21kOiBmYWxzZX0pO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoW1xuICAgICdhbScsIChhcGlMZXZlbCA8IDI2KSA/ICdzdGFydCcgOiAnc3RhcnQtYWN0aXZpdHknLFxuICAgICctYScsICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAvLyBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfTkVXX1RBU0tcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9jb250ZW50L0ludGVudCNGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgICctbicsIGFjdGl2aXR5TmFtZSxcbiAgXSk7XG4gIHRoaXMubG9nLmRlYnVnKHN0ZG91dCk7XG4gIGlmICgvXmVycm9yOi9taS50ZXN0KHN0ZG91dCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtzdGRvdXR9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlQWN0aXZhdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogQWN0aXZhdGVzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBvciBsYXVuY2hlcyBpdCBpZiBuZWNlc3NhcnkuXG4gKiBUaGUgYWN0aW9uIGxpdGVyYWxseSBzaW11bGF0ZXNcbiAqIGNsaWNraW5nIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGljb24gb24gdGhlIGRhc2hib2FyZC5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZUFjdGl2YXRlQXBwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcHAgY2Fubm90IGJlIGFjdGl2YXRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKGFwcElkKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVW5pbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzIwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgdW5pbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGtlZXBEYXRhIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBrZWVwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGF0YSBhbmQgY2FjaGUgZm9sZGVycyBhZnRlciB1bmluc3RhbGwuXG4gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWYgaXMgaW5zdGFsbGVkLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0gez9Vbmluc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiByZW1vdmFsIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYWNrYWdlIHdhcyBmb3VuZCBvbiB0aGUgZGV2aWNlIGFuZFxuICogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZC5cbiAqL1xuY29tbWFuZHMucmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwIChhcHBJZCwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoYXBwSWQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVSZW1vdmVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlUmVtb3ZlQXBwT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYHJlbW92ZUFwcGBcbiAqL1xuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW92ZUFwcChhcHBJZCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlcm1pbmF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLiBUaGUgbWV0aG9kIHdpbGwgc2tpcFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcgdGhlIGFwcCBzdGF0ZSBjaGVjayBpZiB0aGUgdGltZW91dFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGxvd2VyIG9yIGVxdWFsIHRvIHplcm8uIFRoZW4sIHRoZSByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgdGhlIGFwcCBpZiBpdCBpcyBydW5uaW5nLiBJZiB0aGUgZ2l2ZW4gdGltZW91dCB3YXMgbG93ZXIgb3IgZXF1YWwgdG8gemVybyxcbiAqIGl0IHJldHVybnMgdHJ1ZSBhZnRlciB0ZXJtaW5hdGluZyB0aGUgYXBwIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGFwcCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmxvZy5pbmZvKGBUZXJtaW5hdGluZyAnJHthcHBJZH0nYCk7XG4gIGlmICghKGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBhcHAgJyR7YXBwSWR9JyBpcyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoYXBwSWQpO1xuICBjb25zdCB0aW1lb3V0ID0gdXRpbC5oYXNWYWx1ZShvcHRpb25zLnRpbWVvdXQpICYmICFpc05hTihvcHRpb25zLnRpbWVvdXQpID8gcGFyc2VJbnQob3B0aW9ucy50aW1lb3V0LCAxMCkgOiA1MDA7XG5cbiAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgIHRoaXMubG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gdGVybWluYXRlZC4gU2tpcCBjaGVja2luZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBzdGF0ZSBgICtcbiAgICAgIGBzaW5jZSB0aGUgdGltZW91dCB3YXMgc2V0IGFzICR7dGltZW91dH1tc2ApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCkgPD0gQVBQX1NUQVRFLk5PVF9SVU5OSU5HLFxuICAgICAge3dhaXRNczogdGltZW91dCwgaW50ZXJ2YWxNczogMTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnJHthcHBJZH0nIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICB0aGlzLmxvZy5pbmZvKGAnJHthcHBJZH0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkYCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVUZXJtaW5hdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZVRlcm1pbmF0ZUFwcE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGB0ZXJtaW5hdGVBcHBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy50ZXJtaW5hdGVBcHAoYXBwSWQsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gdG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgbG9jYWwgYXBrIHBhdGggb3IgYSByZW1vdGUgdXJsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgaW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgZ2l2ZW4gYXBrIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFjaGFibGVcbiAqL1xuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBsb2NhbFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcFBhdGgsIEFQUF9FWFRFTlNJT05TKTtcbiAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbChsb2NhbFBhdGgsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVJbnN0YWxsQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgbG9jYWwgYXBrIHBhdGggb3IgYSByZW1vdGUgdXJsLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlSW5zdGFsbEFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgZ2l2ZW4gYXBrIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFjaGFibGVcbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcFBhdGggfSA9IHJlcXVpcmVBcmdzKCdhcHBQYXRoJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmluc3RhbGxBcHAoYXBwUGF0aCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsZWFyQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBhcHBJZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBiZSBjbGVhcmVkXG4gKi9cblxuLyoqXG4gKiBEZWxldGVzIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIHtDbGVhckFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBjbGVhbmluZyBvZiB0aGUgYXBwIGRhdGEgZmFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xlYXJBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGVhckFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthcHBJZH0gPSBvcHRzO1xuICBpZiAoIWFwcElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdhcHBJZCcgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5jbGVhcihhcHBJZCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUN4QyxNQUFNQyxzQkFBc0IsR0FBRyxtREFBbUQ7QUFFbEYsTUFBTUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs7QUFBQztBQVFwQkEsUUFBUSxDQUFDQyxjQUFjLEdBQUcsZUFBZUEsY0FBYyxDQUFFQyxLQUFLLEVBQUU7RUFDOUQsT0FBTyxNQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDRixjQUFjLENBQUNDLEtBQUssQ0FBQztBQUM3QyxDQUFDOztBQWFERixRQUFRLENBQUNJLG9CQUFvQixHQUFHLGVBQWVBLG9CQUFvQixDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDOUUsTUFBTTtJQUFFSDtFQUFNLENBQUMsR0FBRyxJQUFBSSxrQkFBVyxFQUFDLE9BQU8sRUFBRUQsSUFBSSxDQUFDO0VBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUNKLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO0FBQ3pDLENBQUM7O0FBYURGLFFBQVEsQ0FBQ08sYUFBYSxHQUFHLGVBQWVBLGFBQWEsQ0FBRUwsS0FBSyxFQUFFO0VBQzVELElBQUksQ0FBQ00sR0FBRyxDQUFDQyxJQUFJLENBQUUsMEJBQXlCUCxLQUFNLEdBQUUsQ0FBQztFQUNqRCxJQUFJLEVBQUMsTUFBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0YsY0FBYyxDQUFDQyxLQUFLLENBQUMsR0FBRTtJQUN6QyxPQUFPUSx5QkFBUyxDQUFDQyxhQUFhO0VBQ2hDO0VBQ0EsSUFBSSxFQUFDLE1BQU0sSUFBSSxD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
145
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJtb2JpbGVJc0FwcEluc3RhbGxlZCIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwibW9iaWxlUmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVJbnN0YWxsQXBwIiwibW9iaWxlQ2xlYXJBcHAiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUFBfU1RBVEUgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyByZXF1aXJlQXJncyB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTlMgPSBbJy5hcGsnLCAnLmFwa3MnXTtcbmNvbnN0IFJFU09MVkVSX0FDVElWSVRZX05BTUUgPSAnYW5kcm9pZC9jb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuUmVzb2x2ZXJBY3Rpdml0eSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWRcbiAqL1xuY29tbWFuZHMuaXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0FwcEluc3RhbGxlZCAoYXBwSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlQXBwSW5zdGFsbGVkT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqL1xuXG4vKipcbiAqIFZlcmlmeSB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBvciBub3RcbiAqXG4gKiBAcGFyYW0ge01vYmlsZUFwcEluc3RhbGxlZE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGBpc0FwcEluc3RhbGxlZGBcbiAqL1xuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pc0FwcEluc3RhbGxlZChhcHBJZCk7XG59O1xuXG4vKipcbiAqIFF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50LCB3aGljaCBkZXNjcmliZXNcbiAqICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlOlxuICogMCAtIGlzIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZFxuICogMSAtIGlmIHRoZSBhcHAgaXMgaW5zdGFsbGVkLCBidXQgaXMgbm90IHJ1bm5pbmdcbiAqIDMgLSBpZiB0aGUgYXBwIGlzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmRcbiAqIDQgLSBpZiB0aGUgYXBwIGlzIHJ1bm5pbmcgaW4gdGhlIGZvcmVncm91bmRcbiAqL1xuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGFwcElkKSB7XG4gIHRoaXMubG9nLmluZm8oYFF1ZXJ5aW5nIHRoZSBzdGF0ZSBvZiAnJHthcHBJZH0nYCk7XG4gIGlmICghYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpKSB7XG4gICAgcmV0dXJuIEFQUF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICB9XG4gIGlmICghYXdhaXQgdGhpcy5hZGIucHJvY2Vzc0V4aXN0cyhhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9SVU5OSU5HO1xuICB9XG4gIGNvbnN0IGFwcElkUmUgPSBuZXcgUmVnRXhwKGBcXFxcYiR7Xy5lc2NhcGVSZWdFeHAoYXBwSWQpfS9gKTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIChhd2FpdCB0aGlzLmFkYi5kdW1wV2luZG93cygpKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoYXBwSWRSZS50ZXN0KGxpbmUpICYmIFsnbUN1cnJlbnRGb2N1cycsICdtRm9jdXNlZEFwcCddLnNvbWUoKHgpID0+IGxpbmUuaW5jbHVkZXMoeCkpKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0JBQ0tHUk9VTkQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVF1ZXJ5QXBwU3RhdGVPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlUXVlcnlBcHBTdGF0ZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNhbWUgYXMgaW4gYHF1ZXJ5QXBwU3RhdGVgXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcHAgY2Fubm90IGJlIGFjdGl2YXRlZFxuICovXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChhcHBJZCkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgQWN0aXZhdGluZyAnJHthcHBJZH0nYCk7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgLy8gRmFsbGJhY2sgdG8gTW9ua2V5IGluIG9sZGVyIEFQSXNcbiAgaWYgKGFwaUxldmVsIDwgMjQpIHtcbiAgICAvLyBUaGUgbW9ua2V5IGNvbW1hbmQgY291bGQgcmFpc2UgYW4gaXNzdWUgYXMgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQ4NjA0NzUvaG93LXRvLXVzZS10aGUtbW9ua2V5LWNvbW1hbmQtd2l0aC1hbi1hbmRyb2lkLXN5c3RlbS10aGF0LWRvZXNudC1oYXZlLXBoeXNpY2FsXG4gICAgLy8gYnV0ICctLXBjdC1zeXNrZXlzIDAnIGNvdWxkIGNhdXNlIGFub3RoZXIgYmFja2dyb3VuZCBwcm9jZXNzIGlzc3VlLiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTY5NDEjaXNzdWVjb21tZW50LTExMjk4MzcyODVcbiAgICBjb25zdCBjbWQgPSBbJ21vbmtleScsXG4gICAgICAnLXAnLCBhcHBJZCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnMSddO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtvdXRwdXR9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5pbmNsdWRlcygnbW9ua2V5IGFib3J0ZWQnKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIEFyZSB5b3Ugc3VyZSBpdCBpcyBpbnN0YWxsZWQ/YCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBhY3Rpdml0eU5hbWUgPSBhd2FpdCB0aGlzLmFkYi5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkKTtcbiAgaWYgKGFjdGl2aXR5TmFtZSA9PT0gUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNzEyOFxuICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgYFRoZSBsYXVuY2hhYmxlIGFjdGl2aXR5IG5hbWUgb2YgJyR7YXBwSWR9JyB3YXMgcmVzb2x2ZWQgdG8gJyR7YWN0aXZpdHlOYW1lfScuIGAgK1xuICAgICAgYFN3aXRjaGluZyB0aGUgcmVzb2x2ZXIgdG8gbm90IHVzZSBjbWRgXG4gICAgKTtcbiAgICBhY3Rpdml0eU5hbWUgPSBhd2FpdCB0aGlzLmFkYi5yZXNvbHZlTGF1bmNoYWJsZUFjdGl2aXR5KGFwcElkLCB7cHJlZmVyQ21kOiBmYWxzZX0pO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoW1xuICAgICdhbScsIChhcGlMZXZlbCA8IDI2KSA/ICdzdGFydCcgOiAnc3RhcnQtYWN0aXZpdHknLFxuICAgICctYScsICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAvLyBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfTkVXX1RBU0tcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9jb250ZW50L0ludGVudCNGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgICctbicsIGFjdGl2aXR5TmFtZSxcbiAgXSk7XG4gIHRoaXMubG9nLmRlYnVnKHN0ZG91dCk7XG4gIGlmICgvXmVycm9yOi9taS50ZXN0KHN0ZG91dCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtzdGRvdXR9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlQWN0aXZhdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogQWN0aXZhdGVzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBvciBsYXVuY2hlcyBpdCBpZiBuZWNlc3NhcnkuXG4gKiBUaGUgYWN0aW9uIGxpdGVyYWxseSBzaW11bGF0ZXNcbiAqIGNsaWNraW5nIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGljb24gb24gdGhlIGRhc2hib2FyZC5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZUFjdGl2YXRlQXBwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcHAgY2Fubm90IGJlIGFjdGl2YXRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVBY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUFjdGl2YXRlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKGFwcElkKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVW5pbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzIwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgdW5pbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGtlZXBEYXRhIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBrZWVwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGF0YSBhbmQgY2FjaGUgZm9sZGVycyBhZnRlciB1bmluc3RhbGwuXG4gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWYgaXMgaW5zdGFsbGVkLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0gez9Vbmluc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiByZW1vdmFsIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYWNrYWdlIHdhcyBmb3VuZCBvbiB0aGUgZGV2aWNlIGFuZFxuICogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZC5cbiAqL1xuY29tbWFuZHMucmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQXBwIChhcHBJZCwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoYXBwSWQsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVSZW1vdmVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlUmVtb3ZlQXBwT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYHJlbW92ZUFwcGBcbiAqL1xuY29tbWFuZHMubW9iaWxlUmVtb3ZlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW92ZUFwcChhcHBJZCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlcm1pbmF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLiBUaGUgbWV0aG9kIHdpbGwgc2tpcFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcgdGhlIGFwcCBzdGF0ZSBjaGVjayBpZiB0aGUgdGltZW91dFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGxvd2VyIG9yIGVxdWFsIHRvIHplcm8uIFRoZW4sIHRoZSByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgdGhlIGFwcCBpZiBpdCBpcyBydW5uaW5nLiBJZiB0aGUgZ2l2ZW4gdGltZW91dCB3YXMgbG93ZXIgb3IgZXF1YWwgdG8gemVybyxcbiAqIGl0IHJldHVybnMgdHJ1ZSBhZnRlciB0ZXJtaW5hdGluZyB0aGUgYXBwIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGFwcCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmxvZy5pbmZvKGBUZXJtaW5hdGluZyAnJHthcHBJZH0nYCk7XG4gIGlmICghKGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBhcHAgJyR7YXBwSWR9JyBpcyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoYXBwSWQpO1xuICBjb25zdCB0aW1lb3V0ID0gdXRpbC5oYXNWYWx1ZShvcHRpb25zLnRpbWVvdXQpICYmICFpc05hTihvcHRpb25zLnRpbWVvdXQpID8gcGFyc2VJbnQob3B0aW9ucy50aW1lb3V0LCAxMCkgOiA1MDA7XG5cbiAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgIHRoaXMubG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gdGVybWluYXRlZC4gU2tpcCBjaGVja2luZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBzdGF0ZSBgICtcbiAgICAgIGBzaW5jZSB0aGUgdGltZW91dCB3YXMgc2V0IGFzICR7dGltZW91dH1tc2ApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCkgPD0gQVBQX1NUQVRFLk5PVF9SVU5OSU5HLFxuICAgICAge3dhaXRNczogdGltZW91dCwgaW50ZXJ2YWxNczogMTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnJHthcHBJZH0nIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICB0aGlzLmxvZy5pbmZvKGAnJHthcHBJZH0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkYCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVUZXJtaW5hdGVBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge01vYmlsZVRlcm1pbmF0ZUFwcE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBTYW1lIGFzIGluIGB0ZXJtaW5hdGVBcHBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVRlcm1pbmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwSWQgfSA9IHJlcXVpcmVBcmdzKCdhcHBJZCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy50ZXJtaW5hdGVBcHAoYXBwSWQsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gdG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgbG9jYWwgYXBrIHBhdGggb3IgYSByZW1vdGUgdXJsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgaW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgZ2l2ZW4gYXBrIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFjaGFibGVcbiAqL1xuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBsb2NhbFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcFBhdGgsIEFQUF9FWFRFTlNJT05TKTtcbiAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbChsb2NhbFBhdGgsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVJbnN0YWxsQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgbG9jYWwgYXBrIHBhdGggb3IgYSByZW1vdGUgdXJsLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlSW5zdGFsbEFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgZ2l2ZW4gYXBrIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFjaGFibGVcbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcFBhdGggfSA9IHJlcXVpcmVBcmdzKCdhcHBQYXRoJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmluc3RhbGxBcHAoYXBwUGF0aCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsZWFyQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBhcHBJZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBiZSBjbGVhcmVkXG4gKi9cblxuLyoqXG4gKiBEZWxldGVzIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIHtDbGVhckFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBjbGVhbmluZyBvZiB0aGUgYXBwIGRhdGEgZmFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xlYXJBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGVhckFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthcHBJZH0gPSBvcHRzO1xuICBpZiAoIWFwcElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdhcHBJZCcgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5jbGVhcihhcHBJZCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUN4QyxNQUFNQyxzQkFBc0IsR0FBRyxtREFBbUQ7QUFFbEYsTUFBTUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBUXBCQSxRQUFRLENBQUNDLGNBQWMsR0FBRyxlQUFlQSxjQUFjLENBQUVDLEtBQUssRUFBRTtFQUM5RCxPQUFPLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO0FBQzdDLENBQUM7QUFhREYsUUFBUSxDQUFDSSxvQkFBb0IsR0FBRyxlQUFlQSxvQkFBb0IsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzlFLE1BQU07SUFBRUg7RUFBTSxDQUFDLEdBQUcsSUFBQUksa0JBQVcsRUFBQyxPQUFPLEVBQUVELElBQUksQ0FBQztFQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDSixjQUFjLENBQUNDLEtBQUssQ0FBQztBQUN6QyxDQUFDO0FBYURGLFFBQVEsQ0FBQ08sYUFBYSxHQUFHLGVBQWVBLGFBQWEsQ0FBRUwsS0FBSyxFQUFFO0VBQzVELElBQUksQ0FBQ00sR0FBRyxDQUFDQyxJQUFJLENBQUUsMEJBQXlCUCxLQUFNLEdBQUUsQ0FBQztFQUNqRCxJQUFJLEVBQUMsTUFBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0YsY0FBYyxDQUFDQyxLQUFLLENBQUMsR0FBRTtJQUN6QyxPQUFPUSx5QkFBUyxDQUFDQyxhQUFhO0VBQ2hDO0VBQ0EsSUFBSSxFQUFDLE1BQU0sSUFBSSxDQUFD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