oxygen-cli 1.41.0 → 1.42.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 (285) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/core/OxygenCore.js +41 -274
  3. package/build/core/OxygenEvents.js +2 -12
  4. package/build/core/OxygenModule.js +1 -16
  5. package/build/core/OxygenService.js +1 -12
  6. package/build/core/OxygenSubModule.js +1 -10
  7. package/build/core/WebDriverModule.js +2 -32
  8. package/build/core/utils.js +2 -21
  9. package/build/errors/HookError.js +2 -8
  10. package/build/errors/ModuleError.js +2 -8
  11. package/build/errors/ModuleUnavailableError.js +1 -3
  12. package/build/errors/OxygenError.js +3 -36
  13. package/build/errors/ScriptNotFound.js +2 -8
  14. package/build/errors/helper.js +50 -82
  15. package/build/index.js +8 -22
  16. package/build/lib/cli-util.js +35 -105
  17. package/build/lib/cli.js +3 -30
  18. package/build/lib/debugger.js +2 -145
  19. package/build/lib/img-merge.js +2 -16
  20. package/build/lib/launcher.js +3 -31
  21. package/build/lib/moduleRequire.js +1 -4
  22. package/build/lib/parallel-launcher.js +44 -84
  23. package/build/lib/param-manager.js +2 -29
  24. package/build/lib/param-reader-csv.js +1 -15
  25. package/build/lib/param-reader-excel.js +1 -14
  26. package/build/lib/param-reader-json.js +1 -10
  27. package/build/lib/text-to-image.js +5 -26
  28. package/build/lib/util.js +4 -75
  29. package/build/model/case-result.js +1 -2
  30. package/build/model/failure.js +1 -2
  31. package/build/model/status.js +1 -2
  32. package/build/model/step-result.js +1 -2
  33. package/build/model/suite-result.js +1 -2
  34. package/build/model/test-result.js +1 -2
  35. package/build/model/testcase.js +1 -2
  36. package/build/model/testsuite.js +1 -2
  37. package/build/ox_modules/index.js +20 -41
  38. package/build/ox_modules/module-assert.js +9 -28
  39. package/build/ox_modules/module-date.js +3 -8
  40. package/build/ox_modules/module-db.js +8 -29
  41. package/build/ox_modules/module-email.js +14 -45
  42. package/build/ox_modules/module-eyes.js +6 -47
  43. package/build/ox_modules/module-http/ntlm-util.js +3 -7
  44. package/build/ox_modules/module-http/ntlm.js +9 -78
  45. package/build/ox_modules/module-http.js +69 -172
  46. package/build/ox_modules/module-log.js +10 -23
  47. package/build/ox_modules/module-mailinator.js +11 -33
  48. package/build/ox_modules/module-mob/commands/alertAccept.js +1 -3
  49. package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -3
  50. package/build/ox_modules/module-mob/commands/assertAlert.js +1 -7
  51. package/build/ox_modules/module-mob/commands/assertText.js +1 -4
  52. package/build/ox_modules/module-mob/commands/assertTitle.js +1 -5
  53. package/build/ox_modules/module-mob/commands/assertValue.js +9 -17
  54. package/build/ox_modules/module-mob/commands/back.js +1 -3
  55. package/build/ox_modules/module-mob/commands/clear.js +1 -5
  56. package/build/ox_modules/module-mob/commands/click.js +3 -5
  57. package/build/ox_modules/module-mob/commands/clickHidden.js +3 -10
  58. package/build/ox_modules/module-mob/commands/clickLong.js +1 -3
  59. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -5
  60. package/build/ox_modules/module-mob/commands/closeApp.js +1 -3
  61. package/build/ox_modules/module-mob/commands/debug.js +2 -3
  62. package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -3
  63. package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -13
  64. package/build/ox_modules/module-mob/commands/execute.js +1 -3
  65. package/build/ox_modules/module-mob/commands/findElement.js +1 -4
  66. package/build/ox_modules/module-mob/commands/findElements.js +1 -5
  67. package/build/ox_modules/module-mob/commands/getAlertText.js +1 -3
  68. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -3
  69. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -11
  70. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -3
  71. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -3
  72. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -10
  73. package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -3
  74. package/build/ox_modules/module-mob/commands/getLocation.js +1 -3
  75. package/build/ox_modules/module-mob/commands/getSource.js +1 -3
  76. package/build/ox_modules/module-mob/commands/getText.js +1 -5
  77. package/build/ox_modules/module-mob/commands/getTitle.js +1 -3
  78. package/build/ox_modules/module-mob/commands/getUrl.js +1 -3
  79. package/build/ox_modules/module-mob/commands/getValue.js +5 -10
  80. package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -3
  81. package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -3
  82. package/build/ox_modules/module-mob/commands/index.js +1 -148
  83. package/build/ox_modules/module-mob/commands/installApp.js +1 -3
  84. package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -3
  85. package/build/ox_modules/module-mob/commands/isCheckable.js +1 -3
  86. package/build/ox_modules/module-mob/commands/isChecked.js +1 -3
  87. package/build/ox_modules/module-mob/commands/isClickable.js +1 -3
  88. package/build/ox_modules/module-mob/commands/isExist.js +1 -4
  89. package/build/ox_modules/module-mob/commands/isSelected.js +1 -3
  90. package/build/ox_modules/module-mob/commands/isVisible.js +1 -4
  91. package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -3
  92. package/build/ox_modules/module-mob/commands/launchApp.js +1 -3
  93. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -3
  94. package/build/ox_modules/module-mob/commands/open.js +1 -4
  95. package/build/ox_modules/module-mob/commands/pause.js +1 -3
  96. package/build/ox_modules/module-mob/commands/removeApp.js +1 -3
  97. package/build/ox_modules/module-mob/commands/resetApp.js +1 -3
  98. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -7
  99. package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -3
  100. package/build/ox_modules/module-mob/commands/select.js +1 -5
  101. package/build/ox_modules/module-mob/commands/selectFrame.js +1 -5
  102. package/build/ox_modules/module-mob/commands/selectWindow.js +5 -27
  103. package/build/ox_modules/module-mob/commands/sendKeys.js +6 -10
  104. package/build/ox_modules/module-mob/commands/setContext.js +1 -3
  105. package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -3
  106. package/build/ox_modules/module-mob/commands/setTimeout.js +1 -3
  107. package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -7
  108. package/build/ox_modules/module-mob/commands/shake.js +1 -3
  109. package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -3
  110. package/build/ox_modules/module-mob/commands/smsGetText.js +3 -7
  111. package/build/ox_modules/module-mob/commands/swipe.js +1 -3
  112. package/build/ox_modules/module-mob/commands/swipeElement.js +1 -3
  113. package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -3
  114. package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -3
  115. package/build/ox_modules/module-mob/commands/tap.js +1 -3
  116. package/build/ox_modules/module-mob/commands/type.js +3 -8
  117. package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -11
  118. package/build/ox_modules/module-mob/commands/waitForExist.js +1 -3
  119. package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -4
  120. package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -3
  121. package/build/ox_modules/module-mob.js +74 -216
  122. package/build/ox_modules/module-mongo.js +14 -51
  123. package/build/ox_modules/module-pdf.js +24 -65
  124. package/build/ox_modules/module-proxy.js +9 -69
  125. package/build/ox_modules/module-serial.js +8 -33
  126. package/build/ox_modules/module-shell.js +10 -30
  127. package/build/ox_modules/module-soap.js +17 -52
  128. package/build/ox_modules/module-twilio.js +11 -54
  129. package/build/ox_modules/module-utils.js +22 -58
  130. package/build/ox_modules/module-web/commands/alertAccept.js +1 -3
  131. package/build/ox_modules/module-web/commands/alertDismiss.js +1 -3
  132. package/build/ox_modules/module-web/commands/assertAlert.js +1 -7
  133. package/build/ox_modules/module-web/commands/assertExist.js +1 -3
  134. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -5
  135. package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -4
  136. package/build/ox_modules/module-web/commands/assertText.js +1 -4
  137. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -7
  138. package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -7
  139. package/build/ox_modules/module-web/commands/assertTitle.js +1 -4
  140. package/build/ox_modules/module-web/commands/assertValue.js +1 -4
  141. package/build/ox_modules/module-web/commands/back.js +1 -3
  142. package/build/ox_modules/module-web/commands/clear.js +1 -6
  143. package/build/ox_modules/module-web/commands/click.js +4 -15
  144. package/build/ox_modules/module-web/commands/clickHidden.js +2 -8
  145. package/build/ox_modules/module-web/commands/closeWindow.js +1 -3
  146. package/build/ox_modules/module-web/commands/debug.js +2 -3
  147. package/build/ox_modules/module-web/commands/deleteCookies.js +1 -3
  148. package/build/ox_modules/module-web/commands/deselect.js +1 -3
  149. package/build/ox_modules/module-web/commands/doubleClick.js +3 -10
  150. package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -3
  151. package/build/ox_modules/module-web/commands/execute.js +1 -3
  152. package/build/ox_modules/module-web/commands/fileBrowse.js +4 -11
  153. package/build/ox_modules/module-web/commands/findElement.js +1 -4
  154. package/build/ox_modules/module-web/commands/findElements.js +1 -5
  155. package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -3
  156. package/build/ox_modules/module-web/commands/getAlertText.js +1 -3
  157. package/build/ox_modules/module-web/commands/getAttribute.js +1 -5
  158. package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -4
  159. package/build/ox_modules/module-web/commands/getCookies.js +1 -3
  160. package/build/ox_modules/module-web/commands/getCssValue.js +1 -5
  161. package/build/ox_modules/module-web/commands/getElementCount.js +1 -3
  162. package/build/ox_modules/module-web/commands/getHTML.js +1 -3
  163. package/build/ox_modules/module-web/commands/getSource.js +1 -3
  164. package/build/ox_modules/module-web/commands/getText.js +1 -5
  165. package/build/ox_modules/module-web/commands/getTitle.js +1 -3
  166. package/build/ox_modules/module-web/commands/getUrl.js +1 -3
  167. package/build/ox_modules/module-web/commands/getValue.js +1 -6
  168. package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -3
  169. package/build/ox_modules/module-web/commands/getWindowSize.js +1 -3
  170. package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -6
  171. package/build/ox_modules/module-web/commands/index.js +1 -184
  172. package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -3
  173. package/build/ox_modules/module-web/commands/isChecked.js +1 -3
  174. package/build/ox_modules/module-web/commands/isExist.js +1 -4
  175. package/build/ox_modules/module-web/commands/isInteractable.js +1 -3
  176. package/build/ox_modules/module-web/commands/isSelected.js +1 -3
  177. package/build/ox_modules/module-web/commands/isVisible.js +1 -4
  178. package/build/ox_modules/module-web/commands/makeVisible.js +2 -11
  179. package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -3
  180. package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -3
  181. package/build/ox_modules/module-web/commands/mock.js +1 -3
  182. package/build/ox_modules/module-web/commands/mockClearAll.js +1 -3
  183. package/build/ox_modules/module-web/commands/mockRestoreAll.js +1 -3
  184. package/build/ox_modules/module-web/commands/newWindow.js +1 -3
  185. package/build/ox_modules/module-web/commands/open.js +1 -5
  186. package/build/ox_modules/module-web/commands/pause.js +1 -3
  187. package/build/ox_modules/module-web/commands/point.js +1 -3
  188. package/build/ox_modules/module-web/commands/pointJS.js +2 -9
  189. package/build/ox_modules/module-web/commands/refresh.js +1 -3
  190. package/build/ox_modules/module-web/commands/rightClick.js +3 -9
  191. package/build/ox_modules/module-web/commands/rightClickActions.js +1 -3
  192. package/build/ox_modules/module-web/commands/scrollToElement.js +1 -3
  193. package/build/ox_modules/module-web/commands/select.js +1 -6
  194. package/build/ox_modules/module-web/commands/selectFrame.js +1 -4
  195. package/build/ox_modules/module-web/commands/selectWindow.js +5 -27
  196. package/build/ox_modules/module-web/commands/sendKeys.js +3 -7
  197. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -3
  198. package/build/ox_modules/module-web/commands/setTimeout.js +1 -3
  199. package/build/ox_modules/module-web/commands/setWindowSize.js +1 -3
  200. package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -6
  201. package/build/ox_modules/module-web/commands/type.js +1 -6
  202. package/build/ox_modules/module-web/commands/verifyAlert.js +1 -7
  203. package/build/ox_modules/module-web/commands/verifyExist.js +2 -7
  204. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +1 -5
  205. package/build/ox_modules/module-web/commands/verifySelectedValue.js +1 -4
  206. package/build/ox_modules/module-web/commands/verifyText.js +1 -4
  207. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +1 -7
  208. package/build/ox_modules/module-web/commands/verifyTextPresent.js +1 -7
  209. package/build/ox_modules/module-web/commands/verifyTitle.js +1 -4
  210. package/build/ox_modules/module-web/commands/verifyValue.js +1 -4
  211. package/build/ox_modules/module-web/commands/waitForAngular.js +11 -14
  212. package/build/ox_modules/module-web/commands/waitForExist.js +1 -3
  213. package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -3
  214. package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -9
  215. package/build/ox_modules/module-web/commands/waitForNotText.js +1 -4
  216. package/build/ox_modules/module-web/commands/waitForNotValue.js +1 -4
  217. package/build/ox_modules/module-web/commands/waitForText.js +1 -4
  218. package/build/ox_modules/module-web/commands/waitForValue.js +1 -4
  219. package/build/ox_modules/module-web/commands/waitForVisible.js +1 -3
  220. package/build/ox_modules/module-web/commands/waitForWindow.js +4 -22
  221. package/build/ox_modules/module-web/webdriver/ChromeWDM.js +287 -0
  222. package/build/ox_modules/module-web/webdriver/auto-start.js +25 -0
  223. package/build/ox_modules/module-web.js +112 -232
  224. package/build/ox_modules/module-win/commands/assertText.js +1 -4
  225. package/build/ox_modules/module-win/commands/assertTitle.js +1 -5
  226. package/build/ox_modules/module-win/commands/assertValue.js +9 -17
  227. package/build/ox_modules/module-win/commands/back.js +1 -3
  228. package/build/ox_modules/module-win/commands/clear.js +1 -5
  229. package/build/ox_modules/module-win/commands/click.js +1 -3
  230. package/build/ox_modules/module-win/commands/clickLong.js +1 -3
  231. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -5
  232. package/build/ox_modules/module-win/commands/findElement.js +1 -4
  233. package/build/ox_modules/module-win/commands/findElements.js +1 -5
  234. package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -3
  235. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -3
  236. package/build/ox_modules/module-win/commands/getLocation.js +1 -3
  237. package/build/ox_modules/module-win/commands/getSource.js +1 -3
  238. package/build/ox_modules/module-win/commands/getText.js +1 -5
  239. package/build/ox_modules/module-win/commands/getValue.js +5 -10
  240. package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -3
  241. package/build/ox_modules/module-win/commands/index.js +1 -74
  242. package/build/ox_modules/module-win/commands/isCheckable.js +1 -3
  243. package/build/ox_modules/module-win/commands/isChecked.js +1 -3
  244. package/build/ox_modules/module-win/commands/isClickable.js +1 -3
  245. package/build/ox_modules/module-win/commands/isExist.js +1 -4
  246. package/build/ox_modules/module-win/commands/isSelected.js +1 -3
  247. package/build/ox_modules/module-win/commands/isVisible.js +1 -4
  248. package/build/ox_modules/module-win/commands/open.js +1 -3
  249. package/build/ox_modules/module-win/commands/pause.js +1 -3
  250. package/build/ox_modules/module-win/commands/rightClick.js +1 -3
  251. package/build/ox_modules/module-win/commands/selectWindow.js +1 -16
  252. package/build/ox_modules/module-win/commands/sendKeys.js +1 -5
  253. package/build/ox_modules/module-win/commands/setTimeout.js +1 -3
  254. package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -3
  255. package/build/ox_modules/module-win/commands/tap.js +1 -3
  256. package/build/ox_modules/module-win/commands/type.js +1 -5
  257. package/build/ox_modules/module-win/commands/waitForExist.js +1 -3
  258. package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -5
  259. package/build/ox_modules/module-win/commands/waitForVisible.js +1 -3
  260. package/build/ox_modules/module-win.js +54 -95
  261. package/build/ox_modules/utils.js +91 -79
  262. package/build/ox_reporters/reporter-excel.js +2 -59
  263. package/build/ox_reporters/reporter-html.js +2 -29
  264. package/build/ox_reporters/reporter-json.js +2 -15
  265. package/build/ox_reporters/reporter-junit.js +2 -25
  266. package/build/ox_reporters/reporter-pdf.js +2 -20
  267. package/build/ox_reporters/reporter-rp.js +2 -91
  268. package/build/ox_reporters/reporter-xml.js +2 -18
  269. package/build/ox_services/service-devtools/submodule-network.js +4 -86
  270. package/build/ox_services/service-devtools.js +2 -24
  271. package/build/reporter/FileReporterBase.js +6 -45
  272. package/build/reporter/ReportAggregator.js +7 -121
  273. package/build/reporter/ReporterBase.js +1 -6
  274. package/build/reporter/WebSocketReporter.js +1 -39
  275. package/build/runners/WorkerProcess.js +2 -107
  276. package/build/runners/cucumber/CucumberEventListener.js +4 -29
  277. package/build/runners/cucumber/CucumberReporter.js +2 -57
  278. package/build/runners/cucumber/CucumberWorker.js +3 -69
  279. package/build/runners/cucumber/index.js +2 -31
  280. package/build/runners/cucumber/worker.js +2 -19
  281. package/build/runners/index.js +4 -11
  282. package/build/runners/oxygen/OxygenWorker.js +3 -61
  283. package/build/runners/oxygen/index.js +18 -179
  284. package/build/runners/oxygen/worker.js +3 -27
  285. package/package.json +3 -1
@@ -4,66 +4,49 @@ 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
  var _devtoolsService = _interopRequireDefault(require("@wdio/devtools-service"));
11
-
12
9
  var _OxygenService = _interopRequireDefault(require("../core/OxygenService"));
13
-
14
10
  var _submoduleNetwork = _interopRequireDefault(require("./service-devtools/submodule-network"));
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
12
  const CHROME_BROWSER = 'chrome';
19
-
20
13
  class DevToolsService extends _OxygenService.default {
21
14
  constructor(options, ctx, results, logger) {
22
15
  super(options, ctx, results, logger);
23
16
  this._subModules = {};
24
17
  this.isServiceInitialized = true;
25
18
  }
26
-
27
19
  onModuleLoaded(module) {
28
20
  if (!module || !module.getDriver || typeof module.getDriver !== 'function' || !module.getCapabilities || typeof module.getCapabilities !== 'function') {
29
21
  return;
30
22
  }
31
-
32
23
  const networkSubmodule = new _submoduleNetwork.default('network', module);
33
24
  module.addSubModule('network', networkSubmodule);
34
25
  this._subModules[module.name] = networkSubmodule;
35
26
  }
36
-
37
27
  async onModuleInitialized(module) {
38
28
  if (!module || !module.getDriver || typeof module.getDriver !== 'function' || !module.getCapabilities || typeof module.getCapabilities !== 'function') {
39
29
  return;
40
30
  }
41
-
42
31
  const submodule = this._subModules[module.name];
43
-
44
32
  if (!submodule || submodule.isInitialized) {
45
33
  return;
46
34
  }
47
-
48
35
  let options = {};
49
36
  const capabilities = module.getCapabilities() || {};
50
37
  const {
51
38
  browserName
52
39
  } = capabilities;
53
40
  this._driver = module.getDriver();
54
-
55
41
  if (this._driver && this._driver.capabilities && this._driver.capabilities['goog:chromeOptions'] && this._driver.capabilities['goog:chromeOptions']['debuggerAddress']) {
56
42
  options.debuggerAddress = this._driver.capabilities['goog:chromeOptions']['debuggerAddress'];
57
43
  }
58
-
59
44
  if (this._driver.provider === null && browserName && browserName.toLowerCase() === CHROME_BROWSER) {
60
45
  const devToolsSvc = new _devtoolsService.default(options);
61
46
  const UNSUPPORTED_ERROR_MESSAGE = devToolsSvc.beforeSession(null, capabilities);
62
-
63
47
  if (UNSUPPORTED_ERROR_MESSAGE) {
64
48
  console.log('UNSUPPORTED_ERROR_MESSAGE', UNSUPPORTED_ERROR_MESSAGE);
65
49
  }
66
-
67
50
  if (devToolsSvc._isSupported) {
68
51
  global.browser = module.getDriver();
69
52
  await devToolsSvc.before(null, null, this._driver);
@@ -71,18 +54,13 @@ class DevToolsService extends _OxygenService.default {
71
54
  }
72
55
  }
73
56
  }
74
-
75
57
  onModuleWillDispose(module) {
76
58
  const submodule = this._subModules[module.name];
77
-
78
59
  if (!submodule) {
79
60
  return;
80
61
  }
81
-
82
62
  submodule.dispose();
83
63
  }
84
-
85
64
  }
86
-
87
65
  exports.default = DevToolsService;
88
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzLmpzIl0sIm5hbWVzIjpbIkNIUk9NRV9CUk9XU0VSIiwiRGV2VG9vbHNTZXJ2aWNlIiwiT3h5Z2VuU2VydmljZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImN0eCIsInJlc3VsdHMiLCJsb2dnZXIiLCJfc3ViTW9kdWxlcyIsImlzU2VydmljZUluaXRpYWxpemVkIiwib25Nb2R1bGVMb2FkZWQiLCJtb2R1bGUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJuZXR3b3JrU3VibW9kdWxlIiwiTmV0d29ya1N1Yk1vZHVsZSIsImFkZFN1Yk1vZHVsZSIsIm5hbWUiLCJvbk1vZHVsZUluaXRpYWxpemVkIiwic3VibW9kdWxlIiwiaXNJbml0aWFsaXplZCIsImNhcGFiaWxpdGllcyIsImJyb3dzZXJOYW1lIiwiX2RyaXZlciIsImRlYnVnZ2VyQWRkcmVzcyIsInByb3ZpZGVyIiwidG9Mb3dlckNhc2UiLCJkZXZUb29sc1N2YyIsIldESU9EZXZUb29sc1NlcnZpY2UiLCJVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFIiwiYmVmb3JlU2Vzc2lvbiIsImNvbnNvbGUiLCJsb2ciLCJfaXNTdXBwb3J0ZWQiLCJnbG9iYWwiLCJicm93c2VyIiwiYmVmb3JlIiwiaW5pdCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJkaXNwb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVBLE1BQU1BLGNBQWMsR0FBRyxRQUF2Qjs7QUFFZSxNQUFNQyxlQUFOLFNBQThCQyxzQkFBOUIsQ0FBNEM7QUFDdkRDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxHQUFWLEVBQWVDLE9BQWYsRUFBd0JDLE1BQXhCLEVBQWdDO0FBQ3ZDLFVBQU1ILE9BQU4sRUFBZUMsR0FBZixFQUFvQkMsT0FBcEIsRUFBNkJDLE1BQTdCO0FBRUEsU0FBS0MsV0FBTCxHQUFtQixFQUFuQjtB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eEIsQ0FBbEI7O0FBQ0EsUUFBSSxDQUFDRSxTQUFMLEVBQWdCO0FBQ1o7QUFDSDs7QUFDREEsSUFBQUEsU0FBUyxDQUFDb0IsT0FBVjtBQUNIOztBQW5Fc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnJlYWNoYWJsZSAqL1xyXG5pbXBvcnQgV0RJT0RldlRvb2xzU2VydmljZSBmcm9tICdAd2Rpby9kZXZ0b29scy1zZXJ2aWNlJztcclxuXHJcbmltcG9ydCBPeHlnZW5TZXJ2aWNlIGZyb20gJy4uL2NvcmUvT3h5Z2VuU2VydmljZSc7XHJcbmltcG9ydCBOZXR3b3JrU3ViTW9kdWxlIGZyb20gJy4vc2VydmljZS1kZXZ0b29scy9zdWJtb2R1bGUtbmV0d29yayc7XHJcblxyXG5jb25zdCBDSFJPTUVfQlJPV1NFUiA9ICdjaHJvbWUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV2VG9vbHNTZXJ2aWNlIGV4dGVuZHMgT3h5Z2VuU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjdHgsIHJlc3VsdHMsIGxvZ2dlcikge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGN0eCwgcmVzdWx0cywgbG9nZ2VyKTtcclxuICAgICAgICAvLyBoYXNoIG9mIHdlYmRyaXZlciBiYXNlZCBtb2R1bGVzXHJcbiAgICAgICAgdGhpcy5fc3ViTW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuaXNTZXJ2aWNlSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgb25Nb2R1bGVMb2FkZWQobW9kdWxlKSB7XHJcbiAgICAgICAgLy8gc2tpcCBhbnkgbW9kdWxlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IC5nZXREcml2ZXIoKSBtZXRob2QgKGUuZy4gbm90IHdlYmRyaXZlciBiYXNlZClcclxuICAgICAgICBpZiAoIW1vZHVsZSB8fCAhbW9kdWxlLmdldERyaXZlciB8fCB0eXBlb2YgbW9kdWxlLmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhbW9kdWxlLmdldENhcGFiaWxpdGllcyB8fCB0eXBlb2YgbW9kdWxlLmdldENhcGFiaWxpdGllcyAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXR3b3JrU3VibW9kdWxlID0gbmV3IE5ldHdvcmtTdWJNb2R1bGUoJ25ldHdvcmsnLCBtb2R1bGUpO1xyXG4gICAgICAgIG1vZHVsZS5hZGRTdWJNb2R1bGUoJ25ldHdvcmsnLCBuZXR3b3JrU3VibW9kdWxlKTtcclxuICAgICAgICB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXSA9IG5ldHdvcmtTdWJtb2R1bGU7XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSkge1xyXG4gICAgICAgIC8vIHNraXAgYW55IG1vZHVsZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBnZXREcml2ZXIgbWV0aG9kIChlLmcuIG5vdCB3ZWJkcml2ZXIgYmFzZWQpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5nZXREcml2ZXIgfHwgdHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicgfHwgIW1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgfHwgdHlwZW9mIG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWJtb2R1bGUgPSB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXTtcclxuICAgICAgICBpZiAoIXN1Ym1vZHVsZSB8fCBzdWJtb2R1bGUuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMoKSB8fCB7fTtcclxuICAgICAgICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgdGhpcy5fZHJpdmVyID0gbW9kdWxlLmdldERyaXZlcigpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlciAmJlxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5jYXBhYmlsaXRpZXNbJ2dvb2c6Y2hyb21lT3B0aW9ucyddICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5jYXBhYmlsaXRpZXNbJ2dvb2c6Y2hyb21lT3B0aW9ucyddWydkZWJ1Z2dlckFkZHJlc3MnXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmRlYnVnZ2VyQWRkcmVzcyA9IHRoaXMuX2RyaXZlci5jYXBhYmlsaXRpZXNbJ2dvb2c6Y2hyb21lT3B0aW9ucyddWydkZWJ1Z2dlckFkZHJlc3MnXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIHdlIGFyZSBub3QgdXNpbmcgYW55IDNyZCBwYXJ0eSBwcm92aWRlclxyXG4gICAgICAgIGlmICh0aGlzLl9kcml2ZXIucHJvdmlkZXIgPT09IG51bGwgJiYgYnJvd3Nlck5hbWUgJiYgYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKSA9PT0gQ0hST01FX0JST1dTRVIpIHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBEZXZUb29sc1NlcnZpY2UgYW5kIGhvb2sgaXQgdG8gdGhlIGN1cnJlbnQgd2ViZHJpdmVyIG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCBkZXZUb29sc1N2YyA9IG5ldyBXRElPRGV2VG9vbHNTZXJ2aWNlKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBjb25zdCBVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFID0gZGV2VG9vbHNTdmMuYmVmb3JlU2Vzc2lvbihudWxsLCBjYXBhYmlsaXRpZXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFVOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFJywgVU5TVVBQT1JURURfRVJST1JfTUVTU0FHRSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkZXZUb29sc1N2Yy5faXNTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNoYW5nZSBnbG9iYWwuYnJvd3NlciB0byB0aGUgY3VycmVudCBtb2R1bGUncyB3ZWJkcml2ZXIgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIC8vIGNvbnN0IG9yZ0dsb2JhbEJyb3dzZXIgPSBnbG9iYWwuYnJvd3NlcjtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5icm93c2VyID0gbW9kdWxlLmdldERyaXZlcigpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZGV2VG9vbHNTdmMuYmVmb3JlKG51bGwsIG51bGwsIHRoaXMuX2RyaXZlcik7XHJcbiAgICAgICAgICAgICAgICBzdWJtb2R1bGUuaW5pdChkZXZUb29sc1N2Yyk7XHJcbiAgICAgICAgICAgICAgICAvLyBnbG9iYWwuYnJvd3NlciA9IG9yZ0dsb2JhbEJyb3dzZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xyXG4gICAgICAgIGNvbnN0IHN1Ym1vZHVsZSA9IHRoaXMuX3N1Yk1vZHVsZXNbbW9kdWxlLm5hbWVdO1xyXG4gICAgICAgIGlmICghc3VibW9kdWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VibW9kdWxlLmRpc3Bvc2UoKTtcclxuICAgIH1cclxufSJdfQ==
66
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGV2dG9vbHNTZXJ2aWNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfT3h5Z2VuU2VydmljZSIsIl9zdWJtb2R1bGVOZXR3b3JrIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQ0hST01FX0JST1dTRVIiLCJEZXZUb29sc1NlcnZpY2UiLCJPeHlnZW5TZXJ2aWNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY3R4IiwicmVzdWx0cyIsImxvZ2dlciIsIl9zdWJNb2R1bGVzIiwiaXNTZXJ2aWNlSW5pdGlhbGl6ZWQiLCJvbk1vZHVsZUxvYWRlZCIsIm1vZHVsZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsIm5ldHdvcmtTdWJtb2R1bGUiLCJOZXR3b3JrU3ViTW9kdWxlIiwiYWRkU3ViTW9kdWxlIiwibmFtZSIsIm9uTW9kdWxlSW5pdGlhbGl6ZWQiLCJzdWJtb2R1bGUiLCJpc0luaXRpYWxpemVkIiwiY2FwYWJpbGl0aWVzIiwiYnJvd3Nlck5hbWUiLCJfZHJpdmVyIiwiZGVidWdnZXJBZGRyZXNzIiwicHJvdmlkZXIiLCJ0b0xvd2VyQ2FzZSIsImRldlRvb2xzU3ZjIiwiV0RJT0RldlRvb2xzU2VydmljZSIsIlVOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UiLCJiZWZvcmVTZXNzaW9uIiwiY29uc29sZSIsImxvZyIsIl9pc1N1cHBvcnRlZCIsImdsb2JhbCIsImJyb3dzZXIiLCJiZWZvcmUiLCJpbml0Iiwib25Nb2R1bGVXaWxsRGlzcG9zZSIsImRpc3Bvc2UiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL294X3NlcnZpY2VzL3NlcnZpY2UtZGV2dG9vbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5yZWFjaGFibGUgKi9cclxuaW1wb3J0IFdESU9EZXZUb29sc1NlcnZpY2UgZnJvbSAnQHdkaW8vZGV2dG9vbHMtc2VydmljZSc7XHJcblxyXG5pbXBvcnQgT3h5Z2VuU2VydmljZSBmcm9tICcuLi9jb3JlL094eWdlblNlcnZpY2UnO1xyXG5pbXBvcnQgTmV0d29ya1N1Yk1vZHVsZSBmcm9tICcuL3NlcnZpY2UtZGV2dG9vbHMvc3VibW9kdWxlLW5ldHdvcmsnO1xyXG5cclxuY29uc3QgQ0hST01FX0JST1dTRVIgPSAnY2hyb21lJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERldlRvb2xzU2VydmljZSBleHRlbmRzIE94eWdlblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY3R4LCByZXN1bHRzLCBsb2dnZXIpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjdHgsIHJlc3VsdHMsIGxvZ2dlcik7XHJcbiAgICAgICAgLy8gaGFzaCBvZiB3ZWJkcml2ZXIgYmFzZWQgbW9kdWxlc1xyXG4gICAgICAgIHRoaXMuX3N1Yk1vZHVsZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmlzU2VydmljZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIG9uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xyXG4gICAgICAgIC8vIHNraXAgYW55IG1vZHVsZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCAuZ2V0RHJpdmVyKCkgbWV0aG9kIChlLmcuIG5vdCB3ZWJkcml2ZXIgYmFzZWQpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5nZXREcml2ZXIgfHwgdHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicgfHwgIW1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgfHwgdHlwZW9mIG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV0d29ya1N1Ym1vZHVsZSA9IG5ldyBOZXR3b3JrU3ViTW9kdWxlKCduZXR3b3JrJywgbW9kdWxlKTtcclxuICAgICAgICBtb2R1bGUuYWRkU3ViTW9kdWxlKCduZXR3b3JrJywgbmV0d29ya1N1Ym1vZHVsZSk7XHJcbiAgICAgICAgdGhpcy5fc3ViTW9kdWxlc1ttb2R1bGUubmFtZV0gPSBuZXR3b3JrU3VibW9kdWxlO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgb25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcclxuICAgICAgICAvLyBza2lwIGFueSBtb2R1bGUgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgZ2V0RHJpdmVyIG1ldGhvZCAoZS5nLiBub3Qgd2ViZHJpdmVyIGJhc2VkKVxyXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGUuZ2V0RHJpdmVyIHx8IHR5cGVvZiBtb2R1bGUuZ2V0RHJpdmVyICE9PSAnZnVuY3Rpb24nIHx8ICFtb2R1bGUuZ2V0Q2FwYWJpbGl0aWVzIHx8IHR5cGVvZiBtb2R1bGUuZ2V0Q2FwYWJpbGl0aWVzICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3VibW9kdWxlID0gdGhpcy5fc3ViTW9kdWxlc1ttb2R1bGUubmFtZV07XHJcbiAgICAgICAgaWYgKCFzdWJtb2R1bGUgfHwgc3VibW9kdWxlLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7fTtcclxuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSBtb2R1bGUuZ2V0Q2FwYWJpbGl0aWVzKCkgfHwge307XHJcbiAgICAgICAgY29uc3QgeyBicm93c2VyTmFtZSB9ID0gY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IG1vZHVsZS5nZXREcml2ZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIgJiZcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllcyAmJlxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzWydnb29nOmNocm9tZU9wdGlvbnMnXSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzWydnb29nOmNocm9tZU9wdGlvbnMnXVsnZGVidWdnZXJBZGRyZXNzJ11cclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5kZWJ1Z2dlckFkZHJlc3MgPSB0aGlzLl9kcml2ZXIuY2FwYWJpbGl0aWVzWydnb29nOmNocm9tZU9wdGlvbnMnXVsnZGVidWdnZXJBZGRyZXNzJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgbm90IHVzaW5nIGFueSAzcmQgcGFydHkgcHJvdmlkZXJcclxuICAgICAgICBpZiAodGhpcy5fZHJpdmVyLnByb3ZpZGVyID09PSBudWxsICYmIGJyb3dzZXJOYW1lICYmIGJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT09IENIUk9NRV9CUk9XU0VSKSB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgRGV2VG9vbHNTZXJ2aWNlIGFuZCBob29rIGl0IHRvIHRoZSBjdXJyZW50IHdlYmRyaXZlciBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgZGV2VG9vbHNTdmMgPSBuZXcgV0RJT0RldlRvb2xzU2VydmljZShvcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3QgVU5TVVBQT1JURURfRVJST1JfTUVTU0FHRSA9IGRldlRvb2xzU3ZjLmJlZm9yZVNlc3Npb24obnVsbCwgY2FwYWJpbGl0aWVzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVU5TVVBQT1JURURfRVJST1JfTUVTU0FHRScsIFVOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGV2VG9vbHNTdmMuX2lzU3VwcG9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgZ2xvYmFsLmJyb3dzZXIgdG8gdGhlIGN1cnJlbnQgbW9kdWxlJ3Mgd2ViZHJpdmVyIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBvcmdHbG9iYWxCcm93c2VyID0gZ2xvYmFsLmJyb3dzZXI7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuYnJvd3NlciA9IG1vZHVsZS5nZXREcml2ZXIoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGRldlRvb2xzU3ZjLmJlZm9yZShudWxsLCBudWxsLCB0aGlzLl9kcml2ZXIpO1xyXG4gICAgICAgICAgICAgICAgc3VibW9kdWxlLmluaXQoZGV2VG9vbHNTdmMpO1xyXG4gICAgICAgICAgICAgICAgLy8gZ2xvYmFsLmJyb3dzZXIgPSBvcmdHbG9iYWxCcm93c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpIHtcclxuICAgICAgICBjb25zdCBzdWJtb2R1bGUgPSB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXTtcclxuICAgICAgICBpZiAoIXN1Ym1vZHVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1Ym1vZHVsZS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbn0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxJQUFBQSxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsY0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUFvRSxTQUFBRCx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVwRSxNQUFNRyxjQUFjLEdBQUcsUUFBUTtBQUVoQixNQUFNQyxlQUFlLFNBQVNDLHNCQUFhLENBQUM7RUFDdkRDLFdBQVdBLENBQUNDLE9BQU8sRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRTtJQUN2QyxLQUFLLENBQUNILE9BQU8sRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sQ0FBQztJQUVwQyxJQUFJLENBQUNDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDckIsSUFBSSxDQUFDQyxvQkFBb0IsR0FBRyxJQUFJO0VBQ3BDO0VBQ0FDLGNBQWNBLENBQUNDLE1BQU0sRUFBRTtJQUVuQixJQUFJLENBQUNBLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNDLFNBQVMsSUFBSSxPQUFPRCxNQUFNLENBQUNDLFNBQVMsS0FBSyxVQUFVLElBQUksQ0FBQ0QsTUFBTSxDQUFDRSxlQUFlLElBQUksT0FBT0YsTUFBTSxDQUFDRSxlQUFlLEtBQUssVUFBVSxFQUFFO01BQ25KO0lBQ0o7SUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJQyx5QkFBZ0IsQ0FBQyxTQUFTLEVBQUVKLE1BQU0sQ0FBQztJQUNoRUEsTUFBTSxDQUFDSyxZQUFZLENBQUMsU0FBUyxFQUFFRixnQkFBZ0IsQ0FBQztJQUNoRCxJQUFJLENBQUNOLFdBQVcsQ0FBQ0csTUFBTSxDQUFDTSxJQUFJLENBQUMsR0FBR0gsZ0JBQWdCO0VBQ3BEO0VBQ0EsTUFBTUksbUJBQW1CQSxDQUFDUCxNQUFNLEVBQUU7SUFFOUIsSUFBSSxDQUFDQSxNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDQyxTQUFTLElBQUksT0FBT0QsTUFBTSxDQUFDQyxTQUFTLEtBQUssVUFBVSxJQUFJLENBQUNELE1BQU0sQ0FBQ0UsZUFBZSxJQUFJLE9BQU9GLE1BQU0sQ0FBQ0UsZUFBZSxLQUFLLFVBQVUsRUFBRTtNQUNuSjtJQUNKO0lBQ0EsTUFBTU0sU0FBUyxHQUFHLElBQUksQ0FBQ1gsV0FBVyxDQUFDRyxNQUFNLENBQUNNLElBQUksQ0FBQztJQUMvQyxJQUFJLENBQUNFLFNBQVMsSUFBSUEsU0FBUyxDQUFDQyxhQUFhLEVBQUU7TUFDdkM7SUFDSjtJQUVBLElBQUloQixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE1BQU1pQixZQUFZLEdBQUdWLE1BQU0sQ0FBQ0UsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTTtNQUFFUztJQUFZLENBQUMsR0FBR0QsWUFBWTtJQUNwQyxJQUFJLENBQUNFLE9BQU8sR0FBR1osTUFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztJQUVqQyxJQUNJLElBQUksQ0FBQ1csT0FBTyxJQUNaLElBQUksQ0FBQ0EsT0FBTyxDQUFDRixZQUFZLElBQ3pCLElBQUksQ0FBQ0UsT0FBTyxDQUFDRixZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFDL0MsSUFBSSxDQUFDRSxPQUFPLENBQUNGLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQ3BFO01BQ0VqQixPQUFPLENBQUNvQixlQUFlLEdBQUcsSUFBSSxDQUFDRCxPQUFPLENBQUNGLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQ2hHO0lBR0EsSUFBSSxJQUFJLENBQUNFLE9BQU8sQ0FBQ0UsUUFBUSxLQUFLLElBQUksSUFBSUgsV0FBVyxJQUFJQSxXQUFXLENBQUNJLFdBQVcsQ0FBQyxDQUFDLEtBQUsxQixjQUFjLEVBQUU7TUFFL0YsTUFBTTJCLFdBQVcsR0FBRyxJQUFJQyx3QkFBbUIsQ0FBQ3hCLE9BQU8sQ0FBQztNQUNwRCxNQUFNeUIseUJBQXlCLEdBQUdGLFdBQVcsQ0FBQ0csYUFBYSxDQUFDLElBQUksRUFBRVQsWUFBWSxDQUFDO01BRS9FLElBQUlRLHlCQUF5QixFQUFFO1FBQzNCRSxPQUFPLENBQUNDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRUgseUJBQXlCLENBQUM7TUFDdkU7TUFFQSxJQUFJRixXQUFXLENBQUNNLFlBQVksRUFBRTtRQUcxQkMsTUFBTSxDQUFDQyxPQUFPLEdBQUd4QixNQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLE1BQU1lLFdBQVcsQ0FBQ1MsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDYixPQUFPLENBQUM7UUFDbERKLFNBQVMsQ0FBQ2tCLElBQUksQ0FBQ1YsV0FBVyxDQUFDO01BRS9CO0lBQ0o7RUFDSjtFQUNBVyxtQkFBbUJBLENBQUMzQixNQUFNLEVBQUU7SUFDeEIsTUFBTVEsU0FBUyxHQUFHLElBQUksQ0FBQ1gsV0FBVyxDQUFDRyxNQUFNLENBQUNNLElBQUksQ0FBQztJQUMvQyxJQUFJLENBQUNFLFNBQVMsRUFBRTtNQUNaO0lBQ0o7SUFDQUEsU0FBUyxDQUFDb0IsT0FBTyxDQUFDLENBQUM7RUFDdkI7QUFDSjtBQUFDQyxPQUFBLENBQUF6QyxPQUFBLEdBQUFFLGVBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -4,42 +4,29 @@ 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
  var _fs = _interopRequireDefault(require("fs"));
11
-
12
9
  var _path = _interopRequireDefault(require("path"));
13
-
14
10
  var _moment = _interopRequireDefault(require("moment"));
15
-
16
11
  var _ReporterBase = _interopRequireDefault(require("./ReporterBase"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
13
  const REPORTS_FOLDER_NAME = 'reports';
21
14
  const REPORT_FILE_NAME = 'report';
22
-
23
15
  class FileReporterBase extends _ReporterBase.default {
24
16
  constructor(options) {
25
17
  super(options);
26
18
  }
27
-
28
19
  createFolderStructureAndFilePath(fileExtension) {
29
20
  if (!fileExtension || typeof fileExtension !== 'string' || fileExtension.length == 0) {
30
21
  throw new Error('"fileExtension" argument must be specified');
31
22
  }
32
-
33
23
  if (!fileExtension.startsWith('.')) {
34
24
  fileExtension = `.${fileExtension}`;
35
25
  }
36
-
37
26
  if (!this.options || !this.options.target || !this.options.reporting) {
38
27
  throw new Error('FileReporterBase is not properly initialized');
39
28
  }
40
-
41
29
  let resultsBaseFolder = null;
42
-
43
30
  if (this.options.cwd && this.options.reporting.outputDir) {
44
31
  if (_path.default.isAbsolute(this.options.reporting.outputDir)) {
45
32
  resultsBaseFolder = this.options.reporting.outputDir;
@@ -47,44 +34,35 @@ class FileReporterBase extends _ReporterBase.default {
47
34
  resultsBaseFolder = _path.default.resolve(this.options.cwd, this.options.reporting.outputDir);
48
35
  }
49
36
  } else if (this.options.target) {
50
- resultsBaseFolder = _path.default.join(this.options.target.cwd, REPORTS_FOLDER_NAME);
51
- } else {
52
- throw new Error('Error constructing reports path. Either srcFile or outputFolder is required.');
53
- }
54
-
37
+ resultsBaseFolder = _path.default.join(this.options.target.cwd, REPORTS_FOLDER_NAME);
38
+ } else {
39
+ throw new Error('Error constructing reports path. Either srcFile or outputFolder is required.');
40
+ }
55
41
  this.createFolderIfNotExists(resultsBaseFolder);
56
42
  let resultFolderPath = resultsBaseFolder;
57
-
58
43
  if (!this.options.reporting.outputDir) {
59
44
  const subFolderName = (0, _moment.default)().format('YYYY-MM-DD_HHmmss');
60
45
  resultFolderPath = _path.default.join(resultsBaseFolder, subFolderName);
61
46
  this.createFolderIfNotExists(resultFolderPath);
62
47
  }
63
-
64
48
  return _path.default.join(resultFolderPath, `${REPORT_FILE_NAME}${fileExtension}`);
65
49
  }
66
-
67
50
  createFolderIfNotExists(folderPath) {
68
51
  try {
69
52
  _fs.default.mkdirSync(folderPath);
70
53
  } catch (e) {
71
54
  if (e.code != 'EEXIST') throw e;
72
55
  }
73
-
74
56
  return folderPath;
75
57
  }
76
-
77
58
  replaceScreenshotsWithFiles(results, folderPath) {
78
59
  if (!Array.isArray(results)) {
79
60
  throw new Error('Invalid argument "results" - must be an array.');
80
61
  }
81
-
82
62
  if (!folderPath) {
83
63
  throw new Error('"folderPath" argument cannot be null or empty.');
84
64
  }
85
-
86
65
  const stepsWithScreenshot = [];
87
-
88
66
  for (let result of results) {
89
67
  for (let suite of result.suites) {
90
68
  for (let caze of suite.cases) {
@@ -92,29 +70,21 @@ class FileReporterBase extends _ReporterBase.default {
92
70
  }
93
71
  }
94
72
  }
95
-
96
73
  const screenshotFilePrefix = 'screenshot-';
97
74
  const screenshotFileSuffix = '.png';
98
-
99
75
  for (let i = 0; i < stepsWithScreenshot.length; i++) {
100
76
  let filename = screenshotFilePrefix + i + screenshotFileSuffix;
101
-
102
77
  let filepath = _path.default.join(folderPath, filename);
103
-
104
78
  let step = stepsWithScreenshot[i];
105
-
106
79
  _fs.default.writeFileSync(filepath, step.screenshot, 'base64');
107
-
108
80
  step.screenshotFile = filename;
109
81
  step.screenshot = null;
110
82
  }
111
83
  }
112
-
113
84
  formatTotalDuration(results) {
114
85
  if (!Array.isArray(results)) {
115
86
  throw new Error('Invalid argument "results" - must be an array.');
116
87
  }
117
-
118
88
  for (let result of results) {
119
89
  for (let suite of result.suites) {
120
90
  for (let caze of suite.cases) {
@@ -125,42 +95,33 @@ class FileReporterBase extends _ReporterBase.default {
125
95
  }
126
96
  }
127
97
  }
128
-
129
98
  _populateStepsWithScreenshots(steps, stepsWithScreenshot) {
130
99
  for (let step of steps) {
131
100
  if (step.screenshot) {
132
101
  stepsWithScreenshot.push(step);
133
102
  }
134
-
135
103
  if (step.steps) {
136
104
  this._populateStepsWithScreenshots(step.steps, stepsWithScreenshot);
137
105
  }
138
106
  }
139
107
  }
140
-
141
108
  formatDuration(miliseconds) {
142
109
  var seconds = miliseconds / 1000;
143
110
  var hh = Math.floor(seconds / 3600);
144
111
  var min = Math.floor((seconds - hh * 3600) / 60);
145
112
  var sec = seconds - hh * 3600 - min * 60;
146
113
  let result = '';
147
-
148
114
  if (hh) {
149
115
  result += `${hh.toFixed(0)} hr `;
150
116
  }
151
-
152
117
  if (min) {
153
118
  result += `${min.toFixed(0)} min `;
154
119
  }
155
-
156
120
  if (sec) {
157
121
  result += `${sec.toFixed(0)} sec`;
158
122
  }
159
-
160
123
  return result;
161
124
  }
162
-
163
125
  }
164
-
165
126
  exports.default = FileReporterBase;
166
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlLmpzIl0sIm5hbWVzIjpbIlJFUE9SVFNfRk9MREVSX05BTUUiLCJSRVBPUlRfRklMRV9OQU1FIiwiRmlsZVJlcG9ydGVyQmFzZSIsIlJlcG9ydGVyQmFzZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoIiwiZmlsZUV4dGVuc2lvbiIsImxlbmd0aCIsIkVycm9yIiwic3RhcnRzV2l0aCIsInRhcmdldCIsInJlcG9ydGluZyIsInJlc3VsdHNCYXNlRm9sZGVyIiwiY3dkIiwib3V0cHV0RGlyIiwicGF0aCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiam9pbiIsImNyZWF0ZUZvbGRlcklmTm90RXhpc3RzIiwicmVzdWx0Rm9sZGVyUGF0aCIsInN1YkZvbGRlck5hbWUiLCJmb3JtYXQiLCJmb2xkZXJQYXRoIiwiZnMiLCJta2RpclN5bmMiLCJlIiwiY29kZSIsInJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyIsInJlc3VsdHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGVwc1dpdGhTY3JlZW5zaG90IiwicmVzdWx0Iiwic3VpdGUiLCJzdWl0ZXMiLCJjYXplIiwiY2FzZXMiLCJfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyIsInN0ZXBzIiwic2NyZWVuc2hvdEZpbGVQcmVmaXgiLCJzY3JlZW5zaG90RmlsZVN1ZmZpeCIsImkiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwic3RlcCIsIndyaXRlRmlsZVN5bmMiLCJzY3JlZW5zaG90Iiwic2NyZWVuc2hvdEZpbGUiLCJmb3JtYXRUb3RhbER1cmF0aW9uIiwiZHVyYXRpb24iLCJmb3JtYXREdXJhdGlvbiIsInB1c2giLCJtaWxpc2Vjb25kcyIsInNlY29uZHMiLCJoaCIsIk1hdGgiLCJmbG9vciIsIm1pbiIsInNlYyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztB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ckMsQ0FBVjtBQUNBLFFBQUlJLEdBQUcsR0FBR0wsT0FBTyxHQUFJQyxFQUFFLEdBQUcsSUFBaEIsR0FBeUJHLEdBQUcsR0FBRyxFQUF6QztBQUVBLFFBQUl6QixNQUFNLEdBQUcsRUFBYjs7QUFFQSxRQUFJc0IsRUFBSixFQUFRO0FBQ0p0QixNQUFBQSxNQUFNLElBQUssR0FBRXNCLEVBQUUsQ0FBQ0ssT0FBSCxDQUFXLENBQVgsQ0FBYyxNQUEzQjtBQUNIOztBQUNELFFBQUlGLEdBQUosRUFBUztBQUNMekIsTUFBQUEsTUFBTSxJQUFLLEdBQUV5QixHQUFHLENBQUNFLE9BQUosQ0FBWSxDQUFaLENBQWUsT0FBNUI7QUFDSDs7QUFDRCxRQUFJRCxHQUFKLEVBQVM7QUFDTDFCLE1BQUFBLE1BQU0sSUFBSyxHQUFFMEIsR0FBRyxDQUFDQyxPQUFKLENBQVksQ0FBWixDQUFlLE1BQTVCO0FBQ0g7O0FBRUQsV0FBTzNCLE1BQVA7QUFDSDs7QUE5SHNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
127
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX21vbWVudCIsIl9SZXBvcnRlckJhc2UiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJSRVBPUlRTX0ZPTERFUl9OQU1FIiwiUkVQT1JUX0ZJTEVfTkFNRSIsIkZpbGVSZXBvcnRlckJhc2UiLCJSZXBvcnRlckJhc2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aCIsImZpbGVFeHRlbnNpb24iLCJsZW5ndGgiLCJFcnJvciIsInN0YXJ0c1dpdGgiLCJ0YXJnZXQiLCJyZXBvcnRpbmciLCJyZXN1bHRzQmFzZUZvbGRlciIsImN3ZCIsIm91dHB1dERpciIsInBhdGgiLCJpc0Fic29sdXRlIiwicmVzb2x2ZSIsImpvaW4iLCJjcmVhdGVGb2xkZXJJZk5vdEV4aXN0cyIsInJlc3VsdEZvbGRlclBhdGgiLCJzdWJGb2xkZXJOYW1lIiwibW9tZW50IiwiZm9ybWF0IiwiZm9sZGVyUGF0aCIsImZzIiwibWtkaXJTeW5jIiwiY29kZSIsInJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyIsInJlc3VsdHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGVwc1dpdGhTY3JlZW5zaG90IiwicmVzdWx0Iiwic3VpdGUiLCJzdWl0ZXMiLCJjYXplIiwiY2FzZXMiLCJfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyIsInN0ZXBzIiwic2NyZWVuc2hvdEZpbGVQcmVmaXgiLCJzY3JlZW5zaG90RmlsZVN1ZmZpeCIsImkiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwic3RlcCIsIndyaXRlRmlsZVN5bmMiLCJzY3JlZW5zaG90Iiwic2NyZWVuc2hvdEZpbGUiLCJmb3JtYXRUb3RhbER1cmF0aW9uIiwiZHVyYXRpb24iLCJmb3JtYXREdXJhdGlvbiIsInB1c2giLCJtaWxpc2Vjb25kcyIsInNlY29uZHMiLCJoaCIsIk1hdGgiLCJmbG9vciIsIm1pbiIsInNlYyIsInRvRml4ZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9ydGVyL0ZpbGVSZXBvcnRlckJhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJc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