diff --git a/skills/cuopt-numerical-optimization-api-c/BENCHMARK.md b/skills/cuopt-numerical-optimization-api-c/BENCHMARK.md
index 3282d70d64..146fb8606a 100644
--- a/skills/cuopt-numerical-optimization-api-c/BENCHMARK.md
+++ b/skills/cuopt-numerical-optimization-api-c/BENCHMARK.md
@@ -7,11 +7,11 @@ This benchmark summarizes 3-Tier Evaluation from NVSkills-Eval results for the s
## Evaluation Summary
- Skill: `cuopt-numerical-optimization-api-c`
-- Evaluation date: 2026-05-28
+- Evaluation date: 2026-06-10
- NVSkills-Eval profile: `external`
-- Environment: `local`
-- Dataset: 1 evaluation tasks
-- Attempts per task: 2
+- Environment: `astra-sandbox`
+- Dataset: 4 evaluation tasks
+- Attempts per task: 1
- Pass threshold: 50%
- Overall verdict: PASS
@@ -32,6 +32,7 @@ Reported benchmark dimensions:
Underlying evaluation signals used in this run:
+- `security` (Security): checks for unsafe operations, secret leakage, and unauthorized access.
- `skill_execution` (Skill Execution): verifies that the agent loaded the expected skill and workflow.
- `skill_efficiency` (Efficiency): checks routing quality, decoy avoidance, and redundant tool usage.
- `accuracy` (Accuracy): grades final-answer correctness against the reference answer.
@@ -41,9 +42,9 @@ Underlying evaluation signals used in this run:
## Test Tasks
-The benchmark dataset contained 1 evaluation tasks:
+The benchmark dataset contained 4 evaluation tasks:
-- Positive tasks: 1 tasks where the skill was expected to activate.
+- Positive tasks: 4 tasks where the skill was expected to activate.
- Negative tasks: 0 tasks where no skill was expected.
- Unlabeled tasks: 0 tasks where positive/negative intent could not be inferred.
@@ -53,17 +54,17 @@ Task composition is derived from the evaluation dataset when possible. Entries w
| Dimension | Num | `claude-code` | `codex` |
|---|---:|---:|---:|
-| Security | 2 | 100% (+0%) | 100% (+25%) |
-| Correctness | 2 | 100% (+0%) | 92% (-5%) |
-| Discoverability | 2 | 100% (+5%) | 80% (+8%) |
-| Effectiveness | 2 | 95% (-1%) | 92% (+9%) |
-| Efficiency | 2 | 93% (+13%) | 73% (+17%) |
+| Security | 4 | 100% (+0%) | 100% (+0%) |
+| Correctness | 4 | 88% (+16%) | 72% (+16%) |
+| Discoverability | 4 | 68% (+46%) | 55% (+36%) |
+| Effectiveness | 4 | 92% (+7%) | 70% (+17%) |
+| Efficiency | 4 | 66% (+48%) | 62% (+35%) |
Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available.
## Tier 1: Static Validation Summary
-Tier 1 validation passed with observations. NVSkills-Eval ran 9 checks and found 9 total findings.
+Tier 1 validation passed with observations. NVSkills-Eval ran 9 checks and found 7 total findings.
Top findings:
diff --git a/skills/cuopt-numerical-optimization-api-c/evals/evals.json b/skills/cuopt-numerical-optimization-api-c/evals/evals.json
index 9f9cecf974..a3ec9c4183 100644
--- a/skills/cuopt-numerical-optimization-api-c/evals/evals.json
+++ b/skills/cuopt-numerical-optimization-api-c/evals/evals.json
@@ -9,5 +9,46 @@
"Lists C API call sequence without writing a complete source file",
"Names cuOptCreateRangedProblem, cuOptSolve, cuOptGetObjectiveValue in order"
]
+ },
+ {
+ "id": "numopt-c-eval-002-parameter-function-wrong-name",
+ "question": "I am setting a time limit on my cuOpt C API solver with this call: cuOptSetIntParameter(settings, CUOPT_TIME_LIMIT, 60.0). My colleague says the function name is wrong. What is the correct function, and what other parameter-setting functions does the C API provide?",
+ "expected_skill": "cuopt-numerical-optimization-api-c",
+ "expected_script": null,
+ "ground_truth": "The function name cuOptSetIntParameter does not exist in the cuOpt C API — it is a common mistake. The correct function for float parameters (including CUOPT_TIME_LIMIT, tolerances) is cuOptSetFloatParameter. The C API provides three parameter-setting functions: cuOptSetFloatParameter for float params such as time limits and tolerances, cuOptSetIntegerParameter (not cuOptSetIntParameter) for integer params such as CUOPT_LOG_TO_CONSOLE and method selection, and cuOptSetParameter for string params. CUOPT_TIME_LIMIT is a float parameter so the correct call is cuOptSetFloatParameter(settings, CUOPT_TIME_LIMIT, 60.0).",
+ "expected_behavior": [
+ "Identifies cuOptSetIntParameter as a non-existent function — the correct name is cuOptSetIntegerParameter",
+ "States CUOPT_TIME_LIMIT is a float parameter requiring cuOptSetFloatParameter, not cuOptSetIntegerParameter",
+ "Names all three parameter functions: cuOptSetFloatParameter, cuOptSetIntegerParameter, cuOptSetParameter",
+ "Does not produce a full source file — answers the question about function names only"
+ ]
+ },
+ {
+ "id": "numopt-c-eval-003-csr-constraint-matrix",
+ "question": "I am building the constraint matrix for a cuOpt C LP. The problem has 2 constraints and 2 variables. Constraint 1: 3x1 + 4x2 <= 5.4. Constraint 2: 2.7x1 + 10.1x2 <= 4.9. Show me the row_offsets, col_indices, and values arrays for the CSR representation, and explain what each array means.",
+ "expected_skill": "cuopt-numerical-optimization-api-c",
+ "expected_script": null,
+ "ground_truth": "The CSR (Compressed Sparse Row) format uses three arrays. row_offsets has length num_constraints+1 = 3: {0, 2, 4}. Element i gives the starting index in col_indices/values for row i; the last element is the total number of nonzeros (4 here). col_indices = {0, 1, 0, 1}: the column index of each nonzero, ordered by row. values = {3.0, 4.0, 2.7, 10.1}: the nonzero values in the same order. Constraint upper bounds are {5.4, 4.9} and lower bounds are {-CUOPT_INFINITY, -CUOPT_INFINITY} since both constraints are <=. These arrays are passed to cuOptCreateRangedProblem.",
+ "expected_behavior": [
+ "Gives row_offsets = {0, 2, 4} and explains it as start indices per row plus total nnz at the end",
+ "Gives col_indices = {0, 1, 0, 1} matching the column of each nonzero by row",
+ "Gives values = {3.0, 4.0, 2.7, 10.1} in row-major order",
+ "Explains that constraint_lower_bounds should be -CUOPT_INFINITY for <= constraints",
+ "Names cuOptCreateRangedProblem as the function that receives these arrays"
+ ]
+ },
+ {
+ "id": "numopt-c-eval-004-qp-restrictions",
+ "question": "I want to solve a QP with integer variables using the cuOpt C API. A colleague says this is not supported. Is that correct, and what are the restrictions for QP in the cuOpt C API?",
+ "expected_skill": "cuopt-numerical-optimization-api-c",
+ "expected_script": null,
+ "ground_truth": "The colleague is correct — integer QP is not supported in the cuOpt C API. The QP restrictions are: (1) minimization only — CUOPT_MINIMIZE is required; to maximize a quadratic objective, negate all objective coefficients and Q matrix entries; (2) continuous variables only — all variables must use CUOPT_CONTINUOUS, integer variables are not supported for QP; (3) the Q matrix should be positive semi-definite (PSD) for a convex, well-posed problem. The same library, include paths, and build pattern as LP/MILP are used; only the problem-creation call differs for QP.",
+ "expected_behavior": [
+ "Confirms integer QP is not supported — all QP variables must be CUOPT_CONTINUOUS",
+ "States QP only supports CUOPT_MINIMIZE, not CUOPT_MAXIMIZE",
+ "Explains how to maximize: negate objective coefficients and Q entries",
+ "Mentions Q should be positive semi-definite (PSD) for a convex problem",
+ "Notes the same library/headers/build pattern as LP/MILP — only the problem creation call differs"
+ ]
}
]
diff --git a/skills/cuopt-numerical-optimization-api-c/skill-card.md b/skills/cuopt-numerical-optimization-api-c/skill-card.md
index a1230145ae..7e449513f6 100644
--- a/skills/cuopt-numerical-optimization-api-c/skill-card.md
+++ b/skills/cuopt-numerical-optimization-api-c/skill-card.md
@@ -9,7 +9,7 @@ NVIDIA
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers embedding linear programming, mixed-integer linear programming, or quadratic programming solvers in C/C++ applications using the NVIDIA cuOpt GPU-accelerated optimization library.
+Developers and engineers embedding LP, MILP, or QP numerical optimization into C/C++ applications using the NVIDIA cuOpt GPU-accelerated solver.
### Deployment Geography for Use:
Global
@@ -19,13 +19,13 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi
Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [examples.md](references/examples.md)
+- [C API Examples (LP/MILP)](references/examples.md)
- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
-- [cuopt-examples](https://github.com/NVIDIA/cuopt-examples)
+- [cuOpt Examples Repository](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
-**Output Type(s):** [Code, Shell commands, Configuration instructions]
+**Output Type(s):** [Code, Shell commands]
**Output Format:** [Markdown with inline C code blocks]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
@@ -37,7 +37,7 @@ Mitigation: Review and scan skill before deployment.
## Evaluation Tasks:
-Evaluated against 1 evaluation task (positive skill-activation case) with 2 attempts per task via NVSkills-Eval 3-Tier Evaluation.
+Evaluated against 4 internal evaluation tasks (positive skill-activation cases) via NVSkills-Eval with the external profile.
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -48,6 +48,7 @@ Reported benchmark dimensions:
- Efficiency: Checks whether the agent uses fewer tokens and avoids redundant work.
Underlying evaluation signals used in this run:
+- `security`: Checks for unsafe operations, secret leakage, and unauthorized access.
- `skill_execution`: Verifies that the agent loaded the expected skill and workflow.
- `skill_efficiency`: Checks routing quality, decoy avoidance, and redundant tool usage.
- `accuracy`: Grades final-answer correctness against the reference answer.
@@ -60,11 +61,11 @@ Underlying evaluation signals used in this run:
## Evaluation Results:
| Dimension | Num | `claude-code` | `codex` |
|---|---:|---:|---:|
-| Security | 2 | 100% (+0%) | 100% (+25%) |
-| Correctness | 2 | 100% (+0%) | 92% (-5%) |
-| Discoverability | 2 | 100% (+5%) | 80% (+8%) |
-| Effectiveness | 2 | 95% (-1%) | 92% (+9%) |
-| Efficiency | 2 | 93% (+13%) | 73% (+17%) |
+| Security | 4 | 100% (+0%) | 100% (+0%) |
+| Correctness | 4 | 88% (+16%) | 72% (+16%) |
+| Discoverability | 4 | 68% (+46%) | 55% (+36%) |
+| Effectiveness | 4 | 92% (+7%) | 70% (+17%) |
+| Efficiency | 4 | 66% (+48%) | 62% (+35%) |
## Skill Version(s):
26.08.00 (source: frontmatter)
diff --git a/skills/cuopt-numerical-optimization-api-c/skill.oms.sig b/skills/cuopt-numerical-optimization-api-c/skill.oms.sig
index fd8f469446..0b414e1616 100644
--- a/skills/cuopt-numerical-optimization-api-c/skill.oms.sig
+++ b/skills/cuopt-numerical-optimization-api-c/skill.oms.sig
@@ -1 +1 @@
-{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktYyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyMDkwYzU2ZWJlMTJiOWY4MWQyYWVjZTZhYzNiZTk2ODRiOTQ1YzVjNjVkMDJkN2Q4OGIzZTM4OTU0NjI2MjczIgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRodWIiLAogICAgICAgICIuZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgIi5naXRpZ25vcmUiCiAgICAgIF0sCiAgICAgICJtZXRob2QiOiAiZmlsZXMiLAogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlCiAgICB9LAogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjA1ZjlmNTBhZDY0YTNjNDk1YzIwZTAyNTY2Nzk2ZDA0M2YyZGFiYzU2MWUxMTg0ZmMwM2E5OTg1NjBmZmRjNGIiLAogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjljYjgwZWE4MGIwNWE0NTQ4YWMxNWE5MThhMTNiNzYyMmZiZmQ1YTI0N2QyMTRiZGMyMzVkMzg3MDM3YjRkNGMiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiODAwODA2NTNmNmI0ZjkwZjRhNDRmMTJmNjcwNWM3YjkzM2U2YmY1NTg2ZDcyMWQ1MzZhNDE3ZWEzMDk5Yjk5ZCIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImJhNGJjMzUwMjRjYjJlMmZlYTU3OTIyNGMyMWY3YjU2MTRiOWYxZTBlNDVlZjQxMGZkZmQ2YjJlYTk3MjRjMzYiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9iYXNpYy9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI2OGY0NTE4MzRjYTA5N2JmNDQyY2JjNTY3N2I0MzUxYWQ3NjU2MzU1NTBjN2FiOWZiNDhlNzM3OTRiZjkxYjg5IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfYmFzaWMvbHBfc2ltcGxlLmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICJiOWQzMGMwZjVmZDA5MDcxOWI2NzJkODlmM2YzNmI3YTRkZDAwY2UxZTA2YWY2NWRhMDdlOWE3ZmM3YjQ1MTc3IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfZHVhbHMvUkVBRE1FLm1kIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMGU5MDAyZWExOGZkNTQ5ZDM4NmMxMmQyYTBiMDE0YTBlZDA4ZTU0ZjE1NzU4OGI4ODkyMzNmMmIxNWVkNzIyZSIsCiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2R1YWxzL2xwX2R1YWxzLmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI4ZWIxOTM4MGI0OWM0MTAzNmJmMGUyZWQ0ZGMyYTkxYTllZjNiYzY5OWMwMDM2MmI4YjdlYTk4M2Q5YWNhZDQzIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfd2FybXN0YXJ0L1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImM4ZjlmMzBkNmJmNTk5NTVmZTIxMzM0OWU1M2M2YmE5YWM1NWZlNmUzOTg4YWYzZGE1ZjM0Y2NjZWFkYzMyYjUiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2Jhc2ljL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjQ2ZTBmNzRlOWU1ODIxNTgxYTU0OTExZGFmYzY1M2U3ZWExMzQ0MGM5ZDdiOWY2MmRjMmRkMDI2NDU3NzZhZTEiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX2Jhc2ljL21pbHBfc2ltcGxlLmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI0NmRkOWIzM2U4NmE4MTU2YjIyZjhjNjQ5NDRhYWMwODkxYWUxNjZkNGQ4M2Y2YTNmNjU0YTNlYzYxZmMxMDdjIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbWlscF9wcm9kdWN0aW9uX3BsYW5uaW5nL1JFQURNRS5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImY3MWRhODBlMDBiNDliYmFiZjYyZjcyN2ExZDlkNDhlZmIyZTE4NDIxZTgzM2YzYjZjNTMzYzViMmI4NmQzNjQiLAogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvbWlscF9wcm9kdWN0aW9uLmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI3NmQ2NTA2MzE5NjRjZjhiMmFkMzc5YTBjMjVhNjE3MzlkNWRjYjBkMjc0NjI3NmFiZGM2ODA1ZDc2ZWVlNGRjIiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9SRUFETUUubWQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICIzMGIzZjg3MTkxODE2MGU5YzFjNWU3NjBlMzllOWU1YTk3M2U1MWFhYWQwOTc5ODc2NWM4Y2E3NDE2NDFiYjA0IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9kYXRhL3NhbXBsZS5tcHMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI4MTc1ODdmMzBlNWE3MTNhMzI2NTEzZmIyNTAwYzA1YjkwMjU4MTQ3Y2YxNmMxOTQ0OTc0NDBiMDAyYmQxYTU4IiwKICAgICAgICAibmFtZSI6ICJhc3NldHMvbXBzX3NvbHZlci9tcHNfc29sdmVyLmMiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI0ZWM5MTZkZWRlYjNkNjAwOTU0OTYxNDZjNTk0ZmJlNTNjNTM2YzExMDE3MWE2MzAyMjRhNjBiYTU4MDZmYTE0IiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNDI4ZmQyOTkxOTI4NDM4ZmFiOTg2ZGRhOTc1ZDRiZGFhZTg5YTEzYTNjM2NkOWRlMjAyNTAwZTY2OGFjNGNlNCIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9leGFtcGxlcy5tZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImE1NTVmMDE4ODllNTRmZTE3MjE1YTE0MDE1NTA3OTJiN2RhZDIxMTM2YzE5OTVlZTA5MjJiMjI1ZDYyZWNmNDMiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiCiAgICAgIH0KICAgIF0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGQCMGS4IoqPuKUdpFcY3Zf7GUNus/TMrJtzG3/dbL4jUL88fthpb1GSaGQ/JzK23f6VhgIwQDqnXP95BkcY49ICvXQSnT2rLkIKaRQcay74PZVq0OgQrXNuzYhgkkx3tAfXsfoT","keyid":""}]}}
\ No newline at end of file
+{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1hcGktYyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmMDFkOWU2OWY1NWY0Y2Q3MTlkNDJkMjY3ZWFiMjg2MjY1ZmFlMDY5YjY4NTZhZTU1ZGY0MmJjYjQzY2UxYWQ3IgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgIm5hbWUiOiAiQkVOQ0hNQVJLLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICIxZGNiNTZkOGVlZTlhMTgxNDVkMGRjNTY1ZmZiNGQ3N2RmNTc5M2YyZDk1M2UxZjYyNTI3NmRhZmI5YmU2YzIyIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogIjA1MDBkOWI5ZWU3NGE5NTg1NDM4NDRkYzczMjRiODM3YmE4MDI5NDY5OTg4MDkyMmFkZjI1MWI1OTZlYzkwZTIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI4MDA4MDY1M2Y2YjRmOTBmNGE0NGYxMmY2NzA1YzdiOTMzZTZiZjU1ODZkNzIxZDUzNmE0MTdlYTMwOTliOTlkIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL2xwX2Jhc2ljL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiYmE0YmMzNTAyNGNiMmUyZmVhNTc5MjI0YzIxZjdiNTYxNGI5ZjFlMGU0NWVmNDEwZmRmZDZiMmVhOTcyNGMzNiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9iYXNpYy9scF9zaW1wbGUuYyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNjhmNDUxODM0Y2EwOTdiZjQ0MmNiYzU2NzdiNDM1MWFkNzY1NjM1NTUwYzdhYjlmYjQ4ZTczNzk0YmY5MWI4OSIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9scF9kdWFscy9SRUFETUUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImI5ZDMwYzBmNWZkMDkwNzE5YjY3MmQ4OWYzZjM2YjdhNGRkMDBjZTFlMDZhZjY1ZGEwN2U5YTdmYzdiNDUxNzciCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJhc3NldHMvbHBfZHVhbHMvbHBfZHVhbHMuYyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMGU5MDAyZWExOGZkNTQ5ZDM4NmMxMmQyYTBiMDE0YTBlZDA4ZTU0ZjE1NzU4OGI4ODkyMzNmMmIxNWVkNzIyZSIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9scF93YXJtc3RhcnQvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI4ZWIxOTM4MGI0OWM0MTAzNmJmMGUyZWQ0ZGMyYTkxYTllZjNiYzY5OWMwMDM2MmI4YjdlYTk4M2Q5YWNhZDQzIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICJjOGY5ZjMwZDZiZjU5OTU1ZmUyMTMzNDllNTNjNmJhOWFjNTVmZTZlMzk4OGFmM2RhNWYzNGNjY2VhZGMzMmI1IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfYmFzaWMvbWlscF9zaW1wbGUuYyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNDZlMGY3NGU5ZTU4MjE1ODFhNTQ5MTFkYWZjNjUzZTdlYTEzNDQwYzlkN2I5ZjYyZGMyZGQwMjY0NTc3NmFlMSIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9taWxwX3Byb2R1Y3Rpb25fcGxhbm5pbmcvUkVBRE1FLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI0NmRkOWIzM2U4NmE4MTU2YjIyZjhjNjQ5NDRhYWMwODkxYWUxNjZkNGQ4M2Y2YTNmNjU0YTNlYzYxZmMxMDdjIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiYXNzZXRzL21pbHBfcHJvZHVjdGlvbl9wbGFubmluZy9taWxwX3Byb2R1Y3Rpb24uYyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiZjcxZGE4MGUwMGI0OWJiYWJmNjJmNzI3YTFkOWQ0OGVmYjJlMTg0MjFlODMzZjNiNmM1MzNjNWIyYjg2ZDM2NCIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL1JFQURNRS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNzZkNjUwNjMxOTY0Y2Y4YjJhZDM3OWEwYzI1YTYxNzM5ZDVkY2IwZDI3NDYyNzZhYmRjNjgwNWQ3NmVlZTRkYyIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL2RhdGEvc2FtcGxlLm1wcyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiMzBiM2Y4NzE5MTgxNjBlOWMxYzVlNzYwZTM5ZTllNWE5NzNlNTFhYWFkMDk3OTg3NjVjOGNhNzQxNjQxYmIwNCIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImFzc2V0cy9tcHNfc29sdmVyL21wc19zb2x2ZXIuYyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiODE3NTg3ZjMwZTVhNzEzYTMyNjUxM2ZiMjUwMGMwNWI5MDI1ODE0N2NmMTZjMTk0NDk3NDQwYjAwMmJkMWE1OCIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImV2YWxzL2V2YWxzLmpzb24iLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImRiZDcxYjk2ZmI1ZDY0YjFkM2M4ZjY1N2NlOTAzNDU3NjA0OWFjYTllYzlhYWU2ZWEyNzZlNmNiZmE4OGNjMmQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL2V4YW1wbGVzLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI0MjhmZDI5OTE5Mjg0MzhmYWI5ODZkZGE5NzVkNGJkYWFlODlhMTNhM2MzY2Q5ZGUyMDI1MDBlNjY4YWM0Y2U0IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNTI4MDNkNDk5NGFmOWFhMDZhMTgyN2RmYjAxNDM3ZWIyMmM0MWNkZGQ4NTJiZDIxNmVjMDczMWIxZGRhZTUwZSIKICAgICAgfQogICAgXSwKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgIm1ldGhvZCI6ICJmaWxlcyIsCiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRodWIiLAogICAgICAgICIuZ2l0aWdub3JlIiwKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIgogICAgICBdLAogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIKICAgIH0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGQCMH1vZ0CgVwUPIs2gCy9sDaorEIYjDJxo5tXKjq4PjIwRNSZuROwvK0pM0gZoNNauJQIwCKh0w80OspNbSkK1khgcPtdGEksCSaRuaRzji3BZDF1Y4uQHUYKqZm9sbCyfh1qd","keyid":""}]}}
\ No newline at end of file