oxygen-cli 1.40.2 → 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 +13 -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 +51 -82
  15. package/build/index.js +8 -22
  16. package/build/lib/cli-util.js +39 -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 +21 -34
  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 +265 -0
  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 +14 -120
  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 +5 -1
package/build/lib/util.js CHANGED
@@ -1,41 +1,26 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
-
7
5
  var _helper = _interopRequireDefault(require("../errors/helper"));
8
-
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
7
  const path = require('path');
12
-
13
8
  const fs = require('fs');
14
-
15
9
  const moment = require('moment');
16
-
17
10
  const crypto = require('crypto');
18
-
19
11
  const util = require('util');
20
-
21
12
  const password = require('../../package.json').encryptionKey;
22
-
23
13
  const key = crypto.scryptSync(password, 'GfG', 24);
24
14
  const iv = Buffer.alloc(16, 0);
25
15
  const algorithm = 'aes-192-cbc';
26
-
27
16
  const download = require('download');
28
-
29
17
  const request = require('request');
30
-
31
18
  function DecryptResult(result) {
32
19
  const decryptResult = result;
33
-
34
20
  this.getDecryptResult = () => {
35
21
  return decryptResult;
36
22
  };
37
23
  }
38
-
39
24
  const DUMMY_HOOKS = {
40
25
  beforeTest: () => {},
41
26
  beforeSuite: () => {},
@@ -49,30 +34,23 @@ const DUMMY_HOOKS = {
49
34
  const CB_ATTACHMENTS_DIR_NAME = '.cb-attachments';
50
35
  const DOWNLOAD_RETRIES = 40;
51
36
  const DOWNLOAD_RETRY_WAIT_TIME = 2500;
52
-
53
37
  function getVideoAttachmentPath(fileName, options) {
54
38
  const cwd = getCwd(options);
55
39
  const attachmentsDirPath = path.join(cwd, CB_ATTACHMENTS_DIR_NAME);
56
-
57
40
  if (!fs.existsSync(attachmentsDirPath)) {
58
41
  fs.mkdirSync(attachmentsDirPath);
59
42
  }
60
-
61
43
  return path.join(attachmentsDirPath, fileName);
62
44
  }
63
-
64
45
  const getCwd = options => {
65
46
  let cwd = process.cwd();
66
-
67
47
  if (options && options.cwd) {
68
48
  cwd = options.cwd;
69
49
  } else if (options && options.rootPath) {
70
50
  cwd = options.rootPath;
71
51
  }
72
-
73
52
  return cwd.trim();
74
53
  };
75
-
76
54
  var self = module.exports = {
77
55
  generateUniqueId: function () {
78
56
  return crypto.randomBytes(4).toString('hex');
@@ -88,11 +66,9 @@ var self = module.exports = {
88
66
  suite.iterationCount = suiteDef.iterations || suiteDef.iterationCount || testConfig.iterations || iterationCount;
89
67
  const suiteFilePath = suiteDef.path || path.join(testConfig.target.cwd, 'suites', `${suiteDef.name}.json`);
90
68
  suite.paramManager = await self.getParameterManager(suiteFilePath, testConfig.parameters, testConfig.target.cwd);
91
-
92
69
  if (suite.paramManager && suite.paramManager.getMode() == 'all') {
93
70
  suite.iterationCount = suite.paramManager.rows;
94
71
  }
95
-
96
72
  suite.capabilities = suiteDef.capabilities || testConfig.capabilities || {};
97
73
  suite.environment = testConfig.environment || null;
98
74
  suite.options = testConfig.options || null;
@@ -119,44 +95,37 @@ var self = module.exports = {
119
95
  suite.id = testcase.id;
120
96
  suite.iterationCount = iterationCount;
121
97
  suite.cases.push(testcase);
122
-
123
98
  if (testcase.reopenSession) {
124
99
  suite.reopenSession = testcase.reopenSession;
125
100
  }
126
-
127
101
  const cwd = path.dirname(filePath);
128
102
  suite.paramManager = await self.getParameterManager(filePath, {
129
103
  file: paramFile,
130
104
  mode: paramMode
131
105
  }, cwd);
132
-
133
106
  if (suite.paramManager && paramMode == 'all') {
134
107
  suite.iterationCount = suite.paramManager.rows;
135
108
  }
136
-
137
109
  return suite;
138
110
  },
139
111
  getParameterManager: async function (mainFilePath, paramOpts = null, cwd = null, autoSearch = true) {
140
112
  let paramFilePath = paramOpts && paramOpts.file ? paramOpts.file : null;
141
113
  let paramMode = paramOpts && paramOpts.mode ? paramOpts.mode : 'seq';
142
-
143
114
  if (paramFilePath && cwd && !path.isAbsolute(paramFilePath)) {
144
115
  paramFilePath = path.join(cwd, paramFilePath);
145
116
  }
146
-
147
117
  return await self.loadParameterManager(mainFilePath, paramFilePath, paramMode, autoSearch);
148
118
  },
149
119
  generateTestSuiteFromJsonFile: async function (filePath, paramFile, paramMode = null, options = {}) {
150
- const testConfig = { ...(options || {})
120
+ const testConfig = {
121
+ ...(options || {})
151
122
  };
152
-
153
123
  if (paramFile) {
154
124
  testConfig.parameters = {
155
125
  file: paramFile,
156
126
  mode: paramMode
157
127
  };
158
128
  }
159
-
160
129
  return await self.generateTestSuiteFromJson(require(filePath), testConfig);
161
130
  },
162
131
  getFileNameWithoutExt: function (filePath) {
@@ -167,14 +136,12 @@ var self = module.exports = {
167
136
  },
168
137
  loadParameterManager: async function (mainFile, paramFile, paramMode, autoSearch = false) {
169
138
  var paramManager = null;
170
-
171
139
  if (!paramFile && autoSearch) {
172
140
  var fileNameNoExt = self.getFileNameWithoutExt(mainFile);
173
141
  var csvParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.csv');
174
142
  var txtParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.txt');
175
143
  var xlsParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xls');
176
144
  var xlsxParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xlsx');
177
-
178
145
  if (fs.existsSync(csvParamFile)) {
179
146
  paramFile = csvParamFile;
180
147
  } else if (fs.existsSync(txtParamFile)) {
@@ -185,13 +152,11 @@ var self = module.exports = {
185
152
  paramFile = xlsxParamFile;
186
153
  }
187
154
  }
188
-
189
155
  if (paramFile) {
190
156
  paramManager = new require('./param-manager')(paramFile, paramMode || 'seq');
191
157
  await paramManager.init();
192
158
  return paramManager;
193
159
  }
194
-
195
160
  return null;
196
161
  },
197
162
  resolvePath: function (pathToResolve, baseFolder) {
@@ -202,9 +167,7 @@ var self = module.exports = {
202
167
  if (typeof err === 'object') {
203
168
  return destroyCircular(err, []);
204
169
  }
205
-
206
170
  return err;
207
-
208
171
  function destroyCircular(from, seen) {
209
172
  var to = Array.isArray(from) ? [] : {};
210
173
  seen.push(from);
@@ -227,9 +190,7 @@ var self = module.exports = {
227
190
  } else if (args.length === 1 && (typeof args[0] === 'string' || args[0] instanceof String)) {
228
191
  return args[0];
229
192
  }
230
-
231
193
  let str;
232
-
233
194
  try {
234
195
  str = JSON.stringify(args, (key, value) => {
235
196
  if (typeof value === 'bigint') {
@@ -243,19 +204,15 @@ var self = module.exports = {
243
204
  } else if (value instanceof RegExp) {
244
205
  return '/' + value.source + '/' + value.flags;
245
206
  }
246
-
247
207
  return value;
248
208
  }, indentation);
249
209
  str = str.replace(/^\[{1}\s*|\s*\]{1}$/g, '');
250
-
251
210
  if (str.endsWith(' }')) {
252
211
  str = str.substring(0, str.length - 3) + '}';
253
212
  }
254
-
255
213
  if (str.endsWith(' ]')) {
256
214
  str = str.substring(0, str.length - 3) + ']';
257
215
  }
258
-
259
216
  str = str.replace(/"__UNDEFINED"/g, 'undefined');
260
217
  } catch (e) {
261
218
  console.warn('Failed to serialize command arguments: ', e);
@@ -263,7 +220,6 @@ var self = module.exports = {
263
220
  depth: 3
264
221
  });
265
222
  }
266
-
267
223
  return str;
268
224
  },
269
225
  isInDebugMode: function () {
@@ -271,7 +227,6 @@ var self = module.exports = {
271
227
  },
272
228
  loadTestHooks: function (options) {
273
229
  let hooks = DUMMY_HOOKS;
274
-
275
230
  if (options && options.target && options.target.name === 'oxygen.conf') {
276
231
  try {
277
232
  hooks = require(options.target.path).hooks || DUMMY_HOOKS;
@@ -279,24 +234,19 @@ var self = module.exports = {
279
234
  console.warn('Error loading user hooks:', e);
280
235
  }
281
236
  }
282
-
283
237
  return hooks;
284
238
  },
285
239
  executeTestHook: async function (hooks, method, args) {
286
240
  if (!hooks || !method || !hooks[method] || typeof hooks[method] !== 'function') {
287
241
  return null;
288
242
  }
289
-
290
243
  if (['beforeTest', 'beforeSuite', 'beforeCase', 'afterCase', 'afterSuite', 'afterTest'].includes(method)) {
291
244
  global._lastTransactionName = null;
292
245
  }
293
-
294
246
  try {
295
247
  if (global.chaiAndMockeryLoaded) {} else {
296
248
  const chai = require('chai');
297
-
298
249
  const mockery = require('mockery');
299
-
300
250
  mockery.enable({
301
251
  useCleanCache: true,
302
252
  warnOnReplace: false,
@@ -305,7 +255,6 @@ var self = module.exports = {
305
255
  mockery.registerMock('chai', chai);
306
256
  global.chaiAndMockeryLoaded = true;
307
257
  }
308
-
309
258
  await hooks[method].apply(undefined, args);
310
259
  } catch (e) {
311
260
  console.error(`Hook "${method}" has thrown an error: ${e.toString()}`);
@@ -315,17 +264,14 @@ var self = module.exports = {
315
264
  getOxModulesDir: function () {
316
265
  return path.join(__dirname, '..', 'ox_modules');
317
266
  },
318
-
319
267
  hookLogs(logger) {
320
268
  const origlog = console.log;
321
269
  const origDebug = console.debug;
322
270
  const origInfo = console.info;
323
271
  const origWarn = console.warn;
324
272
  const origError = console.error;
325
-
326
273
  const processArgs = argumentArray => {
327
274
  let result = [];
328
-
329
275
  if (argumentArray && argumentArray.map) {
330
276
  argumentArray.map(item => {
331
277
  if (typeof item === 'string') {
@@ -335,36 +281,29 @@ var self = module.exports = {
335
281
  }
336
282
  });
337
283
  }
338
-
339
284
  return result.join(' ');
340
285
  };
341
-
342
286
  console.log = function (...argumentArray) {
343
287
  origlog.apply(this, argumentArray);
344
288
  logger.info(processArgs(argumentArray));
345
289
  };
346
-
347
290
  console.debug = function (...argumentArray) {
348
291
  origDebug.apply(this, argumentArray);
349
292
  logger.debug(processArgs(argumentArray));
350
293
  };
351
-
352
294
  console.info = function (...argumentArray) {
353
295
  origInfo.apply(this, argumentArray);
354
296
  logger.info(processArgs(argumentArray));
355
297
  };
356
-
357
298
  console.warn = function (...argumentArray) {
358
299
  origWarn.apply(this, argumentArray);
359
300
  logger.warn(processArgs(argumentArray));
360
301
  };
361
-
362
302
  console.error = function (...argumentArray) {
363
303
  origError.apply(this, argumentArray);
364
304
  logger.error(processArgs(argumentArray));
365
305
  };
366
306
  },
367
-
368
307
  makeTransactionFailedIfStepFailed(steps) {
369
308
  if (steps && steps.length && steps.length > 0) {
370
309
  let lastFindedTransactionIndex = false;
@@ -373,17 +312,14 @@ var self = module.exports = {
373
312
  if (item.name && item.name.includes && item.name.includes('.transaction(')) {
374
313
  lastFindedTransactionIndex = idx;
375
314
  }
376
-
377
315
  if (typeof lastFindedTransactionIndex === 'number' && item.status && item.status === 'failed') {
378
316
  newSteps[lastFindedTransactionIndex]['status'] = 'failed';
379
317
  }
380
318
  });
381
319
  return newSteps;
382
320
  }
383
-
384
321
  return steps;
385
322
  },
386
-
387
323
  decrypt(text) {
388
324
  try {
389
325
  let encryptedText = Buffer.from(text, 'hex');
@@ -396,34 +332,28 @@ var self = module.exports = {
396
332
  throw new _OxygenError.default(_helper.default.errorCode.CRYPTO_ERROR, "The provided argument doesn't seem to be a valid cipher produced by 'utils.encrypt'");
397
333
  }
398
334
  },
399
-
400
335
  encrypt(text) {
401
336
  let cipher = crypto.createCipheriv(algorithm, key, iv);
402
337
  let encrypted = cipher.update(text);
403
338
  encrypted = Buffer.concat([encrypted, cipher.final()]);
404
339
  return encrypted.toString('hex');
405
340
  },
406
-
407
341
  sleep: function (timeout) {
408
342
  return new Promise(resolve => setTimeout(resolve, timeout));
409
343
  },
410
344
  downloadVideo: async function (fileName, videoUrl, options) {
411
345
  const localVideoFilePath = getVideoAttachmentPath(fileName, options);
412
346
  let error;
413
-
414
347
  for (let i = 0; i < DOWNLOAD_RETRIES; i++) {
415
348
  error = undefined;
416
-
417
349
  try {
418
350
  fs.writeFileSync(localVideoFilePath, await download(videoUrl));
419
351
  break;
420
352
  } catch (e) {
421
353
  error = e;
422
354
  }
423
-
424
355
  await self.sleep(DOWNLOAD_RETRY_WAIT_TIME);
425
356
  }
426
-
427
357
  if (!error) {
428
358
  const options = {
429
359
  url: videoUrl,
@@ -431,7 +361,6 @@ var self = module.exports = {
431
361
  json: false,
432
362
  rejectUnauthorized: false
433
363
  };
434
-
435
364
  try {
436
365
  return new Promise((resolve, reject) => {
437
366
  request(options, (err, res, body) => {
@@ -446,4 +375,4 @@ var self = module.exports = {
446
375
  }
447
376
  }
448
377
  };
449
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiZG93bmxvYWQiLCJyZXF1ZXN0IiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSIsIkRPV05MT0FEX1JFVFJJRVMiLCJET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUiLCJnZXRWaWRlb0F0dGFjaG1lbnRQYXRoIiwiZmlsZU5hbWUiLCJvcHRpb25zIiwiY3dkIiwiZ2V0Q3dkIiwiYXR0YWNobWVudHNEaXJQYXRoIiwiam9pbiIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJwcm9jZXNzIiwicm9vdFBhdGgiLCJ0cmltIiwic2VsZiIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImdldFRpbWVTdGFtcCIsInV0YyIsInZhbHVlT2YiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic3VpdGVEZWYiLCJ0ZXN0Q29uZmlnIiwiaXRlcmF0aW9uQ291bnQiLCJzdWl0ZSIsImlkIiwibmFtZSIsIml0ZXJhdGlvbnMiLCJzdWl0ZUZpbGVQYXRoIiwidGFyZ2V0IiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwicGFyYWxsZWwiLCJjb25jdXJyZW5jeSIsImNhc2VzIiwiZm9yRWFjaCIsImNhc2VEZWYiLCJ0YyIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsInJlc29sdmVQYXRoIiwiZm9ybWF0IiwicHVzaCIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSIsImZpbGVQYXRoIiwicGFyYW1GaWxlIiwicGFyYW1Nb2RlIiwibm9QYXJhbUF1dG9TZWFyY2giLCJmaWxlTmFtZU5vRXh0IiwidGVzdGNhc2UiLCJyZW9wZW5TZXNzaW9uIiwiZGlybmFtZSIsImZpbGUiLCJtb2RlIiwibWFpbkZpbGVQYXRoIiwicGFyYW1PcHRzIiwiYXV0b1NlYXJjaCIsInBhcmFtRmlsZVBhdGgiLCJpc0Fic29sdXRlIiwibG9hZFBhcmFtZXRlck1hbmFnZXIiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJpbml0IiwicGF0aFRvUmVzb2x2ZSIsImJhc2VGb2xkZXIiLCJyZXNvbHZlIiwibWFrZVNlcmlhbGl6YWJsZSIsImVyciIsImRlc3Ryb3lDaXJjdWxhciIsImZyb20iLCJzZWVuIiwidG8iLCJBcnJheSIsImlzQXJyYXkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsInNsaWNlIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJtZXRob2RBcmdzIiwic3RyaW5naWZ5IiwiYXJncyIsImluZGVudGF0aW9uIiwiU3RyaW5nIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInZhbHVlIiwiRXJyb3IiLCJSZWdFeHAiLCJzb3VyY2UiLCJmbGFncyIsInJlcGxhY2UiLCJlbmRzV2l0aCIsImUiLCJjb25zb2xlIiwid2FybiIsImluc3BlY3QiLCJkZXB0aCIsImlzSW5EZWJ1Z01vZGUiLCJsb2FkVGVzdEhvb2tzIiwiaG9va3MiLCJleGVjdXRlVGVzdEhvb2siLCJtZXRob2QiLCJpbmNsdWRlcyIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4Iiwic3RhdHVzIiwiZGVjcnlwdCIsInRleHQiLCJlbmNyeXB0ZWRUZXh0IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwiZGVjcnlwdGVkIiwidXBkYXRlIiwiY29uY2F0IiwiZmluYWwiLCJyZXRWYWwiLCJPeHlnZW5FcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1JZUFRPX0VSUk9SIiwiZW5jcnlwdCIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkIiwic2xlZXAiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInNldFRpbWVvdXQiLCJkb3dubG9hZFZpZGVvIiwidmlkZW9VcmwiLCJsb2NhbFZpZGVvRmlsZVBhdGgiLCJpIiwid3JpdGVGaWxlU3luYyIsInVybCIsImpz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Y2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5jb25zdCBkb3dubG9hZCA9IHJlcXVpcmUoJ2Rvd25sb2FkJyk7XHJcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdyZXF1ZXN0Jyk7XHJcblxyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuZnVuY3Rpb24gRGVjcnlwdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIGNvbnN0IGRlY3J5cHRSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gICAgdGhpcy5nZXREZWNyeXB0UmVzdWx0ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0UmVzdWx0O1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgRFVNTVlfSE9PS1MgPSB7XHJcbiAgICBiZWZvcmVUZXN0OiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZVN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNhc2U6ICgpID0+IHt9LFxyXG4gICAgYmVmb3JlQ29tbWFuZDogKCkgPT4ge30sXHJcbiAgICBhZnRlckNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJUZXN0OiAoKSA9PiB7fSxcclxuICAgIGFmdGVyU3VpdGU6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDYXNlOiAoKSA9PiB7fSxcclxufTtcclxuXHJcbmNvbnN0IENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FID0gJy5jYi1hdHRhY2htZW50cyc7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJJRVMgPSA0MDtcclxuY29uc3QgRE9XTkxPQURfUkVUUllfV0FJVF9USU1FID0gMjUwMDtcclxuXHJcbmZ1bmN0aW9uIGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGN3ZCA9IGdldEN3ZChvcHRpb25zKTtcclxuICAgIGNvbnN0IGF0dGFjaG1lbnRzRGlyUGF0aCA9IHBhdGguam9pbihjd2QsIENCX0FUVEFDSE1FTlRTX0RJUl9OQU1FKTtcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhhdHRhY2htZW50c0RpclBhdGgpKSB7XHJcbiAgICAgICAgZnMubWtkaXJTeW5jKGF0dGFjaG1lbnRzRGlyUGF0aCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKGF0dGFjaG1lbnRzRGlyUGF0aCwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5jb25zdCBnZXRDd2QgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jd2QpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLmN3ZDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb290UGF0aCkge1xyXG4gICAgICAgIGN3ZCA9IG9wdGlvbnMucm9vdFBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN3ZC50cmltKCk7XHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50IHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgY2FzZURlZi5pdGVyYXRpb25Db3VudCB8fCAxO1xyXG4gICAgICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc3VpdGU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUgPSBudWxsLCBwYXJhbU1vZGUgPSBudWxsLCBub1BhcmFtQXV0b1NlYXJjaCA9IHRydWUsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgdGVzdGNhc2UgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgIHRlc3RjYXNlLm5hbWUgPSBmaWxlTmFtZU5vRXh0O1xyXG4gICAgICAgIHRlc3RjYXNlLnBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0ZXN0Y2FzZS5mb3JtYXQgPSAnanMnO1xyXG4gICAgICAgIHRlc3RjYXNlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUubmFtZSA9IHRlc3RjYXNlLm5hbWU7XHJcbiAgICAgICAgc3VpdGUuaWQgPSB0ZXN0Y2FzZS5pZDtcclxuICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IGl0ZXJhdGlvbkNvdW50O1xyXG4gICAgICAgIHN1aXRlLmNhc2VzLnB1c2godGVzdGNhc2UpO1xyXG4gICAgICAgIGlmICh0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnJlb3BlblNlc3Npb24gPSB0ZXN0Y2FzZS5yZW9wZW5TZXNzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjd2QgPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihmaWxlUGF0aCwgeyBmaWxlOiBwYXJhbUZpbGUsIG1vZGU6IHBhcmFtTW9kZSB9LCBjd2QpO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgaXMgJ2FsbCcgdGhlbiBjaGFuZ2UgaXRlcmF0aW9uQ291bnQgdG8gdGhlIGFtb3VudCBvZiByb3dzIGluIHRoZSBwYXJhbSBmaWxlXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBwYXJhbU1vZGUgPT0gJ2FsbCcpIHtcclxuICAgICAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZS5wYXJhbU1hbmFnZXIucm93cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZVBhdGgsIHBhcmFtT3B0cyA9IG51bGwsIGN3ZCA9IG51bGwsIGF1dG9TZWFyY2ggPSB0cnVlKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtRmlsZVBhdGggPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLmZpbGUgPyBwYXJhbU9wdHMuZmlsZSA6IG51bGw7XHJcbiAgICAgICAgbGV0IHBhcmFtTW9kZSA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMubW9kZSA/IHBhcmFtT3B0cy5tb2RlIDogJ3NlcSc7XHJcblxyXG4gICAgICAgIGlmIChwYXJhbUZpbGVQYXRoICYmIGN3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHBhcmFtRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtRmlsZVBhdGggPSBwYXRoLmpvaW4oY3dkLCBwYXJhbUZpbGVQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmxvYWRQYXJhbWV0ZXJNYW5hZ2VyKG1haW5GaWxlUGF0aCwgcGFyYW1GaWxlUGF0aCwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlLCBwYXJhbU1vZGUgPSBudWxsLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAuLi5vcHRpb25zIHx8IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlOiBwYXJhbUZpbGUsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBwYXJhbU1vZGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCBzZWxmLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24ocmVxdWlyZShmaWxlUGF0aCksIHRlc3RDb25maWcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGaWxlTmFtZVdpdGhvdXRFeHQ6IGZ1bmN0aW9uIChmaWxlUGF0aCkge1xyXG4gICAgICAgIHZhciBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlRXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZVBhdGhOb0V4dCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZihmaWxlRXh0KSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoTm9FeHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRQYXJhbWV0ZXJNYW5hZ2VyOiBhc3luYyBmdW5jdGlvbihtYWluRmlsZSwgcGFyYW1GaWxlLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2ggPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciBwYXJhbU1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgIC8vIGlmIHBhcmFtIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgdGhlbiBjaGVjayBpZiBKUyBmaWxlIGlzIGNvbWluZyBpbiBwYWlyIHdpdGggYSBwYXJhbWV0ZXIgZmlsZSBcclxuICAgICAgICAvLyAoY3VycmVudGx5IHN1cHBvcnRpbmcgQ1NWIG9yIFRYVClcclxuICAgICAgICBpZiAoIXBhcmFtRmlsZSAmJiBhdXRvU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZU5vRXh0ID0gc2VsZi5nZXRGaWxlTmFtZVdpdGhvdXRFeHQobWFpbkZpbGUpO1xyXG4gICAgICAgICAgICB2YXIgY3N2UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLmNzdicpO1xyXG4gICAgICAgICAgICB2YXIgdHh0UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnR4dCcpO1xyXG4gICAgICAgICAgICB2YXIgeGxzUGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhscycpO1xyXG4gICAgICAgICAgICB2YXIgeGxzeFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHN4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjc3ZQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSBjc3ZQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh0eHRQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB0eHRQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHNQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHNQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh4bHN4UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzeFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtTWFuYWdlciA9IG5ldyByZXF1aXJlKCcuL3BhcmFtLW1hbmFnZXInKShwYXJhbUZpbGUsIHBhcmFtTW9kZSB8fCAnc2VxJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICAvLyByZXR1cm4gc3RyaW5ncyBhcyBpcyAob3RoZXJ3aXNlIGlmIHdlIHNlcmlhbGl6ZSBzdHJpbmcgaXQgd2lsbCBnZXQgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzKVxyXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycgfHwgYXJncyBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgYXJnc1swXSBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgd2hlbiBleGVjdXRpbmcgaG9va3MgKGV4Y2VwdCBjb21tYW5kIHN0YXJ0L2VuZCBob29rcylcclxuICAgICAgICAvLyBvdGhlcndpc2UgdGVzdCBzdGVwcyB3aWxsIGJlIG1lc3NlZCB1cC4gZS5nLiB0cmFuc2FjdGlvbiBmcm9tIGNhc2UgMSB3aWxsIGJlIHNob3duIGluIGNhc2UgMiwgZXRjLlxyXG4gICAgICAgIGlmIChbJ2JlZm9yZVRlc3QnLCAnYmVmb3JlU3VpdGUnLCAnYmVmb3JlQ2FzZScsICdhZnRlckNhc2UnLCAnYWZ0ZXJTdWl0ZScsICdhZnRlclRlc3QnXS5pbmNsdWRlcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZXJ5ID0gcmVxdWlyZSgnbW9ja2VyeScpO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5lbmFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsZWFuQ2FjaGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uUmVwbGFjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uVW5yZWdpc3RlcmVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBtb2NrZXJ5LnJlZ2lzdGVyTW9jaygnY2hhaScsIGNoYWkpO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNoYWlBbmRNb2NrZXJ5TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgaG9va3NbbWV0aG9kXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBIb29rIFwiJHttZXRob2R9XCIgaGFzIHRocm93biBhbiBlcnJvcjogJHtlLnRvU3RyaW5nKCl9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRPeE1vZHVsZXNEaXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnb3hfbW9kdWxlcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBob29rTG9ncyhsb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBvcmlnbG9nID0gY29uc29sZS5sb2c7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0RlYnVnID0gY29uc29sZS5kZWJ1ZztcclxuICAgICAgICBjb25zdCBvcmlnSW5mbyA9IGNvbnNvbGUuaW5mbztcclxuICAgICAgICBjb25zdCBvcmlnV2FybiA9IGNvbnNvbGUud2FybjtcclxuICAgICAgICBjb25zdCBvcmlnRXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzQXJncyA9IChhcmd1bWVudEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudEFycmF5ICYmIGFyZ3VtZW50QXJyYXkubWFwKSB7XHJcbiAgICAgICAgICAgICAgICBhcmd1bWVudEFycmF5Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7aXRlbX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHt1dGlsLmluc3BlY3QoaXRlbSl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuam9pbignICcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ2xvZy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdEZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdJbmZvLmFwcGx5KHRoaXMsIGFyZ3VtZW50QXJyYXkpO1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnV2Fybi5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdFcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoc3RlcHMpIHtcclxuICAgICAgICBpZiAoc3RlcHMgJiYgc3RlcHMubGVuZ3RoICYmIHN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0ZXBzID0gWy4uLnN0ZXBzXTtcclxuICAgICAgICAgICAgc3RlcHMubWFwKChpdGVtLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgJiYgaXRlbS5uYW1lLmluY2x1ZGVzICYmIGl0ZW0ubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uKCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPSBpZHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9PT0gJ251bWJlcicgJiYgaXRlbS5zdGF0dXMgJiYgaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RlcHNbbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXhdWydzdGF0dXMnXSA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGVwcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGVwcztcclxuICAgIH0sXHJcblxyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IGVuY3J5cHRlZFRleHQgPSBCdWZmZXIuZnJvbSh0ZXh0LCAnaGV4Jyk7XHJcbiAgICAgICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkVGV4dCk7XHJcbiAgICAgICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXRWYWwgPSBkZWNyeXB0ZWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNyeXB0UmVzdWx0KHJldFZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3h5Z2VuRXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNSWVBUT19FUlJPUiwgXCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgZG9lc24ndCBzZWVtIHRvIGJlIGEgdmFsaWQgY2lwaGVyIHByb2R1Y2VkIGJ5ICd1dGlscy5lbmNyeXB0J1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYWxnb3JpdGhtLCBrZXksIGl2KTtcclxuICAgICAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZSh0ZXh0KTtcclxuICAgICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtlbmNyeXB0ZWQsIGNpcGhlci5maW5hbCgpXSk7XHJcbiAgICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygnaGV4Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNsZWVwOiBmdW5jdGlvbih0aW1lb3V0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpKTtcclxuICAgIH0sXHJcblxyXG4gICAgZG93bmxvYWRWaWRlbzogYXN5bmMgZnVuY3Rpb24oZmlsZU5hbWUsIHZpZGVvVXJsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxWaWRlb0ZpbGVQYXRoID0gZ2V0VmlkZW9BdHRhY2htZW50UGF0aChmaWxlTmFtZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTxET1dOTE9BRF9SRVRSSUVTOyBpKyspIHtcclxuICAgICAgICAgICAgZXJyb3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGxvY2FsVmlkZW9GaWxlUGF0aCwgYXdhaXQgZG93bmxvYWQodmlkZW9VcmwpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgc2VsZi5zbGVlcChET1dOTE9BRF9SRVRSWV9XQUlUX1RJTUUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgdmlkZW8gZmlsZSBmcm9tIHRoZSBzZXJ2ZXJcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogdmlkZW9VcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHsgcmVzb2x2ZShlcnIgPyBudWxsIDogbG9jYWxWaWRlb0ZpbGVQYXRoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZGVsZXRlIHZpZGVvIGZpbGUgZnJvbSB0aGUgcmVtb3RlIHNlcnZlcjogJywgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZG93bmxvYWQgYW5kIHNhdmUgdmlkZW8gYXR0YWNobWVudDogJywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufTtcclxuIl19
378
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9oZWxwZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwYXRoIiwiZnMiLCJtb21lbnQiLCJjcnlwdG8iLCJ1dGlsIiwicGFzc3dvcmQiLCJlbmNyeXB0aW9uS2V5Iiwia2V5Iiwic2NyeXB0U3luYyIsIml2IiwiQnVmZmVyIiwiYWxsb2MiLCJhbGdvcml0aG0iLCJkb3dubG9hZCIsInJlcXVlc3QiLCJEZWNyeXB0UmVzdWx0IiwicmVzdWx0IiwiZGVjcnlwdFJlc3VsdCIsImdldERlY3J5cHRSZXN1bHQiLCJEVU1NWV9IT09LUyIsImJlZm9yZVRlc3QiLCJiZWZvcmVTdWl0ZSIsImJlZm9yZUNhc2UiLCJiZWZvcmVDb21tYW5kIiwiYWZ0ZXJDb21tYW5kIiwiYWZ0ZXJUZXN0IiwiYWZ0ZXJTdWl0ZSIsImFmdGVyQ2FzZSIsIkNCX0FUVEFDSE1FTlRTX0RJUl9OQU1FIiwiRE9XTkxPQURfUkVUUklFUyIsIkRPV05MT0FEX1JFVFJZX1dBSVRfVElNRSIsImdldFZpZGVvQXR0YWNobWVudFBhdGgiLCJmaWxlTmFtZSIsIm9wdGlvbnMiLCJjd2QiLCJnZXRDd2QiLCJhdHRhY2htZW50c0RpclBhdGgiLCJqb2luIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsInByb2Nlc3MiLCJyb290UGF0aCIsInRyaW0iLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJ0YXJnZXQiLCJwYXJhbU1hbmFnZXIiLCJnZXRQYXJhbWV0ZXJNYW5hZ2VyIiwicGFyYW1ldGVycyIsImdldE1vZGUiLCJyb3dzIiwiY2FwYWJpbGl0aWVzIiwiZW52aXJvbm1lbnQiLCJwYXJhbGxlbCIsImNvbmN1cnJlbmN5IiwiY2FzZXMiLCJmb3JFYWNoIiwiY2FzZURlZiIsInRjIiwiZ2V0RmlsZU5hbWVXaXRob3V0RXh0IiwicmVzb2x2ZVBhdGgiLCJmb3JtYXQiLCJwdXNoIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwiZmlsZVBhdGgiLCJwYXJhbUZpbGUiLCJwYXJhbU1vZGUiLCJub1BhcmFtQXV0b1NlYXJjaCIsImZpbGVOYW1lTm9FeHQiLCJ0ZXN0Y2FzZSIsInJlb3BlblNlc3Npb24iLCJkaXJuYW1lIiwiZmlsZSIsIm1vZGUiLCJtYWluRmlsZVBhdGgiLCJwYXJhbU9wdHMiLCJhdXRvU2VhcmNoIiwicGFyYW1GaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJsb2FkUGFyYW1ldGVyTWFuYWdlciIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlIiwiYmFzZW5hbWUiLCJmaWxlRXh0IiwiZXh0bmFtZSIsImZpbGVQYXRoTm9FeHQiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIm1haW5GaWxlIiwiY3N2UGFyYW1GaWxlIiwidHh0UGFyYW1GaWxlIiwieGxzUGFyYW1GaWxlIiwieGxzeFBhcmFtRmlsZSIsImluaXQiLCJwYXRoVG9SZXNvbHZlIiwiYmFzZUZvbGRlciIsInJlc29sdmUiLCJtYWtlU2VyaWFsaXphYmxlIiwiZXJyIiwiZGVzdHJveUNpcmN1bGFyIiwiZnJvbSIsInNlZW4iLCJ0byIsIkFycmF5IiwiaXNBcnJheSIsIk9iamVjdCIsImtleXMiLCJpbmRleE9mIiwic2xpY2UiLCJnZXRNZXRob2RTaWduYXR1cmUiLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIm1ldGhvZEFyZ3MiLCJzdHJpbmdpZnkiLCJhcmdzIiwiaW5kZW50YXRpb24iLCJTdHJpbmciLCJsZW5ndGgiLCJzdHIiLCJKU09OIiwidmFsdWUiLCJFcnJvciIsIlJlZ0V4cCIsInNvdXJjZSIsImZsYWdzIiwicmVwbGFjZSIsImVuZHNXaXRoIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiaW5jbHVkZXMiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsImNoYWlBbmRNb2NrZXJ5TG9hZGVkIiwiY2hhaSIsIm1vY2tlcnkiLCJlbmFibGUiLCJ1c2VDbGVhbkNhY2hlIiwid2Fybk9uUmVwbGFjZSIsIndhcm5PblVucmVnaXN0ZXJlZCIsInJlZ2lzdGVyTW9jayIsImFwcGx5IiwidW5kZWZpbmVkIiwiZXJyb3IiLCJnZXRPeE1vZHVsZXNEaXIiLCJfX2Rpcm5hbWUiLCJob29rTG9ncyIsImxvZ2dlciIsIm9yaWdsb2ciLCJsb2ciLCJvcmlnRGVidWciLCJkZWJ1ZyIsIm9yaWdJbmZvIiwiaW5mbyIsIm9yaWdXYXJuIiwib3JpZ0Vycm9yIiwicHJvY2Vzc0FyZ3MiLCJhcmd1bWVudEFycmF5IiwibWFwIiwiaXRlbSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsInN0ZXBzIiwibGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXgiLCJuZXdTdGVwcyIsImlkeCIsInN0YXR1cyIsImRlY3J5cHQiLCJ0ZXh0IiwiZW5jcnlwdGVkVGV4dCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsImRlY3J5cHRlZCIsInVwZGF0ZSIsImNvbmNhdCIsImZpbmFsIiwicmV0VmFsIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIkNSWVBUT19FUlJPUiIsImVuY3J5cHQiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuY3J5cHRlZCIsInNsZWVwIiwidGltZW91dCIsIlByb21pc2UiLCJzZXRUaW1lb3V0IiwiZG93bmxvYWRWaWRlbyIsInZpZGVvVXJsIiwibG9jYWxWaWRlb0ZpbGVQYXRoIiwiaSIsIndyaXRlRmlsZVN5bmMiLCJ1cmwiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVqZWN0IiwicmVzIiwiYm9keSIsIm1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogSGVscGVyIG1vZHVsZSBmb3IgaW50ZXJuYWwgT3h5Z2VuIHVzZVxyXG4gKi9cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcclxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XHJcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XHJcbmNvbnN0IHBhc3N3b3JkID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykuZW5jcnlwdGlvbktleTtcclxuY29uc3Qga2V5ID0gY3J5cHRvLnNjcnlwdFN5bmMocGFzc3dvcmQsICdHZkcnLCAyNCk7XHJcbmNvbnN0IGl2ID0gQnVmZmVyLmFsbG9jKDE2LCAwKTtcclxuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xOTItY2JjJztcclxuY29uc3QgZG93bmxvYWQgPSByZXF1aXJlKCdkb3dubG9hZCcpO1xyXG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZSgncmVxdWVzdCcpO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG5jb25zdCBDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSA9ICcuY2ItYXR0YWNobWVudHMnO1xyXG5jb25zdCBET1dOTE9BRF9SRVRSSUVTID0gNDA7XHJcbmNvbnN0IERPV05MT0FEX1JFVFJZX1dBSVRfVElNRSA9IDI1MDA7XHJcblxyXG5mdW5jdGlvbiBnZXRWaWRlb0F0dGFjaG1lbnRQYXRoKGZpbGVOYW1lLCBvcHRpb25zKSB7XHJcbiAgICBjb25zdCBjd2QgPSBnZXRDd2Qob3B0aW9ucyk7XHJcbiAgICBjb25zdCBhdHRhY2htZW50c0RpclBhdGggPSBwYXRoLmpvaW4oY3dkLCBDQl9BVFRBQ0hNRU5UU19ESVJfTkFNRSk7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYXR0YWNobWVudHNEaXJQYXRoKSkge1xyXG4gICAgICAgIGZzLm1rZGlyU3luYyhhdHRhY2htZW50c0RpclBhdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGguam9pbihhdHRhY2htZW50c0RpclBhdGgsIGZpbGVOYW1lKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q3dkID0gKG9wdGlvbnMpID0+IHtcclxuICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xyXG5cclxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3dkKSB7XHJcbiAgICAgICAgY3dkID0gb3B0aW9ucy5jd2Q7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMucm9vdFBhdGgpIHtcclxuICAgICAgICBjd2QgPSBvcHRpb25zLnJvb3RQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjd2QudHJpbSgpO1xyXG59O1xyXG5cclxudmFyIHNlbGYgPSBtb2R1bGUuZXhwb3J0cyA9IHtcclxuXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZUlkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VGltZVN0YW1wOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50LnV0YygpLnZhbHVlT2YoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbjogYXN5bmMgZnVuY3Rpb24oc3VpdGVEZWYsIHRlc3RDb25maWcsIGl0ZXJhdGlvbkNvdW50ID0gMSkge1xyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLmlkID0gbnVsbDtcclxuICAgICAgICBzdWl0ZS5uYW1lID0gc3VpdGVEZWYubmFtZTtcclxuICAgICAgICBzdWl0ZS5pZCA9IHN1aXRlRGVmLmlkO1xyXG4gICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGVEZWYuaXRlcmF0aW9ucyB8fCBzdWl0ZURlZi5pdGVyYXRpb25Db3VudCB8fCB0ZXN0Q29uZmlnLml0ZXJhdGlvbnMgfHwgaXRlcmF0aW9uQ291bnQ7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVGaWxlUGF0aCA9IHN1aXRlRGVmLnBhdGggfHwgcGF0aC5qb2luKHRlc3RDb25maWcudGFyZ2V0LmN3ZCwgJ3N1aXRlcycsIGAke3N1aXRlRGVmLm5hbWV9Lmpzb25gKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoc3VpdGVGaWxlUGF0aCwgdGVzdENvbmZpZy5wYXJhbWV0ZXJzLCB0ZXN0Q29uZmlnLnRhcmdldC5jd2QpO1xyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgc3VpdGUucGFyYW1NYW5hZ2VyLmdldE1vZGUoKSA9PSAnYWxsJykge1xyXG4gICAgICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IHN1aXRlLnBhcmFtTWFuYWdlci5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWl0ZS5jYXBhYmlsaXRpZXMgPSBzdWl0ZURlZi5jYXBhYmlsaXRpZXMgfHwgdGVzdENvbmZpZy5jYXBhYmlsaXRpZXMgfHwge307XHJcbiAgICAgICAgc3VpdGUuZW52aXJvbm1lbnQgPSB0ZXN0Q29uZmlnLmVudmlyb25tZW50IHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUub3B0aW9ucyA9IHRlc3RDb25maWcub3B0aW9ucyB8fCBudWxsO1xyXG4gICAgICAgIHN1aXRlLnBhcmFsbGVsID0gc3VpdGVEZWYucGFyYWxsZWwgfHwgdGVzdENvbmZpZy5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLmNvbmN1cnJlbmN5IHx8IDE7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBlYWNoIHRlc3QgY2FzZVxyXG4gICAgICAgIHN1aXRlRGVmLmNhc2VzLmZvckVhY2goY2FzZURlZiA9PiB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGVzdGNhc2Ugb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICAgICAgaWYgKGNhc2VEZWYubmFtZSlcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBjYXNlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRjLm5hbWUgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChjYXNlRGVmLnBhdGgpO1xyXG4gICAgICAgICAgICB0Yy5wYXRoID0gc2VsZi5yZXNvbHZlUGF0aChjYXNlRGVmLnBhdGgsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgICAgIHRjLmZvcm1hdCA9ICdqcyc7XHJcbiAgICAgICAgICAgIHRjLml0ZXJhdGlvbkNvdW50ID0gY2FzZURlZi5pdGVyYXRpb25zIHx8IGNhc2VEZWYuaXRlcmF0aW9uQ291bnQgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBwYXJhbUZpbGVQYXRoID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5maWxlID8gcGFyYW1PcHRzLmZpbGUgOiBudWxsO1xyXG4gICAgICAgIGxldCBwYXJhbU1vZGUgPSBwYXJhbU9wdHMgJiYgcGFyYW1PcHRzLm1vZGUgPyBwYXJhbU9wdHMubW9kZSA6ICdzZXEnO1xyXG5cclxuICAgICAgICBpZiAocGFyYW1GaWxlUGF0aCAmJiBjd2QgJiYgIXBhdGguaXNBYnNvbHV0ZShwYXJhbUZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBwYXJhbUZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgcGFyYW1GaWxlUGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5sb2FkUGFyYW1ldGVyTWFuYWdlcihtYWluRmlsZVBhdGgsIHBhcmFtRmlsZVBhdGgsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlOiBhc3luYyBmdW5jdGlvbiAoZmlsZVBhdGgsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyB8fCB7fSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgdGVzdENvbmZpZy5wYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogcGFyYW1GaWxlLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogcGFyYW1Nb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHJlcXVpcmUoZmlsZVBhdGgpLCB0ZXN0Q29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RmlsZU5hbWVXaXRob3V0RXh0OiBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICB2YXIgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVQYXRoTm9FeHQgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoZmlsZUV4dCkpO1xyXG4gICAgICAgIHJldHVybiBmaWxlUGF0aE5vRXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkUGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGUsIHBhcmFtRmlsZSwgcGFyYW1Nb2RlLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgcGFyYW1NYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAvLyBpZiBwYXJhbSBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gY2hlY2sgaWYgSlMgZmlsZSBpcyBjb21pbmcgaW4gcGFpciB3aXRoIGEgcGFyYW1ldGVyIGZpbGUgXHJcbiAgICAgICAgLy8gKGN1cnJlbnRseSBzdXBwb3J0aW5nIENTViBvciBUWFQpXHJcbiAgICAgICAgaWYgKCFwYXJhbUZpbGUgJiYgYXV0b1NlYXJjaCkge1xyXG4gICAgICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KG1haW5GaWxlKTtcclxuICAgICAgICAgICAgdmFyIGNzdlBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy5jc3YnKTtcclxuICAgICAgICAgICAgdmFyIHR4dFBhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy50eHQnKTtcclxuICAgICAgICAgICAgdmFyIHhsc1BhcmFtRmlsZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUobWFpbkZpbGUpLCBmaWxlTmFtZU5vRXh0ICsgJy54bHMnKTtcclxuICAgICAgICAgICAgdmFyIHhsc3hQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzeCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY3N2UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gY3N2UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmModHh0UGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0gdHh0UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzUGFyYW1GaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1GaWxlID0geGxzUGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoeGxzeFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc3hQYXJhbUZpbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZSkge1xyXG4gICAgICAgICAgICBwYXJhbU1hbmFnZXIgPSBuZXcgcmVxdWlyZSgnLi9wYXJhbS1tYW5hZ2VyJykocGFyYW1GaWxlLCBwYXJhbU1vZGUgfHwgJ3NlcScpO1xyXG4gICAgICAgICAgICBhd2FpdCBwYXJhbU1hbmFnZXIuaW5pdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1NYW5hZ2VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHBhdGhUb1Jlc29sdmUsIGJhc2VGb2xkZXIpIHtcclxuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHBhdGhUb1Jlc29sdmUpKVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0aFRvUmVzb2x2ZTtcclxuICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGhUb1Jlc29sdmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBtYWtlU2VyaWFsaXphYmxlOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3lDaXJjdWxhcihlcnIsIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVycjtcclxuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pvbnBhY2tlci9kZXN0cm95LWNpcmN1bGFyXHJcbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveUNpcmN1bGFyKGZyb20sIHNlZW4pIHtcclxuICAgICAgICAgICAgdmFyIHRvID0gQXJyYXkuaXNBcnJheShmcm9tKSA/IFtdIDoge307XHJcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZnJvbSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZnJvbVtrZXldIHx8ICh0eXBlb2YgZnJvbVtrZXldICE9ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZyb21ba2V5XSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vlbi5pbmRleE9mKGZyb21ba2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZGVzdHJveUNpcmN1bGFyKGZyb21ba2V5XSwgc2Vlbi5zbGljZSgwKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgdG9ba2V5XSA9ICdbQ2lyY3VsYXJdJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1ldGhvZFNpZ25hdHVyZTogZnVuY3Rpb24obW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgbWV0aG9kQXJncykge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGVOYW1lICsgJy4nICsgbWV0aG9kTmFtZSArICcoJyArIHNlbGYuc3RyaW5naWZ5KG1ldGhvZEFyZ3MsIDApICsgJyknO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKlxyXG4gICAgICogVXNlZCB0byBzZXJpYWxpemUgb3h5Z2VuIGNvbW1hbmQgcGFyYW1ldGVycy4gUHJvZHVjZXMgYSBub24tY29tcGxpYW50IEpTT04gc2VyaWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoYXJncywgaW5kZW50YXRpb24gPSAwKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHN0cmluZ3MgYXMgaXMgKG90aGVyd2lzZSBpZiB3ZSBzZXJpYWxpemUgc3RyaW5nIGl0IHdpbGwgZ2V0IHdyYXBwZWQgaW4gZG91YmxlIHF1b3RlcylcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnIHx8IGFyZ3MgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IGFyZ3NbMF0gaW5zdGFuY2VvZiBTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0cjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShhcmdzLCAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHsgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvanNiaS9pc3N1ZXMvMzBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB1bmRlZmluZWQgaXMgaW5zaWRlIGFuIGFycmF5IHRoZW4gaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIG51bGwuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciBpZiB3ZSBqdXN0IHJldHVybiAndW5kZWZpbmVkJyBoZXJlIGFzIHN0cmluZywgaXQgd2lsbCBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gcmV0dXJuIG1hZ2ljIHN0cmluZyBpbnN0ZWFkIGFuZCB0cmltIHRoZSBxdW90ZXMgbGF0ZXIgb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ19fVU5ERUZJTkVEJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnLycgKyB2YWx1ZS5zb3VyY2UgKyAnLycgKyB2YWx1ZS5mbGFncztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSwgaW5kZW50YXRpb24pO1xyXG4gICAgICAgICAgICAvLyB0cmltIHRoZSBlbmNsb3NpbmcgYXJyYXkgYW5kIGFueSB3aGl0ZXNwYWNlXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eXFxbezF9XFxzKnxcXHMqXFxdezF9JC9nLCAnJyk7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBzcGFjZSBiZWZvcmUgbGFzdCB9IGFuZCBdLCB0byBtYWtlIGluZGVudGF0aW9uIG10Y2ggdGhlIG9wZW5pbmcgYnJhY2tldFxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIH0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnfSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0ci5lbmRzV2l0aCgnICBdJykpIHtcclxuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDMpICsgJ10nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbWFnaWMgJ3VuZGVmaW5lZCcgc3RyaW5nIHRvIHByb3BlciByZXByZXNlbnRhdGlvblxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXCJfX1VOREVGSU5FRFwiL2csICd1bmRlZmluZWQnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNlcmlhbGl6ZSBjb21tYW5kIGFyZ3VtZW50czogJywgZSk7XHJcbiAgICAgICAgICAgIC8vIGlmIEpTT04uc3RyaW5naWZ5IGZhaWxzLCB0aGVuIGZhbGxiYWNrIHRvIHV0aWwuaW5zcGVjdC5cclxuICAgICAgICAgICAgLy8gKHdlIGRvbid0IHVzZSB1dGlsLmluc3BlY3QgaW5pdGlhbHkgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3V0cHV0IGluZGVudGF0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5pbnNwZWN0KGFyZ3NbMF0sIHsgZGVwdGg6IDMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzSW5EZWJ1Z01vZGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHRydWU7XHJcbiAgICAgICAgLy8gY29uc3QgYXJndiA9IHByb2Nlc3MuZXhlY0FyZ3Yuam9pbigpO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncHJvY2Vzcy5kZWJ1Z1BvcnQnLCBwcm9jZXNzLmRlYnVnUG9ydCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJylcIiwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpXCIsIGFyZ3YuaW5jbHVkZXMoJ2RlYnVnJykpO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gcHJvY2Vzcy5kZWJ1Z1BvcnQgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdCcpIHx8IGFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QtYnJrJykgfHwgYXJndi5pbmNsdWRlcygnZGVidWcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkVGVzdEhvb2tzOiBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IGhvb2tzID0gRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy50YXJnZXQgJiYgb3B0aW9ucy50YXJnZXQubmFtZSA9PT0gJ294eWdlbi5jb25mJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaG9va3MgPSByZXF1aXJlKG9wdGlvbnMudGFyZ2V0LnBhdGgpLmhvb2tzIHx8IERVTU1ZX0hPT0tTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGxvYWRpbmcgdXNlciBob29rczonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaG9va3M7XHJcbiAgICB9LFxyXG5cclxuICAgIGV4ZWN1dGVUZXN0SG9vazogYXN5bmMgZnVuY3Rpb24oaG9va3MsIG1ldGhvZCwgYXJncykge1xyXG4gICAgICAgIC8vIGlmIGhvb2sgaXMgbm90IGRlZmluZWQsIGp1c3QgcXVpZXRseSBpZ25vcmUgaXRcclxuICAgICAgICBpZiAoIWhvb2tzIHx8ICFtZXRob2QgfHwgIWhvb2tzW21ldGhvZF0gfHwgdHlwZW9mIGhvb2tzW21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHdoZW4gZXhlY3V0aW5nIGhvb2tzIChleGNlcHQgY29tbWFuZCBzdGFydC9lbmQgaG9va3MpXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRlc3Qgc3RlcHMgd2lsbCBiZSBtZXNzZWQgdXAuIGUuZy4gdHJhbnNhY3Rpb24gZnJvbSBjYXNlIDEgd2lsbCBiZSBzaG93biBpbiBjYXNlIDIsIGV0Yy5cclxuICAgICAgICBpZiAoWydiZWZvcmVUZXN0JywgJ2JlZm9yZVN1aXRlJywgJ2JlZm9yZUNhc2UnLCAnYWZ0ZXJDYXNlJywgJ2FmdGVyU3VpdGUnLCAnYWZ0ZXJUZXN0J10uaW5jbHVkZXMobWV0aG9kKSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRvd25sb2FkVmlkZW86IGFzeW5jIGZ1bmN0aW9uKGZpbGVOYW1lLCB2aWRlb1VybCwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsVmlkZW9GaWxlUGF0aCA9IGdldFZpZGVvQXR0YWNobWVudFBhdGgoZmlsZU5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICBmb3IgKGxldCBpPTA7IGk8RE9XTkxPQURfUkVUUklFUzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhsb2NhbFZpZGVvRmlsZVBhdGgsIGF3YWl0IGRvd25sb2FkKHZpZGVvVXJsKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHNlbGYuc2xlZXAoRE9XTkxPQURfUkVUUllfV0FJVF9USU1FKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIHZpZGVvIGZpbGUgZnJvbSB0aGUgc2VydmVyXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHZpZGVvVXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7IHJlc29sdmUoZXJyID8gbnVsbCA6IGxvY2FsVmlkZW9GaWxlUGF0aCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRlbGV0ZSB2aWRlbyBmaWxlIGZyb20gdGhlIHJlbW90ZSBzZXJ2ZXI6ICcsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRvd25sb2FkIGFuZCBzYXZlIHZpZGVvIGF0dGFjaG1lbnQ6ICcsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBd0JBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQyxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWIzQyxNQUFNRyxJQUFJLEdBQUdMLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTU0sRUFBRSxHQUFHTixPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1PLE1BQU0sR0FBR1AsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNUSxNQUFNLEdBQUdSLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDaEMsTUFBTVMsSUFBSSxHQUFHVCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1VLFFBQVEsR0FBR1YsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUNXLGFBQWE7QUFDNUQsTUFBTUMsR0FBRyxHQUFHSixNQUFNLENBQUNLLFVBQVUsQ0FBQ0gsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDbEQsTUFBTUksRUFBRSxHQUFHQyxNQUFNLENBQUNDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLE1BQU1DLFNBQVMsR0FBRyxhQUFhO0FBQy9CLE1BQU1DLFFBQVEsR0FBR2xCLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDcEMsTUFBTW1CLE9BQU8sR0FBR25CLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFLbEMsU0FBU29CLGFBQWFBLENBQUNDLE1BQU0sRUFBRTtFQUMzQixNQUFNQyxhQUFhLEdBQUdELE1BQU07RUFFNUIsSUFBSSxDQUFDRSxnQkFBZ0IsR0FBRyxNQUFNO0lBQzFCLE9BQU9ELGFBQWE7RUFDeEIsQ0FBQztBQUNMO0FBRUEsTUFBTUUsV0FBVyxHQUFHO0VBQ2hCQyxVQUFVLEVBQUVBLENBQUEsS0FBTSxDQUFDLENBQUM7RUFDcEJDLFdBQVcsRUFBRUEsQ0FBQSxLQUFNLENBQUMsQ0FBQztFQUNyQkMsVUFBVSxFQUFFQSxDQUFBLEtBQU0sQ0FBQyxDQUFDO0VBQ3BCQyxhQUFhLEVBQUVBLENBQUEsS0FBTSxDQUFDLENBQUM7RUFDdkJDLFlBQVksRUFBRUEsQ0FBQSxLQUFNLENBQUMsQ0FBQztFQUN0QkMsU0FBUyxFQUFFQSxDQUFBLEtBQU0sQ0FBQyxDQUFDO0VBQ25CQyxVQUFVLEVBQUVBLENBQUEsS0FBTSxDQUFDLENBQUM7RUFDcEJDLFNBQVMsRUFBRUEsQ0FBQSxLQUFNLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU1DLHVCQUF1QixHQUFHLGlCQUFpQjtBQUNqRCxNQUFNQyxnQkFBZ0IsR0FBRyxFQUFFO0FBQzNCLE1BQU1DLHdCQUF3QixHQUFHLElBQUk7QUFFckMsU0FBU0Msc0JBQXNCQSxDQUFDQyxRQUFRLEVBQUVDLE9BQU8sRUFBRTtFQUMvQyxNQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDO0VBQzNCLE1BQU1HLGtCQUFrQixHQUFHcEMsSUFBSSxDQUFDcUMsSUFBSSxDQUFDSCxHQUFHLEVBQUVOLHVCQUF1QixDQUFDO0VBQ2xFLElBQUksQ0FBQzNCLEVBQUUsQ0FBQ3FDLFVBQVUsQ0FBQ0Ysa0JBQWtCLENBQUMsRUFBRTtJQUNwQ25DLEVBQUUsQ0FBQ3NDLFNBQVMsQ0FBQ0gsa0JBQWtCLENBQUM7RUFDcEM7RUFDQSxPQUFPcEMsSUFBSSxDQUFDcUMsSUFBSSxDQUFDRCxrQkFBa0IsRUFBRUosUUFBUSxDQUFDO0FBQ2xEO0FBRUEsTUFBTUcsTUFBTSxHQUFJRixPQUFPLElBQUs7RUFDeEIsSUFBSUMsR0FBRyxHQUFHTSxPQUFPLENBQUNOLEdBQUcsQ0FBQyxDQUFDO0VBRXZCLElBQUlELE9BQU8sSUFBSUEsT0FBTyxDQUFDQyxHQUFHLEVBQUU7SUFDeEJBLEdBQUcsR0FBR0QsT0FBTyxDQUFDQyxHQUFHO0VBQ3JCLENBQUMsTUFDSSxJQUFJRCxPQUFPLElBQUlBLE9BQU8sQ0FBQ1EsUUFBUSxFQUFFO0lBQ2xDUCxHQUFHLEdBQUdELE9BQU8sQ0FBQ1EsUUFBUTtFQUMxQjtFQUVBLE9BQU9QLEdBQUcsQ0FBQ1EsSUFBSSxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUVELElBQUlDLElBQUksR0FBR0MsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFFeEJDLGdCQUFnQixFQUFFLFNBQUFBLENBQUEsRUFBVztJQUN6QixPQUFPM0MsTUFBTSxDQUFDNEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ2hELENBQUM7RUFFREMsWUFBWSxFQUFFLFNBQUFBLENBQUEsRUFBVztJQUNyQixPQUFPL0MsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7RUFDakMsQ0FBQztFQUVEQyx5QkFBeUIsRUFBRSxlQUFBQSxDQUFlQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsY0FBYyxHQUFHLENBQUMsRUFBRTtJQUNoRixJQUFJQyxLQUFLLEdBQUcsSUFBSTdELE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDbEQ2RCxLQUFLLENBQUNDLEVBQUUsR0FBRyxJQUFJO0lBQ2ZELEtBQUssQ0FBQ0UsSUFBSSxHQUFHTCxRQUFRLENBQUNLLElBQUk7SUFDMUJGLEtBQUssQ0FBQ0MsRUFBRSxHQUFHSixRQUFRLENBQUNJLEVBQUU7SUFDdEJELEtBQUssQ0FBQ0QsY0FBYyxHQUFHRixRQUFRLENBQUNNLFVBQVUsSUFBSU4sUUFBUSxDQUFDRSxjQUFjLElBQUlELFVBQVUsQ0FBQ0ssVUFBVSxJQUFJSixjQUFjO0lBQ2hILE1BQU1LLGFBQWEsR0FBR1AsUUFBUSxDQUFDckQsSUFBSSxJQUFJQSxJQUFJLENBQUNxQyxJQUFJLENBQUNpQixVQUFVLENBQUNPLE1BQU0sQ0FBQzNCLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBR21CLFFBQVEsQ0FBQ0ssSUFBSSxPQUFPLENBQUM7SUFDMUdGLEtBQUssQ0FBQ00sWUFBWSxHQUFHLE1BQU1uQixJQUFJLENBQUNvQixtQkFBbUIsQ0FBQ0gsYUFBYSxFQUFFTixVQUFVLENBQUNVLFVBQVUsRUFBRVYsVUFBVSxDQUFDTyxNQUFNLENBQUMzQixHQUFHLENBQUM7SUFDaEgsSUFBSXNCLEtBQUssQ0FBQ00sWUFBWSxJQUFJTixLQUFLLENBQUNNLFlBQVksQ0FBQ0csT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUU7TUFDN0RULEtBQUssQ0FBQ0QsY0FBYyxHQUFHQyxLQUFLLENBQUNNLFlBQVksQ0FBQ0ksSUFBSTtJQUNsRDtJQUNBVixLQUFLLENBQUNXLFlBQVksR0FBR2QsUUFBUSxDQUFDYyxZQUFZLElBQUliLFVBQVUsQ0FBQ2EsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUMzRVgsS0FBSyxDQUFDWSxXQUFXLEdBQUdkLFVBQVUsQ0FBQ2MsV0FBVyxJQUFJLElBQUk7SUFDbERaLEtBQUssQ0FBQ3ZCLE9BQU8sR0FBR3FCLFVBQVUsQ0FBQ3JCLE9BQU8sSUFBSSxJQUFJO0lBQzFDdUIsS0FBSyxDQUFDYSxRQUFRLEdBQUdoQixRQUFRLENBQUNnQixRQUFRLElBQUlmLFVBQVUsQ0FBQ2UsUUFBUSxJQUFJZixVQUFVLENBQUNnQixXQUFXLElBQUksQ0FBQztJQUV4RmpCLFFBQVEsQ0FBQ2tCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLElBQUk7TUFFOUIsTUFBTUMsRUFBRSxHQUFHLElBQUkvRSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO01BQ2hELElBQUk4RSxPQUFPLENBQUNmLElBQUksRUFDWmdCLEVBQUUsQ0FBQ2hCLElBQUksR0FBR2UsT0FBTyxDQUFDZixJQUFJLENBQUMsS0FFdkJnQixFQUFFLENBQUNoQixJQUFJLEdBQUdmLElBQUksQ0FBQ2dDLHFCQUFxQixDQUFDRixPQUFPLENBQUN6RSxJQUFJLENBQUM7TUFDdEQwRSxFQUFFLENBQUMxRSxJQUFJLEdBQUcyQyxJQUFJLENBQUNpQyxXQUFXLENBQUNILE9BQU8sQ0FBQ3pFLElBQUksRUFBRXNELFVBQVUsQ0FBQ08sTUFBTSxDQUFDM0IsR0FBRyxDQUFDO01BQy9Ed0MsRUFBRSxDQUFDRyxNQUFNLEdBQUcsSUFBSTtNQUNoQkgsRUFBRSxDQUFDbkIsY0FBYyxHQUFHa0IsT0FBTyxDQUFDZCxVQUFVLElBQUljLE9BQU8sQ0FBQ2xCLGNBQWMsSUFBSSxDQUFDO01BQ3JFQyxLQUFLLENBQUNlLEtBQUssQ0FBQ08sSUFBSSxDQUFDSixFQUFFLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBQ0YsT0FBT2xCLEtBQUs7RUFDaEIsQ0FBQztFQUVEdUIsMkJBQTJCLEVBQUUsZUFBQUEsQ0FBZ0JDLFFBQVEsRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRUMsaUJBQWlCLEdBQUcsSUFBSSxFQUFFNUIsY0FBYyxHQUFHLENBQUMsRUFBRTtJQUNySSxJQUFJNkIsYUFBYSxHQUFHekMsSUFBSSxDQUFDZ0MscUJBQXFCLENBQUNLLFFBQVEsQ0FBQztJQUV4RCxJQUFJSyxRQUFRLEdBQUcsSUFBSTFGLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDcEQwRixRQUFRLENBQUMzQixJQUFJLEdBQUcwQixhQUFhO0lBQzdCQyxRQUFRLENBQUNyRixJQUFJLEdBQUdnRixRQUFRO0lBQ3hCSyxRQUFRLENBQUNSLE1BQU0sR0FBRyxJQUFJO0lBQ3RCUSxRQUFRLENBQUM5QixjQUFjLEdBQUcsQ0FBQztJQUUzQixJQUFJQyxLQUFLLEdBQUcsSUFBSTdELE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDbEQ2RCxLQUFLLENBQUNFLElBQUksR0FBRzJCLFFBQVEsQ0FBQzNCLElBQUk7SUFDMUJGLEtBQUssQ0FBQ0MsRUFBRSxHQUFHNEIsUUFBUSxDQUFDNUIsRUFBRTtJQUN0QkQsS0FBSyxDQUFDRCxjQUFjLEdBQUdBLGNBQWM7SUFDckNDLEtBQUssQ0FBQ2UsS0FBSyxDQUFDTyxJQUFJLENBQUNPLFFBQVEsQ0FBQztJQUMxQixJQUFJQSxRQUFRLENBQUNDLGFBQWEsRUFBRTtNQUN4QjlCLEtBQUssQ0FBQzhCLGFBQWEsR0FBR0QsUUFBUSxDQUFDQyxhQUFhO0lBQ2hEO0lBQ0EsTUFBTXBELEdBQUcsR0FBR2xDLElBQUksQ0FBQ3VGLE9BQU8sQ0FBQ1AsUUFBUSxDQUFDO0lBQ2xDeEIsS0FBSyxDQUFDTSxZQUFZLEdBQUcsTUFBTW5CLElBQUksQ0FBQ29CLG1CQUFtQixDQUFDaUIsUUFBUSxFQUFFO01BQUVRLElBQUksRUFBRVAsU0FBUztNQUFFUSxJQUFJLEVBQUVQO0lBQVUsQ0FBQyxFQUFFaEQsR0FBRyxDQUFDO0lBRXhHLElBQUlzQixLQUFLLENBQUNNLFlBQVksSUFBSW9CLFNBQVMsSUFBSSxLQUFLLEVBQUU7TUFDMUMxQixLQUFLLENBQUNELGNBQWMsR0FBR0MsS0FBSyxDQUFDTSxZQUFZLENBQUNJLElBQUk7SUFDbEQ7SUFDQSxPQUFPVixLQUFLO0VBQ2hCLENBQUM7RUFFRE8sbUJBQW1CLEVBQUUsZUFBQUEsQ0FBZTJCLFlBQVksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRXpELEdBQUcsR0FBRyxJQUFJLEVBQUUwRCxVQUFVLEdBQUcsSUFBSSxFQUFFO0lBQy9GLElBQUlDLGFBQWEsR0FBR0YsU0FBUyxJQUFJQSxTQUFTLENBQUNILElBQUksR0FBR0csU0FBUyxDQUFDSCxJQUFJLEdBQUcsSUFBSTtJQUN2RSxJQUFJTixTQUFTLEdBQUdTLFNBQVMsSUFBSUEsU0FBUyxDQUFDRixJQUFJLEdBQUdFLFNBQVMsQ0FBQ0YsSUFBSSxHQUFHLEtBQUs7SUFFcEUsSUFBSUksYUFBYSxJQUFJM0QsR0FBRyxJQUFJLENBQUNsQyxJQUFJLENBQUM4RixVQUFVLENBQUNELGFBQWEsQ0FBQyxFQUFFO01BQ3pEQSxhQUFhLEdBQUc3RixJQUFJLENBQUNxQyxJQUFJLENBQUNILEdBQUcsRUFBRTJELGFBQWEsQ0FBQztJQUNqRDtJQUVBLE9BQU8sTUFBTWxELElBQUksQ0FBQ29ELG9CQUFvQixDQUFDTCxZQUFZLEVBQUVHLGFBQWEsRUFBRVgsU0FBUyxFQUFFVSxVQUFVLENBQUM7RUFDOUYsQ0FBQztFQUVESSw2QkFBNkIsRUFBRSxlQUFBQSxDQUFnQmhCLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEdBQUcsSUFBSSxFQUFFakQsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ2hHLE1BQU1xQixVQUFVLEdBQUc7TUFDZixJQUFHckIsT0FBTyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSWdELFNBQVMsRUFBRTtNQUNYM0IsVUFBVSxDQUFDVSxVQUFVLEdBQUc7UUFDcEJ3QixJQUFJLEVBQUVQLFNBQVM7UUFDZlEsSUFBSSxFQUFFUDtNQUNWLENBQUM7SUFDTDtJQUNBLE9BQU8sTUFBTXZDLElBQUksQ0FBQ1MseUJBQXlCLENBQUN6RCxPQUFPLENBQUNxRixRQUFRLENBQUMsRUFBRTFCLFVBQVUsQ0FBQztFQUM5RSxDQUFDO0VBRURxQixxQkFBcUIsRUFBRSxTQUFBQSxDQUFVSyxRQUFRLEVBQUU7SUFDdkMsSUFBSWhELFFBQVEsR0FBR2hDLElBQUksQ0FBQ2lHLFFBQVEsQ0FBQ2pCLFFBQVEsQ0FBQztJQUN0QyxJQUFJa0IsT0FBTyxHQUFHbEcsSUFBSSxDQUFDbUcsT0FBTyxDQUFDbkIsUUFBUSxDQUFDO0lBQ3BDLElBQUlvQixhQUFhLEdBQUdwRSxRQUFRLENBQUNxRSxTQUFTLENBQUMsQ0FBQyxFQUFFckUsUUFBUSxDQUFDc0UsV0FBVyxDQUFDSixPQUFPLENBQUMsQ0FBQztJQUN4RSxPQUFPRSxhQUFhO0VBQ3hCLENBQUM7RUFFREwsb0JBQW9CLEVBQUUsZUFBQUEsQ0FBZVEsUUFBUSxFQUFFdEIsU0FBUyxFQUFFQyxTQUFTLEVBQUVVLFVBQVUsR0FBRyxLQUFLLEVBQUU7SUFDckYsSUFBSTlCLFlBQVksR0FBRyxJQUFJO0lBR3ZCLElBQUksQ0FBQ21CLFNBQVMsSUFBSVcsVUFBVSxFQUFFO01BQzFCLElBQUlSLGFBQWEsR0FBR3pDLElBQUksQ0FBQ2dDLHFCQUFxQixDQUFDNEIsUUFBUSxDQUFDO01BQ3hELElBQUlDLFlBQVksR0FBR3hHLElBQUksQ0FBQ3FDLElBQUksQ0FBQ3JDLElBQUksQ0FBQ3VGLE9BQU8sQ0FBQ2dCLFFBQVEsQ0FBQyxFQUFFbkIsYUFBYSxHQUFHLE1BQU0sQ0FBQztNQUM1RSxJQUFJcUIsWUFBWSxHQUFHekcsSUFBSSxDQUFDcUMsSUFBSSxDQUFDckMsSUFBSSxDQUFDdUYsT0FBTyxDQUFDZ0IsUUFBUSxDQUFDLEVBQUVuQixhQUFhLEdBQUcsTUFBTSxDQUFDO01BQzVFLElBQUlzQixZQUFZLEdBQUcxRyxJQUFJLENBQUNxQyxJQUFJLENBQUNyQyxJQUFJLENBQUN1RixPQUFPLENBQUNnQixRQUFRLENBQUMsRUFBRW5CLGFBQWEsR0FBRyxNQUFNLENBQUM7TUFDNUUsSUFBSXVCLGFBQWEsR0FBRzNHLElBQUksQ0FBQ3FDLElBQUksQ0FBQ3JDLElBQUksQ0FBQ3VGLE9BQU8sQ0FBQ2dCLFFBQVEsQ0FBQyxFQUFFbkIsYUFBYSxHQUFHLE9BQU8sQ0FBQztNQUU5RSxJQUFJbkYsRUFBRSxDQUFDcUMsVUFBVSxDQUFDa0UsWUFBWSxDQUFDLEVBQUU7UUFDN0J2QixTQUFTLEdBQUd1QixZQUFZO01BQzVCLENBQUMsTUFBTSxJQUFJdkcsRUFBRSxDQUFDcUMsVUFBVSxDQUFDbUUsWUFBWSxDQUFDLEVBQUU7UUFDcEN4QixTQUFTLEdBQUd3QixZQUFZO01BQzVCLENBQUMsTUFBTSxJQUFJeEcsRUFBRSxDQUFDcUMsVUFBVSxDQUFDb0UsWUFBWSxDQUFDLEVBQUU7UUFDcEN6QixTQUFTLEdBQUd5QixZQUFZO01BQzVCLENBQUMsTUFBTSxJQUFJekcsRUFBRSxDQUFDcUMsVUFBVSxDQUFDcUUsYUFBYSxDQUFDLEVBQUU7UUFDckMxQixTQUFTLEdBQUcwQixhQUFhO01BQzdCO0lBQ0o7SUFDQSxJQUFJMUIsU0FBUyxFQUFFO01BQ1huQixZQUFZLEdBQUcsSUFBSW5FLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDc0YsU0FBUyxFQUFFQyxTQUFTLElBQUksS0FBSyxDQUFDO01BQzVFLE1BQU1wQixZQUFZLENBQUM4QyxJQUFJLENBQUMsQ0FBQztNQUN6QixPQUFPOUMsWUFBWTtJQUN2QjtJQUNBLE9BQU8sSUFBSTtFQUNmLENBQUM7RUFFRGMsV0FBVyxFQUFFLFNBQUFBLENBQVNpQyxhQUFhLEVBQUVDLFVBQVUsRUFBRTtJQUM3QyxJQUFJOUcsSUFBSSxDQUFDOEYsVUFBVSxDQUFDZSxhQUFhLENBQUMsRUFDOUIsT0FBT0EsYUFBYTtJQUN4QixPQUFPN0csSUFBSSxDQUFDK0csT0FBTyxDQUFDRCxVQUFVLEVBQUVELGFBQWEsQ0FBQztFQUNsRCxDQUFDO0VBRURHLGdCQUFnQixFQUFFLFNBQUFBLENBQVNDLEdBQUcsRUFBRTtJQUM1QixJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7TUFDekIsT0FBT0MsZUFBZSxDQUFDRCxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ25DO0lBQ0EsT0FBT0EsR0FBRztJQUdWLFNBQVNDLGVBQWVBLENBQUNDLElBQUksRUFBRUMsSUFBSSxFQUFFO01BQ2pDLElBQUlDLEVBQUUsR0FBR0MsS0FBSyxDQUFDQyxPQUFPLENBQUNKLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDdENDLElBQUksQ0FBQ3RDLElBQUksQ0FBQ3FDLElBQUksQ0FBQztNQUNmSyxNQUFNLENBQUNDLElBQUksQ0FBQ04sSUFBSSxDQUFDLENBQUMzQyxPQUFPLENBQUMsVUFBU2pFLEdBQUcsRUFBRTtRQUNwQyxJQUFJLENBQUM0RyxJQUFJLENBQUM1RyxHQUFHLENBQUMsSUFBSyxPQUFPNEcsSUFBSSxDQUFDNUcsR0FBRyxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMrRyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osSUFBSSxDQUFDNUcsR0FBRyxDQUFDLENBQUUsRUFBRTtVQUMzRThHLEVBQUUsQ0FBQzlHLEdBQUcsQ0FBQyxHQUFHNEcsSUFBSSxDQUFDNUcsR0FBRyxDQUFDO1FBQ3ZCLENBQUMsTUFBTSxJQUFJNkcsSUFBSSxDQUFDTSxPQUFPLENBQUNQLElBQUksQ0FBQzVHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7VUFDdEM4RyxFQUFFLENBQUM5RyxHQUFHLENBQUMsR0FBRzJHLGVBQWUsQ0FBQ0MsSUFBSSxDQUFDNUcsR0FBRyxDQUFDLEVBQUU2RyxJQUFJLENBQUNPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLE1BQU1OLEVBQUUsQ0FBQzlHLEdBQUcsQ0FBQyxHQUFHLFlBQVk7TUFDakMsQ0FBQyxDQUFDO01BQ0YsT0FBTzhHLEVBQUU7SUFDYjtFQUNKLENBQUM7RUFFRE8sa0JBQWtCLEVBQUUsU0FBQUEsQ0FBU0MsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRTtJQUM3RCxPQUFPRixVQUFVLEdBQUcsR0FBRyxHQUFHQyxVQUFVLEdBQUcsR0FBRyxHQUFHbkYsSUFBSSxDQUFDcUYsU0FBUyxDQUFDRCxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRztFQUNwRixDQUFDO0VBS0RDLFNBQVMsRUFBRSxTQUFBQSxDQUFVQyxJQUFJLEVBQUVDLFdBQVcsR0FBRyxDQUFDLEVBQUU7SUFFeEMsSUFBSSxPQUFPRCxJQUFJLEtBQUssUUFBUSxJQUFJQSxJQUFJLFlBQVlFLE1BQU0sRUFBRTtNQUNwRCxPQUFPRixJQUFJO0lBQ2YsQ0FBQyxNQUFNLElBQUlBLElBQUksQ0FBQ0csTUFBTSxLQUFLLENBQUMsS0FBSyxPQUFPSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJQSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVlFLE1BQU0sQ0FBQyxFQUFFO01BQ3hGLE9BQU9GLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEI7SUFFQSxJQUFJSSxHQUFHO0lBQ1AsSUFBSTtNQUNBQSxHQUFHLEdBQUdDLElBQUksQ0FBQ04sU0FBUyxDQUFDQyxJQUFJLEVBQUUsQ0FBQzFILEdBQUcsRUFBRWdJLEtBQUssS0FBSztRQUN2QyxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7VUFDM0IsT0FBT0EsS0FBSyxDQUFDdkYsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxNQUFNLElBQUksT0FBT3VGLEtBQUssS0FBSyxVQUFVLEVBQUU7VUFDcEMsT0FBT0EsS0FBSyxDQUFDdkYsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxNQUFNLElBQUksT0FBT3VGLEtBQUssS0FBSyxXQUFXLEVBQUU7VUFJckMsT0FBTyxhQUFhO1FBQ3hCLENBQUMsTUFBTSxJQUFJQSxLQUFLLFlBQVlDLEtBQUssRUFBRTtVQUMvQixPQUFPRCxLQUFLLENBQUN2RixRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDLE1BQU0sSUFBSXVGLEtBQUssWUFBWUUsTUFBTSxFQUFFO1VBQ2hDLE9BQU8sR0FBRyxHQUFHRixLQUFLLENBQUNHLE1BQU0sR0FBRyxHQUFHLEdBQUdILEtBQUssQ0FBQ0ksS0FBSztRQUNqRDtRQUNBLE9BQU9KLEtBQUs7TUFDaEIsQ0FBQyxFQUFFTCxXQUFXLENBQUM7TUFFZkcsR0FBRyxHQUFHQSxHQUFHLENBQUNPLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7TUFFN0MsSUFBSVAsR0FBRyxDQUFDUSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckJSLEdBQUcsR0FBR0EsR0FBRyxDQUFDaEMsU0FBUyxDQUFDLENBQUMsRUFBRWdDLEdBQUcsQ0FBQ0QsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDaEQ7TUFDQSxJQUFJQyxHQUFHLENBQUNRLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQlIsR0FBRyxHQUFHQSxHQUFHLENBQUNoQyxTQUFTLENBQUMsQ0FBQyxFQUFFZ0MsR0FBRyxDQUFDRCxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRztNQUNoRDtNQUVBQyxHQUFHLEdBQUdBLEdBQUcsQ0FBQ08sT0FBTyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQztJQUNwRCxDQUFDLENBQUMsT0FBTy9JLENBQUMsRUFBRTtNQUNSaUosT0FBTyxDQUFDQyxJQUFJLENBQUMseUNBQXlDLEVBQUVsSixDQUFDLENBQUM7TUFHMUQsT0FBT08sSUFBSSxDQUFDNEksT0FBTyxDQUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFBRWdCLEtBQUssRUFBRTtNQUFFLENBQUMsQ0FBQztJQUM5QztJQUNBLE9BQU9aLEdBQUc7RUFDZCxDQUFDO0VBRURhLGFBQWEsRUFBRSxTQUFBQSxDQUFBLEVBQVc7SUFXdEIsT0FBTyxLQUFLO0VBQ2hCLENBQUM7RUFFREMsYUFBYSxFQUFFLFNBQUFBLENBQVNsSCxPQUFPLEVBQUU7SUFDN0IsSUFBSW1ILEtBQUssR0FBR2pJLFdBQVc7SUFDdkIsSUFBSWMsT0FBTyxJQUFJQSxPQUFPLENBQUM0QixNQUFNLElBQUk1QixPQUFPLENBQUM0QixNQUFNLENBQUNILElBQUksS0FBSyxhQUFhLEVBQUU7TUFDcEUsSUFBSTtRQUNBMEYsS0FBSyxHQUFHekosT0FBTyxDQUFDc0MsT0FBTyxDQUFDNEIsTUFBTSxDQUFDN0QsSUFBSSxDQUFDLENBQUNvSixLQUFLLElBQUlqSSxXQUFXO01BQzdELENBQUMsQ0FDRCxPQUFPdEIsQ0FBQyxFQUFFO1FBQ05pSixPQUFPLENBQUNDLElBQUksQ0FBQywyQkFBMkIsRUFBRWxKLENBQUMsQ0FBQztNQUNoRDtJQUNKO0lBQ0EsT0FBT3VKLEtBQUs7RUFDaEIsQ0FBQztFQUVEQyxlQUFlLEVBQUUsZUFBQUEsQ0FBZUQsS0FBSyxFQUFFRSxNQUFNLEVBQUVyQixJQUFJLEVBQUU7SUFFakQsSUFBSSxDQUFDbUIsS0FBSyxJQUFJLENBQUNFLE1BQU0sSUFBSSxDQUFDRixLQUFLLENBQUNFLE1BQU0sQ0FBQyxJQUFJLE9BQU9GLEtBQUssQ0FBQ0UsTUFBTSxDQUFDLEtBQUssVUFBVSxFQUFFO01BQzVFLE9BQU8sSUFBSTtJQUNmO0lBSUEsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEVBQUU7TUFDdEdFLE1BQU0sQ0FBQ0Msb0JBQW9CLEdBQUcsSUFBSTtJQUN0QztJQUVBLElBQUk7TUFDQSxJQUFJRCxNQUFNLENBQUNFLG9CQUFvQixFQUFFLENBRWpDLENBQUMsTUFBTTtRQUNILE1BQU1DLElBQUksR0FBR2hLLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTWlLLE9BQU8sR0FBR2pLLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbENpSyxPQUFPLENBQUNDLE1BQU0sQ0FBQztVQUNYQyxhQUFhLEVBQUUsSUFBSTtVQUNuQkMsYUFBYSxFQUFFLEtBQUs7VUFDcEJDLGtCQUFrQixFQUFFO1FBQ3hCLENBQUMsQ0FBQztRQUNGSixPQUFPLENBQUNLLFlBQVksQ0FBQyxNQUFNLEVBQUVOLElBQUksQ0FBQztRQUNsQ0gsTUFBTSxDQUFDRSxvQkFBb0IsR0FBRyxJQUFJO01BQ3RDO01BRUEsTUFBTU4sS0FBSyxDQUFDRSxNQUFNLENBQUMsQ0FBQ1ksS0FBSyxDQUFDQyxTQUFTLEVBQUVsQyxJQUFJLENBQUM7SUFDOUMsQ0FBQyxDQUNELE9BQU9wSSxDQUFDLEVBQUU7TUFDTmlKLE9BQU8sQ0FBQ3NCLEtBQUssQ0FBQyxTQUFTZCxNQUFNLDBCQUEwQnpKLENBQUMsQ0FBQ21ELFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUN0RSxNQUFNbkQsQ0FBQztJQUNYO0VBQ0osQ0FBQztFQUVEd0ssZUFBZSxFQUFFLFNBQUFBLENBQUEsRUFBVztJQUN4QixPQUFPckssSUFBSSxDQUFDcUMsSUFBSSxDQUFDaUksU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUM7RUFDbkQsQ0FBQztFQUVEQyxRQUFRQSxDQUFDQyxNQUFNLEVBQUU7SUFDYixNQUFNQyxPQUFPLEdBQUczQixPQUFPLENBQUM0QixHQUFHO0lBQzNCLE1BQU1DLFNBQVMsR0FBRzdCLE9BQU8sQ0FBQzhCLEtBQUs7SUFDL0IsTUFBTUMsUUFBUSxHQUFHL0IsT0FBTyxDQUFDZ0MsSUFBSTtJQUM3QixNQUFNQyxRQUFRLEdBQUdqQyxPQUFPLENBQUNDLElBQUk7SUFDN0IsTUFBTWlDLFNBQVMsR0FBR2xDLE9BQU8sQ0FBQ3NCLEtBQUs7SUFFL0IsTUFBTWEsV0FBVyxHQUFJQyxhQUFhLElBQUs7TUFDbkMsSUFBSWxLLE1BQU0sR0FBRyxFQUFFO01BRWYsSUFBSWtLLGFBQWEsSUFBSUEsYUFBYSxDQUFDQyxHQUFHLEVBQUU7UUFDcENELGFBQWEsQ0FBQ0MsR0FBRyxDQUFFQyxJQUFJLElBQUs7VUFDeEIsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCcEssTUFBTSxDQUFDOEQsSUFBSSxDQUFDLEdBQUdzRyxJQUFJLEVBQUUsQ0FBQztVQUMxQixDQUFDLE1BQU07WUFDSHBLLE1BQU0sQ0FBQzhELElBQUksQ0FBQyxHQUFHMUUsSUFBSSxDQUFDNEksT0FBTyxDQUFDb0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztVQUN4QztRQUNKLENBQUMsQ0FBQztNQUNOO01BRUEsT0FBT3BLLE1BQU0sQ0FBQ3FCLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVEeUcsT0FBTyxDQUFDNEIsR0FBRyxHQUFHLFVBQVUsR0FBR1EsYUFBYSxFQUFFO01BQ3RDVCxPQUFPLENBQUNQLEtBQUssQ0FBQyxJQUFJLEVBQUVnQixhQUFhLENBQUM7TUFDbENWLE1BQU0sQ0FBQ00sSUFBSSxDQUFDRyxXQUFXLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRHBDLE9BQU8sQ0FBQzhCLEtBQUssR0FBRyxVQUFVLEdBQUdNLGFBQWEsRUFBRTtNQUN4Q1AsU0FBUyxDQUFDVCxLQUFLLENBQUMsSUFBSSxFQUFFZ0IsYUFBYSxDQUFDO01BQ3BDVixNQUFNLENBQUNJLEtBQUssQ0FBQ0ssV0FBVyxDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0RwQyxPQUFPLENBQUNnQyxJQUFJLEdBQUcsVUFBVSxHQUFHSSxhQUFhLEVBQUU7TUFDdkNMLFFBQVEsQ0FBQ1gsS0FBSyxDQUFDLElBQUksRUFBRWdCLGFBQWEsQ0FBQztNQUNuQ1YsTUFBTSxDQUFDTSxJQUFJLENBQUNHLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNEcEMsT0FBTyxDQUFDQyxJQUFJLEdBQUcsVUFBVSxHQUFHbUMsYUFBYSxFQUFFO01BQ3ZDSCxRQUFRLENBQUNiLEtBQUssQ0FBQyxJQUFJLEVBQUVnQixhQUFhLENBQUM7TUFDbkNWLE1BQU0sQ0FBQ3pCLElBQUksQ0FBQ2tDLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNEcEMsT0FBTyxDQUFDc0IsS0FBSyxHQUFHLFVBQVUsR0FBR2MsYUFBYSxFQUFFO01BQ3hDRixTQUFTLENBQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUVnQixhQUFhLENBQUM7TUFDcENWLE1BQU0sQ0FBQ0osS0FBSyxDQUFDYSxXQUFXLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7RUFDTCxDQUFDO0VBRURHLGlDQUFpQ0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQ3JDLElBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDbEQsTUFBTSxJQUFJa0QsS0FBSyxDQUFDbEQsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUMzQyxJQUFJbUQsMEJBQTBCLEdBQUcsS0FBSztNQUN0QyxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxHQUFHRixLQUFLLENBQUM7TUFDM0JBLEtBQUssQ0FBQ0gsR0FBRyxDQUFDLENBQUNDLElBQUksRUFBRUssR0FBRyxLQUFLO1FBQ3JCLElBQUlMLElBQUksQ0FBQzFILElBQUksSUFBSTBILElBQUksQ0FBQzFILElBQUksQ0FBQzZGLFFBQVEsSUFBSTZCLElBQUksQ0FBQzFILElBQUksQ0FBQzZGLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRTtVQUN4RWdDLDBCQUEwQixHQUFHRSxHQUFHO1FBQ3BDO1FBRUEsSUFBSSxPQUFPRiwwQkFBMEIsS0FBSyxRQUFRLElBQUlILElBQUksQ0FBQ00sTUFBTSxJQUFJTixJQUFJLENBQUNNLE1BQU0sS0FBSyxRQUFRLEVBQUU7VUFDM0ZGLFFBQVEsQ0FBQ0QsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRO1FBQzdEO01BQ0osQ0FBQyxDQUFDO01BRUYsT0FBT0MsUUFBUTtJQUNuQjtJQUVBLE9BQU9GLEtBQUs7RUFDaEIsQ0FBQztFQUVESyxPQUFPQSxDQUFDQyxJQUFJLEVBQUU7SUFDVixJQUFJO01BQ0EsSUFBSUMsYUFBYSxHQUFHbkwsTUFBTSxDQUFDeUcsSUFBSSxDQUFDeUUsSUFBSSxFQUFFLEtBQUssQ0FBQztNQUM1QyxJQUFJRSxRQUFRLEdBQUczTCxNQUFNLENBQUM0TCxnQkFBZ0IsQ0FBQ25MLFNBQVMsRUFBRUwsR0FBRyxFQUFFRSxFQUFFLENBQUM7TUFDMUQsSUFBSXVMLFNBQVMsR0FBR0YsUUFBUSxDQUFDRyxNQUFNLENBQUNKLGFBQWEsQ0FBQztNQUM5Q0csU0FBUyxHQUFHdEwsTUFBTSxDQUFDd0wsTUFBTSxDQUFDLENBQUNGLFNBQVMsRUFBRUYsUUFBUSxDQUFDSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEQsTUFBTUMsTUFBTSxHQUFHSixTQUFTLENBQUNoSixRQUFRLENBQUMsQ0FBQztNQUNuQyxPQUFPLElBQUlqQyxhQUFhLENBQUNxTCxNQUFNLENBQUM7SUFDcEMsQ0FBQyxDQUFDLE9BQU92TSxDQUFDLEVBQUU7TUFDUixNQUFNLElBQUl3TSxvQkFBVyxDQUFDQyxlQUFXLENBQUNDLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFLHFGQUFxRixDQUFDO0lBQ3BKO0VBQ0osQ0FBQztFQUVEQyxPQUFPQSxDQUFDYixJQUFJLEVBQUU7SUFDVixJQUFJYyxNQUFNLEdBQUd2TSxNQUFNLENBQUN3TSxjQUFjLENBQUMvTCxTQUFTLEVBQUVMLEdBQUcsRUFBRUUsRUFBRSxDQUFDO0lBQ3RELElBQUltTSxTQUFTLEdBQUdGLE1BQU0sQ0FBQ1QsTUFBTSxDQUFDTCxJQUFJLENBQUM7SUFDbkNnQixTQUFTLEdBQUdsTSxNQUFNLENBQUN3TCxNQUFNLENBQUMsQ0FBQ1UsU0FBUyxFQUFFRixNQUFNLENBQUNQLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxPQUFPUyxTQUFTLENBQUM1SixRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ3BDLENBQUM7RUFFRDZKLEtBQUssRUFBRSxTQUFBQSxDQUFTQyxPQUFPLEVBQUU7SUFDckIsT0FBTyxJQUFJQyxPQUFPLENBQUVoRyxPQUFPLElBQUtpRyxVQUFVLENBQUNqRyxPQUFPLEVBQUUrRixPQUFPLENBQUMsQ0FBQztFQUNqRSxDQUFDO0VBRURHLGFBQWEsRUFBRSxlQUFBQSxDQUFlakwsUUFBUSxFQUFFa0wsUUFBUSxFQUFFakwsT0FBTyxFQUFFO0lBQ3ZELE1BQU1rTCxrQkFBa0IsR0FBR3BMLHNCQUFzQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sQ0FBQztJQUNwRSxJQUFJbUksS0FBSztJQUNULEtBQUssSUFBSWdELENBQUMsR0FBQyxDQUFDLEVBQUVBLENBQUMsR0FBQ3ZMLGdCQUFnQixFQUFFdUwsQ0FBQyxFQUFFLEVBQUU7TUFDbkNoRCxLQUFLLEdBQUdELFNBQVM7TUFDakIsSUFBSTtRQUNBbEssRUFBRSxDQUFDb04sYUFBYSxDQUFDRixrQkFBa0IsRUFBRSxNQUFNdE0sUUFBUSxDQUFDcU0sUUFBUSxDQUFDLENBQUM7UUFDOUQ7TUFDSixDQUFDLENBQ0QsT0FBT3JOLENBQUMsRUFBRTtRQUNOdUssS0FBSyxHQUFHdkssQ0FBQztNQUNiO01BQ0EsTUFBTThDLElBQUksQ0FBQ2tLLEtBQUssQ0FBQy9LLHdCQUF3QixDQUFDO0lBQzlDO0lBQ0EsSUFBSSxDQUFDc0ksS0FBSyxFQUFFO01BRVIsTUFBTW5JLE9BQU8sR0FBRztRQUNacUwsR0FBRyxFQUFFSixRQUFRO1FBQ2I1RCxNQUFNLEVBQUUsUUFBUTtRQUNoQmlFLElBQUksRUFBRSxLQUFLO1FBQ1hDLGtCQUFrQixFQUFFO01BQ3hCLENBQUM7TUFFRCxJQUFJO1FBQ0EsT0FBTyxJQUFJVCxPQUFPLENBQUMsQ0FBQ2hHLE9BQU8sRUFBRTBHLE1BQU0sS0FBSztVQUNwQzNNLE9BQU8sQ0FBQ21CLE9BQU8sRUFBRSxDQUFDZ0YsR0FBRyxFQUFFeUcsR0FBRyxFQUFFQyxJQUFJLEtBQUs7WUFBRTVHLE9BQU8sQ0FBQ0UsR0FBRyxHQUFHLElBQUksR0FBR2tHLGtCQUFrQixDQUFDO1VBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FDRCxPQUFPdE4sQ0FBQyxFQUFFO1FBQ05pSixPQUFPLENBQUNDLElBQUksQ0FBQyxzREFBc0QsRUFBRWxKLENBQUMsQ0FBQytOLE9BQU8sQ0FBQztNQUNuRjtJQUNKLENBQUMsTUFDSTtNQUNEOUUsT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0RBQWdELEVBQUVxQixLQUFLLENBQUN3RCxPQUFPLENBQUM7SUFDakY7RUFDSjtBQUNKLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  name: null,
@@ -20,4 +19,4 @@ module.exports = function () {
20
19
  attachments: []
21
20
  };
22
21
  };
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9jYXNlLXJlc3VsdC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsImxvY2F0aW9uIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwic3RhdHVzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiZmFpbHVyZSIsImNvbnRleHQiLCJ0ZXN0QXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIl0sIm1hcHBpbmdzIjoiOzs7O0FBWUFBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFZO0FBQ3pCLFNBQU87QUFDSEMsSUFBQUEsSUFBSSxFQUFFLElBREg7QUFFSEMsSUFBQUEsWUFBWSxFQUFFLENBRlg7QUFHSEMsSUFBQUEsUUFBUSxFQUFFLElBSFA7QUFJSEMsSUFBQUEsU0FBUyxFQUFFLElBSlI7QUFLSEMsSUFBQUEsT0FBTyxFQUFFLElBTE47QUFNSEMsSUFBQUEsUUFBUSxFQUFFLElBTlA7QUFPSEMsSUFBQUEsTUFBTSxFQUFFLElBUEw7QUFRSEMsSUFBQUEsS0FBSyxFQUFFLEVBUko7QUFTSEMsSUFBQUEsSUFBSSxFQUFFLEVBVEg7QUFVSEMsSUFBQUEsR0FBRyxFQUFFLElBVkY7QUFXSEMsSUFBQUEsT0FBTyxFQUFFLElBWE47QUFZSEMsSUFBQUEsT0FBTyxFQUFFLElBWk47QUFhSEMsSUFBQUEsY0FBYyxFQUFFLEVBYmI7QUFjSEMsSUFBQUEsV0FBVyxFQUFFO0FBZFYsR0FBUDtBQWdCSCxDQWpCRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBDYXNlIFJlc3VsdHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbk51bTogMSxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RlcHM6IFtdLCAgICAvLyBhcnJheSBvZiBzdGVwLXJlc3VsdC5qc1xyXG4gICAgICAgIGxvZ3M6IFtdLFxyXG4gICAgICAgIGhhcjogbnVsbCxcclxuICAgICAgICBmYWlsdXJlOiBudWxsLFxyXG4gICAgICAgIGNvbnRleHQ6IG51bGwsXHJcbiAgICAgICAgdGVzdEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXVxyXG4gICAgfTtcclxufTtcclxuIl19
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsImxvY2F0aW9uIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwic3RhdHVzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiZmFpbHVyZSIsImNvbnRleHQiLCJ0ZXN0QXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2Nhc2UtcmVzdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBDYXNlIFJlc3VsdHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbk51bTogMSxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RlcHM6IFtdLCAgICAvLyBhcnJheSBvZiBzdGVwLXJlc3VsdC5qc1xyXG4gICAgICAgIGxvZ3M6IFtdLFxyXG4gICAgICAgIGhhcjogbnVsbCxcclxuICAgICAgICBmYWlsdXJlOiBudWxsLFxyXG4gICAgICAgIGNvbnRleHQ6IG51bGwsXHJcbiAgICAgICAgdGVzdEF0dHJpYnV0ZXM6IHt9LFxyXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXVxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLElBQUksRUFBRSxFQUFFO0lBQ1JDLEdBQUcsRUFBRSxJQUFJO0lBQ1RDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbEJDLFdBQVcsRUFBRTtFQUNqQixDQUFDO0FBQ0wsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  type: null,
@@ -12,4 +11,4 @@ module.exports = function () {
12
11
  fatal: false
13
12
  };
14
13
  };
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9mYWlsdXJlLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJ0eXBlIiwibWVzc2FnZSIsImRldGFpbHMiLCJsb2NhdGlvbiIsImRhdGEiLCJmYXRhbCJdLCJtYXBwaW5ncyI6Ijs7OztBQVlBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBWTtBQUN6QixTQUFPO0FBQ0hDLElBQUFBLElBQUksRUFBRSxJQURIO0FBRUhDLElBQUFBLE9BQU8sRUFBRSxJQUZOO0FBR0hDLElBQUFBLE9BQU8sRUFBRSxJQUhOO0FBSUhDLElBQUFBLFFBQVEsRUFBRSxJQUpQO0FBS0hDLElBQUFBLElBQUksRUFBRSxJQUxIO0FBTUhDLElBQUFBLEtBQUssRUFBRTtBQU5KLEdBQVA7QUFRSCxDQVREIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBUZXN0LCBDYXNlLCBTdWl0ZSBhbmQgU3RlcCBmYWlsdXJlIGRldGFpbHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBudWxsLFxyXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXHJcbiAgICAgICAgZGV0YWlsczogbnVsbCxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgIGZhdGFsOiBmYWxzZSxcclxuICAgIH07XHJcbn07XHJcbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidHlwZSIsIm1lc3NhZ2UiLCJkZXRhaWxzIiwibG9jYXRpb24iLCJkYXRhIiwiZmF0YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFpbHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QsIENhc2UsIFN1aXRlIGFuZCBTdGVwIGZhaWx1cmUgZGV0YWlsc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcclxuICAgICAgICBkZXRhaWxzOiBudWxsLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgZmF0YWw6IGZhbHNlLFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLEtBQUssRUFBRTtFQUNYLENBQUM7QUFDTCxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = {
6
5
  FAILED: 'failed',
7
6
  PASSED: 'passed',
8
7
  WARNING: 'warning',
9
8
  SKIPPED: 'skipped'
10
9
  };
11
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdGF0dXMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkZBSUxFRCIsIlBBU1NFRCIsIldBUk5JTkciLCJTS0lQUEVEIl0sIm1hcHBpbmdzIjoiOzs7O0FBU0FBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNiQyxFQUFBQSxNQUFNLEVBQUUsUUFESztBQUViQyxFQUFBQSxNQUFNLEVBQUUsUUFGSztBQUdiQyxFQUFBQSxPQUFPLEVBQUUsU0FISTtBQUliQyxFQUFBQSxPQUFPLEVBQUU7QUFKSSxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBGQUlMRUQ6ICdmYWlsZWQnLFxyXG4gICAgUEFTU0VEOiAncGFzc2VkJyxcclxuICAgIFdBUk5JTkc6ICd3YXJuaW5nJyxcclxuICAgIFNLSVBQRUQ6ICdza2lwcGVkJ1xyXG59O1xyXG4iXX0=
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiRkFJTEVEIiwiUEFTU0VEIiwiV0FSTklORyIsIlNLSVBQRUQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvc3RhdHVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBGQUlMRUQ6ICdmYWlsZWQnLFxyXG4gICAgUEFTU0VEOiAncGFzc2VkJyxcclxuICAgIFdBUk5JTkc6ICd3YXJuaW5nJyxcclxuICAgIFNLSVBQRUQ6ICdza2lwcGVkJ1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQVNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNiQyxNQUFNLEVBQUUsUUFBUTtFQUNoQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxPQUFPLEVBQUU7QUFDYixDQUFDIiwiaWdub3JlTGlzdCI6W119