runops 2.1.2__tar.gz → 2.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {runops-2.1.2 → runops-2.1.3}/PKG-INFO +2 -2
- {runops-2.1.2 → runops-2.1.3}/README.md +1 -1
- {runops-2.1.2 → runops-2.1.3}/pyproject.toml +1 -1
- {runops-2.1.2 → runops-2.1.3}/src/runops/__init__.py +1 -1
- {runops-2.1.2 → runops-2.1.3}/src/runops/cli.py +6 -1
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/setup.py +10 -3
- {runops-2.1.2 → runops-2.1.3}/tests/test_setup_misc.py +25 -0
- {runops-2.1.2 → runops-2.1.3}/uv.lock +1 -1
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/check/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/improve-harness/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/agents/openai.yaml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/examples/refactor-request.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/anti-patterns.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/api-compatibility.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/packaging-modernization.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/refactor-playbook.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/verification.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/scripts/import_smoke.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/scripts/inspect_python_package.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/release/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/simulator-adapter/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/spec-reviewer/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.agents/skills/sync-docs/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/agents/spec-reviewer.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/rules/architecture.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/rules/dev-workflow.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/rules/gotchas.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/settings.json +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/check/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/improve-harness/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/python-package-refactor/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/release/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/simulator-adapter/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/spec-reviewer/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.claude/skills/sync-docs/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.codex/README.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/.codex/agents/spec-reviewer.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.codex/config.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.codex/rules/runops.rules +0 -0
- {runops-2.1.2 → runops-2.1.3}/.dockerignore +0 -0
- {runops-2.1.2 → runops-2.1.3}/.gitattributes +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/assets/conversation-dark.svg +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/assets/conversation-light.svg +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/assets/hero-dark.svg +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/assets/hero-light.svg +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/assets/make_readme_art.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/workflows/ci.yml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.github/workflows/publish.yml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.gitignore +0 -0
- {runops-2.1.2 → runops-2.1.3}/.harness/manifest.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.pre-commit-config.yaml +0 -0
- {runops-2.1.2 → runops-2.1.3}/.vscode/settings.json +0 -0
- {runops-2.1.2 → runops-2.1.3}/AGENTS.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/CLAUDE.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/LICENSE +0 -0
- {runops-2.1.2 → runops-2.1.3}/SPEC.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/docs/adapter.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/docs/reference.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/adapters/__init__.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/adapters/base.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/adapters/generic.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/adapters/registry.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/case.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/config.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/errors.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/harness.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/jobgen.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/launchers.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/legacy_adapters/__init__.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/legacy_adapters/beach.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/legacy_adapters/emses.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/manifest.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/__init__.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/common.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/create.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/listing.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/migrate.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/notes.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/skills.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/submit.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/sync.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/ops/tidy.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/project.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/runtime.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/skills/runops-check-status/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/skills/runops-create-run/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/skills/runops-maintain/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/skills/runops-reference/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/skills/runops-tidy/SKILL.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/slurm.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/src/runops/util.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/__init__.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/conftest.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/.codex/rules/a.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/.runops/test-runs/T20260701-0001/receipt.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/.runops/work/beach-x-abc/bin/beach +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/AGENTS.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/CLAUDE.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/cases/beach/plane/beach.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/cases/beach/plane/case.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/cases/old/beach.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/cases/old/case.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/launchers.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/research/CURRENT.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runops.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/AGENTS.md +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/_archive/plane/R20260601-0001/manifest.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/plane/R20260701-0001--a/input/beach.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/plane/R20260701-0001--a/manifest.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/plane/R20260702-0001/manifest.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/scan/R20260701-0002/manifest.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/scan/survey.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/simulators.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/site.toml +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/golden/mpi_standard.sh +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/golden/openmp_rsc.sh +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_adapters.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_build.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_dev_harness.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_jobgen.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_legacy_adapters.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_lifecycle.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_manifest_config.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_migrate.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_scratch_tidy.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_skills.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_sweep.py +0 -0
- {runops-2.1.2 → runops-2.1.3}/tests/test_sync_evidence.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: runops
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.3
|
|
4
4
|
Summary: Run ledger and Slurm job submission for HPC simulation projects
|
|
5
5
|
Project-URL: Homepage, https://github.com/Nkzono99/runops
|
|
6
6
|
Project-URL: Documentation, https://github.com/Nkzono99/runops/blob/main/docs/reference.md
|
|
@@ -111,7 +111,7 @@ run は ID が変わらないので、directory を移動してもエージェ
|
|
|
111
111
|
| simulator | package | 状態 |
|
|
112
112
|
|---|---|---|
|
|
113
113
|
| MPIEMSES3D | `mpiemses3d-tools` ≥ 4.20 | adapter とエージェント向け skill を同梱 |
|
|
114
|
-
| BEACH | `beach-bem` |
|
|
114
|
+
| BEACH | `beach-bem` ≥ 3.0 | adapter とエージェント向け skill を同梱 |
|
|
115
115
|
| その他 | 自作の adapter、または `generic` | [adapter ガイド](https://github.com/Nkzono99/runops/blob/main/docs/adapter.md) |
|
|
116
116
|
|
|
117
117
|
---
|
|
@@ -80,7 +80,7 @@ run は ID が変わらないので、directory を移動してもエージェ
|
|
|
80
80
|
| simulator | package | 状態 |
|
|
81
81
|
|---|---|---|
|
|
82
82
|
| MPIEMSES3D | `mpiemses3d-tools` ≥ 4.20 | adapter とエージェント向け skill を同梱 |
|
|
83
|
-
| BEACH | `beach-bem` |
|
|
83
|
+
| BEACH | `beach-bem` ≥ 3.0 | adapter とエージェント向け skill を同梱 |
|
|
84
84
|
| その他 | 自作の adapter、または `generic` | [adapter ガイド](https://github.com/Nkzono99/runops/blob/main/docs/adapter.md) |
|
|
85
85
|
|
|
86
86
|
---
|
|
@@ -152,7 +152,12 @@ def init(
|
|
|
152
152
|
report = init_project(root, sims, site=site, name=name, install=install)
|
|
153
153
|
if report.site_detected:
|
|
154
154
|
out.print(f"site: {report.site} (guessed from host {hostname()}; use --site to change)")
|
|
155
|
-
if
|
|
155
|
+
if report.install_failed:
|
|
156
|
+
err.print(
|
|
157
|
+
"[yellow]the project is ready, but simulator packages are not installed; "
|
|
158
|
+
"ask your agent to fix the install, or run `runo update` after fixing it[/]"
|
|
159
|
+
)
|
|
160
|
+
elif not install and not no_install:
|
|
156
161
|
out.print("packages not installed; ask your agent or run `runo update` later")
|
|
157
162
|
for item in report.created:
|
|
158
163
|
out.print(f"created {item}")
|
|
@@ -30,7 +30,7 @@ from runops.runtime import package_specs, resolve_runtime
|
|
|
30
30
|
# Package specs for simulators whose adapter lives in their own package.
|
|
31
31
|
KNOWN_PACKAGES = {
|
|
32
32
|
"emses": "MPIEMSES3D @ git+https://github.com/CS12-Laboratory/MPIEMSES3D.git",
|
|
33
|
-
"beach": "beach-bem",
|
|
33
|
+
"beach": "beach-bem>=3.0", # 3.0 ships the runops adapter and skills
|
|
34
34
|
}
|
|
35
35
|
KNOWN_EXECUTABLES = {"emses": "mpiemses3D", "beach": "beach"}
|
|
36
36
|
|
|
@@ -109,6 +109,7 @@ class InitReport:
|
|
|
109
109
|
root: Path
|
|
110
110
|
site: str = ""
|
|
111
111
|
site_detected: bool = False
|
|
112
|
+
install_failed: bool = False
|
|
112
113
|
created: list[str] = field(default_factory=list)
|
|
113
114
|
installed: list[str] = field(default_factory=list)
|
|
114
115
|
warnings: list[str] = field(default_factory=list)
|
|
@@ -190,8 +191,14 @@ def init_project(
|
|
|
190
191
|
|
|
191
192
|
project = Project(load_config(root))
|
|
192
193
|
if install:
|
|
193
|
-
|
|
194
|
-
|
|
194
|
+
# A failed install must not leave a half-made project: runops.toml is
|
|
195
|
+
# already written, so finish the agent files and let `runo update` retry.
|
|
196
|
+
try:
|
|
197
|
+
report.installed, warnings = install_packages(project, upgrade=False)
|
|
198
|
+
report.warnings += warnings
|
|
199
|
+
except RunopsError as exc:
|
|
200
|
+
report.install_failed = True
|
|
201
|
+
report.warnings.append(f"package install failed: {exc}")
|
|
195
202
|
report.created += add_legacy_adapters(project)
|
|
196
203
|
report.warnings += refresh_agent_files(project)
|
|
197
204
|
report.created += ["AGENTS.md", "CLAUDE.md", ".agents/skills/", ".claude/skills/"]
|
|
@@ -211,3 +211,28 @@ def test_init_install_needs_yes_off_terminal(
|
|
|
211
211
|
res = cli("init", "emses")
|
|
212
212
|
assert res.code == 2 and "--yes" in res.err
|
|
213
213
|
assert not (tmp_path / "runops.toml").exists()
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def test_init_finishes_when_install_fails(
|
|
217
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch, cli
|
|
218
|
+
) -> None: # type: ignore[no-untyped-def]
|
|
219
|
+
from runops.errors import RunError
|
|
220
|
+
|
|
221
|
+
def failing_install(project, *, upgrade): # type: ignore[no-untyped-def]
|
|
222
|
+
raise RunError("package install failed:\nerror: fpm not found")
|
|
223
|
+
|
|
224
|
+
monkeypatch.setattr("runops.ops.setup.install_packages", failing_install)
|
|
225
|
+
monkeypatch.chdir(tmp_path)
|
|
226
|
+
res = cli("init", "beach", "-y")
|
|
227
|
+
assert res.code == 0, res.err
|
|
228
|
+
assert "fpm not found" in res.err
|
|
229
|
+
assert "runo update" in res.err
|
|
230
|
+
for name in (
|
|
231
|
+
"runops.toml",
|
|
232
|
+
"AGENTS.md",
|
|
233
|
+
"CLAUDE.md",
|
|
234
|
+
".agents/skills/runops-maintain/SKILL.md",
|
|
235
|
+
):
|
|
236
|
+
assert (tmp_path / name).exists(), name
|
|
237
|
+
assert load_toml(tmp_path / "runops.toml")["simulators"]["beach"]["package"] == "beach-bem>=3.0"
|
|
238
|
+
assert (tmp_path / "adapters/beach.py").is_file() # no entry point yet -> bundled port
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/examples/refactor-request.md
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/anti-patterns.md
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/api-compatibility.md
RENAMED
|
File without changes
|
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/refactor-playbook.md
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/references/verification.md
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/scripts/api_surface_snapshot.py
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/.agents/skills/python-package-refactor/scripts/import_smoke.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/plane/R20260701-0001--a/manifest.toml
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/plane/R20260702-0001/manifest.toml
RENAMED
|
File without changes
|
{runops-2.1.2 → runops-2.1.3}/tests/fixtures/v1-project/runs/scan/R20260701-0002/manifest.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|