vite-plugin-react-server 1.2.0-alpha.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1165) hide show
  1. package/README.md +211 -59
  2. package/dist/client.d.ts +4 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +4 -4
  5. package/dist/index.d.ts +3 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -10
  8. package/dist/package.json +102 -27
  9. package/dist/plugin/bundle/bundles.d.ts +11 -0
  10. package/dist/plugin/bundle/bundles.d.ts.map +1 -0
  11. package/dist/plugin/bundle/bundles.js +11 -0
  12. package/dist/plugin/bundle/deferredStaticGeneration.d.ts +31 -0
  13. package/dist/plugin/bundle/deferredStaticGeneration.d.ts.map +1 -0
  14. package/dist/plugin/bundle/deferredStaticGeneration.js +44 -0
  15. package/dist/plugin/bundle/manifests.d.ts +20 -0
  16. package/dist/plugin/bundle/manifests.d.ts.map +1 -0
  17. package/dist/plugin/bundle/manifests.js +54 -0
  18. package/dist/plugin/components/css.d.ts +2 -5
  19. package/dist/plugin/components/css.d.ts.map +1 -1
  20. package/dist/plugin/components/css.js +7 -9
  21. package/dist/plugin/components/html.d.ts +2 -3
  22. package/dist/plugin/components/html.d.ts.map +1 -1
  23. package/dist/plugin/components/html.js +3 -3
  24. package/dist/plugin/components/index.d.ts +1 -1
  25. package/dist/plugin/components/index.d.ts.map +1 -1
  26. package/dist/plugin/components/root.d.ts.map +1 -1
  27. package/dist/plugin/components/root.js +4 -4
  28. package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.d.ts.map +1 -1
  29. package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.js +6 -6
  30. package/dist/plugin/config/autoDiscover/pageAndPropFiles.d.ts.map +1 -1
  31. package/dist/plugin/config/autoDiscover/pageAndPropFiles.js +1 -1
  32. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts +6 -5
  33. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
  34. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +34 -51
  35. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts +5 -1
  36. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts.map +1 -1
  37. package/dist/plugin/config/autoDiscover/resolveBuildPages.js +124 -52
  38. package/dist/plugin/config/createHandlerOptions.client.d.ts +4 -0
  39. package/dist/plugin/config/createHandlerOptions.client.d.ts.map +1 -0
  40. package/dist/plugin/config/createHandlerOptions.client.js +293 -0
  41. package/dist/plugin/config/createHandlerOptions.d.ts +4 -0
  42. package/dist/plugin/config/createHandlerOptions.d.ts.map +1 -0
  43. package/dist/plugin/config/createHandlerOptions.js +13 -0
  44. package/dist/plugin/config/createHandlerOptions.server.d.ts +4 -0
  45. package/dist/plugin/config/createHandlerOptions.server.d.ts.map +1 -0
  46. package/dist/plugin/config/createHandlerOptions.server.js +344 -0
  47. package/dist/plugin/config/createHandlerOptions.types.d.ts +114 -0
  48. package/dist/plugin/config/createHandlerOptions.types.d.ts.map +1 -0
  49. package/dist/plugin/config/createModuleID.d.ts +1 -1
  50. package/dist/plugin/config/createModuleID.d.ts.map +1 -1
  51. package/dist/plugin/config/createModuleID.js +121 -8
  52. package/dist/plugin/config/defaults.d.ts +152 -17
  53. package/dist/plugin/config/defaults.d.ts.map +1 -1
  54. package/dist/plugin/config/defaults.js +69 -25
  55. package/dist/plugin/config/envPrefixFromConfig.d.ts +3 -0
  56. package/dist/plugin/config/envPrefixFromConfig.d.ts.map +1 -0
  57. package/dist/plugin/config/envPrefixFromConfig.js +8 -0
  58. package/dist/plugin/config/getCondition.d.ts +54 -3
  59. package/dist/plugin/config/getCondition.d.ts.map +1 -1
  60. package/dist/plugin/config/getCondition.js +158 -6
  61. package/dist/plugin/{getNodeEnv.d.ts → config/getNodeEnv.d.ts} +1 -1
  62. package/dist/plugin/config/getNodeEnv.d.ts.map +1 -0
  63. package/dist/plugin/config/getNodeEnv.js +17 -0
  64. package/dist/plugin/config/index.d.ts +43 -1
  65. package/dist/plugin/config/index.d.ts.map +1 -1
  66. package/dist/plugin/config/index.js +9 -4
  67. package/dist/plugin/config/resolveDirectiveMatcher.d.ts +6 -6
  68. package/dist/plugin/config/resolveDirectiveMatcher.d.ts.map +1 -1
  69. package/dist/plugin/config/resolveDirectiveMatcher.js +7 -23
  70. package/dist/plugin/config/resolveEnv.d.ts +1 -1
  71. package/dist/plugin/config/resolveEnv.d.ts.map +1 -1
  72. package/dist/plugin/config/resolveEnv.js +32 -28
  73. package/dist/plugin/config/resolveOptions.d.ts +3 -2
  74. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  75. package/dist/plugin/config/resolveOptions.js +195 -61
  76. package/dist/plugin/config/resolvePages.d.ts +1 -1
  77. package/dist/plugin/config/resolvePages.d.ts.map +1 -1
  78. package/dist/plugin/config/resolvePages.js +1 -1
  79. package/dist/plugin/config/resolvePatternWithValues.d.ts.map +1 -1
  80. package/dist/plugin/config/resolvePatternWithValues.js +7 -26
  81. package/dist/plugin/config/resolveUrlOption.d.ts +1 -1
  82. package/dist/plugin/config/resolveUrlOption.d.ts.map +1 -1
  83. package/dist/plugin/config/resolveUrlOption.js +2 -2
  84. package/dist/plugin/config/resolveUserConfig.d.ts +5 -3
  85. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  86. package/dist/plugin/config/resolveUserConfig.js +221 -70
  87. package/dist/plugin/config/stashedOptionsState.d.ts +66 -0
  88. package/dist/plugin/config/stashedOptionsState.d.ts.map +1 -0
  89. package/dist/plugin/config/stashedOptionsState.js +25 -0
  90. package/dist/plugin/dev-server/cleanupServerAction.client.d.ts +6 -0
  91. package/dist/plugin/dev-server/cleanupServerAction.client.d.ts.map +1 -0
  92. package/dist/plugin/dev-server/cleanupServerAction.client.js +28 -0
  93. package/dist/plugin/dev-server/cleanupServerAction.d.ts +2 -0
  94. package/dist/plugin/dev-server/cleanupServerAction.d.ts.map +1 -0
  95. package/dist/plugin/dev-server/cleanupServerAction.js +4 -0
  96. package/dist/plugin/dev-server/cleanupServerAction.server.d.ts +8 -0
  97. package/dist/plugin/dev-server/cleanupServerAction.server.d.ts.map +1 -0
  98. package/dist/plugin/dev-server/cleanupServerAction.server.js +15 -0
  99. package/dist/plugin/dev-server/configureReactServer.client.d.ts +7 -0
  100. package/dist/plugin/dev-server/configureReactServer.client.d.ts.map +1 -0
  101. package/dist/plugin/dev-server/configureReactServer.client.js +85 -0
  102. package/dist/plugin/dev-server/configureReactServer.d.ts +2 -0
  103. package/dist/plugin/dev-server/configureReactServer.d.ts.map +1 -0
  104. package/dist/plugin/dev-server/configureReactServer.js +13 -0
  105. package/dist/plugin/dev-server/configureReactServer.server.d.ts +3 -0
  106. package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -0
  107. package/dist/plugin/dev-server/configureReactServer.server.js +444 -0
  108. package/dist/plugin/dev-server/configureRequestHandler.client.d.ts +13 -0
  109. package/dist/plugin/dev-server/configureRequestHandler.client.d.ts.map +1 -0
  110. package/dist/plugin/dev-server/configureRequestHandler.client.js +307 -0
  111. package/dist/plugin/dev-server/configureRequestHandler.d.ts +2 -0
  112. package/dist/plugin/dev-server/configureRequestHandler.d.ts.map +1 -0
  113. package/dist/plugin/dev-server/configureRequestHandler.js +4 -0
  114. package/dist/plugin/dev-server/configureRequestHandler.server.d.ts +6 -0
  115. package/dist/plugin/dev-server/configureRequestHandler.server.d.ts.map +1 -0
  116. package/dist/plugin/dev-server/configureRequestHandler.server.js +44 -0
  117. package/dist/plugin/dev-server/handleServerAction.client.d.ts +11 -0
  118. package/dist/plugin/dev-server/handleServerAction.client.d.ts.map +1 -0
  119. package/dist/plugin/dev-server/handleServerAction.client.js +97 -0
  120. package/dist/plugin/dev-server/handleServerAction.d.ts +2 -0
  121. package/dist/plugin/dev-server/handleServerAction.d.ts.map +1 -0
  122. package/dist/plugin/dev-server/handleServerAction.js +13 -0
  123. package/dist/plugin/dev-server/handleServerAction.server.d.ts +3 -0
  124. package/dist/plugin/dev-server/handleServerAction.server.d.ts.map +1 -0
  125. package/dist/plugin/dev-server/handleServerAction.server.js +15 -0
  126. package/dist/plugin/dev-server/index.client.d.ts +7 -0
  127. package/dist/plugin/dev-server/index.client.d.ts.map +1 -0
  128. package/dist/plugin/dev-server/index.client.js +11 -0
  129. package/dist/plugin/dev-server/index.d.ts +4 -0
  130. package/dist/plugin/dev-server/index.d.ts.map +1 -0
  131. package/dist/plugin/dev-server/index.js +19 -0
  132. package/dist/plugin/dev-server/index.server.d.ts +7 -0
  133. package/dist/plugin/dev-server/index.server.d.ts.map +1 -0
  134. package/dist/plugin/dev-server/index.server.js +11 -0
  135. package/dist/plugin/dev-server/plugin.client.d.ts +7 -0
  136. package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -0
  137. package/dist/plugin/dev-server/plugin.client.js +122 -0
  138. package/dist/plugin/dev-server/plugin.server.d.ts +8 -0
  139. package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -0
  140. package/dist/plugin/dev-server/plugin.server.js +108 -0
  141. package/dist/plugin/dev-server/restartWorker.client.d.ts +3 -0
  142. package/dist/plugin/dev-server/restartWorker.client.d.ts.map +1 -0
  143. package/dist/plugin/dev-server/restartWorker.client.js +131 -0
  144. package/dist/plugin/dev-server/restartWorker.d.ts +2 -0
  145. package/dist/plugin/dev-server/restartWorker.d.ts.map +1 -0
  146. package/dist/plugin/dev-server/restartWorker.js +4 -0
  147. package/dist/plugin/dev-server/restartWorker.server.d.ts +3 -0
  148. package/dist/plugin/dev-server/restartWorker.server.d.ts.map +1 -0
  149. package/dist/plugin/dev-server/restartWorker.server.js +88 -0
  150. package/dist/plugin/dev-server/types.d.ts +38 -0
  151. package/dist/plugin/dev-server/types.d.ts.map +1 -0
  152. package/dist/plugin/dev-server/virtualRscHmrPlugin.d.ts +7 -0
  153. package/dist/plugin/dev-server/virtualRscHmrPlugin.d.ts.map +1 -0
  154. package/dist/plugin/dev-server/virtualRscHmrPlugin.js +80 -0
  155. package/dist/plugin/env/createConfigEnv.d.ts +13 -0
  156. package/dist/plugin/env/createConfigEnv.d.ts.map +1 -0
  157. package/dist/plugin/env/createConfigEnv.js +43 -0
  158. package/dist/plugin/env/createEnvPlugin.d.ts +3 -0
  159. package/dist/plugin/env/createEnvPlugin.d.ts.map +1 -0
  160. package/dist/plugin/env/createEnvPlugin.js +59 -0
  161. package/dist/plugin/env/getArgValue.d.ts +8 -0
  162. package/dist/plugin/env/getArgValue.d.ts.map +1 -0
  163. package/dist/plugin/env/getArgValue.js +52 -0
  164. package/dist/plugin/env/getEnvKey.d.ts +46 -0
  165. package/dist/plugin/env/getEnvKey.d.ts.map +1 -0
  166. package/dist/plugin/env/getEnvKey.js +32 -0
  167. package/dist/plugin/env/index.d.ts +5 -0
  168. package/dist/plugin/env/index.d.ts.map +1 -1
  169. package/dist/plugin/env/index.js +7 -0
  170. package/dist/plugin/env/plugin.client.d.ts +2 -0
  171. package/dist/plugin/env/plugin.client.d.ts.map +1 -0
  172. package/dist/plugin/env/plugin.client.js +2 -0
  173. package/dist/plugin/env/plugin.d.ts +4 -34
  174. package/dist/plugin/env/plugin.d.ts.map +1 -1
  175. package/dist/plugin/env/plugin.js +27 -102
  176. package/dist/plugin/env/plugin.server.d.ts +2 -0
  177. package/dist/plugin/env/plugin.server.d.ts.map +1 -0
  178. package/dist/plugin/env/plugin.server.js +2 -0
  179. package/dist/plugin/env/userConfigEnv.d.ts +2 -0
  180. package/dist/plugin/env/userConfigEnv.d.ts.map +1 -0
  181. package/dist/plugin/env/userConfigEnv.js +12 -0
  182. package/dist/plugin/environments/createBuildEventPlugin.d.ts +4 -0
  183. package/dist/plugin/environments/createBuildEventPlugin.d.ts.map +1 -0
  184. package/dist/plugin/environments/createBuildEventPlugin.js +100 -0
  185. package/dist/plugin/environments/createEnvironmentPlugin.d.ts +19 -0
  186. package/dist/plugin/environments/createEnvironmentPlugin.d.ts.map +1 -0
  187. package/dist/plugin/environments/createEnvironmentPlugin.js +257 -0
  188. package/dist/plugin/environments/hashCoordination.d.ts +14 -0
  189. package/dist/plugin/environments/hashCoordination.d.ts.map +1 -0
  190. package/dist/plugin/environments/hashCoordination.js +35 -0
  191. package/dist/plugin/environments/resolveEnvironmentConfig.d.ts +41 -0
  192. package/dist/plugin/environments/resolveEnvironmentConfig.d.ts.map +1 -0
  193. package/dist/plugin/environments/resolveEnvironmentConfig.js +232 -0
  194. package/dist/plugin/error/assertPanic.d.ts +2 -0
  195. package/dist/plugin/error/assertPanic.d.ts.map +1 -0
  196. package/dist/plugin/error/assertPanic.js +15 -0
  197. package/dist/plugin/error/handleError.d.ts +9 -0
  198. package/dist/plugin/error/handleError.d.ts.map +1 -0
  199. package/dist/plugin/error/handleError.js +51 -0
  200. package/dist/plugin/error/index.d.ts +3 -0
  201. package/dist/plugin/error/index.d.ts.map +1 -1
  202. package/dist/plugin/error/index.js +4 -1
  203. package/dist/plugin/error/logError.d.ts +6 -2
  204. package/dist/plugin/error/logError.d.ts.map +1 -1
  205. package/dist/plugin/error/logError.js +35 -34
  206. package/dist/plugin/error/panicThresholdHandler.d.ts +27 -0
  207. package/dist/plugin/error/panicThresholdHandler.d.ts.map +1 -0
  208. package/dist/plugin/error/panicThresholdHandler.js +13 -0
  209. package/dist/plugin/error/serializeError.d.ts +6 -2
  210. package/dist/plugin/error/serializeError.d.ts.map +1 -1
  211. package/dist/plugin/error/serializeError.js +30 -10
  212. package/dist/plugin/error/serializeErrorInfo.d.ts +5 -0
  213. package/dist/plugin/error/serializeErrorInfo.d.ts.map +1 -0
  214. package/dist/plugin/error/serializeErrorInfo.js +19 -0
  215. package/dist/plugin/error/setupGlobalErrorHandler.d.ts +4 -0
  216. package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -0
  217. package/dist/plugin/error/setupGlobalErrorHandler.js +52 -0
  218. package/dist/plugin/error/shouldPanic.d.ts +6 -0
  219. package/dist/plugin/error/shouldPanic.d.ts.map +1 -0
  220. package/dist/plugin/error/shouldPanic.js +15 -0
  221. package/dist/plugin/error/toError.d.ts +5 -1
  222. package/dist/plugin/error/toError.d.ts.map +1 -1
  223. package/dist/plugin/error/toError.js +43 -19
  224. package/dist/plugin/error/types.d.ts +28 -0
  225. package/dist/plugin/error/types.d.ts.map +1 -0
  226. package/dist/plugin/helpers/collectManifestCss.d.ts.map +1 -1
  227. package/dist/plugin/helpers/collectManifestCss.js +19 -5
  228. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +3 -3
  229. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
  230. package/dist/plugin/helpers/collectViteModuleGraphCss.js +64 -3
  231. package/dist/plugin/helpers/createBufferedRscStream.d.ts +52 -0
  232. package/dist/plugin/helpers/createBufferedRscStream.d.ts.map +1 -0
  233. package/dist/plugin/helpers/createBufferedRscStream.js +147 -0
  234. package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
  235. package/dist/plugin/helpers/createCssProps.js +15 -25
  236. package/dist/plugin/helpers/createElementWithReact.d.ts +9 -0
  237. package/dist/plugin/helpers/createElementWithReact.d.ts.map +1 -0
  238. package/dist/plugin/helpers/createElementWithReact.js +87 -0
  239. package/dist/plugin/helpers/createPatternMatcher.d.ts +24 -0
  240. package/dist/plugin/helpers/createPatternMatcher.d.ts.map +1 -0
  241. package/dist/plugin/helpers/createPatternMatcher.js +50 -0
  242. package/dist/plugin/helpers/createRscRenderHelpers.d.ts +16 -0
  243. package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -0
  244. package/dist/plugin/helpers/createRscRenderHelpers.js +60 -0
  245. package/dist/plugin/helpers/createSafePageComponent.d.ts +36 -0
  246. package/dist/plugin/helpers/createSafePageComponent.d.ts.map +1 -0
  247. package/dist/plugin/helpers/createSafePageComponent.js +50 -0
  248. package/dist/plugin/helpers/createSerializableHandlerOptions.d.ts +60 -0
  249. package/dist/plugin/helpers/createSerializableHandlerOptions.d.ts.map +1 -0
  250. package/dist/plugin/helpers/createSerializableHandlerOptions.js +94 -0
  251. package/dist/plugin/helpers/createSharedLoader.d.ts +44 -0
  252. package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -0
  253. package/dist/plugin/helpers/createSharedLoader.js +137 -0
  254. package/dist/plugin/helpers/createUnifiedCssProcessor.d.ts +70 -0
  255. package/dist/plugin/helpers/createUnifiedCssProcessor.d.ts.map +1 -0
  256. package/dist/plugin/helpers/createUnifiedCssProcessor.js +89 -0
  257. package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
  258. package/dist/plugin/helpers/getBundleManifest.js +2 -3
  259. package/dist/plugin/helpers/getRouteFiles.d.ts +2 -2
  260. package/dist/plugin/helpers/getRouteFiles.d.ts.map +1 -1
  261. package/dist/plugin/helpers/getRouteFiles.js +67 -36
  262. package/dist/plugin/helpers/handleServerAction.client.d.ts +29 -0
  263. package/dist/plugin/helpers/handleServerAction.client.d.ts.map +1 -0
  264. package/dist/plugin/helpers/handleServerAction.client.js +93 -0
  265. package/dist/plugin/helpers/handleServerAction.d.ts +2 -34
  266. package/dist/plugin/helpers/handleServerAction.d.ts.map +1 -1
  267. package/dist/plugin/helpers/handleServerAction.js +15 -44
  268. package/dist/plugin/helpers/handleServerAction.server.d.ts +25 -0
  269. package/dist/plugin/helpers/handleServerAction.server.d.ts.map +1 -0
  270. package/dist/plugin/helpers/handleServerAction.server.js +80 -0
  271. package/dist/plugin/helpers/handleServerActionHelper.d.ts +61 -0
  272. package/dist/plugin/helpers/handleServerActionHelper.d.ts.map +1 -0
  273. package/dist/plugin/helpers/handleServerActionHelper.js +183 -0
  274. package/dist/plugin/helpers/headlessStreamReuseHandler.d.ts +12 -0
  275. package/dist/plugin/helpers/headlessStreamReuseHandler.d.ts.map +1 -0
  276. package/dist/plugin/helpers/headlessStreamReuseHandler.js +29 -0
  277. package/dist/plugin/helpers/headlessStreamState.d.ts +71 -0
  278. package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -0
  279. package/dist/plugin/helpers/headlessStreamState.js +81 -0
  280. package/dist/plugin/helpers/hydrateUserOptions.d.ts +1 -1
  281. package/dist/plugin/helpers/hydrateUserOptions.d.ts.map +1 -1
  282. package/dist/plugin/helpers/hydrateUserOptions.js +2 -2
  283. package/dist/plugin/helpers/index.d.ts +12 -5
  284. package/dist/plugin/helpers/index.d.ts.map +1 -1
  285. package/dist/plugin/helpers/index.js +18 -4
  286. package/dist/plugin/helpers/logRenderStart.d.ts +17 -0
  287. package/dist/plugin/helpers/logRenderStart.d.ts.map +1 -0
  288. package/dist/plugin/helpers/logRenderStart.js +13 -0
  289. package/dist/plugin/helpers/mergeMessageWithDefaults.d.ts +90 -0
  290. package/dist/plugin/helpers/mergeMessageWithDefaults.d.ts.map +1 -0
  291. package/dist/plugin/helpers/mergeMessageWithDefaults.js +67 -0
  292. package/dist/plugin/helpers/pipeToResponse.d.ts +19 -0
  293. package/dist/plugin/helpers/pipeToResponse.d.ts.map +1 -0
  294. package/dist/plugin/helpers/pipeToResponse.js +55 -0
  295. package/dist/plugin/helpers/requestInfo.d.ts +6 -4
  296. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
  297. package/dist/plugin/helpers/requestInfo.js +48 -30
  298. package/dist/plugin/helpers/resolveComponents.client.d.ts +34 -0
  299. package/dist/plugin/helpers/resolveComponents.client.d.ts.map +1 -0
  300. package/dist/plugin/helpers/resolveComponents.client.js +126 -0
  301. package/dist/plugin/helpers/resolveModuleFromManifest.d.ts +36 -0
  302. package/dist/plugin/helpers/resolveModuleFromManifest.d.ts.map +1 -0
  303. package/dist/plugin/helpers/resolveModuleFromManifest.js +60 -0
  304. package/dist/plugin/helpers/resolvePageAndProps.d.ts +23 -2
  305. package/dist/plugin/helpers/resolvePageAndProps.d.ts.map +1 -1
  306. package/dist/plugin/helpers/resolvePageAndProps.js +150 -9
  307. package/dist/plugin/helpers/resolveRenderUrl.d.ts +11 -0
  308. package/dist/plugin/helpers/resolveRenderUrl.d.ts.map +1 -0
  309. package/dist/plugin/helpers/resolveRenderUrl.js +19 -0
  310. package/dist/plugin/helpers/resolveStreamElements.client.d.ts +14 -0
  311. package/dist/plugin/helpers/resolveStreamElements.client.d.ts.map +1 -0
  312. package/dist/plugin/helpers/resolveStreamElements.client.js +36 -0
  313. package/dist/plugin/helpers/resolveStreamElements.d.ts +3 -0
  314. package/dist/plugin/helpers/resolveStreamElements.d.ts.map +1 -0
  315. package/dist/plugin/helpers/resolveStreamElements.js +13 -0
  316. package/dist/plugin/helpers/resolveStreamElements.server.d.ts +15 -0
  317. package/dist/plugin/helpers/resolveStreamElements.server.d.ts.map +1 -0
  318. package/dist/plugin/helpers/resolveStreamElements.server.js +35 -0
  319. package/dist/plugin/helpers/resolveStreamElements.types.d.ts +22 -0
  320. package/dist/plugin/helpers/resolveStreamElements.types.d.ts.map +1 -0
  321. package/dist/plugin/helpers/resolveStreamElements.types.js +1 -0
  322. package/dist/plugin/helpers/resolveVirtualAndNodeModules.d.ts +15 -0
  323. package/dist/plugin/helpers/resolveVirtualAndNodeModules.d.ts.map +1 -0
  324. package/dist/plugin/helpers/resolveVirtualAndNodeModules.js +45 -0
  325. package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.d.ts +18 -0
  326. package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.d.ts.map +1 -0
  327. package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.js +17 -0
  328. package/dist/plugin/helpers/serializeUserOptions.d.ts +2 -2
  329. package/dist/plugin/helpers/serializeUserOptions.d.ts.map +1 -1
  330. package/dist/plugin/helpers/serializeUserOptions.js +28 -13
  331. package/dist/plugin/helpers/tryManifest.d.ts +2 -2
  332. package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
  333. package/dist/plugin/helpers/tryManifest.js +12 -6
  334. package/dist/plugin/helpers/validateRscRenderMessage.d.ts +9 -0
  335. package/dist/plugin/helpers/validateRscRenderMessage.d.ts.map +1 -0
  336. package/dist/plugin/helpers/validateRscRenderMessage.js +13 -0
  337. package/dist/plugin/helpers/workerCleanup.d.ts +29 -0
  338. package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -0
  339. package/dist/plugin/helpers/workerCleanup.js +28 -0
  340. package/dist/plugin/helpers/workerManager.d.ts +5 -0
  341. package/dist/plugin/helpers/workerManager.d.ts.map +1 -0
  342. package/dist/plugin/helpers/workerManager.js +18 -0
  343. package/dist/plugin/index.d.ts +4 -1
  344. package/dist/plugin/index.d.ts.map +1 -1
  345. package/dist/plugin/index.js +5 -2
  346. package/dist/plugin/loader/createDefaultLoader.d.ts +1 -1
  347. package/dist/plugin/loader/createDefaultLoader.d.ts.map +1 -1
  348. package/dist/plugin/loader/createDefaultLoader.js +2 -22
  349. package/dist/plugin/loader/createTransformer.d.ts.map +1 -1
  350. package/dist/plugin/loader/createTransformer.js +157 -32
  351. package/dist/plugin/loader/directives/analyzeDirectives.d.ts +3 -2
  352. package/dist/plugin/loader/directives/analyzeDirectives.d.ts.map +1 -1
  353. package/dist/plugin/loader/directives/analyzeDirectives.js +53 -26
  354. package/dist/plugin/loader/directives/analyzeModule.d.ts +2 -6
  355. package/dist/plugin/loader/directives/analyzeModule.d.ts.map +1 -1
  356. package/dist/plugin/loader/directives/analyzeModule.js +32 -11
  357. package/dist/plugin/loader/env-loader.d.ts +3 -2
  358. package/dist/plugin/loader/env-loader.d.ts.map +1 -1
  359. package/dist/plugin/loader/env-loader.js +32 -9
  360. package/dist/plugin/loader/parse.d.ts +3 -2
  361. package/dist/plugin/loader/parse.d.ts.map +1 -1
  362. package/dist/plugin/loader/parse.js +2 -2
  363. package/dist/plugin/loader/react-loader.d.ts +4 -4
  364. package/dist/plugin/loader/react-loader.d.ts.map +1 -1
  365. package/dist/plugin/loader/react-loader.js +101 -73
  366. package/dist/plugin/loader/transformClientModule.d.ts +4 -5
  367. package/dist/plugin/loader/transformClientModule.d.ts.map +1 -1
  368. package/dist/plugin/loader/transformClientModule.js +63 -18
  369. package/dist/plugin/loader/transformModule.d.ts.map +1 -1
  370. package/dist/plugin/loader/transformModule.js +82 -14
  371. package/dist/plugin/loader/transformModuleIfNeeded.d.ts +6 -1
  372. package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -1
  373. package/dist/plugin/loader/transformModuleIfNeeded.js +10 -18
  374. package/dist/plugin/loader/transformNonServerEnvironment.d.ts +10 -0
  375. package/dist/plugin/loader/transformNonServerEnvironment.d.ts.map +1 -0
  376. package/dist/plugin/loader/transformNonServerEnvironment.js +74 -0
  377. package/dist/plugin/loader/transformServerModule.d.ts +2 -3
  378. package/dist/plugin/loader/transformServerModule.d.ts.map +1 -1
  379. package/dist/plugin/loader/transformServerModule.js +80 -22
  380. package/dist/plugin/loader/transformWithAcornLoose.js +1 -3
  381. package/dist/plugin/loader/types.d.ts +37 -32
  382. package/dist/plugin/loader/types.d.ts.map +1 -1
  383. package/dist/plugin/metrics/collectStreamMetrics.d.ts +1 -2
  384. package/dist/plugin/metrics/collectStreamMetrics.d.ts.map +1 -1
  385. package/dist/plugin/metrics/collectStreamMetrics.js +1 -1
  386. package/dist/plugin/metrics/convertStreamMetrics.d.ts +3 -0
  387. package/dist/plugin/metrics/convertStreamMetrics.d.ts.map +1 -0
  388. package/dist/plugin/metrics/convertStreamMetrics.js +26 -0
  389. package/dist/plugin/metrics/createModuleResolutionMetrics.d.ts +12 -0
  390. package/dist/plugin/metrics/createModuleResolutionMetrics.d.ts.map +1 -0
  391. package/dist/plugin/metrics/createModuleResolutionMetrics.js +32 -0
  392. package/dist/plugin/metrics/createRenderMetrics.d.ts +2 -2
  393. package/dist/plugin/metrics/createRenderMetrics.d.ts.map +1 -1
  394. package/dist/plugin/metrics/createRenderMetrics.js +45 -13
  395. package/dist/plugin/metrics/createStreamMetrics.d.ts +2 -2
  396. package/dist/plugin/metrics/createStreamMetrics.d.ts.map +1 -1
  397. package/dist/plugin/metrics/createStreamMetrics.js +15 -4
  398. package/dist/plugin/metrics/createWorkerStartupMetrics.d.ts +12 -0
  399. package/dist/plugin/metrics/createWorkerStartupMetrics.d.ts.map +1 -0
  400. package/dist/plugin/metrics/createWorkerStartupMetrics.js +14 -0
  401. package/dist/plugin/metrics/formatMetrics.d.ts +0 -6
  402. package/dist/plugin/metrics/formatMetrics.d.ts.map +1 -1
  403. package/dist/plugin/metrics/formatMetrics.js +7 -29
  404. package/dist/plugin/metrics/index.d.ts +6 -3
  405. package/dist/plugin/metrics/index.d.ts.map +1 -1
  406. package/dist/plugin/metrics/index.js +6 -3
  407. package/dist/plugin/metrics/metricWatcher.d.ts +9 -0
  408. package/dist/plugin/metrics/metricWatcher.d.ts.map +1 -0
  409. package/dist/plugin/metrics/metricWatcher.js +141 -0
  410. package/dist/plugin/metrics/types.d.ts +72 -6
  411. package/dist/plugin/metrics/types.d.ts.map +1 -1
  412. package/dist/plugin/orchestrator/createPluginOrchestrator.client.d.ts +3 -0
  413. package/dist/plugin/orchestrator/createPluginOrchestrator.client.d.ts.map +1 -0
  414. package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +36 -0
  415. package/dist/plugin/orchestrator/createPluginOrchestrator.d.ts +19 -0
  416. package/dist/plugin/orchestrator/createPluginOrchestrator.d.ts.map +1 -0
  417. package/dist/plugin/orchestrator/createPluginOrchestrator.js +13 -0
  418. package/dist/plugin/orchestrator/createPluginOrchestrator.server.d.ts +3 -0
  419. package/dist/plugin/orchestrator/createPluginOrchestrator.server.d.ts.map +1 -0
  420. package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +44 -0
  421. package/dist/plugin/orchestrator/index.d.ts +2 -0
  422. package/dist/plugin/orchestrator/index.d.ts.map +1 -0
  423. package/dist/plugin/orchestrator/index.js +1 -0
  424. package/dist/plugin/orchestrator/plugin.js +7 -0
  425. package/dist/plugin/orchestrator/resolveStrategy.d.ts +19 -0
  426. package/dist/plugin/orchestrator/resolveStrategy.d.ts.map +1 -0
  427. package/dist/plugin/orchestrator/resolveStrategy.js +35 -0
  428. package/dist/plugin/orchestrator/types.d.ts +21 -0
  429. package/dist/plugin/orchestrator/types.d.ts.map +1 -0
  430. package/dist/plugin/orchestrator/types.js +1 -0
  431. package/dist/plugin/plugin.client.d.ts +11 -19
  432. package/dist/plugin/plugin.client.d.ts.map +1 -1
  433. package/dist/plugin/plugin.client.js +28 -29
  434. package/dist/plugin/plugin.d.ts +2 -1
  435. package/dist/plugin/plugin.d.ts.map +1 -1
  436. package/dist/plugin/plugin.js +4 -2
  437. package/dist/plugin/plugin.server.d.ts +13 -11
  438. package/dist/plugin/plugin.server.d.ts.map +1 -1
  439. package/dist/plugin/plugin.server.js +19 -22
  440. package/dist/plugin/process-env.d.ts +19 -6
  441. package/dist/plugin/process-env.d.ts.map +1 -1
  442. package/dist/plugin/process-env.js +17 -0
  443. package/dist/plugin/react-client/createMessageHandlers.d.ts +2 -10
  444. package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
  445. package/dist/plugin/react-client/createMessageHandlers.js +42 -69
  446. package/dist/plugin/react-client/index.client.d.ts +2 -0
  447. package/dist/plugin/react-client/index.client.d.ts.map +1 -0
  448. package/dist/plugin/react-client/index.client.js +1 -0
  449. package/dist/plugin/react-client/index.d.ts +3 -4
  450. package/dist/plugin/react-client/index.d.ts.map +1 -1
  451. package/dist/plugin/react-client/index.js +10 -5
  452. package/dist/plugin/react-client/index.server.d.ts +2 -0
  453. package/dist/plugin/react-client/index.server.d.ts.map +1 -0
  454. package/dist/plugin/react-client/index.server.js +1 -0
  455. package/dist/plugin/react-client/plugin.client.d.ts +15 -0
  456. package/dist/plugin/react-client/plugin.client.d.ts.map +1 -0
  457. package/dist/plugin/react-client/plugin.client.js +98 -0
  458. package/dist/plugin/react-client/plugin.d.ts +2 -5
  459. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  460. package/dist/plugin/react-client/plugin.js +6 -121
  461. package/dist/plugin/react-client/plugin.server.d.ts +15 -0
  462. package/dist/plugin/react-client/plugin.server.d.ts.map +1 -0
  463. package/dist/plugin/react-client/plugin.server.js +93 -0
  464. package/dist/plugin/react-client/types.d.ts +60 -0
  465. package/dist/plugin/react-client/types.d.ts.map +1 -0
  466. package/dist/plugin/react-client/types.js +1 -0
  467. package/dist/plugin/react-server/index.client.d.ts +2 -0
  468. package/dist/plugin/react-server/index.client.d.ts.map +1 -0
  469. package/dist/plugin/react-server/index.client.js +1 -0
  470. package/dist/plugin/react-server/index.d.ts +3 -1
  471. package/dist/plugin/react-server/index.d.ts.map +1 -1
  472. package/dist/plugin/react-server/index.js +13 -1
  473. package/dist/plugin/react-server/index.server.d.ts +2 -0
  474. package/dist/plugin/react-server/index.server.d.ts.map +1 -0
  475. package/dist/plugin/react-server/index.server.js +1 -0
  476. package/dist/plugin/react-server/plugin.client.d.ts +3 -0
  477. package/dist/plugin/react-server/plugin.client.d.ts.map +1 -0
  478. package/dist/plugin/react-server/plugin.client.js +40 -0
  479. package/dist/plugin/react-server/plugin.d.ts +2 -5
  480. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  481. package/dist/plugin/react-server/plugin.js +5 -141
  482. package/dist/plugin/react-server/plugin.server.d.ts +3 -0
  483. package/dist/plugin/react-server/plugin.server.d.ts.map +1 -0
  484. package/dist/plugin/react-server/plugin.server.js +18 -0
  485. package/dist/plugin/react-server/types.d.ts +11 -0
  486. package/dist/plugin/react-server/types.d.ts.map +1 -0
  487. package/dist/plugin/react-server/types.js +1 -0
  488. package/dist/plugin/react-static/collectHtmlContent.d.ts +15 -0
  489. package/dist/plugin/react-static/collectHtmlContent.d.ts.map +1 -0
  490. package/dist/plugin/react-static/collectHtmlContent.js +104 -0
  491. package/dist/plugin/react-static/collectRscContent.d.ts +10 -15
  492. package/dist/plugin/react-static/collectRscContent.d.ts.map +1 -1
  493. package/dist/plugin/react-static/collectRscContent.js +71 -20
  494. package/dist/plugin/react-static/configurePreviewServer.d.ts +1 -7
  495. package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
  496. package/dist/plugin/react-static/configurePreviewServer.js +15 -29
  497. package/dist/plugin/react-static/createBuildLoader.client.d.ts +2 -0
  498. package/dist/plugin/react-static/createBuildLoader.client.d.ts.map +1 -0
  499. package/dist/plugin/react-static/createBuildLoader.client.js +7 -0
  500. package/dist/plugin/react-static/createBuildLoader.d.ts +3 -19
  501. package/dist/plugin/react-static/createBuildLoader.d.ts.map +1 -1
  502. package/dist/plugin/react-static/createBuildLoader.js +4 -226
  503. package/dist/plugin/react-static/createBuildLoader.server.d.ts +9 -0
  504. package/dist/plugin/react-static/createBuildLoader.server.d.ts.map +1 -0
  505. package/dist/plugin/react-static/createBuildLoader.server.js +253 -0
  506. package/dist/plugin/react-static/fileWriter.d.ts +3 -14
  507. package/dist/plugin/react-static/fileWriter.d.ts.map +1 -1
  508. package/dist/plugin/react-static/fileWriter.js +233 -42
  509. package/dist/plugin/react-static/index.client.d.ts +7 -0
  510. package/dist/plugin/react-static/index.client.d.ts.map +1 -0
  511. package/dist/plugin/react-static/index.client.js +6 -0
  512. package/dist/plugin/react-static/index.d.ts +7 -1
  513. package/dist/plugin/react-static/index.d.ts.map +1 -1
  514. package/dist/plugin/react-static/index.js +19 -1
  515. package/dist/plugin/react-static/index.server.d.ts +7 -0
  516. package/dist/plugin/react-static/index.server.d.ts.map +1 -0
  517. package/dist/plugin/react-static/index.server.js +6 -0
  518. package/dist/plugin/react-static/plugin.client.d.ts +32 -0
  519. package/dist/plugin/react-static/plugin.client.d.ts.map +1 -0
  520. package/dist/plugin/react-static/plugin.client.js +801 -0
  521. package/dist/plugin/react-static/plugin.d.ts +3 -20
  522. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  523. package/dist/plugin/react-static/plugin.js +4 -365
  524. package/dist/plugin/react-static/plugin.server.d.ts +18 -0
  525. package/dist/plugin/react-static/plugin.server.d.ts.map +1 -0
  526. package/dist/plugin/react-static/plugin.server.js +615 -0
  527. package/dist/plugin/react-static/processCssFilesForPages.d.ts +16 -0
  528. package/dist/plugin/react-static/processCssFilesForPages.d.ts.map +1 -0
  529. package/dist/plugin/react-static/processCssFilesForPages.js +94 -0
  530. package/dist/plugin/react-static/renderPage.client.d.ts +49 -0
  531. package/dist/plugin/react-static/renderPage.client.d.ts.map +1 -0
  532. package/dist/plugin/react-static/renderPage.client.js +555 -0
  533. package/dist/plugin/react-static/renderPage.d.ts +3 -4
  534. package/dist/plugin/react-static/renderPage.d.ts.map +1 -1
  535. package/dist/plugin/react-static/renderPage.js +6 -131
  536. package/dist/plugin/react-static/renderPage.server.d.ts +24 -0
  537. package/dist/plugin/react-static/renderPage.server.d.ts.map +1 -0
  538. package/dist/plugin/react-static/renderPage.server.js +533 -0
  539. package/dist/plugin/react-static/renderPages.d.ts +11 -3
  540. package/dist/plugin/react-static/renderPages.d.ts.map +1 -1
  541. package/dist/plugin/react-static/renderPages.js +533 -92
  542. package/dist/plugin/react-static/renderPagesBatched.d.ts +6 -0
  543. package/dist/plugin/react-static/renderPagesBatched.d.ts.map +1 -0
  544. package/dist/plugin/react-static/renderPagesBatched.js +195 -0
  545. package/dist/plugin/react-static/renderStreams.d.ts +2 -5
  546. package/dist/plugin/react-static/renderStreams.d.ts.map +1 -1
  547. package/dist/plugin/react-static/renderStreams.js +36 -24
  548. package/dist/plugin/react-static/rscToHtmlStream.client.d.ts +12 -0
  549. package/dist/plugin/react-static/rscToHtmlStream.client.d.ts.map +1 -0
  550. package/dist/plugin/react-static/rscToHtmlStream.client.js +32 -0
  551. package/dist/plugin/react-static/rscToHtmlStream.d.ts +3 -21
  552. package/dist/plugin/react-static/rscToHtmlStream.d.ts.map +1 -1
  553. package/dist/plugin/react-static/rscToHtmlStream.js +4 -53
  554. package/dist/plugin/react-static/rscToHtmlStream.server.d.ts +3 -0
  555. package/dist/plugin/react-static/rscToHtmlStream.server.d.ts.map +1 -0
  556. package/dist/plugin/react-static/rscToHtmlStream.server.js +39 -0
  557. package/dist/plugin/react-static/temporaryReferences.client.d.ts +2 -0
  558. package/dist/plugin/react-static/temporaryReferences.client.d.ts.map +1 -0
  559. package/dist/plugin/react-static/temporaryReferences.client.js +1 -0
  560. package/dist/plugin/react-static/temporaryReferences.d.ts +2 -1
  561. package/dist/plugin/react-static/temporaryReferences.d.ts.map +1 -1
  562. package/dist/plugin/react-static/temporaryReferences.js +6 -10
  563. package/dist/plugin/react-static/temporaryReferences.server.d.ts +2 -0
  564. package/dist/plugin/react-static/temporaryReferences.server.d.ts.map +1 -0
  565. package/dist/plugin/react-static/temporaryReferences.server.js +3 -0
  566. package/dist/plugin/react-static/types.d.ts +83 -9
  567. package/dist/plugin/react-static/types.d.ts.map +1 -1
  568. package/dist/plugin/root.d.ts.map +1 -1
  569. package/dist/plugin/root.js +2 -5
  570. package/dist/plugin/stream/MessagePortReadable.d.ts +22 -0
  571. package/dist/plugin/stream/MessagePortReadable.d.ts.map +1 -0
  572. package/dist/plugin/stream/MessagePortReadable.js +101 -0
  573. package/dist/plugin/stream/MessagePortWritable.d.ts +22 -0
  574. package/dist/plugin/stream/MessagePortWritable.d.ts.map +1 -0
  575. package/dist/plugin/stream/MessagePortWritable.js +85 -0
  576. package/dist/plugin/stream/client.js +12 -0
  577. package/dist/plugin/stream/createFromNodeStream.client.d.ts +9 -0
  578. package/dist/plugin/stream/createFromNodeStream.client.d.ts.map +1 -0
  579. package/dist/plugin/stream/createFromNodeStream.client.js +76 -0
  580. package/dist/plugin/stream/createFromNodeStream.d.ts +3 -0
  581. package/dist/plugin/stream/createFromNodeStream.d.ts.map +1 -0
  582. package/dist/plugin/stream/createFromNodeStream.js +6 -0
  583. package/dist/plugin/stream/createFromNodeStream.server.d.ts +9 -0
  584. package/dist/plugin/stream/createFromNodeStream.server.d.ts.map +1 -0
  585. package/dist/plugin/stream/createFromNodeStream.server.js +27 -0
  586. package/dist/plugin/stream/createFromNodeStream.types.d.ts +37 -0
  587. package/dist/plugin/stream/createFromNodeStream.types.d.ts.map +1 -0
  588. package/dist/plugin/stream/createFromNodeStream.types.js +1 -0
  589. package/dist/plugin/stream/createHtmlStream.client.d.ts +3 -0
  590. package/dist/plugin/stream/createHtmlStream.client.d.ts.map +1 -0
  591. package/dist/plugin/stream/createHtmlStream.client.js +42 -0
  592. package/dist/plugin/stream/createHtmlStream.d.ts +3 -0
  593. package/dist/plugin/stream/createHtmlStream.d.ts.map +1 -0
  594. package/dist/plugin/stream/createHtmlStream.js +6 -0
  595. package/dist/plugin/stream/createHtmlStream.server.d.ts +6 -0
  596. package/dist/plugin/stream/createHtmlStream.server.d.ts.map +1 -0
  597. package/dist/plugin/stream/createHtmlStream.server.js +224 -0
  598. package/dist/plugin/stream/createHtmlStream.types.d.ts +43 -0
  599. package/dist/plugin/stream/createHtmlStream.types.d.ts.map +1 -0
  600. package/dist/plugin/stream/createHtmlStream.types.js +1 -0
  601. package/dist/plugin/stream/createMainThreadHandlers.d.ts +11 -0
  602. package/dist/plugin/stream/createMainThreadHandlers.d.ts.map +1 -0
  603. package/dist/plugin/stream/createMainThreadHandlers.js +32 -0
  604. package/dist/plugin/stream/createMessageChannels.d.ts +29 -0
  605. package/dist/plugin/stream/createMessageChannels.d.ts.map +1 -0
  606. package/dist/plugin/stream/createMessageChannels.js +35 -0
  607. package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.d.ts +10 -0
  608. package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.d.ts.map +1 -0
  609. package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.js +188 -0
  610. package/dist/plugin/stream/createRenderToPipeableStreamHandler.d.ts +3 -0
  611. package/dist/plugin/stream/createRenderToPipeableStreamHandler.d.ts.map +1 -0
  612. package/dist/plugin/stream/createRenderToPipeableStreamHandler.js +6 -0
  613. package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.d.ts +45 -0
  614. package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.d.ts.map +1 -0
  615. package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.js +249 -0
  616. package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.d.ts +17 -0
  617. package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.d.ts.map +1 -0
  618. package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.js +1 -0
  619. package/dist/plugin/stream/createRscStream.client.d.ts +18 -0
  620. package/dist/plugin/stream/createRscStream.client.d.ts.map +1 -0
  621. package/dist/plugin/stream/createRscStream.client.js +79 -0
  622. package/dist/plugin/stream/createRscStream.d.ts +2 -0
  623. package/dist/plugin/stream/createRscStream.d.ts.map +1 -0
  624. package/dist/plugin/stream/createRscStream.js +13 -0
  625. package/dist/plugin/stream/createRscStream.server.d.ts +46 -0
  626. package/dist/plugin/stream/createRscStream.server.d.ts.map +1 -0
  627. package/dist/plugin/stream/createRscStream.server.js +113 -0
  628. package/dist/plugin/stream/createRscStream.types.d.ts +134 -0
  629. package/dist/plugin/stream/createRscStream.types.d.ts.map +1 -0
  630. package/dist/plugin/stream/createRscStream.types.js +1 -0
  631. package/dist/plugin/stream/createRscStream.utils.d.ts +54 -0
  632. package/dist/plugin/stream/createRscStream.utils.d.ts.map +1 -0
  633. package/dist/plugin/stream/createRscStream.utils.js +91 -0
  634. package/dist/plugin/stream/createRscWorkerStream.d.ts +41 -0
  635. package/dist/plugin/stream/createRscWorkerStream.d.ts.map +1 -0
  636. package/dist/plugin/stream/createRscWorkerStream.js +120 -0
  637. package/dist/plugin/stream/handleRscStream.client.d.ts +17 -0
  638. package/dist/plugin/stream/handleRscStream.client.d.ts.map +1 -0
  639. package/dist/plugin/stream/handleRscStream.client.js +163 -0
  640. package/dist/plugin/stream/handleRscStream.d.ts +3 -0
  641. package/dist/plugin/stream/handleRscStream.d.ts.map +1 -0
  642. package/dist/plugin/stream/handleRscStream.js +13 -0
  643. package/dist/plugin/stream/handleRscStream.server.d.ts +6 -0
  644. package/dist/plugin/stream/handleRscStream.server.d.ts.map +1 -0
  645. package/dist/plugin/stream/handleRscStream.server.js +70 -0
  646. package/dist/plugin/stream/handleRscStream.types.d.ts +28 -0
  647. package/dist/plugin/stream/handleRscStream.types.d.ts.map +1 -0
  648. package/dist/plugin/stream/handleRscStream.types.js +1 -0
  649. package/dist/plugin/stream/index.client.d.ts +7 -0
  650. package/dist/plugin/stream/index.client.d.ts.map +1 -0
  651. package/dist/plugin/stream/index.client.js +11 -0
  652. package/dist/plugin/stream/index.d.ts +95 -0
  653. package/dist/plugin/stream/index.d.ts.map +1 -0
  654. package/dist/plugin/stream/index.js +21 -0
  655. package/dist/plugin/stream/index.server.d.ts +7 -0
  656. package/dist/plugin/stream/index.server.d.ts.map +1 -0
  657. package/dist/plugin/stream/index.server.js +11 -0
  658. package/dist/plugin/stream/renderRscStream.server.d.ts +21 -0
  659. package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -0
  660. package/dist/plugin/stream/renderRscStream.server.js +153 -0
  661. package/dist/plugin/stream/renderRscStream.types.d.ts +36 -0
  662. package/dist/plugin/stream/renderRscStream.types.d.ts.map +1 -0
  663. package/dist/plugin/stream/renderRscStream.types.js +1 -0
  664. package/dist/plugin/stream/renderRscStreamHelpers.server.d.ts +9 -0
  665. package/dist/plugin/stream/renderRscStreamHelpers.server.d.ts.map +1 -0
  666. package/dist/plugin/stream/renderRscStreamHelpers.server.js +63 -0
  667. package/dist/plugin/stream/server.js +12 -0
  668. package/dist/plugin/stream/setMaxListeners.d.ts +16 -0
  669. package/dist/plugin/stream/setMaxListeners.d.ts.map +1 -0
  670. package/dist/plugin/stream/setMaxListeners.js +16 -0
  671. package/dist/plugin/transformer/createTransformerPlugin.d.ts +18 -0
  672. package/dist/plugin/transformer/createTransformerPlugin.d.ts.map +1 -0
  673. package/dist/plugin/transformer/createTransformerPlugin.js +269 -0
  674. package/dist/plugin/transformer/plugin.client.d.ts +3 -0
  675. package/dist/plugin/transformer/plugin.client.d.ts.map +1 -0
  676. package/dist/plugin/transformer/plugin.client.js +5 -0
  677. package/dist/plugin/transformer/plugin.server.d.ts +2 -29
  678. package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
  679. package/dist/plugin/transformer/plugin.server.js +5 -104
  680. package/dist/plugin/transformer/transformerEnv.d.ts +15 -0
  681. package/dist/plugin/transformer/transformerEnv.d.ts.map +1 -0
  682. package/dist/plugin/transformer/transformerEnv.js +26 -0
  683. package/dist/plugin/types.d.ts +368 -143
  684. package/dist/plugin/types.d.ts.map +1 -1
  685. package/dist/plugin/types.js +1 -2
  686. package/dist/plugin/utils/callServer.d.ts +1 -1
  687. package/dist/plugin/utils/callServer.d.ts.map +1 -1
  688. package/dist/plugin/utils/createCallServer.d.ts +1 -1
  689. package/dist/plugin/utils/createCallServer.d.ts.map +1 -1
  690. package/dist/plugin/utils/createCallServer.js +4 -9
  691. package/dist/plugin/utils/createReactFetcher.d.ts +43 -2
  692. package/dist/plugin/utils/createReactFetcher.d.ts.map +1 -1
  693. package/dist/plugin/utils/createReactFetcher.js +14 -3
  694. package/dist/plugin/utils/envUrls.node.d.ts.map +1 -1
  695. package/dist/plugin/utils/envUrls.node.js +11 -11
  696. package/dist/plugin/utils/index.client.d.ts +8 -0
  697. package/dist/plugin/utils/index.client.d.ts.map +1 -0
  698. package/dist/plugin/utils/index.client.js +8 -0
  699. package/dist/plugin/utils/index.d.ts +1 -0
  700. package/dist/plugin/utils/index.d.ts.map +1 -1
  701. package/dist/plugin/utils/index.js +3 -2
  702. package/dist/plugin/utils/index.server.d.ts +6 -0
  703. package/dist/plugin/utils/index.server.d.ts.map +1 -0
  704. package/dist/plugin/utils/index.server.js +8 -0
  705. package/dist/plugin/utils/routeToURL.d.ts.map +1 -1
  706. package/dist/plugin/utils/routeToURL.js +4 -4
  707. package/dist/plugin/utils/urls.d.ts +1 -1
  708. package/dist/plugin/utils/urls.d.ts.map +1 -1
  709. package/dist/plugin/utils/urls.js +29 -8
  710. package/dist/plugin/utils/useRscHmr.d.ts +39 -0
  711. package/dist/plugin/utils/useRscHmr.d.ts.map +1 -0
  712. package/dist/plugin/utils/useRscHmr.js +27 -0
  713. package/dist/plugin/vendor/vendor.client.d.ts +3 -3
  714. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
  715. package/dist/plugin/vendor/vendor.client.js +7 -6
  716. package/dist/plugin/vendor/vendor.d.ts +1 -1
  717. package/dist/plugin/vendor/vendor.d.ts.map +1 -1
  718. package/dist/plugin/vendor/vendor.js +4 -6
  719. package/dist/plugin/vendor/vendor.server.d.ts +4 -2
  720. package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
  721. package/dist/plugin/vendor/vendor.server.js +2 -3
  722. package/dist/plugin/vendor/vendor.static.d.ts +4 -0
  723. package/dist/plugin/vendor/vendor.static.d.ts.map +1 -0
  724. package/dist/plugin/vendor/vendor.static.js +15 -0
  725. package/dist/plugin/worker/createWorker.d.ts +16 -5
  726. package/dist/plugin/worker/createWorker.d.ts.map +1 -1
  727. package/dist/plugin/worker/createWorker.js +207 -30
  728. package/dist/plugin/worker/html/handleHtmlRender.d.ts +14 -0
  729. package/dist/plugin/worker/html/handleHtmlRender.d.ts.map +1 -0
  730. package/dist/plugin/worker/html/handleHtmlRender.js +190 -0
  731. package/dist/plugin/worker/html/html-worker.development.js +9 -26
  732. package/dist/plugin/worker/html/html-worker.js +4 -4
  733. package/dist/plugin/worker/html/html-worker.production.js +7 -13
  734. package/dist/plugin/worker/html/index.d.ts +1 -1
  735. package/dist/plugin/worker/html/index.js +6 -2
  736. package/dist/plugin/worker/html/messageHandler.d.ts +1 -1
  737. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  738. package/dist/plugin/worker/html/messageHandler.js +291 -104
  739. package/dist/plugin/worker/html/state.d.ts +10 -0
  740. package/dist/plugin/worker/html/state.d.ts.map +1 -0
  741. package/dist/plugin/worker/html/state.js +28 -0
  742. package/dist/plugin/worker/html/types.d.ts +52 -23
  743. package/dist/plugin/worker/html/types.d.ts.map +1 -1
  744. package/dist/plugin/worker/index.js +1 -1
  745. package/dist/plugin/worker/rsc/createBundleLoader.d.ts +22 -0
  746. package/dist/plugin/worker/rsc/createBundleLoader.d.ts.map +1 -0
  747. package/dist/plugin/worker/rsc/createBundleLoader.js +55 -0
  748. package/dist/plugin/worker/rsc/createRscWorkerLoader.d.ts +23 -0
  749. package/dist/plugin/worker/rsc/createRscWorkerLoader.d.ts.map +1 -0
  750. package/dist/plugin/worker/rsc/createRscWorkerLoader.js +79 -0
  751. package/dist/plugin/worker/rsc/handleRscRender.d.ts +32 -0
  752. package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -0
  753. package/dist/plugin/worker/rsc/handleRscRender.js +349 -0
  754. package/dist/plugin/worker/rsc/handlers.d.ts +8 -2
  755. package/dist/plugin/worker/rsc/handlers.d.ts.map +1 -1
  756. package/dist/plugin/worker/rsc/handlers.js +137 -200
  757. package/dist/plugin/worker/rsc/hydrateRscRenderMessage.d.ts +118 -0
  758. package/dist/plugin/worker/rsc/hydrateRscRenderMessage.d.ts.map +1 -0
  759. package/dist/plugin/worker/rsc/hydrateRscRenderMessage.js +61 -0
  760. package/dist/plugin/worker/rsc/messageHandler.d.ts +1 -1
  761. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  762. package/dist/plugin/worker/rsc/messageHandler.js +927 -47
  763. package/dist/plugin/worker/rsc/rsc-worker.development.js +153 -148
  764. package/dist/plugin/worker/rsc/rsc-worker.js +2 -3
  765. package/dist/plugin/worker/rsc/rsc-worker.production.js +240 -15
  766. package/dist/plugin/worker/rsc/state.d.ts +6 -0
  767. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  768. package/dist/plugin/worker/rsc/state.js +37 -5
  769. package/dist/plugin/worker/rsc/types.d.ts +73 -12
  770. package/dist/plugin/worker/rsc/types.d.ts.map +1 -1
  771. package/dist/plugin/worker/rsc/workerUserOptions.d.ts +10 -0
  772. package/dist/plugin/worker/rsc/workerUserOptions.d.ts.map +1 -0
  773. package/dist/plugin/worker/rsc/workerUserOptions.js +39 -0
  774. package/dist/plugin/worker/sendMessage.d.ts +2 -3
  775. package/dist/plugin/worker/sendMessage.d.ts.map +1 -1
  776. package/dist/plugin/worker/sendMessage.js +24 -38
  777. package/dist/plugin/worker/types.d.ts +42 -56
  778. package/dist/plugin/worker/types.d.ts.map +1 -1
  779. package/dist/plugin/worker/worker-handlers.server.d.ts +2 -0
  780. package/dist/plugin/worker/worker-handlers.server.d.ts.map +1 -0
  781. package/dist/plugin/worker/worker-handlers.server.js +1 -0
  782. package/dist/server.d.ts +5 -1
  783. package/dist/server.d.ts.map +1 -1
  784. package/dist/server.js +4 -6
  785. package/dist/static.js +11 -0
  786. package/dist/tsconfig.tsbuildinfo +1 -1
  787. package/package.json +102 -27
  788. package/plugin/bundle/bundles.ts +22 -0
  789. package/plugin/bundle/deferredStaticGeneration.ts +48 -0
  790. package/plugin/bundle/manifests.ts +73 -0
  791. package/plugin/components/css.tsx +3 -7
  792. package/plugin/components/html.tsx +4 -3
  793. package/plugin/components/index.ts +1 -1
  794. package/plugin/components/root.tsx +3 -3
  795. package/plugin/config/autoDiscover/createGlobAutoDiscover.ts +10 -5
  796. package/plugin/config/autoDiscover/pageAndPropFiles.ts +4 -2
  797. package/plugin/config/autoDiscover/resolveAutoDiscover.ts +64 -79
  798. package/plugin/config/autoDiscover/resolveBuildPages.ts +181 -69
  799. package/plugin/config/createHandlerOptions.client.ts +403 -0
  800. package/plugin/config/createHandlerOptions.server.ts +477 -0
  801. package/plugin/config/createHandlerOptions.ts +46 -0
  802. package/plugin/config/createHandlerOptions.types.ts +119 -0
  803. package/plugin/config/createModuleID.ts +201 -10
  804. package/plugin/config/defaults.tsx +108 -55
  805. package/plugin/config/envPrefixFromConfig.ts +10 -0
  806. package/plugin/config/getCondition.ts +267 -10
  807. package/plugin/{getNodeEnv.ts → config/getNodeEnv.ts} +4 -2
  808. package/plugin/config/index.ts +60 -1
  809. package/plugin/config/resolveDirectiveMatcher.ts +13 -34
  810. package/plugin/config/resolveEnv.ts +37 -33
  811. package/plugin/config/resolveOptions.ts +375 -154
  812. package/plugin/config/resolvePages.ts +1 -1
  813. package/plugin/config/resolvePatternWithValues.ts +6 -26
  814. package/plugin/config/resolveUrlOption.ts +2 -2
  815. package/plugin/config/resolveUserConfig.ts +359 -124
  816. package/plugin/config/stashedOptionsState.ts +144 -0
  817. package/plugin/dev-server/cleanupServerAction.client.ts +47 -0
  818. package/plugin/dev-server/cleanupServerAction.server.ts +24 -0
  819. package/plugin/dev-server/cleanupServerAction.ts +8 -0
  820. package/plugin/dev-server/configureReactServer.client.ts +107 -0
  821. package/plugin/dev-server/configureReactServer.server.ts +558 -0
  822. package/plugin/dev-server/configureReactServer.ts +8 -0
  823. package/plugin/dev-server/configureRequestHandler.client.ts +382 -0
  824. package/plugin/dev-server/configureRequestHandler.server.ts +46 -0
  825. package/plugin/dev-server/configureRequestHandler.ts +8 -0
  826. package/plugin/dev-server/handleServerAction.client.ts +126 -0
  827. package/plugin/dev-server/handleServerAction.server.ts +10 -0
  828. package/plugin/dev-server/handleServerAction.ts +8 -0
  829. package/plugin/dev-server/index.client.ts +6 -0
  830. package/plugin/dev-server/index.server.ts +6 -0
  831. package/plugin/dev-server/index.ts +20 -0
  832. package/plugin/dev-server/plugin.client.ts +160 -0
  833. package/plugin/dev-server/plugin.server.ts +133 -0
  834. package/plugin/dev-server/restartWorker.client.ts +155 -0
  835. package/plugin/dev-server/restartWorker.server.ts +108 -0
  836. package/plugin/dev-server/restartWorker.ts +8 -0
  837. package/plugin/dev-server/types.ts +78 -0
  838. package/plugin/dev-server/virtualRscHmrPlugin.ts +82 -0
  839. package/plugin/env/createConfigEnv.ts +59 -0
  840. package/plugin/env/createEnvPlugin.ts +76 -0
  841. package/plugin/env/getArgValue.ts +56 -0
  842. package/plugin/env/getEnvKey.ts +80 -0
  843. package/plugin/env/index.ts +14 -1
  844. package/plugin/env/plugin.client.ts +3 -0
  845. package/plugin/env/plugin.server.ts +4 -0
  846. package/plugin/env/plugin.ts +40 -164
  847. package/plugin/env/userConfigEnv.ts +22 -0
  848. package/plugin/environments/createBuildEventPlugin.ts +117 -0
  849. package/plugin/environments/createEnvironmentPlugin.ts +332 -0
  850. package/plugin/environments/hashCoordination.ts +39 -0
  851. package/plugin/environments/resolveEnvironmentConfig.ts +320 -0
  852. package/plugin/error/assertPanic.ts +9 -0
  853. package/plugin/error/handleError.ts +63 -0
  854. package/plugin/error/index.ts +4 -1
  855. package/plugin/error/logError.ts +64 -40
  856. package/plugin/error/panicThresholdHandler.ts +52 -0
  857. package/plugin/error/serializeError.ts +36 -11
  858. package/plugin/error/serializeErrorInfo.ts +17 -0
  859. package/plugin/error/setupGlobalErrorHandler.ts +71 -0
  860. package/plugin/error/shouldPanic.ts +14 -0
  861. package/plugin/error/toError.ts +59 -19
  862. package/plugin/error/types.ts +32 -0
  863. package/plugin/helpers/README.md +112 -0
  864. package/plugin/helpers/collectManifestCss.ts +24 -5
  865. package/plugin/helpers/collectViteModuleGraphCss.ts +83 -9
  866. package/plugin/helpers/createBufferedRscStream.ts +194 -0
  867. package/plugin/helpers/createCssProps.tsx +22 -41
  868. package/plugin/helpers/createElementWithReact.tsx +121 -0
  869. package/plugin/helpers/createPatternMatcher.ts +100 -0
  870. package/plugin/helpers/createRscRenderHelpers.ts +77 -0
  871. package/plugin/helpers/createSafePageComponent.ts +64 -0
  872. package/plugin/helpers/createSerializableHandlerOptions.ts +183 -0
  873. package/plugin/helpers/createSharedLoader.ts +207 -0
  874. package/plugin/helpers/createUnifiedCssProcessor.ts +175 -0
  875. package/plugin/helpers/getBundleManifest.ts +2 -3
  876. package/plugin/helpers/getRouteFiles.ts +94 -48
  877. package/plugin/helpers/handleServerAction.client.ts +145 -0
  878. package/plugin/helpers/handleServerAction.server.ts +151 -0
  879. package/plugin/helpers/handleServerAction.ts +19 -78
  880. package/plugin/helpers/handleServerActionHelper.ts +270 -0
  881. package/plugin/helpers/headlessStreamReuseHandler.ts +48 -0
  882. package/plugin/helpers/headlessStreamState.ts +122 -0
  883. package/plugin/helpers/hydrateUserOptions.ts +2 -2
  884. package/plugin/helpers/index.ts +32 -5
  885. package/plugin/helpers/logRenderStart.ts +26 -0
  886. package/plugin/helpers/mergeMessageWithDefaults.ts +80 -0
  887. package/plugin/helpers/pipeToResponse.ts +77 -0
  888. package/plugin/helpers/requestInfo.ts +59 -39
  889. package/plugin/helpers/resolveComponents.client.ts +183 -0
  890. package/plugin/helpers/resolveModuleFromManifest.ts +99 -0
  891. package/plugin/helpers/resolvePageAndProps.ts +237 -50
  892. package/plugin/helpers/resolveRenderUrl.ts +26 -0
  893. package/plugin/helpers/resolveStreamElements.client.ts +50 -0
  894. package/plugin/helpers/resolveStreamElements.server.ts +43 -0
  895. package/plugin/helpers/resolveStreamElements.ts +13 -0
  896. package/plugin/helpers/resolveStreamElements.types.ts +29 -0
  897. package/plugin/helpers/resolveVirtualAndNodeModules.ts +75 -0
  898. package/plugin/helpers/resolveWithDefaultRootAndHtml.ts +25 -0
  899. package/plugin/helpers/serializeUserOptions.ts +37 -15
  900. package/plugin/helpers/tryManifest.ts +15 -6
  901. package/plugin/helpers/validateRscRenderMessage.ts +13 -0
  902. package/plugin/helpers/workerCleanup.ts +85 -0
  903. package/plugin/helpers/workerManager.ts +16 -0
  904. package/plugin/index.ts +6 -2
  905. package/plugin/loader/createDefaultLoader.ts +0 -21
  906. package/plugin/loader/createTransformer.ts +232 -46
  907. package/plugin/loader/directives/analyzeDirectives.ts +163 -73
  908. package/plugin/loader/directives/analyzeModule.ts +46 -19
  909. package/plugin/loader/env-loader.ts +56 -14
  910. package/plugin/loader/parse.ts +2 -2
  911. package/plugin/loader/react-loader.ts +133 -85
  912. package/plugin/loader/transformClientModule.ts +84 -26
  913. package/plugin/loader/transformModule.ts +103 -18
  914. package/plugin/loader/transformModuleIfNeeded.ts +20 -23
  915. package/plugin/loader/transformNonServerEnvironment.ts +103 -0
  916. package/plugin/loader/transformServerModule.ts +132 -37
  917. package/plugin/loader/types.ts +31 -23
  918. package/plugin/metrics/collectStreamMetrics.ts +1 -2
  919. package/plugin/metrics/convertStreamMetrics.ts +28 -0
  920. package/plugin/metrics/createModuleResolutionMetrics.ts +38 -0
  921. package/plugin/metrics/createRenderMetrics.ts +46 -13
  922. package/plugin/metrics/createStreamMetrics.ts +16 -6
  923. package/plugin/metrics/createWorkerStartupMetrics.ts +38 -0
  924. package/plugin/metrics/formatMetrics.ts +5 -33
  925. package/plugin/metrics/index.ts +6 -3
  926. package/plugin/metrics/metricWatcher.ts +216 -0
  927. package/plugin/metrics/types.ts +87 -8
  928. package/plugin/orchestrator/createPluginOrchestrator.client.ts +47 -0
  929. package/plugin/orchestrator/createPluginOrchestrator.server.ts +55 -0
  930. package/plugin/orchestrator/createPluginOrchestrator.ts +29 -0
  931. package/plugin/orchestrator/index.ts +1 -0
  932. package/plugin/orchestrator/resolveStrategy.ts +53 -0
  933. package/plugin/orchestrator/types.ts +24 -0
  934. package/plugin/plugin.client.ts +30 -32
  935. package/plugin/plugin.server.ts +38 -45
  936. package/plugin/plugin.ts +8 -2
  937. package/plugin/process-env.ts +30 -6
  938. package/plugin/react-client/createMessageHandlers.ts +9 -34
  939. package/plugin/react-client/index.client.ts +1 -0
  940. package/plugin/react-client/index.server.ts +1 -0
  941. package/plugin/react-client/index.ts +13 -4
  942. package/plugin/react-client/plugin.client.ts +124 -0
  943. package/plugin/react-client/plugin.server.ts +108 -0
  944. package/plugin/react-client/plugin.ts +13 -152
  945. package/plugin/react-client/types.ts +95 -0
  946. package/plugin/react-server/index.client.ts +1 -0
  947. package/plugin/react-server/index.server.ts +1 -0
  948. package/plugin/react-server/index.ts +13 -1
  949. package/plugin/react-server/plugin.client.ts +54 -0
  950. package/plugin/react-server/plugin.server.ts +27 -0
  951. package/plugin/react-server/plugin.ts +8 -183
  952. package/plugin/react-server/types.ts +24 -0
  953. package/plugin/react-static/collectHtmlContent.ts +131 -0
  954. package/plugin/react-static/collectRscContent.ts +92 -49
  955. package/plugin/react-static/configurePreviewServer.ts +20 -41
  956. package/plugin/react-static/createBuildLoader.client.ts +7 -0
  957. package/plugin/react-static/createBuildLoader.server.ts +333 -0
  958. package/plugin/react-static/createBuildLoader.ts +8 -300
  959. package/plugin/react-static/fileWriter.ts +303 -64
  960. package/plugin/react-static/index.client.ts +6 -0
  961. package/plugin/react-static/index.server.ts +6 -0
  962. package/plugin/react-static/index.ts +25 -1
  963. package/plugin/react-static/plugin.client.ts +932 -0
  964. package/plugin/react-static/plugin.server.ts +713 -0
  965. package/plugin/react-static/plugin.ts +8 -446
  966. package/plugin/react-static/processCssFilesForPages.ts +148 -0
  967. package/plugin/react-static/renderPage.client.ts +640 -0
  968. package/plugin/react-static/renderPage.server.ts +655 -0
  969. package/plugin/react-static/renderPage.ts +10 -172
  970. package/plugin/react-static/renderPages.ts +736 -139
  971. package/plugin/react-static/renderPagesBatched.ts +264 -0
  972. package/plugin/react-static/renderStreams.ts +12 -16
  973. package/plugin/react-static/rscToHtmlStream.client.ts +61 -0
  974. package/plugin/react-static/rscToHtmlStream.server.ts +66 -0
  975. package/plugin/react-static/rscToHtmlStream.ts +8 -80
  976. package/plugin/react-static/temporaryReferences.client.ts +1 -0
  977. package/plugin/react-static/temporaryReferences.server.ts +5 -0
  978. package/plugin/react-static/temporaryReferences.ts +11 -2
  979. package/plugin/react-static/types.ts +202 -8
  980. package/plugin/root.ts +1 -3
  981. package/plugin/stream/MessagePortReadable.ts +131 -0
  982. package/plugin/stream/MessagePortWritable.ts +104 -0
  983. package/plugin/stream/createFromNodeStream.client.ts +90 -0
  984. package/plugin/stream/createFromNodeStream.server.ts +30 -0
  985. package/plugin/stream/createFromNodeStream.ts +13 -0
  986. package/plugin/stream/createFromNodeStream.types.ts +53 -0
  987. package/plugin/stream/createHtmlStream.client.ts +47 -0
  988. package/plugin/stream/createHtmlStream.server.ts +312 -0
  989. package/plugin/stream/createHtmlStream.ts +13 -0
  990. package/plugin/stream/createHtmlStream.types.ts +63 -0
  991. package/plugin/stream/createMainThreadHandlers.ts +44 -0
  992. package/plugin/stream/createMessageChannels.ts +52 -0
  993. package/plugin/stream/createRenderToPipeableStreamHandler.client.ts +224 -0
  994. package/plugin/stream/createRenderToPipeableStreamHandler.server.ts +358 -0
  995. package/plugin/stream/createRenderToPipeableStreamHandler.ts +13 -0
  996. package/plugin/stream/createRenderToPipeableStreamHandler.types.ts +69 -0
  997. package/plugin/stream/createRscStream.client.ts +122 -0
  998. package/plugin/stream/createRscStream.server.ts +188 -0
  999. package/plugin/stream/createRscStream.ts +8 -0
  1000. package/plugin/stream/createRscStream.types.ts +168 -0
  1001. package/plugin/stream/createRscStream.utils.ts +171 -0
  1002. package/plugin/stream/createRscWorkerStream.ts +178 -0
  1003. package/plugin/stream/handleRscStream.client.ts +214 -0
  1004. package/plugin/stream/handleRscStream.server.ts +82 -0
  1005. package/plugin/stream/handleRscStream.ts +11 -0
  1006. package/plugin/stream/handleRscStream.types.ts +70 -0
  1007. package/plugin/stream/index.client.ts +15 -0
  1008. package/plugin/stream/index.server.ts +15 -0
  1009. package/plugin/stream/index.ts +137 -0
  1010. package/plugin/stream/renderRscStream.server.ts +182 -0
  1011. package/plugin/stream/renderRscStream.types.ts +43 -0
  1012. package/plugin/stream/renderRscStreamHelpers.server.ts +88 -0
  1013. package/plugin/stream/setMaxListeners.ts +30 -0
  1014. package/plugin/transformer/README.md +2 -381
  1015. package/plugin/transformer/createTransformerPlugin.ts +388 -0
  1016. package/plugin/transformer/plugin.client.ts +7 -0
  1017. package/plugin/transformer/plugin.server.ts +6 -140
  1018. package/plugin/transformer/transformerEnv.ts +49 -0
  1019. package/plugin/types/react-server-dom-esm.d.ts +269 -110
  1020. package/plugin/types/virtual-rsc-hmr.d.ts +21 -0
  1021. package/plugin/types.ts +637 -225
  1022. package/plugin/utils/createCallServer.ts +8 -18
  1023. package/plugin/utils/createReactFetcher.ts +87 -5
  1024. package/plugin/utils/env.ts +1 -1
  1025. package/plugin/utils/envUrls.node.ts +15 -10
  1026. package/plugin/utils/index.client.ts +8 -0
  1027. package/plugin/utils/index.server.ts +8 -0
  1028. package/plugin/utils/index.ts +5 -1
  1029. package/plugin/utils/routeToURL.ts +3 -4
  1030. package/plugin/utils/urls.ts +41 -9
  1031. package/plugin/utils/useRscHmr.ts +72 -0
  1032. package/plugin/vendor/vendor.client.ts +9 -7
  1033. package/plugin/vendor/vendor.server.ts +5 -4
  1034. package/plugin/vendor/vendor.static.ts +12 -0
  1035. package/plugin/vendor/vendor.ts +10 -5
  1036. package/plugin/worker/createWorker.ts +283 -41
  1037. package/plugin/worker/html/README.md +2 -65
  1038. package/plugin/worker/html/handleHtmlRender.ts +245 -0
  1039. package/plugin/worker/html/html-worker.development.tsx +5 -17
  1040. package/plugin/worker/html/html-worker.production.tsx +1 -1
  1041. package/plugin/worker/html/html-worker.ts +5 -5
  1042. package/plugin/worker/html/index.ts +6 -6
  1043. package/plugin/worker/html/messageHandler.tsx +317 -98
  1044. package/plugin/worker/html/state.ts +38 -0
  1045. package/plugin/worker/html/types.ts +108 -35
  1046. package/plugin/worker/rsc/README.md +2 -257
  1047. package/plugin/worker/rsc/createBundleLoader.ts +92 -0
  1048. package/plugin/worker/rsc/createRscWorkerLoader.ts +104 -0
  1049. package/plugin/worker/rsc/handleRscRender.ts +510 -0
  1050. package/plugin/worker/rsc/handlers.ts +159 -238
  1051. package/plugin/worker/rsc/hydrateRscRenderMessage.ts +118 -0
  1052. package/plugin/worker/rsc/messageHandler.tsx +1289 -56
  1053. package/plugin/worker/rsc/rsc-worker.development.ts +198 -185
  1054. package/plugin/worker/rsc/rsc-worker.production.ts +306 -21
  1055. package/plugin/worker/rsc/rsc-worker.tsx +3 -5
  1056. package/plugin/worker/rsc/state.ts +54 -2
  1057. package/plugin/worker/rsc/types.ts +110 -32
  1058. package/plugin/worker/rsc/workerUserOptions.ts +63 -0
  1059. package/plugin/worker/sendMessage.ts +33 -53
  1060. package/plugin/worker/types.ts +94 -91
  1061. package/scripts/generate-toc.mjs +311 -0
  1062. package/scripts/remove-toc.mjs +51 -0
  1063. package/scripts/test-both.sh +82 -0
  1064. package/dist/plugin/config/resolveDevServerConfig.d.ts +0 -2
  1065. package/dist/plugin/config/resolveDevServerConfig.d.ts.map +0 -1
  1066. package/dist/plugin/getNodeEnv.d.ts.map +0 -1
  1067. package/dist/plugin/getNodeEnv.js +0 -17
  1068. package/dist/plugin/helpers/collectBundleManifestCss.d.ts +0 -2
  1069. package/dist/plugin/helpers/collectBundleManifestCss.d.ts.map +0 -1
  1070. package/dist/plugin/helpers/collectBundleManifestCss.js +0 -2
  1071. package/dist/plugin/helpers/createEventHandler.d.ts +0 -22
  1072. package/dist/plugin/helpers/createEventHandler.d.ts.map +0 -1
  1073. package/dist/plugin/helpers/createEventHandler.js +0 -36
  1074. package/dist/plugin/helpers/createHandler.d.ts +0 -14
  1075. package/dist/plugin/helpers/createHandler.d.ts.map +0 -1
  1076. package/dist/plugin/helpers/createHandler.js +0 -75
  1077. package/dist/plugin/helpers/createRscStream.d.ts +0 -26
  1078. package/dist/plugin/helpers/createRscStream.d.ts.map +0 -1
  1079. package/dist/plugin/helpers/createRscStream.js +0 -174
  1080. package/dist/plugin/helpers/defaultFileWriter.d.ts +0 -2
  1081. package/dist/plugin/helpers/defaultFileWriter.d.ts.map +0 -1
  1082. package/dist/plugin/helpers/resolveComponents.d.ts +0 -27
  1083. package/dist/plugin/helpers/resolveComponents.d.ts.map +0 -1
  1084. package/dist/plugin/helpers/resolveComponents.js +0 -137
  1085. package/dist/plugin/helpers/resolveUserComponents.d.ts +0 -33
  1086. package/dist/plugin/helpers/resolveUserComponents.d.ts.map +0 -1
  1087. package/dist/plugin/helpers/resolveUserComponents.js +0 -163
  1088. package/dist/plugin/preserver/index.d.ts +0 -2
  1089. package/dist/plugin/preserver/index.d.ts.map +0 -1
  1090. package/dist/plugin/preserver/index.js +0 -1
  1091. package/dist/plugin/preserver/plugin.d.ts +0 -3
  1092. package/dist/plugin/preserver/plugin.d.ts.map +0 -1
  1093. package/dist/plugin/preserver/plugin.js +0 -134
  1094. package/dist/plugin/react-client/cleanupWorkerServerAction.d.ts +0 -11
  1095. package/dist/plugin/react-client/cleanupWorkerServerAction.d.ts.map +0 -1
  1096. package/dist/plugin/react-client/cleanupWorkerServerAction.js +0 -18
  1097. package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts +0 -17
  1098. package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +0 -1
  1099. package/dist/plugin/react-client/configureWorkerRequestHandler.js +0 -209
  1100. package/dist/plugin/react-client/createWorkerStream.d.ts +0 -26
  1101. package/dist/plugin/react-client/createWorkerStream.d.ts.map +0 -1
  1102. package/dist/plugin/react-client/createWorkerStream.js +0 -163
  1103. package/dist/plugin/react-client/handleWorkerRscStream.d.ts +0 -24
  1104. package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +0 -1
  1105. package/dist/plugin/react-client/handleWorkerRscStream.js +0 -99
  1106. package/dist/plugin/react-client/handleWorkerServerAction.d.ts +0 -13
  1107. package/dist/plugin/react-client/handleWorkerServerAction.d.ts.map +0 -1
  1108. package/dist/plugin/react-client/handleWorkerServerAction.js +0 -62
  1109. package/dist/plugin/react-client/restartWorker.d.ts +0 -12
  1110. package/dist/plugin/react-client/restartWorker.d.ts.map +0 -1
  1111. package/dist/plugin/react-client/restartWorker.js +0 -70
  1112. package/dist/plugin/react-server/configureReactServer.d.ts +0 -10
  1113. package/dist/plugin/react-server/configureReactServer.d.ts.map +0 -1
  1114. package/dist/plugin/react-server/configureReactServer.js +0 -205
  1115. package/dist/plugin/react-server/handleServerAction.d.ts +0 -6
  1116. package/dist/plugin/react-server/handleServerAction.d.ts.map +0 -1
  1117. package/dist/plugin/react-server/handleServerAction.js +0 -159
  1118. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts +0 -25
  1119. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts.map +0 -1
  1120. package/dist/plugin/react-static/collectHtmlWorkerContent.js +0 -94
  1121. package/dist/plugin/react-static/streamHandler.d.ts +0 -2
  1122. package/dist/plugin/react-static/streamHandler.d.ts.map +0 -1
  1123. package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts +0 -12
  1124. package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts.map +0 -1
  1125. package/dist/plugin/worker/html/createHtmlWorkerRenderState.js +0 -130
  1126. package/dist/plugin/worker/html/sendHtmlWorkerMessage.d.ts +0 -3
  1127. package/dist/plugin/worker/html/sendHtmlWorkerMessage.d.ts.map +0 -1
  1128. package/dist/plugin/worker/html/sendHtmlWorkerMessage.js +0 -2
  1129. package/dist/plugin/worker/rsc/handleRender.d.ts +0 -5
  1130. package/dist/plugin/worker/rsc/handleRender.d.ts.map +0 -1
  1131. package/dist/plugin/worker/rsc/handleRender.js +0 -140
  1132. package/dist/plugin/worker/rsc/sendRscWorkerMessage.d.ts +0 -3
  1133. package/dist/plugin/worker/rsc/sendRscWorkerMessage.d.ts.map +0 -1
  1134. package/dist/plugin/worker/rsc/sendRscWorkerMessage.js +0 -11
  1135. package/dist/plugin/worker/rsc/userOptions.d.ts +0 -2
  1136. package/dist/plugin/worker/rsc/userOptions.d.ts.map +0 -1
  1137. package/dist/plugin/worker/rsc/userOptions.js +0 -16
  1138. package/plugin/helpers/collectBundleManifestCss.ts +0 -1
  1139. package/plugin/helpers/createEventHandler.ts +0 -44
  1140. package/plugin/helpers/createHandler.ts +0 -97
  1141. package/plugin/helpers/createRscStream.tsx +0 -221
  1142. package/plugin/helpers/defaultFileWriter.ts +0 -0
  1143. package/plugin/helpers/resolveComponents.ts +0 -185
  1144. package/plugin/helpers/resolveUserComponents.ts +0 -190
  1145. package/plugin/preserver/index.ts +0 -1
  1146. package/plugin/preserver/plugin.ts +0 -178
  1147. package/plugin/react-client/cleanupWorkerServerAction.ts +0 -33
  1148. package/plugin/react-client/configureWorkerRequestHandler.ts +0 -255
  1149. package/plugin/react-client/createWorkerStream.ts +0 -210
  1150. package/plugin/react-client/handleWorkerRscStream.ts +0 -156
  1151. package/plugin/react-client/handleWorkerServerAction.ts +0 -96
  1152. package/plugin/react-client/restartWorker.ts +0 -91
  1153. package/plugin/react-server/configureReactServer.ts +0 -231
  1154. package/plugin/react-server/handleServerAction.ts +0 -192
  1155. package/plugin/react-static/collectHtmlWorkerContent.ts +0 -147
  1156. package/plugin/react-static/streamHandler.ts +0 -0
  1157. package/plugin/worker/html/createHtmlWorkerRenderState.tsx +0 -142
  1158. package/plugin/worker/html/sendHtmlWorkerMessage.ts +0 -8
  1159. package/plugin/worker/rsc/handleRender.ts +0 -175
  1160. package/plugin/worker/rsc/sendRscWorkerMessage.ts +0 -7
  1161. package/plugin/worker/rsc/userOptions.ts +0 -7
  1162. /package/dist/plugin/config/{resolveDevServerConfig.js → createHandlerOptions.types.js} +0 -0
  1163. /package/dist/plugin/{helpers/defaultFileWriter.js → dev-server/types.js} +0 -0
  1164. /package/dist/plugin/{react-static/streamHandler.js → error/types.js} +0 -0
  1165. /package/plugin/{config/resolveDevServerConfig.tsx → worker/worker-handlers.server.ts} +0 -0
@@ -4,14 +4,19 @@
4
4
  * MIT License
5
5
  */
6
6
  import { DEFAULT_CONFIG, BASE_PATTERNS, DEFAULT_LOADER_CONFIG } from './defaults.js';
7
- import { join } from 'node:path';
7
+ import { join, resolve } from 'node:path';
8
8
  import { pluginRoot } from '../root.js';
9
9
  import { createInputNormalizer } from '../helpers/inputNormalizer.js';
10
- import { getNodeEnv } from '../getNodeEnv.js';
11
10
  import { resolveDirectiveMatcher } from './resolveDirectiveMatcher.js';
12
11
  import { resolveAllowedDirectives } from './resolveAllowedDirectives.js';
13
12
  import { resolveRegExp } from './resolveRegExp.js';
14
- import { parse } from '../loader/parse.js';
13
+ import { handleError } from '../error/handleError.js';
14
+ import { createLogger } from 'vite';
15
+ import { getCondition } from './getCondition.js';
16
+ import { getNodeEnv } from './getNodeEnv.js';
17
+ import { getEnvironmentId, getStashedUserOptions, stashUserOptions } from './stashedOptionsState.js';
18
+ import { createHash } from 'node:crypto';
19
+ import { existsSync, readFileSync } from 'node:fs';
15
20
 
16
21
  const handleSearchQuery = (path) => {
17
22
  const searchQuery = path.split("?")[1];
@@ -29,31 +34,52 @@ const registerPath = (path, pattern, ext) => {
29
34
  }
30
35
  return path;
31
36
  };
32
- const stashedUserOptions = {};
33
- const resolveOptions = function _resolveOptions(options) {
34
- const envId = process.env.NODE_ENV ?? "development";
35
- if (stashedUserOptions[envId]) {
37
+ let originalOptions = null;
38
+ const resolveOptions = function _resolveOptions(options = {}, forceResolve = false, logger = createLogger(!options.verbose ? "error" : "info", {
39
+ prefix: "vite:plugin-react-server/config#resolveOptions"
40
+ })) {
41
+ if (!forceResolve && originalOptions == null) {
42
+ originalOptions = options;
43
+ } else if (originalOptions != null && options !== originalOptions) {
44
+ if (options.verbose) {
45
+ logger.info("options changed, forcing re-resolve");
46
+ }
47
+ forceResolve = true;
48
+ }
49
+ if (originalOptions != null && originalOptions.projectRoot !== options.projectRoot) {
50
+ if (options.verbose) {
51
+ logger.info(`projectRoot changed from ${originalOptions.projectRoot} to ${options.projectRoot}, forcing re-resolve`);
52
+ }
53
+ forceResolve = true;
54
+ }
55
+ const panicThreshold = typeof options.panicThreshold === "string" ? options.panicThreshold : DEFAULT_CONFIG.PANIC_THRESHOLD;
56
+ const envId = getEnvironmentId(getCondition(), process.env.NODE_ENV ?? "production");
57
+ const stashedOptions = getStashedUserOptions(envId);
58
+ if (stashedOptions && !forceResolve) {
36
59
  return {
37
60
  type: "success",
38
- userOptions: stashedUserOptions[envId]
61
+ userOptions: stashedOptions
39
62
  };
40
63
  }
41
- const loaderMode = options.loader?.mode ?? getNodeEnv();
64
+ const loaderMode = options.loader?.mode ?? void 0;
42
65
  const moduleBase = typeof options.moduleBase === "string" ? options.moduleBase : DEFAULT_CONFIG.MODULE_BASE;
43
- const projectRoot = options.projectRoot ?? process.cwd();
66
+ const projectRoot = options.projectRoot ?? originalOptions?.projectRoot ?? process.cwd();
67
+ if (options.verbose && options.projectRoot != originalOptions?.projectRoot) {
68
+ logger.info(`[resolveOptions] new projectRoot: ${projectRoot}`);
69
+ }
44
70
  const preserveModulesRoot = options.build?.preserveModulesRoot ?? DEFAULT_CONFIG.BUILD.preserveModulesRoot;
45
- const isProd = process.env["NODE_ENV"] === "production" || process.env["VITE_PROD"] === "true" || process.env["VITE_PROD"] === "1";
46
- const prodModuleBase = isProd && preserveModulesRoot ? moduleBase : void 0;
71
+ const currentMode = getNodeEnv(process.env.NODE_ENV);
72
+ const isDevelopment = currentMode === "development";
73
+ const preserveModulesRootString = !isDevelopment && preserveModulesRoot === false ? moduleBase : void 0;
47
74
  const client = typeof options.build?.client === "string" ? options.build.client : DEFAULT_CONFIG.BUILD.client;
48
75
  const outDir = typeof options.build?.outDir === "string" ? options.build.outDir : DEFAULT_CONFIG.BUILD.outDir;
49
- const moduleBasePath = typeof options.moduleBasePath === "string" ? options.moduleBasePath : process.env.VITE_BASE_URL ?? DEFAULT_CONFIG.MODULE_BASE_PATH;
50
- const moduleBaseURL = typeof options.moduleBaseURL === "string" ? options.moduleBaseURL : process.env.VITE_BASE_URL ?? DEFAULT_CONFIG.MODULE_BASE_URL;
76
+ const moduleBasePath = typeof options.moduleBasePath === "string" ? options.moduleBasePath : DEFAULT_CONFIG.MODULE_BASE_PATH;
77
+ const moduleBaseURL = typeof options.moduleBaseURL === "string" ? options.moduleBaseURL : DEFAULT_CONFIG.MODULE_BASE_URL;
51
78
  const moduleRootPath = typeof options.moduleRootPath === "string" ? options.moduleRootPath : join(projectRoot, outDir, client);
52
- const publicOrigin = typeof options.publicOrigin === "string" ? options.publicOrigin : process.env.VITE_PUBLIC_ORIGIN ?? DEFAULT_CONFIG.PUBLIC_ORIGIN;
53
- const rscWorkerPath = typeof options.rscWorkerPath === "string" ? join(projectRoot, options.rscWorkerPath) : join(pluginRoot, DEFAULT_CONFIG.RSC_WORKER_PATH);
54
- const htmlWorkerPath = typeof options.htmlWorkerPath === "string" ? join(projectRoot, options.htmlWorkerPath) : join(pluginRoot, DEFAULT_CONFIG.HTML_WORKER_PATH);
55
- const loaderPath = typeof options.loaderPath === "string" ? join(projectRoot, options.loaderPath) : join(pluginRoot, DEFAULT_CONFIG.LOADER_PATH);
56
- const preserveDirectives = typeof options.build?.preserveDirectives === "boolean" ? options.build.preserveDirectives : DEFAULT_CONFIG.BUILD.preserveDirectives;
79
+ const publicOrigin = typeof options.publicOrigin === "string" ? options.publicOrigin : DEFAULT_CONFIG.PUBLIC_ORIGIN;
80
+ const rscWorkerPath = typeof options.rscWorkerPath === "string" ? resolve(projectRoot, options.rscWorkerPath) : resolve(pluginRoot, DEFAULT_CONFIG.RSC_WORKER_PATH);
81
+ const htmlWorkerPath = typeof options.htmlWorkerPath === "string" ? resolve(projectRoot, options.htmlWorkerPath) : resolve(pluginRoot, DEFAULT_CONFIG.HTML_WORKER_PATH);
82
+ const loaderPath = typeof options.loaderPath === "string" ? resolve(projectRoot, options.loaderPath) : resolve(pluginRoot, DEFAULT_CONFIG.LOADER_PATH);
57
83
  const jsExtension = typeof options.build?.jsExtension === "string" ? options.build.jsExtension : DEFAULT_CONFIG.BUILD.jsExtension;
58
84
  const cssExtension = typeof options.build?.cssExtension === "string" ? options.build.cssExtension : DEFAULT_CONFIG.BUILD.cssExtension;
59
85
  const cssModuleExtension = typeof options.build?.cssModuleExtension === "string" ? options.build.cssModuleExtension : DEFAULT_CONFIG.BUILD.cssModuleExtension;
@@ -62,12 +88,6 @@ const resolveOptions = function _resolveOptions(options) {
62
88
  const rscExtension = typeof options.build?.rscExtension === "string" ? options.build.rscExtension : DEFAULT_CONFIG.BUILD.rscExtension;
63
89
  const rscOutputPath = typeof options.build?.rscOutputPath === "string" ? options.build.rscOutputPath : DEFAULT_CONFIG.BUILD.rscOutputPath;
64
90
  const htmlOutputPath = typeof options.build?.htmlOutputPath === "string" ? options.build.htmlOutputPath : DEFAULT_CONFIG.BUILD.htmlOutputPath;
65
- if (process.env.VITE_BASE_URL !== moduleBaseURL) {
66
- process.env.VITE_BASE_URL = moduleBaseURL;
67
- }
68
- if (process.env.VITE_PUBLIC_ORIGIN !== publicOrigin) {
69
- process.env.VITE_PUBLIC_ORIGIN = publicOrigin;
70
- }
71
91
  const modulePattern = resolveRegExp(
72
92
  options.autoDiscover?.modulePattern,
73
93
  DEFAULT_CONFIG.AUTO_DISCOVER.modulePattern
@@ -140,27 +160,93 @@ const resolveOptions = function _resolveOptions(options) {
140
160
  clientDirective,
141
161
  (code, moduleId) => code.match(clientDirective) != null || typeof moduleId === "string" && clientPattern.test(moduleId) || false
142
162
  );
143
- const hashOption = typeof options.build?.hash === "string" ? options.build.hash : DEFAULT_CONFIG.BUILD.hash;
144
- const hashString = hashOption === "" ? "" : `-[${hashOption}]`;
145
- const hash = (n, ssr) => {
146
- if (!n) return "";
147
- if (ssr) return n;
148
- if (hashString === "" || new RegExp(BASE_PATTERNS.EXT.NODE).test(n)) {
149
- return n;
163
+ const isClientComponentByCode = resolveDirectiveMatcher(
164
+ clientDirective,
165
+ (code) => code.match(clientDirective) != null || false
166
+ );
167
+ const isClientComponentByName = (moduleId, _transformedModuleId) => typeof moduleId === "string" && clientPattern.test(moduleId) || false;
168
+ const hashOption = options.build?.hash ?? DEFAULT_CONFIG.BUILD.hash;
169
+ const createRollupLikeHash = (content, hashCharacters = "base36") => {
170
+ const hash2 = createHash("sha1");
171
+ hash2.update(content);
172
+ const fullHash = hash2.digest("hex");
173
+ switch (hashCharacters) {
174
+ case "base36":
175
+ return parseInt(fullHash.substring(0, 8), 16).toString(36);
176
+ case "base64":
177
+ return Buffer.from(fullHash.substring(0, 8), "hex").toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
178
+ case "hex":
179
+ default:
180
+ return fullHash.substring(0, 8);
150
181
  }
151
- const extensionIndex = n.lastIndexOf(".");
182
+ };
183
+ const hash = (input, _ssr, sourceContent) => {
184
+ if (!input) return "";
185
+ if (new RegExp(BASE_PATTERNS.EXT.NODE).test(input)) {
186
+ return input;
187
+ }
188
+ if (input.includes("node_modules")) {
189
+ return input;
190
+ }
191
+ const virtualPattern2 = resolveRegExp(
192
+ options.autoDiscover?.virtualPattern,
193
+ DEFAULT_CONFIG.AUTO_DISCOVER.virtualPattern
194
+ );
195
+ if (input.includes("_virtual") || virtualPattern2 && virtualPattern2.test(input)) {
196
+ return input;
197
+ }
198
+ if (hashOption === "false") {
199
+ return input;
200
+ }
201
+ const isClientComponent = clientPattern.test(input);
202
+ if (!isClientComponent) {
203
+ return input;
204
+ }
205
+ let contentToHash;
206
+ if (sourceContent) {
207
+ contentToHash = sourceContent;
208
+ } else {
209
+ try {
210
+ const sourcePath = resolve(projectRoot, input);
211
+ if (existsSync(sourcePath)) {
212
+ contentToHash = readFileSync(sourcePath, "utf-8");
213
+ if (options.verbose) {
214
+ logger.info(`[hash] Reading source: ${sourcePath} (${contentToHash.length} chars)`);
215
+ }
216
+ } else {
217
+ contentToHash = input;
218
+ if (options.verbose) {
219
+ logger.warn(`[hash] File not found: ${sourcePath}, using filename: ${input}`);
220
+ }
221
+ }
222
+ } catch (error) {
223
+ contentToHash = input;
224
+ if (options.verbose) {
225
+ logger.warn(`[hash] Error reading ${input}: ${error}`);
226
+ }
227
+ }
228
+ }
229
+ const hashCharacters = typeof hashOption === "object" && hashOption?.format === "hex" ? "hex" : "base36";
230
+ const contentHash = createRollupLikeHash(contentToHash, hashCharacters);
231
+ const extensionIndex = input.lastIndexOf(".");
152
232
  if (extensionIndex !== -1) {
153
- const extension = n.slice(extensionIndex);
154
- const filename = n.slice(0, extensionIndex);
155
- return filename + hashString + extension;
233
+ const extension = input.slice(extensionIndex);
234
+ const filename = input.slice(0, extensionIndex);
235
+ return filename + "-" + contentHash + extension;
156
236
  } else {
157
- return n + hashString;
237
+ return input + "-" + contentHash;
158
238
  }
159
239
  };
160
- const getOutputPath = (n) => {
240
+ const getOutputPath = (n, isAsset = false) => {
161
241
  if (!n) return "";
162
242
  let path = handleSearchQuery(n);
163
243
  path = path.startsWith(moduleBase + moduleBasePath) ? path.slice(moduleBase.length + moduleBasePath.length) : path;
244
+ if (isAsset) {
245
+ const isModuleFile = modulePattern.test(path) || clientPattern.test(path) || serverPattern.test(path) || propsPattern.test(path) || pagePattern.test(path);
246
+ if (!isModuleFile) {
247
+ return path;
248
+ }
249
+ }
164
250
  if (vendorPattern.test(path))
165
251
  return registerPath(path, vendorPattern, jsExtension);
166
252
  if (cssModulePattern.test(path))
@@ -185,20 +271,42 @@ const resolveOptions = function _resolveOptions(options) {
185
271
  };
186
272
  const normalizer = options.normalizer ?? createInputNormalizer({
187
273
  root: projectRoot,
188
- preserveModulesRoot: prodModuleBase,
274
+ preserveModulesRoot: preserveModulesRootString,
189
275
  removeExtension: true,
190
276
  moduleBasePath,
191
277
  moduleBaseURL
192
278
  });
193
- const entryFile = (n, ssr) => {
194
- return hash(getOutputPath(normalizer(n.name)[0]), ssr);
195
- };
196
- const chunkFile = (n, ssr) => {
197
- return hash(getOutputPath(normalizer(n.name)[0]), ssr);
198
- };
199
- const assetFile = (n, ssr = false) => {
279
+ function entryFile(n, ssr, sourceContent) {
280
+ const normalizedName = normalizer(n.name)[0];
281
+ let outputPath = getOutputPath(normalizedName);
282
+ if (preserveModulesRoot && n.name.startsWith("src/")) {
283
+ if (!outputPath.startsWith("src/")) {
284
+ if (outputPath.startsWith("/")) {
285
+ outputPath = "src" + outputPath;
286
+ } else {
287
+ outputPath = "src/" + outputPath;
288
+ }
289
+ }
290
+ }
291
+ return hash(outputPath, ssr, sourceContent);
292
+ }
293
+ function chunkFile(n, ssr, sourceContent) {
294
+ const normalizedName = normalizer(n.name)[0];
295
+ let outputPath = getOutputPath(normalizedName);
296
+ if (preserveModulesRoot && n.name.startsWith("src/")) {
297
+ if (!outputPath.startsWith("src/")) {
298
+ if (outputPath.startsWith("/")) {
299
+ outputPath = "src" + outputPath;
300
+ } else {
301
+ outputPath = "src/" + outputPath;
302
+ }
303
+ }
304
+ }
305
+ return hash(outputPath, ssr, sourceContent);
306
+ }
307
+ function assetFile(n, ssr = false) {
200
308
  if (n.names.length > 1) {
201
- return n.names.map((name) => hash(name, ssr)).join(",");
309
+ return n.names.map((name) => hash(name)).join(",");
202
310
  }
203
311
  let firstName = n.names[0];
204
312
  const assetsDir = build.assetsDir || "assets";
@@ -212,10 +320,13 @@ const resolveOptions = function _resolveOptions(options) {
212
320
  firstName = firstName.slice(moduleBase.length + 1);
213
321
  }
214
322
  if (firstName.endsWith(".css")) {
215
- return hash(firstName, false);
323
+ if (!firstName.startsWith(assetsDir + "/")) {
324
+ firstName = assetsDir + "/" + firstName;
325
+ }
326
+ return hash(firstName);
216
327
  }
217
- return hash(getOutputPath(firstName), false);
218
- };
328
+ return hash(getOutputPath(firstName, true));
329
+ }
219
330
  const build = {
220
331
  pages: options.build?.pages ?? DEFAULT_CONFIG.BUILD.pages,
221
332
  assetsDir: options.build?.assetsDir ?? DEFAULT_CONFIG.BUILD.assetsDir,
@@ -241,7 +352,6 @@ const resolveOptions = function _resolveOptions(options) {
241
352
  entryFile,
242
353
  chunkFile,
243
354
  assetFile,
244
- preserveDirectives,
245
355
  rscOutputPath,
246
356
  htmlOutputPath,
247
357
  moduleExtension: jsExtension,
@@ -251,9 +361,21 @@ const resolveOptions = function _resolveOptions(options) {
251
361
  jsonExtension,
252
362
  rscExtension,
253
363
  cssModuleExtension,
254
- nodeExtension: DEFAULT_CONFIG.BUILD.nodeExtension
364
+ nodeExtension: DEFAULT_CONFIG.BUILD.nodeExtension,
365
+ useRscWorker: options.build?.useRscWorker ?? DEFAULT_CONFIG.BUILD.useRscWorker,
366
+ useHtmlWorker: options.build?.useHtmlWorker ?? // Force useHtmlWorker to true when build.pages is explicitly configured, regardless of default logic
367
+ (options.build?.pages && (Array.isArray(options.build.pages) || typeof options.build.pages === "function")) ? true : DEFAULT_CONFIG.BUILD.useHtmlWorker
368
+ };
369
+ const dev = {
370
+ useHtmlWorker: options.dev?.useHtmlWorker ?? DEFAULT_CONFIG.DEV.useHtmlWorker,
371
+ useRscWorker: options.dev?.useRscWorker ?? DEFAULT_CONFIG.DEV.useRscWorker
255
372
  };
256
373
  const autoDiscover = {
374
+ clientEntry: options.autoDiscover?.clientEntry ?? DEFAULT_CONFIG.AUTO_DISCOVER.clientEntry,
375
+ serverEntry: options.autoDiscover?.serverEntry ?? DEFAULT_CONFIG.AUTO_DISCOVER.serverEntry,
376
+ cssEntry: options.autoDiscover?.cssEntry ?? DEFAULT_CONFIG.AUTO_DISCOVER.cssEntry,
377
+ jsonEntry: options.autoDiscover?.jsonEntry ?? DEFAULT_CONFIG.AUTO_DISCOVER.jsonEntry,
378
+ htmlEntry: options.autoDiscover?.htmlEntry ?? DEFAULT_CONFIG.AUTO_DISCOVER.htmlEntry,
257
379
  modulePattern,
258
380
  jsonPattern,
259
381
  cssPattern,
@@ -272,7 +394,7 @@ const resolveOptions = function _resolveOptions(options) {
272
394
  const allowedDirectives = resolveAllowedDirectives(
273
395
  options.loader?.allowedDirectives ?? DEFAULT_LOADER_CONFIG.allowedDirectives
274
396
  );
275
- const loader = {
397
+ const loader = loaderMode ? {
276
398
  serverDirective: resolveRegExp(
277
399
  options.loader?.serverDirective,
278
400
  DEFAULT_LOADER_CONFIG.serverDirective
@@ -300,8 +422,11 @@ const resolveOptions = function _resolveOptions(options) {
300
422
  registerServerReferenceName: options.loader?.registerServerReferenceName ?? DEFAULT_CONFIG.RSC_LOADER[loaderMode].registerServerReferenceName,
301
423
  isServerFunctionCode,
302
424
  isClientComponentCode,
303
- parse
304
- };
425
+ isClientComponentByCode,
426
+ isClientComponentByName,
427
+ parse: options?.loader?.parse ?? DEFAULT_LOADER_CONFIG.parse,
428
+ moduleID: options?.loader?.moduleID ?? options?.moduleID
429
+ } : void 0;
305
430
  const pipeableStreamOptions = options.pipeableStreamOptions ? options.pipeableStreamOptions : {};
306
431
  try {
307
432
  const userOptions = {
@@ -312,9 +437,12 @@ const resolveOptions = function _resolveOptions(options) {
312
437
  moduleRootPath,
313
438
  publicOrigin,
314
439
  build,
440
+ dev,
315
441
  verbose: options.verbose ?? DEFAULT_CONFIG.VERBOSE,
316
- onMetrics: options.onMetrics ?? DEFAULT_CONFIG.ON_METRICS,
317
- onEvent: options.onEvent,
442
+ availableEnvironments: options.availableEnvironments,
443
+ strategy: options.strategy,
444
+ onMetrics: typeof options.onMetrics === "function" ? options.onMetrics : DEFAULT_CONFIG.ON_METRICS,
445
+ onEvent: typeof options.onEvent === "function" ? options.onEvent : DEFAULT_CONFIG.ON_EVENT,
318
446
  Page: options.Page,
319
447
  props: options.props,
320
448
  Html: options.Html ?? DEFAULT_CONFIG.HTML,
@@ -345,11 +473,14 @@ const resolveOptions = function _resolveOptions(options) {
345
473
  loader,
346
474
  pipeableStreamOptions,
347
475
  rscTimeout: typeof options.rscTimeout === "number" ? options.rscTimeout : DEFAULT_CONFIG.RSC_TIMEOUT,
476
+ htmlTimeout: typeof options.htmlTimeout === "number" ? options.htmlTimeout : DEFAULT_CONFIG.HTML_TIMEOUT,
348
477
  htmlWorkerStartupTimeout: typeof options.htmlWorkerStartupTimeout === "number" ? options.htmlWorkerStartupTimeout : DEFAULT_CONFIG.HTML_WORKER_STARTUP_TIMEOUT,
349
478
  rscWorkerStartupTimeout: typeof options.rscWorkerStartupTimeout === "number" ? options.rscWorkerStartupTimeout : DEFAULT_CONFIG.RSC_WORKER_STARTUP_TIMEOUT,
350
- panicThreshold: typeof options.panicThreshold === "string" ? options.panicThreshold : DEFAULT_CONFIG.PANIC_THRESHOLD
479
+ fileWriteTimeout: typeof options.fileWriteTimeout === "number" ? options.fileWriteTimeout : DEFAULT_CONFIG.FILE_WRITE_TIMEOUT,
480
+ workerShutdownTimeout: typeof options.workerShutdownTimeout === "number" ? options.workerShutdownTimeout : DEFAULT_CONFIG.WORKER_SHUTDOWN_TIMEOUT,
481
+ panicThreshold
351
482
  };
352
- stashedUserOptions[envId] = userOptions;
483
+ stashUserOptions(envId, userOptions);
353
484
  return {
354
485
  type: "success",
355
486
  userOptions
@@ -357,10 +488,13 @@ const resolveOptions = function _resolveOptions(options) {
357
488
  } catch (error) {
358
489
  return {
359
490
  type: "error",
360
- error: error instanceof Error ? error : new Error("Failed to resolve options")
491
+ error: handleError({
492
+ error,
493
+ logger,
494
+ panicThreshold})
361
495
  };
362
496
  }
363
497
  };
364
498
 
365
499
  export { resolveOptions };
366
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZU9wdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9jb25maWcvcmVzb2x2ZU9wdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmVSZW5kZXJlZEFzc2V0IH0gZnJvbSBcInJvbGx1cFwiO1xuaW1wb3J0IHR5cGUgeyBQcmVSZW5kZXJlZENodW5rIH0gZnJvbSBcInJvbGx1cFwiO1xuaW1wb3J0IHR5cGUge1xuICBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICBQYWdlTmFtZSxcbiAgUHJvcHNOYW1lLFxuICBIdG1sTmFtZSxcbiAgUm9vdE5hbWUsXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgQkFTRV9QQVRURVJOUyxcbiAgREVGQVVMVF9DT05GSUcsXG4gIERFRkFVTFRfTE9BREVSX0NPTkZJRyxcbn0gZnJvbSBcIi4vZGVmYXVsdHMuanNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwbHVnaW5Sb290IH0gZnJvbSBcIi4uL3Jvb3QuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUlucHV0Tm9ybWFsaXplciB9IGZyb20gXCIuLi9oZWxwZXJzL2lucHV0Tm9ybWFsaXplci5qc1wiO1xuaW1wb3J0IHsgZ2V0Tm9kZUVudiB9IGZyb20gXCIuLi9nZXROb2RlRW52LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlRGlyZWN0aXZlTWF0Y2hlciB9IGZyb20gXCIuL3Jlc29sdmVEaXJlY3RpdmVNYXRjaGVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlQWxsb3dlZERpcmVjdGl2ZXMgfSBmcm9tIFwiLi9yZXNvbHZlQWxsb3dlZERpcmVjdGl2ZXMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVSZWdFeHAgfSBmcm9tIFwiLi9yZXNvbHZlUmVnRXhwLmpzXCI7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCIuLi9sb2FkZXIvcGFyc2UuanNcIjtcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZU9wdGlvbnNSZXR1cm4gPVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3VjY2Vzc1wiO1xuICAgICAgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnM7XG4gICAgICBlcnJvcj86IG5ldmVyO1xuICAgIH1cbiAgfCB7IHR5cGU6IFwiZXJyb3JcIjsgZXJyb3I6IEVycm9yOyB1c2VyT3B0aW9ucz86IG5ldmVyIH07XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVPcHRpb25zRm4gPSAoXG4gIG9wdGlvbnM6IFN0cmVhbVBsdWdpbk9wdGlvbnNcbikgPT4gUmVzb2x2ZU9wdGlvbnNSZXR1cm47XG5cbi8vIC8qKlxuLy8gICogRW5zdXJlcyBhIHBhdGggZW5kcyB3aXRoIC5qcyBleHRlbnNpb25cbi8vICAqL1xuLy8gY29uc3QgYWRkRXh0ZW5zaW9uID0gKHBhdGg6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcgPSBcImpzXCIpID0+IHtcbi8vICAgaWYgKHBhdGguZW5kc1dpdGgoYC4ke2V4dGVuc2lvbn1gKSkgcmV0dXJuIHBhdGg7XG4vLyAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLy5cIikpIHJldHVybiBwYXRoLnNsaWNlKDAsIC0yKSArIFwiLlwiICsgZXh0ZW5zaW9uO1xuLy8gICBpZiAocGF0aC5lbmRzV2l0aChcIi5cIikpIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyAgIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyB9O1xuXG4vKipcbiAqIEhhbmRsZXMgc2VhcmNoIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gZmlsZSBwYXRoc1xuICovXG5jb25zdCBoYW5kbGVTZWFyY2hRdWVyeSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2VhcmNoUXVlcnkgPSBwYXRoLnNwbGl0KFwiP1wiKVsxXTtcbiAgaWYgKCFzZWFyY2hRdWVyeSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IGZvbGRlciA9IHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbiAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgY29uc3QgZmlsZU5hbWVFeHRJbmRleCA9IGZpbGVuYW1lPy5sYXN0SW5kZXhPZihcIi5cIik7XG4gIGNvbnN0IGZpbGVOYW1lV2l0aG91dEV4dCA9IGZpbGVuYW1lPy5zbGljZSgwLCBmaWxlTmFtZUV4dEluZGV4KTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZW5hbWU/LnNsaWNlKGZpbGVOYW1lRXh0SW5kZXgpO1xuICByZXR1cm4gYCR7Zm9sZGVyfS8ke2ZpbGVOYW1lV2l0aG91dEV4dH0uJHtzZWFyY2hRdWVyeX0uJHtleHRlbnNpb259YDtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgcGF0aCB3aXRoIGFuIG9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBhbmQgZXh0ZW5zaW9uLlxuICogSWYgYSBwYXR0ZXJuIG1hdGNoZXMgYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggdGhlIGV4dGVuc2lvbiwgdGhlIGV4dGVuc2lvbiBpcyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gcGF0dGVybiAtIE9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBtYXRjaGVzXG4gKiBAcGFyYW0gZXh0IC0gT3B0aW9uYWwgZXh0ZW5zaW9uIHRvIGFwcGVuZCBpZiBwYXR0ZXJuIG1hdGNoZXMgYW5kIHBhdGggZG9lc24ndCBhbHJlYWR5IGVuZCB3aXRoIGl0XG4gKi9cbmNvbnN0IHJlZ2lzdGVyUGF0aCA9IChwYXRoOiBzdHJpbmcsIHBhdHRlcm4/OiBSZWdFeHAsIGV4dD86IHN0cmluZykgPT4ge1xuICAvLyBJZiB3ZSBoYXZlIGEgcGF0dGVybiBhbmQgaXQgZG9lc24ndCBtYXRjaCwgb3Igd2UgaGF2ZSBhbiBleHRlbnNpb24gYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggaXQsIGFwcGVuZCB0aGUgZXh0ZW5zaW9uXG4gIGlmICgocGF0dGVybiAmJiAhcGF0dGVybi50ZXN0KHBhdGgpKSB8fCAoZXh0ICYmICFwYXRoLmVuZHNXaXRoKGV4dCkpKSB7XG4gICAgcmV0dXJuIHBhdGggKyBleHQ7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNYWluIE9wdGlvbnMgUmVzb2x2ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgc3Rhc2hlZFVzZXJPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBSZXNvbHZlZFVzZXJPcHRpb25zIHwgbnVsbD4gPSB7fTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgdXNlciBvcHRpb25zIGZvciB0aGUgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHVzZXIgb3B0aW9ucyB0byByZXNvbHZlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlT3B0aW9uczogUmVzb2x2ZU9wdGlvbnNGbiA9IGZ1bmN0aW9uIF9yZXNvbHZlT3B0aW9ucyhcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IGVudklkID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gXCJkZXZlbG9wbWVudFwiO1xuXG4gIC8vIFJldHVybiBzdGFzaGVkIG9wdGlvbnMgaWYgYXZhaWxhYmxlXG4gIGlmIChzdGFzaGVkVXNlck9wdGlvbnNbZW52SWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgdXNlck9wdGlvbnM6IHN0YXNoZWRVc2VyT3B0aW9uc1tlbnZJZF0gYXMgbmV2ZXIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRlck1vZGUgPSBvcHRpb25zLmxvYWRlcj8ubW9kZSA/PyBnZXROb2RlRW52KCk7XG4gIC8vIE1vZHVsZSBwYXRoIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgbW9kdWxlQmFzZSA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0U7XG4gIC8vIEJhc2ljIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQnVpbGQgb3B0aW9uc1xuICBjb25zdCBwcmVzZXJ2ZU1vZHVsZXNSb290ID1cbiAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgREVGQVVMVF9DT05GSUcuQlVJTEQucHJlc2VydmVNb2R1bGVzUm9vdDtcblxuICBjb25zdCBpc1Byb2QgPVxuICAgIHByb2Nlc3MuZW52W1wiTk9ERV9FTlZcIl0gPT09IFwicHJvZHVjdGlvblwiIHx8XG4gICAgcHJvY2Vzcy5lbnZbXCJWSVRFX1BST0RcIl0gPT09IFwidHJ1ZVwiIHx8XG4gICAgcHJvY2Vzcy5lbnZbXCJWSVRFX1BST0RcIl0gPT09IFwiMVwiO1xuICBjb25zdCBwcm9kTW9kdWxlQmFzZSA9IGlzUHJvZCAmJiBwcmVzZXJ2ZU1vZHVsZXNSb290ID8gbW9kdWxlQmFzZSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBjbGllbnQgPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jbGllbnRcbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50O1xuXG4gIGNvbnN0IG91dERpciA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lm91dERpciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLm91dERpclxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5vdXREaXI7XG5cbiAgY29uc3QgbW9kdWxlQmFzZVBhdGggPVxuICAgIHR5cGVvZiBvcHRpb25zLm1vZHVsZUJhc2VQYXRoID09PSBcInN0cmluZ1wiXG4gICAgICA/IG9wdGlvbnMubW9kdWxlQmFzZVBhdGhcbiAgICAgIDogcHJvY2Vzcy5lbnYuVklURV9CQVNFX1VSTCA/PyBERUZBVUxUX0NPTkZJRy5NT0RVTEVfQkFTRV9QQVRIO1xuXG4gIGNvbnN0IG1vZHVsZUJhc2VVUkwgPVxuICAgIHR5cGVvZiBvcHRpb25zLm1vZHVsZUJhc2VVUkwgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5tb2R1bGVCYXNlVVJMXG4gICAgICA6IHByb2Nlc3MuZW52LlZJVEVfQkFTRV9VUkwgPz8gREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0VfVVJMO1xuXG4gIGNvbnN0IG1vZHVsZVJvb3RQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVSb290UGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZVJvb3RQYXRoXG4gICAgICA6IGpvaW4ocHJvamVjdFJvb3QsIG91dERpciwgY2xpZW50KTtcblxuICBjb25zdCBwdWJsaWNPcmlnaW4gPVxuICAgIHR5cGVvZiBvcHRpb25zLnB1YmxpY09yaWdpbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLnB1YmxpY09yaWdpblxuICAgICAgOiBwcm9jZXNzLmVudi5WSVRFX1BVQkxJQ19PUklHSU4gPz8gREVGQVVMVF9DT05GSUcuUFVCTElDX09SSUdJTjtcblxuICAvLyBXb3JrZXIgYW5kIGxvYWRlciBwYXRoc1xuICBjb25zdCByc2NXb3JrZXJQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5yc2NXb3JrZXJQYXRoID09PSBcInN0cmluZ1wiXG4gICAgICA/IGpvaW4ocHJvamVjdFJvb3QsIG9wdGlvbnMucnNjV29ya2VyUGF0aClcbiAgICAgIDogam9pbihwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5SU0NfV09SS0VSX1BBVEgpO1xuXG4gIGNvbnN0IGh0bWxXb3JrZXJQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5odG1sV29ya2VyUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBqb2luKHByb2plY3RSb290LCBvcHRpb25zLmh0bWxXb3JrZXJQYXRoKVxuICAgICAgOiBqb2luKHBsdWdpblJvb3QsIERFRkFVTFRfQ09ORklHLkhUTUxfV09SS0VSX1BBVEgpO1xuXG4gIGNvbnN0IGxvYWRlclBhdGggPVxuICAgIHR5cGVvZiBvcHRpb25zLmxvYWRlclBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gam9pbihwcm9qZWN0Um9vdCwgb3B0aW9ucy5sb2FkZXJQYXRoKVxuICAgICAgOiBqb2luKHBsdWdpblJvb3QsIERFRkFVTFRfQ09ORklHLkxPQURFUl9QQVRIKTtcblxuICBjb25zdCBwcmVzZXJ2ZURpcmVjdGl2ZXMgPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZURpcmVjdGl2ZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICA/IG9wdGlvbnMuYnVpbGQucHJlc2VydmVEaXJlY3RpdmVzXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELnByZXNlcnZlRGlyZWN0aXZlcztcblxuICBjb25zdCBqc0V4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LmpzRXh0ZW5zaW9uID09PSBcInN0cmluZ1wiXG4gICAgICA/IG9wdGlvbnMuYnVpbGQuanNFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuanNFeHRlbnNpb247XG4gIGNvbnN0IGNzc0V4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LmNzc0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmNzc0V4dGVuc2lvblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5jc3NFeHRlbnNpb247XG4gIGNvbnN0IGNzc01vZHVsZUV4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LmNzc01vZHVsZUV4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmNzc01vZHVsZUV4dGVuc2lvblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5jc3NNb2R1bGVFeHRlbnNpb247XG4gIGNvbnN0IGh0bWxFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5odG1sRXh0ZW5zaW9uID09PSBcInN0cmluZ1wiXG4gICAgICA/IG9wdGlvbnMuYnVpbGQuaHRtbEV4dGVuc2lvblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5odG1sRXh0ZW5zaW9uO1xuICBjb25zdCBqc29uRXh0ZW5zaW9uID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uanNvbkV4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmpzb25FeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuanNvbkV4dGVuc2lvbjtcbiAgY29uc3QgcnNjRXh0ZW5zaW9uID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8ucnNjRXh0ZW5zaW9uID09PSBcInN0cmluZ1wiXG4gICAgICA/IG9wdGlvbnMuYnVpbGQucnNjRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELnJzY0V4dGVuc2lvbjtcblxuICBjb25zdCByc2NPdXRwdXRQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8ucnNjT3V0cHV0UGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLnJzY091dHB1dFBhdGhcbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQucnNjT3V0cHV0UGF0aDtcbiAgY29uc3QgaHRtbE91dHB1dFBhdGggPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5odG1sT3V0cHV0UGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmh0bWxPdXRwdXRQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmh0bWxPdXRwdXRQYXRoO1xuXG4gIC8vIHRoZXNlIHdpbGwgbmV2ZXIgYmUgY2xlYW5lZCB1cCwgYmVjYXVzZSwgd2UgYXJlIHJlc29sdmluZyB0aGUgdXNlciBvcHRpb25zXG4gIC8vIGFuZCBpdCdzIGFzc3VtZWQgdGhleSBhcmUgcmVsZXZhbnQgdW50aWwgdGhlIHByb2Nlc3Mgc3RvcHNcbiAgaWYgKHByb2Nlc3MuZW52LlZJVEVfQkFTRV9VUkwgIT09IG1vZHVsZUJhc2VVUkwpIHtcbiAgICBwcm9jZXNzLmVudi5WSVRFX0JBU0VfVVJMID0gbW9kdWxlQmFzZVVSTDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuVklURV9QVUJMSUNfT1JJR0lOICE9PSBwdWJsaWNPcmlnaW4pIHtcbiAgICBwcm9jZXNzLmVudi5WSVRFX1BVQkxJQ19PUklHSU4gPSBwdWJsaWNPcmlnaW47XG4gIH1cblxuICBjb25zdCBtb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ubW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLm1vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBqc29uUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmpzb25QYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuanNvblBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBodG1sUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmh0bWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuaHRtbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCByc2NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ucnNjUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnJzY1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjbGllbnRQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY2xpZW50UGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNsaWVudFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uc2VydmVyUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnNlcnZlclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBub2RlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lm5vZGVQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIubm9kZU9ubHlcbiAgKTtcblxuICBjb25zdCBwcm9wc1BhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5wcm9wc1BhdHRlcm4sXG4gICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5wcm9wc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBwYWdlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnBhZ2VQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIucGFnZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NNb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzTW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc01vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2ZW5kb3JQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8udmVuZG9yUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnZlbmRvclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2aXJ0dWFsUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIudmlydHVhbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBkb3RQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uZG90UGF0dGVybixcbiAgICBCQVNFX1BBVFRFUk5TLkRPVF9GSUxFU1xuICApO1xuXG4gIC8qKiBMb2FkZXIgb3B0aW9ucyAqL1xuICBjb25zdCBzZXJ2ZXJEaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5zZXJ2ZXJEaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLnNlcnZlckRpcmVjdGl2ZVxuICApO1xuICBjb25zdCBjbGllbnREaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5jbGllbnREaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLmNsaWVudERpcmVjdGl2ZVxuICApO1xuICBjb25zdCBpc1NlcnZlckZ1bmN0aW9uQ29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIHNlcnZlckRpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goc2VydmVyRGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIHNlcnZlclBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50Q29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIGNsaWVudERpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIGNsaWVudFBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGhhc2hPcHRpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5oYXNoID09PSBcInN0cmluZ1wiXG4gICAgICA/IG9wdGlvbnMuYnVpbGQuaGFzaFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5oYXNoO1xuXG4gIGNvbnN0IGhhc2hTdHJpbmcgPSBoYXNoT3B0aW9uID09PSBcIlwiID8gXCJcIiA6IGAtWyR7aGFzaE9wdGlvbn1dYDtcbiAgLy8gY29uc3QgYWRkTW9kdWxlRXh0ZW5zaW9uID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAvLyAgIGNvbnN0IGlzQXNzZXQgPVxuICAvLyAgICAgYXV0b0Rpc2NvdmVyLmNzc1BhdHRlcm4ocGF0aCkgfHwgYXV0b0Rpc2NvdmVyLmpzb25QYXR0ZXJuKHBhdGgpO1xuICAvLyAgIGlmIChpc0Fzc2V0KSB7XG4gIC8vICAgICByZXR1cm4gcGF0aDtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGFkZEV4dGVuc2lvbihwYXRoKTtcbiAgLy8gfTtcblxuICAvLyBGaWxlIG5hbWluZyBhbmQgaGFzaGluZ1xuICBjb25zdCBoYXNoID0gKG46IHN0cmluZyB8IG51bGwsIHNzcjogYm9vbGVhbikgPT4ge1xuICAgIGlmICghbikgcmV0dXJuIFwiXCI7XG4gICAgaWYgKHNzcikgcmV0dXJuIG47XG4gICAgaWYgKGhhc2hTdHJpbmcgPT09IFwiXCIgfHwgbmV3IFJlZ0V4cChCQVNFX1BBVFRFUk5TLkVYVC5OT0RFKS50ZXN0KG4pKSB7XG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5zaW9uSW5kZXggPSBuLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoZXh0ZW5zaW9uSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBleHRlbnNpb24gPSBuLnNsaWNlKGV4dGVuc2lvbkluZGV4KTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gbi5zbGljZSgwLCBleHRlbnNpb25JbmRleCk7XG4gICAgICByZXR1cm4gZmlsZW5hbWUgKyBoYXNoU3RyaW5nICsgZXh0ZW5zaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbiArIGhhc2hTdHJpbmc7XG4gICAgfVxuICB9O1xuXG4gIC8vIE91dHB1dCBwYXRoIHJlc29sdXRpb25cbiAgY29uc3QgZ2V0T3V0cHV0UGF0aCA9IChuOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFuKSByZXR1cm4gXCJcIjtcbiAgICBsZXQgcGF0aCA9IGhhbmRsZVNlYXJjaFF1ZXJ5KG4pO1xuICAgIHBhdGggPSBwYXRoLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArIG1vZHVsZUJhc2VQYXRoKVxuICAgICAgPyBwYXRoLnNsaWNlKG1vZHVsZUJhc2UubGVuZ3RoICsgbW9kdWxlQmFzZVBhdGgubGVuZ3RoKVxuICAgICAgOiBwYXRoO1xuXG4gICAgaWYgKHZlbmRvclBhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgdmVuZG9yUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChjc3NNb2R1bGVQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGNzc01vZHVsZVBhdHRlcm4sIGNzc0V4dGVuc2lvbik7XG4gICAgaWYgKGNzc1BhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgY3NzUGF0dGVybiwgY3NzRXh0ZW5zaW9uKTtcbiAgICBpZiAoY2xpZW50UGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBjbGllbnRQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gICAgaWYgKGh0bWxQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGh0bWxQYXR0ZXJuLCBodG1sRXh0ZW5zaW9uKTtcbiAgICBpZiAoanNvblBhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwganNvblBhdHRlcm4sIGpzb25FeHRlbnNpb24pO1xuICAgIGlmIChwcm9wc1BhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgcHJvcHNQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gICAgaWYgKHBhZ2VQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHBhZ2VQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gICAgaWYgKHNlcnZlclBhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgc2VydmVyUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChtb2R1bGVQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIG1vZHVsZVBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIG1vZHVsZVBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgfTtcblxuICBjb25zdCBub3JtYWxpemVyID1cbiAgICBvcHRpb25zLm5vcm1hbGl6ZXIgPz9cbiAgICBjcmVhdGVJbnB1dE5vcm1hbGl6ZXIoe1xuICAgICAgcm9vdDogcHJvamVjdFJvb3QsXG4gICAgICBwcmVzZXJ2ZU1vZHVsZXNSb290OiBwcm9kTW9kdWxlQmFzZSxcbiAgICAgIHJlbW92ZUV4dGVuc2lvbjogdHJ1ZSxcbiAgICAgIG1vZHVsZUJhc2VQYXRoLFxuICAgICAgbW9kdWxlQmFzZVVSTCxcbiAgICB9KTtcbiAgLy8gRmlsZSBuYW1pbmcgZnVuY3Rpb25zXG4gIGNvbnN0IGVudHJ5RmlsZSA9IChuOiBQcmVSZW5kZXJlZENodW5rLCBzc3I6IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gaGFzaChnZXRPdXRwdXRQYXRoKG5vcm1hbGl6ZXIobi5uYW1lKVswXSksIHNzcik7XG4gIH07XG5cbiAgY29uc3QgY2h1bmtGaWxlID0gKG46IFByZVJlbmRlcmVkQ2h1bmssIHNzcjogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiBoYXNoKGdldE91dHB1dFBhdGgobm9ybWFsaXplcihuLm5hbWUpWzBdKSwgc3NyKTtcbiAgfTtcblxuICBjb25zdCBhc3NldEZpbGU6IChuOiBQcmVSZW5kZXJlZEFzc2V0LCBzc3I/OiBib29sZWFuKSA9PiBzdHJpbmcgPSAobjogUHJlUmVuZGVyZWRBc3NldCwgc3NyID0gZmFsc2UpID0+IHtcbiAgICBpZiAobi5uYW1lcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gbi5uYW1lcy5tYXAoKG5hbWUpID0+IGhhc2gobmFtZSwgc3NyKSkuam9pbihcIixcIik7XG4gICAgfVxuICAgIGxldCBmaXJzdE5hbWUgPSBuLm5hbWVzWzBdO1xuICAgIFxuICAgIC8vIENsZWFuIHVwIGFzc2V0IHBhdGhzIGJ5IHJlbW92aW5nIHRoZSBtb2R1bGVCYXNlIGZyb20gd2l0aGluIGFzc2V0cyBkaXJlY3RvcnlcbiAgICAvLyBUcmFuc2Zvcm06IGFzc2V0cy9zcmMvcGFnZS9maWxlLmNzcyAtPiBhc3NldHMvcGFnZS9maWxlLmNzc1xuICAgIGNvbnN0IGFzc2V0c0RpciA9IGJ1aWxkLmFzc2V0c0RpciB8fCBcImFzc2V0c1wiO1xuICAgIGlmIChmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikpIHtcbiAgICAgIGZpcnN0TmFtZSA9IGFzc2V0c0RpciArIFwiL1wiICsgZmlyc3ROYW1lLnNsaWNlKChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG1vZHVsZUJhc2VQYXRoIHJlbW92YWxcbiAgICBlbHNlIGlmIChtb2R1bGVCYXNlUGF0aCAmJiBmaXJzdE5hbWUuc3RhcnRzV2l0aChtb2R1bGVCYXNlUGF0aCkpIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlUGF0aC5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZihtb2R1bGVCYXNlVVJMICYmIG1vZHVsZUJhc2VVUkwgIT09IFwiL1wiICYmIG1vZHVsZUJhc2VVUkwgIT09IFwiXCIgJiYgZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZVVSTCkpIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlVVJMLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBkaXJlY3QgbW9kdWxlQmFzZSByZW1vdmFsICBcbiAgICBlbHNlIGlmIChmaXJzdE5hbWUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgXCIvXCIpKSB7XG4gICAgICBmaXJzdE5hbWUgPSBmaXJzdE5hbWUuc2xpY2UobW9kdWxlQmFzZS5sZW5ndGggKyAxKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIENTUyBmaWxlcywgbWFrZSBzdXJlIHdlIHByZXNlcnZlIHRoZSAuY3NzIGV4dGVuc2lvbiBhbmQgZG9uJ3QgYXBwbHkgSlMgZXh0ZW5zaW9uIG1hcHBpbmdcbiAgICBpZiAoZmlyc3ROYW1lLmVuZHNXaXRoKCcuY3NzJykpIHtcbiAgICAgIHJldHVybiBoYXNoKGZpcnN0TmFtZSwgZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3Igb3RoZXIgYXNzZXRzLCBhcHBseSB0aGUgZXh0ZW5zaW9uIG1hcHBpbmcgaWYgbmVlZGVkXG4gICAgcmV0dXJuIGhhc2goZ2V0T3V0cHV0UGF0aChmaXJzdE5hbWUpLCBmYWxzZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHBhZ2VzXG4gICAqIGFzc2V0c0RpclxuICAgKiBjbGllbnRcbiAgICogc2VydmVyXG4gICAqIHN0YXRpY1xuICAgKiBhcGlcbiAgICogb3V0RGlyXG4gICAqIGhhc2hcbiAgICogcHJlc2VydmVEaXJlY3RpdmVzXG4gICAqIHByZXNlcnZlTW9kdWxlc1Jvb3RcbiAgICogcnNjT3V0cHV0UGF0aFxuICAgKiBodG1sT3V0cHV0UGF0aFxuICAgKiBlbnRyeUZpbGVcbiAgICogY2h1bmtGaWxlXG4gICAqIGFzc2V0RmlsZVxuICAgKiBleHRlbnNpb25NYXBcbiAgICogbW9kdWxlRXh0ZW5zaW9uXG4gICAqIGpzRXh0ZW5zaW9uXG4gICAqIGNzc0V4dGVuc2lvblxuICAgKiBodG1sRXh0ZW5zaW9uXG4gICAqIGpzb25FeHRlbnNpb25cbiAgICogcnNjRXh0ZW5zaW9uXG4gICAqIGNzc01vZHVsZUV4dGVuc2lvblxuICAgKiBub2RlRXh0ZW5zaW9uXG4gICAqL1xuICBjb25zdCBidWlsZCA9IHtcbiAgICBwYWdlczogb3B0aW9ucy5idWlsZD8ucGFnZXMgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQucGFnZXMsXG4gICAgYXNzZXRzRGlyOiBvcHRpb25zLmJ1aWxkPy5hc3NldHNEaXIgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuYXNzZXRzRGlyLFxuICAgIGNsaWVudDogb3B0aW9ucy5idWlsZD8uY2xpZW50ID8/IERFRkFVTFRfQ09ORklHLkJVSUxELmNsaWVudCxcbiAgICBzZXJ2ZXI6IG9wdGlvbnMuYnVpbGQ/LnNlcnZlciA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5zZXJ2ZXIsXG4gICAgc3RhdGljOiBvcHRpb25zLmJ1aWxkPy5zdGF0aWMgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuc3RhdGljLFxuICAgIGFwaTogb3B0aW9ucy5idWlsZD8uYXBpID8/IERFRkFVTFRfQ09ORklHLkJVSUxELmFwaSxcbiAgICBwcmVzZXJ2ZU1vZHVsZXNSb290OlxuICAgICAgb3B0aW9ucy5idWlsZD8ucHJlc2VydmVNb2R1bGVzUm9vdCA/P1xuICAgICAgREVGQVVMVF9DT05GSUcuQlVJTEQucHJlc2VydmVNb2R1bGVzUm9vdCxcbiAgICBvdXREaXI6IG9wdGlvbnMuYnVpbGQ/Lm91dERpciA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5vdXREaXIsXG4gICAgaGFzaDogb3B0aW9ucy5idWlsZD8uaGFzaCA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5oYXNoLFxuICAgIGV4dGVuc2lvbk1hcDoge1xuICAgICAgLy8gRmlsZSBleHRlbnNpb25zIGZpcnN0IChtb3JlIHNwZWNpZmljIHBhdHRlcm5zIHNob3VsZCBjb21lIGZpcnN0KVxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkNTU106IGNzc0V4dGVuc2lvbixcbiAgICAgIFtCQVNFX1BBVFRFUk5TLkVYVC5KU09OXToganNvbkV4dGVuc2lvbixcbiAgICAgIFtCQVNFX1BBVFRFUk5TLkVYVC5IVE1MXTogaHRtbEV4dGVuc2lvbixcbiAgICAgIFtCQVNFX1BBVFRFUk5TLkVYVC5SU0NdOiByc2NFeHRlbnNpb24sXG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIC5ub2RlIGZpbGVzXG4gICAgICBbQkFTRV9QQVRURVJOUy5FWFQuTk9ERV06XG4gICAgICAgIEJBU0VfUEFUVEVSTlMuRVhULk5PREUgK1xuICAgICAgICAob3B0aW9ucy5idWlsZD8uanNFeHRlbnNpb24gPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuanNFeHRlbnNpb24pLFxuICAgICAgLy8gR2VuZXJhbCBtb2R1bGUgcGF0dGVybiBsYXN0IChsZXNzIHNwZWNpZmljKVxuICAgICAgW0JBU0VfUEFUVEVSTlMuTU9EVUxFXToganNFeHRlbnNpb24sXG4gICAgICAuLi5vcHRpb25zLmJ1aWxkPy5leHRlbnNpb25NYXAsXG4gICAgfSxcbiAgICBlbnRyeUZpbGUsXG4gICAgY2h1bmtGaWxlLFxuICAgIGFzc2V0RmlsZSxcbiAgICBwcmVzZXJ2ZURpcmVjdGl2ZXM6IHByZXNlcnZlRGlyZWN0aXZlcyxcbiAgICByc2NPdXRwdXRQYXRoOiByc2NPdXRwdXRQYXRoLFxuICAgIGh0bWxPdXRwdXRQYXRoOiBodG1sT3V0cHV0UGF0aCxcbiAgICBtb2R1bGVFeHRlbnNpb246IGpzRXh0ZW5zaW9uLFxuICAgIGpzRXh0ZW5zaW9uOiBqc0V4dGVuc2lvbixcbiAgICBjc3NFeHRlbnNpb246IGNzc0V4dGVuc2lvbixcbiAgICBodG1sRXh0ZW5zaW9uOiBodG1sRXh0ZW5zaW9uLFxuICAgIGpzb25FeHRlbnNpb246IGpzb25FeHRlbnNpb24sXG4gICAgcnNjRXh0ZW5zaW9uOiByc2NFeHRlbnNpb24sXG4gICAgY3NzTW9kdWxlRXh0ZW5zaW9uOiBjc3NNb2R1bGVFeHRlbnNpb24sXG4gICAgbm9kZUV4dGVuc2lvbjogREVGQVVMVF9DT05GSUcuQlVJTEQubm9kZUV4dGVuc2lvbixcbiAgfSBzYXRpc2ZpZXMgUmVzb2x2ZWRVc2VyT3B0aW9uc1tcImJ1aWxkXCJdO1xuXG4gIC8vIEF1dG8tZGlzY292ZXJ5IGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgYXV0b0Rpc2NvdmVyID0ge1xuICAgIG1vZHVsZVBhdHRlcm4sXG4gICAganNvblBhdHRlcm4sXG4gICAgY3NzUGF0dGVybixcbiAgICBodG1sUGF0dGVybixcbiAgICByc2NQYXR0ZXJuLFxuICAgIGNsaWVudFBhdHRlcm4sXG4gICAgc2VydmVyUGF0dGVybixcbiAgICBub2RlUGF0dGVybixcbiAgICBwcm9wc1BhdHRlcm4sXG4gICAgcGFnZVBhdHRlcm4sXG4gICAgY3NzTW9kdWxlUGF0dGVybixcbiAgICB2ZW5kb3JQYXR0ZXJuLFxuICAgIHZpcnR1YWxQYXR0ZXJuLFxuICAgIGRvdFBhdHRlcm4sXG4gIH0gc2F0aXNmaWVzIFJlc29sdmVkVXNlck9wdGlvbnNbXCJhdXRvRGlzY292ZXJcIl07XG5cbiAgY29uc3QgYWxsb3dlZERpcmVjdGl2ZXMgPSByZXNvbHZlQWxsb3dlZERpcmVjdGl2ZXMoXG4gICAgb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzID8/IERFRkFVTFRfTE9BREVSX0NPTkZJRy5hbGxvd2VkRGlyZWN0aXZlc1xuICApO1xuXG5cbiAgLy8gQ3JlYXRlIGxvYWRlciBjb25maWd1cmF0aW9uXG4gIGNvbnN0IGxvYWRlciA9IHtcbiAgICBzZXJ2ZXJEaXJlY3RpdmU6IHJlc29sdmVSZWdFeHAoXG4gICAgICBvcHRpb25zLmxvYWRlcj8uc2VydmVyRGlyZWN0aXZlLFxuICAgICAgREVGQVVMVF9MT0FERVJfQ09ORklHLnNlcnZlckRpcmVjdGl2ZVxuICAgICksXG4gICAgY2xpZW50RGlyZWN0aXZlOiByZXNvbHZlUmVnRXhwKFxuICAgICAgb3B0aW9ucy5sb2FkZXI/LmNsaWVudERpcmVjdGl2ZSxcbiAgICAgIERFRkFVTFRfTE9BREVSX0NPTkZJRy5jbGllbnREaXJlY3RpdmVcbiAgICApLFxuICAgIGFsbG93ZWREaXJlY3RpdmVzOiBhbGxvd2VkRGlyZWN0aXZlcyxcbiAgICBnZXREaXJlY3RpdmVUeXBlOlxuICAgICAgb3B0aW9ucy5sb2FkZXI/LmdldERpcmVjdGl2ZVR5cGUgPz8gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzXG4gICAgICAgID8gKGRpcmVjdGl2ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzLmluY2x1ZGVzKGRpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgID8gZGlyZWN0aXZlID09PSBcInVzZSBzZXJ2ZXJcIlxuICAgICAgICAgICAgICAgICAgICA/IFwic2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcImNsaWVudFwiXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXNbZGlyZWN0aXZlXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnXG4gICAgICAgICAgICAgICAgICA/IGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcInNlcnZlclwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJjbGllbnRcIlxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICA6IERFRkFVTFRfTE9BREVSX0NPTkZJRy5nZXREaXJlY3RpdmVUeXBlLFxuICAgIG1vZGU6IGxvYWRlck1vZGUsXG4gICAgaW1wb3J0U2VydmVyUGF0aDpcbiAgICAgIG9wdGlvbnMubG9hZGVyPy5pbXBvcnRTZXJ2ZXJQYXRoID8/XG4gICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLmltcG9ydFNlcnZlclBhdGgsXG4gICAgaW1wb3J0Q2xpZW50UGF0aDpcbiAgICAgIG9wdGlvbnMubG9hZGVyPy5pbXBvcnRDbGllbnRQYXRoID8/XG4gICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLmltcG9ydENsaWVudFBhdGgsXG4gICAgcmVnaXN0ZXJDbGllbnRSZWZlcmVuY2VOYW1lOlxuICAgICAgb3B0aW9ucy5sb2FkZXI/LnJlZ2lzdGVyQ2xpZW50UmVmZXJlbmNlTmFtZSA/P1xuICAgICAgREVGQVVMVF9DT05GSUcuUlNDX0xPQURFUltsb2FkZXJNb2RlXS5yZWdpc3RlckNsaWVudFJlZmVyZW5jZU5hbWUsXG4gICAgcmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2VOYW1lOlxuICAgICAgb3B0aW9ucy5sb2FkZXI/LnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlTmFtZSA/P1xuICAgICAgREVGQVVMVF9DT05GSUcuUlNDX0xPQURFUltsb2FkZXJNb2RlXS5yZWdpc3RlclNlcnZlclJlZmVyZW5jZU5hbWUsXG4gICAgaXNTZXJ2ZXJGdW5jdGlvbkNvZGUsXG4gICAgaXNDbGllbnRDb21wb25lbnRDb2RlLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgfSBzYXRpc2ZpZXMgUmVzb2x2ZWRVc2VyT3B0aW9uc1tcImxvYWRlclwiXTtcblxuICBjb25zdCBwaXBlYWJsZVN0cmVhbU9wdGlvbnMgPSBvcHRpb25zLnBpcGVhYmxlU3RyZWFtT3B0aW9uc1xuICAgID8gb3B0aW9ucy5waXBlYWJsZVN0cmVhbU9wdGlvbnNcbiAgICA6IHt9O1xuXG4gIC8vIFJldHVybiByZXNvbHZlZCBvcHRpb25zXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnMgPSB7XG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIG1vZHVsZUJhc2UsXG4gICAgICBtb2R1bGVCYXNlUGF0aCxcbiAgICAgIG1vZHVsZUJhc2VVUkwsXG4gICAgICBtb2R1bGVSb290UGF0aCxcbiAgICAgIHB1YmxpY09yaWdpbixcbiAgICAgIGJ1aWxkOiBidWlsZCxcbiAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSA/PyBERUZBVUxUX0NPTkZJRy5WRVJCT1NFLFxuICAgICAgb25NZXRyaWNzOiBvcHRpb25zLm9uTWV0cmljcyA/PyBERUZBVUxUX0NPTkZJRy5PTl9NRVRSSUNTLFxuICAgICAgb25FdmVudDogb3B0aW9ucy5vbkV2ZW50LFxuICAgICAgUGFnZTogb3B0aW9ucy5QYWdlLFxuICAgICAgcHJvcHM6IG9wdGlvbnMucHJvcHMsXG4gICAgICBIdG1sOiBvcHRpb25zLkh0bWwgPz8gREVGQVVMVF9DT05GSUcuSFRNTCxcbiAgICAgIFJvb3Q6IG9wdGlvbnMuUm9vdCA/PyBERUZBVUxUX0NPTkZJRy5ST09ULFxuICAgICAgY29tcG9uZW50czogb3B0aW9ucy5jb21wb25lbnRzLFxuICAgICAgICAgICAgICBub3JtYWxpemVyOiBub3JtYWxpemVyLFxuICAgICAgICBtb2R1bGVJRDogb3B0aW9ucy5tb2R1bGVJRCwgLy8gaWYgbm90IHByb3ZpZGVkLCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBjb25maWcgaG9vayBpcyBjYWxsZWRcbiAgICAgIHBhZ2VFeHBvcnROYW1lOlxuICAgICAgICBvcHRpb25zLnBhZ2VFeHBvcnROYW1lID8/IChERUZBVUxUX0NPTkZJRy5QQUdFX0VYUE9SVF9OQU1FIGFzIFBhZ2VOYW1lKSxcbiAgICAgIHByb3BzRXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5wcm9wc0V4cG9ydE5hbWUgPz9cbiAgICAgICAgKERFRkFVTFRfQ09ORklHLlBST1BTX0VYUE9SVF9OQU1FIGFzIFByb3BzTmFtZSksXG4gICAgICBodG1sRXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5odG1sRXhwb3J0TmFtZSA/PyAoREVGQVVMVF9DT05GSUcuSFRNTF9FWFBPUlRfTkFNRSBhcyBIdG1sTmFtZSksXG4gICAgICByb290RXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5yb290RXhwb3J0TmFtZSA/PyAoREVGQVVMVF9DT05GSUcuUk9PVF9FWFBPUlRfTkFNRSBhcyBSb290TmFtZSksXG4gICAgICBjc3M6IHtcbiAgICAgICAgaW5saW5lQ3NzOiBvcHRpb25zLmNzcz8uaW5saW5lQ3NzID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVDc3MsXG4gICAgICAgIGlubGluZVRocmVzaG9sZDpcbiAgICAgICAgICBvcHRpb25zLmNzcz8uaW5saW5lVGhyZXNob2xkID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVUaHJlc2hvbGQsXG4gICAgICAgIGlubGluZVBhdHRlcm5zOlxuICAgICAgICAgIG9wdGlvbnMuY3NzPy5pbmxpbmVQYXR0ZXJucyA/PyBERUZBVUxUX0NPTkZJRy5DU1MuaW5saW5lUGF0dGVybnMsXG4gICAgICAgIGxpbmtQYXR0ZXJuczpcbiAgICAgICAgICBvcHRpb25zLmNzcz8ubGlua1BhdHRlcm5zID8/IERFRkFVTFRfQ09ORklHLkNTUy5saW5rUGF0dGVybnMsXG4gICAgICB9LFxuICAgICAgaHRtbFdvcmtlclBhdGg6IGh0bWxXb3JrZXJQYXRoLFxuICAgICAgcnNjV29ya2VyUGF0aDogcnNjV29ya2VyUGF0aCxcbiAgICAgIGxvYWRlclBhdGg6IGxvYWRlclBhdGgsXG4gICAgICByZWFjdExvYWRlclBhdGg6IG9wdGlvbnMucmVhY3RMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLlJFQUNUX0xPQURFUl9QQVRILFxuICAgICAgY3NzTG9hZGVyUGF0aDogb3B0aW9ucy5jc3NMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLkNTU19MT0FERVJfUEFUSCxcbiAgICAgIGVudkxvYWRlclBhdGg6IG9wdGlvbnMuZW52TG9hZGVyUGF0aCA/PyBERUZBVUxUX0NPTkZJRy5FTlZfTE9BREVSX1BBVEgsXG4gICAgICBjbGllbnRFbnRyeTogb3B0aW9ucy5jbGllbnRFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5DTElFTlRfRU5UUlksXG4gICAgICBzZXJ2ZXJFbnRyeTogb3B0aW9ucy5zZXJ2ZXJFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5TRVJWRVJfRU5UUlksXG4gICAgICBhdXRvRGlzY292ZXI6IGF1dG9EaXNjb3ZlcixcbiAgICAgIGxvYWRlcjogbG9hZGVyLFxuICAgICAgcGlwZWFibGVTdHJlYW1PcHRpb25zLFxuICAgICAgcnNjVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucnNjVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5yc2NUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5SU0NfVElNRU9VVCxcbiAgICAgIGh0bWxXb3JrZXJTdGFydHVwVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuaHRtbFdvcmtlclN0YXJ0dXBUaW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBvcHRpb25zLmh0bWxXb3JrZXJTdGFydHVwVGltZW91dFxuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuSFRNTF9XT1JLRVJfU1RBUlRVUF9USU1FT1VULFxuICAgICAgcnNjV29ya2VyU3RhcnR1cFRpbWVvdXQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLnJzY1dvcmtlclN0YXJ0dXBUaW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgPyBvcHRpb25zLnJzY1dvcmtlclN0YXJ0dXBUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5SU0NfV09SS0VSX1NUQVJUVVBfVElNRU9VVCxcbiAgICAgIHBhbmljVGhyZXNob2xkOlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5wYW5pY1RocmVzaG9sZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gb3B0aW9ucy5wYW5pY1RocmVzaG9sZFxuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuUEFOSUNfVEhSRVNIT0xELFxuICAgIH07XG5cbiAgICAvLyBTdGFzaCB0aGUgcmVzb2x2ZWQgb3B0aW9uc1xuICAgIHN0YXNoZWRVc2VyT3B0aW9uc1tlbnZJZF0gPSB1c2VyT3B0aW9ucztcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgIGVycm9yOlxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpLFxuICAgIH07XG4gIH1cbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBaURBLE1BQU0saUJBQUEsR0FBb0IsQ0FBQyxJQUFpQixLQUFBO0FBQzFDLEVBQUEsTUFBTSxXQUFjLEdBQUEsSUFBQSxDQUFLLEtBQU0sQ0FBQSxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQ3JDLEVBQUksSUFBQSxDQUFDLGFBQW9CLE9BQUEsSUFBQTtBQUN6QixFQUFNLE1BQUEsTUFBQSxHQUFTLElBQUssQ0FBQSxLQUFBLENBQU0sR0FBRyxDQUFBLENBQUUsTUFBTSxDQUFHLEVBQUEsRUFBRSxDQUFFLENBQUEsSUFBQSxDQUFLLEdBQUcsQ0FBQTtBQUNwRCxFQUFBLE1BQU0sUUFBVyxHQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsR0FBRyxFQUFFLEdBQUksRUFBQTtBQUNyQyxFQUFNLE1BQUEsZ0JBQUEsR0FBbUIsUUFBVSxFQUFBLFdBQUEsQ0FBWSxHQUFHLENBQUE7QUFDbEQsRUFBQSxNQUFNLGtCQUFxQixHQUFBLFFBQUEsRUFBVSxLQUFNLENBQUEsQ0FBQSxFQUFHLGdCQUFnQixDQUFBO0FBQzlELEVBQU0sTUFBQSxTQUFBLEdBQVksUUFBVSxFQUFBLEtBQUEsQ0FBTSxnQkFBZ0IsQ0FBQTtBQUNsRCxFQUFBLE9BQU8sR0FBRyxNQUFNLENBQUEsQ0FBQSxFQUFJLGtCQUFrQixDQUFJLENBQUEsRUFBQSxXQUFX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
500
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZU9wdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9jb25maWcvcmVzb2x2ZU9wdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmVSZW5kZXJlZEFzc2V0LCBQcmVSZW5kZXJlZENodW5rIH0gZnJvbSBcInJvbGx1cFwiO1xuaW1wb3J0IHR5cGUge1xuICBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICBQYWdlTmFtZSxcbiAgUHJvcHNOYW1lLFxuICBIdG1sTmFtZSxcbiAgUm9vdE5hbWUsXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHtcbiAgQkFTRV9QQVRURVJOUyxcbiAgREVGQVVMVF9DT05GSUcsXG4gIERFRkFVTFRfTE9BREVSX0NPTkZJRyxcbn0gZnJvbSBcIi4vZGVmYXVsdHMuanNcIjtcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwbHVnaW5Sb290IH0gZnJvbSBcIi4uL3Jvb3QuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUlucHV0Tm9ybWFsaXplciB9IGZyb20gXCIuLi9oZWxwZXJzL2lucHV0Tm9ybWFsaXplci5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIgfSBmcm9tIFwiLi9yZXNvbHZlRGlyZWN0aXZlTWF0Y2hlci5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzIH0gZnJvbSBcIi4vcmVzb2x2ZUFsbG93ZWREaXJlY3RpdmVzLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlUmVnRXhwIH0gZnJvbSBcIi4vcmVzb2x2ZVJlZ0V4cC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2FkZXJDb25maWcgfSBmcm9tIFwiLi4vbG9hZGVyL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBnZXRDb25kaXRpb24gfSBmcm9tIFwiLi9nZXRDb25kaXRpb24uanNcIjtcbmltcG9ydCB7IGdldE5vZGVFbnYgfSBmcm9tIFwiLi9nZXROb2RlRW52LmpzXCI7XG5pbXBvcnQgeyBzdGFzaFVzZXJPcHRpb25zLCBnZXRTdGFzaGVkVXNlck9wdGlvbnMsIGdldEVudmlyb25tZW50SWQgfSBmcm9tIFwiLi9zdGFzaGVkT3B0aW9uc1N0YXRlLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9uc1JldHVybiA9XG4gIHwge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCI7XG4gICAgICB1c2VyT3B0aW9uczogUmVzb2x2ZWRVc2VyT3B0aW9ucztcbiAgICAgIGVycm9yPzogbmV2ZXI7XG4gICAgfVxuICB8IHsgdHlwZTogXCJlcnJvclwiOyBlcnJvcjogdW5rbm93bjsgdXNlck9wdGlvbnM/OiBuZXZlciB9O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlT3B0aW9uc0ZuID0gKFxuICBvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zLFxuICBmb3JjZVJlc29sdmU/OiBib29sZWFuLFxuICBsb2dnZXI/OiBMb2dnZXJcbikgPT4gUmVzb2x2ZU9wdGlvbnNSZXR1cm47XG5cbi8vIC8qKlxuLy8gICogRW5zdXJlcyBhIHBhdGggZW5kcyB3aXRoIC5qcyBleHRlbnNpb25cbi8vICAqL1xuLy8gY29uc3QgYWRkRXh0ZW5zaW9uID0gKHBhdGg6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcgPSBcImpzXCIpID0+IHtcbi8vICAgaWYgKHBhdGguZW5kc1dpdGgoYC4ke2V4dGVuc2lvbn1gKSkgcmV0dXJuIHBhdGg7XG4vLyAgIGlmIChwYXRoLmVuZHNXaXRoKFwiLy5cIikpIHJldHVybiBwYXRoLnNsaWNlKDAsIC0yKSArIFwiLlwiICsgZXh0ZW5zaW9uO1xuLy8gICBpZiAocGF0aC5lbmRzV2l0aChcIi5cIikpIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyAgIHJldHVybiBwYXRoICsgXCIuXCIgKyBleHRlbnNpb247XG4vLyB9O1xuXG4vKipcbiAqIEhhbmRsZXMgc2VhcmNoIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gZmlsZSBwYXRoc1xuICovXG5jb25zdCBoYW5kbGVTZWFyY2hRdWVyeSA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2VhcmNoUXVlcnkgPSBwYXRoLnNwbGl0KFwiP1wiKVsxXTtcbiAgaWYgKCFzZWFyY2hRdWVyeSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IGZvbGRlciA9IHBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbiAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgY29uc3QgZmlsZU5hbWVFeHRJbmRleCA9IGZpbGVuYW1lPy5sYXN0SW5kZXhPZihcIi5cIik7XG4gIGNvbnN0IGZpbGVOYW1lV2l0aG91dEV4dCA9IGZpbGVuYW1lPy5zbGljZSgwLCBmaWxlTmFtZUV4dEluZGV4KTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZW5hbWU/LnNsaWNlKGZpbGVOYW1lRXh0SW5kZXgpO1xuICByZXR1cm4gYCR7Zm9sZGVyfS8ke2ZpbGVOYW1lV2l0aG91dEV4dH0uJHtzZWFyY2hRdWVyeX0uJHtleHRlbnNpb259YDtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgcGF0aCB3aXRoIGFuIG9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBhbmQgZXh0ZW5zaW9uLlxuICogSWYgYSBwYXR0ZXJuIG1hdGNoZXMgYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggdGhlIGV4dGVuc2lvbiwgdGhlIGV4dGVuc2lvbiBpcyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gcGF0dGVybiAtIE9wdGlvbmFsIHBhdHRlcm4gbWF0Y2hlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCBtYXRjaGVzXG4gKiBAcGFyYW0gZXh0IC0gT3B0aW9uYWwgZXh0ZW5zaW9uIHRvIGFwcGVuZCBpZiBwYXR0ZXJuIG1hdGNoZXMgYW5kIHBhdGggZG9lc24ndCBhbHJlYWR5IGVuZCB3aXRoIGl0XG4gKi9cbmNvbnN0IHJlZ2lzdGVyUGF0aCA9IChwYXRoOiBzdHJpbmcsIHBhdHRlcm4/OiBSZWdFeHAsIGV4dD86IHN0cmluZykgPT4ge1xuICAvLyBJZiB3ZSBoYXZlIGEgcGF0dGVybiBhbmQgaXQgZG9lc24ndCBtYXRjaCwgb3Igd2UgaGF2ZSBhbiBleHRlbnNpb24gYW5kIHRoZSBwYXRoIGRvZXNuJ3QgZW5kIHdpdGggaXQsIGFwcGVuZCB0aGUgZXh0ZW5zaW9uXG4gIGlmICgocGF0dGVybiAmJiAhcGF0dGVybi50ZXN0KHBhdGgpKSB8fCAoZXh0ICYmICFwYXRoLmVuZHNXaXRoKGV4dCkpKSB7XG4gICAgcmV0dXJuIHBhdGggKyBleHQ7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNYWluIE9wdGlvbnMgUmVzb2x2ZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubGV0IG9yaWdpbmFsT3B0aW9uczogYW55IHwgbnVsbCA9IG51bGw7XG4vKipcbiAqIFJlc29sdmVzIHRoZSB1c2VyIG9wdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdXNlciBvcHRpb25zIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVPcHRpb25zOiBSZXNvbHZlT3B0aW9uc0ZuID0gZnVuY3Rpb24gX3Jlc29sdmVPcHRpb25zKFxuICBvcHRpb25zID0ge30gYXMgU3RyZWFtUGx1Z2luT3B0aW9ucyxcbiAgZm9yY2VSZXNvbHZlID0gZmFsc2UsXG4gIGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcighb3B0aW9ucy52ZXJib3NlID8gXCJlcnJvclwiIDogXCJpbmZvXCIsIHtcbiAgICBwcmVmaXg6IFwidml0ZTpwbHVnaW4tcmVhY3Qtc2VydmVyL2NvbmZpZyNyZXNvbHZlT3B0aW9uc1wiLFxuICB9KVxuKSB7XG4gIGlmICghZm9yY2VSZXNvbHZlICYmIG9yaWdpbmFsT3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3JpZ2luYWxPcHRpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcmlnaW5hbE9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zICE9PSBvcmlnaW5hbE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcIm9wdGlvbnMgY2hhbmdlZCwgZm9yY2luZyByZS1yZXNvbHZlXCIpO1xuICAgIH1cbiAgICBmb3JjZVJlc29sdmUgPSB0cnVlO1xuICB9XG4gIFxuICAvLyBGb3JjZSByZS1yZXNvbHZlIGlmIHByb2plY3RSb290IGNoYW5nZWRcbiAgaWYgKG9yaWdpbmFsT3B0aW9ucyAhPSBudWxsICYmIG9yaWdpbmFsT3B0aW9ucy5wcm9qZWN0Um9vdCAhPT0gb3B0aW9ucy5wcm9qZWN0Um9vdCkge1xuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBwcm9qZWN0Um9vdCBjaGFuZ2VkIGZyb20gJHtvcmlnaW5hbE9wdGlvbnMucHJvamVjdFJvb3R9IHRvICR7b3B0aW9ucy5wcm9qZWN0Um9vdH0sIGZvcmNpbmcgcmUtcmVzb2x2ZWApO1xuICAgIH1cbiAgICBmb3JjZVJlc29sdmUgPSB0cnVlO1xuICB9XG4gIFxuICBjb25zdCBwYW5pY1RocmVzaG9sZCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucGFuaWNUaHJlc2hvbGQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5wYW5pY1RocmVzaG9sZFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5QQU5JQ19USFJFU0hPTEQ7XG4gIC8vIHNpbmNlIHBhbmljVGhyZXNob2xkIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwbHVnaW4sIHdlIG5lZWQgdG8gcmUtcmVzb2x2ZSB0aGUgb3B0aW9ucyBpZiBpdCBjaGFuZ2VzXG4gIGNvbnN0IGVudklkID0gZ2V0RW52aXJvbm1lbnRJZChnZXRDb25kaXRpb24oKSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gXCJwcm9kdWN0aW9uXCIpO1xuXG4gIC8vIFJldHVybiBzdGFzaGVkIG9wdGlvbnMgaWYgYXZhaWxhYmxlXG4gIGNvbnN0IHN0YXNoZWRPcHRpb25zID0gZ2V0U3Rhc2hlZFVzZXJPcHRpb25zKGVudklkKTtcbiAgaWYgKHN0YXNoZWRPcHRpb25zICYmICFmb3JjZVJlc29sdmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICB1c2VyT3B0aW9uczogc3Rhc2hlZE9wdGlvbnMgYXMgbmV2ZXIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxvYWRlck1vZGUgPSBvcHRpb25zLmxvYWRlcj8ubW9kZSA/PyB1bmRlZmluZWQ7XG4gIC8vIE1vZHVsZSBwYXRoIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgbW9kdWxlQmFzZSA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0U7XG5cbiAgLy8gQmFzaWMgY29uZmlndXJhdGlvbiAtIHVzZSB0aGUgZmlyc3QgcHJvamVjdFJvb3QgdGhhdCB3YXMgcHJvdmlkZWQsIG9yIGZhbGwgYmFjayB0byBjdXJyZW50IG9wdGlvbnNcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9yaWdpbmFsT3B0aW9ucz8ucHJvamVjdFJvb3QgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgXG4gIGlmIChvcHRpb25zLnZlcmJvc2UgJiYgb3B0aW9ucy5wcm9qZWN0Um9vdCAhPSBvcmlnaW5hbE9wdGlvbnM/LnByb2plY3RSb290KSB7XG4gICAgbG9nZ2VyLmluZm8oYFtyZXNvbHZlT3B0aW9uc10gbmV3IHByb2plY3RSb290OiAke3Byb2plY3RSb290fWApO1xuICB9XG5cbiAgLy8gQnVpbGQgb3B0aW9uc1xuICBjb25zdCBwcmVzZXJ2ZU1vZHVsZXNSb290ID1cbiAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgREVGQVVMVF9DT05GSUcuQlVJTEQucHJlc2VydmVNb2R1bGVzUm9vdDtcblxuICAvLyBHZXQgY3VycmVudCBtb2RlIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGRldmVsb3BtZW50XG4gIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0Tm9kZUVudihwcm9jZXNzLmVudi5OT0RFX0VOVik7XG4gIGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBjdXJyZW50TW9kZSA9PT0gXCJkZXZlbG9wbWVudFwiO1xuXG4gIC8vIFJvbGx1cCdzIHByZXNlcnZlTW9kdWxlc1Jvb3Qgd29ya3MgaW4gcmV2ZXJzZSBvZiB3aGF0IHlvdSdkIGV4cGVjdDpcbiAgLy8gLSBXaGVuIHVzZXIgd2FudHMgcHJlc2VydmF0aW9uICh0cnVlKTogcGFzcyB1bmRlZmluZWQgdG8gUm9sbHVwIChkb24ndCBzdHJpcCBhbnl0aGluZylcbiAgLy8gLSBXaGVuIHVzZXIgd2FudHMgc3RyaXBwaW5nIChmYWxzZSk6IHBhc3MgbW9kdWxlQmFzZSB0byBSb2xsdXAgKHN0cmlwIHRoaXMgcGF0aClcbiAgLy8gQ1JJVElDQUw6IEluIGRldmVsb3BtZW50IG1vZGUsIE5FVkVSIHN0cmlwIG1vZHVsZUJhc2UgKHNyYy8pIGJlY2F1c2UgVml0ZSBzZXJ2ZXMgZnJvbSBzb3VyY2UgbG9jYXRpb25zXG4gIGNvbnN0IHByZXNlcnZlTW9kdWxlc1Jvb3RTdHJpbmcgPVxuICAgICFpc0RldmVsb3BtZW50ICYmIHByZXNlcnZlTW9kdWxlc1Jvb3QgPT09IGZhbHNlXG4gICAgICA/IG1vZHVsZUJhc2UgLy8gU3RyaXAgc3JjLyBmcm9tIG91dHB1dCBwYXRocyAocHJvZHVjdGlvbiBvbmx5KVxuICAgICAgOiB1bmRlZmluZWQ7IC8vIEtlZXAgc3JjLyBpbiBvdXRwdXQgcGF0aHNcblxuICBjb25zdCBjbGllbnQgPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jbGllbnRcbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50O1xuXG4gIGNvbnN0IG91dERpciA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lm91dERpciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLm91dERpclxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5vdXREaXI7XG5cbiAgLy8gVXNlIGRlZmF1bHRzIGZvciBub3cgLSB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgd2hlbiB3ZSBoYXZlIHRoZSBjb25maWcgd2l0aCBwcm9wZXIgcHJlZml4XG4gIGNvbnN0IG1vZHVsZUJhc2VQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVCYXNlUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLk1PRFVMRV9CQVNFX1BBVEg7XG5cbiAgY29uc3QgbW9kdWxlQmFzZVVSTCA9XG4gICAgdHlwZW9mIG9wdGlvbnMubW9kdWxlQmFzZVVSTCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZUJhc2VVUkxcbiAgICAgIDogREVGQVVMVF9DT05GSUcuTU9EVUxFX0JBU0VfVVJMO1xuXG4gIGNvbnN0IG1vZHVsZVJvb3RQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5tb2R1bGVSb290UGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLm1vZHVsZVJvb3RQYXRoXG4gICAgICA6IGpvaW4ocHJvamVjdFJvb3QsIG91dERpciwgY2xpZW50KTtcblxuICBjb25zdCBwdWJsaWNPcmlnaW4gPVxuICAgIHR5cGVvZiBvcHRpb25zLnB1YmxpY09yaWdpbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLnB1YmxpY09yaWdpblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5QVUJMSUNfT1JJR0lOO1xuXG5cbiAgY29uc3QgcnNjV29ya2VyUGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMucnNjV29ya2VyUGF0aCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyByZXNvbHZlKHByb2plY3RSb290LCBvcHRpb25zLnJzY1dvcmtlclBhdGgpXG4gICAgICA6IHJlc29sdmUocGx1Z2luUm9vdCwgREVGQVVMVF9DT05GSUcuUlNDX1dPUktFUl9QQVRIKTtcblxuICBjb25zdCBodG1sV29ya2VyUGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMuaHRtbFdvcmtlclBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gcmVzb2x2ZShwcm9qZWN0Um9vdCwgb3B0aW9ucy5odG1sV29ya2VyUGF0aClcbiAgICAgIDogcmVzb2x2ZShwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5IVE1MX1dPUktFUl9QQVRIKTtcblxuICBjb25zdCBsb2FkZXJQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5sb2FkZXJQYXRoID09PSBcInN0cmluZ1wiXG4gICAgICA/IHJlc29sdmUocHJvamVjdFJvb3QsIG9wdGlvbnMubG9hZGVyUGF0aClcbiAgICAgIDogcmVzb2x2ZShwbHVnaW5Sb290LCBERUZBVUxUX0NPTkZJRy5MT0FERVJfUEFUSCk7XG5cbiAgY29uc3QganNFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5qc0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmpzRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmpzRXh0ZW5zaW9uO1xuICBjb25zdCBjc3NFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jc3NFeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jc3NFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY3NzRXh0ZW5zaW9uO1xuICBjb25zdCBjc3NNb2R1bGVFeHRlbnNpb24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmJ1aWxkPy5jc3NNb2R1bGVFeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5jc3NNb2R1bGVFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuY3NzTW9kdWxlRXh0ZW5zaW9uO1xuICBjb25zdCBodG1sRXh0ZW5zaW9uID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uaHRtbEV4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLmh0bWxFeHRlbnNpb25cbiAgICAgIDogREVGQVVMVF9DT05GSUcuQlVJTEQuaHRtbEV4dGVuc2lvbjtcbiAgY29uc3QganNvbkV4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/Lmpzb25FeHRlbnNpb24gPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5qc29uRXh0ZW5zaW9uXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELmpzb25FeHRlbnNpb247XG4gIGNvbnN0IHJzY0V4dGVuc2lvbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LnJzY0V4dGVuc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBvcHRpb25zLmJ1aWxkLnJzY0V4dGVuc2lvblxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5yc2NFeHRlbnNpb247XG5cbiAgY29uc3QgcnNjT3V0cHV0UGF0aCA9XG4gICAgdHlwZW9mIG9wdGlvbnMuYnVpbGQ/LnJzY091dHB1dFBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5yc2NPdXRwdXRQYXRoXG4gICAgICA6IERFRkFVTFRfQ09ORklHLkJVSUxELnJzY091dHB1dFBhdGg7XG4gIGNvbnN0IGh0bWxPdXRwdXRQYXRoID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5idWlsZD8uaHRtbE91dHB1dFBhdGggPT09IFwic3RyaW5nXCJcbiAgICAgID8gb3B0aW9ucy5idWlsZC5odG1sT3V0cHV0UGF0aFxuICAgICAgOiBERUZBVUxUX0NPTkZJRy5CVUlMRC5odG1sT3V0cHV0UGF0aDtcblxuICBjb25zdCBtb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ubW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLm1vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBqc29uUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmpzb25QYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuanNvblBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBodG1sUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmh0bWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuaHRtbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCByc2NQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8ucnNjUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnJzY1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjbGllbnRQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY2xpZW50UGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNsaWVudFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uc2VydmVyUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnNlcnZlclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBub2RlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/Lm5vZGVQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIubm9kZU9ubHlcbiAgKTtcblxuICBjb25zdCBwcm9wc1BhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5wcm9wc1BhdHRlcm4sXG4gICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5wcm9wc1BhdHRlcm5cbiAgKTtcblxuICBjb25zdCBwYWdlUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnBhZ2VQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIucGFnZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBjc3NNb2R1bGVQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY3NzTW9kdWxlUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc01vZHVsZVBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2ZW5kb3JQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8udmVuZG9yUGF0dGVybixcbiAgICBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLnZlbmRvclBhdHRlcm5cbiAgKTtcblxuICBjb25zdCB2aXJ0dWFsUGF0dGVybiA9IHJlc29sdmVSZWdFeHAoXG4gICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgIERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIudmlydHVhbFBhdHRlcm5cbiAgKTtcblxuICBjb25zdCBkb3RQYXR0ZXJuID0gcmVzb2x2ZVJlZ0V4cChcbiAgICBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uZG90UGF0dGVybixcbiAgICBCQVNFX1BBVFRFUk5TLkRPVF9GSUxFU1xuICApO1xuXG4gIC8qKiBMb2FkZXIgb3B0aW9ucyAqL1xuICBjb25zdCBzZXJ2ZXJEaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5zZXJ2ZXJEaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLnNlcnZlckRpcmVjdGl2ZVxuICApO1xuICBjb25zdCBjbGllbnREaXJlY3RpdmUgPSByZXNvbHZlUmVnRXhwKFxuICAgIG9wdGlvbnMubG9hZGVyPy5jbGllbnREaXJlY3RpdmUsXG4gICAgREVGQVVMVF9MT0FERVJfQ09ORklHLmNsaWVudERpcmVjdGl2ZVxuICApO1xuICBjb25zdCBpc1NlcnZlckZ1bmN0aW9uQ29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIHNlcnZlckRpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goc2VydmVyRGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIHNlcnZlclBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50Q29kZSA9IHJlc29sdmVEaXJlY3RpdmVNYXRjaGVyKFxuICAgIGNsaWVudERpcmVjdGl2ZSxcbiAgICAoY29kZTogc3RyaW5nLCBtb2R1bGVJZD86IHN0cmluZykgPT5cbiAgICAgIGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8XG4gICAgICAodHlwZW9mIG1vZHVsZUlkID09PSBcInN0cmluZ1wiICYmIGNsaWVudFBhdHRlcm4udGVzdChtb2R1bGVJZCkpIHx8XG4gICAgICBmYWxzZVxuICApO1xuXG4gIGNvbnN0IGlzQ2xpZW50Q29tcG9uZW50QnlDb2RlID0gcmVzb2x2ZURpcmVjdGl2ZU1hdGNoZXIoXG4gICAgY2xpZW50RGlyZWN0aXZlLFxuICAgIChjb2RlOiBzdHJpbmcpID0+IGNvZGUubWF0Y2goY2xpZW50RGlyZWN0aXZlKSAhPSBudWxsIHx8IGZhbHNlXG4gICk7XG5cbiAgY29uc3QgaXNDbGllbnRDb21wb25lbnRCeU5hbWUgPSAobW9kdWxlSWQ6IHN0cmluZywgX3RyYW5zZm9ybWVkTW9kdWxlSWQ/OiBzdHJpbmcpID0+IFxuICAgICh0eXBlb2YgbW9kdWxlSWQgPT09IFwic3RyaW5nXCIgJiYgY2xpZW50UGF0dGVybi50ZXN0KG1vZHVsZUlkKSkgfHwgZmFsc2U7XG5cbiAgY29uc3QgaGFzaE9wdGlvbiA9IG9wdGlvbnMuYnVpbGQ/Lmhhc2ggPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuaGFzaDtcblxuICAvLyBDbGVhbiBoYXNoIEFQSSB0aGF0IG1pbWljcyBSb2xsdXAncyBiZWhhdmlvciBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlciBpbnB1dFxuICBjb25zdCBjcmVhdGVSb2xsdXBMaWtlSGFzaCA9IChjb250ZW50OiBzdHJpbmcsIGhhc2hDaGFyYWN0ZXJzOiAnYmFzZTM2JyB8ICdiYXNlNjQnIHwgJ2hleCcgPSAnYmFzZTM2JykgPT4ge1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgaGFzaC51cGRhdGUoY29udGVudCk7XG4gICAgY29uc3QgZnVsbEhhc2ggPSBoYXNoLmRpZ2VzdCgnaGV4Jyk7XG4gICAgXG4gICAgLy8gQXBwbHkgdGhlIHNhbWUgY2hhcmFjdGVyIHNldCBsb2dpYyBhcyBSb2xsdXBcbiAgICBzd2l0Y2ggKGhhc2hDaGFyYWN0ZXJzKSB7XG4gICAgICBjYXNlICdiYXNlMzYnOlxuICAgICAgICAvLyBDb252ZXJ0IGhleCB0byBiYXNlMzYgKDAtOSwgYS16KVxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoZnVsbEhhc2guc3Vic3RyaW5nKDAsIDgpLCAxNikudG9TdHJpbmcoMzYpO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gQ29udmVydCB0byBiYXNlNjQtbGlrZSBmb3JtYXQgKEEtWiwgYS16LCAwLTksIC0sIF8pXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShmdWxsSGFzaC5zdWJzdHJpbmcoMCwgOCksICdoZXgnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gUmV0dXJuIGhleCBmb3JtYXRcbiAgICAgICAgcmV0dXJuIGZ1bGxIYXNoLnN1YnN0cmluZygwLCA4KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVXNlci1mYWNpbmcgaGFzaCBmdW5jdGlvbiB0aGF0IGNhbiB0YWtlIHNvdXJjZSBjb250ZW50IG9yIGZpbGVuYW1lXG4gIGNvbnN0IGhhc2ggPSAoaW5wdXQ6IHN0cmluZyB8IG51bGwsIF9zc3I6IGJvb2xlYW4sIHNvdXJjZUNvbnRlbnQ/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWlucHV0KSByZXR1cm4gXCJcIjtcbiAgICBpZiAobmV3IFJlZ0V4cChCQVNFX1BBVFRFUk5TLkVYVC5OT0RFKS50ZXN0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBDUklUSUNBTDogTmV2ZXIgaGFzaCBub2RlX21vZHVsZXMgZmlsZXMgLSBWaXRlL1JvbGx1cCBoYW5kbGVzIHRob3NlXG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIFxuICAgIC8vIENSSVRJQ0FMOiBOZXZlciBoYXNoIHZpcnR1YWwgbW9kdWxlcyAoX3ZpcnR1YWwgb3IgbWF0Y2hpbmcgdmlydHVhbFBhdHRlcm4pIC0gVml0ZSBoYW5kbGVzIHRob3NlXG4gICAgY29uc3QgdmlydHVhbFBhdHRlcm4gPSByZXNvbHZlUmVnRXhwKFxuICAgICAgb3B0aW9ucy5hdXRvRGlzY292ZXI/LnZpcnR1YWxQYXR0ZXJuLFxuICAgICAgREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi52aXJ0dWFsUGF0dGVyblxuICAgICk7XG4gICAgaWYgKGlucHV0LmluY2x1ZGVzKFwiX3ZpcnR1YWxcIikgfHwgKHZpcnR1YWxQYXR0ZXJuICYmIHZpcnR1YWxQYXR0ZXJuLnRlc3QoaW5wdXQpKSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBoYXNoaW5nIGlzIGRpc2FibGVkXG4gICAgaWYgKGhhc2hPcHRpb24gPT09IFwiZmFsc2VcIikge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBPbmx5IGhhc2ggY2xpZW50IGNvbXBvbmVudHMgLSBzZXJ2ZXIgZmlsZXMgc2hvdWxkIG5vdCBiZSBoYXNoZWRcbiAgICBjb25zdCBpc0NsaWVudENvbXBvbmVudCA9IGNsaWVudFBhdHRlcm4udGVzdChpbnB1dCk7XG4gICAgaWYgKCFpc0NsaWVudENvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBcbiAgICAvLyBEZXRlcm1pbmUgd2hhdCB0byBoYXNoIGJhc2VkIG9uIGF2YWlsYWJsZSBpbnB1dFxuICAgIGxldCBjb250ZW50VG9IYXNoOiBzdHJpbmc7XG4gICAgXG4gICAgaWYgKHNvdXJjZUNvbnRlbnQpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCBzb3VyY2UgY29udGVudCAocHJlZmVycmVkKVxuICAgICAgY29udGVudFRvSGFzaCA9IHNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgICAgLy8gVHJ5IHRvIHJlYWQgc291cmNlIGZpbGUgY29udGVudFxuICAgICB0cnkge1xuICAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSByZXNvbHZlKHByb2plY3RSb290LCBpbnB1dCk7XG4gICAgICAgaWYgKGV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgIGNvbnRlbnRUb0hhc2ggPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAvLyBEZWJ1ZyBsb2dnaW5nXG4gICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgIGxvZ2dlci5pbmZvKGBbaGFzaF0gUmVhZGluZyBzb3VyY2U6ICR7c291cmNlUGF0aH0gKCR7Y29udGVudFRvSGFzaC5sZW5ndGh9IGNoYXJzKWApO1xuICAgICAgICAgfVxuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAvLyBGYWxsYmFjayB0byBmaWxlbmFtZVxuICAgICAgICAgY29udGVudFRvSGFzaCA9IGlucHV0O1xuICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICBsb2dnZXIud2FybihgW2hhc2hdIEZpbGUgbm90IGZvdW5kOiAke3NvdXJjZVBhdGh9LCB1c2luZyBmaWxlbmFtZTogJHtpbnB1dH1gKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgLy8gRmFsbGJhY2sgdG8gZmlsZW5hbWVcbiAgICAgICBjb250ZW50VG9IYXNoID0gaW5wdXQ7XG4gICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgbG9nZ2VyLndhcm4oYFtoYXNoXSBFcnJvciByZWFkaW5nICR7aW5wdXR9OiAke2Vycm9yfWApO1xuICAgICAgIH1cbiAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBHZW5lcmF0ZSBoYXNoIHVzaW5nIFJvbGx1cC1saWtlIGFsZ29yaXRobVxuICAgIGNvbnN0IGhhc2hDaGFyYWN0ZXJzID0gdHlwZW9mIGhhc2hPcHRpb24gPT09ICdvYmplY3QnICYmIGhhc2hPcHRpb24/LmZvcm1hdCA9PT0gJ2hleCcgPyAnaGV4JyA6ICdiYXNlMzYnO1xuICAgIGNvbnN0IGNvbnRlbnRIYXNoID0gY3JlYXRlUm9sbHVwTGlrZUhhc2goY29udGVudFRvSGFzaCwgaGFzaENoYXJhY3RlcnMpO1xuICAgIFxuICAgIC8vIEFwcGx5IG5hbWluZyBsb2dpY1xuICAgIGNvbnN0IGV4dGVuc2lvbkluZGV4ID0gaW5wdXQubGFzdEluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChleHRlbnNpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGlucHV0LnNsaWNlKGV4dGVuc2lvbkluZGV4KTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gaW5wdXQuc2xpY2UoMCwgZXh0ZW5zaW9uSW5kZXgpO1xuICAgICAgcmV0dXJuIGZpbGVuYW1lICsgXCItXCIgKyBjb250ZW50SGFzaCArIGV4dGVuc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlucHV0ICsgXCItXCIgKyBjb250ZW50SGFzaDtcbiAgICB9XG4gIH07XG5cbiAgLy8gT3V0cHV0IHBhdGggcmVzb2x1dGlvblxuICBjb25zdCBnZXRPdXRwdXRQYXRoID0gKG46IHN0cmluZyB8IG51bGwsIGlzQXNzZXQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGlmICghbikgcmV0dXJuIFwiXCI7XG4gICAgbGV0IHBhdGggPSBoYW5kbGVTZWFyY2hRdWVyeShuKTtcbiAgICBwYXRoID0gcGF0aC5zdGFydHNXaXRoKG1vZHVsZUJhc2UgKyBtb2R1bGVCYXNlUGF0aClcbiAgICAgID8gcGF0aC5zbGljZShtb2R1bGVCYXNlLmxlbmd0aCArIG1vZHVsZUJhc2VQYXRoLmxlbmd0aClcbiAgICAgIDogcGF0aDtcblxuICAgIC8vIEZvciBhc3NldHMgdGhhdCBhcmUgbm90IG1vZHVsZXMsIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBleHRlbnNpb25cbiAgICAvLyBPbmx5IGFwcGx5IG1vZHVsZSB0cmFuc2Zvcm1hdGlvbnMgaWYgdGhlIGZpbGUgYWN0dWFsbHkgbWF0Y2hlcyBtb2R1bGUgcGF0dGVybnNcbiAgICBpZiAoaXNBc3NldCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG1vZHVsZSBmaWxlIChKUy9UUy9KU1gvVFNYKSAtIGlmIHNvLCBhcHBseSBtb2R1bGUgdHJhbnNmb3JtYXRpb25zXG4gICAgICBjb25zdCBpc01vZHVsZUZpbGUgPSBtb2R1bGVQYXR0ZXJuLnRlc3QocGF0aCkgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudFBhdHRlcm4udGVzdChwYXRoKSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyUGF0dGVybi50ZXN0KHBhdGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzUGF0dGVybi50ZXN0KHBhdGgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VQYXR0ZXJuLnRlc3QocGF0aCk7XG4gICAgICBcbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgbW9kdWxlIGZpbGUsIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBleHRlbnNpb25cbiAgICAgIGlmICghaXNNb2R1bGVGaWxlKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZW5kb3JQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHZlbmRvclBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICBpZiAoY3NzTW9kdWxlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBjc3NNb2R1bGVQYXR0ZXJuLCBjc3NFeHRlbnNpb24pO1xuICAgIGlmIChjc3NQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGNzc1BhdHRlcm4sIGNzc0V4dGVuc2lvbik7XG4gICAgaWYgKGNsaWVudFBhdHRlcm4udGVzdChwYXRoKSlcbiAgICAgIHJldHVybiByZWdpc3RlclBhdGgocGF0aCwgY2xpZW50UGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChodG1sUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBodG1sUGF0dGVybiwgaHRtbEV4dGVuc2lvbik7XG4gICAgaWYgKGpzb25QYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIGpzb25QYXR0ZXJuLCBqc29uRXh0ZW5zaW9uKTtcbiAgICBpZiAocHJvcHNQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHByb3BzUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChwYWdlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBwYWdlUGF0dGVybiwganNFeHRlbnNpb24pO1xuICAgIGlmIChzZXJ2ZXJQYXR0ZXJuLnRlc3QocGF0aCkpXG4gICAgICByZXR1cm4gcmVnaXN0ZXJQYXRoKHBhdGgsIHNlcnZlclBhdHRlcm4sIGpzRXh0ZW5zaW9uKTtcbiAgICBpZiAobW9kdWxlUGF0dGVybi50ZXN0KHBhdGgpKVxuICAgICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBtb2R1bGVQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gICAgXG4gICAgLy8gRmFsbGJhY2s6IG9ubHkgYXBwbHkgbW9kdWxlIHBhdHRlcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbW9kdWxlXG4gICAgLy8gRm9yIGFzc2V0cywgd2UndmUgYWxyZWFkeSByZXR1cm5lZCBhYm92ZSwgc28gdGhpcyBpcyBzYWZlXG4gICAgcmV0dXJuIHJlZ2lzdGVyUGF0aChwYXRoLCBtb2R1bGVQYXR0ZXJuLCBqc0V4dGVuc2lvbik7XG4gIH07XG5cbiAgY29uc3Qgbm9ybWFsaXplciA9XG4gICAgb3B0aW9ucy5ub3JtYWxpemVyID8/XG4gICAgY3JlYXRlSW5wdXROb3JtYWxpemVyKHtcbiAgICAgIHJvb3Q6IHByb2plY3RSb290LFxuICAgICAgcHJlc2VydmVNb2R1bGVzUm9vdDogcHJlc2VydmVNb2R1bGVzUm9vdFN0cmluZyxcbiAgICAgIHJlbW92ZUV4dGVuc2lvbjogdHJ1ZSxcbiAgICAgIG1vZHVsZUJhc2VQYXRoLFxuICAgICAgbW9kdWxlQmFzZVVSTCxcbiAgICB9KTtcbiAgLy8gRmlsZSBuYW1pbmcgZnVuY3Rpb25zIC0gZGVmaW5lZCBhcyByZWd1bGFyIGZ1bmN0aW9ucyB0byBhdm9pZCBjbG9zdXJlIGlzc3Vlc1xuICBmdW5jdGlvbiBlbnRyeUZpbGUobjogUHJlUmVuZGVyZWRDaHVuaywgc3NyOiBib29sZWFuLCBzb3VyY2VDb250ZW50Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZXIobi5uYW1lKVswXTtcbiAgICBsZXQgb3V0cHV0UGF0aCA9IGdldE91dHB1dFBhdGgobm9ybWFsaXplZE5hbWUpO1xuICAgIFxuICAgIC8vIFdoZW4gcHJlc2VydmVNb2R1bGVzUm9vdCBpcyB0cnVlLCBwcmVzZXJ2ZSB0aGUgc3JjLyBwcmVmaXggaW4gb3V0cHV0IHBhdGhzXG4gICAgaWYgKHByZXNlcnZlTW9kdWxlc1Jvb3QgJiYgbi5uYW1lLnN0YXJ0c1dpdGgoXCJzcmMvXCIpKSB7XG4gICAgICAvLyBJZiB0aGUgbm9ybWFsaXplZCBuYW1lIGRvZXNuJ3QgaGF2ZSBzcmMvLCBhZGQgaXQgYmFja1xuICAgICAgaWYgKCFvdXRwdXRQYXRoLnN0YXJ0c1dpdGgoXCJzcmMvXCIpKSB7XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBvdXRwdXRQYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2hcbiAgICAgICAgaWYgKG91dHB1dFBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICBvdXRwdXRQYXRoID0gXCJzcmNcIiArIG91dHB1dFBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IFwic3JjL1wiICsgb3V0cHV0UGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gaGFzaChvdXRwdXRQYXRoLCBzc3IsIHNvdXJjZUNvbnRlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2h1bmtGaWxlKG46IFByZVJlbmRlcmVkQ2h1bmssIHNzcjogYm9vbGVhbiwgc291cmNlQ29udGVudD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVyKG4ubmFtZSlbMF07XG4gICAgbGV0IG91dHB1dFBhdGggPSBnZXRPdXRwdXRQYXRoKG5vcm1hbGl6ZWROYW1lKTtcbiAgICBcbiAgICAvLyBXaGVuIHByZXNlcnZlTW9kdWxlc1Jvb3QgaXMgdHJ1ZSwgcHJlc2VydmUgdGhlIHNyYy8gcHJlZml4IGluIG91dHB1dCBwYXRoc1xuICAgIGlmIChwcmVzZXJ2ZU1vZHVsZXNSb290ICYmIG4ubmFtZS5zdGFydHNXaXRoKFwic3JjL1wiKSkge1xuICAgICAgLy8gSWYgdGhlIG5vcm1hbGl6ZWQgbmFtZSBkb2Vzbid0IGhhdmUgc3JjLywgYWRkIGl0IGJhY2tcbiAgICAgIGlmICghb3V0cHV0UGF0aC5zdGFydHNXaXRoKFwic3JjL1wiKSkge1xuICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb3V0cHV0UGF0aCBzdGFydHMgd2l0aCBhIHNsYXNoXG4gICAgICAgIGlmIChvdXRwdXRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgb3V0cHV0UGF0aCA9IFwic3JjXCIgKyBvdXRwdXRQYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dFBhdGggPSBcInNyYy9cIiArIG91dHB1dFBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGhhc2gob3V0cHV0UGF0aCwgc3NyLCBzb3VyY2VDb250ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2V0RmlsZShuOiBQcmVSZW5kZXJlZEFzc2V0LCBzc3I6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKG4ubmFtZXMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIG4ubmFtZXMubWFwKChuYW1lKSA9PiBoYXNoKG5hbWUsIHNzcikpLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBsZXQgZmlyc3ROYW1lID0gbi5uYW1lc1swXTtcblxuICAgIC8vIENsZWFuIHVwIGFzc2V0IHBhdGhzIGJ5IHJlbW92aW5nIHRoZSBtb2R1bGVCYXNlIGZyb20gd2l0aGluIGFzc2V0cyBkaXJlY3RvcnlcbiAgICAvLyBUcmFuc2Zvcm06IGFzc2V0cy9zcmMvcGFnZS9maWxlLmNzcyAtPiBhc3NldHMvcGFnZS9maWxlLmNzc1xuICAgIGNvbnN0IGFzc2V0c0RpciA9IGJ1aWxkLmFzc2V0c0RpciB8fCBcImFzc2V0c1wiO1xuICAgIGlmIChmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikpIHtcbiAgICAgIGZpcnN0TmFtZSA9XG4gICAgICAgIGFzc2V0c0RpciArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZmlyc3ROYW1lLnNsaWNlKChhc3NldHNEaXIgKyBcIi9cIiArIG1vZHVsZUJhc2UgKyBcIi9cIikubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG1vZHVsZUJhc2VQYXRoIHJlbW92YWxcbiAgICBlbHNlIGlmIChtb2R1bGVCYXNlUGF0aCAmJiBmaXJzdE5hbWUuc3RhcnRzV2l0aChtb2R1bGVCYXNlUGF0aCkpIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlUGF0aC5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBtb2R1bGVCYXNlVVJMICYmXG4gICAgICBtb2R1bGVCYXNlVVJMICE9PSBcIi9cIiAmJlxuICAgICAgbW9kdWxlQmFzZVVSTCAhPT0gXCJcIiAmJlxuICAgICAgZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZVVSTClcbiAgICApIHtcbiAgICAgIGZpcnN0TmFtZSA9IGZpcnN0TmFtZS5zbGljZShtb2R1bGVCYXNlVVJMLmxlbmd0aCk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBkaXJlY3QgbW9kdWxlQmFzZSByZW1vdmFsXG4gICAgZWxzZSBpZiAoZmlyc3ROYW1lLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArIFwiL1wiKSkge1xuICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lLnNsaWNlKG1vZHVsZUJhc2UubGVuZ3RoICsgMSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIENTUyBmaWxlcywgZW5zdXJlIHRoZXkgZ28gaW50byB0aGUgYXNzZXRzIGRpcmVjdG9yeVxuICAgIGlmIChmaXJzdE5hbWUuZW5kc1dpdGgoXCIuY3NzXCIpKSB7XG4gICAgICAvLyBBZGQgYXNzZXRzIGRpcmVjdG9yeSBwcmVmaXggaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgICAgaWYgKCFmaXJzdE5hbWUuc3RhcnRzV2l0aChhc3NldHNEaXIgKyBcIi9cIikpIHtcbiAgICAgICAgZmlyc3ROYW1lID0gYXNzZXRzRGlyICsgXCIvXCIgKyBmaXJzdE5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzaChmaXJzdE5hbWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3RoZXIgYXNzZXRzLCBhcHBseSB0aGUgZXh0ZW5zaW9uIG1hcHBpbmcgaWYgbmVlZGVkXG4gICAgLy8gUGFzcyBpc0Fzc2V0PXRydWUgdG8gcHJlc2VydmUgZXh0ZW5zaW9ucyBmb3Igbm9uLW1vZHVsZSBhc3NldHNcbiAgICByZXR1cm4gaGFzaChnZXRPdXRwdXRQYXRoKGZpcnN0TmFtZSwgdHJ1ZSksIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwYWdlc1xuICAgKiBhc3NldHNEaXJcbiAgICogY2xpZW50XG4gICAqIHNlcnZlclxuICAgKiBzdGF0aWNcbiAgICogYXBpXG4gICAqIG91dERpclxuICAgKiBoYXNoXG5cbiAgICogcHJlc2VydmVNb2R1bGVzUm9vdFxuICAgKiByc2NPdXRwdXRQYXRoXG4gICAqIGh0bWxPdXRwdXRQYXRoXG4gICAqIGVudHJ5RmlsZVxuICAgKiBjaHVua0ZpbGVcbiAgICogYXNzZXRGaWxlXG4gICAqIGV4dGVuc2lvbk1hcFxuICAgKiBtb2R1bGVFeHRlbnNpb25cbiAgICoganNFeHRlbnNpb25cbiAgICogY3NzRXh0ZW5zaW9uXG4gICAqIGh0bWxFeHRlbnNpb25cbiAgICoganNvbkV4dGVuc2lvblxuICAgKiByc2NFeHRlbnNpb25cbiAgICogY3NzTW9kdWxlRXh0ZW5zaW9uXG4gICAqIG5vZGVFeHRlbnNpb25cbiAgICovXG4gIGNvbnN0IGJ1aWxkID0ge1xuICAgIHBhZ2VzOiBvcHRpb25zLmJ1aWxkPy5wYWdlcyA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5wYWdlcyxcbiAgICBhc3NldHNEaXI6IG9wdGlvbnMuYnVpbGQ/LmFzc2V0c0RpciA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5hc3NldHNEaXIsXG4gICAgY2xpZW50OiBvcHRpb25zLmJ1aWxkPy5jbGllbnQgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuY2xpZW50LFxuICAgIHNlcnZlcjogb3B0aW9ucy5idWlsZD8uc2VydmVyID8/IERFRkFVTFRfQ09ORklHLkJVSUxELnNlcnZlcixcbiAgICBzdGF0aWM6IG9wdGlvbnMuYnVpbGQ/LnN0YXRpYyA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5zdGF0aWMsXG4gICAgYXBpOiBvcHRpb25zLmJ1aWxkPy5hcGkgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQuYXBpLFxuICAgIHByZXNlcnZlTW9kdWxlc1Jvb3Q6XG4gICAgICBvcHRpb25zLmJ1aWxkPy5wcmVzZXJ2ZU1vZHVsZXNSb290ID8/XG4gICAgICBERUZBVUxUX0NPTkZJRy5CVUlMRC5wcmVzZXJ2ZU1vZHVsZXNSb290LFxuICAgIG91dERpcjogb3B0aW9ucy5idWlsZD8ub3V0RGlyID8/IERFRkFVTFRfQ09ORklHLkJVSUxELm91dERpcixcbiAgICBoYXNoOiBvcHRpb25zLmJ1aWxkPy5oYXNoID8/IERFRkFVTFRfQ09ORklHLkJVSUxELmhhc2gsXG4gICAgZXh0ZW5zaW9uTWFwOiB7XG4gICAgICAvLyBGaWxlIGV4dGVuc2lvbnMgZmlyc3QgKG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgc2hvdWxkIGNvbWUgZmlyc3QpXG4gICAgICBbQkFTRV9QQVRURVJOUy5FWFQuQ1NTXTogY3NzRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkpTT05dOiBqc29uRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULkhUTUxdOiBodG1sRXh0ZW5zaW9uLFxuICAgICAgW0JBU0VfUEFUVEVSTlMuRVhULlJTQ106IHJzY0V4dGVuc2lvbixcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgLm5vZGUgZmlsZXNcbiAgICAgIFtCQVNFX1BBVFRFUk5TLkVYVC5OT0RFXTpcbiAgICAgICAgQkFTRV9QQVRURVJOUy5FWFQuTk9ERSArXG4gICAgICAgIChvcHRpb25zLmJ1aWxkPy5qc0V4dGVuc2lvbiA/PyBERUZBVUxUX0NPTkZJRy5CVUlMRC5qc0V4dGVuc2lvbiksXG4gICAgICAvLyBHZW5lcmFsIG1vZHVsZSBwYXR0ZXJuIGxhc3QgKGxlc3Mgc3BlY2lmaWMpXG4gICAgICBbQkFTRV9QQVRURVJOUy5NT0RVTEVdOiBqc0V4dGVuc2lvbixcbiAgICAgIC4uLm9wdGlvbnMuYnVpbGQ/LmV4dGVuc2lvbk1hcCxcbiAgICB9LFxuICAgIGVudHJ5RmlsZSxcbiAgICBjaHVua0ZpbGUsXG4gICAgYXNzZXRGaWxlLFxuXG4gICAgcnNjT3V0cHV0UGF0aDogcnNjT3V0cHV0UGF0aCxcbiAgICBodG1sT3V0cHV0UGF0aDogaHRtbE91dHB1dFBhdGgsXG4gICAgbW9kdWxlRXh0ZW5zaW9uOiBqc0V4dGVuc2lvbixcbiAgICBqc0V4dGVuc2lvbjoganNFeHRlbnNpb24sXG4gICAgY3NzRXh0ZW5zaW9uOiBjc3NFeHRlbnNpb24sXG4gICAgaHRtbEV4dGVuc2lvbjogaHRtbEV4dGVuc2lvbixcbiAgICBqc29uRXh0ZW5zaW9uOiBqc29uRXh0ZW5zaW9uLFxuICAgIHJzY0V4dGVuc2lvbjogcnNjRXh0ZW5zaW9uLFxuICAgIGNzc01vZHVsZUV4dGVuc2lvbjogY3NzTW9kdWxlRXh0ZW5zaW9uLFxuICAgIG5vZGVFeHRlbnNpb246IERFRkFVTFRfQ09ORklHLkJVSUxELm5vZGVFeHRlbnNpb24sXG4gICAgdXNlUnNjV29ya2VyOiBvcHRpb25zLmJ1aWxkPy51c2VSc2NXb3JrZXIgPz8gREVGQVVMVF9DT05GSUcuQlVJTEQudXNlUnNjV29ya2VyLFxuICAgIHVzZUh0bWxXb3JrZXI6IG9wdGlvbnMuYnVpbGQ/LnVzZUh0bWxXb3JrZXIgPz8gXG4gICAgICAvLyBGb3JjZSB1c2VIdG1sV29ya2VyIHRvIHRydWUgd2hlbiBidWlsZC5wYWdlcyBpcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQsIHJlZ2FyZGxlc3Mgb2YgZGVmYXVsdCBsb2dpY1xuICAgICAgKG9wdGlvbnMuYnVpbGQ/LnBhZ2VzICYmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYnVpbGQucGFnZXMpIHx8IHR5cGVvZiBvcHRpb25zLmJ1aWxkLnBhZ2VzID09PSAnZnVuY3Rpb24nKSkgPyB0cnVlIDogREVGQVVMVF9DT05GSUcuQlVJTEQudXNlSHRtbFdvcmtlcixcbiAgfSBzYXRpc2ZpZXMgUmVzb2x2ZWRVc2VyT3B0aW9uc1tcImJ1aWxkXCJdO1xuXG4gIC8vIERldmVsb3BtZW50IGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZGV2ID0ge1xuICAgIHVzZUh0bWxXb3JrZXI6IG9wdGlvbnMuZGV2Py51c2VIdG1sV29ya2VyID8/IERFRkFVTFRfQ09ORklHLkRFVi51c2VIdG1sV29ya2VyLFxuICAgIHVzZVJzY1dvcmtlcjogb3B0aW9ucy5kZXY/LnVzZVJzY1dvcmtlciA/PyBERUZBVUxUX0NPTkZJRy5ERVYudXNlUnNjV29ya2VyLFxuICB9IHNhdGlzZmllcyBSZXNvbHZlZFVzZXJPcHRpb25zW1wiZGV2XCJdO1xuXG4gIC8vIEF1dG8tZGlzY292ZXJ5IGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgYXV0b0Rpc2NvdmVyID0ge1xuICAgIGNsaWVudEVudHJ5OiBvcHRpb25zLmF1dG9EaXNjb3Zlcj8uY2xpZW50RW50cnkgPz8gREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5jbGllbnRFbnRyeSxcbiAgICBzZXJ2ZXJFbnRyeTogb3B0aW9ucy5hdXRvRGlzY292ZXI/LnNlcnZlckVudHJ5ID8/IERFRkFVTFRfQ09ORklHLkFVVE9fRElTQ09WRVIuc2VydmVyRW50cnksXG4gICAgY3NzRW50cnk6IG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5jc3NFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmNzc0VudHJ5LFxuICAgIGpzb25FbnRyeTogb3B0aW9ucy5hdXRvRGlzY292ZXI/Lmpzb25FbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5BVVRPX0RJU0NPVkVSLmpzb25FbnRyeSxcbiAgICBodG1sRW50cnk6IG9wdGlvbnMuYXV0b0Rpc2NvdmVyPy5odG1sRW50cnkgPz8gREVGQVVMVF9DT05GSUcuQVVUT19ESVNDT1ZFUi5odG1sRW50cnksXG4gICAgbW9kdWxlUGF0dGVybixcbiAgICBqc29uUGF0dGVybixcbiAgICBjc3NQYXR0ZXJuLFxuICAgIGh0bWxQYXR0ZXJuLFxuICAgIHJzY1BhdHRlcm4sXG4gICAgY2xpZW50UGF0dGVybixcbiAgICBzZXJ2ZXJQYXR0ZXJuLFxuICAgIG5vZGVQYXR0ZXJuLFxuICAgIHByb3BzUGF0dGVybixcbiAgICBwYWdlUGF0dGVybixcbiAgICBjc3NNb2R1bGVQYXR0ZXJuLFxuICAgIHZlbmRvclBhdHRlcm4sXG4gICAgdmlydHVhbFBhdHRlcm4sXG4gICAgZG90UGF0dGVybixcbiAgfSBzYXRpc2ZpZXMgUmVzb2x2ZWRVc2VyT3B0aW9uc1tcImF1dG9EaXNjb3ZlclwiXTtcblxuICBjb25zdCBhbGxvd2VkRGlyZWN0aXZlcyA9IHJlc29sdmVBbGxvd2VkRGlyZWN0aXZlcyhcbiAgICBvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXMgPz8gREVGQVVMVF9MT0FERVJfQ09ORklHLmFsbG93ZWREaXJlY3RpdmVzXG4gICk7XG5cbiAgLy8gQ3JlYXRlIGxvYWRlciBjb25maWd1cmF0aW9uXG4gIGNvbnN0IGxvYWRlciA9IGxvYWRlck1vZGVcbiAgICA/ICh7XG4gICAgICAgIHNlcnZlckRpcmVjdGl2ZTogcmVzb2x2ZVJlZ0V4cChcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8uc2VydmVyRGlyZWN0aXZlLFxuICAgICAgICAgIERFRkFVTFRfTE9BREVSX0NPTkZJRy5zZXJ2ZXJEaXJlY3RpdmVcbiAgICAgICAgKSxcbiAgICAgICAgY2xpZW50RGlyZWN0aXZlOiByZXNvbHZlUmVnRXhwKFxuICAgICAgICAgIG9wdGlvbnMubG9hZGVyPy5jbGllbnREaXJlY3RpdmUsXG4gICAgICAgICAgREVGQVVMVF9MT0FERVJfQ09ORklHLmNsaWVudERpcmVjdGl2ZVxuICAgICAgICApLFxuICAgICAgICBhbGxvd2VkRGlyZWN0aXZlczogYWxsb3dlZERpcmVjdGl2ZXMsXG4gICAgICAgIGdldERpcmVjdGl2ZVR5cGU6XG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmdldERpcmVjdGl2ZVR5cGUgPz8gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzXG4gICAgICAgICAgICA/IChkaXJlY3RpdmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxvYWRlcj8uYWxsb3dlZERpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMubG9hZGVyPy5hbGxvd2VkRGlyZWN0aXZlcy5pbmNsdWRlcyhkaXJlY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgICAgPyBkaXJlY3RpdmUgPT09IFwidXNlIHNlcnZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwic2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJjbGllbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gb3B0aW9ucy5sb2FkZXI/LmFsbG93ZWREaXJlY3RpdmVzW2RpcmVjdGl2ZV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICA/IGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJzZXJ2ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcImNsaWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogREVGQVVMVF9MT0FERVJfQ09ORklHLmdldERpcmVjdGl2ZVR5cGUsXG4gICAgICAgIG1vZGU6IGxvYWRlck1vZGUsXG4gICAgICAgIGltcG9ydFNlcnZlclBhdGg6XG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmltcG9ydFNlcnZlclBhdGggPz9cbiAgICAgICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLmltcG9ydFNlcnZlclBhdGgsXG4gICAgICAgIGltcG9ydENsaWVudFBhdGg6XG4gICAgICAgICAgb3B0aW9ucy5sb2FkZXI/LmltcG9ydENsaWVudFBhdGggPz9cbiAgICAgICAgICBERUZBVUxUX0NPTkZJRy5SU0NfTE9BREVSW2xvYWRlck1vZGVdLmltcG9ydENsaWVudFBhdGgsXG4gICAgICAgIHJlZ2lzdGVyQ2xpZW50UmVmZXJlbmNlTmFtZTpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8ucmVnaXN0ZXJDbGllbnRSZWZlcmVuY2VOYW1lID8/XG4gICAgICAgICAgREVGQVVMVF9DT05GSUcuUlNDX0xPQURFUltsb2FkZXJNb2RlXS5yZWdpc3RlckNsaWVudFJlZmVyZW5jZU5hbWUsXG4gICAgICAgIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlTmFtZTpcbiAgICAgICAgICBvcHRpb25zLmxvYWRlcj8ucmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2VOYW1lID8/XG4gICAgICAgICAgREVGQVVMVF9DT05GSUcuUlNDX0xPQURFUltsb2FkZXJNb2RlXS5yZWdpc3RlclNlcnZlclJlZmVyZW5jZU5hbWUsXG4gICAgICAgIGlzU2VydmVyRnVuY3Rpb25Db2RlLFxuICAgICAgICBpc0NsaWVudENvbXBvbmVudENvZGUsXG4gICAgICAgIGlzQ2xpZW50Q29tcG9uZW50QnlDb2RlLFxuICAgICAgICBpc0NsaWVudENvbXBvbmVudEJ5TmFtZSxcbiAgICAgICAgcGFyc2U6IG9wdGlvbnM/LmxvYWRlcj8ucGFyc2UgPz8gREVGQVVMVF9MT0FERVJfQ09ORklHLnBhcnNlLFxuICAgICAgICBtb2R1bGVJRDogb3B0aW9ucz8ubG9hZGVyPy5tb2R1bGVJRCA/PyBvcHRpb25zPy5tb2R1bGVJRCxcbiAgICAgIH0gYXMgUmVxdWlyZWQ8TG9hZGVyQ29uZmlnPilcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBwaXBlYWJsZVN0cmVhbU9wdGlvbnMgPSBvcHRpb25zLnBpcGVhYmxlU3RyZWFtT3B0aW9uc1xuICAgID8gb3B0aW9ucy5waXBlYWJsZVN0cmVhbU9wdGlvbnNcbiAgICA6IHt9O1xuXG4gIC8vIFJldHVybiByZXNvbHZlZCBvcHRpb25zXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnMgPSB7XG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIG1vZHVsZUJhc2UsXG4gICAgICBtb2R1bGVCYXNlUGF0aCxcbiAgICAgIG1vZHVsZUJhc2VVUkwsXG4gICAgICBtb2R1bGVSb290UGF0aCxcbiAgICAgIHB1YmxpY09yaWdpbixcbiAgICAgIGJ1aWxkOiBidWlsZCxcbiAgICAgIGRldjogZGV2LFxuICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlID8/IERFRkFVTFRfQ09ORklHLlZFUkJPU0UsXG4gICAgICBhdmFpbGFibGVFbnZpcm9ubWVudHM6IChvcHRpb25zIGFzIGFueSkuYXZhaWxhYmxlRW52aXJvbm1lbnRzLFxuICAgICAgc3RyYXRlZ3k6IChvcHRpb25zIGFzIGFueSkuc3RyYXRlZ3ksXG4gICAgICBvbk1ldHJpY3M6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLm9uTWV0cmljcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBvcHRpb25zLm9uTWV0cmljc1xuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuT05fTUVUUklDUyxcbiAgICAgIG9uRXZlbnQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLm9uRXZlbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gb3B0aW9ucy5vbkV2ZW50XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5PTl9FVkVOVCxcbiAgICAgIFBhZ2U6IG9wdGlvbnMuUGFnZSxcbiAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzLFxuICAgICAgSHRtbDogb3B0aW9ucy5IdG1sID8/IERFRkFVTFRfQ09ORklHLkhUTUwsXG4gICAgICBSb290OiBvcHRpb25zLlJvb3QgPz8gREVGQVVMVF9DT05GSUcuUk9PVCxcbiAgICAgIGNvbXBvbmVudHM6IG9wdGlvbnMuY29tcG9uZW50cyxcbiAgICAgIG5vcm1hbGl6ZXI6IG5vcm1hbGl6ZXIsXG4gICAgICBtb2R1bGVJRDogb3B0aW9ucy5tb2R1bGVJRCwgLy8gaWYgbm90IHByb3ZpZGVkLCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBjb25maWcgaG9vayBpcyBjYWxsZWRcbiAgICAgIHBhZ2VFeHBvcnROYW1lOlxuICAgICAgICBvcHRpb25zLnBhZ2VFeHBvcnROYW1lID8/IChERUZBVUxUX0NPTkZJRy5QQUdFX0VYUE9SVF9OQU1FIGFzIFBhZ2VOYW1lKSxcbiAgICAgIHByb3BzRXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5wcm9wc0V4cG9ydE5hbWUgPz9cbiAgICAgICAgKERFRkFVTFRfQ09ORklHLlBST1BTX0VYUE9SVF9OQU1FIGFzIFByb3BzTmFtZSksXG4gICAgICBodG1sRXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5odG1sRXhwb3J0TmFtZSA/PyAoREVGQVVMVF9DT05GSUcuSFRNTF9FWFBPUlRfTkFNRSBhcyBIdG1sTmFtZSksXG4gICAgICByb290RXhwb3J0TmFtZTpcbiAgICAgICAgb3B0aW9ucy5yb290RXhwb3J0TmFtZSA/PyAoREVGQVVMVF9DT05GSUcuUk9PVF9FWFBPUlRfTkFNRSBhcyBSb290TmFtZSksXG4gICAgICBjc3M6IHtcbiAgICAgICAgaW5saW5lQ3NzOiBvcHRpb25zLmNzcz8uaW5saW5lQ3NzID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVDc3MsXG4gICAgICAgIGlubGluZVRocmVzaG9sZDpcbiAgICAgICAgICBvcHRpb25zLmNzcz8uaW5saW5lVGhyZXNob2xkID8/IERFRkFVTFRfQ09ORklHLkNTUy5pbmxpbmVUaHJlc2hvbGQsXG4gICAgICAgIGlubGluZVBhdHRlcm5zOlxuICAgICAgICAgIG9wdGlvbnMuY3NzPy5pbmxpbmVQYXR0ZXJucyA/PyBERUZBVUxUX0NPTkZJRy5DU1MuaW5saW5lUGF0dGVybnMsXG4gICAgICAgIGxpbmtQYXR0ZXJuczpcbiAgICAgICAgICBvcHRpb25zLmNzcz8ubGlua1BhdHRlcm5zID8/IERFRkFVTFRfQ09ORklHLkNTUy5saW5rUGF0dGVybnMsXG4gICAgICB9LFxuICAgICAgaHRtbFdvcmtlclBhdGg6IGh0bWxXb3JrZXJQYXRoLFxuICAgICAgcnNjV29ya2VyUGF0aDogcnNjV29ya2VyUGF0aCxcbiAgICAgIGxvYWRlclBhdGg6IGxvYWRlclBhdGgsXG4gICAgICByZWFjdExvYWRlclBhdGg6XG4gICAgICAgIG9wdGlvbnMucmVhY3RMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLlJFQUNUX0xPQURFUl9QQVRILFxuICAgICAgY3NzTG9hZGVyUGF0aDogb3B0aW9ucy5jc3NMb2FkZXJQYXRoID8/IERFRkFVTFRfQ09ORklHLkNTU19MT0FERVJfUEFUSCxcbiAgICAgIGVudkxvYWRlclBhdGg6IG9wdGlvbnMuZW52TG9hZGVyUGF0aCA/PyBERUZBVUxUX0NPTkZJRy5FTlZfTE9BREVSX1BBVEgsXG4gICAgICBjbGllbnRFbnRyeTogb3B0aW9ucy5jbGllbnRFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5DTElFTlRfRU5UUlksXG4gICAgICBzZXJ2ZXJFbnRyeTogb3B0aW9ucy5zZXJ2ZXJFbnRyeSA/PyBERUZBVUxUX0NPTkZJRy5TRVJWRVJfRU5UUlksXG4gICAgICBhdXRvRGlzY292ZXI6IGF1dG9EaXNjb3ZlcixcbiAgICAgIGxvYWRlcjogbG9hZGVyLFxuICAgICAgcGlwZWFibGVTdHJlYW1PcHRpb25zLFxuICAgICAgcnNjVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucnNjVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5yc2NUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5SU0NfVElNRU9VVCxcbiAgICAgIGh0bWxUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5odG1sVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5odG1sVGltZW91dFxuICAgICAgICAgIDogREVGQVVMVF9DT05GSUcuSFRNTF9USU1FT1VULFxuICAgICAgaHRtbFdvcmtlclN0YXJ0dXBUaW1lb3V0OlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5odG1sV29ya2VyU3RhcnR1cFRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IG9wdGlvbnMuaHRtbFdvcmtlclN0YXJ0dXBUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5IVE1MX1dPUktFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICByc2NXb3JrZXJTdGFydHVwVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucnNjV29ya2VyU3RhcnR1cFRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IG9wdGlvbnMucnNjV29ya2VyU3RhcnR1cFRpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLlJTQ19XT1JLRVJfU1RBUlRVUF9USU1FT1VULFxuICAgICAgZmlsZVdyaXRlVGltZW91dDpcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuZmlsZVdyaXRlVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy5maWxlV3JpdGVUaW1lb3V0XG4gICAgICAgICAgOiBERUZBVUxUX0NPTkZJRy5GSUxFX1dSSVRFX1RJTUVPVVQsXG4gICAgICB3b3JrZXJTaHV0ZG93blRpbWVvdXQ6XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLndvcmtlclNodXRkb3duVGltZW91dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gb3B0aW9ucy53b3JrZXJTaHV0ZG93blRpbWVvdXRcbiAgICAgICAgICA6IERFRkFVTFRfQ09ORklHLldPUktFUl9TSFVURE9XTl9USU1FT1VULFxuICAgICAgcGFuaWNUaHJlc2hvbGQ6IHBhbmljVGhyZXNob2xkLFxuICAgIH07XG5cbiAgICAvLyBTdGFzaCB0aGUgcmVzb2x2ZWQgb3B0aW9uc1xuICAgIHN0YXNoVXNlck9wdGlvbnMoZW52SWQsIHVzZXJPcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIHVzZXJPcHRpb25zLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgIGVycm9yOiBoYW5kbGVFcnJvcih7XG4gICAgICAgIGVycm9yLFxuICAgICAgICBsb2dnZXI6IGxvZ2dlcixcbiAgICAgICAgcGFuaWNUaHJlc2hvbGQsXG4gICAgICAgIGNvbnRleHQ6IFwiY29uZmlnKHJlc29sdmVPcHRpb25zKVwiLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxufTtcblxuXG4iXSwibmFtZXMiOlsiaGFzaCIsInZpcnR1YWxQYXR0ZXJuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdEQSxNQUFNLGlCQUFBLEdBQW9CLENBQUMsSUFBaUIsS0FBQTtBQUMxQyxFQUFBLE1BQU0sV0FBYyxHQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsR0FB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