tnp-helpers 18.0.20 → 18.0.21

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 (521) hide show
  1. package/browser/esm2022/lib/base/classes/base-bower-json.mjs +14 -0
  2. package/browser/esm2022/lib/base/classes/base-cli-worker-config.mjs +1 -4
  3. package/browser/esm2022/lib/base/classes/base-cli-worker-controller.mjs +1 -1
  4. package/browser/esm2022/lib/base/classes/base-cli-worker.mjs +10 -2
  5. package/browser/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +5 -5
  6. package/browser/esm2022/lib/base/classes/base-feature-for-project.mjs +4 -1
  7. package/browser/esm2022/lib/base/classes/base-git.mjs +229 -4
  8. package/browser/esm2022/lib/base/classes/base-json-file-reader.mjs +114 -0
  9. package/browser/esm2022/lib/base/classes/base-library-build.mjs +11 -7
  10. package/browser/esm2022/lib/base/classes/base-linked-projects.mjs +8 -5
  11. package/browser/esm2022/lib/base/classes/base-node-modules.mjs +495 -0
  12. package/browser/esm2022/lib/base/classes/base-npm-helpers.mjs +32 -429
  13. package/browser/esm2022/lib/base/classes/base-package-json.mjs +340 -0
  14. package/browser/esm2022/lib/base/classes/base-process-manager.mjs +285 -0
  15. package/browser/esm2022/lib/base/classes/base-project-resolver.mjs +2 -11
  16. package/browser/esm2022/lib/base/classes/base-project.mjs +76 -61
  17. package/browser/esm2022/lib/base/classes/base-quick-fixes.mjs +44 -1
  18. package/browser/esm2022/lib/base/classes/base-release-process.mjs +44 -11
  19. package/browser/esm2022/lib/base/classes/{base-github-pages.mjs → base-static-pages.mjs} +6 -6
  20. package/browser/esm2022/lib/base/classes/base-vscode.mjs +29 -1
  21. package/browser/esm2022/lib/base/classes/index.mjs +5 -1
  22. package/browser/esm2022/lib/base/commit-data.mjs +19 -1
  23. package/browser/esm2022/lib/base/core-project.mjs +3 -3
  24. package/browser/esm2022/lib/base/linked-project.mjs +4 -4
  25. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -4
  26. package/browser/esm2022/lib/base/translate.mjs +566 -0
  27. package/browser/esm2022/lib/helpers/helpers-array-obj.mjs +5 -10
  28. package/browser/esm2022/lib/helpers/helpers.mjs +12 -6
  29. package/browser/esm2022/lib/index.mjs +2 -1
  30. package/browser/esm2022/lib/models.mjs +173 -3
  31. package/browser/esm2022/lib/utils.mjs +402 -41
  32. package/browser/fesm2022/tnp-helpers.mjs +4619 -2888
  33. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  34. package/browser/lib/base/classes/base-bower-json.d.ts +35 -0
  35. package/browser/lib/base/classes/base-cli-worker.d.ts +1 -1
  36. package/browser/lib/base/classes/base-debounce-compiler-for-project.d.ts +5 -5
  37. package/browser/lib/base/classes/base-feature-for-project.d.ts +2 -1
  38. package/browser/lib/base/classes/base-git.d.ts +34 -5
  39. package/browser/lib/base/classes/base-json-file-reader.d.ts +72 -0
  40. package/browser/lib/base/classes/base-library-build.d.ts +5 -5
  41. package/browser/lib/base/classes/base-linked-projects.d.ts +1 -2
  42. package/browser/lib/base/classes/base-node-modules.d.ts +56 -0
  43. package/browser/lib/base/classes/base-npm-helpers.d.ts +29 -112
  44. package/browser/lib/base/classes/base-package-json.d.ts +107 -0
  45. package/browser/lib/base/classes/base-process-manager.d.ts +31 -0
  46. package/browser/lib/base/classes/base-project-resolver.d.ts +2 -2
  47. package/browser/lib/base/classes/base-project.d.ts +14 -16
  48. package/browser/lib/base/classes/base-quick-fixes.d.ts +3 -1
  49. package/browser/lib/base/classes/base-release-process.d.ts +8 -9
  50. package/browser/lib/base/classes/{base-github-pages.d.ts → base-static-pages.d.ts} +3 -3
  51. package/browser/lib/base/classes/base-vscode.d.ts +4 -0
  52. package/browser/lib/base/classes/index.d.ts +5 -1
  53. package/browser/lib/base/commit-data.d.ts +14 -1
  54. package/browser/lib/base/linked-project.d.ts +1 -1
  55. package/browser/lib/base/tcp-udp-ports/ports.entity.d.ts +1 -1
  56. package/browser/lib/base/translate.d.ts +228 -0
  57. package/browser/lib/helpers/helpers-array-obj.d.ts +3 -0
  58. package/browser/lib/helpers/helpers.d.ts +12 -8
  59. package/browser/lib/models.d.ts +68 -2
  60. package/browser/lib/utils.d.ts +72 -13
  61. package/client/esm2022/lib/base/classes/base-bower-json.mjs +14 -0
  62. package/client/esm2022/lib/base/classes/base-cli-worker-config.mjs +1 -4
  63. package/client/esm2022/lib/base/classes/base-cli-worker-controller.mjs +1 -1
  64. package/client/esm2022/lib/base/classes/base-cli-worker.mjs +10 -2
  65. package/client/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +5 -5
  66. package/client/esm2022/lib/base/classes/base-feature-for-project.mjs +4 -1
  67. package/client/esm2022/lib/base/classes/base-git.mjs +229 -4
  68. package/client/esm2022/lib/base/classes/base-json-file-reader.mjs +114 -0
  69. package/client/esm2022/lib/base/classes/base-library-build.mjs +11 -7
  70. package/client/esm2022/lib/base/classes/base-linked-projects.mjs +8 -5
  71. package/client/esm2022/lib/base/classes/base-node-modules.mjs +495 -0
  72. package/client/esm2022/lib/base/classes/base-npm-helpers.mjs +32 -429
  73. package/client/esm2022/lib/base/classes/base-package-json.mjs +340 -0
  74. package/client/esm2022/lib/base/classes/base-process-manager.mjs +285 -0
  75. package/client/esm2022/lib/base/classes/base-project-resolver.mjs +2 -11
  76. package/client/esm2022/lib/base/classes/base-project.mjs +76 -61
  77. package/client/esm2022/lib/base/classes/base-quick-fixes.mjs +44 -1
  78. package/client/esm2022/lib/base/classes/base-release-process.mjs +44 -11
  79. package/client/esm2022/lib/base/classes/{base-github-pages.mjs → base-static-pages.mjs} +6 -6
  80. package/client/esm2022/lib/base/classes/base-vscode.mjs +29 -1
  81. package/client/esm2022/lib/base/classes/index.mjs +5 -1
  82. package/client/esm2022/lib/base/commit-data.mjs +19 -1
  83. package/client/esm2022/lib/base/core-project.mjs +3 -3
  84. package/client/esm2022/lib/base/linked-project.mjs +4 -4
  85. package/client/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -4
  86. package/client/esm2022/lib/base/translate.mjs +566 -0
  87. package/client/esm2022/lib/helpers/helpers-array-obj.mjs +5 -10
  88. package/client/esm2022/lib/helpers/helpers.mjs +12 -6
  89. package/client/esm2022/lib/index.mjs +2 -1
  90. package/client/esm2022/lib/models.mjs +173 -3
  91. package/client/esm2022/lib/utils.mjs +402 -41
  92. package/client/fesm2022/tnp-helpers.mjs +4619 -2888
  93. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  94. package/client/lib/base/classes/base-bower-json.d.ts +35 -0
  95. package/client/lib/base/classes/base-cli-worker.d.ts +1 -1
  96. package/client/lib/base/classes/base-debounce-compiler-for-project.d.ts +5 -5
  97. package/client/lib/base/classes/base-feature-for-project.d.ts +2 -1
  98. package/client/lib/base/classes/base-git.d.ts +34 -5
  99. package/client/lib/base/classes/base-json-file-reader.d.ts +72 -0
  100. package/client/lib/base/classes/base-library-build.d.ts +5 -5
  101. package/client/lib/base/classes/base-linked-projects.d.ts +1 -2
  102. package/client/lib/base/classes/base-node-modules.d.ts +56 -0
  103. package/client/lib/base/classes/base-npm-helpers.d.ts +29 -112
  104. package/client/lib/base/classes/base-package-json.d.ts +107 -0
  105. package/client/lib/base/classes/base-process-manager.d.ts +31 -0
  106. package/client/lib/base/classes/base-project-resolver.d.ts +2 -2
  107. package/client/lib/base/classes/base-project.d.ts +14 -16
  108. package/client/lib/base/classes/base-quick-fixes.d.ts +3 -1
  109. package/client/lib/base/classes/base-release-process.d.ts +8 -9
  110. package/{websql/lib/base/classes/base-github-pages.d.ts → client/lib/base/classes/base-static-pages.d.ts} +3 -3
  111. package/client/lib/base/classes/base-vscode.d.ts +4 -0
  112. package/client/lib/base/classes/index.d.ts +5 -1
  113. package/client/lib/base/commit-data.d.ts +14 -1
  114. package/client/lib/base/linked-project.d.ts +1 -1
  115. package/client/lib/base/tcp-udp-ports/ports.entity.d.ts +1 -1
  116. package/client/lib/base/translate.d.ts +228 -0
  117. package/client/lib/helpers/helpers-array-obj.d.ts +3 -0
  118. package/client/lib/helpers/helpers.d.ts +12 -8
  119. package/client/lib/models.d.ts +68 -2
  120. package/client/lib/utils.d.ts +72 -13
  121. package/index.js +15 -2
  122. package/index.js.map +1 -1
  123. package/lib/base/base-cli-worker-config.d.ts +27 -0
  124. package/lib/base/base-cli-worker-config.js +53 -0
  125. package/lib/base/base-cli-worker-config.js.map +1 -0
  126. package/lib/base/base-cli-worker-controller.d.ts +15 -0
  127. package/lib/base/base-cli-worker-controller.js +154 -0
  128. package/lib/base/base-cli-worker-controller.js.map +1 -0
  129. package/lib/base/base-cli-worker.d.ts +82 -0
  130. package/lib/base/base-cli-worker.js +654 -0
  131. package/lib/base/base-cli-worker.js.map +1 -0
  132. package/lib/base/base-command-line.backend.d.ts +174 -0
  133. package/lib/base/base-command-line.backend.js +2221 -0
  134. package/lib/base/base-command-line.backend.js.map +1 -0
  135. package/lib/base/base-compiler-for-project.d.ts +7 -0
  136. package/lib/base/base-compiler-for-project.js +62 -0
  137. package/lib/base/base-compiler-for-project.js.map +1 -0
  138. package/lib/base/base-db.d.ts +12 -0
  139. package/lib/base/base-db.js +74 -0
  140. package/lib/base/base-db.js.map +1 -0
  141. package/lib/base/base-debounce-compiler-for-project.d.ts +28 -0
  142. package/lib/base/base-debounce-compiler-for-project.js +82 -0
  143. package/lib/base/base-debounce-compiler-for-project.js.map +1 -0
  144. package/lib/base/base-detached-service.d.ts +6 -0
  145. package/lib/base/base-detached-service.js +16 -0
  146. package/lib/base/base-detached-service.js.map +1 -0
  147. package/lib/base/base-feature-for-project.d.ts +5 -0
  148. package/lib/base/base-feature-for-project.js +11 -0
  149. package/lib/base/base-feature-for-project.js.map +1 -0
  150. package/lib/base/base-git.d.ts +148 -0
  151. package/lib/base/base-git.js +1202 -0
  152. package/lib/base/base-git.js.map +1 -0
  153. package/{client/lib/base/classes → lib/base}/base-github-pages.d.ts +4 -5
  154. package/lib/base/base-github-pages.js +173 -0
  155. package/lib/base/base-github-pages.js.map +1 -0
  156. package/lib/base/base-ignore-hide.d.ts +14 -0
  157. package/lib/base/base-ignore-hide.js +55 -0
  158. package/lib/base/base-ignore-hide.js.map +1 -0
  159. package/lib/base/base-library-build.d.ts +65 -0
  160. package/lib/base/base-library-build.js +717 -0
  161. package/lib/base/base-library-build.js.map +1 -0
  162. package/lib/base/base-linked-projects.d.ts +24 -0
  163. package/lib/base/base-linked-projects.js +408 -0
  164. package/lib/base/base-linked-projects.js.map +1 -0
  165. package/lib/base/base-npm-helpers.d.ts +128 -0
  166. package/lib/base/base-npm-helpers.js +774 -0
  167. package/lib/base/base-npm-helpers.js.map +1 -0
  168. package/lib/base/base-project-resolver.d.ts +41 -0
  169. package/lib/base/base-project-resolver.js +308 -0
  170. package/lib/base/base-project-resolver.js.map +1 -0
  171. package/lib/base/base-project.d.ts +244 -0
  172. package/lib/base/base-project.js +1223 -0
  173. package/lib/base/base-project.js.map +1 -0
  174. package/lib/base/base-quick-fixes.d.ts +6 -0
  175. package/lib/base/base-quick-fixes.js +31 -0
  176. package/lib/base/base-quick-fixes.js.map +1 -0
  177. package/lib/base/base-release-process.d.ts +69 -0
  178. package/lib/base/base-release-process.js +913 -0
  179. package/lib/base/base-release-process.js.map +1 -0
  180. package/lib/base/base-start-config.backend.d.ts +36 -0
  181. package/lib/base/base-start-config.backend.js +167 -0
  182. package/lib/base/base-start-config.backend.js.map +1 -0
  183. package/lib/base/base-vscode.d.ts +12 -0
  184. package/lib/base/base-vscode.js +139 -0
  185. package/lib/base/base-vscode.js.map +1 -0
  186. package/lib/base/classes/base-bower-json.d.ts +34 -0
  187. package/lib/base/classes/base-bower-json.js +19 -0
  188. package/lib/base/classes/base-bower-json.js.map +1 -0
  189. package/lib/base/classes/base-cli-worker-config.js +35 -24
  190. package/lib/base/classes/base-cli-worker-config.js.map +1 -1
  191. package/lib/base/classes/base-cli-worker-controller.js +98 -128
  192. package/lib/base/classes/base-cli-worker-controller.js.map +1 -1
  193. package/lib/base/classes/base-cli-worker.d.ts +1 -1
  194. package/lib/base/classes/base-cli-worker.js +402 -610
  195. package/lib/base/classes/base-cli-worker.js.map +1 -1
  196. package/lib/base/classes/base-command-line-feature.backend.d.ts +5 -9
  197. package/lib/base/classes/base-command-line-feature.backend.js +73 -132
  198. package/lib/base/classes/base-command-line-feature.backend.js.map +1 -1
  199. package/lib/base/classes/base-command-line.backend.d.ts +175 -0
  200. package/lib/base/classes/base-command-line.backend.js +2235 -0
  201. package/lib/base/classes/base-command-line.backend.js.map +1 -0
  202. package/lib/base/classes/base-compiler-for-project.js +27 -32
  203. package/lib/base/classes/base-compiler-for-project.js.map +1 -1
  204. package/lib/base/classes/base-db.js +43 -60
  205. package/lib/base/classes/base-db.js.map +1 -1
  206. package/lib/base/classes/base-debounce-compiler-for-project.d.ts +5 -5
  207. package/lib/base/classes/base-debounce-compiler-for-project.js +44 -70
  208. package/lib/base/classes/base-debounce-compiler-for-project.js.map +1 -1
  209. package/lib/base/classes/base-detached-service.js.map +1 -1
  210. package/lib/base/classes/base-feature-for-project.d.ts +2 -1
  211. package/lib/base/classes/base-feature-for-project.js +7 -4
  212. package/lib/base/classes/base-feature-for-project.js.map +1 -1
  213. package/lib/base/classes/base-git.d.ts +32 -3
  214. package/lib/base/classes/base-git.js +885 -975
  215. package/lib/base/classes/base-git.js.map +1 -1
  216. package/lib/base/classes/base-github-pages.js.map +1 -1
  217. package/lib/base/classes/base-global-command-line.backend.d.ts +7 -2
  218. package/lib/base/classes/base-global-command-line.backend.js +1055 -2021
  219. package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
  220. package/lib/base/classes/base-ignore-hide.d.ts +2 -2
  221. package/lib/base/classes/base-ignore-hide.js +24 -28
  222. package/lib/base/classes/base-ignore-hide.js.map +1 -1
  223. package/lib/base/classes/base-json-file-reader.d.ts +71 -0
  224. package/lib/base/classes/base-json-file-reader.js +141 -0
  225. package/lib/base/classes/base-json-file-reader.js.map +1 -0
  226. package/lib/base/classes/base-library-build.d.ts +5 -6
  227. package/lib/base/classes/base-library-build.js +431 -653
  228. package/lib/base/classes/base-library-build.js.map +1 -1
  229. package/lib/base/classes/base-linked-projects.d.ts +1 -3
  230. package/lib/base/classes/base-linked-projects.js +200 -314
  231. package/lib/base/classes/base-linked-projects.js.map +1 -1
  232. package/lib/base/classes/base-node-modules.d.ts +55 -0
  233. package/lib/base/classes/base-node-modules.js +415 -0
  234. package/lib/base/classes/base-node-modules.js.map +1 -0
  235. package/lib/base/classes/base-npm-helpers.d.ts +29 -99
  236. package/lib/base/classes/base-npm-helpers.js +178 -737
  237. package/lib/base/classes/base-npm-helpers.js.map +1 -1
  238. package/lib/base/classes/base-package-json.d.ts +106 -0
  239. package/lib/base/classes/base-package-json.js +381 -0
  240. package/lib/base/classes/base-package-json.js.map +1 -0
  241. package/lib/base/classes/base-process-manager.d.ts +30 -0
  242. package/lib/base/classes/base-process-manager.js +269 -0
  243. package/lib/base/classes/base-process-manager.js.map +1 -0
  244. package/lib/base/classes/base-project-resolver.d.ts +2 -3
  245. package/lib/base/classes/base-project-resolver.js +102 -119
  246. package/lib/base/classes/base-project-resolver.js.map +1 -1
  247. package/lib/base/classes/base-project.d.ts +17 -15
  248. package/lib/base/classes/base-project.js +551 -733
  249. package/lib/base/classes/base-project.js.map +1 -1
  250. package/lib/base/classes/base-quick-fixes.d.ts +3 -1
  251. package/lib/base/classes/base-quick-fixes.js +45 -17
  252. package/lib/base/classes/base-quick-fixes.js.map +1 -1
  253. package/lib/base/classes/base-release-process.d.ts +8 -9
  254. package/lib/base/classes/base-release-process.js +482 -757
  255. package/lib/base/classes/base-release-process.js.map +1 -1
  256. package/lib/base/classes/base-start-config.backend.js +115 -99
  257. package/lib/base/classes/base-start-config.backend.js.map +1 -1
  258. package/lib/base/classes/base-static-pages.d.ts +14 -0
  259. package/lib/base/classes/base-static-pages.js +105 -0
  260. package/lib/base/classes/base-static-pages.js.map +1 -0
  261. package/lib/base/classes/base-vscode.d.ts +4 -0
  262. package/lib/base/classes/base-vscode.js +446 -426
  263. package/lib/base/classes/base-vscode.js.map +1 -1
  264. package/lib/base/classes/index copy.d.ts +22 -0
  265. package/lib/base/classes/index copy.js +28 -0
  266. package/lib/base/classes/index copy.js.map +1 -0
  267. package/lib/base/classes/index.d.ts +4 -0
  268. package/lib/base/classes/index.js +36 -19
  269. package/lib/base/classes/index.js.map +1 -1
  270. package/lib/base/command-line-feature.backend.d.ts +51 -0
  271. package/lib/base/command-line-feature.backend.js +206 -0
  272. package/lib/base/command-line-feature.backend.js.map +1 -0
  273. package/lib/base/commit-data.d.ts +14 -1
  274. package/lib/base/commit-data.js +408 -460
  275. package/lib/base/commit-data.js.map +1 -1
  276. package/lib/base/config-database.js +33 -61
  277. package/lib/base/config-database.js.map +1 -1
  278. package/lib/base/core-project.js +110 -146
  279. package/lib/base/core-project.js.map +1 -1
  280. package/lib/base/gh-temp-code.d.ts +1 -0
  281. package/lib/base/gh-temp-code.js +62 -104
  282. package/lib/base/gh-temp-code.js.map +1 -1
  283. package/lib/base/index-rebuilder.backend.d.ts +1 -0
  284. package/lib/base/index-rebuilder.backend.js.map +1 -1
  285. package/lib/base/index.js +20 -7
  286. package/lib/base/index.js.map +1 -1
  287. package/lib/base/linked-project.d.ts +1 -1
  288. package/lib/base/linked-project.js +59 -38
  289. package/lib/base/linked-project.js.map +1 -1
  290. package/lib/base/ports-worker.d.ts +32 -0
  291. package/lib/base/ports-worker.js +244 -0
  292. package/lib/base/ports-worker.js.map +1 -0
  293. package/lib/base/project-database.js +12 -22
  294. package/lib/base/project-database.js.map +1 -1
  295. package/lib/base/tcp-udp-ports/index.js +17 -4
  296. package/lib/base/tcp-udp-ports/index.js.map +1 -1
  297. package/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +1 -0
  298. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -2
  299. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js.map +1 -1
  300. package/lib/base/tcp-udp-ports/port.entity.d.ts +0 -0
  301. package/lib/base/tcp-udp-ports/port.entity.js +5 -0
  302. package/lib/base/tcp-udp-ports/port.entity.js.map +1 -0
  303. package/lib/base/tcp-udp-ports/ports.controller.js +195 -283
  304. package/lib/base/tcp-udp-ports/ports.controller.js.map +1 -1
  305. package/lib/base/tcp-udp-ports/ports.entity.d.ts +2 -2
  306. package/lib/base/tcp-udp-ports/ports.entity.js +74 -62
  307. package/lib/base/tcp-udp-ports/ports.entity.js.map +1 -1
  308. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +11 -14
  309. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
  310. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +244 -427
  311. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
  312. package/lib/base/tcp-upd-ports.worker.d.ts +13 -0
  313. package/lib/base/tcp-upd-ports.worker.js +99 -0
  314. package/lib/base/tcp-upd-ports.worker.js.map +1 -0
  315. package/lib/base/translate.d.ts +1 -1
  316. package/lib/base/translate.js +90 -119
  317. package/lib/base/translate.js.map +1 -1
  318. package/lib/build-info._auto-generated_.js.map +1 -1
  319. package/lib/helpers/for-backend/helpers-cli-tool.backend.js +109 -115
  320. package/lib/helpers/for-backend/helpers-cli-tool.backend.js.map +1 -1
  321. package/lib/helpers/for-backend/helpers-console-gui.js +55 -102
  322. package/lib/helpers/for-backend/helpers-console-gui.js.map +1 -1
  323. package/lib/helpers/for-backend/helpers-dependencies.backend.js +28 -45
  324. package/lib/helpers/for-backend/helpers-dependencies.backend.js.map +1 -1
  325. package/lib/helpers/for-backend/helpers-file-folders.backend.d.ts +2 -2
  326. package/lib/helpers/for-backend/helpers-file-folders.backend.js +277 -266
  327. package/lib/helpers/for-backend/helpers-file-folders.backend.js.map +1 -1
  328. package/lib/helpers/for-backend/helpers-git.backend.d.ts +28 -3
  329. package/lib/helpers/for-backend/helpers-git.backend.js +804 -864
  330. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
  331. package/lib/helpers/for-backend/helpers-network.backend.js +15 -18
  332. package/lib/helpers/for-backend/helpers-network.backend.js.map +1 -1
  333. package/lib/helpers/for-backend/helpers-npm.backend.js +5 -8
  334. package/lib/helpers/for-backend/helpers-npm.backend.js.map +1 -1
  335. package/lib/helpers/for-backend/helpers-path.backend.js +18 -26
  336. package/lib/helpers/for-backend/helpers-path.backend.js.map +1 -1
  337. package/lib/helpers/for-backend/helpers-process.backend.d.ts +2 -2
  338. package/lib/helpers/for-backend/helpers-process.backend.js +285 -363
  339. package/lib/helpers/for-backend/helpers-process.backend.js.map +1 -1
  340. package/lib/helpers/for-backend/helpers-system-terminal.backend.js +25 -42
  341. package/lib/helpers/for-backend/helpers-system-terminal.backend.js.map +1 -1
  342. package/lib/helpers/for-backend/helpers-vscode.backend.js +9 -12
  343. package/lib/helpers/for-backend/helpers-vscode.backend.js.map +1 -1
  344. package/lib/helpers/for-backend/ts-code/index.js +0 -2
  345. package/lib/helpers/for-backend/ts-code/index.js.map +1 -1
  346. package/lib/helpers/for-backend/ts-code/ts-code-extractor.d.ts +26 -0
  347. package/lib/helpers/for-backend/ts-code/ts-code-extractor.js +62 -0
  348. package/lib/helpers/for-backend/ts-code/ts-code-extractor.js.map +1 -0
  349. package/lib/helpers/for-backend/ts-code/ts-code-modifier.backend.d.ts +19 -0
  350. package/lib/helpers/for-backend/ts-code/ts-code-modifier.backend.js +81 -0
  351. package/lib/helpers/for-backend/ts-code/ts-code-modifier.backend.js.map +1 -0
  352. package/lib/helpers/for-backend/ts-code/ts-import-export-extractor.js +2 -2
  353. package/lib/helpers/for-backend/ts-code/ts-import-export-extractor.js.map +1 -1
  354. package/lib/helpers/for-browser/angular.helper.js +2 -2
  355. package/lib/helpers/for-browser/angular.helper.js.map +1 -1
  356. package/lib/helpers/for-browser/helpers-browser.js +27 -40
  357. package/lib/helpers/for-browser/helpers-browser.js.map +1 -1
  358. package/lib/helpers/helpers-array-obj.d.ts +3 -0
  359. package/lib/helpers/helpers-array-obj.js +49 -61
  360. package/lib/helpers/helpers-array-obj.js.map +1 -1
  361. package/lib/helpers/helpers-json5.backend.js +44 -55
  362. package/lib/helpers/helpers-json5.backend.js.map +1 -1
  363. package/lib/helpers/helpers-numbers.js +7 -10
  364. package/lib/helpers/helpers-numbers.js.map +1 -1
  365. package/lib/helpers/helpers-strings-regexes.js +40 -47
  366. package/lib/helpers/helpers-strings-regexes.js.map +1 -1
  367. package/lib/helpers/helpers-strings.js +38 -41
  368. package/lib/helpers/helpers-strings.js.map +1 -1
  369. package/lib/helpers/helpers.d.ts +12 -8
  370. package/lib/helpers/helpers.js +313 -393
  371. package/lib/helpers/helpers.js.map +1 -1
  372. package/lib/index._auto-generated_.d.ts +1 -0
  373. package/lib/index._auto-generated_.js.map +1 -1
  374. package/lib/index.d.ts +2 -1
  375. package/lib/index.js +21 -7
  376. package/lib/index.js.map +1 -1
  377. package/lib/lowdb/adapters/Memory.js +14 -20
  378. package/lib/lowdb/adapters/Memory.js.map +1 -1
  379. package/lib/lowdb/adapters/browser/LocalStorage.js +5 -8
  380. package/lib/lowdb/adapters/browser/LocalStorage.js.map +1 -1
  381. package/lib/lowdb/adapters/browser/SessionStorage.js +5 -8
  382. package/lib/lowdb/adapters/browser/SessionStorage.js.map +1 -1
  383. package/lib/lowdb/adapters/browser/WebStorage.js +10 -9
  384. package/lib/lowdb/adapters/browser/WebStorage.js.map +1 -1
  385. package/lib/lowdb/adapters/node/DataFile.js +29 -38
  386. package/lib/lowdb/adapters/node/DataFile.js.map +1 -1
  387. package/lib/lowdb/adapters/node/JSONFile.js +13 -18
  388. package/lib/lowdb/adapters/node/JSONFile.js.map +1 -1
  389. package/lib/lowdb/adapters/node/TextFile.js +36 -44
  390. package/lib/lowdb/adapters/node/TextFile.js.map +1 -1
  391. package/lib/lowdb/adapters/node/steno.js +72 -122
  392. package/lib/lowdb/adapters/node/steno.js.map +1 -1
  393. package/lib/lowdb/browser.js +17 -4
  394. package/lib/lowdb/browser.js.map +1 -1
  395. package/lib/lowdb/core/Low.js +30 -60
  396. package/lib/lowdb/core/Low.js.map +1 -1
  397. package/lib/lowdb/examples/browser.js.map +1 -1
  398. package/lib/lowdb/examples/cli.d.ts +1 -0
  399. package/lib/lowdb/examples/cli.js.map +1 -1
  400. package/lib/lowdb/examples/in-memory.d.ts +1 -0
  401. package/lib/lowdb/examples/in-memory.js.map +1 -1
  402. package/lib/lowdb/examples/server.d.ts +1 -0
  403. package/lib/lowdb/examples/server.js.map +1 -1
  404. package/lib/lowdb/index.js +16 -3
  405. package/lib/lowdb/index.js.map +1 -1
  406. package/lib/lowdb/node.js +18 -5
  407. package/lib/lowdb/node.js.map +1 -1
  408. package/lib/lowdb/presets/browser.js +7 -7
  409. package/lib/lowdb/presets/browser.js.map +1 -1
  410. package/lib/lowdb/presets/node.js +12 -23
  411. package/lib/lowdb/presets/node.js.map +1 -1
  412. package/lib/models.d.ts +68 -2
  413. package/lib/models.js +197 -3
  414. package/lib/models.js.map +1 -1
  415. package/lib/old/base-component.d.ts +1 -0
  416. package/lib/old/base-component.js +2 -2
  417. package/lib/old/base-component.js.map +1 -1
  418. package/lib/old/base-formly-component.d.ts +1 -0
  419. package/lib/old/base-formly-component.js +2 -2
  420. package/lib/old/base-formly-component.js.map +1 -1
  421. package/lib/old/condition-wait.d.ts +1 -0
  422. package/lib/old/condition-wait.js.map +1 -1
  423. package/lib/old/dual-component-ctrl.d.ts +1 -0
  424. package/lib/old/dual-component-ctrl.js +2 -2
  425. package/lib/old/dual-component-ctrl.js.map +1 -1
  426. package/lib/old/execute-command.d.ts +11 -0
  427. package/lib/old/execute-command.js +564 -0
  428. package/lib/old/execute-command.js.map +1 -0
  429. package/lib/old/helpers.d.ts +62 -0
  430. package/lib/old/helpers.js +279 -0
  431. package/lib/old/helpers.js.map +1 -0
  432. package/lib/old/models.d.ts +80 -0
  433. package/lib/old/models.js +57 -0
  434. package/lib/old/models.js.map +1 -0
  435. package/lib/utils.d.ts +72 -13
  436. package/lib/utils.js +502 -179
  437. package/lib/utils.js.map +1 -1
  438. package/lib/validators/validators-firedev.js +5 -5
  439. package/lib/validators/validators-firedev.js.map +1 -1
  440. package/lib/validators/validators-git.js +2 -2
  441. package/lib/validators/validators-git.js.map +1 -1
  442. package/lib/validators/validators-network.js +1 -1
  443. package/lib/validators/validators-network.js.map +1 -1
  444. package/lib/validators/validators.js +2 -2
  445. package/lib/validators/validators.js.map +1 -1
  446. package/migrations/1736198527297_init.js +39 -58
  447. package/migrations/1736198527297_init.js.map +1 -1
  448. package/migrations/1736199486472_addingNotAssignablePorts.js +42 -93
  449. package/migrations/1736199486472_addingNotAssignablePorts.js.map +1 -1
  450. package/migrations/1736454437350_addFreePorts.js +48 -100
  451. package/migrations/1736454437350_addFreePorts.js.map +1 -1
  452. package/migrations/index.js +15 -2
  453. package/migrations/index.js.map +1 -1
  454. package/migrations/migrations_index._auto-generated_.js +3 -3
  455. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  456. package/package.json +14 -61
  457. package/src.d.ts +1 -1
  458. package/taon.jsonc +26 -41
  459. package/tmp-environment.json +8 -389
  460. package/websql/esm2022/lib/base/classes/base-bower-json.mjs +14 -0
  461. package/websql/esm2022/lib/base/classes/base-cli-worker-config.mjs +1 -4
  462. package/websql/esm2022/lib/base/classes/base-cli-worker-controller.mjs +1 -1
  463. package/websql/esm2022/lib/base/classes/base-cli-worker.mjs +10 -2
  464. package/websql/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +5 -5
  465. package/websql/esm2022/lib/base/classes/base-feature-for-project.mjs +4 -1
  466. package/websql/esm2022/lib/base/classes/base-git.mjs +229 -4
  467. package/websql/esm2022/lib/base/classes/base-json-file-reader.mjs +114 -0
  468. package/websql/esm2022/lib/base/classes/base-library-build.mjs +11 -7
  469. package/websql/esm2022/lib/base/classes/base-linked-projects.mjs +8 -5
  470. package/websql/esm2022/lib/base/classes/base-node-modules.mjs +495 -0
  471. package/websql/esm2022/lib/base/classes/base-npm-helpers.mjs +32 -429
  472. package/websql/esm2022/lib/base/classes/base-package-json.mjs +340 -0
  473. package/websql/esm2022/lib/base/classes/base-process-manager.mjs +285 -0
  474. package/websql/esm2022/lib/base/classes/base-project-resolver.mjs +2 -10
  475. package/websql/esm2022/lib/base/classes/base-project.mjs +75 -61
  476. package/websql/esm2022/lib/base/classes/base-quick-fixes.mjs +44 -1
  477. package/websql/esm2022/lib/base/classes/base-release-process.mjs +44 -11
  478. package/websql/esm2022/lib/base/classes/{base-github-pages.mjs → base-static-pages.mjs} +6 -6
  479. package/websql/esm2022/lib/base/classes/base-vscode.mjs +29 -1
  480. package/websql/esm2022/lib/base/classes/index.mjs +5 -1
  481. package/websql/esm2022/lib/base/commit-data.mjs +19 -1
  482. package/websql/esm2022/lib/base/core-project.mjs +3 -3
  483. package/websql/esm2022/lib/base/linked-project.mjs +4 -4
  484. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -4
  485. package/websql/esm2022/lib/base/translate.mjs +566 -0
  486. package/websql/esm2022/lib/helpers/helpers-array-obj.mjs +5 -10
  487. package/websql/esm2022/lib/helpers/helpers.mjs +12 -6
  488. package/websql/esm2022/lib/index.mjs +2 -1
  489. package/websql/esm2022/lib/models.mjs +173 -3
  490. package/websql/esm2022/lib/utils.mjs +402 -41
  491. package/websql/fesm2022/tnp-helpers.mjs +4738 -3007
  492. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  493. package/websql/lib/base/classes/base-bower-json.d.ts +35 -0
  494. package/websql/lib/base/classes/base-cli-worker.d.ts +1 -1
  495. package/websql/lib/base/classes/base-debounce-compiler-for-project.d.ts +5 -5
  496. package/websql/lib/base/classes/base-feature-for-project.d.ts +2 -1
  497. package/websql/lib/base/classes/base-git.d.ts +34 -5
  498. package/websql/lib/base/classes/base-json-file-reader.d.ts +72 -0
  499. package/websql/lib/base/classes/base-library-build.d.ts +5 -5
  500. package/websql/lib/base/classes/base-linked-projects.d.ts +1 -2
  501. package/websql/lib/base/classes/base-node-modules.d.ts +56 -0
  502. package/websql/lib/base/classes/base-npm-helpers.d.ts +29 -110
  503. package/websql/lib/base/classes/base-package-json.d.ts +107 -0
  504. package/websql/lib/base/classes/base-process-manager.d.ts +31 -0
  505. package/websql/lib/base/classes/base-project-resolver.d.ts +2 -2
  506. package/websql/lib/base/classes/base-project.d.ts +14 -16
  507. package/websql/lib/base/classes/base-quick-fixes.d.ts +3 -1
  508. package/websql/lib/base/classes/base-release-process.d.ts +8 -9
  509. package/websql/lib/base/classes/base-static-pages.d.ts +15 -0
  510. package/websql/lib/base/classes/base-vscode.d.ts +4 -0
  511. package/websql/lib/base/classes/index.d.ts +5 -1
  512. package/websql/lib/base/commit-data.d.ts +14 -1
  513. package/websql/lib/base/linked-project.d.ts +1 -1
  514. package/websql/lib/base/tcp-udp-ports/ports.entity.d.ts +1 -1
  515. package/websql/lib/base/translate.d.ts +228 -0
  516. package/websql/lib/helpers/helpers-array-obj.d.ts +3 -0
  517. package/websql/lib/helpers/helpers.d.ts +12 -8
  518. package/websql/lib/models.d.ts +68 -2
  519. package/websql/lib/utils.d.ts +72 -13
  520. package/browser/package.json +0 -25
  521. package/websql/package.json +0 -25
@@ -0,0 +1,566 @@
1
+ const iso = {
2
+ aar: 'aa',
3
+ abk: 'ab',
4
+ afr: 'af',
5
+ aka: 'ak',
6
+ alb: 'sq',
7
+ amh: 'am',
8
+ ara: 'ar',
9
+ arg: 'an',
10
+ arm: 'hy',
11
+ asm: 'as',
12
+ ava: 'av',
13
+ ave: 'ae',
14
+ aym: 'ay',
15
+ aze: 'az',
16
+ bak: 'ba',
17
+ bam: 'bm',
18
+ baq: 'eu',
19
+ bel: 'be',
20
+ ben: 'bn',
21
+ bih: 'bh',
22
+ bis: 'bi',
23
+ bos: 'bs',
24
+ bre: 'br',
25
+ bul: 'bg',
26
+ bur: 'my',
27
+ cat: 'ca',
28
+ cha: 'ch',
29
+ che: 'ce',
30
+ chi: 'zh',
31
+ chu: 'cu',
32
+ chv: 'cv',
33
+ cor: 'kw',
34
+ cos: 'co',
35
+ cre: 'cr',
36
+ cze: 'cs',
37
+ dan: 'da',
38
+ div: 'dv',
39
+ dut: 'nl',
40
+ dzo: 'dz',
41
+ eng: 'en',
42
+ epo: 'eo',
43
+ est: 'et',
44
+ ewe: 'ee',
45
+ fao: 'fo',
46
+ fij: 'fj',
47
+ fin: 'fi',
48
+ fre: 'fr',
49
+ fry: 'fy',
50
+ ful: 'ff',
51
+ geo: 'ka',
52
+ ger: 'de',
53
+ gla: 'gd',
54
+ gle: 'ga',
55
+ glg: 'gl',
56
+ glv: 'gv',
57
+ gre: 'el',
58
+ grn: 'gn',
59
+ guj: 'gu',
60
+ hat: 'ht',
61
+ hau: 'ha',
62
+ heb: 'he',
63
+ her: 'hz',
64
+ hin: 'hi',
65
+ hmo: 'ho',
66
+ hrv: 'hr',
67
+ hun: 'hu',
68
+ ibo: 'ig',
69
+ ice: 'is',
70
+ ido: 'io',
71
+ iii: 'ii',
72
+ iku: 'iu',
73
+ ile: 'ie',
74
+ ina: 'ia',
75
+ ind: 'id',
76
+ ipk: 'ik',
77
+ ita: 'it',
78
+ jav: 'jv',
79
+ jpn: 'ja',
80
+ kal: 'kl',
81
+ kan: 'kn',
82
+ kas: 'ks',
83
+ kau: 'kr',
84
+ kaz: 'kk',
85
+ khm: 'km',
86
+ kik: 'ki',
87
+ kin: 'rw',
88
+ kir: 'ky',
89
+ kom: 'kv',
90
+ kon: 'kg',
91
+ kor: 'ko',
92
+ kua: 'kj',
93
+ kur: 'ku',
94
+ lao: 'lo',
95
+ lat: 'la',
96
+ lav: 'lv',
97
+ lim: 'li',
98
+ lin: 'ln',
99
+ lit: 'lt',
100
+ ltz: 'lb',
101
+ lub: 'lu',
102
+ lug: 'lg',
103
+ mac: 'mk',
104
+ mah: 'mh',
105
+ mal: 'ml',
106
+ mao: 'mi',
107
+ mar: 'mr',
108
+ may: 'ms',
109
+ mlg: 'mg',
110
+ mlt: 'mt',
111
+ mon: 'mn',
112
+ nau: 'na',
113
+ nav: 'nv',
114
+ nbl: 'nr',
115
+ nde: 'nd',
116
+ ndo: 'ng',
117
+ nep: 'ne',
118
+ nno: 'nn',
119
+ nob: 'nb',
120
+ nor: 'no',
121
+ nya: 'ny',
122
+ oci: 'oc',
123
+ oji: 'oj',
124
+ ori: 'or',
125
+ orm: 'om',
126
+ oss: 'os',
127
+ pan: 'pa',
128
+ per: 'fa',
129
+ pli: 'pi',
130
+ pol: 'pl',
131
+ por: 'pt',
132
+ pus: 'ps',
133
+ que: 'qu',
134
+ roh: 'rm',
135
+ rum: 'ro',
136
+ run: 'rn',
137
+ rus: 'ru',
138
+ sag: 'sg',
139
+ san: 'sa',
140
+ sin: 'si',
141
+ slo: 'sk',
142
+ slv: 'sl',
143
+ sme: 'se',
144
+ smo: 'sm',
145
+ sna: 'sn',
146
+ snd: 'sd',
147
+ som: 'so',
148
+ sot: 'st',
149
+ spa: 'es',
150
+ srd: 'sc',
151
+ srp: 'sr',
152
+ ssw: 'ss',
153
+ sun: 'su',
154
+ swa: 'sw',
155
+ swe: 'sv',
156
+ tah: 'ty',
157
+ tam: 'ta',
158
+ tat: 'tt',
159
+ tel: 'te',
160
+ tgk: 'tg',
161
+ tgl: 'tl',
162
+ tha: 'th',
163
+ tib: 'bo',
164
+ tir: 'ti',
165
+ ton: 'to',
166
+ tsn: 'tn',
167
+ tso: 'ts',
168
+ tuk: 'tk',
169
+ tur: 'tr',
170
+ twi: 'tw',
171
+ uig: 'ug',
172
+ ukr: 'uk',
173
+ urd: 'ur',
174
+ uzb: 'uz',
175
+ ven: 've',
176
+ vie: 'vi',
177
+ vol: 'vo',
178
+ wel: 'cy',
179
+ wln: 'wa',
180
+ wol: 'wo',
181
+ xho: 'xh',
182
+ yid: 'yi',
183
+ yor: 'yo',
184
+ zha: 'za',
185
+ zul: 'zu',
186
+ }, names = {
187
+ afar: 'aa',
188
+ abkhazian: 'ab',
189
+ afrikaans: 'af',
190
+ akan: 'ak',
191
+ albanian: 'sq',
192
+ amharic: 'am',
193
+ arabic: 'ar',
194
+ aragonese: 'an',
195
+ armenian: 'hy',
196
+ assamese: 'as',
197
+ avaric: 'av',
198
+ avestan: 'ae',
199
+ aymara: 'ay',
200
+ azerbaijani: 'az',
201
+ bashkir: 'ba',
202
+ bambara: 'bm',
203
+ basque: 'eu',
204
+ belarusian: 'be',
205
+ bengali: 'bn',
206
+ 'bihari languages': 'bh',
207
+ bislama: 'bi',
208
+ tibetan: 'bo',
209
+ bosnian: 'bs',
210
+ breton: 'br',
211
+ bulgarian: 'bg',
212
+ burmese: 'my',
213
+ catalan: 'ca',
214
+ valencian: 'ca',
215
+ czech: 'cs',
216
+ chamorro: 'ch',
217
+ chechen: 'ce',
218
+ chinese: 'zh',
219
+ 'church slavic': 'cu',
220
+ 'old slavonic': 'cu',
221
+ 'church slavonic': 'cu',
222
+ 'old bulgarian': 'cu',
223
+ 'old church slavonic': 'cu',
224
+ chuvash: 'cv',
225
+ cornish: 'kw',
226
+ corsican: 'co',
227
+ cree: 'cr',
228
+ welsh: 'cy',
229
+ danish: 'da',
230
+ german: 'de',
231
+ divehi: 'dv',
232
+ dhivehi: 'dv',
233
+ maldivian: 'dv',
234
+ dutch: 'nl',
235
+ flemish: 'nl',
236
+ dzongkha: 'dz',
237
+ greek: 'el',
238
+ english: 'en',
239
+ esperanto: 'eo',
240
+ estonian: 'et',
241
+ ewe: 'ee',
242
+ faroese: 'fo',
243
+ persian: 'fa',
244
+ fijian: 'fj',
245
+ finnish: 'fi',
246
+ french: 'fr',
247
+ 'western frisian': 'fy',
248
+ fulah: 'ff',
249
+ georgian: 'ka',
250
+ gaelic: 'gd',
251
+ 'scottish gaelic': 'gd',
252
+ irish: 'ga',
253
+ galician: 'gl',
254
+ manx: 'gv',
255
+ guarani: 'gn',
256
+ gujarati: 'gu',
257
+ haitian: 'ht',
258
+ 'haitian creole': 'ht',
259
+ hausa: 'ha',
260
+ hebrew: 'he',
261
+ herero: 'hz',
262
+ hindi: 'hi',
263
+ 'hiri motu': 'ho',
264
+ croatian: 'hr',
265
+ hungarian: 'hu',
266
+ igbo: 'ig',
267
+ icelandic: 'is',
268
+ ido: 'io',
269
+ 'sichuan yi': 'ii',
270
+ nuosu: 'ii',
271
+ inuktitut: 'iu',
272
+ interlingue: 'ie',
273
+ occidental: 'ie',
274
+ interlingua: 'ia',
275
+ indonesian: 'id',
276
+ inupiaq: 'ik',
277
+ italian: 'it',
278
+ javanese: 'jv',
279
+ japanese: 'ja',
280
+ kalaallisut: 'kl',
281
+ greenlandic: 'kl',
282
+ kannada: 'kn',
283
+ kashmiri: 'ks',
284
+ kanuri: 'kr',
285
+ kazakh: 'kk',
286
+ 'central khmer': 'km',
287
+ kikuyu: 'ki',
288
+ gikuyu: 'ki',
289
+ kinyarwanda: 'rw',
290
+ kirghiz: 'ky',
291
+ kyrgyz: 'ky',
292
+ komi: 'kv',
293
+ kongo: 'kg',
294
+ korean: 'ko',
295
+ kuanyama: 'kj',
296
+ kwanyama: 'kj',
297
+ kurdish: 'ku',
298
+ lao: 'lo',
299
+ latin: 'la',
300
+ latvian: 'lv',
301
+ limburgan: 'li',
302
+ limburger: 'li',
303
+ limburgish: 'li',
304
+ lingala: 'ln',
305
+ lithuanian: 'lt',
306
+ luxembourgish: 'lb',
307
+ letzeburgesch: 'lb',
308
+ 'luba-katanga': 'lu',
309
+ ganda: 'lg',
310
+ macedonian: 'mk',
311
+ marshallese: 'mh',
312
+ malayalam: 'ml',
313
+ maori: 'mi',
314
+ marathi: 'mr',
315
+ malay: 'ms',
316
+ malagasy: 'mg',
317
+ maltese: 'mt',
318
+ mongolian: 'mn',
319
+ nauru: 'na',
320
+ navajo: 'nv',
321
+ navaho: 'nv',
322
+ 'ndebele, south': 'nr',
323
+ 'south ndebele': 'nr',
324
+ 'ndebele, north': 'nd',
325
+ 'north ndebele': 'nd',
326
+ ndonga: 'ng',
327
+ nepali: 'ne',
328
+ 'norwegian nynorsk': 'nn',
329
+ 'nynorsk, norwegian': 'nn',
330
+ 'norwegian bokmål': 'nb',
331
+ 'bokmål, norwegian': 'nb',
332
+ norwegian: 'no',
333
+ chichewa: 'ny',
334
+ chewa: 'ny',
335
+ nyanja: 'ny',
336
+ occitan: 'oc',
337
+ ojibwa: 'oj',
338
+ oriya: 'or',
339
+ oromo: 'om',
340
+ ossetian: 'os',
341
+ ossetic: 'os',
342
+ panjabi: 'pa',
343
+ punjabi: 'pa',
344
+ pali: 'pi',
345
+ polish: 'pl',
346
+ portuguese: 'pt',
347
+ pushto: 'ps',
348
+ pashto: 'ps',
349
+ quechua: 'qu',
350
+ romansh: 'rm',
351
+ romanian: 'ro',
352
+ moldavian: 'ro',
353
+ moldovan: 'ro',
354
+ rundi: 'rn',
355
+ russian: 'ru',
356
+ sango: 'sg',
357
+ sanskrit: 'sa',
358
+ sinhala: 'si',
359
+ sinhalese: 'si',
360
+ slovak: 'sk',
361
+ slovenian: 'sl',
362
+ 'northern sami': 'se',
363
+ samoan: 'sm',
364
+ shona: 'sn',
365
+ sindhi: 'sd',
366
+ somali: 'so',
367
+ 'sotho, southern': 'st',
368
+ spanish: 'es',
369
+ castilian: 'es',
370
+ sardinian: 'sc',
371
+ serbian: 'sr',
372
+ swati: 'ss',
373
+ sundanese: 'su',
374
+ swahili: 'sw',
375
+ swedish: 'sv',
376
+ tahitian: 'ty',
377
+ tamil: 'ta',
378
+ tatar: 'tt',
379
+ telugu: 'te',
380
+ tajik: 'tg',
381
+ tagalog: 'tl',
382
+ thai: 'th',
383
+ tigrinya: 'ti',
384
+ tonga: 'to',
385
+ tswana: 'tn',
386
+ tsonga: 'ts',
387
+ turkmen: 'tk',
388
+ turkish: 'tr',
389
+ twi: 'tw',
390
+ uighur: 'ug',
391
+ uyghur: 'ug',
392
+ ukrainian: 'uk',
393
+ urdu: 'ur',
394
+ uzbek: 'uz',
395
+ venda: 've',
396
+ vietnamese: 'vi',
397
+ volapük: 'vo',
398
+ walloon: 'wa',
399
+ wolof: 'wo',
400
+ xhosa: 'xh',
401
+ yiddish: 'yi',
402
+ yoruba: 'yo',
403
+ zhuang: 'za',
404
+ chuang: 'za',
405
+ zulu: 'zu',
406
+ };
407
+ // @ts-ignore
408
+ const isoKeys = Object.values(iso).sort();
409
+ var languages = e => {
410
+ if ('string' != typeof e)
411
+ throw new Error('The "language" must be a string, received ' + typeof e);
412
+ if (e.length > 100)
413
+ throw new Error(`The "language" is too long at ${e.length} characters`);
414
+ if (((e = e.toLowerCase()), (e = names[e] || iso[e] || e), !isoKeys.includes(e)))
415
+ throw new Error(`The language "${e}" is not part of the ISO 639-1`);
416
+ return e;
417
+ };
418
+ function Cache() {
419
+ var e = Object.create(null);
420
+ function a(a) {
421
+ delete e[a];
422
+ }
423
+ (this.set = function (n, i, r) {
424
+ if (void 0 !== r && ('number' != typeof r || isNaN(r) || r <= 0))
425
+ throw new Error('Cache timeout must be a positive number');
426
+ var t = e[n];
427
+ t && clearTimeout(t.timeout);
428
+ var o = { value: i, expire: r + Date.now() };
429
+ return (
430
+ // @ts-ignore
431
+ isNaN(o.expire) || (o.timeout = setTimeout(() => a(n), r)), (e[n] = o), i);
432
+ }),
433
+ (this.del = function (n) {
434
+ var i = !0, r = e[n];
435
+ return (r
436
+ ? (clearTimeout(r.timeout),
437
+ !isNaN(r.expire) && r.expire < Date.now() && (i = !1))
438
+ : (i = !1),
439
+ i && a(n),
440
+ i);
441
+ }),
442
+ (this.clear = function () {
443
+ for (var a in e)
444
+ clearTimeout(e[a].timeout);
445
+ e = Object.create(null);
446
+ }),
447
+ (this.get = function (a) {
448
+ var n = e[a];
449
+ if (void 0 !== n) {
450
+ if (isNaN(n.expire) || n.expire >= Date.now())
451
+ return n.value;
452
+ delete e[a];
453
+ }
454
+ return null;
455
+ });
456
+ }
457
+ const exp$1 = new Cache();
458
+ exp$1.Cache = Cache;
459
+ const base = 'https://translate.googleapis.com/translate_a/single';
460
+ var google = {
461
+ fetch: ({ key: e, from: a, to: n, text: i }) => [
462
+ `${base}?client=gtx&sl=${a}&tl=${n}&dt=t&q=${encodeURI(i)}`,
463
+ ],
464
+ parse: e => e.json().then(e => {
465
+ if (!(e = e && e[0] && e[0][0] && e[0].map(e => e[0]).join('')))
466
+ throw new Error('Translation not found');
467
+ return e;
468
+ }),
469
+ }, yandex = {
470
+ needkey: !0,
471
+ fetch: ({ key: e, from: a, to: n, text: i }) => [
472
+ `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${e}&lang=${a}-${n}&text=${encodeURIComponent(i)}`,
473
+ { method: 'POST', body: '' },
474
+ ],
475
+ parse: e => e.json().then(e => {
476
+ if (200 !== e.code)
477
+ throw new Error(e.message);
478
+ return e.text[0];
479
+ }),
480
+ };
481
+ const libreUrl = 'https://libretranslate.com/translate';
482
+ var libre = {
483
+ needkey: !1,
484
+ fetch: ({ url: e = libreUrl, key: a, from: n, to: i, text: r }) => [
485
+ e,
486
+ {
487
+ method: 'POST',
488
+ body: JSON.stringify({ q: r, source: n, target: i, api_key: a }),
489
+ headers: { 'Content-Type': 'application/json' },
490
+ },
491
+ ],
492
+ parse: e => e.json().then(e => {
493
+ if (!e)
494
+ throw new Error('No response found');
495
+ if (e.error)
496
+ throw new Error(e.error);
497
+ if (!e.translatedText)
498
+ throw new Error('No response found');
499
+ return e.translatedText;
500
+ }),
501
+ }, deepl = {
502
+ needkey: !0,
503
+ fetch: ({ key: e, from: a, to: n, text: i }) => [
504
+ `https://api${/:fx$/.test(e) ? '-free' : ''}.deepl.com/v2/translate?auth_key=${e}&source_lang=${a}&target_lang=${n}&text=${(i = encodeURIComponent(i))}`,
505
+ { method: 'POST', body: '' },
506
+ ],
507
+ parse: async (e) => {
508
+ if (!e.ok) {
509
+ if (403 === e.status)
510
+ throw new Error('Auth Error, please review the key for DeepL');
511
+ throw new Error(`Error ${e.status}`);
512
+ }
513
+ return e.json().then(e => e.translations[0].text);
514
+ },
515
+ }, engines = { google: google, yandex: yandex, libre: libre, deepl: deepl };
516
+ const Translate = function (e = {}) {
517
+ // @ts-ignore
518
+ if (!(this instanceof Translate))
519
+ return new Translate(e);
520
+ const a = {
521
+ from: 'en',
522
+ to: 'en',
523
+ cache: void 0,
524
+ languages: languages,
525
+ engines: engines,
526
+ engine: 'google',
527
+ keys: {},
528
+ }, n = async (e, a = {}) => {
529
+ 'string' == typeof a && (a = { to: a }), // @ts-ignore
530
+ (a.text = e), // @ts-ignore
531
+ (a.from = languages(a.from || n.from)), // @ts-ignore
532
+ (a.to = languages(a.to || n.to)), // @ts-ignore
533
+ (a.cache = a.cache || n.cache), // @ts-ignore
534
+ (a.engines = a.engines || {}), // @ts-ignore
535
+ (a.engine = a.engine || n.engine), // @ts-ignore
536
+ (a.url = a.url || n.url), // @ts-ignore
537
+ (a.id = a.id || `${a.url}:${a.from}:${a.to}:${a.engine}:${a.text}`), // @ts-ignore
538
+ (a.keys = a.keys || n.keys || {}); // @ts-ignore
539
+ for (let e in n.keys)
540
+ a.keys[e] = a.keys[e] || n.keys[e]; // @ts-ignore
541
+ a.key = a.key || n.key || a.keys[a.engine]; // @ts-ignore
542
+ const i = a.engines[a.engine] || n.engines[a.engine], // @ts-ignore
543
+ r = exp$1.get(a.id);
544
+ if (r)
545
+ return Promise.resolve(r); // @ts-ignore
546
+ if (a.to === a.from)
547
+ return Promise.resolve(a.text); // @ts-ignore
548
+ if (i.needkey && !a.key)
549
+ // @ts-ignore
550
+ throw new Error(// @ts-ignore
551
+ `The engine "${a.engine}" needs a key, please provide it`);
552
+ const t = i.fetch(a); // @ts-ignore
553
+ return fetch(...t)
554
+ .then(i.parse) // @ts-ignore
555
+ .then(e => exp$1.set(a.id, e, a.cache));
556
+ };
557
+ for (let i in a)
558
+ n[i] = void 0 === e[i] ? a[i] : e[i];
559
+ return n;
560
+ }, // @ts-ignore
561
+ exp = new Translate();
562
+ exp.Translate = Translate;
563
+ export const translate = exp;
564
+ ;
565
+ ({}); // @--end-of-file-for-module=tnp-helpers lib/base/translate.ts
566
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvYmFzZS90cmFuc2xhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxHQUFHLEdBQUc7SUFDUixHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFB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O1lBQzVDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhO1lBQ2hELENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxhQUFhO1lBQ2xGLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2xELEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUk7WUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDdkUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWE7UUFDakUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDL0MsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJO1lBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDbEUsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDckIsYUFBYTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUUsYUFBYTtZQUM1QixlQUFlLENBQUMsQ0FBQyxNQUFNLGtDQUFrQyxDQUMxRCxDQUFDO1FBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDbkMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWE7YUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFDSixLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7UUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ3hCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTFCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUdkLENBQUM7QUFFWCxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDhEQUE4RCIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5jb25zdCBpc28gPSB7XG4gICAgYWFyOiAnYWEnLFxuICAgIGFiazogJ2FiJyxcbiAgICBhZnI6ICdhZicsXG4gICAgYWthOiAnYWsnLFxuICAgIGFsYjogJ3NxJyxcbiAgICBhbWg6ICdhbScsXG4gICAgYXJhOiAnYXInLFxuICAgIGFyZzogJ2FuJyxcbiAgICBhcm06ICdoeScsXG4gICAgYXNtOiAnYXMnLFxuICAgIGF2YTogJ2F2JyxcbiAgICBhdmU6ICdhZScsXG4gICAgYXltOiAnYXknLFxuICAgIGF6ZTogJ2F6JyxcbiAgICBiYWs6ICdiYScsXG4gICAgYmFtOiAnYm0nLFxuICAgIGJhcTogJ2V1JyxcbiAgICBiZWw6ICdiZScsXG4gICAgYmVuOiAnYm4nLFxuICAgIGJpaDogJ2JoJyxcbiAgICBiaXM6ICdiaScsXG4gICAgYm9zOiAnYnMnLFxuICAgIGJyZTogJ2JyJyxcbiAgICBidWw6ICdiZycsXG4gICAgYnVyOiAnbXknLFxuICAgIGNhdDogJ2NhJyxcbiAgICBjaGE6ICdjaCcsXG4gICAgY2hlOiAnY2UnLFxuICAgIGNoaTogJ3poJyxcbiAgICBjaHU6ICdjdScsXG4gICAgY2h2OiAnY3YnLFxuICAgIGNvcjogJ2t3JyxcbiAgICBjb3M6ICdjbycsXG4gICAgY3JlOiAnY3InLFxuICAgIGN6ZTogJ2NzJyxcbiAgICBkYW46ICdkYScsXG4gICAgZGl2OiAnZHYnLFxuICAgIGR1dDogJ25sJyxcbiAgICBkem86ICdkeicsXG4gICAgZW5nOiAnZW4nLFxuICAgIGVwbzogJ2VvJyxcbiAgICBlc3Q6ICdldCcsXG4gICAgZXdlOiAnZWUnLFxuICAgIGZhbzogJ2ZvJyxcbiAgICBmaWo6ICdmaicsXG4gICAgZmluOiAnZmknLFxuICAgIGZyZTogJ2ZyJyxcbiAgICBmcnk6ICdmeScsXG4gICAgZnVsOiAnZmYnLFxuICAgIGdlbzogJ2thJyxcbiAgICBnZXI6ICdkZScsXG4gICAgZ2xhOiAnZ2QnLFxuICAgIGdsZTogJ2dhJyxcbiAgICBnbGc6ICdnbCcsXG4gICAgZ2x2OiAnZ3YnLFxuICAgIGdyZTogJ2VsJyxcbiAgICBncm46ICdnbicsXG4gICAgZ3VqOiAnZ3UnLFxuICAgIGhhdDogJ2h0JyxcbiAgICBoYXU6ICdoYScsXG4gICAgaGViOiAnaGUnLFxuICAgIGhlcjogJ2h6JyxcbiAgICBoaW46ICdoaScsXG4gICAgaG1vOiAnaG8nLFxuICAgIGhydjogJ2hyJyxcbiAgICBodW46ICdodScsXG4gICAgaWJvOiAnaWcnLFxuICAgIGljZTogJ2lzJyxcbiAgICBpZG86ICdpbycsXG4gICAgaWlpOiAnaWknLFxuICAgIGlrdTogJ2l1JyxcbiAgICBpbGU6ICdpZScsXG4gICAgaW5hOiAnaWEnLFxuICAgIGluZDogJ2lkJyxcbiAgICBpcGs6ICdpaycsXG4gICAgaXRhOiAnaXQnLFxuICAgIGphdjogJ2p2JyxcbiAgICBqcG46ICdqYScsXG4gICAga2FsOiAna2wnLFxuICAgIGthbjogJ2tuJyxcbiAgICBrYXM6ICdrcycsXG4gICAga2F1OiAna3InLFxuICAgIGthejogJ2trJyxcbiAgICBraG06ICdrbScsXG4gICAga2lrOiAna2knLFxuICAgIGtpbjogJ3J3JyxcbiAgICBraXI6ICdreScsXG4gICAga29tOiAna3YnLFxuICAgIGtvbjogJ2tnJyxcbiAgICBrb3I6ICdrbycsXG4gICAga3VhOiAna2onLFxuICAgIGt1cjogJ2t1JyxcbiAgICBsYW86ICdsbycsXG4gICAgbGF0OiAnbGEnLFxuICAgIGxhdjogJ2x2JyxcbiAgICBsaW06ICdsaScsXG4gICAgbGluOiAnbG4nLFxuICAgIGxpdDogJ2x0JyxcbiAgICBsdHo6ICdsYicsXG4gICAgbHViOiAnbHUnLFxuICAgIGx1ZzogJ2xnJyxcbiAgICBtYWM6ICdtaycsXG4gICAgbWFoOiAnbWgnLFxuICAgIG1hbDogJ21sJyxcbiAgICBtYW86ICdtaScsXG4gICAgbWFyOiAnbXInLFxuICAgIG1heTogJ21zJyxcbiAgICBtbGc6ICdtZycsXG4gICAgbWx0OiAnbXQnLFxuICAgIG1vbjogJ21uJyxcbiAgICBuYXU6ICduYScsXG4gICAgbmF2OiAnbnYnLFxuICAgIG5ibDogJ25yJyxcbiAgICBuZGU6ICduZCcsXG4gICAgbmRvOiAnbmcnLFxuICAgIG5lcDogJ25lJyxcbiAgICBubm86ICdubicsXG4gICAgbm9iOiAnbmInLFxuICAgIG5vcjogJ25vJyxcbiAgICBueWE6ICdueScsXG4gICAgb2NpOiAnb2MnLFxuICAgIG9qaTogJ29qJyxcbiAgICBvcmk6ICdvcicsXG4gICAgb3JtOiAnb20nLFxuICAgIG9zczogJ29zJyxcbiAgICBwYW46ICdwYScsXG4gICAgcGVyOiAnZmEnLFxuICAgIHBsaTogJ3BpJyxcbiAgICBwb2w6ICdwbCcsXG4gICAgcG9yOiAncHQnLFxuICAgIHB1czogJ3BzJyxcbiAgICBxdWU6ICdxdScsXG4gICAgcm9oOiAncm0nLFxuICAgIHJ1bTogJ3JvJyxcbiAgICBydW46ICdybicsXG4gICAgcnVzOiAncnUnLFxuICAgIHNhZzogJ3NnJyxcbiAgICBzYW46ICdzYScsXG4gICAgc2luOiAnc2knLFxuICAgIHNsbzogJ3NrJyxcbiAgICBzbHY6ICdzbCcsXG4gICAgc21lOiAnc2UnLFxuICAgIHNtbzogJ3NtJyxcbiAgICBzbmE6ICdzbicsXG4gICAgc25kOiAnc2QnLFxuICAgIHNvbTogJ3NvJyxcbiAgICBzb3Q6ICdzdCcsXG4gICAgc3BhOiAnZXMnLFxuICAgIHNyZDogJ3NjJyxcbiAgICBzcnA6ICdzcicsXG4gICAgc3N3OiAnc3MnLFxuICAgIHN1bjogJ3N1JyxcbiAgICBzd2E6ICdzdycsXG4gICAgc3dlOiAnc3YnLFxuICAgIHRhaDogJ3R5JyxcbiAgICB0YW06ICd0YScsXG4gICAgdGF0OiAndHQnLFxuICAgIHRlbDogJ3RlJyxcbiAgICB0Z2s6ICd0ZycsXG4gICAgdGdsOiAndGwnLFxuICAgIHRoYTogJ3RoJyxcbiAgICB0aWI6ICdibycsXG4gICAgdGlyOiAndGknLFxuICAgIHRvbjogJ3RvJyxcbiAgICB0c246ICd0bicsXG4gICAgdHNvOiAndHMnLFxuICAgIHR1azogJ3RrJyxcbiAgICB0dXI6ICd0cicsXG4gICAgdHdpOiAndHcnLFxuICAgIHVpZzogJ3VnJyxcbiAgICB1a3I6ICd1aycsXG4gICAgdXJkOiAndXInLFxuICAgIHV6YjogJ3V6JyxcbiAgICB2ZW46ICd2ZScsXG4gICAgdmllOiAndmknLFxuICAgIHZvbDogJ3ZvJyxcbiAgICB3ZWw6ICdjeScsXG4gICAgd2xuOiAnd2EnLFxuICAgIHdvbDogJ3dvJyxcbiAgICB4aG86ICd4aCcsXG4gICAgeWlkOiAneWknLFxuICAgIHlvcjogJ3lvJyxcbiAgICB6aGE6ICd6YScsXG4gICAgenVsOiAnenUnLFxuICB9LFxuICBuYW1lcyA9IHtcbiAgICBhZmFyOiAnYWEnLFxuICAgIGFia2hhemlhbjogJ2FiJyxcbiAgICBhZnJpa2FhbnM6ICdhZicsXG4gICAgYWthbjogJ2FrJyxcbiAgICBhbGJhbmlhbjogJ3NxJyxcbiAgICBhbWhhcmljOiAnYW0nLFxuICAgIGFyYWJpYzogJ2FyJyxcbiAgICBhcmFnb25lc2U6ICdhbicsXG4gICAgYXJtZW5pYW46ICdoeScsXG4gICAgYXNzYW1lc2U6ICdhcycsXG4gICAgYXZhcmljOiAnYXYnLFxuICAgIGF2ZXN0YW46ICdhZScsXG4gICAgYXltYXJhOiAnYXknLFxuICAgIGF6ZXJiYWlqYW5pOiAnYXonLFxuICAgIGJhc2hraXI6ICdiYScsXG4gICAgYmFtYmFyYTogJ2JtJyxcbiAgICBiYXNxdWU6ICdldScsXG4gICAgYmVsYXJ1c2lhbjogJ2JlJyxcbiAgICBiZW5nYWxpOiAnYm4nLFxuICAgICdiaWhhcmkgbGFuZ3VhZ2VzJzogJ2JoJyxcbiAgICBiaXNsYW1hOiAnYmknLFxuICAgIHRpYmV0YW46ICdibycsXG4gICAgYm9zbmlhbjogJ2JzJyxcbiAgICBicmV0b246ICdicicsXG4gICAgYnVsZ2FyaWFuOiAnYmcnLFxuICAgIGJ1cm1lc2U6ICdteScsXG4gICAgY2F0YWxhbjogJ2NhJyxcbiAgICB2YWxlbmNpYW46ICdjYScsXG4gICAgY3plY2g6ICdjcycsXG4gICAgY2hhbW9ycm86ICdjaCcsXG4gICAgY2hlY2hlbjogJ2NlJyxcbiAgICBjaGluZXNlOiAnemgnLFxuICAgICdjaHVyY2ggc2xhdmljJzogJ2N1JyxcbiAgICAnb2xkIHNsYXZvbmljJzogJ2N1JyxcbiAgICAnY2h1cmNoIHNsYXZvbmljJzogJ2N1JyxcbiAgICAnb2xkIGJ1bGdhcmlhbic6ICdjdScsXG4gICAgJ29sZCBjaHVyY2ggc2xhdm9uaWMnOiAnY3UnLFxuICAgIGNodXZhc2g6ICdjdicsXG4gICAgY29ybmlzaDogJ2t3JyxcbiAgICBjb3JzaWNhbjogJ2NvJyxcbiAgICBjcmVlOiAnY3InLFxuICAgIHdlbHNoOiAnY3knLFxuICAgIGRhbmlzaDogJ2RhJyxcbiAgICBnZXJtYW46ICdkZScsXG4gICAgZGl2ZWhpOiAnZHYnLFxuICAgIGRoaXZlaGk6ICdkdicsXG4gICAgbWFsZGl2aWFuOiAnZHYnLFxuICAgIGR1dGNoOiAnbmwnLFxuICAgIGZsZW1pc2g6ICdubCcsXG4gICAgZHpvbmdraGE6ICdkeicsXG4gICAgZ3JlZWs6ICdlbCcsXG4gICAgZW5nbGlzaDogJ2VuJyxcbiAgICBlc3BlcmFudG86ICdlbycsXG4gICAgZXN0b25pYW46ICdldCcsXG4gICAgZXdlOiAnZWUnLFxuICAgIGZhcm9lc2U6ICdmbycsXG4gICAgcGVyc2lhbjogJ2ZhJyxcbiAgICBmaWppYW46ICdmaicsXG4gICAgZmlubmlzaDogJ2ZpJyxcbiAgICBmcmVuY2g6ICdmcicsXG4gICAgJ3dlc3Rlcm4gZnJpc2lhbic6ICdmeScsXG4gICAgZnVsYWg6ICdmZicsXG4gICAgZ2VvcmdpYW46ICdrYScsXG4gICAgZ2FlbGljOiAnZ2QnLFxuICAgICdzY290dGlzaCBnYWVsaWMnOiAnZ2QnLFxuICAgIGlyaXNoOiAnZ2EnLFxuICAgIGdhbGljaWFuOiAnZ2wnLFxuICAgIG1hbng6ICdndicsXG4gICAgZ3VhcmFuaTogJ2duJyxcbiAgICBndWphcmF0aTogJ2d1JyxcbiAgICBoYWl0aWFuOiAnaHQnLFxuICAgICdoYWl0aWFuIGNyZW9sZSc6ICdodCcsXG4gICAgaGF1c2E6ICdoYScsXG4gICAgaGVicmV3OiAnaGUnLFxuICAgIGhlcmVybzogJ2h6JyxcbiAgICBoaW5kaTogJ2hpJyxcbiAgICAnaGlyaSBtb3R1JzogJ2hvJyxcbiAgICBjcm9hdGlhbjogJ2hyJyxcbiAgICBodW5nYXJpYW46ICdodScsXG4gICAgaWdibzogJ2lnJyxcbiAgICBpY2VsYW5kaWM6ICdpcycsXG4gICAgaWRvOiAnaW8nLFxuICAgICdzaWNodWFuIHlpJzogJ2lpJyxcbiAgICBudW9zdTogJ2lpJyxcbiAgICBpbnVrdGl0dXQ6ICdpdScsXG4gICAgaW50ZXJsaW5ndWU6ICdpZScsXG4gICAgb2NjaWRlbnRhbDogJ2llJyxcbiAgICBpbnRlcmxpbmd1YTogJ2lhJyxcbiAgICBpbmRvbmVzaWFuOiAnaWQnLFxuICAgIGludXBpYXE6ICdpaycsXG4gICAgaXRhbGlhbjogJ2l0JyxcbiAgICBqYXZhbmVzZTogJ2p2JyxcbiAgICBqYXBhbmVzZTogJ2phJyxcbiAgICBrYWxhYWxsaXN1dDogJ2tsJyxcbiAgICBncmVlbmxhbmRpYzogJ2tsJyxcbiAgICBrYW5uYWRhOiAna24nLFxuICAgIGthc2htaXJpOiAna3MnLFxuICAgIGthbnVyaTogJ2tyJyxcbiAgICBrYXpha2g6ICdraycsXG4gICAgJ2NlbnRyYWwga2htZXInOiAna20nLFxuICAgIGtpa3V5dTogJ2tpJyxcbiAgICBnaWt1eXU6ICdraScsXG4gICAga2lueWFyd2FuZGE6ICdydycsXG4gICAga2lyZ2hpejogJ2t5JyxcbiAgICBreXJneXo6ICdreScsXG4gICAga29taTogJ2t2JyxcbiAgICBrb25nbzogJ2tnJyxcbiAgICBrb3JlYW46ICdrbycsXG4gICAga3VhbnlhbWE6ICdraicsXG4gICAga3dhbnlhbWE6ICdraicsXG4gICAga3VyZGlzaDogJ2t1JyxcbiAgICBsYW86ICdsbycsXG4gICAgbGF0aW46ICdsYScsXG4gICAgbGF0dmlhbjogJ2x2JyxcbiAgICBsaW1idXJnYW46ICdsaScsXG4gICAgbGltYnVyZ2VyOiAnbGknLFxuICAgIGxpbWJ1cmdpc2g6ICdsaScsXG4gICAgbGluZ2FsYTogJ2xuJyxcbiAgICBsaXRodWFuaWFuOiAnbHQnLFxuICAgIGx1eGVtYm91cmdpc2g6ICdsYicsXG4gICAgbGV0emVidXJnZXNjaDogJ2xiJyxcbiAgICAnbHViYS1rYXRhbmdhJzogJ2x1JyxcbiAgICBnYW5kYTogJ2xnJyxcbiAgICBtYWNlZG9uaWFuOiAnbWsnLFxuICAgIG1hcnNoYWxsZXNlOiAnbWgnLFxuICAgIG1hbGF5YWxhbTogJ21sJyxcbiAgICBtYW9yaTogJ21pJyxcbiAgICBtYXJhdGhpOiAnbXInLFxuICAgIG1hbGF5OiAnbXMnLFxuICAgIG1hbGFnYXN5OiAnbWcnLFxuICAgIG1hbHRlc2U6ICdtdCcsXG4gICAgbW9uZ29saWFuOiAnbW4nLFxuICAgIG5hdXJ1OiAnbmEnLFxuICAgIG5hdmFqbzogJ252JyxcbiAgICBuYXZhaG86ICdudicsXG4gICAgJ25kZWJlbGUsIHNvdXRoJzogJ25yJyxcbiAgICAnc291dGggbmRlYmVsZSc6ICducicsXG4gICAgJ25kZWJlbGUsIG5vcnRoJzogJ25kJyxcbiAgICAnbm9ydGggbmRlYmVsZSc6ICduZCcsXG4gICAgbmRvbmdhOiAnbmcnLFxuICAgIG5lcGFsaTogJ25lJyxcbiAgICAnbm9yd2VnaWFuIG55bm9yc2snOiAnbm4nLFxuICAgICdueW5vcnNrLCBub3J3ZWdpYW4nOiAnbm4nLFxuICAgICdub3J3ZWdpYW4gYm9rbcOlbCc6ICduYicsXG4gICAgJ2Jva23DpWwsIG5vcndlZ2lhbic6ICduYicsXG4gICAgbm9yd2VnaWFuOiAnbm8nLFxuICAgIGNoaWNoZXdhOiAnbnknLFxuICAgIGNoZXdhOiAnbnknLFxuICAgIG55YW5qYTogJ255JyxcbiAgICBvY2NpdGFuOiAnb2MnLFxuICAgIG9qaWJ3YTogJ29qJyxcbiAgICBvcml5YTogJ29yJyxcbiAgICBvcm9tbzogJ29tJyxcbiAgICBvc3NldGlhbjogJ29zJyxcbiAgICBvc3NldGljOiAnb3MnLFxuICAgIHBhbmphYmk6ICdwYScsXG4gICAgcHVuamFiaTogJ3BhJyxcbiAgICBwYWxpOiAncGknLFxuICAgIHBvbGlzaDogJ3BsJyxcbiAgICBwb3J0dWd1ZXNlOiAncHQnLFxuICAgIHB1c2h0bzogJ3BzJyxcbiAgICBwYXNodG86ICdwcycsXG4gICAgcXVlY2h1YTogJ3F1JyxcbiAgICByb21hbnNoOiAncm0nLFxuICAgIHJvbWFuaWFuOiAncm8nLFxuICAgIG1vbGRhdmlhbjogJ3JvJyxcbiAgICBtb2xkb3ZhbjogJ3JvJyxcbiAgICBydW5kaTogJ3JuJyxcbiAgICBydXNzaWFuOiAncnUnLFxuICAgIHNhbmdvOiAnc2cnLFxuICAgIHNhbnNrcml0OiAnc2EnLFxuICAgIHNpbmhhbGE6ICdzaScsXG4gICAgc2luaGFsZXNlOiAnc2knLFxuICAgIHNsb3ZhazogJ3NrJyxcbiAgICBzbG92ZW5pYW46ICdzbCcsXG4gICAgJ25vcnRoZXJuIHNhbWknOiAnc2UnLFxuICAgIHNhbW9hbjogJ3NtJyxcbiAgICBzaG9uYTogJ3NuJyxcbiAgICBzaW5kaGk6ICdzZCcsXG4gICAgc29tYWxpOiAnc28nLFxuICAgICdzb3Robywgc291dGhlcm4nOiAnc3QnLFxuICAgIHNwYW5pc2g6ICdlcycsXG4gICAgY2FzdGlsaWFuOiAnZXMnLFxuICAgIHNhcmRpbmlhbjogJ3NjJyxcbiAgICBzZXJiaWFuOiAnc3InLFxuICAgIHN3YXRpOiAnc3MnLFxuICAgIHN1bmRhbmVzZTogJ3N1JyxcbiAgICBzd2FoaWxpOiAnc3cnLFxuICAgIHN3ZWRpc2g6ICdzdicsXG4gICAgdGFoaXRpYW46ICd0eScsXG4gICAgdGFtaWw6ICd0YScsXG4gICAgdGF0YXI6ICd0dCcsXG4gICAgdGVsdWd1OiAndGUnLFxuICAgIHRhamlrOiAndGcnLFxuICAgIHRhZ2Fsb2c6ICd0bCcsXG4gICAgdGhhaTogJ3RoJyxcbiAgICB0aWdyaW55YTogJ3RpJyxcbiAgICB0b25nYTogJ3RvJyxcbiAgICB0c3dhbmE6ICd0bicsXG4gICAgdHNvbmdhOiAndHMnLFxuICAgIHR1cmttZW46ICd0aycsXG4gICAgdHVya2lzaDogJ3RyJyxcbiAgICB0d2k6ICd0dycsXG4gICAgdWlnaHVyOiAndWcnLFxuICAgIHV5Z2h1cjogJ3VnJyxcbiAgICB1a3JhaW5pYW46ICd1aycsXG4gICAgdXJkdTogJ3VyJyxcbiAgICB1emJlazogJ3V6JyxcbiAgICB2ZW5kYTogJ3ZlJyxcbiAgICB2aWV0bmFtZXNlOiAndmknLFxuICAgIHZvbGFww7xrOiAndm8nLFxuICAgIHdhbGxvb246ICd3YScsXG4gICAgd29sb2Y6ICd3bycsXG4gICAgeGhvc2E6ICd4aCcsXG4gICAgeWlkZGlzaDogJ3lpJyxcbiAgICB5b3J1YmE6ICd5bycsXG4gICAgemh1YW5nOiAnemEnLFxuICAgIGNodWFuZzogJ3phJyxcbiAgICB6dWx1OiAnenUnLFxuICB9IGFzIGNvbnN0O1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgaXNvS2V5cyA9IE9iamVjdC52YWx1ZXMoaXNvKS5zb3J0KCk7XG52YXIgbGFuZ3VhZ2VzID0gZSA9PiB7XG4gIGlmICgnc3RyaW5nJyAhPSB0eXBlb2YgZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcImxhbmd1YWdlXCIgbXVzdCBiZSBhIHN0cmluZywgcmVjZWl2ZWQgJyArIHR5cGVvZiBlKTtcbiAgaWYgKGUubGVuZ3RoID4gMTAwKVxuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwibGFuZ3VhZ2VcIiBpcyB0b28gbG9uZyBhdCAke2UubGVuZ3RofSBjaGFyYWN0ZXJzYCk7XG4gIGlmIChcbiAgICAoKGUgPSBlLnRvTG93ZXJDYXNlKCkpLCAoZSA9IG5hbWVzW2VdIHx8IGlzb1tlXSB8fCBlKSwgIWlzb0tleXMuaW5jbHVkZXMoZSkpXG4gIClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBsYW5ndWFnZSBcIiR7ZX1cIiBpcyBub3QgcGFydCBvZiB0aGUgSVNPIDYzOS0xYCk7XG4gIHJldHVybiBlO1xufTtcblxuZnVuY3Rpb24gQ2FjaGUoKSB7XG4gIHZhciBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgZnVuY3Rpb24gYShhKSB7XG4gICAgZGVsZXRlIGVbYV07XG4gIH1cbiAgKHRoaXMuc2V0ID0gZnVuY3Rpb24gKG4sIGksIHIpIHtcbiAgICBpZiAodm9pZCAwICE9PSByICYmICgnbnVtYmVyJyAhPSB0eXBlb2YgciB8fCBpc05hTihyKSB8fCByIDw9IDApKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWNoZSB0aW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB2YXIgdCA9IGVbbl07XG4gICAgdCAmJiBjbGVhclRpbWVvdXQodC50aW1lb3V0KTtcbiAgICB2YXIgbyA9IHsgdmFsdWU6IGksIGV4cGlyZTogciArIERhdGUubm93KCkgfTtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaXNOYU4oby5leHBpcmUpIHx8IChvLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGEobiksIHIpKSwgKGVbbl0gPSBvKSwgaVxuICAgICk7XG4gIH0pLFxuICAgICh0aGlzLmRlbCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICB2YXIgaSA9ICEwLFxuICAgICAgICByID0gZVtuXTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHJcbiAgICAgICAgICA/IChjbGVhclRpbWVvdXQoci50aW1lb3V0KSxcbiAgICAgICAgICAgICFpc05hTihyLmV4cGlyZSkgJiYgci5leHBpcmUgPCBEYXRlLm5vdygpICYmIChpID0gITEpKVxuICAgICAgICAgIDogKGkgPSAhMSksXG4gICAgICAgIGkgJiYgYShuKSxcbiAgICAgICAgaVxuICAgICAgKTtcbiAgICB9KSxcbiAgICAodGhpcy5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGEgaW4gZSkgY2xlYXJUaW1lb3V0KGVbYV0udGltZW91dCk7XG4gICAgICBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9KSxcbiAgICAodGhpcy5nZXQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgdmFyIG4gPSBlW2FdO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gbikge1xuICAgICAgICBpZiAoaXNOYU4obi5leHBpcmUpIHx8IG4uZXhwaXJlID49IERhdGUubm93KCkpIHJldHVybiBuLnZhbHVlO1xuICAgICAgICBkZWxldGUgZVthXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufVxuY29uc3QgZXhwJDEgPSBuZXcgQ2FjaGUoKTtcbmV4cCQxLkNhY2hlID0gQ2FjaGU7XG5jb25zdCBiYXNlID0gJ2h0dHBzOi8vdHJhbnNsYXRlLmdvb2dsZWFwaXMuY29tL3RyYW5zbGF0ZV9hL3NpbmdsZSc7XG52YXIgZ29vZ2xlID0ge1xuICAgIGZldGNoOiAoeyBrZXk6IGUsIGZyb206IGEsIHRvOiBuLCB0ZXh0OiBpIH0pID0+IFtcbiAgICAgIGAke2Jhc2V9P2NsaWVudD1ndHgmc2w9JHthfSZ0bD0ke259JmR0PXQmcT0ke2VuY29kZVVSSShpKX1gLFxuICAgIF0sXG4gICAgcGFyc2U6IGUgPT5cbiAgICAgIGUuanNvbigpLnRoZW4oZSA9PiB7XG4gICAgICAgIGlmICghKGUgPSBlICYmIGVbMF0gJiYgZVswXVswXSAmJiBlWzBdLm1hcChlID0+IGVbMF0pLmpvaW4oJycpKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zbGF0aW9uIG5vdCBmb3VuZCcpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pLFxuICB9LFxuICB5YW5kZXggPSB7XG4gICAgbmVlZGtleTogITAsXG4gICAgZmV0Y2g6ICh7IGtleTogZSwgZnJvbTogYSwgdG86IG4sIHRleHQ6IGkgfSkgPT4gW1xuICAgICAgYGh0dHBzOi8vdHJhbnNsYXRlLnlhbmRleC5uZXQvYXBpL3YxLjUvdHIuanNvbi90cmFuc2xhdGU/a2V5PSR7ZX0mbGFuZz0ke2F9LSR7bn0mdGV4dD0ke2VuY29kZVVSSUNvbXBvbmVudChpKX1gLFxuICAgICAgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogJycgfSxcbiAgICBdLFxuICAgIHBhcnNlOiBlID0+XG4gICAgICBlLmpzb24oKS50aGVuKGUgPT4ge1xuICAgICAgICBpZiAoMjAwICE9PSBlLmNvZGUpIHRocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZS50ZXh0WzBdO1xuICAgICAgfSksXG4gIH07XG5jb25zdCBsaWJyZVVybCA9ICdodHRwczovL2xpYnJldHJhbnNsYXRlLmNvbS90cmFuc2xhdGUnO1xudmFyIGxpYnJlID0ge1xuICAgIG5lZWRrZXk6ICExLFxuICAgIGZldGNoOiAoeyB1cmw6IGUgPSBsaWJyZVVybCwga2V5OiBhLCBmcm9tOiBuLCB0bzogaSwgdGV4dDogciB9KSA9PiBbXG4gICAgICBlLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBxOiByLCBzb3VyY2U6IG4sIHRhcmdldDogaSwgYXBpX2tleTogYSB9KSxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgcGFyc2U6IGUgPT5cbiAgICAgIGUuanNvbigpLnRoZW4oZSA9PiB7XG4gICAgICAgIGlmICghZSkgdGhyb3cgbmV3IEVycm9yKCdObyByZXNwb25zZSBmb3VuZCcpO1xuICAgICAgICBpZiAoZS5lcnJvcikgdGhyb3cgbmV3IEVycm9yKGUuZXJyb3IpO1xuICAgICAgICBpZiAoIWUudHJhbnNsYXRlZFRleHQpIHRocm93IG5ldyBFcnJvcignTm8gcmVzcG9uc2UgZm91bmQnKTtcbiAgICAgICAgcmV0dXJuIGUudHJhbnNsYXRlZFRleHQ7XG4gICAgICB9KSxcbiAgfSxcbiAgZGVlcGwgPSB7XG4gICAgbmVlZGtleTogITAsXG4gICAgZmV0Y2g6ICh7IGtleTogZSwgZnJvbTogYSwgdG86IG4sIHRleHQ6IGkgfSkgPT4gW1xuICAgICAgYGh0dHBzOi8vYXBpJHsvOmZ4JC8udGVzdChlKSA/ICctZnJlZScgOiAnJ30uZGVlcGwuY29tL3YyL3RyYW5zbGF0ZT9hdXRoX2tleT0ke2V9JnNvdXJjZV9sYW5nPSR7YX0mdGFyZ2V0X2xhbmc9JHtufSZ0ZXh0PSR7KGkgPSBlbmNvZGVVUklDb21wb25lbnQoaSkpfWAsXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiAnJyB9LFxuICAgIF0sXG4gICAgcGFyc2U6IGFzeW5jIGUgPT4ge1xuICAgICAgaWYgKCFlLm9rKSB7XG4gICAgICAgIGlmICg0MDMgPT09IGUuc3RhdHVzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aCBFcnJvciwgcGxlYXNlIHJldmlldyB0aGUga2V5IGZvciBEZWVwTCcpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yICR7ZS5zdGF0dXN9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZS5qc29uKCkudGhlbihlID0+IGUudHJhbnNsYXRpb25zWzBdLnRleHQpO1xuICAgIH0sXG4gIH0sXG4gIGVuZ2luZXMgPSB7IGdvb2dsZTogZ29vZ2xlLCB5YW5kZXg6IHlhbmRleCwgbGlicmU6IGxpYnJlLCBkZWVwbDogZGVlcGwgfTtcbmNvbnN0IFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChlID0ge30pIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zbGF0ZSkpIHJldHVybiBuZXcgVHJhbnNsYXRlKGUpO1xuICAgIGNvbnN0IGEgPSB7XG4gICAgICAgIGZyb206ICdlbicsXG4gICAgICAgIHRvOiAnZW4nLFxuICAgICAgICBjYWNoZTogdm9pZCAwLFxuICAgICAgICBsYW5ndWFnZXM6IGxhbmd1YWdlcyxcbiAgICAgICAgZW5naW5lczogZW5naW5lcyxcbiAgICAgICAgZW5naW5lOiAnZ29vZ2xlJyxcbiAgICAgICAga2V5czoge30sXG4gICAgICB9LFxuICAgICAgbiA9IGFzeW5jIChlLCBhID0ge30pID0+IHtcbiAgICAgICAgJ3N0cmluZycgPT0gdHlwZW9mIGEgJiYgKGEgPSB7IHRvOiBhIH0pLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEudGV4dCA9IGUpLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEuZnJvbSA9IGxhbmd1YWdlcyhhLmZyb20gfHwgbi5mcm9tKSksIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAoYS50byA9IGxhbmd1YWdlcyhhLnRvIHx8IG4udG8pKSwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIChhLmNhY2hlID0gYS5jYWNoZSB8fCBuLmNhY2hlKSwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIChhLmVuZ2luZXMgPSBhLmVuZ2luZXMgfHwge30pLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEuZW5naW5lID0gYS5lbmdpbmUgfHwgbi5lbmdpbmUpLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEudXJsID0gYS51cmwgfHwgbi51cmwpLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEuaWQgPSBhLmlkIHx8IGAke2EudXJsfToke2EuZnJvbX06JHthLnRvfToke2EuZW5naW5lfToke2EudGV4dH1gKSwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIChhLmtleXMgPSBhLmtleXMgfHwgbi5rZXlzIHx8IHt9KTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICBmb3IgKGxldCBlIGluIG4ua2V5cykgYS5rZXlzW2VdID0gYS5rZXlzW2VdIHx8IG4ua2V5c1tlXTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhLmtleSA9IGEua2V5IHx8IG4ua2V5IHx8IGEua2V5c1thLmVuZ2luZV07IC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgaSA9IGEuZW5naW5lc1thLmVuZ2luZV0gfHwgbi5lbmdpbmVzW2EuZW5naW5lXSwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHIgPSBleHAkMS5nZXQoYS5pZCk7XG4gICAgICAgIGlmIChyKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChhLnRvID09PSBhLmZyb20pIHJldHVybiBQcm9taXNlLnJlc29sdmUoYS50ZXh0KTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoaS5uZWVka2V5ICYmICFhLmtleSlcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBgVGhlIGVuZ2luZSBcIiR7YS5lbmdpbmV9XCIgbmVlZHMgYSBrZXksIHBsZWFzZSBwcm92aWRlIGl0YCxcbiAgICAgICAgICApO1xuICAgICAgICBjb25zdCB0ID0gaS5mZXRjaChhKTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gZmV0Y2goLi4udClcbiAgICAgICAgICAudGhlbihpLnBhcnNlKSAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgLnRoZW4oZSA9PiBleHAkMS5zZXQoYS5pZCwgZSwgYS5jYWNoZSkpO1xuICAgICAgfTtcbiAgICBmb3IgKGxldCBpIGluIGEpIG5baV0gPSB2b2lkIDAgPT09IGVbaV0gPyBhW2ldIDogZVtpXTtcbiAgICByZXR1cm4gbjtcbiAgfSwgLy8gQHRzLWlnbm9yZVxuICBleHAgPSBuZXcgVHJhbnNsYXRlKCk7XG5leHAuVHJhbnNsYXRlID0gVHJhbnNsYXRlO1xuZXhwb3J0IHR5cGUgTGFuZ1R5cGUgPSAodHlwZW9mIG5hbWVzKVtrZXlvZiB0eXBlb2YgbmFtZXNdO1xuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZSA9IGV4cCBhcyAoXG4gIHRleHRUb1RyYW5zbGF0ZTogc3RyaW5nLFxuICBvcHRpb25zOiB7IHRvOiBMYW5nVHlwZTsgZnJvbTogTGFuZ1R5cGUgfSxcbikgPT4gc3RyaW5nO1xuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2Jhc2UvdHJhbnNsYXRlLnRzIl19