appium-uiautomator2-driver 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +241 -25
  2. package/build/index.js +1 -4
  3. package/build/lib/commands/actions.js +3 -12
  4. package/build/lib/commands/actions.js.map +1 -0
  5. package/build/lib/commands/alert.js +3 -9
  6. package/build/lib/commands/alert.js.map +1 -0
  7. package/build/lib/commands/battery.js +3 -5
  8. package/build/lib/commands/battery.js.map +1 -0
  9. package/build/lib/commands/element.js +3 -36
  10. package/build/lib/commands/element.js.map +1 -0
  11. package/build/lib/commands/find.js +2 -9
  12. package/build/lib/commands/find.js.map +1 -0
  13. package/build/lib/commands/general.js +5 -36
  14. package/build/lib/commands/general.js.map +1 -0
  15. package/build/lib/commands/gestures.js +1 -15
  16. package/build/lib/commands/gestures.js.map +1 -0
  17. package/build/lib/commands/index.js +3 -15
  18. package/build/lib/commands/index.js.map +1 -0
  19. package/build/lib/commands/screenshot.js +1 -8
  20. package/build/lib/commands/screenshot.js.map +1 -0
  21. package/build/lib/commands/touch.js +2 -8
  22. package/build/lib/commands/touch.js.map +1 -0
  23. package/build/lib/commands/viewport.js +3 -9
  24. package/build/lib/commands/viewport.js.map +1 -0
  25. package/build/lib/css-converter.js +1 -42
  26. package/build/lib/css-converter.js.map +1 -0
  27. package/build/lib/desired-caps.js +1 -4
  28. package/build/lib/desired-caps.js.map +1 -0
  29. package/build/lib/driver.js +24 -102
  30. package/build/lib/driver.js.map +1 -0
  31. package/build/lib/extensions.js +1 -3
  32. package/build/lib/extensions.js.map +1 -0
  33. package/build/lib/helpers.js +1 -15
  34. package/build/lib/helpers.js.map +1 -0
  35. package/build/lib/logger.js +1 -5
  36. package/build/lib/logger.js.map +1 -0
  37. package/build/lib/uiautomator2.js +1 -70
  38. package/build/lib/uiautomator2.js.map +1 -0
  39. package/npm-shrinkwrap.json +402 -309
  40. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"general.js","names":["extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","configureApp","APK_EXTENSION","options","Object","assign"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { fs, tempDir } from 'appium/support';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
@@ -1,33 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _support = require("appium/support");
13
-
14
10
  var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
11
  var _driver = require("appium/driver");
17
-
18
12
  const commands = {};
19
-
20
13
  function toOrigin(element) {
21
14
  return element ? _support.util.wrapElement(_support.util.unwrapElement(element)) : undefined;
22
15
  }
23
-
24
16
  function toPoint(x, y) {
25
17
  return _lodash.default.isFinite(x) && _lodash.default.isFinite(y) ? {
26
18
  x,
27
19
  y
28
20
  } : undefined;
29
21
  }
30
-
31
22
  function toRect(left, top, width, height) {
32
23
  return [left, top, width, height].some(v => !_lodash.default.isFinite(v)) ? undefined : {
33
24
  left,
@@ -191,11 +182,9 @@ commands.mobileScrollBackTo = async function (opts = {}) {
191
182
  elementId,
192
183
  elementToId
193
184
  } = opts;
194
-
195
185
  if (!elementId || !elementToId) {
196
186
  throw new _driver.errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);
197
187
  }
198
-
199
188
  return await this.uiautomator2.jwproxy.command(`/appium/element/${_support.util.unwrapElement(elementId)}/scroll_to/${_support.util.unwrapElement(elementToId)}`, 'POST', {});
200
189
  };
201
190
 
@@ -207,11 +196,9 @@ commands.mobileScroll = async function (opts = {}) {
207
196
  selector,
208
197
  maxSwipes
209
198
  } = opts;
210
-
211
199
  if (!strategy || !selector) {
212
200
  throw new _driver.errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);
213
201
  }
214
-
215
202
  return await this.uiautomator2.jwproxy.command('/touch/scroll', 'POST', {
216
203
  origin: toOrigin(elementId || element),
217
204
  params: {
@@ -221,7 +208,6 @@ commands.mobileScroll = async function (opts = {}) {
221
208
  }
222
209
  });
223
210
  };
224
-
225
211
  var _default = commands;
226
212
  exports.default = _default;
227
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VzdHVyZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuXG5mdW5jdGlvbiB0b09yaWdpbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IHV0aWwud3JhcEVsZW1lbnQodXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9Qb2ludCAoeCwgeSkge1xuICByZXR1cm4gXy5pc0Zpbml0ZSh4KSAmJiBfLmlzRmluaXRlKHkpID8ge3gsIHl9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1JlY3QgKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gW2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodF0uc29tZSgodikgPT4gIV8uaXNGaW5pdGUodikpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2ltcGxlIGNsaWNrL3RhcCBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHs/Q2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9uZ0NsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZHVyYXRpb24gWzUwMF0gLSBDbGljayBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/TG9uZ0NsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVMb25nQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvbG9uZ19jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gICAgZHVyYXRpb24sXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGRvdWJsZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZG91YmxlIGNsaWNrIG9uXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIGNsaWNrIHRoYXQgbGFzdHMgZm9yIHRoZSBnaXZlbiBkdXJhdGlvblxuICpcbiAqIEBwYXJhbSB7P0RvdWJsZUNsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RvdWJsZV9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiB0aGUgc3RhcnQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzdGFydCBjb29yZGluYXRlcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGVzZVxuICogY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgYXMgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBlbGVtZW50IGNvcm5lci5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIHN0YXJ0c1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbMjUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtXG4gKiB0aGlzIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogRHJhZ3MgdGhpcyBvYmplY3QgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9EcmFnT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEcmFnR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURyYWdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9kcmFnJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIHN0YXJ0OiB0b1BvaW50KHN0YXJ0WCwgc3RhcnRZKSxcbiAgICBlbmQ6IHRvUG9pbnQoZW5kWCwgZW5kWSksXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGbGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGZsaW5nZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gZmxpbmcgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIGZsaW5nLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzc1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzXG4gKiBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gZmxpbmdcbiAqIHZlbG9jaXR5IGZvciB0aGUgZ2l2ZW4gdmlldyAoNTAgYnkgZGVmYXVsdClcbiAqL1xuXG4vKipcbiAqIERyYWdzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gKlxuICogQHBhcmFtIHs/RmxpbmdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlRmxpbmdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxpbmdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9mbGluZycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQaW5jaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHBpbmNoZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gcGluY2ggYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgcGluY2ggYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBwaW5jaCBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIGNsb3NlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9jbG9zZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwaW5jaCBvcGVuIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaE9wZW5HZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvcGluY2hfb3BlbicsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dpcGVPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gc3dpcGUgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc3dpcGUuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHN3aXBlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3dpcGUgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBpbiByYW5nZSAwLi4xLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzd2lwZSBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1N3aXBlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVTd2lwZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc3dpcGUnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzY3JvbGwgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoaXNcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBzY3JvbGwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzY3JvbGxpbmcgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBncmVhdGVyIHRoYW4gemVybywgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzUwMDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzIGdlc3R1cmVcbiAqIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2Nyb2xsIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U2Nyb2xsT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBjYW4gc3RpbGwgc2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiBpcyBhIHZhbGlkIHNjcm9sbGFibGUgY29udGFpbmVyIGFuZCBpdCB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50VG9JZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgaXRlbSwgd2hpY2ggYmVsb25nc1xuICogdG8gdGhlIHNjcm9sbGFibGUgZWxlbWVudCBhYm92ZSwgYW5kIHdoaWNoIHNob3VsZCBiZWNvbWUgdmlzaWJsZSBhZnRlclxuICogdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gaXMgZmluaXNoZWQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYCBzdHJhdGVneS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCBgZWxlbWVudElkYCB1bnRpbCBgZWxlbWVudFRvSWRgXG4gKiBiZWNvbWVzIHZpc2libGUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgYGVsZW1lbnRUb0lkYFxuICogaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSB2aWV3IHBvcnQuIE90aGVyd2lzZSBpdCB3b3VsZCBzY3JvbGxcbiAqIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Nyb2xsYWJsZSBjb250cm9sIGFuZCB0cmllcyB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudFxuICogYnkgc2Nyb2xsaW5nIGl0cyBwYXJlbnQgdG8gdGhlIGVuZCBzdGVwIGJ5IHN0ZXAuIFRoZSBzY3JvbGwgZGlyZWN0aW9uICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuICogaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge1Njcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxCYWNrVG8gPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGVsZW1lbnRUb0lkfSA9IG9wdHM7XG4gIGlmICghZWxlbWVudElkIHx8ICFlbGVtZW50VG9JZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggZWxlbWVudElkIGFuZCBlbGVtZW50VG9JZCBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoXG4gICAgYC9hcHBpdW0vZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50SWQpfS9zY3JvbGxfdG8vJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudFRvSWQpfWAsICdQT1NUJywge30pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWRlbnRpZmllciBvZiBhbiBlbGVtZW50LiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBmaXJzdCBjdXJyZW50bHkgYXZhaWxhYmxlIHNjcm9sbGFibGUgdmlld1xuICogaXMgc2VsZWN0ZWQgZm9yIHRoZSBpbnRlcmFjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc3RyYXRlZ3kgVGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGBhY2Nlc3NpYmlsaXR5IGlkYCAoVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKVxuICogLSBgY2xhc3MgbmFtZWAgKFVpU2VsZWN0b3IoKS5jbGFzc05hbWUpXG4gKiAtIGAtYW5kcm9pZCB1aWF1dG9tYXRvcmAgKFVpU2VsZWN0b3IpXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHNlbGVjdG9yIFRoZSBjb3JyZXNwb25kaW5nIGxvb2t1cCB2YWx1ZSBmb3IgdGhlIGdpdmVuXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbWF4U3dpcGVzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2lwZXMgdG8gcGVyZm9ybVxuICogb24gdGhlIHRhcmdldCBzY3JvbGxhYmxlIHZpZXcgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnQuXG4gKiBJbiBjYXNlIHRoaXMgdmFsdWUgaXMgdW5zZXQgdGhlbiBpdCB3b3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZVxuICogZWxlbWVudCBpdHNlbGYgKHZ1YSBgZ2V0TWF4U2VhcmNoU3dpcGVzKClgIHByb3BlcnR5KS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCB1bnRpbCB0aGUgZWxlbWVudCBpZGVudGlmaWVkXG4gKiBieSBgc3RyYXRlZ3lgIGFuZCBgc2VsZWN0b3JgIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZVxuICogZGVzdGluYXRpb24gZWxlbWVudCBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsT3B0c30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCwgZWxlbWVudElkLCAvLyBgZWxlbWVudGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlbGVtZW50SWRgIGluc3RlYWRcbiAgICBzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc1xuICB9ID0gb3B0cztcbiAgaWYgKCFzdHJhdGVneSB8fCAhc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBCb3RoIHN0cmF0ZWd5IGFuZCBzZWxlY3RvciBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy90b3VjaC9zY3JvbGwnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCB8fCBlbGVtZW50KSxcbiAgICBwYXJhbXM6IHtzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc30sXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUdBLFNBQVNDLFFBQVQsQ0FBbUJDLE9BQW5CLEVBQTRCO0VBQzFCLE9BQU9BLE9BQU8sR0FBR0MsYUFBQSxDQUFLQyxXQUFMLENBQWlCRCxhQUFBLENBQUtFLGFBQUwsQ0FBbUJILE9BQW5CLENBQWpCLENBQUgs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
213
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsInRvT3JpZ2luIiwiZWxlbWVudCIsInV0aWwiLCJ3cmFwRWxlbWVudCIsInVud3JhcEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1BvaW50IiwieCIsInkiLCJfIiwiaXNGaW5pdGUiLCJ0b1JlY3QiLCJsZWZ0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiLCJzb21lIiwidiIsIm1vYmlsZUNsaWNrR2VzdHVyZSIsIm9wdHMiLCJlbGVtZW50SWQiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsIm9yaWdpbiIsIm9mZnNldCIsIm1vYmlsZUxvbmdDbGlja0dlc3R1cmUiLCJkdXJhdGlvbiIsIm1vYmlsZURvdWJsZUNsaWNrR2VzdHVyZSIsIm1vYmlsZURyYWdHZXN0dXJlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJzcGVlZCIsInN0YXJ0IiwiZW5kIiwibW9iaWxlRmxpbmdHZXN0dXJlIiwiZGlyZWN0aW9uIiwiYXJlYSIsIm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlIiwicGVyY2VudCIsIm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUiLCJtb2JpbGVTd2lwZUdlc3R1cmUiLCJtb2JpbGVTY3JvbGxHZXN0dXJlIiwibW9iaWxlU2Nyb2xsQmFja1RvIiwiZWxlbWVudFRvSWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1vYmlsZVNjcm9sbCIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYXhTd2lwZXMiLCJwYXJhbXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VzdHVyZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuXG5mdW5jdGlvbiB0b09yaWdpbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IHV0aWwud3JhcEVsZW1lbnQodXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9Qb2ludCAoeCwgeSkge1xuICByZXR1cm4gXy5pc0Zpbml0ZSh4KSAmJiBfLmlzRmluaXRlKHkpID8ge3gsIHl9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB0b1JlY3QgKGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gW2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodF0uc29tZSgodikgPT4gIV8uaXNGaW5pdGUodikpXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2ltcGxlIGNsaWNrL3RhcCBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHs/Q2xpY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsaWNrR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvY2xpY2snLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgb2Zmc2V0OiB0b1BvaW50KHgsIHkpLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9uZ0NsaWNrT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlzIG1pc3NpbmcgdGhlbiBib3RoIGNsaWNrIG9mZnNldCBjb29yZGluYXRlcyBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgb2Zmc2V0IGFyZSBwcm92aWRlZCB0aGVuIHRoZSBjb29yZGluYXRlc1xuICogYXJlIHBhcnNlZCBhcyByZWxhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZHVyYXRpb24gWzUwMF0gLSBDbGljayBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gKiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgY2xpY2sgdGhhdCBsYXN0cyBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uXG4gKlxuICogQHBhcmFtIHs/TG9uZ0NsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVMb25nQ2xpY2tHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50SWQsXG4gICAgeCwgeSxcbiAgICBkdXJhdGlvbixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvbG9uZ19jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gICAgZHVyYXRpb24sXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGRvdWJsZSBjbGlja2VkLlxuICogSWYgdGhlIGVsZW1lbnQgaXMgbWlzc2luZyB0aGVuIGJvdGggY2xpY2sgb2Zmc2V0IGNvb3JkaW5hdGVzIG11c3QgYmUgcHJvdmlkZWQuXG4gKiBJZiBib3RoIHRoZSBlbGVtZW50IGlkIGFuZCBvZmZzZXQgYXJlIHByb3ZpZGVkIHRoZW4gdGhlIGNvb3JkaW5hdGVzXG4gKiBhcmUgcGFyc2VkIGFzIHJlbGF0aXZlIG9mZnNldHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZSB0byBkb3VibGUgY2xpY2sgb25cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSAtIFRoZSB5IGNvb3JkaW5hdGUgdG8gZG91YmxlIGNsaWNrIG9uXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIGNsaWNrIHRoYXQgbGFzdHMgZm9yIHRoZSBnaXZlbiBkdXJhdGlvblxuICpcbiAqIEBwYXJhbSB7P0RvdWJsZUNsaWNrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEb3VibGVDbGlja0dlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIHgsIHksXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL2RvdWJsZV9jbGljaycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBvZmZzZXQ6IHRvUG9pbnQoeCwgeSksXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiB0aGUgc3RhcnQgY29vcmRpbmF0ZXMgbXVzdCBiZSBwcm92aWRlZC5cbiAqIElmIGJvdGggdGhlIGVsZW1lbnQgaWQgYW5kIHRoZSBzdGFydCBjb29yZGluYXRlcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGVzZVxuICogY29vcmRpbmF0ZXMgYXJlIGNvbnNpZGVyZWQgYXMgb2Zmc2V0cyBmcm9tIHRoZSB0b3AgbGVmdCBlbGVtZW50IGNvcm5lci5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgc3RhcnRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSAtIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGhlIGRyYWdnaW5nIHN0YXJ0c1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRYIC0gVGhlIHggY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHshbnVtYmVyfSBlbmRZIC0gVGhlIHkgY29vcmRpbmF0ZSB3aGVyZSB0aGUgZHJhZ2dpbmcgZW5kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbMjUwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtXG4gKiB0aGlzIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogRHJhZ3MgdGhpcyBvYmplY3QgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gez9EcmFnT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVEcmFnR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURyYWdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9kcmFnJywgJ1BPU1QnLCB7XG4gICAgb3JpZ2luOiB0b09yaWdpbihlbGVtZW50SWQpLFxuICAgIHN0YXJ0OiB0b1BvaW50KHN0YXJ0WCwgc3RhcnRZKSxcbiAgICBlbmQ6IHRvUG9pbnQoZW5kWCwgZW5kWSksXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGbGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIGZsaW5nZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gZmxpbmcgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhpc1xuICogYXJlYSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIGZsaW5nIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiB0aGUgZmxpbmcgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHshc3RyaW5nfSBkaXJlY3Rpb24gLSBEaXJlY3Rpb24gb2YgdGhlIGZsaW5nLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzc1MDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzXG4gKiBnZXN0dXJlIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gZmxpbmdcbiAqIHZlbG9jaXR5IGZvciB0aGUgZ2l2ZW4gdmlldyAoNTAgYnkgZGVmYXVsdClcbiAqL1xuXG4vKipcbiAqIERyYWdzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gKlxuICogQHBhcmFtIHs/RmxpbmdPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBzdGlsbCBzY3JvbGwgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi5cbiAqL1xuY29tbWFuZHMubW9iaWxlRmxpbmdHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxpbmdHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9mbGluZycsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQaW5jaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGJlIHBpbmNoZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gcGluY2ggYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHBpbmNoIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgcGluY2ggYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBwaW5jaCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IHBlcmNlbnQgLSBUaGUgc2l6ZSBvZiB0aGUgcGluY2ggYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBwaW5jaCBhcmVhIHNpemUuXG4gKiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBmbG9hdCBudW1iZXJzIGluIHJhbmdlIDAuLjEsIHdoZXJlIDEuMCBpcyAxMDAlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHNwZWVkIFsyNTAwICogZGlzcGxheURlbnNpdHldIC0gVGhlIHNwZWVkIGF0IHdoaWNoIHRvIHBlcmZvcm1cbiAqIHRoaXMgZ2VzdHVyZSBpbiBwaXhlbHMgcGVyIHNlY29uZC4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtcyBhIHBpbmNoIGNsb3NlIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGluY2hDbG9zZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9nZXN0dXJlcy9waW5jaF9jbG9zZScsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwaW5jaCBvcGVuIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/UGluY2hPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgcHJvdmlkZWQgb3B0aW9ucyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVBpbmNoT3Blbkdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQaW5jaE9wZW5HZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvcGluY2hfb3BlbicsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBwZXJjZW50LFxuICAgIHNwZWVkLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dpcGVPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuXG4gKiBJZiB0aGUgZWxlbWVudCBpZCBpcyBtaXNzaW5nIHRoZW4gc3dpcGUgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHN3aXBlIGJvdW5kaW5nIGFyZWEgYXJlIHByb3ZpZGVkIHRoZW4gdGhlXG4gKiBhcmVhIGlzIGVmZmVjdGl2ZWx5IGlnbm9yZWQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGxlZnQgLSBUaGUgbGVmdCBjb29yZGluYXRlIG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiB0aGUgc3dpcGUgYm91bmRpbmcgYXJlYVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBzd2lwZSBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc3dpcGUuXG4gKiBBY2NlcHRhYmxlIHZhbHVlcyBhcmU6IGB1cGAsIGBkb3duYCwgYGxlZnRgIGFuZCBgcmlnaHRgIChjYXNlIGluc2Vuc2l0aXZlKVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBwZXJjZW50IC0gVGhlIHNpemUgb2YgdGhlIHN3aXBlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3dpcGUgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBpbiByYW5nZSAwLi4xLCB3aGVyZSAxLjAgaXMgMTAwJVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzcGVlZCBbNTAwMCAqIGRpc3BsYXlEZW5zaXR5XSAtIFRoZSBzcGVlZCBhdCB3aGljaCB0byBwZXJmb3JtIHRoaXNcbiAqIGdlc3R1cmUgaW4gcGl4ZWxzIHBlciBzZWNvbmQuIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZVxuICovXG5cbi8qKlxuICogUGVyZm9ybXMgYSBzd2lwZSBnZXN0dXJlLlxuICpcbiAqIEBwYXJhbSB7P1N3aXBlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVTd2lwZUdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZUdlc3R1cmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudElkLFxuICAgIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZ2VzdHVyZXMvc3dpcGUnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCksXG4gICAgYXJlYTogdG9SZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCksXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC5cbiAqIElmIHRoZSBlbGVtZW50IGlkIGlzIG1pc3NpbmcgdGhlbiBzY3JvbGwgYm91bmRpbmcgYXJlYSBtdXN0IGJlIHByb3ZpZGVkLlxuICogSWYgYm90aCB0aGUgZWxlbWVudCBpZCBhbmQgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhIGFyZSBwcm92aWRlZCB0aGVuIHRoaXNcbiAqIGFyZWEgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc2Nyb2xsIGJvdW5kaW5nIGFyZWFcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gd2lkdGggLSBUaGUgd2lkdGggb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbCBib3VuZGluZyBhcmVhXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGRpcmVjdGlvbiAtIERpcmVjdGlvbiBvZiB0aGUgc2Nyb2xsLlxuICogQWNjZXB0YWJsZSB2YWx1ZXMgYXJlOiBgdXBgLCBgZG93bmAsIGBsZWZ0YCBhbmQgYHJpZ2h0YCAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gcGVyY2VudCAtIFRoZSBzaXplIG9mIHRoZSBzY3JvbGwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBzY3JvbGxpbmcgYXJlYSBzaXplLlxuICogVmFsaWQgdmFsdWVzIG11c3QgYmUgZmxvYXQgbnVtYmVycyBncmVhdGVyIHRoYW4gemVybywgd2hlcmUgMS4wIGlzIDEwMCVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3BlZWQgWzUwMDAgKiBkaXNwbGF5RGVuc2l0eV0gLSBUaGUgc3BlZWQgYXQgd2hpY2ggdG8gcGVyZm9ybSB0aGlzIGdlc3R1cmVcbiAqIGluIHBpeGVscyBwZXIgc2Vjb25kLiBUaGUgdmFsdWUgbXVzdCBub3QgYmUgbmVnYXRpdmVcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1zIGEgc2Nyb2xsIGdlc3R1cmUuXG4gKlxuICogQHBhcmFtIHs/U2Nyb2xsT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHByb3ZpZGVkIG9wdGlvbnMgYXJlIG5vdCB2YWxpZFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9iamVjdCBjYW4gc3RpbGwgc2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNjcm9sbEdlc3R1cmUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxHZXN0dXJlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRJZCxcbiAgICBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsXG4gICAgZGlyZWN0aW9uLFxuICAgIHBlcmNlbnQsXG4gICAgc3BlZWQsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2dlc3R1cmVzL3Njcm9sbCcsICdQT1NUJywge1xuICAgIG9yaWdpbjogdG9PcmlnaW4oZWxlbWVudElkKSxcbiAgICBhcmVhOiB0b1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KSxcbiAgICBkaXJlY3Rpb24sXG4gICAgcGVyY2VudCxcbiAgICBzcGVlZCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNjcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZWxlbWVudElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQsXG4gKiB3aGljaCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZC4gSXQgaXMgcmVxdWlyZWQgdGhpcyBlbGVtZW50XG4gKiBpcyBhIHZhbGlkIHNjcm9sbGFibGUgY29udGFpbmVyIGFuZCBpdCB3YXMgbG9jYXRlZCBieSBgLWFuZHJvaWQgdWlhdXRvbWF0b3JgXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbGVtZW50VG9JZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgaXRlbSwgd2hpY2ggYmVsb25nc1xuICogdG8gdGhlIHNjcm9sbGFibGUgZWxlbWVudCBhYm92ZSwgYW5kIHdoaWNoIHNob3VsZCBiZWNvbWUgdmlzaWJsZSBhZnRlclxuICogdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gaXMgZmluaXNoZWQuIEl0IGlzIHJlcXVpcmVkIHRoaXMgZWxlbWVudFxuICogd2FzIGxvY2F0ZWQgYnkgYC1hbmRyb2lkIHVpYXV0b21hdG9yYCBzdHJhdGVneS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCBgZWxlbWVudElkYCB1bnRpbCBgZWxlbWVudFRvSWRgXG4gKiBiZWNvbWVzIHZpc2libGUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgYGVsZW1lbnRUb0lkYFxuICogaXMgYWxyZWFkeSB2aXNpYmxlIGluIHRoZSB2aWV3IHBvcnQuIE90aGVyd2lzZSBpdCB3b3VsZCBzY3JvbGxcbiAqIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgc2Nyb2xsYWJsZSBjb250cm9sIGFuZCB0cmllcyB0byByZWFjaCB0aGUgZGVzdGluYXRpb24gZWxlbWVudFxuICogYnkgc2Nyb2xsaW5nIGl0cyBwYXJlbnQgdG8gdGhlIGVuZCBzdGVwIGJ5IHN0ZXAuIFRoZSBzY3JvbGwgZGlyZWN0aW9uICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuICogaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0ge1Njcm9sbEVsZW1lbnRUb0VsZW1lbnRPcHRzfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHNjcm9sbGluZyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZFxuICovXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxCYWNrVG8gPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50SWQsIGVsZW1lbnRUb0lkfSA9IG9wdHM7XG4gIGlmICghZWxlbWVudElkIHx8ICFlbGVtZW50VG9JZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEJvdGggZWxlbWVudElkIGFuZCBlbGVtZW50VG9JZCBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoXG4gICAgYC9hcHBpdW0vZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50SWQpfS9zY3JvbGxfdG8vJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudFRvSWQpfWAsICdQT1NUJywge30pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTY3JvbGxPcHRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWRlbnRpZmllciBvZiBhbiBlbGVtZW50LiBJdCBpcyByZXF1aXJlZCB0aGlzIGVsZW1lbnRcbiAqIGlzIGEgdmFsaWQgc2Nyb2xsYWJsZSBjb250YWluZXIgYW5kIGl0IHdhcyBsb2NhdGVkIGJ5IGAtYW5kcm9pZCB1aWF1dG9tYXRvcmBcbiAqIHN0cmF0ZWd5LiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBmaXJzdCBjdXJyZW50bHkgYXZhaWxhYmxlIHNjcm9sbGFibGUgdmlld1xuICogaXMgc2VsZWN0ZWQgZm9yIHRoZSBpbnRlcmFjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gc3RyYXRlZ3kgVGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGBhY2Nlc3NpYmlsaXR5IGlkYCAoVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKVxuICogLSBgY2xhc3MgbmFtZWAgKFVpU2VsZWN0b3IoKS5jbGFzc05hbWUpXG4gKiAtIGAtYW5kcm9pZCB1aWF1dG9tYXRvcmAgKFVpU2VsZWN0b3IpXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHNlbGVjdG9yIFRoZSBjb3JyZXNwb25kaW5nIGxvb2t1cCB2YWx1ZSBmb3IgdGhlIGdpdmVuXG4gKiBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbWF4U3dpcGVzIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2lwZXMgdG8gcGVyZm9ybVxuICogb24gdGhlIHRhcmdldCBzY3JvbGxhYmxlIHZpZXcgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIGVsZW1lbnQuXG4gKiBJbiBjYXNlIHRoaXMgdmFsdWUgaXMgdW5zZXQgdGhlbiBpdCB3b3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZVxuICogZWxlbWVudCBpdHNlbGYgKHZ1YSBgZ2V0TWF4U2VhcmNoU3dpcGVzKClgIHByb3BlcnR5KS5cbiAqL1xuXG4vKipcbiAqIFNjcm9sbHMgdGhlIGdpdmVuIHNjcm9sbGFibGUgZWxlbWVudCB1bnRpbCB0aGUgZWxlbWVudCBpZGVudGlmaWVkXG4gKiBieSBgc3RyYXRlZ3lgIGFuZCBgc2VsZWN0b3JgIGJlY29tZXMgdmlzaWJsZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIHRoZVxuICogZGVzdGluYXRpb24gZWxlbWVudCBpcyBhbHJlYWR5IHZpc2libGUgaW4gdGhlIHZpZXcgcG9ydC4gT3RoZXJ3aXNlIGl0IHdvdWxkIHNjcm9sbFxuICogdG8gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBzY3JvbGxhYmxlIGNvbnRyb2wgYW5kIHRyaWVzIHRvIHJlYWNoIHRoZSBkZXN0aW5hdGlvbiBlbGVtZW50XG4gKiBieSBzY3JvbGxpbmcgaXRzIHBhcmVudCB0byB0aGUgZW5kIHN0ZXAgYnkgc3RlcC4gVGhlIHNjcm9sbCBkaXJlY3Rpb24gKHZlcnRpY2FsIG9yIGhvcml6b250YWwpXG4gKiBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7U2Nyb2xsT3B0c30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBzY3JvbGxpbmcgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCwgZWxlbWVudElkLCAvLyBgZWxlbWVudGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBlbGVtZW50SWRgIGluc3RlYWRcbiAgICBzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc1xuICB9ID0gb3B0cztcbiAgaWYgKCFzdHJhdGVneSB8fCAhc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBCb3RoIHN0cmF0ZWd5IGFuZCBzZWxlY3RvciBhcmd1bWVudHMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy90b3VjaC9zY3JvbGwnLCAnUE9TVCcsIHtcbiAgICBvcmlnaW46IHRvT3JpZ2luKGVsZW1lbnRJZCB8fCBlbGVtZW50KSxcbiAgICBwYXJhbXM6IHtzdHJhdGVneSwgc2VsZWN0b3IsIG1heFN3aXBlc30sXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUduQixTQUFTQyxRQUFRLENBQUVDLE9BQU8sRUFBRTtFQUMxQixPQUFPQSxPQUFPLEdBQUdDLGFBQUksQ0FBQ0MsV0FBVyxDQUFDRCxhQUFJLENBQUNFLGFBQWEsQ0FBQ0gsT0FBTyxDQUFDLENBQUMsR0FBR0ksU0FB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gestures.js","names":["commands","toOrigin","element","util","wrapElement","unwrapElement","undefined","toPoint","x","y","_","isFinite","toRect","left","top","width","height","some","v","mobileClickGesture","opts","elementId","uiautomator2","jwproxy","command","origin","offset","mobileLongClickGesture","duration","mobileDoubleClickGesture","mobileDragGesture","startX","startY","endX","endY","speed","start","end","mobileFlingGesture","direction","area","mobilePinchCloseGesture","percent","mobilePinchOpenGesture","mobileSwipeGesture","mobileScrollGesture","mobileScrollBackTo","elementToId","errors","InvalidArgumentError","mobileScroll","strategy","selector","maxSwipes","params"],"sources":["../../../lib/commands/gestures.js"],"sourcesContent":["import { util } from 'appium/support';\nimport _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst commands = {};\n\n\nfunction toOrigin (element) {\n return element ? util.wrapElement(util.unwrapElement(element)) : undefined;\n}\n\nfunction toPoint (x, y) {\n return _.isFinite(x) && _.isFinite(y) ? {x, y} : undefined;\n}\n\nfunction toRect (left, top, width, height) {\n return [left, top, width, height].some((v) => !_.isFinite(v))\n ? undefined\n : {left, top, width, height};\n}\n\n/**\n * @typedef {Object} ClickOptions\n * @property {?string} elementId - The id of the element to be clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to click on\n * @property {?number} y - The y coordinate to click on\n */\n\n/**\n * Performs a simple click/tap gesture\n *\n * @param {?ClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileClickGesture = async function mobileClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n });\n};\n\n/**\n * @typedef {Object} LongClickOptions\n * @property {?string} elementId - The id of the element to be clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to click on\n * @property {?number} y - The y coordinate to click on\n * @property {?number} duration [500] - Click duration in milliseconds.\n * The value must not be negative\n */\n\n/**\n * Performs a click that lasts for the given duration\n *\n * @param {?LongClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileLongClickGesture = async function mobileLongClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n duration,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/long_click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n duration,\n });\n};\n\n/**\n * @typedef {Object} DoubleClickOptions\n * @property {?string} elementId - The id of the element to be double clicked.\n * If the element is missing then both click offset coordinates must be provided.\n * If both the element id and offset are provided then the coordinates\n * are parsed as relative offsets from the top left corner of the element.\n * @property {?number} x - The x coordinate to double click on\n * @property {?number} y - The y coordinate to double click on\n */\n\n/**\n * Performs a click that lasts for the given duration\n *\n * @param {?DoubleClickOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileDoubleClickGesture = async function mobileDoubleClickGesture (opts = {}) {\n const {\n elementId,\n x, y,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/double_click', 'POST', {\n origin: toOrigin(elementId),\n offset: toPoint(x, y),\n });\n};\n\n/**\n * @typedef {Object} DragOptions\n * @property {?string} elementId - The id of the element to be dragged.\n * If the element id is missing then the start coordinates must be provided.\n * If both the element id and the start coordinates are provided then these\n * coordinates are considered as offsets from the top left element corner.\n * @property {?number} startX - The x coordinate where the dragging starts\n * @property {?number} startY - The y coordinate where the dragging starts\n * @property {!number} endX - The x coordinate where the dragging ends\n * @property {!number} endY - The y coordinate where the dragging ends\n * @property {?number} speed [2500 * displayDensity] - The speed at which to perform\n * this gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Drags this object to the specified location.\n *\n * @param {?DragOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileDragGesture = async function mobileDragGesture (opts = {}) {\n const {\n elementId,\n startX, startY,\n endX, endY,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/drag', 'POST', {\n origin: toOrigin(elementId),\n start: toPoint(startX, startY),\n end: toPoint(endX, endY),\n speed,\n });\n};\n\n/**\n * @typedef {Object} FlingOptions\n * @property {?string} elementId - The id of the element to be flinged.\n * If the element id is missing then fling bounding area must be provided.\n * If both the element id and the fling bounding area are provided then this\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the fling bounding area\n * @property {?number} top - The top coordinate of the fling bounding area\n * @property {?number} width - The width of the fling bounding area\n * @property {?number} height - The height of the fling bounding area\n * @property {!string} direction - Direction of the fling.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {?number} speed [7500 * displayDensity] - The speed at which to perform this\n * gesture in pixels per second. The value must be greater than the minimum fling\n * velocity for the given view (50 by default)\n */\n\n/**\n * Drags to the specified location.\n *\n * @param {?FlingOptions} opts\n * @throws {Error} if provided options are not valid\n * @returns {boolean} True if the object can still scroll in the given direction.\n */\ncommands.mobileFlingGesture = async function mobileFlingGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/fling', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n speed,\n });\n};\n\n/**\n * @typedef {Object} PinchOptions\n * @property {?string} elementId - The id of the element to be pinched.\n * If the element id is missing then pinch bounding area must be provided.\n * If both the element id and the pinch bounding area are provided then the\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the pinch bounding area\n * @property {?number} top - The top coordinate of the pinch bounding area\n * @property {?number} width - The width of the pinch bounding area\n * @property {?number} height - The height of the pinch bounding area\n * @property {!number} percent - The size of the pinch as a percentage of the pinch area size.\n * Valid values must be float numbers in range 0..1, where 1.0 is 100%\n * @property {?number} speed [2500 * displayDensity] - The speed at which to perform\n * this gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a pinch close gesture.\n *\n * @param {?PinchOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobilePinchCloseGesture = async function mobilePinchCloseGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/pinch_close', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n percent,\n speed,\n });\n};\n\n/**\n * Performs a pinch open gesture.\n *\n * @param {?PinchOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobilePinchOpenGesture = async function mobilePinchOpenGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/pinch_open', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} SwipeOptions\n * @property {?string} elementId - The id of the element to be swiped.\n * If the element id is missing then swipe bounding area must be provided.\n * If both the element id and the swipe bounding area are provided then the\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the swipe bounding area\n * @property {?number} top - The top coordinate of the swipe bounding area\n * @property {?number} width - The width of the swipe bounding area\n * @property {?number} height - The height of the swipe bounding area\n * @property {!string} direction - Direction of the swipe.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {!number} percent - The size of the swipe as a percentage of the swipe area size.\n * Valid values must be float numbers in range 0..1, where 1.0 is 100%\n * @property {?number} speed [5000 * displayDensity] - The speed at which to perform this\n * gesture in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a swipe gesture.\n *\n * @param {?SwipeOptions} opts\n * @throws {Error} if provided options are not valid\n */\ncommands.mobileSwipeGesture = async function mobileSwipeGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/swipe', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} ScrollOptions\n * @property {?string} elementId - The id of the element to be scrolled.\n * If the element id is missing then scroll bounding area must be provided.\n * If both the element id and the scroll bounding area are provided then this\n * area is effectively ignored.\n * @property {?number} left - The left coordinate of the scroll bounding area\n * @property {?number} top - The top coordinate of the scroll bounding area\n * @property {?number} width - The width of the scroll bounding area\n * @property {?number} height - The height of the scroll bounding area\n * @property {!string} direction - Direction of the scroll.\n * Acceptable values are: `up`, `down`, `left` and `right` (case insensitive)\n * @property {!number} percent - The size of the scroll as a percentage of the scrolling area size.\n * Valid values must be float numbers greater than zero, where 1.0 is 100%\n * @property {?number} speed [5000 * displayDensity] - The speed at which to perform this gesture\n * in pixels per second. The value must not be negative\n */\n\n/**\n * Performs a scroll gesture.\n *\n * @param {?ScrollOptions} opts\n * @throws {Error} if provided options are not valid\n * @returns {boolean} True if the object can still scroll in the given direction.\n */\ncommands.mobileScrollGesture = async function mobileScrollGesture (opts = {}) {\n const {\n elementId,\n left, top, width, height,\n direction,\n percent,\n speed,\n } = opts;\n return await this.uiautomator2.jwproxy.command('/appium/gestures/scroll', 'POST', {\n origin: toOrigin(elementId),\n area: toRect(left, top, width, height),\n direction,\n percent,\n speed,\n });\n};\n\n/**\n * @typedef {Object} ScrollElementToElementOpts\n * @property {string} elementId The identifier of the scrollable element,\n * which is going to be scrolled. It is required this element\n * is a valid scrollable container and it was located by `-android uiautomator`\n * strategy.\n * @property {string} elementToId The identifier of the item, which belongs\n * to the scrollable element above, and which should become visible after\n * the scrolling operation is finished. It is required this element\n * was located by `-android uiautomator` strategy.\n */\n\n/**\n * Scrolls the given scrollable element `elementId` until `elementToId`\n * becomes visible. This function returns immediately if the `elementToId`\n * is already visible in the view port. Otherwise it would scroll\n * to the very beginning of the scrollable control and tries to reach the destination element\n * by scrolling its parent to the end step by step. The scroll direction (vertical or horizontal)\n * is detected automatically.\n *\n * @param {ScrollElementToElementOpts} opts\n * @throws {Error} if the scrolling operation cannot be performed\n */\ncommands.mobileScrollBackTo = async function (opts = {}) {\n const {elementId, elementToId} = opts;\n if (!elementId || !elementToId) {\n throw new errors.InvalidArgumentError(`Both elementId and elementToId arguments must be provided`);\n }\n return await this.uiautomator2.jwproxy.command(\n `/appium/element/${util.unwrapElement(elementId)}/scroll_to/${util.unwrapElement(elementToId)}`, 'POST', {});\n};\n\n/**\n * @typedef {Object} ScrollOpts\n * @property {?string} elementId The identifier of an element. It is required this element\n * is a valid scrollable container and it was located by `-android uiautomator`\n * strategy. If this property is not provided then the first currently available scrollable view\n * is selected for the interaction.\n * @property {!string} strategy The following strategies are supported:\n * - `accessibility id` (UiSelector().description)\n * - `class name` (UiSelector().className)\n * - `-android uiautomator` (UiSelector)\n * @property {!string} selector The corresponding lookup value for the given\n * strategy.\n * @property {?number} maxSwipes The maximum number of swipes to perform\n * on the target scrollable view in order to reach the destination element.\n * In case this value is unset then it would be retrieved from the scrollable\n * element itself (vua `getMaxSearchSwipes()` property).\n */\n\n/**\n * Scrolls the given scrollable element until the element identified\n * by `strategy` and `selector` becomes visible. This function returns immediately if the\n * destination element is already visible in the view port. Otherwise it would scroll\n * to the very beginning of the scrollable control and tries to reach the destination element\n * by scrolling its parent to the end step by step. The scroll direction (vertical or horizontal)\n * is detected automatically.\n *\n * @param {ScrollOpts} opts\n * @throws {Error} if the scrolling operation cannot be performed\n */\ncommands.mobileScroll = async function (opts = {}) {\n const {\n element, elementId, // `element` is deprecated, use `elementId` instead\n strategy, selector, maxSwipes\n } = opts;\n if (!strategy || !selector) {\n throw new errors.InvalidArgumentError(`Both strategy and selector arguments must be provided`);\n }\n return await this.uiautomator2.jwproxy.command('/touch/scroll', 'POST', {\n origin: toOrigin(elementId || element),\n params: {strategy, selector, maxSwipes},\n });\n};\n\nexport default commands;\n"],"mappings":"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"}
@@ -1,36 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _alert = _interopRequireDefault(require("./alert"));
13
-
14
10
  var _find = _interopRequireDefault(require("./find"));
15
-
16
11
  var _general = _interopRequireDefault(require("./general"));
17
-
18
12
  var _touch = _interopRequireDefault(require("./touch"));
19
-
20
13
  var _element = _interopRequireDefault(require("./element"));
21
-
22
14
  var _actions = _interopRequireDefault(require("./actions"));
23
-
24
15
  var _viewport = _interopRequireDefault(require("./viewport"));
25
-
26
16
  var _screenshot = _interopRequireDefault(require("./screenshot"));
27
-
28
17
  var _battery = _interopRequireDefault(require("./battery"));
29
-
30
18
  var _gestures = _interopRequireDefault(require("./gestures"));
31
-
32
19
  let commands = {};
33
- Object.assign(commands, _alert.default, _find.default, _general.default, _touch.default, _actions.default, _element.default, _viewport.default, _screenshot.default, _battery.default, _gestures.default);
20
+ Object.assign(commands, _alert.default, _find.default, _general.default, _touch.default, _actions.default, _element.default, _viewport.default, _screenshot.default, _battery.default, _gestures.default
21
+ );
34
22
  var _default = commands;
35
23
  exports.default = _default;
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImFsZXJ0Q21kcyIsImZpbmRDbWRzIiwiZ2VuZXJhbENtZHMiLCJ0b3VjaENtZHMiLCJhY3Rpb25zQ21kcyIsImVsZW1lbnRDbWRzIiwidmlld3BvcnRDbWRzIiwic2NyZWVuc2hvdENtZHMiLCJiYXR0ZXJ5Q21kcyIsImdlc3R1cmVzQ21kcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYWxlcnRDbWRzIGZyb20gJy4vYWxlcnQnO1xuaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgZ2VuZXJhbENtZHMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCB0b3VjaENtZHMgZnJvbSAnLi90b3VjaCc7XG5pbXBvcnQgZWxlbWVudENtZHMgZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCBhY3Rpb25zQ21kcyBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHZpZXdwb3J0Q21kcyBmcm9tICcuL3ZpZXdwb3J0JztcbmltcG9ydCBzY3JlZW5zaG90Q21kcyBmcm9tICcuL3NjcmVlbnNob3QnO1xuaW1wb3J0IGJhdHRlcnlDbWRzIGZyb20gJy4vYmF0dGVyeSc7XG5pbXBvcnQgZ2VzdHVyZXNDbWRzIGZyb20gJy4vZ2VzdHVyZXMnO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBhbGVydENtZHMsXG4gIGZpbmRDbWRzLFxuICBnZW5lcmFsQ21kcyxcbiAgdG91Y2hDbWRzLFxuICBhY3Rpb25zQ21kcyxcbiAgZWxlbWVudENtZHMsXG4gIHZpZXdwb3J0Q21kcyxcbiAgc2NyZWVuc2hvdENtZHMsXG4gIGJhdHRlcnlDbWRzLFxuICBnZXN0dXJlc0NtZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsUUFBUSxHQUFHLEVBQWY7QUFDQUMsTUFBTSxDQUFDQyxNQUFQLENBQ0VGLFFBREYsRUFFRUcsY0FGRixFQUdFQyxhQUhGLEVBSUVDLGdCQUpGLEVBS0VDLGNBTEYsRUFNRUMsZ0JBTkYsRUFPRUMsZ0JBUEYsRUFRRUMsaUJBUkYsRUFTRUMsbUJBVEYsRUFVRUMsZ0JBVkYsRUFXRUMsaUJBWEY7ZUFlZVosUSJ9
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImFsZXJ0Q21kcyIsImZpbmRDbWRzIiwiZ2VuZXJhbENtZHMiLCJ0b3VjaENtZHMiLCJhY3Rpb25zQ21kcyIsImVsZW1lbnRDbWRzIiwidmlld3BvcnRDbWRzIiwic2NyZWVuc2hvdENtZHMiLCJiYXR0ZXJ5Q21kcyIsImdlc3R1cmVzQ21kcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYWxlcnRDbWRzIGZyb20gJy4vYWxlcnQnO1xuaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgZ2VuZXJhbENtZHMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCB0b3VjaENtZHMgZnJvbSAnLi90b3VjaCc7XG5pbXBvcnQgZWxlbWVudENtZHMgZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCBhY3Rpb25zQ21kcyBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHZpZXdwb3J0Q21kcyBmcm9tICcuL3ZpZXdwb3J0JztcbmltcG9ydCBzY3JlZW5zaG90Q21kcyBmcm9tICcuL3NjcmVlbnNob3QnO1xuaW1wb3J0IGJhdHRlcnlDbWRzIGZyb20gJy4vYmF0dGVyeSc7XG5pbXBvcnQgZ2VzdHVyZXNDbWRzIGZyb20gJy4vZ2VzdHVyZXMnO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBhbGVydENtZHMsXG4gIGZpbmRDbWRzLFxuICBnZW5lcmFsQ21kcyxcbiAgdG91Y2hDbWRzLFxuICBhY3Rpb25zQ21kcyxcbiAgZWxlbWVudENtZHMsXG4gIHZpZXdwb3J0Q21kcyxcbiAgc2NyZWVuc2hvdENtZHMsXG4gIGJhdHRlcnlDbWRzLFxuICBnZXN0dXJlc0NtZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCQyxNQUFNLENBQUNDLE1BQU0sQ0FDWEYsUUFBUSxFQUNSRyxjQUFTLEVBQ1RDLGFBQVEsRUFDUkMsZ0JBQVcsRUFDWEMsY0FBUyxFQUNUQyxnQkFBVyxFQUNYQyxnQkFBVyxFQUNYQyxpQkFBWSxFQUNaQyxtQkFBYyxFQUNkQyxnQkFBVyxFQUNYQztBQUFZLENBRWI7QUFBQyxlQUVhWixRQUFRO0FBQUEifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["commands","Object","assign","alertCmds","findCmds","generalCmds","touchCmds","actionsCmds","elementCmds","viewportCmds","screenshotCmds","batteryCmds","gesturesCmds"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import alertCmds from './alert';\nimport findCmds from './find';\nimport generalCmds from './general';\nimport touchCmds from './touch';\nimport elementCmds from './element';\nimport actionsCmds from './actions';\nimport viewportCmds from './viewport';\nimport screenshotCmds from './screenshot';\nimport batteryCmds from './battery';\nimport gesturesCmds from './gestures';\n\nlet commands = {};\nObject.assign(\n commands,\n alertCmds,\n findCmds,\n generalCmds,\n touchCmds,\n actionsCmds,\n elementCmds,\n viewportCmds,\n screenshotCmds,\n batteryCmds,\n gesturesCmds,\n // add other command types here\n);\n\nexport default commands;\n\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIA,QAAQ,GAAG,CAAC,CAAC;AACjBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,cAAS,EACTC,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,iBAAY,EACZC,mBAAc,EACdC,gBAAW,EACXC;AAAY,CAEb;AAAC,eAEaZ,QAAQ;AAAA"}
@@ -4,25 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  const commands = {};
11
-
12
9
  commands.getScreenshot = async function () {
13
10
  if (this.mjpegStream) {
14
11
  const data = await this.mjpegStream.lastChunkPNGBase64();
15
-
16
12
  if (data) {
17
13
  return data;
18
14
  }
19
-
20
15
  this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' + 'was no data yet. Falling back to regular screenshot methods.');
21
16
  }
22
-
23
17
  return await this.uiautomator2.jwproxy.command('/screenshot', 'GET');
24
18
  };
25
-
26
19
  var _default = commands;
27
20
  exports.default = _default;
28
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImdldFNjcmVlbnNob3QiLCJtanBlZ1N0cmVhbSIsImRhdGEiLCJsYXN0Q2h1bmtQTkdCYXNlNjQiLCJsb2ciLCJ3YXJuIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvc2NyZWVuc2hvdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb21tYW5kcy5nZXRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLmxhc3RDaHVua1BOR0Jhc2U2NCgpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy5sb2cud2FybignVHJpZWQgdG8gZ2V0IHNjcmVlbnNob3QgZnJvbSBhY3RpdmUgTUpQRUcgc3RyZWFtLCBidXQgdGhlcmUgJyArXG4gICAgICAnd2FzIG5vIGRhdGEgeWV0LiBGYWxsaW5nIGJhY2sgdG8gcmVndWxhciBzY3JlZW5zaG90IG1ldGhvZHMuJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NjcmVlbnNob3QnLCAnR0VUJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUVBQSxRQUFRLENBQUNDLGFBQVQsR0FBeUIsa0JBQWtCO0VBQ3pDLElBQUksS0FBS0MsV0FBVCxFQUFzQjtJQUNwQixNQUFNQyxJQUFJLEdBQUcsTUFBTSxLQUFLRCxXQUFMLENBQWlCRSxrQkFBakIsRUFBbkI7O0lBQ0EsSUFBSUQsSUFBSixFQUFVO01BQ1IsT0FBT0EsSUFBUDtJQUNEOztJQUNELEtBQUtFLEdBQUwsQ0FBU0MsSUFBVCxDQUFjLGlFQUNaLDhEQURGO0VBRUQ7O0VBQ0QsT0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxhQUFsQyxFQUFpRCxLQUFqRCxDQUFiO0FBQ0QsQ0FWRDs7ZUFZZVQsUSJ9
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImdldFNjcmVlbnNob3QiLCJtanBlZ1N0cmVhbSIsImRhdGEiLCJsYXN0Q2h1bmtQTkdCYXNlNjQiLCJsb2ciLCJ3YXJuIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvc2NyZWVuc2hvdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb21tYW5kcy5nZXRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLmxhc3RDaHVua1BOR0Jhc2U2NCgpO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgdGhpcy5sb2cud2FybignVHJpZWQgdG8gZ2V0IHNjcmVlbnNob3QgZnJvbSBhY3RpdmUgTUpQRUcgc3RyZWFtLCBidXQgdGhlcmUgJyArXG4gICAgICAnd2FzIG5vIGRhdGEgeWV0LiBGYWxsaW5nIGJhY2sgdG8gcmVndWxhciBzY3JlZW5zaG90IG1ldGhvZHMuJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NjcmVlbnNob3QnLCAnR0VUJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLE1BQU1BLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFbkJBLFFBQVEsQ0FBQ0MsYUFBYSxHQUFHLGtCQUFrQjtFQUN6QyxJQUFJLElBQUksQ0FBQ0MsV0FBVyxFQUFFO0lBQ3BCLE1BQU1DLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQ0QsV0FBVyxDQUFDRSxrQkFBa0IsRUFBRTtJQUN4RCxJQUFJRCxJQUFJLEVBQUU7TUFDUixPQUFPQSxJQUFJO0lBQ2I7SUFDQSxJQUFJLENBQUNFLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLDhEQUE4RCxHQUMxRSw4REFBOEQsQ0FBQztFQUNuRTtFQUNBLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztBQUN0RSxDQUFDO0FBQUMsZUFFYVQsUUFBUTtBQUFBIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","names":["commands","getScreenshot","mjpegStream","data","lastChunkPNGBase64","log","warn","uiautomator2","jwproxy","command"],"sources":["../../../lib/commands/screenshot.js"],"sourcesContent":["const commands = {};\n\ncommands.getScreenshot = async function () {\n if (this.mjpegStream) {\n const data = await this.mjpegStream.lastChunkPNGBase64();\n if (data) {\n return data;\n }\n this.log.warn('Tried to get screenshot from active MJPEG stream, but there ' +\n 'was no data yet. Falling back to regular screenshot methods.');\n }\n return await this.uiautomator2.jwproxy.command('/screenshot', 'GET');\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnBA,QAAQ,CAACC,aAAa,GAAG,kBAAkB;EACzC,IAAI,IAAI,CAACC,WAAW,EAAE;IACpB,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACD,WAAW,CAACE,kBAAkB,EAAE;IACxD,IAAID,IAAI,EAAE;MACR,OAAOA,IAAI;IACb;IACA,IAAI,CAACE,GAAG,CAACC,IAAI,CAAC,8DAA8D,GAC1E,8DAA8D,CAAC;EACnE;EACA,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;AACtE,CAAC;AAAC,eAEaT,QAAQ;AAAA"}
@@ -4,15 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  let commands = {},
11
- extensions = {};
12
-
9
+ extensions = {};
13
10
  commands.doPerformMultiAction = async function (elementId, states) {
14
11
  let opts;
15
-
16
12
  if (elementId) {
17
13
  opts = {
18
14
  elementId,
@@ -26,7 +22,6 @@ commands.doPerformMultiAction = async function (elementId, states) {
26
22
  return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);
27
23
  }
28
24
  };
29
-
30
25
  commands.performActions = async function (actions) {
31
26
  this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);
32
27
  const preprocessedActions = actions.map(action => Object.assign({}, action, action.type === 'pointer' ? {
@@ -39,8 +34,7 @@ commands.performActions = async function (actions) {
39
34
  actions: preprocessedActions
40
35
  });
41
36
  };
42
-
43
37
  Object.assign(extensions, commands);
44
38
  var _default = extensions;
45
39
  exports.default = _default;
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dGVuc2lvbnMiLCJkb1BlcmZvcm1NdWx0aUFjdGlvbiIsImVsZW1lbnRJZCIsInN0YXRlcyIsIm9wdHMiLCJhY3Rpb25zIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJwZXJmb3JtQWN0aW9ucyIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZXByb2Nlc3NlZEFjdGlvbnMiLCJtYXAiLCJhY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwicGFyYW1ldGVycyIsInBvaW50ZXJUeXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL3RvdWNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tYW5kcyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmRvUGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCwgc3RhdGVzKSB7XG4gIGxldCBvcHRzO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3RvdWNoL211bHRpL3BlcmZvcm0nLCAnUE9TVCcsIG9wdHMpO1xuICB9XG59O1xuXG5jb21tYW5kcy5wZXJmb3JtQWN0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIFczQyBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KGFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICAvLyBUaGlzIGlzIG1hbmRhdG9yeSwgc2luY2UgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgcG9pbnRlciB0eXBlXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSk7XG4gIHRoaXMubG9nLmRlYnVnKGBQcmVwcm9jZXNzZWQgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShwcmVwcm9jZXNzZWRBY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FjdGlvbnMnLCAnUE9TVCcsIHthY3Rpb25zOiBwcmVwcm9jZXNzZWRBY3Rpb25zfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLFVBQVUsR0FBRyxFQUFoQzs7QUFFQUQsUUFBUSxDQUFDRSxvQkFBVCxHQUFnQyxnQkFBZ0JDLFNBQWhCLEVBQTJCQyxNQUEzQixFQUFtQztFQUNqRSxJQUFJQyxJQUFKOztFQUNBLElBQUlGLFNBQUosRUFBZTtJQUNiRSxJQUFJLEdBQUc7TUFDTEYsU0FESztNQUVMRyxPQUFPLEVBQUVGO0lBRkosQ0FBUDtJQUtBLE9BQU8sTUFBTSxLQUFLRyxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0Msc0JBQWxDLEVBQTBELE1BQTFELEVBQWtFSixJQUFsRSxDQUFiO0VBQ0QsQ0FQRCxNQU9PO0lBQ0xBLElBQUksR0FBRztNQUNMQyxPQUFPLEVBQUVGO0lBREosQ0FBUDtJQUdBLE9BQU8sTUFBTSxLQUFLRyxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0Msc0JBQWxDLEVBQTBELE1BQTFELEVBQWtFSixJQUFsRSxDQUFiO0VBQ0Q7QUFDRixDQWZEOztBQWlCQUwsUUFBUSxDQUFDVSxjQUFULEdBQTBCLGdCQUFnQkosT0FBaEIsRUFBeUI7RUFDakQsS0FBS0ssR0FBTCxDQUFTQyxLQUFULENBQWdCLHVDQUFzQ0MsSUFBSSxDQUFDQyxTQUFMLENBQWVSLE9BQWYsRUFBd0IsSUFBeEIsRUFBOEIsSUFBOUIsQ0FBb0MsRUFBMUY7RUFFQSxNQUFNUyxtQkFBbUIsR0FBR1QsT0FBTyxDQUNoQ1UsR0FEeUIsQ0FDcEJDLE1BQUQsSUFBWUMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkYsTUFBbEIsRUFBMEJBLE1BQU0sQ0FBQ0csSUFBUCxLQUFnQixTQUFoQixHQUE0QjtJQUNyRUMsVUFBVSxFQUFFO01BQ1ZDLFdBQVcsRUFBRTtJQURIO0VBRHlELENBQTVCLEdBSXZDLEVBSmEsQ0FEUyxDQUE1QjtFQU1BLEtBQUtYLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQix5QkFBd0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxtQkFBZixFQUFvQyxJQUFwQyxFQUEwQyxJQUExQyxDQUFnRCxFQUF4RjtFQUNBLE9BQU8sTUFBTSxLQUFLUixZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0MsVUFBbEMsRUFBOEMsTUFBOUMsRUFBc0Q7SUFBQ0gsT0FBTyxFQUFFUztFQUFWLENBQXRELENBQWI7QUFDRCxDQVhEOztBQWFBRyxNQUFNLENBQUNDLE1BQVAsQ0FBY2xCLFVBQWQsRUFBMEJELFFBQTFCO2VBQ2VDLFUifQ==
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dGVuc2lvbnMiLCJkb1BlcmZvcm1NdWx0aUFjdGlvbiIsImVsZW1lbnRJZCIsInN0YXRlcyIsIm9wdHMiLCJhY3Rpb25zIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJwZXJmb3JtQWN0aW9ucyIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZXByb2Nlc3NlZEFjdGlvbnMiLCJtYXAiLCJhY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwicGFyYW1ldGVycyIsInBvaW50ZXJUeXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL3RvdWNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tYW5kcyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbW1hbmRzLmRvUGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCwgc3RhdGVzKSB7XG4gIGxldCBvcHRzO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvdG91Y2gvbXVsdGkvcGVyZm9ybScsICdQT1NUJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3RvdWNoL211bHRpL3BlcmZvcm0nLCAnUE9TVCcsIG9wdHMpO1xuICB9XG59O1xuXG5jb21tYW5kcy5wZXJmb3JtQWN0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIChhY3Rpb25zKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBSZWNlaXZlZCB0aGUgZm9sbG93aW5nIFczQyBhY3Rpb25zOiAke0pTT04uc3RyaW5naWZ5KGFjdGlvbnMsIG51bGwsICcgICcpfWApO1xuICAvLyBUaGlzIGlzIG1hbmRhdG9yeSwgc2luY2UgU2VsZW5pdW0gQVBJIHVzZXMgTU9VU0UgYXMgdGhlIGRlZmF1bHQgcG9pbnRlciB0eXBlXG4gIGNvbnN0IHByZXByb2Nlc3NlZEFjdGlvbnMgPSBhY3Rpb25zXG4gICAgLm1hcCgoYWN0aW9uKSA9PiBPYmplY3QuYXNzaWduKHt9LCBhY3Rpb24sIGFjdGlvbi50eXBlID09PSAncG9pbnRlcicgPyB7XG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIHBvaW50ZXJUeXBlOiAndG91Y2gnXG4gICAgICB9XG4gICAgfSA6IHt9KSk7XG4gIHRoaXMubG9nLmRlYnVnKGBQcmVwcm9jZXNzZWQgYWN0aW9uczogJHtKU09OLnN0cmluZ2lmeShwcmVwcm9jZXNzZWRBY3Rpb25zLCBudWxsLCAnICAnKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FjdGlvbnMnLCAnUE9TVCcsIHthY3Rpb25zOiBwcmVwcm9jZXNzZWRBY3Rpb25zfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFbENELFFBQVEsQ0FBQ0Usb0JBQW9CLEdBQUcsZ0JBQWdCQyxTQUFTLEVBQUVDLE1BQU0sRUFBRTtFQUNqRSxJQUFJQyxJQUFJO0VBQ1IsSUFBSUYsU0FBUyxFQUFFO0lBQ2JFLElBQUksR0FBRztNQUNMRixTQUFTO01BQ1RHLE9BQU8sRUFBRUY7SUFDWCxDQUFDO0lBRUQsT0FBTyxNQUFNLElBQUksQ0FBQ0csWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLEVBQUVKLElBQUksQ0FBQztFQUN0RixDQUFDLE1BQU07SUFDTEEsSUFBSSxHQUFHO01BQ0xDLE9BQU8sRUFBRUY7SUFDWCxDQUFDO0lBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQ0csWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLEVBQUVKLElBQUksQ0FBQztFQUN0RjtBQUNGLENBQUM7QUFFREwsUUFBUSxDQUFDVSxjQUFjLEdBQUcsZ0JBQWdCSixPQUFPLEVBQUU7RUFDakQsSUFBSSxDQUFDSyxHQUFHLENBQUNDLEtBQUssQ0FBRSx1Q0FBc0NDLElBQUksQ0FBQ0MsU0FBUyxDQUFDUixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBRSxFQUFDLENBQUM7RUFFNUYsTUFBTVMsbUJBQW1CLEdBQUdULE9BQU8sQ0FDaENVLEdBQUcsQ0FBRUMsTUFBTSxJQUFLQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUYsTUFBTSxFQUFFQSxNQUFNLENBQUNHLElBQUksS0FBSyxTQUFTLEdBQUc7SUFDckVDLFVBQVUsRUFBRTtNQUNWQyxXQUFXLEVBQUU7SUFDZjtFQUNGLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1YsSUFBSSxDQUFDWCxHQUFHLENBQUNDLEtBQUssQ0FBRSx5QkFBd0JDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLEVBQUMsQ0FBQztFQUMxRixPQUFPLE1BQU0sSUFBSSxDQUFDUixZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFBQ0gsT0FBTyxFQUFFUztFQUFtQixDQUFDLENBQUM7QUFDcEcsQ0FBQztBQUVERyxNQUFNLENBQUNDLE1BQU0sQ0FBQ2xCLFVBQVUsRUFBRUQsUUFBUSxDQUFDO0FBQUMsZUFDckJDLFVBQVU7QUFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch.js","names":["commands","extensions","doPerformMultiAction","elementId","states","opts","actions","uiautomator2","jwproxy","command","performActions","log","debug","JSON","stringify","preprocessedActions","map","action","Object","assign","type","parameters","pointerType"],"sources":["../../../lib/commands/touch.js"],"sourcesContent":["let commands = {}, extensions = {};\n\ncommands.doPerformMultiAction = async function (elementId, states) {\n let opts;\n if (elementId) {\n opts = {\n elementId,\n actions: states\n };\n\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n } else {\n opts = {\n actions: states\n };\n return await this.uiautomator2.jwproxy.command('/touch/multi/perform', 'POST', opts);\n }\n};\n\ncommands.performActions = async function (actions) {\n this.log.debug(`Received the following W3C actions: ${JSON.stringify(actions, null, ' ')}`);\n // This is mandatory, since Selenium API uses MOUSE as the default pointer type\n const preprocessedActions = actions\n .map((action) => Object.assign({}, action, action.type === 'pointer' ? {\n parameters: {\n pointerType: 'touch'\n }\n } : {}));\n this.log.debug(`Preprocessed actions: ${JSON.stringify(preprocessedActions, null, ' ')}`);\n return await this.uiautomator2.jwproxy.command('/actions', 'POST', {actions: preprocessedActions});\n};\n\nObject.assign(extensions, commands);\nexport default extensions;\n"],"mappings":";;;;;;;AAAA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAElCD,QAAQ,CAACE,oBAAoB,GAAG,gBAAgBC,SAAS,EAAEC,MAAM,EAAE;EACjE,IAAIC,IAAI;EACR,IAAIF,SAAS,EAAE;IACbE,IAAI,GAAG;MACLF,SAAS;MACTG,OAAO,EAAEF;IACX,CAAC;IAED,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF,CAAC,MAAM;IACLA,IAAI,GAAG;MACLC,OAAO,EAAEF;IACX,CAAC;IACD,OAAO,MAAM,IAAI,CAACG,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,sBAAsB,EAAE,MAAM,EAAEJ,IAAI,CAAC;EACtF;AACF,CAAC;AAEDL,QAAQ,CAACU,cAAc,GAAG,gBAAgBJ,OAAO,EAAE;EACjD,IAAI,CAACK,GAAG,CAACC,KAAK,CAAE,uCAAsCC,IAAI,CAACC,SAAS,CAACR,OAAO,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAE5F,MAAMS,mBAAmB,GAAGT,OAAO,CAChCU,GAAG,CAAEC,MAAM,IAAKC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEF,MAAM,EAAEA,MAAM,CAACG,IAAI,KAAK,SAAS,GAAG;IACrEC,UAAU,EAAE;MACVC,WAAW,EAAE;IACf;EACF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACV,IAAI,CAACX,GAAG,CAACC,KAAK,CAAE,yBAAwBC,IAAI,CAACC,SAAS,CAACC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAE,EAAC,CAAC;EAC1F,OAAO,MAAM,IAAI,CAACR,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE;IAACH,OAAO,EAAES;EAAmB,CAAC,CAAC;AACpG,CAAC;AAEDG,MAAM,CAACC,MAAM,CAAClB,UAAU,EAAED,QAAQ,CAAC;AAAC,eACrBC,UAAU;AAAA"}
@@ -4,15 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.commands = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  var _support = require("appium/support");
11
-
12
9
  let extensions = {},
13
- commands = {};
14
- exports.commands = commands;
10
+ commands = {};
15
11
 
12
+ exports.commands = commands;
16
13
  commands.getStatusBarHeight = async function () {
17
14
  const {
18
15
  statusBar
@@ -23,13 +20,11 @@ commands.getStatusBarHeight = async function () {
23
20
  commands.getDevicePixelRatio = async function () {
24
21
  return await this.uiautomator2.jwproxy.command('/appium/device/pixel_ratio', 'GET', {});
25
22
  };
26
-
27
23
  commands.getViewportScreenshot = async function () {
28
24
  const screenshot = await this.getScreenshot();
29
25
  const rect = await this.getViewPortRect();
30
26
  return await _support.imageUtil.cropBase64Image(screenshot, rect);
31
27
  };
32
-
33
28
  commands.getViewPortRect = async function () {
34
29
  const windowSize = await this.getWindowSize();
35
30
  const statusBarHeight = await this.getStatusBarHeight();
@@ -40,8 +35,7 @@ commands.getViewPortRect = async function () {
40
35
  height: windowSize.height - statusBarHeight
41
36
  };
42
37
  };
43
-
44
38
  Object.assign(extensions, commands);
45
39
  var _default = extensions;
46
40
  exports.default = _default;
47
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJzdGF0dXNCYXIiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldERldmljZVBpeGVsUmF0aW8iLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJzY3JlZW5zaG90IiwiZ2V0U2NyZWVuc2hvdCIsInJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJpbWFnZVV0aWwiLCJjcm9wQmFzZTY0SW1hZ2UiLCJ3aW5kb3dTaXplIiwiZ2V0V2luZG93U2l6ZSIsInN0YXR1c0JhckhlaWdodCIsImxlZnQiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy92aWV3cG9ydC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbWFnZVV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxubGV0IGV4dGVuc2lvbnMgPSB7fSwgY29tbWFuZHMgPSB7fTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFN0YXR1c0JhckhlaWdodCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3N0YXR1c0Jhcn0gPSBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZGV2aWNlL3N5c3RlbV9iYXJzYCwgJ0dFVCcsIHt9KTtcbiAgcmV0dXJuIHN0YXR1c0Jhcjtcbn07XG5cbi8vIG1lbW9pemVkIGluIGNvbnN0cnVjdG9yXG5jb21tYW5kcy5nZXREZXZpY2VQaXhlbFJhdGlvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9waXhlbF9yYXRpbycsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNjcmVlbnNob3QgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3QoKTtcbiAgY29uc3QgcmVjdCA9IGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVV0aWwuY3JvcEJhc2U2NEltYWdlKHNjcmVlbnNob3QsIHJlY3QpO1xufTtcblxuY29tbWFuZHMuZ2V0Vmlld1BvcnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCB3aW5kb3dTaXplID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIGNvbnN0IHN0YXR1c0JhckhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzQmFySGVpZ2h0KCk7XG4gIC8vIGFuZHJvaWQgcmV0dXJucyB0aGUgdXBzY2FsZWQgd2luZG93IHNpemUsIHNvIHRvIGdldCB0aGUgdHJ1ZSBzaXplIG9mIHRoZVxuICAvLyByZWN0IHdlIGhhdmUgdG8gZG93bnNjYWxlXG4gIHJldHVybiB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IHN0YXR1c0JhckhlaWdodCxcbiAgICB3aWR0aDogd2luZG93U2l6ZS53aWR0aCxcbiAgICBoZWlnaHQ6IHdpbmRvd1NpemUuaGVpZ2h0IC0gc3RhdHVzQmFySGVpZ2h0XG4gIH07XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQSxJQUFJQSxVQUFVLEdBQUcsRUFBakI7QUFBQSxJQUFxQkMsUUFBUSxHQUFHLEVBQWhDOzs7QUFHQUEsUUFBUSxDQUFDQyxrQkFBVCxHQUE4QixrQkFBa0I7RUFDOUMsTUFBTTtJQUFDQztFQUFELElBQWMsTUFBTSxLQUFLQyxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBbUMsNEJBQW5DLEVBQWdFLEtBQWhFLEVBQXVFLEVBQXZFLENBQTFCO0VBQ0EsT0FBT0gsU0FBUDtBQUNELENBSEQ7O0FBTUFGLFFBQVEsQ0FBQ00sbUJBQVQsR0FBK0Isa0JBQWtCO0VBQy9DLE9BQU8sTUFBTSxLQUFLSCxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0MsNEJBQWxDLEVBQWdFLEtBQWhFLEVBQXVFLEVBQXZFLENBQWI7QUFDRCxDQUZEOztBQUlBTCxRQUFRLENBQUNPLHFCQUFULEdBQWlDLGtCQUFrQjtFQUNqRCxNQUFNQyxVQUFVLEdBQUcsTUFBTSxLQUFLQyxhQUFMLEVBQXpCO0VBQ0EsTUFBTUMsSUFBSSxHQUFHLE1BQU0sS0FBS0MsZUFBTCxFQUFuQjtFQUNBLE9BQU8sTUFBTUMsa0JBQUEsQ0FBVUMsZUFBVixDQUEwQkwsVUFBMUIsRUFBc0NFLElBQXRDLENBQWI7QUFDRCxDQUpEOztBQU1BVixRQUFRLENBQUNXLGVBQVQsR0FBMkIsa0JBQWtCO0VBQzNDLE1BQU1HLFVBQVUsR0FBRyxNQUFNLEtBQUtDLGFBQUwsRUFBekI7RUFDQSxNQUFNQyxlQUFlLEdBQUcsTUFBTSxLQUFLZixrQkFBTCxFQUE5QjtFQUdBLE9BQU87SUFDTGdCLElBQUksRUFBRSxDQUREO0lBRUxDLEdBQUcsRUFBRUYsZUFGQTtJQUdMRyxLQUFLLEVBQUVMLFVBQVUsQ0FBQ0ssS0FIYjtJQUlMQyxNQUFNLEVBQUVOLFVBQVUsQ0FBQ00sTUFBWCxHQUFvQko7RUFKdkIsQ0FBUDtBQU1ELENBWEQ7O0FBYUFLLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjdkIsVUFBZCxFQUEwQkMsUUFBMUI7ZUFFZUQsVSJ9
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJzdGF0dXNCYXIiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldERldmljZVBpeGVsUmF0aW8iLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJzY3JlZW5zaG90IiwiZ2V0U2NyZWVuc2hvdCIsInJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJpbWFnZVV0aWwiLCJjcm9wQmFzZTY0SW1hZ2UiLCJ3aW5kb3dTaXplIiwiZ2V0V2luZG93U2l6ZSIsInN0YXR1c0JhckhlaWdodCIsImxlZnQiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy92aWV3cG9ydC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbWFnZVV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxubGV0IGV4dGVuc2lvbnMgPSB7fSwgY29tbWFuZHMgPSB7fTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFN0YXR1c0JhckhlaWdodCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3N0YXR1c0Jhcn0gPSBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZGV2aWNlL3N5c3RlbV9iYXJzYCwgJ0dFVCcsIHt9KTtcbiAgcmV0dXJuIHN0YXR1c0Jhcjtcbn07XG5cbi8vIG1lbW9pemVkIGluIGNvbnN0cnVjdG9yXG5jb21tYW5kcy5nZXREZXZpY2VQaXhlbFJhdGlvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9waXhlbF9yYXRpbycsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNjcmVlbnNob3QgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3QoKTtcbiAgY29uc3QgcmVjdCA9IGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVV0aWwuY3JvcEJhc2U2NEltYWdlKHNjcmVlbnNob3QsIHJlY3QpO1xufTtcblxuY29tbWFuZHMuZ2V0Vmlld1BvcnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCB3aW5kb3dTaXplID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIGNvbnN0IHN0YXR1c0JhckhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzQmFySGVpZ2h0KCk7XG4gIC8vIGFuZHJvaWQgcmV0dXJucyB0aGUgdXBzY2FsZWQgd2luZG93IHNpemUsIHNvIHRvIGdldCB0aGUgdHJ1ZSBzaXplIG9mIHRoZVxuICAvLyByZWN0IHdlIGhhdmUgdG8gZG93bnNjYWxlXG4gIHJldHVybiB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IHN0YXR1c0JhckhlaWdodCxcbiAgICB3aWR0aDogd2luZG93U2l6ZS53aWR0aCxcbiAgICBoZWlnaHQ6IHdpbmRvd1NpemUuaGVpZ2h0IC0gc3RhdHVzQmFySGVpZ2h0XG4gIH07XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFHQSxJQUFJQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFFBQVEsR0FBRyxDQUFDLENBQUM7O0FBQUM7QUFHbkNBLFFBQVEsQ0FBQ0Msa0JBQWtCLEdBQUcsa0JBQWtCO0VBQzlDLE1BQU07SUFBQ0M7RUFBUyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsNEJBQTJCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3BHLE9BQU9ILFNBQVM7QUFDbEIsQ0FBQzs7QUFHREYsUUFBUSxDQUFDTSxtQkFBbUIsR0FBRyxrQkFBa0I7RUFDL0MsT0FBTyxNQUFNLElBQUksQ0FBQ0gsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUVETCxRQUFRLENBQUNPLHFCQUFxQixHQUFHLGtCQUFrQjtFQUNqRCxNQUFNQyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUNDLGFBQWEsRUFBRTtFQUM3QyxNQUFNQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNDLGVBQWUsRUFBRTtFQUN6QyxPQUFPLE1BQU1DLGtCQUFTLENBQUNDLGVBQWUsQ0FBQ0wsVUFBVSxFQUFFRSxJQUFJLENBQUM7QUFDMUQsQ0FBQztBQUVEVixRQUFRLENBQUNXLGVBQWUsR0FBRyxrQkFBa0I7RUFDM0MsTUFBTUcsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxhQUFhLEVBQUU7RUFDN0MsTUFBTUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDZixrQkFBa0IsRUFBRTtFQUd2RCxPQUFPO0lBQ0xnQixJQUFJLEVBQUUsQ0FBQztJQUNQQyxHQUFHLEVBQUVGLGVBQWU7SUFDcEJHLEtBQUssRUFBRUwsVUFBVSxDQUFDSyxLQUFLO0lBQ3ZCQyxNQUFNLEVBQUVOLFVBQVUsQ0FBQ00sTUFBTSxHQUFHSjtFQUM5QixDQUFDO0FBQ0gsQ0FBQztBQUVESyxNQUFNLENBQUNDLE1BQU0sQ0FBQ3ZCLFVBQVUsRUFBRUMsUUFBUSxDQUFDO0FBQUMsZUFFckJELFVBQVU7QUFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewport.js","names":["extensions","commands","getStatusBarHeight","statusBar","uiautomator2","jwproxy","command","getDevicePixelRatio","getViewportScreenshot","screenshot","getScreenshot","rect","getViewPortRect","imageUtil","cropBase64Image","windowSize","getWindowSize","statusBarHeight","left","top","width","height","Object","assign"],"sources":["../../../lib/commands/viewport.js"],"sourcesContent":["import { imageUtil } from 'appium/support';\n\n\nlet extensions = {}, commands = {};\n\n// memoized in constructor\ncommands.getStatusBarHeight = async function () {\n const {statusBar} = await this.uiautomator2.jwproxy.command(`/appium/device/system_bars`, 'GET', {});\n return statusBar;\n};\n\n// memoized in constructor\ncommands.getDevicePixelRatio = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/pixel_ratio', 'GET', {});\n};\n\ncommands.getViewportScreenshot = async function () {\n const screenshot = await this.getScreenshot();\n const rect = await this.getViewPortRect();\n return await imageUtil.cropBase64Image(screenshot, rect);\n};\n\ncommands.getViewPortRect = async function () {\n const windowSize = await this.getWindowSize();\n const statusBarHeight = await this.getStatusBarHeight();\n // android returns the upscaled window size, so to get the true size of the\n // rect we have to downscale\n return {\n left: 0,\n top: statusBarHeight,\n width: windowSize.width,\n height: windowSize.height - statusBarHeight\n };\n};\n\nObject.assign(extensions, commands);\nexport { commands };\nexport default extensions;\n"],"mappings":";;;;;;;AAAA;AAGA,IAAIA,UAAU,GAAG,CAAC,CAAC;EAAEC,QAAQ,GAAG,CAAC,CAAC;;AAAC;AAGnCA,QAAQ,CAACC,kBAAkB,GAAG,kBAAkB;EAC9C,MAAM;IAACC;EAAS,CAAC,GAAG,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,4BAA2B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EACpG,OAAOH,SAAS;AAClB,CAAC;;AAGDF,QAAQ,CAACM,mBAAmB,GAAG,kBAAkB;EAC/C,OAAO,MAAM,IAAI,CAACH,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,4BAA4B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAEDL,QAAQ,CAACO,qBAAqB,GAAG,kBAAkB;EACjD,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACC,aAAa,EAAE;EAC7C,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACC,eAAe,EAAE;EACzC,OAAO,MAAMC,kBAAS,CAACC,eAAe,CAACL,UAAU,EAAEE,IAAI,CAAC;AAC1D,CAAC;AAEDV,QAAQ,CAACW,eAAe,GAAG,kBAAkB;EAC3C,MAAMG,UAAU,GAAG,MAAM,IAAI,CAACC,aAAa,EAAE;EAC7C,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACf,kBAAkB,EAAE;EAGvD,OAAO;IACLgB,IAAI,EAAE,CAAC;IACPC,GAAG,EAAEF,eAAe;IACpBG,KAAK,EAAEL,UAAU,CAACK,KAAK;IACvBC,MAAM,EAAEN,UAAU,CAACM,MAAM,GAAGJ;EAC9B,CAAC;AACH,CAAC;AAEDK,MAAM,CAACC,MAAM,CAACvB,UAAU,EAAEC,QAAQ,CAAC;AAAC,eAErBD,UAAU;AAAA"}