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
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Semantifold
2
2
 
3
- Task037 adds the first concrete standard-library portability slice: exact parser-proved Ruby `require "socket"`, genuine `TCPSocket.new(host, port)`, receiver `gets`/`close`, and one-string `puts`/`Kernel.puts` compile through executable Ruby facades and canonical v1 contracts to protected PHP providers using native `fsockopen`, `fgets`, `feof`, `fclose`, and stdout. Task036's neutral versioned facade foundation was delivered through PR #46 and merge `9aba48f9d48bcef4fd4c9275aec14bfcc4f0904c`; Task035's canonical contract/provider hub was delivered through PR #45 and merge `a2aad9d4932bfc6087adc4ff8bca43678c92413c`. Task034 supplies explicit compiler-authorized host effects, linear owned resources/references, typed host failures, exactly-once lowering, and path-complete explicit close. Task033 adds bounded nominal reference classes, Task032 adds strict-Boolean condition-controlled loops, and Task021 adds a [browser-oriented WebAssembly target](docs/webassembly.md).
3
+ Task 044 proves the first packed JavaScript/JSDoc-to-Java watch workflow through Task 043's deterministic coordinator and Task 040's registry-driven check boundary. A credential-free consumer can keep `semantifold watch --check` running while edits regenerate Java and real `javac` commits coherent source/classes through one active pointer. Frontend or compiler failure retains the last good generation, a later valid edit recovers in the same process, and generated programs run only when acceptance code explicitly invokes real `java`. The package ships a [copy-ready watched project](examples/jsdoc-java-watch/).
4
4
 
5
- Semantifold is an early language-neutral semantic code toolkit. The source tree supports a deliberately small fifteen-language baseline: PHP, Ruby, JavaScript with JSDoc, TypeScript, Java, Kotlin/JVM, strictly annotated Python, canonical C#, bounded Go, C17, C++20, Rust edition 2021, strict Swift, strict Dart VM/native, and strict Zig 0.15.2 source share one typed semantic representation. Browser WebAssembly is an additional target-only ID, not a sixteenth source language. The published baseline is `semantifold@0.7.0` / annotated `v0.7.0` at exact `gitHead` `8cd70c5a6c7de98df2d4a183d6555ad4f3d5ba5a`; it includes Task 028 Android, Task 030's bounded Android-qualified Flutter application target, and Task 031 Zig while retaining explicit iOS/macOS deferral. The planned [watch/build/check pipeline](docs/watch-build-pipeline.md) starts from this exact baseline; no product watch CLI exists yet.
5
+ Semantifold is an early language-neutral semantic code toolkit. The source tree supports a deliberately small fifteen-language baseline: PHP, Ruby, JavaScript with JSDoc, TypeScript, Java, Kotlin/JVM, strictly annotated Python, canonical C#, bounded Go, C17, C++20, Rust edition 2021, strict Swift, strict Dart VM/native, and strict Zig 0.15.2 source share one typed semantic representation. Browser WebAssembly is an additional target-only ID, not a sixteenth source language. Task 043 shipped through PR #58 at `40dcc86372929fb4747da08cd8e9d8226a32d88d`. The strict project manifest, one-shot and watched generation/publication CLI, generic non-executing check-plan contract, all fifteen text-target plans, deterministic watch coordinator, and packed JavaScript/JSDoc-to-Java vertical slice are implemented; only the terminal all-text-language matrix remains later watch/check work.
6
6
 
7
7
  ## Current API
8
8
 
@@ -45,9 +45,13 @@ Generated text output always uses LF. Exact original content, including LF, CRLF
45
45
 
46
46
  `generateArtifactSet` is the additive single-module artifact API. Original text targets return an entry artifact with the exact legacy bytes and rich/v3 mappings; an external JavaScript-family map directive also returns the referenced serialized mapping sidecar. C# returns mapped `Program.cs` then synthetic-provenance `Semantifold.csproj`. Go returns exactly two ordered artifacts: fixed synthetic-provenance `go.mod` first, then mapped `main.go`; the fixed module is `example.com/semantifold/generated` with `go 1.26.0` and creates no `go.sum`. C returns mapped `program.c` followed by synthetic `semantifold_runtime.h`. Rust returns synthetic `Cargo.toml`, synthetic Cargo-generated `Cargo.lock`, then mapped `src/main.rs`, with fixed edition 2021 and Rust/Cargo 1.98.1. Dart returns synthetic `pubspec.yaml`, synthetic deterministic `pubspec.lock`, then mapped sole-entry `bin/program.dart`. Zig returns synthetic `build.zig` then mapped sole-entry `src/main.zig`; Zig 0.15.2 needs no `build.zig.zon` for this dependency-free native-host project. Wasm binary/application generation returns `program.wasm`, `program.wasm.map`, `semantifold-loader.mjs`, then sole entry `index.html`, plus frozen `semantifold.browser.v1` ABI metadata. Because C#, Go, C, Rust, Dart, Zig, and Wasm are deliberately multi-artifact, `generate()` and `generateArtifact()` reject them with `UNSUPPORTED_ROLE`. Go accepts only an omitted filename or exact `main.go`, C accepts only omitted or exact `program.c`, Rust and Zig only omitted or exact `src/main.rs` and `src/main.zig` respectively, Dart only omitted or exact `bin/program.dart`, and Wasm only omitted or exact `program.wasm`; these multi-artifact backends reject unsupported mapping options rather than ignoring them. `createGeneratedArtifactSet` validates multi-file text, binary, mixed loader/binary, and application shapes transactionally: paths are ordered, unique, safe relative POSIX paths with no file/directory prefix collisions; content is explicitly text or bytes; media type, role, generated ownership, and provenance are required; exactly one artifact has role `entry`; and optional metadata is detached deeply frozen JSON. Binary content is held privately and returned as a fresh detached byte view on every read, so caller mutation cannot change validated bytes or their provenance. Generated helper files do not create semantic modules and are not Task 010 projects.
47
47
 
48
- Task 026 adds the target-only `ios` application backend through `generateArtifactSet({language: "ios", role: "application", ...})` and `generateProgramArtifactSet`. It lowers only the Task 022 Tasks 001–004 Swift subset, including Ruby-originating Task 010 projects, into deterministic captured semantic Swift, a synthetic SwiftUI shell, an unsigned Xcode project model, tests, exact assets, and a versioned ownership/provenance manifest with causal configuration spans and stable semantic-program identities. Artifact/resource paths use a closed portable ASCII alphabet while Unicode semantic source and generated text remain intact. Transactional create-only directory materialization remains deferred because Node's public filesystem API cannot provide both atomic no-replace directory publication and descriptor-relative no-follow operations without a separately authorized native boundary. Linux semantic execution and credential-free packed generation are implemented; real macOS/Xcode/Apple SDK/XCTest/XCUIAutomation/iOS Simulator acceptance is also deferred, so Task 026 is not delivered. See the [iOS application target](docs/ios.md).
48
+ `GeneratedArtifactPublisher` persists a complete ordered set of those already-validated artifact sets beneath a dedicated publication directory inside one canonical project root. Every target declares a language-neutral role. The publisher stages immutable generation directories, validator/compiler outputs, complete provenance, SHA-256 hashes, a complete filesystem inventory, and a deterministic versioned manifest, then commits the project through one synchronized same-directory regular-file replacement of `active-generation.json`. `resolveActive()` reads that pointer once and returns generation-scoped source/build paths plus truthful pending-cleanup state; stale files disappear only when a new immutable generation is selected, while old committed generations and caller-owned files remain untouched. See [transactional generated-artifact publication](docs/generated-artifact-publication.md) for path constraints, validators, the manifest and pointer schemas, interruption recovery, reader obligations, diagnostics, and the explicit single-writer/retention boundaries.
49
49
 
50
- Task 028 adds the target-only `android` application backend through the same artifact APIs. It lowers the Kotlin/JVM-supported semantic subset, including explicit Task 010 projects, into mapped namespaced Kotlin and a synthetic dependency-minimal Android Activity/native TextView project under fixed root `generated/android-app`. Configuration, manifests, SDK levels, resources/assets, output paths, checksums, and collisions are preflighted before rendering. The manifest has one exported launcher and no permissions or components beyond the Activity. The project carries exact shared Gradle 8.14, AGP 8.11.1, Kotlin 2.2.10, JDK 21.0.8, and API-35 metadata; its only Gradle library declarations are exact non-transitive test-implementation JUnit 4.13.2 and test-runtime Hamcrest Core 1.3. The implicit stdlib dependency is disabled, a checksum-pinned compiler stdlib is compile-input-only, and offline acceptance proves empty application runtime dependencies plus no JUnit/Hamcrest or Kotlin runtime implementation payload in the APK. No public materializer is exported. Real installation, labelled native-view assertion, activity recreation, emulator teardown, a second fresh boot/reinstall/relaunch, screenshots, UI XML, and failure diagnostics run only in the `/dev/kvm` TensorBuzz lane. See the [Android application target](docs/android.md).
50
+ `semantifold build` and `semantifold watch` load `./semantifold.json` by default; `--project <path>` selects another manifest, `--ndjson` selects the machine protocol, and `--check` requires every selected target to own a registered non-executing developer-check plan. The strict manifest declares a project ID, one publisher-owned relative root, explicit ordered source modules with one entry, and explicit ordered target roles/projections. Ordinary operation still performs generation only. Registered plans cover all fifteen text targets: the interpreted/managed checks plus cgo-disabled Go build/vet, strict C/C++ compile/link, locked offline Cargo build/check, Swift type-check/compile, Dart offline package/format/analyze/native compile, and isolated Zig project build/format. Expensive native sanitizer/optimization and Zig multi-mode test profiles remain explicit CI acceptance rather than every-edit branches. Every command is an exact shell-free argv against a configured canonical tool; output, homes, caches, and intermediates stay within the candidate generation, transient state is removed after close, and only a fully successful candidate switches the single active pointer. Dart's absolute-source-URI-bearing native check binary is transient rather than published. The version-1 complete-program manifest still admits PHP, Ruby, JavaScript, TypeScript, and Java text targets; other plans apply to existing single-module artifact sets without expanding semantic program generation. Watch adds a real initial build, complete-graph content reconciliation, burst coalescing, native-file-event fallback polling, failure recovery, and owned signal shutdown without runtime execution. See [project manifest and one-shot build CLI](docs/project-build-cli.md) for the schema and check boundary, and [deterministic project watch](docs/project-watch.md) for watch lifecycle, events, reporting, and tuning.
51
+
52
+ Task 026 adds the target-only `ios` application backend through `generateArtifactSet({language: "ios", role: "application", ...})` and `generateProgramArtifactSet`. It lowers only the Task 022 Tasks 001–004 Swift subset, including Ruby-originating Task 010 projects, into deterministic captured semantic Swift, a synthetic SwiftUI shell, an unsigned Xcode project model, tests, exact assets, and a versioned ownership/provenance manifest with causal configuration spans and stable semantic-program identities. Artifact/resource paths use a closed portable ASCII alphabet while Unicode semantic source and generated text remain intact. Task 026's independent create-only directory materializer remains deferred because Node's public filesystem API cannot provide both atomic no-replace directory publication and descriptor-relative no-follow operations without a separately authorized native boundary; Task 038 can instead persist the already-validated set inside its generic immutable-generation/pointer contract. Linux semantic execution and credential-free packed generation are implemented; real macOS/Xcode/Apple SDK/XCTest/XCUIAutomation/iOS Simulator acceptance is also deferred, so Task 026 is not delivered. See the [iOS application target](docs/ios.md).
53
+
54
+ Task 028 adds the target-only `android` application backend through the same artifact APIs. It lowers the Kotlin/JVM-supported semantic subset, including explicit Task 010 projects, into mapped namespaced Kotlin and a synthetic dependency-minimal Android Activity/native TextView project under fixed root `generated/android-app`. Configuration, manifests, SDK levels, resources/assets, output paths, checksums, and collisions are preflighted before rendering. The manifest has one exported launcher and no permissions or components beyond the Activity. The project carries exact shared Gradle 8.14, AGP 8.11.1, Kotlin 2.2.10, JDK 21.0.8, and API-35 metadata; its only Gradle library declarations are exact non-transitive test-implementation JUnit 4.13.2 and test-runtime Hamcrest Core 1.3. The implicit stdlib dependency is disabled, a checksum-pinned compiler stdlib is compile-input-only, and offline acceptance proves empty application runtime dependencies plus no JUnit/Hamcrest or Kotlin runtime implementation payload in the APK. Task 038 can persist the already-validated artifact set generically but adds no Android-specific build, emulator, or deployment policy. Real installation, labelled native-view assertion, activity recreation, emulator teardown, a second fresh boot/reinstall/relaunch, screenshots, UI XML, and failure diagnostics run only in the `/dev/kvm` TensorBuzz lane. See the [Android application target](docs/android.md).
51
55
 
52
56
  Task 030 adds the application-only `flutter` target without making Flutter a source language. Any Task 010 project accepted by the Dart backend lowers to mapped namespaced Dart, an exact SDK-only stateless Material shell, and an owned Android Flutter project under `generated/flutter-app`. Flutter stable 3.47.4/Dart 3.13.3, the exact SDK-preloaded lockfile, assets, identities, versions, all paths/hashes, and rich provenance are deterministic; no `flutter create`, plugin, platform channel, permission, network/storage/background work, or external pub download participates. Offline real Flutter format/analyze/widget tests and Android build/UI acceptance reuse Task 028's one shared cache and two KVM boots. iOS artifacts and all macOS/Xcode/Apple SDK/CocoaPods/signing/Simulator claims remain explicitly deferred. See the [Flutter application target](docs/flutter.md).
53
57
 
@@ -57,7 +61,7 @@ Task 036 extends only this explicit program path with compiler-owned source-lang
57
61
 
58
62
  Binary/resource provenance uses `SemantifoldByteMapping` v1 through `createByteMapping`, `parseByteMapping`, and `stringifyByteMapping`. Generated ranges are ordered, non-overlapping, half-open byte offsets with semantic identities or explicit synthetic reasons. They are never interpreted as UTF-16 positions.
59
63
 
60
- `discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `restore`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_DART`, `SEMANTIFOLD_ZIG`, `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, `SEMANTIFOLD_KOTLINC`, `SEMANTIFOLD_PYTHON`, `SEMANTIFOLD_DOTNET`, `SEMANTIFOLD_GO`, `SEMANTIFOLD_CLANG`, `SEMANTIFOLD_CLANGPP`, `SEMANTIFOLD_RUSTC`, `SEMANTIFOLD_CARGO`, `SEMANTIFOLD_SWIFTC`, `SEMANTIFOLD_WASM_VALIDATE`, and `SEMANTIFOLD_CHROMIUM`; none of these APIs installs or downloads a tool. The generic `php` profile accepts PHP 8.x, while closed-record execution and the Task 037 PHP provider use the canonical `php82` profile (through the same `SEMANTIFOLD_PHP` override) to require PHP 8.2 or newer with core stream functions. Zig requires exact 0.15.2 on Linux x86-64; Dart requires exact SDK 3.13.3 stable on Linux x64, Kotlin exact 2.4.20 on pinned OpenJDK 25.0.4+7, and Swift exact 6.3.3 on Linux x86-64. Browser Wasm requires WABT 1.0.36 and Chrome/Chromium 152.0.7977.82 in addition to Node 24.
64
+ `discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `restore`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_DART`, `SEMANTIFOLD_ZIG`, `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, `SEMANTIFOLD_KOTLINC`, `SEMANTIFOLD_PYTHON`, `SEMANTIFOLD_DOTNET`, `SEMANTIFOLD_GO`, `SEMANTIFOLD_CLANG`, `SEMANTIFOLD_CLANGPP`, `SEMANTIFOLD_RUSTC`, `SEMANTIFOLD_CARGO`, `SEMANTIFOLD_SWIFTC`, `SEMANTIFOLD_WASM_VALIDATE`, and `SEMANTIFOLD_CHROMIUM`; none of these APIs installs or downloads a tool. The generic `php` profile accepts PHP 8.x, while closed-record execution and the Task 037 PHP provider use the canonical `php82` profile (through the same `SEMANTIFOLD_PHP` override) to require PHP 8.2 or newer with core stream functions. Zig requires exact 0.15.2 on Linux x86-64; Dart requires exact SDK 3.13.3 stable on Linux x64, Kotlin exact 2.4.20 on pinned OpenJDK 25.0.4.1+1 development or 25.0.4+7 TensorBuzz profiles, and Swift exact 6.3.3 on Linux x86-64. Browser Wasm requires WABT 1.0.36 and Chrome/Chromium 152.0.7977.82 in addition to Node 24.
61
65
 
62
66
  This is not general-purpose support for any of the fifteen languages. PHP, Ruby, JavaScript with JSDoc, TypeScript, and Java implement Task 005 general required functions/calls, Task 006 recursive immutable lists/maps, Task 007 explicit optional values, Task 008 ordered list iteration, Task 009 closed records, Task 010 explicit semantic projects, Task 011 typed unchecked errors, Task 012 invariant unbounded type parameters and generic declarations/applications, Task 014 insertion-ordered immutable map iteration, Task 032 strict-Boolean condition-controlled loops, Task 033 bounded reference classes, and Task 034's bounded effect/resource profile. Dart and Zig implement Task 005 general required functions/calls but none of those later profiles. `OptionalType {valueType}` contains only semantic presence or absence; it composes recursively as a declared list element or map value, and access preserves that optional result. A strict presence test can prove one simple binding present inside exactly the corresponding branch. Ruby uses exact `T?` metadata and `nil?`, JavaScript/JSDoc uses exact `T|null`, TypeScript uses exact `T | null`, PHP uses canonical `?T`, and Java uses exact `java.util.Optional<T>`/`Optional<T>` operations. Arbitrary unions, nested optionals, implicit nullable/default parameters, `undefined`, truthiness, nullish defaults/navigation, Java bare `null`, and unchecked unwrap remain unsupported. Collection support covers homogeneous literals, zero-based list indexing, total string-key map lookup, size, recursive typing, function passage, exact ordered list `for-each`, and the separate `OrderedMapType` pair-iteration profile. Ordinary `MapType` remains unordered and non-iterable. Ordered maps accept unique nonnumeric string keys, evaluate entries left-to-right, and visit key/value pairs in first-insertion order; aliases, mutation, key-only/value-only loops, and unordered conversions fail loudly. Java lowers only safe local ordered literals through a private `LinkedHashMap` insertion sequence and a non-escaping `Collections.unmodifiableSequencedMap` boundary. Every list, ordered-map, and condition-controlled loop has a deterministic semantic identity; each `break` or `continue` resolves to the nearest enclosing identity and cannot cross a function boundary. Collection loops evaluate their operand once and bind values immutably in body-local scope. A condition-controlled loop evaluates an exact Boolean condition before every iteration and may execute zero times; no loop body by itself proves a non-void function complete. Any outer mutable binding assigned on a nested loop path loses its known-value and optional-presence facts before the relevant repeated condition or body validation and after loop exit, including assignment paths ending in `break`, `continue`, or `return`; unaffected bindings keep stable facts. Task 007 does not turn an unchecked missing-key lookup into an optional operation. PHPDoc distinguishes `list<T>` from `array<string,T>`; JavaScript objects are never maps. Immutability is the accepted semantic operation boundary, not a deep-freezing promise. The other eight source languages and browser Wasm remain on the Tasks 001–004 two-parameter/scalar-return profile and reject later-feature modules transactionally. See [language support](docs/language-support.md) before using it on other code.
63
67
 
@@ -133,6 +137,7 @@ The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, Kot
133
137
  - [Goals](docs/goals.md)
134
138
  - [Architecture](docs/architecture.md)
135
139
  - [Watch, build, and target-check pipeline](docs/watch-build-pipeline.md)
140
+ - [Deterministic project watch](docs/project-watch.md)
136
141
  - [Coding standards](docs/coding-standards.md)
137
142
  - [Language support](docs/language-support.md)
138
143
  - [Rust source and Cargo target](docs/rust.md)
@@ -147,6 +152,7 @@ The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, Kot
147
152
  - [Parser qualification](docs/parser-qualification.md)
148
153
  - [Testing](docs/testing.md)
149
154
  - [Source provenance and mappings](docs/source-maps.md)
155
+ - [Transactional generated-artifact publication](docs/generated-artifact-publication.md)
150
156
  - [Multi-file modules and names](docs/multi-file-modules.md)
151
157
  - [Standard-library portability design](docs/standard-library-portability.md)
152
158
  - [Standard-library portability implementation plan](docs/plans/2026-09-05-standard-library-portability.md)
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ // @ts-check
3
+
4
+ import {SemantifoldCli} from "../index.js"
5
+
6
+ process.exitCode = await new SemantifoldCli().run(process.argv.slice(2))
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=semantifold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantifold.d.ts","sourceRoot":"","sources":["../../bin/semantifold.js"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ // @ts-check
3
+ import { SemantifoldCli } from "../index.js";
4
+ process.exitCode = await new SemantifoldCli().run(process.argv.slice(2));
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWZvbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9iaW4vc2VtYW50aWZvbGQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLFlBQVk7QUFFWixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBRTFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxJQUFJLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7U2VtYW50aWZvbGRDbGl9IGZyb20gXCIuLi9pbmRleC5qc1wiXG5cbnByb2Nlc3MuZXhpdENvZGUgPSBhd2FpdCBuZXcgU2VtYW50aWZvbGRDbGkoKS5ydW4ocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxuIl19
package/build/index.d.ts CHANGED
@@ -3,6 +3,15 @@ export { SemantifoldDiagnostic };
3
3
  export { createCapabilityAuthority } from "./src/semantic/capabilities.js";
4
4
  export { languageCapabilities, supportedLanguages } from "./src/language-registry.js";
5
5
  export { createGeneratedArtifactSet } from "./src/artifacts.js";
6
+ export { GeneratedArtifactPublisher } from "./src/publication.js";
7
+ export { ProjectManifestLoader, SemantifoldProject } from "./src/project-manifest.js";
8
+ export { ProjectSnapshot, ProjectSnapshotBuilder } from "./src/project-snapshot.js";
9
+ export { ProjectBuilder } from "./src/project-build.js";
10
+ export { parseSemantifoldCliArguments, SemantifoldCli } from "./src/project-cli.js";
11
+ export { ProjectBuildReporter } from "./src/project-reporter.js";
12
+ export { ProjectWatchCoordinator } from "./src/project-watch.js";
13
+ export { ProjectWatchReporter } from "./src/project-watch-reporter.js";
14
+ export { createTargetCheckPlan, TargetCheckRunner } from "./src/target-check.js";
6
15
  export { createStdlibContractRegistry, listStdlibModules, resolveStdlibModule } from "./src/semantic/stdlib.js";
7
16
  export { createStdlibProviderRegistry, listStdlibProviders } from "./src/stdlib-providers.js";
8
17
  export { negotiateStdlibProviders } from "./src/stdlib-negotiation.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -13,6 +13,15 @@ export { SemantifoldDiagnostic };
13
13
  export { createCapabilityAuthority } from "./src/semantic/capabilities.js";
14
14
  export { languageCapabilities, supportedLanguages } from "./src/language-registry.js";
15
15
  export { createGeneratedArtifactSet } from "./src/artifacts.js";
16
+ export { GeneratedArtifactPublisher } from "./src/publication.js";
17
+ export { ProjectManifestLoader, SemantifoldProject } from "./src/project-manifest.js";
18
+ export { ProjectSnapshot, ProjectSnapshotBuilder } from "./src/project-snapshot.js";
19
+ export { ProjectBuilder } from "./src/project-build.js";
20
+ export { parseSemantifoldCliArguments, SemantifoldCli } from "./src/project-cli.js";
21
+ export { ProjectBuildReporter } from "./src/project-reporter.js";
22
+ export { ProjectWatchCoordinator } from "./src/project-watch.js";
23
+ export { ProjectWatchReporter } from "./src/project-watch-reporter.js";
24
+ export { createTargetCheckPlan, TargetCheckRunner } from "./src/target-check.js";
16
25
  export { createStdlibContractRegistry, listStdlibModules, resolveStdlibModule } from "./src/semantic/stdlib.js";
17
26
  export { createStdlibProviderRegistry, listStdlibProviders } from "./src/stdlib-providers.js";
18
27
  export { negotiateStdlibProviders } from "./src/stdlib-negotiation.js";
@@ -189,4 +198,4 @@ export function generateArtifactSet(input) {
189
198
  return constructArtifactSet(backend(language == "android" || language == "flutter" ? input :
190
199
  { assets, configuration, filename, language, mapDirective, module, resources, sourceMapFilename, sources }));
191
200
  }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQzdELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUMvRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUVyRSxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFBO0FBQ3hFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdHLE9BQU8sRUFBQyw0QkFBNEIsRUFB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QVksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFbEYsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRixFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUE7QUFDOUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlU291cmNlfSBmcm9tIFwiLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7cGFyc2VQcm9ncmFtU291cmNlfSBmcm9tIFwiLi9zcmMvZnJvbnRlbmRzL3Byb2dyYW0uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUFydGlmYWN0U291cmNlLCBnZW5lcmF0ZVNvdXJjZX0gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVQcm9ncmFtQXJ0aWZhY3RzfSBmcm9tIFwiLi9zcmMvYmFja2VuZHMvcHJvZ3JhbS5qc1wiXG5pbXBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0IGFzIGNvbnN0cnVjdEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCB1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuL3NyYy9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4vc3JjL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7a290bGluQXJ0aWZhY3RNZXRhZGF0YX0gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2tvdGxpbi5qc1wiXG5pbXBvcnQge3ByZWZsaWdodEVmZmVjdENhcGFiaWxpdGllc30gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2VmZmVjdHMuanNcIlxuXG5jb25zdCBhcnRpZmFjdEJhY2tlbmRSb2xlcyA9IG5ldyBTZXQoW1widGV4dFwiLCBcImJpbmFyeVwiLCBcImFwcGxpY2F0aW9uXCJdKVxuXG5leHBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpY31cbmV4cG9ydCB7Y3JlYXRlQ2FwYWJpbGl0eUF1dGhvcml0eX0gZnJvbSBcIi4vc3JjL3NlbWFudGljL2NhcGFiaWxpdGllcy5qc1wiXG5leHBvcnQge2xhbmd1YWdlQ2FwYWJpbGl0aWVzLCBzdXBwb3J0ZWRMYW5ndWFnZXN9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5leHBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmV4cG9ydCB7Y3JlYXRlU3RkbGliQ29udHJhY3RSZWdpc3RyeSwgbGlzdFN0ZGxpYk1vZHVsZXMsIHJlc29sdmVTdGRsaWJNb2R1bGV9IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9zdGRsaWIuanNcIlxuZXhwb3J0IHtjcmVhdGVTdGRsaWJQcm92aWRlclJlZ2lzdHJ5LCBsaXN0U3RkbGliUHJvdmlkZXJzfSBmcm9tIFwiLi9zcmMvc3RkbGliLXByb3ZpZGVycy5qc1wiXG5leHBvcnQge25lZ290aWF0ZVN0ZGxpYlByb3ZpZGVyc30gZnJvbSBcIi4vc3JjL3N0ZGxpYi1uZWdvdGlhdGlvbi5qc1wiXG5leHBvcnQge2NyZWF0ZVN0ZGxpYkZhY2FkZVJlZ2lzdHJ5LCBsaXN0U3RkbGliRmFjYWRlcywgcmVzb2x2ZVN0ZGxpYkZhY2FkZX0gZnJvbSBcIi4vc3JjL3N0ZGxpYi1mYWNhZGVzLmpzXCJcbmV4cG9ydCB7Y3JlYXRlQnl0ZU1hcHBpbmcsIHBhcnNlQnl0ZU1hcHBpbmcsIHN0cmluZ2lmeUJ5dGVNYXBwaW5nfSBmcm9tIFwiLi9zcmMvYmluYXJ5LW1hcHBpbmcuanNcIlxuZXhwb3J0IHtjYW5vbmljYWxUb29sY2hhaW5zLCBkaXNjb3ZlckNhbm9uaWNhbFRvb2xjaGFpbiwgZGlzY292ZXJUb29sY2hhaW59IGZyb20gXCIuL3NyYy90b29sY2hhaW5zLmpzXCJcbmV4cG9ydCB7cnVuQWNjZXB0YW5jZVN0YWdlc30gZnJvbSBcIi4vc3JjL2FjY2VwdGFuY2UuanNcIlxuZXhwb3J0IHtnZXROb2RlUHJvdmVuYW5jZSwgZ2V0U3ltYm9sUHJvdmVuYW5jZX0gZnJvbSBcIi4vc3JjL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuZXhwb3J0IHtwcmltYXJ5TG9jYXRpb259IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7XG4gIGNvbXBvc2VNYXBwaW5ncyxcbiAgY29tcG9zZVNvdXJjZU1hcHMsXG4gIGdlbmVyYXRlZFBvc2l0aW9uRm9yLFxuICBtYXBwaW5nRnJvbVNvdXJjZU1hcCxcbiAgb3JpZ2luYWxQb3NpdGlvbkZvcixcbiAgcGFyc2VNYXBwaW5nLFxuICByZW1hcERpYWdub3N0aWMsXG4gIHJlbWFwTG9jYXRpb24sXG4gIHNwYW5zRm9yTm9kZSxcbiAgc3BhbnNGb3JTeW1ib2wsXG4gIHN0cmluZ2lmeU1hcHBpbmcsXG4gIHRvU291cmNlTWFwVjNcbn0gZnJvbSBcIi4vc3JjL21hcHBpbmcuanNcIlxuXG4vKipcbiAqIFBhcnNlcyBzb3VyY2UgaW50byBTZW1hbnRpZm9sZCdzIHNoYXJlZCBzZW1hbnRpYyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUgdXNlZCBpbiBkaWFnbm9zdGljcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhcGFiaWxpdHlBdXRob3JpdHk+IHwgaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQ2FwYWJpbGl0eUF1dGhvcml0eUlucHV0fSBbaW5wdXQuY2FwYWJpbGl0eUF1dGhvcml0eV0gLSBFeHBsaWNpdCBjb21waWxlciBhdXRob3JpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gIHJldHVybiBwYXJzZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBjb21wbGV0ZSBleHBsaWNpdCBtdWx0aS1zb3VyY2UgcHJvamVjdCBpbnRvIG9uZSByZXNvbHZlZCBzZW1hbnRpYyBwcm9ncmFtLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUHJvZ3JhbSBwYXJzZSByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmVudHJ5TW9kdWxlIC0gU3RhYmxlIGlkZW50aXR5IG9mIHRoZSBzb2xlIGVudHJ5IG1vZHVsZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhbmd1YWdlOiBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlLCBzb3VyY2U6IHN0cmluZ31bXX0gaW5wdXQuc291cmNlcyAtIENvbXBsZXRlIGNhbGxlci1zdXBwbGllZCBzb3VyY2Ugc2V0LlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXBhYmlsaXR5QXV0aG9yaXR5PiB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhcGFiaWxpdHlBdXRob3JpdHlJbnB1dH0gW2lucHV0LmNhcGFiaWxpdHlBdXRob3JpdHldIC0gRXhwbGljaXQgY29tcGlsZXIgYXV0aG9yaXR5IHNoYXJlZCBieSBldmVyeSBwcm9ncmFtIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IFNlbWFudGljIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyYW0oaW5wdXQpIHtcbiAgcmV0dXJuIHBhcnNlUHJvZ3JhbVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGFyZ2V0LWxhbmd1YWdlIHNvdXJjZSBmcm9tIGEgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW5lcmF0ZWQgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGUoaW5wdXQpIHtcbiAgcmV0dXJuIGdlbmVyYXRlU291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJldXNhYmxlIG91dHB1dCBhcnRpZmFjdCB3aXRoIHJpY2ggYW5kIFNvdXJjZSBNYXAgdjMgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5maWxlbmFtZV0gLSBPdXRwdXQgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gU291cmNlcyBmb3IgY2FsbGVyLWF1dGhvcmVkIG1vZHVsZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3R9IEdlbmVyYXRlZCBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3QoaW5wdXQpIHtcbiAgcmV0dXJuIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBtYXBwZWQgYXJ0aWZhY3Qgc2V0IGZvciBhIGNvbXBsZXRlIHNlbWFudGljIHByb2dyYW0uXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQcm9ncmFtIGdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFJlZ2lzdGVyZWQgcHJvZ3JhbSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbX0gaW5wdXQucHJvZ3JhbSAtIENvbXBsZXRlIHJlc29sdmVkIHByb2dyYW0uXG4gKiBAcGFyYW0ge1widGV4dFwiIHwgXCJhcHBsaWNhdGlvblwifSBbaW5wdXQucm9sZV0gLSBFeHBsaWNpdCByb2xlOyBvbWl0dGVkIHByZXNlcnZlcyB0ZXh0IGdlbmVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbklucHV0IHwgaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQW5kcm9pZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbklucHV0IHwgaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuRmx1dHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbklucHV0fSBbaW5wdXQuY29uZmlndXJhdGlvbl0gLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkFzc2V0SW5wdXRbXSB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkFuZHJvaWRBcHBsaWNhdGlvbklucHV0RmlsZVtdIHwgaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuRmx1dHRlckFwcGxpY2F0aW9uQXNzZXRJbnB1dFtdfSBbaW5wdXQuYXNzZXRzXSAtIEV4YWN0IGNhbGxlciBhc3NldHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkFuZHJvaWRBcHBsaWNhdGlvbklucHV0RmlsZVtdfSBbaW5wdXQucmVzb3VyY2VzXSAtIEV4YWN0IEFuZHJvaWQgY2FsbGVyIHJlc291cmNlcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldH0gQ29tcGxldGUgZ2VuZXJhdGVkIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUHJvZ3JhbUFydGlmYWN0U2V0KGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZVByb2dyYW1BcnRpZmFjdHMoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBhcnRpZmFjdCBzZXQgZm9yIG9uZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gUmVnaXN0ZXJlZCB0YXJnZXQgbGFuZ3VhZ2Ugb3IgcGxhdGZvcm0gSUQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge1widGV4dFwiIHwgXCJiaW5hcnlcIiB8IFwiYXBwbGljYXRpb25cIn0gW2lucHV0LnJvbGVdIC0gUmVxdWVzdGVkIGJhY2tlbmQgYXJ0aWZhY3Qgcm9sZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gU2FmZSBvdXRwdXQgcGF0aCBmb3IgYSB0ZXh0IHRhcmdldC5cbiAqIEBwYXJhbSB7XCJub25lXCIgfCBcImV4dGVybmFsXCIgfCBcImlubGluZVwifSBbaW5wdXQubWFwRGlyZWN0aXZlXSAtIEphdmFTY3JpcHQtZmFtaWx5IG1hcCBkaXJlY3RpdmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LnNvdXJjZU1hcEZpbGVuYW1lXSAtIEV4dGVybmFsIG1hcCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbaW5wdXQuc291cmNlc10gLSBPcmlnaW5hbCBzb3VyY2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkFuZHJvaWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkZsdXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dH0gW2lucHV0LmNvbmZpZ3VyYXRpb25dIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Bc3NldElucHV0W10gfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25JbnB1dEZpbGVbXSB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkZsdXR0ZXJBcHBsaWNhdGlvbkFzc2V0SW5wdXRbXX0gW2lucHV0LmFzc2V0c10gLSBFeGFjdCBjYWxsZXIgYXNzZXRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25JbnB1dEZpbGVbXX0gW2lucHV0LnJlc291cmNlc10gLSBFeGFjdCBBbmRyb2lkIGNhbGxlciByZXNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXR9IENvbXBsZXRlIGdlbmVyYXRlZCBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0U2V0KGlucHV0KSB7XG4gIGlmICghaW5wdXQgfHwgdHlwZW9mIGlucHV0ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbnB1dCkgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGlucHV0KSAhPSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZTogXCJhcnRpZmFjdFwiLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1aXJlcyBhIHJlcXVlc3Qgb2JqZWN0LlwiXG4gICAgfSlcbiAgfVxuICBjb25zdCB7YXNzZXRzLCBjb25maWd1cmF0aW9uLCBmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCByZXNvdXJjZXMsIHJvbGUgPSBcInRleHRcIiwgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9ID0gaW5wdXRcblxuICBpZiAodHlwZW9mIGxhbmd1YWdlICE9IFwic3RyaW5nXCIgfHwgbGFuZ3VhZ2UubGVuZ3RoID09IDApIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlOiBcImFydGlmYWN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkFydGlmYWN0LXNldCBnZW5lcmF0aW9uIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyBsYW5ndWFnZSBvciB0YXJnZXQgSUQuXCJcbiAgICB9KVxuICB9XG4gIGlmICh0eXBlb2Ygcm9sZSAhPSBcInN0cmluZ1wiIHx8ICFhcnRpZmFjdEJhY2tlbmRSb2xlcy5oYXMocm9sZSkpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdCBiYWNrZW5kIHJvbGUgbXVzdCBiZSAndGV4dCcsICdiaW5hcnknLCBvciAnYXBwbGljYXRpb24nLlwiXG4gICAgfSlcbiAgfVxuICBjb25zdCB0YXJnZXQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlY29yZChsYW5ndWFnZSlcbiAgcHJlZmxpZ2h0RWZmZWN0Q2FwYWJpbGl0aWVzKG1vZHVsZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSkpXG4gIGNvbnN0IGdlbmVyaWNEZWNsYXJhdGlvbiA9IFsuLi5tb2R1bGU/LnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZT8uZnVuY3Rpb25zID8/IFtdXVxuICAgIC5maW5kKChkZWNsYXJhdGlvbikgPT4gKGRlY2xhcmF0aW9uPy50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID8/IDApID4gMClcblxuICBpZiAoZ2VuZXJpY0RlY2xhcmF0aW9uICYmICF0YXJnZXQuZmVhdHVyZXMudHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljcykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSgvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIFwiVGFzayAwMTIgdHlwZSBwYXJhbWV0ZXJzIGFuZCBnZW5lcmljc1wiLCBnZW5lcmljRGVjbGFyYXRpb24ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlPy5yZWNvcmRzKSAmJiBtb2R1bGUucmVjb3Jkcy5sZW5ndGggPiAwICYmICF0YXJnZXQuZmVhdHVyZXMuY2xvc2VkUmVjb3Jkcykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSgvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIFwiVGFzayAwMDkgY2xvc2VkIHJlY29yZHNcIiwgbW9kdWxlLnJlY29yZHNbMF0ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlPy5jbGFzc2VzKSAmJiBtb2R1bGUuY2xhc3Nlcy5sZW5ndGggPiAwICYmICF0YXJnZXQuZmVhdHVyZXMucmVmZXJlbmNlQ2xhc3Nlcykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSgvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIFwiVGFzayAwMzMgcmVmZXJlbmNlIGNsYXNzZXNcIiwgbW9kdWxlLmNsYXNzZXNbMF0ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChyb2xlID09IFwidGV4dFwiKSB7XG4gICAgaWYgKHRhcmdldC5hcnRpZmFjdE11bHRpcGxpY2l0eSA9PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIFwidGV4dEJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcblxuICAgICAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KGJhY2tlbmQoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkpXG4gICAgfVxuICAgIGNvbnN0IGFydGlmYWN0ID0gZ2VuZXJhdGVBcnRpZmFjdFNvdXJjZSh7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGxhbmd1YWdlOiAvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBtYXBEaXJlY3RpdmUsXG4gICAgICBtb2R1bGUsXG4gICAgICBzb3VyY2VNYXBGaWxlbmFtZSxcbiAgICAgIHNvdXJjZXNcbiAgICB9KVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSAqL1xuICAgIGNvbnN0IGFydGlmYWN0cyA9IFt7XG4gICAgICBjb250ZW50OiBhcnRpZmFjdC5jb2RlLFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRhcmdldC5tZWRpYVR5cGUpLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogYXJ0aWZhY3QuZmlsZW5hbWUsXG4gICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgIGtpbmQ6IFwidGV4dFwiLFxuICAgICAgICBtYXBwaW5nOiBhcnRpZmFjdC5tYXBwaW5nLFxuICAgICAgICBzb3VyY2VNYXA6IGFydGlmYWN0LnNvdXJjZU1hcCxcbiAgICAgICAgc291cmNlTWFwRmlsZW5hbWU6IGFydGlmYWN0LnNvdXJjZU1hcEZpbGVuYW1lXG4gICAgICB9LFxuICAgICAgcm9sZTogXCJlbnRyeVwiXG4gICAgfV1cblxuICAgIGlmIChtYXBEaXJlY3RpdmUgPT0gXCJleHRlcm5hbFwiKSB7XG4gICAgICBhcnRpZmFjdHMucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IGAke0pTT04uc3RyaW5naWZ5KGFydGlmYWN0LnNvdXJjZU1hcCl9XFxuYCxcbiAgICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIHBhdGg6IGFydGlmYWN0LnNvdXJjZU1hcEZpbGVuYW1lLFxuICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAga2luZDogXCJzeW50aGV0aWNcIixcbiAgICAgICAgICByZWFzb246IFwiU2VyaWFsaXplZCBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24gZm9yIHRoZSBnZW5lcmF0ZWQgZW50cnkgYXJ0aWZhY3QuXCIsXG4gICAgICAgICAgcmVsYXRlZE9yaWdpbnM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IFwibWFwcGluZ1wiXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldCh7XG4gICAgICBhcnRpZmFjdHMsXG4gICAgICAuLi4obGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiA/IHttZXRhZGF0YToga290bGluQXJ0aWZhY3RNZXRhZGF0YX0gOiB7fSksXG4gICAgICB0YXJnZXQ6IGxhbmd1YWdlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlZ2lzdHJ5Um9sZSA9IHJvbGUgPT0gXCJiaW5hcnlcIiA/IFwiYmluYXJ5QmFja2VuZFwiIDogXCJhcHBsaWNhdGlvbkJhY2tlbmRcIlxuICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCByZWdpc3RyeVJvbGUsIG1vZHVsZT8ubG9jYXRpb24pXG5cbiAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KGJhY2tlbmQobGFuZ3VhZ2UgPT0gXCJhbmRyb2lkXCIgfHwgbGFuZ3VhZ2UgPT0gXCJmbHV0dGVyXCIgPyBpbnB1dCA6XG4gICAge2Fzc2V0cywgY29uZmlndXJhdGlvbiwgZmlsZW5hbWUsIGxhbmd1YWdlLCBtYXBEaXJlY3RpdmUsIG1vZHVsZSwgcmVzb3VyY2VzLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pKVxufVxuIl19
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQzdELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUMvRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUVyRSxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFBO0FBQ3hFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHNCQUFzQixDQUFBO0FBQy9ELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDJCQUEy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QyxVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLE1BQU0sRUFBRSx1RUFBdUU7b0JBQy9FLGNBQWMsRUFBRSxFQUFFO2lCQUNuQjtnQkFDRCxJQUFJLEVBQUUsU0FBUzthQUNoQixDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQztZQUMxQixTQUFTO1lBQ1QsR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFFLHNCQUFzQixFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtJQUM5RSxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFbEYsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRixFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUE7QUFDOUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlU291cmNlfSBmcm9tIFwiLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7cGFyc2VQcm9ncmFtU291cmNlfSBmcm9tIFwiLi9zcmMvZnJvbnRlbmRzL3Byb2dyYW0uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUFydGlmYWN0U291cmNlLCBnZW5lcmF0ZVNvdXJjZX0gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVQcm9ncmFtQXJ0aWZhY3RzfSBmcm9tIFwiLi9zcmMvYmFja2VuZHMvcHJvZ3JhbS5qc1wiXG5pbXBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0IGFzIGNvbnN0cnVjdEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCB1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuL3NyYy9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4vc3JjL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7a290bGluQXJ0aWZhY3RNZXRhZGF0YX0gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2tvdGxpbi5qc1wiXG5pbXBvcnQge3ByZWZsaWdodEVmZmVjdENhcGFiaWxpdGllc30gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2VmZmVjdHMuanNcIlxuXG5jb25zdCBhcnRpZmFjdEJhY2tlbmRSb2xlcyA9IG5ldyBTZXQoW1widGV4dFwiLCBcImJpbmFyeVwiLCBcImFwcGxpY2F0aW9uXCJdKVxuXG5leHBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpY31cbmV4cG9ydCB7Y3JlYXRlQ2FwYWJpbGl0eUF1dGhvcml0eX0gZnJvbSBcIi4vc3JjL3NlbWFudGljL2NhcGFiaWxpdGllcy5qc1wiXG5leHBvcnQge2xhbmd1YWdlQ2FwYWJpbGl0aWVzLCBzdXBwb3J0ZWRMYW5ndWFnZXN9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5leHBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmV4cG9ydCB7R2VuZXJhdGVkQXJ0aWZhY3RQdWJsaXNoZXJ9IGZyb20gXCIuL3NyYy9wdWJsaWNhdGlvbi5qc1wiXG5leHBvcnQge1Byb2plY3RNYW5pZmVzdExvYWRlciwgU2VtYW50aWZvbGRQcm9qZWN0fSBmcm9tIFwiLi9zcmMvcHJvamVjdC1tYW5pZmVzdC5qc1wiXG5leHBvcnQge1Byb2plY3RTbmFwc2hvdCwgUHJvamVjdFNuYXBzaG90QnVpbGRlcn0gZnJvbSBcIi4vc3JjL3Byb2plY3Qtc25hcHNob3QuanNcIlxuZXhwb3J0IHtQcm9qZWN0QnVpbGRlcn0gZnJvbSBcIi4vc3JjL3Byb2plY3QtYnVpbGQuanNcIlxuZXhwb3J0IHtwYXJzZVNlbWFudGlmb2xkQ2xpQXJndW1lbnRzLCBTZW1hbnRpZm9sZENsaX0gZnJvbSBcIi4vc3JjL3Byb2plY3QtY2xpLmpzXCJcbmV4cG9ydCB7UHJvamVjdEJ1aWxkUmVwb3J0ZXJ9IGZyb20gXCIuL3NyYy9wcm9qZWN0LXJlcG9ydGVyLmpzXCJcbmV4cG9ydCB7UHJvamVjdFdhdGNoQ29vcmRpbmF0b3J9IGZyb20gXCIuL3NyYy9wcm9qZWN0LXdhdGNoLmpzXCJcbmV4cG9ydCB7UHJvamVjdFdhdGNoUmVwb3J0ZXJ9IGZyb20gXCIuL3NyYy9wcm9qZWN0LXdhdGNoLXJlcG9ydGVyLmpzXCJcbmV4cG9ydCB7Y3JlYXRlVGFyZ2V0Q2hlY2tQbGFuLCBUYXJnZXRDaGVja1J1bm5lcn0gZnJvbSBcIi4vc3JjL3RhcmdldC1jaGVjay5qc1wiXG5leHBvcnQge2NyZWF0ZVN0ZGxpYkNvbnRyYWN0UmVnaXN0cnksIGxpc3RTdGRsaWJNb2R1bGVzLCByZXNvbHZlU3RkbGliTW9kdWxlfSBmcm9tIFwiLi9zcmMvc2VtYW50aWMvc3RkbGliLmpzXCJcbmV4cG9ydCB7Y3JlYXRlU3RkbGliUHJvdmlkZXJSZWdpc3RyeSwgbGlzdFN0ZGxpYlByb3ZpZGVyc30gZnJvbSBcIi4vc3JjL3N0ZGxpYi1wcm92aWRlcnMuanNcIlxuZXhwb3J0IHtuZWdvdGlhdGVTdGRsaWJQcm92aWRlcnN9IGZyb20gXCIuL3NyYy9zdGRsaWItbmVnb3RpYXRpb24uanNcIlxuZXhwb3J0IHtjcmVhdGVTdGRsaWJGYWNhZGVSZWdpc3RyeSwgbGlzdFN0ZGxpYkZhY2FkZXMsIHJlc29sdmVTdGRsaWJGYWNhZGV9IGZyb20gXCIuL3NyYy9zdGRsaWItZmFjYWRlcy5qc1wiXG5leHBvcnQge2NyZWF0ZUJ5dGVNYXBwaW5nLCBwYXJzZUJ5dGVNYXBwaW5nLCBzdHJpbmdpZnlCeXRlTWFwcGluZ30gZnJvbSBcIi4vc3JjL2JpbmFyeS1tYXBwaW5nLmpzXCJcbmV4cG9ydCB7Y2Fub25pY2FsVG9vbGNoYWlucywgZGlzY292ZXJDYW5vbmljYWxUb29sY2hhaW4sIGRpc2NvdmVyVG9vbGNoYWlufSBmcm9tIFwiLi9zcmMvdG9vbGNoYWlucy5qc1wiXG5leHBvcnQge3J1bkFjY2VwdGFuY2VTdGFnZXN9IGZyb20gXCIuL3NyYy9hY2NlcHRhbmNlLmpzXCJcbmV4cG9ydCB7Z2V0Tm9kZVByb3ZlbmFuY2UsIGdldFN5bWJvbFByb3ZlbmFuY2V9IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7cHJpbWFyeUxvY2F0aW9ufSBmcm9tIFwiLi9zcmMvc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5leHBvcnQge1xuICBjb21wb3NlTWFwcGluZ3MsXG4gIGNvbXBvc2VTb3VyY2VNYXBzLFxuICBnZW5lcmF0ZWRQb3NpdGlvbkZvcixcbiAgbWFwcGluZ0Zyb21Tb3VyY2VNYXAsXG4gIG9yaWdpbmFsUG9zaXRpb25Gb3IsXG4gIHBhcnNlTWFwcGluZyxcbiAgcmVtYXBEaWFnbm9zdGljLFxuICByZW1hcExvY2F0aW9uLFxuICBzcGFuc0Zvck5vZGUsXG4gIHNwYW5zRm9yU3ltYm9sLFxuICBzdHJpbmdpZnlNYXBwaW5nLFxuICB0b1NvdXJjZU1hcFYzXG59IGZyb20gXCIuL3NyYy9tYXBwaW5nLmpzXCJcblxuLyoqXG4gKiBQYXJzZXMgc291cmNlIGludG8gU2VtYW50aWZvbGQncyBzaGFyZWQgc2VtYW50aWMgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZSByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lIHVzZWQgaW4gZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXBhYmlsaXR5QXV0aG9yaXR5PiB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhcGFiaWxpdHlBdXRob3JpdHlJbnB1dH0gW2lucHV0LmNhcGFiaWxpdHlBdXRob3JpdHldIC0gRXhwbGljaXQgY29tcGlsZXIgYXV0aG9yaXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICByZXR1cm4gcGFyc2VTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogUGFyc2VzIGEgY29tcGxldGUgZXhwbGljaXQgbXVsdGktc291cmNlIHByb2plY3QgaW50byBvbmUgcmVzb2x2ZWQgc2VtYW50aWMgcHJvZ3JhbS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFByb2dyYW0gcGFyc2UgcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5lbnRyeU1vZHVsZSAtIFN0YWJsZSBpZGVudGl0eSBvZiB0aGUgc29sZSBlbnRyeSBtb2R1bGUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBpZDogc3RyaW5nLCBsYW5ndWFnZTogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZSwgc291cmNlOiBzdHJpbmd9W119IGlucHV0LnNvdXJjZXMgLSBDb21wbGV0ZSBjYWxsZXItc3VwcGxpZWQgc291cmNlIHNldC5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQ2FwYWJpbGl0eUF1dGhvcml0eT4gfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXBhYmlsaXR5QXV0aG9yaXR5SW5wdXR9IFtpbnB1dC5jYXBhYmlsaXR5QXV0aG9yaXR5XSAtIEV4cGxpY2l0IGNvbXBpbGVyIGF1dGhvcml0eSBzaGFyZWQgYnkgZXZlcnkgcHJvZ3JhbSBtb2R1bGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBTZW1hbnRpYyBwcm9ncmFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKGlucHV0KSB7XG4gIHJldHVybiBwYXJzZVByb2dyYW1Tb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRhcmdldC1sYW5ndWFnZSBzb3VyY2UgZnJvbSBhIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge3N0cmluZ30gR2VuZXJhdGVkIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByZXVzYWJsZSBvdXRwdXQgYXJ0aWZhY3Qgd2l0aCByaWNoIGFuZCBTb3VyY2UgTWFwIHYzIG1hcHBpbmdzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gR2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IGlucHV0Lm1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gT3V0cHV0IGZpbGVuYW1lLlxuICogQHBhcmFtIHtcIm5vbmVcIiB8IFwiZXh0ZXJuYWxcIiB8IFwiaW5saW5lXCJ9IFtpbnB1dC5tYXBEaXJlY3RpdmVdIC0gSmF2YVNjcmlwdC1mYW1pbHkgbWFwIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuc291cmNlTWFwRmlsZW5hbWVdIC0gRXh0ZXJuYWwgbWFwIGZpbGVuYW1lLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtpbnB1dC5zb3VyY2VzXSAtIFNvdXJjZXMgZm9yIGNhbGxlci1hdXRob3JlZCBtb2R1bGVzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0fSBHZW5lcmF0ZWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0KGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGRldGVybWluaXN0aWMgbWFwcGVkIGFydGlmYWN0IHNldCBmb3IgYSBjb21wbGV0ZSBzZW1hbnRpYyBwcm9ncmFtLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUHJvZ3JhbSBnZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBSZWdpc3RlcmVkIHByb2dyYW0gdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IGlucHV0LnByb2dyYW0gLSBDb21wbGV0ZSByZXNvbHZlZCBwcm9ncmFtLlxuICogQHBhcmFtIHtcInRleHRcIiB8IFwiYXBwbGljYXRpb25cIn0gW2lucHV0LnJvbGVdIC0gRXhwbGljaXQgcm9sZTsgb21pdHRlZCBwcmVzZXJ2ZXMgdGV4dCBnZW5lcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkFuZHJvaWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkZsdXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dH0gW2lucHV0LmNvbmZpZ3VyYXRpb25dIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Bc3NldElucHV0W10gfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25JbnB1dEZpbGVbXSB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkZsdXR0ZXJBcHBsaWNhdGlvbkFzc2V0SW5wdXRbXX0gW2lucHV0LmFzc2V0c10gLSBFeGFjdCBjYWxsZXIgYXNzZXRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25JbnB1dEZpbGVbXX0gW2lucHV0LnJlc291cmNlc10gLSBFeGFjdCBBbmRyb2lkIGNhbGxlciByZXNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXR9IENvbXBsZXRlIGdlbmVyYXRlZCBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVByb2dyYW1BcnRpZmFjdFNldChpbnB1dCkge1xuICByZXR1cm4gZ2VuZXJhdGVQcm9ncmFtQXJ0aWZhY3RzKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGRldGVybWluaXN0aWMgYXJ0aWZhY3Qgc2V0IGZvciBvbmUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFJlZ2lzdGVyZWQgdGFyZ2V0IGxhbmd1YWdlIG9yIHBsYXRmb3JtIElELlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtcInRleHRcIiB8IFwiYmluYXJ5XCIgfCBcImFwcGxpY2F0aW9uXCJ9IFtpbnB1dC5yb2xlXSAtIFJlcXVlc3RlZCBiYWNrZW5kIGFydGlmYWN0IHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmZpbGVuYW1lXSAtIFNhZmUgb3V0cHV0IHBhdGggZm9yIGEgdGV4dCB0YXJnZXQuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gT3JpZ2luYWwgc291cmNlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9uSW5wdXQgfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25Db25maWd1cmF0aW9uSW5wdXQgfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5GbHV0dGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uSW5wdXR9IFtpbnB1dC5jb25maWd1cmF0aW9uXSAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQXNzZXRJbnB1dFtdIHwgaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQW5kcm9pZEFwcGxpY2F0aW9uSW5wdXRGaWxlW10gfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5GbHV0dGVyQXBwbGljYXRpb25Bc3NldElucHV0W119IFtpbnB1dC5hc3NldHNdIC0gRXhhY3QgY2FsbGVyIGFzc2V0cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQW5kcm9pZEFwcGxpY2F0aW9uSW5wdXRGaWxlW119IFtpbnB1dC5yZXNvdXJjZXNdIC0gRXhhY3QgQW5kcm9pZCBjYWxsZXIgcmVzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBDb21wbGV0ZSBnZW5lcmF0ZWQgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBcnRpZmFjdFNldChpbnB1dCkge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dCkgIT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiYXJ0aWZhY3RcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWlyZXMgYSByZXF1ZXN0IG9iamVjdC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3Qge2Fzc2V0cywgY29uZmlndXJhdGlvbiwgZmlsZW5hbWUsIGxhbmd1YWdlLCBtYXBEaXJlY3RpdmUsIG1vZHVsZSwgcmVzb3VyY2VzLCByb2xlID0gXCJ0ZXh0XCIsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSA9IGlucHV0XG5cbiAgaWYgKHR5cGVvZiBsYW5ndWFnZSAhPSBcInN0cmluZ1wiIHx8IGxhbmd1YWdlLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZTogXCJhcnRpZmFjdFwiLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgbGFuZ3VhZ2Ugb3IgdGFyZ2V0IElELlwiXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RCYWNrZW5kUm9sZXMuaGFzKHJvbGUpKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3QgYmFja2VuZCByb2xlIG11c3QgYmUgJ3RleHQnLCAnYmluYXJ5Jywgb3IgJ2FwcGxpY2F0aW9uJy5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgdGFyZ2V0ID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQobGFuZ3VhZ2UpXG4gIHByZWZsaWdodEVmZmVjdENhcGFiaWxpdGllcyhtb2R1bGUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyAobGFuZ3VhZ2UpKVxuICBjb25zdCBnZW5lcmljRGVjbGFyYXRpb24gPSBbLi4ubW9kdWxlPy5yZWNvcmRzID8/IFtdLCAuLi5tb2R1bGU/LmZ1bmN0aW9ucyA/PyBbXV1cbiAgICAuZmluZCgoZGVjbGFyYXRpb24pID0+IChkZWNsYXJhdGlvbj8udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDApXG5cbiAgaWYgKGdlbmVyaWNEZWNsYXJhdGlvbiAmJiAhdGFyZ2V0LmZlYXR1cmVzLnR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3MpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDEyIHR5cGUgcGFyYW1ldGVycyBhbmQgZ2VuZXJpY3NcIiwgZ2VuZXJpY0RlY2xhcmF0aW9uLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZT8ucmVjb3JkcykgJiYgbW9kdWxlLnJlY29yZHMubGVuZ3RoID4gMCAmJiAhdGFyZ2V0LmZlYXR1cmVzLmNsb3NlZFJlY29yZHMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIG1vZHVsZS5yZWNvcmRzWzBdLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZT8uY2xhc3NlcykgJiYgbW9kdWxlLmNsYXNzZXMubGVuZ3RoID4gMCAmJiAhdGFyZ2V0LmZlYXR1cmVzLnJlZmVyZW5jZUNsYXNzZXMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDMzIHJlZmVyZW5jZSBjbGFzc2VzXCIsIG1vZHVsZS5jbGFzc2VzWzBdLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAocm9sZSA9PSBcInRleHRcIikge1xuICAgIGlmICh0YXJnZXQuYXJ0aWZhY3RNdWx0aXBsaWNpdHkgPT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCBcInRleHRCYWNrZW5kXCIsIG1vZHVsZT8ubG9jYXRpb24pXG5cbiAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldChiYWNrZW5kKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pKVxuICAgIH1cbiAgICBjb25zdCBhcnRpZmFjdCA9IGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2Uoe1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBsYW5ndWFnZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSAqLyAobGFuZ3VhZ2UpLFxuICAgICAgbWFwRGlyZWN0aXZlLFxuICAgICAgbW9kdWxlLFxuICAgICAgc291cmNlTWFwRmlsZW5hbWUsXG4gICAgICBzb3VyY2VzXG4gICAgfSlcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gKi9cbiAgICBjb25zdCBhcnRpZmFjdHMgPSBbe1xuICAgICAgY29udGVudDogYXJ0aWZhY3QuY29kZSxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0YXJnZXQubWVkaWFUeXBlKSxcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IGFydGlmYWN0LmZpbGVuYW1lLFxuICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICBraW5kOiBcInRleHRcIixcbiAgICAgICAgbWFwcGluZzogYXJ0aWZhY3QubWFwcGluZyxcbiAgICAgICAgc291cmNlTWFwOiBhcnRpZmFjdC5zb3VyY2VNYXAsXG4gICAgICAgIHNvdXJjZU1hcEZpbGVuYW1lOiBhcnRpZmFjdC5zb3VyY2VNYXBGaWxlbmFtZVxuICAgICAgfSxcbiAgICAgIHJvbGU6IFwiZW50cnlcIlxuICAgIH1dXG5cbiAgICBpZiAobWFwRGlyZWN0aXZlID09IFwiZXh0ZXJuYWxcIikge1xuICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICBjb250ZW50OiBgJHtKU09OLnN0cmluZ2lmeShhcnRpZmFjdC5zb3VyY2VNYXApfVxcbmAsXG4gICAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICBwYXRoOiBhcnRpZmFjdC5zb3VyY2VNYXBGaWxlbmFtZSxcbiAgICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICAgIGtpbmQ6IFwic3ludGhldGljXCIsXG4gICAgICAgICAgcmVhc29uOiBcIlNlcmlhbGl6ZWQgU291cmNlIE1hcCB2MyBwcm9qZWN0aW9uIGZvciB0aGUgZ2VuZXJhdGVkIGVudHJ5IGFydGlmYWN0LlwiLFxuICAgICAgICAgIHJlbGF0ZWRPcmlnaW5zOiBbXVxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBcIm1hcHBpbmdcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RydWN0QXJ0aWZhY3RTZXQoe1xuICAgICAgYXJ0aWZhY3RzLFxuICAgICAgLi4uKGxhbmd1YWdlID09IFwia290bGluXCIgPyB7bWV0YWRhdGE6IGtvdGxpbkFydGlmYWN0TWV0YWRhdGF9IDoge30pLFxuICAgICAgdGFyZ2V0OiBsYW5ndWFnZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCByZWdpc3RyeVJvbGUgPSByb2xlID09IFwiYmluYXJ5XCIgPyBcImJpbmFyeUJhY2tlbmRcIiA6IFwiYXBwbGljYXRpb25CYWNrZW5kXCJcbiAgY29uc3QgYmFja2VuZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShsYW5ndWFnZSwgcmVnaXN0cnlSb2xlLCBtb2R1bGU/LmxvY2F0aW9uKVxuXG4gIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldChiYWNrZW5kKGxhbmd1YWdlID09IFwiYW5kcm9pZFwiIHx8IGxhbmd1YWdlID09IFwiZmx1dHRlclwiID8gaW5wdXQgOlxuICAgIHthc3NldHMsIGNvbmZpZ3VyYXRpb24sIGZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHJlc291cmNlcywgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9KSlcbn1cbiJdfQ==
@@ -22,6 +22,12 @@ export declare function isSafeArtifactPath(value: unknown): value is string;
22
22
  * @returns {string} Complete ASCII case-fold key.
23
23
  */
24
24
  export declare function portableArtifactPathKey(value: string): string;
25
+ /**
26
+ * Produces a deterministic case-fold comparison key for a validated source path.
27
+ * @param {string} value - Safe relative POSIX source path.
28
+ * @returns {string} Unicode case-fold comparison key.
29
+ */
30
+ export declare function portableSourcePathKey(value: string): string;
25
31
  /**
26
32
  * Finds the first unsafe, duplicate, portable case-fold, or file/directory-prefix conflict.
27
33
  * @param {readonly string[]} paths - Ordered candidate artifact paths.
@@ -32,4 +38,14 @@ export declare function findPortableArtifactPathConflict(paths: readonly string[
32
38
  path: string;
33
39
  other?: string;
34
40
  } | null;
41
+ /**
42
+ * Finds the first unsafe, duplicate, portable case-fold, or file/directory-prefix source conflict.
43
+ * @param {readonly string[]} paths - Ordered candidate source paths.
44
+ * @returns {{kind: "case-fold" | "duplicate" | "prefix" | "unsafe", path: string, other?: string} | null} First conflict.
45
+ */
46
+ export declare function findPortableSourcePathConflict(paths: readonly string[]): {
47
+ kind: "case-fold" | "duplicate" | "prefix" | "unsafe";
48
+ path: string;
49
+ other?: string;
50
+ } | null;
35
51
  //# sourceMappingURL=artifact-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-path.d.ts","sourceRoot":"","sources":["../../src/artifact-path.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAHlC,OAGkC,GAFhC,KAAK,IAAI,MAAM,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAH3B,OAG2B,GAFzB,KAAK,IAAI,MAAM,CAe3B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAH7B,OAG6B,GAF3B,KAAK,IAAI,MAAM,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAHlC,MAGkC,GAFhC,MAAM,CAIlB;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAH3C,SAAS,MAAM,EAG4B,GAFzC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAqBxG"}
1
+ {"version":3,"file":"artifact-path.d.ts","sourceRoot":"","sources":["../../src/artifact-path.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAHlC,OAGkC,GAFhC,KAAK,IAAI,MAAM,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAH3B,OAG2B,GAFzB,KAAK,IAAI,MAAM,CAe3B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAH7B,OAG6B,GAF3B,KAAK,IAAI,MAAM,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAHlC,MAGkC,GAFhC,MAAM,CAIlB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAHhC,MAGgC,GAF9B,MAAM,CAIlB;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAH3C,SAAS,MAAM,EAG4B,GAFzC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAIxG;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAHzC,SAAS,MAAM,EAG0B,GAFvC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAIxG"}
@@ -44,18 +44,44 @@ export function isSafeArtifactPath(value) {
44
44
  export function portableArtifactPathKey(value) {
45
45
  return value.toLowerCase();
46
46
  }
47
+ /**
48
+ * Produces a deterministic case-fold comparison key for a validated source path.
49
+ * @param {string} value - Safe relative POSIX source path.
50
+ * @returns {string} Unicode case-fold comparison key.
51
+ */
52
+ export function portableSourcePathKey(value) {
53
+ return value.toLowerCase();
54
+ }
47
55
  /**
48
56
  * Finds the first unsafe, duplicate, portable case-fold, or file/directory-prefix conflict.
49
57
  * @param {readonly string[]} paths - Ordered candidate artifact paths.
50
58
  * @returns {{kind: "case-fold" | "duplicate" | "prefix" | "unsafe", path: string, other?: string} | null} First conflict.
51
59
  */
52
60
  export function findPortableArtifactPathConflict(paths) {
61
+ return findPortablePathConflict(paths, isSafeArtifactPath, portableArtifactPathKey);
62
+ }
63
+ /**
64
+ * Finds the first unsafe, duplicate, portable case-fold, or file/directory-prefix source conflict.
65
+ * @param {readonly string[]} paths - Ordered candidate source paths.
66
+ * @returns {{kind: "case-fold" | "duplicate" | "prefix" | "unsafe", path: string, other?: string} | null} First conflict.
67
+ */
68
+ export function findPortableSourcePathConflict(paths) {
69
+ return findPortablePathConflict(paths, isSafeSourcePath, portableSourcePathKey);
70
+ }
71
+ /**
72
+ * Compares paths inside one explicitly selected validation domain.
73
+ * @param {readonly string[]} paths - Ordered candidate paths.
74
+ * @param {(value: unknown) => boolean} isSafe - Domain-specific path validator.
75
+ * @param {(value: string) => string} comparisonKey - Domain-specific portable comparison key.
76
+ * @returns {{kind: "case-fold" | "duplicate" | "prefix" | "unsafe", path: string, other?: string} | null} First conflict.
77
+ */
78
+ function findPortablePathConflict(paths, isSafe, comparisonKey) {
53
79
  /** @type {{key: string, path: string}[]} */
54
80
  const accepted = [];
55
81
  for (const path of paths) {
56
- if (!isSafeArtifactPath(path))
82
+ if (!isSafe(path))
57
83
  return { kind: "unsafe", path: String(path) };
58
- const key = portableArtifactPathKey(path);
84
+ const key = comparisonKey(path);
59
85
  for (const previous of accepted) {
60
86
  if (path == previous.path)
61
87
  return { kind: "duplicate", other: previous.path, path };
@@ -69,4 +95,4 @@ export function findPortableArtifactPathConflict(paths) {
69
95
  }
70
96
  return null;
71
97
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3QtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcnRpZmFjdC1wYXRoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFBO0FBQ25ELE1BQU0sZ0NBQWdDLEdBQUcsb0JBQW9CLENBQUE7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxLQUFLO0lBQzNDLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzNGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQUs7SUFDcEMsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMvRixDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzdDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXBFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFOUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJO1FBQ3pFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUM1QixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRTFDLE9BQU8sU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsSUFBSSxHQUFHLENBQUE7UUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQUs7SUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQy9HLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEtBQUs7SUFDM0MsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDNUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsS0FBSztJQUNwRCw0Q0FBNEM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBRW5CLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQTtRQUMxRSxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV6QyxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFBO1lBQ2pGLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHO2dCQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFBO1lBQy9FLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3RSxPQUFPLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQTtZQUNyRCxDQUFDO1FBQ0gsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzfSBmcm9tIFwiLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcblxuY29uc3QgbGluZVRlcm1pbmF0b3JQYXR0ZXJuID0gL1tcXG5cXHJcXHUyMDI4XFx1MjAyOV0vdVxuY29uc3QgcG9ydGFibGVBcnRpZmFjdENvbXBvbmVudFBhdHRlcm4gPSAvXltBLVphLXowLTkuXy1dKyQvdVxuXG4vKipcbiAqIFZhbGlkYXRlcyBmaWxlbmFtZSBtZXRhZGF0YSB3aXRob3V0IGltcG9zaW5nIGFydGlmYWN0LXNldCBwYXRoIHNlbWFudGljcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgc3RyaW5nfSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBzaW5nbGUtbGluZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiAhbGluZVRlcm1pbmF0b3JQYXR0ZXJuLnRlc3QodmFsdWUpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgc2FmZSByZWxhdGl2ZSBQT1NJWCBzb3VyY2UgcGF0aCB3aGlsZSByZXRhaW5pbmcgVW5pY29kZSBmaWxlbmFtZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgcGF0aC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBzdHJpbmd9IFdoZXRoZXIgdGhlIHZhbHVlIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVTb3VyY2VQYXRoKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCB8fCB2YWx1ZS5pbmNsdWRlcyhcIlxcXFxcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJcXDBcIikgfHxcbiAgICAhaGFzT25seVVuaWNvZGVTY2FsYXJzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiL1wiKSB8fCAvXltBLVphLXpdOi91LnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KFwiL1wiKVxuXG4gIHJldHVybiBwYXJ0cy5ldmVyeSgocGFydCkgPT4gcGFydC5sZW5ndGggPiAwICYmIHBhcnQgIT0gXCIuXCIgJiYgcGFydCAhPSBcIi4uXCIgJiZcbiAgICBbLi4ucGFydF0uZXZlcnkoKGNoYXJhY3RlcikgPT4ge1xuICAgICAgY29uc3QgY29kZVBvaW50ID0gY2hhcmFjdGVyLmNvZGVQb2ludEF0KDApXG5cbiAgICAgIHJldHVybiBjb2RlUG9pbnQgIT0gdW5kZWZpbmVkICYmIGNvZGVQb2ludCA+IDMxICYmIGNvZGVQb2ludCAhPSAxMjdcbiAgICB9KSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzYWZlIHBvcnRhYmxlIGFydGlmYWN0L3Jlc291cmNlIHBhdGggaW4gdGhlIGNsb3NlZCBBU0NJSSBjb21wYXJpc29uIGRvbWFpbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgcGF0aC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBzdHJpbmd9IFdoZXRoZXIgdGhlIHZhbHVlIGlzIHNhZmUgYW5kIHBvcnRhYmx5IGNvbXBhcmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVBcnRpZmFjdFBhdGgodmFsdWUpIHtcbiAgcmV0dXJuIGlzU2FmZVNvdXJjZVBhdGgodmFsdWUpICYmIHZhbHVlLnNwbGl0KFwiL1wiKS5ldmVyeShwYXJ0ID0+IHBvcnRhYmxlQXJ0aWZhY3RDb21wb25lbnRQYXR0ZXJuLnRlc3QocGFydCkpXG59XG5cbi8qKlxuICogUHJvZHVjZXMgYSBjb25zZXJ2YXRpdmUgcG9ydGFibGUgY29tcGFyaXNvbiBrZXkgZm9yIGEgdmFsaWRhdGVkIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBTYWZlIHJlbGF0aXZlIFBPU0lYIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb21wbGV0ZSBBU0NJSSBjYXNlLWZvbGQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9ydGFibGVBcnRpZmFjdFBhdGhLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgdW5zYWZlLCBkdXBsaWNhdGUsIHBvcnRhYmxlIGNhc2UtZm9sZCwgb3IgZmlsZS9kaXJlY3RvcnktcHJlZml4IGNvbmZsaWN0LlxuICogQHBhcmFtIHtyZWFkb25seSBzdHJpbmdbXX0gcGF0aHMgLSBPcmRlcmVkIGNhbmRpZGF0ZSBhcnRpZmFjdCBwYXRocy5cbiAqIEByZXR1cm5zIHt7a2luZDogXCJjYXNlLWZvbGRcIiB8IFwiZHVwbGljYXRlXCIgfCBcInByZWZpeFwiIHwgXCJ1bnNhZmVcIiwgcGF0aDogc3RyaW5nLCBvdGhlcj86IHN0cmluZ30gfCBudWxsfSBGaXJzdCBjb25mbGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3J0YWJsZUFydGlmYWN0UGF0aENvbmZsaWN0KHBhdGhzKSB7XG4gIC8qKiBAdHlwZSB7e2tleTogc3RyaW5nLCBwYXRoOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IGFjY2VwdGVkID0gW11cblxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBpZiAoIWlzU2FmZUFydGlmYWN0UGF0aChwYXRoKSkgcmV0dXJuIHtraW5kOiBcInVuc2FmZVwiLCBwYXRoOiBTdHJpbmcocGF0aCl9XG4gICAgY29uc3Qga2V5ID0gcG9ydGFibGVBcnRpZmFjdFBhdGhLZXkocGF0aClcblxuICAgIGZvciAoY29uc3QgcHJldmlvdXMgb2YgYWNjZXB0ZWQpIHtcbiAgICAgIGlmIChwYXRoID09IHByZXZpb3VzLnBhdGgpIHJldHVybiB7a2luZDogXCJkdXBsaWNhdGVcIiwgb3RoZXI6IHByZXZpb3VzLnBhdGgsIHBhdGh9XG4gICAgICBpZiAoa2V5ID09IHByZXZpb3VzLmtleSkgcmV0dXJuIHtraW5kOiBcImNhc2UtZm9sZFwiLCBvdGhlcjogcHJldmlvdXMucGF0aCwgcGF0aH1cbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChgJHtwcmV2aW91cy5rZXl9L2ApIHx8IHByZXZpb3VzLmtleS5zdGFydHNXaXRoKGAke2tleX0vYCkpIHtcbiAgICAgICAgcmV0dXJuIHtraW5kOiBcInByZWZpeFwiLCBvdGhlcjogcHJldmlvdXMucGF0aCwgcGF0aH1cbiAgICAgIH1cbiAgICB9XG4gICAgYWNjZXB0ZWQucHVzaCh7a2V5LCBwYXRofSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3QtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcnRpZmFjdC1wYXRoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFBO0FBQ25ELE1BQU0sZ0NBQWdDLEdBQUcsb0JBQW9CLENBQUE7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxLQUFLO0lBQzNDLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzNGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQUs7SUFDcEMsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMvRixDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzdDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXBFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFOUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUks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aW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuL3NlbWFudGljL3NjYWxhcnMuanNcIlxuXG5jb25zdCBsaW5lVGVybWluYXRvclBhdHRlcm4gPSAvW1xcblxcclxcdTIwMjhcXHUyMDI5XS91XG5jb25zdCBwb3J0YWJsZUFydGlmYWN0Q29tcG9uZW50UGF0dGVybiA9IC9eW0EtWmEtejAtOS5fLV0rJC91XG5cbi8qKlxuICogVmFsaWRhdGVzIGZpbGVuYW1lIG1ldGFkYXRhIHdpdGhvdXQgaW1wb3NpbmcgYXJ0aWZhY3Qtc2V0IHBhdGggc2VtYW50aWNzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBmaWxlbmFtZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBzdHJpbmd9IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgbm9uLWVtcHR5IHNpbmdsZS1saW5lIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwICYmICFsaW5lVGVybWluYXRvclBhdHRlcm4udGVzdCh2YWx1ZSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzYWZlIHJlbGF0aXZlIFBPU0lYIHNvdXJjZSBwYXRoIHdoaWxlIHJldGFpbmluZyBVbmljb2RlIGZpbGVuYW1lIG1ldGFkYXRhLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBwYXRoLlxuICogQHJldHVybnMge3ZhbHVlIGlzIHN0cmluZ30gV2hldGhlciB0aGUgdmFsdWUgaXMgc2FmZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZVNvdXJjZVBhdGgodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA9PSAwIHx8IHZhbHVlLmluY2x1ZGVzKFwiXFxcXFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcIlxcMFwiKSB8fFxuICAgICFoYXNPbmx5VW5pY29kZVNjYWxhcnModmFsdWUpKSByZXR1cm4gZmFsc2VcbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIvXCIpIHx8IC9eW0EtWmEtel06L3UudGVzdCh2YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoXCIvXCIpXG5cbiAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiBwYXJ0Lmxlbmd0aCA+IDAgJiYgcGFydCAhPSBcIi5cIiAmJiBwYXJ0ICE9IFwiLi5cIiAmJlxuICAgIFsuLi5wYXJ0XS5ldmVyeSgoY2hhcmFjdGVyKSA9PiB7XG4gICAgICBjb25zdCBjb2RlUG9pbnQgPSBjaGFyYWN0ZXIuY29kZVBvaW50QXQoMClcblxuICAgICAgcmV0dXJuIGNvZGVQb2ludCAhPSB1bmRlZmluZWQgJiYgY29kZVBvaW50ID4gMzEgJiYgY29kZVBvaW50ICE9IDEyN1xuICAgIH0pKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIHNhZmUgcG9ydGFibGUgYXJ0aWZhY3QvcmVzb3VyY2UgcGF0aCBpbiB0aGUgY2xvc2VkIEFTQ0lJIGNvbXBhcmlzb24gZG9tYWluLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBwYXRoLlxuICogQHJldHVybnMge3ZhbHVlIGlzIHN0cmluZ30gV2hldGhlciB0aGUgdmFsdWUgaXMgc2FmZSBhbmQgcG9ydGFibHkgY29tcGFyYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZUFydGlmYWN0UGF0aCh2YWx1ZSkge1xuICByZXR1cm4gaXNTYWZlU291cmNlUGF0aCh2YWx1ZSkgJiYgdmFsdWUuc3BsaXQoXCIvXCIpLmV2ZXJ5KHBhcnQgPT4gcG9ydGFibGVBcnRpZmFjdENvbXBvbmVudFBhdHRlcm4udGVzdChwYXJ0KSlcbn1cblxuLyoqXG4gKiBQcm9kdWNlcyBhIGNvbnNlcnZhdGl2ZSBwb3J0YWJsZSBjb21wYXJpc29uIGtleSBmb3IgYSB2YWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFNhZmUgcmVsYXRpdmUgUE9TSVggcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbXBsZXRlIEFTQ0lJIGNhc2UtZm9sZCBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3J0YWJsZUFydGlmYWN0UGF0aEtleSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFByb2R1Y2VzIGEgZGV0ZXJtaW5pc3RpYyBjYXNlLWZvbGQgY29tcGFyaXNvbiBrZXkgZm9yIGEgdmFsaWRhdGVkIHNvdXJjZSBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gU2FmZSByZWxhdGl2ZSBQT1NJWCBzb3VyY2UgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaWNvZGUgY2FzZS1mb2xkIGNvbXBhcmlzb24ga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9ydGFibGVTb3VyY2VQYXRoS2V5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHVuc2FmZSwgZHVwbGljYXRlLCBwb3J0YWJsZSBjYXNlLWZvbGQsIG9yIGZpbGUvZGlyZWN0b3J5LXByZWZpeCBjb25mbGljdC5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgc3RyaW5nW119IHBhdGhzIC0gT3JkZXJlZCBjYW5kaWRhdGUgYXJ0aWZhY3QgcGF0aHMuXG4gKiBAcmV0dXJucyB7e2tpbmQ6IFwiY2FzZS1mb2xkXCIgfCBcImR1cGxpY2F0ZVwiIHwgXCJwcmVmaXhcIiB8IFwidW5zYWZlXCIsIHBhdGg6IHN0cmluZywgb3RoZXI/OiBzdHJpbmd9IHwgbnVsbH0gRmlyc3QgY29uZmxpY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9ydGFibGVBcnRpZmFjdFBhdGhDb25mbGljdChwYXRocykge1xuICByZXR1cm4gZmluZFBvcnRhYmxlUGF0aENvbmZsaWN0KHBhdGhzLCBpc1NhZmVBcnRpZmFjdFBhdGgsIHBvcnRhYmxlQXJ0aWZhY3RQYXRoS2V5KVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCB1bnNhZmUsIGR1cGxpY2F0ZSwgcG9ydGFibGUgY2FzZS1mb2xkLCBvciBmaWxlL2RpcmVjdG9yeS1wcmVmaXggc291cmNlIGNvbmZsaWN0LlxuICogQHBhcmFtIHtyZWFkb25seSBzdHJpbmdbXX0gcGF0aHMgLSBPcmRlcmVkIGNhbmRpZGF0ZSBzb3VyY2UgcGF0aHMuXG4gKiBAcmV0dXJucyB7e2tpbmQ6IFwiY2FzZS1mb2xkXCIgfCBcImR1cGxpY2F0ZVwiIHwgXCJwcmVmaXhcIiB8IFwidW5zYWZlXCIsIHBhdGg6IHN0cmluZywgb3RoZXI/OiBzdHJpbmd9IHwgbnVsbH0gRmlyc3QgY29uZmxpY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUG9ydGFibGVTb3VyY2VQYXRoQ29uZmxpY3QocGF0aHMpIHtcbiAgcmV0dXJuIGZpbmRQb3J0YWJsZVBhdGhDb25mbGljdChwYXRocywgaXNTYWZlU291cmNlUGF0aCwgcG9ydGFibGVTb3VyY2VQYXRoS2V5KVxufVxuXG4vKipcbiAqIENvbXBhcmVzIHBhdGhzIGluc2lkZSBvbmUgZXhwbGljaXRseSBzZWxlY3RlZCB2YWxpZGF0aW9uIGRvbWFpbi5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgc3RyaW5nW119IHBhdGhzIC0gT3JkZXJlZCBjYW5kaWRhdGUgcGF0aHMuXG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbn0gaXNTYWZlIC0gRG9tYWluLXNwZWNpZmljIHBhdGggdmFsaWRhdG9yLlxuICogQHBhcmFtIHsodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nfSBjb21wYXJpc29uS2V5IC0gRG9tYWluLXNwZWNpZmljIHBvcnRhYmxlIGNvbXBhcmlzb24ga2V5LlxuICogQHJldHVybnMge3traW5kOiBcImNhc2UtZm9sZFwiIHwgXCJkdXBsaWNhdGVcIiB8IFwicHJlZml4XCIgfCBcInVuc2FmZVwiLCBwYXRoOiBzdHJpbmcsIG90aGVyPzogc3RyaW5nfSB8IG51bGx9IEZpcnN0IGNvbmZsaWN0LlxuICovXG5mdW5jdGlvbiBmaW5kUG9ydGFibGVQYXRoQ29uZmxpY3QocGF0aHMsIGlzU2FmZSwgY29tcGFyaXNvbktleSkge1xuICAvKiogQHR5cGUge3trZXk6IHN0cmluZywgcGF0aDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCBhY2NlcHRlZCA9IFtdXG5cbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgaWYgKCFpc1NhZmUocGF0aCkpIHJldHVybiB7a2luZDogXCJ1bnNhZmVcIiwgcGF0aDogU3RyaW5nKHBhdGgpfVxuICAgIGNvbnN0IGtleSA9IGNvbXBhcmlzb25LZXkocGF0aClcblxuICAgIGZvciAoY29uc3QgcHJldmlvdXMgb2YgYWNjZXB0ZWQpIHtcbiAgICAgIGlmIChwYXRoID09IHByZXZpb3VzLnBhdGgpIHJldHVybiB7a2luZDogXCJkdXBsaWNhdGVcIiwgb3RoZXI6IHByZXZpb3VzLnBhdGgsIHBhdGh9XG4gICAgICBpZiAoa2V5ID09IHByZXZpb3VzLmtleSkgcmV0dXJuIHtraW5kOiBcImNhc2UtZm9sZFwiLCBvdGhlcjogcHJldmlvdXMucGF0aCwgcGF0aH1cbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChgJHtwcmV2aW91cy5rZXl9L2ApIHx8IHByZXZpb3VzLmtleS5zdGFydHNXaXRoKGAke2tleX0vYCkpIHtcbiAgICAgICAgcmV0dXJuIHtraW5kOiBcInByZWZpeFwiLCBvdGhlcjogcHJldmlvdXMucGF0aCwgcGF0aH1cbiAgICAgIH1cbiAgICB9XG4gICAgYWNjZXB0ZWQucHVzaCh7a2V5LCBwYXRofSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Constructs C's strict Clang C17 compile/link plan.
3
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
4
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable C plan.
5
+ */
6
+ export declare function createCCheckPlan(context: import("../language-registry.js").TargetCheckPlanContext): import("../semantic/types.js").TargetCheckPlan;
7
+ //# sourceMappingURL=c-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c-check.d.ts","sourceRoot":"","sources":["../../../src/backends/c-check.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAH7B,OAAO,yBAAyB,EAAE,sBAGL,GAF3B,OAAO,sBAAsB,EAAE,eAAe,CAuD1D"}
@@ -0,0 +1,65 @@
1
+ // @ts-check
2
+ import path from "node:path";
3
+ import { SemantifoldDiagnostic } from "../diagnostic.js";
4
+ import { checkArtifacts, checkOutput, checkPlan, checkStage, checkTool, environmentPath, pathArgument } from "./check-plan.js";
5
+ import { cRuntimeHeader } from "./c-runtime.js";
6
+ const compilerFlags = Object.freeze([
7
+ "--no-default-config", "-std=c17", "-Wall", "-Wextra", "-Werror", "-pedantic-errors", "-Wconversion",
8
+ "-Wsign-conversion", "-Wshadow", "-Wstrict-prototypes", "-Wmissing-prototypes", "-Wformat=2", "-ftrapv",
9
+ "-finput-charset=UTF-8", "-fexec-charset=UTF-8", "-fno-color-diagnostics", "-O0"
10
+ ]);
11
+ /**
12
+ * Constructs C's strict Clang C17 compile/link plan.
13
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
14
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable C plan.
15
+ */
16
+ export function createCCheckPlan(context) {
17
+ const tool = checkTool(context, "clang", "c");
18
+ const artifacts = checkArtifacts(context, artifact => artifact.path.endsWith(".c") || artifact.path.endsWith(".h"), "c", "only staged C translation units and headers");
19
+ const sources = artifacts.filter(artifact => artifact.endsWith(".c"));
20
+ const headers = artifacts.filter(artifact => artifact.endsWith(".h"));
21
+ const support = context.artifacts.artifacts.filter(artifact => artifact.path == "semantifold_runtime.h");
22
+ if (artifacts.length != 2 || sources.length != 1 || sources[0] != path.join(context.sourcePath, "program.c") ||
23
+ headers.length != 1 || support.length != 1 || support[0].contentKind != "text" || support[0].role != "support" ||
24
+ support[0].content != cRuntimeHeader) {
25
+ throw new SemantifoldDiagnostic({ code: "INVALID_TARGET_CHECK_PLAN", language: "c",
26
+ message: "C developer checks require the exact producer-owned translation unit and support header." });
27
+ }
28
+ const objects = path.join(context.buildPath, "objects");
29
+ const temporary = path.join(context.buildPath, "tmp");
30
+ const environment = { TMPDIR: temporary };
31
+ const environmentPaths = [environmentPath("TMPDIR", "build")];
32
+ const objectPaths = sources.map((_, index) => path.join(objects, `${String(index).padStart(6, "0")}.o`));
33
+ const stages = sources.map((source, index) => {
34
+ const argv = [...compilerFlags, "-c", source, "-o", objectPaths[index]];
35
+ return checkStage({
36
+ argv,
37
+ cwd: context.sourcePath,
38
+ environment,
39
+ environmentPaths,
40
+ inputs: [source, ...headers],
41
+ output: null,
42
+ pathArguments: [pathArgument(argv.length - 3, "source"), pathArgument(argv.length - 1, "build")],
43
+ stage: /** @type {const} */ ("compile"),
44
+ tool,
45
+ transientPaths: [objects]
46
+ });
47
+ });
48
+ const binary = path.join(context.buildPath, "semantifold-c");
49
+ const linkArgv = ["--no-default-config", "-O0", ...objectPaths, "-o", binary];
50
+ stages.push(checkStage({
51
+ argv: linkArgv,
52
+ cwd: context.sourcePath,
53
+ environment,
54
+ environmentPaths,
55
+ inputs: objectPaths,
56
+ output: checkOutput(context.buildPath, "application/x-executable", "linker-output"),
57
+ pathArguments: [...objectPaths.map((_, index) => pathArgument(index + 2, "build")),
58
+ pathArgument(linkArgv.length - 1, "build")],
59
+ stage: "link",
60
+ tool,
61
+ transientPaths: [objects]
62
+ }));
63
+ return checkPlan(context, "c", artifacts, stages);
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy1jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9jLWNoZWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUNMLGNBQWMsRUFDZCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFDVixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFBO0FBQ3hCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU3QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xDLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjO0lBQ3BHLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsU0FBUztJQUN2Ryx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSxLQUFLO0NBQ2pGLENBQUMsQ0FBQTtBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBTztJQUN0QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM3QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ2hILEdBQUcsRUFBRSw2Q0FBNkMsQ0FBQyxDQUFBO0lBQ3JELE1BQU0sT0FB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QUMsQ0FBQTtJQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUM1RCxNQUFNLFFBQVEsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFN0UsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxHQUFHLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDdkIsV0FBVztRQUNYLGdCQUFnQjtRQUNoQixNQUFNLEVBQUUsV0FBVztRQUNuQixNQUFNLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxDQUFDO1FBQ25GLGFBQWEsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hGLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxLQUFLLEVBQUUsTUFBTTtRQUNiLElBQUk7UUFDSixjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUM7S0FDMUIsQ0FBQyxDQUFDLENBQUE7SUFFSCxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7XG4gIGNoZWNrQXJ0aWZhY3RzLFxuICBjaGVja091dHB1dCxcbiAgY2hlY2tQbGFuLFxuICBjaGVja1N0YWdlLFxuICBjaGVja1Rvb2wsXG4gIGVudmlyb25tZW50UGF0aCxcbiAgcGF0aEFyZ3VtZW50XG59IGZyb20gXCIuL2NoZWNrLXBsYW4uanNcIlxuaW1wb3J0IHtjUnVudGltZUhlYWRlcn0gZnJvbSBcIi4vYy1ydW50aW1lLmpzXCJcblxuY29uc3QgY29tcGlsZXJGbGFncyA9IE9iamVjdC5mcmVlemUoW1xuICBcIi0tbm8tZGVmYXVsdC1jb25maWdcIiwgXCItc3RkPWMxN1wiLCBcIi1XYWxsXCIsIFwiLVdleHRyYVwiLCBcIi1XZXJyb3JcIiwgXCItcGVkYW50aWMtZXJyb3JzXCIsIFwiLVdjb252ZXJzaW9uXCIsXG4gIFwiLVdzaWduLWNvbnZlcnNpb25cIiwgXCItV3NoYWRvd1wiLCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIiwgXCItV21pc3NpbmctcHJvdG90eXBlc1wiLCBcIi1XZm9ybWF0PTJcIiwgXCItZnRyYXB2XCIsXG4gIFwiLWZpbnB1dC1jaGFyc2V0PVVURi04XCIsIFwiLWZleGVjLWNoYXJzZXQ9VVRGLThcIiwgXCItZm5vLWNvbG9yLWRpYWdub3N0aWNzXCIsIFwiLU8wXCJcbl0pXG5cbi8qKlxuICogQ29uc3RydWN0cyBDJ3Mgc3RyaWN0IENsYW5nIEMxNyBjb21waWxlL2xpbmsgcGxhbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIikuVGFyZ2V0Q2hlY2tQbGFuQ29udGV4dH0gY29udGV4dCAtIFZhbGlkYXRlZCBjYW5kaWRhdGUgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UYXJnZXRDaGVja1BsYW59IEltbXV0YWJsZSBDIHBsYW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDQ2hlY2tQbGFuKGNvbnRleHQpIHtcbiAgY29uc3QgdG9vbCA9IGNoZWNrVG9vbChjb250ZXh0LCBcImNsYW5nXCIsIFwiY1wiKVxuICBjb25zdCBhcnRpZmFjdHMgPSBjaGVja0FydGlmYWN0cyhjb250ZXh0LCBhcnRpZmFjdCA9PiBhcnRpZmFjdC5wYXRoLmVuZHNXaXRoKFwiLmNcIikgfHwgYXJ0aWZhY3QucGF0aC5lbmRzV2l0aChcIi5oXCIpLFxuICAgIFwiY1wiLCBcIm9ubHkgc3RhZ2VkIEMgdHJhbnNsYXRpb24gdW5pdHMgYW5kIGhlYWRlcnNcIilcbiAgY29uc3Qgc291cmNlcyA9IGFydGlmYWN0cy5maWx0ZXIoYXJ0aWZhY3QgPT4gYXJ0aWZhY3QuZW5kc1dpdGgoXCIuY1wiKSlcbiAgY29uc3QgaGVhZGVycyA9IGFydGlmYWN0cy5maWx0ZXIoYXJ0aWZhY3QgPT4gYXJ0aWZhY3QuZW5kc1dpdGgoXCIuaFwiKSlcbiAgY29uc3Qgc3VwcG9ydCA9IGNvbnRleHQuYXJ0aWZhY3RzLmFydGlmYWN0cy5maWx0ZXIoYXJ0aWZhY3QgPT4gYXJ0aWZhY3QucGF0aCA9PSBcInNlbWFudGlmb2xkX3J1bnRpbWUuaFwiKVxuXG4gIGlmIChhcnRpZmFjdHMubGVuZ3RoICE9IDIgfHwgc291cmNlcy5sZW5ndGggIT0gMSB8fCBzb3VyY2VzWzBdICE9IHBhdGguam9pbihjb250ZXh0LnNvdXJjZVBhdGgsIFwicHJvZ3JhbS5jXCIpIHx8XG4gICAgaGVhZGVycy5sZW5ndGggIT0gMSB8fCBzdXBwb3J0Lmxlbmd0aCAhPSAxIHx8IHN1cHBvcnRbMF0uY29udGVudEtpbmQgIT0gXCJ0ZXh0XCIgfHwgc3VwcG9ydFswXS5yb2xlICE9IFwic3VwcG9ydFwiIHx8XG4gICAgc3VwcG9ydFswXS5jb250ZW50ICE9IGNSdW50aW1lSGVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJJTlZBTElEX1RBUkdFVF9DSEVDS19QTEFOXCIsIGxhbmd1YWdlOiBcImNcIixcbiAgICAgIG1lc3NhZ2U6IFwiQyBkZXZlbG9wZXIgY2hlY2tzIHJlcXVpcmUgdGhlIGV4YWN0IHByb2R1Y2VyLW93bmVkIHRyYW5zbGF0aW9uIHVuaXQgYW5kIHN1cHBvcnQgaGVhZGVyLlwifSlcbiAgfVxuICBjb25zdCBvYmplY3RzID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcIm9iamVjdHNcIilcbiAgY29uc3QgdGVtcG9yYXJ5ID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcInRtcFwiKVxuICBjb25zdCBlbnZpcm9ubWVudCA9IHtUTVBESVI6IHRlbXBvcmFyeX1cbiAgY29uc3QgZW52aXJvbm1lbnRQYXRocyA9IFtlbnZpcm9ubWVudFBhdGgoXCJUTVBESVJcIiwgXCJidWlsZFwiKV1cbiAgY29uc3Qgb2JqZWN0UGF0aHMgPSBzb3VyY2VzLm1hcCgoXywgaW5kZXgpID0+IHBhdGguam9pbihvYmplY3RzLCBgJHtTdHJpbmcoaW5kZXgpLnBhZFN0YXJ0KDYsIFwiMFwiKX0ub2ApKVxuICBjb25zdCBzdGFnZXMgPSBzb3VyY2VzLm1hcCgoc291cmNlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGFyZ3YgPSBbLi4uY29tcGlsZXJGbGFncywgXCItY1wiLCBzb3VyY2UsIFwiLW9cIiwgb2JqZWN0UGF0aHNbaW5kZXhdXVxuXG4gICAgcmV0dXJuIGNoZWNrU3RhZ2Uoe1xuICAgICAgYXJndixcbiAgICAgIGN3ZDogY29udGV4dC5zb3VyY2VQYXRoLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBlbnZpcm9ubWVudFBhdGhzLFxuICAgICAgaW5wdXRzOiBbc291cmNlLCAuLi5oZWFkZXJzXSxcbiAgICAgIG91dHB1dDogbnVsbCxcbiAgICAgIHBhdGhBcmd1bWVudHM6IFtwYXRoQXJndW1lbnQoYXJndi5sZW5ndGggLSAzLCBcInNvdXJjZVwiKSwgcGF0aEFyZ3VtZW50KGFyZ3YubGVuZ3RoIC0gMSwgXCJidWlsZFwiKV0sXG4gICAgICBzdGFnZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiY29tcGlsZVwiKSxcbiAgICAgIHRvb2wsXG4gICAgICB0cmFuc2llbnRQYXRoczogW29iamVjdHNdXG4gICAgfSlcbiAgfSlcbiAgY29uc3QgYmluYXJ5ID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcInNlbWFudGlmb2xkLWNcIilcbiAgY29uc3QgbGlua0FyZ3YgPSBbXCItLW5vLWRlZmF1bHQtY29uZmlnXCIsIFwiLU8wXCIsIC4uLm9iamVjdFBhdGhzLCBcIi1vXCIsIGJpbmFyeV1cblxuICBzdGFnZXMucHVzaChjaGVja1N0YWdlKHtcbiAgICBhcmd2OiBsaW5rQXJndixcbiAgICBjd2Q6IGNvbnRleHQuc291cmNlUGF0aCxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBlbnZpcm9ubWVudFBhdGhzLFxuICAgIGlucHV0czogb2JqZWN0UGF0aHMsXG4gICAgb3V0cHV0OiBjaGVja091dHB1dChjb250ZXh0LmJ1aWxkUGF0aCwgXCJhcHBsaWNhdGlvbi94LWV4ZWN1dGFibGVcIiwgXCJsaW5rZXItb3V0cHV0XCIpLFxuICAgIHBhdGhBcmd1bWVudHM6IFsuLi5vYmplY3RQYXRocy5tYXAoKF8sIGluZGV4KSA9PiBwYXRoQXJndW1lbnQoaW5kZXggKyAyLCBcImJ1aWxkXCIpKSxcbiAgICAgIHBhdGhBcmd1bWVudChsaW5rQXJndi5sZW5ndGggLSAxLCBcImJ1aWxkXCIpXSxcbiAgICBzdGFnZTogXCJsaW5rXCIsXG4gICAgdG9vbCxcbiAgICB0cmFuc2llbnRQYXRoczogW29iamVjdHNdXG4gIH0pKVxuXG4gIHJldHVybiBjaGVja1BsYW4oY29udGV4dCwgXCJjXCIsIGFydGlmYWN0cywgc3RhZ2VzKVxufVxuIl19