semantifold 0.8.0 → 0.10.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 (171) hide show
  1. package/README.md +11 -5
  2. package/bin/semantifold.js +6 -0
  3. package/build/bin/semantifold.d.ts +3 -0
  4. package/build/bin/semantifold.d.ts.map +1 -0
  5. package/build/bin/semantifold.js +5 -0
  6. package/build/index.d.ts +9 -0
  7. package/build/index.d.ts.map +1 -1
  8. package/build/index.js +10 -1
  9. package/build/src/artifact-path.d.ts +16 -0
  10. package/build/src/artifact-path.d.ts.map +1 -1
  11. package/build/src/artifact-path.js +29 -3
  12. package/build/src/backends/c-check.d.ts +7 -0
  13. package/build/src/backends/c-check.d.ts.map +1 -0
  14. package/build/src/backends/c-check.js +65 -0
  15. package/build/src/backends/check-plan.d.ts +96 -0
  16. package/build/src/backends/check-plan.d.ts.map +1 -0
  17. package/build/src/backends/check-plan.js +135 -0
  18. package/build/src/backends/cpp-check.d.ts +7 -0
  19. package/build/src/backends/cpp-check.d.ts.map +1 -0
  20. package/build/src/backends/cpp-check.js +59 -0
  21. package/build/src/backends/csharp-check.d.ts +7 -0
  22. package/build/src/backends/csharp-check.d.ts.map +1 -0
  23. package/build/src/backends/csharp-check.js +125 -0
  24. package/build/src/backends/csharp.d.ts +1 -0
  25. package/build/src/backends/csharp.d.ts.map +1 -1
  26. package/build/src/backends/csharp.js +5 -4
  27. package/build/src/backends/dart-check.d.ts +7 -0
  28. package/build/src/backends/dart-check.d.ts.map +1 -0
  29. package/build/src/backends/dart-check.js +103 -0
  30. package/build/src/backends/dart.d.ts +2 -0
  31. package/build/src/backends/dart.d.ts.map +1 -1
  32. package/build/src/backends/dart.js +5 -5
  33. package/build/src/backends/go-check.d.ts +7 -0
  34. package/build/src/backends/go-check.d.ts.map +1 -0
  35. package/build/src/backends/go-check.js +77 -0
  36. package/build/src/backends/go.d.ts +1 -0
  37. package/build/src/backends/go.d.ts.map +1 -1
  38. package/build/src/backends/go.js +3 -3
  39. package/build/src/backends/java-check.d.ts +21 -0
  40. package/build/src/backends/java-check.d.ts.map +1 -0
  41. package/build/src/backends/java-check.js +73 -0
  42. package/build/src/backends/javascript-check.d.ts +7 -0
  43. package/build/src/backends/javascript-check.d.ts.map +1 -0
  44. package/build/src/backends/javascript-check.js +29 -0
  45. package/build/src/backends/kotlin-check.d.ts +7 -0
  46. package/build/src/backends/kotlin-check.d.ts.map +1 -0
  47. package/build/src/backends/kotlin-check.js +31 -0
  48. package/build/src/backends/php-check.d.ts +7 -0
  49. package/build/src/backends/php-check.d.ts.map +1 -0
  50. package/build/src/backends/php-check.js +21 -0
  51. package/build/src/backends/program.d.ts +7 -0
  52. package/build/src/backends/program.d.ts.map +1 -1
  53. package/build/src/backends/program.js +16 -1
  54. package/build/src/backends/python-check.d.ts +7 -0
  55. package/build/src/backends/python-check.d.ts.map +1 -0
  56. package/build/src/backends/python-check.js +28 -0
  57. package/build/src/backends/ruby-check.d.ts +7 -0
  58. package/build/src/backends/ruby-check.d.ts.map +1 -0
  59. package/build/src/backends/ruby-check.js +21 -0
  60. package/build/src/backends/rust-check.d.ts +7 -0
  61. package/build/src/backends/rust-check.d.ts.map +1 -0
  62. package/build/src/backends/rust-check.js +65 -0
  63. package/build/src/backends/swift-check.d.ts +7 -0
  64. package/build/src/backends/swift-check.d.ts.map +1 -0
  65. package/build/src/backends/swift-check.js +77 -0
  66. package/build/src/backends/typescript-check.d.ts +7 -0
  67. package/build/src/backends/typescript-check.d.ts.map +1 -0
  68. package/build/src/backends/typescript-check.js +33 -0
  69. package/build/src/backends/zig-check.d.ts +7 -0
  70. package/build/src/backends/zig-check.d.ts.map +1 -0
  71. package/build/src/backends/zig-check.js +70 -0
  72. package/build/src/diagnostic.d.ts +13 -1
  73. package/build/src/diagnostic.d.ts.map +1 -1
  74. package/build/src/diagnostic.js +14 -2
  75. package/build/src/frontends/program.d.ts +6 -0
  76. package/build/src/frontends/program.d.ts.map +1 -1
  77. package/build/src/frontends/program.js +9 -1
  78. package/build/src/language-registry.d.ts +54 -0
  79. package/build/src/language-registry.d.ts.map +1 -1
  80. package/build/src/language-registry.js +107 -5
  81. package/build/src/project-build.d.ts +172 -0
  82. package/build/src/project-build.d.ts.map +1 -0
  83. package/build/src/project-build.js +320 -0
  84. package/build/src/project-cli.d.ts +40 -0
  85. package/build/src/project-cli.d.ts.map +1 -0
  86. package/build/src/project-cli.js +145 -0
  87. package/build/src/project-manifest.d.ts +148 -0
  88. package/build/src/project-manifest.d.ts.map +1 -0
  89. package/build/src/project-manifest.js +432 -0
  90. package/build/src/project-reporter.d.ts +81 -0
  91. package/build/src/project-reporter.d.ts.map +1 -0
  92. package/build/src/project-reporter.js +293 -0
  93. package/build/src/project-snapshot.d.ts +129 -0
  94. package/build/src/project-snapshot.d.ts.map +1 -0
  95. package/build/src/project-snapshot.js +362 -0
  96. package/build/src/project-watch-reporter.d.ts +125 -0
  97. package/build/src/project-watch-reporter.d.ts.map +1 -0
  98. package/build/src/project-watch-reporter.js +280 -0
  99. package/build/src/project-watch.d.ts +133 -0
  100. package/build/src/project-watch.d.ts.map +1 -0
  101. package/build/src/project-watch.js +839 -0
  102. package/build/src/publication.d.ts +218 -0
  103. package/build/src/publication.d.ts.map +1 -0
  104. package/build/src/publication.js +1832 -0
  105. package/build/src/semantic/types.d.ts +613 -0
  106. package/build/src/semantic/types.d.ts.map +1 -1
  107. package/build/src/semantic/types.js +163 -1
  108. package/build/src/subprocess.d.ts +8 -0
  109. package/build/src/subprocess.d.ts.map +1 -1
  110. package/build/src/subprocess.js +50 -9
  111. package/build/src/target-check.d.ts +52 -0
  112. package/build/src/target-check.d.ts.map +1 -0
  113. package/build/src/target-check.js +796 -0
  114. package/build/src/toolchains.d.ts.map +1 -1
  115. package/build/src/toolchains.js +3 -3
  116. package/docs/architecture.md +3 -1
  117. package/docs/c.md +4 -0
  118. package/docs/cpp.md +4 -0
  119. package/docs/dart.md +4 -0
  120. package/docs/generated-artifact-publication.md +98 -0
  121. package/docs/kotlin.md +2 -2
  122. package/docs/language-support.md +29 -3
  123. package/docs/project-build-cli.md +147 -0
  124. package/docs/project-watch.md +60 -0
  125. package/docs/rust.md +4 -0
  126. package/docs/swift.md +2 -0
  127. package/docs/testing.md +70 -3
  128. package/docs/watch-build-pipeline.md +42 -26
  129. package/docs/zig.md +2 -0
  130. package/examples/jsdoc-java-watch/expected-output.txt +3 -0
  131. package/examples/jsdoc-java-watch/semantifold.json +23 -0
  132. package/examples/jsdoc-java-watch/src/main.js +21 -0
  133. package/index.js +9 -0
  134. package/package.json +6 -1
  135. package/src/artifact-path.js +31 -2
  136. package/src/backends/c-check.js +80 -0
  137. package/src/backends/check-plan.js +147 -0
  138. package/src/backends/cpp-check.js +73 -0
  139. package/src/backends/csharp-check.js +139 -0
  140. package/src/backends/csharp.js +4 -3
  141. package/src/backends/dart-check.js +117 -0
  142. package/src/backends/dart.js +4 -4
  143. package/src/backends/go-check.js +89 -0
  144. package/src/backends/go.js +2 -2
  145. package/src/backends/java-check.js +77 -0
  146. package/src/backends/javascript-check.js +33 -0
  147. package/src/backends/kotlin-check.js +41 -0
  148. package/src/backends/php-check.js +23 -0
  149. package/src/backends/program.js +17 -0
  150. package/src/backends/python-check.js +30 -0
  151. package/src/backends/ruby-check.js +23 -0
  152. package/src/backends/rust-check.js +78 -0
  153. package/src/backends/swift-check.js +89 -0
  154. package/src/backends/typescript-check.js +37 -0
  155. package/src/backends/zig-check.js +81 -0
  156. package/src/diagnostic.js +9 -1
  157. package/src/frontends/program.js +9 -0
  158. package/src/language-registry.js +113 -4
  159. package/src/project-build.js +353 -0
  160. package/src/project-cli.js +155 -0
  161. package/src/project-manifest.js +479 -0
  162. package/src/project-reporter.js +320 -0
  163. package/src/project-snapshot.js +403 -0
  164. package/src/project-watch-reporter.js +303 -0
  165. package/src/project-watch.js +870 -0
  166. package/src/publication.js +2071 -0
  167. package/src/semantic/types.js +184 -0
  168. package/src/subprocess.js +49 -8
  169. package/src/target-check.js +844 -0
  170. package/src/toolchains.js +3 -2
  171. package/tsconfig.json +1 -1
@@ -4,7 +4,7 @@ import { finalizeMapping, toSourceMapV3 } from "../mapping.js";
4
4
  import { validateBackendModule, emitExpression } from "./shared.js";
5
5
  import { emitScalarType } from "./scalars.js";
6
6
  import { SourceWriter } from "./writer.js";
7
- const project = `<Project Sdk="Microsoft.NET.Sdk">
7
+ export const csharpProjectManifest = `<Project Sdk="Microsoft.NET.Sdk">
8
8
  <PropertyGroup>
9
9
  <OutputType>Exe</OutputType>
10
10
  <TargetFramework>net10.0</TargetFramework>
@@ -23,13 +23,14 @@ const project = `<Project Sdk="Microsoft.NET.Sdk">
23
23
  <DebugType>none</DebugType>
24
24
  <UseAppHost>false</UseAppHost>
25
25
  <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
26
+ <SemantifoldCompileItems Condition="'$(SemantifoldCompileItems)' == ''">Program.cs</SemantifoldCompileItems>
26
27
  <AssemblyName>Semantifold</AssemblyName>
27
28
  <RootNamespace>Semantifold.Generated</RootNamespace>
28
29
  <StartupObject>Semantifold.Generated.Program</StartupObject>
29
30
  <PathMap>$(MSBuildProjectDirectory)=/_/</PathMap>
30
31
  </PropertyGroup>
31
32
  <ItemGroup>
32
- <Compile Include="Program.cs" />
33
+ <Compile Include="$(SemantifoldCompileItems)" />
33
34
  </ItemGroup>
34
35
  </Project>
35
36
  `;
@@ -62,7 +63,7 @@ export function generateCSharpProject({ filename, mapDirective, module, sourceMa
62
63
  provenance: { kind: "text", mapping, sourceMap: toSourceMapV3(mapping) },
63
64
  role: "entry"
64
65
  }, {
65
- content: project,
66
+ content: csharpProjectManifest,
66
67
  contentKind: "text",
67
68
  mediaType: "application/xml",
68
69
  ownership: "generated",
@@ -262,4 +263,4 @@ function relatedRootOrigins(root) {
262
263
  function identity(name) {
263
264
  return name;
264
265
  }
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NoYXJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2NzaGFycC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDNUQsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsTUFBTSxPQUFPLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E0QmYsQ0FBQTtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUM7SUFDaEcscUJBQXFCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3ZDLElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkQscUJBQXFCLENBQUMsUUFBUSxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM3RixDQUFDO0lBQ0QsSUFBSSxZQUFZLEtBQUssU0FBUyxJQUFJLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2xFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFF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QUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDeEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDM0csQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLDRCQUE0QixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQy9FLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDekYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzNELFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFBO0lBQy9ELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM5RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxT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QUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekQsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksYUFBYTtRQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsNENBQTRDLENBQUMsQ0FBQTtJQUN0RyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7SUFDbEUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3BGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7SUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFB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SSxDQUFDLENBQUMsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUMsSUFBSTtJQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDNUcsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFBO0lBRWhHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2hILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBSTtJQUNwQixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7ZmluYWxpemVNYXBwaW5nLCB0b1NvdXJjZU1hcFYzfSBmcm9tIFwiLi4vbWFwcGluZy5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZE1vZHVsZSwgZW1pdEV4cHJlc3Npb259IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuXG5jb25zdCBwcm9qZWN0ID0gYDxQcm9qZWN0IFNkaz1cIk1pY3Jvc29mdC5ORVQuU2RrXCI+XG4gIDxQcm9wZXJ0eUdyb3VwPlxuICAgIDxPdXRwdXRUeXBlPkV4ZTwvT3V0cHV0VHlwZT5cbiAgICA8VGFyZ2V0RnJhbWV3b3JrPm5ldDEwLjA8L1RhcmdldEZyYW1ld29yaz5cbiAgICA8TGFuZ1ZlcnNpb24+MTQuMDwvTGFuZ1ZlcnNpb24+XG4gICAgPE51bGxhYmxlPmVuYWJsZTwvTnVsbGFibGU+XG4gICAgPFRyZWF0V2FybmluZ3NBc0Vycm9ycz50cnVlPC9UcmVhdFdhcm5pbmdzQXNFcnJvcnM+XG4gICAgPFdhcm5pbmdMZXZlbD4xMDwvV2FybmluZ0xldmVsPlxuICAgIDxDaGVja0Zvck92ZXJmbG93VW5kZXJmbG93PnRydWU8L0NoZWNrRm9yT3ZlcmZsb3dVbmRlcmZsb3c+XG4gICAgPEFsbG93VW5zYWZlQmxvY2tzPmZhbHNlPC9BbGxvd1Vuc2FmZUJsb2Nrcz5cbiAgICA8SW1wbGljaXRVc2luZ3M+ZGlzYWJsZTwvSW1wbGljaXRVc2luZ3M+XG4gICAgPEVuYWJsZU5FVEFuYWx5emVycz5mYWxzZTwvRW5hYmxlTkVUQW5hbHl6ZXJzPlxuICAgIDxJbnZhcmlhbnRHbG9iYWxpemF0aW9uPnRydWU8L0ludmFyaWFudEdsb2JhbGl6YXRpb24+XG4gICAgPFByZWRlZmluZWRDdWx0dXJlc09ubHk+dHJ1ZTwvUHJlZGVmaW5lZEN1bHR1cmVzT25seT5cbiAgICA8RGV0ZXJtaW5pc3RpYz50cnVlPC9EZXRlcm1pbmlzdGljPlxuICAgIDxDb250aW51b3VzSW50ZWdyYXRpb25CdWlsZD50cnVlPC9Db250aW51b3VzSW50ZWdyYXRpb25CdWlsZD5cbiAgICA8RGVidWdUeXBlPm5vbmU8L0RlYnVnVHlwZT5cbiAgICA8VXNlQXBwSG9zdD5mYWxzZTwvVXNlQXBwSG9zdD5cbiAgICA8RW5hYmxlRGVmYXVsdENvbXBpbGVJdGVtcz5mYWxzZTwvRW5hYmxlRGVmYXVsdENvbXBpbGVJdGVtcz5cbiAgICA8QXNzZW1ibHlOYW1lPlNlbWFudGlmb2xkPC9Bc3NlbWJseU5hbWU+XG4gICAgPFJvb3ROYW1lc3BhY2U+U2VtYW50aWZvbGQuR2VuZXJhdGVkPC9Sb290TmFtZXNwYWNlPlxuICAgIDxTdGFydHVwT2JqZWN0PlNlbWFudGlmb2xkLkdlbmVyYXRlZC5Qcm9ncmFtPC9TdGFydHVwT2JqZWN0PlxuICAgIDxQYXRoTWFwPiQoTVNCdWlsZFByb2plY3REaXJlY3RvcnkpPS9fLzwvUGF0aE1hcD5cbiAgPC9Qcm9wZXJ0eUdyb3VwPlxuICA8SXRlbUdyb3VwPlxuICAgIDxDb21waWxlIEluY2x1ZGU9XCJQcm9ncmFtLmNzXCIgLz5cbiAgPC9JdGVtR3JvdXA+XG48L1Byb2plY3Q+XG5gXG5cbi8qKlxuICogRW1pdHMgb25lIGRldGVybWluaXN0aWMgdHdvLWZpbGUgQyMgcHJvamVjdCBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZT86IHN0cmluZywgbWFwRGlyZWN0aXZlPzogdW5rbm93biwgbW9kdWxlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZSwgc291cmNlTWFwRmlsZW5hbWU/OiB1bmtub3duLCBzb3VyY2VzPzoge2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfX0gaW5wdXQgLSBCYWNrZW5kIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7e2FydGlmYWN0czogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXSwgdGFyZ2V0OiBzdHJpbmd9fSBDYW5kaWRhdGUgYXJ0aWZhY3Qgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDU2hhcnBQcm9qZWN0KHtmaWxlbmFtZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkge1xuICB2YWxpZGF0ZUJhY2tlbmRNb2R1bGUobW9kdWxlLCBcImNzaGFycFwiKVxuICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCAmJiBmaWxlbmFtZSAhPSBcIlByb2dyYW0uY3NcIikge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImNzaGFycFwiLCBcImFydGlmYWN0IGZpbGVuYW1lIG90aGVyIHRoYW4gUHJvZ3JhbS5jc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKG1hcERpcmVjdGl2ZSAhPT0gdW5kZWZpbmVkIHx8IHNvdXJjZU1hcEZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJjc2hhcnBcIiwgXCJzb3VyY2UtbWFwIGZpbGVuYW1lIG9yIGRpcmVjdGl2ZSBvcHRpb25cIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IHdyaXRlciA9IG5ldyBTb3VyY2VXcml0ZXIoe2ZpbGVuYW1lOiBcIlByb2dyYW0uY3NcIiwgbGFuZ3VhZ2U6IFwiY3NoYXJwXCIsIG1vZHVsZSwgc291cmNlc30pXG5cbiAgZW1pdFByb2dyYW0obW9kdWxlLCB3cml0ZXIpXG4gIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuICBjb25zdCByb290ID0gbWFwcGluZy5ub2Rlcy5maW5kKCh7cGF0aH0pID0+IHBhdGggPT0gXCJcIilcblxuICBpZiAoIXJvb3QpIHRocm93IG5ldyBFcnJvcihcIlZhbGlkYXRlZCBDIyBtb2R1bGUgb21pdHRlZCBpdHMgY2Fub25pY2FsIHJvb3QgcHJvdmVuYW5jZS5cIilcbiAgcmV0dXJuIHtcbiAgICBhcnRpZmFjdHM6IFt7XG4gICAgICBjb250ZW50OiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50LFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiBcInRleHQveC1jc2hhcnBcIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IFwiUHJvZ3JhbS5jc1wiLFxuICAgICAgcHJvdmVuYW5jZToge2tpbmQ6IFwidGV4dFwiLCBtYXBwaW5nLCBzb3VyY2VNYXA6IHRvU291cmNlTWFwVjMobWFwcGluZyl9LFxuICAgICAgcm9sZTogXCJlbnRyeVwiXG4gICAgfSwge1xuICAgICAgY29udGVudDogcHJvamVjdCxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IFwiU2VtYW50aWZvbGQuY3Nwcm9qXCIsXG4gICAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uOiBcIkRldGVybWluaXN0aWMgLk5FVCAxMCBwcm9qZWN0IG1hbmlmZXN0IGZvciB0aGUgZ2VuZXJhdGVkIEMjIG1vZHVsZS5cIixcbiAgICAgICAgcmVsYXRlZE9yaWdpbnM6IHJlbGF0ZWRSb290T3JpZ2lucyhyb290KX0sXG4gICAgICByb2xlOiBcIm1hbmlmZXN0XCJcbiAgICB9XSxcbiAgICB0YXJnZXQ6IFwiY3NoYXJwXCJcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBmaXhlZCBDIyBmaWxlIHNjYWZmb2xkIGFuZCBzZW1hbnRpYyBib2RpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgbW9kdWxlLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFByb2dyYW0obW9kdWxlLCB3cml0ZXIpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiNudWxsYWJsZSBlbmFibGVcXG5cXG5uYW1lc3BhY2UgU2VtYW50aWZvbGQuR2VuZXJhdGVkO1xcblxcbmludGVybmFsIHN0YXRpYyBjbGFzcyBQcm9ncmFtXFxue1xcblwiLFxuICAgIFwiQyMgbnVsbGFibGUsIG5hbWVzcGFjZSwgYW5kIFByb2dyYW0gc2NhZmZvbGRpbmdcIiwgW21vZHVsZV0pXG4gIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuICAgIGVtaXRGdW5jdGlvbih3cml0ZXIsIGRlY2xhcmF0aW9uLCBpbmRleClcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImVudHJ5LXBvaW50IHNlcGFyYXRvclwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIuc3ludGhldGljKFwiICAgIFwiLCBcImluZGVudGF0aW9uXCIsIFttb2R1bGUuZW50cnlQb2ludF0pXG4gIHdyaXRlci5tYXBwZWQoXCJwcml2YXRlIHN0YXRpYyB2b2lkIE1haW5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBtb2R1bGUuZW50cnlQb2ludH0pXG4gIHdyaXRlci5tYXBwZWQoXCIoKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50fSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbiAgICBcIiwgXCJsaW5lIGJyZWFrIGFuZCBpbmRlbnRhdGlvblwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50fSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW21vZHVsZS5lbnRyeVBvaW50XSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIgICAgICAgIFwiLCBcIi9lbnRyeVBvaW50L2JvZHlcIilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBcIiwgXCJpbmRlbnRhdGlvblwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50fSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbn1cXG5cIiwgXCJDIyBQcm9ncmFtIHNjYWZmb2xkaW5nXCIsIFttb2R1bGVdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBwcml2YXRlIHN0YXRpYyBzZW1hbnRpYyBtZXRob2QuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBGdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEZ1bmN0aW9uIGluZGV4LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRGdW5jdGlvbih3cml0ZXIsIGRlY2xhcmF0aW9uLCBpbmRleCkge1xuICBjb25zdCBwYXRoID0gYC9mdW5jdGlvbnMvJHtpbmRleH1gXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBcIiwgXCJpbmRlbnRhdGlvblwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJwcml2YXRlIHN0YXRpY1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJtZXRob2Qgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJjc2hhcnBcIiwgZGVjbGFyYXRpb24ucmV0dXJuVHlwZSksIHtcbiAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJtZXRob2Qgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWBcblxuICAgIGlmIChwYXJhbWV0ZXJJbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJjc2hhcnBcIiwgcGFyYW1ldGVyLnR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIudHlwZSwgcGF0aDogYCR7cGFyYW1ldGVyUGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInBhcmFtZXRlciBzcGFjaW5nXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICB9KVxuICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbiAgICBcIiwgXCJsaW5lIGJyZWFrIGFuZCBpbmRlbnRhdGlvblwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24uYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiICAgICAgICBcIiwgYCR7cGF0aH0vYm9keWApXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgICAgXCIsIFwiaW5kZW50YXRpb25cIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBvcmRlcmVkIHNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdEJsb2NrKHdyaXRlciwgYmxvY2ssIGluZGVudCwgcGF0aCkge1xuICBibG9jay5zdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCwgaW5kZXgpID0+IGVtaXRTdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWApKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBzdXBwb3J0ZWQgQyMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gU2VtYW50aWMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKSB7XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiBlbWl0TG9jYWwod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aClcbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDIyBUYXNrIDAwNSBleHByZXNzaW9uIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGlmICghc3RhdGVtZW50LmV4cHJlc3Npb24pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDIyBiYXJlIHJldHVybiByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICAgIHdyaXRlci5tYXBwZWQoXCJyZXR1cm5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicmV0dXJuIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJjc2hhcnBcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmVcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJjc2hhcnBcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLm1hcHBlZChcIik7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCAhPSBcIklmU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBDIyBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgd3JpdGVyLm1hcHBlZChcImlmXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjb25kaXRpb25hbCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBcImNzaGFycFwiLCBpZGVudGl0eSlcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5jb25zZXF1ZW50LCBwYXRoOiBgJHtwYXRofS9jb25zZXF1ZW50YH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtpbmRlbnR9ICAgIGAsIGAke3BhdGh9L2NvbnNlcXVlbnRgKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5jb25zZXF1ZW50LCBwYXRoOiBgJHtwYXRofS9jb25zZXF1ZW50YH0pXG4gIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJlbHNlXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBgJHtwYXRofS9hbHRlcm5hdGVgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5hbHRlcm5hdGUsIGAke2luZGVudH0gICAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYClcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmFsdGVybmF0ZSwgcGF0aDogYCR7cGF0aH0vYWx0ZXJuYXRlYH0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudH0gc3RhdGVtZW50IC0gTG9jYWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdExvY2FsKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgpIHtcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmICFzdGF0ZW1lbnQubXV0YWJsZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fS8vIEBzZW1hbnRpZm9sZC1pbW11dGFibGVcXG5gLCBcIkMjIGltbXV0YWJsZS1sb2NhbCBjYXJyaWVyXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudGFyZ2V0LCBwYXRoOiBgJHtwYXRofS90YXJnZXRgLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwiY3NoYXJwXCIsIGlkZW50aXR5KVxuICB9IGVsc2Uge1xuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJjc2hhcnBcIiwgc3RhdGVtZW50LnR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSwgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgXCJjc2hhcnBcIiwgaWRlbnRpdHkpXG4gIH1cbiAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGNhbm9uaWNhbCBtb2R1bGUtcm9vdCBwcm92ZW5hbmNlIHRvIGFydGlmYWN0LWxldmVsIHJlbGF0ZWQgb3JpZ2lucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZX0gcm9vdCAtIENhbm9uaWNhbCByb290IHByb3ZlbmFuY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbltdfSBSZWxhdGVkIG1vZHVsZSBvcmlnaW5zLlxuICovXG5mdW5jdGlvbiByZWxhdGVkUm9vdE9yaWdpbnMocm9vdCkge1xuICBpZiAocm9vdC5vcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSB7XG4gICAgcmV0dXJuIFt7bG9jYXRpb246IHJvb3Qub3JpZ2luLmxvY2F0aW9uLCBub2RlSWQ6IHJvb3QuaWQsIHJvbGU6IFwibW9kdWxlXCIsIHNvdXJjZUlkOiByb290Lm9yaWdpbi5zb3VyY2VJZH1dXG4gIH1cbiAgY29uc3Qgb3JpZ2lucyA9IHJvb3Qub3JpZ2luLmtpbmQgPT0gXCJkZXJpdmVkXCIgPyByb290Lm9yaWdpbi5vcmlnaW5zIDogcm9vdC5vcmlnaW4ucmVsYXRlZE9yaWdpbnNcblxuICByZXR1cm4gb3JpZ2lucy5tYXAoKG9yaWdpbikgPT4gKHsuLi5vcmlnaW4sIG5vZGVJZDogb3JpZ2luLm5vZGVJZCA/PyByb290LmlkLCByb2xlOiBvcmlnaW4ucm9sZSA/PyBcIm1vZHVsZVwifSkpXG59XG5cbi8qKlxuICogUHJlc2VydmVzIGFuIGFscmVhZHkgdmFsaWRhdGVkIEMjIGlkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIElkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgaWRlbnRpZmllci5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkobmFtZSkge1xuICByZXR1cm4gbmFtZVxufVxuIl19
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NoYXJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2NzaGFycC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDNUQsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNkJwQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBQztJQUNoRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdkMsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2RCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUseUNBQXlDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdGLENBQUM7SUFDRCxJQUFJLFlBQVksS0FBSyxTQUFTLElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbEUscUJBQXFCLENBQUMsUUFBUSxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM3RixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEs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QUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0lBQzNHLENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUNwRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMvRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMzRCxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQTtJQUMvRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDOUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJ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QUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLElBQUk7SUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQzVHLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQTtJQUVoRyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQTtBQUNoSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLElBQUk7SUFDcEIsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2ZpbmFsaXplTWFwcGluZywgdG9Tb3VyY2VNYXBWM30gZnJvbSBcIi4uL21hcHBpbmcuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRNb2R1bGUsIGVtaXRFeHByZXNzaW9ufSBmcm9tIFwiLi9zaGFyZWQuanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge1NvdXJjZVdyaXRlcn0gZnJvbSBcIi4vd3JpdGVyLmpzXCJcblxuZXhwb3J0IGNvbnN0IGNzaGFycFByb2plY3RNYW5pZmVzdCA9IGA8UHJvamVjdCBTZGs9XCJNaWNyb3NvZnQuTkVULlNka1wiPlxuICA8UHJvcGVydHlHcm91cD5cbiAgICA8T3V0cHV0VHlwZT5FeGU8L091dHB1dFR5cGU+XG4gICAgPFRhcmdldEZyYW1ld29yaz5uZXQxMC4wPC9UYXJnZXRGcmFtZXdvcms+XG4gICAgPExhbmdWZXJzaW9uPjE0LjA8L0xhbmdWZXJzaW9uPlxuICAgIDxOdWxsYWJsZT5lbmFibGU8L051bGxhYmxlPlxuICAgIDxUcmVhdFdhcm5pbmdzQXNFcnJvcnM+dHJ1ZTwvVHJlYXRXYXJuaW5nc0FzRXJyb3JzPlxuICAgIDxXYXJuaW5nTGV2ZWw+MTA8L1dhcm5pbmdMZXZlbD5cbiAgICA8Q2hlY2tGb3JPdmVyZmxvd1VuZGVyZmxvdz50cnVlPC9DaGVja0Zvck92ZXJmbG93VW5kZXJmbG93PlxuICAgIDxBbGxvd1Vuc2FmZUJsb2Nrcz5mYWxzZTwvQWxsb3dVbnNhZmVCbG9ja3M+XG4gICAgPEltcGxpY2l0VXNpbmdzPmRpc2FibGU8L0ltcGxpY2l0VXNpbmdzPlxuICAgIDxFbmFibGVORVRBbmFseXplcnM+ZmFsc2U8L0VuYWJsZU5FVEFuYWx5emVycz5cbiAgICA8SW52YXJpYW50R2xvYmFsaXphdGlvbj50cnVlPC9JbnZhcmlhbnRHbG9iYWxpemF0aW9uPlxuICAgIDxQcmVkZWZpbmVkQ3VsdHVyZXNPbmx5PnRydWU8L1ByZWRlZmluZWRDdWx0dXJlc09ubHk+XG4gICAgPERldGVybWluaXN0aWM+dHJ1ZTwvRGV0ZXJtaW5pc3RpYz5cbiAgICA8Q29udGludW91c0ludGVncmF0aW9uQnVpbGQ+dHJ1ZTwvQ29udGludW91c0ludGVncmF0aW9uQnVpbGQ+XG4gICAgPERlYnVnVHlwZT5ub25lPC9EZWJ1Z1R5cGU+XG4gICAgPFVzZUFwcEhvc3Q+ZmFsc2U8L1VzZUFwcEhvc3Q+XG4gICAgPEVuYWJsZURlZmF1bHRDb21waWxlSXRlbXM+ZmFsc2U8L0VuYWJsZURlZmF1bHRDb21waWxlSXRlbXM+XG4gICAgPFNlbWFudGlmb2xkQ29tcGlsZUl0ZW1zIENvbmRpdGlvbj1cIickKFNlbWFudGlmb2xkQ29tcGlsZUl0ZW1zKScgPT0gJydcIj5Qcm9ncmFtLmNzPC9TZW1hbnRpZm9sZENvbXBpbGVJdGVtcz5cbiAgICA8QXNzZW1ibHlOYW1lPlNlbWFudGlmb2xkPC9Bc3NlbWJseU5hbWU+XG4gICAgPFJvb3ROYW1lc3BhY2U+U2VtYW50aWZvbGQuR2VuZXJhdGVkPC9Sb290TmFtZXNwYWNlPlxuICAgIDxTdGFydHVwT2JqZWN0PlNlbWFudGlmb2xkLkdlbmVyYXRlZC5Qcm9ncmFtPC9TdGFydHVwT2JqZWN0PlxuICAgIDxQYXRoTWFwPiQoTVNCdWlsZFByb2plY3REaXJlY3RvcnkpPS9fLzwvUGF0aE1hcD5cbiAgPC9Qcm9wZXJ0eUdyb3VwPlxuICA8SXRlbUdyb3VwPlxuICAgIDxDb21waWxlIEluY2x1ZGU9XCIkKFNlbWFudGlmb2xkQ29tcGlsZUl0ZW1zKVwiIC8+XG4gIDwvSXRlbUdyb3VwPlxuPC9Qcm9qZWN0PlxuYFxuXG4vKipcbiAqIEVtaXRzIG9uZSBkZXRlcm1pbmlzdGljIHR3by1maWxlIEMjIHByb2plY3QgY2FuZGlkYXRlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU/OiBzdHJpbmcsIG1hcERpcmVjdGl2ZT86IHVua25vd24sIG1vZHVsZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lPzogdW5rbm93biwgc291cmNlcz86IHtmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX19IGlucHV0IC0gQmFja2VuZCByZXF1ZXN0LlxuICogQHJldHVybnMge3thcnRpZmFjdHM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W10sIHRhcmdldDogc3RyaW5nfX0gQ2FuZGlkYXRlIGFydGlmYWN0IHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ1NoYXJwUHJvamVjdCh7ZmlsZW5hbWUsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pIHtcbiAgdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgXCJjc2hhcnBcIilcbiAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgZmlsZW5hbWUgIT0gXCJQcm9ncmFtLmNzXCIpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJjc2hhcnBcIiwgXCJhcnRpZmFjdCBmaWxlbmFtZSBvdGhlciB0aGFuIFByb2dyYW0uY3NcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChtYXBEaXJlY3RpdmUgIT09IHVuZGVmaW5lZCB8fCBzb3VyY2VNYXBGaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiY3NoYXJwXCIsIFwic291cmNlLW1hcCBmaWxlbmFtZSBvciBkaXJlY3RpdmUgb3B0aW9uXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBjb25zdCB3cml0ZXIgPSBuZXcgU291cmNlV3JpdGVyKHtmaWxlbmFtZTogXCJQcm9ncmFtLmNzXCIsIGxhbmd1YWdlOiBcImNzaGFycFwiLCBtb2R1bGUsIHNvdXJjZXN9KVxuXG4gIGVtaXRQcm9ncmFtKG1vZHVsZSwgd3JpdGVyKVxuICBjb25zdCBtYXBwaW5nID0gZmluYWxpemVNYXBwaW5nKHdyaXRlci5maW5pc2goKSlcbiAgY29uc3Qgcm9vdCA9IG1hcHBpbmcubm9kZXMuZmluZCgoe3BhdGh9KSA9PiBwYXRoID09IFwiXCIpXG5cbiAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoXCJWYWxpZGF0ZWQgQyMgbW9kdWxlIG9taXR0ZWQgaXRzIGNhbm9uaWNhbCByb290IHByb3ZlbmFuY2UuXCIpXG4gIHJldHVybiB7XG4gICAgYXJ0aWZhY3RzOiBbe1xuICAgICAgY29udGVudDogbWFwcGluZy5nZW5lcmF0ZWQuY29udGVudCxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtY3NoYXJwXCIsXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBcIlByb2dyYW0uY3NcIixcbiAgICAgIHByb3ZlbmFuY2U6IHtraW5kOiBcInRleHRcIiwgbWFwcGluZywgc291cmNlTWFwOiB0b1NvdXJjZU1hcFYzKG1hcHBpbmcpfSxcbiAgICAgIHJvbGU6IFwiZW50cnlcIlxuICAgIH0sIHtcbiAgICAgIGNvbnRlbnQ6IGNzaGFycFByb2plY3RNYW5pZmVzdCxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJhcHBsaWNhdGlvbi94bWxcIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IFwiU2VtYW50aWZvbGQuY3Nwcm9qXCIsXG4gICAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uOiBcIkRldGVybWluaXN0aWMgLk5FVCAxMCBwcm9qZWN0IG1hbmlmZXN0IGZvciB0aGUgZ2VuZXJhdGVkIEMjIG1vZHVsZS5cIixcbiAgICAgICAgcmVsYXRlZE9yaWdpbnM6IHJlbGF0ZWRSb290T3JpZ2lucyhyb290KX0sXG4gICAgICByb2xlOiBcIm1hbmlmZXN0XCJcbiAgICB9XSxcbiAgICB0YXJnZXQ6IFwiY3NoYXJwXCJcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBmaXhlZCBDIyBmaWxlIHNjYWZmb2xkIGFuZCBzZW1hbnRpYyBib2RpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgbW9kdWxlLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFByb2dyYW0obW9kdWxlLCB3cml0ZXIpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiNudWxsYWJsZSBlbmFibGVcXG5cXG5uYW1lc3BhY2UgU2VtYW50aWZvbGQuR2VuZXJhdGVkO1xcblxcbmludGVybmFsIHN0YXRpYyBjbGFzcyBQcm9ncmFtXFxue1xcblwiLFxuICAgIFwiQyMgbnVsbGFibGUsIG5hbWVzcGFjZSwgYW5kIFByb2dyYW0gc2NhZmZvbGRpbmdcIiwgW21vZHVsZV0pXG4gIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuICAgIGVtaXRGdW5jdGlvbih3cml0ZXIsIGRlY2xhcmF0aW9uLCBpbmRleClcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImVudHJ5LXBvaW50IHNlcGFyYXRvclwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIuc3ludGhldGljKFwiICAgIFwiLCBcImluZGVudGF0aW9uXCIsIFttb2R1bGUuZW50cnlQb2ludF0pXG4gIHdyaXRlci5tYXBwZWQoXCJwcml2YXRlIHN0YXRpYyB2b2lkIE1haW5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBtb2R1bGUuZW50cnlQb2ludH0pXG4gIHdyaXRlci5tYXBwZWQoXCIoKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50fSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbiAgICBcIiwgXCJsaW5lIGJyZWFrIGFuZCBpbmRlbnRhdGlvblwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50fSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW21vZHVsZS5lbnRyeVBvaW50XSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIgICAgICAgIFwiLCBcIi9lbnRyeVBvaW50L2JvZHlcIilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBcIiwgXCJpbmRlbnRhdGlvblwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50fSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbn1cXG5cIiwgXCJDIyBQcm9ncmFtIHNjYWZmb2xkaW5nXCIsIFttb2R1bGVdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBwcml2YXRlIHN0YXRpYyBzZW1hbnRpYyBtZXRob2QuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBGdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEZ1bmN0aW9uIGluZGV4LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRGdW5jdGlvbih3cml0ZXIsIGRlY2xhcmF0aW9uLCBpbmRleCkge1xuICBjb25zdCBwYXRoID0gYC9mdW5jdGlvbnMvJHtpbmRleH1gXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBcIiwgXCJpbmRlbnRhdGlvblwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJwcml2YXRlIHN0YXRpY1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJtZXRob2Qgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJjc2hhcnBcIiwgZGVjbGFyYXRpb24ucmV0dXJuVHlwZSksIHtcbiAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJtZXRob2Qgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWBcblxuICAgIGlmIChwYXJhbWV0ZXJJbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJjc2hhcnBcIiwgcGFyYW1ldGVyLnR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIudHlwZSwgcGF0aDogYCR7cGFyYW1ldGVyUGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInBhcmFtZXRlciBzcGFjaW5nXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICB9KVxuICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbiAgICBcIiwgXCJsaW5lIGJyZWFrIGFuZCBpbmRlbnRhdGlvblwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24uYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiICAgICAgICBcIiwgYCR7cGF0aH0vYm9keWApXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgICAgXCIsIFwiaW5kZW50YXRpb25cIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBvcmRlcmVkIHNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdEJsb2NrKHdyaXRlciwgYmxvY2ssIGluZGVudCwgcGF0aCkge1xuICBibG9jay5zdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCwgaW5kZXgpID0+IGVtaXRTdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWApKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBzdXBwb3J0ZWQgQyMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gU2VtYW50aWMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKSB7XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiBlbWl0TG9jYWwod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aClcbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDIyBUYXNrIDAwNSBleHByZXNzaW9uIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGlmICghc3RhdGVtZW50LmV4cHJlc3Npb24pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDIyBiYXJlIHJldHVybiByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICAgIHdyaXRlci5tYXBwZWQoXCJyZXR1cm5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicmV0dXJuIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJjc2hhcnBcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmVcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJjc2hhcnBcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLm1hcHBlZChcIik7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCAhPSBcIklmU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBDIyBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgd3JpdGVyLm1hcHBlZChcImlmXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjb25kaXRpb25hbCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBcImNzaGFycFwiLCBpZGVudGl0eSlcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5jb25zZXF1ZW50LCBwYXRoOiBgJHtwYXRofS9jb25zZXF1ZW50YH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtpbmRlbnR9ICAgIGAsIGAke3BhdGh9L2NvbnNlcXVlbnRgKVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5jb25zZXF1ZW50LCBwYXRoOiBgJHtwYXRofS9jb25zZXF1ZW50YH0pXG4gIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJlbHNlXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBgJHtwYXRofS9hbHRlcm5hdGVgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5hbHRlcm5hdGUsIGAke2luZGVudH0gICAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYClcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmFsdGVybmF0ZSwgcGF0aDogYCR7cGF0aH0vYWx0ZXJuYXRlYH0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbFN0YXRlbWVudH0gc3RhdGVtZW50IC0gTG9jYWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdExvY2FsKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgpIHtcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmICFzdGF0ZW1lbnQubXV0YWJsZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fS8vIEBzZW1hbnRpZm9sZC1pbW11dGFibGVcXG5gLCBcIkMjIGltbXV0YWJsZS1sb2NhbCBjYXJyaWVyXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudGFyZ2V0LCBwYXRoOiBgJHtwYXRofS90YXJnZXRgLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwiY3NoYXJwXCIsIGlkZW50aXR5KVxuICB9IGVsc2Uge1xuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJjc2hhcnBcIiwgc3RhdGVtZW50LnR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSwgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgXCJjc2hhcnBcIiwgaWRlbnRpdHkpXG4gIH1cbiAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGNhbm9uaWNhbCBtb2R1bGUtcm9vdCBwcm92ZW5hbmNlIHRvIGFydGlmYWN0LWxldmVsIHJlbGF0ZWQgb3JpZ2lucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZX0gcm9vdCAtIENhbm9uaWNhbCByb290IHByb3ZlbmFuY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbltdfSBSZWxhdGVkIG1vZHVsZSBvcmlnaW5zLlxuICovXG5mdW5jdGlvbiByZWxhdGVkUm9vdE9yaWdpbnMocm9vdCkge1xuICBpZiAocm9vdC5vcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSB7XG4gICAgcmV0dXJuIFt7bG9jYXRpb246IHJvb3Qub3JpZ2luLmxvY2F0aW9uLCBub2RlSWQ6IHJvb3QuaWQsIHJvbGU6IFwibW9kdWxlXCIsIHNvdXJjZUlkOiByb290Lm9yaWdpbi5zb3VyY2VJZH1dXG4gIH1cbiAgY29uc3Qgb3JpZ2lucyA9IHJvb3Qub3JpZ2luLmtpbmQgPT0gXCJkZXJpdmVkXCIgPyByb290Lm9yaWdpbi5vcmlnaW5zIDogcm9vdC5vcmlnaW4ucmVsYXRlZE9yaWdpbnNcblxuICByZXR1cm4gb3JpZ2lucy5tYXAoKG9yaWdpbikgPT4gKHsuLi5vcmlnaW4sIG5vZGVJZDogb3JpZ2luLm5vZGVJZCA/PyByb290LmlkLCByb2xlOiBvcmlnaW4ucm9sZSA/PyBcIm1vZHVsZVwifSkpXG59XG5cbi8qKlxuICogUHJlc2VydmVzIGFuIGFscmVhZHkgdmFsaWRhdGVkIEMjIGlkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIElkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgaWRlbnRpZmllci5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkobmFtZSkge1xuICByZXR1cm4gbmFtZVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Constructs Dart's offline package verification, native compile, format and analysis plan.
3
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
4
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable Dart plan.
5
+ */
6
+ export declare function createDartCheckPlan(context: import("../language-registry.js").TargetCheckPlanContext): import("../semantic/types.js").TargetCheckPlan;
7
+ //# sourceMappingURL=dart-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dart-check.d.ts","sourceRoot":"","sources":["../../../src/backends/dart-check.js"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAHhC,OAAO,yBAAyB,EAAE,sBAGF,GAF9B,OAAO,sBAAsB,EAAE,eAAe,CAkG1D"}
@@ -0,0 +1,103 @@
1
+ // @ts-check
2
+ import { createHash } from "node:crypto";
3
+ import path from "node:path";
4
+ import { SemantifoldDiagnostic } from "../diagnostic.js";
5
+ import { checkArtifacts, checkPlan, checkStage, checkTool, environmentPath, pathArgument } from "./check-plan.js";
6
+ import { dartLockfile, dartPubspec } from "./dart.js";
7
+ /**
8
+ * Constructs Dart's offline package verification, native compile, format and analysis plan.
9
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
10
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable Dart plan.
11
+ */
12
+ export function createDartCheckPlan(context) {
13
+ const tool = checkTool(context, "dart", "dart");
14
+ const artifacts = checkArtifacts(context, artifact => artifact.path.endsWith(".dart") ||
15
+ artifact.path == "pubspec.yaml" || artifact.path == "pubspec.lock", "dart", "only staged Dart source and canonical pub package/lock artifacts");
16
+ const pubspecs = context.artifacts.artifacts.filter(artifact => artifact.path == "pubspec.yaml");
17
+ const lockfiles = context.artifacts.artifacts.filter(artifact => artifact.path == "pubspec.lock");
18
+ const sources = artifacts.filter(artifact => artifact.endsWith(".dart"));
19
+ if (pubspecs.length != 1 || pubspecs[0].contentKind != "text" || pubspecs[0].role != "manifest" ||
20
+ pubspecs[0].content != dartPubspec || lockfiles.length != 1 || lockfiles[0].contentKind != "text" ||
21
+ lockfiles[0].role != "manifest" || lockfiles[0].content != dartLockfile || artifacts.length != 3 || sources.length != 1 ||
22
+ sources[0] != path.join(context.sourcePath, "bin/program.dart")) {
23
+ throw new SemantifoldDiagnostic({
24
+ code: "INVALID_TARGET_CHECK_PLAN",
25
+ language: "dart",
26
+ message: "Dart developer checks require the exact dependency-free pub package/lock and staged '.dart' source."
27
+ });
28
+ }
29
+ const restoreArtifacts = context.artifacts.artifacts.filter(artifact => artifact.path == "pubspec.yaml" || artifact.path == "pubspec.lock").sort((left, right) => left.path.localeCompare(right.path, "en"));
30
+ const restoreInputs = Object.freeze(restoreArtifacts.map(artifact => path.join(context.sourcePath, artifact.path)));
31
+ const restoreHash = createHash("sha256");
32
+ for (const artifact of restoreArtifacts) {
33
+ const contentLength = typeof artifact.content == "string" ? Buffer.byteLength(artifact.content) : artifact.content.byteLength;
34
+ restoreHash.update(`${Buffer.byteLength(artifact.path)}:`).update(artifact.path)
35
+ .update(`${contentLength}:`).update(artifact.content);
36
+ }
37
+ const home = path.join(context.buildPath, "home");
38
+ const pubCache = path.join(context.buildPath, "pub-cache");
39
+ const temporary = path.join(context.buildPath, "tmp");
40
+ const environment = {
41
+ CI: "true",
42
+ DART_SUPPRESS_ANALYTICS: "true",
43
+ HOME: home,
44
+ PUB_CACHE: pubCache,
45
+ PUB_HOSTED_URL: "http://127.0.0.1:9",
46
+ TMPDIR: temporary
47
+ };
48
+ const environmentPaths = [environmentPath("HOME", "build"), environmentPath("PUB_CACHE", "build"),
49
+ environmentPath("TMPDIR", "build")];
50
+ const nativeOutput = path.join(context.buildPath, "native-output");
51
+ const binary = path.join(nativeOutput, "semantifold-dart");
52
+ const compileArgv = ["compile", "exe", sources[0], "-o", binary];
53
+ return checkPlan(context, "dart", artifacts, [
54
+ checkStage({
55
+ argv: ["pub", "get", "--offline", "--dry-run", "--enforce-lockfile", "--no-precompile"],
56
+ cwd: context.sourcePath,
57
+ environment,
58
+ environmentPaths,
59
+ inputHash: restoreHash.digest("hex"),
60
+ inputs: restoreInputs,
61
+ output: null,
62
+ pathArguments: [],
63
+ stage: "restore",
64
+ tool,
65
+ transientPaths: [path.join(context.sourcePath, ".dart_tool")]
66
+ }),
67
+ checkStage({
68
+ argv: compileArgv,
69
+ cwd: context.sourcePath,
70
+ environment,
71
+ environmentPaths,
72
+ inputs: artifacts,
73
+ output: null,
74
+ pathArguments: [pathArgument(2, "source"), pathArgument(4, "build")],
75
+ stage: "compile",
76
+ tool,
77
+ transientPaths: [nativeOutput]
78
+ }),
79
+ checkStage({
80
+ argv: ["format", "--output=none", "--set-exit-if-changed", sources[0]],
81
+ cwd: context.sourcePath,
82
+ environment,
83
+ environmentPaths,
84
+ inputs: sources,
85
+ output: null,
86
+ pathArguments: [pathArgument(3, "source")],
87
+ stage: "validate",
88
+ tool
89
+ }),
90
+ checkStage({
91
+ argv: ["analyze", "--fatal-infos", "--fatal-warnings", context.sourcePath],
92
+ cwd: context.sourcePath,
93
+ environment,
94
+ environmentPaths,
95
+ inputs: artifacts,
96
+ output: null,
97
+ pathArguments: [pathArgument(3, "source")],
98
+ stage: "validate",
99
+ tool
100
+ })
101
+ ]);
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFydC1jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9kYXJ0LWNoZWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QixPQUFPLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUVuRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQU87SUFDekMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDL0MsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUNuRixRQUFRLENBQUMsSUFBSSxJQUFJLGNBQWMsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLGNBQWMsRUFDcEUsTUFBTSxFQUFFLGtFQUFrRSxDQUFDLENBQUE7SUFDM0UsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQTtJQUNoRyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxR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QUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMxQyxLQUFLLEVBQUUsVUFBVTtZQUNqQixJQUFJO1NBQ0wsQ0FBQztLQUNILENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpY30gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtcbiAgY2hlY2tBcnRpZmFjdHMsXG4gIGNoZWNrUGxhbixcbiAgY2hlY2tTdGFnZSxcbiAgY2hlY2tUb29sLFxuICBlbnZpcm9ubWVudFBhdGgsXG4gIHBhdGhBcmd1bWVudFxufSBmcm9tIFwiLi9jaGVjay1wbGFuLmpzXCJcbmltcG9ydCB7ZGFydExvY2tmaWxlLCBkYXJ0UHVic3BlY30gZnJvbSBcIi4vZGFydC5qc1wiXG5cbi8qKlxuICogQ29uc3RydWN0cyBEYXJ0J3Mgb2ZmbGluZSBwYWNrYWdlIHZlcmlmaWNhdGlvbiwgbmF0aXZlIGNvbXBpbGUsIGZvcm1hdCBhbmQgYW5hbHlzaXMgcGxhbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIikuVGFyZ2V0Q2hlY2tQbGFuQ29udGV4dH0gY29udGV4dCAtIFZhbGlkYXRlZCBjYW5kaWRhdGUgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UYXJnZXRDaGVja1BsYW59IEltbXV0YWJsZSBEYXJ0IHBsYW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEYXJ0Q2hlY2tQbGFuKGNvbnRleHQpIHtcbiAgY29uc3QgdG9vbCA9IGNoZWNrVG9vbChjb250ZXh0LCBcImRhcnRcIiwgXCJkYXJ0XCIpXG4gIGNvbnN0IGFydGlmYWN0cyA9IGNoZWNrQXJ0aWZhY3RzKGNvbnRleHQsIGFydGlmYWN0ID0+IGFydGlmYWN0LnBhdGguZW5kc1dpdGgoXCIuZGFydFwiKSB8fFxuICAgIGFydGlmYWN0LnBhdGggPT0gXCJwdWJzcGVjLnlhbWxcIiB8fCBhcnRpZmFjdC5wYXRoID09IFwicHVic3BlYy5sb2NrXCIsXG4gIFwiZGFydFwiLCBcIm9ubHkgc3RhZ2VkIERhcnQgc291cmNlIGFuZCBjYW5vbmljYWwgcHViIHBhY2thZ2UvbG9jayBhcnRpZmFjdHNcIilcbiAgY29uc3QgcHVic3BlY3MgPSBjb250ZXh0LmFydGlmYWN0cy5hcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LnBhdGggPT0gXCJwdWJzcGVjLnlhbWxcIilcbiAgY29uc3QgbG9ja2ZpbGVzID0gY29udGV4dC5hcnRpZmFjdHMuYXJ0aWZhY3RzLmZpbHRlcihhcnRpZmFjdCA9PiBhcnRpZmFjdC5wYXRoID09IFwicHVic3BlYy5sb2NrXCIpXG4gIGNvbnN0IHNvdXJjZXMgPSBhcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LmVuZHNXaXRoKFwiLmRhcnRcIikpXG5cbiAgaWYgKHB1YnNwZWNzLmxlbmd0aCAhPSAxIHx8IHB1YnNwZWNzWzBdLmNvbnRlbnRLaW5kICE9IFwidGV4dFwiIHx8IHB1YnNwZWNzWzBdLnJvbGUgIT0gXCJtYW5pZmVzdFwiIHx8XG4gICAgcHVic3BlY3NbMF0uY29udGVudCAhPSBkYXJ0UHVic3BlYyB8fCBsb2NrZmlsZXMubGVuZ3RoICE9IDEgfHwgbG9ja2ZpbGVzWzBdLmNvbnRlbnRLaW5kICE9IFwidGV4dFwiIHx8XG4gICAgbG9ja2ZpbGVzWzBdLnJvbGUgIT0gXCJtYW5pZmVzdFwiIHx8IGxvY2tmaWxlc1swXS5jb250ZW50ICE9IGRhcnRMb2NrZmlsZSB8fCBhcnRpZmFjdHMubGVuZ3RoICE9IDMgfHwgc291cmNlcy5sZW5ndGggIT0gMSB8fFxuICAgIHNvdXJjZXNbMF0gIT0gcGF0aC5qb2luKGNvbnRleHQuc291cmNlUGF0aCwgXCJiaW4vcHJvZ3JhbS5kYXJ0XCIpKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfVEFSR0VUX0NIRUNLX1BMQU5cIixcbiAgICAgIGxhbmd1YWdlOiBcImRhcnRcIixcbiAgICAgIG1lc3NhZ2U6IFwiRGFydCBkZXZlbG9wZXIgY2hlY2tzIHJlcXVpcmUgdGhlIGV4YWN0IGRlcGVuZGVuY3ktZnJlZSBwdWIgcGFja2FnZS9sb2NrIGFuZCBzdGFnZWQgJy5kYXJ0JyBzb3VyY2UuXCJcbiAgICB9KVxuICB9XG4gIGNvbnN0IHJlc3RvcmVBcnRpZmFjdHMgPSBjb250ZXh0LmFydGlmYWN0cy5hcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+XG4gICAgYXJ0aWZhY3QucGF0aCA9PSBcInB1YnNwZWMueWFtbFwiIHx8IGFydGlmYWN0LnBhdGggPT0gXCJwdWJzcGVjLmxvY2tcIikuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQucGF0aC5sb2NhbGVDb21wYXJlKHJpZ2h0LnBhdGgsIFwiZW5cIikpXG4gIGNvbnN0IHJlc3RvcmVJbnB1dHMgPSBPYmplY3QuZnJlZXplKHJlc3RvcmVBcnRpZmFjdHMubWFwKGFydGlmYWN0ID0+IHBhdGguam9pbihjb250ZXh0LnNvdXJjZVBhdGgsIGFydGlmYWN0LnBhdGgpKSlcbiAgY29uc3QgcmVzdG9yZUhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpXG5cbiAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiByZXN0b3JlQXJ0aWZhY3RzKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHR5cGVvZiBhcnRpZmFjdC5jb250ZW50ID09IFwic3RyaW5nXCIgPyBCdWZmZXIuYnl0ZUxlbmd0aChhcnRpZmFjdC5jb250ZW50KSA6IGFydGlmYWN0LmNvbnRlbnQuYnl0ZUxlbmd0aFxuXG4gICAgcmVzdG9yZUhhc2gudXBkYXRlKGAke0J1ZmZlci5ieXRlTGVuZ3RoKGFydGlmYWN0LnBhdGgpfTpgKS51cGRhdGUoYXJ0aWZhY3QucGF0aClcbiAgICAgIC51cGRhdGUoYCR7Y29udGVudExlbmd0aH06YCkudXBkYXRlKGFydGlmYWN0LmNvbnRlbnQpXG4gIH1cbiAgY29uc3QgaG9tZSA9IHBhdGguam9pbihjb250ZXh0LmJ1aWxkUGF0aCwgXCJob21lXCIpXG4gIGNvbnN0IHB1YkNhY2hlID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcInB1Yi1jYWNoZVwiKVxuICBjb25zdCB0ZW1wb3JhcnkgPSBwYXRoLmpvaW4oY29udGV4dC5idWlsZFBhdGgsIFwidG1wXCIpXG4gIGNvbnN0IGVudmlyb25tZW50ID0ge1xuICAgIENJOiBcInRydWVcIixcbiAgICBEQVJUX1NVUFBSRVNTX0FOQUxZVElDUzogXCJ0cnVlXCIsXG4gICAgSE9NRTogaG9tZSxcbiAgICBQVUJfQ0FDSEU6IHB1YkNhY2hlLFxuICAgIFBVQl9IT1NURURfVVJMOiBcImh0dHA6Ly8xMjcuMC4wLjE6OVwiLFxuICAgIFRNUERJUjogdGVtcG9yYXJ5XG4gIH1cbiAgY29uc3QgZW52aXJvbm1lbnRQYXRocyA9IFtlbnZpcm9ubWVudFBhdGgoXCJIT01FXCIsIFwiYnVpbGRcIiksIGVudmlyb25tZW50UGF0aChcIlBVQl9DQUNIRVwiLCBcImJ1aWxkXCIpLFxuICAgIGVudmlyb25tZW50UGF0aChcIlRNUERJUlwiLCBcImJ1aWxkXCIpXVxuICBjb25zdCBuYXRpdmVPdXRwdXQgPSBwYXRoLmpvaW4oY29udGV4dC5idWlsZFBhdGgsIFwibmF0aXZlLW91dHB1dFwiKVxuICBjb25zdCBiaW5hcnkgPSBwYXRoLmpvaW4obmF0aXZlT3V0cHV0LCBcInNlbWFudGlmb2xkLWRhcnRcIilcbiAgY29uc3QgY29tcGlsZUFyZ3YgPSBbXCJjb21waWxlXCIsIFwiZXhlXCIsIHNvdXJjZXNbMF0sIFwiLW9cIiwgYmluYXJ5XVxuXG4gIHJldHVybiBjaGVja1BsYW4oY29udGV4dCwgXCJkYXJ0XCIsIGFydGlmYWN0cywgW1xuICAgIGNoZWNrU3RhZ2Uoe1xuICAgICAgYXJndjogW1wicHViXCIsIFwiZ2V0XCIsIFwiLS1vZmZsaW5lXCIsIFwiLS1kcnktcnVuXCIsIFwiLS1lbmZvcmNlLWxvY2tmaWxlXCIsIFwiLS1uby1wcmVjb21waWxlXCJdLFxuICAgICAgY3dkOiBjb250ZXh0LnNvdXJjZVBhdGgsXG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGVudmlyb25tZW50UGF0aHMsXG4gICAgICBpbnB1dEhhc2g6IHJlc3RvcmVIYXNoLmRpZ2VzdChcImhleFwiKSxcbiAgICAgIGlucHV0czogcmVzdG9yZUlucHV0cyxcbiAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgIHBhdGhBcmd1bWVudHM6IFtdLFxuICAgICAgc3RhZ2U6IFwicmVzdG9yZVwiLFxuICAgICAgdG9vbCxcbiAgICAgIHRyYW5zaWVudFBhdGhzOiBbcGF0aC5qb2luKGNvbnRleHQuc291cmNlUGF0aCwgXCIuZGFydF90b29sXCIpXVxuICAgIH0pLFxuICAgIGNoZWNrU3RhZ2Uoe1xuICAgICAgYXJndjogY29tcGlsZUFyZ3YsXG4gICAgICBjd2Q6IGNvbnRleHQuc291cmNlUGF0aCxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgZW52aXJvbm1lbnRQYXRocyxcbiAgICAgIGlucHV0czogYXJ0aWZhY3RzLFxuICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgcGF0aEFyZ3VtZW50czogW3BhdGhBcmd1bWVudCgyLCBcInNvdXJjZVwiKSwgcGF0aEFyZ3VtZW50KDQsIFwiYnVpbGRcIildLFxuICAgICAgc3RhZ2U6IFwiY29tcGlsZVwiLFxuICAgICAgdG9vbCxcbiAgICAgIHRyYW5zaWVudFBhdGhzOiBbbmF0aXZlT3V0cHV0XVxuICAgIH0pLFxuICAgIGNoZWNrU3RhZ2Uoe1xuICAgICAgYXJndjogW1wiZm9ybWF0XCIsIFwiLS1vdXRwdXQ9bm9uZVwiLCBcIi0tc2V0LWV4aXQtaWYtY2hhbmdlZFwiLCBzb3VyY2VzWzBdXSxcbiAgICAgIGN3ZDogY29udGV4dC5zb3VyY2VQYXRoLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBlbnZpcm9ubWVudFBhdGhzLFxuICAgICAgaW5wdXRzOiBzb3VyY2VzLFxuICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgcGF0aEFyZ3VtZW50czogW3BhdGhBcmd1bWVudCgzLCBcInNvdXJjZVwiKV0sXG4gICAgICBzdGFnZTogXCJ2YWxpZGF0ZVwiLFxuICAgICAgdG9vbFxuICAgIH0pLFxuICAgIGNoZWNrU3RhZ2Uoe1xuICAgICAgYXJndjogW1wiYW5hbHl6ZVwiLCBcIi0tZmF0YWwtaW5mb3NcIiwgXCItLWZhdGFsLXdhcm5pbmdzXCIsIGNvbnRleHQuc291cmNlUGF0aF0sXG4gICAgICBjd2Q6IGNvbnRleHQuc291cmNlUGF0aCxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgZW52aXJvbm1lbnRQYXRocyxcbiAgICAgIGlucHV0czogYXJ0aWZhY3RzLFxuICAgICAgb3V0cHV0OiBudWxsLFxuICAgICAgcGF0aEFyZ3VtZW50czogW3BhdGhBcmd1bWVudCgzLCBcInNvdXJjZVwiKV0sXG4gICAgICBzdGFnZTogXCJ2YWxpZGF0ZVwiLFxuICAgICAgdG9vbFxuICAgIH0pXG4gIF0pXG59XG4iXX0=
@@ -1,4 +1,6 @@
1
1
  import { SourceWriter } from "./writer.js";
2
+ export declare const dartPubspec = "name: semantifold_generated\npublish_to: none\nenvironment:\n sdk: 3.13.3\n";
3
+ export declare const dartLockfile = "# Generated by pub\n# See https://dart.dev/tools/pub/glossary#lockfile\npackages: {}\nsdks:\n dart: \"3.13.3\"\n";
2
4
  /**
3
5
  * Emits one deterministic dependency-free Dart package candidate.
4
6
  * @param {{filename?: string, mapDirective?: unknown, module: import("../semantic/types.js").SemanticModule, sourceMapFilename?: unknown, sources?: {filename: string, content: string, language?: import("../semantic/types.js").SemanticLanguage}[]}} input Backend request.
@@ -1 +1 @@
1
- {"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/backends/dart.js"],"names":[],"mappings":"AAOA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAA;AAKxC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAC,EAHrF;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAAA;CAGtJ,GAFnF;IAAC,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAwD9F;AAqDD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,EATzB,YASyB,EAAE,KAAK,EARhC,OAAO,sBAAsB,EAAE,KAQC,EAAE,MAAM,EAPxC,MAOwC,EAAE,IAAI,EAN9C,MAM8C,EAAE,YAAY,EAL5D,GAAG,CAAC,OAAO,sBAAsB,EAAE,gBAAgB,CAKS,EAAE,WAAW,AAJjF,CACA,EADQ,MAImF,EAAE,cAAc,AAH3G,CACA,EADQ,OAG2G,GAFzG,IAAI,CAKhB;AAoHD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAHhC,OAAO,sBAAsB,EAAE,cAGC,GAF9B,GAAG,CAAC,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAyBhE"}
1
+ {"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/backends/dart.js"],"names":[],"mappings":"AAOA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAA;AAExC,eAAO,MAAM,WAAW,iFAAiF,CAAA;AACzG,eAAO,MAAM,YAAY,sHAAsH,CAAA;AAE/I;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAC,EAHrF;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAAA;CAGtJ,GAFnF;IAAC,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAwD9F;AAqDD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,MAAM,EATzB,YASyB,EAAE,KAAK,EARhC,OAAO,sBAAsB,EAAE,KAQC,EAAE,MAAM,EAPxC,MAOwC,EAAE,IAAI,EAN9C,MAM8C,EAAE,YAAY,EAL5D,GAAG,CAAC,OAAO,sBAAsB,EAAE,gBAAgB,CAKS,EAAE,WAAW,AAJjF,CACA,EADQ,MAImF,EAAE,cAAc,AAH3G,CACA,EADQ,OAG2G,GAFzG,IAAI,CAKhB;AAoHD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAHhC,OAAO,sBAAsB,EAAE,cAGC,GAF9B,GAAG,CAAC,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAyBhE"}
@@ -5,8 +5,8 @@ import { emitExpression, flatDartExpression, validateBackendModule } from "./sha
5
5
  import { dartRuntime } from "./dart-runtime.js";
6
6
  import { emitScalarType } from "./scalars.js";
7
7
  import { SourceWriter } from "./writer.js";
8
- const pubspec = "name: semantifold_generated\npublish_to: none\nenvironment:\n sdk: 3.13.3\n";
9
- const lockfile = "# Generated by pub\n# See https://dart.dev/tools/pub/glossary#lockfile\npackages: {}\nsdks:\n dart: \"3.13.3\"\n";
8
+ export const dartPubspec = "name: semantifold_generated\npublish_to: none\nenvironment:\n sdk: 3.13.3\n";
9
+ export const dartLockfile = "# Generated by pub\n# See https://dart.dev/tools/pub/glossary#lockfile\npackages: {}\nsdks:\n dart: \"3.13.3\"\n";
10
10
  /**
11
11
  * Emits one deterministic dependency-free Dart package candidate.
12
12
  * @param {{filename?: string, mapDirective?: unknown, module: import("../semantic/types.js").SemanticModule, sourceMapFilename?: unknown, sources?: {filename: string, content: string, language?: import("../semantic/types.js").SemanticLanguage}[]}} input Backend request.
@@ -30,7 +30,7 @@ export function generateDartPackage({ filename, mapDirective, module, sourceMapF
30
30
  const relatedOrigins = relatedRootOrigins(root);
31
31
  return {
32
32
  artifacts: [{
33
- content: pubspec,
33
+ content: dartPubspec,
34
34
  contentKind: "text",
35
35
  mediaType: "application/yaml",
36
36
  ownership: "generated",
@@ -42,7 +42,7 @@ export function generateDartPackage({ filename, mapDirective, module, sourceMapF
42
42
  },
43
43
  role: "manifest"
44
44
  }, {
45
- content: lockfile,
45
+ content: dartLockfile,
46
46
  contentKind: "text",
47
47
  mediaType: "application/yaml",
48
48
  ownership: "generated",
@@ -330,4 +330,4 @@ function relatedRootOrigins(root) {
330
330
  function identity(name) {
331
331
  return name;
332
332
  }
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9kYXJ0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3JGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsTUFBTSxPQUFPLEdBQUcsOEVBQThFLENBQUE7QUFDOUYsTUFBTSxRQUFRLEdBQUcsbUhBQW1ILENBQUE7QUFFcEk7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBQztJQUM5RixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckMsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzdELHFCQUFxQixDQUFDLE1BQU0sRUFBRSwrQ0FBK0MsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDakcsQ0FBQztJQUNELElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNsRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUseUNBQXlDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzNGLENBQUM7SUFDRCxNQUFNLFlBQVksR0FB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Q0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLElBQUk7SUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQzVHLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQTtJQUVoRyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQTtBQUNoSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLElBQUk7SUFDcEIsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2ZpbmFsaXplTWFwcGluZywgdG9Tb3VyY2VNYXBWM30gZnJvbSBcIi4uL21hcHBpbmcuanNcIlxuaW1wb3J0IHtlbWl0RXhwcmVzc2lvbiwgZmxhdERhcnRFeHByZXNzaW9uLCB2YWxpZGF0ZUJhY2tlbmRNb2R1bGV9IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge2RhcnRSdW50aW1lfSBmcm9tIFwiLi9kYXJ0LXJ1bnRpbWUuanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge1NvdXJjZVdyaXRlcn0gZnJvbSBcIi4vd3JpdGVyLmpzXCJcblxuY29uc3QgcHVic3BlYyA9IFwibmFtZTogc2VtYW50aWZvbGRfZ2VuZXJhdGVkXFxucHVibGlzaF90bzogbm9uZVxcbmVudmlyb25tZW50OlxcbiAgc2RrOiAzLjEzLjNcXG5cIlxuY29uc3QgbG9ja2ZpbGUgPSBcIiMgR2VuZXJhdGVkIGJ5IHB1YlxcbiMgU2VlIGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I2xvY2tmaWxlXFxucGFja2FnZXM6IHt9XFxuc2RrczpcXG4gIGRhcnQ6IFxcXCIzLjEzLjNcXFwiXFxuXCJcblxuLyoqXG4gKiBFbWl0cyBvbmUgZGV0ZXJtaW5pc3RpYyBkZXBlbmRlbmN5LWZyZWUgRGFydCBwYWNrYWdlIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lPzogc3RyaW5nLCBtYXBEaXJlY3RpdmU/OiB1bmtub3duLCBtb2R1bGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZT86IHVua25vd24sIHNvdXJjZXM/OiB7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119fSBpbnB1dCBCYWNrZW5kIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7e2FydGlmYWN0czogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXSwgdGFyZ2V0OiBzdHJpbmd9fSBDYW5kaWRhdGUgYXJ0aWZhY3Qgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEYXJ0UGFja2FnZSh7ZmlsZW5hbWUsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pIHtcbiAgdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgXCJkYXJ0XCIpXG4gIGlmIChmaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmIGZpbGVuYW1lICE9IFwiYmluL3Byb2dyYW0uZGFydFwiKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiZGFydFwiLCBcImFydGlmYWN0IGZpbGVuYW1lIG90aGVyIHRoYW4gYmluL3Byb2dyYW0uZGFydFwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKG1hcERpcmVjdGl2ZSAhPT0gdW5kZWZpbmVkIHx8IHNvdXJjZU1hcEZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJkYXJ0XCIsIFwic291cmNlLW1hcCBmaWxlbmFtZSBvciBkaXJlY3RpdmUgb3B0aW9uXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBjb25zdCB1bnJlYWRMb2NhbHMgPSBmaW5kVW5yZWFkRGFydExvY2Fscyhtb2R1bGUpXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBTb3VyY2VXcml0ZXIoe2ZpbGVuYW1lOiBcImJpbi9wcm9ncmFtLmRhcnRcIiwgbGFuZ3VhZ2U6IFwiZGFydFwiLCBtb2R1bGUsIHNvdXJjZXN9KVxuXG4gIGVtaXRQcm9ncmFtKG1vZHVsZSwgd3JpdGVyLCB1bnJlYWRMb2NhbHMpXG4gIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuICBjb25zdCByb290ID0gbWFwcGluZy5ub2Rlcy5maW5kKCh7cGF0aH0pID0+IHBhdGggPT0gXCJcIilcblxuICBpZiAoIXJvb3QpIHRocm93IG5ldyBFcnJvcihcIlZhbGlkYXRlZCBEYXJ0IG1vZHVsZSBvbWl0dGVkIGl0cyBjYW5vbmljYWwgcm9vdCBwcm92ZW5hbmNlLlwiKVxuICBjb25zdCByZWxhdGVkT3JpZ2lucyA9IHJlbGF0ZWRSb290T3JpZ2lucyhyb290KVxuXG4gIHJldHVybiB7XG4gICAgYXJ0aWZhY3RzOiBbe1xuICAgICAgY29udGVudDogcHVic3BlYyxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJhcHBsaWNhdGlvbi95YW1sXCIsXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBcInB1YnNwZWMueWFtbFwiLFxuICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICBraW5kOiBcInN5bnRoZXRpY1wiLFxuICAgICAgICByZWFzb246IFwiRml4ZWQgZGVwZW5kZW5jeS1mcmVlIERhcnQgMy4xMy4zIHBhY2thZ2UgY29uZmlndXJhdGlvbi5cIixcbiAgICAgICAgcmVsYXRlZE9yaWdpbnNcbiAgICAgIH0sXG4gICAgICByb2xlOiBcIm1hbmlmZXN0XCJcbiAgICB9LCB7XG4gICAgICBjb250ZW50OiBsb2NrZmlsZSxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJhcHBsaWNhdGlvbi95YW1sXCIsXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBcInB1YnNwZWMubG9ja1wiLFxuICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICBraW5kOiBcInN5bnRoZXRpY1wiLFxuICAgICAgICByZWFzb246IFwiRGV0ZXJtaW5pc3RpYyBEYXJ0IHB1YiBsb2NrZmlsZSBmb3IgYSBwYWNrYWdlIHdpdGggbm8gZGVwZW5kZW5jaWVzLlwiLFxuICAgICAgICByZWxhdGVkT3JpZ2luc1xuICAgICAgfSxcbiAgICAgIHJvbGU6IFwibWFuaWZlc3RcIlxuICAgIH0sIHtcbiAgICAgIGNvbnRlbnQ6IG1hcHBpbmcuZ2VuZXJhdGVkLmNvbnRlbnQsXG4gICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICBtZWRpYVR5cGU6IFwidGV4dC94LWRhcnRcIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IFwiYmluL3Byb2dyYW0uZGFydFwiLFxuICAgICAgcHJvdmVuYW5jZToge2tpbmQ6IFwidGV4dFwiLCBtYXBwaW5nLCBzb3VyY2VNYXA6IHRvU291cmNlTWFwVjMobWFwcGluZyl9LFxuICAgICAgcm9sZTogXCJlbnRyeVwiXG4gICAgfV0sXG4gICAgdGFyZ2V0OiBcImRhcnRcIlxuICB9XG59XG5cbi8qKlxuICogRW1pdHMgdGhlIGNvbXBpbGVyLW93bmVkIHByZWZpeCBhbmQgb25lIGNvbXBsZXRlIHByb2dyYW0uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtTZXQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbj59IHVucmVhZExvY2FscyBMb2NhbHMgcmVxdWlyaW5nIGFuIGFuYWx5emVyLW9ubHkgcmVhZC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0UHJvZ3JhbShtb2R1bGUsIHdyaXRlciwgdW5yZWFkTG9jYWxzKSB7XG4gIHdyaXRlci5zeW50aGV0aWMoZGFydFJ1bnRpbWUsIFwiQ2hlY2tlZCBEYXJ0IHNhZmUtaW50ZWdlciBzdXBwb3J0XCIsIFttb2R1bGVdLCBbXCJcIl0pXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtb2R1bGUuZnVuY3Rpb25zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbW9kdWxlLmZ1bmN0aW9uc1tpbmRleF1cbiAgICBjb25zdCBwYXRoID0gYC9mdW5jdGlvbnMvJHtpbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiZGVjbGFyYXRpb24gc2VwYXJhdG9yXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiZGFydFwiLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSwgcGF0aDogYCR7cGF0aH0vcmV0dXJuVHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgY29uc3QgZmxhdFBhcmFtZXRlcnMgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PlxuICAgICAgYCR7ZW1pdFNjYWxhclR5cGUoXCJkYXJ0XCIsIHBhcmFtZXRlci50eXBlKX0gJHtwYXJhbWV0ZXIubmFtZX1gKS5qb2luKFwiLCBcIilcbiAgICBjb25zdCBtdWx0aWxpbmVQYXJhbWV0ZXJzID0gZGVjbGFyYXRpb24ucGFyYW1ldGVycy5sZW5ndGggPiAwICYmXG4gICAgICB3cml0ZXIuY29sdW1uIC0gMSArIGAoJHtmbGF0UGFyYW1ldGVyc30pIHtgLmxlbmd0aCA+IDgwXG5cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICBpZiAobXVsdGlsaW5lUGFyYW1ldGVycykge1xuICAgICAgICB3cml0ZXIuc3ludGhldGljKGAke3BhcmFtZXRlckluZGV4ID8gXCJcIiA6IFwiXFxuXCJ9ICBgLCBcIkRhcnQgcGFyYW1ldGVyIGluZGVudGF0aW9uXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlckluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiZGFydFwiLCBwYXJhbWV0ZXIudHlwZSksIHtcbiAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLnR5cGUsIHBhdGg6IGAke3BhcmFtZXRlclBhdGh9L3R5cGVgLCByb2xlOiBcInR5cGVcIlxuICAgICAgfSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicGFyYW1ldGVyIHNwYWNpbmdcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICAgIGlmIChtdWx0aWxpbmVQYXJhbWV0ZXJzKSB3cml0ZXIuc3ludGhldGljKFwiLFxcblwiLCBcIkRhcnQgZm9ybWF0dGVyIHBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYm9keSBzcGFjaW5nXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgZW1pdERhcnRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiICBcIiwgYCR7cGF0aH0vYm9keWAsIHVucmVhZExvY2FscylcbiAgICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLmJvZHksIHBhdGg6IGAke3BhdGh9L2JvZHlgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcbnZvaWQgbWFpbigpIHtcXG5cIiwgXCJEYXJ0IGdlbmVyYXRlZCBtYWluIHNjYWZmb2xkXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICBlbWl0RGFydEJsb2NrKHdyaXRlciwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIgIFwiLCBcIi9lbnRyeVBvaW50L2JvZHlcIiwgdW5yZWFkTG9jYWxzKVxuICB3cml0ZXIuc3ludGhldGljKFwifVxcblwiLCBcIkRhcnQgZ2VuZXJhdGVkIG1haW4gc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG59XG5cbi8qKlxuICogRW1pdHMgb25lIG9yZGVyZWQgc2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayBTZW1hbnRpYyBibG9jay5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgQ3VycmVudCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcGFyYW0ge1NldDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uPn0gdW5yZWFkTG9jYWxzIExvY2FscyByZXF1aXJpbmcgYW4gYW5hbHl6ZXItb25seSByZWFkLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcmludFRhcmdldF0gVGFyZ2V0LW93bmVkIG91dHB1dCBmdW5jdGlvbiBzcGVsbGluZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW211bHRpbGluZVByaW50XSBXaGV0aGVyIHRhcmdldCBwbHVtYmluZyByZXF1aXJlcyB0cmFpbGluZy1jb21tYSBtdWx0aWxpbmUgY2FsbHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXREYXJ0QmxvY2sod3JpdGVyLCBibG9jaywgaW5kZW50LCBwYXRoLCB1bnJlYWRMb2NhbHMsIHByaW50VGFyZ2V0ID0gXCJwcmludFwiLCBtdWx0aWxpbmVQcmludCA9IGZhbHNlKSB7XG4gIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT5cbiAgICBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gLCB1bnJlYWRMb2NhbHMsIHByaW50VGFyZ2V0LCBtdWx0aWxpbmVQcmludCkpXG59XG5cbi8qKlxuICogRW1pdHMgb25lIFRhc2tzIDAwMS0wMDUgc3RhdGVtZW50LlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBFeGFjdCBzZW1hbnRpYyBwYXRoLlxuICogQHBhcmFtIHtTZXQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbj59IHVucmVhZExvY2FscyBMb2NhbHMgcmVxdWlyaW5nIGFuIGFuYWx5emVyLW9ubHkgcmVhZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmludFRhcmdldCBUYXJnZXQtb3duZWQgb3V0cHV0IGZ1bmN0aW9uIHNwZWxsaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBtdWx0aWxpbmVQcmludCBXaGV0aGVyIHRhcmdldCBwbHVtYmluZyByZXF1aXJlcyB0cmFpbGluZy1jb21tYSBtdWx0aWxpbmUgY2FsbHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCB1bnJlYWRMb2NhbHMsIHByaW50VGFyZ2V0LCBtdWx0aWxpbmVQcmludCkge1xuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICBpZiAoIXN0YXRlbWVudC5tdXRhYmxlKSB3cml0ZXIubWFwcGVkKFwiZmluYWxcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIGVsc2Ugd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImRhcnRcIiwgc3RhdGVtZW50LnR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSwgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImxvY2FsIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBpZiAoIXN0YXRlbWVudC5tdXRhYmxlKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiZGFydFwiLCBzdGF0ZW1lbnQudHlwZSksIHtcbiAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnR5cGUsIHBhdGg6IGAke3BhdGh9L3R5cGVgLCByb2xlOiBcInR5cGVcIlxuICAgICAgfSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwibG9jYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgXCJkYXJ0XCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGlmICh1bnJlYWRMb2NhbHMuaGFzKHN0YXRlbWVudCkpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fV9zZW1hbnRpZm9sZFVzZSgke3N0YXRlbWVudC5uYW1lfSk7XFxuYCwgXCJEYXJ0IGFuYWx5emVyIHVucmVhZC1sb2NhbCB1c2VcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudGFyZ2V0LCBwYXRoOiBgJHtwYXRofS90YXJnZXRgLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwiZGFydFwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSByZXR1cm4gZW1pdElmKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgsIHVucmVhZExvY2FscywgcHJpbnRUYXJnZXQsIG11bHRpbGluZVByaW50KVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJyZXR1cm5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJyZXR1cm4gc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwiZGFydFwiLCBpZGVudGl0eSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGV4cGFuZGVkUHJpbnQgPSBtdWx0aWxpbmVQcmludCAmJiB3cml0ZXIuY29sdW1uIC0gMSArIHByaW50VGFyZ2V0Lmxlbmd0aCArXG4gICAgICBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbikubGVuZ3RoICsgMyA+IDgwXG5cbiAgICBpZiAocHJpbnRUYXJnZXQgPT0gXCJwcmludFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKHByaW50VGFyZ2V0LCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5hbWU6IFwicHJpbnRcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcImNhbGxlZVwifSlcbiAgICB9IGVsc2Ugd3JpdGVyLnN5bnRoZXRpYyhwcmludFRhcmdldCwgXCJEYXJ0IHByaW50IHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgKCR7ZXhwYW5kZWRQcmludCA/IGBcXG4ke2luZGVudH0gIGAgOiBcIlwifWAsIFwiRGFydCBwcmludCBwbHVtYmluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBcImRhcnRcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhleHBhbmRlZFByaW50ID8gYCxcXG4ke2luZGVudH0pO2AgOiBcIik7XCIsIFwiRGFydCBwcmludCBwbHVtYmluZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwiZGFydFwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgRGFydCBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbiBhZnRlciBwcmVmbGlnaHQuXCIpXG59XG5cbi8qKlxuICogRW1pdHMgb25lIHN0cmljdCBCb29sZWFuIGNvbmRpdGlvbmFsLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gc3RhdGVtZW50IENvbmRpdGlvbmFsLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggRXhhY3Qgc2VtYW50aWMgcGF0aC5cbiAqIEBwYXJhbSB7U2V0PGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb24+fSB1bnJlYWRMb2NhbHMgTG9jYWxzIHJlcXVpcmluZyBhbiBhbmFseXplci1vbmx5IHJlYWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJpbnRUYXJnZXQgVGFyZ2V0LW93bmVkIG91dHB1dCBmdW5jdGlvbiBzcGVsbGluZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbXVsdGlsaW5lUHJpbnQgV2hldGhlciB0YXJnZXQgcGx1bWJpbmcgcmVxdWlyZXMgdHJhaWxpbmctY29tbWEgbXVsdGlsaW5lIGNhbGxzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRJZih3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCB1bnJlYWRMb2NhbHMsIHByaW50VGFyZ2V0LCBtdWx0aWxpbmVQcmludCkge1xuICB3cml0ZXIubWFwcGVkKFwiaWZcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIChcIiwgXCJEYXJ0IGNvbmRpdGlvbmFsIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgXCJkYXJ0XCIsIGlkZW50aXR5KVxuICB3cml0ZXIuc3ludGhldGljKFwiKSBcIiwgXCJEYXJ0IGNvbmRpdGlvbmFsIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmNvbnNlcXVlbnQsIHBhdGg6IGAke3BhdGh9L2NvbnNlcXVlbnRgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgZW1pdERhcnRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtpbmRlbnR9ICBgLCBgJHtwYXRofS9jb25zZXF1ZW50YCwgdW5yZWFkTG9jYWxzLCBwcmludFRhcmdldCxcbiAgICBtdWx0aWxpbmVQcmludClcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogYCR7cGF0aH0vY29uc2VxdWVudGB9KVxuICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgZWxzZSBcIiwgXCJEYXJ0IGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmFsdGVybmF0ZSwgcGF0aDogYCR7cGF0aH0vYWx0ZXJuYXRlYH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RGFydEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgdW5yZWFkTG9jYWxzLCBwcmludFRhcmdldCxcbiAgICAgIG11bHRpbGluZVByaW50KVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBgJHtwYXRofS9hbHRlcm5hdGVgfSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEZpbmRzIHNjYWxhciBsb2NhbHMgdGhhdCBEYXJ0IHdvdWxkIGRpYWdub3NlIGJlY2F1c2Ugbm8gc2VtYW50aWMgZXhwcmVzc2lvbiByZWFkcyB0aGVtLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7U2V0PGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb24+fSBVbnJlYWQgZGVjbGFyYXRpb24gaWRlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRVbnJlYWREYXJ0TG9jYWxzKG1vZHVsZSkge1xuICAvKiogQHR5cGUge1NldDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgdW5yZWFkID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCByb290IG9mIFsuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcCgoe2JvZHl9KSA9PiBib2R5KSwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keV0pIHtcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb25bXX0gKi9cbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbXVxuICAgIC8qKiBAdHlwZSB7U2V0PHN0cmluZz59ICovXG4gICAgY29uc3QgcmVhZHMgPSBuZXcgU2V0KClcblxuICAgIHZpc2l0U3RhdGVtZW50cyhyb290LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgICAgZGVjbGFyYXRpb25zLnB1c2goc3RhdGVtZW50KVxuICAgICAgICBjb2xsZWN0SWRlbnRpZmllclJlYWRzKHN0YXRlbWVudC5pbml0aWFsaXplciwgcmVhZHMpXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikgY29sbGVjdElkZW50aWZpZXJSZWFkcyhzdGF0ZW1lbnQuY29uZGl0aW9uLCByZWFkcylcbiAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbikgY29sbGVjdElkZW50aWZpZXJSZWFkcyhzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgcmVhZHMpXG4gICAgICB9XG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykgaWYgKCFyZWFkcy5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHVucmVhZC5hZGQoZGVjbGFyYXRpb24pXG4gIH1cbiAgcmV0dXJuIHVucmVhZFxufVxuXG4vKipcbiAqIFZpc2l0cyBldmVyeSBUYXNrcyAwMDEtMDA1IHN0YXRlbWVudCBpbiBvbmUgc2VtYW50aWMgYm9keS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHsoc3RhdGVtZW50OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnQpID0+IHZvaWR9IGNhbGxiYWNrIFN0YXRlbWVudCB2aXNpdG9yLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZpc2l0U3RhdGVtZW50cyhibG9jaywgY2FsbGJhY2spIHtcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgIGNhbGxiYWNrKHN0YXRlbWVudClcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdFN0YXRlbWVudHMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGNhbGxiYWNrKVxuICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHZpc2l0U3RhdGVtZW50cyhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBjYWxsYmFjaylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVyIHJlYWRzIHdpdGhvdXQgdHJlYXRpbmcgYXNzaWdubWVudCB0YXJnZXRzIGFzIHJlYWRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSByZWFkcyBDb2xsZWN0ZWQgYmluZGluZyBuYW1lcy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGV4cHJlc3Npb24sIHJlYWRzKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZWFkcy5hZGQoZXhwcmVzc2lvbi5uYW1lKVxuICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBleHByZXNzaW9uLmFyZ3VtZW50cykgY29sbGVjdElkZW50aWZpZXJSZWFkcyhhcmd1bWVudCwgcmVhZHMpXG4gIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoZXhwcmVzc2lvbi5vcGVyYW5kLCByZWFkcylcbiAgZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29sbGVjdElkZW50aWZpZXJSZWFkcyhleHByZXNzaW9uLmxlZnQsIHJlYWRzKVxuICAgIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoZXhwcmVzc2lvbi5yaWdodCwgcmVhZHMpXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyByb290IHByb3ZlbmFuY2UgdG8gYXJ0aWZhY3QtbGV2ZWwgcmVsYXRlZCBvcmlnaW5zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlfSByb290IFJvb3QgcHJvdmVuYW5jZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119IFJlbGF0ZWQgcm9vdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0ZWRSb290T3JpZ2lucyhyb290KSB7XG4gIGlmIChyb290Lm9yaWdpbi5raW5kID09IFwic291cmNlXCIpIHtcbiAgICByZXR1cm4gW3tsb2NhdGlvbjogcm9vdC5vcmlnaW4ubG9jYXRpb24sIG5vZGVJZDogcm9vdC5pZCwgcm9sZTogXCJtb2R1bGVcIiwgc291cmNlSWQ6IHJvb3Qub3JpZ2luLnNvdXJjZUlkfV1cbiAgfVxuICBjb25zdCBvcmlnaW5zID0gcm9vdC5vcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIiA/IHJvb3Qub3JpZ2luLm9yaWdpbnMgOiByb290Lm9yaWdpbi5yZWxhdGVkT3JpZ2luc1xuXG4gIHJldHVybiBvcmlnaW5zLm1hcCgob3JpZ2luKSA9PiAoey4uLm9yaWdpbiwgbm9kZUlkOiBvcmlnaW4ubm9kZUlkID8/IHJvb3QuaWQsIHJvbGU6IG9yaWdpbi5yb2xlID8/IFwibW9kdWxlXCJ9KSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIG9uZSBwcmV2YWxpZGF0ZWQgRGFydCBpZGVudGlmaWVyIHVuY2hhbmdlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFZhbGlkYXRlZCBpZGVudGlmaWVyLlxuICogQHJldHVybnMge3N0cmluZ30gU2FtZSBpZGVudGlmaWVyLlxuICovXG5mdW5jdGlvbiBpZGVudGl0eShuYW1lKSB7XG4gIHJldHVybiBuYW1lXG59XG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9kYXJ0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3JGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLDhFQUE4RSxDQUFBO0FBQ3pHLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxtSEFBbUgsQ0FBQTtBQUUvSTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFDO0lBQzlGLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyQyxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDN0QscUJBQXFCLENBQUMsTUFBTSxFQUFFLCtDQUErQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBQ0QsSUFBSSxZQUFZLEtBQUssU0FBUyxJQUFJLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2xFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDM0YsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFFbEcsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDekMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRXZELElBQUksQ0FBQyxJQUFJO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFBO0lBQzFGLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBRS9DLE9BQU87UUFDTCxTQUFTLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsV0FBVztnQkFDcEIsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFNBQVMsRUFBRSxrQkFBa0I7Z0JBQzdCLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxXQUFXO29CQUNqQixNQUFNLEVBQUUsMERBQTBEO29CQUNsRSxjQUFjO2lCQUNmO2dCQUNELElBQUksRUFBRSxVQUFVO2FBQ2pCLEVBQUU7Z0JBQ0QsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixTQUFTLEVBQUUsa0JBQWtCO2dCQUM3QixTQUFTLEVBQUUsV0FBVztnQkFDdEIsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsV0FBVztvQkFDakIsTUFBTSxFQUFFLHFFQUFxRTtvQkFDN0UsY0FBYztpQkFDZjtnQkFDRCxJQUFJLEVBQUUsVUFBVTthQUNqQixFQUFFO2dCQUNELE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU87Z0JBQ2xDLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixTQUFTLEVBQUUsYUFBYTtnQkFDeEIsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLFVBQVUsRUFBRSxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUM7Z0JBQ3RFLElBQUksRUFBRSxPQUFPO2FBQ2QsQ0FBQztRQUNGLE1BQU0sRUFBRSxNQUFNO0tBQ2YsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVk7SUFDL0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbEYsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE1BQU0sSUFBSSxHQUFHLGNBQWMsS0FBSyxFQUFFLENBQUE7UUFFbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1RCxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNO1NBQzdGLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHFCQUFxQixFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDOUYsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUM5RCxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMzRSxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDM0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxjQUFjLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBRXpELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDcEUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxhQUFhLEdBQUcsR0FBRyxJQUFJLGVBQWUsY0FBYyxFQUFFLENBQUE7WUFFNUQsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO2dCQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLDRCQUE0QixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1lBQ2pILENBQUM7aUJBQU0sSUFBSSxjQUFjO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1lBQ3RHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BELFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsYUFBYSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU07YUFDeEYsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7WUFDeEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7WUFDekcsSUFBSSxtQkFBbUI7Z0JBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDdEgsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQ3pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMzRCxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUN6RixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0lBQzNHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQ3JGLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLDhCQUE4QixFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtBQUMvRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxXQUFXLEdBQUcsT0FBTyxFQUFFLGNBQWMsR0FBRyxLQUFLO0lBQ3BILEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzVDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksZUFBZSxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUE7QUFDdkgsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjO0lBQy9GLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBOztZQUN6RixNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN6RCxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNO2FBQy9FLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BELFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU07YUFDL0UsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzdELENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQzFGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNuRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNoRSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDdEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekQsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sbUJBQW1CLFNBQVMsQ0FBQyxJQUFJLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMzSCxDQUFDO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUMxSCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDaEUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGFBQWE7UUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUM5SCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZFLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQzVELGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN0RixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekQsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxjQUFjLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU07WUFDNUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUVsRSxJQUFJLFdBQVcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDOztZQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3hHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwRixNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6RCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzVDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6RCxPQUFNO0lBQ1IsQ0FBQztJQUNELE1BQU0sSUFBSSxTQUFTLENBQUMsOERBQThELENBQUMsQ0FBQTtBQUNyRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWM7SUFDeEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUNuRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSwyQkFBMkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN4RSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbEYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDeEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUNuRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDekQsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUN4RyxjQUFjLENBQUMsQ0FBQTtJQUNqQixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUNuRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMxRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUMsQ0FBQyxDQUFBO1FBQ2pHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6RCxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQ3RHLGNBQWMsQ0FBQyxDQUFBO1FBQ2pCLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUMsQ0FBQyxDQUFBO0lBQ25HLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBTTtJQUN6QyxtRUFBbUU7SUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUV4QixLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2RixnRUFBZ0U7UUFDaEUsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLDBCQUEwQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRXZCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDNUIsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN0RCxDQUFDO2lCQUFNLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxhQUFhO2dCQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUE7aUJBQ3pGLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQjtnQkFDekYsU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQzVFLElBQUksU0FBUyxDQUFDLFVBQVU7b0JBQUUsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUMvRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVk7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbkcsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFLFFBQVE7SUFDdEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ25CLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNwQyxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUMvQyxJQUFJLFNBQVMsQ0FBQyxTQUFTO2dCQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsS0FBSztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksc0JBQXNCO1FBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDcEUsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDN0MsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUztZQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN0RixDQUFDO1NBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGlCQUFpQjtRQUFFLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDN0YsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDL0Msc0JBQXNCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM5QyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUMsSUFBSTtJQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDNUcsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFBO0lBRWhHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2hILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBSTtJQUNwQixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7ZmluYWxpemVNYXBwaW5nLCB0b1NvdXJjZU1hcFYzfSBmcm9tIFwiLi4vbWFwcGluZy5qc1wiXG5pbXBvcnQge2VtaXRFeHByZXNzaW9uLCBmbGF0RGFydEV4cHJlc3Npb24sIHZhbGlkYXRlQmFja2VuZE1vZHVsZX0gZnJvbSBcIi4vc2hhcmVkLmpzXCJcbmltcG9ydCB7ZGFydFJ1bnRpbWV9IGZyb20gXCIuL2RhcnQtcnVudGltZS5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuXG5leHBvcnQgY29uc3QgZGFydFB1YnNwZWMgPSBcIm5hbWU6IHNlbWFudGlmb2xkX2dlbmVyYXRlZFxcbnB1Ymxpc2hfdG86IG5vbmVcXG5lbnZpcm9ubWVudDpcXG4gIHNkazogMy4xMy4zXFxuXCJcbmV4cG9ydCBjb25zdCBkYXJ0TG9ja2ZpbGUgPSBcIiMgR2VuZXJhdGVkIGJ5IHB1YlxcbiMgU2VlIGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I2xvY2tmaWxlXFxucGFja2FnZXM6IHt9XFxuc2RrczpcXG4gIGRhcnQ6IFxcXCIzLjEzLjNcXFwiXFxuXCJcblxuLyoqXG4gKiBFbWl0cyBvbmUgZGV0ZXJtaW5pc3RpYyBkZXBlbmRlbmN5LWZyZWUgRGFydCBwYWNrYWdlIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lPzogc3RyaW5nLCBtYXBEaXJlY3RpdmU/OiB1bmtub3duLCBtb2R1bGU6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZT86IHVua25vd24sIHNvdXJjZXM/OiB7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119fSBpbnB1dCBCYWNrZW5kIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7e2FydGlmYWN0czogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXSwgdGFyZ2V0OiBzdHJpbmd9fSBDYW5kaWRhdGUgYXJ0aWZhY3Qgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEYXJ0UGFja2FnZSh7ZmlsZW5hbWUsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pIHtcbiAgdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgXCJkYXJ0XCIpXG4gIGlmIChmaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmIGZpbGVuYW1lICE9IFwiYmluL3Byb2dyYW0uZGFydFwiKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiZGFydFwiLCBcImFydGlmYWN0IGZpbGVuYW1lIG90aGVyIHRoYW4gYmluL3Byb2dyYW0uZGFydFwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKG1hcERpcmVjdGl2ZSAhPT0gdW5kZWZpbmVkIHx8IHNvdXJjZU1hcEZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJkYXJ0XCIsIFwic291cmNlLW1hcCBmaWxlbmFtZSBvciBkaXJlY3RpdmUgb3B0aW9uXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBjb25zdCB1bnJlYWRMb2NhbHMgPSBmaW5kVW5yZWFkRGFydExvY2Fscyhtb2R1bGUpXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBTb3VyY2VXcml0ZXIoe2ZpbGVuYW1lOiBcImJpbi9wcm9ncmFtLmRhcnRcIiwgbGFuZ3VhZ2U6IFwiZGFydFwiLCBtb2R1bGUsIHNvdXJjZXN9KVxuXG4gIGVtaXRQcm9ncmFtKG1vZHVsZSwgd3JpdGVyLCB1bnJlYWRMb2NhbHMpXG4gIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuICBjb25zdCByb290ID0gbWFwcGluZy5ub2Rlcy5maW5kKCh7cGF0aH0pID0+IHBhdGggPT0gXCJcIilcblxuICBpZiAoIXJvb3QpIHRocm93IG5ldyBFcnJvcihcIlZhbGlkYXRlZCBEYXJ0IG1vZHVsZSBvbWl0dGVkIGl0cyBjYW5vbmljYWwgcm9vdCBwcm92ZW5hbmNlLlwiKVxuICBjb25zdCByZWxhdGVkT3JpZ2lucyA9IHJlbGF0ZWRSb290T3JpZ2lucyhyb290KVxuXG4gIHJldHVybiB7XG4gICAgYXJ0aWZhY3RzOiBbe1xuICAgICAgY29udGVudDogZGFydFB1YnNwZWMsXG4gICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24veWFtbFwiLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogXCJwdWJzcGVjLnlhbWxcIixcbiAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAga2luZDogXCJzeW50aGV0aWNcIixcbiAgICAgICAgcmVhc29uOiBcIkZpeGVkIGRlcGVuZGVuY3ktZnJlZSBEYXJ0IDMuMTMuMyBwYWNrYWdlIGNvbmZpZ3VyYXRpb24uXCIsXG4gICAgICAgIHJlbGF0ZWRPcmlnaW5zXG4gICAgICB9LFxuICAgICAgcm9sZTogXCJtYW5pZmVzdFwiXG4gICAgfSwge1xuICAgICAgY29udGVudDogZGFydExvY2tmaWxlLFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL3lhbWxcIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IFwicHVic3BlYy5sb2NrXCIsXG4gICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgIGtpbmQ6IFwic3ludGhldGljXCIsXG4gICAgICAgIHJlYXNvbjogXCJEZXRlcm1pbmlzdGljIERhcnQgcHViIGxvY2tmaWxlIGZvciBhIHBhY2thZ2Ugd2l0aCBubyBkZXBlbmRlbmNpZXMuXCIsXG4gICAgICAgIHJlbGF0ZWRPcmlnaW5zXG4gICAgICB9LFxuICAgICAgcm9sZTogXCJtYW5pZmVzdFwiXG4gICAgfSwge1xuICAgICAgY29udGVudDogbWFwcGluZy5nZW5lcmF0ZWQuY29udGVudCxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtZGFydFwiLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogXCJiaW4vcHJvZ3JhbS5kYXJ0XCIsXG4gICAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJ0ZXh0XCIsIG1hcHBpbmcsIHNvdXJjZU1hcDogdG9Tb3VyY2VNYXBWMyhtYXBwaW5nKX0sXG4gICAgICByb2xlOiBcImVudHJ5XCJcbiAgICB9XSxcbiAgICB0YXJnZXQ6IFwiZGFydFwiXG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgY29tcGlsZXItb3duZWQgcHJlZml4IGFuZCBvbmUgY29tcGxldGUgcHJvZ3JhbS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge1NldDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uPn0gdW5yZWFkTG9jYWxzIExvY2FscyByZXF1aXJpbmcgYW4gYW5hbHl6ZXItb25seSByZWFkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRQcm9ncmFtKG1vZHVsZSwgd3JpdGVyLCB1bnJlYWRMb2NhbHMpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0UnVudGltZSwgXCJDaGVja2VkIERhcnQgc2FmZS1pbnRlZ2VyIHN1cHBvcnRcIiwgW21vZHVsZV0sIFtcIlwiXSlcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1vZHVsZS5mdW5jdGlvbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBtb2R1bGUuZnVuY3Rpb25zW2luZGV4XVxuICAgIGNvbnN0IHBhdGggPSBgL2Z1bmN0aW9ucy8ke2luZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJkZWNsYXJhdGlvbiBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJkYXJ0XCIsIGRlY2xhcmF0aW9uLnJldHVyblR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChkZWNsYXJhdGlvbi5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICBjb25zdCBmbGF0UGFyYW1ldGVycyA9IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+XG4gICAgICBgJHtlbWl0U2NhbGFyVHlwZShcImRhcnRcIiwgcGFyYW1ldGVyLnR5cGUpfSAke3BhcmFtZXRlci5uYW1lfWApLmpvaW4oXCIsIFwiKVxuICAgIGNvbnN0IG11bHRpbGluZVBhcmFtZXRlcnMgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHdyaXRlci5jb2x1bW4gLSAxICsgYCgke2ZsYXRQYXJhbWV0ZXJzfSkge2AubGVuZ3RoID4gODBcblxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICAgIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW1ldGVyLCBwYXJhbWV0ZXJJbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gXG5cbiAgICAgIGlmIChtdWx0aWxpbmVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHdyaXRlci5zeW50aGV0aWMoYCR7cGFyYW1ldGVySW5kZXggPyBcIlwiIDogXCJcXG5cIn0gIGAsIFwiRGFydCBwYXJhbWV0ZXIgaW5kZW50YXRpb25cIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVySW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJkYXJ0XCIsIHBhcmFtZXRlci50eXBlKSwge1xuICAgICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIudHlwZSwgcGF0aDogYCR7cGFyYW1ldGVyUGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgICB9KVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJwYXJhbWV0ZXIgc3BhY2luZ1wiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgICAgaWYgKG11bHRpbGluZVBhcmFtZXRlcnMpIHdyaXRlci5zeW50aGV0aWMoXCIsXFxuXCIsIFwiRGFydCBmb3JtYXR0ZXIgcGFyYW1ldGVyIHNlcGFyYXRvclwiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJib2R5IHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24uYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBlbWl0RGFydEJsb2NrKHdyaXRlciwgZGVjbGFyYXRpb24uYm9keSwgXCIgIFwiLCBgJHtwYXRofS9ib2R5YCwgdW5yZWFkTG9jYWxzKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24uYm9keSwgcGF0aDogYCR7cGF0aH0vYm9keWB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxudm9pZCBtYWluKCkge1xcblwiLCBcIkRhcnQgZ2VuZXJhdGVkIG1haW4gc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gIGVtaXREYXJ0QmxvY2sod3JpdGVyLCBtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBcIiAgXCIsIFwiL2VudHJ5UG9pbnQvYm9keVwiLCB1bnJlYWRMb2NhbHMpXG4gIHdyaXRlci5zeW50aGV0aWMoXCJ9XFxuXCIsIFwiRGFydCBnZW5lcmF0ZWQgbWFpbiBzY2FmZm9sZFwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdLCBbXCIvZW50cnlQb2ludFwiXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgb3JkZXJlZCBzZW1hbnRpYyBibG9jay5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggRXhhY3Qgc2VtYW50aWMgcGF0aC5cbiAqIEBwYXJhbSB7U2V0PGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb24+fSB1bnJlYWRMb2NhbHMgTG9jYWxzIHJlcXVpcmluZyBhbiBhbmFseXplci1vbmx5IHJlYWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByaW50VGFyZ2V0XSBUYXJnZXQtb3duZWQgb3V0cHV0IGZ1bmN0aW9uIHNwZWxsaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbbXVsdGlsaW5lUHJpbnRdIFdoZXRoZXIgdGFyZ2V0IHBsdW1iaW5nIHJlcXVpcmVzIHRyYWlsaW5nLWNvbW1hIG11bHRpbGluZSBjYWxscy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdERhcnRCbG9jayh3cml0ZXIsIGJsb2NrLCBpbmRlbnQsIHBhdGgsIHVucmVhZExvY2FscywgcHJpbnRUYXJnZXQgPSBcInByaW50XCIsIG11bHRpbGluZVByaW50ID0gZmFsc2UpIHtcbiAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PlxuICAgIGVtaXRTdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWAsIHVucmVhZExvY2FscywgcHJpbnRUYXJnZXQsIG11bHRpbGluZVByaW50KSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgVGFza3MgMDAxLTAwNSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IFNlbWFudGljIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgQ3VycmVudCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIEV4YWN0IHNlbWFudGljIHBhdGguXG4gKiBAcGFyYW0ge1NldDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uPn0gdW5yZWFkTG9jYWxzIExvY2FscyByZXF1aXJpbmcgYW4gYW5hbHl6ZXItb25seSByZWFkLlxuICogQHBhcmFtIHtzdHJpbmd9IHByaW50VGFyZ2V0IFRhcmdldC1vd25lZCBvdXRwdXQgZnVuY3Rpb24gc3BlbGxpbmcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG11bHRpbGluZVByaW50IFdoZXRoZXIgdGFyZ2V0IHBsdW1iaW5nIHJlcXVpcmVzIHRyYWlsaW5nLWNvbW1hIG11bHRpbGluZSBjYWxscy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgsIHVucmVhZExvY2FscywgcHJpbnRUYXJnZXQsIG11bHRpbGluZVByaW50KSB7XG4gIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgIGlmICghc3RhdGVtZW50Lm11dGFibGUpIHdyaXRlci5tYXBwZWQoXCJmaW5hbFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgZWxzZSB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiZGFydFwiLCBzdGF0ZW1lbnQudHlwZSksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50eXBlLCBwYXRoOiBgJHtwYXRofS90eXBlYCwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwibG9jYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGlmICghc3RhdGVtZW50Lm11dGFibGUpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJkYXJ0XCIsIHN0YXRlbWVudC50eXBlKSwge1xuICAgICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSwgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwiXG4gICAgICB9KVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJsb2NhbCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgYCR7cGF0aH0vaW5pdGlhbGl6ZXJgLCBcImRhcnRcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLm1hcHBlZChcIjtcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgaWYgKHVucmVhZExvY2Fscy5oYXMoc3RhdGVtZW50KSkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9X3NlbWFudGlmb2xkVXNlKCR7c3RhdGVtZW50Lm5hbWV9KTtcXG5gLCBcIkRhcnQgYW5hbHl6ZXIgdW5yZWFkLWxvY2FsIHVzZVwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC50YXJnZXQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50YXJnZXQsIHBhdGg6IGAke3BhdGh9L3RhcmdldGAsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJkYXJ0XCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHJldHVybiBlbWl0SWYod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgdW5yZWFkTG9jYWxzLCBwcmludFRhcmdldCwgbXVsdGlsaW5lUHJpbnQpXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcInJldHVyblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJldHVybiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJkYXJ0XCIsIGlkZW50aXR5KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiO1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgZXhwYW5kZWRQcmludCA9IG11bHRpbGluZVByaW50ICYmIHdyaXRlci5jb2x1bW4gLSAxICsgcHJpbnRUYXJnZXQubGVuZ3RoICtcbiAgICAgIGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uKS5sZW5ndGggKyAzID4gODBcblxuICAgIGlmIChwcmludFRhcmdldCA9PSBcInByaW50XCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQocHJpbnRUYXJnZXQsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbmFtZTogXCJwcmludFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwiY2FsbGVlXCJ9KVxuICAgIH0gZWxzZSB3cml0ZXIuc3ludGhldGljKHByaW50VGFyZ2V0LCBcIkRhcnQgcHJpbnQgcGx1bWJpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIuc3ludGhldGljKGAoJHtleHBhbmRlZFByaW50ID8gYFxcbiR7aW5kZW50fSAgYCA6IFwiXCJ9YCwgXCJEYXJ0IHByaW50IHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwiZGFydFwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKGV4cGFuZGVkUHJpbnQgPyBgLFxcbiR7aW5kZW50fSk7YCA6IFwiKTtcIiwgXCJEYXJ0IHByaW50IHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJkYXJ0XCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5tYXBwZWQoXCI7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBEYXJ0IHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uIGFmdGVyIHByZWZsaWdodC5cIilcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgc3RyaWN0IEJvb2xlYW4gY29uZGl0aW9uYWwuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSBzdGF0ZW1lbnQgQ29uZGl0aW9uYWwuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBFeGFjdCBzZW1hbnRpYyBwYXRoLlxuICogQHBhcmFtIHtTZXQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbj59IHVucmVhZExvY2FscyBMb2NhbHMgcmVxdWlyaW5nIGFuIGFuYWx5emVyLW9ubHkgcmVhZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmludFRhcmdldCBUYXJnZXQtb3duZWQgb3V0cHV0IGZ1bmN0aW9uIHNwZWxsaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBtdWx0aWxpbmVQcmludCBXaGV0aGVyIHRhcmdldCBwbHVtYmluZyByZXF1aXJlcyB0cmFpbGluZy1jb21tYSBtdWx0aWxpbmUgY2FsbHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdElmKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgsIHVucmVhZExvY2FscywgcHJpbnRUYXJnZXQsIG11bHRpbGluZVByaW50KSB7XG4gIHdyaXRlci5tYXBwZWQoXCJpZlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgKFwiLCBcIkRhcnQgY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBcImRhcnRcIiwgaWRlbnRpdHkpXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpIFwiLCBcIkRhcnQgY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogYCR7cGF0aH0vY29uc2VxdWVudGB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBlbWl0RGFydEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmNvbnNlcXVlbnQsIGAke2luZGVudH0gIGAsIGAke3BhdGh9L2NvbnNlcXVlbnRgLCB1bnJlYWRMb2NhbHMsIHByaW50VGFyZ2V0LFxuICAgIG11bHRpbGluZVByaW50KVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5jb25zZXF1ZW50LCBwYXRoOiBgJHtwYXRofS9jb25zZXF1ZW50YH0pXG4gIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBlbHNlIFwiLCBcIkRhcnQgYWx0ZXJuYXRlIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBgJHtwYXRofS9hbHRlcm5hdGVgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXREYXJ0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBgJHtpbmRlbnR9ICBgLCBgJHtwYXRofS9hbHRlcm5hdGVgLCB1bnJlYWRMb2NhbHMsIHByaW50VGFyZ2V0LFxuICAgICAgbXVsdGlsaW5lUHJpbnQpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5hbHRlcm5hdGUsIHBhdGg6IGAke3BhdGh9L2FsdGVybmF0ZWB9KVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRmluZHMgc2NhbGFyIGxvY2FscyB0aGF0IERhcnQgd291bGQgZGlhZ25vc2UgYmVjYXVzZSBubyBzZW1hbnRpYyBleHByZXNzaW9uIHJlYWRzIHRoZW0uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtTZXQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbj59IFVucmVhZCBkZWNsYXJhdGlvbiBpZGVudGl0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFVucmVhZERhcnRMb2NhbHMobW9kdWxlKSB7XG4gIC8qKiBAdHlwZSB7U2V0PGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb24+fSAqL1xuICBjb25zdCB1bnJlYWQgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHJvb3Qgb2YgWy4uLm1vZHVsZS5mdW5jdGlvbnMubWFwKCh7Ym9keX0pID0+IGJvZHkpLCBtb2R1bGUuZW50cnlQb2ludC5ib2R5XSkge1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFtdXG4gICAgLyoqIEB0eXBlIHtTZXQ8c3RyaW5nPn0gKi9cbiAgICBjb25zdCByZWFkcyA9IG5ldyBTZXQoKVxuXG4gICAgdmlzaXRTdGF0ZW1lbnRzKHJvb3QsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgICAgICBkZWNsYXJhdGlvbnMucHVzaChzdGF0ZW1lbnQpXG4gICAgICAgIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoc3RhdGVtZW50LmluaXRpYWxpemVyLCByZWFkcylcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKHN0YXRlbWVudC5jb25kaXRpb24sIHJlYWRzKVxuICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHxcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKHN0YXRlbWVudC5leHByZXNzaW9uLCByZWFkcylcbiAgICAgIH1cbiAgICB9KVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgZGVjbGFyYXRpb25zKSBpZiAoIXJlYWRzLmhhcyhkZWNsYXJhdGlvbi5uYW1lKSkgdW5yZWFkLmFkZChkZWNsYXJhdGlvbilcbiAgfVxuICByZXR1cm4gdW5yZWFkXG59XG5cbi8qKlxuICogVmlzaXRzIGV2ZXJ5IFRhc2tzIDAwMS0wMDUgc3RhdGVtZW50IGluIG9uZSBzZW1hbnRpYyBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgU2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0geyhzdGF0ZW1lbnQ6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudCkgPT4gdm9pZH0gY2FsbGJhY2sgU3RhdGVtZW50IHZpc2l0b3IuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmlzaXRTdGF0ZW1lbnRzKGJsb2NrLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgY2FsbGJhY2soc3RhdGVtZW50KVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0U3RhdGVtZW50cyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgY2FsbGJhY2spXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgdmlzaXRTdGF0ZW1lbnRzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGlkZW50aWZpZXIgcmVhZHMgd2l0aG91dCB0cmVhdGluZyBhc3NpZ25tZW50IHRhcmdldHMgYXMgcmVhZHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IHJlYWRzIENvbGxlY3RlZCBiaW5kaW5nIG5hbWVzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoZXhwcmVzc2lvbiwgcmVhZHMpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHJlYWRzLmFkZChleHByZXNzaW9uLm5hbWUpXG4gIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGV4cHJlc3Npb24uYXJndW1lbnRzKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGFyZ3VtZW50LCByZWFkcylcbiAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgY29sbGVjdElkZW50aWZpZXJSZWFkcyhleHByZXNzaW9uLm9wZXJhbmQsIHJlYWRzKVxuICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGV4cHJlc3Npb24ubGVmdCwgcmVhZHMpXG4gICAgY29sbGVjdElkZW50aWZpZXJSZWFkcyhleHByZXNzaW9uLnJpZ2h0LCByZWFkcylcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHJvb3QgcHJvdmVuYW5jZSB0byBhcnRpZmFjdC1sZXZlbCByZWxhdGVkIG9yaWdpbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2V9IHJvb3QgUm9vdCBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gUmVsYXRlZCByb290cy5cbiAqL1xuZnVuY3Rpb24gcmVsYXRlZFJvb3RPcmlnaW5zKHJvb3QpIHtcbiAgaWYgKHJvb3Qub3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIikge1xuICAgIHJldHVybiBbe2xvY2F0aW9uOiByb290Lm9yaWdpbi5sb2NhdGlvbiwgbm9kZUlkOiByb290LmlkLCByb2xlOiBcIm1vZHVsZVwiLCBzb3VyY2VJZDogcm9vdC5vcmlnaW4uc291cmNlSWR9XVxuICB9XG4gIGNvbnN0IG9yaWdpbnMgPSByb290Lm9yaWdpbi5raW5kID09IFwiZGVyaXZlZFwiID8gcm9vdC5vcmlnaW4ub3JpZ2lucyA6IHJvb3Qub3JpZ2luLnJlbGF0ZWRPcmlnaW5zXG5cbiAgcmV0dXJuIG9yaWdpbnMubWFwKChvcmlnaW4pID0+ICh7Li4ub3JpZ2luLCBub2RlSWQ6IG9yaWdpbi5ub2RlSWQgPz8gcm9vdC5pZCwgcm9sZTogb3JpZ2luLnJvbGUgPz8gXCJtb2R1bGVcIn0pKVxufVxuXG4vKipcbiAqIFJldHVybnMgb25lIHByZXZhbGlkYXRlZCBEYXJ0IGlkZW50aWZpZXIgdW5jaGFuZ2VkLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVmFsaWRhdGVkIGlkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTYW1lIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KG5hbWUpIHtcbiAgcmV0dXJuIG5hbWVcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Constructs Go's cgo-disabled, offline build/vet plan.
3
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
4
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable Go plan.
5
+ */
6
+ export declare function createGoCheckPlan(context: import("../language-registry.js").TargetCheckPlanContext): import("../semantic/types.js").TargetCheckPlan;
7
+ //# sourceMappingURL=go-check.d.ts.map