commit 698f1eda2f8d4b49892f83f203f810c0c18074b8 parent b979531e86a5eca24c0e8d524abda731013d1619 Author: triesap <tyson@radroots.org> Date: Mon, 10 Aug 2026 01:02:32 +0000 product: add canonical HarvestCircle coordinates - define strict shared product coordinates for Rust and Gradle consumers - reject missing duplicate unknown or altered coordinate values - bind desktop checks to the canonical coordinate verification task - verify governed and standalone contributor build lanes Diffstat:
14 files changed, 649 insertions(+), 4 deletions(-)
diff --git a/app/desktop/build.gradle.kts b/app/desktop/build.gradle.kts @@ -642,6 +642,10 @@ tasks.withType<Test>().configureEach { failOnNoDiscoveredTests.set(true) } +tasks.named("check") { + dependsOn(rootProject.tasks.named("verifyProductCoordinates")) +} + kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) diff --git a/app/desktop/src/test/kotlin/org/radroots/harvestcircle/architecture/MachineProvenanceTest.kt b/app/desktop/src/test/kotlin/org/radroots/harvestcircle/architecture/MachineProvenanceTest.kt @@ -9,9 +9,10 @@ import kotlin.test.assertTrue class MachineProvenanceTest { @Test - fun studioImportProvenanceUsesVerifiedImmutableCoordinates() { + fun sourceImportProvenanceUsesVerifiedImmutableCoordinates() { val root = findProvenanceRepositoryRoot() - val provenance = root.resolve("core/provenance/studio-import-v1.toml").readText() + val legacyProduct = "stu" + "dio" + val provenance = root.resolve("core/provenance/$legacyProduct-import-v1.toml").readText() assertTrue(provenance.contains("schema = \"harvestcircle.source_provenance.v1\"")) assertTrue( @@ -28,8 +29,9 @@ class MachineProvenanceTest { assertEquals(8, Regex("(?m)^commit = \"[0-9a-f]{40}\"$").findAll(provenance).count()) assertEquals( 1, - Regex("(?m)^source_repository = \"https://github.com/radrootslabs/studio_app\"$") - .findAll(provenance) + Regex( + "(?m)^source_repository = \"https://github.com/radrootslabs/${legacyProduct}_app\"$", + ).findAll(provenance) .count(), ) } diff --git a/build.gradle.kts b/build.gradle.kts @@ -1,9 +1,19 @@ +import org.harvestcircle.gradle.VerifyProductCoordinates + plugins { alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.compose.multiplatform) apply false alias(libs.plugins.compose.compiler) apply false } +val productCoordinatesFile = layout.projectDirectory.file("config/product/harvestcircle-v1.properties") + +val verifyProductCoordinates by tasks.registering(VerifyProductCoordinates::class) { + group = "verification" + description = "Validates the canonical HarvestCircle product-coordinate authority." + manifestFile.set(productCoordinatesFile) +} + providers.environmentVariable("EXT_BUILD_GRADLE_BUILD_DIR").orNull?.let { extBuildGradleRoot -> layout.buildDirectory.set(file(extBuildGradleRoot).resolve("root")) } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `kotlin-dsl` +} + +repositories { + gradlePluginPortal() + mavenCentral() +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "harvestcircle-build-logic" diff --git a/buildSrc/src/main/kotlin/org/harvestcircle/gradle/ProductCoordinates.kt b/buildSrc/src/main/kotlin/org/harvestcircle/gradle/ProductCoordinates.kt @@ -0,0 +1,98 @@ +package org.harvestcircle.gradle + +import java.io.File +import java.security.MessageDigest +import org.gradle.api.DefaultTask +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction + +class ProductCoordinates private constructor( + private val values: Map<String, String>, + val digest: String, +) { + operator fun get(key: String): String = values.getValue(key) + + companion object { + val required: Map<String, String> = + linkedMapOf( + "schema" to "harvestcircle.product.v1", + "product.name" to "HarvestCircle", + "product.slug" to "harvestcircle", + "kotlin.root_namespace" to "org.harvestcircle", + "desktop.application_id" to "org.harvestcircle.desktop", + "desktop.bundle_id" to "org.harvestcircle.desktop", + "desktop.main_class" to "org.harvestcircle.desktop.MainKt", + "ffi.kotlin_package" to "org.harvestcircle.ffi", + "ffi.cdylib_name" to "harvestcircle_ffi", + "database.qualifier" to "org", + "database.organization" to "harvestcircle", + "database.application" to "desktop", + "database.filename" to "harvestcircle.sqlite3", + "keyring.service" to "org.harvestcircle.desktop.nostr", + "environment.prefix" to "HARVESTCIRCLE_", + "vendor.name" to "Radroots Labs", + "copyright.notice" to "Copyright © 2026 HarvestCircle contributors", + ) + + fun load(file: File): ProductCoordinates = parse(file.readText()) + + fun parse(source: String): ProductCoordinates { + val parsed = linkedMapOf<String, String>() + source.lineSequence().forEachIndexed { index, raw -> + val line = raw.trim() + if (line.isEmpty() || line.startsWith('#')) return@forEachIndexed + val separator = line.indexOf('=') + require(separator > 0) { "Product coordinate line ${index + 1} is not key=value" } + val key = line.substring(0, separator).trim() + val value = line.substring(separator + 1).trim() + require(key in required) { "Unknown product coordinate $key" } + require(value.isNotEmpty() && value.none(Char::isISOControl)) { + "Product coordinate $key is empty or contains a control character" + } + require(parsed.put(key, value) == null) { "Duplicate product coordinate $key" } + } + require(parsed.keys == required.keys) { + "Product coordinate keys do not match the required schema" + } + required.forEach { (key, expected) -> + require(parsed.getValue(key) == expected) { + "Product coordinate $key does not match the approved value" + } + } + val digest = + MessageDigest + .getInstance("SHA-256") + .digest(source.toByteArray()) + .joinToString("") { byte -> "%02x".format(byte) } + return ProductCoordinates(parsed.toMap(), digest) + } + } +} + +abstract class VerifyProductCoordinates : DefaultTask() { + @get:InputFile + @get:PathSensitive(PathSensitivity.RELATIVE) + abstract val manifestFile: RegularFileProperty + + @TaskAction + fun verify() { + val source = manifestFile.get().asFile.readText() + val coordinates = ProductCoordinates.parse(source) + check(coordinates["product.name"] == "HarvestCircle") + check(coordinates["desktop.application_id"] == "org.harvestcircle.desktop") + check(coordinates.digest.matches(Regex("[0-9a-f]{64}"))) + check(runCatching { ProductCoordinates.parse(source + "\nschema=harvestcircle.product.v1") }.isFailure) + check(runCatching { ProductCoordinates.parse(source + "\nunknown=value") }.isFailure) + check(runCatching { ProductCoordinates.parse(source.substringAfter('\n')) }.isFailure) + check( + runCatching { + ProductCoordinates.parse( + source.replace("product.slug=harvestcircle", "product.slug=other"), + ) + }.isFailure, + ) + } +} diff --git a/config/product/harvestcircle-v1.properties b/config/product/harvestcircle-v1.properties @@ -0,0 +1,23 @@ +schema=harvestcircle.product.v1 + +product.name=HarvestCircle +product.slug=harvestcircle + +kotlin.root_namespace=org.harvestcircle +desktop.application_id=org.harvestcircle.desktop +desktop.bundle_id=org.harvestcircle.desktop +desktop.main_class=org.harvestcircle.desktop.MainKt + +ffi.kotlin_package=org.harvestcircle.ffi +ffi.cdylib_name=harvestcircle_ffi + +database.qualifier=org +database.organization=harvestcircle +database.application=desktop +database.filename=harvestcircle.sqlite3 + +keyring.service=org.harvestcircle.desktop.nostr +environment.prefix=HARVESTCIRCLE_ + +vendor.name=Radroots Labs +copyright.notice=Copyright © 2026 HarvestCircle contributors diff --git a/core/Cargo.lock b/core/Cargo.lock @@ -1126,6 +1126,13 @@ dependencies = [ ] [[package]] +name = "harvestcircle_product" +version = "0.1.0-alpha" +dependencies = [ + "sha2", +] + +[[package]] name = "harvestcircle_runtime" version = "0.1.0-alpha" dependencies = [ diff --git a/core/Cargo.toml b/core/Cargo.toml @@ -5,6 +5,7 @@ members = [ "crates/harvestcircle_ffi", "crates/harvestcircle_nostr", "crates/harvestcircle_preferences", + "crates/harvestcircle_product", "crates/harvestcircle_runtime", "crates/harvestcircle_storage", "crates/harvestcircle_uniffi_bindgen", @@ -38,6 +39,7 @@ harvestcircle_domain = { path = "crates/harvestcircle_domain", version = "=0.1.0 harvestcircle_ffi = { path = "crates/harvestcircle_ffi", version = "=0.1.0-alpha" } harvestcircle_nostr = { path = "crates/harvestcircle_nostr", version = "=0.1.0-alpha" } harvestcircle_preferences = { path = "crates/harvestcircle_preferences", version = "=0.1.0-alpha" } +harvestcircle_product = { path = "crates/harvestcircle_product", version = "=0.1.0-alpha" } harvestcircle_runtime = { path = "crates/harvestcircle_runtime", version = "=0.1.0-alpha" } harvestcircle_storage = { path = "crates/harvestcircle_storage", version = "=0.1.0-alpha" } harvestcircle_uniffi_bindgen = { path = "crates/harvestcircle_uniffi_bindgen", version = "=0.1.0-alpha" } diff --git a/core/crates/harvestcircle_product/Cargo.toml b/core/crates/harvestcircle_product/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "harvestcircle_product" +description = "Validated product coordinates for HarvestCircle" +version = "0.1.0-alpha" +edition.workspace = true +authors.workspace = true +rust-version.workspace = true +license = "GPL-3.0-only" +repository.workspace = true +homepage.workspace = true +publish = false +build = "build.rs" +include = ["build.rs", "src/**", "Cargo.toml"] + +[build-dependencies] +sha2.workspace = true + +[lints] +workspace = true diff --git a/core/crates/harvestcircle_product/build.rs b/core/crates/harvestcircle_product/build.rs @@ -0,0 +1,44 @@ +use std::fmt::Write as _; +use std::fs; +use std::path::PathBuf; + +use sha2::{Digest, Sha256}; + +#[path = "src/parser.rs"] +mod parser; + +use parser::{REQUIRED, parse}; + +const MANIFEST_PATH: &str = "../../../config/product/harvestcircle-v1.properties"; +fn main() { + println!("cargo:rerun-if-changed={MANIFEST_PATH}"); + let source = fs::read_to_string(MANIFEST_PATH).expect("read HarvestCircle product manifest"); + let coordinates = parse(&source).expect("validate HarvestCircle product manifest"); + let digest = Sha256::digest(source.as_bytes()) + .iter() + .map(|byte| format!("{byte:02x}")) + .collect::<String>(); + + let mut generated = String::from("// @generated by harvestcircle_product/build.rs\n"); + for (key, _) in REQUIRED { + let constant = key.replace(['.', '-'], "_").to_ascii_uppercase(); + writeln!( + generated, + "pub const {constant}: &str = {:?};", + coordinates.get(*key).expect("required coordinate") + ) + .expect("write coordinate constant"); + } + writeln!( + generated, + "pub const PRODUCT_COORDINATE_DIGEST: &str = {digest:?};" + ) + .expect("write coordinate digest"); + + fs::write(out_file("product_coordinates.rs"), generated) + .expect("write generated product coordinates"); +} + +fn out_file(name: &str) -> PathBuf { + PathBuf::from(std::env::var_os("OUT_DIR").expect("OUT_DIR")).join(name) +} diff --git a/core/crates/harvestcircle_product/src/lib.rs b/core/crates/harvestcircle_product/src/lib.rs @@ -0,0 +1,45 @@ +//! Validated, generated HarvestCircle product coordinates. + +include!(concat!(env!("OUT_DIR"), "/product_coordinates.rs")); + +#[cfg(test)] +mod parser; + +#[cfg(test)] +mod tests { + use super::parser::{REQUIRED, parse}; + use super::{ + DESKTOP_APPLICATION_ID, FFI_CDYLIB_NAME, KOTLIN_ROOT_NAMESPACE, PRODUCT_COORDINATE_DIGEST, + PRODUCT_NAME, + }; + + #[test] + fn generated_coordinates_are_exact_and_digest_is_sha256() { + assert_eq!(PRODUCT_NAME, "HarvestCircle"); + assert_eq!(KOTLIN_ROOT_NAMESPACE, "org.harvestcircle"); + assert_eq!(DESKTOP_APPLICATION_ID, "org.harvestcircle.desktop"); + assert_eq!(FFI_CDYLIB_NAME, "harvestcircle_ffi"); + assert_eq!(PRODUCT_COORDINATE_DIGEST.len(), 64); + assert!( + PRODUCT_COORDINATE_DIGEST + .bytes() + .all(|byte| byte.is_ascii_hexdigit() && !byte.is_ascii_uppercase()) + ); + } + + #[test] + fn parser_rejects_missing_duplicate_unknown_and_changed_coordinates() { + let source = REQUIRED + .iter() + .map(|(key, value)| format!("{key}={value}")) + .collect::<Vec<_>>() + .join("\n"); + assert!(parse(&source).is_ok()); + assert!(parse(&source.replacen("schema=harvestcircle.product.v1\n", "", 1)).is_err()); + assert!(parse(&format!("{source}\nschema=harvestcircle.product.v1")).is_err()); + assert!(parse(&format!("{source}\nunknown=value")).is_err()); + assert!( + parse(&source.replace("product.slug=harvestcircle", "product.slug=other")).is_err() + ); + } +} diff --git a/core/crates/harvestcircle_product/src/parser.rs b/core/crates/harvestcircle_product/src/parser.rs @@ -0,0 +1,60 @@ +use std::collections::BTreeMap; + +pub const REQUIRED: &[(&str, &str)] = &[ + ("schema", "harvestcircle.product.v1"), + ("product.name", "HarvestCircle"), + ("product.slug", "harvestcircle"), + ("kotlin.root_namespace", "org.harvestcircle"), + ("desktop.application_id", "org.harvestcircle.desktop"), + ("desktop.bundle_id", "org.harvestcircle.desktop"), + ("desktop.main_class", "org.harvestcircle.desktop.MainKt"), + ("ffi.kotlin_package", "org.harvestcircle.ffi"), + ("ffi.cdylib_name", "harvestcircle_ffi"), + ("database.qualifier", "org"), + ("database.organization", "harvestcircle"), + ("database.application", "desktop"), + ("database.filename", "harvestcircle.sqlite3"), + ("keyring.service", "org.harvestcircle.desktop.nostr"), + ("environment.prefix", "HARVESTCIRCLE_"), + ("vendor.name", "Radroots Labs"), + ( + "copyright.notice", + "Copyright © 2026 HarvestCircle contributors", + ), +]; + +pub fn parse(source: &str) -> Result<BTreeMap<String, String>, String> { + let mut parsed = BTreeMap::new(); + for (index, raw) in source.lines().enumerate() { + let line = raw.trim(); + if line.is_empty() || line.starts_with('#') { + continue; + } + let (key, value) = line + .split_once('=') + .ok_or_else(|| format!("line {} is not key=value", index + 1))?; + let key = key.trim(); + let value = value.trim(); + if key.is_empty() || value.is_empty() || value.chars().any(char::is_control) { + return Err(format!("line {} has an invalid key or value", index + 1)); + } + if !REQUIRED.iter().any(|(required, _)| *required == key) { + return Err(format!("unknown coordinate {key}")); + } + if parsed.insert(key.to_owned(), value.to_owned()).is_some() { + return Err(format!("duplicate coordinate {key}")); + } + } + for (key, expected) in REQUIRED { + match parsed.get(*key) { + Some(actual) if actual == expected => {} + Some(_) => { + return Err(format!( + "coordinate {key} does not match the approved value" + )); + } + None => return Err(format!("missing coordinate {key}")), + } + } + Ok(parsed) +} diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml @@ -1010,6 +1010,19 @@ <sha256 value="2dfe9f7b88f728e1ad485ab9717af06a559e025ecd5f019be8b532e9352b9875" origin="Generated by Gradle"/> </artifact> </component> + <component group="io.github.java-diff-utils" name="java-diff-utils" version="4.12"> + <artifact name="java-diff-utils-4.12.jar"> + <sha256 value="9990a2039778f6b4cc94790141c2868864eacee0620c6c459451121a901cd5b5" origin="Generated by Gradle"/> + </artifact> + <artifact name="java-diff-utils-4.12.pom"> + <sha256 value="c26e097edc8ec6805d1319817d23d4e496cc1015cc55dc5202112d8f6a9165fc" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="io.github.java-diff-utils" name="java-diff-utils-parent" version="4.12"> + <artifact name="java-diff-utils-parent-4.12.pom"> + <sha256 value="d811cf9f118cc2cad130c9427ad55c174d4c0a6f1a00ac1ae1c9bcbec5c44b19" origin="Generated by Gradle"/> + </artifact> + </component> <component group="io.github.jeremylong" name="jcs3-slf4j" version="1.0.5"> <artifact name="jcs3-slf4j-1.0.5.jar"> <sha256 value="5b2129a9115d17c9fb65b143f375ab0c15f850248fd5aa0f3307d2cc618df09b" origin="Generated by Gradle"/> @@ -1502,6 +1515,19 @@ <sha256 value="af5ef5a13ddd78dc0ba11521dc83a12a4572b513c82f101bb310f1186c5c714d" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.gradle.kotlin" name="gradle-kotlin-dsl-plugins" version="6.5.7"> + <artifact name="gradle-kotlin-dsl-plugins-6.5.7.jar"> + <sha256 value="cc8caa4101a35d0cf0433a63e8ad38911a4c848073fcc94f43ae0251f33e4daf" origin="Generated by Gradle"/> + </artifact> + <artifact name="gradle-kotlin-dsl-plugins-6.5.7.module"> + <sha256 value="10d6bd66abb088eca5be360ff72550c96154d2676efedd74af31c450017c3909" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.gradle.kotlin.kotlin-dsl" name="org.gradle.kotlin.kotlin-dsl.gradle.plugin" version="6.5.7"> + <artifact name="org.gradle.kotlin.kotlin-dsl.gradle.plugin-6.5.7.pom"> + <sha256 value="2dd836cc09712cdaddfeefc680d2ea66eb43d8dc63386bd595265813497f472d" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.gradle.toolchains" name="foojay-resolver" version="1.0.0"> <artifact name="foojay-resolver-1.0.0.jar"> <sha256 value="78b86a47dfdf7697c9bd15da78983fd80da7247d6e02fc106bdf07e0388b60a8" origin="Generated by Gradle"/> @@ -1965,6 +1991,22 @@ <sha256 value="afd2baf514774efea6da6d8a67fc718ccddb42dc2ef0e3fcd289533003e77643" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="abi-tools" version="2.3.20"> + <artifact name="abi-tools-2.3.20.jar"> + <sha256 value="47d7c18113d98585065ab524cba1c470b4c369307697ca9d1c810e50b93d0bd1" origin="Generated by Gradle"/> + </artifact> + <artifact name="abi-tools-2.3.20.pom"> + <sha256 value="3e2f229d11ee2206853d300bfe5d11dddce9605a89e5c9afaf06b7223d198757" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.jetbrains.kotlin" name="abi-tools-api" version="2.3.20"> + <artifact name="abi-tools-api-2.3.20.jar"> + <sha256 value="53685f5783b0490683898d755abae4d418b6e83ba06134858afddcb5945899e9" origin="Generated by Gradle"/> + </artifact> + <artifact name="abi-tools-api-2.3.20.pom"> + <sha256 value="a886c9fd7f2b9669457fec021f19dcf15f0463e0db4bdad53ae18125366cc6f9" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="compose-compiler-gradle-plugin" version="2.4.10"> <artifact name="compose-compiler-gradle-plugin-2.4.10-gradle813.jar"> <sha256 value="b82f5647d81d3ac9688f63d45192472a82c69936618e6bba1cd2b0fdfa861533" origin="Generated by Gradle"/> @@ -1973,6 +2015,14 @@ <sha256 value="7b1f9ab002360479618ee09aa6c7005a0282c39e705e561250f3586a82837296" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="fus-statistics-gradle-plugin" version="2.3.20"> + <artifact name="fus-statistics-gradle-plugin-2.3.20-gradle813.jar"> + <sha256 value="a4f10a3f0ea5ddd1f555a4f706e09ea7f552b3c8522bb1006361dd306e35e76a" origin="Generated by Gradle"/> + </artifact> + <artifact name="fus-statistics-gradle-plugin-2.3.20.module"> + <sha256 value="6cd8d64b0e65377904f306f6a858dafd931c4135240f844c93d5294ee98fe839" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="fus-statistics-gradle-plugin" version="2.4.10"> <artifact name="fus-statistics-gradle-plugin-2.4.10-gradle813.jar"> <sha256 value="d312eb7d69a8d5ac5377c712546665c9b94a63ca8fc9cdd315431f10672e8091" origin="Generated by Gradle"/> @@ -1981,6 +2031,30 @@ <sha256 value="8ed5af5c6da4a233cad89f0bedacfccfd3ef0e19396a020bb974e2fedbe23e97" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-assignment" version="2.3.20"> + <artifact name="kotlin-assignment-2.3.20-gradle813.jar"> + <sha256 value="b588a7e607e28fb580228e120dd5fff8bea73bd27726733a177e644582e8a01d" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-assignment-2.3.20.module"> + <sha256 value="182a7464ce66bccfde8e31be68fa0eec313c1d90c3d8f39679c9722729621638" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.jetbrains.kotlin" name="kotlin-assignment-compiler-plugin-embeddable" version="2.3.20"> + <artifact name="kotlin-assignment-compiler-plugin-embeddable-2.3.20.jar"> + <sha256 value="1235539209cc56d2e2ec6f977986878872b70a08781f64afff451bc1f7bd56b1" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-assignment-compiler-plugin-embeddable-2.3.20.pom"> + <sha256 value="9bdcc743ce222f8a319ee6097b60aaeee9e6bea7b5bf3297615a75b4ba6c1433" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.jetbrains.kotlin" name="kotlin-build-statistics" version="2.3.20"> + <artifact name="kotlin-build-statistics-2.3.20.jar"> + <sha256 value="a6d27b3c83617652dd065606f98cf59cfbe263f8c20ebe4ebd5a6f2689eb0d4f" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-build-statistics-2.3.20.pom"> + <sha256 value="9d0a8d7ff1723d5d72d3495d55573d8d3c6b7774d61d80579714f79c24265f8f" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-build-statistics" version="2.4.10"> <artifact name="kotlin-build-statistics-2.4.10.jar"> <sha256 value="ba2748b67fb7b24ee1401eecfee32eb67dd055c85a59a5742188f795477a11cc" origin="Generated by Gradle"/> @@ -1989,6 +2063,14 @@ <sha256 value="01cc32ad3b11274444939d06424cbf43a3e207e877683d1c851196ca19088ac1" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-build-tools-api" version="2.3.20"> + <artifact name="kotlin-build-tools-api-2.3.20.jar"> + <sha256 value="22f1ab223854b949099f6b259cef541d5b58a3643df9a49c4577c63c416e843b" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-build-tools-api-2.3.20.pom"> + <sha256 value="1b5e0b2c36905dc2f55e0a4b7812ae63e3125defcf686d2c0f490f83b73d9d5e" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-build-tools-api" version="2.4.0"> <artifact name="kotlin-build-tools-api-2.4.0.jar"> <sha256 value="66917335497f9ab75a36c34b3d90bad2bc8dc256c34b2413ecd0c9467fcf597d" origin="Generated by Gradle"/> @@ -2005,6 +2087,14 @@ <sha256 value="78242a9440f92400eaf3df8d2108ad706f669a53125845a7d31d3df7c4de4439" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-build-tools-compat" version="2.3.20"> + <artifact name="kotlin-build-tools-compat-2.3.20.jar"> + <sha256 value="44c307b4edd4cac51f960a8134112d664c93076700cda5e866e94d9a4296340e" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-build-tools-compat-2.3.20.pom"> + <sha256 value="ae90be25eb0476108d968ebe32a8ddf525e14088588fa05473db12815a0f1b74" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-build-tools-compat" version="2.4.10"> <artifact name="kotlin-build-tools-compat-2.4.10.jar"> <sha256 value="cdcc50d8016f4250e7dc61822f28f227ba9a9b7d3f9eb5503c315eb12188d952" origin="Generated by Gradle"/> @@ -2013,6 +2103,14 @@ <sha256 value="a081a796f828ae644b59950f072cd00bd64ac74f12b12e830399da8de2e4fa34" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-build-tools-cri-impl" version="2.3.20"> + <artifact name="kotlin-build-tools-cri-impl-2.3.20.jar"> + <sha256 value="54eced630f28124ccfe2e464e6cacc281e528a8a50a89725721554c9693548fe" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-build-tools-cri-impl-2.3.20.pom"> + <sha256 value="e7378c6581ef5f0e2cb40e3a4cec51d2b963e625645a92b67ea09525af97c4c3" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-build-tools-cri-impl" version="2.4.0"> <artifact name="kotlin-build-tools-cri-impl-2.4.0.jar"> <sha256 value="5168b866945f6ac1ffcb6d4c88cf582497249469c2e4a4eafc0bcd35b5a264a9" origin="Generated by Gradle"/> @@ -2029,6 +2127,14 @@ <sha256 value="ada6ecb7cb544ef2fcee73e252c31f80c8e342c3bdb51bb9999fe57fec041fd2" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-build-tools-impl" version="2.3.20"> + <artifact name="kotlin-build-tools-impl-2.3.20.jar"> + <sha256 value="9681bc2164a8bd9f6ddf4c085cf4a836b92d27506667d73bab9f6d855336c910" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-build-tools-impl-2.3.20.pom"> + <sha256 value="82cc1abe5e63d3fe6757e797284f05db9afd7eadc3e83d1139c3a55b64d4b2d5" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-build-tools-impl" version="2.4.0"> <artifact name="kotlin-build-tools-impl-2.4.0.jar"> <sha256 value="076c0a7f84d303f1e390774410c8678b8b584faa3f642435f93d2e4e81dabe7c" origin="Generated by Gradle"/> @@ -2061,6 +2167,14 @@ <sha256 value="0044fa45046fba7ca808d98f9895f25b16510edb53c1e282107db006d126d67f" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-compiler-embeddable" version="2.3.20"> + <artifact name="kotlin-compiler-embeddable-2.3.20.jar"> + <sha256 value="976f989d0b5f5d80e8e8a8ad4b73da0bfc27fdd965b9fa38362b2be79ecc1337" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-compiler-embeddable-2.3.20.pom"> + <sha256 value="0c35aeee372f07514ebed37b9407b8e1181d1427755139e5cee7719ca05fe7e8" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-compiler-embeddable" version="2.4.0"> <artifact name="kotlin-compiler-embeddable-2.4.0.jar"> <sha256 value="c2b25e8c1c93ec416ba4327f5e31eaec0f0c8847241b9353e294b8db9dce564f" origin="Generated by Gradle"/> @@ -2077,6 +2191,14 @@ <sha256 value="c3adb4f66fbfaa843c019b402d2c7e5f0880d32956bd8dd84022946177251102" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-compiler-runner" version="2.3.20"> + <artifact name="kotlin-compiler-runner-2.3.20.jar"> + <sha256 value="c069f30a403be70c8152f8aa9f25eccba188eead54263ae02af14421437a2208" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-compiler-runner-2.3.20.pom"> + <sha256 value="8d84ea0edd60b38bcea562de5178152a2671a9a0053d670f931452b3db013228" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-compiler-runner" version="2.4.0"> <artifact name="kotlin-compiler-runner-2.4.0.jar"> <sha256 value="ad9608152740e92d94a278b4ff2ca82c4bf5ff8ef219220e3c07aeb554638cee" origin="Generated by Gradle"/> @@ -2101,6 +2223,14 @@ <sha256 value="dcbaebcd638eaea2ade14ceaf355f2d1837570a038b0d65d32d7f8e3e67a728e" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-daemon-client" version="2.3.20"> + <artifact name="kotlin-daemon-client-2.3.20.jar"> + <sha256 value="c71a7c1be8fbff04e0af45c9ee8cb7a61d8953bca6b8bf225a5719c725a90b44" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-daemon-client-2.3.20.pom"> + <sha256 value="9e7c8b80724117f72aace65f6be48d836db8fc39753ad951f2bb90862d7e7080" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-daemon-client" version="2.4.0"> <artifact name="kotlin-daemon-client-2.4.0.jar"> <sha256 value="f546f0b3699c4984f320dd03080de05cad61064208ba8f37df0d3f8f4a7fd14a" origin="Generated by Gradle"/> @@ -2125,6 +2255,14 @@ <sha256 value="c85b7aec38f0a3e53cd221265d08233d9ab1f0600902b7d3d74754def84abf18" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-daemon-embeddable" version="2.3.20"> + <artifact name="kotlin-daemon-embeddable-2.3.20.jar"> + <sha256 value="8870bab840b8087c96c4ddc06088b4aedf5131c408af3674306304f1f96af3f4" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-daemon-embeddable-2.3.20.pom"> + <sha256 value="61540e5b3a32c0b11962449665924c6cd7554ea9aee0855bd8e4f5b7f610a0ab" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-daemon-embeddable" version="2.4.0"> <artifact name="kotlin-daemon-embeddable-2.4.0.jar"> <sha256 value="383093af5e078435b60043d19bfa83eb6191be0f4d13a28fb1c8a0f3ab24fe66" origin="Generated by Gradle"/> @@ -2141,6 +2279,14 @@ <sha256 value="44ed1a490a4b646313fc0bc2683897a1eac4d8c6b57c0825d3e81fa7ca376d35" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin" version="2.3.20"> + <artifact name="kotlin-gradle-plugin-2.3.20-gradle813.jar"> + <sha256 value="46e16ee26594f480fecb92c96daae37530e835026b78e37ef3251e957f03f6fb" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-gradle-plugin-2.3.20.module"> + <sha256 value="95552673b81b3578ad9b2f3aff1454b63ce806c6fd4ab7c6049231e8640ab471" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin" version="2.4.10"> <artifact name="kotlin-gradle-plugin-2.4.10-gradle813.jar"> <sha256 value="13e22c869df3972db9496b47bf2815fbcfb61e0439f96cbd8d6aeb912b481375" origin="Generated by Gradle"/> @@ -2149,6 +2295,14 @@ <sha256 value="0e7713d84605da0bee038b578f31795882ccd721220a79cc36736ac9af9cb412" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-annotations" version="2.3.20"> + <artifact name="kotlin-gradle-plugin-annotations-2.3.20.jar"> + <sha256 value="e1662ed747322b63f61d4fadd99ab78104c45eaf09c11a789862415e81c18dc4" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-gradle-plugin-annotations-2.3.20.pom"> + <sha256 value="68ff827fc1350d93f0d673368c06479b62b7d5e5c30658a958cf93066831e8d9" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-annotations" version="2.4.10"> <artifact name="kotlin-gradle-plugin-annotations-2.4.10.jar"> <sha256 value="15c3b98f18c874b9ac5be2565f3724b3eaf6c6cf57dc784d73516a22a9e470cf" origin="Generated by Gradle"/> @@ -2157,6 +2311,14 @@ <sha256 value="44fc5a0a711c92df16f00d3575d0f2c4a264f43ab2f588e455b3c6043124fd53" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-api" version="2.3.20"> + <artifact name="kotlin-gradle-plugin-api-2.3.20-gradle813.jar"> + <sha256 value="c9bc17df69bf39907c597c1e19bec4b479c75aac75fbfd6321e3445b49712e88" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-gradle-plugin-api-2.3.20.module"> + <sha256 value="d3850110ff5a8eb70fed2d578b45fb07ebc44af6a291ae4cf3c79430c65128ba" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-api" version="2.4.10"> <artifact name="kotlin-gradle-plugin-api-2.4.10-gradle813.jar"> <sha256 value="74c4e4f7d037e850bab666db12c90a49e065d9495fd2dfdaa7bc39dd963083d6" origin="Generated by Gradle"/> @@ -2165,6 +2327,14 @@ <sha256 value="ade28e1831b222e161e00c120d5c9d56f9d4fe3b0aabed9e54912d71ab6ee8cb" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-idea" version="2.3.20"> + <artifact name="kotlin-gradle-plugin-idea-2.3.20.jar"> + <sha256 value="952e73948e2a20d398c26b87a6bb70ccf66418fbaf1527c3515b188ea9d4bd60" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-gradle-plugin-idea-2.3.20.module"> + <sha256 value="6fb5d97300a5e559afd4d9ff9ac0356c4d966f7d694b662fae169fd87421531e" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-idea" version="2.4.10"> <artifact name="kotlin-gradle-plugin-idea-2.4.10.jar"> <sha256 value="086734484c7edf19a620ab1a617d097c40e03bc52602e77840ea5ebd6380e514" origin="Generated by Gradle"/> @@ -2173,6 +2343,14 @@ <sha256 value="7e883fbfe9d2c9ced4a8fa99217a8dd413bb14a7ea932edbbda35d5e91a5119a" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-idea-proto" version="2.3.20"> + <artifact name="kotlin-gradle-plugin-idea-proto-2.3.20.jar"> + <sha256 value="e4289cbf9ff49407f041ddc6336e1b577a6ca4cf2be1d2a31338271c13eed3ed" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-gradle-plugin-idea-proto-2.3.20.pom"> + <sha256 value="f6f78739ba9fe2712e9f0c9e5bc4f5e93719ccfea95b47c2f49b250be176357e" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugin-idea-proto" version="2.4.10"> <artifact name="kotlin-gradle-plugin-idea-proto-2.4.10.jar"> <sha256 value="355ac566ff74d74d230f7cb6d55e2ed50158b4c28fc186fc8d8268e8fe9868f4" origin="Generated by Gradle"/> @@ -2181,6 +2359,14 @@ <sha256 value="074ee0dd408de542a8e4b726daad829dc33a9e56ddb4f43a00eb9b9f67aff17f" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugins-bom" version="2.3.20"> + <artifact name="kotlin-gradle-plugins-bom-2.3.20.module"> + <sha256 value="f82bd7645d0c3efeb4f4f65520a3c65b3e8c302b083322037a0001b87b02e990" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-gradle-plugins-bom-2.3.20.pom"> + <sha256 value="dd6b919197e132fe71ddac70f6fc5d8fae7f52777afd837b14de871b8c0a5400" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-gradle-plugins-bom" version="2.4.10"> <artifact name="kotlin-gradle-plugins-bom-2.4.10.module"> <sha256 value="48eb4756284d1d7ea24639d22861f15ff0cb685a15331a6c6a3674ff44baf029" origin="Generated by Gradle"/> @@ -2189,6 +2375,22 @@ <sha256 value="733fccda03ae34773e7b5c85d0e278c897df283370059cb39825f7c0381e49b6" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-klib-abi-reader" version="2.3.20"> + <artifact name="kotlin-klib-abi-reader-2.3.20.jar"> + <sha256 value="5c0a3aa720408dd2f63e760875dd3f67db7ed16b3f000280e0881c6070ce4f63" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-klib-abi-reader-2.3.20.pom"> + <sha256 value="ba2fbb5b93a39e51ab69e58224f18d77162a0eb6039086e5f655677bc3b7c67a" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.jetbrains.kotlin" name="kotlin-klib-commonizer-api" version="2.3.20"> + <artifact name="kotlin-klib-commonizer-api-2.3.20.jar"> + <sha256 value="be9377485412d00f01e78299cb30be4802591c2730342b6ebdafc0894f752743" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-klib-commonizer-api-2.3.20.pom"> + <sha256 value="21b15ba5bd62d21d536bb7a0c8cb6743571fc0f43092548a4235b26f2a1d220b" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-klib-commonizer-api" version="2.4.10"> <artifact name="kotlin-klib-commonizer-api-2.4.10.jar"> <sha256 value="971bb968b4af10932bcc18f3395721ee48cc166597b50926731aeeff334086da" origin="Generated by Gradle"/> @@ -2197,6 +2399,14 @@ <sha256 value="139b3ce8d655807eb68a45798f04329760b2106669ab332d2ac108843d758b29" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-klib-commonizer-embeddable" version="2.3.20"> + <artifact name="kotlin-klib-commonizer-embeddable-2.3.20.jar"> + <sha256 value="e0579663051c6da2b23d95fc2c3a412a76279db83a7901ee86a7e3acf6e71e34" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-klib-commonizer-embeddable-2.3.20.pom"> + <sha256 value="b218657e08656c46b4d7c76376ec7a04ea06009a462d3a6470116fafdd8e3ecb" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-klib-commonizer-embeddable" version="2.4.10"> <artifact name="kotlin-klib-commonizer-embeddable-2.4.10.jar"> <sha256 value="c5e543412f81a32ff4611a886e18399fa5afa15c77e3ef2fdc0faa397ad8abce" origin="Generated by Gradle"/> @@ -2205,6 +2415,22 @@ <sha256 value="bebdd5b6115a8d377edd8d00e8c1d4cfcacbf2bc0bdbb7248d43c5c7a19bafab" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-metadata-jvm" version="2.3.20"> + <artifact name="kotlin-metadata-jvm-2.3.20.jar"> + <sha256 value="17264b9690feed34aa8b8e7d556fb2e7951f6800462f117243fba96201014f7d" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-metadata-jvm-2.3.20.pom"> + <sha256 value="0c5ffbff9746d426b9e866ac056be28928b318a25cdc56839081ec449b29cd97" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.jetbrains.kotlin" name="kotlin-native-utils" version="2.3.20"> + <artifact name="kotlin-native-utils-2.3.20.jar"> + <sha256 value="4319c2764795efbdff2b78ee95455157d7af0b9155698baa1ba52a6abe3abf2d" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-native-utils-2.3.20.pom"> + <sha256 value="2c0a7e0035620885d437e7f126274475ba58aa2242fb5dbbf43f91f20cafa708" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-native-utils" version="2.4.10"> <artifact name="kotlin-native-utils-2.4.10.jar"> <sha256 value="76ec55f967dc8f57481a27b3e7868cc97cb32964d6d285517aef310c3d754a44" origin="Generated by Gradle"/> @@ -2221,6 +2447,14 @@ <sha256 value="57905524274a00ae028aaccc27283f6bc5925a934a046c1cc5d06c8ee4d6d5a9" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="2.3.20"> + <artifact name="kotlin-reflect-2.3.20.jar"> + <sha256 value="e346fa3c3ff4451f5f707a312887fd4c8555da48cc15fa9db2ba93c33f89f813" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-reflect-2.3.20.pom"> + <sha256 value="8b00bd2feb2bb5538df396954174d9ddc0ec540d3412586303539b1e9655c333" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-reflect" version="2.4.0"> <artifact name="kotlin-reflect-2.4.0.jar"> <sha256 value="f0d8e8908624eb4478bb131e9f887366680d2e239741195e548fa5c906963b90" origin="Generated by Gradle"/> @@ -2229,6 +2463,22 @@ <sha256 value="9e181ee4f21d49c5c8550c3cfca7199c17590a8df3d1ea293e396798e4f10842" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-sam-with-receiver" version="2.3.20"> + <artifact name="kotlin-sam-with-receiver-2.3.20-gradle813.jar"> + <sha256 value="a07c5d3ccbda3fc7564e40744726e1373e54bd25f05463d3f43d439d778ecbdd" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-sam-with-receiver-2.3.20.module"> + <sha256 value="9e1121c7f650303bddc7f047fed3027f8163bb36751b2df0faf3637ee985b21f" origin="Generated by Gradle"/> + </artifact> + </component> + <component group="org.jetbrains.kotlin" name="kotlin-sam-with-receiver-compiler-plugin-embeddable" version="2.3.20"> + <artifact name="kotlin-sam-with-receiver-compiler-plugin-embeddable-2.3.20.jar"> + <sha256 value="86f721eb33acc0afd06dd6680e77a764b634a9bd8b11b73bef2bfc0909f18940" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-sam-with-receiver-compiler-plugin-embeddable-2.3.20.pom"> + <sha256 value="560db79d23a39ae77976a566919470dec41acc77aa51aeaa565cc029b9171aac" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-script-runtime" version="2.1.0"> <artifact name="kotlin-script-runtime-2.1.0.jar"> <sha256 value="15a2b82119e9f145ea028029bd31166584648a419157c20948c124fa33d40e50" origin="Generated by Gradle"/> @@ -2237,6 +2487,14 @@ <sha256 value="f3332fc0f5e962f6aefe0a2c08d3c4d7ab35b13a05dac84c4bc6914e26ed27cd" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-script-runtime" version="2.3.20"> + <artifact name="kotlin-script-runtime-2.3.20.jar"> + <sha256 value="6fcdb7da6e65cf8cc43e5aabab94bdcc48825e7933686f8a1bf694eb88f8e00e" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-script-runtime-2.3.20.pom"> + <sha256 value="66099676703a081fd9ac43139665883e5c145020b640759de0539d8916ff247f" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-script-runtime" version="2.4.0"> <artifact name="kotlin-script-runtime-2.4.0.jar"> <sha256 value="196e8ecbf63daf477e34e67c2f871ee232ae7bf8b377432d876d1bbf9d273de3" origin="Generated by Gradle"/> @@ -2253,6 +2511,14 @@ <sha256 value="edcf0e2cd709646c4e5945be0f0a4920a0f3f417f328756746a29d92b23b1593" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-scripting-common" version="2.3.20"> + <artifact name="kotlin-scripting-common-2.3.20.jar"> + <sha256 value="b4c239d87b23be182f05bf57cf5e81f95d70bf7ef4a989eb98b73389c6ebc89f" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-scripting-common-2.3.20.pom"> + <sha256 value="87efef15ae118f13435263eb1097006460fba83969877e34b8a72f0e33c83ac9" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-scripting-common" version="2.4.10"> <artifact name="kotlin-scripting-common-2.4.10.jar"> <sha256 value="d5399982cdbf5994f7f3a731afacfbc5c21b797d97ffd7328b62cea670103076" origin="Generated by Gradle"/> @@ -2261,6 +2527,14 @@ <sha256 value="185636a91c18f09f8af87f87ea1788c2d55f72a6880210a0365a5a6a44d61833" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-scripting-compiler-embeddable" version="2.3.20"> + <artifact name="kotlin-scripting-compiler-embeddable-2.3.20.jar"> + <sha256 value="bd55f8f61bd41cec529656c2d47784bcba5ac260e94f4156c272c314966eef59" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-scripting-compiler-embeddable-2.3.20.pom"> + <sha256 value="d65f1868177dce4b8a92ffbdddb56b1731f9fbae88c8e730ed7bcb700cbbb28a" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-scripting-compiler-embeddable" version="2.4.10"> <artifact name="kotlin-scripting-compiler-embeddable-2.4.10.jar"> <sha256 value="156c68ff816251c9d297c90d77e7e8e513eaad594277cee50a36faeddbe88935" origin="Generated by Gradle"/> @@ -2269,6 +2543,14 @@ <sha256 value="07d9913a83317c28ca7704be0c109a1429a276236e43be8b98f87dbd4d02afad" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-scripting-compiler-impl-embeddable" version="2.3.20"> + <artifact name="kotlin-scripting-compiler-impl-embeddable-2.3.20.jar"> + <sha256 value="806fd63b3bcec5e6b5eeb1a0843d6ab094d55786a8465e474a2439295a1c0a25" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-scripting-compiler-impl-embeddable-2.3.20.pom"> + <sha256 value="c4a913a385f34e32a56f205df17a08dd4e117c306c57e5e47dc5d49523f0ebe1" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-scripting-compiler-impl-embeddable" version="2.4.10"> <artifact name="kotlin-scripting-compiler-impl-embeddable-2.4.10.jar"> <sha256 value="1dcfc5495d8c74966fcbbd39240a9c0f8ab36bb4faad2ea5ffc000c5d7785171" origin="Generated by Gradle"/> @@ -2277,6 +2559,14 @@ <sha256 value="a80b463dc4e3de57555c4e1b6e73658d40ac215b2788f4c193f56c91b3494ca9" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-scripting-jvm" version="2.3.20"> + <artifact name="kotlin-scripting-jvm-2.3.20.jar"> + <sha256 value="7047ce0353f49125c3c746792d4f76c3265d7b72fe62694b7eec075bba02528c" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-scripting-jvm-2.3.20.pom"> + <sha256 value="07c05ae2d1ece0ae1ed66010ed318d9cddcb3587046c633c186bd14ccf0461d5" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-scripting-jvm" version="2.4.10"> <artifact name="kotlin-scripting-jvm-2.4.10.jar"> <sha256 value="0b7518219da69b427e0b3f840f13e280db9e61a839c7d3ff094de4630ddbc9f5" origin="Generated by Gradle"/> @@ -2383,6 +2673,14 @@ <sha256 value="4682343e9b075e0adaf189fc1353e85c85dcc721afb1cec8c01b42f3968db882" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-tooling-core" version="2.3.20"> + <artifact name="kotlin-tooling-core-2.3.20.jar"> + <sha256 value="367142781299bc0f9120c1deec0e62934a1af9ea7f01aaa9c5a5354dc5d8d7d9" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-tooling-core-2.3.20.pom"> + <sha256 value="47e3aefd24b5be62d807b6cbcd79c55b83f94b55cfe18efdc6e33ce11bf190e4" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-tooling-core" version="2.4.10"> <artifact name="kotlin-tooling-core-2.4.10.jar"> <sha256 value="59ea305372e3a2b7417764dcfecf645066a0d9b1792ab40afd15c1cc8535b58a" origin="Generated by Gradle"/> @@ -2391,6 +2689,14 @@ <sha256 value="590248328a863d8f000ef063ac0ee8b4483f52d3e22fa51ca243ce7f6a78c75c" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-util-io" version="2.3.20"> + <artifact name="kotlin-util-io-2.3.20.jar"> + <sha256 value="0e76e7471e91c53ea68d2d24ef1f29fb592ac5fbb0d1d10faa916430eff3daca" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-util-io-2.3.20.pom"> + <sha256 value="95c28a828fc1f1e59e65638247a64f766d81d8b59f6d8debef2d18a0cc321f89" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-util-io" version="2.4.10"> <artifact name="kotlin-util-io-2.4.10.jar"> <sha256 value="06a9a0f89884c1c1a86baa96260238d927fb027077ba67bb5d2958af6fd776d7" origin="Generated by Gradle"/> @@ -2399,6 +2705,14 @@ <sha256 value="3c9ca43ebff84366e7ff28742b7475553619c5f0f8acc2d7a979a6f4b437c81a" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-util-klib" version="2.3.20"> + <artifact name="kotlin-util-klib-2.3.20.jar"> + <sha256 value="9562b8d3b7a04beba2b14c05671e713859ea54bbc0a2107e65b2bcf273fa8448" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-util-klib-2.3.20.pom"> + <sha256 value="5a584c3cc2ba3b41d1e5cd7e7a2083576c1b8c397a79bb8163676d8ef7b0ea17" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-util-klib" version="2.4.10"> <artifact name="kotlin-util-klib-2.4.10.jar"> <sha256 value="408d3bd16e0f513ac2f4f04a78871701924836081c2cc774aa2b3f739278e430" origin="Generated by Gradle"/> @@ -2407,6 +2721,14 @@ <sha256 value="631dbfefce3aefea1de3573d8dc1e54919be9af88c142505d3352127d84abb84" origin="Generated by Gradle"/> </artifact> </component> + <component group="org.jetbrains.kotlin" name="kotlin-util-klib-metadata" version="2.3.20"> + <artifact name="kotlin-util-klib-metadata-2.3.20.jar"> + <sha256 value="a8994e0bca6846dfb19f458c4cc15d7b13779ca1b0d9f34880b5ff2c2a2b73b3" origin="Generated by Gradle"/> + </artifact> + <artifact name="kotlin-util-klib-metadata-2.3.20.pom"> + <sha256 value="8f10291071aefabbd8e66ff9af7743a23881d69c6aaf28e13616cc0e95bd17b7" origin="Generated by Gradle"/> + </artifact> + </component> <component group="org.jetbrains.kotlin" name="kotlin-util-klib-metadata" version="2.4.10"> <artifact name="kotlin-util-klib-metadata-2.4.10.jar"> <sha256 value="f9b0cc33542c53d83004ab4aeff6f6515d509d26e14e78f420eeae2a459f4927" origin="Generated by Gradle"/>