semantifold 0.3.0 → 0.4.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 (297) hide show
  1. package/README.md +58 -15
  2. package/build/index.d.ts +48 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +57 -8
  5. package/build/src/artifact-path.d.ts +23 -1
  6. package/build/src/artifact-path.d.ts.map +1 -1
  7. package/build/src/artifact-path.js +45 -3
  8. package/build/src/artifacts.d.ts.map +1 -1
  9. package/build/src/artifacts.js +66 -1
  10. package/build/src/backends/c-validation.d.ts.map +1 -1
  11. package/build/src/backends/c-validation.js +7 -3
  12. package/build/src/backends/cpp-validation.d.ts.map +1 -1
  13. package/build/src/backends/cpp-validation.js +7 -3
  14. package/build/src/backends/csharp.js +7 -1
  15. package/build/src/backends/dart-runtime.d.ts +2 -0
  16. package/build/src/backends/dart-runtime.d.ts.map +1 -0
  17. package/build/src/backends/dart-runtime.js +41 -0
  18. package/build/src/backends/dart.d.ts +20 -0
  19. package/build/src/backends/dart.d.ts.map +1 -0
  20. package/build/src/backends/dart.js +321 -0
  21. package/build/src/backends/effects.d.ts +60 -0
  22. package/build/src/backends/effects.d.ts.map +1 -0
  23. package/build/src/backends/effects.js +746 -0
  24. package/build/src/backends/go.js +18 -4
  25. package/build/src/backends/identifiers.d.ts +36 -4
  26. package/build/src/backends/identifiers.d.ts.map +1 -1
  27. package/build/src/backends/identifiers.js +154 -10
  28. package/build/src/backends/index.d.ts.map +1 -1
  29. package/build/src/backends/index.js +27 -4
  30. package/build/src/backends/ios.d.ts +68 -0
  31. package/build/src/backends/ios.d.ts.map +1 -0
  32. package/build/src/backends/ios.js +1503 -0
  33. package/build/src/backends/java.d.ts.map +1 -1
  34. package/build/src/backends/java.js +429 -36
  35. package/build/src/backends/javascript.d.ts +6 -0
  36. package/build/src/backends/javascript.d.ts.map +1 -1
  37. package/build/src/backends/javascript.js +380 -24
  38. package/build/src/backends/kotlin-runtime.d.ts +3 -0
  39. package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
  40. package/build/src/backends/kotlin-runtime.js +29 -0
  41. package/build/src/backends/kotlin.d.ts +23 -0
  42. package/build/src/backends/kotlin.d.ts.map +1 -0
  43. package/build/src/backends/kotlin.js +136 -0
  44. package/build/src/backends/native-validation.d.ts +2 -2
  45. package/build/src/backends/native-validation.d.ts.map +1 -1
  46. package/build/src/backends/native-validation.js +2 -2
  47. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  48. package/build/src/backends/ordered-expressions.js +39 -7
  49. package/build/src/backends/php-stdlib-support.d.ts +19 -0
  50. package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
  51. package/build/src/backends/php-stdlib-support.js +227 -0
  52. package/build/src/backends/php.d.ts.map +1 -1
  53. package/build/src/backends/php.js +448 -33
  54. package/build/src/backends/program.d.ts +81 -0
  55. package/build/src/backends/program.d.ts.map +1 -0
  56. package/build/src/backends/program.js +1308 -0
  57. package/build/src/backends/python.js +7 -1
  58. package/build/src/backends/ruby.d.ts.map +1 -1
  59. package/build/src/backends/ruby.js +310 -24
  60. package/build/src/backends/rust-runtime.d.ts +7 -0
  61. package/build/src/backends/rust-runtime.d.ts.map +1 -0
  62. package/build/src/backends/rust-runtime.js +32 -0
  63. package/build/src/backends/rust-validation.d.ts +9 -0
  64. package/build/src/backends/rust-validation.d.ts.map +1 -0
  65. package/build/src/backends/rust-validation.js +78 -0
  66. package/build/src/backends/rust.d.ts +24 -0
  67. package/build/src/backends/rust.d.ts.map +1 -0
  68. package/build/src/backends/rust.js +344 -0
  69. package/build/src/backends/scalars.d.ts +14 -6
  70. package/build/src/backends/scalars.d.ts.map +1 -1
  71. package/build/src/backends/scalars.js +167 -17
  72. package/build/src/backends/shared.d.ts +23 -4
  73. package/build/src/backends/shared.d.ts.map +1 -1
  74. package/build/src/backends/shared.js +2158 -62
  75. package/build/src/backends/stdlib-support.d.ts +14 -0
  76. package/build/src/backends/stdlib-support.d.ts.map +1 -0
  77. package/build/src/backends/stdlib-support.js +237 -0
  78. package/build/src/backends/swift-runtime.d.ts +3 -0
  79. package/build/src/backends/swift-runtime.d.ts.map +1 -0
  80. package/build/src/backends/swift-runtime.js +14 -0
  81. package/build/src/backends/swift.d.ts +8 -0
  82. package/build/src/backends/swift.d.ts.map +1 -0
  83. package/build/src/backends/swift.js +127 -0
  84. package/build/src/backends/typescript.d.ts.map +1 -1
  85. package/build/src/backends/typescript.js +344 -24
  86. package/build/src/backends/wasm.d.ts +43 -0
  87. package/build/src/backends/wasm.d.ts.map +1 -0
  88. package/build/src/backends/wasm.js +2164 -0
  89. package/build/src/backends/writer.d.ts +235 -4
  90. package/build/src/backends/writer.d.ts.map +1 -1
  91. package/build/src/backends/writer.js +468 -3
  92. package/build/src/diagnostic.d.ts +4 -3
  93. package/build/src/diagnostic.d.ts.map +1 -1
  94. package/build/src/diagnostic.js +5 -3
  95. package/build/src/frontends/c.d.ts.map +1 -1
  96. package/build/src/frontends/c.js +5 -3
  97. package/build/src/frontends/cpp.d.ts.map +1 -1
  98. package/build/src/frontends/cpp.js +5 -3
  99. package/build/src/frontends/csharp.d.ts.map +1 -1
  100. package/build/src/frontends/csharp.js +7 -3
  101. package/build/src/frontends/dart.d.ts +10 -0
  102. package/build/src/frontends/dart.d.ts.map +1 -0
  103. package/build/src/frontends/dart.js +913 -0
  104. package/build/src/frontends/index.d.ts +3 -1
  105. package/build/src/frontends/index.d.ts.map +1 -1
  106. package/build/src/frontends/index.js +15 -5
  107. package/build/src/frontends/java.d.ts +110 -1
  108. package/build/src/frontends/java.d.ts.map +1 -1
  109. package/build/src/frontends/java.js +1725 -70
  110. package/build/src/frontends/javascript-typescript.d.ts +69 -1
  111. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  112. package/build/src/frontends/javascript-typescript.js +1825 -93
  113. package/build/src/frontends/kotlin.d.ts +10 -0
  114. package/build/src/frontends/kotlin.d.ts.map +1 -0
  115. package/build/src/frontends/kotlin.js +685 -0
  116. package/build/src/frontends/php.d.ts +118 -1
  117. package/build/src/frontends/php.d.ts.map +1 -1
  118. package/build/src/frontends/php.js +1583 -76
  119. package/build/src/frontends/program.d.ts +74 -0
  120. package/build/src/frontends/program.d.ts.map +1 -0
  121. package/build/src/frontends/program.js +989 -0
  122. package/build/src/frontends/ruby.d.ts +68 -1
  123. package/build/src/frontends/ruby.d.ts.map +1 -1
  124. package/build/src/frontends/ruby.js +1446 -101
  125. package/build/src/frontends/rust-parser.d.ts +11 -0
  126. package/build/src/frontends/rust-parser.d.ts.map +1 -0
  127. package/build/src/frontends/rust-parser.js +15 -0
  128. package/build/src/frontends/rust.d.ts +14 -0
  129. package/build/src/frontends/rust.d.ts.map +1 -0
  130. package/build/src/frontends/rust.js +715 -0
  131. package/build/src/frontends/scalars.d.ts +10 -0
  132. package/build/src/frontends/scalars.d.ts.map +1 -1
  133. package/build/src/frontends/scalars.js +28 -2
  134. package/build/src/frontends/swift.d.ts +10 -0
  135. package/build/src/frontends/swift.d.ts.map +1 -0
  136. package/build/src/frontends/swift.js +860 -0
  137. package/build/src/frontends/types.d.ts +186 -0
  138. package/build/src/frontends/types.d.ts.map +1 -0
  139. package/build/src/frontends/types.js +634 -0
  140. package/build/src/language-registry.d.ts +46 -4
  141. package/build/src/language-registry.d.ts.map +1 -1
  142. package/build/src/language-registry.js +167 -13
  143. package/build/src/mapping.d.ts +2 -2
  144. package/build/src/mapping.d.ts.map +1 -1
  145. package/build/src/mapping.js +31 -10
  146. package/build/src/semantic/capabilities.d.ts +66 -0
  147. package/build/src/semantic/capabilities.d.ts.map +1 -0
  148. package/build/src/semantic/capabilities.js +649 -0
  149. package/build/src/semantic/effects.d.ts +26 -0
  150. package/build/src/semantic/effects.d.ts.map +1 -0
  151. package/build/src/semantic/effects.js +764 -0
  152. package/build/src/semantic/generics.d.ts +23 -0
  153. package/build/src/semantic/generics.d.ts.map +1 -0
  154. package/build/src/semantic/generics.js +61 -0
  155. package/build/src/semantic/lifetime.d.ts +37 -0
  156. package/build/src/semantic/lifetime.d.ts.map +1 -0
  157. package/build/src/semantic/lifetime.js +527 -0
  158. package/build/src/semantic/provenance.d.ts +9 -2
  159. package/build/src/semantic/provenance.d.ts.map +1 -1
  160. package/build/src/semantic/provenance.js +462 -20
  161. package/build/src/semantic/scalars.d.ts +11 -0
  162. package/build/src/semantic/scalars.d.ts.map +1 -1
  163. package/build/src/semantic/scalars.js +16 -1
  164. package/build/src/semantic/stdlib.d.ts +254 -0
  165. package/build/src/semantic/stdlib.d.ts.map +1 -0
  166. package/build/src/semantic/stdlib.js +880 -0
  167. package/build/src/semantic/types.d.ts +2952 -202
  168. package/build/src/semantic/types.d.ts.map +1 -1
  169. package/build/src/semantic/types.js +688 -15
  170. package/build/src/semantic/validate.d.ts +85 -5
  171. package/build/src/semantic/validate.d.ts.map +1 -1
  172. package/build/src/semantic/validate.js +2576 -98
  173. package/build/src/stdlib-facades.d.ts +304 -0
  174. package/build/src/stdlib-facades.d.ts.map +1 -0
  175. package/build/src/stdlib-facades.js +1167 -0
  176. package/build/src/stdlib-negotiation.d.ts +69 -0
  177. package/build/src/stdlib-negotiation.d.ts.map +1 -0
  178. package/build/src/stdlib-negotiation.js +403 -0
  179. package/build/src/stdlib-providers.d.ts +72 -0
  180. package/build/src/stdlib-providers.d.ts.map +1 -0
  181. package/build/src/stdlib-providers.js +339 -0
  182. package/build/src/toolchains.d.ts +55 -1
  183. package/build/src/toolchains.d.ts.map +1 -1
  184. package/build/src/toolchains.js +15 -4
  185. package/docs/architecture.md +45 -13
  186. package/docs/dart.md +60 -0
  187. package/docs/goals.md +3 -3
  188. package/docs/ios.md +121 -0
  189. package/docs/kotlin.md +42 -0
  190. package/docs/language-support.md +231 -26
  191. package/docs/multi-file-modules.md +52 -0
  192. package/docs/parser-qualification.md +121 -8
  193. package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
  194. package/docs/rust.md +88 -0
  195. package/docs/source-maps.md +15 -7
  196. package/docs/standard-library-portability.md +39 -8
  197. package/docs/swift.md +44 -0
  198. package/docs/testing.md +366 -4
  199. package/docs/webassembly.md +52 -0
  200. package/index.js +63 -8
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
  231. package/package.json +5 -2
  232. package/src/artifact-path.js +47 -2
  233. package/src/artifacts.js +67 -0
  234. package/src/backends/c-validation.js +6 -1
  235. package/src/backends/cpp-validation.js +6 -1
  236. package/src/backends/csharp.js +3 -0
  237. package/src/backends/dart-runtime.js +41 -0
  238. package/src/backends/dart.js +326 -0
  239. package/src/backends/effects.js +705 -0
  240. package/src/backends/go.js +14 -2
  241. package/src/backends/identifiers.js +160 -9
  242. package/src/backends/index.js +27 -2
  243. package/src/backends/ios.js +1612 -0
  244. package/src/backends/java.js +454 -36
  245. package/src/backends/javascript.js +389 -23
  246. package/src/backends/kotlin-runtime.js +29 -0
  247. package/src/backends/kotlin.js +141 -0
  248. package/src/backends/native-validation.js +1 -1
  249. package/src/backends/ordered-expressions.js +40 -6
  250. package/src/backends/php-stdlib-support.js +239 -0
  251. package/src/backends/php.js +469 -32
  252. package/src/backends/program.js +1407 -0
  253. package/src/backends/python.js +3 -0
  254. package/src/backends/ruby.js +326 -23
  255. package/src/backends/rust-runtime.js +34 -0
  256. package/src/backends/rust-validation.js +75 -0
  257. package/src/backends/rust.js +335 -0
  258. package/src/backends/scalars.js +141 -16
  259. package/src/backends/shared.js +2304 -124
  260. package/src/backends/stdlib-support.js +234 -0
  261. package/src/backends/swift-runtime.js +14 -0
  262. package/src/backends/swift.js +132 -0
  263. package/src/backends/typescript.js +349 -23
  264. package/src/backends/wasm.js +2208 -0
  265. package/src/backends/writer.js +520 -2
  266. package/src/diagnostic.js +4 -2
  267. package/src/frontends/c.js +4 -2
  268. package/src/frontends/cpp.js +4 -2
  269. package/src/frontends/csharp.js +4 -2
  270. package/src/frontends/dart.js +963 -0
  271. package/src/frontends/index.js +14 -4
  272. package/src/frontends/java.js +1977 -69
  273. package/src/frontends/javascript-typescript.js +2046 -102
  274. package/src/frontends/kotlin.js +713 -0
  275. package/src/frontends/php.js +1725 -79
  276. package/src/frontends/program.js +1062 -0
  277. package/src/frontends/ruby.js +1624 -98
  278. package/src/frontends/rust-parser.js +18 -0
  279. package/src/frontends/rust.js +714 -0
  280. package/src/frontends/scalars.js +31 -1
  281. package/src/frontends/swift.js +893 -0
  282. package/src/frontends/types.js +750 -0
  283. package/src/language-registry.js +172 -12
  284. package/src/mapping.js +33 -9
  285. package/src/semantic/capabilities.js +671 -0
  286. package/src/semantic/effects.js +737 -0
  287. package/src/semantic/generics.js +58 -0
  288. package/src/semantic/lifetime.js +517 -0
  289. package/src/semantic/provenance.js +412 -19
  290. package/src/semantic/scalars.js +17 -0
  291. package/src/semantic/stdlib.js +921 -0
  292. package/src/semantic/types.js +765 -14
  293. package/src/semantic/validate.js +2934 -209
  294. package/src/stdlib-facades.js +1211 -0
  295. package/src/stdlib-negotiation.js +446 -0
  296. package/src/stdlib-providers.js +377 -0
  297. package/src/toolchains.js +16 -3
@@ -6,6 +6,7 @@ import { validateNativeGraph } from "./native-validation.js";
6
6
  import { validateBackendModule } from "./shared.js";
7
7
  import { SourceWriter } from "./writer.js";
8
8
  import { finalizeMapping, toSourceMapV3 } from "../mapping.js";
9
+ import { preflightEffectCapabilities } from "./effects.js";
9
10
  const syntheticArtifactBase = Object.freeze(["__semantifold_artifacts__"]);
10
11
  /**
11
12
  * Generates target source from a semantic module.
@@ -37,12 +38,27 @@ export function generateArtifactSource({ language, filename, mapDirective = "non
37
38
  filename = record.defaultFilename;
38
39
  if (sourceMapFilename === undefined)
39
40
  sourceMapFilename = `${filename}.map`;
40
- if (language == "cpp")
41
- validateNativeGraph(module, "cpp");
42
- validateBackendModule(module, language);
41
+ const genericDeclaration = [...module?.records ?? [], ...module?.functions ?? []]
42
+ .find((declaration) => (declaration?.typeParameters?.length ?? 0) > 0);
43
+ if (genericDeclaration && !record.features.typeParametersAndGenerics) {
44
+ unsupportedCapability(/** @type {import("../semantic/types.js").BackendLanguage} */ (language), "Task 012 type parameters and generics", genericDeclaration.location ?? module.location);
45
+ }
46
+ if (Array.isArray(module?.records) && module.records.length > 0 && !record.features.closedRecords) {
47
+ unsupportedCapability(/** @type {import("../semantic/types.js").BackendLanguage} */ (language), "Task 009 closed records", module.records[0].location ?? module.location);
48
+ }
49
+ preflightEffectCapabilities(module, /** @type {import("../semantic/types.js").BackendLanguage} */ (language));
50
+ if (language == "cpp" || language == "kotlin" || language == "swift")
51
+ validateNativeGraph(module, language);
52
+ validateBackendModule(module, /** @type {import("../semantic/types.js").BackendLanguage} */ (language));
43
53
  if (language == "cpp" && (mapDirective != "none" || sourceMapFilename != "program.cpp.map")) {
44
54
  unsupportedCapability(language, "CPP map directive or alternate source-map filename", module.location);
45
55
  }
56
+ if (language == "swift" && (mapDirective != "none" || sourceMapFilename != "program.swift.map")) {
57
+ unsupportedCapability(language, "Swift map directive or alternate source-map filename", module.location);
58
+ }
59
+ if (language == "kotlin" && (mapDirective != "none" || sourceMapFilename != "Program.kt.map")) {
60
+ unsupportedCapability(language, "Kotlin map directive or alternate source-map filename", module.location);
61
+ }
46
62
  if (!isValidFilenameMetadata(filename)) {
47
63
  throw new TypeError("Generated filename must be a non-empty single-line string.");
48
64
  }
@@ -51,6 +67,10 @@ export function generateArtifactSource({ language, filename, mapDirective = "non
51
67
  }
52
68
  if (language == "cpp" && filename != "program.cpp")
53
69
  unsupportedCapability(language, "artifact filename other than program.cpp", module.location);
70
+ if (language == "swift" && filename != "program.swift")
71
+ unsupportedCapability(language, "artifact filename other than program.swift", module.location);
72
+ if (language == "kotlin" && filename != "Program.kt")
73
+ unsupportedCapability(language, "artifact filename other than Program.kt", module.location);
54
74
  if (language == "java" && filename.split(/[\\/]/u).at(-1) != "Main.java") {
55
75
  unsupportedCapability(language, "artifact filename basename other than Main.java", module.location);
56
76
  }
@@ -74,6 +94,9 @@ export function generateArtifactSource({ language, filename, mapDirective = "non
74
94
  writer.synthetic(`//# sourceMappingURL=data:application/json;charset=utf-8;base64,${encoded}\n`, "inline source map directive", [module]);
75
95
  }
76
96
  const mapping = finalizeMapping(writer.finish());
97
+ if (language == "swift" || language == "kotlin") {
98
+ languageRegistry.resolve(language, "frontend", module.location)({ filename, source: mapping.generated.content });
99
+ }
77
100
  return {
78
101
  code: mapping.generated.content,
79
102
  filename,
@@ -136,4 +159,4 @@ function base64Utf8(value) {
136
159
  binary += String.fromCharCode(byte);
137
160
  return btoa(binary);
138
161
  }
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN2RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUE7QUFFMUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUM7SUFDL0MsT0FBTyxzQkFBc0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFDO0lBQ3BILE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNuRixNQUFNLE1BQU0sR0FBRyxnQkFB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QUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUV2RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5LCB1bnN1cHBvcnRlZFJvbGV9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7aXNWYWxpZEZpbGVuYW1lTWV0YWRhdGF9IGZyb20gXCIuLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4uL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7dmFsaWRhdGVOYXRpdmVHcmFwaH0gZnJvbSBcIi4vbmF0aXZlLXZhbGlkYXRpb24uanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRNb2R1bGV9IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge1NvdXJjZVdyaXRlcn0gZnJvbSBcIi4vd3JpdGVyLmpzXCJcbmltcG9ydCB7ZmluYWxpemVNYXBwaW5nLCB0b1NvdXJjZU1hcFYzfSBmcm9tIFwiLi4vbWFwcGluZy5qc1wiXG5jb25zdCBzeW50aGV0aWNBcnRpZmFjdEJhc2UgPSBPYmplY3QuZnJlZXplKFtcIl9fc2VtYW50aWZvbGRfYXJ0aWZhY3RzX19cIl0pXG5cbi8qKlxuICogR2VuZXJhdGVzIHRhcmdldCBzb3VyY2UgZnJvbSBhIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW5lcmF0ZWQgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTb3VyY2Uoe2xhbmd1YWdlLCBtb2R1bGV9KSB7XG4gIHJldHVybiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKHtsYW5ndWFnZSwgbW9kdWxlfSkuY29kZVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzb3VyY2UgdG9nZXRoZXIgd2l0aCBhdXRob3JpdGF0aXZlIHJpY2ggYW5kIFNvdXJjZSBNYXAgdjMgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5maWxlbmFtZV0gLSBPdXRwdXQgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBzb3VyY2UgbWFwIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuc291cmNlTWFwRmlsZW5hbWVdIC0gRXh0ZXJuYWwgc291cmNlIG1hcCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbaW5wdXQuc291cmNlc10gLSBTb3VyY2UgY29udGVudCBmb3IgbGVnYWN5IG9yIGFzc2VtYmxlZCBtb2R1bGVzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0fSBHZW5lcmF0ZWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKHtsYW5ndWFnZSwgZmlsZW5hbWUsIG1hcERpcmVjdGl2ZSA9IFwibm9uZVwiLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkge1xuICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCBcInRleHRCYWNrZW5kXCIsIG1vZHVsZT8ubG9jYXRpb24pXG4gIGNvbnN0IHJlY29yZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVjb3JkKGxhbmd1YWdlKVxuXG4gIGlmIChyZWNvcmQuYXJ0aWZhY3RNdWx0aXBsaWNpdHkgIT0gXCJzaW5nbGVcIikgdW5zdXBwb3J0ZWRSb2xlKGxhbmd1YWdlLCBcInNpbmdsZS10ZXh0IGJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcbiAgaWYgKGZpbGVuYW1lID09PSB1bmRlZmluZWQpIGZpbGVuYW1lID0gcmVjb3JkLmRlZmF1bHRGaWxlbmFtZVxuICBpZiAoc291cmNlTWFwRmlsZW5hbWUgPT09IHVuZGVmaW5lZCkgc291cmNlTWFwRmlsZW5hbWUgPSBgJHtmaWxlbmFtZX0ubWFwYFxuICBpZiAobGFuZ3VhZ2UgPT0gXCJjcHBcIikgdmFsaWRhdGVOYXRpdmVHcmFwaChtb2R1bGUsIFwiY3BwXCIpXG4gIHZhbGlkYXRlQmFja2VuZE1vZHVsZShtb2R1bGUsIGxhbmd1YWdlKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImNwcFwiICYmIChtYXBEaXJlY3RpdmUgIT0gXCJub25lXCIgfHwgc291cmNlTWFwRmlsZW5hbWUgIT0gXCJwcm9ncmFtLmNwcC5tYXBcIikpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiQ1BQIG1hcCBkaXJlY3RpdmUgb3IgYWx0ZXJuYXRlIHNvdXJjZS1tYXAgZmlsZW5hbWVcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKCFpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YShmaWxlbmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdGVkIGZpbGVuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc2luZ2xlLWxpbmUgc3RyaW5nLlwiKVxuICB9XG4gIGlmICghaXNWYWxpZEZpbGVuYW1lTWV0YWRhdGEoc291cmNlTWFwRmlsZW5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNvdXJjZSBtYXAgZmlsZW5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzaW5nbGUtbGluZSBzdHJpbmcuXCIpXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiY3BwXCIgJiYgZmlsZW5hbWUgIT0gXCJwcm9ncmFtLmNwcFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgb3RoZXIgdGhhbiBwcm9ncmFtLmNwcFwiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBmaWxlbmFtZS5zcGxpdCgvW1xcXFwvXS91KS5hdCgtMSkgIT0gXCJNYWluLmphdmFcIikge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJhcnRpZmFjdCBmaWxlbmFtZSBiYXNlbmFtZSBvdGhlciB0aGFuIE1haW4uamF2YVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgZmlsZW5hbWUuc3BsaXQoL1tcXFxcL10vdSkuYXQoLTEpICE9IFwicHJvZ3JhbS5weVwiKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImFydGlmYWN0IGZpbGVuYW1lIGJhc2VuYW1lIG90aGVyIHRoYW4gcHJvZ3JhbS5weVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKCFbXCJub25lXCIsIFwiZXh0ZXJuYWxcIiwgXCJpbmxpbmVcIl0uaW5jbHVkZXMobWFwRGlyZWN0aXZlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5zdXBwb3J0ZWQgbWFwIGRpcmVjdGl2ZTogJHttYXBEaXJlY3RpdmV9YClcbiAgaWYgKG1hcERpcmVjdGl2ZSAhPSBcIm5vbmVcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFzY3JpcHRcIiAmJiBsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTb3VyY2UgbWFwIGRpcmVjdGl2ZXMgYXJlIHN1cHBvcnRlZCBvbmx5IGZvciBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IG91dHB1dHMuXCIpXG4gIH1cblxuICBjb25zdCB3cml0ZXIgPSBuZXcgU291cmNlV3JpdGVyKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1vZHVsZSwgc291cmNlc30pXG5cbiAgYmFja2VuZChtb2R1bGUsIHdyaXRlcilcblxuICBjb25zdCBzb3VyY2VNYXAgPSB0b1NvdXJjZU1hcFYzKHdyaXRlci5maW5pc2goKSlcblxuICBpZiAobWFwRGlyZWN0aXZlID09IFwiZXh0ZXJuYWxcIikge1xuICAgIGNvbnN0IHNvdXJjZU1hcFVybCA9IGVuY29kZUFydGlmYWN0UGF0aChyZWxhdGl2ZUFydGlmYWN0UGF0aChmaWxlbmFtZSwgc291cmNlTWFwRmlsZW5hbWUpKVxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgLy8jIHNvdXJjZU1hcHBpbmdVUkw9JHtzb3VyY2VNYXBVcmx9XFxuYCwgXCJleHRlcm5hbCBzb3VyY2UgbWFwIGRpcmVjdGl2ZVwiLCBbbW9kdWxlXSlcbiAgfSBlbHNlIGlmIChtYXBEaXJlY3RpdmUgPT0gXCJpbmxpbmVcIikge1xuICAgIGNvbnN0IGVuY29kZWQgPSBiYXNlNjRVdGY4KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpXG5cbiAgICB3cml0ZXIuc3ludGhldGljKGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJHtlbmNvZGVkfVxcbmAsIFwiaW5saW5lIHNvdXJjZSBtYXAgZGlyZWN0aXZlXCIsIFttb2R1bGVdKVxuICB9XG5cbiAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyh3cml0ZXIuZmluaXNoKCkpXG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50LFxuICAgIGZpbGVuYW1lLFxuICAgIGxhbmd1YWdlLFxuICAgIG1hcHBpbmcsXG4gICAgc291cmNlTWFwLFxuICAgIHNvdXJjZU1hcEZpbGVuYW1lXG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmUgbG9naWNhbCBhcnRpZmFjdCBmaWxlbmFtZSByZWxhdGl2ZSB0byBhbm90aGVyIGFydGlmYWN0J3MgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IGdlbmVyYXRlZEZpbGVuYW1lIC0gR2VuZXJhdGVkIGNvZGUgYXJ0aWZhY3QgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRlZEZpbGVuYW1lIC0gUmVsYXRlZCBhcnRpZmFjdCBmaWxlbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFBvcnRhYmxlIGZvcndhcmQtc2xhc2ggcmVsYXRpdmUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmVBcnRpZmFjdFBhdGgoZ2VuZXJhdGVkRmlsZW5hbWUsIHJlbGF0ZWRGaWxlbmFtZSkge1xuICBjb25zdCBnZW5lcmF0ZWREaXJlY3RvcnkgPSByZXNvbHZlZEFydGlmYWN0UGF0aFBhcnRzKGdlbmVyYXRlZEZpbGVuYW1lKVxuICBjb25zdCByZWxhdGVkID0gcmVzb2x2ZWRBcnRpZmFjdFBhdGhQYXJ0cyhyZWxhdGVkRmlsZW5hbWUpXG5cbiAgZ2VuZXJhdGVkRGlyZWN0b3J5LnBvcCgpXG4gIGxldCBjb21tb24gPSAwXG5cbiAgd2hpbGUgKGNvbW1vbiA8IGdlbmVyYXRlZERpcmVjdG9yeS5sZW5ndGggJiYgY29tbW9uIDwgcmVsYXRlZC5sZW5ndGggJiYgZ2VuZXJhdGVkRGlyZWN0b3J5W2NvbW1vbl0gPT0gcmVsYXRlZFtjb21tb25dKSBjb21tb24rK1xuXG4gIHJldHVybiBbLi4uZ2VuZXJhdGVkRGlyZWN0b3J5LnNsaWNlKGNvbW1vbikubWFwKCgpID0+IFwiLi5cIiksIC4uLnJlbGF0ZWQuc2xpY2UoY29tbW9uKV0uam9pbihcIi9cIikgfHwgXCIuXCJcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBzZXBhcmF0b3JzIGFuZCBkb3Qgc2VnbWVudHMgYWdhaW5zdCB0aGUgc2hhcmVkIHN5bnRoZXRpYyBhcnRpZmFjdCBiYXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gTG9naWNhbCBhcnRpZmFjdCBmaWxlbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gUmVzb2x2ZWQgcGF0aCBwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZWRBcnRpZmFjdFBhdGhQYXJ0cyhmaWxlbmFtZSkge1xuICBjb25zdCBwYXJ0cyA9IFsuLi5zeW50aGV0aWNBcnRpZmFjdEJhc2VdXG5cbiAgZm9yIChjb25zdCBwYXJ0IG9mIGZpbGVuYW1lLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKS5zcGxpdChcIi9cIikpIHtcbiAgICBpZiAocGFydCA9PSBcIlwiIHx8IHBhcnQgPT0gXCIuXCIpIGNvbnRpbnVlXG4gICAgaWYgKHBhcnQgPT0gXCIuLlwiKSB7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gc3ludGhldGljQXJ0aWZhY3RCYXNlLmxlbmd0aCkgcGFydHMucG9wKClcbiAgICB9IGVsc2UgcGFydHMucHVzaChwYXJ0KVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzXG59XG5cbi8qKlxuICogRW5jb2RlcyBsaXRlcmFsIGZpbGVzeXN0ZW0gcGF0aCBzZWdtZW50cyB3aXRob3V0IGVuY29kaW5nIHN0cnVjdHVyYWwgc2xhc2hlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUmVsYXRpdmUgYXJ0aWZhY3QgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVSTC1zYWZlIHJlbGF0aXZlIGFydGlmYWN0IHBhdGguXG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFydGlmYWN0UGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5tYXAoKHBhcnQpID0+IGVuY29kZVVSSUNvbXBvbmVudChwYXJ0KSkuam9pbihcIi9cIilcbn1cblxuLyoqXG4gKiBFbmNvZGVzIFVuaWNvZGUgSlNPTiB3aXRob3V0IHJlbHlpbmcgb24gYSBOb2RlLW9ubHkgYXJ0aWZhY3QgY29udHJhY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBVbmljb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBVVEYtOC5cbiAqL1xuZnVuY3Rpb24gYmFzZTY0VXRmOCh2YWx1ZSkge1xuICBsZXQgYmluYXJ5ID0gXCJcIlxuXG4gIGZvciAoY29uc3QgYnl0ZSBvZiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKSBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKVxuXG4gIHJldHVybiBidG9hKGJpbmFyeSlcbn1cbiJdfQ==
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN2RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFBO0FBRTFFOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQy9DLE9BQU8sc0JBQXNCLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBQztJQUNwSCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVB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QUssTUFBTSxJQUFJLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0QsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHO1lBQUUsU0FBUTtRQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUMsTUFBTTtnQkFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDOUQsQ0FBQzs7WUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJO0lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzFFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsS0FBSztJQUN2QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFFZixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXZGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHksIHVuc3VwcG9ydGVkUm9sZX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YX0gZnJvbSBcIi4uL2FydGlmYWN0LXBhdGguanNcIlxuaW1wb3J0IHtsYW5ndWFnZVJlZ2lzdHJ5fSBmcm9tIFwiLi4vbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZU5hdGl2ZUdyYXBofSBmcm9tIFwiLi9uYXRpdmUtdmFsaWRhdGlvbi5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZE1vZHVsZX0gZnJvbSBcIi4vc2hhcmVkLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuLi9tYXBwaW5nLmpzXCJcbmltcG9ydCB7cHJlZmxpZ2h0RWZmZWN0Q2FwYWJpbGl0aWVzfSBmcm9tIFwiLi9lZmZlY3RzLmpzXCJcbmNvbnN0IHN5bnRoZXRpY0FydGlmYWN0QmFzZSA9IE9iamVjdC5mcmVlemUoW1wiX19zZW1hbnRpZm9sZF9hcnRpZmFjdHNfX1wiXSlcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGFyZ2V0IHNvdXJjZSBmcm9tIGEgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gR2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IGlucHV0Lm1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEdlbmVyYXRlZCBzb3VyY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVNvdXJjZSh7bGFuZ3VhZ2UsIG1vZHVsZX0pIHtcbiAgcmV0dXJuIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2Uoe2xhbmd1YWdlLCBtb2R1bGV9KS5jb2RlXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNvdXJjZSB0b2dldGhlciB3aXRoIGF1dGhvcml0YXRpdmUgcmljaCBhbmQgU291cmNlIE1hcCB2MyBtYXBwaW5ncy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmZpbGVuYW1lXSAtIE91dHB1dCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7XCJub25lXCIgfCBcImV4dGVybmFsXCIgfCBcImlubGluZVwifSBbaW5wdXQubWFwRGlyZWN0aXZlXSAtIEphdmFTY3JpcHQtZmFtaWx5IHNvdXJjZSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBzb3VyY2UgbWFwIGZpbGVuYW1lLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtpbnB1dC5zb3VyY2VzXSAtIFNvdXJjZSBjb250ZW50IGZvciBsZWdhY3kgb3IgYXNzZW1ibGVkIG1vZHVsZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3R9IEdlbmVyYXRlZCBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2Uoe2xhbmd1YWdlLCBmaWxlbmFtZSwgbWFwRGlyZWN0aXZlID0gXCJub25lXCIsIG1vZHVsZSwgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9KSB7XG4gIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIFwidGV4dEJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcbiAgY29uc3QgcmVjb3JkID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQobGFuZ3VhZ2UpXG5cbiAgaWYgKHJlY29yZC5hcnRpZmFjdE11bHRpcGxpY2l0eSAhPSBcInNpbmdsZVwiKSB1bnN1cHBvcnRlZFJvbGUobGFuZ3VhZ2UsIFwic2luZ2xlLXRleHQgYmFja2VuZFwiLCBtb2R1bGU/LmxvY2F0aW9uKVxuICBpZiAoZmlsZW5hbWUgPT09IHVuZGVmaW5lZCkgZmlsZW5hbWUgPSByZWNvcmQuZGVmYXVsdEZpbGVuYW1lXG4gIGlmIChzb3VyY2VNYXBGaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSBzb3VyY2VNYXBGaWxlbmFtZSA9IGAke2ZpbGVuYW1lfS5tYXBgXG4gIGNvbnN0IGdlbmVyaWNEZWNsYXJhdGlvbiA9IFsuLi5tb2R1bGU/LnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZT8uZnVuY3Rpb25zID8/IFtdXVxuICAgIC5maW5kKChkZWNsYXJhdGlvbikgPT4gKGRlY2xhcmF0aW9uPy50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID8/IDApID4gMClcblxuICBpZiAoZ2VuZXJpY0RlY2xhcmF0aW9uICYmICFyZWNvcmQuZmVhdHVyZXMudHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljcykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSgvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIFwiVGFzayAwMTIgdHlwZSBwYXJhbWV0ZXJzIGFuZCBnZW5lcmljc1wiLCBnZW5lcmljRGVjbGFyYXRpb24ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZT8ucmVjb3JkcykgJiYgbW9kdWxlLnJlY29yZHMubGVuZ3RoID4gMCAmJiAhcmVjb3JkLmZlYXR1cmVzLmNsb3NlZFJlY29yZHMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIG1vZHVsZS5yZWNvcmRzWzBdLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBwcmVmbGlnaHRFZmZlY3RDYXBhYmlsaXRpZXMobW9kdWxlLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSlcbiAgaWYgKGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIpIHZhbGlkYXRlTmF0aXZlR3JhcGgobW9kdWxlLCBsYW5ndWFnZSlcbiAgdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSkpXG5cbiAgaWYgKGxhbmd1YWdlID09IFwiY3BwXCIgJiYgKG1hcERpcmVjdGl2ZSAhPSBcIm5vbmVcIiB8fCBzb3VyY2VNYXBGaWxlbmFtZSAhPSBcInByb2dyYW0uY3BwLm1hcFwiKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJDUFAgbWFwIGRpcmVjdGl2ZSBvciBhbHRlcm5hdGUgc291cmNlLW1hcCBmaWxlbmFtZVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwic3dpZnRcIiAmJiAobWFwRGlyZWN0aXZlICE9IFwibm9uZVwiIHx8IHNvdXJjZU1hcEZpbGVuYW1lICE9IFwicHJvZ3JhbS5zd2lmdC5tYXBcIikpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiU3dpZnQgbWFwIGRpcmVjdGl2ZSBvciBhbHRlcm5hdGUgc291cmNlLW1hcCBmaWxlbmFtZVwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgKG1hcERpcmVjdGl2ZSAhPSBcIm5vbmVcIiB8fCBzb3VyY2VNYXBGaWxlbmFtZSAhPSBcIlByb2dyYW0ua3QubWFwXCIpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIktvdGxpbiBtYXAgZGlyZWN0aXZlIG9yIGFsdGVybmF0ZSBzb3VyY2UtbWFwIGZpbGVuYW1lXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuXG4gIGlmICghaXNWYWxpZEZpbGVuYW1lTWV0YWRhdGEoZmlsZW5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRlZCBmaWxlbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHNpbmdsZS1saW5lIHN0cmluZy5cIilcbiAgfVxuICBpZiAoIWlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhKHNvdXJjZU1hcEZpbGVuYW1lKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTb3VyY2UgbWFwIGZpbGVuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc2luZ2xlLWxpbmUgc3RyaW5nLlwiKVxuICB9XG4gIGlmIChsYW5ndWFnZSA9PSBcImNwcFwiICYmIGZpbGVuYW1lICE9IFwicHJvZ3JhbS5jcHBcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImFydGlmYWN0IGZpbGVuYW1lIG90aGVyIHRoYW4gcHJvZ3JhbS5jcHBcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJzd2lmdFwiICYmIGZpbGVuYW1lICE9IFwicHJvZ3JhbS5zd2lmdFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgb3RoZXIgdGhhbiBwcm9ncmFtLnN3aWZ0XCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgZmlsZW5hbWUgIT0gXCJQcm9ncmFtLmt0XCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJhcnRpZmFjdCBmaWxlbmFtZSBvdGhlciB0aGFuIFByb2dyYW0ua3RcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgZmlsZW5hbWUuc3BsaXQoL1tcXFxcL10vdSkuYXQoLTEpICE9IFwiTWFpbi5qYXZhXCIpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiYXJ0aWZhY3QgZmlsZW5hbWUgYmFzZW5hbWUgb3RoZXIgdGhhbiBNYWluLmphdmFcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIGZpbGVuYW1lLnNwbGl0KC9bXFxcXC9dL3UpLmF0KC0xKSAhPSBcInByb2dyYW0ucHlcIikge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJhcnRpZmFjdCBmaWxlbmFtZSBiYXNlbmFtZSBvdGhlciB0aGFuIHByb2dyYW0ucHlcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghW1wibm9uZVwiLCBcImV4dGVybmFsXCIsIFwiaW5saW5lXCJdLmluY2x1ZGVzKG1hcERpcmVjdGl2ZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIG1hcCBkaXJlY3RpdmU6ICR7bWFwRGlyZWN0aXZlfWApXG4gIGlmIChtYXBEaXJlY3RpdmUgIT0gXCJub25lXCIgJiYgbGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIgJiYgbGFuZ3VhZ2UgIT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU291cmNlIG1hcCBkaXJlY3RpdmVzIGFyZSBzdXBwb3J0ZWQgb25seSBmb3IgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBvdXRwdXRzLlwiKVxuICB9XG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IFNvdXJjZVdyaXRlcih7ZmlsZW5hbWUsIGxhbmd1YWdlLCBtb2R1bGUsIHNvdXJjZXN9KVxuXG4gIGJhY2tlbmQobW9kdWxlLCB3cml0ZXIpXG5cbiAgY29uc3Qgc291cmNlTWFwID0gdG9Tb3VyY2VNYXBWMyh3cml0ZXIuZmluaXNoKCkpXG5cbiAgaWYgKG1hcERpcmVjdGl2ZSA9PSBcImV4dGVybmFsXCIpIHtcbiAgICBjb25zdCBzb3VyY2VNYXBVcmwgPSBlbmNvZGVBcnRpZmFjdFBhdGgocmVsYXRpdmVBcnRpZmFjdFBhdGgoZmlsZW5hbWUsIHNvdXJjZU1hcEZpbGVuYW1lKSlcblxuICAgIHdyaXRlci5zeW50aGV0aWMoYC8vIyBzb3VyY2VNYXBwaW5nVVJMPSR7c291cmNlTWFwVXJsfVxcbmAsIFwiZXh0ZXJuYWwgc291cmNlIG1hcCBkaXJlY3RpdmVcIiwgW21vZHVsZV0pXG4gIH0gZWxzZSBpZiAobWFwRGlyZWN0aXZlID09IFwiaW5saW5lXCIpIHtcbiAgICBjb25zdCBlbmNvZGVkID0gYmFzZTY0VXRmOChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKVxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCR7ZW5jb2RlZH1cXG5gLCBcImlubGluZSBzb3VyY2UgbWFwIGRpcmVjdGl2ZVwiLCBbbW9kdWxlXSlcbiAgfVxuXG4gIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInN3aWZ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIikge1xuICAgIGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShsYW5ndWFnZSwgXCJmcm9udGVuZFwiLCBtb2R1bGUubG9jYXRpb24pKHtmaWxlbmFtZSwgc291cmNlOiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50fSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29kZTogbWFwcGluZy5nZW5lcmF0ZWQuY29udGVudCxcbiAgICBmaWxlbmFtZSxcbiAgICBsYW5ndWFnZSxcbiAgICBtYXBwaW5nLFxuICAgIHNvdXJjZU1hcCxcbiAgICBzb3VyY2VNYXBGaWxlbmFtZVxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIGxvZ2ljYWwgYXJ0aWZhY3QgZmlsZW5hbWUgcmVsYXRpdmUgdG8gYW5vdGhlciBhcnRpZmFjdCdzIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBnZW5lcmF0ZWRGaWxlbmFtZSAtIEdlbmVyYXRlZCBjb2RlIGFydGlmYWN0IGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0ZWRGaWxlbmFtZSAtIFJlbGF0ZWQgYXJ0aWZhY3QgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQb3J0YWJsZSBmb3J3YXJkLXNsYXNoIHJlbGF0aXZlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlQXJ0aWZhY3RQYXRoKGdlbmVyYXRlZEZpbGVuYW1lLCByZWxhdGVkRmlsZW5hbWUpIHtcbiAgY29uc3QgZ2VuZXJhdGVkRGlyZWN0b3J5ID0gcmVzb2x2ZWRBcnRpZmFjdFBhdGhQYXJ0cyhnZW5lcmF0ZWRGaWxlbmFtZSlcbiAgY29uc3QgcmVsYXRlZCA9IHJlc29sdmVkQXJ0aWZhY3RQYXRoUGFydHMocmVsYXRlZEZpbGVuYW1lKVxuXG4gIGdlbmVyYXRlZERpcmVjdG9yeS5wb3AoKVxuICBsZXQgY29tbW9uID0gMFxuXG4gIHdoaWxlIChjb21tb24gPCBnZW5lcmF0ZWREaXJlY3RvcnkubGVuZ3RoICYmIGNvbW1vbiA8IHJlbGF0ZWQubGVuZ3RoICYmIGdlbmVyYXRlZERpcmVjdG9yeVtjb21tb25dID09IHJlbGF0ZWRbY29tbW9uXSkgY29tbW9uKytcblxuICByZXR1cm4gWy4uLmdlbmVyYXRlZERpcmVjdG9yeS5zbGljZShjb21tb24pLm1hcCgoKSA9PiBcIi4uXCIpLCAuLi5yZWxhdGVkLnNsaWNlKGNvbW1vbildLmpvaW4oXCIvXCIpIHx8IFwiLlwiXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgc2VwYXJhdG9ycyBhbmQgZG90IHNlZ21lbnRzIGFnYWluc3QgdGhlIHNoYXJlZCBzeW50aGV0aWMgYXJ0aWZhY3QgYmFzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIExvZ2ljYWwgYXJ0aWZhY3QgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IFJlc29sdmVkIHBhdGggcGFydHMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVkQXJ0aWZhY3RQYXRoUGFydHMoZmlsZW5hbWUpIHtcbiAgY29uc3QgcGFydHMgPSBbLi4uc3ludGhldGljQXJ0aWZhY3RCYXNlXVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBmaWxlbmFtZS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikuc3BsaXQoXCIvXCIpKSB7XG4gICAgaWYgKHBhcnQgPT0gXCJcIiB8fCBwYXJ0ID09IFwiLlwiKSBjb250aW51ZVxuICAgIGlmIChwYXJ0ID09IFwiLi5cIikge1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IHN5bnRoZXRpY0FydGlmYWN0QmFzZS5sZW5ndGgpIHBhcnRzLnBvcCgpXG4gICAgfSBlbHNlIHBhcnRzLnB1c2gocGFydClcbiAgfVxuXG4gIHJldHVybiBwYXJ0c1xufVxuXG4vKipcbiAqIEVuY29kZXMgbGl0ZXJhbCBmaWxlc3lzdGVtIHBhdGggc2VnbWVudHMgd2l0aG91dCBlbmNvZGluZyBzdHJ1Y3R1cmFsIHNsYXNoZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFJlbGF0aXZlIGFydGlmYWN0IHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVUkwtc2FmZSByZWxhdGl2ZSBhcnRpZmFjdCBwYXRoLlxuICovXG5mdW5jdGlvbiBlbmNvZGVBcnRpZmFjdFBhdGgocGF0aCkge1xuICByZXR1cm4gcGF0aC5zcGxpdChcIi9cIikubWFwKChwYXJ0KSA9PiBlbmNvZGVVUklDb21wb25lbnQocGFydCkpLmpvaW4oXCIvXCIpXG59XG5cbi8qKlxuICogRW5jb2RlcyBVbmljb2RlIEpTT04gd2l0aG91dCByZWx5aW5nIG9uIGEgTm9kZS1vbmx5IGFydGlmYWN0IGNvbnRyYWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVW5pY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgVVRGLTguXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NFV0ZjgodmFsdWUpIHtcbiAgbGV0IGJpbmFyeSA9IFwiXCJcblxuICBmb3IgKGNvbnN0IGJ5dGUgb2YgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSkgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSlcblxuICByZXR1cm4gYnRvYShiaW5hcnkpXG59XG4iXX0=
@@ -0,0 +1,68 @@
1
+ export type ConfigurationFragment = {
2
+ content: string;
3
+ field: string;
4
+ };
5
+ export type ConfigurationTextPart = string | ConfigurationFragment;
6
+ export type ConfigurationLine = string | readonly ConfigurationTextPart[];
7
+ export type ConfigurationSpan = {
8
+ end: number;
9
+ field: string;
10
+ start: number;
11
+ };
12
+ export type RenderedConfigurationText = {
13
+ content: string;
14
+ configurationSpans: ConfigurationSpan[];
15
+ };
16
+ export type ConfigurationArtifactSpan = {
17
+ end: number;
18
+ field: string;
19
+ path: string;
20
+ start: number;
21
+ };
22
+ /**
23
+ * Preflights one complete project against the delivered Swift Tasks 001-004 profile.
24
+ * @param {object} input - iOS application generation input.
25
+ * @param {import("../semantic/types.js").SemanticModule} [input.module] - Single module to normalize.
26
+ * @param {import("../semantic/types.js").SemanticProgram} [input.program] - Caller-owned Task 010 project.
27
+ * @param {import("../semantic/types.js").IosApplicationConfigurationInput} [input.configuration] - Closed application configuration.
28
+ * @param {import("../semantic/types.js").IosApplicationAssetInput[]} [input.assets] - Exact caller-provided assets.
29
+ * @returns {{assets: import("../semantic/types.js").IosApplicationAssetInput[], configuration: import("../semantic/types.js").IosApplicationConfiguration, modulePaths: Map<string, string>, modules: import("../semantic/types.js").SemanticModule[], program: import("../semantic/types.js").SemanticProgram, sources: {content: string, filename: string, language?: import("../semantic/types.js").SemanticLanguage}[]}} Prepared application program.
30
+ */
31
+ export declare function preflightIosApplication(input: {
32
+ module?: import("../semantic/types.js").SemanticModule;
33
+ program?: import("../semantic/types.js").SemanticProgram;
34
+ configuration?: import("../semantic/types.js").IosApplicationConfigurationInput;
35
+ assets?: import("../semantic/types.js").IosApplicationAssetInput[];
36
+ }): {
37
+ assets: import("../semantic/types.js").IosApplicationAssetInput[];
38
+ configuration: import("../semantic/types.js").IosApplicationConfiguration;
39
+ modulePaths: Map<string, string>;
40
+ modules: import("../semantic/types.js").SemanticModule[];
41
+ program: import("../semantic/types.js").SemanticProgram;
42
+ sources: {
43
+ content: string;
44
+ filename: string;
45
+ language?: import("../semantic/types.js").SemanticLanguage;
46
+ }[];
47
+ };
48
+ /**
49
+ * Generates the deterministic semantic Swift portion of one iOS application artifact set.
50
+ * @param {Parameters<typeof preflightIosApplication>[0]} input - iOS generation request.
51
+ * @returns {{artifacts: import("../semantic/types.js").GeneratedSetArtifact[], metadata: {applicationManifest: string, platformQualification: string}, target: "ios"}} Candidate artifact set.
52
+ */
53
+ export declare function generateIosApplication(input: Parameters<typeof preflightIosApplication>[0]): {
54
+ artifacts: import("../semantic/types.js").GeneratedSetArtifact[];
55
+ metadata: {
56
+ applicationManifest: string;
57
+ platformQualification: string;
58
+ };
59
+ target: "ios";
60
+ };
61
+ /**
62
+ * Derives collision-checked uppercase 24-hex Xcode object IDs from normalized identities.
63
+ * @param {readonly string[]} identities - Complete ordered object identities.
64
+ * @param {(identity: string) => string} [digest] - Test-only digest seam; production uses built-in SHA-256.
65
+ * @returns {Map<string, string>} Object ID by full input identity.
66
+ */
67
+ export declare function allocateXcodeObjectIds(identities: readonly string[], digest?: (identity: string) => string): Map<string, string>;
68
+ //# sourceMappingURL=ios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../../src/backends/ios.js"],"names":[],"mappings":"AA8EI,YAA4C,qBAAqB,GAAvD;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAuB;AACjE,YAA0C,qBAAqB,GAArD,MAAM,GAAG,qBAAqB,CAAuB;AAC/D,YAAqD,iBAAiB,GAA5D,MAAM,GAAG,SAAS,qBAAqB,EAAE,CAAmB;AACtE,YAAuD,iBAAiB,GAA9D;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAmB;AACxE,YAAsE,yBAAyB,GAArF;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;CAAC,CAA2B;AAC/F,YAAqE,yBAAyB,GAApF;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAA2B;AAgDlG;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAN1C;IAA8D,MAAM,AAApE,CACA,EADQ,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAA+D,OAAO,AAAtE,CACA,EADQ,OAAO,sBAAsB,EAAE,eAAe,CACtD;IAAgF,aAAa,AAA7F,CACA,EADQ,OAAO,sBAAsB,EAAE,gCAAgC,CACvE;IAA0E,MAAM,AAAhF,CACA,EADQ,OAAO,sBAAsB,EAAE,wBAAwB,EAAE,CACjE;CAE0C,GAFhC;IAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,wBAAwB,EAAE,CAAC;IAAC,aAAa,EAAE,OAAO,sBAAsB,EAAE,2BAA2B,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAAA;CAAC,CAiC3Z;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAHjC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAGX,GAF/B;IAAC,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EAAE,CAAC;IAAC,QAAQ,EAAE;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAA;KAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAC,CAiFrK;AAoPD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAJtC,SAAS,MAAM,EAIuB,EAAE,MAAM,AAHtD,CACA,EADQ,CAAC,QAAQ,EAAE,MAAM,KAAK,MAG0F,GAF9G,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8B/B"}