diff --git a/skills/cuopt-developer/BENCHMARK.md b/skills/cuopt-developer/BENCHMARK.md index 03b7f4d39..98d25f627 100644 --- a/skills/cuopt-developer/BENCHMARK.md +++ b/skills/cuopt-developer/BENCHMARK.md @@ -7,7 +7,7 @@ This benchmark summarizes 3-Tier Evaluation from NVSkills-Eval results for the s ## Evaluation Summary - Skill: `cuopt-developer` -- Evaluation date: 2026-07-02 +- Evaluation date: 2026-07-10 - NVSkills-Eval profile: `external` - Environment: `astra-sandbox` - Dataset: 3 evaluation tasks @@ -55,10 +55,10 @@ Task composition is derived from the evaluation dataset when possible. Entries w | Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| | Security | 3 | 100% (+0%) | 100% (+0%) | -| Correctness | 3 | 75% (+20%) | 90% (+43%) | -| Discoverability | 3 | 42% (+25%) | 79% (+52%) | -| Effectiveness | 3 | 95% (+26%) | 78% (+35%) | -| Efficiency | 3 | 48% (+22%) | 77% (+35%) | +| Correctness | 3 | 75% (+18%) | 90% (+38%) | +| Discoverability | 3 | 42% (+25%) | 88% (+62%) | +| Effectiveness | 3 | 94% (+32%) | 90% (+36%) | +| Efficiency | 3 | 48% (+22%) | 89% (+49%) | Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available. diff --git a/skills/cuopt-developer/SKILL.md b/skills/cuopt-developer/SKILL.md index ecc1187e2..5028fb657 100644 --- a/skills/cuopt-developer/SKILL.md +++ b/skills/cuopt-developer/SKILL.md @@ -88,6 +88,13 @@ Is this correct?" `sudo`/system-level changes are the one non-negotiable refusal; user-space installs and conda env setup are allowed. See [Refusal Rules — Read First](#refusal-rules--read-first). +### 6. Prefer Low-Maintenance, Hard-to-Break Designs + +When adding an API — a setter, endpoint, parameter, or a layer that wraps another — favor the design that keeps a single source of truth and has no silent-failure path: + +- **Derive, don't duplicate.** A second copy of a surface (a hand-maintained list of the methods/fields another layer already defines, or shadow state kept in parallel with the real data) drifts the moment someone forgets to update it. Derive it from the single source instead, so there is nothing to keep in sync. +- **Fail loud, not silent.** Prefer a design where forgetting a step is caught automatically over one that quietly does the wrong thing. When a mechanism leans on a convention, add a test that asserts full coverage, so a case that slips the convention fails CI instead of silently misbehaving. + --- ## Before You Start: Required Questions diff --git a/skills/cuopt-developer/skill-card.md b/skills/cuopt-developer/skill-card.md index b39e79af3..2e897b014 100644 --- a/skills/cuopt-developer/skill-card.md +++ b/skills/cuopt-developer/skill-card.md @@ -9,14 +9,14 @@ NVIDIA
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers who modify, build, test, and contribute to the NVIDIA cuOpt GPU-accelerated optimization engine codebase.
+Developers and engineers contributing to the NVIDIA cuOpt codebase use this skill to navigate the build system, follow coding conventions, submit PRs with DCO sign-off, and debug solver internals across C++/CUDA, Python, and server components.
### Deployment Geography for Use:
Global
## Requirements / Dependencies:
-**Requires API Key or External Credential:** [Not Specified]
-**Credential Type(s):** [None identified]
+**Requires API Key or External Credential:** [Yes]
+**Credential Type(s):** [API key]
Do not include secrets in prompts/logs/output; use least-privilege credentials; rotate keys as appropriate.
@@ -25,32 +25,31 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [first_time_setup.md](references/first_time_setup.md)
- [build_and_test.md](references/build_and_test.md)
- [contributing.md](references/contributing.md)
- [conventions.md](references/conventions.md)
+- [first_time_setup.md](references/first_time_setup.md)
- [python_bindings.md](references/python_bindings.md)
- [troubleshooting.md](references/troubleshooting.md)
- [vrp_skills.md](references/vrp_skills.md)
-- [numerical_debugging.md](resources/numerical_debugging.md)
- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
- [cuopt-examples](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
-**Output Type(s):** [Shell commands, Code, Configuration instructions]
+**Output Type(s):** [Code, Shell commands, Configuration instructions, Analysis]
**Output Format:** [Markdown with inline code blocks]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
## Evaluation Agents Used:
-- `claude-code`
-- `codex`
+- claude-code
+- codex
## Evaluation Tasks:
-Evaluated against 3 evaluation tasks in the NVSkills-Eval external profile (astra-sandbox environment, 1 attempt per task, 50% pass threshold).
+Evaluated against 3 internal evaluation tasks (positive skill-activation cases).
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -75,13 +74,13 @@ Underlying evaluation signals used in this run:
| Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| | Security | 3 | 100% (+0%) | 100% (+0%) | -| Correctness | 3 | 75% (+20%) | 90% (+43%) | -| Discoverability | 3 | 42% (+25%) | 79% (+52%) | -| Effectiveness | 3 | 95% (+26%) | 78% (+35%) | -| Efficiency | 3 | 48% (+22%) | 77% (+35%) | +| Correctness | 3 | 75% (+18%) | 90% (+38%) | +| Discoverability | 3 | 42% (+25%) | 88% (+62%) | +| Effectiveness | 3 | 94% (+32%) | 90% (+36%) | +| Efficiency | 3 | 48% (+22%) | 89% (+49%) | ## Skill Version(s):
-26.08.00 (source: frontmatter)
+26.08.00 (source: frontmatter, pyproject.toml)
## Ethical Considerations:
NVIDIA believes Trustworthy AI is a shared responsibility and we have established policies and practices to enable development for a wide array of AI applications. When downloaded or used in accordance with our terms of service, developers should work with their internal team to ensure this skill meets requirements for the relevant industry and use case and addresses unforeseen product misuse.
diff --git a/skills/cuopt-developer/skill.oms.sig b/skills/cuopt-developer/skill.oms.sig index 00d9d360f..532d3243e 100644 --- a/skills/cuopt-developer/skill.oms.sig +++ b/skills/cuopt-developer/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":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtZGV2ZWxvcGVyIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjMzMWQ3YWMyMTFiNDdmNzg3YTg5MTU5ZjhkYTRiOWNiMDEwNGE5YTQ5MjE3MWM4Y2NlMTUzMTU3ZWRlNDk4MDciCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXQiLAogICAgICAgICIuZ2l0aWdub3JlIiwKICAgICAgICAiLmdpdGF0dHJpYnV0ZXMiCiAgICAgIF0KICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIyMjRiMTc1OWJmNDViYjc5MjU1NjM3NDMwZmQzMWRmMjk5ZDA1OGFiMjkwMzkzMGNkZjVmMWM1MWRjNmNlYjFjIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjkyYTNhZWY0Y2Y2MDc2NTZkNjY1MDg3YjY5ODI5NjYzZGNjYTJhNTE4YzE5YWRlYjVmNTIwMThmYmYyOTI5YTQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL2V2YWxzLmpzb24iLAogICAgICAgICJkaWdlc3QiOiAiMjFkNDVkY2QyMzNhMGMxOGM3NmI1MzIyOTAzMTY4ZGRmZWNjYWU5OWZjMWExMDliYTk2MDU3MDhlMTJhNDc5OSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiZGlnZXN0IjogIjBhYTcxYTM5NTc3MTUxYjU3NGQ2MDg4NTM5NzU5YmIzZTI2MzdlM2M5MTZmMWZmM2IyYWI3MTUzN2QwZTgyZmIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9idWlsZF9hbmRfdGVzdC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIwNmI1MWUyYmU3ODIzN2QzMjE3NGZiYTcwOGZkZGVmNzMyMGI1YzUzNzUwMTg1NTNmNGM5OTMzZWE1NTM5MzhhIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvY29udHJpYnV0aW5nLm1kIiwKICAgICAgICAiZGlnZXN0IjogImNhMmMwYWJkNjZlZmZjMGIzNjk1MmZiNzRlYmZiOWZmOWQzYmM5N2E5ZDUwNWQ3ZTI1YTA1M2VkOWEwMjg0NTEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9jb252ZW50aW9ucy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIxMjU5ZDAzMzFiNWU5ZTdlMjI5OWJmMjg4Y2U3MTM3Yzk3YzI5N2YxNjU0NzAwYTM1NjE4OTNiYjMxYmY5YzZlIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvZmlyc3RfdGltZV9zZXR1cC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlNWU1MDUxNzVmZTJmNjNlMTE0YmU3ZmUxOTkyN2I4NDIwZGM1ODdmM2Y2YTEyNjgxNmFmNWE2MDhmZDc2MzEzIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcHl0aG9uX2JpbmRpbmdzLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjZhNDM2MzgwMTdkMzU5MmUyNWI3YzY0YTBiNmFiZDAyNDQ2Y2NkZDI0MmI4YTRmZGQ3MmJkMDJiNGRiZjIyOTQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy90cm91Ymxlc2hvb3RpbmcubWQiLAogICAgICAgICJkaWdlc3QiOiAiOTJhZDZiZDFhMmM2NjhjMjhiYzZmNTBjY2M2NDlhNmE5NWE4YjcwODYxNThiZTBkNjg5MmJlOTU3MTdlM2E1NyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3ZycF9za2lsbHMubWQiLAogICAgICAgICJkaWdlc3QiOiAiOTlhMGZkZmY2YjQ2NDhiZmIwYmUyNmQ2ZTM3OWQ1MzlmMmJkMThmN2YzYzBkYWM5OGIxODI2MDNiYTliYThhZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZXNvdXJjZXMvbnVtZXJpY2FsX2RlYnVnZ2luZy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJkNTQ5NjFlZmY3Mjk4NTBjM2UxNzgwNjJmN2Y2NGU1MzJhOWM4OTUxMjNjZTFkYTFmNzYyNzU3NGY2MjMyNjgxIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJkaWdlc3QiOiAiMzJkMTVlNWFkM2Y1NDk4NzdkZDJkMzY3MzBlNjgwNzk3ZTcwNTEyYmI5YzIwOTUzZGMyZWU3MTFiZDE1YTA1MiIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMQCBBNocNrC4WzFneNrCWlxmZIddPgfFW1jh9QHUh+ykqCWSqybiUzMIUyygnBTwtUwCMExvoWFMjXEztVVPEyCYM+K/R7/zI05sMwJEJM9+rK72SIk/iTsVMOAeJ+R9gIoqQg==","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":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtZGV2ZWxvcGVyIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQ2NTE3YzQyNjNlN2E0NTNmYjI3NWIwOGU0ZWE3YjY1NjQxY2FjNTJiYmMwYmE3ZThkZDBiZTdmMWQ3MWZhM2UiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJyZXNvdXJjZXMiOiBbCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjcwYjFkOGU3NzQxMWI1ZjA3ZjJiZWIzZTE2MDU2MTQ4NzY3MjM4MzJkNzU2ZmZlMjQ4ZjE5MDBhY2Q5MTY4YjYiLAogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjRkNWQ4MGUyYWNkMWM2YWM5MjZlMzJiMmQ0NGEwNjA5ZTgyZTJjYzdmYjFiMmY3ZDNlNjRjMzk1MjdhNjYzMmEiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMjFkNDVkY2QyMzNhMGMxOGM3NmI1MzIyOTAzMTY4ZGRmZWNjYWU5OWZjMWExMDliYTk2MDU3MDhlMTJhNDc5OSIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL2V2YWxzLmpzb24iLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwYWE3MWEzOTU3NzE1MWI1NzRkNjA4ODUzOTc1OWJiM2UyNjM3ZTNjOTE2ZjFmZjNiMmFiNzE1MzdkMGU4MmZiIiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMDZiNTFlMmJlNzgyMzdkMzIxNzRmYmE3MDhmZGRlZjczMjBiNWM1Mzc1MDE4NTUzZjRjOTkzM2VhNTUzOTM4YSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9idWlsZF9hbmRfdGVzdC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImNhMmMwYWJkNjZlZmZjMGIzNjk1MmZiNzRlYmZiOWZmOWQzYmM5N2E5ZDUwNWQ3ZTI1YTA1M2VkOWEwMjg0NTEiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvY29udHJpYnV0aW5nLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMTI1OWQwMzMxYjVlOWU3ZTIyOTliZjI4OGNlNzEzN2M5N2MyOTdmMTY1NDcwMGEzNTYxODkzYmIzMWJmOWM2ZSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9jb252ZW50aW9ucy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImU1ZTUwNTE3NWZlMmY2M2UxMTRiZTdmZTE5OTI3Yjg0MjBkYzU4N2YzZjZhMTI2ODE2YWY1YTYwOGZkNzYzMTMiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvZmlyc3RfdGltZV9zZXR1cC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjZhNDM2MzgwMTdkMzU5MmUyNWI3YzY0YTBiNmFiZDAyNDQ2Y2NkZDI0MmI4YTRmZGQ3MmJkMDJiNGRiZjIyOTQiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcHl0aG9uX2JpbmRpbmdzLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiOTJhZDZiZDFhMmM2NjhjMjhiYzZmNTBjY2M2NDlhNmE5NWE4YjcwODYxNThiZTBkNjg5MmJlOTU3MTdlM2E1NyIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy90cm91Ymxlc2hvb3RpbmcubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI5OWEwZmRmZjZiNDY0OGJmYjBiZTI2ZDZlMzc5ZDUzOWYyYmQxOGY3ZjNjMGRhYzk4YjE4MjYwM2JhOWJhOGFkIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3ZycF9za2lsbHMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJkNTQ5NjFlZmY3Mjk4NTBjM2UxNzgwNjJmN2Y2NGU1MzJhOWM4OTUxMjNjZTFkYTFmNzYyNzU3NGY2MjMyNjgxIiwKICAgICAgICAibmFtZSI6ICJyZXNvdXJjZXMvbnVtZXJpY2FsX2RlYnVnZ2luZy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjA0YjkyMTVhZGQ5OTMwZmU2MmZiOGViYjc2ZTBhMDk2MTdhMjMzNWEzZjE5ZDJlMjA3ZWViYmQwOWNmYTIwMTIiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9CiAgICBdLAogICAgInNlcmlhbGl6YXRpb24iOiB7CiAgICAgICJtZXRob2QiOiAiZmlsZXMiLAogICAgICAiaWdub3JlX3BhdGhzIjogWwogICAgICAgICIuZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0aHViIiwKICAgICAgICAiLmdpdCIKICAgICAgXSwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZQogICAgfQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMQCWXYiyGETmca5/9e+PWKyj0Pv8WtXXLQ+1N4yvGHkLMHlMqm67ATwAXwkCoIxsJEMCMEEhdmimxfRrsotNW7ECDPyBs1ItxczE8J4mqUDTyWDjAHDmQ1nFfGdktWRnaGf+vg==","keyid":""}]}} \ No newline at end of file