@corellium/corellium-cli 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (992) hide show
  1. package/.gitlab-ci.yml +32 -1
  2. package/ci/gitlab-build.sh +1 -1
  3. package/coverage/cobertura-coverage.xml +9 -0
  4. package/coverage/lcov-report/base.css +224 -0
  5. package/coverage/lcov-report/block-navigation.js +87 -0
  6. package/coverage/lcov-report/favicon.png +0 -0
  7. package/coverage/lcov-report/index.html +101 -0
  8. package/coverage/lcov-report/prettify.css +1 -0
  9. package/coverage/lcov-report/prettify.js +2 -0
  10. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  11. package/coverage/lcov-report/sorter.js +196 -0
  12. package/coverage/lcov.info +0 -0
  13. package/index.js +2 -0
  14. package/package.json +62 -64
  15. package/src/clients/Instance.js +4 -0
  16. package/src/commands/extensions/delete.js +2 -1
  17. package/src/commands/extensions/list.js +3 -2
  18. package/src/commands/firmware/list.js +3 -2
  19. package/src/commands/images/create.js +2 -2
  20. package/src/commands/images/delete.js +1 -0
  21. package/src/commands/images/list.js +3 -2
  22. package/src/commands/index.js +0 -2
  23. package/src/commands/{agent → instances}/apps/index.js +3 -3
  24. package/src/commands/instances/create.js +9 -3
  25. package/src/commands/{agent → instances}/file.js +2 -2
  26. package/src/commands/instances/index.js +6 -1
  27. package/src/commands/instances/input.js +52 -0
  28. package/src/commands/instances/list.js +3 -2
  29. package/src/commands/instances/upgrade.js +2 -2
  30. package/src/commands/projects/create.js +2 -2
  31. package/src/commands/projects/delete.js +2 -1
  32. package/src/commands/projects/list.js +3 -2
  33. package/src/commands/webplayer/create.js +2 -2
  34. package/src/commands/webplayer/list.js +2 -2
  35. package/src/error.js +12 -6
  36. package/src/table.js +1 -1
  37. package/src/utils.js +19 -40
  38. package/node_modules/@babel/cli/LICENSE +0 -22
  39. package/node_modules/@babel/cli/README.md +0 -19
  40. package/node_modules/@babel/cli/bin/babel-external-helpers.js +0 -3
  41. package/node_modules/@babel/cli/bin/babel.js +0 -3
  42. package/node_modules/@babel/cli/index.js +0 -1
  43. package/node_modules/@babel/cli/lib/babel/dir.js +0 -285
  44. package/node_modules/@babel/cli/lib/babel/file.js +0 -273
  45. package/node_modules/@babel/cli/lib/babel/index.js +0 -20
  46. package/node_modules/@babel/cli/lib/babel/options.js +0 -285
  47. package/node_modules/@babel/cli/lib/babel/util.js +0 -181
  48. package/node_modules/@babel/cli/lib/babel/watcher.js +0 -162
  49. package/node_modules/@babel/cli/lib/babel-external-helpers.js +0 -43
  50. package/node_modules/@babel/cli/node_modules/commander/CHANGELOG.md +0 -436
  51. package/node_modules/@babel/cli/node_modules/commander/LICENSE +0 -22
  52. package/node_modules/@babel/cli/node_modules/commander/Readme.md +0 -713
  53. package/node_modules/@babel/cli/node_modules/commander/index.js +0 -1649
  54. package/node_modules/@babel/cli/node_modules/commander/package.json +0 -76
  55. package/node_modules/@babel/cli/node_modules/commander/typings/index.d.ts +0 -311
  56. package/node_modules/@babel/cli/node_modules/make-dir/index.d.ts +0 -39
  57. package/node_modules/@babel/cli/node_modules/make-dir/index.js +0 -139
  58. package/node_modules/@babel/cli/node_modules/make-dir/license +0 -9
  59. package/node_modules/@babel/cli/node_modules/make-dir/package.json +0 -94
  60. package/node_modules/@babel/cli/node_modules/make-dir/readme.md +0 -123
  61. package/node_modules/@babel/cli/node_modules/pify/index.js +0 -68
  62. package/node_modules/@babel/cli/node_modules/pify/license +0 -9
  63. package/node_modules/@babel/cli/node_modules/pify/package.json +0 -86
  64. package/node_modules/@babel/cli/node_modules/pify/readme.md +0 -145
  65. package/node_modules/@babel/cli/node_modules/semver/CHANGELOG.md +0 -39
  66. package/node_modules/@babel/cli/node_modules/semver/LICENSE +0 -15
  67. package/node_modules/@babel/cli/node_modules/semver/README.md +0 -412
  68. package/node_modules/@babel/cli/node_modules/semver/bin/semver +0 -160
  69. package/node_modules/@babel/cli/node_modules/semver/package.json +0 -63
  70. package/node_modules/@babel/cli/node_modules/semver/range.bnf +0 -16
  71. package/node_modules/@babel/cli/node_modules/semver/semver.js +0 -1483
  72. package/node_modules/@babel/cli/node_modules/slash/index.js +0 -11
  73. package/node_modules/@babel/cli/node_modules/slash/license +0 -9
  74. package/node_modules/@babel/cli/node_modules/slash/package.json +0 -69
  75. package/node_modules/@babel/cli/node_modules/slash/readme.md +0 -44
  76. package/node_modules/@babel/cli/package.json +0 -91
  77. package/node_modules/@corellium/client-api/README.md +0 -209
  78. package/node_modules/@corellium/client-api/dist/ApiClient.js +0 -780
  79. package/node_modules/@corellium/client-api/dist/api/CorelliumApi.js +0 -1744
  80. package/node_modules/@corellium/client-api/dist/index.js +0 -295
  81. package/node_modules/@corellium/client-api/dist/model/ApiConflictError.js +0 -114
  82. package/node_modules/@corellium/client-api/dist/model/ApiError.js +0 -101
  83. package/node_modules/@corellium/client-api/dist/model/ApiNotFoundError.js +0 -111
  84. package/node_modules/@corellium/client-api/dist/model/ApiToken.js +0 -78
  85. package/node_modules/@corellium/client-api/dist/model/Bit.js +0 -50
  86. package/node_modules/@corellium/client-api/dist/model/Credentials.js +0 -91
  87. package/node_modules/@corellium/client-api/dist/model/Firmware.js +0 -208
  88. package/node_modules/@corellium/client-api/dist/model/GpioStateDefinition.js +0 -93
  89. package/node_modules/@corellium/client-api/dist/model/Image.js +0 -249
  90. package/node_modules/@corellium/client-api/dist/model/Instance.js +0 -313
  91. package/node_modules/@corellium/client-api/dist/model/InstanceBootOptions.js +0 -134
  92. package/node_modules/@corellium/client-api/dist/model/InstanceConsoleEndpoint.js +0 -76
  93. package/node_modules/@corellium/client-api/dist/model/InstanceCreateOptions.js +0 -224
  94. package/node_modules/@corellium/client-api/dist/model/InstanceNetmonState.js +0 -75
  95. package/node_modules/@corellium/client-api/dist/model/InstanceReturn.js +0 -92
  96. package/node_modules/@corellium/client-api/dist/model/InstanceServices.js +0 -77
  97. package/node_modules/@corellium/client-api/dist/model/InstanceStartOptions.js +0 -76
  98. package/node_modules/@corellium/client-api/dist/model/InstanceState.js +0 -64
  99. package/node_modules/@corellium/client-api/dist/model/InstanceStopOptions.js +0 -76
  100. package/node_modules/@corellium/client-api/dist/model/Model.js +0 -165
  101. package/node_modules/@corellium/client-api/dist/model/ModelSoftware.js +0 -122
  102. package/node_modules/@corellium/client-api/dist/model/PeripheralsData.js +0 -147
  103. package/node_modules/@corellium/client-api/dist/model/Project.js +0 -122
  104. package/node_modules/@corellium/client-api/dist/model/ProjectQuota.js +0 -93
  105. package/node_modules/@corellium/client-api/dist/model/ProjectSettings.js +0 -93
  106. package/node_modules/@corellium/client-api/dist/model/ProjectUsage.js +0 -102
  107. package/node_modules/@corellium/client-api/dist/model/Snapshot.js +0 -145
  108. package/node_modules/@corellium/client-api/dist/model/SnapshotCreationOptions.js +0 -79
  109. package/node_modules/@corellium/client-api/dist/model/SnapshotStatus.js +0 -84
  110. package/node_modules/@corellium/client-api/dist/model/Token.js +0 -88
  111. package/node_modules/@corellium/client-api/dist/model/UserError.js +0 -114
  112. package/node_modules/@corellium/client-api/dist/model/V1SetStateBody.js +0 -80
  113. package/node_modules/@corellium/client-api/dist/model/VolumeOptions.js +0 -94
  114. package/node_modules/@corellium/client-api/dist/model/VpnDefinition.js +0 -84
  115. package/node_modules/@corellium/client-api/package.json +0 -75
  116. package/node_modules/@jridgewell/resolve-uri/LICENSE +0 -19
  117. package/node_modules/@jridgewell/resolve-uri/README.md +0 -40
  118. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs +0 -242
  119. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map +0 -1
  120. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js +0 -250
  121. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map +0 -1
  122. package/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts +0 -4
  123. package/node_modules/@jridgewell/resolve-uri/package.json +0 -108
  124. package/node_modules/@jridgewell/sourcemap-codec/LICENSE +0 -21
  125. package/node_modules/@jridgewell/sourcemap-codec/README.md +0 -200
  126. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs +0 -164
  127. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map +0 -1
  128. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js +0 -175
  129. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map +0 -1
  130. package/node_modules/@jridgewell/sourcemap-codec/dist/types/sourcemap-codec.d.ts +0 -6
  131. package/node_modules/@jridgewell/sourcemap-codec/package.json +0 -110
  132. package/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts +0 -198
  133. package/node_modules/@jridgewell/trace-mapping/LICENSE +0 -19
  134. package/node_modules/@jridgewell/trace-mapping/README.md +0 -252
  135. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs +0 -518
  136. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map +0 -1
  137. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js +0 -532
  138. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map +0 -1
  139. package/node_modules/@jridgewell/trace-mapping/dist/types/any-map.d.ts +0 -8
  140. package/node_modules/@jridgewell/trace-mapping/dist/types/binary-search.d.ts +0 -32
  141. package/node_modules/@jridgewell/trace-mapping/dist/types/by-source.d.ts +0 -7
  142. package/node_modules/@jridgewell/trace-mapping/dist/types/resolve.d.ts +0 -1
  143. package/node_modules/@jridgewell/trace-mapping/dist/types/sort.d.ts +0 -2
  144. package/node_modules/@jridgewell/trace-mapping/dist/types/sourcemap-segment.d.ts +0 -16
  145. package/node_modules/@jridgewell/trace-mapping/dist/types/strip-filename.d.ts +0 -4
  146. package/node_modules/@jridgewell/trace-mapping/dist/types/trace-mapping.d.ts +0 -74
  147. package/node_modules/@jridgewell/trace-mapping/dist/types/types.d.ts +0 -85
  148. package/node_modules/@jridgewell/trace-mapping/package.json +0 -112
  149. package/node_modules/@jridgewell/trace-mapping/src/any-map.ts +0 -166
  150. package/node_modules/@jridgewell/trace-mapping/src/binary-search.ts +0 -115
  151. package/node_modules/@jridgewell/trace-mapping/src/by-source.ts +0 -64
  152. package/node_modules/@jridgewell/trace-mapping/src/resolve.ts +0 -10
  153. package/node_modules/@jridgewell/trace-mapping/src/sort.ts +0 -45
  154. package/node_modules/@jridgewell/trace-mapping/src/sourcemap-segment.ts +0 -23
  155. package/node_modules/@jridgewell/trace-mapping/src/strip-filename.ts +0 -8
  156. package/node_modules/@jridgewell/trace-mapping/src/trace-mapping.ts +0 -405
  157. package/node_modules/@jridgewell/trace-mapping/src/types.ts +0 -90
  158. package/node_modules/@nicolo-ribaudo/chokidar-2/README.md +0 -3
  159. package/node_modules/@nicolo-ribaudo/chokidar-2/build-chokidar.sh +0 -30
  160. package/node_modules/@nicolo-ribaudo/chokidar-2/dist/main.js +0 -2086
  161. package/node_modules/@nicolo-ribaudo/chokidar-2/package.json +0 -73
  162. package/node_modules/@nicolo-ribaudo/chokidar-2/types.d.ts +0 -191
  163. package/node_modules/ansi-regex/index.d.ts +0 -37
  164. package/node_modules/ansi-regex/index.js +0 -10
  165. package/node_modules/ansi-regex/license +0 -9
  166. package/node_modules/ansi-regex/package.json +0 -90
  167. package/node_modules/ansi-regex/readme.md +0 -78
  168. package/node_modules/ansi-styles/index.d.ts +0 -345
  169. package/node_modules/ansi-styles/index.js +0 -163
  170. package/node_modules/ansi-styles/license +0 -9
  171. package/node_modules/ansi-styles/package.json +0 -96
  172. package/node_modules/ansi-styles/readme.md +0 -152
  173. package/node_modules/anymatch/LICENSE +0 -15
  174. package/node_modules/anymatch/README.md +0 -87
  175. package/node_modules/anymatch/index.d.ts +0 -19
  176. package/node_modules/anymatch/index.js +0 -104
  177. package/node_modules/anymatch/package.json +0 -80
  178. package/node_modules/asynckit/LICENSE +0 -21
  179. package/node_modules/asynckit/README.md +0 -233
  180. package/node_modules/asynckit/bench.js +0 -76
  181. package/node_modules/asynckit/index.js +0 -6
  182. package/node_modules/asynckit/lib/abort.js +0 -29
  183. package/node_modules/asynckit/lib/async.js +0 -34
  184. package/node_modules/asynckit/lib/defer.js +0 -26
  185. package/node_modules/asynckit/lib/iterate.js +0 -75
  186. package/node_modules/asynckit/lib/readable_asynckit.js +0 -91
  187. package/node_modules/asynckit/lib/readable_parallel.js +0 -25
  188. package/node_modules/asynckit/lib/readable_serial.js +0 -25
  189. package/node_modules/asynckit/lib/readable_serial_ordered.js +0 -29
  190. package/node_modules/asynckit/lib/state.js +0 -37
  191. package/node_modules/asynckit/lib/streamify.js +0 -141
  192. package/node_modules/asynckit/lib/terminator.js +0 -29
  193. package/node_modules/asynckit/package.json +0 -96
  194. package/node_modules/asynckit/parallel.js +0 -43
  195. package/node_modules/asynckit/serial.js +0 -17
  196. package/node_modules/asynckit/serialOrdered.js +0 -75
  197. package/node_modules/asynckit/stream.js +0 -21
  198. package/node_modules/axios/CHANGELOG.md +0 -943
  199. package/node_modules/axios/LICENSE +0 -19
  200. package/node_modules/axios/README.md +0 -991
  201. package/node_modules/axios/SECURITY.md +0 -5
  202. package/node_modules/axios/UPGRADE_GUIDE.md +0 -168
  203. package/node_modules/axios/dist/axios.js +0 -2595
  204. package/node_modules/axios/dist/axios.map +0 -1
  205. package/node_modules/axios/dist/axios.min.js +0 -3
  206. package/node_modules/axios/dist/axios.min.map +0 -1
  207. package/node_modules/axios/index.d.ts +0 -254
  208. package/node_modules/axios/index.js +0 -1
  209. package/node_modules/axios/lib/adapters/README.md +0 -37
  210. package/node_modules/axios/lib/adapters/http.js +0 -424
  211. package/node_modules/axios/lib/adapters/xhr.js +0 -222
  212. package/node_modules/axios/lib/axios.js +0 -64
  213. package/node_modules/axios/lib/cancel/CancelToken.js +0 -119
  214. package/node_modules/axios/lib/cancel/CanceledError.js +0 -22
  215. package/node_modules/axios/lib/cancel/isCancel.js +0 -5
  216. package/node_modules/axios/lib/core/Axios.js +0 -160
  217. package/node_modules/axios/lib/core/AxiosError.js +0 -86
  218. package/node_modules/axios/lib/core/InterceptorManager.js +0 -54
  219. package/node_modules/axios/lib/core/README.md +0 -8
  220. package/node_modules/axios/lib/core/buildFullPath.js +0 -20
  221. package/node_modules/axios/lib/core/dispatchRequest.js +0 -87
  222. package/node_modules/axios/lib/core/mergeConfig.js +0 -100
  223. package/node_modules/axios/lib/core/settle.js +0 -25
  224. package/node_modules/axios/lib/core/transformData.js +0 -22
  225. package/node_modules/axios/lib/defaults/env/FormData.js +0 -2
  226. package/node_modules/axios/lib/defaults/index.js +0 -146
  227. package/node_modules/axios/lib/defaults/transitional.js +0 -7
  228. package/node_modules/axios/lib/env/README.md +0 -3
  229. package/node_modules/axios/lib/env/data.js +0 -3
  230. package/node_modules/axios/lib/helpers/README.md +0 -7
  231. package/node_modules/axios/lib/helpers/bind.js +0 -11
  232. package/node_modules/axios/lib/helpers/buildURL.js +0 -70
  233. package/node_modules/axios/lib/helpers/combineURLs.js +0 -14
  234. package/node_modules/axios/lib/helpers/cookies.js +0 -53
  235. package/node_modules/axios/lib/helpers/deprecatedMethod.js +0 -24
  236. package/node_modules/axios/lib/helpers/isAbsoluteURL.js +0 -14
  237. package/node_modules/axios/lib/helpers/isAxiosError.js +0 -13
  238. package/node_modules/axios/lib/helpers/isURLSameOrigin.js +0 -68
  239. package/node_modules/axios/lib/helpers/normalizeHeaderName.js +0 -12
  240. package/node_modules/axios/lib/helpers/null.js +0 -2
  241. package/node_modules/axios/lib/helpers/parseHeaders.js +0 -53
  242. package/node_modules/axios/lib/helpers/parseProtocol.js +0 -6
  243. package/node_modules/axios/lib/helpers/spread.js +0 -27
  244. package/node_modules/axios/lib/helpers/toFormData.js +0 -72
  245. package/node_modules/axios/lib/helpers/validator.js +0 -86
  246. package/node_modules/axios/lib/utils.js +0 -470
  247. package/node_modules/axios/package.json +0 -117
  248. package/node_modules/axios/tsconfig.json +0 -14
  249. package/node_modules/axios/tslint.json +0 -6
  250. package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  251. package/node_modules/balanced-match/LICENSE.md +0 -21
  252. package/node_modules/balanced-match/README.md +0 -97
  253. package/node_modules/balanced-match/index.js +0 -62
  254. package/node_modules/balanced-match/package.json +0 -79
  255. package/node_modules/binary-extensions/binary-extensions.json +0 -260
  256. package/node_modules/binary-extensions/binary-extensions.json.d.ts +0 -3
  257. package/node_modules/binary-extensions/index.d.ts +0 -14
  258. package/node_modules/binary-extensions/index.js +0 -1
  259. package/node_modules/binary-extensions/license +0 -9
  260. package/node_modules/binary-extensions/package.json +0 -74
  261. package/node_modules/binary-extensions/readme.md +0 -41
  262. package/node_modules/brace-expansion/LICENSE +0 -21
  263. package/node_modules/brace-expansion/README.md +0 -129
  264. package/node_modules/brace-expansion/index.js +0 -201
  265. package/node_modules/brace-expansion/package.json +0 -78
  266. package/node_modules/braces/CHANGELOG.md +0 -184
  267. package/node_modules/braces/LICENSE +0 -21
  268. package/node_modules/braces/README.md +0 -593
  269. package/node_modules/braces/index.js +0 -170
  270. package/node_modules/braces/lib/compile.js +0 -57
  271. package/node_modules/braces/lib/constants.js +0 -57
  272. package/node_modules/braces/lib/expand.js +0 -113
  273. package/node_modules/braces/lib/parse.js +0 -333
  274. package/node_modules/braces/lib/stringify.js +0 -32
  275. package/node_modules/braces/lib/utils.js +0 -112
  276. package/node_modules/braces/package.json +0 -127
  277. package/node_modules/call-bind/.eslintignore +0 -1
  278. package/node_modules/call-bind/.eslintrc +0 -17
  279. package/node_modules/call-bind/.github/FUNDING.yml +0 -12
  280. package/node_modules/call-bind/.nycrc +0 -13
  281. package/node_modules/call-bind/CHANGELOG.md +0 -42
  282. package/node_modules/call-bind/LICENSE +0 -21
  283. package/node_modules/call-bind/README.md +0 -2
  284. package/node_modules/call-bind/callBound.js +0 -15
  285. package/node_modules/call-bind/index.js +0 -47
  286. package/node_modules/call-bind/package.json +0 -126
  287. package/node_modules/call-bind/test/callBound.js +0 -55
  288. package/node_modules/call-bind/test/index.js +0 -66
  289. package/node_modules/chokidar/LICENSE +0 -21
  290. package/node_modules/chokidar/README.md +0 -308
  291. package/node_modules/chokidar/index.js +0 -973
  292. package/node_modules/chokidar/lib/constants.js +0 -65
  293. package/node_modules/chokidar/lib/fsevents-handler.js +0 -524
  294. package/node_modules/chokidar/lib/nodefs-handler.js +0 -654
  295. package/node_modules/chokidar/package.json +0 -123
  296. package/node_modules/chokidar/types/index.d.ts +0 -188
  297. package/node_modules/cliui/CHANGELOG.md +0 -121
  298. package/node_modules/cliui/LICENSE.txt +0 -14
  299. package/node_modules/cliui/README.md +0 -141
  300. package/node_modules/cliui/build/index.cjs +0 -302
  301. package/node_modules/cliui/build/lib/index.js +0 -287
  302. package/node_modules/cliui/build/lib/string-utils.js +0 -27
  303. package/node_modules/cliui/index.mjs +0 -13
  304. package/node_modules/cliui/package.json +0 -121
  305. package/node_modules/color-convert/CHANGELOG.md +0 -54
  306. package/node_modules/color-convert/LICENSE +0 -21
  307. package/node_modules/color-convert/README.md +0 -68
  308. package/node_modules/color-convert/conversions.js +0 -839
  309. package/node_modules/color-convert/index.js +0 -81
  310. package/node_modules/color-convert/package.json +0 -86
  311. package/node_modules/color-convert/route.js +0 -97
  312. package/node_modules/color-name/LICENSE +0 -8
  313. package/node_modules/color-name/README.md +0 -11
  314. package/node_modules/color-name/index.js +0 -152
  315. package/node_modules/color-name/package.json +0 -60
  316. package/node_modules/combined-stream/License +0 -19
  317. package/node_modules/combined-stream/Readme.md +0 -138
  318. package/node_modules/combined-stream/lib/combined_stream.js +0 -208
  319. package/node_modules/combined-stream/package.json +0 -62
  320. package/node_modules/combined-stream/yarn.lock +0 -17
  321. package/node_modules/component-emitter/History.md +0 -75
  322. package/node_modules/component-emitter/LICENSE +0 -24
  323. package/node_modules/component-emitter/Readme.md +0 -74
  324. package/node_modules/component-emitter/index.js +0 -175
  325. package/node_modules/component-emitter/package.json +0 -59
  326. package/node_modules/concat-map/.travis.yml +0 -4
  327. package/node_modules/concat-map/LICENSE +0 -18
  328. package/node_modules/concat-map/README.markdown +0 -62
  329. package/node_modules/concat-map/example/map.js +0 -6
  330. package/node_modules/concat-map/index.js +0 -13
  331. package/node_modules/concat-map/package.json +0 -91
  332. package/node_modules/concat-map/test/map.js +0 -39
  333. package/node_modules/convert-source-map/LICENSE +0 -23
  334. package/node_modules/convert-source-map/README.md +0 -120
  335. package/node_modules/convert-source-map/index.js +0 -136
  336. package/node_modules/convert-source-map/package.json +0 -75
  337. package/node_modules/cookiejar/LICENSE +0 -9
  338. package/node_modules/cookiejar/cookiejar.js +0 -276
  339. package/node_modules/cookiejar/package.json +0 -58
  340. package/node_modules/cookiejar/readme.md +0 -60
  341. package/node_modules/debug/LICENSE +0 -20
  342. package/node_modules/debug/README.md +0 -481
  343. package/node_modules/debug/package.json +0 -113
  344. package/node_modules/debug/src/browser.js +0 -269
  345. package/node_modules/debug/src/common.js +0 -274
  346. package/node_modules/debug/src/index.js +0 -10
  347. package/node_modules/debug/src/node.js +0 -263
  348. package/node_modules/delayed-stream/.npmignore +0 -1
  349. package/node_modules/delayed-stream/License +0 -19
  350. package/node_modules/delayed-stream/Makefile +0 -7
  351. package/node_modules/delayed-stream/Readme.md +0 -141
  352. package/node_modules/delayed-stream/lib/delayed_stream.js +0 -107
  353. package/node_modules/delayed-stream/package.json +0 -65
  354. package/node_modules/dotenv/CHANGELOG.md +0 -356
  355. package/node_modules/dotenv/LICENSE +0 -23
  356. package/node_modules/dotenv/README.md +0 -408
  357. package/node_modules/dotenv/config.d.ts +0 -1
  358. package/node_modules/dotenv/config.js +0 -9
  359. package/node_modules/dotenv/lib/cli-options.js +0 -11
  360. package/node_modules/dotenv/lib/env-options.js +0 -20
  361. package/node_modules/dotenv/lib/main.d.ts +0 -73
  362. package/node_modules/dotenv/lib/main.js +0 -109
  363. package/node_modules/dotenv/package.json +0 -87
  364. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  365. package/node_modules/emoji-regex/README.md +0 -73
  366. package/node_modules/emoji-regex/es2015/index.js +0 -6
  367. package/node_modules/emoji-regex/es2015/text.js +0 -6
  368. package/node_modules/emoji-regex/index.d.ts +0 -23
  369. package/node_modules/emoji-regex/index.js +0 -6
  370. package/node_modules/emoji-regex/package.json +0 -80
  371. package/node_modules/emoji-regex/text.js +0 -6
  372. package/node_modules/escalade/dist/index.js +0 -22
  373. package/node_modules/escalade/dist/index.mjs +0 -22
  374. package/node_modules/escalade/index.d.ts +0 -3
  375. package/node_modules/escalade/license +0 -9
  376. package/node_modules/escalade/package.json +0 -96
  377. package/node_modules/escalade/readme.md +0 -211
  378. package/node_modules/escalade/sync/index.d.ts +0 -2
  379. package/node_modules/escalade/sync/index.js +0 -18
  380. package/node_modules/escalade/sync/index.mjs +0 -18
  381. package/node_modules/fast-safe-stringify/.travis.yml +0 -8
  382. package/node_modules/fast-safe-stringify/CHANGELOG.md +0 -17
  383. package/node_modules/fast-safe-stringify/LICENSE +0 -23
  384. package/node_modules/fast-safe-stringify/benchmark.js +0 -137
  385. package/node_modules/fast-safe-stringify/index.d.ts +0 -23
  386. package/node_modules/fast-safe-stringify/index.js +0 -229
  387. package/node_modules/fast-safe-stringify/package.json +0 -90
  388. package/node_modules/fast-safe-stringify/readme.md +0 -170
  389. package/node_modules/fast-safe-stringify/test-stable.js +0 -404
  390. package/node_modules/fast-safe-stringify/test.js +0 -397
  391. package/node_modules/fill-range/LICENSE +0 -21
  392. package/node_modules/fill-range/README.md +0 -237
  393. package/node_modules/fill-range/index.js +0 -249
  394. package/node_modules/fill-range/package.json +0 -117
  395. package/node_modules/follow-redirects/LICENSE +0 -18
  396. package/node_modules/follow-redirects/README.md +0 -155
  397. package/node_modules/follow-redirects/debug.js +0 -15
  398. package/node_modules/follow-redirects/http.js +0 -1
  399. package/node_modules/follow-redirects/https.js +0 -1
  400. package/node_modules/follow-redirects/index.js +0 -598
  401. package/node_modules/follow-redirects/package.json +0 -98
  402. package/node_modules/form-data/License +0 -19
  403. package/node_modules/form-data/README.md.bak +0 -358
  404. package/node_modules/form-data/Readme.md +0 -358
  405. package/node_modules/form-data/index.d.ts +0 -62
  406. package/node_modules/form-data/lib/browser.js +0 -2
  407. package/node_modules/form-data/lib/form_data.js +0 -501
  408. package/node_modules/form-data/lib/populate.js +0 -10
  409. package/node_modules/form-data/package.json +0 -104
  410. package/node_modules/formidable/LICENSE +0 -7
  411. package/node_modules/formidable/Readme.md +0 -448
  412. package/node_modules/formidable/lib/file.js +0 -81
  413. package/node_modules/formidable/lib/incoming_form.js +0 -564
  414. package/node_modules/formidable/lib/index.js +0 -3
  415. package/node_modules/formidable/lib/json_parser.js +0 -30
  416. package/node_modules/formidable/lib/multipart_parser.js +0 -332
  417. package/node_modules/formidable/lib/octet_parser.js +0 -20
  418. package/node_modules/formidable/lib/querystring_parser.js +0 -27
  419. package/node_modules/formidable/package.json +0 -63
  420. package/node_modules/fs-readdir-recursive/LICENSE +0 -22
  421. package/node_modules/fs-readdir-recursive/README.md +0 -61
  422. package/node_modules/fs-readdir-recursive/index.js +0 -29
  423. package/node_modules/fs-readdir-recursive/package.json +0 -60
  424. package/node_modules/fs.realpath/LICENSE +0 -43
  425. package/node_modules/fs.realpath/README.md +0 -33
  426. package/node_modules/fs.realpath/index.js +0 -66
  427. package/node_modules/fs.realpath/old.js +0 -303
  428. package/node_modules/fs.realpath/package.json +0 -62
  429. package/node_modules/function-bind/.editorconfig +0 -20
  430. package/node_modules/function-bind/.eslintrc +0 -15
  431. package/node_modules/function-bind/.jscs.json +0 -176
  432. package/node_modules/function-bind/.npmignore +0 -22
  433. package/node_modules/function-bind/.travis.yml +0 -168
  434. package/node_modules/function-bind/LICENSE +0 -20
  435. package/node_modules/function-bind/README.md +0 -48
  436. package/node_modules/function-bind/implementation.js +0 -52
  437. package/node_modules/function-bind/index.js +0 -5
  438. package/node_modules/function-bind/package.json +0 -100
  439. package/node_modules/function-bind/test/.eslintrc +0 -9
  440. package/node_modules/function-bind/test/index.js +0 -252
  441. package/node_modules/generate-password/.eslintrc.yml +0 -18
  442. package/node_modules/generate-password/.github/workflows/nodejs.yml +0 -33
  443. package/node_modules/generate-password/CHANGELOG.md +0 -79
  444. package/node_modules/generate-password/LICENSE +0 -21
  445. package/node_modules/generate-password/README.md +0 -61
  446. package/node_modules/generate-password/example.js +0 -28
  447. package/node_modules/generate-password/main.js +0 -1
  448. package/node_modules/generate-password/package.json +0 -68
  449. package/node_modules/generate-password/src/generate.d.ts +0 -51
  450. package/node_modules/generate-password/src/generate.js +0 -152
  451. package/node_modules/generate-password/test/coverage.sh +0 -17
  452. package/node_modules/generate-password/test/esm.mjs +0 -13
  453. package/node_modules/generate-password/test/generator.js +0 -164
  454. package/node_modules/get-caller-file/LICENSE.md +0 -6
  455. package/node_modules/get-caller-file/README.md +0 -41
  456. package/node_modules/get-caller-file/index.d.ts +0 -2
  457. package/node_modules/get-caller-file/index.js +0 -22
  458. package/node_modules/get-caller-file/index.js.map +0 -1
  459. package/node_modules/get-caller-file/package.json +0 -72
  460. package/node_modules/get-intrinsic/.eslintrc +0 -37
  461. package/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  462. package/node_modules/get-intrinsic/.nycrc +0 -9
  463. package/node_modules/get-intrinsic/CHANGELOG.md +0 -91
  464. package/node_modules/get-intrinsic/LICENSE +0 -21
  465. package/node_modules/get-intrinsic/README.md +0 -71
  466. package/node_modules/get-intrinsic/index.js +0 -334
  467. package/node_modules/get-intrinsic/package.json +0 -125
  468. package/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  469. package/node_modules/glob/LICENSE +0 -21
  470. package/node_modules/glob/README.md +0 -378
  471. package/node_modules/glob/common.js +0 -238
  472. package/node_modules/glob/glob.js +0 -790
  473. package/node_modules/glob/package.json +0 -93
  474. package/node_modules/glob/sync.js +0 -486
  475. package/node_modules/glob-parent/CHANGELOG.md +0 -110
  476. package/node_modules/glob-parent/LICENSE +0 -15
  477. package/node_modules/glob-parent/README.md +0 -137
  478. package/node_modules/glob-parent/index.js +0 -42
  479. package/node_modules/glob-parent/package.json +0 -95
  480. package/node_modules/has/LICENSE-MIT +0 -22
  481. package/node_modules/has/README.md +0 -18
  482. package/node_modules/has/package.json +0 -81
  483. package/node_modules/has/src/index.js +0 -5
  484. package/node_modules/has/test/index.js +0 -10
  485. package/node_modules/has-symbols/.eslintrc +0 -11
  486. package/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  487. package/node_modules/has-symbols/.nycrc +0 -9
  488. package/node_modules/has-symbols/CHANGELOG.md +0 -75
  489. package/node_modules/has-symbols/LICENSE +0 -21
  490. package/node_modules/has-symbols/README.md +0 -46
  491. package/node_modules/has-symbols/index.js +0 -13
  492. package/node_modules/has-symbols/package.json +0 -134
  493. package/node_modules/has-symbols/shams.js +0 -42
  494. package/node_modules/has-symbols/test/index.js +0 -22
  495. package/node_modules/has-symbols/test/shams/core-js.js +0 -28
  496. package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -28
  497. package/node_modules/has-symbols/test/tests.js +0 -56
  498. package/node_modules/inflight/LICENSE +0 -15
  499. package/node_modules/inflight/README.md +0 -37
  500. package/node_modules/inflight/inflight.js +0 -54
  501. package/node_modules/inflight/package.json +0 -61
  502. package/node_modules/inherits/LICENSE +0 -16
  503. package/node_modules/inherits/README.md +0 -42
  504. package/node_modules/inherits/inherits.js +0 -9
  505. package/node_modules/inherits/inherits_browser.js +0 -27
  506. package/node_modules/inherits/package.json +0 -70
  507. package/node_modules/is-binary-path/index.d.ts +0 -17
  508. package/node_modules/is-binary-path/index.js +0 -7
  509. package/node_modules/is-binary-path/license +0 -9
  510. package/node_modules/is-binary-path/package.json +0 -76
  511. package/node_modules/is-binary-path/readme.md +0 -34
  512. package/node_modules/is-extglob/LICENSE +0 -21
  513. package/node_modules/is-extglob/README.md +0 -107
  514. package/node_modules/is-extglob/index.js +0 -20
  515. package/node_modules/is-extglob/package.json +0 -103
  516. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  517. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  518. package/node_modules/is-fullwidth-code-point/license +0 -9
  519. package/node_modules/is-fullwidth-code-point/package.json +0 -80
  520. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  521. package/node_modules/is-glob/LICENSE +0 -21
  522. package/node_modules/is-glob/README.md +0 -206
  523. package/node_modules/is-glob/index.js +0 -150
  524. package/node_modules/is-glob/package.json +0 -127
  525. package/node_modules/is-number/LICENSE +0 -21
  526. package/node_modules/is-number/README.md +0 -187
  527. package/node_modules/is-number/index.js +0 -18
  528. package/node_modules/is-number/package.json +0 -125
  529. package/node_modules/lru-cache/LICENSE +0 -15
  530. package/node_modules/lru-cache/README.md +0 -166
  531. package/node_modules/lru-cache/index.js +0 -334
  532. package/node_modules/lru-cache/package.json +0 -72
  533. package/node_modules/methods/HISTORY.md +0 -29
  534. package/node_modules/methods/LICENSE +0 -24
  535. package/node_modules/methods/README.md +0 -51
  536. package/node_modules/methods/index.js +0 -69
  537. package/node_modules/methods/package.json +0 -82
  538. package/node_modules/mime/CHANGELOG.md +0 -296
  539. package/node_modules/mime/LICENSE +0 -21
  540. package/node_modules/mime/Mime.js +0 -97
  541. package/node_modules/mime/README.md +0 -187
  542. package/node_modules/mime/cli.js +0 -46
  543. package/node_modules/mime/index.js +0 -4
  544. package/node_modules/mime/lite.js +0 -4
  545. package/node_modules/mime/package.json +0 -84
  546. package/node_modules/mime/types/other.js +0 -1
  547. package/node_modules/mime/types/standard.js +0 -1
  548. package/node_modules/mime-db/HISTORY.md +0 -507
  549. package/node_modules/mime-db/LICENSE +0 -23
  550. package/node_modules/mime-db/README.md +0 -100
  551. package/node_modules/mime-db/db.json +0 -8519
  552. package/node_modules/mime-db/index.js +0 -12
  553. package/node_modules/mime-db/package.json +0 -106
  554. package/node_modules/mime-types/HISTORY.md +0 -397
  555. package/node_modules/mime-types/LICENSE +0 -23
  556. package/node_modules/mime-types/README.md +0 -113
  557. package/node_modules/mime-types/index.js +0 -188
  558. package/node_modules/mime-types/package.json +0 -92
  559. package/node_modules/minimatch/LICENSE +0 -15
  560. package/node_modules/minimatch/README.md +0 -230
  561. package/node_modules/minimatch/minimatch.js +0 -947
  562. package/node_modules/minimatch/package.json +0 -73
  563. package/node_modules/ms/index.js +0 -162
  564. package/node_modules/ms/license.md +0 -21
  565. package/node_modules/ms/package.json +0 -75
  566. package/node_modules/ms/readme.md +0 -60
  567. package/node_modules/multi-progress/.gitattributes +0 -17
  568. package/node_modules/multi-progress/CHANGELOG.md +0 -56
  569. package/node_modules/multi-progress/LICENSE.txt +0 -21
  570. package/node_modules/multi-progress/multi-progress.js +0 -98
  571. package/node_modules/multi-progress/package.json +0 -58
  572. package/node_modules/multi-progress/readme.md +0 -33
  573. package/node_modules/normalize-path/LICENSE +0 -21
  574. package/node_modules/normalize-path/README.md +0 -127
  575. package/node_modules/normalize-path/index.js +0 -35
  576. package/node_modules/normalize-path/package.json +0 -119
  577. package/node_modules/object-inspect/.eslintrc +0 -53
  578. package/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  579. package/node_modules/object-inspect/.nycrc +0 -13
  580. package/node_modules/object-inspect/CHANGELOG.md +0 -360
  581. package/node_modules/object-inspect/LICENSE +0 -21
  582. package/node_modules/object-inspect/example/all.js +0 -23
  583. package/node_modules/object-inspect/example/circular.js +0 -6
  584. package/node_modules/object-inspect/example/fn.js +0 -5
  585. package/node_modules/object-inspect/example/inspect.js +0 -10
  586. package/node_modules/object-inspect/index.js +0 -512
  587. package/node_modules/object-inspect/package-support.json +0 -20
  588. package/node_modules/object-inspect/package.json +0 -126
  589. package/node_modules/object-inspect/readme.markdown +0 -86
  590. package/node_modules/object-inspect/test/bigint.js +0 -58
  591. package/node_modules/object-inspect/test/browser/dom.js +0 -15
  592. package/node_modules/object-inspect/test/circular.js +0 -16
  593. package/node_modules/object-inspect/test/deep.js +0 -12
  594. package/node_modules/object-inspect/test/element.js +0 -53
  595. package/node_modules/object-inspect/test/err.js +0 -48
  596. package/node_modules/object-inspect/test/fakes.js +0 -29
  597. package/node_modules/object-inspect/test/fn.js +0 -76
  598. package/node_modules/object-inspect/test/has.js +0 -15
  599. package/node_modules/object-inspect/test/holes.js +0 -15
  600. package/node_modules/object-inspect/test/indent-option.js +0 -271
  601. package/node_modules/object-inspect/test/inspect.js +0 -139
  602. package/node_modules/object-inspect/test/lowbyte.js +0 -12
  603. package/node_modules/object-inspect/test/number.js +0 -58
  604. package/node_modules/object-inspect/test/quoteStyle.js +0 -17
  605. package/node_modules/object-inspect/test/toStringTag.js +0 -40
  606. package/node_modules/object-inspect/test/undef.js +0 -12
  607. package/node_modules/object-inspect/test/values.js +0 -211
  608. package/node_modules/object-inspect/test-core-js.js +0 -26
  609. package/node_modules/object-inspect/util.inspect.js +0 -1
  610. package/node_modules/once/LICENSE +0 -15
  611. package/node_modules/once/README.md +0 -79
  612. package/node_modules/once/once.js +0 -42
  613. package/node_modules/once/package.json +0 -74
  614. package/node_modules/path-is-absolute/index.js +0 -20
  615. package/node_modules/path-is-absolute/license +0 -21
  616. package/node_modules/path-is-absolute/package.json +0 -78
  617. package/node_modules/path-is-absolute/readme.md +0 -59
  618. package/node_modules/picomatch/CHANGELOG.md +0 -136
  619. package/node_modules/picomatch/LICENSE +0 -21
  620. package/node_modules/picomatch/README.md +0 -708
  621. package/node_modules/picomatch/index.js +0 -3
  622. package/node_modules/picomatch/lib/constants.js +0 -179
  623. package/node_modules/picomatch/lib/parse.js +0 -1091
  624. package/node_modules/picomatch/lib/picomatch.js +0 -342
  625. package/node_modules/picomatch/lib/scan.js +0 -391
  626. package/node_modules/picomatch/lib/utils.js +0 -64
  627. package/node_modules/picomatch/package.json +0 -117
  628. package/node_modules/progress/CHANGELOG.md +0 -115
  629. package/node_modules/progress/LICENSE +0 -22
  630. package/node_modules/progress/Makefile +0 -8
  631. package/node_modules/progress/Readme.md +0 -146
  632. package/node_modules/progress/index.js +0 -1
  633. package/node_modules/progress/lib/node-progress.js +0 -236
  634. package/node_modules/progress/package.json +0 -74
  635. package/node_modules/qs/.editorconfig +0 -43
  636. package/node_modules/qs/.eslintrc +0 -38
  637. package/node_modules/qs/.github/FUNDING.yml +0 -12
  638. package/node_modules/qs/.nycrc +0 -13
  639. package/node_modules/qs/CHANGELOG.md +0 -546
  640. package/node_modules/qs/LICENSE.md +0 -29
  641. package/node_modules/qs/README.md +0 -625
  642. package/node_modules/qs/dist/qs.js +0 -2054
  643. package/node_modules/qs/lib/formats.js +0 -23
  644. package/node_modules/qs/lib/index.js +0 -11
  645. package/node_modules/qs/lib/parse.js +0 -263
  646. package/node_modules/qs/lib/stringify.js +0 -326
  647. package/node_modules/qs/lib/utils.js +0 -252
  648. package/node_modules/qs/package.json +0 -108
  649. package/node_modules/qs/test/parse.js +0 -855
  650. package/node_modules/qs/test/stringify.js +0 -909
  651. package/node_modules/qs/test/utils.js +0 -136
  652. package/node_modules/readdirp/LICENSE +0 -21
  653. package/node_modules/readdirp/README.md +0 -122
  654. package/node_modules/readdirp/index.d.ts +0 -43
  655. package/node_modules/readdirp/index.js +0 -287
  656. package/node_modules/readdirp/package.json +0 -162
  657. package/node_modules/require-directory/.jshintrc +0 -67
  658. package/node_modules/require-directory/.npmignore +0 -1
  659. package/node_modules/require-directory/.travis.yml +0 -3
  660. package/node_modules/require-directory/LICENSE +0 -22
  661. package/node_modules/require-directory/README.markdown +0 -184
  662. package/node_modules/require-directory/index.js +0 -86
  663. package/node_modules/require-directory/package.json +0 -72
  664. package/node_modules/safe-buffer/LICENSE +0 -21
  665. package/node_modules/safe-buffer/README.md +0 -584
  666. package/node_modules/safe-buffer/index.d.ts +0 -187
  667. package/node_modules/safe-buffer/index.js +0 -62
  668. package/node_modules/safe-buffer/package.json +0 -69
  669. package/node_modules/semver/LICENSE +0 -15
  670. package/node_modules/semver/README.md +0 -568
  671. package/node_modules/semver/bin/semver.js +0 -183
  672. package/node_modules/semver/classes/comparator.js +0 -136
  673. package/node_modules/semver/classes/index.js +0 -5
  674. package/node_modules/semver/classes/range.js +0 -519
  675. package/node_modules/semver/classes/semver.js +0 -287
  676. package/node_modules/semver/functions/clean.js +0 -6
  677. package/node_modules/semver/functions/cmp.js +0 -52
  678. package/node_modules/semver/functions/coerce.js +0 -52
  679. package/node_modules/semver/functions/compare-build.js +0 -7
  680. package/node_modules/semver/functions/compare-loose.js +0 -3
  681. package/node_modules/semver/functions/compare.js +0 -5
  682. package/node_modules/semver/functions/diff.js +0 -23
  683. package/node_modules/semver/functions/eq.js +0 -3
  684. package/node_modules/semver/functions/gt.js +0 -3
  685. package/node_modules/semver/functions/gte.js +0 -3
  686. package/node_modules/semver/functions/inc.js +0 -18
  687. package/node_modules/semver/functions/lt.js +0 -3
  688. package/node_modules/semver/functions/lte.js +0 -3
  689. package/node_modules/semver/functions/major.js +0 -3
  690. package/node_modules/semver/functions/minor.js +0 -3
  691. package/node_modules/semver/functions/neq.js +0 -3
  692. package/node_modules/semver/functions/parse.js +0 -33
  693. package/node_modules/semver/functions/patch.js +0 -3
  694. package/node_modules/semver/functions/prerelease.js +0 -6
  695. package/node_modules/semver/functions/rcompare.js +0 -3
  696. package/node_modules/semver/functions/rsort.js +0 -3
  697. package/node_modules/semver/functions/satisfies.js +0 -10
  698. package/node_modules/semver/functions/sort.js +0 -3
  699. package/node_modules/semver/functions/valid.js +0 -6
  700. package/node_modules/semver/index.js +0 -48
  701. package/node_modules/semver/internal/constants.js +0 -17
  702. package/node_modules/semver/internal/debug.js +0 -9
  703. package/node_modules/semver/internal/identifiers.js +0 -23
  704. package/node_modules/semver/internal/parse-options.js +0 -11
  705. package/node_modules/semver/internal/re.js +0 -182
  706. package/node_modules/semver/package.json +0 -113
  707. package/node_modules/semver/preload.js +0 -2
  708. package/node_modules/semver/range.bnf +0 -16
  709. package/node_modules/semver/ranges/gtr.js +0 -4
  710. package/node_modules/semver/ranges/intersects.js +0 -7
  711. package/node_modules/semver/ranges/ltr.js +0 -4
  712. package/node_modules/semver/ranges/max-satisfying.js +0 -25
  713. package/node_modules/semver/ranges/min-satisfying.js +0 -24
  714. package/node_modules/semver/ranges/min-version.js +0 -61
  715. package/node_modules/semver/ranges/outside.js +0 -80
  716. package/node_modules/semver/ranges/simplify.js +0 -47
  717. package/node_modules/semver/ranges/subset.js +0 -244
  718. package/node_modules/semver/ranges/to-comparators.js +0 -8
  719. package/node_modules/semver/ranges/valid.js +0 -11
  720. package/node_modules/side-channel/.eslintignore +0 -1
  721. package/node_modules/side-channel/.eslintrc +0 -11
  722. package/node_modules/side-channel/.github/FUNDING.yml +0 -12
  723. package/node_modules/side-channel/.nycrc +0 -13
  724. package/node_modules/side-channel/CHANGELOG.md +0 -65
  725. package/node_modules/side-channel/LICENSE +0 -21
  726. package/node_modules/side-channel/README.md +0 -2
  727. package/node_modules/side-channel/index.js +0 -124
  728. package/node_modules/side-channel/package.json +0 -99
  729. package/node_modules/side-channel/test/index.js +0 -78
  730. package/node_modules/string-width/index.d.ts +0 -29
  731. package/node_modules/string-width/index.js +0 -47
  732. package/node_modules/string-width/license +0 -9
  733. package/node_modules/string-width/package.json +0 -98
  734. package/node_modules/string-width/readme.md +0 -50
  735. package/node_modules/string_decoder/.travis.yml +0 -50
  736. package/node_modules/string_decoder/LICENSE +0 -48
  737. package/node_modules/string_decoder/README.md +0 -47
  738. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  739. package/node_modules/string_decoder/package.json +0 -64
  740. package/node_modules/strip-ansi/index.d.ts +0 -17
  741. package/node_modules/strip-ansi/index.js +0 -4
  742. package/node_modules/strip-ansi/license +0 -9
  743. package/node_modules/strip-ansi/package.json +0 -95
  744. package/node_modules/strip-ansi/readme.md +0 -46
  745. package/node_modules/superagent/.browserslistrc +0 -5
  746. package/node_modules/superagent/.dist.babelrc +0 -10
  747. package/node_modules/superagent/.dist.eslintrc +0 -35
  748. package/node_modules/superagent/.editorconfig +0 -9
  749. package/node_modules/superagent/.gitattributes +0 -1
  750. package/node_modules/superagent/.lib.babelrc +0 -11
  751. package/node_modules/superagent/.lib.eslintrc +0 -24
  752. package/node_modules/superagent/.remarkignore +0 -3
  753. package/node_modules/superagent/.zuul.yml +0 -16
  754. package/node_modules/superagent/CONTRIBUTING.md +0 -7
  755. package/node_modules/superagent/HISTORY.md +0 -692
  756. package/node_modules/superagent/LICENSE +0 -22
  757. package/node_modules/superagent/Makefile +0 -60
  758. package/node_modules/superagent/README.md +0 -266
  759. package/node_modules/superagent/dist/superagent.js +0 -2418
  760. package/node_modules/superagent/dist/superagent.min.js +0 -1
  761. package/node_modules/superagent/docs/head.html +0 -11
  762. package/node_modules/superagent/docs/images/bg.png +0 -0
  763. package/node_modules/superagent/docs/index.md +0 -736
  764. package/node_modules/superagent/docs/style.css +0 -87
  765. package/node_modules/superagent/docs/tail.html +0 -36
  766. package/node_modules/superagent/docs/test.html +0 -5072
  767. package/node_modules/superagent/index.html +0 -47
  768. package/node_modules/superagent/lib/agent-base.js +0 -42
  769. package/node_modules/superagent/lib/client.js +0 -1020
  770. package/node_modules/superagent/lib/is-object.js +0 -17
  771. package/node_modules/superagent/lib/node/agent.js +0 -113
  772. package/node_modules/superagent/lib/node/http2wrapper.js +0 -218
  773. package/node_modules/superagent/lib/node/index.js +0 -1376
  774. package/node_modules/superagent/lib/node/parsers/image.js +0 -13
  775. package/node_modules/superagent/lib/node/parsers/index.js +0 -12
  776. package/node_modules/superagent/lib/node/parsers/json.js +0 -26
  777. package/node_modules/superagent/lib/node/parsers/text.js +0 -11
  778. package/node_modules/superagent/lib/node/parsers/urlencoded.js +0 -22
  779. package/node_modules/superagent/lib/node/response.js +0 -126
  780. package/node_modules/superagent/lib/node/unzip.js +0 -72
  781. package/node_modules/superagent/lib/request-base.js +0 -757
  782. package/node_modules/superagent/lib/response-base.js +0 -131
  783. package/node_modules/superagent/lib/utils.js +0 -71
  784. package/node_modules/superagent/node_modules/form-data/License +0 -19
  785. package/node_modules/superagent/node_modules/form-data/README.md.bak +0 -356
  786. package/node_modules/superagent/node_modules/form-data/Readme.md +0 -356
  787. package/node_modules/superagent/node_modules/form-data/index.d.ts +0 -62
  788. package/node_modules/superagent/node_modules/form-data/lib/browser.js +0 -2
  789. package/node_modules/superagent/node_modules/form-data/lib/form_data.js +0 -498
  790. package/node_modules/superagent/node_modules/form-data/lib/populate.js +0 -10
  791. package/node_modules/superagent/node_modules/form-data/package.json +0 -104
  792. package/node_modules/superagent/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  793. package/node_modules/superagent/node_modules/readable-stream/GOVERNANCE.md +0 -136
  794. package/node_modules/superagent/node_modules/readable-stream/LICENSE +0 -47
  795. package/node_modules/superagent/node_modules/readable-stream/README.md +0 -106
  796. package/node_modules/superagent/node_modules/readable-stream/errors-browser.js +0 -127
  797. package/node_modules/superagent/node_modules/readable-stream/errors.js +0 -116
  798. package/node_modules/superagent/node_modules/readable-stream/experimentalWarning.js +0 -17
  799. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_duplex.js +0 -139
  800. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_passthrough.js +0 -39
  801. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_readable.js +0 -1124
  802. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_transform.js +0 -201
  803. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_writable.js +0 -697
  804. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -207
  805. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -210
  806. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -105
  807. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -104
  808. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  809. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/from.js +0 -64
  810. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -97
  811. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/state.js +0 -27
  812. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  813. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  814. package/node_modules/superagent/node_modules/readable-stream/package.json +0 -100
  815. package/node_modules/superagent/node_modules/readable-stream/readable-browser.js +0 -9
  816. package/node_modules/superagent/node_modules/readable-stream/readable.js +0 -16
  817. package/node_modules/superagent/package.json +0 -272
  818. package/node_modules/to-regex-range/LICENSE +0 -21
  819. package/node_modules/to-regex-range/README.md +0 -305
  820. package/node_modules/to-regex-range/index.js +0 -288
  821. package/node_modules/to-regex-range/package.json +0 -128
  822. package/node_modules/util-deprecate/History.md +0 -16
  823. package/node_modules/util-deprecate/LICENSE +0 -24
  824. package/node_modules/util-deprecate/README.md +0 -53
  825. package/node_modules/util-deprecate/browser.js +0 -67
  826. package/node_modules/util-deprecate/node.js +0 -6
  827. package/node_modules/util-deprecate/package.json +0 -61
  828. package/node_modules/uuid/CHANGELOG.md +0 -229
  829. package/node_modules/uuid/CONTRIBUTING.md +0 -18
  830. package/node_modules/uuid/LICENSE.md +0 -9
  831. package/node_modules/uuid/README.md +0 -505
  832. package/node_modules/uuid/dist/bin/uuid +0 -2
  833. package/node_modules/uuid/dist/esm-browser/index.js +0 -9
  834. package/node_modules/uuid/dist/esm-browser/md5.js +0 -215
  835. package/node_modules/uuid/dist/esm-browser/nil.js +0 -1
  836. package/node_modules/uuid/dist/esm-browser/parse.js +0 -35
  837. package/node_modules/uuid/dist/esm-browser/regex.js +0 -1
  838. package/node_modules/uuid/dist/esm-browser/rng.js +0 -19
  839. package/node_modules/uuid/dist/esm-browser/sha1.js +0 -96
  840. package/node_modules/uuid/dist/esm-browser/stringify.js +0 -30
  841. package/node_modules/uuid/dist/esm-browser/v1.js +0 -95
  842. package/node_modules/uuid/dist/esm-browser/v3.js +0 -4
  843. package/node_modules/uuid/dist/esm-browser/v35.js +0 -64
  844. package/node_modules/uuid/dist/esm-browser/v4.js +0 -24
  845. package/node_modules/uuid/dist/esm-browser/v5.js +0 -4
  846. package/node_modules/uuid/dist/esm-browser/validate.js +0 -7
  847. package/node_modules/uuid/dist/esm-browser/version.js +0 -11
  848. package/node_modules/uuid/dist/esm-node/index.js +0 -9
  849. package/node_modules/uuid/dist/esm-node/md5.js +0 -13
  850. package/node_modules/uuid/dist/esm-node/nil.js +0 -1
  851. package/node_modules/uuid/dist/esm-node/parse.js +0 -35
  852. package/node_modules/uuid/dist/esm-node/regex.js +0 -1
  853. package/node_modules/uuid/dist/esm-node/rng.js +0 -12
  854. package/node_modules/uuid/dist/esm-node/sha1.js +0 -13
  855. package/node_modules/uuid/dist/esm-node/stringify.js +0 -29
  856. package/node_modules/uuid/dist/esm-node/v1.js +0 -95
  857. package/node_modules/uuid/dist/esm-node/v3.js +0 -4
  858. package/node_modules/uuid/dist/esm-node/v35.js +0 -64
  859. package/node_modules/uuid/dist/esm-node/v4.js +0 -24
  860. package/node_modules/uuid/dist/esm-node/v5.js +0 -4
  861. package/node_modules/uuid/dist/esm-node/validate.js +0 -7
  862. package/node_modules/uuid/dist/esm-node/version.js +0 -11
  863. package/node_modules/uuid/dist/index.js +0 -79
  864. package/node_modules/uuid/dist/md5-browser.js +0 -223
  865. package/node_modules/uuid/dist/md5.js +0 -23
  866. package/node_modules/uuid/dist/nil.js +0 -8
  867. package/node_modules/uuid/dist/parse.js +0 -45
  868. package/node_modules/uuid/dist/regex.js +0 -8
  869. package/node_modules/uuid/dist/rng-browser.js +0 -26
  870. package/node_modules/uuid/dist/rng.js +0 -24
  871. package/node_modules/uuid/dist/sha1-browser.js +0 -104
  872. package/node_modules/uuid/dist/sha1.js +0 -23
  873. package/node_modules/uuid/dist/stringify.js +0 -39
  874. package/node_modules/uuid/dist/umd/uuid.min.js +0 -1
  875. package/node_modules/uuid/dist/umd/uuidNIL.min.js +0 -1
  876. package/node_modules/uuid/dist/umd/uuidParse.min.js +0 -1
  877. package/node_modules/uuid/dist/umd/uuidStringify.min.js +0 -1
  878. package/node_modules/uuid/dist/umd/uuidValidate.min.js +0 -1
  879. package/node_modules/uuid/dist/umd/uuidVersion.min.js +0 -1
  880. package/node_modules/uuid/dist/umd/uuidv1.min.js +0 -1
  881. package/node_modules/uuid/dist/umd/uuidv3.min.js +0 -1
  882. package/node_modules/uuid/dist/umd/uuidv4.min.js +0 -1
  883. package/node_modules/uuid/dist/umd/uuidv5.min.js +0 -1
  884. package/node_modules/uuid/dist/uuid-bin.js +0 -85
  885. package/node_modules/uuid/dist/v1.js +0 -107
  886. package/node_modules/uuid/dist/v3.js +0 -16
  887. package/node_modules/uuid/dist/v35.js +0 -78
  888. package/node_modules/uuid/dist/v4.js +0 -37
  889. package/node_modules/uuid/dist/v5.js +0 -16
  890. package/node_modules/uuid/dist/validate.js +0 -17
  891. package/node_modules/uuid/dist/version.js +0 -21
  892. package/node_modules/uuid/package.json +0 -167
  893. package/node_modules/uuid/wrapper.mjs +0 -10
  894. package/node_modules/wrap-ansi/index.js +0 -216
  895. package/node_modules/wrap-ansi/license +0 -9
  896. package/node_modules/wrap-ansi/package.json +0 -98
  897. package/node_modules/wrap-ansi/readme.md +0 -91
  898. package/node_modules/wrappy/LICENSE +0 -15
  899. package/node_modules/wrappy/README.md +0 -36
  900. package/node_modules/wrappy/package.json +0 -62
  901. package/node_modules/wrappy/wrappy.js +0 -33
  902. package/node_modules/y18n/CHANGELOG.md +0 -100
  903. package/node_modules/y18n/LICENSE +0 -13
  904. package/node_modules/y18n/README.md +0 -127
  905. package/node_modules/y18n/build/index.cjs +0 -203
  906. package/node_modules/y18n/build/lib/cjs.js +0 -6
  907. package/node_modules/y18n/build/lib/index.js +0 -174
  908. package/node_modules/y18n/build/lib/platform-shims/node.js +0 -19
  909. package/node_modules/y18n/index.mjs +0 -8
  910. package/node_modules/y18n/package.json +0 -104
  911. package/node_modules/yallist/LICENSE +0 -15
  912. package/node_modules/yallist/README.md +0 -204
  913. package/node_modules/yallist/iterator.js +0 -8
  914. package/node_modules/yallist/package.json +0 -68
  915. package/node_modules/yallist/yallist.js +0 -426
  916. package/node_modules/yargs/LICENSE +0 -21
  917. package/node_modules/yargs/README.md +0 -204
  918. package/node_modules/yargs/browser.mjs +0 -7
  919. package/node_modules/yargs/build/index.cjs +0 -1
  920. package/node_modules/yargs/build/lib/argsert.js +0 -62
  921. package/node_modules/yargs/build/lib/command.js +0 -447
  922. package/node_modules/yargs/build/lib/completion-templates.js +0 -48
  923. package/node_modules/yargs/build/lib/completion.js +0 -236
  924. package/node_modules/yargs/build/lib/middleware.js +0 -88
  925. package/node_modules/yargs/build/lib/parse-command.js +0 -32
  926. package/node_modules/yargs/build/lib/typings/common-types.js +0 -9
  927. package/node_modules/yargs/build/lib/typings/yargs-parser-types.js +0 -1
  928. package/node_modules/yargs/build/lib/usage.js +0 -579
  929. package/node_modules/yargs/build/lib/utils/apply-extends.js +0 -59
  930. package/node_modules/yargs/build/lib/utils/is-promise.js +0 -5
  931. package/node_modules/yargs/build/lib/utils/levenshtein.js +0 -34
  932. package/node_modules/yargs/build/lib/utils/maybe-async-result.js +0 -17
  933. package/node_modules/yargs/build/lib/utils/obj-filter.js +0 -10
  934. package/node_modules/yargs/build/lib/utils/process-argv.js +0 -17
  935. package/node_modules/yargs/build/lib/utils/set-blocking.js +0 -12
  936. package/node_modules/yargs/build/lib/utils/which-module.js +0 -10
  937. package/node_modules/yargs/build/lib/validation.js +0 -305
  938. package/node_modules/yargs/build/lib/yargs-factory.js +0 -1497
  939. package/node_modules/yargs/build/lib/yerror.js +0 -9
  940. package/node_modules/yargs/helpers/helpers.mjs +0 -10
  941. package/node_modules/yargs/helpers/index.js +0 -14
  942. package/node_modules/yargs/helpers/package.json +0 -3
  943. package/node_modules/yargs/index.cjs +0 -53
  944. package/node_modules/yargs/index.mjs +0 -8
  945. package/node_modules/yargs/lib/platform-shims/browser.mjs +0 -95
  946. package/node_modules/yargs/lib/platform-shims/esm.mjs +0 -73
  947. package/node_modules/yargs/locales/be.json +0 -46
  948. package/node_modules/yargs/locales/de.json +0 -46
  949. package/node_modules/yargs/locales/en.json +0 -51
  950. package/node_modules/yargs/locales/es.json +0 -46
  951. package/node_modules/yargs/locales/fi.json +0 -49
  952. package/node_modules/yargs/locales/fr.json +0 -53
  953. package/node_modules/yargs/locales/hi.json +0 -49
  954. package/node_modules/yargs/locales/hu.json +0 -46
  955. package/node_modules/yargs/locales/id.json +0 -50
  956. package/node_modules/yargs/locales/it.json +0 -46
  957. package/node_modules/yargs/locales/ja.json +0 -51
  958. package/node_modules/yargs/locales/ko.json +0 -49
  959. package/node_modules/yargs/locales/nb.json +0 -44
  960. package/node_modules/yargs/locales/nl.json +0 -49
  961. package/node_modules/yargs/locales/nn.json +0 -44
  962. package/node_modules/yargs/locales/pirate.json +0 -13
  963. package/node_modules/yargs/locales/pl.json +0 -49
  964. package/node_modules/yargs/locales/pt.json +0 -45
  965. package/node_modules/yargs/locales/pt_BR.json +0 -48
  966. package/node_modules/yargs/locales/ru.json +0 -51
  967. package/node_modules/yargs/locales/th.json +0 -46
  968. package/node_modules/yargs/locales/tr.json +0 -48
  969. package/node_modules/yargs/locales/uk_UA.json +0 -51
  970. package/node_modules/yargs/locales/uz.json +0 -52
  971. package/node_modules/yargs/locales/zh_CN.json +0 -48
  972. package/node_modules/yargs/locales/zh_TW.json +0 -51
  973. package/node_modules/yargs/package.json +0 -154
  974. package/node_modules/yargs/yargs +0 -9
  975. package/node_modules/yargs/yargs.mjs +0 -10
  976. package/node_modules/yargs-parser/CHANGELOG.md +0 -287
  977. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  978. package/node_modules/yargs-parser/README.md +0 -518
  979. package/node_modules/yargs-parser/browser.js +0 -29
  980. package/node_modules/yargs-parser/build/index.cjs +0 -1048
  981. package/node_modules/yargs-parser/build/lib/index.js +0 -60
  982. package/node_modules/yargs-parser/build/lib/string-utils.js +0 -65
  983. package/node_modules/yargs-parser/build/lib/tokenize-arg-string.js +0 -40
  984. package/node_modules/yargs-parser/build/lib/yargs-parser-types.js +0 -12
  985. package/node_modules/yargs-parser/build/lib/yargs-parser.js +0 -1045
  986. package/node_modules/yargs-parser/package.json +0 -123
  987. package/src/clients/TrialAccount.js +0 -76
  988. package/src/commands/agent/index.js +0 -27
  989. package/src/commands/signup.js +0 -104
  990. package/test.sh +0 -2
  991. /package/src/commands/{agent → instances}/apps/install.js +0 -0
  992. /package/src/commands/{agent → instances}/ready.js +0 -0
@@ -1,1376 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
-
5
- /**
6
- * Module dependencies.
7
- */
8
- // eslint-disable-next-line node/no-deprecated-api
9
- var _require = require('url'),
10
- parse = _require.parse,
11
- format = _require.format,
12
- resolve = _require.resolve;
13
-
14
- var Stream = require('stream');
15
-
16
- var https = require('https');
17
-
18
- var http = require('http');
19
-
20
- var fs = require('fs');
21
-
22
- var zlib = require('zlib');
23
-
24
- var util = require('util');
25
-
26
- var qs = require('qs');
27
-
28
- var mime = require('mime');
29
-
30
- var methods = require('methods');
31
-
32
- var FormData = require('form-data');
33
-
34
- var formidable = require('formidable');
35
-
36
- var debug = require('debug')('superagent');
37
-
38
- var CookieJar = require('cookiejar');
39
-
40
- var semver = require('semver');
41
-
42
- var safeStringify = require('fast-safe-stringify');
43
-
44
- var utils = require('../utils');
45
-
46
- var RequestBase = require('../request-base');
47
-
48
- var _require2 = require('./unzip'),
49
- unzip = _require2.unzip;
50
-
51
- var Response = require('./response');
52
-
53
- var http2;
54
- if (semver.gte(process.version, 'v10.10.0')) http2 = require('./http2wrapper');
55
-
56
- function request(method, url) {
57
- // callback
58
- if (typeof url === 'function') {
59
- return new exports.Request('GET', method).end(url);
60
- } // url first
61
-
62
-
63
- if (arguments.length === 1) {
64
- return new exports.Request('GET', method);
65
- }
66
-
67
- return new exports.Request(method, url);
68
- }
69
-
70
- module.exports = request;
71
- exports = module.exports;
72
- /**
73
- * Expose `Request`.
74
- */
75
-
76
- exports.Request = Request;
77
- /**
78
- * Expose the agent function
79
- */
80
-
81
- exports.agent = require('./agent');
82
- /**
83
- * Noop.
84
- */
85
-
86
- function noop() {}
87
- /**
88
- * Expose `Response`.
89
- */
90
-
91
-
92
- exports.Response = Response;
93
- /**
94
- * Define "form" mime type.
95
- */
96
-
97
- mime.define({
98
- 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data']
99
- }, true);
100
- /**
101
- * Protocol map.
102
- */
103
-
104
- exports.protocols = {
105
- 'http:': http,
106
- 'https:': https,
107
- 'http2:': http2
108
- };
109
- /**
110
- * Default serialization map.
111
- *
112
- * superagent.serialize['application/xml'] = function(obj){
113
- * return 'generated xml here';
114
- * };
115
- *
116
- */
117
-
118
- exports.serialize = {
119
- 'application/x-www-form-urlencoded': qs.stringify,
120
- 'application/json': safeStringify
121
- };
122
- /**
123
- * Default parsers.
124
- *
125
- * superagent.parse['application/xml'] = function(res, fn){
126
- * fn(null, res);
127
- * };
128
- *
129
- */
130
-
131
- exports.parse = require('./parsers');
132
- /**
133
- * Default buffering map. Can be used to set certain
134
- * response types to buffer/not buffer.
135
- *
136
- * superagent.buffer['application/xml'] = true;
137
- */
138
-
139
- exports.buffer = {};
140
- /**
141
- * Initialize internal header tracking properties on a request instance.
142
- *
143
- * @param {Object} req the instance
144
- * @api private
145
- */
146
-
147
- function _initHeaders(req) {
148
- req._header = {// coerces header names to lowercase
149
- };
150
- req.header = {// preserves header name case
151
- };
152
- }
153
- /**
154
- * Initialize a new `Request` with the given `method` and `url`.
155
- *
156
- * @param {String} method
157
- * @param {String|Object} url
158
- * @api public
159
- */
160
-
161
-
162
- function Request(method, url) {
163
- Stream.call(this);
164
- if (typeof url !== 'string') url = format(url);
165
- this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only
166
-
167
- this._agent = false;
168
- this._formData = null;
169
- this.method = method;
170
- this.url = url;
171
-
172
- _initHeaders(this);
173
-
174
- this.writable = true;
175
- this._redirects = 0;
176
- this.redirects(method === 'HEAD' ? 0 : 5);
177
- this.cookies = '';
178
- this.qs = {};
179
- this._query = [];
180
- this.qsRaw = this._query; // Unused, for backwards compatibility only
181
-
182
- this._redirectList = [];
183
- this._streamRequest = false;
184
- this.once('end', this.clearTimeout.bind(this));
185
- }
186
- /**
187
- * Inherit from `Stream` (which inherits from `EventEmitter`).
188
- * Mixin `RequestBase`.
189
- */
190
-
191
-
192
- util.inherits(Request, Stream); // eslint-disable-next-line new-cap
193
-
194
- RequestBase(Request.prototype);
195
- /**
196
- * Enable or Disable http2.
197
- *
198
- * Enable http2.
199
- *
200
- * ``` js
201
- * request.get('http://localhost/')
202
- * .http2()
203
- * .end(callback);
204
- *
205
- * request.get('http://localhost/')
206
- * .http2(true)
207
- * .end(callback);
208
- * ```
209
- *
210
- * Disable http2.
211
- *
212
- * ``` js
213
- * request = request.http2();
214
- * request.get('http://localhost/')
215
- * .http2(false)
216
- * .end(callback);
217
- * ```
218
- *
219
- * @param {Boolean} enable
220
- * @return {Request} for chaining
221
- * @api public
222
- */
223
-
224
- Request.prototype.http2 = function (bool) {
225
- if (exports.protocols['http2:'] === undefined) {
226
- throw new Error('superagent: this version of Node.js does not support http2');
227
- }
228
-
229
- this._enableHttp2 = bool === undefined ? true : bool;
230
- return this;
231
- };
232
- /**
233
- * Queue the given `file` as an attachment to the specified `field`,
234
- * with optional `options` (or filename).
235
- *
236
- * ``` js
237
- * request.post('http://localhost/upload')
238
- * .attach('field', Buffer.from('<b>Hello world</b>'), 'hello.html')
239
- * .end(callback);
240
- * ```
241
- *
242
- * A filename may also be used:
243
- *
244
- * ``` js
245
- * request.post('http://localhost/upload')
246
- * .attach('files', 'image.jpg')
247
- * .end(callback);
248
- * ```
249
- *
250
- * @param {String} field
251
- * @param {String|fs.ReadStream|Buffer} file
252
- * @param {String|Object} options
253
- * @return {Request} for chaining
254
- * @api public
255
- */
256
-
257
-
258
- Request.prototype.attach = function (field, file, options) {
259
- if (file) {
260
- if (this._data) {
261
- throw new Error("superagent can't mix .send() and .attach()");
262
- }
263
-
264
- var o = options || {};
265
-
266
- if (typeof options === 'string') {
267
- o = {
268
- filename: options
269
- };
270
- }
271
-
272
- if (typeof file === 'string') {
273
- if (!o.filename) o.filename = file;
274
- debug('creating `fs.ReadStream` instance for file: %s', file);
275
- file = fs.createReadStream(file);
276
- } else if (!o.filename && file.path) {
277
- o.filename = file.path;
278
- }
279
-
280
- this._getFormData().append(field, file, o);
281
- }
282
-
283
- return this;
284
- };
285
-
286
- Request.prototype._getFormData = function () {
287
- var _this = this;
288
-
289
- if (!this._formData) {
290
- this._formData = new FormData();
291
-
292
- this._formData.on('error', function (err) {
293
- debug('FormData error', err);
294
-
295
- if (_this.called) {
296
- // The request has already finished and the callback was called.
297
- // Silently ignore the error.
298
- return;
299
- }
300
-
301
- _this.callback(err);
302
-
303
- _this.abort();
304
- });
305
- }
306
-
307
- return this._formData;
308
- };
309
- /**
310
- * Gets/sets the `Agent` to use for this HTTP request. The default (if this
311
- * function is not called) is to opt out of connection pooling (`agent: false`).
312
- *
313
- * @param {http.Agent} agent
314
- * @return {http.Agent}
315
- * @api public
316
- */
317
-
318
-
319
- Request.prototype.agent = function (agent) {
320
- if (arguments.length === 0) return this._agent;
321
- this._agent = agent;
322
- return this;
323
- };
324
- /**
325
- * Set _Content-Type_ response header passed through `mime.getType()`.
326
- *
327
- * Examples:
328
- *
329
- * request.post('/')
330
- * .type('xml')
331
- * .send(xmlstring)
332
- * .end(callback);
333
- *
334
- * request.post('/')
335
- * .type('json')
336
- * .send(jsonstring)
337
- * .end(callback);
338
- *
339
- * request.post('/')
340
- * .type('application/json')
341
- * .send(jsonstring)
342
- * .end(callback);
343
- *
344
- * @param {String} type
345
- * @return {Request} for chaining
346
- * @api public
347
- */
348
-
349
-
350
- Request.prototype.type = function (type) {
351
- return this.set('Content-Type', type.includes('/') ? type : mime.getType(type));
352
- };
353
- /**
354
- * Set _Accept_ response header passed through `mime.getType()`.
355
- *
356
- * Examples:
357
- *
358
- * superagent.types.json = 'application/json';
359
- *
360
- * request.get('/agent')
361
- * .accept('json')
362
- * .end(callback);
363
- *
364
- * request.get('/agent')
365
- * .accept('application/json')
366
- * .end(callback);
367
- *
368
- * @param {String} accept
369
- * @return {Request} for chaining
370
- * @api public
371
- */
372
-
373
-
374
- Request.prototype.accept = function (type) {
375
- return this.set('Accept', type.includes('/') ? type : mime.getType(type));
376
- };
377
- /**
378
- * Add query-string `val`.
379
- *
380
- * Examples:
381
- *
382
- * request.get('/shoes')
383
- * .query('size=10')
384
- * .query({ color: 'blue' })
385
- *
386
- * @param {Object|String} val
387
- * @return {Request} for chaining
388
- * @api public
389
- */
390
-
391
-
392
- Request.prototype.query = function (val) {
393
- if (typeof val === 'string') {
394
- this._query.push(val);
395
- } else {
396
- Object.assign(this.qs, val);
397
- }
398
-
399
- return this;
400
- };
401
- /**
402
- * Write raw `data` / `encoding` to the socket.
403
- *
404
- * @param {Buffer|String} data
405
- * @param {String} encoding
406
- * @return {Boolean}
407
- * @api public
408
- */
409
-
410
-
411
- Request.prototype.write = function (data, encoding) {
412
- var req = this.request();
413
-
414
- if (!this._streamRequest) {
415
- this._streamRequest = true;
416
- }
417
-
418
- return req.write(data, encoding);
419
- };
420
- /**
421
- * Pipe the request body to `stream`.
422
- *
423
- * @param {Stream} stream
424
- * @param {Object} options
425
- * @return {Stream}
426
- * @api public
427
- */
428
-
429
-
430
- Request.prototype.pipe = function (stream, options) {
431
- this.piped = true; // HACK...
432
-
433
- this.buffer(false);
434
- this.end();
435
- return this._pipeContinue(stream, options);
436
- };
437
-
438
- Request.prototype._pipeContinue = function (stream, options) {
439
- var _this2 = this;
440
-
441
- this.req.once('response', function (res) {
442
- // redirect
443
- if (isRedirect(res.statusCode) && _this2._redirects++ !== _this2._maxRedirects) {
444
- return _this2._redirect(res) === _this2 ? _this2._pipeContinue(stream, options) : undefined;
445
- }
446
-
447
- _this2.res = res;
448
-
449
- _this2._emitResponse();
450
-
451
- if (_this2._aborted) return;
452
-
453
- if (_this2._shouldUnzip(res)) {
454
- var unzipObj = zlib.createUnzip();
455
- unzipObj.on('error', function (err) {
456
- if (err && err.code === 'Z_BUF_ERROR') {
457
- // unexpected end of file is ignored by browsers and curl
458
- stream.emit('end');
459
- return;
460
- }
461
-
462
- stream.emit('error', err);
463
- });
464
- res.pipe(unzipObj).pipe(stream, options);
465
- } else {
466
- res.pipe(stream, options);
467
- }
468
-
469
- res.once('end', function () {
470
- _this2.emit('end');
471
- });
472
- });
473
- return stream;
474
- };
475
- /**
476
- * Enable / disable buffering.
477
- *
478
- * @return {Boolean} [val]
479
- * @return {Request} for chaining
480
- * @api public
481
- */
482
-
483
-
484
- Request.prototype.buffer = function (val) {
485
- this._buffer = val !== false;
486
- return this;
487
- };
488
- /**
489
- * Redirect to `url
490
- *
491
- * @param {IncomingMessage} res
492
- * @return {Request} for chaining
493
- * @api private
494
- */
495
-
496
-
497
- Request.prototype._redirect = function (res) {
498
- var url = res.headers.location;
499
-
500
- if (!url) {
501
- return this.callback(new Error('No location header for redirect'), res);
502
- }
503
-
504
- debug('redirect %s -> %s', this.url, url); // location
505
-
506
- url = resolve(this.url, url); // ensure the response is being consumed
507
- // this is required for Node v0.10+
508
-
509
- res.resume();
510
- var headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers;
511
- var changesOrigin = parse(url).host !== parse(this.url).host; // implementation of 302 following defacto standard
512
-
513
- if (res.statusCode === 301 || res.statusCode === 302) {
514
- // strip Content-* related fields
515
- // in case of POST etc
516
- headers = utils.cleanHeader(headers, changesOrigin); // force GET
517
-
518
- this.method = this.method === 'HEAD' ? 'HEAD' : 'GET'; // clear data
519
-
520
- this._data = null;
521
- } // 303 is always GET
522
-
523
-
524
- if (res.statusCode === 303) {
525
- // strip Content-* related fields
526
- // in case of POST etc
527
- headers = utils.cleanHeader(headers, changesOrigin); // force method
528
-
529
- this.method = 'GET'; // clear data
530
-
531
- this._data = null;
532
- } // 307 preserves method
533
- // 308 preserves method
534
-
535
-
536
- delete headers.host;
537
- delete this.req;
538
- delete this._formData; // remove all add header except User-Agent
539
-
540
- _initHeaders(this); // redirect
541
-
542
-
543
- this._endCalled = false;
544
- this.url = url;
545
- this.qs = {};
546
- this._query.length = 0;
547
- this.set(headers);
548
- this.emit('redirect', res);
549
-
550
- this._redirectList.push(this.url);
551
-
552
- this.end(this._callback);
553
- return this;
554
- };
555
- /**
556
- * Set Authorization field value with `user` and `pass`.
557
- *
558
- * Examples:
559
- *
560
- * .auth('tobi', 'learnboost')
561
- * .auth('tobi:learnboost')
562
- * .auth('tobi')
563
- * .auth(accessToken, { type: 'bearer' })
564
- *
565
- * @param {String} user
566
- * @param {String} [pass]
567
- * @param {Object} [options] options with authorization type 'basic' or 'bearer' ('basic' is default)
568
- * @return {Request} for chaining
569
- * @api public
570
- */
571
-
572
-
573
- Request.prototype.auth = function (user, pass, options) {
574
- if (arguments.length === 1) pass = '';
575
-
576
- if (_typeof(pass) === 'object' && pass !== null) {
577
- // pass is optional and can be replaced with options
578
- options = pass;
579
- pass = '';
580
- }
581
-
582
- if (!options) {
583
- options = {
584
- type: 'basic'
585
- };
586
- }
587
-
588
- var encoder = function encoder(string) {
589
- return Buffer.from(string).toString('base64');
590
- };
591
-
592
- return this._auth(user, pass, options, encoder);
593
- };
594
- /**
595
- * Set the certificate authority option for https request.
596
- *
597
- * @param {Buffer | Array} cert
598
- * @return {Request} for chaining
599
- * @api public
600
- */
601
-
602
-
603
- Request.prototype.ca = function (cert) {
604
- this._ca = cert;
605
- return this;
606
- };
607
- /**
608
- * Set the client certificate key option for https request.
609
- *
610
- * @param {Buffer | String} cert
611
- * @return {Request} for chaining
612
- * @api public
613
- */
614
-
615
-
616
- Request.prototype.key = function (cert) {
617
- this._key = cert;
618
- return this;
619
- };
620
- /**
621
- * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format.
622
- *
623
- * @param {Buffer | String} cert
624
- * @return {Request} for chaining
625
- * @api public
626
- */
627
-
628
-
629
- Request.prototype.pfx = function (cert) {
630
- if (_typeof(cert) === 'object' && !Buffer.isBuffer(cert)) {
631
- this._pfx = cert.pfx;
632
- this._passphrase = cert.passphrase;
633
- } else {
634
- this._pfx = cert;
635
- }
636
-
637
- return this;
638
- };
639
- /**
640
- * Set the client certificate option for https request.
641
- *
642
- * @param {Buffer | String} cert
643
- * @return {Request} for chaining
644
- * @api public
645
- */
646
-
647
-
648
- Request.prototype.cert = function (cert) {
649
- this._cert = cert;
650
- return this;
651
- };
652
- /**
653
- * Do not reject expired or invalid TLS certs.
654
- * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks.
655
- *
656
- * @return {Request} for chaining
657
- * @api public
658
- */
659
-
660
-
661
- Request.prototype.disableTLSCerts = function () {
662
- this._disableTLSCerts = true;
663
- return this;
664
- };
665
- /**
666
- * Return an http[s] request.
667
- *
668
- * @return {OutgoingMessage}
669
- * @api private
670
- */
671
- // eslint-disable-next-line complexity
672
-
673
-
674
- Request.prototype.request = function () {
675
- var _this3 = this;
676
-
677
- if (this.req) return this.req;
678
- var options = {};
679
-
680
- try {
681
- var query = qs.stringify(this.qs, {
682
- indices: false,
683
- strictNullHandling: true
684
- });
685
-
686
- if (query) {
687
- this.qs = {};
688
-
689
- this._query.push(query);
690
- }
691
-
692
- this._finalizeQueryString();
693
- } catch (err) {
694
- return this.emit('error', err);
695
- }
696
-
697
- var url = this.url;
698
- var retries = this._retries; // Capture backticks as-is from the final query string built above.
699
- // Note: this'll only find backticks entered in req.query(String)
700
- // calls, because qs.stringify unconditionally encodes backticks.
701
-
702
- var queryStringBackticks;
703
-
704
- if (url.includes('`')) {
705
- var queryStartIndex = url.indexOf('?');
706
-
707
- if (queryStartIndex !== -1) {
708
- var queryString = url.slice(queryStartIndex + 1);
709
- queryStringBackticks = queryString.match(/`|%60/g);
710
- }
711
- } // default to http://
712
-
713
-
714
- if (url.indexOf('http') !== 0) url = "http://".concat(url);
715
- url = parse(url); // See https://github.com/visionmedia/superagent/issues/1367
716
-
717
- if (queryStringBackticks) {
718
- var i = 0;
719
- url.query = url.query.replace(/%60/g, function () {
720
- return queryStringBackticks[i++];
721
- });
722
- url.search = "?".concat(url.query);
723
- url.path = url.pathname + url.search;
724
- } // support unix sockets
725
-
726
-
727
- if (/^https?\+unix:/.test(url.protocol) === true) {
728
- // get the protocol
729
- url.protocol = "".concat(url.protocol.split('+')[0], ":"); // get the socket, path
730
-
731
- var unixParts = url.path.match(/^([^/]+)(.+)$/);
732
- options.socketPath = unixParts[1].replace(/%2F/g, '/');
733
- url.path = unixParts[2];
734
- } // Override IP address of a hostname
735
-
736
-
737
- if (this._connectOverride) {
738
- var _url = url,
739
- hostname = _url.hostname;
740
- var match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*'];
741
-
742
- if (match) {
743
- // backup the real host
744
- if (!this._header.host) {
745
- this.set('host', url.host);
746
- }
747
-
748
- var newHost;
749
- var newPort;
750
-
751
- if (_typeof(match) === 'object') {
752
- newHost = match.host;
753
- newPort = match.port;
754
- } else {
755
- newHost = match;
756
- newPort = url.port;
757
- } // wrap [ipv6]
758
-
759
-
760
- url.host = /:/.test(newHost) ? "[".concat(newHost, "]") : newHost;
761
-
762
- if (newPort) {
763
- url.host += ":".concat(newPort);
764
- url.port = newPort;
765
- }
766
-
767
- url.hostname = newHost;
768
- }
769
- } // options
770
-
771
-
772
- options.method = this.method;
773
- options.port = url.port;
774
- options.path = url.path;
775
- options.host = url.hostname;
776
- options.ca = this._ca;
777
- options.key = this._key;
778
- options.pfx = this._pfx;
779
- options.cert = this._cert;
780
- options.passphrase = this._passphrase;
781
- options.agent = this._agent;
782
- options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0'; // Allows request.get('https://1.2.3.4/').set('Host', 'example.com')
783
-
784
- if (this._header.host) {
785
- options.servername = this._header.host.replace(/:\d+$/, '');
786
- }
787
-
788
- if (this._trustLocalhost && /^(?:localhost|127\.0\.0\.\d+|(0*:)+:0*1)$/.test(url.hostname)) {
789
- options.rejectUnauthorized = false;
790
- } // initiate request
791
-
792
-
793
- var mod = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(url.protocol) : exports.protocols[url.protocol]; // request
794
-
795
- this.req = mod.request(options);
796
- var req = this.req; // set tcp no delay
797
-
798
- req.setNoDelay(true);
799
-
800
- if (options.method !== 'HEAD') {
801
- req.setHeader('Accept-Encoding', 'gzip, deflate');
802
- }
803
-
804
- this.protocol = url.protocol;
805
- this.host = url.host; // expose events
806
-
807
- req.once('drain', function () {
808
- _this3.emit('drain');
809
- });
810
- req.on('error', function (err) {
811
- // flag abortion here for out timeouts
812
- // because node will emit a faux-error "socket hang up"
813
- // when request is aborted before a connection is made
814
- if (_this3._aborted) return; // if not the same, we are in the **old** (cancelled) request,
815
- // so need to continue (same as for above)
816
-
817
- if (_this3._retries !== retries) return; // if we've received a response then we don't want to let
818
- // an error in the request blow up the response
819
-
820
- if (_this3.response) return;
821
-
822
- _this3.callback(err);
823
- }); // auth
824
-
825
- if (url.auth) {
826
- var auth = url.auth.split(':');
827
- this.auth(auth[0], auth[1]);
828
- }
829
-
830
- if (this.username && this.password) {
831
- this.auth(this.username, this.password);
832
- }
833
-
834
- for (var key in this.header) {
835
- if (Object.prototype.hasOwnProperty.call(this.header, key)) req.setHeader(key, this.header[key]);
836
- } // add cookies
837
-
838
-
839
- if (this.cookies) {
840
- if (Object.prototype.hasOwnProperty.call(this._header, 'cookie')) {
841
- // merge
842
- var tmpJar = new CookieJar.CookieJar();
843
- tmpJar.setCookies(this._header.cookie.split(';'));
844
- tmpJar.setCookies(this.cookies.split(';'));
845
- req.setHeader('Cookie', tmpJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString());
846
- } else {
847
- req.setHeader('Cookie', this.cookies);
848
- }
849
- }
850
-
851
- return req;
852
- };
853
- /**
854
- * Invoke the callback with `err` and `res`
855
- * and handle arity check.
856
- *
857
- * @param {Error} err
858
- * @param {Response} res
859
- * @api private
860
- */
861
-
862
-
863
- Request.prototype.callback = function (err, res) {
864
- if (this._shouldRetry(err, res)) {
865
- return this._retry();
866
- } // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime.
867
-
868
-
869
- var fn = this._callback || noop;
870
- this.clearTimeout();
871
- if (this.called) return console.warn('superagent: double callback bug');
872
- this.called = true;
873
-
874
- if (!err) {
875
- try {
876
- if (!this._isResponseOK(res)) {
877
- var msg = 'Unsuccessful HTTP response';
878
-
879
- if (res) {
880
- msg = http.STATUS_CODES[res.status] || msg;
881
- }
882
-
883
- err = new Error(msg);
884
- err.status = res ? res.status : undefined;
885
- }
886
- } catch (err_) {
887
- err = err_;
888
- }
889
- } // It's important that the callback is called outside try/catch
890
- // to avoid double callback
891
-
892
-
893
- if (!err) {
894
- return fn(null, res);
895
- }
896
-
897
- err.response = res;
898
- if (this._maxRetries) err.retries = this._retries - 1; // only emit error event if there is a listener
899
- // otherwise we assume the callback to `.end()` will get the error
900
-
901
- if (err && this.listeners('error').length > 0) {
902
- this.emit('error', err);
903
- }
904
-
905
- fn(err, res);
906
- };
907
- /**
908
- * Check if `obj` is a host object,
909
- *
910
- * @param {Object} obj host object
911
- * @return {Boolean} is a host object
912
- * @api private
913
- */
914
-
915
-
916
- Request.prototype._isHost = function (obj) {
917
- return Buffer.isBuffer(obj) || obj instanceof Stream || obj instanceof FormData;
918
- };
919
- /**
920
- * Initiate request, invoking callback `fn(err, res)`
921
- * with an instanceof `Response`.
922
- *
923
- * @param {Function} fn
924
- * @return {Request} for chaining
925
- * @api public
926
- */
927
-
928
-
929
- Request.prototype._emitResponse = function (body, files) {
930
- var response = new Response(this);
931
- this.response = response;
932
- response.redirects = this._redirectList;
933
-
934
- if (undefined !== body) {
935
- response.body = body;
936
- }
937
-
938
- response.files = files;
939
-
940
- if (this._endCalled) {
941
- response.pipe = function () {
942
- throw new Error("end() has already been called, so it's too late to start piping");
943
- };
944
- }
945
-
946
- this.emit('response', response);
947
- return response;
948
- };
949
-
950
- Request.prototype.end = function (fn) {
951
- this.request();
952
- debug('%s %s', this.method, this.url);
953
-
954
- if (this._endCalled) {
955
- throw new Error('.end() was called twice. This is not supported in superagent');
956
- }
957
-
958
- this._endCalled = true; // store callback
959
-
960
- this._callback = fn || noop;
961
-
962
- this._end();
963
- };
964
-
965
- Request.prototype._end = function () {
966
- var _this4 = this;
967
-
968
- if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called'));
969
- var data = this._data;
970
- var req = this.req;
971
- var method = this.method;
972
-
973
- this._setTimeouts(); // body
974
-
975
-
976
- if (method !== 'HEAD' && !req._headerSent) {
977
- // serialize stuff
978
- if (typeof data !== 'string') {
979
- var contentType = req.getHeader('Content-Type'); // Parse out just the content type from the header (ignore the charset)
980
-
981
- if (contentType) contentType = contentType.split(';')[0];
982
- var serialize = this._serializer || exports.serialize[contentType];
983
-
984
- if (!serialize && isJSON(contentType)) {
985
- serialize = exports.serialize['application/json'];
986
- }
987
-
988
- if (serialize) data = serialize(data);
989
- } // content-length
990
-
991
-
992
- if (data && !req.getHeader('Content-Length')) {
993
- req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data));
994
- }
995
- } // response
996
- // eslint-disable-next-line complexity
997
-
998
-
999
- req.once('response', function (res) {
1000
- debug('%s %s -> %s', _this4.method, _this4.url, res.statusCode);
1001
-
1002
- if (_this4._responseTimeoutTimer) {
1003
- clearTimeout(_this4._responseTimeoutTimer);
1004
- }
1005
-
1006
- if (_this4.piped) {
1007
- return;
1008
- }
1009
-
1010
- var max = _this4._maxRedirects;
1011
- var mime = utils.type(res.headers['content-type'] || '') || 'text/plain';
1012
- var type = mime.split('/')[0];
1013
- var multipart = type === 'multipart';
1014
- var redirect = isRedirect(res.statusCode);
1015
- var responseType = _this4._responseType;
1016
- _this4.res = res; // redirect
1017
-
1018
- if (redirect && _this4._redirects++ !== max) {
1019
- return _this4._redirect(res);
1020
- }
1021
-
1022
- if (_this4.method === 'HEAD') {
1023
- _this4.emit('end');
1024
-
1025
- _this4.callback(null, _this4._emitResponse());
1026
-
1027
- return;
1028
- } // zlib support
1029
-
1030
-
1031
- if (_this4._shouldUnzip(res)) {
1032
- unzip(req, res);
1033
- }
1034
-
1035
- var buffer = _this4._buffer;
1036
-
1037
- if (buffer === undefined && mime in exports.buffer) {
1038
- buffer = Boolean(exports.buffer[mime]);
1039
- }
1040
-
1041
- var parser = _this4._parser;
1042
-
1043
- if (undefined === buffer) {
1044
- if (parser) {
1045
- console.warn("A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`");
1046
- buffer = true;
1047
- }
1048
- }
1049
-
1050
- if (!parser) {
1051
- if (responseType) {
1052
- parser = exports.parse.image; // It's actually a generic Buffer
1053
-
1054
- buffer = true;
1055
- } else if (multipart) {
1056
- var form = new formidable.IncomingForm();
1057
- parser = form.parse.bind(form);
1058
- buffer = true;
1059
- } else if (isImageOrVideo(mime)) {
1060
- parser = exports.parse.image;
1061
- buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent
1062
- } else if (exports.parse[mime]) {
1063
- parser = exports.parse[mime];
1064
- } else if (type === 'text') {
1065
- parser = exports.parse.text;
1066
- buffer = buffer !== false; // everyone wants their own white-labeled json
1067
- } else if (isJSON(mime)) {
1068
- parser = exports.parse['application/json'];
1069
- buffer = buffer !== false;
1070
- } else if (buffer) {
1071
- parser = exports.parse.text;
1072
- } else if (undefined === buffer) {
1073
- parser = exports.parse.image; // It's actually a generic Buffer
1074
-
1075
- buffer = true;
1076
- }
1077
- } // by default only buffer text/*, json and messed up thing from hell
1078
-
1079
-
1080
- if (undefined === buffer && isText(mime) || isJSON(mime)) {
1081
- buffer = true;
1082
- }
1083
-
1084
- _this4._resBuffered = buffer;
1085
- var parserHandlesEnd = false;
1086
-
1087
- if (buffer) {
1088
- // Protectiona against zip bombs and other nuisance
1089
- var responseBytesLeft = _this4._maxResponseSize || 200000000;
1090
- res.on('data', function (buf) {
1091
- responseBytesLeft -= buf.byteLength || buf.length;
1092
-
1093
- if (responseBytesLeft < 0) {
1094
- // This will propagate through error event
1095
- var err = new Error('Maximum response size reached');
1096
- err.code = 'ETOOLARGE'; // Parsers aren't required to observe error event,
1097
- // so would incorrectly report success
1098
-
1099
- parserHandlesEnd = false; // Will emit error event
1100
-
1101
- res.destroy(err);
1102
- }
1103
- });
1104
- }
1105
-
1106
- if (parser) {
1107
- try {
1108
- // Unbuffered parsers are supposed to emit response early,
1109
- // which is weird BTW, because response.body won't be there.
1110
- parserHandlesEnd = buffer;
1111
- parser(res, function (err, obj, files) {
1112
- if (_this4.timedout) {
1113
- // Timeout has already handled all callbacks
1114
- return;
1115
- } // Intentional (non-timeout) abort is supposed to preserve partial response,
1116
- // even if it doesn't parse.
1117
-
1118
-
1119
- if (err && !_this4._aborted) {
1120
- return _this4.callback(err);
1121
- }
1122
-
1123
- if (parserHandlesEnd) {
1124
- _this4.emit('end');
1125
-
1126
- _this4.callback(null, _this4._emitResponse(obj, files));
1127
- }
1128
- });
1129
- } catch (err) {
1130
- _this4.callback(err);
1131
-
1132
- return;
1133
- }
1134
- }
1135
-
1136
- _this4.res = res; // unbuffered
1137
-
1138
- if (!buffer) {
1139
- debug('unbuffered %s %s', _this4.method, _this4.url);
1140
-
1141
- _this4.callback(null, _this4._emitResponse());
1142
-
1143
- if (multipart) return; // allow multipart to handle end event
1144
-
1145
- res.once('end', function () {
1146
- debug('end %s %s', _this4.method, _this4.url);
1147
-
1148
- _this4.emit('end');
1149
- });
1150
- return;
1151
- } // terminating events
1152
-
1153
-
1154
- res.once('error', function (err) {
1155
- parserHandlesEnd = false;
1156
-
1157
- _this4.callback(err, null);
1158
- });
1159
- if (!parserHandlesEnd) res.once('end', function () {
1160
- debug('end %s %s', _this4.method, _this4.url); // TODO: unless buffering emit earlier to stream
1161
-
1162
- _this4.emit('end');
1163
-
1164
- _this4.callback(null, _this4._emitResponse());
1165
- });
1166
- });
1167
- this.emit('request', this);
1168
-
1169
- var getProgressMonitor = function getProgressMonitor() {
1170
- var lengthComputable = true;
1171
- var total = req.getHeader('Content-Length');
1172
- var loaded = 0;
1173
- var progress = new Stream.Transform();
1174
-
1175
- progress._transform = function (chunk, encoding, cb) {
1176
- loaded += chunk.length;
1177
-
1178
- _this4.emit('progress', {
1179
- direction: 'upload',
1180
- lengthComputable: lengthComputable,
1181
- loaded: loaded,
1182
- total: total
1183
- });
1184
-
1185
- cb(null, chunk);
1186
- };
1187
-
1188
- return progress;
1189
- };
1190
-
1191
- var bufferToChunks = function bufferToChunks(buffer) {
1192
- var chunkSize = 16 * 1024; // default highWaterMark value
1193
-
1194
- var chunking = new Stream.Readable();
1195
- var totalLength = buffer.length;
1196
- var remainder = totalLength % chunkSize;
1197
- var cutoff = totalLength - remainder;
1198
-
1199
- for (var i = 0; i < cutoff; i += chunkSize) {
1200
- var chunk = buffer.slice(i, i + chunkSize);
1201
- chunking.push(chunk);
1202
- }
1203
-
1204
- if (remainder > 0) {
1205
- var remainderBuffer = buffer.slice(-remainder);
1206
- chunking.push(remainderBuffer);
1207
- }
1208
-
1209
- chunking.push(null); // no more data
1210
-
1211
- return chunking;
1212
- }; // if a FormData instance got created, then we send that as the request body
1213
-
1214
-
1215
- var formData = this._formData;
1216
-
1217
- if (formData) {
1218
- // set headers
1219
- var headers = formData.getHeaders();
1220
-
1221
- for (var i in headers) {
1222
- if (Object.prototype.hasOwnProperty.call(headers, i)) {
1223
- debug('setting FormData header: "%s: %s"', i, headers[i]);
1224
- req.setHeader(i, headers[i]);
1225
- }
1226
- } // attempt to get "Content-Length" header
1227
- // eslint-disable-next-line handle-callback-err
1228
-
1229
-
1230
- formData.getLength(function (err, length) {
1231
- // TODO: Add chunked encoding when no length (if err)
1232
- debug('got FormData Content-Length: %s', length);
1233
-
1234
- if (typeof length === 'number') {
1235
- req.setHeader('Content-Length', length);
1236
- }
1237
-
1238
- formData.pipe(getProgressMonitor()).pipe(req);
1239
- });
1240
- } else if (Buffer.isBuffer(data)) {
1241
- bufferToChunks(data).pipe(getProgressMonitor()).pipe(req);
1242
- } else {
1243
- req.end(data);
1244
- }
1245
- }; // Check whether response has a non-0-sized gzip-encoded body
1246
-
1247
-
1248
- Request.prototype._shouldUnzip = function (res) {
1249
- if (res.statusCode === 204 || res.statusCode === 304) {
1250
- // These aren't supposed to have any body
1251
- return false;
1252
- } // header content is a string, and distinction between 0 and no information is crucial
1253
-
1254
-
1255
- if (res.headers['content-length'] === '0') {
1256
- // We know that the body is empty (unfortunately, this check does not cover chunked encoding)
1257
- return false;
1258
- } // console.log(res);
1259
-
1260
-
1261
- return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']);
1262
- };
1263
- /**
1264
- * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses.
1265
- *
1266
- * When making a request to a URL with a hostname exactly matching a key in the object,
1267
- * use the given IP address to connect, instead of using DNS to resolve the hostname.
1268
- *
1269
- * A special host `*` matches every hostname (keep redirects in mind!)
1270
- *
1271
- * request.connect({
1272
- * 'test.example.com': '127.0.0.1',
1273
- * 'ipv6.example.com': '::1',
1274
- * })
1275
- */
1276
-
1277
-
1278
- Request.prototype.connect = function (connectOverride) {
1279
- if (typeof connectOverride === 'string') {
1280
- this._connectOverride = {
1281
- '*': connectOverride
1282
- };
1283
- } else if (_typeof(connectOverride) === 'object') {
1284
- this._connectOverride = connectOverride;
1285
- } else {
1286
- this._connectOverride = undefined;
1287
- }
1288
-
1289
- return this;
1290
- };
1291
-
1292
- Request.prototype.trustLocalhost = function (toggle) {
1293
- this._trustLocalhost = toggle === undefined ? true : toggle;
1294
- return this;
1295
- }; // generate HTTP verb methods
1296
-
1297
-
1298
- if (!methods.includes('del')) {
1299
- // create a copy so we don't cause conflicts with
1300
- // other packages using the methods package and
1301
- // npm 3.x
1302
- methods = methods.slice(0);
1303
- methods.push('del');
1304
- }
1305
-
1306
- methods.forEach(function (method) {
1307
- var name = method;
1308
- method = method === 'del' ? 'delete' : method;
1309
- method = method.toUpperCase();
1310
-
1311
- request[name] = function (url, data, fn) {
1312
- var req = request(method, url);
1313
-
1314
- if (typeof data === 'function') {
1315
- fn = data;
1316
- data = null;
1317
- }
1318
-
1319
- if (data) {
1320
- if (method === 'GET' || method === 'HEAD') {
1321
- req.query(data);
1322
- } else {
1323
- req.send(data);
1324
- }
1325
- }
1326
-
1327
- if (fn) req.end(fn);
1328
- return req;
1329
- };
1330
- });
1331
- /**
1332
- * Check if `mime` is text and should be buffered.
1333
- *
1334
- * @param {String} mime
1335
- * @return {Boolean}
1336
- * @api public
1337
- */
1338
-
1339
- function isText(mime) {
1340
- var parts = mime.split('/');
1341
- var type = parts[0];
1342
- var subtype = parts[1];
1343
- return type === 'text' || subtype === 'x-www-form-urlencoded';
1344
- }
1345
-
1346
- function isImageOrVideo(mime) {
1347
- var type = mime.split('/')[0];
1348
- return type === 'image' || type === 'video';
1349
- }
1350
- /**
1351
- * Check if `mime` is json or has +json structured syntax suffix.
1352
- *
1353
- * @param {String} mime
1354
- * @return {Boolean}
1355
- * @api private
1356
- */
1357
-
1358
-
1359
- function isJSON(mime) {
1360
- // should match /json or +json
1361
- // but not /json-seq
1362
- return /[/+]json($|[^-\w])/.test(mime);
1363
- }
1364
- /**
1365
- * Check if we should follow the redirect `code`.
1366
- *
1367
- * @param {Number} code
1368
- * @return {Boolean}
1369
- * @api private
1370
- */
1371
-
1372
-
1373
- function isRedirect(code) {
1374
- return [301, 302, 303, 305, 307, 308].includes(code);
1375
- }
1376
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2luZGV4LmpzIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJwYXJzZSIsImZvcm1hdCIsInJlc29sdmUiLCJTdHJlYW0iLCJodHRwcyIsImh0dHAiLCJmcyIsInpsaWIiLCJ1dGlsIiwicXMiLCJtaW1lIiwibWV0aG9kcyIsIkZvcm1EYXRhIiwiZm9ybWlkYWJsZSIsImRlYnVnIiwiQ29va2llSmFyIiwic2VtdmVyIiwic2FmZVN0cmluZ2lmeSIsInV0aWxzIiwiUmVxdWVzdEJhc2UiLCJ1bnppcCIsIlJlc3BvbnNlIiwiaHR0cDIiLCJndGUiLCJwcm9jZXNzIiwidmVyc2lvbiIsInJlcXVlc3QiLCJtZXRob2QiLCJ1cmwiLCJleHBvcnRzIiwiUmVxdWVzdCIsImVuZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm1vZHVsZSIsImFnZW50Iiwibm9vcCIsImRlZmluZSIsInByb3RvY29scyIsInNlcmlhbGl6ZSIsInN0cmluZ2lmeSIsImJ1ZmZlciIsIl9pbml0SGVhZGVycyIsInJlcSIsIl9oZWFkZXIiLCJoZWFkZXIiLCJjYWxsIiwiX2VuYWJsZUh0dHAyIiwiQm9vbGVhbiIsImVudiIsIkhUVFAyX1RFU1QiLCJfYWdlbnQiLCJfZm9ybURhdGEiLCJ3cml0YWJsZSIsIl9yZWRpcmVjdHMiLCJyZWRpcmVjdHMiLCJjb29raWVzIiwiX3F1ZXJ5IiwicXNSYXciLCJfcmVkaXJlY3RMaXN0IiwiX3N0cmVhbVJlcXVlc3QiLCJvbmNlIiwiY2xlYXJUaW1lb3V0IiwiYmluZCIsImluaGVyaXRzIiwicHJvdG90eXBlIiwiYm9vbCIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXR0YWNoIiwiZmllbGQiLCJmaWxlIiwib3B0aW9ucyIsIl9kYXRhIiwibyIsImZpbGVuYW1lIiwiY3JlYXRlUmVhZFN0cmVhbSIsInBhdGgiLCJfZ2V0Rm9ybURhdGEiLCJhcHBlbmQiLCJvbiIsImVyciIsImNhbGxlZCIsImNhbGxiYWNrIiwiYWJvcnQiLCJ0eXBlIiwic2V0IiwiaW5jbHVkZXMiLCJnZXRUeXBlIiwiYWNjZXB0IiwicXVlcnkiLCJ2YWwiLCJwdXNoIiwiT2JqZWN0IiwiYXNzaWduIiwid3JpdGUiLCJkYXRhIiwiZW5jb2RpbmciLCJwaXBlIiwic3RyZWFtIiwicGlwZWQiLCJfcGlwZUNvbnRpbnVlIiwicmVzIiwiaXNSZWRpcmVjdCIsInN0YXR1c0NvZGUiLCJfbWF4UmVkaXJlY3RzIiwiX3JlZGlyZWN0IiwiX2VtaXRSZXNwb25zZSIsIl9hYm9ydGVkIiwiX3Nob3VsZFVuemlwIiwidW56aXBPYmoiLCJjcmVhdGVVbnppcCIsImNvZGUiLCJlbWl0IiwiX2J1ZmZlciIsImhlYWRlcnMiLCJsb2NhdGlvbiIsInJlc3VtZSIsImdldEhlYWRlcnMiLCJfaGVhZGVycyIsImNoYW5nZXNPcmlnaW4iLCJob3N0IiwiY2xlYW5IZWFkZXIiLCJfZW5kQ2FsbGVkIiwiX2NhbGxiYWNrIiwiYXV0aCIsInVzZXIiLCJwYXNzIiwiZW5jb2RlciIsInN0cmluZyIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsIl9hdXRoIiwiY2EiLCJjZXJ0IiwiX2NhIiwia2V5IiwiX2tleSIsInBmeCIsImlzQnVmZmVyIiwiX3BmeCIsIl9wYXNzcGhyYXNlIiwicGFzc3BocmFzZSIsIl9jZXJ0IiwiZGlzYWJsZVRMU0NlcnRzIiwiX2Rpc2FibGVUTFNDZXJ0cyIsImluZGljZXMiLCJzdHJpY3ROdWxsSGFuZGxpbmciLCJfZmluYWxpemVRdWVyeVN0cmluZyIsInJldHJpZXMiLCJfcmV0cmllcyIsInF1ZXJ5U3RyaW5nQmFja3RpY2tzIiwicXVlcnlTdGFydEluZGV4IiwiaW5kZXhPZiIsInF1ZXJ5U3RyaW5nIiwic2xpY2UiLCJtYXRjaCIsImkiLCJyZXBsYWNlIiwic2VhcmNoIiwicGF0aG5hbWUiLCJ0ZXN0IiwicHJvdG9jb2wiLCJzcGxpdCIsInVuaXhQYXJ0cyIsInNvY2tldFBhdGgiLCJfY29ubmVjdE92ZXJyaWRlIiwiaG9zdG5hbWUiLCJuZXdIb3N0IiwibmV3UG9ydCIsInBvcnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEIiwic2VydmVybmFtZSIsIl90cnVzdExvY2FsaG9zdCIsIm1vZCIsInNldFByb3RvY29sIiwic2V0Tm9EZWxheSIsInNldEhlYWRlciIsInJlc3BvbnNlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImhhc093blByb3BlcnR5IiwidG1wSmFyIiwic2V0Q29va2llcyIsImNvb2tpZSIsImdldENvb2tpZXMiLCJDb29raWVBY2Nlc3NJbmZvIiwiQWxsIiwidG9WYWx1ZVN0cmluZyIsIl9zaG91bGRSZXRyeSIsIl9yZXRyeSIsImZuIiwiY29uc29sZSIsIndhcm4iLCJfaXNSZXNwb25zZU9LIiwibXNnIiwiU1RBVFVTX0NPREVTIiwic3RhdHVzIiwiZXJyXyIsIl9tYXhSZXRyaWVzIiwibGlzdGVuZXJzIiwiX2lzSG9zdCIsIm9iaiIsImJvZHkiLCJmaWxlcyIsIl9lbmQiLCJfc2V0VGltZW91dHMiLCJfaGVhZGVyU2VudCIsImNvbnRlbnRUeXBlIiwiZ2V0SGVhZGVyIiwiX3NlcmlhbGl6ZXIiLCJpc0pTT04iLCJieXRlTGVuZ3RoIiwiX3Jlc3BvbnNlVGltZW91dFRpbWVyIiwibWF4IiwibXVsdGlwYXJ0IiwicmVkaXJlY3QiLCJyZXNwb25zZVR5cGUiLCJfcmVzcG9uc2VUeXBlIiwicGFyc2VyIiwiX3BhcnNlciIsImltYWdlIiwiZm9ybSIsIkluY29taW5nRm9ybSIsImlzSW1hZ2VPclZpZGVvIiwidGV4dCIsImlzVGV4dCIsIl9yZXNCdWZmZXJlZCIsInBhcnNlckhhbmRsZXNFbmQiLCJyZXNwb25zZUJ5dGVzTGVmdCIsIl9tYXhSZXNwb25zZVNpemUiLCJidWYiLCJkZXN0cm95IiwidGltZWRvdXQiLCJnZXRQcm9ncmVzc01vbml0b3IiLCJsZW5ndGhDb21wdXRhYmxlIiwidG90YWwiLCJsb2FkZWQiLCJwcm9ncmVzcyIsIlRyYW5zZm9ybSIsIl90cmFuc2Zvcm0iLCJjaHVuayIsImNiIiwiZGlyZWN0aW9uIiwiYnVmZmVyVG9DaHVua3MiLCJjaHVua1NpemUiLCJjaHVua2luZyIsIlJlYWRhYmxlIiwidG90YWxMZW5ndGgiLCJyZW1haW5kZXIiLCJjdXRvZmYiLCJyZW1haW5kZXJCdWZmZXIiLCJmb3JtRGF0YSIsImdldExlbmd0aCIsImNvbm5lY3QiLCJjb25uZWN0T3ZlcnJpZGUiLCJ0cnVzdExvY2FsaG9zdCIsInRvZ2dsZSIsImZvckVhY2giLCJuYW1lIiwidG9VcHBlckNhc2UiLCJzZW5kIiwicGFydHMiLCJzdWJ0eXBlIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7OztBQUlBO2VBQ21DQSxPQUFPLENBQUMsS0FBRCxDO0lBQWxDQyxLLFlBQUFBLEs7SUFBT0MsTSxZQUFBQSxNO0lBQVFDLE8sWUFBQUEsTzs7QUFDdkIsSUFBTUMsTUFBTSxHQUFHSixPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxJQUFNSyxLQUFLLEdBQUdMLE9BQU8sQ0FBQyxPQUFELENBQXJCOztBQUNBLElBQU1NLElBQUksR0FBR04sT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBTU8sRUFBRSxHQUFHUCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxJQUFNUSxJQUFJLEdBQUdSLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLElBQU1TLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBTVUsRUFBRSxHQUFHVixPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxJQUFNVyxJQUFJLEdBQUdYLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLElBQUlZLE9BQU8sR0FBR1osT0FBTyxDQUFDLFNBQUQsQ0FBckI7O0FBQ0EsSUFBTWEsUUFBUSxHQUFHYixPQUFPLENBQUMsV0FBRCxDQUF4Qjs7QUFDQSxJQUFNYyxVQUFVLEdBQUdkLE9BQU8sQ0FBQyxZQUFELENBQTFCOztBQUNBLElBQU1lLEtBQUssR0FBR2YsT0FBTyxDQUFDLE9BQUQsQ0FBUCxDQUFpQixZQUFqQixDQUFkOztBQUNBLElBQU1n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QUFFQSxTQUFPL0UsSUFBSSxLQUFLLE9BQVQsSUFBb0JBLElBQUksS0FBSyxPQUFwQztBQUNEO0FBRUQ7Ozs7Ozs7OztBQVFBLFNBQVNnSSxNQUFULENBQWdCM00sSUFBaEIsRUFBc0I7QUFDcEI7QUFDQTtBQUNBLFNBQU8scUJBQXFCd0osSUFBckIsQ0FBMEJ4SixJQUExQixDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7O0FBUUEsU0FBUzZGLFVBQVQsQ0FBb0JTLElBQXBCLEVBQTBCO0FBQ3hCLFNBQU8sQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsR0FBckIsRUFBMEIsR0FBMUIsRUFBK0J6QixRQUEvQixDQUF3Q3lCLElBQXhDLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby1kZXByZWNhdGVkLWFwaVxuY29uc3QgeyBwYXJzZSwgZm9ybWF0LCByZXNvbHZlIH0gPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgcXMgPSByZXF1aXJlKCdxcycpO1xuY29uc3QgbWltZSA9IHJlcXVpcmUoJ21pbWUnKTtcbmxldCBtZXRob2RzID0gcmVxdWlyZSgnbWV0aG9kcycpO1xuY29uc3QgRm9ybURhdGEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbmNvbnN0IGZvcm1pZGFibGUgPSByZXF1aXJlKCdmb3JtaWRhYmxlJyk7XG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N1cGVyYWdlbnQnKTtcbmNvbnN0IENvb2tpZUphciA9IHJlcXVpcmUoJ2Nvb2tpZWphcicpO1xuY29uc3Qgc2VtdmVyID0gcmVxdWlyZSgnc2VtdmVyJyk7XG5jb25zdCBzYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5jb25zdCBSZXF1ZXN0QmFzZSA9IHJlcXVpcmUoJy4uL3JlcXVlc3QtYmFzZScpO1xuY29uc3QgeyB1bnppcCB9ID0gcmVxdWlyZSgnLi91bnppcCcpO1xuY29uc3QgUmVzcG9uc2UgPSByZXF1aXJlKCcuL3Jlc3BvbnNlJyk7XG5cbmxldCBodHRwMjtcblxuaWYgKHNlbXZlci5ndGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCcuL2h0dHAyd3JhcHBlcicpO1xuXG5mdW5jdGlvbiByZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0O1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIEV4cG9zZSBgUmVxdWVzdGAuXG4gKi9cblxuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcblxuLyoqXG4gKiBFeHBvc2UgdGhlIGFnZW50IGZ1bmN0aW9uXG4gKi9cblxuZXhwb3J0cy5hZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKTtcblxuLyoqXG4gKiBOb29wLlxuICovXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbmV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuLyoqXG4gKiBEZWZpbmUgXCJmb3JtXCIgbWltZSB0eXBlLlxuICovXG5cbm1pbWUuZGVmaW5lKFxuICB7XG4gICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IFsnZm9ybScsICd1cmxlbmNvZGVkJywgJ2Zvcm0tZGF0YSddXG4gIH0sXG4gIHRydWVcbik7XG5cbi8qKlxuICogUHJvdG9jb2wgbWFwLlxuICovXG5cbmV4cG9ydHMucHJvdG9jb2xzID0ge1xuICAnaHR0cDonOiBodHRwLFxuICAnaHR0cHM6JzogaHR0cHMsXG4gICdodHRwMjonOiBodHRwMlxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gbWFwLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihvYmope1xuICogICAgICAgcmV0dXJuICdnZW5lcmF0ZWQgeG1sIGhlcmUnO1xuICogICAgIH07XG4gKlxuICovXG5cbmV4cG9ydHMuc2VyaWFsaXplID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcXMuc3RyaW5naWZ5LFxuICAnYXBwbGljYXRpb24vanNvbic6IHNhZmVTdHJpbmdpZnlcbn07XG5cbi8qKlxuICogRGVmYXVsdCBwYXJzZXJzLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnBhcnNlWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKHJlcywgZm4pe1xuICogICAgICAgZm4obnVsbCwgcmVzKTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5cbi8qKlxuICogRGVmYXVsdCBidWZmZXJpbmcgbWFwLiBDYW4gYmUgdXNlZCB0byBzZXQgY2VydGFpblxuICogcmVzcG9uc2UgdHlwZXMgdG8gYnVmZmVyL25vdCBidWZmZXIuXG4gKlxuICogICAgIHN1cGVyYWdlbnQuYnVmZmVyWydhcHBsaWNhdGlvbi94bWwnXSA9IHRydWU7XG4gKi9cbmV4cG9ydHMuYnVmZmVyID0ge307XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBoZWFkZXIgdHJhY2tpbmcgcHJvcGVydGllcyBvbiBhIHJlcXVlc3QgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcSB0aGUgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdEhlYWRlcnMocmVxKSB7XG4gIHJlcS5faGVhZGVyID0ge1xuICAgIC8vIGNvZXJjZXMgaGVhZGVyIG5hbWVzIHRvIGxvd2VyY2FzZVxuICB9O1xuICByZXEuaGVhZGVyID0ge1xuICAgIC8vIHByZXNlcnZlcyBoZWFkZXIgbmFtZSBjYXNlXG4gIH07XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVxdWVzdGAgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAgYW5kIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgdXJsID0gZm9ybWF0KHVybCk7XG4gIHRoaXMuX2VuYWJsZUh0dHAyID0gQm9vbGVhbihwcm9jZXNzLmVudi5IVFRQMl9URVNUKTsgLy8gaW50ZXJuYWwgb25seVxuICB0aGlzLl9hZ2VudCA9IGZhbHNlO1xuICB0aGlzLl9mb3JtRGF0YSA9IG51bGw7XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgX2luaXRIZWFkZXJzKHRoaXMpO1xuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5fcmVkaXJlY3RzID0gMDtcbiAgdGhpcy5yZWRpcmVjdHMobWV0aG9kID09PSAnSEVBRCcgPyAwIDogNSk7XG4gIHRoaXMuY29va2llcyA9ICcnO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5ID0gW107XG4gIHRoaXMucXNSYXcgPSB0aGlzLl9xdWVyeTsgLy8gVW51c2VkLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seVxuICB0aGlzLl9yZWRpcmVjdExpc3QgPSBbXTtcbiAgdGhpcy5fc3RyZWFtUmVxdWVzdCA9IGZhbHNlO1xuICB0aGlzLm9uY2UoJ2VuZCcsIHRoaXMuY2xlYXJUaW1lb3V0LmJpbmQodGhpcykpO1xufVxuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYCAod2hpY2ggaW5oZXJpdHMgZnJvbSBgRXZlbnRFbWl0dGVyYCkuXG4gKiBNaXhpbiBgUmVxdWVzdEJhc2VgLlxuICovXG51dGlsLmluaGVyaXRzKFJlcXVlc3QsIFN0cmVhbSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuUmVxdWVzdEJhc2UoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIEVuYWJsZSBvciBEaXNhYmxlIGh0dHAyLlxuICpcbiAqIEVuYWJsZSBodHRwMi5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QuZ2V0KCdodHRwOi8vbG9jYWxob3N0LycpXG4gKiAgIC5odHRwMigpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIHJlcXVlc3QuZ2V0KCdodHRwOi8vbG9jYWxob3N0LycpXG4gKiAgIC5odHRwMih0cnVlKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIERpc2FibGUgaHR0cDIuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0ID0gcmVxdWVzdC5odHRwMigpO1xuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKGZhbHNlKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZW5hYmxlXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuaHR0cDIgPSBmdW5jdGlvbihib29sKSB7XG4gIGlmIChleHBvcnRzLnByb3RvY29sc1snaHR0cDI6J10gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdzdXBlcmFnZW50OiB0aGlzIHZlcnNpb24gb2YgTm9kZS5qcyBkb2VzIG5vdCBzdXBwb3J0IGh0dHAyJ1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVIdHRwMiA9IGJvb2wgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBib29sO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUXVldWUgdGhlIGdpdmVuIGBmaWxlYCBhcyBhbiBhdHRhY2htZW50IHRvIHRoZSBzcGVjaWZpZWQgYGZpZWxkYCxcbiAqIHdpdGggb3B0aW9uYWwgYG9wdGlvbnNgIChvciBmaWxlbmFtZSkuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmllbGQnLCBCdWZmZXIuZnJvbSgnPGI+SGVsbG8gd29ybGQ8L2I+JyksICdoZWxsby5odG1sJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBBIGZpbGVuYW1lIG1heSBhbHNvIGJlIHVzZWQ6XG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmlsZXMnLCAnaW1hZ2UuanBnJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfGZzLlJlYWRTdHJlYW18QnVmZmVyfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbihmaWVsZCwgZmlsZSwgb3B0aW9ucykge1xuICBpZiAoZmlsZSkge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBlcmFnZW50IGNhbid0IG1peCAuc2VuZCgpIGFuZCAuYXR0YWNoKClcIik7XG4gICAgfVxuXG4gICAgbGV0IG8gPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG8gPSB7IGZpbGVuYW1lOiBvcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFvLmZpbGVuYW1lKSBvLmZpbGVuYW1lID0gZmlsZTtcbiAgICAgIGRlYnVnKCdjcmVhdGluZyBgZnMuUmVhZFN0cmVhbWAgaW5zdGFuY2UgZm9yIGZpbGU6ICVzJywgZmlsZSk7XG4gICAgICBmaWxlID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKTtcbiAgICB9IGVsc2UgaWYgKCFvLmZpbGVuYW1lICYmIGZpbGUucGF0aCkge1xuICAgICAgby5maWxlbmFtZSA9IGZpbGUucGF0aDtcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChmaWVsZCwgZmlsZSwgbyk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9nZXRGb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2Zvcm1EYXRhKSB7XG4gICAgdGhpcy5fZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICB0aGlzLl9mb3JtRGF0YS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgZGVidWcoJ0Zvcm1EYXRhIGVycm9yJywgZXJyKTtcbiAgICAgIGlmICh0aGlzLmNhbGxlZCkge1xuICAgICAgICAvLyBUaGUgcmVxdWVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBhbmQgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuXG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB0aGUgZXJyb3IuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgdGhpcy5hYm9ydCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2Zvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBHZXRzL3NldHMgdGhlIGBBZ2VudGAgdG8gdXNlIGZvciB0aGlzIEhUVFAgcmVxdWVzdC4gVGhlIGRlZmF1bHQgKGlmIHRoaXNcbiAqIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQpIGlzIHRvIG9wdCBvdXQgb2YgY29ubmVjdGlvbiBwb29saW5nIChgYWdlbnQ6IGZhbHNlYCkuXG4gKlxuICogQHBhcmFtIHtodHRwLkFnZW50fSBhZ2VudFxuICogQHJldHVybiB7aHR0cC5BZ2VudH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWdlbnQgPSBmdW5jdGlvbihhZ2VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX2FnZW50O1xuICB0aGlzLl9hZ2VudCA9IGFnZW50O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IF9Db250ZW50LVR5cGVfIHJlc3BvbnNlIGhlYWRlciBwYXNzZWQgdGhyb3VnaCBgbWltZS5nZXRUeXBlKClgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgneG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAuc2VuZChqc29uc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLnNlbmQoanNvbnN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHJldHVybiB0aGlzLnNldChcbiAgICAnQ29udGVudC1UeXBlJyxcbiAgICB0eXBlLmluY2x1ZGVzKCcvJykgPyB0eXBlIDogbWltZS5nZXRUeXBlKHR5cGUpXG4gICk7XG59O1xuXG4vKipcbiAqIFNldCBfQWNjZXB0XyByZXNwb25zZSBoZWFkZXIgcGFzc2VkIHRocm91Z2ggYG1pbWUuZ2V0VHlwZSgpYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHN1cGVyYWdlbnQudHlwZXMuanNvbiA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjY2VwdFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KCdBY2NlcHQnLCB0eXBlLmluY2x1ZGVzKCcvJykgPyB0eXBlIDogbWltZS5nZXRUeXBlKHR5cGUpKTtcbn07XG5cbi8qKlxuICogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIHJlcXVlc3QuZ2V0KCcvc2hvZXMnKVxuICogICAgIC5xdWVyeSgnc2l6ZT0xMCcpXG4gKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbih2YWwpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5fcXVlcnkucHVzaCh2YWwpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5xcywgdmFsKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSByYXcgYGRhdGFgIC8gYGVuY29kaW5nYCB0byB0aGUgc29ja2V0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ30gZGF0YVxuICogQHBhcmFtIHtTdHJpbmd9IGVuY29kaW5nXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IHJlcSA9IHRoaXMucmVxdWVzdCgpO1xuICBpZiAoIXRoaXMuX3N0cmVhbVJlcXVlc3QpIHtcbiAgICB0aGlzLl9zdHJlYW1SZXF1ZXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZXEud3JpdGUoZGF0YSwgZW5jb2RpbmcpO1xufTtcblxuLyoqXG4gKiBQaXBlIHRoZSByZXF1ZXN0IGJvZHkgdG8gYHN0cmVhbWAuXG4gKlxuICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmVhbX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKHN0cmVhbSwgb3B0aW9ucykge1xuICB0aGlzLnBpcGVkID0gdHJ1ZTsgLy8gSEFDSy4uLlxuICB0aGlzLmJ1ZmZlcihmYWxzZSk7XG4gIHRoaXMuZW5kKCk7XG4gIHJldHVybiB0aGlzLl9waXBlQ29udGludWUoc3RyZWFtLCBvcHRpb25zKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9waXBlQ29udGludWUgPSBmdW5jdGlvbihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgdGhpcy5yZXEub25jZSgncmVzcG9uc2UnLCByZXMgPT4ge1xuICAgIC8vIHJlZGlyZWN0XG4gICAgaWYgKFxuICAgICAgaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkgJiZcbiAgICAgIHRoaXMuX3JlZGlyZWN0cysrICE9PSB0aGlzLl9tYXhSZWRpcmVjdHNcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdChyZXMpID09PSB0aGlzXG4gICAgICAgID8gdGhpcy5fcGlwZUNvbnRpbnVlKHN0cmVhbSwgb3B0aW9ucylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG4gICAgdGhpcy5fZW1pdFJlc3BvbnNlKCk7XG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9zaG91bGRVbnppcChyZXMpKSB7XG4gICAgICBjb25zdCB1bnppcE9iaiA9IHpsaWIuY3JlYXRlVW56aXAoKTtcbiAgICAgIHVuemlwT2JqLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdaX0JVRl9FUlJPUicpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIGlnbm9yZWQgYnkgYnJvd3NlcnMgYW5kIGN1cmxcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLnBpcGUodW56aXBPYmopLnBpcGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnBpcGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXMub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2FibGUgYnVmZmVyaW5nLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFt2YWxdXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYnVmZmVyID0gZnVuY3Rpb24odmFsKSB7XG4gIHRoaXMuX2J1ZmZlciA9IHZhbCAhPT0gZmFsc2U7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZWRpcmVjdCB0byBgdXJsXG4gKlxuICogQHBhcmFtIHtJbmNvbWluZ01lc3NhZ2V9IHJlc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fcmVkaXJlY3QgPSBmdW5jdGlvbihyZXMpIHtcbiAgbGV0IHVybCA9IHJlcy5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKG5ldyBFcnJvcignTm8gbG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCcpLCByZXMpO1xuICB9XG5cbiAgZGVidWcoJ3JlZGlyZWN0ICVzIC0+ICVzJywgdGhpcy51cmwsIHVybCk7XG5cbiAgLy8gbG9jYXRpb25cbiAgdXJsID0gcmVzb2x2ZSh0aGlzLnVybCwgdXJsKTtcblxuICAvLyBlbnN1cmUgdGhlIHJlc3BvbnNlIGlzIGJlaW5nIGNvbnN1bWVkXG4gIC8vIHRoaXMgaXMgcmVxdWlyZWQgZm9yIE5vZGUgdjAuMTArXG4gIHJlcy5yZXN1bWUoKTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMucmVxLmdldEhlYWRlcnMgPyB0aGlzLnJlcS5nZXRIZWFkZXJzKCkgOiB0aGlzLnJlcS5faGVhZGVycztcblxuICBjb25zdCBjaGFuZ2VzT3JpZ2luID0gcGFyc2UodXJsKS5ob3N0ICE9PSBwYXJzZSh0aGlzLnVybCkuaG9zdDtcblxuICAvLyBpbXBsZW1lbnRhdGlvbiBvZiAzMDIgZm9sbG93aW5nIGRlZmFjdG8gc3RhbmRhcmRcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikge1xuICAgIC8vIHN0cmlwIENvbnRlbnQtKiByZWxhdGVkIGZpZWxkc1xuICAgIC8vIGluIGNhc2Ugb2YgUE9TVCBldGNcbiAgICBoZWFkZXJzID0gdXRpbHMuY2xlYW5IZWFkZXIoaGVhZGVycywgY2hhbmdlc09yaWdpbik7XG5cbiAgICAvLyBmb3JjZSBHRVRcbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMubWV0aG9kID09PSAnSEVBRCcgPyAnSEVBRCcgOiAnR0VUJztcblxuICAgIC8vIGNsZWFyIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vIDMwMyBpcyBhbHdheXMgR0VUXG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMzAzKSB7XG4gICAgLy8gc3RyaXAgQ29udGVudC0qIHJlbGF0ZWQgZmllbGRzXG4gICAgLy8gaW4gY2FzZSBvZiBQT1NUIGV0Y1xuICAgIGhlYWRlcnMgPSB1dGlscy5jbGVhbkhlYWRlcihoZWFkZXJzLCBjaGFuZ2VzT3JpZ2luKTtcblxuICAgIC8vIGZvcmNlIG1ldGhvZFxuICAgIHRoaXMubWV0aG9kID0gJ0dFVCc7XG5cbiAgICAvLyBjbGVhciBkYXRhXG4gICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gIH1cblxuICAvLyAzMDcgcHJlc2VydmVzIG1ldGhvZFxuICAvLyAzMDggcHJlc2VydmVzIG1ldGhvZFxuICBkZWxldGUgaGVhZGVycy5ob3N0O1xuXG4gIGRlbGV0ZSB0aGlzLnJlcTtcbiAgZGVsZXRlIHRoaXMuX2Zvcm1EYXRhO1xuXG4gIC8vIHJlbW92ZSBhbGwgYWRkIGhlYWRlciBleGNlcHQgVXNlci1BZ2VudFxuICBfaW5pdEhlYWRlcnModGhpcyk7XG5cbiAgLy8gcmVkaXJlY3RcbiAgdGhpcy5fZW5kQ2FsbGVkID0gZmFsc2U7XG4gIHRoaXMudXJsID0gdXJsO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7XG4gIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB0aGlzLmVtaXQoJ3JlZGlyZWN0JywgcmVzKTtcbiAgdGhpcy5fcmVkaXJlY3RMaXN0LnB1c2godGhpcy51cmwpO1xuICB0aGlzLmVuZCh0aGlzLl9jYWxsYmFjayk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgLmF1dGgoJ3RvYmknLCAnbGVhcm5ib29zdCcpXG4gKiAgIC5hdXRoKCd0b2JpOmxlYXJuYm9vc3QnKVxuICogICAuYXV0aCgndG9iaScpXG4gKiAgIC5hdXRoKGFjY2Vzc1Rva2VuLCB7IHR5cGU6ICdiZWFyZXInIH0pXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVzZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbcGFzc11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyB3aXRoIGF1dGhvcml6YXRpb24gdHlwZSAnYmFzaWMnIG9yICdiZWFyZXInICgnYmFzaWMnIGlzIGRlZmF1bHQpXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXV0aCA9IGZ1bmN0aW9uKHVzZXIsIHBhc3MsIG9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHBhc3MgPSAnJztcbiAgaWYgKHR5cGVvZiBwYXNzID09PSAnb2JqZWN0JyAmJiBwYXNzICE9PSBudWxsKSB7XG4gICAgLy8gcGFzcyBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlcGxhY2VkIHdpdGggb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBwYXNzO1xuICAgIHBhc3MgPSAnJztcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7IHR5cGU6ICdiYXNpYycgfTtcbiAgfVxuXG4gIGNvbnN0IGVuY29kZXIgPSBzdHJpbmcgPT4gQnVmZmVyLmZyb20oc3RyaW5nKS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgcmV0dXJuIHRoaXMuX2F1dGgodXNlciwgcGFzcywgb3B0aW9ucywgZW5jb2Rlcik7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IEFycmF5fSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2EgPSBmdW5jdGlvbihjZXJ0KSB7XG4gIHRoaXMuX2NhID0gY2VydDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGtleSBvcHRpb24gZm9yIGh0dHBzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBTdHJpbmd9IGNlcnRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5rZXkgPSBmdW5jdGlvbihjZXJ0KSB7XG4gIHRoaXMuX2tleSA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGtleSwgY2VydGlmaWNhdGUsIGFuZCBDQSBjZXJ0cyBvZiB0aGUgY2xpZW50IGluIFBGWCBvciBQS0NTMTIgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucGZ4ID0gZnVuY3Rpb24oY2VydCkge1xuICBpZiAodHlwZW9mIGNlcnQgPT09ICdvYmplY3QnICYmICFCdWZmZXIuaXNCdWZmZXIoY2VydCkpIHtcbiAgICB0aGlzLl9wZnggPSBjZXJ0LnBmeDtcbiAgICB0aGlzLl9wYXNzcGhyYXNlID0gY2VydC5wYXNzcGhyYXNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3BmeCA9IGNlcnQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjbGllbnQgY2VydGlmaWNhdGUgb3B0aW9uIGZvciBodHRwcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2VydCA9IGZ1bmN0aW9uKGNlcnQpIHtcbiAgdGhpcy5fY2VydCA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEbyBub3QgcmVqZWN0IGV4cGlyZWQgb3IgaW52YWxpZCBUTFMgY2VydHMuXG4gKiBzZXRzIGByZWplY3RVbmF1dGhvcml6ZWQ9dHJ1ZWAuIEJlIHdhcm5lZCB0aGF0IHRoaXMgYWxsb3dzIE1JVE0gYXR0YWNrcy5cbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZGlzYWJsZVRMU0NlcnRzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2Rpc2FibGVUTFNDZXJ0cyA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gaHR0cFtzXSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm4ge091dGdvaW5nTWVzc2FnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5SZXF1ZXN0LnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnJlcSkgcmV0dXJuIHRoaXMucmVxO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICB0cnkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gcXMuc3RyaW5naWZ5KHRoaXMucXMsIHtcbiAgICAgIGluZGljZXM6IGZhbHNlLFxuICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB0aGlzLnFzID0ge307XG4gICAgICB0aGlzLl9xdWVyeS5wdXNoKHF1ZXJ5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGxldCB7IHVybCB9ID0gdGhpcztcbiAgY29uc3QgcmV0cmllcyA9IHRoaXMuX3JldHJpZXM7XG5cbiAgLy8gQ2FwdHVyZSBiYWNrdGlja3MgYXMtaXMgZnJvbSB0aGUgZmluYWwgcXVlcnkgc3RyaW5nIGJ1aWx0IGFib3ZlLlxuICAvLyBOb3RlOiB0aGlzJ2xsIG9ubHkgZmluZCBiYWNrdGlja3MgZW50ZXJlZCBpbiByZXEucXVlcnkoU3RyaW5nKVxuICAvLyBjYWxscywgYmVjYXVzZSBxcy5zdHJpbmdpZnkgdW5jb25kaXRpb25hbGx5IGVuY29kZXMgYmFja3RpY2tzLlxuICBsZXQgcXVlcnlTdHJpbmdCYWNrdGlja3M7XG4gIGlmICh1cmwuaW5jbHVkZXMoJ2AnKSkge1xuICAgIGNvbnN0IHF1ZXJ5U3RhcnRJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG5cbiAgICBpZiAocXVlcnlTdGFydEluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB1cmwuc2xpY2UocXVlcnlTdGFydEluZGV4ICsgMSk7XG4gICAgICBxdWVyeVN0cmluZ0JhY2t0aWNrcyA9IHF1ZXJ5U3RyaW5nLm1hdGNoKC9gfCU2MC9nKTtcbiAgICB9XG4gIH1cblxuICAvLyBkZWZhdWx0IHRvIGh0dHA6Ly9cbiAgaWYgKHVybC5pbmRleE9mKCdodHRwJykgIT09IDApIHVybCA9IGBodHRwOi8vJHt1cmx9YDtcbiAgdXJsID0gcGFyc2UodXJsKTtcblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2lvbm1lZGlhL3N1cGVyYWdlbnQvaXNzdWVzLzEzNjdcbiAgaWYgKHF1ZXJ5U3RyaW5nQmFja3RpY2tzKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHVybC5xdWVyeSA9IHVybC5xdWVyeS5yZXBsYWNlKC8lNjAvZywgKCkgPT4gcXVlcnlTdHJpbmdCYWNrdGlja3NbaSsrXSk7XG4gICAgdXJsLnNlYXJjaCA9IGA/JHt1cmwucXVlcnl9YDtcbiAgICB1cmwucGF0aCA9IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2g7XG4gIH1cblxuICAvLyBzdXBwb3J0IHVuaXggc29ja2V0c1xuICBpZiAoL15odHRwcz9cXCt1bml4Oi8udGVzdCh1cmwucHJvdG9jb2wpID09PSB0cnVlKSB7XG4gICAgLy8gZ2V0IHRoZSBwcm90b2NvbFxuICAgIHVybC5wcm90b2NvbCA9IGAke3VybC5wcm90b2NvbC5zcGxpdCgnKycpWzBdfTpgO1xuXG4gICAgLy8gZ2V0IHRoZSBzb2NrZXQsIHBhdGhcbiAgICBjb25zdCB1bml4UGFydHMgPSB1cmwucGF0aC5tYXRjaCgvXihbXi9dKykoLispJC8pO1xuICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IHVuaXhQYXJ0c1sxXS5yZXBsYWNlKC8lMkYvZywgJy8nKTtcbiAgICB1cmwucGF0aCA9IHVuaXhQYXJ0c1syXTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIElQIGFkZHJlc3Mgb2YgYSBob3N0bmFtZVxuICBpZiAodGhpcy5fY29ubmVjdE92ZXJyaWRlKSB7XG4gICAgY29uc3QgeyBob3N0bmFtZSB9ID0gdXJsO1xuICAgIGNvbnN0IG1hdGNoID1cbiAgICAgIGhvc3RuYW1lIGluIHRoaXMuX2Nvbm5lY3RPdmVycmlkZVxuICAgICAgICA/IHRoaXMuX2Nvbm5lY3RPdmVycmlkZVtob3N0bmFtZV1cbiAgICAgICAgOiB0aGlzLl9jb25uZWN0T3ZlcnJpZGVbJyonXTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIGJhY2t1cCB0aGUgcmVhbCBob3N0XG4gICAgICBpZiAoIXRoaXMuX2hlYWRlci5ob3N0KSB7XG4gICAgICAgIHRoaXMuc2V0KCdob3N0JywgdXJsLmhvc3QpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3SG9zdDtcbiAgICAgIGxldCBuZXdQb3J0O1xuXG4gICAgICBpZiAodHlwZW9mIG1hdGNoID09PSAnb2JqZWN0Jykge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2guaG9zdDtcbiAgICAgICAgbmV3UG9ydCA9IG1hdGNoLnBvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2g7XG4gICAgICAgIG5ld1BvcnQgPSB1cmwucG9ydDtcbiAgICAgIH1cblxuICAgICAgLy8gd3JhcCBbaXB2Nl1cbiAgICAgIHVybC5ob3N0ID0gLzovLnRlc3QobmV3SG9zdCkgPyBgWyR7bmV3SG9zdH1dYCA6IG5ld0hvc3Q7XG4gICAgICBpZiAobmV3UG9ydCkge1xuICAgICAgICB1cmwuaG9zdCArPSBgOiR7bmV3UG9ydH1gO1xuICAgICAgICB1cmwucG9ydCA9IG5ld1BvcnQ7XG4gICAgICB9XG5cbiAgICAgIHVybC5ob3N0bmFtZSA9IG5ld0hvc3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gb3B0aW9uc1xuICBvcHRpb25zLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBvcHRpb25zLnBvcnQgPSB1cmwucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gdXJsLnBhdGg7XG4gIG9wdGlvbnMuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgb3B0aW9ucy5jYSA9IHRoaXMuX2NhO1xuICBvcHRpb25zLmtleSA9IHRoaXMuX2tleTtcbiAgb3B0aW9ucy5wZnggPSB0aGlzLl9wZng7XG4gIG9wdGlvbnMuY2VydCA9IHRoaXMuX2NlcnQ7XG4gIG9wdGlvbnMucGFzc3BocmFzZSA9IHRoaXMuX3Bhc3NwaHJhc2U7XG4gIG9wdGlvbnMuYWdlbnQgPSB0aGlzLl9hZ2VudDtcbiAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPVxuICAgIHR5cGVvZiB0aGlzLl9kaXNhYmxlVExTQ2VydHMgPT09ICdib29sZWFuJ1xuICAgICAgPyAhdGhpcy5fZGlzYWJsZVRMU0NlcnRzXG4gICAgICA6IHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgIT09ICcwJztcblxuICAvLyBBbGxvd3MgcmVxdWVzdC5nZXQoJ2h0dHBzOi8vMS4yLjMuNC8nKS5zZXQoJ0hvc3QnLCAnZXhhbXBsZS5jb20nKVxuICBpZiAodGhpcy5faGVhZGVyLmhvc3QpIHtcbiAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLl9oZWFkZXIuaG9zdC5yZXBsYWNlKC86XFxkKyQvLCAnJyk7XG4gIH1cblxuICBpZiAoXG4gICAgdGhpcy5fdHJ1c3RMb2NhbGhvc3QgJiZcbiAgICAvXig/OmxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLlxcZCt8KDAqOikrOjAqMSkkLy50ZXN0KHVybC5ob3N0bmFtZSlcbiAgKSB7XG4gICAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgY29uc3QgbW9kID0gdGhpcy5fZW5hYmxlSHR0cDJcbiAgICA/IGV4cG9ydHMucHJvdG9jb2xzWydodHRwMjonXS5zZXRQcm90b2NvbCh1cmwucHJvdG9jb2wpXG4gICAgOiBleHBvcnRzLnByb3RvY29sc1t1cmwucHJvdG9jb2xdO1xuXG4gIC8vIHJlcXVlc3RcbiAgdGhpcy5yZXEgPSBtb2QucmVxdWVzdChvcHRpb25zKTtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG5cbiAgLy8gc2V0IHRjcCBubyBkZWxheVxuICByZXEuc2V0Tm9EZWxheSh0cnVlKTtcblxuICBpZiAob3B0aW9ucy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIHJlcS5zZXRIZWFkZXIoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLCBkZWZsYXRlJyk7XG4gIH1cblxuICB0aGlzLnByb3RvY29sID0gdXJsLnByb3RvY29sO1xuICB0aGlzLmhvc3QgPSB1cmwuaG9zdDtcblxuICAvLyBleHBvc2UgZXZlbnRzXG4gIHJlcS5vbmNlKCdkcmFpbicsICgpID0+IHtcbiAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gIH0pO1xuXG4gIHJlcS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgIC8vIGZsYWcgYWJvcnRpb24gaGVyZSBmb3Igb3V0IHRpbWVvdXRzXG4gICAgLy8gYmVjYXVzZSBub2RlIHdpbGwgZW1pdCBhIGZhdXgtZXJyb3IgXCJzb2NrZXQgaGFuZyB1cFwiXG4gICAgLy8gd2hlbiByZXF1ZXN0IGlzIGFib3J0ZWQgYmVmb3JlIGEgY29ubmVjdGlvbiBpcyBtYWRlXG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcbiAgICAvLyBpZiBub3QgdGhlIHNhbWUsIHdlIGFyZSBpbiB0aGUgKipvbGQqKiAoY2FuY2VsbGVkKSByZXF1ZXN0LFxuICAgIC8vIHNvIG5lZWQgdG8gY29udGludWUgKHNhbWUgYXMgZm9yIGFib3ZlKVxuICAgIGlmICh0aGlzLl9yZXRyaWVzICE9PSByZXRyaWVzKSByZXR1cm47XG4gICAgLy8gaWYgd2UndmUgcmVjZWl2ZWQgYSByZXNwb25zZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gbGV0XG4gICAgLy8gYW4gZXJyb3IgaW4gdGhlIHJlcXVlc3QgYmxvdyB1cCB0aGUgcmVzcG9uc2VcbiAgICBpZiAodGhpcy5yZXNwb25zZSkgcmV0dXJuO1xuICAgIHRoaXMuY2FsbGJhY2soZXJyKTtcbiAgfSk7XG5cbiAgLy8gYXV0aFxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICB0aGlzLmF1dGgoYXV0aFswXSwgYXV0aFsxXSk7XG4gIH1cblxuICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7XG4gICAgdGhpcy5hdXRoKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5oZWFkZXIpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuaGVhZGVyLCBrZXkpKVxuICAgICAgcmVxLnNldEhlYWRlcihrZXksIHRoaXMuaGVhZGVyW2tleV0pO1xuICB9XG5cbiAgLy8gYWRkIGNvb2tpZXNcbiAgaWYgKHRoaXMuY29va2llcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5faGVhZGVyLCAnY29va2llJykpIHtcbiAgICAgIC8vIG1lcmdlXG4gICAgICBjb25zdCB0bXBKYXIgPSBuZXcgQ29va2llSmFyLkNvb2tpZUphcigpO1xuICAgICAgdG1wSmFyLnNldENvb2tpZXModGhpcy5faGVhZGVyLmNvb2tpZS5zcGxpdCgnOycpKTtcbiAgICAgIHRtcEphci5zZXRDb29raWVzKHRoaXMuY29va2llcy5zcGxpdCgnOycpKTtcbiAgICAgIHJlcS5zZXRIZWFkZXIoXG4gICAgICAgICdDb29raWUnLFxuICAgICAgICB0bXBKYXIuZ2V0Q29va2llcyhDb29raWVKYXIuQ29va2llQWNjZXNzSW5mby5BbGwpLnRvVmFsdWVTdHJpbmcoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLnNldEhlYWRlcignQ29va2llJywgdGhpcy5jb29raWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVxO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uKGVyciwgcmVzKSB7XG4gIGlmICh0aGlzLl9zaG91bGRSZXRyeShlcnIsIHJlcykpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0cnkoKTtcbiAgfVxuXG4gIC8vIEF2b2lkIHRoZSBlcnJvciB3aGljaCBpcyBlbWl0dGVkIGZyb20gJ3NvY2tldCBoYW5nIHVwJyB0byBjYXVzZSB0aGUgZm4gdW5kZWZpbmVkIGVycm9yIG9uIEpTIHJ1bnRpbWUuXG4gIGNvbnN0IGZuID0gdGhpcy5fY2FsbGJhY2sgfHwgbm9vcDtcbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgaWYgKHRoaXMuY2FsbGVkKSByZXR1cm4gY29uc29sZS53YXJuKCdzdXBlcmFnZW50OiBkb3VibGUgY2FsbGJhY2sgYnVnJyk7XG4gIHRoaXMuY2FsbGVkID0gdHJ1ZTtcblxuICBpZiAoIWVycikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuX2lzUmVzcG9uc2VPSyhyZXMpKSB7XG4gICAgICAgIGxldCBtc2cgPSAnVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2UnO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgbXNnID0gaHR0cC5TVEFUVVNfQ09ERVNbcmVzLnN0YXR1c10gfHwgbXNnO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIGVyci5zdGF0dXMgPSByZXMgPyByZXMuc3RhdHVzIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycl8pIHtcbiAgICAgIGVyciA9IGVycl87XG4gICAgfVxuICB9XG5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIG91dHNpZGUgdHJ5L2NhdGNoXG4gIC8vIHRvIGF2b2lkIGRvdWJsZSBjYWxsYmFja1xuICBpZiAoIWVycikge1xuICAgIHJldHVybiBmbihudWxsLCByZXMpO1xuICB9XG5cbiAgZXJyLnJlc3BvbnNlID0gcmVzO1xuICBpZiAodGhpcy5fbWF4UmV0cmllcykgZXJyLnJldHJpZXMgPSB0aGlzLl9yZXRyaWVzIC0gMTtcblxuICAvLyBvbmx5IGVtaXQgZXJyb3IgZXZlbnQgaWYgdGhlcmUgaXMgYSBsaXN0ZW5lclxuICAvLyBvdGhlcndpc2Ugd2UgYXNzdW1lIHRoZSBjYWxsYmFjayB0byBgLmVuZCgpYCB3aWxsIGdldCB0aGUgZXJyb3JcbiAgaWYgKGVyciAmJiB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cblxuICBmbihlcnIsIHJlcyk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgaG9zdCBvYmplY3QsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBob3N0IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn0gaXMgYSBob3N0IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLl9pc0hvc3QgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIChcbiAgICBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBTdHJlYW0gfHwgb2JqIGluc3RhbmNlb2YgRm9ybURhdGFcbiAgKTtcbn07XG5cbi8qKlxuICogSW5pdGlhdGUgcmVxdWVzdCwgaW52b2tpbmcgY2FsbGJhY2sgYGZuKGVyciwgcmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuX2VtaXRSZXNwb25zZSA9IGZ1bmN0aW9uKGJvZHksIGZpbGVzKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKHRoaXMpO1xuICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0TGlzdDtcbiAgaWYgKHVuZGVmaW5lZCAhPT0gYm9keSkge1xuICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5O1xuICB9XG5cbiAgcmVzcG9uc2UuZmlsZXMgPSBmaWxlcztcbiAgaWYgKHRoaXMuX2VuZENhbGxlZCkge1xuICAgIHJlc3BvbnNlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJlbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwgc28gaXQncyB0b28gbGF0ZSB0byBzdGFydCBwaXBpbmdcIlxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgdGhpcy5lbWl0KCdyZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oZm4pIHtcbiAgdGhpcy5yZXF1ZXN0KCk7XG4gIGRlYnVnKCclcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG5cbiAgaWYgKHRoaXMuX2VuZENhbGxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICcuZW5kKCkgd2FzIGNhbGxlZCB0d2ljZS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIHN1cGVyYWdlbnQnXG4gICAgKTtcbiAgfVxuXG4gIHRoaXMuX2VuZENhbGxlZCA9IHRydWU7XG5cbiAgLy8gc3RvcmUgY2FsbGJhY2tcbiAgdGhpcy5fY2FsbGJhY2sgPSBmbiB8fCBub29wO1xuXG4gIHRoaXMuX2VuZCgpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuX2VuZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fYWJvcnRlZClcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhcbiAgICAgIG5ldyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCBldmVuIGJlZm9yZSAuZW5kKCkgd2FzIGNhbGxlZCcpXG4gICAgKTtcblxuICBsZXQgZGF0YSA9IHRoaXMuX2RhdGE7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gdGhpcztcblxuICB0aGlzLl9zZXRUaW1lb3V0cygpO1xuXG4gIC8vIGJvZHlcbiAgaWYgKG1ldGhvZCAhPT0gJ0hFQUQnICYmICFyZXEuX2hlYWRlclNlbnQpIHtcbiAgICAvLyBzZXJpYWxpemUgc3R1ZmZcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICAgIC8vIFBhcnNlIG91dCBqdXN0IHRoZSBjb250ZW50IHR5cGUgZnJvbSB0aGUgaGVhZGVyIChpZ25vcmUgdGhlIGNoYXJzZXQpXG4gICAgICBpZiAoY29udGVudFR5cGUpIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXTtcbiAgICAgIGxldCBzZXJpYWxpemUgPSB0aGlzLl9zZXJpYWxpemVyIHx8IGV4cG9ydHMuc2VyaWFsaXplW2NvbnRlbnRUeXBlXTtcbiAgICAgIGlmICghc2VyaWFsaXplICYmIGlzSlNPTihjb250ZW50VHlwZSkpIHtcbiAgICAgICAgc2VyaWFsaXplID0gZXhwb3J0cy5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlcmlhbGl6ZSkgZGF0YSA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBjb250ZW50LWxlbmd0aFxuICAgIGlmIChkYXRhICYmICFyZXEuZ2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSB7XG4gICAgICByZXEuc2V0SGVhZGVyKFxuICAgICAgICAnQ29udGVudC1MZW5ndGgnLFxuICAgICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkgPyBkYXRhLmxlbmd0aCA6IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlc3BvbnNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHJlcS5vbmNlKCdyZXNwb25zZScsIHJlcyA9PiB7XG4gICAgZGVidWcoJyVzICVzIC0+ICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsLCByZXMuc3RhdHVzQ29kZSk7XG5cbiAgICBpZiAodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGlwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXggPSB0aGlzLl9tYXhSZWRpcmVjdHM7XG4gICAgY29uc3QgbWltZSA9IHV0aWxzLnR5cGUocmVzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIHx8ICcnKSB8fCAndGV4dC9wbGFpbic7XG4gICAgY29uc3QgdHlwZSA9IG1pbWUuc3BsaXQoJy8nKVswXTtcbiAgICBjb25zdCBtdWx0aXBhcnQgPSB0eXBlID09PSAnbXVsdGlwYXJ0JztcbiAgICBjb25zdCByZWRpcmVjdCA9IGlzUmVkaXJlY3QocmVzLnN0YXR1c0NvZGUpO1xuICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMuX3Jlc3BvbnNlVHlwZTtcblxuICAgIHRoaXMucmVzID0gcmVzO1xuXG4gICAgLy8gcmVkaXJlY3RcbiAgICBpZiAocmVkaXJlY3QgJiYgdGhpcy5fcmVkaXJlY3RzKysgIT09IG1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0KHJlcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB0aGlzLmNhbGxiYWNrKG51bGwsIHRoaXMuX2VtaXRSZXNwb25zZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB6bGliIHN1cHBvcnRcbiAgICBpZiAodGhpcy5fc2hvdWxkVW56aXAocmVzKSkge1xuICAgICAgdW56aXAocmVxLCByZXMpO1xuICAgIH1cblxuICAgIGxldCBidWZmZXIgPSB0aGlzLl9idWZmZXI7XG4gICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkICYmIG1pbWUgaW4gZXhwb3J0cy5idWZmZXIpIHtcbiAgICAgIGJ1ZmZlciA9IEJvb2xlYW4oZXhwb3J0cy5idWZmZXJbbWltZV0pO1xuICAgIH1cblxuICAgIGxldCBwYXJzZXIgPSB0aGlzLl9wYXJzZXI7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gYnVmZmVyKSB7XG4gICAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIkEgY3VzdG9tIHN1cGVyYWdlbnQgcGFyc2VyIGhhcyBiZWVuIHNldCwgYnV0IGJ1ZmZlcmluZyBzdHJhdGVneSBmb3IgdGhlIHBhcnNlciBoYXNuJ3QgYmVlbiBjb25maWd1cmVkLiBDYWxsIGByZXEuYnVmZmVyKHRydWUgb3IgZmFsc2UpYCBvciBzZXQgYHN1cGVyYWdlbnQuYnVmZmVyW21pbWVdID0gdHJ1ZSBvciBmYWxzZWBcIlxuICAgICAgICApO1xuICAgICAgICBidWZmZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VyKSB7XG4gICAgICBpZiAocmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UuaW1hZ2U7IC8vIEl0J3MgYWN0dWFsbHkgYSBnZW5lcmljIEJ1ZmZlclxuICAgICAgICBidWZmZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtdWx0aXBhcnQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBmb3JtaWRhYmxlLkluY29taW5nRm9ybSgpO1xuICAgICAgICBwYXJzZXIgPSBmb3JtLnBhcnNlLmJpbmQoZm9ybSk7XG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGlzSW1hZ2VPclZpZGVvKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UuaW1hZ2U7XG4gICAgICAgIGJ1ZmZlciA9IHRydWU7IC8vIEZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBidWZmZXJpbmcgZGVmYXVsdCBpcyBhZC1ob2MgTUlNRS1kZXBlbmRlbnRcbiAgICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5wYXJzZVttaW1lXSkge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlW21pbWVdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS50ZXh0O1xuICAgICAgICBidWZmZXIgPSBidWZmZXIgIT09IGZhbHNlO1xuXG4gICAgICAgIC8vIGV2ZXJ5b25lIHdhbnRzIHRoZWlyIG93biB3aGl0ZS1sYWJlbGVkIGpzb25cbiAgICAgIH0gZWxzZSBpZiAoaXNKU09OKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyICE9PSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UudGV4dDtcbiAgICAgIH0gZWxzZSBpZiAodW5kZWZpbmVkID09PSBidWZmZXIpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTsgLy8gSXQncyBhY3R1YWxseSBhIGdlbmVyaWMgQnVmZmVyXG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYnkgZGVmYXVsdCBvbmx5IGJ1ZmZlciB0ZXh0LyosIGpzb24gYW5kIG1lc3NlZCB1cCB0aGluZyBmcm9tIGhlbGxcbiAgICBpZiAoKHVuZGVmaW5lZCA9PT0gYnVmZmVyICYmIGlzVGV4dChtaW1lKSkgfHwgaXNKU09OKG1pbWUpKSB7XG4gICAgICBidWZmZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc0J1ZmZlcmVkID0gYnVmZmVyO1xuICAgIGxldCBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgLy8gUHJvdGVjdGlvbmEgYWdhaW5zdCB6aXAgYm9tYnMgYW5kIG90aGVyIG51aXNhbmNlXG4gICAgICBsZXQgcmVzcG9uc2VCeXRlc0xlZnQgPSB0aGlzLl9tYXhSZXNwb25zZVNpemUgfHwgMjAwMDAwMDAwO1xuICAgICAgcmVzLm9uKCdkYXRhJywgYnVmID0+IHtcbiAgICAgICAgcmVzcG9uc2VCeXRlc0xlZnQgLT0gYnVmLmJ5dGVMZW5ndGggfHwgYnVmLmxlbmd0aDtcbiAgICAgICAgaWYgKHJlc3BvbnNlQnl0ZXNMZWZ0IDwgMCkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcm9wYWdhdGUgdGhyb3VnaCBlcnJvciBldmVudFxuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignTWF4aW11bSByZXNwb25zZSBzaXplIHJlYWNoZWQnKTtcbiAgICAgICAgICBlcnIuY29kZSA9ICdFVE9PTEFSR0UnO1xuICAgICAgICAgIC8vIFBhcnNlcnMgYXJlbid0IHJlcXVpcmVkIHRvIG9ic2VydmUgZXJyb3IgZXZlbnQsXG4gICAgICAgICAgLy8gc28gd291bGQgaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3NcbiAgICAgICAgICBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgICAgICAgLy8gV2lsbCBlbWl0IGVycm9yIGV2ZW50XG4gICAgICAgICAgcmVzLmRlc3Ryb3koZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVW5idWZmZXJlZCBwYXJzZXJzIGFyZSBzdXBwb3NlZCB0byBlbWl0IHJlc3BvbnNlIGVhcmx5LFxuICAgICAgICAvLyB3aGljaCBpcyB3ZWlyZCBCVFcsIGJlY2F1c2UgcmVzcG9uc2UuYm9keSB3b24ndCBiZSB0aGVyZS5cbiAgICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGJ1ZmZlcjtcblxuICAgICAgICBwYXJzZXIocmVzLCAoZXJyLCBvYmosIGZpbGVzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudGltZWRvdXQpIHtcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgaGFzIGFscmVhZHkgaGFuZGxlZCBhbGwgY2FsbGJhY2tzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSW50ZW50aW9uYWwgKG5vbi10aW1lb3V0KSBhYm9ydCBpcyBzdXBwb3NlZCB0byBwcmVzZXJ2ZSBwYXJ0aWFsIHJlc3BvbnNlLFxuICAgICAgICAgIC8vIGV2ZW4gaWYgaXQgZG9lc24ndCBwYXJzZS5cbiAgICAgICAgICBpZiAoZXJyICYmICF0aGlzLl9hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZXJIYW5kbGVzRW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2Uob2JqLCBmaWxlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG5cbiAgICAvLyB1bmJ1ZmZlcmVkXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGRlYnVnKCd1bmJ1ZmZlcmVkICVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcbiAgICAgIHRoaXMuY2FsbGJhY2sobnVsbCwgdGhpcy5fZW1pdFJlc3BvbnNlKCkpO1xuICAgICAgaWYgKG11bHRpcGFydCkgcmV0dXJuOyAvLyBhbGxvdyBtdWx0aXBhcnQgdG8gaGFuZGxlIGVuZCBldmVudFxuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZGVidWcoJ2VuZCAlcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG4gICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGluZyBldmVudHNcbiAgICByZXMub25jZSgnZXJyb3InLCBlcnIgPT4ge1xuICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jYWxsYmFjayhlcnIsIG51bGwpO1xuICAgIH0pO1xuICAgIGlmICghcGFyc2VySGFuZGxlc0VuZClcbiAgICAgIHJlcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGRlYnVnKCdlbmQgJXMgJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwpO1xuICAgICAgICAvLyBUT0RPOiB1bmxlc3MgYnVmZmVyaW5nIGVtaXQgZWFybGllciB0byBzdHJlYW1cbiAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgdGhpcyk7XG5cbiAgY29uc3QgZ2V0UHJvZ3Jlc3NNb25pdG9yID0gKCkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgIGNvbnN0IHRvdGFsID0gcmVxLmdldEhlYWRlcignQ29udGVudC1MZW5ndGgnKTtcbiAgICBsZXQgbG9hZGVkID0gMDtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFN0cmVhbS5UcmFuc2Zvcm0oKTtcbiAgICBwcm9ncmVzcy5fdHJhbnNmb3JtID0gKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgICBkaXJlY3Rpb246ICd1cGxvYWQnLFxuICAgICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICBsb2FkZWQsXG4gICAgICAgIHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9O1xuXG4gIGNvbnN0IGJ1ZmZlclRvQ2h1bmtzID0gYnVmZmVyID0+IHtcbiAgICBjb25zdCBjaHVua1NpemUgPSAxNiAqIDEwMjQ7IC8vIGRlZmF1bHQgaGlnaFdhdGVyTWFyayB2YWx1ZVxuICAgIGNvbnN0IGNodW5raW5nID0gbmV3IFN0cmVhbS5SZWFkYWJsZSgpO1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSB0b3RhbExlbmd0aCAlIGNodW5rU2l6ZTtcbiAgICBjb25zdCBjdXRvZmYgPSB0b3RhbExlbmd0aCAtIHJlbWFpbmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3V0b2ZmOyBpICs9IGNodW5rU2l6ZSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXIuc2xpY2UoaSwgaSArIGNodW5rU2l6ZSk7XG4gICAgICBjaHVua2luZy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluZGVyID4gMCkge1xuICAgICAgY29uc3QgcmVtYWluZGVyQnVmZmVyID0gYnVmZmVyLnNsaWNlKC1yZW1haW5kZXIpO1xuICAgICAgY2h1bmtpbmcucHVzaChyZW1haW5kZXJCdWZmZXIpO1xuICAgIH1cblxuICAgIGNodW5raW5nLnB1c2gobnVsbCk7IC8vIG5vIG1vcmUgZGF0YVxuXG4gICAgcmV0dXJuIGNodW5raW5nO1xuICB9O1xuXG4gIC8vIGlmIGEgRm9ybURhdGEgaW5zdGFuY2UgZ290IGNyZWF0ZWQsIHRoZW4gd2Ugc2VuZCB0aGF0IGFzIHRoZSByZXF1ZXN0IGJvZHlcbiAgY29uc3QgZm9ybURhdGEgPSB0aGlzLl9mb3JtRGF0YTtcbiAgaWYgKGZvcm1EYXRhKSB7XG4gICAgLy8gc2V0IGhlYWRlcnNcbiAgICBjb25zdCBoZWFkZXJzID0gZm9ybURhdGEuZ2V0SGVhZGVycygpO1xuICAgIGZvciAoY29uc3QgaSBpbiBoZWFkZXJzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhlYWRlcnMsIGkpKSB7XG4gICAgICAgIGRlYnVnKCdzZXR0aW5nIEZvcm1EYXRhIGhlYWRlcjogXCIlczogJXNcIicsIGksIGhlYWRlcnNbaV0pO1xuICAgICAgICByZXEuc2V0SGVhZGVyKGksIGhlYWRlcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0dGVtcHQgdG8gZ2V0IFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgIGZvcm1EYXRhLmdldExlbmd0aCgoZXJyLCBsZW5ndGgpID0+IHtcbiAgICAgIC8vIFRPRE86IEFkZCBjaHVua2VkIGVuY29kaW5nIHdoZW4gbm8gbGVuZ3RoIChpZiBlcnIpXG5cbiAgICAgIGRlYnVnKCdnb3QgRm9ybURhdGEgQ29udGVudC1MZW5ndGg6ICVzJywgbGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXEuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvcm1EYXRhLnBpcGUoZ2V0UHJvZ3Jlc3NNb25pdG9yKCkpLnBpcGUocmVxKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICBidWZmZXJUb0NodW5rcyhkYXRhKVxuICAgICAgLnBpcGUoZ2V0UHJvZ3Jlc3NNb25pdG9yKCkpXG4gICAgICAucGlwZShyZXEpO1xuICB9IGVsc2Uge1xuICAgIHJlcS5lbmQoZGF0YSk7XG4gIH1cbn07XG5cbi8vIENoZWNrIHdoZXRoZXIgcmVzcG9uc2UgaGFzIGEgbm9uLTAtc2l6ZWQgZ3ppcC1lbmNvZGVkIGJvZHlcblJlcXVlc3QucHJvdG90eXBlLl9zaG91bGRVbnppcCA9IHJlcyA9PiB7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3Qgc3VwcG9zZWQgdG8gaGF2ZSBhbnkgYm9keVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGhlYWRlciBjb250ZW50IGlzIGEgc3RyaW5nLCBhbmQgZGlzdGluY3Rpb24gYmV0d2VlbiAwIGFuZCBubyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsXG4gIGlmIChyZXMuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSA9PT0gJzAnKSB7XG4gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBib2R5IGlzIGVtcHR5ICh1bmZvcnR1bmF0ZWx5LCB0aGlzIGNoZWNrIGRvZXMgbm90IGNvdmVyIGNodW5rZWQgZW5jb2RpbmcpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gY29uc29sZS5sb2cocmVzKTtcbiAgcmV0dXJuIC9eXFxzKig/OmRlZmxhdGV8Z3ppcClcXHMqJC8udGVzdChyZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddKTtcbn07XG5cbi8qKlxuICogT3ZlcnJpZGVzIEROUyBmb3Igc2VsZWN0ZWQgaG9zdG5hbWVzLiBUYWtlcyBvYmplY3QgbWFwcGluZyBob3N0bmFtZXMgdG8gSVAgYWRkcmVzc2VzLlxuICpcbiAqIFdoZW4gbWFraW5nIGEgcmVxdWVzdCB0byBhIFVSTCB3aXRoIGEgaG9zdG5hbWUgZXhhY3RseSBtYXRjaGluZyBhIGtleSBpbiB0aGUgb2JqZWN0LFxuICogdXNlIHRoZSBnaXZlbiBJUCBhZGRyZXNzIHRvIGNvbm5lY3QsIGluc3RlYWQgb2YgdXNpbmcgRE5TIHRvIHJlc29sdmUgdGhlIGhvc3RuYW1lLlxuICpcbiAqIEEgc3BlY2lhbCBob3N0IGAqYCBtYXRjaGVzIGV2ZXJ5IGhvc3RuYW1lIChrZWVwIHJlZGlyZWN0cyBpbiBtaW5kISlcbiAqXG4gKiAgICAgIHJlcXVlc3QuY29ubmVjdCh7XG4gKiAgICAgICAgJ3Rlc3QuZXhhbXBsZS5jb20nOiAnMTI3LjAuMC4xJyxcbiAqICAgICAgICAnaXB2Ni5leGFtcGxlLmNvbSc6ICc6OjEnLFxuICogICAgICB9KVxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oY29ubmVjdE92ZXJyaWRlKSB7XG4gIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IHsgJyonOiBjb25uZWN0T3ZlcnJpZGUgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IGNvbm5lY3RPdmVycmlkZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jb25uZWN0T3ZlcnJpZGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnRydXN0TG9jYWxob3N0ID0gZnVuY3Rpb24odG9nZ2xlKSB7XG4gIHRoaXMuX3RydXN0TG9jYWxob3N0ID0gdG9nZ2xlID09PSB1bmRlZmluZWQgPyB0cnVlIDogdG9nZ2xlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGdlbmVyYXRlIEhUVFAgdmVyYiBtZXRob2RzXG5pZiAoIW1ldGhvZHMuaW5jbHVkZXMoJ2RlbCcpKSB7XG4gIC8vIGNyZWF0ZSBhIGNvcHkgc28gd2UgZG9uJ3QgY2F1c2UgY29uZmxpY3RzIHdpdGhcbiAgLy8gb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIG1ldGhvZHMgcGFja2FnZSBhbmRcbiAgLy8gbnBtIDMueFxuICBtZXRob2RzID0gbWV0aG9kcy5zbGljZSgwKTtcbiAgbWV0aG9kcy5wdXNoKCdkZWwnKTtcbn1cblxubWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGNvbnN0IG5hbWUgPSBtZXRob2Q7XG4gIG1ldGhvZCA9IG1ldGhvZCA9PT0gJ2RlbCcgPyAnZGVsZXRlJyA6IG1ldGhvZDtcblxuICBtZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcbiAgcmVxdWVzdFtuYW1lXSA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdChtZXRob2QsIHVybCk7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbiA9IGRhdGE7XG4gICAgICBkYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgICAgcmVxLnF1ZXJ5KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnNlbmQoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZuKSByZXEuZW5kKGZuKTtcbiAgICByZXR1cm4gcmVxO1xuICB9O1xufSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYG1pbWVgIGlzIHRleHQgYW5kIHNob3VsZCBiZSBidWZmZXJlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWltZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gaXNUZXh0KG1pbWUpIHtcbiAgY29uc3QgcGFydHMgPSBtaW1lLnNwbGl0KCcvJyk7XG4gIGNvbnN0IHR5cGUgPSBwYXJ0c1swXTtcbiAgY29uc3Qgc3VidHlwZSA9IHBhcnRzWzFdO1xuXG4gIHJldHVybiB0eXBlID09PSAndGV4dCcgfHwgc3VidHlwZSA9PT0gJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG59XG5cbmZ1bmN0aW9uIGlzSW1hZ2VPclZpZGVvKG1pbWUpIHtcbiAgY29uc3QgdHlwZSA9IG1pbWUuc3BsaXQoJy8nKVswXTtcblxuICByZXR1cm4gdHlwZSA9PT0gJ2ltYWdlJyB8fCB0eXBlID09PSAndmlkZW8nO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICAvLyBzaG91bGQgbWF0Y2ggL2pzb24gb3IgK2pzb25cbiAgLy8gYnV0IG5vdCAvanNvbi1zZXFcbiAgcmV0dXJuIC9bLytdanNvbigkfFteLVxcd10pLy50ZXN0KG1pbWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHdlIHNob3VsZCBmb2xsb3cgdGhlIHJlZGlyZWN0IGBjb2RlYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzUmVkaXJlY3QoY29kZSkge1xuICByZXR1cm4gWzMwMSwgMzAyLCAzMDMsIDMwNSwgMzA3LCAzMDhdLmluY2x1ZGVzKGNvZGUpO1xufVxuIl19