lean4monaco 1.0.45 → 1.1.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 (1094) hide show
  1. package/README.md +75 -0
  2. package/dist/JuliaMono-Regular.ttf +0 -0
  3. package/dist/css/custom.css +7 -1
  4. package/dist/infowebview.d.ts +4 -5
  5. package/dist/infowebview.js +5 -5
  6. package/dist/lean4-infoview/esm-shims/react-dom.d.ts +5 -0
  7. package/dist/lean4-infoview/esm-shims/react-jsx-runtime.d.ts +5 -0
  8. package/dist/lean4-infoview/esm-shims/react.d.ts +5 -0
  9. package/dist/{vscode-lean4/vscode-lean4/dist/lean4-infoview → lean4-infoview}/index.css +8 -213
  10. package/dist/lean4-infoview/index.d.ts +16 -0
  11. package/dist/lean4-infoview/index.development.js +37312 -0
  12. package/dist/lean4-infoview/index.production.min.js +1528 -0
  13. package/dist/lean4-infoview/infoview/collapsing.d.ts +12 -0
  14. package/dist/lean4-infoview/infoview/contexts.d.ts +10 -0
  15. package/dist/lean4-infoview/infoview/errors.d.ts +14 -0
  16. package/dist/lean4-infoview/infoview/goalLocation.d.ts +61 -0
  17. package/dist/lean4-infoview/infoview/goals.d.ts +46 -0
  18. package/dist/lean4-infoview/infoview/info.d.ts +18 -0
  19. package/dist/lean4-infoview/infoview/infos.d.ts +2 -0
  20. package/dist/lean4-infoview/infoview/interactiveCode.d.ts +19 -0
  21. package/dist/lean4-infoview/infoview/main.d.ts +13 -0
  22. package/dist/lean4-infoview/infoview/messages.d.ts +19 -0
  23. package/dist/lean4-infoview/infoview/rpcSessions.d.ts +11 -0
  24. package/dist/lean4-infoview/infoview/tooltips.d.ts +32 -0
  25. package/dist/lean4-infoview/infoview/traceExplorer.d.ts +11 -0
  26. package/dist/lean4-infoview/infoview/userWidget.d.ts +39 -0
  27. package/dist/{vscode-lean4/lean4-infoview/src → lean4-infoview}/infoview/util.d.ts +8 -5
  28. package/dist/lean4-infoview/loader.d.ts +20 -0
  29. package/dist/lean4-infoview/loader.development.js +1006 -0
  30. package/dist/lean4-infoview/loader.production.min.js +1 -0
  31. package/dist/lean4-infoview/react-dom.development.js +30537 -0
  32. package/dist/lean4-infoview/react-dom.production.min.js +21 -0
  33. package/dist/lean4-infoview/react-jsx-runtime.development.js +1362 -0
  34. package/dist/lean4-infoview/react-jsx-runtime.production.min.js +1 -0
  35. package/dist/lean4-infoview/react.development.js +2823 -0
  36. package/dist/lean4-infoview/react.production.min.js +1 -0
  37. package/dist/leanmonaco.d.ts +4 -4
  38. package/dist/leanmonaco.js +10 -9
  39. package/dist/monaco-lean4/vscode-lean4/package.json +944 -0
  40. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +9 -0
  41. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +20 -0
  42. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.d.ts +12 -0
  43. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.js +40 -0
  44. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +20 -0
  45. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +79 -0
  46. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.d.ts +13 -0
  47. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.js +29 -0
  48. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +28 -0
  49. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +124 -0
  50. package/dist/monaco-lean4/vscode-lean4/src/config.d.ts +33 -0
  51. package/dist/monaco-lean4/vscode-lean4/src/config.js +119 -0
  52. package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +27 -0
  53. package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +133 -0
  54. package/dist/monaco-lean4/vscode-lean4/src/infoview.d.ts +69 -0
  55. package/dist/monaco-lean4/vscode-lean4/src/infoview.js +711 -0
  56. package/dist/monaco-lean4/vscode-lean4/src/leanclient.d.ts +67 -0
  57. package/dist/monaco-lean4/vscode-lean4/src/leanclient.js +443 -0
  58. package/dist/monaco-lean4/vscode-lean4/src/rpc.d.ts +16 -0
  59. package/dist/monaco-lean4/vscode-lean4/src/rpc.js +102 -0
  60. package/dist/monaco-lean4/vscode-lean4/src/taskgutter.d.ts +11 -0
  61. package/dist/monaco-lean4/vscode-lean4/src/taskgutter.js +130 -0
  62. package/dist/{vscode-lean4/vscode-lean4/src/utils/batchBasics.d.ts → monaco-lean4/vscode-lean4/src/utils/batch.d.ts} +8 -11
  63. package/dist/monaco-lean4/vscode-lean4/src/utils/batch.js +203 -0
  64. package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.d.ts +41 -0
  65. package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.js +205 -0
  66. package/dist/monaco-lean4/vscode-lean4/src/utils/converters.d.ts +16 -0
  67. package/dist/monaco-lean4/vscode-lean4/src/utils/converters.js +129 -0
  68. package/dist/monaco-lean4/vscode-lean4/src/utils/elan.d.ts +3 -0
  69. package/dist/monaco-lean4/vscode-lean4/src/utils/elan.js +4 -0
  70. package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.d.ts +21 -0
  71. package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.js +53 -0
  72. package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.d.ts +35 -0
  73. package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.js +136 -0
  74. package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.d.ts +17 -0
  75. package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.js +36 -0
  76. package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +37 -0
  77. package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.js +210 -0
  78. package/dist/monaco-lean4/vscode-lean4/src/utils/logger.d.ts +7 -0
  79. package/dist/monaco-lean4/vscode-lean4/src/utils/logger.js +20 -0
  80. package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.d.ts +24 -0
  81. package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.js +110 -0
  82. package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.d.ts +9 -0
  83. package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.js +125 -0
  84. package/dist/monacoleanclient.d.ts +1 -2
  85. package/dist/monacoleanclient.js +3 -3
  86. package/dist/preconditions.d.ts +2 -2
  87. package/dist/vscode-lean4/lean4-infoview/package.json +25 -23
  88. package/dist/vscode-lean4/lean4-infoview/tsconfig.json +6 -2
  89. package/dist/vscode-lean4/lean4-infoview-api/package.json +1 -1
  90. package/dist/vscode-lean4/lean4-unicode-input/package.json +1 -1
  91. package/dist/vscode-lean4/lean4-unicode-input/src/abbreviations.json +12 -12
  92. package/dist/vscode-lean4/lean4-unicode-input-component/package.json +2 -2
  93. package/dist/vscode-lean4/package-lock.json +6129 -3245
  94. package/dist/vscode-lean4/vscode-lean4/language-configuration.json +1 -1
  95. package/dist/vscode-lean4/vscode-lean4/loogleview/static/index.css +19 -16
  96. package/dist/vscode-lean4/vscode-lean4/package.json +638 -18
  97. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +2 -2
  98. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +2 -2
  99. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +2 -3
  100. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +3 -5
  101. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +1 -2
  102. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +4 -8
  103. package/dist/vscode-lean4/vscode-lean4/src/config.d.ts +14 -1
  104. package/dist/vscode-lean4/vscode-lean4/src/config.js +56 -5
  105. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnoser.d.ts +36 -5
  106. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnoser.js +59 -23
  107. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnostics.d.ts +22 -17
  108. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnostics.js +182 -119
  109. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +33 -20
  110. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +235 -89
  111. package/dist/vscode-lean4/vscode-lean4/src/infoview.d.ts +15 -17
  112. package/dist/vscode-lean4/vscode-lean4/src/infoview.js +218 -103
  113. package/dist/vscode-lean4/vscode-lean4/src/leanclient.d.ts +12 -7
  114. package/dist/vscode-lean4/vscode-lean4/src/leanclient.js +187 -64
  115. package/dist/vscode-lean4/vscode-lean4/src/taskgutter.d.ts +35 -3
  116. package/dist/vscode-lean4/vscode-lean4/src/taskgutter.js +533 -93
  117. package/dist/vscode-lean4/vscode-lean4/src/utils/batch.d.ts +12 -4
  118. package/dist/vscode-lean4/vscode-lean4/src/utils/batch.js +78 -72
  119. package/dist/vscode-lean4/vscode-lean4/src/utils/clientProvider.d.ts +9 -9
  120. package/dist/vscode-lean4/vscode-lean4/src/utils/clientProvider.js +121 -77
  121. package/dist/vscode-lean4/vscode-lean4/src/utils/converters.d.ts +15 -0
  122. package/dist/vscode-lean4/vscode-lean4/src/utils/converters.js +9 -0
  123. package/dist/vscode-lean4/vscode-lean4/src/utils/elan.d.ts +179 -1
  124. package/dist/vscode-lean4/vscode-lean4/src/utils/elan.js +422 -3
  125. package/dist/vscode-lean4/vscode-lean4/src/utils/exturi.d.ts +3 -1
  126. package/dist/vscode-lean4/vscode-lean4/src/utils/exturi.js +11 -11
  127. package/dist/vscode-lean4/vscode-lean4/src/utils/internalErrors.d.ts +2 -0
  128. package/dist/vscode-lean4/vscode-lean4/src/utils/internalErrors.js +35 -0
  129. package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.js +1 -1
  130. package/dist/vscode-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +41 -12
  131. package/dist/vscode-lean4/vscode-lean4/src/utils/leanInstaller.js +245 -128
  132. package/dist/vscode-lean4/vscode-lean4/src/utils/notifs.d.ts +27 -22
  133. package/dist/vscode-lean4/vscode-lean4/src/utils/notifs.js +177 -82
  134. package/dist/vscode-lean4/vscode-lean4/src/utils/projectInfo.d.ts +11 -4
  135. package/dist/vscode-lean4/vscode-lean4/src/utils/projectInfo.js +18 -16
  136. package/dist/vscode-lean4/vscode-lean4/src/utils/semverRegex.d.ts +1 -0
  137. package/dist/vscode-lean4/vscode-lean4/src/utils/semverRegex.js +2 -0
  138. package/dist/vscode-lean4/vscode-lean4/tsconfig.json +2 -1
  139. package/dist/vscode-lean4/vscode-lean4/webview/tsconfig.json +3 -1
  140. package/dist/vscode.css +7 -0
  141. package/package.json +7 -3
  142. package/dist/tsconfig.tsbuildinfo +0 -1
  143. package/dist/vscode-lean4/lean4-infoview/dist/index.css +0 -4366
  144. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/_iconCloud/keywords.transforms.json +0 -83
  145. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/_iconCloud/keywords.variables.json +0 -47
  146. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/_iconCloud/manifest.json +0 -36
  147. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/_iconCloud/manifest.transforms.json +0 -368
  148. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/_iconCloud/manifest.variables.json +0 -149
  149. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/dist/codicon.css +0 -571
  150. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/dist/codicon.svg +0 -1
  151. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/dist/codicon.ttf +0 -0
  152. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/package.json +0 -34
  153. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/account.svg +0 -1
  154. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/activate-breakpoints.svg +0 -1
  155. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/add.svg +0 -1
  156. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/archive.svg +0 -1
  157. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-both.svg +0 -1
  158. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-circle-down.svg +0 -1
  159. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-circle-left.svg +0 -1
  160. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-circle-right.svg +0 -1
  161. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-circle-up.svg +0 -1
  162. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-down.svg +0 -1
  163. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-left.svg +0 -1
  164. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-right.svg +0 -1
  165. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-small-down.svg +0 -1
  166. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-small-left.svg +0 -1
  167. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-small-right.svg +0 -1
  168. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-small-up.svg +0 -1
  169. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-swap.svg +0 -1
  170. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/arrow-up.svg +0 -1
  171. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/azure-devops.svg +0 -1
  172. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/azure.svg +0 -1
  173. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/beaker-stop.svg +0 -1
  174. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/beaker.svg +0 -1
  175. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bell-dot.svg +0 -1
  176. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bell-slash-dot.svg +0 -1
  177. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bell-slash.svg +0 -1
  178. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bell.svg +0 -1
  179. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/blank.svg +0 -1
  180. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bold.svg +0 -1
  181. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/book.svg +0 -1
  182. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bookmark.svg +0 -1
  183. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bracket-dot.svg +0 -1
  184. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bracket-error.svg +0 -1
  185. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/briefcase.svg +0 -1
  186. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/broadcast.svg +0 -1
  187. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/browser.svg +0 -1
  188. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/bug.svg +0 -1
  189. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/calendar.svg +0 -1
  190. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/call-incoming.svg +0 -1
  191. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/call-outgoing.svg +0 -1
  192. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/case-sensitive.svg +0 -1
  193. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/check-all.svg +0 -1
  194. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/check.svg +0 -1
  195. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/checklist.svg +0 -1
  196. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chevron-down.svg +0 -1
  197. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chevron-left.svg +0 -1
  198. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chevron-right.svg +0 -1
  199. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chevron-up.svg +0 -1
  200. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chrome-close.svg +0 -1
  201. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chrome-maximize.svg +0 -1
  202. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chrome-minimize.svg +0 -1
  203. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/chrome-restore.svg +0 -1
  204. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-filled.svg +0 -1
  205. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-large-filled.svg +0 -1
  206. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-large-outline.svg +0 -1
  207. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-outline.svg +0 -1
  208. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-slash.svg +0 -1
  209. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-small-filled.svg +0 -1
  210. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circle-small.svg +0 -1
  211. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/circuit-board.svg +0 -1
  212. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/clear-all.svg +0 -1
  213. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/clippy.svg +0 -1
  214. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/close-all.svg +0 -1
  215. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/close.svg +0 -1
  216. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/cloud-download.svg +0 -1
  217. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/cloud-upload.svg +0 -1
  218. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/cloud.svg +0 -1
  219. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/code.svg +0 -1
  220. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/collapse-all.svg +0 -1
  221. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/color-mode.svg +0 -1
  222. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/combine.svg +0 -1
  223. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/comment-discussion.svg +0 -1
  224. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/comment-unresolved.svg +0 -1
  225. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/comment.svg +0 -1
  226. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/compass-active.svg +0 -1
  227. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/compass-dot.svg +0 -1
  228. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/compass.svg +0 -1
  229. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/copy.svg +0 -1
  230. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/credit-card.svg +0 -1
  231. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/dash.svg +0 -1
  232. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/dashboard.svg +0 -1
  233. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/database.svg +0 -1
  234. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-all.svg +0 -1
  235. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-alt-small.svg +0 -1
  236. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-alt.svg +0 -1
  237. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-conditional-unverified.svg +0 -1
  238. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-conditional.svg +0 -1
  239. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-data-unverified.svg +0 -1
  240. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-data.svg +0 -1
  241. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-function-unverified.svg +0 -1
  242. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-function.svg +0 -1
  243. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-log-unverified.svg +0 -1
  244. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-log.svg +0 -1
  245. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-breakpoint-unsupported.svg +0 -1
  246. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-console.svg +0 -1
  247. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-continue-small.svg +0 -1
  248. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-continue.svg +0 -1
  249. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-coverage.svg +0 -1
  250. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-disconnect.svg +0 -1
  251. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-line-by-line.svg +0 -1
  252. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-pause.svg +0 -1
  253. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-rerun.svg +0 -1
  254. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-restart-frame.svg +0 -1
  255. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-restart.svg +0 -1
  256. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-reverse-continue.svg +0 -1
  257. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-stackframe-active.svg +0 -1
  258. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-stackframe.svg +0 -1
  259. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-start.svg +0 -1
  260. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-step-back.svg +0 -1
  261. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-step-into.svg +0 -1
  262. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-step-out.svg +0 -1
  263. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-step-over.svg +0 -1
  264. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug-stop.svg +0 -1
  265. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/debug.svg +0 -1
  266. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/desktop-download.svg +0 -1
  267. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/device-camera-video.svg +0 -1
  268. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/device-camera.svg +0 -1
  269. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/device-mobile.svg +0 -1
  270. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/diff-added.svg +0 -1
  271. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/diff-ignored.svg +0 -1
  272. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/diff-modified.svg +0 -1
  273. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/diff-removed.svg +0 -1
  274. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/diff-renamed.svg +0 -1
  275. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/diff.svg +0 -1
  276. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/discard.svg +0 -1
  277. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/edit.svg +0 -1
  278. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/editor-layout.svg +0 -1
  279. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/ellipsis.svg +0 -1
  280. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/empty-window.svg +0 -1
  281. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/error-small.svg +0 -1
  282. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/error.svg +0 -1
  283. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/exclude.svg +0 -1
  284. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/expand-all.svg +0 -1
  285. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/export.svg +0 -1
  286. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/extensions.svg +0 -1
  287. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/eye-closed.svg +0 -1
  288. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/eye.svg +0 -1
  289. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/feedback.svg +0 -1
  290. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-binary.svg +0 -1
  291. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-code.svg +0 -1
  292. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-media.svg +0 -1
  293. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-pdf.svg +0 -1
  294. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-submodule.svg +0 -1
  295. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-symlink-directory.svg +0 -1
  296. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-symlink-file.svg +0 -1
  297. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file-zip.svg +0 -1
  298. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/file.svg +0 -1
  299. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/files.svg +0 -1
  300. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/filter-filled.svg +0 -1
  301. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/filter.svg +0 -1
  302. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/flame.svg +0 -1
  303. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/fold-down.svg +0 -1
  304. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/fold-up.svg +0 -1
  305. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/fold.svg +0 -1
  306. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/folder-active.svg +0 -1
  307. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/folder-library.svg +0 -1
  308. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/folder-opened.svg +0 -1
  309. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/folder.svg +0 -1
  310. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/gear.svg +0 -1
  311. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/gift.svg +0 -1
  312. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/gist-secret.svg +0 -1
  313. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/gist.svg +0 -1
  314. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-commit.svg +0 -1
  315. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-compare.svg +0 -1
  316. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-merge.svg +0 -1
  317. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-pull-request-closed.svg +0 -1
  318. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-pull-request-create.svg +0 -1
  319. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-pull-request-draft.svg +0 -1
  320. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-pull-request-go-to-changes.svg +0 -1
  321. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-pull-request-new-changes.svg +0 -1
  322. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/git-pull-request.svg +0 -1
  323. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/github-action.svg +0 -1
  324. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/github-alt.svg +0 -1
  325. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/github-inverted.svg +0 -1
  326. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/github.svg +0 -1
  327. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/globe.svg +0 -1
  328. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/go-to-file.svg +0 -1
  329. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/grabber.svg +0 -1
  330. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/graph-left.svg +0 -1
  331. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/graph-line.svg +0 -1
  332. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/graph-scatter.svg +0 -1
  333. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/graph.svg +0 -1
  334. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/gripper.svg +0 -1
  335. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/group-by-ref-type.svg +0 -1
  336. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/heart-filled.svg +0 -1
  337. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/heart.svg +0 -1
  338. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/history.svg +0 -1
  339. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/home.svg +0 -1
  340. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/horizontal-rule.svg +0 -1
  341. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/hubot.svg +0 -1
  342. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/inbox.svg +0 -1
  343. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/indent.svg +0 -1
  344. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/info.svg +0 -1
  345. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/inspect.svg +0 -1
  346. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/issue-draft.svg +0 -1
  347. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/issue-reopened.svg +0 -1
  348. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/issues.svg +0 -1
  349. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/italic.svg +0 -1
  350. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/jersey.svg +0 -1
  351. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/json.svg +0 -1
  352. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/kebab-vertical.svg +0 -1
  353. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/key.svg +0 -1
  354. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/law.svg +0 -1
  355. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layers-active.svg +0 -1
  356. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layers-dot.svg +0 -1
  357. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layers.svg +0 -1
  358. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-activitybar-left.svg +0 -1
  359. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-activitybar-right.svg +0 -1
  360. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-centered.svg +0 -1
  361. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-menubar.svg +0 -1
  362. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-panel-center.svg +0 -1
  363. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-panel-justify.svg +0 -1
  364. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-panel-left.svg +0 -1
  365. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-panel-off.svg +0 -1
  366. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-panel-right.svg +0 -1
  367. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-panel.svg +0 -1
  368. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-sidebar-left-off.svg +0 -1
  369. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-sidebar-left.svg +0 -1
  370. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-sidebar-right-off.svg +0 -1
  371. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-sidebar-right.svg +0 -1
  372. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout-statusbar.svg +0 -1
  373. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/layout.svg +0 -1
  374. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/library.svg +0 -1
  375. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/lightbulb-autofix.svg +0 -1
  376. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/lightbulb.svg +0 -1
  377. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/link-external.svg +0 -1
  378. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/link.svg +0 -1
  379. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/list-filter.svg +0 -1
  380. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/list-flat.svg +0 -1
  381. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/list-ordered.svg +0 -1
  382. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/list-selection.svg +0 -1
  383. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/list-tree.svg +0 -1
  384. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/list-unordered.svg +0 -1
  385. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/live-share.svg +0 -1
  386. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/loading.svg +0 -1
  387. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/location.svg +0 -1
  388. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/lock-small.svg +0 -1
  389. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/lock.svg +0 -1
  390. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/magnet.svg +0 -1
  391. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/mail-read.svg +0 -1
  392. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/mail.svg +0 -1
  393. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/map-filled.svg +0 -1
  394. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/map.svg +0 -1
  395. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/markdown.svg +0 -1
  396. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/megaphone.svg +0 -1
  397. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/mention.svg +0 -1
  398. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/menu.svg +0 -1
  399. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/merge.svg +0 -1
  400. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/milestone.svg +0 -1
  401. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/mirror.svg +0 -1
  402. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/mortar-board.svg +0 -1
  403. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/move.svg +0 -1
  404. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/multiple-windows.svg +0 -1
  405. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/mute.svg +0 -1
  406. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/new-file.svg +0 -1
  407. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/new-folder.svg +0 -1
  408. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/newline.svg +0 -1
  409. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/no-newline.svg +0 -1
  410. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/note.svg +0 -1
  411. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/notebook-template.svg +0 -1
  412. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/notebook.svg +0 -1
  413. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/octoface.svg +0 -1
  414. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/open-preview.svg +0 -1
  415. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/organization.svg +0 -1
  416. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/output.svg +0 -1
  417. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/package.svg +0 -1
  418. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/paintcan.svg +0 -1
  419. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pass-filled.svg +0 -1
  420. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pass.svg +0 -1
  421. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/person-add.svg +0 -1
  422. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/person.svg +0 -1
  423. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pie-chart.svg +0 -1
  424. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pin.svg +0 -1
  425. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pinned-dirty.svg +0 -1
  426. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pinned.svg +0 -1
  427. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/play-circle.svg +0 -1
  428. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/play.svg +0 -1
  429. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/plug.svg +0 -1
  430. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/preserve-case.svg +0 -1
  431. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/preview.svg +0 -1
  432. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/primitive-square.svg +0 -1
  433. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/project.svg +0 -1
  434. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/pulse.svg +0 -1
  435. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/question.svg +0 -1
  436. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/quote.svg +0 -1
  437. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/radio-tower.svg +0 -1
  438. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/reactions.svg +0 -1
  439. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/record-keys.svg +0 -1
  440. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/record-small.svg +0 -1
  441. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/record.svg +0 -1
  442. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/redo.svg +0 -1
  443. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/references.svg +0 -1
  444. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/refresh.svg +0 -1
  445. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/regex.svg +0 -1
  446. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/remote-explorer.svg +0 -1
  447. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/remote.svg +0 -1
  448. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/remove.svg +0 -1
  449. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/replace-all.svg +0 -1
  450. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/replace.svg +0 -1
  451. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/reply.svg +0 -1
  452. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/repo-clone.svg +0 -1
  453. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/repo-force-push.svg +0 -1
  454. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/repo-forked.svg +0 -1
  455. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/repo-pull.svg +0 -1
  456. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/repo-push.svg +0 -1
  457. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/repo.svg +0 -1
  458. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/report.svg +0 -1
  459. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/request-changes.svg +0 -1
  460. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/rocket.svg +0 -1
  461. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/root-folder-opened.svg +0 -1
  462. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/root-folder.svg +0 -1
  463. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/rss.svg +0 -1
  464. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/ruby.svg +0 -1
  465. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/run-above.svg +0 -1
  466. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/run-all.svg +0 -1
  467. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/run-below.svg +0 -1
  468. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/run-errors.svg +0 -1
  469. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/save-all.svg +0 -1
  470. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/save-as.svg +0 -1
  471. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/save.svg +0 -1
  472. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/screen-full.svg +0 -1
  473. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/screen-normal.svg +0 -1
  474. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/search-stop.svg +0 -1
  475. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/search.svg +0 -1
  476. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/server-environment.svg +0 -1
  477. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/server-process.svg +0 -1
  478. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/server.svg +0 -1
  479. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/settings-gear.svg +0 -1
  480. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/settings.svg +0 -1
  481. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/shield.svg +0 -1
  482. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/sign-in.svg +0 -1
  483. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/sign-out.svg +0 -1
  484. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/smiley.svg +0 -1
  485. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/sort-precedence.svg +0 -1
  486. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/source-control.svg +0 -1
  487. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/split-horizontal.svg +0 -1
  488. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/split-vertical.svg +0 -1
  489. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/squirrel.svg +0 -1
  490. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/star-empty.svg +0 -1
  491. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/star-full.svg +0 -1
  492. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/star-half.svg +0 -1
  493. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/stop-circle.svg +0 -1
  494. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-array.svg +0 -1
  495. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-boolean.svg +0 -1
  496. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-class.svg +0 -1
  497. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-color.svg +0 -1
  498. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-constant.svg +0 -1
  499. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-enum-member.svg +0 -1
  500. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-enum.svg +0 -1
  501. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-event.svg +0 -1
  502. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-field.svg +0 -1
  503. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-file.svg +0 -1
  504. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-interface.svg +0 -1
  505. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-key.svg +0 -1
  506. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-keyword.svg +0 -1
  507. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-method.svg +0 -1
  508. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-misc.svg +0 -1
  509. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-namespace.svg +0 -1
  510. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-numeric.svg +0 -1
  511. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-operator.svg +0 -1
  512. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-parameter.svg +0 -1
  513. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-property.svg +0 -1
  514. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-ruler.svg +0 -1
  515. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-snippet.svg +0 -1
  516. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-string.svg +0 -1
  517. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-structure.svg +0 -1
  518. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/symbol-variable.svg +0 -1
  519. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/sync-ignored.svg +0 -1
  520. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/sync.svg +0 -1
  521. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/table.svg +0 -1
  522. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/tag.svg +0 -1
  523. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/target.svg +0 -1
  524. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/tasklist.svg +0 -1
  525. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/telescope.svg +0 -1
  526. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-bash.svg +0 -1
  527. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-cmd.svg +0 -1
  528. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-debian.svg +0 -1
  529. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-linux.svg +0 -1
  530. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-powershell.svg +0 -1
  531. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-tmux.svg +0 -1
  532. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal-ubuntu.svg +0 -1
  533. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/terminal.svg +0 -1
  534. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/text-size.svg +0 -1
  535. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/three-bars.svg +0 -1
  536. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/thumbsdown.svg +0 -1
  537. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/thumbsup.svg +0 -1
  538. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/tools.svg +0 -1
  539. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/trash.svg +0 -1
  540. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/triangle-down.svg +0 -1
  541. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/triangle-left.svg +0 -1
  542. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/triangle-right.svg +0 -1
  543. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/triangle-up.svg +0 -1
  544. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/twitter.svg +0 -1
  545. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/type-hierarchy-sub.svg +0 -1
  546. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/type-hierarchy-super.svg +0 -1
  547. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/type-hierarchy.svg +0 -1
  548. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/unfold.svg +0 -1
  549. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/ungroup-by-ref-type.svg +0 -1
  550. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/unlock.svg +0 -1
  551. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/unmute.svg +0 -1
  552. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/unverified.svg +0 -1
  553. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/variable-group.svg +0 -1
  554. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/verified-filled.svg +0 -1
  555. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/verified.svg +0 -1
  556. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/versions.svg +0 -1
  557. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/vm-active.svg +0 -1
  558. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/vm-connect.svg +0 -1
  559. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/vm-outline.svg +0 -1
  560. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/vm-running.svg +0 -1
  561. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/vm.svg +0 -1
  562. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/wand.svg +0 -1
  563. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/warning.svg +0 -1
  564. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/watch.svg +0 -1
  565. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/whitespace.svg +0 -1
  566. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/whole-word.svg +0 -1
  567. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/window.svg +0 -1
  568. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/word-wrap.svg +0 -1
  569. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/workspace-trusted.svg +0 -1
  570. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/workspace-unknown.svg +0 -1
  571. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/workspace-untrusted.svg +0 -1
  572. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/zoom-in.svg +0 -1
  573. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/icons/zoom-out.svg +0 -1
  574. package/dist/vscode-lean4/lean4-infoview/node_modules/@vscode/codicons/src/template/mapping.json +0 -514
  575. package/dist/vscode-lean4/lean4-infoview/src/infoview/contexts.d.ts +0 -46
  576. package/dist/vscode-lean4/lean4-infoview/src/infoview/contexts.js +0 -44
  577. package/dist/vscode-lean4/lean4-infoview/src/infoview/editorConnection.js +0 -41
  578. package/dist/vscode-lean4/lean4-infoview/src/infoview/event.js +0 -57
  579. package/dist/vscode-lean4/lean4-infoview/src/infoview/serverVersion.js +0 -25
  580. package/dist/vscode-lean4/lean4-infoview/src/infoview/util.js +0 -336
  581. package/dist/vscode-lean4/lean4-unicode-input/dist/abbreviations.json +0 -1829
  582. package/dist/vscode-lean4/vscode-lean4/dist/lean4-infoview/codicon.ttf +0 -0
  583. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/codicons/codicon.css +0 -571
  584. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/codicons/codicon.svg +0 -1
  585. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/codicons/codicon.ttf +0 -0
  586. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/index.css +0 -97
  587. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/codicons/codicon.css +0 -571
  588. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/codicons/codicon.svg +0 -1
  589. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/codicons/codicon.ttf +0 -0
  590. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/index.css +0 -198
  591. package/dist/vscode-lean4/vscode-lean4/node_modules/@types/node/package.json +0 -220
  592. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/keywords.transforms.json +0 -83
  593. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/keywords.variables.json +0 -47
  594. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/manifest.json +0 -36
  595. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/manifest.transforms.json +0 -368
  596. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/manifest.variables.json +0 -149
  597. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/dist/codicon.css +0 -629
  598. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/dist/codicon.svg +0 -1
  599. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/dist/codicon.ttf +0 -0
  600. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/package.json +0 -35
  601. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/account.svg +0 -1
  602. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/activate-breakpoints.svg +0 -1
  603. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/add.svg +0 -1
  604. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/archive.svg +0 -1
  605. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-both.svg +0 -1
  606. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-down.svg +0 -1
  607. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-left.svg +0 -1
  608. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-right.svg +0 -1
  609. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-up.svg +0 -1
  610. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-down.svg +0 -1
  611. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-left.svg +0 -1
  612. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-right.svg +0 -1
  613. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-down.svg +0 -1
  614. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-left.svg +0 -1
  615. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-right.svg +0 -1
  616. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-up.svg +0 -1
  617. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-swap.svg +0 -1
  618. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-up.svg +0 -1
  619. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/azure-devops.svg +0 -1
  620. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/azure.svg +0 -1
  621. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/beaker-stop.svg +0 -1
  622. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/beaker.svg +0 -1
  623. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell-dot.svg +0 -1
  624. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell-slash-dot.svg +0 -1
  625. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell-slash.svg +0 -1
  626. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell.svg +0 -1
  627. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/blank.svg +0 -1
  628. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bold.svg +0 -1
  629. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/book.svg +0 -1
  630. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bookmark.svg +0 -1
  631. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bracket-dot.svg +0 -1
  632. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bracket-error.svg +0 -1
  633. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/briefcase.svg +0 -1
  634. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/broadcast.svg +0 -1
  635. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/browser.svg +0 -1
  636. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bug.svg +0 -1
  637. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/calendar.svg +0 -1
  638. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/call-incoming.svg +0 -1
  639. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/call-outgoing.svg +0 -1
  640. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/case-sensitive.svg +0 -1
  641. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/check-all.svg +0 -1
  642. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/check.svg +0 -1
  643. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/checklist.svg +0 -1
  644. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-down.svg +0 -1
  645. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-left.svg +0 -1
  646. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-right.svg +0 -1
  647. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-up.svg +0 -1
  648. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chip.svg +0 -1
  649. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-close.svg +0 -1
  650. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-maximize.svg +0 -1
  651. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-minimize.svg +0 -1
  652. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-restore.svg +0 -1
  653. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-filled.svg +0 -1
  654. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-large-filled.svg +0 -1
  655. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-large.svg +0 -1
  656. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-slash.svg +0 -1
  657. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-small-filled.svg +0 -1
  658. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-small.svg +0 -1
  659. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle.svg +0 -1
  660. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circuit-board.svg +0 -1
  661. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/clear-all.svg +0 -1
  662. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/clippy.svg +0 -1
  663. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/close-all.svg +0 -1
  664. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/close.svg +0 -1
  665. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/cloud-download.svg +0 -1
  666. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/cloud-upload.svg +0 -1
  667. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/cloud.svg +0 -1
  668. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/code-oss.svg +0 -1
  669. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/code.svg +0 -1
  670. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/coffee.svg +0 -1
  671. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/collapse-all.svg +0 -1
  672. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/color-mode.svg +0 -1
  673. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/combine.svg +0 -1
  674. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment-discussion.svg +0 -1
  675. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment-draft.svg +0 -1
  676. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment-unresolved.svg +0 -1
  677. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment.svg +0 -1
  678. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/compass-active.svg +0 -1
  679. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/compass-dot.svg +0 -1
  680. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/compass.svg +0 -1
  681. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/copilot.svg +0 -1
  682. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/copy.svg +0 -1
  683. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/coverage.svg +0 -1
  684. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/credit-card.svg +0 -1
  685. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/dash.svg +0 -1
  686. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/dashboard.svg +0 -1
  687. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/database.svg +0 -1
  688. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-all.svg +0 -1
  689. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-alt-small.svg +0 -1
  690. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-alt.svg +0 -1
  691. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-conditional-unverified.svg +0 -1
  692. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-conditional.svg +0 -1
  693. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-data-unverified.svg +0 -1
  694. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-data.svg +0 -1
  695. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-function-unverified.svg +0 -1
  696. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-function.svg +0 -1
  697. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-log-unverified.svg +0 -1
  698. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-log.svg +0 -1
  699. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-unsupported.svg +0 -1
  700. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-console.svg +0 -1
  701. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-continue-small.svg +0 -1
  702. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-continue.svg +0 -1
  703. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-coverage.svg +0 -1
  704. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-disconnect.svg +0 -1
  705. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-line-by-line.svg +0 -1
  706. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-pause.svg +0 -1
  707. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-rerun.svg +0 -1
  708. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-restart-frame.svg +0 -1
  709. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-restart.svg +0 -1
  710. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-reverse-continue.svg +0 -1
  711. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-stackframe-active.svg +0 -1
  712. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-stackframe.svg +0 -1
  713. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-start.svg +0 -1
  714. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-back.svg +0 -1
  715. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-into.svg +0 -1
  716. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-out.svg +0 -1
  717. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-over.svg +0 -1
  718. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-stop.svg +0 -1
  719. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug.svg +0 -1
  720. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/desktop-download.svg +0 -1
  721. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/device-camera-video.svg +0 -1
  722. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/device-camera.svg +0 -1
  723. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/device-mobile.svg +0 -1
  724. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-added.svg +0 -1
  725. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-ignored.svg +0 -1
  726. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-modified.svg +0 -1
  727. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-multiple.svg +0 -1
  728. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-removed.svg +0 -1
  729. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-renamed.svg +0 -1
  730. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-single.svg +0 -1
  731. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff.svg +0 -1
  732. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/discard.svg +0 -1
  733. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/edit.svg +0 -1
  734. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/editor-layout.svg +0 -1
  735. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/ellipsis.svg +0 -1
  736. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/empty-window.svg +0 -1
  737. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/error-small.svg +0 -1
  738. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/error.svg +0 -1
  739. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/exclude.svg +0 -1
  740. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/expand-all.svg +0 -1
  741. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/export.svg +0 -1
  742. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/extensions.svg +0 -1
  743. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/eye-closed.svg +0 -1
  744. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/eye.svg +0 -1
  745. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/feedback.svg +0 -1
  746. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-binary.svg +0 -1
  747. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-code.svg +0 -1
  748. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-media.svg +0 -1
  749. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-pdf.svg +0 -1
  750. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-submodule.svg +0 -1
  751. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-symlink-directory.svg +0 -1
  752. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-symlink-file.svg +0 -1
  753. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-zip.svg +0 -1
  754. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file.svg +0 -1
  755. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/files.svg +0 -1
  756. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/filter-filled.svg +0 -1
  757. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/filter.svg +0 -1
  758. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/flame.svg +0 -1
  759. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/fold-down.svg +0 -1
  760. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/fold-up.svg +0 -1
  761. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/fold.svg +0 -1
  762. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder-active.svg +0 -1
  763. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder-library.svg +0 -1
  764. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder-opened.svg +0 -1
  765. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder.svg +0 -1
  766. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/game.svg +0 -1
  767. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gear.svg +0 -1
  768. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gift.svg +0 -1
  769. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gist-secret.svg +0 -1
  770. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gist.svg +0 -1
  771. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-commit.svg +0 -1
  772. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-compare.svg +0 -1
  773. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-fetch.svg +0 -1
  774. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-merge.svg +0 -1
  775. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-closed.svg +0 -1
  776. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-create.svg +0 -1
  777. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-draft.svg +0 -1
  778. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-go-to-changes.svg +0 -1
  779. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-new-changes.svg +0 -1
  780. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request.svg +0 -1
  781. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-stash-apply.svg +0 -1
  782. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-stash-pop.svg +0 -1
  783. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-stash.svg +0 -1
  784. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-action.svg +0 -1
  785. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-alt.svg +0 -1
  786. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-inverted.svg +0 -1
  787. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-project.svg +0 -1
  788. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github.svg +0 -1
  789. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/globe.svg +0 -1
  790. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/go-to-file.svg +0 -1
  791. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/go-to-search.svg +0 -1
  792. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/grabber.svg +0 -1
  793. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph-left.svg +0 -1
  794. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph-line.svg +0 -1
  795. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph-scatter.svg +0 -1
  796. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph.svg +0 -1
  797. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gripper.svg +0 -1
  798. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/group-by-ref-type.svg +0 -1
  799. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/heart-filled.svg +0 -1
  800. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/heart.svg +0 -1
  801. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/history.svg +0 -1
  802. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/home.svg +0 -1
  803. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/horizontal-rule.svg +0 -1
  804. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/hubot.svg +0 -1
  805. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/inbox.svg +0 -1
  806. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/indent.svg +0 -1
  807. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/info.svg +0 -1
  808. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/insert.svg +0 -1
  809. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/inspect.svg +0 -1
  810. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/issue-draft.svg +0 -1
  811. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/issue-reopened.svg +0 -1
  812. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/issues.svg +0 -1
  813. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/italic.svg +0 -1
  814. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/jersey.svg +0 -1
  815. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/json.svg +0 -1
  816. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/kebab-vertical.svg +0 -1
  817. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/key.svg +0 -1
  818. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/law.svg +0 -1
  819. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layers-active.svg +0 -1
  820. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layers-dot.svg +0 -1
  821. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layers.svg +0 -1
  822. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-activitybar-left.svg +0 -1
  823. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-activitybar-right.svg +0 -1
  824. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-centered.svg +0 -1
  825. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-menubar.svg +0 -1
  826. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-center.svg +0 -1
  827. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-justify.svg +0 -1
  828. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-left.svg +0 -1
  829. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-off.svg +0 -1
  830. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-right.svg +0 -1
  831. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel.svg +0 -1
  832. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-left-off.svg +0 -1
  833. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-left.svg +0 -1
  834. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-right-off.svg +0 -1
  835. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-right.svg +0 -1
  836. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-statusbar.svg +0 -1
  837. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout.svg +0 -1
  838. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/library.svg +0 -1
  839. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lightbulb-autofix.svg +0 -1
  840. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lightbulb-sparkle.svg +0 -1
  841. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lightbulb.svg +0 -1
  842. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/link-external.svg +0 -1
  843. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/link.svg +0 -1
  844. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-filter.svg +0 -1
  845. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-flat.svg +0 -1
  846. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-ordered.svg +0 -1
  847. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-selection.svg +0 -1
  848. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-tree.svg +0 -1
  849. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-unordered.svg +0 -1
  850. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/live-share.svg +0 -1
  851. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/loading.svg +0 -1
  852. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/location.svg +0 -1
  853. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lock-small.svg +0 -1
  854. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lock.svg +0 -1
  855. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/magnet.svg +0 -1
  856. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mail-read.svg +0 -1
  857. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mail.svg +0 -1
  858. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map-filled.svg +0 -1
  859. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map-vertical-filled.svg +0 -1
  860. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map-vertical.svg +0 -1
  861. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map.svg +0 -1
  862. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/markdown.svg +0 -1
  863. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/megaphone.svg +0 -1
  864. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mention.svg +0 -1
  865. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/menu.svg +0 -1
  866. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/merge.svg +0 -1
  867. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mic-filled.svg +0 -1
  868. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mic.svg +0 -1
  869. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/milestone.svg +0 -1
  870. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mirror.svg +0 -1
  871. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mortar-board.svg +0 -1
  872. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/move.svg +0 -1
  873. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/multiple-windows.svg +0 -1
  874. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/music.svg +0 -1
  875. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mute.svg +0 -1
  876. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/new-file.svg +0 -1
  877. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/new-folder.svg +0 -1
  878. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/newline.svg +0 -1
  879. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/no-newline.svg +0 -1
  880. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/note.svg +0 -1
  881. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/notebook-template.svg +0 -1
  882. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/notebook.svg +0 -1
  883. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/octoface.svg +0 -1
  884. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/open-preview.svg +0 -1
  885. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/organization.svg +0 -1
  886. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/output.svg +0 -1
  887. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/package.svg +0 -1
  888. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/paintcan.svg +0 -1
  889. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pass-filled.svg +0 -1
  890. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pass.svg +0 -1
  891. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/percentage.svg +0 -1
  892. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/person-add.svg +0 -1
  893. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/person.svg +0 -1
  894. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/piano.svg +0 -1
  895. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pie-chart.svg +0 -1
  896. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pin.svg +0 -1
  897. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pinned-dirty.svg +0 -1
  898. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pinned.svg +0 -1
  899. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/play-circle.svg +0 -1
  900. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/play.svg +0 -1
  901. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/plug.svg +0 -1
  902. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/preserve-case.svg +0 -1
  903. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/preview.svg +0 -1
  904. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/primitive-square.svg +0 -1
  905. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/project.svg +0 -1
  906. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pulse.svg +0 -1
  907. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/question.svg +0 -1
  908. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/quote.svg +0 -1
  909. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/radio-tower.svg +0 -1
  910. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/reactions.svg +0 -1
  911. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/record-keys.svg +0 -1
  912. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/record-small.svg +0 -1
  913. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/record.svg +0 -1
  914. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/redo.svg +0 -1
  915. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/references.svg +0 -1
  916. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/refresh.svg +0 -1
  917. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/regex.svg +0 -1
  918. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/remote-explorer.svg +0 -1
  919. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/remote.svg +0 -1
  920. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/remove.svg +0 -1
  921. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/replace-all.svg +0 -1
  922. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/replace.svg +0 -1
  923. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/reply.svg +0 -1
  924. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-clone.svg +0 -1
  925. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-fetch.svg +0 -1
  926. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-force-push.svg +0 -1
  927. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-forked.svg +0 -1
  928. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-pull.svg +0 -1
  929. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-push.svg +0 -1
  930. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo.svg +0 -1
  931. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/report.svg +0 -1
  932. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/request-changes.svg +0 -1
  933. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/robot.svg +0 -1
  934. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/rocket.svg +0 -1
  935. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/root-folder-opened.svg +0 -1
  936. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/root-folder.svg +0 -1
  937. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/rss.svg +0 -1
  938. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/ruby.svg +0 -1
  939. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-above.svg +0 -1
  940. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-all-coverage.svg +0 -1
  941. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-all.svg +0 -1
  942. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-below.svg +0 -1
  943. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-coverage.svg +0 -1
  944. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-errors.svg +0 -1
  945. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/save-all.svg +0 -1
  946. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/save-as.svg +0 -1
  947. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/save.svg +0 -1
  948. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/screen-full.svg +0 -1
  949. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/screen-normal.svg +0 -1
  950. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/search-fuzzy.svg +0 -1
  951. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/search-stop.svg +0 -1
  952. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/search.svg +0 -1
  953. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/send.svg +0 -1
  954. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/server-environment.svg +0 -1
  955. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/server-process.svg +0 -1
  956. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/server.svg +0 -1
  957. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/settings-gear.svg +0 -1
  958. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/settings.svg +0 -1
  959. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/share.svg +0 -1
  960. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/shield.svg +0 -1
  961. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sign-in.svg +0 -1
  962. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sign-out.svg +0 -1
  963. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/smiley.svg +0 -1
  964. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/snake.svg +0 -1
  965. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sort-precedence.svg +0 -1
  966. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/source-control.svg +0 -1
  967. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sparkle-filled.svg +0 -1
  968. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sparkle.svg +0 -1
  969. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/split-horizontal.svg +0 -1
  970. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/split-vertical.svg +0 -1
  971. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/squirrel.svg +0 -1
  972. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/star-empty.svg +0 -1
  973. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/star-full.svg +0 -1
  974. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/star-half.svg +0 -1
  975. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/stop-circle.svg +0 -1
  976. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/surround-with.svg +0 -1
  977. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-array.svg +0 -1
  978. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-boolean.svg +0 -1
  979. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-class.svg +0 -1
  980. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-color.svg +0 -1
  981. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-constant.svg +0 -1
  982. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-enum-member.svg +0 -1
  983. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-enum.svg +0 -1
  984. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-event.svg +0 -1
  985. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-field.svg +0 -1
  986. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-file.svg +0 -1
  987. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-interface.svg +0 -1
  988. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-key.svg +0 -1
  989. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-keyword.svg +0 -1
  990. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-method.svg +0 -1
  991. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-misc.svg +0 -1
  992. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-namespace.svg +0 -1
  993. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-numeric.svg +0 -1
  994. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-operator.svg +0 -1
  995. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-parameter.svg +0 -1
  996. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-property.svg +0 -1
  997. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-ruler.svg +0 -1
  998. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-snippet.svg +0 -1
  999. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-string.svg +0 -1
  1000. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-structure.svg +0 -1
  1001. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-variable.svg +0 -1
  1002. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sync-ignored.svg +0 -1
  1003. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sync.svg +0 -1
  1004. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/table.svg +0 -1
  1005. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/tag.svg +0 -1
  1006. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/target.svg +0 -1
  1007. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/tasklist.svg +0 -1
  1008. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/telescope.svg +0 -1
  1009. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-bash.svg +0 -1
  1010. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-cmd.svg +0 -1
  1011. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-debian.svg +0 -1
  1012. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-linux.svg +0 -1
  1013. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-powershell.svg +0 -1
  1014. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-tmux.svg +0 -1
  1015. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-ubuntu.svg +0 -1
  1016. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal.svg +0 -1
  1017. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/text-size.svg +0 -1
  1018. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/three-bars.svg +0 -1
  1019. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsdown-filled.svg +0 -1
  1020. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsdown.svg +0 -1
  1021. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsup-filled.svg +0 -1
  1022. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsup.svg +0 -1
  1023. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/tools.svg +0 -1
  1024. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/trash.svg +0 -1
  1025. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-down.svg +0 -1
  1026. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-left.svg +0 -1
  1027. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-right.svg +0 -1
  1028. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-up.svg +0 -1
  1029. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/twitter.svg +0 -1
  1030. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/type-hierarchy-sub.svg +0 -1
  1031. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/type-hierarchy-super.svg +0 -1
  1032. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/type-hierarchy.svg +0 -1
  1033. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unfold.svg +0 -1
  1034. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/ungroup-by-ref-type.svg +0 -1
  1035. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unlock.svg +0 -1
  1036. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unmute.svg +0 -1
  1037. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unverified.svg +0 -1
  1038. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/variable-group.svg +0 -1
  1039. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/verified-filled.svg +0 -1
  1040. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/verified.svg +0 -1
  1041. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/versions.svg +0 -1
  1042. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-active.svg +0 -1
  1043. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-connect.svg +0 -1
  1044. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-outline.svg +0 -1
  1045. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-running.svg +0 -1
  1046. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm.svg +0 -1
  1047. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vr.svg +0 -1
  1048. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vscode-insiders.svg +0 -1
  1049. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vscode.svg +0 -1
  1050. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/wand.svg +0 -1
  1051. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/warning.svg +0 -1
  1052. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/watch.svg +0 -1
  1053. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/whitespace.svg +0 -1
  1054. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/whole-word.svg +0 -1
  1055. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/window.svg +0 -1
  1056. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/word-wrap.svg +0 -1
  1057. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/workspace-trusted.svg +0 -1
  1058. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/workspace-unknown.svg +0 -1
  1059. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/workspace-untrusted.svg +0 -1
  1060. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/zoom-in.svg +0 -1
  1061. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/zoom-out.svg +0 -1
  1062. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/template/mapping.json +0 -571
  1063. package/dist/vscode-lean4/vscode-lean4/node_modules/brace-expansion/package.json +0 -46
  1064. package/dist/vscode-lean4/vscode-lean4/node_modules/glob/dist/commonjs/package.json +0 -3
  1065. package/dist/vscode-lean4/vscode-lean4/node_modules/glob/dist/esm/package.json +0 -3
  1066. package/dist/vscode-lean4/vscode-lean4/node_modules/glob/package.json +0 -99
  1067. package/dist/vscode-lean4/vscode-lean4/node_modules/jackspeak/dist/commonjs/package.json +0 -3
  1068. package/dist/vscode-lean4/vscode-lean4/node_modules/jackspeak/dist/esm/package.json +0 -3
  1069. package/dist/vscode-lean4/vscode-lean4/node_modules/jackspeak/package.json +0 -94
  1070. package/dist/vscode-lean4/vscode-lean4/node_modules/lru-cache/dist/commonjs/package.json +0 -3
  1071. package/dist/vscode-lean4/vscode-lean4/node_modules/lru-cache/dist/esm/package.json +0 -3
  1072. package/dist/vscode-lean4/vscode-lean4/node_modules/lru-cache/package.json +0 -115
  1073. package/dist/vscode-lean4/vscode-lean4/node_modules/minimatch/dist/commonjs/package.json +0 -3
  1074. package/dist/vscode-lean4/vscode-lean4/node_modules/minimatch/dist/esm/package.json +0 -3
  1075. package/dist/vscode-lean4/vscode-lean4/node_modules/minimatch/package.json +0 -82
  1076. package/dist/vscode-lean4/vscode-lean4/node_modules/path-scurry/dist/commonjs/package.json +0 -3
  1077. package/dist/vscode-lean4/vscode-lean4/node_modules/path-scurry/dist/esm/package.json +0 -3
  1078. package/dist/vscode-lean4/vscode-lean4/node_modules/path-scurry/package.json +0 -88
  1079. package/dist/vscode-lean4/vscode-lean4/node_modules/undici-types/package.json +0 -55
  1080. package/dist/vscode-lean4/vscode-lean4/node_modules/vscode-jsonrpc/package.json +0 -45
  1081. package/dist/vscode-lean4/vscode-lean4/node_modules/vscode-languageclient/node_modules/minimatch/package.json +0 -35
  1082. package/dist/vscode-lean4/vscode-lean4/node_modules/vscode-languageclient/package.json +0 -50
  1083. package/dist/vscode-lean4/vscode-lean4/node_modules/vscode-languageserver-protocol/metaModel.schema.json +0 -783
  1084. package/dist/vscode-lean4/vscode-lean4/node_modules/vscode-languageserver-protocol/package.json +0 -45
  1085. package/dist/vscode-lean4/vscode-lean4/node_modules/vscode-languageserver-types/package.json +0 -32
  1086. package/dist/vscode-lean4/vscode-lean4/src/leanclientsetup.d.ts +0 -3
  1087. package/dist/vscode-lean4/vscode-lean4/src/leanclientsetup.js +0 -58
  1088. package/dist/vscode-lean4/vscode-lean4/src/utils/batchBasics.js +0 -48
  1089. package/dist/vscode-lean4/vscode-lean4/src/utils/batchTypes.d.ts +0 -14
  1090. package/dist/vscode-lean4/vscode-lean4/src/utils/batchTypes.js +0 -22
  1091. /package/dist/{vscode-lean4/lean4-infoview/dist → lean4-infoview}/codicon.ttf +0 -0
  1092. /package/dist/{vscode-lean4/lean4-infoview/src → lean4-infoview}/infoview/editorConnection.d.ts +0 -0
  1093. /package/dist/{vscode-lean4/lean4-infoview/src → lean4-infoview}/infoview/event.d.ts +0 -0
  1094. /package/dist/{vscode-lean4/lean4-infoview/src → lean4-infoview}/infoview/serverVersion.d.ts +0 -0
@@ -0,0 +1,2823 @@
1
+ function _mergeNamespaces(n, m) {
2
+ m.forEach(function (e) {
3
+ e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
4
+ if (k !== 'default' && !(k in n)) {
5
+ var d = Object.getOwnPropertyDescriptor(e, k);
6
+ Object.defineProperty(n, k, d.get ? d : {
7
+ enumerable: true,
8
+ get: function () { return e[k]; }
9
+ });
10
+ }
11
+ });
12
+ });
13
+ return Object.freeze(n);
14
+ }
15
+
16
+ function getDefaultExportFromCjs (x) {
17
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
18
+ }
19
+
20
+ var reactExports = {};
21
+ var react = {
22
+ get exports(){ return reactExports; },
23
+ set exports(v){ reactExports = v; },
24
+ };
25
+
26
+ var react_developmentExports = {};
27
+ var react_development = {
28
+ get exports(){ return react_developmentExports; },
29
+ set exports(v){ react_developmentExports = v; },
30
+ };
31
+
32
+ /**
33
+ * @license React
34
+ * react.development.js
35
+ *
36
+ * Copyright (c) Facebook, Inc. and its affiliates.
37
+ *
38
+ * This source code is licensed under the MIT license found in the
39
+ * LICENSE file in the root directory of this source tree.
40
+ */
41
+
42
+ (function (module, exports) {
43
+
44
+ {
45
+ (function() {
46
+
47
+ /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
48
+ if (
49
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
50
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===
51
+ 'function'
52
+ ) {
53
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
54
+ }
55
+ var ReactVersion = '18.2.0';
56
+
57
+ // ATTENTION
58
+ // When adding new symbols to this file,
59
+ // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
60
+ // The Symbol used to tag the ReactElement-like types.
61
+ var REACT_ELEMENT_TYPE = Symbol.for('react.element');
62
+ var REACT_PORTAL_TYPE = Symbol.for('react.portal');
63
+ var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
64
+ var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
65
+ var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
66
+ var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
67
+ var REACT_CONTEXT_TYPE = Symbol.for('react.context');
68
+ var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
69
+ var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
70
+ var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
71
+ var REACT_MEMO_TYPE = Symbol.for('react.memo');
72
+ var REACT_LAZY_TYPE = Symbol.for('react.lazy');
73
+ var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
74
+ var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
75
+ var FAUX_ITERATOR_SYMBOL = '@@iterator';
76
+ function getIteratorFn(maybeIterable) {
77
+ if (maybeIterable === null || typeof maybeIterable !== 'object') {
78
+ return null;
79
+ }
80
+
81
+ var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
82
+
83
+ if (typeof maybeIterator === 'function') {
84
+ return maybeIterator;
85
+ }
86
+
87
+ return null;
88
+ }
89
+
90
+ /**
91
+ * Keeps track of the current dispatcher.
92
+ */
93
+ var ReactCurrentDispatcher = {
94
+ /**
95
+ * @internal
96
+ * @type {ReactComponent}
97
+ */
98
+ current: null
99
+ };
100
+
101
+ /**
102
+ * Keeps track of the current batch's configuration such as how long an update
103
+ * should suspend for if it needs to.
104
+ */
105
+ var ReactCurrentBatchConfig = {
106
+ transition: null
107
+ };
108
+
109
+ var ReactCurrentActQueue = {
110
+ current: null,
111
+ // Used to reproduce behavior of `batchedUpdates` in legacy mode.
112
+ isBatchingLegacy: false,
113
+ didScheduleLegacyUpdate: false
114
+ };
115
+
116
+ /**
117
+ * Keeps track of the current owner.
118
+ *
119
+ * The current owner is the component who should own any components that are
120
+ * currently being constructed.
121
+ */
122
+ var ReactCurrentOwner = {
123
+ /**
124
+ * @internal
125
+ * @type {ReactComponent}
126
+ */
127
+ current: null
128
+ };
129
+
130
+ var ReactDebugCurrentFrame = {};
131
+ var currentExtraStackFrame = null;
132
+ function setExtraStackFrame(stack) {
133
+ {
134
+ currentExtraStackFrame = stack;
135
+ }
136
+ }
137
+
138
+ {
139
+ ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {
140
+ {
141
+ currentExtraStackFrame = stack;
142
+ }
143
+ }; // Stack implementation injected by the current renderer.
144
+
145
+
146
+ ReactDebugCurrentFrame.getCurrentStack = null;
147
+
148
+ ReactDebugCurrentFrame.getStackAddendum = function () {
149
+ var stack = ''; // Add an extra top frame while an element is being validated
150
+
151
+ if (currentExtraStackFrame) {
152
+ stack += currentExtraStackFrame;
153
+ } // Delegate to the injected renderer-specific implementation
154
+
155
+
156
+ var impl = ReactDebugCurrentFrame.getCurrentStack;
157
+
158
+ if (impl) {
159
+ stack += impl() || '';
160
+ }
161
+
162
+ return stack;
163
+ };
164
+ }
165
+
166
+ // -----------------------------------------------------------------------------
167
+
168
+ var enableScopeAPI = false; // Experimental Create Event Handle API.
169
+ var enableCacheElement = false;
170
+ var enableTransitionTracing = false; // No known bugs, but needs performance testing
171
+
172
+ var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
173
+ // stuff. Intended to enable React core members to more easily debug scheduling
174
+ // issues in DEV builds.
175
+
176
+ var enableDebugTracing = false; // Track which Fiber(s) schedule render work.
177
+
178
+ var ReactSharedInternals = {
179
+ ReactCurrentDispatcher: ReactCurrentDispatcher,
180
+ ReactCurrentBatchConfig: ReactCurrentBatchConfig,
181
+ ReactCurrentOwner: ReactCurrentOwner
182
+ };
183
+
184
+ {
185
+ ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;
186
+ ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;
187
+ }
188
+
189
+ // by calls to these methods by a Babel plugin.
190
+ //
191
+ // In PROD (or in packages without access to React internals),
192
+ // they are left as they are instead.
193
+
194
+ function warn(format) {
195
+ {
196
+ {
197
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
198
+ args[_key - 1] = arguments[_key];
199
+ }
200
+
201
+ printWarning('warn', format, args);
202
+ }
203
+ }
204
+ }
205
+ function error(format) {
206
+ {
207
+ {
208
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
209
+ args[_key2 - 1] = arguments[_key2];
210
+ }
211
+
212
+ printWarning('error', format, args);
213
+ }
214
+ }
215
+ }
216
+
217
+ function printWarning(level, format, args) {
218
+ // When changing this logic, you might want to also
219
+ // update consoleWithStackDev.www.js as well.
220
+ {
221
+ var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
222
+ var stack = ReactDebugCurrentFrame.getStackAddendum();
223
+
224
+ if (stack !== '') {
225
+ format += '%s';
226
+ args = args.concat([stack]);
227
+ } // eslint-disable-next-line react-internal/safe-string-coercion
228
+
229
+
230
+ var argsWithFormat = args.map(function (item) {
231
+ return String(item);
232
+ }); // Careful: RN currently depends on this prefix
233
+
234
+ argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
235
+ // breaks IE9: https://github.com/facebook/react/issues/13610
236
+ // eslint-disable-next-line react-internal/no-production-logging
237
+
238
+ Function.prototype.apply.call(console[level], console, argsWithFormat);
239
+ }
240
+ }
241
+
242
+ var didWarnStateUpdateForUnmountedComponent = {};
243
+
244
+ function warnNoop(publicInstance, callerName) {
245
+ {
246
+ var _constructor = publicInstance.constructor;
247
+ var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
248
+ var warningKey = componentName + "." + callerName;
249
+
250
+ if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
251
+ return;
252
+ }
253
+
254
+ error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);
255
+
256
+ didWarnStateUpdateForUnmountedComponent[warningKey] = true;
257
+ }
258
+ }
259
+ /**
260
+ * This is the abstract API for an update queue.
261
+ */
262
+
263
+
264
+ var ReactNoopUpdateQueue = {
265
+ /**
266
+ * Checks whether or not this composite component is mounted.
267
+ * @param {ReactClass} publicInstance The instance we want to test.
268
+ * @return {boolean} True if mounted, false otherwise.
269
+ * @protected
270
+ * @final
271
+ */
272
+ isMounted: function (publicInstance) {
273
+ return false;
274
+ },
275
+
276
+ /**
277
+ * Forces an update. This should only be invoked when it is known with
278
+ * certainty that we are **not** in a DOM transaction.
279
+ *
280
+ * You may want to call this when you know that some deeper aspect of the
281
+ * component's state has changed but `setState` was not called.
282
+ *
283
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
284
+ * `componentWillUpdate` and `componentDidUpdate`.
285
+ *
286
+ * @param {ReactClass} publicInstance The instance that should rerender.
287
+ * @param {?function} callback Called after component is updated.
288
+ * @param {?string} callerName name of the calling function in the public API.
289
+ * @internal
290
+ */
291
+ enqueueForceUpdate: function (publicInstance, callback, callerName) {
292
+ warnNoop(publicInstance, 'forceUpdate');
293
+ },
294
+
295
+ /**
296
+ * Replaces all of the state. Always use this or `setState` to mutate state.
297
+ * You should treat `this.state` as immutable.
298
+ *
299
+ * There is no guarantee that `this.state` will be immediately updated, so
300
+ * accessing `this.state` after calling this method may return the old value.
301
+ *
302
+ * @param {ReactClass} publicInstance The instance that should rerender.
303
+ * @param {object} completeState Next state.
304
+ * @param {?function} callback Called after component is updated.
305
+ * @param {?string} callerName name of the calling function in the public API.
306
+ * @internal
307
+ */
308
+ enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
309
+ warnNoop(publicInstance, 'replaceState');
310
+ },
311
+
312
+ /**
313
+ * Sets a subset of the state. This only exists because _pendingState is
314
+ * internal. This provides a merging strategy that is not available to deep
315
+ * properties which is confusing. TODO: Expose pendingState or don't use it
316
+ * during the merge.
317
+ *
318
+ * @param {ReactClass} publicInstance The instance that should rerender.
319
+ * @param {object} partialState Next partial state to be merged with state.
320
+ * @param {?function} callback Called after component is updated.
321
+ * @param {?string} Name of the calling function in the public API.
322
+ * @internal
323
+ */
324
+ enqueueSetState: function (publicInstance, partialState, callback, callerName) {
325
+ warnNoop(publicInstance, 'setState');
326
+ }
327
+ };
328
+
329
+ var assign = Object.assign;
330
+
331
+ var emptyObject = {};
332
+
333
+ {
334
+ Object.freeze(emptyObject);
335
+ }
336
+ /**
337
+ * Base class helpers for the updating state of a component.
338
+ */
339
+
340
+
341
+ function Component(props, context, updater) {
342
+ this.props = props;
343
+ this.context = context; // If a component has string refs, we will assign a different object later.
344
+
345
+ this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
346
+ // renderer.
347
+
348
+ this.updater = updater || ReactNoopUpdateQueue;
349
+ }
350
+
351
+ Component.prototype.isReactComponent = {};
352
+ /**
353
+ * Sets a subset of the state. Always use this to mutate
354
+ * state. You should treat `this.state` as immutable.
355
+ *
356
+ * There is no guarantee that `this.state` will be immediately updated, so
357
+ * accessing `this.state` after calling this method may return the old value.
358
+ *
359
+ * There is no guarantee that calls to `setState` will run synchronously,
360
+ * as they may eventually be batched together. You can provide an optional
361
+ * callback that will be executed when the call to setState is actually
362
+ * completed.
363
+ *
364
+ * When a function is provided to setState, it will be called at some point in
365
+ * the future (not synchronously). It will be called with the up to date
366
+ * component arguments (state, props, context). These values can be different
367
+ * from this.* because your function may be called after receiveProps but before
368
+ * shouldComponentUpdate, and this new state, props, and context will not yet be
369
+ * assigned to this.
370
+ *
371
+ * @param {object|function} partialState Next partial state or function to
372
+ * produce next partial state to be merged with current state.
373
+ * @param {?function} callback Called after state is updated.
374
+ * @final
375
+ * @protected
376
+ */
377
+
378
+ Component.prototype.setState = function (partialState, callback) {
379
+ if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {
380
+ throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');
381
+ }
382
+
383
+ this.updater.enqueueSetState(this, partialState, callback, 'setState');
384
+ };
385
+ /**
386
+ * Forces an update. This should only be invoked when it is known with
387
+ * certainty that we are **not** in a DOM transaction.
388
+ *
389
+ * You may want to call this when you know that some deeper aspect of the
390
+ * component's state has changed but `setState` was not called.
391
+ *
392
+ * This will not invoke `shouldComponentUpdate`, but it will invoke
393
+ * `componentWillUpdate` and `componentDidUpdate`.
394
+ *
395
+ * @param {?function} callback Called after update is complete.
396
+ * @final
397
+ * @protected
398
+ */
399
+
400
+
401
+ Component.prototype.forceUpdate = function (callback) {
402
+ this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
403
+ };
404
+ /**
405
+ * Deprecated APIs. These APIs used to exist on classic React classes but since
406
+ * we would like to deprecate them, we're not going to move them over to this
407
+ * modern base class. Instead, we define a getter that warns if it's accessed.
408
+ */
409
+
410
+
411
+ {
412
+ var deprecatedAPIs = {
413
+ isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
414
+ replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
415
+ };
416
+
417
+ var defineDeprecationWarning = function (methodName, info) {
418
+ Object.defineProperty(Component.prototype, methodName, {
419
+ get: function () {
420
+ warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
421
+
422
+ return undefined;
423
+ }
424
+ });
425
+ };
426
+
427
+ for (var fnName in deprecatedAPIs) {
428
+ if (deprecatedAPIs.hasOwnProperty(fnName)) {
429
+ defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
430
+ }
431
+ }
432
+ }
433
+
434
+ function ComponentDummy() {}
435
+
436
+ ComponentDummy.prototype = Component.prototype;
437
+ /**
438
+ * Convenience component with default shallow equality check for sCU.
439
+ */
440
+
441
+ function PureComponent(props, context, updater) {
442
+ this.props = props;
443
+ this.context = context; // If a component has string refs, we will assign a different object later.
444
+
445
+ this.refs = emptyObject;
446
+ this.updater = updater || ReactNoopUpdateQueue;
447
+ }
448
+
449
+ var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
450
+ pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
451
+
452
+ assign(pureComponentPrototype, Component.prototype);
453
+ pureComponentPrototype.isPureReactComponent = true;
454
+
455
+ // an immutable object with a single mutable value
456
+ function createRef() {
457
+ var refObject = {
458
+ current: null
459
+ };
460
+
461
+ {
462
+ Object.seal(refObject);
463
+ }
464
+
465
+ return refObject;
466
+ }
467
+
468
+ var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare
469
+
470
+ function isArray(a) {
471
+ return isArrayImpl(a);
472
+ }
473
+
474
+ /*
475
+ * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
476
+ * and Temporal.* types. See https://github.com/facebook/react/pull/22064.
477
+ *
478
+ * The functions in this module will throw an easier-to-understand,
479
+ * easier-to-debug exception with a clear errors message message explaining the
480
+ * problem. (Instead of a confusing exception thrown inside the implementation
481
+ * of the `value` object).
482
+ */
483
+ // $FlowFixMe only called in DEV, so void return is not possible.
484
+ function typeName(value) {
485
+ {
486
+ // toStringTag is needed for namespaced types like Temporal.Instant
487
+ var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
488
+ var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
489
+ return type;
490
+ }
491
+ } // $FlowFixMe only called in DEV, so void return is not possible.
492
+
493
+
494
+ function willCoercionThrow(value) {
495
+ {
496
+ try {
497
+ testStringCoercion(value);
498
+ return false;
499
+ } catch (e) {
500
+ return true;
501
+ }
502
+ }
503
+ }
504
+
505
+ function testStringCoercion(value) {
506
+ // If you ended up here by following an exception call stack, here's what's
507
+ // happened: you supplied an object or symbol value to React (as a prop, key,
508
+ // DOM attribute, CSS property, string ref, etc.) and when React tried to
509
+ // coerce it to a string using `'' + value`, an exception was thrown.
510
+ //
511
+ // The most common types that will cause this exception are `Symbol` instances
512
+ // and Temporal objects like `Temporal.Instant`. But any object that has a
513
+ // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
514
+ // exception. (Library authors do this to prevent users from using built-in
515
+ // numeric operators like `+` or comparison operators like `>=` because custom
516
+ // methods are needed to perform accurate arithmetic or comparison.)
517
+ //
518
+ // To fix the problem, coerce this object or symbol value to a string before
519
+ // passing it to React. The most reliable way is usually `String(value)`.
520
+ //
521
+ // To find which value is throwing, check the browser or debugger console.
522
+ // Before this exception was thrown, there should be `console.error` output
523
+ // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
524
+ // problem and how that type was used: key, atrribute, input value prop, etc.
525
+ // In most cases, this console output also shows the component and its
526
+ // ancestor components where the exception happened.
527
+ //
528
+ // eslint-disable-next-line react-internal/safe-string-coercion
529
+ return '' + value;
530
+ }
531
+ function checkKeyStringCoercion(value) {
532
+ {
533
+ if (willCoercionThrow(value)) {
534
+ error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
535
+
536
+ return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
537
+ }
538
+ }
539
+ }
540
+
541
+ function getWrappedName(outerType, innerType, wrapperName) {
542
+ var displayName = outerType.displayName;
543
+
544
+ if (displayName) {
545
+ return displayName;
546
+ }
547
+
548
+ var functionName = innerType.displayName || innerType.name || '';
549
+ return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
550
+ } // Keep in sync with react-reconciler/getComponentNameFromFiber
551
+
552
+
553
+ function getContextName(type) {
554
+ return type.displayName || 'Context';
555
+ } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.
556
+
557
+
558
+ function getComponentNameFromType(type) {
559
+ if (type == null) {
560
+ // Host root, text node or just invalid type.
561
+ return null;
562
+ }
563
+
564
+ {
565
+ if (typeof type.tag === 'number') {
566
+ error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
567
+ }
568
+ }
569
+
570
+ if (typeof type === 'function') {
571
+ return type.displayName || type.name || null;
572
+ }
573
+
574
+ if (typeof type === 'string') {
575
+ return type;
576
+ }
577
+
578
+ switch (type) {
579
+ case REACT_FRAGMENT_TYPE:
580
+ return 'Fragment';
581
+
582
+ case REACT_PORTAL_TYPE:
583
+ return 'Portal';
584
+
585
+ case REACT_PROFILER_TYPE:
586
+ return 'Profiler';
587
+
588
+ case REACT_STRICT_MODE_TYPE:
589
+ return 'StrictMode';
590
+
591
+ case REACT_SUSPENSE_TYPE:
592
+ return 'Suspense';
593
+
594
+ case REACT_SUSPENSE_LIST_TYPE:
595
+ return 'SuspenseList';
596
+
597
+ }
598
+
599
+ if (typeof type === 'object') {
600
+ switch (type.$$typeof) {
601
+ case REACT_CONTEXT_TYPE:
602
+ var context = type;
603
+ return getContextName(context) + '.Consumer';
604
+
605
+ case REACT_PROVIDER_TYPE:
606
+ var provider = type;
607
+ return getContextName(provider._context) + '.Provider';
608
+
609
+ case REACT_FORWARD_REF_TYPE:
610
+ return getWrappedName(type, type.render, 'ForwardRef');
611
+
612
+ case REACT_MEMO_TYPE:
613
+ var outerName = type.displayName || null;
614
+
615
+ if (outerName !== null) {
616
+ return outerName;
617
+ }
618
+
619
+ return getComponentNameFromType(type.type) || 'Memo';
620
+
621
+ case REACT_LAZY_TYPE:
622
+ {
623
+ var lazyComponent = type;
624
+ var payload = lazyComponent._payload;
625
+ var init = lazyComponent._init;
626
+
627
+ try {
628
+ return getComponentNameFromType(init(payload));
629
+ } catch (x) {
630
+ return null;
631
+ }
632
+ }
633
+
634
+ // eslint-disable-next-line no-fallthrough
635
+ }
636
+ }
637
+
638
+ return null;
639
+ }
640
+
641
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
642
+
643
+ var RESERVED_PROPS = {
644
+ key: true,
645
+ ref: true,
646
+ __self: true,
647
+ __source: true
648
+ };
649
+ var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
650
+
651
+ {
652
+ didWarnAboutStringRefs = {};
653
+ }
654
+
655
+ function hasValidRef(config) {
656
+ {
657
+ if (hasOwnProperty.call(config, 'ref')) {
658
+ var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
659
+
660
+ if (getter && getter.isReactWarning) {
661
+ return false;
662
+ }
663
+ }
664
+ }
665
+
666
+ return config.ref !== undefined;
667
+ }
668
+
669
+ function hasValidKey(config) {
670
+ {
671
+ if (hasOwnProperty.call(config, 'key')) {
672
+ var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
673
+
674
+ if (getter && getter.isReactWarning) {
675
+ return false;
676
+ }
677
+ }
678
+ }
679
+
680
+ return config.key !== undefined;
681
+ }
682
+
683
+ function defineKeyPropWarningGetter(props, displayName) {
684
+ var warnAboutAccessingKey = function () {
685
+ {
686
+ if (!specialPropKeyWarningShown) {
687
+ specialPropKeyWarningShown = true;
688
+
689
+ error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
690
+ }
691
+ }
692
+ };
693
+
694
+ warnAboutAccessingKey.isReactWarning = true;
695
+ Object.defineProperty(props, 'key', {
696
+ get: warnAboutAccessingKey,
697
+ configurable: true
698
+ });
699
+ }
700
+
701
+ function defineRefPropWarningGetter(props, displayName) {
702
+ var warnAboutAccessingRef = function () {
703
+ {
704
+ if (!specialPropRefWarningShown) {
705
+ specialPropRefWarningShown = true;
706
+
707
+ error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
708
+ }
709
+ }
710
+ };
711
+
712
+ warnAboutAccessingRef.isReactWarning = true;
713
+ Object.defineProperty(props, 'ref', {
714
+ get: warnAboutAccessingRef,
715
+ configurable: true
716
+ });
717
+ }
718
+
719
+ function warnIfStringRefCannotBeAutoConverted(config) {
720
+ {
721
+ if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
722
+ var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);
723
+
724
+ if (!didWarnAboutStringRefs[componentName]) {
725
+ error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);
726
+
727
+ didWarnAboutStringRefs[componentName] = true;
728
+ }
729
+ }
730
+ }
731
+ }
732
+ /**
733
+ * Factory method to create a new React element. This no longer adheres to
734
+ * the class pattern, so do not use new to call it. Also, instanceof check
735
+ * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
736
+ * if something is a React Element.
737
+ *
738
+ * @param {*} type
739
+ * @param {*} props
740
+ * @param {*} key
741
+ * @param {string|object} ref
742
+ * @param {*} owner
743
+ * @param {*} self A *temporary* helper to detect places where `this` is
744
+ * different from the `owner` when React.createElement is called, so that we
745
+ * can warn. We want to get rid of owner and replace string `ref`s with arrow
746
+ * functions, and as long as `this` and owner are the same, there will be no
747
+ * change in behavior.
748
+ * @param {*} source An annotation object (added by a transpiler or otherwise)
749
+ * indicating filename, line number, and/or other information.
750
+ * @internal
751
+ */
752
+
753
+
754
+ var ReactElement = function (type, key, ref, self, source, owner, props) {
755
+ var element = {
756
+ // This tag allows us to uniquely identify this as a React Element
757
+ $$typeof: REACT_ELEMENT_TYPE,
758
+ // Built-in properties that belong on the element
759
+ type: type,
760
+ key: key,
761
+ ref: ref,
762
+ props: props,
763
+ // Record the component responsible for creating this element.
764
+ _owner: owner
765
+ };
766
+
767
+ {
768
+ // The validation flag is currently mutative. We put it on
769
+ // an external backing store so that we can freeze the whole object.
770
+ // This can be replaced with a WeakMap once they are implemented in
771
+ // commonly used development environments.
772
+ element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
773
+ // the validation flag non-enumerable (where possible, which should
774
+ // include every environment we run tests in), so the test framework
775
+ // ignores it.
776
+
777
+ Object.defineProperty(element._store, 'validated', {
778
+ configurable: false,
779
+ enumerable: false,
780
+ writable: true,
781
+ value: false
782
+ }); // self and source are DEV only properties.
783
+
784
+ Object.defineProperty(element, '_self', {
785
+ configurable: false,
786
+ enumerable: false,
787
+ writable: false,
788
+ value: self
789
+ }); // Two elements created in two different places should be considered
790
+ // equal for testing purposes and therefore we hide it from enumeration.
791
+
792
+ Object.defineProperty(element, '_source', {
793
+ configurable: false,
794
+ enumerable: false,
795
+ writable: false,
796
+ value: source
797
+ });
798
+
799
+ if (Object.freeze) {
800
+ Object.freeze(element.props);
801
+ Object.freeze(element);
802
+ }
803
+ }
804
+
805
+ return element;
806
+ };
807
+ /**
808
+ * Create and return a new ReactElement of the given type.
809
+ * See https://reactjs.org/docs/react-api.html#createelement
810
+ */
811
+
812
+ function createElement(type, config, children) {
813
+ var propName; // Reserved names are extracted
814
+
815
+ var props = {};
816
+ var key = null;
817
+ var ref = null;
818
+ var self = null;
819
+ var source = null;
820
+
821
+ if (config != null) {
822
+ if (hasValidRef(config)) {
823
+ ref = config.ref;
824
+
825
+ {
826
+ warnIfStringRefCannotBeAutoConverted(config);
827
+ }
828
+ }
829
+
830
+ if (hasValidKey(config)) {
831
+ {
832
+ checkKeyStringCoercion(config.key);
833
+ }
834
+
835
+ key = '' + config.key;
836
+ }
837
+
838
+ self = config.__self === undefined ? null : config.__self;
839
+ source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
840
+
841
+ for (propName in config) {
842
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
843
+ props[propName] = config[propName];
844
+ }
845
+ }
846
+ } // Children can be more than one argument, and those are transferred onto
847
+ // the newly allocated props object.
848
+
849
+
850
+ var childrenLength = arguments.length - 2;
851
+
852
+ if (childrenLength === 1) {
853
+ props.children = children;
854
+ } else if (childrenLength > 1) {
855
+ var childArray = Array(childrenLength);
856
+
857
+ for (var i = 0; i < childrenLength; i++) {
858
+ childArray[i] = arguments[i + 2];
859
+ }
860
+
861
+ {
862
+ if (Object.freeze) {
863
+ Object.freeze(childArray);
864
+ }
865
+ }
866
+
867
+ props.children = childArray;
868
+ } // Resolve default props
869
+
870
+
871
+ if (type && type.defaultProps) {
872
+ var defaultProps = type.defaultProps;
873
+
874
+ for (propName in defaultProps) {
875
+ if (props[propName] === undefined) {
876
+ props[propName] = defaultProps[propName];
877
+ }
878
+ }
879
+ }
880
+
881
+ {
882
+ if (key || ref) {
883
+ var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
884
+
885
+ if (key) {
886
+ defineKeyPropWarningGetter(props, displayName);
887
+ }
888
+
889
+ if (ref) {
890
+ defineRefPropWarningGetter(props, displayName);
891
+ }
892
+ }
893
+ }
894
+
895
+ return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
896
+ }
897
+ function cloneAndReplaceKey(oldElement, newKey) {
898
+ var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
899
+ return newElement;
900
+ }
901
+ /**
902
+ * Clone and return a new ReactElement using element as the starting point.
903
+ * See https://reactjs.org/docs/react-api.html#cloneelement
904
+ */
905
+
906
+ function cloneElement(element, config, children) {
907
+ if (element === null || element === undefined) {
908
+ throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + ".");
909
+ }
910
+
911
+ var propName; // Original props are copied
912
+
913
+ var props = assign({}, element.props); // Reserved names are extracted
914
+
915
+ var key = element.key;
916
+ var ref = element.ref; // Self is preserved since the owner is preserved.
917
+
918
+ var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
919
+ // transpiler, and the original source is probably a better indicator of the
920
+ // true owner.
921
+
922
+ var source = element._source; // Owner will be preserved, unless ref is overridden
923
+
924
+ var owner = element._owner;
925
+
926
+ if (config != null) {
927
+ if (hasValidRef(config)) {
928
+ // Silently steal the ref from the parent.
929
+ ref = config.ref;
930
+ owner = ReactCurrentOwner.current;
931
+ }
932
+
933
+ if (hasValidKey(config)) {
934
+ {
935
+ checkKeyStringCoercion(config.key);
936
+ }
937
+
938
+ key = '' + config.key;
939
+ } // Remaining properties override existing props
940
+
941
+
942
+ var defaultProps;
943
+
944
+ if (element.type && element.type.defaultProps) {
945
+ defaultProps = element.type.defaultProps;
946
+ }
947
+
948
+ for (propName in config) {
949
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
950
+ if (config[propName] === undefined && defaultProps !== undefined) {
951
+ // Resolve default props
952
+ props[propName] = defaultProps[propName];
953
+ } else {
954
+ props[propName] = config[propName];
955
+ }
956
+ }
957
+ }
958
+ } // Children can be more than one argument, and those are transferred onto
959
+ // the newly allocated props object.
960
+
961
+
962
+ var childrenLength = arguments.length - 2;
963
+
964
+ if (childrenLength === 1) {
965
+ props.children = children;
966
+ } else if (childrenLength > 1) {
967
+ var childArray = Array(childrenLength);
968
+
969
+ for (var i = 0; i < childrenLength; i++) {
970
+ childArray[i] = arguments[i + 2];
971
+ }
972
+
973
+ props.children = childArray;
974
+ }
975
+
976
+ return ReactElement(element.type, key, ref, self, source, owner, props);
977
+ }
978
+ /**
979
+ * Verifies the object is a ReactElement.
980
+ * See https://reactjs.org/docs/react-api.html#isvalidelement
981
+ * @param {?object} object
982
+ * @return {boolean} True if `object` is a ReactElement.
983
+ * @final
984
+ */
985
+
986
+ function isValidElement(object) {
987
+ return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
988
+ }
989
+
990
+ var SEPARATOR = '.';
991
+ var SUBSEPARATOR = ':';
992
+ /**
993
+ * Escape and wrap key so it is safe to use as a reactid
994
+ *
995
+ * @param {string} key to be escaped.
996
+ * @return {string} the escaped key.
997
+ */
998
+
999
+ function escape(key) {
1000
+ var escapeRegex = /[=:]/g;
1001
+ var escaperLookup = {
1002
+ '=': '=0',
1003
+ ':': '=2'
1004
+ };
1005
+ var escapedString = key.replace(escapeRegex, function (match) {
1006
+ return escaperLookup[match];
1007
+ });
1008
+ return '$' + escapedString;
1009
+ }
1010
+ /**
1011
+ * TODO: Test that a single child and an array with one item have the same key
1012
+ * pattern.
1013
+ */
1014
+
1015
+
1016
+ var didWarnAboutMaps = false;
1017
+ var userProvidedKeyEscapeRegex = /\/+/g;
1018
+
1019
+ function escapeUserProvidedKey(text) {
1020
+ return text.replace(userProvidedKeyEscapeRegex, '$&/');
1021
+ }
1022
+ /**
1023
+ * Generate a key string that identifies a element within a set.
1024
+ *
1025
+ * @param {*} element A element that could contain a manual key.
1026
+ * @param {number} index Index that is used if a manual key is not provided.
1027
+ * @return {string}
1028
+ */
1029
+
1030
+
1031
+ function getElementKey(element, index) {
1032
+ // Do some typechecking here since we call this blindly. We want to ensure
1033
+ // that we don't block potential future ES APIs.
1034
+ if (typeof element === 'object' && element !== null && element.key != null) {
1035
+ // Explicit key
1036
+ {
1037
+ checkKeyStringCoercion(element.key);
1038
+ }
1039
+
1040
+ return escape('' + element.key);
1041
+ } // Implicit key determined by the index in the set
1042
+
1043
+
1044
+ return index.toString(36);
1045
+ }
1046
+
1047
+ function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
1048
+ var type = typeof children;
1049
+
1050
+ if (type === 'undefined' || type === 'boolean') {
1051
+ // All of the above are perceived as null.
1052
+ children = null;
1053
+ }
1054
+
1055
+ var invokeCallback = false;
1056
+
1057
+ if (children === null) {
1058
+ invokeCallback = true;
1059
+ } else {
1060
+ switch (type) {
1061
+ case 'string':
1062
+ case 'number':
1063
+ invokeCallback = true;
1064
+ break;
1065
+
1066
+ case 'object':
1067
+ switch (children.$$typeof) {
1068
+ case REACT_ELEMENT_TYPE:
1069
+ case REACT_PORTAL_TYPE:
1070
+ invokeCallback = true;
1071
+ }
1072
+
1073
+ }
1074
+ }
1075
+
1076
+ if (invokeCallback) {
1077
+ var _child = children;
1078
+ var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array
1079
+ // so that it's consistent if the number of children grows:
1080
+
1081
+ var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;
1082
+
1083
+ if (isArray(mappedChild)) {
1084
+ var escapedChildKey = '';
1085
+
1086
+ if (childKey != null) {
1087
+ escapedChildKey = escapeUserProvidedKey(childKey) + '/';
1088
+ }
1089
+
1090
+ mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {
1091
+ return c;
1092
+ });
1093
+ } else if (mappedChild != null) {
1094
+ if (isValidElement(mappedChild)) {
1095
+ {
1096
+ // The `if` statement here prevents auto-disabling of the safe
1097
+ // coercion ESLint rule, so we must manually disable it below.
1098
+ // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
1099
+ if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {
1100
+ checkKeyStringCoercion(mappedChild.key);
1101
+ }
1102
+ }
1103
+
1104
+ mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
1105
+ // traverseAllChildren used to do for objects as children
1106
+ escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
1107
+ mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number
1108
+ // eslint-disable-next-line react-internal/safe-string-coercion
1109
+ escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);
1110
+ }
1111
+
1112
+ array.push(mappedChild);
1113
+ }
1114
+
1115
+ return 1;
1116
+ }
1117
+
1118
+ var child;
1119
+ var nextName;
1120
+ var subtreeCount = 0; // Count of children found in the current subtree.
1121
+
1122
+ var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
1123
+
1124
+ if (isArray(children)) {
1125
+ for (var i = 0; i < children.length; i++) {
1126
+ child = children[i];
1127
+ nextName = nextNamePrefix + getElementKey(child, i);
1128
+ subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
1129
+ }
1130
+ } else {
1131
+ var iteratorFn = getIteratorFn(children);
1132
+
1133
+ if (typeof iteratorFn === 'function') {
1134
+ var iterableChildren = children;
1135
+
1136
+ {
1137
+ // Warn about using Maps as children
1138
+ if (iteratorFn === iterableChildren.entries) {
1139
+ if (!didWarnAboutMaps) {
1140
+ warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
1141
+ }
1142
+
1143
+ didWarnAboutMaps = true;
1144
+ }
1145
+ }
1146
+
1147
+ var iterator = iteratorFn.call(iterableChildren);
1148
+ var step;
1149
+ var ii = 0;
1150
+
1151
+ while (!(step = iterator.next()).done) {
1152
+ child = step.value;
1153
+ nextName = nextNamePrefix + getElementKey(child, ii++);
1154
+ subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
1155
+ }
1156
+ } else if (type === 'object') {
1157
+ // eslint-disable-next-line react-internal/safe-string-coercion
1158
+ var childrenString = String(children);
1159
+ throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.');
1160
+ }
1161
+ }
1162
+
1163
+ return subtreeCount;
1164
+ }
1165
+
1166
+ /**
1167
+ * Maps children that are typically specified as `props.children`.
1168
+ *
1169
+ * See https://reactjs.org/docs/react-api.html#reactchildrenmap
1170
+ *
1171
+ * The provided mapFunction(child, index) will be called for each
1172
+ * leaf child.
1173
+ *
1174
+ * @param {?*} children Children tree container.
1175
+ * @param {function(*, int)} func The map function.
1176
+ * @param {*} context Context for mapFunction.
1177
+ * @return {object} Object containing the ordered map of results.
1178
+ */
1179
+ function mapChildren(children, func, context) {
1180
+ if (children == null) {
1181
+ return children;
1182
+ }
1183
+
1184
+ var result = [];
1185
+ var count = 0;
1186
+ mapIntoArray(children, result, '', '', function (child) {
1187
+ return func.call(context, child, count++);
1188
+ });
1189
+ return result;
1190
+ }
1191
+ /**
1192
+ * Count the number of children that are typically specified as
1193
+ * `props.children`.
1194
+ *
1195
+ * See https://reactjs.org/docs/react-api.html#reactchildrencount
1196
+ *
1197
+ * @param {?*} children Children tree container.
1198
+ * @return {number} The number of children.
1199
+ */
1200
+
1201
+
1202
+ function countChildren(children) {
1203
+ var n = 0;
1204
+ mapChildren(children, function () {
1205
+ n++; // Don't return anything
1206
+ });
1207
+ return n;
1208
+ }
1209
+
1210
+ /**
1211
+ * Iterates through children that are typically specified as `props.children`.
1212
+ *
1213
+ * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
1214
+ *
1215
+ * The provided forEachFunc(child, index) will be called for each
1216
+ * leaf child.
1217
+ *
1218
+ * @param {?*} children Children tree container.
1219
+ * @param {function(*, int)} forEachFunc
1220
+ * @param {*} forEachContext Context for forEachContext.
1221
+ */
1222
+ function forEachChildren(children, forEachFunc, forEachContext) {
1223
+ mapChildren(children, function () {
1224
+ forEachFunc.apply(this, arguments); // Don't return anything.
1225
+ }, forEachContext);
1226
+ }
1227
+ /**
1228
+ * Flatten a children object (typically specified as `props.children`) and
1229
+ * return an array with appropriately re-keyed children.
1230
+ *
1231
+ * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
1232
+ */
1233
+
1234
+
1235
+ function toArray(children) {
1236
+ return mapChildren(children, function (child) {
1237
+ return child;
1238
+ }) || [];
1239
+ }
1240
+ /**
1241
+ * Returns the first child in a collection of children and verifies that there
1242
+ * is only one child in the collection.
1243
+ *
1244
+ * See https://reactjs.org/docs/react-api.html#reactchildrenonly
1245
+ *
1246
+ * The current implementation of this function assumes that a single child gets
1247
+ * passed without a wrapper, but the purpose of this helper function is to
1248
+ * abstract away the particular structure of children.
1249
+ *
1250
+ * @param {?object} children Child collection structure.
1251
+ * @return {ReactElement} The first and only `ReactElement` contained in the
1252
+ * structure.
1253
+ */
1254
+
1255
+
1256
+ function onlyChild(children) {
1257
+ if (!isValidElement(children)) {
1258
+ throw new Error('React.Children.only expected to receive a single React element child.');
1259
+ }
1260
+
1261
+ return children;
1262
+ }
1263
+
1264
+ function createContext(defaultValue) {
1265
+ // TODO: Second argument used to be an optional `calculateChangedBits`
1266
+ // function. Warn to reserve for future use?
1267
+ var context = {
1268
+ $$typeof: REACT_CONTEXT_TYPE,
1269
+ // As a workaround to support multiple concurrent renderers, we categorize
1270
+ // some renderers as primary and others as secondary. We only expect
1271
+ // there to be two concurrent renderers at most: React Native (primary) and
1272
+ // Fabric (secondary); React DOM (primary) and React ART (secondary).
1273
+ // Secondary renderers store their context values on separate fields.
1274
+ _currentValue: defaultValue,
1275
+ _currentValue2: defaultValue,
1276
+ // Used to track how many concurrent renderers this context currently
1277
+ // supports within in a single renderer. Such as parallel server rendering.
1278
+ _threadCount: 0,
1279
+ // These are circular
1280
+ Provider: null,
1281
+ Consumer: null,
1282
+ // Add these to use same hidden class in VM as ServerContext
1283
+ _defaultValue: null,
1284
+ _globalName: null
1285
+ };
1286
+ context.Provider = {
1287
+ $$typeof: REACT_PROVIDER_TYPE,
1288
+ _context: context
1289
+ };
1290
+ var hasWarnedAboutUsingNestedContextConsumers = false;
1291
+ var hasWarnedAboutUsingConsumerProvider = false;
1292
+ var hasWarnedAboutDisplayNameOnConsumer = false;
1293
+
1294
+ {
1295
+ // A separate object, but proxies back to the original context object for
1296
+ // backwards compatibility. It has a different $$typeof, so we can properly
1297
+ // warn for the incorrect usage of Context as a Consumer.
1298
+ var Consumer = {
1299
+ $$typeof: REACT_CONTEXT_TYPE,
1300
+ _context: context
1301
+ }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
1302
+
1303
+ Object.defineProperties(Consumer, {
1304
+ Provider: {
1305
+ get: function () {
1306
+ if (!hasWarnedAboutUsingConsumerProvider) {
1307
+ hasWarnedAboutUsingConsumerProvider = true;
1308
+
1309
+ error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
1310
+ }
1311
+
1312
+ return context.Provider;
1313
+ },
1314
+ set: function (_Provider) {
1315
+ context.Provider = _Provider;
1316
+ }
1317
+ },
1318
+ _currentValue: {
1319
+ get: function () {
1320
+ return context._currentValue;
1321
+ },
1322
+ set: function (_currentValue) {
1323
+ context._currentValue = _currentValue;
1324
+ }
1325
+ },
1326
+ _currentValue2: {
1327
+ get: function () {
1328
+ return context._currentValue2;
1329
+ },
1330
+ set: function (_currentValue2) {
1331
+ context._currentValue2 = _currentValue2;
1332
+ }
1333
+ },
1334
+ _threadCount: {
1335
+ get: function () {
1336
+ return context._threadCount;
1337
+ },
1338
+ set: function (_threadCount) {
1339
+ context._threadCount = _threadCount;
1340
+ }
1341
+ },
1342
+ Consumer: {
1343
+ get: function () {
1344
+ if (!hasWarnedAboutUsingNestedContextConsumers) {
1345
+ hasWarnedAboutUsingNestedContextConsumers = true;
1346
+
1347
+ error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
1348
+ }
1349
+
1350
+ return context.Consumer;
1351
+ }
1352
+ },
1353
+ displayName: {
1354
+ get: function () {
1355
+ return context.displayName;
1356
+ },
1357
+ set: function (displayName) {
1358
+ if (!hasWarnedAboutDisplayNameOnConsumer) {
1359
+ warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName);
1360
+
1361
+ hasWarnedAboutDisplayNameOnConsumer = true;
1362
+ }
1363
+ }
1364
+ }
1365
+ }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
1366
+
1367
+ context.Consumer = Consumer;
1368
+ }
1369
+
1370
+ {
1371
+ context._currentRenderer = null;
1372
+ context._currentRenderer2 = null;
1373
+ }
1374
+
1375
+ return context;
1376
+ }
1377
+
1378
+ var Uninitialized = -1;
1379
+ var Pending = 0;
1380
+ var Resolved = 1;
1381
+ var Rejected = 2;
1382
+
1383
+ function lazyInitializer(payload) {
1384
+ if (payload._status === Uninitialized) {
1385
+ var ctor = payload._result;
1386
+ var thenable = ctor(); // Transition to the next state.
1387
+ // This might throw either because it's missing or throws. If so, we treat it
1388
+ // as still uninitialized and try again next time. Which is the same as what
1389
+ // happens if the ctor or any wrappers processing the ctor throws. This might
1390
+ // end up fixing it if the resolution was a concurrency bug.
1391
+
1392
+ thenable.then(function (moduleObject) {
1393
+ if (payload._status === Pending || payload._status === Uninitialized) {
1394
+ // Transition to the next state.
1395
+ var resolved = payload;
1396
+ resolved._status = Resolved;
1397
+ resolved._result = moduleObject;
1398
+ }
1399
+ }, function (error) {
1400
+ if (payload._status === Pending || payload._status === Uninitialized) {
1401
+ // Transition to the next state.
1402
+ var rejected = payload;
1403
+ rejected._status = Rejected;
1404
+ rejected._result = error;
1405
+ }
1406
+ });
1407
+
1408
+ if (payload._status === Uninitialized) {
1409
+ // In case, we're still uninitialized, then we're waiting for the thenable
1410
+ // to resolve. Set it as pending in the meantime.
1411
+ var pending = payload;
1412
+ pending._status = Pending;
1413
+ pending._result = thenable;
1414
+ }
1415
+ }
1416
+
1417
+ if (payload._status === Resolved) {
1418
+ var moduleObject = payload._result;
1419
+
1420
+ {
1421
+ if (moduleObject === undefined) {
1422
+ error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
1423
+ 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject);
1424
+ }
1425
+ }
1426
+
1427
+ {
1428
+ if (!('default' in moduleObject)) {
1429
+ error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
1430
+ 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject);
1431
+ }
1432
+ }
1433
+
1434
+ return moduleObject.default;
1435
+ } else {
1436
+ throw payload._result;
1437
+ }
1438
+ }
1439
+
1440
+ function lazy(ctor) {
1441
+ var payload = {
1442
+ // We use these fields to store the result.
1443
+ _status: Uninitialized,
1444
+ _result: ctor
1445
+ };
1446
+ var lazyType = {
1447
+ $$typeof: REACT_LAZY_TYPE,
1448
+ _payload: payload,
1449
+ _init: lazyInitializer
1450
+ };
1451
+
1452
+ {
1453
+ // In production, this would just set it on the object.
1454
+ var defaultProps;
1455
+ var propTypes; // $FlowFixMe
1456
+
1457
+ Object.defineProperties(lazyType, {
1458
+ defaultProps: {
1459
+ configurable: true,
1460
+ get: function () {
1461
+ return defaultProps;
1462
+ },
1463
+ set: function (newDefaultProps) {
1464
+ error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
1465
+
1466
+ defaultProps = newDefaultProps; // Match production behavior more closely:
1467
+ // $FlowFixMe
1468
+
1469
+ Object.defineProperty(lazyType, 'defaultProps', {
1470
+ enumerable: true
1471
+ });
1472
+ }
1473
+ },
1474
+ propTypes: {
1475
+ configurable: true,
1476
+ get: function () {
1477
+ return propTypes;
1478
+ },
1479
+ set: function (newPropTypes) {
1480
+ error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
1481
+
1482
+ propTypes = newPropTypes; // Match production behavior more closely:
1483
+ // $FlowFixMe
1484
+
1485
+ Object.defineProperty(lazyType, 'propTypes', {
1486
+ enumerable: true
1487
+ });
1488
+ }
1489
+ }
1490
+ });
1491
+ }
1492
+
1493
+ return lazyType;
1494
+ }
1495
+
1496
+ function forwardRef(render) {
1497
+ {
1498
+ if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
1499
+ error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
1500
+ } else if (typeof render !== 'function') {
1501
+ error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
1502
+ } else {
1503
+ if (render.length !== 0 && render.length !== 2) {
1504
+ error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
1505
+ }
1506
+ }
1507
+
1508
+ if (render != null) {
1509
+ if (render.defaultProps != null || render.propTypes != null) {
1510
+ error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
1511
+ }
1512
+ }
1513
+ }
1514
+
1515
+ var elementType = {
1516
+ $$typeof: REACT_FORWARD_REF_TYPE,
1517
+ render: render
1518
+ };
1519
+
1520
+ {
1521
+ var ownName;
1522
+ Object.defineProperty(elementType, 'displayName', {
1523
+ enumerable: false,
1524
+ configurable: true,
1525
+ get: function () {
1526
+ return ownName;
1527
+ },
1528
+ set: function (name) {
1529
+ ownName = name; // The inner component shouldn't inherit this display name in most cases,
1530
+ // because the component may be used elsewhere.
1531
+ // But it's nice for anonymous functions to inherit the name,
1532
+ // so that our component-stack generation logic will display their frames.
1533
+ // An anonymous function generally suggests a pattern like:
1534
+ // React.forwardRef((props, ref) => {...});
1535
+ // This kind of inner function is not used elsewhere so the side effect is okay.
1536
+
1537
+ if (!render.name && !render.displayName) {
1538
+ render.displayName = name;
1539
+ }
1540
+ }
1541
+ });
1542
+ }
1543
+
1544
+ return elementType;
1545
+ }
1546
+
1547
+ var REACT_MODULE_REFERENCE;
1548
+
1549
+ {
1550
+ REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
1551
+ }
1552
+
1553
+ function isValidElementType(type) {
1554
+ if (typeof type === 'string' || typeof type === 'function') {
1555
+ return true;
1556
+ } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
1557
+
1558
+
1559
+ if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {
1560
+ return true;
1561
+ }
1562
+
1563
+ if (typeof type === 'object' && type !== null) {
1564
+ if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
1565
+ // types supported by any Flight configuration anywhere since
1566
+ // we don't know which Flight build this will end up being used
1567
+ // with.
1568
+ type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
1569
+ return true;
1570
+ }
1571
+ }
1572
+
1573
+ return false;
1574
+ }
1575
+
1576
+ function memo(type, compare) {
1577
+ {
1578
+ if (!isValidElementType(type)) {
1579
+ error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
1580
+ }
1581
+ }
1582
+
1583
+ var elementType = {
1584
+ $$typeof: REACT_MEMO_TYPE,
1585
+ type: type,
1586
+ compare: compare === undefined ? null : compare
1587
+ };
1588
+
1589
+ {
1590
+ var ownName;
1591
+ Object.defineProperty(elementType, 'displayName', {
1592
+ enumerable: false,
1593
+ configurable: true,
1594
+ get: function () {
1595
+ return ownName;
1596
+ },
1597
+ set: function (name) {
1598
+ ownName = name; // The inner component shouldn't inherit this display name in most cases,
1599
+ // because the component may be used elsewhere.
1600
+ // But it's nice for anonymous functions to inherit the name,
1601
+ // so that our component-stack generation logic will display their frames.
1602
+ // An anonymous function generally suggests a pattern like:
1603
+ // React.memo((props) => {...});
1604
+ // This kind of inner function is not used elsewhere so the side effect is okay.
1605
+
1606
+ if (!type.name && !type.displayName) {
1607
+ type.displayName = name;
1608
+ }
1609
+ }
1610
+ });
1611
+ }
1612
+
1613
+ return elementType;
1614
+ }
1615
+
1616
+ function resolveDispatcher() {
1617
+ var dispatcher = ReactCurrentDispatcher.current;
1618
+
1619
+ {
1620
+ if (dispatcher === null) {
1621
+ error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');
1622
+ }
1623
+ } // Will result in a null access error if accessed outside render phase. We
1624
+ // intentionally don't throw our own error because this is in a hot path.
1625
+ // Also helps ensure this is inlined.
1626
+
1627
+
1628
+ return dispatcher;
1629
+ }
1630
+ function useContext(Context) {
1631
+ var dispatcher = resolveDispatcher();
1632
+
1633
+ {
1634
+ // TODO: add a more generic warning for invalid values.
1635
+ if (Context._context !== undefined) {
1636
+ var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
1637
+ // and nobody should be using this in existing code.
1638
+
1639
+ if (realContext.Consumer === Context) {
1640
+ error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
1641
+ } else if (realContext.Provider === Context) {
1642
+ error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
1643
+ }
1644
+ }
1645
+ }
1646
+
1647
+ return dispatcher.useContext(Context);
1648
+ }
1649
+ function useState(initialState) {
1650
+ var dispatcher = resolveDispatcher();
1651
+ return dispatcher.useState(initialState);
1652
+ }
1653
+ function useReducer(reducer, initialArg, init) {
1654
+ var dispatcher = resolveDispatcher();
1655
+ return dispatcher.useReducer(reducer, initialArg, init);
1656
+ }
1657
+ function useRef(initialValue) {
1658
+ var dispatcher = resolveDispatcher();
1659
+ return dispatcher.useRef(initialValue);
1660
+ }
1661
+ function useEffect(create, deps) {
1662
+ var dispatcher = resolveDispatcher();
1663
+ return dispatcher.useEffect(create, deps);
1664
+ }
1665
+ function useInsertionEffect(create, deps) {
1666
+ var dispatcher = resolveDispatcher();
1667
+ return dispatcher.useInsertionEffect(create, deps);
1668
+ }
1669
+ function useLayoutEffect(create, deps) {
1670
+ var dispatcher = resolveDispatcher();
1671
+ return dispatcher.useLayoutEffect(create, deps);
1672
+ }
1673
+ function useCallback(callback, deps) {
1674
+ var dispatcher = resolveDispatcher();
1675
+ return dispatcher.useCallback(callback, deps);
1676
+ }
1677
+ function useMemo(create, deps) {
1678
+ var dispatcher = resolveDispatcher();
1679
+ return dispatcher.useMemo(create, deps);
1680
+ }
1681
+ function useImperativeHandle(ref, create, deps) {
1682
+ var dispatcher = resolveDispatcher();
1683
+ return dispatcher.useImperativeHandle(ref, create, deps);
1684
+ }
1685
+ function useDebugValue(value, formatterFn) {
1686
+ {
1687
+ var dispatcher = resolveDispatcher();
1688
+ return dispatcher.useDebugValue(value, formatterFn);
1689
+ }
1690
+ }
1691
+ function useTransition() {
1692
+ var dispatcher = resolveDispatcher();
1693
+ return dispatcher.useTransition();
1694
+ }
1695
+ function useDeferredValue(value) {
1696
+ var dispatcher = resolveDispatcher();
1697
+ return dispatcher.useDeferredValue(value);
1698
+ }
1699
+ function useId() {
1700
+ var dispatcher = resolveDispatcher();
1701
+ return dispatcher.useId();
1702
+ }
1703
+ function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
1704
+ var dispatcher = resolveDispatcher();
1705
+ return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
1706
+ }
1707
+
1708
+ // Helpers to patch console.logs to avoid logging during side-effect free
1709
+ // replaying on render function. This currently only patches the object
1710
+ // lazily which won't cover if the log function was extracted eagerly.
1711
+ // We could also eagerly patch the method.
1712
+ var disabledDepth = 0;
1713
+ var prevLog;
1714
+ var prevInfo;
1715
+ var prevWarn;
1716
+ var prevError;
1717
+ var prevGroup;
1718
+ var prevGroupCollapsed;
1719
+ var prevGroupEnd;
1720
+
1721
+ function disabledLog() {}
1722
+
1723
+ disabledLog.__reactDisabledLog = true;
1724
+ function disableLogs() {
1725
+ {
1726
+ if (disabledDepth === 0) {
1727
+ /* eslint-disable react-internal/no-production-logging */
1728
+ prevLog = console.log;
1729
+ prevInfo = console.info;
1730
+ prevWarn = console.warn;
1731
+ prevError = console.error;
1732
+ prevGroup = console.group;
1733
+ prevGroupCollapsed = console.groupCollapsed;
1734
+ prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
1735
+
1736
+ var props = {
1737
+ configurable: true,
1738
+ enumerable: true,
1739
+ value: disabledLog,
1740
+ writable: true
1741
+ }; // $FlowFixMe Flow thinks console is immutable.
1742
+
1743
+ Object.defineProperties(console, {
1744
+ info: props,
1745
+ log: props,
1746
+ warn: props,
1747
+ error: props,
1748
+ group: props,
1749
+ groupCollapsed: props,
1750
+ groupEnd: props
1751
+ });
1752
+ /* eslint-enable react-internal/no-production-logging */
1753
+ }
1754
+
1755
+ disabledDepth++;
1756
+ }
1757
+ }
1758
+ function reenableLogs() {
1759
+ {
1760
+ disabledDepth--;
1761
+
1762
+ if (disabledDepth === 0) {
1763
+ /* eslint-disable react-internal/no-production-logging */
1764
+ var props = {
1765
+ configurable: true,
1766
+ enumerable: true,
1767
+ writable: true
1768
+ }; // $FlowFixMe Flow thinks console is immutable.
1769
+
1770
+ Object.defineProperties(console, {
1771
+ log: assign({}, props, {
1772
+ value: prevLog
1773
+ }),
1774
+ info: assign({}, props, {
1775
+ value: prevInfo
1776
+ }),
1777
+ warn: assign({}, props, {
1778
+ value: prevWarn
1779
+ }),
1780
+ error: assign({}, props, {
1781
+ value: prevError
1782
+ }),
1783
+ group: assign({}, props, {
1784
+ value: prevGroup
1785
+ }),
1786
+ groupCollapsed: assign({}, props, {
1787
+ value: prevGroupCollapsed
1788
+ }),
1789
+ groupEnd: assign({}, props, {
1790
+ value: prevGroupEnd
1791
+ })
1792
+ });
1793
+ /* eslint-enable react-internal/no-production-logging */
1794
+ }
1795
+
1796
+ if (disabledDepth < 0) {
1797
+ error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
1798
+ }
1799
+ }
1800
+ }
1801
+
1802
+ var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;
1803
+ var prefix;
1804
+ function describeBuiltInComponentFrame(name, source, ownerFn) {
1805
+ {
1806
+ if (prefix === undefined) {
1807
+ // Extract the VM specific prefix used by each line.
1808
+ try {
1809
+ throw Error();
1810
+ } catch (x) {
1811
+ var match = x.stack.trim().match(/\n( *(at )?)/);
1812
+ prefix = match && match[1] || '';
1813
+ }
1814
+ } // We use the prefix to ensure our stacks line up with native stack frames.
1815
+
1816
+
1817
+ return '\n' + prefix + name;
1818
+ }
1819
+ }
1820
+ var reentry = false;
1821
+ var componentFrameCache;
1822
+
1823
+ {
1824
+ var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
1825
+ componentFrameCache = new PossiblyWeakMap();
1826
+ }
1827
+
1828
+ function describeNativeComponentFrame(fn, construct) {
1829
+ // If something asked for a stack inside a fake render, it should get ignored.
1830
+ if ( !fn || reentry) {
1831
+ return '';
1832
+ }
1833
+
1834
+ {
1835
+ var frame = componentFrameCache.get(fn);
1836
+
1837
+ if (frame !== undefined) {
1838
+ return frame;
1839
+ }
1840
+ }
1841
+
1842
+ var control;
1843
+ reentry = true;
1844
+ var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
1845
+
1846
+ Error.prepareStackTrace = undefined;
1847
+ var previousDispatcher;
1848
+
1849
+ {
1850
+ previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function
1851
+ // for warnings.
1852
+
1853
+ ReactCurrentDispatcher$1.current = null;
1854
+ disableLogs();
1855
+ }
1856
+
1857
+ try {
1858
+ // This should throw.
1859
+ if (construct) {
1860
+ // Something should be setting the props in the constructor.
1861
+ var Fake = function () {
1862
+ throw Error();
1863
+ }; // $FlowFixMe
1864
+
1865
+
1866
+ Object.defineProperty(Fake.prototype, 'props', {
1867
+ set: function () {
1868
+ // We use a throwing setter instead of frozen or non-writable props
1869
+ // because that won't throw in a non-strict mode function.
1870
+ throw Error();
1871
+ }
1872
+ });
1873
+
1874
+ if (typeof Reflect === 'object' && Reflect.construct) {
1875
+ // We construct a different control for this case to include any extra
1876
+ // frames added by the construct call.
1877
+ try {
1878
+ Reflect.construct(Fake, []);
1879
+ } catch (x) {
1880
+ control = x;
1881
+ }
1882
+
1883
+ Reflect.construct(fn, [], Fake);
1884
+ } else {
1885
+ try {
1886
+ Fake.call();
1887
+ } catch (x) {
1888
+ control = x;
1889
+ }
1890
+
1891
+ fn.call(Fake.prototype);
1892
+ }
1893
+ } else {
1894
+ try {
1895
+ throw Error();
1896
+ } catch (x) {
1897
+ control = x;
1898
+ }
1899
+
1900
+ fn();
1901
+ }
1902
+ } catch (sample) {
1903
+ // This is inlined manually because closure doesn't do it for us.
1904
+ if (sample && control && typeof sample.stack === 'string') {
1905
+ // This extracts the first frame from the sample that isn't also in the control.
1906
+ // Skipping one frame that we assume is the frame that calls the two.
1907
+ var sampleLines = sample.stack.split('\n');
1908
+ var controlLines = control.stack.split('\n');
1909
+ var s = sampleLines.length - 1;
1910
+ var c = controlLines.length - 1;
1911
+
1912
+ while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
1913
+ // We expect at least one stack frame to be shared.
1914
+ // Typically this will be the root most one. However, stack frames may be
1915
+ // cut off due to maximum stack limits. In this case, one maybe cut off
1916
+ // earlier than the other. We assume that the sample is longer or the same
1917
+ // and there for cut off earlier. So we should find the root most frame in
1918
+ // the sample somewhere in the control.
1919
+ c--;
1920
+ }
1921
+
1922
+ for (; s >= 1 && c >= 0; s--, c--) {
1923
+ // Next we find the first one that isn't the same which should be the
1924
+ // frame that called our sample function and the control.
1925
+ if (sampleLines[s] !== controlLines[c]) {
1926
+ // In V8, the first line is describing the message but other VMs don't.
1927
+ // If we're about to return the first line, and the control is also on the same
1928
+ // line, that's a pretty good indicator that our sample threw at same line as
1929
+ // the control. I.e. before we entered the sample frame. So we ignore this result.
1930
+ // This can happen if you passed a class to function component, or non-function.
1931
+ if (s !== 1 || c !== 1) {
1932
+ do {
1933
+ s--;
1934
+ c--; // We may still have similar intermediate frames from the construct call.
1935
+ // The next one that isn't the same should be our match though.
1936
+
1937
+ if (c < 0 || sampleLines[s] !== controlLines[c]) {
1938
+ // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
1939
+ var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
1940
+ // but we have a user-provided "displayName"
1941
+ // splice it in to make the stack more readable.
1942
+
1943
+
1944
+ if (fn.displayName && _frame.includes('<anonymous>')) {
1945
+ _frame = _frame.replace('<anonymous>', fn.displayName);
1946
+ }
1947
+
1948
+ {
1949
+ if (typeof fn === 'function') {
1950
+ componentFrameCache.set(fn, _frame);
1951
+ }
1952
+ } // Return the line we found.
1953
+
1954
+
1955
+ return _frame;
1956
+ }
1957
+ } while (s >= 1 && c >= 0);
1958
+ }
1959
+
1960
+ break;
1961
+ }
1962
+ }
1963
+ }
1964
+ } finally {
1965
+ reentry = false;
1966
+
1967
+ {
1968
+ ReactCurrentDispatcher$1.current = previousDispatcher;
1969
+ reenableLogs();
1970
+ }
1971
+
1972
+ Error.prepareStackTrace = previousPrepareStackTrace;
1973
+ } // Fallback to just using the name if we couldn't make it throw.
1974
+
1975
+
1976
+ var name = fn ? fn.displayName || fn.name : '';
1977
+ var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
1978
+
1979
+ {
1980
+ if (typeof fn === 'function') {
1981
+ componentFrameCache.set(fn, syntheticFrame);
1982
+ }
1983
+ }
1984
+
1985
+ return syntheticFrame;
1986
+ }
1987
+ function describeFunctionComponentFrame(fn, source, ownerFn) {
1988
+ {
1989
+ return describeNativeComponentFrame(fn, false);
1990
+ }
1991
+ }
1992
+
1993
+ function shouldConstruct(Component) {
1994
+ var prototype = Component.prototype;
1995
+ return !!(prototype && prototype.isReactComponent);
1996
+ }
1997
+
1998
+ function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
1999
+
2000
+ if (type == null) {
2001
+ return '';
2002
+ }
2003
+
2004
+ if (typeof type === 'function') {
2005
+ {
2006
+ return describeNativeComponentFrame(type, shouldConstruct(type));
2007
+ }
2008
+ }
2009
+
2010
+ if (typeof type === 'string') {
2011
+ return describeBuiltInComponentFrame(type);
2012
+ }
2013
+
2014
+ switch (type) {
2015
+ case REACT_SUSPENSE_TYPE:
2016
+ return describeBuiltInComponentFrame('Suspense');
2017
+
2018
+ case REACT_SUSPENSE_LIST_TYPE:
2019
+ return describeBuiltInComponentFrame('SuspenseList');
2020
+ }
2021
+
2022
+ if (typeof type === 'object') {
2023
+ switch (type.$$typeof) {
2024
+ case REACT_FORWARD_REF_TYPE:
2025
+ return describeFunctionComponentFrame(type.render);
2026
+
2027
+ case REACT_MEMO_TYPE:
2028
+ // Memo may contain any component type so we recursively resolve it.
2029
+ return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
2030
+
2031
+ case REACT_LAZY_TYPE:
2032
+ {
2033
+ var lazyComponent = type;
2034
+ var payload = lazyComponent._payload;
2035
+ var init = lazyComponent._init;
2036
+
2037
+ try {
2038
+ // Lazy may contain any component type so we recursively resolve it.
2039
+ return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
2040
+ } catch (x) {}
2041
+ }
2042
+ }
2043
+ }
2044
+
2045
+ return '';
2046
+ }
2047
+
2048
+ var loggedTypeFailures = {};
2049
+ var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
2050
+
2051
+ function setCurrentlyValidatingElement(element) {
2052
+ {
2053
+ if (element) {
2054
+ var owner = element._owner;
2055
+ var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
2056
+ ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
2057
+ } else {
2058
+ ReactDebugCurrentFrame$1.setExtraStackFrame(null);
2059
+ }
2060
+ }
2061
+ }
2062
+
2063
+ function checkPropTypes(typeSpecs, values, location, componentName, element) {
2064
+ {
2065
+ // $FlowFixMe This is okay but Flow doesn't know it.
2066
+ var has = Function.call.bind(hasOwnProperty);
2067
+
2068
+ for (var typeSpecName in typeSpecs) {
2069
+ if (has(typeSpecs, typeSpecName)) {
2070
+ var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
2071
+ // fail the render phase where it didn't fail before. So we log it.
2072
+ // After these have been cleaned up, we'll let them throw.
2073
+
2074
+ try {
2075
+ // This is intentionally an invariant that gets caught. It's the same
2076
+ // behavior as without this statement except with a better message.
2077
+ if (typeof typeSpecs[typeSpecName] !== 'function') {
2078
+ // eslint-disable-next-line react-internal/prod-error-codes
2079
+ var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
2080
+ err.name = 'Invariant Violation';
2081
+ throw err;
2082
+ }
2083
+
2084
+ error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
2085
+ } catch (ex) {
2086
+ error$1 = ex;
2087
+ }
2088
+
2089
+ if (error$1 && !(error$1 instanceof Error)) {
2090
+ setCurrentlyValidatingElement(element);
2091
+
2092
+ error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
2093
+
2094
+ setCurrentlyValidatingElement(null);
2095
+ }
2096
+
2097
+ if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
2098
+ // Only monitor this failure once because there tends to be a lot of the
2099
+ // same error.
2100
+ loggedTypeFailures[error$1.message] = true;
2101
+ setCurrentlyValidatingElement(element);
2102
+
2103
+ error('Failed %s type: %s', location, error$1.message);
2104
+
2105
+ setCurrentlyValidatingElement(null);
2106
+ }
2107
+ }
2108
+ }
2109
+ }
2110
+ }
2111
+
2112
+ function setCurrentlyValidatingElement$1(element) {
2113
+ {
2114
+ if (element) {
2115
+ var owner = element._owner;
2116
+ var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
2117
+ setExtraStackFrame(stack);
2118
+ } else {
2119
+ setExtraStackFrame(null);
2120
+ }
2121
+ }
2122
+ }
2123
+
2124
+ var propTypesMisspellWarningShown;
2125
+
2126
+ {
2127
+ propTypesMisspellWarningShown = false;
2128
+ }
2129
+
2130
+ function getDeclarationErrorAddendum() {
2131
+ if (ReactCurrentOwner.current) {
2132
+ var name = getComponentNameFromType(ReactCurrentOwner.current.type);
2133
+
2134
+ if (name) {
2135
+ return '\n\nCheck the render method of `' + name + '`.';
2136
+ }
2137
+ }
2138
+
2139
+ return '';
2140
+ }
2141
+
2142
+ function getSourceInfoErrorAddendum(source) {
2143
+ if (source !== undefined) {
2144
+ var fileName = source.fileName.replace(/^.*[\\\/]/, '');
2145
+ var lineNumber = source.lineNumber;
2146
+ return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
2147
+ }
2148
+
2149
+ return '';
2150
+ }
2151
+
2152
+ function getSourceInfoErrorAddendumForProps(elementProps) {
2153
+ if (elementProps !== null && elementProps !== undefined) {
2154
+ return getSourceInfoErrorAddendum(elementProps.__source);
2155
+ }
2156
+
2157
+ return '';
2158
+ }
2159
+ /**
2160
+ * Warn if there's no key explicitly set on dynamic arrays of children or
2161
+ * object keys are not valid. This allows us to keep track of children between
2162
+ * updates.
2163
+ */
2164
+
2165
+
2166
+ var ownerHasKeyUseWarning = {};
2167
+
2168
+ function getCurrentComponentErrorInfo(parentType) {
2169
+ var info = getDeclarationErrorAddendum();
2170
+
2171
+ if (!info) {
2172
+ var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
2173
+
2174
+ if (parentName) {
2175
+ info = "\n\nCheck the top-level render call using <" + parentName + ">.";
2176
+ }
2177
+ }
2178
+
2179
+ return info;
2180
+ }
2181
+ /**
2182
+ * Warn if the element doesn't have an explicit key assigned to it.
2183
+ * This element is in an array. The array could grow and shrink or be
2184
+ * reordered. All children that haven't already been validated are required to
2185
+ * have a "key" property assigned to it. Error statuses are cached so a warning
2186
+ * will only be shown once.
2187
+ *
2188
+ * @internal
2189
+ * @param {ReactElement} element Element that requires a key.
2190
+ * @param {*} parentType element's parent's type.
2191
+ */
2192
+
2193
+
2194
+ function validateExplicitKey(element, parentType) {
2195
+ if (!element._store || element._store.validated || element.key != null) {
2196
+ return;
2197
+ }
2198
+
2199
+ element._store.validated = true;
2200
+ var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
2201
+
2202
+ if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
2203
+ return;
2204
+ }
2205
+
2206
+ ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
2207
+ // property, it may be the creator of the child that's responsible for
2208
+ // assigning it a key.
2209
+
2210
+ var childOwner = '';
2211
+
2212
+ if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
2213
+ // Give the component that originally created this child.
2214
+ childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
2215
+ }
2216
+
2217
+ {
2218
+ setCurrentlyValidatingElement$1(element);
2219
+
2220
+ error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
2221
+
2222
+ setCurrentlyValidatingElement$1(null);
2223
+ }
2224
+ }
2225
+ /**
2226
+ * Ensure that every element either is passed in a static location, in an
2227
+ * array with an explicit keys property defined, or in an object literal
2228
+ * with valid key property.
2229
+ *
2230
+ * @internal
2231
+ * @param {ReactNode} node Statically passed child of any type.
2232
+ * @param {*} parentType node's parent's type.
2233
+ */
2234
+
2235
+
2236
+ function validateChildKeys(node, parentType) {
2237
+ if (typeof node !== 'object') {
2238
+ return;
2239
+ }
2240
+
2241
+ if (isArray(node)) {
2242
+ for (var i = 0; i < node.length; i++) {
2243
+ var child = node[i];
2244
+
2245
+ if (isValidElement(child)) {
2246
+ validateExplicitKey(child, parentType);
2247
+ }
2248
+ }
2249
+ } else if (isValidElement(node)) {
2250
+ // This element was passed in a valid location.
2251
+ if (node._store) {
2252
+ node._store.validated = true;
2253
+ }
2254
+ } else if (node) {
2255
+ var iteratorFn = getIteratorFn(node);
2256
+
2257
+ if (typeof iteratorFn === 'function') {
2258
+ // Entry iterators used to provide implicit keys,
2259
+ // but now we print a separate warning for them later.
2260
+ if (iteratorFn !== node.entries) {
2261
+ var iterator = iteratorFn.call(node);
2262
+ var step;
2263
+
2264
+ while (!(step = iterator.next()).done) {
2265
+ if (isValidElement(step.value)) {
2266
+ validateExplicitKey(step.value, parentType);
2267
+ }
2268
+ }
2269
+ }
2270
+ }
2271
+ }
2272
+ }
2273
+ /**
2274
+ * Given an element, validate that its props follow the propTypes definition,
2275
+ * provided by the type.
2276
+ *
2277
+ * @param {ReactElement} element
2278
+ */
2279
+
2280
+
2281
+ function validatePropTypes(element) {
2282
+ {
2283
+ var type = element.type;
2284
+
2285
+ if (type === null || type === undefined || typeof type === 'string') {
2286
+ return;
2287
+ }
2288
+
2289
+ var propTypes;
2290
+
2291
+ if (typeof type === 'function') {
2292
+ propTypes = type.propTypes;
2293
+ } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
2294
+ // Inner props are checked in the reconciler.
2295
+ type.$$typeof === REACT_MEMO_TYPE)) {
2296
+ propTypes = type.propTypes;
2297
+ } else {
2298
+ return;
2299
+ }
2300
+
2301
+ if (propTypes) {
2302
+ // Intentionally inside to avoid triggering lazy initializers:
2303
+ var name = getComponentNameFromType(type);
2304
+ checkPropTypes(propTypes, element.props, 'prop', name, element);
2305
+ } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
2306
+ propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
2307
+
2308
+ var _name = getComponentNameFromType(type);
2309
+
2310
+ error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
2311
+ }
2312
+
2313
+ if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
2314
+ error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
2315
+ }
2316
+ }
2317
+ }
2318
+ /**
2319
+ * Given a fragment, validate that it can only be provided with fragment props
2320
+ * @param {ReactElement} fragment
2321
+ */
2322
+
2323
+
2324
+ function validateFragmentProps(fragment) {
2325
+ {
2326
+ var keys = Object.keys(fragment.props);
2327
+
2328
+ for (var i = 0; i < keys.length; i++) {
2329
+ var key = keys[i];
2330
+
2331
+ if (key !== 'children' && key !== 'key') {
2332
+ setCurrentlyValidatingElement$1(fragment);
2333
+
2334
+ error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
2335
+
2336
+ setCurrentlyValidatingElement$1(null);
2337
+ break;
2338
+ }
2339
+ }
2340
+
2341
+ if (fragment.ref !== null) {
2342
+ setCurrentlyValidatingElement$1(fragment);
2343
+
2344
+ error('Invalid attribute `ref` supplied to `React.Fragment`.');
2345
+
2346
+ setCurrentlyValidatingElement$1(null);
2347
+ }
2348
+ }
2349
+ }
2350
+ function createElementWithValidation(type, props, children) {
2351
+ var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
2352
+ // succeed and there will likely be errors in render.
2353
+
2354
+ if (!validType) {
2355
+ var info = '';
2356
+
2357
+ if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
2358
+ info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
2359
+ }
2360
+
2361
+ var sourceInfo = getSourceInfoErrorAddendumForProps(props);
2362
+
2363
+ if (sourceInfo) {
2364
+ info += sourceInfo;
2365
+ } else {
2366
+ info += getDeclarationErrorAddendum();
2367
+ }
2368
+
2369
+ var typeString;
2370
+
2371
+ if (type === null) {
2372
+ typeString = 'null';
2373
+ } else if (isArray(type)) {
2374
+ typeString = 'array';
2375
+ } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
2376
+ typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />";
2377
+ info = ' Did you accidentally export a JSX literal instead of a component?';
2378
+ } else {
2379
+ typeString = typeof type;
2380
+ }
2381
+
2382
+ {
2383
+ error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
2384
+ }
2385
+ }
2386
+
2387
+ var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
2388
+ // TODO: Drop this when these are no longer allowed as the type argument.
2389
+
2390
+ if (element == null) {
2391
+ return element;
2392
+ } // Skip key warning if the type isn't valid since our key validation logic
2393
+ // doesn't expect a non-string/function type and can throw confusing errors.
2394
+ // We don't want exception behavior to differ between dev and prod.
2395
+ // (Rendering will throw with a helpful message and as soon as the type is
2396
+ // fixed, the key warnings will appear.)
2397
+
2398
+
2399
+ if (validType) {
2400
+ for (var i = 2; i < arguments.length; i++) {
2401
+ validateChildKeys(arguments[i], type);
2402
+ }
2403
+ }
2404
+
2405
+ if (type === REACT_FRAGMENT_TYPE) {
2406
+ validateFragmentProps(element);
2407
+ } else {
2408
+ validatePropTypes(element);
2409
+ }
2410
+
2411
+ return element;
2412
+ }
2413
+ var didWarnAboutDeprecatedCreateFactory = false;
2414
+ function createFactoryWithValidation(type) {
2415
+ var validatedFactory = createElementWithValidation.bind(null, type);
2416
+ validatedFactory.type = type;
2417
+
2418
+ {
2419
+ if (!didWarnAboutDeprecatedCreateFactory) {
2420
+ didWarnAboutDeprecatedCreateFactory = true;
2421
+
2422
+ warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
2423
+ } // Legacy hook: remove it
2424
+
2425
+
2426
+ Object.defineProperty(validatedFactory, 'type', {
2427
+ enumerable: false,
2428
+ get: function () {
2429
+ warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
2430
+
2431
+ Object.defineProperty(this, 'type', {
2432
+ value: type
2433
+ });
2434
+ return type;
2435
+ }
2436
+ });
2437
+ }
2438
+
2439
+ return validatedFactory;
2440
+ }
2441
+ function cloneElementWithValidation(element, props, children) {
2442
+ var newElement = cloneElement.apply(this, arguments);
2443
+
2444
+ for (var i = 2; i < arguments.length; i++) {
2445
+ validateChildKeys(arguments[i], newElement.type);
2446
+ }
2447
+
2448
+ validatePropTypes(newElement);
2449
+ return newElement;
2450
+ }
2451
+
2452
+ function startTransition(scope, options) {
2453
+ var prevTransition = ReactCurrentBatchConfig.transition;
2454
+ ReactCurrentBatchConfig.transition = {};
2455
+ var currentTransition = ReactCurrentBatchConfig.transition;
2456
+
2457
+ {
2458
+ ReactCurrentBatchConfig.transition._updatedFibers = new Set();
2459
+ }
2460
+
2461
+ try {
2462
+ scope();
2463
+ } finally {
2464
+ ReactCurrentBatchConfig.transition = prevTransition;
2465
+
2466
+ {
2467
+ if (prevTransition === null && currentTransition._updatedFibers) {
2468
+ var updatedFibersCount = currentTransition._updatedFibers.size;
2469
+
2470
+ if (updatedFibersCount > 10) {
2471
+ warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');
2472
+ }
2473
+
2474
+ currentTransition._updatedFibers.clear();
2475
+ }
2476
+ }
2477
+ }
2478
+ }
2479
+
2480
+ var didWarnAboutMessageChannel = false;
2481
+ var enqueueTaskImpl = null;
2482
+ function enqueueTask(task) {
2483
+ if (enqueueTaskImpl === null) {
2484
+ try {
2485
+ // read require off the module object to get around the bundlers.
2486
+ // we don't want them to detect a require and bundle a Node polyfill.
2487
+ var requireString = ('require' + Math.random()).slice(0, 7);
2488
+ var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's
2489
+ // version of setImmediate, bypassing fake timers if any.
2490
+
2491
+ enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;
2492
+ } catch (_err) {
2493
+ // we're in a browser
2494
+ // we can't use regular timers because they may still be faked
2495
+ // so we try MessageChannel+postMessage instead
2496
+ enqueueTaskImpl = function (callback) {
2497
+ {
2498
+ if (didWarnAboutMessageChannel === false) {
2499
+ didWarnAboutMessageChannel = true;
2500
+
2501
+ if (typeof MessageChannel === 'undefined') {
2502
+ error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');
2503
+ }
2504
+ }
2505
+ }
2506
+
2507
+ var channel = new MessageChannel();
2508
+ channel.port1.onmessage = callback;
2509
+ channel.port2.postMessage(undefined);
2510
+ };
2511
+ }
2512
+ }
2513
+
2514
+ return enqueueTaskImpl(task);
2515
+ }
2516
+
2517
+ var actScopeDepth = 0;
2518
+ var didWarnNoAwaitAct = false;
2519
+ function act(callback) {
2520
+ {
2521
+ // `act` calls can be nested, so we track the depth. This represents the
2522
+ // number of `act` scopes on the stack.
2523
+ var prevActScopeDepth = actScopeDepth;
2524
+ actScopeDepth++;
2525
+
2526
+ if (ReactCurrentActQueue.current === null) {
2527
+ // This is the outermost `act` scope. Initialize the queue. The reconciler
2528
+ // will detect the queue and use it instead of Scheduler.
2529
+ ReactCurrentActQueue.current = [];
2530
+ }
2531
+
2532
+ var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;
2533
+ var result;
2534
+
2535
+ try {
2536
+ // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only
2537
+ // set to `true` while the given callback is executed, not for updates
2538
+ // triggered during an async event, because this is how the legacy
2539
+ // implementation of `act` behaved.
2540
+ ReactCurrentActQueue.isBatchingLegacy = true;
2541
+ result = callback(); // Replicate behavior of original `act` implementation in legacy mode,
2542
+ // which flushed updates immediately after the scope function exits, even
2543
+ // if it's an async function.
2544
+
2545
+ if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) {
2546
+ var queue = ReactCurrentActQueue.current;
2547
+
2548
+ if (queue !== null) {
2549
+ ReactCurrentActQueue.didScheduleLegacyUpdate = false;
2550
+ flushActQueue(queue);
2551
+ }
2552
+ }
2553
+ } catch (error) {
2554
+ popActScope(prevActScopeDepth);
2555
+ throw error;
2556
+ } finally {
2557
+ ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;
2558
+ }
2559
+
2560
+ if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
2561
+ var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait
2562
+ // for it to resolve before exiting the current scope.
2563
+
2564
+ var wasAwaited = false;
2565
+ var thenable = {
2566
+ then: function (resolve, reject) {
2567
+ wasAwaited = true;
2568
+ thenableResult.then(function (returnValue) {
2569
+ popActScope(prevActScopeDepth);
2570
+
2571
+ if (actScopeDepth === 0) {
2572
+ // We've exited the outermost act scope. Recursively flush the
2573
+ // queue until there's no remaining work.
2574
+ recursivelyFlushAsyncActWork(returnValue, resolve, reject);
2575
+ } else {
2576
+ resolve(returnValue);
2577
+ }
2578
+ }, function (error) {
2579
+ // The callback threw an error.
2580
+ popActScope(prevActScopeDepth);
2581
+ reject(error);
2582
+ });
2583
+ }
2584
+ };
2585
+
2586
+ {
2587
+ if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') {
2588
+ // eslint-disable-next-line no-undef
2589
+ Promise.resolve().then(function () {}).then(function () {
2590
+ if (!wasAwaited) {
2591
+ didWarnNoAwaitAct = true;
2592
+
2593
+ error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');
2594
+ }
2595
+ });
2596
+ }
2597
+ }
2598
+
2599
+ return thenable;
2600
+ } else {
2601
+ var returnValue = result; // The callback is not an async function. Exit the current scope
2602
+ // immediately, without awaiting.
2603
+
2604
+ popActScope(prevActScopeDepth);
2605
+
2606
+ if (actScopeDepth === 0) {
2607
+ // Exiting the outermost act scope. Flush the queue.
2608
+ var _queue = ReactCurrentActQueue.current;
2609
+
2610
+ if (_queue !== null) {
2611
+ flushActQueue(_queue);
2612
+ ReactCurrentActQueue.current = null;
2613
+ } // Return a thenable. If the user awaits it, we'll flush again in
2614
+ // case additional work was scheduled by a microtask.
2615
+
2616
+
2617
+ var _thenable = {
2618
+ then: function (resolve, reject) {
2619
+ // Confirm we haven't re-entered another `act` scope, in case
2620
+ // the user does something weird like await the thenable
2621
+ // multiple times.
2622
+ if (ReactCurrentActQueue.current === null) {
2623
+ // Recursively flush the queue until there's no remaining work.
2624
+ ReactCurrentActQueue.current = [];
2625
+ recursivelyFlushAsyncActWork(returnValue, resolve, reject);
2626
+ } else {
2627
+ resolve(returnValue);
2628
+ }
2629
+ }
2630
+ };
2631
+ return _thenable;
2632
+ } else {
2633
+ // Since we're inside a nested `act` scope, the returned thenable
2634
+ // immediately resolves. The outer scope will flush the queue.
2635
+ var _thenable2 = {
2636
+ then: function (resolve, reject) {
2637
+ resolve(returnValue);
2638
+ }
2639
+ };
2640
+ return _thenable2;
2641
+ }
2642
+ }
2643
+ }
2644
+ }
2645
+
2646
+ function popActScope(prevActScopeDepth) {
2647
+ {
2648
+ if (prevActScopeDepth !== actScopeDepth - 1) {
2649
+ error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');
2650
+ }
2651
+
2652
+ actScopeDepth = prevActScopeDepth;
2653
+ }
2654
+ }
2655
+
2656
+ function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
2657
+ {
2658
+ var queue = ReactCurrentActQueue.current;
2659
+
2660
+ if (queue !== null) {
2661
+ try {
2662
+ flushActQueue(queue);
2663
+ enqueueTask(function () {
2664
+ if (queue.length === 0) {
2665
+ // No additional work was scheduled. Finish.
2666
+ ReactCurrentActQueue.current = null;
2667
+ resolve(returnValue);
2668
+ } else {
2669
+ // Keep flushing work until there's none left.
2670
+ recursivelyFlushAsyncActWork(returnValue, resolve, reject);
2671
+ }
2672
+ });
2673
+ } catch (error) {
2674
+ reject(error);
2675
+ }
2676
+ } else {
2677
+ resolve(returnValue);
2678
+ }
2679
+ }
2680
+ }
2681
+
2682
+ var isFlushing = false;
2683
+
2684
+ function flushActQueue(queue) {
2685
+ {
2686
+ if (!isFlushing) {
2687
+ // Prevent re-entrance.
2688
+ isFlushing = true;
2689
+ var i = 0;
2690
+
2691
+ try {
2692
+ for (; i < queue.length; i++) {
2693
+ var callback = queue[i];
2694
+
2695
+ do {
2696
+ callback = callback(true);
2697
+ } while (callback !== null);
2698
+ }
2699
+
2700
+ queue.length = 0;
2701
+ } catch (error) {
2702
+ // If something throws, leave the remaining callbacks on the queue.
2703
+ queue = queue.slice(i + 1);
2704
+ throw error;
2705
+ } finally {
2706
+ isFlushing = false;
2707
+ }
2708
+ }
2709
+ }
2710
+ }
2711
+
2712
+ var createElement$1 = createElementWithValidation ;
2713
+ var cloneElement$1 = cloneElementWithValidation ;
2714
+ var createFactory = createFactoryWithValidation ;
2715
+ var Children = {
2716
+ map: mapChildren,
2717
+ forEach: forEachChildren,
2718
+ count: countChildren,
2719
+ toArray: toArray,
2720
+ only: onlyChild
2721
+ };
2722
+
2723
+ exports.Children = Children;
2724
+ exports.Component = Component;
2725
+ exports.Fragment = REACT_FRAGMENT_TYPE;
2726
+ exports.Profiler = REACT_PROFILER_TYPE;
2727
+ exports.PureComponent = PureComponent;
2728
+ exports.StrictMode = REACT_STRICT_MODE_TYPE;
2729
+ exports.Suspense = REACT_SUSPENSE_TYPE;
2730
+ exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;
2731
+ exports.cloneElement = cloneElement$1;
2732
+ exports.createContext = createContext;
2733
+ exports.createElement = createElement$1;
2734
+ exports.createFactory = createFactory;
2735
+ exports.createRef = createRef;
2736
+ exports.forwardRef = forwardRef;
2737
+ exports.isValidElement = isValidElement;
2738
+ exports.lazy = lazy;
2739
+ exports.memo = memo;
2740
+ exports.startTransition = startTransition;
2741
+ exports.unstable_act = act;
2742
+ exports.useCallback = useCallback;
2743
+ exports.useContext = useContext;
2744
+ exports.useDebugValue = useDebugValue;
2745
+ exports.useDeferredValue = useDeferredValue;
2746
+ exports.useEffect = useEffect;
2747
+ exports.useId = useId;
2748
+ exports.useImperativeHandle = useImperativeHandle;
2749
+ exports.useInsertionEffect = useInsertionEffect;
2750
+ exports.useLayoutEffect = useLayoutEffect;
2751
+ exports.useMemo = useMemo;
2752
+ exports.useReducer = useReducer;
2753
+ exports.useRef = useRef;
2754
+ exports.useState = useState;
2755
+ exports.useSyncExternalStore = useSyncExternalStore;
2756
+ exports.useTransition = useTransition;
2757
+ exports.version = ReactVersion;
2758
+ /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
2759
+ if (
2760
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
2761
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===
2762
+ 'function'
2763
+ ) {
2764
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());
2765
+ }
2766
+
2767
+ })();
2768
+ }
2769
+ } (react_development, react_developmentExports));
2770
+
2771
+ (function (module) {
2772
+
2773
+ {
2774
+ module.exports = react_developmentExports;
2775
+ }
2776
+ } (react));
2777
+
2778
+ var index = /*@__PURE__*/getDefaultExportFromCjs(reactExports);
2779
+
2780
+ var React = /*#__PURE__*/_mergeNamespaces({
2781
+ __proto__: null,
2782
+ default: index
2783
+ }, [reactExports]);
2784
+
2785
+ /** @module See `rollup.config.js` for what this file does. */
2786
+
2787
+ var Children = reactExports.Children;
2788
+ var Component = reactExports.Component;
2789
+ var Fragment = reactExports.Fragment;
2790
+ var Profiler = reactExports.Profiler;
2791
+ var PureComponent = reactExports.PureComponent;
2792
+ var StrictMode = reactExports.StrictMode;
2793
+ var Suspense = reactExports.Suspense;
2794
+ var __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = reactExports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
2795
+ var cloneElement = reactExports.cloneElement;
2796
+ var createContext = reactExports.createContext;
2797
+ var createElement = reactExports.createElement;
2798
+ var createFactory = reactExports.createFactory;
2799
+ var createRef = reactExports.createRef;
2800
+ var forwardRef = reactExports.forwardRef;
2801
+ var isValidElement = reactExports.isValidElement;
2802
+ var lazy = reactExports.lazy;
2803
+ var memo = reactExports.memo;
2804
+ var startTransition = reactExports.startTransition;
2805
+ var unstable_act = reactExports.unstable_act;
2806
+ var useCallback = reactExports.useCallback;
2807
+ var useContext = reactExports.useContext;
2808
+ var useDebugValue = reactExports.useDebugValue;
2809
+ var useDeferredValue = reactExports.useDeferredValue;
2810
+ var useEffect = reactExports.useEffect;
2811
+ var useId = reactExports.useId;
2812
+ var useImperativeHandle = reactExports.useImperativeHandle;
2813
+ var useInsertionEffect = reactExports.useInsertionEffect;
2814
+ var useLayoutEffect = reactExports.useLayoutEffect;
2815
+ var useMemo = reactExports.useMemo;
2816
+ var useReducer = reactExports.useReducer;
2817
+ var useRef = reactExports.useRef;
2818
+ var useState = reactExports.useState;
2819
+ var useSyncExternalStore = reactExports.useSyncExternalStore;
2820
+ var useTransition = reactExports.useTransition;
2821
+ var version = reactExports.version;
2822
+ export { Children, Component, Fragment, Profiler, PureComponent, StrictMode, Suspense, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, cloneElement, createContext, createElement, createFactory, createRef, React as default, forwardRef, isValidElement, lazy, memo, startTransition, unstable_act, useCallback, useContext, useDebugValue, useDeferredValue, useEffect, useId, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore, useTransition, version };
2823
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QuZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCIuLi9zcmMvZXNtLXNoaW1zL3JlYWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICd1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCA9PT1cbiAgICAnZnVuY3Rpb24nXG4pIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgICAgdmFyIFJlYWN0VmVyc2lvbiA9ICcxOC4yLjAnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogbnVsbFxufTtcblxudmFyIFJlYWN0Q3VycmVudEFjdFF1ZXVlID0ge1xuICBjdXJyZW50OiBudWxsLFxuICAvLyBVc2VkIHRvIHJlcHJvZHVjZSBiZWhhdmlvciBvZiBgYmF0Y2hlZFVwZGF0ZXNgIGluIGxlZ2FjeSBtb2RlLlxuICBpc0JhdGNoaW5nTGVnYWN5OiBmYWxzZSxcbiAgZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGU6IGZhbHNlXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG52YXIgZW5hYmxlQ2FjaGVFbGVtZW50ID0gZmFsc2U7XG52YXIgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgPSBmYWxzZTsgLy8gTm8ga25vd24gYnVncywgYnV0IG5lZWRzIHBlcmZvcm1hbmNlIHRlc3RpbmdcblxudmFyIGVuYWJsZUxlZ2FjeUhpZGRlbiA9IGZhbHNlOyAvLyBFbmFibGVzIHVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIGZlYXR1cmUgaW4gRmliZXJcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7IC8vIFRyYWNrIHdoaWNoIEZpYmVyKHMpIHNjaGVkdWxlIHJlbmRlciB3b3JrLlxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRBY3RRdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0ge307XG5cbmZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICB2YXIgX2NvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBfY29uc3RydWN0b3IgJiYgKF9jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBfY29uc3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0Q2xhc3MnO1xuICAgIHZhciB3YXJuaW5nS2V5ID0gY29tcG9uZW50TmFtZSArIFwiLlwiICsgY2FsbGVyTmFtZTtcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlcnJvcihcIkNhbid0IGNhbGwgJXMgb24gYSBjb21wb25lbnQgdGhhdCBpcyBub3QgeWV0IG1vdW50ZWQuIFwiICsgJ1RoaXMgaXMgYSBuby1vcCwgYnV0IGl0IG1pZ2h0IGluZGljYXRlIGEgYnVnIGluIHlvdXIgYXBwbGljYXRpb24uICcgKyAnSW5zdGVhZCwgYXNzaWduIHRvIGB0aGlzLnN0YXRlYCBkaXJlY3RseSBvciBkZWZpbmUgYSBgc3RhdGUgPSB7fTtgICcgKyAnY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldID0gdHJ1ZTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS5cbiAqL1xuXG5cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBOYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgcGFydGlhbFN0YXRlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGFydGlhbFN0YXRlICE9PSAnZnVuY3Rpb24nICYmIHBhcnRpYWxTdGF0ZSAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhICcgKyAnZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLicpO1xuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbmFzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuXG4gIGlmIChkaXNwbGF5TmFtZSkge1xuICAgIHJldHVybiBkaXNwbGF5TmFtZTtcbiAgfVxuXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHJlYWN0LXJlY29uY2lsZXIvZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlclxuXG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufSAvLyBOb3RlIHRoYXQgdGhlIHJlY29uY2lsZXIgcGFja2FnZSBzaG91bGQgZ2VuZXJhbGx5IHByZWZlciB0byB1c2UgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcigpIGluc3RlYWQuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKG91dGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGNvbXBvbmVudE5hbWUsIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjcmVhdGVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG5cbiAgICAgIHtcbiAgICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICB7XG4gICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGVsZW1lbnQua2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKGlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgYGlmYCBzdGF0ZW1lbnQgaGVyZSBwcmV2ZW50cyBhdXRvLWRpc2FibGluZyBvZiB0aGUgc2FmZVxuICAgICAgICAgIC8vIGNvZXJjaW9uIEVTTGludCBydWxlLCBzbyB3ZSBtdXN0IG1hbnVhbGx5IGRpc2FibGUgaXQgYmVsb3cuXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgICAgaWYgKG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpKSB7XG4gICAgICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1hcHBlZENoaWxkLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWFwcGVkQ2hpbGQgPSBjbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRyZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBhcyBjaGlsZHJlblxuICAgICAgICBlc2NhcGVkUHJlZml4ICsgKCAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFJlYWN0LlBvcnRhbCBkb2Vzbid0IGhhdmUgYSBrZXlcbiAgICAgICAgbWFwcGVkQ2hpbGQua2V5ICYmICghX2NoaWxkIHx8IF9jaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIGV4aXN0aW5nIGVsZW1lbnQncyBrZXkgY2FuIGJlIGEgbnVtYmVyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9IFN0cmluZyhjaGlsZHJlbik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIFwiICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuJyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlKSB7XG4gIC8vIFRPRE86IFNlY29uZCBhcmd1bWVudCB1c2VkIHRvIGJlIGFuIG9wdGlvbmFsIGBjYWxjdWxhdGVDaGFuZ2VkQml0c2BcbiAgLy8gZnVuY3Rpb24uIFdhcm4gdG8gcmVzZXJ2ZSBmb3IgZnV0dXJlIHVzZT9cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsLFxuICAgIC8vIEFkZCB0aGVzZSB0byB1c2Ugc2FtZSBoaWRkZW4gY2xhc3MgaW4gVk0gYXMgU2VydmVyQ29udGV4dFxuICAgIF9kZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgX2dsb2JhbE5hbWU6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0XG4gICAgfTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbm90IHNldHRpbmcgYSB2YWx1ZSwgd2hpY2ggaXMgaW50ZW50aW9uYWwgaGVyZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29uc3VtZXIsIHtcbiAgICAgIFByb3ZpZGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Qcm92aWRlcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Qcm92aWRlcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Db25zdW1lcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc3BsYXlOYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmRpc3BsYXlOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkaXNwbGF5TmFtZSkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIHdhcm4oJ1NldHRpbmcgYGRpc3BsYXlOYW1lYCBvbiBDb250ZXh0LkNvbnN1bWVyIGhhcyBubyBlZmZlY3QuICcgKyBcIllvdSBzaG91bGQgc2V0IGl0IGRpcmVjdGx5IG9uIHRoZSBjb250ZXh0IHdpdGggQ29udGV4dC5kaXNwbGF5TmFtZSA9ICclcycuXCIsIGRpc3BsYXlOYW1lKTtcblxuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pOyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3BlcnRpZXMgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgZGVmaW5lUHJvcGVydHlcblxuICAgIGNvbnRleHQuQ29uc3VtZXIgPSBDb25zdW1lcjtcbiAgfVxuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbnZhciBVbmluaXRpYWxpemVkID0gLTE7XG52YXIgUGVuZGluZyA9IDA7XG52YXIgUmVzb2x2ZWQgPSAxO1xudmFyIFJlamVjdGVkID0gMjtcblxuZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgIHZhciB0aGVuYWJsZSA9IGN0b3IoKTsgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAvLyBUaGlzIG1pZ2h0IHRocm93IGVpdGhlciBiZWNhdXNlIGl0J3MgbWlzc2luZyBvciB0aHJvd3MuIElmIHNvLCB3ZSB0cmVhdCBpdFxuICAgIC8vIGFzIHN0aWxsIHVuaW5pdGlhbGl6ZWQgYW5kIHRyeSBhZ2FpbiBuZXh0IHRpbWUuIFdoaWNoIGlzIHRoZSBzYW1lIGFzIHdoYXRcbiAgICAvLyBoYXBwZW5zIGlmIHRoZSBjdG9yIG9yIGFueSB3cmFwcGVycyBwcm9jZXNzaW5nIHRoZSBjdG9yIHRocm93cy4gVGhpcyBtaWdodFxuICAgIC8vIGVuZCB1cCBmaXhpbmcgaXQgaWYgdGhlIHJlc29sdXRpb24gd2FzIGEgY29uY3VycmVuY3kgYnVnLlxuXG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nIHx8IHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3Q7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nIHx8IHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIEluIGNhc2UsIHdlJ3JlIHN0aWxsIHVuaW5pdGlhbGl6ZWQsIHRoZW4gd2UncmUgd2FpdGluZyBmb3IgdGhlIHRoZW5hYmxlXG4gICAgICAvLyB0byByZXNvbHZlLiBTZXQgaXQgYXMgcGVuZGluZyBpbiB0aGUgbWVhbnRpbWUuXG4gICAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgICBwZW5kaW5nLl9zdGF0dXMgPSBQZW5kaW5nO1xuICAgICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUmVzb2x2ZWQpIHtcbiAgICB2YXIgbW9kdWxlT2JqZWN0ID0gcGF5bG9hZC5fcmVzdWx0O1xuXG4gICAge1xuICAgICAgaWYgKG1vZHVsZU9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXAnICsgJ29ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2NvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXAnICsgXCJvcnQoJy4vTXlDb21wb25lbnQnKSlcXG5cXG5cIiArICdEaWQgeW91IGFjY2lkZW50YWxseSBwdXQgY3VybHkgYnJhY2VzIGFyb3VuZCB0aGUgaW1wb3J0PycsIG1vZHVsZU9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKCEoJ2RlZmF1bHQnIGluIG1vZHVsZU9iamVjdCkpIHtcbiAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcCcgKyAnb3J0KCkgY2FsbC4gJyArICdJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gICcgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVPYmplY3QuZGVmYXVsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiBVbmluaXRpYWxpemVkLFxuICAgIF9yZXN1bHQ6IGN0b3JcbiAgfTtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgX2luaXQ6IGxhenlJbml0aWFsaXplclxuICB9O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kdWN0aW9uLCB0aGlzIHdvdWxkIGp1c3Qgc2V0IGl0IG9uIHRoZSBvYmplY3QuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcbiAgICB2YXIgcHJvcFR5cGVzOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsYXp5VHlwZSwge1xuICAgICAgZGVmYXVsdFByb3BzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3RGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIGRlZmF1bHRQcm9wcyA9IG5ld0RlZmF1bHRQcm9wczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYHByb3BUeXBlc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAncHJvcFR5cGVzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGF6eVR5cGU7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHtcbiAgICBpZiAocmVuZGVyICE9IG51bGwgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCAnICsgJ2NvbXBvbmVudC4gSW5zdGVhZCBvZiBmb3J3YXJkUmVmKG1lbW8oLi4uKSksIHVzZSAnICsgJ21lbW8oZm9yd2FyZFJlZiguLi4pKS4nKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZW5kZXIubGVuZ3RoICE9PSAwICYmIHJlbmRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgIGlmIChyZW5kZXIuZGVmYXVsdFByb3BzICE9IG51bGwgfHwgcmVuZGVyLnByb3BUeXBlcyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICByZW5kZXI6IHJlbmRlclxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7IC8vIFRoZSBpbm5lciBjb21wb25lbnQgc2hvdWxkbid0IGluaGVyaXQgdGhpcyBkaXNwbGF5IG5hbWUgaW4gbW9zdCBjYXNlcyxcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9uZW50IG1heSBiZSB1c2VkIGVsc2V3aGVyZS5cbiAgICAgICAgLy8gQnV0IGl0J3MgbmljZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBpbmhlcml0IHRoZSBuYW1lLFxuICAgICAgICAvLyBzbyB0aGF0IG91ciBjb21wb25lbnQtc3RhY2sgZ2VuZXJhdGlvbiBsb2dpYyB3aWxsIGRpc3BsYXkgdGhlaXIgZnJhbWVzLlxuICAgICAgICAvLyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gZ2VuZXJhbGx5IHN1Z2dlc3RzIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHsuLi59KTtcbiAgICAgICAgLy8gVGhpcyBraW5kIG9mIGlubmVyIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGVsc2V3aGVyZSBzbyB0aGUgc2lkZSBlZmZlY3QgaXMgb2theS5cblxuICAgICAgICBpZiAoIXJlbmRlci5uYW1lICYmICFyZW5kZXIuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbnZhciBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFO1xuXG57XG4gIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKCdyZWFjdC5tb2R1bGUucmVmZXJlbmNlJyk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgfHwgdHlwZS5nZXRNb2R1bGVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7IC8vIFRoZSBpbm5lciBjb21wb25lbnQgc2hvdWxkbid0IGluaGVyaXQgdGhpcyBkaXNwbGF5IG5hbWUgaW4gbW9zdCBjYXNlcyxcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9uZW50IG1heSBiZSB1c2VkIGVsc2V3aGVyZS5cbiAgICAgICAgLy8gQnV0IGl0J3MgbmljZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBpbmhlcml0IHRoZSBuYW1lLFxuICAgICAgICAvLyBzbyB0aGF0IG91ciBjb21wb25lbnQtc3RhY2sgZ2VuZXJhdGlvbiBsb2dpYyB3aWxsIGRpc3BsYXkgdGhlaXIgZnJhbWVzLlxuICAgICAgICAvLyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gZ2VuZXJhbGx5IHN1Z2dlc3RzIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7Li4ufSk7XG4gICAgICAgIC8vIFRoaXMga2luZCBvZiBpbm5lciBmdW5jdGlvbiBpcyBub3QgdXNlZCBlbHNld2hlcmUgc28gdGhlIHNpZGUgZWZmZWN0IGlzIG9rYXkuXG5cbiAgICAgICAgaWYgKCF0eXBlLm5hbWUgJiYgIXR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7XG5cbiAge1xuICAgIGlmIChkaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvcicgKyAnIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuJyArICcxLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4nICsgJzIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4nICsgJzMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG4nICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLicpO1xuICAgIH1cbiAgfSAvLyBXaWxsIHJlc3VsdCBpbiBhIG51bGwgYWNjZXNzIGVycm9yIGlmIGFjY2Vzc2VkIG91dHNpZGUgcmVuZGVyIHBoYXNlLiBXZVxuICAvLyBpbnRlbnRpb25hbGx5IGRvbid0IHRocm93IG91ciBvd24gZXJyb3IgYmVjYXVzZSB0aGlzIGlzIGluIGEgaG90IHBhdGguXG4gIC8vIEFsc28gaGVscHMgZW5zdXJlIHRoaXMgaXMgaW5saW5lZC5cblxuXG4gIHJldHVybiBkaXNwYXRjaGVyO1xufVxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuICAgIGlmIChDb250ZXh0Ll9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZWFsQ29udGV4dCA9IENvbnRleHQuX2NvbnRleHQ7IC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cblxuICAgICAgaWYgKHJlYWxDb250ZXh0LkNvbnN1bWVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Qcm92aWRlcikgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5mdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVRyYW5zaXRpb24oKTtcbn1cbmZ1bmN0aW9uIHVzZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUlkKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUlkKCk7XG59XG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCAhZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpOyAvLyBJZiBvdXIgY29tcG9uZW50IGZyYW1lIGlzIGxhYmVsZWQgXCI8YW5vbnltb3VzPlwiXG4gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgYSB1c2VyLXByb3ZpZGVkIFwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgIC8vIHNwbGljZSBpdCBpbiB0byBtYWtlIHRoZSBzdGFjayBtb3JlIHJlYWRhYmxlLlxuXG5cbiAgICAgICAgICAgICAgICBpZiAoZm4uZGlzcGxheU5hbWUgJiYgX2ZyYW1lLmluY2x1ZGVzKCc8YW5vbnltb3VzPicpKSB7XG4gICAgICAgICAgICAgICAgICBfZnJhbWUgPSBfZnJhbWUucmVwbGFjZSgnPGFub255bW91cz4nLCBmbi5kaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMoZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzLl9fc291cmNlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICBpZiAoIWluZm8pIHtcbiAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZm87XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKHByb3BzKTtcblxuICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgfVxuXG4gICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNjb3BlLCBvcHRpb25zKSB7XG4gIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSB7fTtcbiAgdmFyIGN1cnJlbnRUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgc2NvcGUoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICB7XG4gICAgICBpZiAocHJldlRyYW5zaXRpb24gPT09IG51bGwgJiYgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMpIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRGaWJlcnNDb3VudCA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZWRGaWJlcnNDb3VudCA+IDEwKSB7XG4gICAgICAgICAgd2FybignRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiAnICsgJ0lmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuICcgKyAnT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gZmFsc2U7XG52YXIgZW5xdWV1ZVRhc2tJbXBsID0gbnVsbDtcbmZ1bmN0aW9uIGVucXVldWVUYXNrKHRhc2spIHtcbiAgaWYgKGVucXVldWVUYXNrSW1wbCA9PT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICAvLyByZWFkIHJlcXVpcmUgb2ZmIHRoZSBtb2R1bGUgb2JqZWN0IHRvIGdldCBhcm91bmQgdGhlIGJ1bmRsZXJzLlxuICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGRldGVjdCBhIHJlcXVpcmUgYW5kIGJ1bmRsZSBhIE5vZGUgcG9seWZpbGwuXG4gICAgICB2YXIgcmVxdWlyZVN0cmluZyA9ICgncmVxdWlyZScgKyBNYXRoLnJhbmRvbSgpKS5zbGljZSgwLCA3KTtcbiAgICAgIHZhciBub2RlUmVxdWlyZSA9IG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ107IC8vIGFzc3VtaW5nIHdlJ3JlIGluIG5vZGUsIGxldCdzIHRyeSB0byBnZXQgbm9kZSdzXG4gICAgICAvLyB2ZXJzaW9uIG9mIHNldEltbWVkaWF0ZSwgYnlwYXNzaW5nIGZha2UgdGltZXJzIGlmIGFueS5cblxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gbm9kZVJlcXVpcmUuY2FsbChtb2R1bGUsICd0aW1lcnMnKS5zZXRJbW1lZGlhdGU7XG4gICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgLy8gd2UncmUgaW4gYSBicm93c2VyXG4gICAgICAvLyB3ZSBjYW4ndCB1c2UgcmVndWxhciB0aW1lcnMgYmVjYXVzZSB0aGV5IG1heSBzdGlsbCBiZSBmYWtlZFxuICAgICAgLy8gc28gd2UgdHJ5IE1lc3NhZ2VDaGFubmVsK3Bvc3RNZXNzYWdlIGluc3RlYWRcbiAgICAgIGVucXVldWVUYXNrSW1wbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBlcnJvcignVGhpcyBicm93c2VyIGRvZXMgbm90IGhhdmUgYSBNZXNzYWdlQ2hhbm5lbCBpbXBsZW1lbnRhdGlvbiwgJyArICdzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzICcgKyAnaWYgeW91IGVuY291bnRlciB0aGlzIHdhcm5pbmcuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBjYWxsYmFjaztcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSh1bmRlZmluZWQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW5xdWV1ZVRhc2tJbXBsKHRhc2spO1xufVxuXG52YXIgYWN0U2NvcGVEZXB0aCA9IDA7XG52YXIgZGlkV2Fybk5vQXdhaXRBY3QgPSBmYWxzZTtcbmZ1bmN0aW9uIGFjdChjYWxsYmFjaykge1xuICB7XG4gICAgLy8gYGFjdGAgY2FsbHMgY2FuIGJlIG5lc3RlZCwgc28gd2UgdHJhY2sgdGhlIGRlcHRoLiBUaGlzIHJlcHJlc2VudHMgdGhlXG4gICAgLy8gbnVtYmVyIG9mIGBhY3RgIHNjb3BlcyBvbiB0aGUgc3RhY2suXG4gICAgdmFyIHByZXZBY3RTY29wZURlcHRoID0gYWN0U2NvcGVEZXB0aDtcbiAgICBhY3RTY29wZURlcHRoKys7XG5cbiAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgb3V0ZXJtb3N0IGBhY3RgIHNjb3BlLiBJbml0aWFsaXplIHRoZSBxdWV1ZS4gVGhlIHJlY29uY2lsZXJcbiAgICAgIC8vIHdpbGwgZGV0ZWN0IHRoZSBxdWV1ZSBhbmQgdXNlIGl0IGluc3RlYWQgb2YgU2NoZWR1bGVyLlxuICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IFtdO1xuICAgIH1cblxuICAgIHZhciBwcmV2SXNCYXRjaGluZ0xlZ2FjeSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmlzQmF0Y2hpbmdMZWdhY3k7XG4gICAgdmFyIHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2VkIHRvIHJlcHJvZHVjZSBiZWhhdmlvciBvZiBgYmF0Y2hlZFVwZGF0ZXNgIGluIGxlZ2FjeSBtb2RlLiBPbmx5XG4gICAgICAvLyBzZXQgdG8gYHRydWVgIHdoaWxlIHRoZSBnaXZlbiBjYWxsYmFjayBpcyBleGVjdXRlZCwgbm90IGZvciB1cGRhdGVzXG4gICAgICAvLyB0cmlnZ2VyZWQgZHVyaW5nIGFuIGFzeW5jIGV2ZW50LCBiZWNhdXNlIHRoaXMgaXMgaG93IHRoZSBsZWdhY3lcbiAgICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIGBhY3RgIGJlaGF2ZWQuXG4gICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5ID0gdHJ1ZTtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7IC8vIFJlcGxpY2F0ZSBiZWhhdmlvciBvZiBvcmlnaW5hbCBgYWN0YCBpbXBsZW1lbnRhdGlvbiBpbiBsZWdhY3kgbW9kZSxcbiAgICAgIC8vIHdoaWNoIGZsdXNoZWQgdXBkYXRlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgc2NvcGUgZnVuY3Rpb24gZXhpdHMsIGV2ZW5cbiAgICAgIC8vIGlmIGl0J3MgYW4gYXN5bmMgZnVuY3Rpb24uXG5cbiAgICAgIGlmICghcHJldklzQmF0Y2hpbmdMZWdhY3kgJiYgUmVhY3RDdXJyZW50QWN0UXVldWUuZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGUpIHtcbiAgICAgICAgdmFyIHF1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudDtcblxuICAgICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5kaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5ID0gcHJldklzQmF0Y2hpbmdMZWdhY3k7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0aGVuYWJsZVJlc3VsdCA9IHJlc3VsdDsgLy8gVGhlIGNhbGxiYWNrIGlzIGFuIGFzeW5jIGZ1bmN0aW9uIChpLmUuIHJldHVybmVkIGEgcHJvbWlzZSkuIFdhaXRcbiAgICAgIC8vIGZvciBpdCB0byByZXNvbHZlIGJlZm9yZSBleGl0aW5nIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICAgICB2YXIgd2FzQXdhaXRlZCA9IGZhbHNlO1xuICAgICAgdmFyIHRoZW5hYmxlID0ge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgd2FzQXdhaXRlZCA9IHRydWU7XG4gICAgICAgICAgdGhlbmFibGVSZXN1bHQudGhlbihmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKTtcblxuICAgICAgICAgICAgaWYgKGFjdFNjb3BlRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgLy8gV2UndmUgZXhpdGVkIHRoZSBvdXRlcm1vc3QgYWN0IHNjb3BlLiBSZWN1cnNpdmVseSBmbHVzaCB0aGVcbiAgICAgICAgICAgICAgLy8gcXVldWUgdW50aWwgdGhlcmUncyBubyByZW1haW5pbmcgd29yay5cbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLlxuICAgICAgICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAge1xuICAgICAgICBpZiAoIWRpZFdhcm5Ob0F3YWl0QWN0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge30pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF3YXNBd2FpdGVkKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5Ob0F3YWl0QWN0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBlcnJvcignWW91IGNhbGxlZCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aXRob3V0IGF3YWl0LiAnICsgJ1RoaXMgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHRlc3RpbmcgYmVoYXZpb3VyLCAnICsgJ2ludGVybGVhdmluZyBtdWx0aXBsZSBhY3QgY2FsbHMgYW5kIG1peGluZyB0aGVpciAnICsgJ3Njb3Blcy4gJyArICdZb3Ugc2hvdWxkIC0gYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLik7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWUgPSByZXN1bHQ7IC8vIFRoZSBjYWxsYmFjayBpcyBub3QgYW4gYXN5bmMgZnVuY3Rpb24uIEV4aXQgdGhlIGN1cnJlbnQgc2NvcGVcbiAgICAgIC8vIGltbWVkaWF0ZWx5LCB3aXRob3V0IGF3YWl0aW5nLlxuXG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0U2NvcGVEZXB0aCk7XG5cbiAgICAgIGlmIChhY3RTY29wZURlcHRoID09PSAwKSB7XG4gICAgICAgIC8vIEV4aXRpbmcgdGhlIG91dGVybW9zdCBhY3Qgc2NvcGUuIEZsdXNoIHRoZSBxdWV1ZS5cbiAgICAgICAgdmFyIF9xdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKF9xdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZsdXNoQWN0UXVldWUoX3F1ZXVlKTtcbiAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSAvLyBSZXR1cm4gYSB0aGVuYWJsZS4gSWYgdGhlIHVzZXIgYXdhaXRzIGl0LCB3ZSdsbCBmbHVzaCBhZ2FpbiBpblxuICAgICAgICAvLyBjYXNlIGFkZGl0aW9uYWwgd29yayB3YXMgc2NoZWR1bGVkIGJ5IGEgbWljcm90YXNrLlxuXG5cbiAgICAgICAgdmFyIF90aGVuYWJsZSA9IHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAvLyBDb25maXJtIHdlIGhhdmVuJ3QgcmUtZW50ZXJlZCBhbm90aGVyIGBhY3RgIHNjb3BlLCBpbiBjYXNlXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBkb2VzIHNvbWV0aGluZyB3ZWlyZCBsaWtlIGF3YWl0IHRoZSB0aGVuYWJsZVxuICAgICAgICAgICAgLy8gbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmbHVzaCB0aGUgcXVldWUgdW50aWwgdGhlcmUncyBubyByZW1haW5pbmcgd29yay5cbiAgICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IFtdO1xuICAgICAgICAgICAgICByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoZW5hYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2luY2Ugd2UncmUgaW5zaWRlIGEgbmVzdGVkIGBhY3RgIHNjb3BlLCB0aGUgcmV0dXJuZWQgdGhlbmFibGVcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkgcmVzb2x2ZXMuIFRoZSBvdXRlciBzY29wZSB3aWxsIGZsdXNoIHRoZSBxdWV1ZS5cbiAgICAgICAgdmFyIF90aGVuYWJsZTIgPSB7XG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoZW5hYmxlMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpIHtcbiAge1xuICAgIGlmIChwcmV2QWN0U2NvcGVEZXB0aCAhPT0gYWN0U2NvcGVEZXB0aCAtIDEpIHtcbiAgICAgIGVycm9yKCdZb3Ugc2VlbSB0byBoYXZlIG92ZXJsYXBwaW5nIGFjdCgpIGNhbGxzLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnQmUgc3VyZSB0byBhd2FpdCBwcmV2aW91cyBhY3QoKSBjYWxscyBiZWZvcmUgbWFraW5nIGEgbmV3IG9uZS4gJyk7XG4gICAgfVxuXG4gICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCkge1xuICB7XG4gICAgdmFyIHF1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudDtcblxuICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSk7XG4gICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBObyBhZGRpdGlvbmFsIHdvcmsgd2FzIHNjaGVkdWxlZC4gRmluaXNoLlxuICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gS2VlcCBmbHVzaGluZyB3b3JrIHVudGlsIHRoZXJlJ3Mgbm9uZSBsZWZ0LlxuICAgICAgICAgICAgcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0ZsdXNoaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQWN0UXVldWUocXVldWUpIHtcbiAge1xuICAgIGlmICghaXNGbHVzaGluZykge1xuICAgICAgLy8gUHJldmVudCByZS1lbnRyYW5jZS5cbiAgICAgIGlzRmx1c2hpbmcgPSB0cnVlO1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG5cbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKHRydWUpO1xuICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIHF1ZXVlID0gcXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG5leHBvcnRzLlN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBSZWFjdFNoYXJlZEludGVybmFscztcbmV4cG9ydHMuY2xvbmVFbGVtZW50ID0gY2xvbmVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0O1xuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVGYWN0b3J5ID0gY3JlYXRlRmFjdG9yeTtcbmV4cG9ydHMuY3JlYXRlUmVmID0gY3JlYXRlUmVmO1xuZXhwb3J0cy5mb3J3YXJkUmVmID0gZm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnQgPSBpc1ZhbGlkRWxlbWVudDtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLm1lbW8gPSBtZW1vO1xuZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBzdGFydFRyYW5zaXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2FjdCA9IGFjdDtcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gdXNlRGVmZXJyZWRWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJZCA9IHVzZUlkO1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0ID0gdXNlSW5zZXJ0aW9uRWZmZWN0O1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlO1xuZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gdXNlVHJhbnNpdGlvbjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgICAgICAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgPT09XG4gICAgJ2Z1bmN0aW9uJ1xuKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgIFxuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKiogQG1vZHVsZSBTZWUgYHJvbGx1cC5jb25maWcuanNgIGZvciB3aGF0IHRoaXMgZmlsZSBkb2VzLiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3Q7XG4vLyBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGlzdCBhbGwgdGhlIG5hbWVzIGJlY2F1c2UgJ3JlYWN0JyBpcyBhIENvbW1vbkpTIG1vZHVsZSBmb3Igd2hpY2hcbi8vIGBleHBvcnQgKiBmcm9tYCBkb2VzIG5vdCB3b3JrLlxuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgQ29tcG9uZW50LCBjcmVhdGVDb250ZXh0LCBjcmVhdGVFbGVtZW50LCBjcmVhdGVGYWN0b3J5LCBjcmVhdGVSZWYsIGZvcndhcmRSZWYsIEZyYWdtZW50LCBpc1ZhbGlkRWxlbWVudCwgbGF6eSwgbWVtbywgUHJvZmlsZXIsIFB1cmVDb21wb25lbnQsIHN0YXJ0VHJhbnNpdGlvbiwgU3RyaWN0TW9kZSwgU3VzcGVuc2UsIFxuLy8gQHRzLWlnbm9yZVxudW5zdGFibGVfYWN0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRGVidWdWYWx1ZSwgdXNlRGVmZXJyZWRWYWx1ZSwgdXNlRWZmZWN0LCB1c2VJZCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlSW5zZXJ0aW9uRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZHVjZXIsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZVN5bmNFeHRlcm5hbFN0b3JlLCB1c2VUcmFuc2l0aW9uLCB2ZXJzaW9uLCBcbi8vIEB0cy1pZ25vcmVcbl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB7IENoaWxkcmVuLCBDb21wb25lbnQsIEZyYWdtZW50LCBQcm9maWxlciwgUHVyZUNvbXBvbmVudCwgU3RyaWN0TW9kZSwgU3VzcGVuc2UsIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELCBjbG9uZUVsZW1lbnQsIGNyZWF0ZUNvbnRleHQsIGNyZWF0ZUVsZW1lbnQsIGNyZWF0ZUZhY3RvcnksIGNyZWF0ZVJlZiwgZm9yd2FyZFJlZiwgaXNWYWxpZEVsZW1lbnQsIGxhenksIG1lbW8sIHN0YXJ0VHJhbnNpdGlvbiwgdW5zdGFibGVfYWN0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRGVidWdWYWx1ZSwgdXNlRGVmZXJyZWRWYWx1ZSwgdXNlRWZmZWN0LCB1c2VJZCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlSW5zZXJ0aW9uRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZHVjZXIsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZVN5bmNFeHRlcm5hbFN0b3JlLCB1c2VUcmFuc2l0aW9uLCB2ZXJzaW9uLCB9O1xuIl0sIm5hbWVzIjpbInJlcXVpcmUkJDAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBO0NBQzJDO0FBQzNDLEdBQUUsQ0FBQyxXQUFXO0FBR2Q7QUFDQTtBQUNBLENBQUE7R0FDRSxPQUFPLDhCQUE4QixLQUFLLFdBQVc7R0FDckQsT0FBTyw4QkFBOEIsQ0FBQywyQkFBMkI7QUFDbkUsS0FBSSxVQUFVO0dBQ1o7R0FDQSw4QkFBOEIsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDekU7QUFDRCxXQUFVLElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBQ0EsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0NBQ3JELElBQUksaUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztDQUNuRCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztDQUN2RCxJQUFJLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztDQUM3RCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdC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