feat(contracts): add versioned multi-runtime judging contracts

This commit is contained in:
2026-10-09 14:15:24 +08:00
parent 81f8dc3204
commit a5a7e40308
76 changed files with 8407 additions and 13 deletions
+10
View File
@@ -7,6 +7,7 @@ from pathlib import Path
from kf_oj.api.app import create_app from kf_oj.api.app import create_app
from kf_oj.contracts.judge import JudgeTaskNotification from kf_oj.contracts.judge import JudgeTaskNotification
from kf_oj.contracts.judging import WIRE_MODELS from kf_oj.contracts.judging import WIRE_MODELS
from kf_oj.contracts.judging_v2 import WIRE_MODELS as WIRE_MODELS_V2
from kf_oj.core.settings import Settings from kf_oj.core.settings import Settings
@@ -33,6 +34,15 @@ def main() -> None:
"budgets, result consistency, UUID canonical form and UTF-8 byte limits." "budgets, result consistency, UUID canonical form and UTF-8 byte limits."
) )
outputs[root / f"contracts/schemas/{name}.v1.schema.json"] = document outputs[root / f"contracts/schemas/{name}.v1.schema.json"] = document
for name, model in WIRE_MODELS_V2.items():
document = model.model_json_schema()
document["$schema"] = "https://json-schema.org/draft/2020-12/schema"
document["$id"] = f"urn:kf-oj:{name}:v2"
document["$comment"] = (
"Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup "
"and node budgets, canonical bounded class sets and result consistency."
)
outputs[root / f"contracts/schemas/{name}.v2.schema.json"] = document
stale = [] stale = []
for path, document in outputs.items(): for path, document in outputs.items():
content = json.dumps(document, indent=2, sort_keys=True, ensure_ascii=False) + "\n" content = json.dumps(document, indent=2, sort_keys=True, ensure_ascii=False) + "\n"
+1 -1
View File
@@ -375,7 +375,7 @@ WIRE_MODELS = {
} }
def decode_wire[T: WireModel](model: type[T], payload: bytes) -> T: def decode_wire[T: BaseModel](model: type[T], payload: bytes) -> T:
"""UTF-8, bounded size and no ambiguous duplicate members before model validation.""" """UTF-8, bounded size and no ambiguous duplicate members before model validation."""
if len(payload) > MAX_WIRE_BYTES: if len(payload) > MAX_WIRE_BYTES:
raise ValueError("wire payload exceeds byte budget") raise ValueError("wire payload exceeds byte budget")
+312
View File
@@ -0,0 +1,312 @@
"""Explicit multi-runtime protocol; existing v1 snapshots remain byte-for-byte stable."""
import re
from enum import StrEnum
from typing import Annotated, Literal, Self
from pydantic import BeforeValidator, Field, model_validator
from kf_oj.contracts import judging as v1
Version = Annotated[Literal[2], BeforeValidator(v1.integer_version)]
MAX_CLASS_FILES = 256
JVM_NATIVE_RESERVE_BYTES = 160 * v1.MIB
JVM_THREAD_STACK_BYTES = 256 * 1024
class Language(StrEnum):
C17 = "c17"
CPP20 = "cpp20"
PYTHON313 = "python313"
JAVA21 = "java21"
class PreparationKind(StrEnum):
COMPILE = "compile"
SYNTAX_CHECK = "syntax_check"
class ProgramKind(StrEnum):
NATIVE = "native_executable"
PYTHON = "python_source"
JAVA = "java_classes"
class RuntimeIdentity(v1.WireModel):
"""An exact identity matched against trusted configuration, never a host path."""
toolchain_id: v1.Label
image_kind: Literal[
"linux_gnu_cxx_x86_64_v1", "linux_cpython313_x86_64_v1", "linux_openjdk21_x86_64_v1"
]
image_revision: Annotated[int, Field(strict=True, ge=1, le=(1 << 32) - 1)]
image_digest: v1.Digest
runtime_version: Annotated[
str, Field(strict=True, pattern=r"^[A-Za-z0-9][A-Za-z0-9_.+-]{0,63}$")
]
def runtime_contract(language: Language) -> tuple[str, str, str, ProgramKind, PreparationKind]:
"""Fixed source/profile names. Runtime callers cannot introduce argv or paths."""
return {
Language.C17: (
"main.c",
"compile_c",
"native",
ProgramKind.NATIVE,
PreparationKind.COMPILE,
),
Language.CPP20: (
"main.cpp",
"compile_cpp",
"native",
ProgramKind.NATIVE,
PreparationKind.COMPILE,
),
Language.PYTHON313: (
"main.py",
"python_check",
"python_run",
ProgramKind.PYTHON,
PreparationKind.SYNTAX_CHECK,
),
Language.JAVA21: (
"Main.java",
"java_compile",
"java_run",
ProgramKind.JAVA,
PreparationKind.COMPILE,
),
}[language]
def validate_runtime(language: Language, identity: RuntimeIdentity) -> None:
expected = {
Language.C17: ("gnu-cxx-v1", "linux_gnu_cxx_x86_64_v1"),
Language.CPP20: ("gnu-cxx-v1", "linux_gnu_cxx_x86_64_v1"),
Language.PYTHON313: ("cpython313-v1", "linux_cpython313_x86_64_v1"),
Language.JAVA21: ("openjdk21-v1", "linux_openjdk21_x86_64_v1"),
}[language]
if (identity.toolchain_id, identity.image_kind) != expected:
raise ValueError("runtime family differs from language contract")
if language == Language.PYTHON313 and identity.runtime_version != "3.13.16":
raise ValueError("unsupported CPython version")
if language == Language.JAVA21 and not re.fullmatch(
r"21\.[0-9]+\.[0-9]+(?:\.[0-9]+)?\+[1-9][0-9]*(?:-LTS)?", identity.runtime_version
):
raise ValueError("JDK version must identify a fixed Java 21 build")
def validate_startup_budget(language: Language, limits: v1.RunLimits, *, preparing: bool) -> None:
"""Admission floors, not multipliers on problem limits; real execution still required."""
if language == Language.PYTHON313:
floor = (10_000, 50_000, 32 * v1.MIB, 1, 16)
elif language == Language.JAVA21:
floor = (
(1_000_000, 3_000_000, 384 * v1.MIB, 16, 32)
if preparing
else (200_000, 1_000_000, 256 * v1.MIB, 16, 32)
)
else:
return
actual = (
limits.cpu_time_us,
limits.wall_time_us,
limits.memory_bytes,
limits.processes,
limits.open_files,
)
if any(value < minimum for value, minimum in zip(actual, floor, strict=True)):
raise ValueError("budget below runtime startup policy")
if language == Language.JAVA21:
jvm_heap_bytes(limits)
def jvm_heap_bytes(limits: v1.RunLimits) -> int:
"""Reserve capped metaspace/code/native and every allowed thread stack inside cgroup."""
reserve = JVM_NATIVE_RESERVE_BYTES + limits.processes * JVM_THREAD_STACK_BYTES
heap = (limits.memory_bytes - reserve) // v1.MIB * v1.MIB
if heap < 32 * v1.MIB or limits.stack_bytes < JVM_THREAD_STACK_BYTES:
raise ValueError("budget cannot cover JVM heap and explicit non-heap reserve")
return heap
class LanguageConfiguration(v1.WireModel):
language: Language
toolchain: RuntimeIdentity
compile_limits: v1.RunLimits
run_limits: v1.RunLimits
job_wall_time_us: Annotated[int, Field(strict=True, ge=1000, le=v1.MAX_JOB_WALL_US)]
@model_validator(mode="after")
def runtime_and_budget(self) -> Self:
validate_runtime(self.language, self.toolchain)
validate_startup_budget(self.language, self.compile_limits, preparing=True)
validate_startup_budget(self.language, self.run_limits, preparing=False)
if self.compile_limits.wall_time_us + self.run_limits.wall_time_us > self.job_wall_time_us:
raise ValueError("job deadline cannot cover preparation and execution")
return self
class JobManifest(v1.JobManifest):
schema_version: Version
language: Language
toolchain: RuntimeIdentity
@model_validator(mode="after")
def runtime_and_budget(self) -> Self:
validate_runtime(self.language, self.toolchain)
validate_startup_budget(self.language, self.compile_limits, preparing=True)
validate_startup_budget(self.language, self.run_limits, preparing=False)
return self
class ProgramFile(v1.WireModel):
path: Annotated[str, Field(strict=True, min_length=1, max_length=128)]
artifact: v1.ArtifactReference
class CompiledProgram(v1.WireModel):
"""Sealed file identities bound to a particular source, runtime and lease attempt."""
kind: ProgramKind
binding: v1.LeaseBinding
source: v1.ArtifactReference
toolchain: RuntimeIdentity
files: Annotated[tuple[ProgramFile, ...], Field(min_length=1, max_length=MAX_CLASS_FILES)]
@property
def bytes(self) -> int:
return sum(file.artifact.bytes for file in self.files)
@model_validator(mode="after")
def bounded_files(self) -> Self:
names = [file.path for file in self.files]
if names != sorted(set(names)):
raise ValueError("program files must have unique canonical order")
if not 1 <= self.source.bytes <= v1.MAX_SOURCE_BYTES:
raise ValueError("program source outside policy")
if self.bytes > v1.MAX_PACKAGE_BYTES or any(
file.artifact.bytes == 0 for file in self.files
):
raise ValueError("program files empty or outside byte policy")
if self.kind == ProgramKind.NATIVE:
validate_runtime(Language.C17, self.toolchain)
if names != ["main"] or self.toolchain.image_kind != "linux_gnu_cxx_x86_64_v1":
raise ValueError("native program requires its fixed executable and runtime")
elif self.kind == ProgramKind.PYTHON:
validate_runtime(Language.PYTHON313, self.toolchain)
if names != ["main.py"] or self.files[0].artifact != self.source:
raise ValueError("Python program must be the exact checked source")
else:
validate_runtime(Language.JAVA21, self.toolchain)
if "Main.class" not in names or any(
not re.fullmatch(r"[A-Za-z_$][A-Za-z0-9_$]*\.class", name) for name in names
):
raise ValueError("Java requires a bounded default-package Main class set")
return self
class CompilationReport(v1.CompilationReport):
program: CompiledProgram | None
class JudgementReport(v1.JudgementReport):
schema_version: Version
compilation: CompilationReport
@model_validator(mode="after")
def program_attempt(self) -> Self:
if (
self.compilation.program is not None
and self.compilation.program.binding != self.binding
):
raise ValueError("program belongs to another attempt")
return self
def validate_for_manifest(self, manifest: JobManifest, digest: str) -> None:
super().validate_for_manifest(manifest, digest)
program = self.compilation.program
if program is not None and (
program.source != manifest.source
or program.toolchain != manifest.toolchain
or program.kind != runtime_contract(manifest.language)[3]
):
raise ValueError("program differs from authorized source or runtime")
class LeaseGrant(v1.LeaseGrant):
schema_version: Version
class StageReport(v1.StageReport):
schema_version: Version
preparation_kind: PreparationKind
def validate_for_manifest(self, manifest: JobManifest) -> None:
if self.binding.evaluation_id != manifest.evaluation_id or (
self.preparation_kind != runtime_contract(manifest.language)[4]
):
raise ValueError("stage differs from authorized language preparation")
class StoppedReport(v1.StoppedReport):
schema_version: Version
class RuntimeCapability(v1.WireModel):
language: Language
toolchain: RuntimeIdentity
compile_ceiling: v1.RunLimits
run_ceiling: v1.RunLimits
@model_validator(mode="after")
def runtime_and_budget(self) -> Self:
validate_runtime(self.language, self.toolchain)
validate_startup_budget(self.language, self.compile_ceiling, preparing=True)
validate_startup_budget(self.language, self.run_ceiling, preparing=False)
return self
class AdmissionPolicy(v1.WireModel):
schema_version: Version
max_concurrent_jobs: Annotated[int, Field(strict=True, ge=1, le=64)] = 1
prefetch: Annotated[int, Field(strict=True, ge=1, le=64)] = 1
max_retries: Annotated[int, Field(strict=True, ge=0, le=4)] = 2
max_job_wall_time_us: Annotated[int, Field(strict=True, ge=1000, le=v1.MAX_JOB_WALL_US)]
max_package_bytes: Annotated[int, Field(strict=True, ge=1, le=v1.MAX_PACKAGE_BYTES)]
capabilities: Annotated[tuple[RuntimeCapability, ...], Field(min_length=1, max_length=4)]
@model_validator(mode="after")
def consistent(self) -> Self:
if self.prefetch > self.max_concurrent_jobs:
raise ValueError("prefetch exceeds available job slots")
if len({cap.language for cap in self.capabilities}) != len(self.capabilities):
raise ValueError("duplicate language capability")
return self
def admit(self, manifest: JobManifest, attempt_number: int) -> None:
# Revalidate constructed/copied values as well as transport-decoded models.
manifest = JobManifest.model_validate(manifest.model_dump(mode="json"))
AdmissionPolicy.model_validate(self.model_dump(mode="json"))
if type(attempt_number) is not int or not 1 <= attempt_number <= self.max_retries + 1:
raise ValueError("attempt retry budget exhausted")
cap = next((cap for cap in self.capabilities if cap.language == manifest.language), None)
if cap is None or (
cap.toolchain != manifest.toolchain
or not manifest.compile_limits.fits(cap.compile_ceiling)
or not manifest.run_limits.fits(cap.run_ceiling)
or manifest.job_wall_time_us > self.max_job_wall_time_us
or manifest.package_bytes() > self.max_package_bytes
):
raise ValueError("job exceeds trusted runtime capability or budget")
WIRE_MODELS = {
"judge-manifest": JobManifest,
"judge-lease": LeaseGrant,
"judge-stage": StageReport,
"judge-result": JudgementReport,
"judge-admission": AdmissionPolicy,
"judge-stopped": StoppedReport,
}
@@ -0,0 +1,35 @@
"""Version dispatch at storage/transport boundaries; never rewrite legacy snapshots."""
from pydantic import ConfigDict, RootModel
from kf_oj.contracts import judging as v1
from kf_oj.contracts import judging_v2 as v2
Manifest = v1.JobManifest | v2.JobManifest
Report = v1.JudgementReport | v2.JudgementReport
class ManifestEnvelope(RootModel[Manifest]):
model_config = ConfigDict(frozen=True)
class ReportEnvelope(RootModel[Report]):
model_config = ConfigDict(frozen=True)
def decode_manifest(payload: bytes) -> Manifest:
return v1.decode_wire(ManifestEnvelope, payload).root
def decode_report(payload: bytes) -> Report:
return v1.decode_wire(ReportEnvelope, payload).root
def manifest_bytes(manifest: Manifest) -> bytes:
return v1.manifest_bytes(manifest)
def validate_report(report: Report, manifest: Manifest, digest: str) -> None:
if report.schema_version != manifest.schema_version:
raise ValueError("report protocol differs from authorized manifest")
report.validate_for_manifest(manifest, digest)
@@ -1,11 +1,13 @@
import base64 import base64
import json
from datetime import datetime from datetime import datetime
from uuid import UUID from uuid import UUID
from sqlalchemy import select, tuple_ from sqlalchemy import select, tuple_
from sqlalchemy.ext.asyncio import async_sessionmaker from sqlalchemy.ext.asyncio import async_sessionmaker
from kf_oj.contracts.judging import MAX_SOURCE_BYTES, ArtifactReference, JudgementReport from kf_oj.contracts.judging import MAX_SOURCE_BYTES, ArtifactReference
from kf_oj.contracts.judging_versions import decode_report
from kf_oj.contracts.submissions import ( from kf_oj.contracts.submissions import (
CancellationAccepted, CancellationAccepted,
PublicCaseResult, PublicCaseResult,
@@ -115,7 +117,11 @@ class SubmissionQueries:
if evaluation.state in {"finished", "failed", "cancelled"} and evaluation.final_report: if evaluation.state in {"finished", "failed", "cancelled"} and evaluation.final_report:
# A single joined snapshot, strict validation and explicit projection prevent leaking # A single joined snapshot, strict validation and explicit projection prevent leaking
# internal bindings, artifacts, hidden case identifiers or partial attempt reports. # internal bindings, artifacts, hidden case identifiers or partial attempt reports.
report = JudgementReport.model_validate(evaluation.final_report) report = decode_report(
json.dumps(
evaluation.final_report, ensure_ascii=False, separators=(",", ":")
).encode()
)
if str(report.binding.evaluation_id) != str(evaluation.id): if str(report.binding.evaluation_id) != str(evaluation.id):
raise ValueError("stored result binding invalid") raise ValueError("stored result binding invalid")
if report.verdict.value != evaluation.verdict: if report.verdict.value != evaluation.verdict:
@@ -7,10 +7,10 @@ from contextlib import asynccontextmanager
from sqlalchemy.ext.asyncio import async_sessionmaker from sqlalchemy.ext.asyncio import async_sessionmaker
from kf_oj.contracts.judging import ( from kf_oj.contracts.judging import LeaseBinding
JobManifest, from kf_oj.contracts.judging_versions import (
LeaseBinding, Manifest,
decode_wire, decode_manifest,
manifest_bytes, manifest_bytes,
) )
from kf_oj.infra.artifacts.repository import ArtifactRepository from kf_oj.infra.artifacts.repository import ArtifactRepository
@@ -40,7 +40,7 @@ class WorkerAccess:
raise WorkerAccessDenied("worker grant rejected") raise WorkerAccessDenied("worker grant rejected")
return hashlib.sha256(token.encode("ascii")).hexdigest() return hashlib.sha256(token.encode("ascii")).hexdigest()
async def _manifest(self, session, binding: LeaseBinding, token: str) -> JobManifest: async def _manifest(self, session, binding: LeaseBinding, token: str) -> Manifest:
row = await repository.leased_submission(session, binding, self._token_hash(token)) row = await repository.leased_submission(session, binding, self._token_hash(token))
if row is None: if row is None:
raise WorkerAccessDenied("worker grant rejected") raise WorkerAccessDenied("worker grant rejected")
@@ -49,7 +49,7 @@ class WorkerAccess:
# runtime roles; use canonical bytes for both retrieval and digest verification. # runtime roles; use canonical bytes for both retrieval and digest verification.
try: try:
manifest = decode_wire(JobManifest, json.dumps(attempt.manifest).encode()) manifest = decode_manifest(json.dumps(attempt.manifest).encode())
if ( if (
manifest.evaluation_id != evaluation.id manifest.evaluation_id != evaluation.id
or manifest.submission_id != submission.id or manifest.submission_id != submission.id
+186
View File
@@ -0,0 +1,186 @@
import hashlib
import json
from pathlib import Path
import pytest
from jsonschema import Draft202012Validator, FormatChecker
from kf_oj.contracts import judging as v1
from kf_oj.contracts import judging_v2 as v2
from kf_oj.contracts import judging_versions as versions
ROOT = Path(__file__).resolve().parents[2]
FIXTURES = ROOT / "tests/fixtures/contracts-v2"
PATHS = sorted(FIXTURES.glob("*.json"))
def fixture(name, model):
return v1.decode_wire(model, (FIXTURES / f"{name}.json").read_bytes())
@pytest.mark.parametrize("path", PATHS, ids=lambda p: p.stem)
def test_multi_runtime_examples_match_schema_and_rust(path):
name = path.name.split(".")[0]
model = v2.WIRE_MODELS[name]
schema = json.loads((ROOT / f"contracts/schemas/{name}.v2.schema.json").read_text())
validator = Draft202012Validator(schema, format_checker=FormatChecker())
original = json.loads(path.read_text())
if ".invalid-" in path.name:
with pytest.raises(ValueError):
v1.decode_wire(model, path.read_bytes())
if ".invalid-semantic-" in path.name:
assert validator.is_valid(original)
else:
assert not validator.is_valid(original)
else:
value = v1.decode_wire(model, path.read_bytes())
validator.validate(original)
assert value.model_dump(mode="json") == original
@pytest.mark.parametrize("language", list(v2.Language))
def test_explicit_version_keeps_old_consumers_closed_and_canonical_bytes_stable(language):
path = FIXTURES / f"judge-manifest.valid-{language}.json"
manifest = v1.decode_wire(v2.JobManifest, path.read_bytes())
canonical = (FIXTURES / f"canonical-manifest.{language}.txt").read_bytes()
assert v1.manifest_bytes(manifest) == canonical
assert (
hashlib.sha256(v1.manifest_bytes(manifest)).digest() == hashlib.sha256(canonical).digest()
)
with pytest.raises(ValueError):
v1.decode_wire(v1.JobManifest, path.read_bytes())
old = ROOT / "tests/fixtures/contracts/judge-manifest.valid.json"
with pytest.raises(ValueError):
v1.decode_wire(v2.JobManifest, old.read_bytes())
old_manifest = v1.decode_wire(v1.JobManifest, old.read_bytes())
assert (
v1.manifest_bytes(old_manifest)
== (ROOT / "tests/fixtures/contracts/canonical-manifest.v1.txt").read_bytes()
)
def test_shared_capabilities_refuse_absent_changed_runtime_and_over_budget():
policy = fixture("judge-admission.valid", v2.AdmissionPolicy)
for language in v2.Language:
manifest = fixture(f"judge-manifest.valid-{language}", v2.JobManifest)
for attempt in (1, 2, 3):
policy.admit(manifest, attempt)
for attempt in (0, 4, True):
with pytest.raises(ValueError):
policy.admit(manifest, attempt)
for field, value in (("image_revision", 2), ("image_digest", "f" * 64)):
other = manifest.model_copy(
update={"toolchain": manifest.toolchain.model_copy(update={field: value})}
)
with pytest.raises(ValueError):
policy.admit(other, 1)
python = fixture("judge-manifest.valid-python313", v2.JobManifest)
without_python = policy.model_copy(
update={
"capabilities": tuple(c for c in policy.capabilities if c.language != python.language)
}
)
with pytest.raises(ValueError):
without_python.admit(python, 1)
too_small = python.model_copy(
update={"run_limits": python.run_limits.model_copy(update={"memory_bytes": 1})}
)
with pytest.raises(ValueError):
policy.admit(too_small, 1)
too_large = python.model_copy(
update={"run_limits": python.run_limits.model_copy(update={"memory_bytes": 128 * v1.MIB})}
)
with pytest.raises(ValueError):
policy.admit(too_large, 1)
@pytest.mark.parametrize("language", list(v2.Language))
def test_results_bind_exact_source_runtime_attempt_and_case_order(language):
manifest = fixture(f"judge-manifest.valid-{language}", v2.JobManifest)
result = fixture(f"judge-result.valid-{language}", v2.JudgementReport)
result.validate_for_manifest(manifest, result.manifest_digest)
for field, value in (("digest", "f" * 64), ("bytes", manifest.source.bytes + 1)):
other = manifest.model_copy(
update={"source": manifest.source.model_copy(update={field: value})}
)
with pytest.raises(ValueError):
result.validate_for_manifest(other, result.manifest_digest)
with pytest.raises(ValueError):
result.validate_for_manifest(manifest, "f" * 64)
changed_runtime = manifest.model_copy(
update={"toolchain": manifest.toolchain.model_copy(update={"image_digest": "e" * 64})}
)
with pytest.raises(ValueError):
result.validate_for_manifest(changed_runtime, result.manifest_digest)
short = result.model_dump(mode="json")
short.update(cases=short["cases"][:1], run_cpu_time_us=100, run_memory_peak_bytes=256 * 1024)
valid_partial = v2.JudgementReport.model_validate(short)
with pytest.raises(ValueError):
valid_partial.validate_for_manifest(manifest, result.manifest_digest)
def test_python_check_is_not_an_accepted_result_and_stage_kind_is_bound():
manifest = fixture("judge-manifest.valid-python313", v2.JobManifest)
stage = fixture("judge-stage.valid-python313", v2.StageReport)
stage.validate_for_manifest(manifest)
with pytest.raises(ValueError):
stage.model_copy(
update={"preparation_kind": v2.PreparationKind.COMPILE}
).validate_for_manifest(manifest)
result = fixture("judge-result.valid-python313", v2.JudgementReport).model_dump(mode="json")
result.update(cases=[], run_cpu_time_us=None, run_memory_peak_bytes=None)
with pytest.raises(ValueError):
v2.JudgementReport.model_validate(result)
def test_jvm_heap_is_smaller_than_total_memory_and_threads_share_the_budget():
manifest = fixture("judge-manifest.valid-java21", v2.JobManifest)
limits = manifest.run_limits
assert 32 * v1.MIB <= v2.jvm_heap_bytes(limits) < limits.memory_bytes
more_threads = limits.model_copy(update={"processes": 32})
assert v2.jvm_heap_bytes(more_threads) < v2.jvm_heap_bytes(limits)
with pytest.raises(ValueError):
v2.jvm_heap_bytes(limits.model_copy(update={"memory_bytes": 128 * v1.MIB}))
# Ordinary RuntimeError has no infrastructure failure code or trusted memory-limit claim.
result = fixture("judge-result.valid-java21", v2.JudgementReport).model_dump(mode="json")
result["cases"][0]["verdict"] = "runtime_error"
result["verdict"] = "runtime_error"
v2.JudgementReport.model_validate(result)
def test_v2_wire_rejects_ambiguous_private_values_without_echoing_them():
data = (FIXTURES / "judge-lease.valid.json").read_bytes()
duplicate = data.replace(b'"schema_version": 2', b'"schema_version": 2, "schema_version": 2')
for invalid in (duplicate, b" " * (v1.MAX_WIRE_BYTES + 1), data.decode().encode("utf-16")):
with pytest.raises(ValueError):
v1.decode_wire(v2.LeaseGrant, invalid)
secret = "private-placeholder-never-echo"
value = json.loads(data)
value["lease_token"] = secret
with pytest.raises(ValueError) as error:
v1.decode_wire(v2.LeaseGrant, json.dumps(value).encode())
assert secret not in str(error.value)
def test_storage_boundary_reads_both_versions_without_rewriting_or_cross_version_reports():
old = ROOT / "tests/fixtures/contracts"
old_manifest = versions.decode_manifest((old / "judge-manifest.valid.json").read_bytes())
old_report = versions.decode_report((old / "judge-result.valid.json").read_bytes())
versions.validate_report(old_report, old_manifest, old_report.manifest_digest)
assert versions.manifest_bytes(old_manifest) == (old / "canonical-manifest.v1.txt").read_bytes()
manifest = versions.decode_manifest(
(FIXTURES / "judge-manifest.valid-python313.json").read_bytes()
)
report = versions.decode_report((FIXTURES / "judge-result.valid-python313.json").read_bytes())
versions.validate_report(report, manifest, report.manifest_digest)
for result, task in ((old_report, manifest), (report, old_manifest)):
with pytest.raises(ValueError):
versions.validate_report(result, task, result.manifest_digest)
payload = (FIXTURES / "judge-manifest.valid-python313.json").read_bytes()
for invalid in (
payload.replace(b'"schema_version": 2', b'"schema_version": 3'),
payload.replace(b'"schema_version": 2', b'"schema_version": true'),
payload.replace(b'"schema_version": 2', b'"schema_version": 2, "schema_version": 2'),
):
with pytest.raises(ValueError):
versions.decode_manifest(invalid)
+13 -2
View File
@@ -27,7 +27,10 @@ def test_cursor_and_control_configuration_fail_closed():
Settings(_env_file=None, coordinator_url="http://127.0.0.1:8100", coordinator_token="a" * 64) Settings(_env_file=None, coordinator_url="http://127.0.0.1:8100", coordinator_token="a" * 64)
def test_actual_owned_history_source_result_and_cancel(postgres_url, tmp_path, monkeypatch): @pytest.mark.parametrize("wire_version", [1, 2])
def test_actual_owned_history_source_result_and_cancel(
postgres_url, tmp_path, monkeypatch, wire_version
):
async def run(): async def run():
app, engine, mod = await setup_app(postgres_url, tmp_path) app, engine, mod = await setup_app(postgres_url, tmp_path)
monkeypatch.setattr(mod, "build_engine", lambda _: engine) monkeypatch.setattr(mod, "build_engine", lambda _: engine)
@@ -52,9 +55,17 @@ def test_actual_owned_history_source_result_and_cancel(postgres_url, tmp_path, m
) )
) )
# Synthetic contract projection only, never claimed as a real judgement. # Synthetic contract projection only, never claimed as a real judgement.
fixture = Path(__file__).parents[2] / "tests/fixtures/contracts/judge-result.valid.json" fixture = Path(__file__).parents[2] / (
"tests/fixtures/contracts/judge-result.valid.json"
if wire_version == 1
else "tests/fixtures/contracts-v2/judge-result.valid-c17.json"
)
report = json.loads(fixture.read_text()) report = json.loads(fixture.read_text())
report["binding"]["evaluation_id"] = str(records[0].evaluation_id) report["binding"]["evaluation_id"] = str(records[0].evaluation_id)
if wire_version == 2:
report["compilation"]["program"]["binding"]["evaluation_id"] = str(
records[0].evaluation_id
)
admin = create_async_engine(postgres_url) admin = create_async_engine(postgres_url)
async with admin.begin() as conn: async with admin.begin() as conn:
await conn.execute(text("SET LOCAL ROLE kf_oj_coordinator")) await conn.execute(text("SET LOCAL ROLE kf_oj_coordinator"))
@@ -0,0 +1,226 @@
{
"$comment": "Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup and node budgets, canonical bounded class sets and result consistency.",
"$defs": {
"Language": {
"enum": [
"c17",
"cpp20",
"python313",
"java21"
],
"title": "Language",
"type": "string"
},
"RunLimits": {
"additionalProperties": false,
"properties": {
"cpu_time_us": {
"maximum": 60000000,
"minimum": 1000,
"title": "Cpu Time Us",
"type": "integer"
},
"file_bytes": {
"maximum": 67108864,
"minimum": 1,
"title": "File Bytes",
"type": "integer"
},
"memory_bytes": {
"maximum": 2147483648,
"minimum": 1,
"title": "Memory Bytes",
"type": "integer"
},
"open_files": {
"maximum": 1024,
"minimum": 3,
"title": "Open Files",
"type": "integer"
},
"processes": {
"maximum": 128,
"minimum": 1,
"title": "Processes",
"type": "integer"
},
"stack_bytes": {
"maximum": 268435456,
"minimum": 1,
"title": "Stack Bytes",
"type": "integer"
},
"stderr_bytes": {
"maximum": 16777216,
"minimum": 1,
"title": "Stderr Bytes",
"type": "integer"
},
"stdout_bytes": {
"maximum": 16777216,
"minimum": 1,
"title": "Stdout Bytes",
"type": "integer"
},
"wall_time_us": {
"maximum": 120000000,
"minimum": 1000,
"title": "Wall Time Us",
"type": "integer"
},
"workdir_bytes": {
"maximum": 268435456,
"minimum": 1,
"title": "Workdir Bytes",
"type": "integer"
}
},
"required": [
"cpu_time_us",
"wall_time_us",
"memory_bytes",
"stack_bytes",
"processes",
"open_files",
"stdout_bytes",
"stderr_bytes",
"file_bytes",
"workdir_bytes"
],
"title": "RunLimits",
"type": "object"
},
"RuntimeCapability": {
"additionalProperties": false,
"properties": {
"compile_ceiling": {
"$ref": "#/$defs/RunLimits"
},
"language": {
"$ref": "#/$defs/Language"
},
"run_ceiling": {
"$ref": "#/$defs/RunLimits"
},
"toolchain": {
"$ref": "#/$defs/RuntimeIdentity"
}
},
"required": [
"language",
"toolchain",
"compile_ceiling",
"run_ceiling"
],
"title": "RuntimeCapability",
"type": "object"
},
"RuntimeIdentity": {
"additionalProperties": false,
"description": "An exact identity matched against trusted configuration, never a host path.",
"properties": {
"image_digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Image Digest",
"type": "string"
},
"image_kind": {
"enum": [
"linux_gnu_cxx_x86_64_v1",
"linux_cpython313_x86_64_v1",
"linux_openjdk21_x86_64_v1"
],
"title": "Image Kind",
"type": "string"
},
"image_revision": {
"maximum": 4294967295,
"minimum": 1,
"title": "Image Revision",
"type": "integer"
},
"runtime_version": {
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.+-]{0,63}$",
"title": "Runtime Version",
"type": "string"
},
"toolchain_id": {
"pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
"title": "Toolchain Id",
"type": "string"
}
},
"required": [
"toolchain_id",
"image_kind",
"image_revision",
"image_digest",
"runtime_version"
],
"title": "RuntimeIdentity",
"type": "object"
}
},
"$id": "urn:kf-oj:judge-admission:v2",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"capabilities": {
"items": {
"$ref": "#/$defs/RuntimeCapability"
},
"maxItems": 4,
"minItems": 1,
"title": "Capabilities",
"type": "array"
},
"max_concurrent_jobs": {
"default": 1,
"maximum": 64,
"minimum": 1,
"title": "Max Concurrent Jobs",
"type": "integer"
},
"max_job_wall_time_us": {
"maximum": 3600000000,
"minimum": 1000,
"title": "Max Job Wall Time Us",
"type": "integer"
},
"max_package_bytes": {
"maximum": 67108864,
"minimum": 1,
"title": "Max Package Bytes",
"type": "integer"
},
"max_retries": {
"default": 2,
"maximum": 4,
"minimum": 0,
"title": "Max Retries",
"type": "integer"
},
"prefetch": {
"default": 1,
"maximum": 64,
"minimum": 1,
"title": "Prefetch",
"type": "integer"
},
"schema_version": {
"const": 2,
"title": "Schema Version",
"type": "integer"
}
},
"required": [
"schema_version",
"max_job_wall_time_us",
"max_package_bytes",
"capabilities"
],
"title": "AdmissionPolicy",
"type": "object"
}
@@ -0,0 +1,94 @@
{
"$comment": "Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup and node budgets, canonical bounded class sets and result consistency.",
"$defs": {
"LeaseBinding": {
"additionalProperties": false,
"properties": {
"attempt_id": {
"format": "uuid",
"title": "Attempt Id",
"type": "string"
},
"evaluation_id": {
"format": "uuid",
"title": "Evaluation Id",
"type": "string"
},
"fencing_version": {
"maximum": 9223372036854775807,
"minimum": 1,
"title": "Fencing Version",
"type": "integer"
},
"worker_id": {
"format": "uuid",
"title": "Worker Id",
"type": "string"
}
},
"required": [
"evaluation_id",
"attempt_id",
"worker_id",
"fencing_version"
],
"title": "LeaseBinding",
"type": "object"
}
},
"$id": "urn:kf-oj:judge-lease:v2",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"attempt_number": {
"maximum": 5,
"minimum": 1,
"title": "Attempt Number",
"type": "integer"
},
"binding": {
"$ref": "#/$defs/LeaseBinding"
},
"expires_at_unix_ms": {
"maximum": 9223372036854775807,
"minimum": 1,
"title": "Expires At Unix Ms",
"type": "integer"
},
"kind": {
"const": "judge.lease",
"title": "Kind",
"type": "string"
},
"lease_token": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Lease Token",
"type": "string"
},
"manifest_digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Manifest Digest",
"type": "string"
},
"schema_version": {
"const": 2,
"title": "Schema Version",
"type": "integer"
}
},
"required": [
"schema_version",
"kind",
"binding",
"lease_token",
"attempt_number",
"expires_at_unix_ms",
"manifest_digest"
],
"title": "LeaseGrant",
"type": "object"
}
@@ -0,0 +1,270 @@
{
"$comment": "Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup and node budgets, canonical bounded class sets and result consistency.",
"$defs": {
"ArtifactReference": {
"additionalProperties": false,
"properties": {
"bytes": {
"maximum": 67108864,
"minimum": 0,
"title": "Bytes",
"type": "integer"
},
"digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Digest",
"type": "string"
}
},
"required": [
"digest",
"bytes"
],
"title": "ArtifactReference",
"type": "object"
},
"Language": {
"enum": [
"c17",
"cpp20",
"python313",
"java21"
],
"title": "Language",
"type": "string"
},
"RunLimits": {
"additionalProperties": false,
"properties": {
"cpu_time_us": {
"maximum": 60000000,
"minimum": 1000,
"title": "Cpu Time Us",
"type": "integer"
},
"file_bytes": {
"maximum": 67108864,
"minimum": 1,
"title": "File Bytes",
"type": "integer"
},
"memory_bytes": {
"maximum": 2147483648,
"minimum": 1,
"title": "Memory Bytes",
"type": "integer"
},
"open_files": {
"maximum": 1024,
"minimum": 3,
"title": "Open Files",
"type": "integer"
},
"processes": {
"maximum": 128,
"minimum": 1,
"title": "Processes",
"type": "integer"
},
"stack_bytes": {
"maximum": 268435456,
"minimum": 1,
"title": "Stack Bytes",
"type": "integer"
},
"stderr_bytes": {
"maximum": 16777216,
"minimum": 1,
"title": "Stderr Bytes",
"type": "integer"
},
"stdout_bytes": {
"maximum": 16777216,
"minimum": 1,
"title": "Stdout Bytes",
"type": "integer"
},
"wall_time_us": {
"maximum": 120000000,
"minimum": 1000,
"title": "Wall Time Us",
"type": "integer"
},
"workdir_bytes": {
"maximum": 268435456,
"minimum": 1,
"title": "Workdir Bytes",
"type": "integer"
}
},
"required": [
"cpu_time_us",
"wall_time_us",
"memory_bytes",
"stack_bytes",
"processes",
"open_files",
"stdout_bytes",
"stderr_bytes",
"file_bytes",
"workdir_bytes"
],
"title": "RunLimits",
"type": "object"
},
"RuntimeIdentity": {
"additionalProperties": false,
"description": "An exact identity matched against trusted configuration, never a host path.",
"properties": {
"image_digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Image Digest",
"type": "string"
},
"image_kind": {
"enum": [
"linux_gnu_cxx_x86_64_v1",
"linux_cpython313_x86_64_v1",
"linux_openjdk21_x86_64_v1"
],
"title": "Image Kind",
"type": "string"
},
"image_revision": {
"maximum": 4294967295,
"minimum": 1,
"title": "Image Revision",
"type": "integer"
},
"runtime_version": {
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.+-]{0,63}$",
"title": "Runtime Version",
"type": "string"
},
"toolchain_id": {
"pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
"title": "Toolchain Id",
"type": "string"
}
},
"required": [
"toolchain_id",
"image_kind",
"image_revision",
"image_digest",
"runtime_version"
],
"title": "RuntimeIdentity",
"type": "object"
},
"TestCase": {
"additionalProperties": false,
"properties": {
"case_id": {
"format": "uuid",
"title": "Case Id",
"type": "string"
},
"expected": {
"$ref": "#/$defs/ArtifactReference"
},
"input": {
"$ref": "#/$defs/ArtifactReference"
}
},
"required": [
"case_id",
"input",
"expected"
],
"title": "TestCase",
"type": "object"
}
},
"$id": "urn:kf-oj:judge-manifest:v2",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"cases": {
"items": {
"$ref": "#/$defs/TestCase"
},
"maxItems": 256,
"minItems": 1,
"title": "Cases",
"type": "array"
},
"comparison": {
"const": "exact_bytes",
"title": "Comparison",
"type": "string"
},
"compile_limits": {
"$ref": "#/$defs/RunLimits"
},
"evaluation_id": {
"format": "uuid",
"title": "Evaluation Id",
"type": "string"
},
"job_wall_time_us": {
"maximum": 3600000000,
"minimum": 1000,
"title": "Job Wall Time Us",
"type": "integer"
},
"kind": {
"const": "judge.manifest",
"title": "Kind",
"type": "string"
},
"language": {
"$ref": "#/$defs/Language"
},
"problem_version_id": {
"format": "uuid",
"title": "Problem Version Id",
"type": "string"
},
"run_limits": {
"$ref": "#/$defs/RunLimits"
},
"schema_version": {
"const": 2,
"title": "Schema Version",
"type": "integer"
},
"source": {
"$ref": "#/$defs/ArtifactReference"
},
"submission_id": {
"format": "uuid",
"title": "Submission Id",
"type": "string"
},
"toolchain": {
"$ref": "#/$defs/RuntimeIdentity"
}
},
"required": [
"schema_version",
"kind",
"evaluation_id",
"submission_id",
"problem_version_id",
"language",
"toolchain",
"source",
"cases",
"comparison",
"compile_limits",
"run_limits",
"job_wall_time_us"
],
"title": "JobManifest",
"type": "object"
}
@@ -0,0 +1,416 @@
{
"$comment": "Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup and node budgets, canonical bounded class sets and result consistency.",
"$defs": {
"ArtifactReference": {
"additionalProperties": false,
"properties": {
"bytes": {
"maximum": 67108864,
"minimum": 0,
"title": "Bytes",
"type": "integer"
},
"digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Digest",
"type": "string"
}
},
"required": [
"digest",
"bytes"
],
"title": "ArtifactReference",
"type": "object"
},
"CaseReport": {
"additionalProperties": false,
"properties": {
"case_id": {
"format": "uuid",
"title": "Case Id",
"type": "string"
},
"cpu_time_us": {
"anyOf": [
{
"maximum": 9223372036854775807,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Cpu Time Us"
},
"memory_peak_bytes": {
"anyOf": [
{
"maximum": 9223372036854775807,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Memory Peak Bytes"
},
"verdict": {
"$ref": "#/$defs/Verdict"
}
},
"required": [
"case_id",
"verdict",
"cpu_time_us",
"memory_peak_bytes"
],
"title": "CaseReport",
"type": "object"
},
"CompilationReport": {
"additionalProperties": false,
"properties": {
"cpu_time_us": {
"anyOf": [
{
"maximum": 9223372036854775807,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Cpu Time Us"
},
"diagnostics": {
"maxLength": 65536,
"title": "Diagnostics",
"type": "string"
},
"diagnostics_truncated": {
"title": "Diagnostics Truncated",
"type": "boolean"
},
"memory_peak_bytes": {
"anyOf": [
{
"maximum": 9223372036854775807,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Memory Peak Bytes"
},
"program": {
"anyOf": [
{
"$ref": "#/$defs/CompiledProgram"
},
{
"type": "null"
}
]
},
"status": {
"$ref": "#/$defs/CompilationStatus"
}
},
"required": [
"status",
"program",
"diagnostics",
"diagnostics_truncated",
"cpu_time_us",
"memory_peak_bytes"
],
"title": "CompilationReport",
"type": "object"
},
"CompilationStatus": {
"enum": [
"succeeded",
"compilation_error",
"compilation_limit",
"cancelled",
"system_error"
],
"title": "CompilationStatus",
"type": "string"
},
"CompiledProgram": {
"additionalProperties": false,
"description": "Sealed file identities bound to a particular source, runtime and lease attempt.",
"properties": {
"binding": {
"$ref": "#/$defs/LeaseBinding"
},
"files": {
"items": {
"$ref": "#/$defs/ProgramFile"
},
"maxItems": 256,
"minItems": 1,
"title": "Files",
"type": "array"
},
"kind": {
"$ref": "#/$defs/ProgramKind"
},
"source": {
"$ref": "#/$defs/ArtifactReference"
},
"toolchain": {
"$ref": "#/$defs/RuntimeIdentity"
}
},
"required": [
"kind",
"binding",
"source",
"toolchain",
"files"
],
"title": "CompiledProgram",
"type": "object"
},
"FailureCode": {
"enum": [
"artifact_unavailable",
"sandbox_unavailable",
"cleanup_failed",
"lease_lost",
"job_deadline"
],
"title": "FailureCode",
"type": "string"
},
"LeaseBinding": {
"additionalProperties": false,
"properties": {
"attempt_id": {
"format": "uuid",
"title": "Attempt Id",
"type": "string"
},
"evaluation_id": {
"format": "uuid",
"title": "Evaluation Id",
"type": "string"
},
"fencing_version": {
"maximum": 9223372036854775807,
"minimum": 1,
"title": "Fencing Version",
"type": "integer"
},
"worker_id": {
"format": "uuid",
"title": "Worker Id",
"type": "string"
}
},
"required": [
"evaluation_id",
"attempt_id",
"worker_id",
"fencing_version"
],
"title": "LeaseBinding",
"type": "object"
},
"ProgramFile": {
"additionalProperties": false,
"properties": {
"artifact": {
"$ref": "#/$defs/ArtifactReference"
},
"path": {
"maxLength": 128,
"minLength": 1,
"title": "Path",
"type": "string"
}
},
"required": [
"path",
"artifact"
],
"title": "ProgramFile",
"type": "object"
},
"ProgramKind": {
"enum": [
"native_executable",
"python_source",
"java_classes"
],
"title": "ProgramKind",
"type": "string"
},
"RuntimeIdentity": {
"additionalProperties": false,
"description": "An exact identity matched against trusted configuration, never a host path.",
"properties": {
"image_digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Image Digest",
"type": "string"
},
"image_kind": {
"enum": [
"linux_gnu_cxx_x86_64_v1",
"linux_cpython313_x86_64_v1",
"linux_openjdk21_x86_64_v1"
],
"title": "Image Kind",
"type": "string"
},
"image_revision": {
"maximum": 4294967295,
"minimum": 1,
"title": "Image Revision",
"type": "integer"
},
"runtime_version": {
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.+-]{0,63}$",
"title": "Runtime Version",
"type": "string"
},
"toolchain_id": {
"pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
"title": "Toolchain Id",
"type": "string"
}
},
"required": [
"toolchain_id",
"image_kind",
"image_revision",
"image_digest",
"runtime_version"
],
"title": "RuntimeIdentity",
"type": "object"
},
"Verdict": {
"enum": [
"accepted",
"wrong_answer",
"compilation_error",
"runtime_error",
"time_limit_exceeded",
"memory_limit_exceeded",
"output_limit_exceeded",
"cancelled",
"system_error"
],
"title": "Verdict",
"type": "string"
}
},
"$id": "urn:kf-oj:judge-result:v2",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"binding": {
"$ref": "#/$defs/LeaseBinding"
},
"cases": {
"items": {
"$ref": "#/$defs/CaseReport"
},
"maxItems": 256,
"title": "Cases",
"type": "array"
},
"cleanup_complete": {
"title": "Cleanup Complete",
"type": "boolean"
},
"compilation": {
"$ref": "#/$defs/CompilationReport"
},
"failure_code": {
"anyOf": [
{
"$ref": "#/$defs/FailureCode"
},
{
"type": "null"
}
]
},
"kind": {
"const": "judge.result",
"title": "Kind",
"type": "string"
},
"manifest_digest": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[0-9a-f]{64}$",
"title": "Manifest Digest",
"type": "string"
},
"run_cpu_time_us": {
"anyOf": [
{
"maximum": 9223372036854775807,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Run Cpu Time Us"
},
"run_memory_peak_bytes": {
"anyOf": [
{
"maximum": 9223372036854775807,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Run Memory Peak Bytes"
},
"schema_version": {
"const": 2,
"title": "Schema Version",
"type": "integer"
},
"verdict": {
"$ref": "#/$defs/Verdict"
}
},
"required": [
"schema_version",
"kind",
"binding",
"manifest_digest",
"compilation",
"cases",
"verdict",
"cleanup_complete",
"failure_code",
"run_cpu_time_us",
"run_memory_peak_bytes"
],
"title": "JudgementReport",
"type": "object"
}
@@ -0,0 +1,106 @@
{
"$comment": "Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup and node budgets, canonical bounded class sets and result consistency.",
"$defs": {
"LeaseBinding": {
"additionalProperties": false,
"properties": {
"attempt_id": {
"format": "uuid",
"title": "Attempt Id",
"type": "string"
},
"evaluation_id": {
"format": "uuid",
"title": "Evaluation Id",
"type": "string"
},
"fencing_version": {
"maximum": 9223372036854775807,
"minimum": 1,
"title": "Fencing Version",
"type": "integer"
},
"worker_id": {
"format": "uuid",
"title": "Worker Id",
"type": "string"
}
},
"required": [
"evaluation_id",
"attempt_id",
"worker_id",
"fencing_version"
],
"title": "LeaseBinding",
"type": "object"
},
"PreparationKind": {
"enum": [
"compile",
"syntax_check"
],
"title": "PreparationKind",
"type": "string"
}
},
"$id": "urn:kf-oj:judge-stage:v2",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"binding": {
"$ref": "#/$defs/LeaseBinding"
},
"case_index": {
"anyOf": [
{
"exclusiveMaximum": 256,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Case Index"
},
"kind": {
"const": "judge.stage",
"title": "Kind",
"type": "string"
},
"preparation_kind": {
"$ref": "#/$defs/PreparationKind"
},
"schema_version": {
"const": 2,
"title": "Schema Version",
"type": "integer"
},
"sequence": {
"maximum": 9223372036854775807,
"minimum": 1,
"title": "Sequence",
"type": "integer"
},
"stage": {
"enum": [
"compiling",
"running"
],
"title": "Stage",
"type": "string"
}
},
"required": [
"schema_version",
"kind",
"binding",
"sequence",
"stage",
"case_index",
"preparation_kind"
],
"title": "StageReport",
"type": "object"
}
@@ -0,0 +1,69 @@
{
"$comment": "Multi-runtime protocol. Also validate runtime/source/attempt bindings, startup and node budgets, canonical bounded class sets and result consistency.",
"$defs": {
"LeaseBinding": {
"additionalProperties": false,
"properties": {
"attempt_id": {
"format": "uuid",
"title": "Attempt Id",
"type": "string"
},
"evaluation_id": {
"format": "uuid",
"title": "Evaluation Id",
"type": "string"
},
"fencing_version": {
"maximum": 9223372036854775807,
"minimum": 1,
"title": "Fencing Version",
"type": "integer"
},
"worker_id": {
"format": "uuid",
"title": "Worker Id",
"type": "string"
}
},
"required": [
"evaluation_id",
"attempt_id",
"worker_id",
"fencing_version"
],
"title": "LeaseBinding",
"type": "object"
}
},
"$id": "urn:kf-oj:judge-stopped:v2",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"binding": {
"$ref": "#/$defs/LeaseBinding"
},
"cleanup_complete": {
"title": "Cleanup Complete",
"type": "boolean"
},
"kind": {
"const": "judge.stopped",
"title": "Kind",
"type": "string"
},
"schema_version": {
"const": 2,
"title": "Schema Version",
"type": "integer"
}
},
"required": [
"schema_version",
"kind",
"binding",
"cleanup_complete"
],
"title": "StoppedReport",
"type": "object"
}
+3 -2
View File
@@ -42,7 +42,7 @@ pub fn manifest_bytes(manifest: &JobManifest) -> Result<Vec<u8>, &'static str> {
serde_json::to_vec(&value).map_err(|_| "invalid manifest") serde_json::to_vec(&value).map_err(|_| "invalid manifest")
} }
fn bounded(value: u64, min: u64, max: u64) -> Validation { pub(crate) fn bounded(value: u64, min: u64, max: u64) -> Validation {
if (min..=max).contains(&value) { if (min..=max).contains(&value) {
Ok(()) Ok(())
} else { } else {
@@ -52,7 +52,7 @@ fn bounded(value: u64, min: u64, max: u64) -> Validation {
fn measure(value: Option<u64>) -> Validation { fn measure(value: Option<u64>) -> Validation {
value.map_or(Ok(()), |v| bounded(v, 0, I64_MAX)) value.map_or(Ok(()), |v| bounded(v, 0, I64_MAX))
} }
fn required_option<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error> pub(crate) fn required_option<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
where where
D: serde::Deserializer<'de>, D: serde::Deserializer<'de>,
T: Deserialize<'de>, T: Deserialize<'de>,
@@ -78,6 +78,7 @@ macro_rules! validated_struct {
} }
}; };
} }
pub(crate) use validated_struct;
macro_rules! kind { macro_rules! kind {
($name:ident, $wire:literal) => { ($name:ident, $wire:literal) => {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
+675
View File
@@ -0,0 +1,675 @@
//! Explicit multi-runtime protocol. Version 1 remains an independent wire contract.
use super::judging as v1;
use serde::{Deserialize, Serialize, de::Error};
pub use v1::{
ArtifactReference, CaseReport, Comparison, CompilationStatus, CompilerDiagnostics, Digest,
FailureCode, Identifier, Label, LeaseBinding, LeaseToken, ManifestKind, ResultKind, RunLimits,
Stage, StageKind, StoppedKind, TestCase, Validation, Verdict,
};
use v1::{bounded, validated_struct};
pub const MAX_CLASS_FILES: usize = 256;
pub const JVM_NATIVE_RESERVE_BYTES: u64 = 160 * v1::MIB;
pub const JVM_THREAD_STACK_BYTES: u64 = 256 * 1024;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(try_from = "u16", into = "u16")]
pub struct SchemaVersion;
impl TryFrom<u16> for SchemaVersion {
type Error = &'static str;
fn try_from(value: u16) -> Result<Self, Self::Error> {
if value == 2 {
Ok(Self)
} else {
Err("unsupported multi-runtime version")
}
}
}
impl From<SchemaVersion> for u16 {
fn from(_: SchemaVersion) -> Self {
2
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Language {
#[serde(rename = "c17")]
C17,
#[serde(rename = "cpp20")]
Cpp20,
#[serde(rename = "python313")]
Python313,
#[serde(rename = "java21")]
Java21,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum ImageKind {
#[serde(rename = "linux_gnu_cxx_x86_64_v1")]
GnuCxx,
#[serde(rename = "linux_cpython313_x86_64_v1")]
CPython313,
#[serde(rename = "linux_openjdk21_x86_64_v1")]
OpenJdk21,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PreparationKind {
Compile,
SyntaxCheck,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ProgramKind {
NativeExecutable,
PythonSource,
JavaClasses,
}
pub struct RuntimeContract {
pub source_name: &'static str,
pub preparation_profile: &'static str,
pub run_profile: &'static str,
pub program_kind: ProgramKind,
pub preparation_kind: PreparationKind,
}
impl Language {
pub fn contract(self) -> RuntimeContract {
let (source_name, preparation_profile, run_profile, program_kind, preparation_kind) =
match self {
Self::C17 => (
"main.c",
"compile_c",
"native",
ProgramKind::NativeExecutable,
PreparationKind::Compile,
),
Self::Cpp20 => (
"main.cpp",
"compile_cpp",
"native",
ProgramKind::NativeExecutable,
PreparationKind::Compile,
),
Self::Python313 => (
"main.py",
"python_check",
"python_run",
ProgramKind::PythonSource,
PreparationKind::SyntaxCheck,
),
Self::Java21 => (
"Main.java",
"java_compile",
"java_run",
ProgramKind::JavaClasses,
PreparationKind::Compile,
),
};
RuntimeContract {
source_name,
preparation_profile,
run_profile,
program_kind,
preparation_kind,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(try_from = "String")]
pub struct RuntimeVersion(String);
impl TryFrom<String> for RuntimeVersion {
type Error = &'static str;
fn try_from(value: String) -> Result<Self, Self::Error> {
if value.is_empty()
|| value.len() > 64
|| !value.as_bytes()[0].is_ascii_alphanumeric()
|| !value
.bytes()
.all(|b| b.is_ascii_alphanumeric() || b"_.+-".contains(&b))
{
return Err("invalid runtime build version");
}
Ok(Self(value))
}
}
impl RuntimeVersion {
pub fn as_str(&self) -> &str {
&self.0
}
fn is_java21_build(&self) -> bool {
let value = self.0.strip_suffix("-LTS").unwrap_or(&self.0);
let Some((version, build)) = value.split_once('+') else {
return false;
};
let parts: Vec<_> = version.split('.').collect();
(parts.len() == 3 || parts.len() == 4)
&& parts[0] == "21"
&& parts
.iter()
.all(|p| !p.is_empty() && p.bytes().all(|b| b.is_ascii_digit()))
&& !build.is_empty()
&& build.as_bytes()[0] != b'0'
&& build.bytes().all(|b| b.is_ascii_digit())
}
}
validated_struct!(RuntimeIdentity {
toolchain_id: Label,
image_kind: ImageKind,
image_revision: u32,
image_digest: Digest,
runtime_version: RuntimeVersion,
});
impl RuntimeIdentity {
pub fn validate(&self) -> Validation {
bounded(u64::from(self.image_revision), 1, u64::from(u32::MAX))
}
pub fn validate_for_language(&self, language: Language) -> Validation {
self.validate()?;
let (id, kind) = match language {
Language::C17 | Language::Cpp20 => ("gnu-cxx-v1", ImageKind::GnuCxx),
Language::Python313 => ("cpython313-v1", ImageKind::CPython313),
Language::Java21 => ("openjdk21-v1", ImageKind::OpenJdk21),
};
if self.toolchain_id.as_str() != id || self.image_kind != kind {
return Err("runtime family differs from language contract");
}
if language == Language::Python313 && self.runtime_version.as_str() != "3.13.16" {
return Err("unsupported CPython version");
}
if language == Language::Java21 && !self.runtime_version.is_java21_build() {
return Err("JDK version must identify a fixed Java 21 build");
}
Ok(())
}
}
pub fn jvm_heap_bytes(limits: &RunLimits) -> Result<u64, &'static str> {
let reserve = JVM_NATIVE_RESERVE_BYTES + u64::from(limits.processes) * JVM_THREAD_STACK_BYTES;
let heap = limits.memory_bytes.saturating_sub(reserve) / v1::MIB * v1::MIB;
if heap < 32 * v1::MIB || limits.stack_bytes < JVM_THREAD_STACK_BYTES {
return Err("budget cannot cover JVM heap and explicit non-heap reserve");
}
Ok(heap)
}
pub fn validate_startup_budget(
language: Language,
limits: &RunLimits,
preparing: bool,
) -> Validation {
limits.validate()?;
let floor = match (language, preparing) {
(Language::Python313, _) => (10_000, 50_000, 32 * v1::MIB, 1, 16),
(Language::Java21, true) => (1_000_000, 3_000_000, 384 * v1::MIB, 16, 32),
(Language::Java21, false) => (200_000, 1_000_000, 256 * v1::MIB, 16, 32),
_ => return Ok(()),
};
if limits.cpu_time_us < floor.0
|| limits.wall_time_us < floor.1
|| limits.memory_bytes < floor.2
|| limits.processes < floor.3
|| limits.open_files < floor.4
{
return Err("budget below runtime startup policy");
}
if language == Language::Java21 {
jvm_heap_bytes(limits)?;
}
Ok(())
}
validated_struct!(LanguageConfiguration {
language: Language,
toolchain: RuntimeIdentity,
compile_limits: RunLimits,
run_limits: RunLimits,
job_wall_time_us: u64,
});
impl LanguageConfiguration {
pub fn validate(&self) -> Validation {
self.toolchain.validate_for_language(self.language)?;
validate_startup_budget(self.language, &self.compile_limits, true)?;
validate_startup_budget(self.language, &self.run_limits, false)?;
bounded(self.job_wall_time_us, 1000, v1::MAX_JOB_WALL_US)?;
if self.compile_limits.wall_time_us + self.run_limits.wall_time_us > self.job_wall_time_us {
return Err("job deadline cannot cover preparation and execution");
}
Ok(())
}
}
validated_struct!(JobManifest {
schema_version: SchemaVersion, kind: ManifestKind, evaluation_id: Identifier,
submission_id: Identifier, problem_version_id: Identifier, language: Language,
toolchain: RuntimeIdentity, source: ArtifactReference, cases: Vec<TestCase>,
comparison: Comparison, compile_limits: RunLimits, run_limits: RunLimits, job_wall_time_us: u64,
});
validated_struct!(ProgramFile {
path: String,
artifact: ArtifactReference
});
impl ProgramFile {
pub fn validate(&self) -> Validation {
self.artifact.validate()?;
if self.path.is_empty() || self.path.len() > 128 {
return Err("invalid program file path");
}
Ok(())
}
}
validated_struct!(CompiledProgram {
kind: ProgramKind, binding: LeaseBinding, source: ArtifactReference,
toolchain: RuntimeIdentity, files: Vec<ProgramFile>,
});
impl CompiledProgram {
pub fn bytes(&self) -> u64 {
self.files.iter().map(|f| f.artifact.bytes).sum()
}
pub fn validate(&self) -> Validation {
self.binding.validate()?;
self.source.validate()?;
self.toolchain.validate()?;
bounded(self.source.bytes, 1, v1::MAX_SOURCE_BYTES)?;
if self.files.is_empty() || self.files.len() > MAX_CLASS_FILES {
return Err("program file count outside policy");
}
let mut last: Option<&str> = None;
for file in &self.files {
file.validate()?;
if file.artifact.bytes == 0 || last.is_some_and(|v| v >= file.path.as_str()) {
return Err("program files empty, duplicated or not in canonical order");
}
last = Some(&file.path);
}
if self.bytes() > v1::MAX_PACKAGE_BYTES {
return Err("program byte count outside policy");
}
match self.kind {
ProgramKind::NativeExecutable => {
self.toolchain.validate_for_language(Language::C17)?;
if self.files.len() != 1 || self.files[0].path != "main" {
return Err("invalid native program");
}
}
ProgramKind::PythonSource => {
self.toolchain.validate_for_language(Language::Python313)?;
if self.files.len() != 1
|| self.files[0].path != "main.py"
|| self.files[0].artifact != self.source
{
return Err("Python program must be the exact checked source");
}
}
ProgramKind::JavaClasses => {
self.toolchain.validate_for_language(Language::Java21)?;
if !self.files.iter().any(|f| f.path == "Main.class")
|| self.files.iter().any(|f| !class_name(&f.path))
{
return Err("Java requires a bounded default-package Main class set");
}
}
}
Ok(())
}
}
fn class_name(path: &str) -> bool {
let Some(stem) = path.strip_suffix(".class") else {
return false;
};
!stem.is_empty()
&& (stem.as_bytes()[0].is_ascii_alphabetic() || b"_$".contains(&stem.as_bytes()[0]))
&& stem
.bytes()
.all(|b| b.is_ascii_alphanumeric() || b"_$".contains(&b))
}
validated_struct!(CompilationReport {
status: CompilationStatus,
#[serde(deserialize_with = "v1::required_option")] program: Option<CompiledProgram>,
diagnostics: CompilerDiagnostics, diagnostics_truncated: bool,
#[serde(deserialize_with = "v1::required_option")] cpu_time_us: Option<u64>,
#[serde(deserialize_with = "v1::required_option")] memory_peak_bytes: Option<u64>,
});
impl CompilationReport {
pub fn validate(&self) -> Validation {
for value in [self.cpu_time_us, self.memory_peak_bytes]
.into_iter()
.flatten()
{
bounded(value, 0, v1::I64_MAX)?;
}
if (self.status == CompilationStatus::Succeeded) != self.program.is_some() {
return Err("compiled artifact only belongs to successful compilation");
}
if let Some(program) = &self.program {
program.validate()?;
}
Ok(())
}
}
validated_struct!(JudgementReport {
schema_version: SchemaVersion, kind: ResultKind, binding: LeaseBinding, manifest_digest: Digest,
compilation: CompilationReport, cases: Vec<CaseReport>, verdict: Verdict, cleanup_complete: bool,
#[serde(deserialize_with = "v1::required_option")] failure_code: Option<FailureCode>,
#[serde(deserialize_with = "v1::required_option")] run_cpu_time_us: Option<u64>,
#[serde(deserialize_with = "v1::required_option")] run_memory_peak_bytes: Option<u64>,
});
validated_struct!(LeaseGrant {
schema_version: SchemaVersion,
kind: v1::LeaseKind,
binding: LeaseBinding,
lease_token: LeaseToken,
attempt_number: u32,
expires_at_unix_ms: u64,
manifest_digest: Digest,
});
impl LeaseGrant {
pub fn validate(&self) -> Validation {
self.binding.validate()?;
bounded(u64::from(self.attempt_number), 1, 5)?;
bounded(self.expires_at_unix_ms, 1, v1::I64_MAX)
}
}
validated_struct!(StageReport {
schema_version: SchemaVersion, kind: StageKind, binding: LeaseBinding, sequence: u64,
stage: Stage, preparation_kind: PreparationKind,
#[serde(deserialize_with = "v1::required_option")] case_index: Option<u16>,
});
impl StageReport {
pub fn validate(&self) -> Validation {
self.binding.validate()?;
bounded(self.sequence, 1, v1::I64_MAX)?;
if (self.stage == Stage::Running) != self.case_index.is_some()
|| self
.case_index
.is_some_and(|i| usize::from(i) >= v1::MAX_CASES)
{
return Err("testcase index only belongs to running phase");
}
Ok(())
}
pub fn validate_for_manifest(&self, manifest: &JobManifest) -> Validation {
self.validate()?;
manifest.validate()?;
if self.binding.evaluation_id != manifest.evaluation_id
|| self.preparation_kind != manifest.language.contract().preparation_kind
{
return Err("stage differs from authorized language preparation");
}
Ok(())
}
}
validated_struct!(StoppedReport {
schema_version: SchemaVersion,
kind: StoppedKind,
binding: LeaseBinding,
cleanup_complete: bool
});
impl StoppedReport {
pub fn validate(&self) -> Validation {
self.binding.validate()
}
}
validated_struct!(RuntimeCapability {
language: Language,
toolchain: RuntimeIdentity,
compile_ceiling: RunLimits,
run_ceiling: RunLimits
});
impl RuntimeCapability {
pub fn validate(&self) -> Validation {
self.toolchain.validate_for_language(self.language)?;
validate_startup_budget(self.language, &self.compile_ceiling, true)?;
validate_startup_budget(self.language, &self.run_ceiling, false)
}
}
validated_struct!(AdmissionPolicy {
schema_version: SchemaVersion,
#[serde(default = "one")] max_concurrent_jobs: u32,
#[serde(default = "one")] prefetch: u32,
#[serde(default = "two")] max_retries: u32,
max_job_wall_time_us: u64, max_package_bytes: u64, capabilities: Vec<RuntimeCapability>,
});
fn one() -> u32 {
1
}
fn two() -> u32 {
2
}
impl AdmissionPolicy {
pub fn validate(&self) -> Validation {
bounded(u64::from(self.max_concurrent_jobs), 1, 64)?;
bounded(u64::from(self.prefetch), 1, 64)?;
bounded(u64::from(self.max_retries), 0, 4)?;
bounded(self.max_job_wall_time_us, 1000, v1::MAX_JOB_WALL_US)?;
bounded(self.max_package_bytes, 1, v1::MAX_PACKAGE_BYTES)?;
if self.prefetch > self.max_concurrent_jobs
|| self.capabilities.is_empty()
|| self.capabilities.len() > 4
{
return Err("runtime admission capacity outside policy");
}
let mut seen = std::collections::HashSet::new();
for cap in &self.capabilities {
cap.validate()?;
if !seen.insert(cap.language) {
return Err("duplicate language capability");
}
}
Ok(())
}
pub fn admit(&self, manifest: &JobManifest, attempt_number: u32) -> Validation {
self.validate()?;
manifest.validate()?;
bounded(
u64::from(attempt_number),
1,
u64::from(self.max_retries) + 1,
)?;
let cap = self
.capabilities
.iter()
.find(|c| c.language == manifest.language)
.ok_or("unsupported runtime capability")?;
if cap.toolchain != manifest.toolchain
|| !manifest.compile_limits.fits(&cap.compile_ceiling)
|| !manifest.run_limits.fits(&cap.run_ceiling)
|| manifest.job_wall_time_us > self.max_job_wall_time_us
|| manifest.package_bytes() > self.max_package_bytes
{
return Err("job exceeds trusted runtime capability or budget");
}
Ok(())
}
}
fn measure(value: Option<u64>) -> Validation {
value.map_or(Ok(()), |v| bounded(v, 0, v1::I64_MAX))
}
impl JobManifest {
pub fn package_bytes(&self) -> u64 {
self.source.bytes
+ self
.cases
.iter()
.map(|c| c.input.bytes + c.expected.bytes)
.sum::<u64>()
}
pub fn validate(&self) -> Validation {
self.source.validate()?;
self.toolchain.validate_for_language(self.language)?;
validate_startup_budget(self.language, &self.compile_limits, true)?;
validate_startup_budget(self.language, &self.run_limits, false)?;
self.compile_limits.validate()?;
self.run_limits.validate()?;
bounded(self.source.bytes, 1, v1::MAX_SOURCE_BYTES)?;
bounded(self.job_wall_time_us, 1000, v1::MAX_JOB_WALL_US)?;
if self.cases.is_empty() || self.cases.len() > v1::MAX_CASES {
return Err("testcase count outside policy");
}
let mut seen = std::collections::HashSet::new();
for c in &self.cases {
c.validate()?;
if !seen.insert(c.case_id) {
return Err("duplicate testcase identifiers");
}
if c.expected.bytes > self.run_limits.stdout_bytes {
return Err("expected output exceeds output budget");
}
}
if self.package_bytes() > v1::MAX_PACKAGE_BYTES {
return Err("test package outside policy");
}
let required = self.compile_limits.wall_time_us
+ self.cases.len() as u64 * self.run_limits.wall_time_us;
if required > self.job_wall_time_us {
return Err("job deadline cannot cover execution budgets");
}
Ok(())
}
}
impl JudgementReport {
pub fn validate(&self) -> Validation {
self.binding.validate()?;
self.compilation.validate()?;
if self
.compilation
.program
.as_ref()
.is_some_and(|p| p.binding != self.binding)
{
return Err("program belongs to another attempt");
}
measure(self.run_cpu_time_us)?;
measure(self.run_memory_peak_bytes)?;
if self.cases.len() > v1::MAX_CASES {
return Err("testcase count outside policy");
}
let mut seen = std::collections::HashSet::new();
for (i, c) in self.cases.iter().enumerate() {
c.validate()?;
if !seen.insert(c.case_id) {
return Err("duplicate testcase results");
}
if matches!(c.verdict, Verdict::SystemError | Verdict::Cancelled)
&& i != self.cases.len() - 1
{
return Err("results after fatal testcase outcome");
}
}
if !self.cleanup_complete && self.failure_code != Some(FailureCode::CleanupFailed) {
return Err("incomplete cleanup requires its own failure evidence");
}
if self.cleanup_complete && self.failure_code == Some(FailureCode::CleanupFailed) {
return Err("cleanup failure cannot claim completed cleanup");
}
if (self.verdict == Verdict::SystemError) != self.failure_code.is_some() {
return Err("infrastructure failure and verdict must agree");
}
if self.compilation.status != CompilationStatus::Succeeded {
let mapped = match self.compilation.status {
CompilationStatus::CompilationError | CompilationStatus::CompilationLimit => {
Verdict::CompilationError
}
CompilationStatus::Cancelled => Verdict::Cancelled,
CompilationStatus::SystemError => Verdict::SystemError,
CompilationStatus::Succeeded => unreachable!(),
};
if !self.cases.is_empty() || self.verdict != mapped {
return Err("failed compilation cannot have runtime results");
}
} else if self.failure_code.is_none() {
if self.cases.iter().any(|c| c.verdict == Verdict::SystemError) {
return Err("infrastructure failure requires failure code");
}
if self.cases.is_empty() && self.verdict != Verdict::Cancelled {
return Err("missing testcase results cannot be a completed judgement");
}
if self.verdict != Verdict::Cancelled && !self.cases.is_empty() {
let summary = self
.cases
.iter()
.find(|c| c.verdict == Verdict::Cancelled)
.or_else(|| self.cases.iter().find(|c| c.verdict != Verdict::Accepted))
.map_or(Verdict::Accepted, |c| c.verdict);
if self.verdict != summary {
return Err("testcase summary disagrees");
}
}
}
let cpu = if !self.cases.is_empty() && self.cases.iter().all(|c| c.cpu_time_us.is_some()) {
Some(
self.cases
.iter()
.try_fold(0_u64, |total, c| {
total.checked_add(c.cpu_time_us.unwrap_or(0))
})
.ok_or("measurement sum overflow")?,
)
} else {
None
};
let memory =
if !self.cases.is_empty() && self.cases.iter().all(|c| c.memory_peak_bytes.is_some()) {
self.cases.iter().filter_map(|c| c.memory_peak_bytes).max()
} else {
None
};
if self.run_cpu_time_us != cpu || self.run_memory_peak_bytes != memory {
return Err("runtime measurement summary disagrees");
}
Ok(())
}
pub fn validate_for_manifest(&self, manifest: &JobManifest, digest: &Digest) -> Validation {
self.validate()?;
manifest.validate()?;
if self.compilation.program.as_ref().is_some_and(|p| {
p.source != manifest.source
|| p.toolchain != manifest.toolchain
|| p.kind != manifest.language.contract().program_kind
}) {
return Err("program differs from authorized source or runtime");
}
if self.binding.evaluation_id != manifest.evaluation_id || &self.manifest_digest != digest {
return Err("report does not belong to authorized manifest");
}
if self.cases.len() > manifest.cases.len()
|| !self
.cases
.iter()
.zip(&manifest.cases)
.all(|(a, b)| a.case_id == b.case_id)
{
return Err("testcase results differ from authorized order");
}
if !matches!(
self.verdict,
Verdict::CompilationError | Verdict::Cancelled | Verdict::SystemError
) && self.cases.len() != manifest.cases.len()
{
return Err("incomplete ordinary judgement");
}
Ok(())
}
}
pub fn manifest_bytes(manifest: &JobManifest) -> Result<Vec<u8>, &'static str> {
manifest.validate()?;
let mut value = serde_json::to_value(manifest).map_err(|_| "invalid manifest")?;
fn sorted(value: &mut serde_json::Value) {
match value {
serde_json::Value::Object(map) => {
let mut entries: Vec<_> = std::mem::take(map).into_iter().collect();
entries.sort_by(|a, b| a.0.cmp(&b.0));
for (_, nested) in &mut entries {
sorted(nested);
}
*map = entries.into_iter().collect();
}
serde_json::Value::Array(values) => values.iter_mut().for_each(sorted),
_ => {}
}
}
sorted(&mut value);
serde_json::to_vec(&value).map_err(|_| "invalid manifest")
}
@@ -0,0 +1,41 @@
//! Version dispatch without changing legacy canonical snapshots or result identities.
use super::{judging as v1, judging_v2 as v2};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum JobManifest {
V1(v1::JobManifest),
V2(v2::JobManifest),
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum JudgementReport {
V1(v1::JudgementReport),
V2(v2::JudgementReport),
}
impl JobManifest {
pub fn canonical_bytes(&self) -> Result<Vec<u8>, &'static str> {
match self {
Self::V1(manifest) => v1::manifest_bytes(manifest),
Self::V2(manifest) => v2::manifest_bytes(manifest),
}
}
}
impl JudgementReport {
pub fn validate_for_manifest(
&self,
manifest: &JobManifest,
digest: &v1::Digest,
) -> v1::Validation {
match (self, manifest) {
(Self::V1(report), JobManifest::V1(manifest)) => {
report.validate_for_manifest(manifest, digest)
}
(Self::V2(report), JobManifest::V2(manifest)) => {
report.validate_for_manifest(manifest, digest)
}
_ => Err("report protocol differs from authorized manifest"),
}
}
}
+2
View File
@@ -4,6 +4,8 @@ use serde::{Deserialize, Serialize};
use uuid::Uuid; use uuid::Uuid;
pub mod judging; pub mod judging;
pub mod judging_v2;
pub mod judging_versions;
pub mod state; pub mod state;
pub const SCHEMA_VERSION: u16 = 1; pub const SCHEMA_VERSION: u16 = 1;
@@ -0,0 +1,156 @@
use kf_contracts::judging_versions as versions;
use kf_contracts::{judging as v1, judging_v2 as v2};
use serde::{Serialize, de::DeserializeOwned};
use std::{fs, path::PathBuf};
fn fixtures() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../../tests/fixtures/contracts-v2")
}
fn fixture<T: DeserializeOwned>(name: &str) -> T {
v1::decode_wire(&fs::read(fixtures().join(format!("{name}.json"))).unwrap()).unwrap()
}
fn roundtrip<T: DeserializeOwned + Serialize>(data: &[u8], invalid: bool, name: &str) {
let result = v1::decode_wire::<T>(data);
if invalid {
assert!(result.is_err(), "must reject {name}");
} else {
assert_eq!(
serde_json::to_value(result.unwrap_or_else(|e| panic!("{name}: {e}"))).unwrap(),
serde_json::from_slice::<serde_json::Value>(data).unwrap(),
"roundtrip {name}"
);
}
}
#[test]
fn shared_v2_acceptance_rejection_and_canonical_bytes_match_python() {
let mut count = 0;
for entry in fs::read_dir(fixtures()).unwrap() {
let path = entry.unwrap().path();
if path.extension().is_none_or(|e| e != "json") {
continue;
}
let name = path.file_name().unwrap().to_string_lossy();
let data = fs::read(&path).unwrap();
let invalid = name.contains(".invalid-");
match name.split('.').next().unwrap() {
"judge-manifest" => roundtrip::<v2::JobManifest>(&data, invalid, &name),
"judge-lease" => roundtrip::<v2::LeaseGrant>(&data, invalid, &name),
"judge-stage" => roundtrip::<v2::StageReport>(&data, invalid, &name),
"judge-result" => roundtrip::<v2::JudgementReport>(&data, invalid, &name),
"judge-admission" => roundtrip::<v2::AdmissionPolicy>(&data, invalid, &name),
"judge-stopped" => roundtrip::<v2::StoppedReport>(&data, invalid, &name),
_ => panic!("unrecognized fixture {name}"),
}
count += 1;
}
assert!(count >= 53);
for language in ["c17", "cpp20", "python313", "java21"] {
let manifest: v2::JobManifest = fixture(&format!("judge-manifest.valid-{language}"));
assert_eq!(
v2::manifest_bytes(&manifest).unwrap(),
fs::read(fixtures().join(format!("canonical-manifest.{language}.txt"))).unwrap()
);
let data =
fs::read(fixtures().join(format!("judge-manifest.valid-{language}.json"))).unwrap();
assert!(v1::decode_wire::<v1::JobManifest>(&data).is_err());
}
}
#[test]
fn runtime_identity_admission_and_program_binding_are_exact() {
let policy: v2::AdmissionPolicy = fixture("judge-admission.valid");
for language in ["c17", "cpp20", "python313", "java21"] {
let manifest: v2::JobManifest = fixture(&format!("judge-manifest.valid-{language}"));
for attempt in [1, 2, 3] {
policy.admit(&manifest, attempt).unwrap();
}
for attempt in [0, 4] {
assert!(policy.admit(&manifest, attempt).is_err());
}
let mut wrong = manifest.clone();
wrong.toolchain.image_revision += 1;
assert!(policy.admit(&wrong, 1).is_err());
wrong = manifest.clone();
wrong.toolchain.image_digest = "f".repeat(64).try_into().unwrap();
assert!(policy.admit(&wrong, 1).is_err());
let result: v2::JudgementReport = fixture(&format!("judge-result.valid-{language}"));
result
.validate_for_manifest(&manifest, &result.manifest_digest)
.unwrap();
let mut wrong = manifest.clone();
wrong.source.bytes += 1;
assert!(
result
.validate_for_manifest(&wrong, &result.manifest_digest)
.is_err()
);
let stage: v2::StageReport = fixture(&format!("judge-stage.valid-{language}"));
stage.validate_for_manifest(&manifest).unwrap();
}
let mut restricted = policy;
restricted
.capabilities
.retain(|c| c.language != v2::Language::Python313);
let manifest: v2::JobManifest = fixture("judge-manifest.valid-python313");
assert!(restricted.admit(&manifest, 1).is_err());
}
#[test]
fn runtime_entry_profiles_and_jvm_nonheap_memory_are_fixed() {
let python = v2::Language::Python313.contract();
assert_eq!(python.source_name, "main.py");
assert_eq!(python.preparation_profile, "python_check");
assert_eq!(python.preparation_kind, v2::PreparationKind::SyntaxCheck);
let java = v2::Language::Java21.contract();
assert_eq!(java.source_name, "Main.java");
assert_eq!(java.run_profile, "java_run");
let manifest: v2::JobManifest = fixture("judge-manifest.valid-java21");
let heap = v2::jvm_heap_bytes(&manifest.run_limits).unwrap();
assert!(heap >= 32 * v1::MIB && heap < manifest.run_limits.memory_bytes);
let mut more = manifest.run_limits.clone();
more.processes = 32;
assert!(v2::jvm_heap_bytes(&more).unwrap() < heap);
more.memory_bytes = 128 * v1::MIB;
assert!(v2::jvm_heap_bytes(&more).is_err());
}
#[test]
fn storage_boundary_retains_version_identity_and_rejects_mismatched_results() {
let original = fixtures().parent().unwrap().join("contracts");
let old_manifest: versions::JobManifest =
v1::decode_wire(&fs::read(original.join("judge-manifest.valid.json")).unwrap()).unwrap();
let old_report: versions::JudgementReport =
v1::decode_wire(&fs::read(original.join("judge-result.valid.json")).unwrap()).unwrap();
let manifest: versions::JobManifest = fixture("judge-manifest.valid-python313");
let report: versions::JudgementReport = fixture("judge-result.valid-python313");
let digest: v1::Digest = match &old_report {
versions::JudgementReport::V1(r) => r.manifest_digest.clone(),
_ => unreachable!(),
};
old_report
.validate_for_manifest(&old_manifest, &digest)
.unwrap();
report.validate_for_manifest(&manifest, &digest).unwrap();
assert!(
old_report
.validate_for_manifest(&manifest, &digest)
.is_err()
);
assert!(
report
.validate_for_manifest(&old_manifest, &digest)
.is_err()
);
assert_eq!(
old_manifest.canonical_bytes().unwrap(),
fs::read(original.join("canonical-manifest.v1.txt")).unwrap()
);
let data = fs::read(fixtures().join("judge-manifest.valid-python313.json")).unwrap();
let text = String::from_utf8(data).unwrap();
for replacement in [
"\"schema_version\": 3",
"\"schema_version\": true",
"\"schema_version\": 2, \"schema_version\": 2",
] {
let invalid = text.replace("\"schema_version\": 2", replacement);
assert!(v1::decode_wire::<versions::JobManifest>(invalid.as_bytes()).is_err());
}
}
@@ -0,0 +1 @@
{"cases":[{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000004","expected":{"bytes":0,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":0,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000005","expected":{"bytes":1,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":1,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000006","expected":{"bytes":2,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":2,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}}],"comparison":"exact_bytes","compile_limits":{"cpu_time_us":10000000,"file_bytes":67108864,"memory_bytes":536870912,"open_files":128,"processes":32,"stack_bytes":16777216,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":30000000,"workdir_bytes":268435456},"evaluation_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000001","job_wall_time_us":60000000,"kind":"judge.manifest","language":"c17","problem_version_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000003","run_limits":{"cpu_time_us":1000000,"file_bytes":16777216,"memory_bytes":67108864,"open_files":64,"processes":8,"stack_bytes":8388608,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":3000000,"workdir_bytes":67108864},"schema_version":2,"source":{"bytes":124,"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"submission_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000002","toolchain":{"image_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","image_kind":"linux_gnu_cxx_x86_64_v1","image_revision":1,"runtime_version":"gnu-cxx-v1","toolchain_id":"gnu-cxx-v1"}}
@@ -0,0 +1 @@
{"cases":[{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000004","expected":{"bytes":0,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":0,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000005","expected":{"bytes":1,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":1,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000006","expected":{"bytes":2,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":2,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}}],"comparison":"exact_bytes","compile_limits":{"cpu_time_us":10000000,"file_bytes":67108864,"memory_bytes":536870912,"open_files":128,"processes":32,"stack_bytes":16777216,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":30000000,"workdir_bytes":268435456},"evaluation_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000001","job_wall_time_us":60000000,"kind":"judge.manifest","language":"cpp20","problem_version_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000003","run_limits":{"cpu_time_us":1000000,"file_bytes":16777216,"memory_bytes":67108864,"open_files":64,"processes":8,"stack_bytes":8388608,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":3000000,"workdir_bytes":67108864},"schema_version":2,"source":{"bytes":124,"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"submission_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000002","toolchain":{"image_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","image_kind":"linux_gnu_cxx_x86_64_v1","image_revision":1,"runtime_version":"gnu-cxx-v1","toolchain_id":"gnu-cxx-v1"}}
@@ -0,0 +1 @@
{"cases":[{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000004","expected":{"bytes":0,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":0,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000005","expected":{"bytes":1,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":1,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000006","expected":{"bytes":2,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":2,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}}],"comparison":"exact_bytes","compile_limits":{"cpu_time_us":10000000,"file_bytes":67108864,"memory_bytes":536870912,"open_files":128,"processes":32,"stack_bytes":16777216,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":30000000,"workdir_bytes":268435456},"evaluation_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000001","job_wall_time_us":60000000,"kind":"judge.manifest","language":"java21","problem_version_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000003","run_limits":{"cpu_time_us":1000000,"file_bytes":16777216,"memory_bytes":268435456,"open_files":64,"processes":16,"stack_bytes":8388608,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":3000000,"workdir_bytes":67108864},"schema_version":2,"source":{"bytes":124,"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"submission_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000002","toolchain":{"image_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","image_kind":"linux_openjdk21_x86_64_v1","image_revision":1,"runtime_version":"21.0.12.1+1-LTS","toolchain_id":"openjdk21-v1"}}
@@ -0,0 +1 @@
{"cases":[{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000004","expected":{"bytes":0,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":0,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000005","expected":{"bytes":1,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":1,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}},{"case_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000006","expected":{"bytes":2,"digest":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"},"input":{"bytes":2,"digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}}],"comparison":"exact_bytes","compile_limits":{"cpu_time_us":10000000,"file_bytes":67108864,"memory_bytes":536870912,"open_files":128,"processes":32,"stack_bytes":16777216,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":30000000,"workdir_bytes":268435456},"evaluation_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000001","job_wall_time_us":60000000,"kind":"judge.manifest","language":"python313","problem_version_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000003","run_limits":{"cpu_time_us":1000000,"file_bytes":16777216,"memory_bytes":67108864,"open_files":64,"processes":8,"stack_bytes":8388608,"stderr_bytes":1048576,"stdout_bytes":1048576,"wall_time_us":3000000,"workdir_bytes":67108864},"schema_version":2,"source":{"bytes":124,"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"submission_id":"aaaaaaaa-aaaa-4aaa-8aaa-000000000002","toolchain":{"image_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","image_kind":"linux_cpython313_x86_64_v1","image_revision":1,"runtime_version":"3.13.16","toolchain_id":"cpython313-v1"}}
@@ -0,0 +1,180 @@
{
"max_concurrent_jobs": 1,
"prefetch": 1,
"max_retries": 2,
"max_job_wall_time_us": 60000000,
"max_package_bytes": 67108864,
"schema_version": 2,
"capabilities": [
{
"language": "c17",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "cpp20",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "java21",
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 268435456,
"stack_bytes": 8388608,
"processes": 16,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "c17",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
}
]
}
@@ -0,0 +1,146 @@
{
"max_concurrent_jobs": 1,
"prefetch": 1,
"max_retries": 2,
"max_job_wall_time_us": 60000000,
"max_package_bytes": 67108864,
"schema_version": 2,
"capabilities": [
{
"language": "c17",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "cpp20",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "c17",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
}
]
}
+146
View File
@@ -0,0 +1,146 @@
{
"max_concurrent_jobs": 1,
"prefetch": 1,
"max_retries": 2,
"max_job_wall_time_us": 60000000,
"max_package_bytes": 67108864,
"schema_version": 2,
"capabilities": [
{
"language": "c17",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "cpp20",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
},
{
"language": "java21",
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"compile_ceiling": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_ceiling": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 268435456,
"stack_bytes": 8388608,
"processes": 16,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
}
}
]
}
+14
View File
@@ -0,0 +1,14 @@
{
"schema_version": 2,
"kind": "judge.lease",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"lease_token": "0000000000000000000000000000000000000000000000000000000000000000",
"attempt_number": 1,
"expires_at_unix_ms": 1800000000000,
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
}
@@ -0,0 +1,81 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000,
"image_root": "/host/credentials"
}
@@ -0,0 +1,81 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000,
"run_profile": "shell"
}
@@ -0,0 +1,91 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "java21",
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 268435456,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "java21",
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 16,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "java21",
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 268435456,
"stack_bytes": 8388608,
"processes": 16,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 16777216,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.14.0"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 1000
}
@@ -0,0 +1,80 @@
{
"schema_version": 3,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": true,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "c17",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "cpp20",
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "java21",
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 268435456,
"stack_bytes": 8388608,
"processes": 16,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
@@ -0,0 +1,80 @@
{
"schema_version": 2,
"kind": "judge.manifest",
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"submission_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000002",
"problem_version_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000003",
"language": "python313",
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 0
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 1
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 1
}
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"input": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 2
},
"expected": {
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"bytes": 2
}
}
],
"comparison": "exact_bytes",
"compile_limits": {
"cpu_time_us": 10000000,
"wall_time_us": 30000000,
"memory_bytes": 536870912,
"stack_bytes": 16777216,
"processes": 32,
"open_files": 128,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 67108864,
"workdir_bytes": 268435456
},
"run_limits": {
"cpu_time_us": 1000000,
"wall_time_us": 3000000,
"memory_bytes": 67108864,
"stack_bytes": 8388608,
"processes": 8,
"open_files": 64,
"stdout_bytes": 1048576,
"stderr_bytes": 1048576,
"file_bytes": 16777216,
"workdir_bytes": 67108864
},
"job_wall_time_us": 60000000
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "native_executable",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 2
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"files": [
{
"path": "main",
"artifact": {
"digest": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"bytes": 4096
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "native_executable",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 2
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"files": [
{
"path": "main",
"artifact": {
"digest": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"bytes": 4096
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 2
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "python_source",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 2
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.py",
"artifact": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "/work/Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,100 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": ".class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.jar",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,86 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "pkg/Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 67108864
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 67108864
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 67108864
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 67108864
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "../Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "类.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 0
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "python_source",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.py",
"artifact": {
"digest": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "python_source",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.pyc",
"artifact": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "native_executable",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.py",
"artifact": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
+72
View File
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "native_executable",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"files": [
{
"path": "main",
"artifact": {
"digest": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"bytes": 4096
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,25 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "cancelled",
"program": null,
"diagnostics": "synthetic compiler diagnostic\n",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [],
"verdict": "cancelled",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": null,
"run_memory_peak_bytes": null
}
@@ -0,0 +1,60 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "python_source",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.py",
"artifact": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
}
],
"verdict": "cancelled",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 100,
"run_memory_peak_bytes": 262144
}
+25
View File
@@ -0,0 +1,25 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "compilation_error",
"program": null,
"diagnostics": "synthetic compiler diagnostic\n",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [],
"verdict": "compilation_error",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": null,
"run_memory_peak_bytes": null
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "python_source",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.py",
"artifact": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "system_error",
"cleanup_complete": false,
"failure_code": "cleanup_failed",
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,25 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "compilation_limit",
"program": null,
"diagnostics": "synthetic compiler diagnostic\n",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [],
"verdict": "compilation_error",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": null,
"run_memory_peak_bytes": null
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "native_executable",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "gnu-cxx-v1",
"image_kind": "linux_gnu_cxx_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "gnu-cxx-v1"
},
"files": [
{
"path": "main",
"artifact": {
"digest": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"bytes": 4096
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,93 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "java_classes",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "openjdk21-v1",
"image_kind": "linux_openjdk21_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "21.0.12.1+1-LTS"
},
"files": [
{
"path": "Helper.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$1.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main$Inner.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
},
{
"path": "Main.class",
"artifact": {
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"bytes": 64
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
@@ -0,0 +1,72 @@
{
"schema_version": 2,
"kind": "judge.result",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"manifest_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"compilation": {
"status": "succeeded",
"program": {
"kind": "python_source",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"source": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
},
"toolchain": {
"toolchain_id": "cpython313-v1",
"image_kind": "linux_cpython313_x86_64_v1",
"image_revision": 1,
"image_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"runtime_version": "3.13.16"
},
"files": [
{
"path": "main.py",
"artifact": {
"digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bytes": 124
}
}
]
},
"diagnostics": "",
"diagnostics_truncated": false,
"cpu_time_us": 100000,
"memory_peak_bytes": 16777216
},
"cases": [
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000004",
"verdict": "accepted",
"cpu_time_us": 100,
"memory_peak_bytes": 262144
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000005",
"verdict": "accepted",
"cpu_time_us": 200,
"memory_peak_bytes": 524288
},
{
"case_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000006",
"verdict": "accepted",
"cpu_time_us": 300,
"memory_peak_bytes": 524288
}
],
"verdict": "accepted",
"cleanup_complete": true,
"failure_code": null,
"run_cpu_time_us": 600,
"run_memory_peak_bytes": 524288
}
+14
View File
@@ -0,0 +1,14 @@
{
"schema_version": 2,
"kind": "judge.stage",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"sequence": 1,
"stage": "compiling",
"case_index": null,
"preparation_kind": "compile"
}
@@ -0,0 +1,14 @@
{
"schema_version": 2,
"kind": "judge.stage",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"sequence": 1,
"stage": "compiling",
"case_index": null,
"preparation_kind": "compile"
}
@@ -0,0 +1,14 @@
{
"schema_version": 2,
"kind": "judge.stage",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"sequence": 1,
"stage": "compiling",
"case_index": null,
"preparation_kind": "compile"
}
@@ -0,0 +1,14 @@
{
"schema_version": 2,
"kind": "judge.stage",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"sequence": 1,
"stage": "compiling",
"case_index": null,
"preparation_kind": "syntax_check"
}
+11
View File
@@ -0,0 +1,11 @@
{
"schema_version": 2,
"kind": "judge.stopped",
"binding": {
"evaluation_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000001",
"attempt_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000007",
"worker_id": "aaaaaaaa-aaaa-4aaa-8aaa-000000000008",
"fencing_version": 1
},
"cleanup_complete": true
}