From 12c6edc611a6186c3b9c95c74f8a4ac832f24a7d Mon Sep 17 00:00:00 2001 From: abrichr Date: Fri, 16 Oct 2026 22:00:05 -0400 Subject: [PATCH] feat(cloud): Kaggle GPU training path and a guard against Modal GPU on production Production Modal (runner/compiler/recorder for app.openadapt.ai) was disabled on 2026-10-16 when GPU training exhausted the workspace spend limit. - kaggle_cloud: stage dataset + GPU script kernel (kernel-metadata.json with enable_gpu/internet, private), push via kaggle datasets/kernels, status, pull results; checkpoints re-upload as dataset checkpoint/ for resume. - kaggle_train_kernel: refuses to run without GPU and internet (exit 3). - modal_gpu_guard: Modal GPU train/serve refuse unless OPENADAPT_ALLOW_MODAL_GPU=1, a non-prod MODAL_ENVIRONMENT, and a non-production Modal profile. - docs: Kaggle usage and setting a Modal workspace budget/spend limit. Signed-off-by: Richard Abrich --- docs/cloud_gpu_training.md | 34 ++ openadapt_ml/cloud/kaggle_cloud.py | 196 +++++++++ openadapt_ml/cloud/kaggle_train_kernel.py | 91 +++++ openadapt_ml/cloud/modal_cloud.py | 15 + openadapt_ml/cloud/modal_gpu_guard.py | 93 +++++ .../checkpoint/step_1/model.pt | Bin 0 -> 68559 bytes .../checkpoint/step_2/model.pt | Bin 0 -> 68559 bytes .../convergence/convergence_data.json | 383 ++++++++++++++++++ .../20261016_215856/convergence/summary.txt | 22 + .../grpo_e2e/20261016_215856/model_diff.json | 22 + .../policy_gradient_loss_properties.json | 48 +++ .../rollout_collection/rollout_0.json | 38 ++ .../rollout_collection/rollout_0_step_0.png | Bin 0 -> 2600 bytes .../rollout_collection/rollout_0_step_1.png | Bin 0 -> 2614 bytes .../rollout_collection/rollout_0_step_2.png | Bin 0 -> 2707 bytes .../rollout_collection/rollout_0_step_3.png | Bin 0 -> 2740 bytes .../rollout_collection/rollout_1.json | 38 ++ .../rollout_collection/rollout_1_step_0.png | Bin 0 -> 2621 bytes .../rollout_collection/rollout_1_step_1.png | Bin 0 -> 2501 bytes .../rollout_collection/rollout_1_step_2.png | Bin 0 -> 2626 bytes .../rollout_collection/rollout_1_step_3.png | Bin 0 -> 2655 bytes .../rollout_collection/rollout_2.json | 38 ++ .../rollout_collection/rollout_2_step_0.png | Bin 0 -> 2711 bytes .../rollout_collection/rollout_2_step_1.png | Bin 0 -> 2626 bytes .../rollout_collection/rollout_2_step_2.png | Bin 0 -> 2610 bytes .../rollout_collection/rollout_2_step_3.png | Bin 0 -> 2740 bytes .../rollout_collection/rollout_3.json | 38 ++ .../rollout_collection/rollout_3_step_0.png | Bin 0 -> 2720 bytes .../rollout_collection/rollout_3_step_1.png | Bin 0 -> 2631 bytes .../rollout_collection/rollout_3_step_2.png | Bin 0 -> 2735 bytes .../rollout_collection/rollout_3_step_3.png | Bin 0 -> 2639 bytes .../rollout_collection/rollout_4.json | 38 ++ .../rollout_collection/rollout_4_step_0.png | Bin 0 -> 2688 bytes .../rollout_collection/rollout_4_step_1.png | Bin 0 -> 2599 bytes .../rollout_collection/rollout_4_step_2.png | Bin 0 -> 2691 bytes .../rollout_collection/rollout_4_step_3.png | Bin 0 -> 2703 bytes .../rollout_collection/rollout_5.json | 38 ++ .../rollout_collection/rollout_5_step_0.png | Bin 0 -> 2730 bytes .../rollout_collection/rollout_5_step_1.png | Bin 0 -> 2634 bytes .../rollout_collection/rollout_5_step_2.png | Bin 0 -> 2742 bytes .../rollout_collection/rollout_5_step_3.png | Bin 0 -> 2775 bytes .../rollout_collection/summary.json | 23 ++ .../rollout_traces/step_0_rollout_0.json | 20 + .../step_0_rollout_0_screenshot_0.png | Bin 0 -> 2600 bytes .../step_0_rollout_0_screenshot_1.png | Bin 0 -> 2614 bytes .../rollout_traces/step_0_rollout_1.json | 20 + .../step_0_rollout_1_screenshot_0.png | Bin 0 -> 2621 bytes .../step_0_rollout_1_screenshot_1.png | Bin 0 -> 2501 bytes .../rollout_traces/step_0_rollout_2.json | 20 + .../step_0_rollout_2_screenshot_0.png | Bin 0 -> 2711 bytes .../step_0_rollout_2_screenshot_1.png | Bin 0 -> 2626 bytes .../rollout_traces/step_0_rollout_3.json | 20 + .../step_0_rollout_3_screenshot_0.png | Bin 0 -> 2720 bytes .../step_0_rollout_3_screenshot_1.png | Bin 0 -> 2631 bytes .../rollout_traces/step_1_rollout_0.json | 20 + .../step_1_rollout_0_screenshot_0.png | Bin 0 -> 2600 bytes .../step_1_rollout_0_screenshot_1.png | Bin 0 -> 2614 bytes .../rollout_traces/step_1_rollout_1.json | 20 + .../step_1_rollout_1_screenshot_0.png | Bin 0 -> 2621 bytes .../step_1_rollout_1_screenshot_1.png | Bin 0 -> 2501 bytes .../rollout_traces/step_1_rollout_2.json | 20 + .../step_1_rollout_2_screenshot_0.png | Bin 0 -> 2711 bytes .../step_1_rollout_2_screenshot_1.png | Bin 0 -> 2626 bytes .../rollout_traces/step_1_rollout_3.json | 20 + .../step_1_rollout_3_screenshot_0.png | Bin 0 -> 2720 bytes .../step_1_rollout_3_screenshot_1.png | Bin 0 -> 2631 bytes .../grpo_e2e/20261016_215856/summary.txt | 25 ++ .../grpo_e2e/20261016_215856/test_report.json | 15 + .../20261016_215856/training_log.json | 34 ++ .../weight_diff/detailed_diff.json | 51 +++ .../checkpoint/step_1/model.pt | Bin 0 -> 68559 bytes .../checkpoint/step_2/model.pt | Bin 0 -> 68559 bytes .../convergence/convergence_data.json | 383 ++++++++++++++++++ .../20261016_215929/convergence/summary.txt | 22 + .../grpo_e2e/20261016_215929/model_diff.json | 22 + .../policy_gradient_loss_properties.json | 48 +++ .../rollout_collection/rollout_0.json | 38 ++ .../rollout_collection/rollout_0_step_0.png | Bin 0 -> 2600 bytes .../rollout_collection/rollout_0_step_1.png | Bin 0 -> 2614 bytes .../rollout_collection/rollout_0_step_2.png | Bin 0 -> 2707 bytes .../rollout_collection/rollout_0_step_3.png | Bin 0 -> 2740 bytes .../rollout_collection/rollout_1.json | 38 ++ .../rollout_collection/rollout_1_step_0.png | Bin 0 -> 2621 bytes .../rollout_collection/rollout_1_step_1.png | Bin 0 -> 2501 bytes .../rollout_collection/rollout_1_step_2.png | Bin 0 -> 2626 bytes .../rollout_collection/rollout_1_step_3.png | Bin 0 -> 2655 bytes .../rollout_collection/rollout_2.json | 38 ++ .../rollout_collection/rollout_2_step_0.png | Bin 0 -> 2711 bytes .../rollout_collection/rollout_2_step_1.png | Bin 0 -> 2626 bytes .../rollout_collection/rollout_2_step_2.png | Bin 0 -> 2610 bytes .../rollout_collection/rollout_2_step_3.png | Bin 0 -> 2740 bytes .../rollout_collection/rollout_3.json | 38 ++ .../rollout_collection/rollout_3_step_0.png | Bin 0 -> 2720 bytes .../rollout_collection/rollout_3_step_1.png | Bin 0 -> 2631 bytes .../rollout_collection/rollout_3_step_2.png | Bin 0 -> 2735 bytes .../rollout_collection/rollout_3_step_3.png | Bin 0 -> 2639 bytes .../rollout_collection/rollout_4.json | 38 ++ .../rollout_collection/rollout_4_step_0.png | Bin 0 -> 2688 bytes .../rollout_collection/rollout_4_step_1.png | Bin 0 -> 2599 bytes .../rollout_collection/rollout_4_step_2.png | Bin 0 -> 2691 bytes .../rollout_collection/rollout_4_step_3.png | Bin 0 -> 2703 bytes .../rollout_collection/rollout_5.json | 38 ++ .../rollout_collection/rollout_5_step_0.png | Bin 0 -> 2730 bytes .../rollout_collection/rollout_5_step_1.png | Bin 0 -> 2634 bytes .../rollout_collection/rollout_5_step_2.png | Bin 0 -> 2742 bytes .../rollout_collection/rollout_5_step_3.png | Bin 0 -> 2775 bytes .../rollout_collection/summary.json | 23 ++ .../rollout_traces/step_0_rollout_0.json | 20 + .../step_0_rollout_0_screenshot_0.png | Bin 0 -> 2600 bytes .../step_0_rollout_0_screenshot_1.png | Bin 0 -> 2614 bytes .../rollout_traces/step_0_rollout_1.json | 20 + .../step_0_rollout_1_screenshot_0.png | Bin 0 -> 2621 bytes .../step_0_rollout_1_screenshot_1.png | Bin 0 -> 2501 bytes .../rollout_traces/step_0_rollout_2.json | 20 + .../step_0_rollout_2_screenshot_0.png | Bin 0 -> 2711 bytes .../step_0_rollout_2_screenshot_1.png | Bin 0 -> 2626 bytes .../rollout_traces/step_0_rollout_3.json | 20 + .../step_0_rollout_3_screenshot_0.png | Bin 0 -> 2720 bytes .../step_0_rollout_3_screenshot_1.png | Bin 0 -> 2631 bytes .../rollout_traces/step_1_rollout_0.json | 20 + .../step_1_rollout_0_screenshot_0.png | Bin 0 -> 2600 bytes .../step_1_rollout_0_screenshot_1.png | Bin 0 -> 2614 bytes .../rollout_traces/step_1_rollout_1.json | 20 + .../step_1_rollout_1_screenshot_0.png | Bin 0 -> 2621 bytes .../step_1_rollout_1_screenshot_1.png | Bin 0 -> 2501 bytes .../rollout_traces/step_1_rollout_2.json | 20 + .../step_1_rollout_2_screenshot_0.png | Bin 0 -> 2711 bytes .../step_1_rollout_2_screenshot_1.png | Bin 0 -> 2626 bytes .../rollout_traces/step_1_rollout_3.json | 20 + .../step_1_rollout_3_screenshot_0.png | Bin 0 -> 2720 bytes .../step_1_rollout_3_screenshot_1.png | Bin 0 -> 2631 bytes .../grpo_e2e/20261016_215929/summary.txt | 25 ++ .../grpo_e2e/20261016_215929/test_report.json | 15 + .../20261016_215929/training_log.json | 34 ++ .../weight_diff/detailed_diff.json | 51 +++ tests/test_kaggle_cloud_and_modal_guard.py | 88 ++++ tests/test_modal_cloud.py | 10 + 137 files changed, 2549 insertions(+) create mode 100644 openadapt_ml/cloud/kaggle_cloud.py create mode 100644 openadapt_ml/cloud/kaggle_train_kernel.py create mode 100644 openadapt_ml/cloud/modal_gpu_guard.py create mode 100644 test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_1/model.pt create mode 100644 test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_2/model.pt create mode 100644 test_artifacts/grpo_e2e/20261016_215856/convergence/convergence_data.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/convergence/summary.txt create mode 100644 test_artifacts/grpo_e2e/20261016_215856/model_diff.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/policy_gradient_loss_properties.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_collection/summary.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215856/summary.txt create mode 100644 test_artifacts/grpo_e2e/20261016_215856/test_report.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/training_log.json create mode 100644 test_artifacts/grpo_e2e/20261016_215856/weight_diff/detailed_diff.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_1/model.pt create mode 100644 test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_2/model.pt create mode 100644 test_artifacts/grpo_e2e/20261016_215929/convergence/convergence_data.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/convergence/summary.txt create mode 100644 test_artifacts/grpo_e2e/20261016_215929/model_diff.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/policy_gradient_loss_properties.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_2.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_3.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_collection/summary.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3_screenshot_0.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3_screenshot_1.png create mode 100644 test_artifacts/grpo_e2e/20261016_215929/summary.txt create mode 100644 test_artifacts/grpo_e2e/20261016_215929/test_report.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/training_log.json create mode 100644 test_artifacts/grpo_e2e/20261016_215929/weight_diff/detailed_diff.json create mode 100644 tests/test_kaggle_cloud_and_modal_guard.py diff --git a/docs/cloud_gpu_training.md b/docs/cloud_gpu_training.md index 6eed660..efef907 100644 --- a/docs/cloud_gpu_training.md +++ b/docs/cloud_gpu_training.md @@ -1,5 +1,39 @@ # Cloud GPU Training +## Default: Kaggle (free), not Modal + +GPU training runs on Kaggle's free T4/P100 sessions. The production Modal +workspace hosts OpenAdapt's managed runner, compiler and recorder. On +2026-10-16 GPU training used up its monthly spend limit, and Modal stopped +production with it. Modal GPU commands in `openadapt_ml.cloud.modal_cloud` now +refuse to run unless you set `OPENADAPT_ALLOW_MODAL_GPU=1`, set +`MODAL_ENVIRONMENT` to a non-production environment, and activate a Modal +profile that is not in `OPENADAPT_MODAL_PROD_WORKSPACES` (default `abrichr`). + +```bash +# one-time: Kaggle API token (Kaggle → Settings → API → Create New Token) and phone verification +uv run python -m openadapt_ml.cloud.kaggle_cloud stage --bundle --config --username +uv run python -m openadapt_ml.cloud.kaggle_cloud push --new-dataset # later runs: push (versions the dataset) +uv run python -m openadapt_ml.cloud.kaggle_cloud status +uv run python -m openadapt_ml.cloud.kaggle_cloud pull # results → training_output/kaggle/output +# resume: stage again with --checkpoint training_output/kaggle/output/results +``` + +The kernel exits with code 3 if the session has no GPU or no internet, so a +CPU fallback can't pass for a GPU run. T4s have no bf16; the trainer turns +bf16 off automatically. Sessions are capped at 12 hours, and the GPU quota is +weekly. + +### Modal workspace budget (production) + +In the Modal dashboard, go to **Settings → Usage & Billing** for workspace +`abrichr` and set a **Workspace budget** and a **spend limit**. The hosted +services use well under $1/month, so a low cap is enough. Starter-plan budgets +apply to the whole workspace: a separate environment in the same workspace +still spends the production budget. Run any Modal GPU work in a separate +workspace. + + This guide covers using cloud GPUs for training OpenAdapt-ML models. Two providers are supported: | Provider | Setup Time | Cost | Best For | diff --git a/openadapt_ml/cloud/kaggle_cloud.py b/openadapt_ml/cloud/kaggle_cloud.py new file mode 100644 index 0000000..e6e470f --- /dev/null +++ b/openadapt_ml/cloud/kaggle_cloud.py @@ -0,0 +1,196 @@ +"""Kaggle GPU training for OpenAdapt (free T4/P100 sessions). + +Kaggle replaces Modal for GPU training. The flow uses only the ``kaggle`` CLI: + +1. ``stage``: builds a private dataset folder (bundle, config, optional + checkpoint) and a script-kernel folder whose ``kernel-metadata.json`` turns + on GPU and internet. +2. ``push``: ``kaggle datasets create`` (or ``version``), then + ``kaggle kernels push``. This starts a free Kaggle session; it never + touches Modal. +3. ``status`` / ``pull``: ``kaggle kernels status`` and + ``kaggle kernels output`` bring the results back. + +To resume, pass the pulled ``results`` directory as ``--checkpoint`` to the +next ``stage``; it is uploaded with the dataset as ``checkpoint/``. + +Credentials: ``~/.kaggle/access_token`` or ``~/.kaggle/kaggle.json``, or the +``KAGGLE_USERNAME``/``KAGGLE_KEY`` (or ``KAGGLE_API_TOKEN``) environment +variables. GPU and internet in kernels need a phone-verified Kaggle account. +""" + +from __future__ import annotations + +import argparse +import json +import re +import shutil +import subprocess +import sys +from pathlib import Path + +KERNEL_FILE = "kaggle_train_kernel.py" +STAGE_MARKER = "openadapt_kaggle_stage.json" +SLUG_RE = re.compile(r"^[a-z0-9][a-z0-9-]{4,48}[a-z0-9]$") +ACCELERATORS = ("NvidiaTeslaT4", "NvidiaTeslaP100") + + +def _check_slug(value: str, what: str) -> str: + if not SLUG_RE.fullmatch(value): + raise ValueError( + f"{what} must be 6-50 lowercase letters, digits or dashes: {value!r}" + ) + return value + + +def kernel_metadata( + username: str, kernel_slug: str, dataset_slug: str, accelerator: str +) -> dict: + """Kaggle kernel-metadata.json for a private GPU script kernel.""" + if accelerator not in ACCELERATORS: + raise ValueError(f"accelerator must be one of {ACCELERATORS}") + return { + "id": f"{username}/{_check_slug(kernel_slug, 'kernel slug')}", + "title": kernel_slug, + "code_file": KERNEL_FILE, + "language": "python", + "kernel_type": "script", + "is_private": True, + "enable_gpu": True, + "enable_internet": True, + "machine_shape": accelerator, + "dataset_sources": [f"{username}/{_check_slug(dataset_slug, 'dataset slug')}"], + "competition_sources": [], + "kernel_sources": [], + } + + +def dataset_metadata(username: str, dataset_slug: str) -> dict: + return { + "title": dataset_slug, + "id": f"{username}/{_check_slug(dataset_slug, 'dataset slug')}", + "licenses": [{"name": "other"}], + } + + +def stage( + bundle: Path, + config: Path, + out: Path, + username: str, + dataset_slug: str, + kernel_slug: str, + accelerator: str = "NvidiaTeslaT4", + checkpoint: Path | None = None, +) -> tuple[Path, Path]: + """Write /dataset and /kernel. Returns both paths.""" + if not (bundle / "training_data.jsonl").is_file(): + raise FileNotFoundError(f"{bundle}/training_data.jsonl not found") + if not config.is_file(): + raise FileNotFoundError(config) + dataset_dir, kernel_dir = out / "dataset", out / "kernel" + for d in (dataset_dir, kernel_dir): + if d.exists(): + shutil.rmtree(d) + d.mkdir(parents=True) + shutil.copytree(bundle, dataset_dir / "bundle") + shutil.copy2(config, dataset_dir / "train_config.yaml") + if checkpoint is not None: + shutil.copytree(checkpoint, dataset_dir / "checkpoint") + (dataset_dir / STAGE_MARKER).write_text( + json.dumps( + { + "dataset": dataset_slug, + "kernel": kernel_slug, + "has_checkpoint": checkpoint is not None, + } + ) + ) + (dataset_dir / "dataset-metadata.json").write_text( + json.dumps(dataset_metadata(username, dataset_slug), indent=2) + ) + shutil.copy2(Path(__file__).with_name(KERNEL_FILE), kernel_dir / KERNEL_FILE) + (kernel_dir / "kernel-metadata.json").write_text( + json.dumps( + kernel_metadata(username, kernel_slug, dataset_slug, accelerator), indent=2 + ) + ) + return dataset_dir, kernel_dir + + +def _kaggle(*args: str) -> int: + print("+ kaggle", " ".join(args), flush=True) + return subprocess.run(["kaggle", *args]).returncode + + +def push(staged: Path, new_dataset: bool, message: str) -> int: + dataset_dir, kernel_dir = staged / "dataset", staged / "kernel" + if new_dataset: + rc = _kaggle("datasets", "create", "-p", str(dataset_dir), "-r", "zip") + else: + rc = _kaggle( + "datasets", "version", "-p", str(dataset_dir), "-m", message, "-r", "zip" + ) + if rc: + return rc + print( + "Wait until the dataset version is ready before the kernel reads it.", + flush=True, + ) + return _kaggle("kernels", "push", "-p", str(kernel_dir)) + + +def _kernel_ref(staged: Path) -> str: + return json.loads((staged / "kernel" / "kernel-metadata.json").read_text())["id"] + + +def cli_main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description="Kaggle GPU training for OpenAdapt") + sub = parser.add_subparsers(dest="command", required=True) + s = sub.add_parser( + "stage", help="Write the dataset and kernel folders (no network)" + ) + s.add_argument("--bundle", type=Path, required=True) + s.add_argument("--config", type=Path, required=True) + s.add_argument("--out", type=Path, default=Path("training_output/kaggle")) + s.add_argument("--username", required=True, help="Kaggle username") + s.add_argument("--dataset-slug", default="openadapt-ml-train-data") + s.add_argument("--kernel-slug", default="openadapt-ml-train") + s.add_argument("--accelerator", default="NvidiaTeslaT4", choices=ACCELERATORS) + s.add_argument("--checkpoint", type=Path, help="Pulled results dir to resume from") + p = sub.add_parser("push", help="Upload the dataset and start the kernel") + p.add_argument("--staged", type=Path, default=Path("training_output/kaggle")) + p.add_argument( + "--new-dataset", action="store_true", help="First upload (datasets create)" + ) + p.add_argument("--message", default="openadapt-ml training data") + st = sub.add_parser("status", help="Kernel status") + st.add_argument("--staged", type=Path, default=Path("training_output/kaggle")) + pl = sub.add_parser("pull", help="Download kernel output (results)") + pl.add_argument("--staged", type=Path, default=Path("training_output/kaggle")) + pl.add_argument("--out", type=Path, default=Path("training_output/kaggle/output")) + args = parser.parse_args(argv) + + if args.command == "stage": + d, k = stage( + args.bundle, + args.config, + args.out, + args.username, + args.dataset_slug, + args.kernel_slug, + args.accelerator, + args.checkpoint, + ) + print(f"dataset: {d}\nkernel: {k}") + return 0 + if args.command == "push": + return push(args.staged, args.new_dataset, args.message) + if args.command == "status": + return _kaggle("kernels", "status", _kernel_ref(args.staged)) + args.out.mkdir(parents=True, exist_ok=True) + return _kaggle("kernels", "output", _kernel_ref(args.staged), "-p", str(args.out)) + + +if __name__ == "__main__": + sys.exit(cli_main()) diff --git a/openadapt_ml/cloud/kaggle_train_kernel.py b/openadapt_ml/cloud/kaggle_train_kernel.py new file mode 100644 index 0000000..bd67cfe --- /dev/null +++ b/openadapt_ml/cloud/kaggle_train_kernel.py @@ -0,0 +1,91 @@ +"""Kaggle kernel entrypoint for openadapt-ml SFT training. + +Pushed by ``openadapt_ml.cloud.kaggle_cloud``. It reads the staged dataset +(bundle, config, optional checkpoint) from /kaggle/input, trains on the +session GPU, and writes results to /kaggle/working/results so +``kaggle kernels output`` can pull them back. + +It exits with code 3 before installing anything if the session has no GPU or +no internet: a run that falls back to CPU must not pass for a GPU run. +""" + +import json +import os +import shutil +import socket +import subprocess +import sys +import time +from pathlib import Path + +PIP_SPEC = os.environ.get("OPENADAPT_ML_PIP_SPEC", "openadapt-ml[training]") +WORK = Path("/kaggle/working") +RESULTS = WORK / "results" + + +def _find_staged() -> Path: + hits = sorted(Path("/kaggle/input").rglob("openadapt_kaggle_stage.json")) + if not hits: + raise SystemExit("staged dataset not found under /kaggle/input") + return hits[0].parent + + +def _preflight() -> None: + probe = subprocess.run(["nvidia-smi", "-L"], capture_output=True, text=True) + print("GPU", probe.stdout.strip() or probe.stderr.strip(), flush=True) + if probe.returncode != 0 or "GPU" not in probe.stdout: + print("No GPU in this session; refusing to train on CPU.", flush=True) + raise SystemExit(3) from None + try: + socket.gethostbyname("pypi.org") + except OSError as exc: + print(f"No internet in this session ({exc}).", flush=True) + raise SystemExit(3) from None + + +def main() -> int: + _preflight() + staged = _find_staged() + stage = json.loads((staged / "openadapt_kaggle_stage.json").read_text()) + print("stage", stage, flush=True) + subprocess.run([sys.executable, "-m", "pip", "install", "-q", PIP_SPEC], check=True) + + bundle = WORK / "bundle" + if not bundle.exists(): + shutil.copytree(staged / "bundle", bundle) + RESULTS.mkdir(parents=True, exist_ok=True) + if (staged / "checkpoint").is_dir(): + shutil.copytree( + staged / "checkpoint", RESULTS / "checkpoint_in", dirs_exist_ok=True + ) + + cmd = [ + sys.executable, + "-m", + "openadapt_ml.scripts.train", + "--config", + str(staged / "train_config.yaml"), + "--jsonl", + str(bundle / "training_data.jsonl"), + "--output-dir", + str(RESULTS), + ] + print("Running:", " ".join(cmd), flush=True) + started = time.time() + with open(RESULTS / "train_stdout.log", "w") as log: + rc = subprocess.run( + cmd, cwd=bundle, stdout=log, stderr=subprocess.STDOUT + ).returncode + summary = { + "status": "completed" if rc == 0 else "failed", + "returncode": rc, + "elapsed_time": time.time() - started, + "stage": stage, + } + (RESULTS / "kaggle_run.json").write_text(json.dumps(summary, indent=2)) + print(json.dumps(summary), flush=True) + return rc + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/openadapt_ml/cloud/modal_cloud.py b/openadapt_ml/cloud/modal_cloud.py index 7fedee4..7119e7a 100644 --- a/openadapt_ml/cloud/modal_cloud.py +++ b/openadapt_ml/cloud/modal_cloud.py @@ -43,6 +43,11 @@ import tempfile from pathlib import Path +from openadapt_ml.cloud.modal_gpu_guard import ( + modal_gpu_refusal, + require_nonprod_modal_gpu, +) + # --------------------------------------------------------------------------- # Modal app definition (imported lazily so CLI parsing works without modal) # --------------------------------------------------------------------------- @@ -75,6 +80,7 @@ def _build_app(): Returns: (app, training_image, training_volume) """ + require_nonprod_modal_gpu() modal = _get_modal() app = modal.App(MODAL_APP_NAME) @@ -281,6 +287,7 @@ def _build_inference_app( Returns: (app, infer_fn) - the app and the inference function handle. """ + require_nonprod_modal_gpu() modal = _get_modal() app = modal.App(INFERENCE_APP_NAME) @@ -784,6 +791,10 @@ def _cmd_train(args: argparse.Namespace) -> int: 3. Run training function remotely 4. Download results """ + refusal = modal_gpu_refusal() + if refusal: + print(f"Refusing Modal GPU work: {refusal}") + return 1 modal = _get_modal() # --- Step 0: Auto-convert demos if --demo-dir provided --- @@ -924,6 +935,10 @@ def _cmd_serve(args: argparse.Namespace) -> int: inference function that clients can call via Modal's .remote() API. Alternatively, clients can use the HTTP wrapper in Qwen3VLAgent. """ + refusal = modal_gpu_refusal() + if refusal: + print(f"Refusing Modal GPU work: {refusal}") + return 1 modal = _get_modal() adapter_remote = None diff --git a/openadapt_ml/cloud/modal_gpu_guard.py b/openadapt_ml/cloud/modal_gpu_guard.py new file mode 100644 index 0000000..a2c617f --- /dev/null +++ b/openadapt_ml/cloud/modal_gpu_guard.py @@ -0,0 +1,93 @@ +"""Refuse Modal GPU work on the production workspace. + +The production Modal workspace hosts OpenAdapt's managed runner, compiler and +recorder. On 2026-10-16 GPU training used up that workspace's monthly spend +limit, and Modal stopped the production services with it. GPU training now +goes to Kaggle (``openadapt_ml.cloud.kaggle_cloud``). + +Modal GPU work runs only when the caller opts in on purpose: + +* ``OPENADAPT_ALLOW_MODAL_GPU=1``, and +* ``MODAL_ENVIRONMENT`` names a non-production environment (not ``main``, + ``prod`` or ``production``), and +* the active Modal profile/workspace is not listed in + ``OPENADAPT_MODAL_PROD_WORKSPACES`` (default: ``abrichr``, the workspace that + serves app.openadapt.ai). + +Modal Starter budgets are workspace-wide, so a separate environment in the +production workspace still spends the production budget. Use a separate +workspace (``modal profile activate ``) for GPU work. +""" + +from __future__ import annotations + +import os +import subprocess + +OPT_IN_ENV = "OPENADAPT_ALLOW_MODAL_GPU" +PROD_WORKSPACES_ENV = "OPENADAPT_MODAL_PROD_WORKSPACES" +DEFAULT_PROD_WORKSPACES = ("abrichr",) +PROD_ENVIRONMENTS = frozenset({"", "main", "prod", "production"}) + + +class ModalGpuRefused(RuntimeError): + """Raised when Modal GPU work would run on the production workspace.""" + + +def _active_profile() -> str: + explicit = os.environ.get("MODAL_PROFILE", "").strip() + if explicit: + return explicit + try: + out = subprocess.run( + ["modal", "profile", "current"], + capture_output=True, + text=True, + timeout=20, + check=False, + ) + except (OSError, subprocess.SubprocessError): + return "" + return out.stdout.strip() if out.returncode == 0 else "" + + +def modal_gpu_refusal( + environ: dict[str, str] | None = None, profile: str | None = None +) -> str | None: + """Return why Modal GPU work is refused, or None when it is allowed.""" + env = os.environ if environ is None else environ + if env.get(OPT_IN_ENV) != "1": + return ( + f"Modal GPU work is off by default. Train on Kaggle " + f"(python -m openadapt_ml.cloud.kaggle_cloud), or set {OPT_IN_ENV}=1 " + "with a non-production Modal workspace and environment." + ) + environment = env.get("MODAL_ENVIRONMENT", "").strip().lower() + if environment in PROD_ENVIRONMENTS: + return ( + "MODAL_ENVIRONMENT must name a non-production Modal environment " + f"(got {environment or 'unset'!r}; main/prod/production are refused)." + ) + prod = { + w.strip().lower() + for w in env.get(PROD_WORKSPACES_ENV, ",".join(DEFAULT_PROD_WORKSPACES)).split( + "," + ) + if w.strip() + } + active = (profile if profile is not None else _active_profile()).strip().lower() + if not active: + return "Could not determine the active Modal profile; refusing GPU work." + if active in prod: + return ( + f"Active Modal profile {active!r} is the production workspace. " + "Activate a separate workspace (modal profile activate ) for GPU work." + ) + return None + + +def require_nonprod_modal_gpu() -> None: + """Raise ModalGpuRefused unless Modal GPU work is explicitly allowed.""" + reason = modal_gpu_refusal() + if reason: + raise ModalGpuRefused(reason) diff --git a/test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_1/model.pt b/test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_1/model.pt new file mode 100644 index 0000000000000000000000000000000000000000..af3d2d4f527e31100fffd8523a54ad5ced86358f GIT binary patch literal 68559 zcmbrlc{r8t_ckn)A#+6%sbt7dBqi=^Z4w$4jmn%1DG8NS#?12^C8Sg$Q-r;*wG|>M zgi0#WBuS-t(6c|^@9+0K&-;6i??3OmkK;b}vG3!)&ui^#Sl3$XJg<#w1qAu{goXM3 zUmpp+>3sXVce{Em+U?}$q;p`em$|7FpY8wn1oOMNczb!dy7+l`@Ann8I=I{QpzCfk z4;MdCA3hChpGoT5rFhV;`@#J%0Pox7fWME>dOl@8AK^`F`PTDITB{u4BeGU`?W71F(P;O7ESl=)BWCR*zI`h1 zad%gz-T!ToggdW6cR}}m1M2!ny8jzU>i+;q{~Ji=-$2v+e5PCb%-AmS-$2eDPQE^} z{|^{FAGv>ECi(fy{5Q-=ANjSDPWsIHH-v(p&unWSMgQYIO8`*J?P8pXrK9OC;9&CjsM-TJ}Sq37P$ZGK5sz(_0N1%kNc?o z>z2Q-v(Cn~Lc-IXF0Z}J>#u*VjsJ1vXYft?uaVc;<9%?Slb^$XHEV7v`9CLs?mw_K zWBp#DmxrI9m+L<^oMeXNr|{bU=lah!i1D%h zuT`~ZvAL=7|1SgVJ9_c<^CV;rhcjtAD&WC~JPc8ZVff$0;^5osQ0AA5=Qzcf)hR%y z=e^}58OcGh^JXS&NjOzJphh3&ig35i3?(yl){uJk9J2UG8Rgrf1p8okBtd^FRYxfLhuF4A3l^r7|n6qr|02Ym^_WZS7~CNNKs_1!cN;7}xZM?D92 z$^g>C5pc~{nE4=_MJ|U4;>y~4)TlLt&IwGwrNtAVnx2581(WdkxvOxwte2_<1;LKn z^04yD6gp;-1Y7osf?@4q)?(jtIMQ+wEpEE9gGBW~(WQ#HvPFn>E+__U#ID!RaB{%n znYOfRgFQ-q9HEMP>xkP%Ykco$jD^DP%!a`Em}D)FuJ0G%(J}|z@=S=8q*Dm9e-)tN z;C16Nh4VyQL<~NwH8EwDg?K>ZEIaFa6*w*x#hw?Zpyy8rd>pjmSn6j{v36k+v8{<* z4VR}cL*41lko(x(laH1vZ(*O)6=ZHn5XDtt$TfXUPlslZqXK6r=SKkv_8Q^r`Ga`m zh$t&9r39C$|AewV1oSrDBUJ}EIIlJo*9ceE)n(+7=EskS>yAt?{(FHlz;~9me`z6K z>p75I6N))^bFryQi_@MZ%}rJoW4$mDf@}UOap~Yf$T?_?6X8f)1mhT4@3(aF!}HL_ zZJ;KFgXHeh99$Lq5mzV3bNBd};~ddpd~kO+&T&3S4;89|&ibQ}Bl(r?`KAI#pR?hx zZ#eGFj>HHBdsO`?%~`@M0%6~9I`x|dZolY&g%Zl3@Fo{mY*7Wi(J#!NLWCTxzx2=K zPR%ve};(}7Sg0$-0<687sJkeqXu&g$|2 zwvGU6hu8yhNB0rg^HiKpDRzb0o@uzWUXi8M#zt+n7V?d&f%WZTtZ-8VlZy{w>DJGj zvXN?*{@y+zfn>v_o%bR~&tYLPBGW^IqiEkn&W7)4bDsd;9xsuvIK0fHj zG7mu%Da?d6T^pwHObI>GP)95=8S*W~pyr(;d!OS0F!g+4q#ySJ3|gbG>xTti$qAtW z&mVCtgqLB&NiLBZnaM3m$iyPwM)cb!z#2`B2O%jfnuk+ZY(1HJNyk{C`=uPxx8J0N z;~VMI?<1Ugz82WL!h{%V5wuDSg0LPZ%-iUWz27uh@y5GwnvFJ9-L?}sKau_P=rH>F zMR9&xd*i#PI@)+%2PId0#YKP1*$EOX_$Z=@ZH;qD!%Smr^yC9YUqo%ga>_8Gw8JWf zD%%v{xo0BmZii7=H?|XWEKGvL|cIQlue6eZIIx!rCB=)&5F52*~e zgiIovbyLU*^+ZnoY(6GByoI1ccAqfXmrs_<9u|EZ_Q*9&Zf;k#8+{^`!tr ze6*(hRt2DZ>@0nHFr4hNnnXTUo+hWeYN<`w9qfGnjxNwYjTcG=s6>Jtw3{>__jDA{ z=@#Us*GKenKMwhTV74Z<_KjPxW1G;|GgNti{B*= zp^Lu$Ak6hNeT5sZB+(6>Tw1!)lqSjO!a;}0u&OW>*N9z$Ju>v>#8PQILsFPo2z z^B)k2AA;PbAd2-fp2PWLr=hIbo+Nmda`>Y!!t?NWa#4InQDpQSn zF{>5N^2>3jPaCK6%Iop|Ct>{4{TWBZbz$7Mf?l;2;qE;3mAZxP=lQ8FdMw2n6W!)> z799=8D3=@5Olu}{tT&G5JySSeJVHpiA3s;FwGw$@4}R_Dpklr`hut4eA3Qx| z+!NnK|D20Ny9Qa%jl0cht$jU2cP~V!w-{vw0Gw$+;->}C?A&PN=szIl~ONI zf4T<^S+h~zeINS1)WC-GcKBO<5^Ju|cDxQJQQT=S6F5y0T7xxE)-jHwb5)DuI_EN0 zTJ@56``_3T7705pH^DcB2#CoM0I5x&W;O2t_wTA@2LuwQBD+_XyyI11GXgs`n z*haQ^6<~FT6pmk;OeQs|p!bhDI_qv2Y@2tKSzf&fpIrm|Ip+%YoO}b$LF;g5k2qI= z7LsH33HWuejYgZa(^=g*FwtCq)HQ~Lo#`c`+Zy2_Zw;uPpFp=>Ls-23x^dd*13J1` z0!(%DI8kwYpj@~cp0dx=&ev}^4^+b##vvact0+TAX$`ex;;Hd>2`~vu1jGK>aNj=| zR~@iHx5>Srub++18HL1P%1+XCRt+kxZ;`;?OTq2vV|r}`8|119y;3F1U2*vdJf0Cu z6f!rXnpXz>CcO{V@Bd6sPmRFt>++aVev=&BponU>WAH3T27-p=usC=j-CJ>p+@+f# z{bwV=*8<|pvi8!__8K^xyIpCz4}Fb6DN@mf3;!Z?#cA? zdNl~1vJCqU{Uu#rvT4#Y2Ts78Tyl4TF5VZB26f$PGBR3;LkSO|&%KvM+3wG}zMPa?#K2D^`6xQg=>(rOC z6@N(W!@5Q1pjLGRSA-(t|JDh$#+Tp=4Ljs#tK-MbA>`hV4mc_o1&O-ziB~rZ6jNSu z-hUQ`t%7D)dPb0|DZUS8@vY_*FDNFNOeu7|2}Sk4F>tl%CH*x!i+(sDg{g4?AhV+q zoUU3!T!lQwl%B=(g&WYkZ!-zzQ^P+3*XWaRX?(02hbNY$!#dvHZ^GvXA51)GiJK&t zOA3;d-LeoFItN=^*W)2$Q*tA!1xtSPz(Z;buRVGpqWLnoEfmJ8*bK6{yqGS3(htE; zR^j}7Vd&1QrNaF~RQ%gkj?O1TR65#;dFE~3CE+E)+EH>Q^{_)|ECX9&s_Pus%pWpZSO(=8I_pN8l4 z@}awZ79Kpg5-U~wz=7_<$Kv%UwmzRznp6Sn*wa_IA6JBs{LNr6MF6*MZO1c)b3ijm zf_qzcm=?WI#v!3Cm|hwTKNNR?S&=469Vp-!H3QeOQW_Ri7n2Oh2Bn6RjPY#d7< z{Z%?-`>8u*sqHg}-x4+}8ny!ZPT=OC8dL{M$I0YBf7n6sXA{aUTmKYxlgIS`1 z`15!K_~!?}Z}u#*EJuv>X38d7ureA#0-MO|Ko+X-U4?o5J+R}O4F+f=(CYA$0Mg~S z%5y#xBnm)CxjGzSJTT}+Htb)cjm;i2U}60=>iyf8a0RA7T;&EhBQTHk&_;s(nQ(^A zpmoGLew4;<%O{N`F|d7I9_NLR2Ubsih|GpmTx2Oh9t}HyP3w91X)q0I$2Gx4%@=lH zJ`QR=0`9>>?2;2(F~By4*({m>8SnX_H0?4msk=r!qpN_4UI$hV{q#)OE5?$y)+`?N zqpRF$vMfjw9Q!(;`KSP#csZ4u6qSxnvd`dK_W=2LO9>kFAHfx!S77LxO-k(7W7jn^ zk`>s37kP8?>QIGI>YW{A?uv7G>2@y)Jlh8SpWYIa%8%q+5Zgc+cwf~ffvcmGFzOg*h)T>Ws~2_YSAgq1h>^sC5G+m zz~gi@N9<=S{B8e%`G4zR#ou`5?ZG9Ow$`69Oa4yVmqa1!swU)G|HAfx9y%--2z@78 zQBAQH8aQk)Z9agq6F%gfT|UZ7?#BjB1lo^?V8k9@IwLX&odX_`s7C?xTS7J!3>IQ} zbZXOVRY!RB>kzH4$>99#TZr4ox8cUTGw>sN0@lB&z?Izs*z2Q=v33Q#{89(plVwQv z(mOEQyx!>AOb6`Y&L``(gyOAII~WsChp->+V01_Xt6x;0y>cwkH*AF7he&m(1a7(M zO&cqjYXtzT?ehX_J;Jg@4`pF-jMQz z7a-v!KR0U1AoW}=Mc*~~Vzb(NQqm9u*1v}6A*t0kGm?!DU6N3N-gwfNV9*~zg z4UpKl5~C!eAxdY6Wb599cZE({(Zg{!S^`78dDMDKGO|R= zQPd$DC8n?7R(kEAx6G@_O2eZh17*3d)pOxZMPgh|9sA+5u#}*@9M?OE{}P*VElwCXvY}Du67MLWi3f^rc=2X{}DdM@w_) z0Y!DLHDykf2IJeiQqw%D<(9IFRh+F}t_fo8XJBLN(FZ+|P2BxbH!)@v2u#@KO2?YA&)DM$wX6XY&Sv zqxVDCjR$ykG#Ki{6&P7t7R{V@1#V5KLgb2*;39Jd<{cfwv+IY5?fMD$+!TddMG}eO zY!xuM6o+X`_tW8p*8}=EtJBLB(>8Tjj(MQ|E&!EKfK3cPIE5=*x0KNR5G)rF{ zS8P9md@Xy?Z_Pt0vgr|oCrPt{?wrNvZ`|-umNAA&^ZfBcNw`;&!7Q#k43U5MAj&qD z);Hc_cC;E}JNX7H*9hWQ+c~ULQo6jkY66aq+5qvXs9U)O7yE4ht+UHGy6fL?WUfxo z6IBM(&XSKCRKbEv1vMaf-wHnzCDD}+cjK3*QsA)c3idTW!~4&duw$&f3($2UUEy5ew!pAgr|YbMM+a2$3>ZNYahA8}6abs^5oeMmU#0nV8_(XC+( zlYLErzWAtxldS{5Y,HG1*9fKmOMi8NT5VuyG2=3+wOE7If92xW`gp{yYpN9$_P zD&YrNKJ6kbO5TZaw@#BY)PdYXSzs3|h2h9_j49X(PR3p3%UK zsTjC58Hzrq!8FrG>Nc8BGYYEkP^S$Ub}m3rmc%m-yXoFJ1H`y}9l3stmrLaRrnNG2 zab8v=Y@owWtK#ZFRx^Yg@6>4fq3jCd+?s2jWZ?}Bi~Q4HN` z44m)B@lK&4?!$1h@#9{+@O}sEn|%%*MRwEW_ZHCH4INPLa16ZKk7LzcVLZ{1PT$+| z;fg67Iwo@m4o&sp3?=))&kIhdp0yt@o!f{~YH=u)+(Ziw*y9($vmloqOXAf{q0c3b zOsm(&$F>TrNBv%?5jvUppV@P#Q=M;>%;g5xXLgB`B5yt&3}bNhQZuXkw6e3#7NKfy+Ch(KGKe zygZbMPmWa3y{ya3$Gcfnxwn#*W%FWCemPd^RaN46HV%?k-+|UWJ$Ow)oN$Fsc__RpQo zi~sFmiQP9G;Q7*|RmnIjrydSThNIw~JaD*f0q1=CI4c{z!SwP2_~JGfd07Ek-&oJg zO^U^sjaHo73K1A3RswV6enYiq2}%Ds#`6JY(Ej@{d@`Cr+mbCn$S)I@uF;?ocS?!H z?N}z&st=#)@u5M{UfjI;06h1e#MKWjCYY}U&I`-P3A;O>woe!j4m&WGD|!A`UY%R# zE=&B>F5`?$4-A-VM)qyk0k56vF=Ov_Fka6O(kA>U+jbhyFHqtLxdfne{4ZSkMv|-X z=qN^~27*cQJvvmFPDI<%KskB`6i$32U9t#&oHyfu-~>JEcO3iIYU6ayBJQ3`hOk#q zi8#BRBDEs>sLd@Qntjcb#IGL21!C4XI&%&*UYCKP2}N))SL3V^EhL5|71-&bf%EiM z!j#Skj`eeQ8j>nVafckv`)CNFWzt$YqH4ehr>>`j&4p8g0iiL$%U+)@a|9) z?MU>(4TCR9&)!r>c6Y2~vvHi}0 zJ=;lE$zE`N_lj-fDF-rfx{z`<3~gD{xK@3;Y2=a!{G_sxED+gtk@EM;W-(1xMD+g(8tryrVcDsQw@o9(=&5q(E-zr$FiR?WA+}9#nl= zO;6O1K-vXCbe#x=R@HV6eO!Zrw;W;oRR_5gsRvz$SHp0sAI7C=66}-UCt-+=Z^{DY>)%NF+tYsb1&$#`(4C*wLZ1mxC1T3pHkoZ;#@c< z2#U29)M9cRjF!K~Wlq6BGL=wk!(SqBu?wy}&ZJYNl~87MGsK7QCowFT z2)krY(F^z2!9Kkb(7I><-)60%kE7l)3zasaa<~%eO|2)3uC2nQ7b6im-7!?#4+Sxw zb8XprQ1X_*pH{q@deWG|lRQ`jWpp7~``ndL zP3R?+t1`({k9JI&rb9X(#&VWaMj8*VKLS7I3E-IO64j|utWqK6F_+Tmb)&f_<1A=lAsodxXmQDQw<*NHb>OTa>*48`rDaaq_Wwur+r zs68@|tUr-M(yZ0l;zw9xp+&2O?0KC`59~aIJAULt>XivdvMPi5yA@d`<<}kSrt_@ZzCyt<7rS>H_To$ zmvnylz~d_Q@xcurM%*{6zNs*h`S$EBb|f{S+tN!+((q!c(RYgO5=utju4Z!It&Prk z^PO~PWx)cATvE3r20~;)QA05cJWCcM|5yhY^Y#(>kt~$`WWenY%ES?`RFrYONjEfy zVQu?V?v-mb%p$*jn6_jpSFS4+`IkGvSV9p{$56PdQ3C#Tfxx#ffy6tDlKxpH6wG$w zJ%K~SMz$Oy!)Ak~-9~WS(Fi?L1-WB!LOADP5?p^Gitlb!(dEgz==O{#GEZBT_`Zlk zD_(4}f6oYpeCWcOE%va>fYR`Jiy<$VMHB3{Fg82Fp!&>pc>X{gzX)tZUv3szu;n}1 zD(8eLxht`?K${y;AVH#1|4{KmHdLwdIXxn=8gyoQp@8XI*#60vj%l^fI+6iPcitwU zHa;ZI+66Lavx%t0D|$ebq040=ljk`=(2+mwn#ZLJ(I5oEvL?26WSKG;e zIj!foWop5*<-T-8Vj0Za9|>K&`g*Z=9Qul_z?W-;xx4tCp+GVNbo`}Rfqe(bwo7Zd z`kj%)kNcFz?O0<~^8)OM9c8@8FUH>}6~8HQX#LM7rr=^Tami4@&rY?}>|;8eyCDHy z#aGY|yuANiVKPp*X3^W2NJSQ$qqo*7(8&?euw+vonw2bpj2HaOv`GhWeXb|n`b-9T zMDNk#soP<^$rDn(UBnWvF03DDpvR_(v96BK##kdQ(2S2VD(3CCf@vr4gIqeQj#Q-WQ&eNOJd8w&As^f!C3@=Ud15#2o4F2-zh6tO zr}sm^lYZ>Kt4WJ2w8%w;HB{hiEp`;HhTmZ$^hZhrX=~cY^H2IX87#p|ITXHxw3DK3 zd-3$SXSh`RHD`yx5MI*M#!MA$yguQM<1LplAi0>cztj^#yGDqX#T{Icl*QiYrwXkX z*i^%J4z*1)gK)|9Txnj-i+_JSSsqbN@=t5B4``$l=hQyBQ-p)pbMhe7_X!hL6HJzW z*kP0>U5^`%OoQJCD@e20biDFXifb}U2j7;rqgGHds%$+%YA7ou}l`9=B(nz z+6W_&>!CBk>hS&R*?8Y{4~a660*QOUu=PkENH3}+?@kReiydnj{bN%(%_&(-^N-cI z@=_*o|16K{vMX8UZ_lAZU=1!?cbCkMe}HA1c3@rcJz6GWi%Q`LYP?*+;By$HwkVd>*_$&eDf1{UUI5mLe9e znhCpI*6=v+Z06O-N+>uf3s!v7xDPGM$nTsWIPa*zY`mQe*G)38<$53IOyUNJYwIL; zx{JxP_FyPC8X}LBJ;{B8D$ec#bK@bE#bBm>7Ui;inEm{zRHN4sb%fth&FyWli@h6s zoNjPSf>V($$oM z$^FH6l24rbd&hjtUa1SOcP4`6wr{xcR}?i7Qvrq5esIM&3+Gx)#~bm7&?By$M)6CN z-5LhyvdIiLhChc5A#r58s3*^kTt<3NGgT5vq2=sYn7;owp3a|v78&>Glpoh|QOI3% zIdakHQKS|A884(Vb#B=G!2qWGi3Jx&KQu|bjko+tIaii{-d?Hru& z)WLJL^YJ`?38#hRbDRe)U{78x#Qq7z#7Qsc#Yb{rb<~08Tug?M?$hx0M=pE}KZl>5 z+(hG$6X+fg43=k>LUOE=ab|ZsW@gUEU3CrAHP;v~)>h%EL~(B1a4U^}tVc`go9Q{X z0DQ9 z4Zj>FRoWHM7yX)^xKK;2L=WQXNkAe>E@T+Onp@?ERN9>g0NIjn5PIY#Sy?ygGY#U^*D{r=vv4IKHzgqtmpi;Pk7h zl<6QO)pME~XNzUnmmr8cHi-Z{|f8k<) zDU3zNLQKO<6tek^5{EBRTk%P#FEAD6bq*6wMle>6b;HxW3*o}RF*x-xltAhrV?;aP z7-nL+cR}V$@SA&^Y7A=FSl4tNm#w6}!%b(Q# zo;;Cpssoj-J>Wb?hR%x6g7(d0@UC(;=Y~}r2Aw)-JnMEgd^0RSframw`N!B~Sw$SA z#l9t!mxt!Mm5@5k5-cjpM{|P#FiF{n3VlE52kjUzbIXB(jT*RN);;Fl4SU`d6;QYyvf{97(we(WgOM<93pNQ zg9h!gm`Z)o#z=zoN27&V{a`;Nofm{H2Ss6nlL&0rNFh(luTeu@tfW7$oxS+d5GU=i z1|0F{r+?2El7m?~`1sB?WODm5wT$TK)yDcDJqx;2 zWP z9gKar2nnwXsUx?7x^}*$##6U5`%^6Od2}0!g`479d`VY)=zxM(#>f#XC!K!?sDGaf zD@_poo(zB)JC#_I=XTPyX;<+h))QivjQHIG4hU_-@dKA}W|JnaJ{Q7y-a3bsyHEkb zQYQ%Co$H_!CB;aq=wUSnr)gh0Ft(!rEdVi7c`sb0gD;>jQk^23b z2g&m^Nm|r8)aZAn=W8=4UjRRTH5sI*+H|p_em_JV?SU7fhIpg#I7V9fVTjgbZjEg> zO`B{14UWecwRyYAM%zSeRQOIS)45dF+J+`BI%&M5|2s;Ye#;Cy7ts$(pOb*5J75yo z0dwDZpqlL;D&zf%-f8^^&)$8fPpT4ek%}<>SfG!BFI3=%XAx+&T?GB*A#gl2it)Nu zg3GnV$fd7O$>}nG5X!%Y67l)?_uK*^xBd&qDf~G8j*EhYDU0deh=+7rX#uls^BG3c z*BQ2-T8JBNoh4u~%&a?f4Wg=hp{l?hou|g&y+b7!sZvjeEf$eY+Ve?BWhjqd=f{lN zO>}mHA2t2_nUUe1g7GRA=o}xQVNZ5q@~7K4+bsf;`z_#c@OM}?`7^9Ezm3zPm%`-E z>$FU?9n}6>fQ#N%xZu}?wi!#|(Cj{X{%RTZRFb0=g}S&S>L=-Ic}MN{bkUvkDUA|b z3@w)xF|+m${c$t}iw3RX%pVP0{mz^89lAj78pvZ!-V*ZZbt*daSCZ%tS1_Y0fL@cS zr~8g45QP(_kRAPvI_>QvW}#&;9%PKB`+MM|X%1}56;!sprfurQ1detN{-*Gzpw3yA$fV|l9ou@Gb@=px%RN| z(U_6&*{Q_9(*>p-jHkmd5~%3w!^BcN3mcatQQ@tn^vlf}d?&9%)#k^*6>U3GH+2^s z{(KVV|1==`LaxDuqY0o?>B}}KmIf`kwV-LW6>~rSp#zYT^kfERZ-|B${F0=|{T{gd z)ujem_i56?gAkaPN=B||6UFqM_(@fkRpEUd)+x5YZPBH)dO!%{-f*z=#Z<68F2#CL zd5B{bBm+m1o>703btG5oC^_Zc0}VGs=%m6$#%?nS?6Kq3XJ&-M^XDAgt@ItD|13a< zhmN#A_#0Wl+#v?;HyKUIYGRrs3Z0fh+@uL-40zSfu^H}R#D0q6>A$6L^~Da7_htkB zQLYBr&TCLGSj=$8cF~81JK$mH6R?n5Ner}qkkD7QRNzQBTIpqh<4F}5zOogRo5zgX zCh@cUonOKo9bq`8Jsl%oCV;4NH+6sMi|GgZ(C_{S=KU!yk=KyJoK|1L_*P)}%Ofzq zT?;}~B+bq%K%CDJ47e0e!lm9bf=mP` z9_4WnzD9I&z9fiM8{zGNG|twxMq-udN6%h2#|?s|kXLpP#2%dklV{4 zhD`NlW}n?@rsqd7oVnmgE}ZY-#6FwG+z2>~)p3)_j)5e4hr5#w>`$Z_2Tw4{zb=FK ziVA%Dc^DNXeTj3tDh-Wc5hJ%5+^o%&#PItqto5>kfoEP=I!BFH&)f(uO$VXfehJRf zU5VWX47p-yfw+JDC0sJ24Bj0~#+&Clh>Lj~+D*5|2^B@^)hY-DKfM^mhb8#bih&>Y z(F~@gp?Hs1AlcmLiiCYiWeJ3tXJqOt-6=QZd&} zu-xq;o(T|w!H+eR8Oi|mb%MGARlt?4C)*rFFsox4=x!Het=n>p<5=K@lU}ERfl)qM z7qr94NrFJHcNU zc!s?ODNIx4ZXDVkO6UA>CmWU#RGOj6NcT0+1){0Oe;Reb#H5w1+<%7sBkDZHz7gXN z&Qaq2KBa5CXx1-wE&CjFc>6-q2?fO81LXH%aomyhgQ*%dp!f3f$+4?dcs=L}-D#l0 zGDvYHOpY9Dld~jCSnoA^=Wjlqp8q$^ycS8v4;#_R9=R~sB+g9loD8E)Lik7}80LQJ zhH^R^)s-Y@x=JDTj>x0^s#dbuDS|r9YGvNCJd66XRutp19wz!UFsi|-*J(aZR*Wm6Q*_5w;1AHi)L+blOQR1jJ zHfFF%WJU~o{onhLb-1xU>~J1VTJaGpj2=)W?~lZ&zloC0)12ZLukpKlA7@Bsh~49H z5S?vq;a$UWIK@|nAp_N*@$egp-J8yev{L}x`OS33!lU$62v2V*BF;Vaipz*Sd`&7Q zoneF@#}l;;zVQ0VYqYb`!5Y>@dRP24>3g8XO*yTH8u=F?v+y_dAn!QaUNqunV_|rw z?!(jLrom9b0?^a51-tjZ>0;$>q;o!yh;@shfYnGdZz$m-hjXY^I}3z9)WDGYY2wmW zOM`NU$z{(LdL^|EYkRZUpPXaxqx29}zS=-kly|Zxe7AF)H|3J5_I|L-wZjvxqnuR@ z2T1wVV$fNZfyv$)ti7lWrytKl6WiZVyG@AokjFENNEeZ#UTMV2`w@|~)I>q6M-cpq zpX-0U0PAC>!v0EoxLs(1YgsPnhE~!>tRG z@wZ+q%+l#Xi?v^1`N3caTqyu6o+Q%v_dfV;sU7nKn;0AIZMeuU7Dcl&h>XBBe01H2 zh1$n)?Wq_tdG8-`B% zQsyXAy=Cv&P7-PGs7;+D@Rh@3-7u1VCIY`sN+T0Op3t!THms4ifr6b^$$hV<;GmdJ zp>dR~y>uDQTASks;~Z4|vXGZcWTICj1Kqqht1Ep2OwajC4)pbc)DIJ`|B+&1+Od+y zsdI@%MlqlV!4?yLsFPVtV`W#vBu`ItpYMQwo|sa>X)~dwT!=(XPv^90Oh>leDEi8KbI`yX|v7nk?cM=x_SY4)bY+AXscqi z{S>_TG7;aUy#c*cP1f{3^I@6n80u^Lz}FUU-WvC&#_uQ4yde`z{@iBjZkqCP-Fal4 zSp`kVdWV-Tq>!y+9VDYbktjM3Q6U!{Qk(Fq!d=_Olm zbN6pz|1A^t*uO!UkMe{*83F5@a&k?VVS@NC8h^g_9aae*NB<9%#*fs(Xl2d_tbSt( z`}s4SEjYlDT`YsrW1jH)D;uQlO(UXDhsjvZBD6HRMjT$0;X0Gq_)0VY zqysm>_Jm$s=n=xJXBpA{rN78N*9(xnq?+nF2Gis{TX??m6{a`*AinDoj12t^z^>>j z`Kpx5On%PK{E8gJh@xAZsY?sVd3_TY{8<3WkIlidSsfGa#gc%a>G)M-KFQo5Mb}MP z#*MrCi*t6)Y22J!2g&C`K-^G!%y}|XW{?W~`i7OqpVI1SiKN4X z=j-jyLO{0&$h*8IpV@2iP_ry9vW5wxp)T}EE zx237VtJ=+I*P4v^tR5oitp$AZ)br^0-bG~29DVe05@#Kd8KrM>zJgTS8Q9k(3hUQL(QRK7 z5PvG;Se+cZxH=Q#7l@*cQZ`hrqWE!r9@sP`;IO$FuE-ZarJ`(N_%ofSXX#|_yqgQ{ zvzOtSDYqFfL3JFd-vFn2lX3RrJTRRsz*Vzai?Po(A;gTbO^SlxXOtr+(@zkNc)Qd4 zcSGqJ5kA(MtS%7ks)4U_zXDf=gFXSX(EM2gJku=!o#h(f$U6^FwzY;R^IyhmhAb@M z=cD!?8qi539+qUc(%rFDbfNkvd73SSv#0q`t8`g>C#H+Hzds<1u>>nTK?NosF@wE@ z8|lwaS(q|k1HbACuvVGc!iMH1Ixl$&ZC#rL_tJ0i^d_58WML?2d7F-9n!3<>PZ?`v zQ=n>XG0AHYM(gn?>Jom6mxF47wzwku%HiKwy59}%tv?N?SFD7vk!%wBXE#(XQNhRN zuW-#)B~I1PpV)lZ1tNdBQjP45aDTNWdDhvB@?OF)|4u89@6&-89!F>F_K~jO+X;6E zXW-85+gYnUHj+iFbFp_;B$Rzo0q!&*Ch>U$cA1&Mn+kDAF?<4vpVpvc@K!R5#~U@Q z(S`y4t6-QiNS_`%3{zu8&~d_m=6l^D59c>wvQi^9s#}7@tu!ds?jt?U`@vgh4$Ql; z3p7{r&LK=LB~H~haEa7Rj1G>3w8ib5QmG`1&^eVe*~au8JlCzCoa7 zkm#^Jq#Q-f?}>QQZ6~gEo<;)NE^{QiCD7z?2}}`B;PLZ;@NKOJP8HY25b52VGTone z;$b;z*k>X8%TKy{<6pQ{bRDKd3ILPeLX4KONpFKVD{br(tzHvFZ=1Li`M@{zH&=+V z_r*KH*LGe!?JtUn0aIc4X$U#+Hwe#=Jo4)PBTPDXoi^}z&l|eVsQ5SxUGxsnN#70G zs}^q{(Xj*AlVA(FGbTf0i6r&!YJ+WUd5|Uqm@c{i%7-RU|78J{r#p-j?or6h@Wb)m zIE?lAL_a(J0>O`(EJc?>B-3^=&WpY2&H+i}i%Y`>yGR%}QG=PIEu4huskHI=W>&_M zVh9~l!Tvo*$x5##$SpmBJ8n*=*HkXhYAtcjRk8(@cd^ z6Z5EAatetYJOyX64d7OTCiItorZ)`?K;3Z%b}m8j7Tb@P>IZtNJhR!|NHm!-*NPyj-GUV?)$o~^L)SGuk%a! za@6|PNBkd!K>Eib5(ay4Yj-JG?EVngEno1dK`yy8r-9uz5`xBc*FpHmD>7;JKD^gr z0`K?5!#~LcI$NlN+Ht=>y1SBDxF0Z^%aJR6w83p^U&utJ5>q~Gq)#86X6Cz`!7qDa zL3pkg*hEI4zr{&db10JRuJ}Vl-j-r=$q5Mg#%aAzoMCPDKNv0xqJOp3=vFZm+Ftz+ z7yH!X*Lj*STX`WpXQGG6kM849y?EN7afX&1J&Y+diOjm)OZM33z;~{XHKHfQGp&#( z=Uf+osli)XeLoqG?>42nDTTy!^9R~vZphyKti!i_G98~hQ=oxW=SYJ2EO6R2lWw!9 zz?=IR6!ngSbM@Z1%2S(__|9e3t|n3O`WBMwC5WB=Y1G7EAuqfx9~S06gWtwGN$;dN zO)3^4#J5X|x8QC(QGA$$Iag+Yz=|{Exp)|t!7{@3PnB3cx|Q5t`;%^!TnK{Sg~6{^ z3q=!_Kf$gT-vzIL+7cJ4zi@Z1d`fkvE-Fw1~o`b z1CQ`N(tl?X421QO3;3A6H;?CfMAbw?%mSxuPQYkgA-?CGmn6)&6*a~0G8ZQ3Vw!b4 zi8TWln?8tI#<}=mDNB0VBdNNG4+!U&Q|$-I@Oi*kUZLSNJCMCFgJLml9 zUjl!ms^E;Y0uDKd@~>TV0Odc@m}6EBR;?Rx-cS}s2z+B=TRTzA?Gmn0{Y(0DhuNV? zf5|aJ6A-l7#O?KpY~?072(C)S+`lKl`_C8&ykd{#4j0Ke=@2GzZ3OmwYG-DwDP_kW z&j#I#{uuH>5<>kGad3Jn{%VOpt0#GICvBKm%ZyTQMIYF$=fruX*N_eQYcL9~(*v@6 z9N^BTberFX84la>T6^i2iAuG0vb#R6UAD##8Y+?p-_FfubgQY-VFJRvs>gj`Axcf20OP z{<=}aySezS!Hh`@Jq#^ZKEUzOZaTQt2x70y2ROuo`@8GmNy<`U)g^~3BddTv!ewRy z0;p%dE4_9!n0a}qhz8|x_o1Ji_||YbbS2%#4|Ya4`HCpN+8~puXxD-M_^ZHXUqG8l zqoDdR83i72-rA2p>D5Lh(C^=Xu198Lcep21z6iji2TiykC!kBODBv018BEHo z!Et^Nw3TI&cE=SYxRjpa!nfQyHB;W>vy9Iw=bJEMxIXjhEuez>7} z-#f<0tOEj9f3VQzsS9q{xu5D zKPVuAO9LTAHUN0vGvPZCqu>1WVeH*wP*g5Pd!L1PV^#r;xSmLtSVM>H6hG9p*IAS%Qx-Lg_Iawfl!^T+ey&?M8TP`x;$LIBvyC zO_V0nNaUk_($l2OD=WMOTd)43h6$I**r+hxJ9Y-f!ly8gN`g=&!U*@-^R z=hr9kXqI&_-FVmtKZk^)|3Wd4T)Y})TU3yZsYBFd*(}`GB*>rXB8fSkE8zt94(Uvq z$e-{e7`sAkF~RdZm2|8lA+B#=bI2dU92FqvN@K7nRs~9t$5izNK&;(WWQ(<+Qj=2g z%omKZ#y?v9>jvTd6hZ%cV{EIjIQ$x{C)>B@g4RAKh<$v7X_~YVB8-$UDIkPsZr(%d zye~51r_FJqvmvVPtpI1)4QOC0jw>}Nwel6kL-`8iVB1mbx>EucL1E;C!9^(Y+<_9_ zmbiOHHsm~$gmJf@aOR2;geXVScg=A)>^F_oS@)OB6B;C?aq;9?)eu|oUYELB7UJ;H z2)NcV57ypw!54N@V149yIwNB@%z3dL4j(v7w)?e{Ag>G<^bsUozgNM$z(nXti9@&6 zd|2k_i^>tT^!FcsF#oy|!yaqH?EYt@Y#zEX$kFe9v?sI-RcAJex>u z%}4$Bfu{CPd`u5Uvt;jKDeSIDW!N8GsF(5!jwK4=+Ng8rG~Nw?%@^oU{2uzw;2QZH z5Q(3<&S9GUAygC=f+^*eTs>SzOBZA?w{3*zF^^XEOPCn5t85RWvu%Jmylb2o-x7vg z)p}|kyo$};A%U_pH1VN(7Lf~%A$PZW;M;}^aCCl#=@NB-Wiedt?b9q`RH08+_01#` z-bc zK7h#?os6;-im67>EXe?PzLS~fUHJdo{1)tDmEwXU$h%}t~wSqq4G#2aG zT;^haEj9gB(fIMu8SqrPPB$Lq!$7|Z%vdf;-(N{aDN_p^xn2owuUesGG2z*npMb-) zUK~Ft65PYX$dSG!{HvGZ=$W5g=+x;z!%jq@; zwD*(1JK}Bze}6o{Q_lOD{MD2cGngHc7_)gI{`)5ZYSIywNX(U)LI_T68^r zxhn*#<3#vQzNOf)$paPdJw_vb5SjN+4zFw8U@K}YaP0|U{AeWyPX&!>#mbxD5Eh5N zW>$?q>}wgXiAHctoV)K8l|c5lY!G+v1vWjDm25MG&}1e2t%LOAZyPZCkcDd&oFp4w z2|;E>8{3*64KTG37|s{)-N2HjB%tZ^agLX@ERUWlIS0YIi0itOuy=G4f23(G*!S`v z^=2$j&00i1)SrS;l_seDG97pa2H=-cF1XxYjc##$FnRSKlz!cXy7&FyadaE% zp0mU|;x!PP`_we;<5OVPXwixzOYtULd~rVx#o%23Y)2jLB|#LQDF`m=DL^ zgZ9}Ga0~Zk}6nd5r!5!80fRPNrna%^Cb^E(v4jg@Yj)<)H#5F)n^lI zyfmG6-Ib+YG5*jvHxv*4P(qD;<~X91LnZ$ngqbxkn@KbTFZu|fH>=@#b_zHt zsL;!zn($Fs3|D@(@{9bHJ>wHDwtyl()%RG&S;x-_m_>fU+Nk*kG zSvVs7A3L4wgaNY*e41kng#)(y1tH~3Md<}}D$ir=B74}WoMxTovXzJmJ|oBPJt6no zUPAU~MUo_UisM4%z=tGH>@1Rn8KH8}yZ#%D&uqb_g17XA?mA3%TuKW<=D=eGLH>*p zV;F9Urq=h3aq8CH7?|8fYnmtWB@}1jb(gmwF{p_}3{Ddyj`~sVGvuVt$Sa^Eb zo=kfx0hyC6iI>wlkmopOP4^?Q);^t9T^GSB`PbyQbsMefEuksxGjV8lK1`l0hKeTs zX!o}mic^L7?omLN#0Y_@l^vP!L7CGC?D4im2;Dbv0-ng7-S}9$3a=eHO`?Ct!aa)% z`2Ii=dS9`p&VN01r>xhRF~`y2^VbDTju>KGZ0>%{-Z^^oON{d@wK=0wquy&}BX`8`DO;#!z- z_$EjjRS`P3mB`wu!;61GG&#!|CYlPss8%30Zd?M{x|*P#VTL>AS-`3=D>_f~A?=>o z-}FiEHFkY$!l3<2FjlOFS{{glZ=1B~3)`D;H8C7!=LA!!DRP+Kp#^h36jP&O0eUq} z6YwLUt)X{ug6k|44GX|&|GlMKvs2MONEU0wACPYb(agsgvCOTN1=Mz z{>{_)L$6L^zVS3jJ@S;eD!rrWeUez0e3dEquMMo$4VZerxJ6cTcc+Tc)euyaPWPIJ z)5#~V!b#DIAh$M-&TSs1a}Mo;mGA7p-aefu%|3k4mY_wBBwKHubdCo@s`Z=9$3S11;y2CVgYX`ly*cRW6+k?=tYZ&<< z3~UX=`Ceyx8K;O<@cAC_Hb5vj;OsSt)OP9=mYkAtpy2ROX+z^LQ_G<_rmJ`+~r z{F`5xMP_q&AHKxHzVq)ut3AgwDJ%`x-rX3nR1B?8pU2D3s!;b!BFPB-Lj9L7g`!Ue zyx2TNXx!b+wcw}m>YRq5!Jvdr>Yhy64%owo?X`58n;a@;aeJGkEbwnDF>W>wsOq}Q zSY2jF;@Y=DNXJWNRg)(s&fxqc(@*2-=uFlyVFv%=UTwJ9mkG10yy)rz3EaAVB6v+{ zha)kCpsVl^@_g!n(aIoY*Zc9{>jYTfvl$zPjKJ*F1fIO`T1L|G4r*r|BO&L~@%J9i z--pl1i<~=zSyb1w@~;9sRh|i(kM6(~I}%}w+-myU(wmA*o5M4{$!U~92k`j&QhawZ z2%Q~Y(75z$2;~@$u_Z0^+@pV>;Fbxmm3~nDf)WgInFs-M<@m18<52doA#9U-1&^HN zVY$i$m}RU8yDL;_KexVJ*;UNO&l%uw%z?{&g_6P0Zgg&Oq|=_9#pQ>K=#*XCh}|q* z`uL#|Hcs-z|Dtz;i-ZO>Ke7$I*UIpWbNz^&Esy(~fET@uAgKx?Q%Ah9_Jj3)c-XokN{8Q2G!qxLFG9o!!vEWissRcCu-cHSw}) z7ggwgPNoma@k4e8V~pBiP{?(GI5vnRr1s;c$R4t0elI%g<1z|*f0|048=Jl=%OXc@ zE3m2J0BOu}fh7}`6qw%f&!pVm*9zL|-zbY&4PDA-AL&-QTaMqiwM zLJwYzP2{hPA0d{L8qiZ-7=ruUA$+k62rJwp$rcykOJWW?;om}-woHldDQv`3nXw7p zG379$>N>l2Q5lVOn?x@kHh^EQp-?E zJ52J+=HU4mntaysGB$2e1jE_8XyQ?p-Ewb~T;ssXVK7{!AxF3G=5aLhVv!1+rc>oSZ=hLx!PhhUcMRZGX zASRa-aKKU#<}6UasP&2TN!kryM7C1qgbeO#hyy@V(9r?)zMY zf4`rB?ab{oO|%Mj=5~^;T>;R>`P;s;rcl%QnHpEt;CVw8jP@La0^uQY@7Ep}L>E|8 z7lW?xm$0hHhW_1nl$5oNHQlMVCAvF*K^ILyi>+;}K$JEvt~zJx(q@7+6mZ#!Vp`*2 z0^>&`@w7)go`0N$pGW7QZLm4{@61Ya>R%k3zoGyY#^EqFX3Ue`vX;vr*wB4po5_ie zOmeg25`4L%kB7wjvA`yQ+-4lnuJ01ifIiH+au$qTWWfDIIMFN%q%NxYMD6fm@Q!*+ z|NJ;hcP?dkd(S@t)7E|P+({kwzU#wu*QB5>MU1qBn+nHgX8 zz}u_=1Wb}Z&D$P4_8vC9z~yMRx<;V!e``^Hq9tjM3`Wn6(xx{ZF>u|hi|Kscjt#K_ z{OU<8UHeB58`s`}us&0m(j1CU&u#~sAtnBeX=jPGPX-!P7Q%-9KQz`Ooq)p~Tz&2c z#PZb18;&1WbCb*R7mt#su^#y5bt5|_Jpm@4GRMDZ3dnQz!GNXqlv zoJI#N?(cW@&=1#T2%j$uwfbSyeqRke92yGyj5Sf}awfdvv~aBjw_*2=ljKVgp#6;^ zIx?~zf40qr{;7vh&u%L0mTu?H@QWC@aT)Z#sAam>IKcFUfS*GzQI8M{Qd@Qw6ZI_c z;5B3DFjvJ3T>ioL`7m3Vc@NFDm6F-7Ji(aDm3E)0#G!vHV5i4_WGGF7KYe2~d|x?< zpT9lEzgWE{2rXumKcgJv-=d?^>2G}JYM!{q5SerWo z)(3sybc|;(H1w3sDa^(=({i{PmPW675!5nDWnBL?fj;M_`ltFEwoSN&H;1k9Wb88# z{>%gGSXFqF*@-znhsalOV#-Kj2o0c zeUG9loSr{99fe|T(afj-4jokIyI(ToyuejxIdu=bJ${KQD^%koU2)L)+lL_smHCzr zMu>5rr7 zo8VzO^5q1Y@2cZ0V&O#P&R6nIr2`L!MB{S#aJa;+^_#g?c&XVEv^}T5SiCzGJ1WL& zwtPd1FRF04ie3_=EeuOE#KCwp8dNxc+w0fcLD66z6z^)p2$z3s%(VMBA!#Ffd9DU{ zOpK+y4y&3{9`?{MTYdhlqlUPmb~l&@XkgS`b&6hs{Of-oqU(ZCxN4>XoBW@kVf=48 z_1jKZ*K&j1z9tR-`Co+9Ps8YY$#>*oSqC(~sDoYW%jliVFi?0?kJ{ng)O%GB_>X+T z?N@bpb3{cksJ@;oTHXLw3h&rb?)+O5{TK!h*MP3qEvmn!f_3|r+9WU##hfz?1oxu{ zai`8A__H7d-pk%6a#SDQ)a`=49n)a7Z4kI*1u#jwMRAcrG)T=zlaE zjtXWo-x@V>W#@dTw}_|rtbgD;J4t+Y$`yagg~LkM)iiLMJ+nZ?kvQxUV(Ok2($k-w z5i_4*d|y({Ogm+VQAhT`v%b3|zw|4)X>kYBGv|VQy9mC$hNu)O#Z&j3ilKp1c@Z}X zNc!nTc-x?pbnUEUtp@mbHLQny&|?h}uWP9kUz%9X2x0t+Ic`JK2DI(_MkNb9*uq;$ zbmoIC%#vBnkgzR?zUb${={I3eKTD9eQfLuWos6X}xm!_0dLi$CYzhYT$nci@>PP!) zQq=NSBRMExgWc-?NP&p<#Z~v7IJJpr&M@*LKioHXw&4C zuki4W^>nqd41r*6bT0hCmMI*9x`ZvH`{P8ulhR3gY??W_xU7Wu{S!s$dyOQ60%JLC zJ>6|>#mu=D1o83Zq^H`BRBh#I>9ji->t#g7`+~`LFT!cni4eK@JiBrvh93FOk-&w{ zfc*f24x94eyhkMlSc0GPvc^->?Si-I;56G9>#dJc#F=n0s#rr*h&}-v} zKO9!U;$&rf{(2&o{qey2%XZ>3-vuc8CL9)|?kB9)AA0NQH|EAc4Mz6bx~6$|8qhp% z9vmtgplWxe=(H+Vyjb~-X_slo$m&8c*EkFsULNq}UJ*T#nofJ{Ghp(1T~=H*5Er%I zf{5LY^w5PQx@eOlzPfJ%0}uEZKKDc;u^A_CEV=M%n!=MMXz&M>*mWar9_1c%`L)) z-m9>8`7T(O^NoG9x*ZEr=3%qoWK#V2F-Z6S!3nkFUitp*k&Ej~jSr2p~%W3CAhOvpCk4Fq<@)j6;g!G?TY_Gs0a%KNGeD4kd+anv$ zx=4h6zr^6b-Ip+4vmQMYe2M0;I^G%62Bmy0)Aes2z_y%xEcfyTwQEbkg1rwCmv!LN zc4Kf+dxyiby2y?0f4J&}8!`))G+A2Qq?@Pv!x8&T^ev4C^A>F?yLcuO_;?2wdJ-Pb+N#;YUzESv_(ZC2}39<=UCNEz|NKwKs~`7nZ;Rv3#(Kl7qEcDd<%g z&DDh|c)>OZFX}IbEnTNTKIQ_OC+LK;7pYP`eM8{si-D@+L6A+E2ZA5+aI%pb7CRJ^ zw{Nqsx%(%Ue|wIqf{}1!mpj~j;6*MarQz>|Gk6Cpj?vulI=Jkf1%q}b{GZQVAxBjR zmfio3YN7dH;PoCBjwth=j{{V*Q{F%ynfzpgoy*x9x*{-sh;?N^{nc zZv-1nF2MmgNm>)8O*{A3!-ac7@Ka>>*HZH}I2D=U|?)uq`aWWNYc_S7=O6Q!8q zQw4MX)wEV!%J^f>Bes&wY zwlO1vs?DV5(i1jtT?St65CmDBb$D;&1PSZZ0+$BlSV*4OZs!Y*|MTX2e?tCoe&m>; zmo)5sG9--rL4jLW$ajpR}bq1eIRfX`bD3l+Oz%5%Q z(|1#=A+c2o#+IBw_u6%s@;4l<3Z1$9el@O96XGdGohJ9LT&5K*tH3Qa1h)Q_A(zgd zLj9HF#B^l~ivE?L7Nu2;|2`Mg3U-D2#SwIcMmh$N_lQBe*tZ=^p!%&kb5m@b91%&Q z>+un}{Mnm)TPTSBAwqb~<13LovWH&Dzl{2m-w=xd=cRwRvv!F`94NgM<8MB-f&CF4 z2>a(P0|lF-c*RZl(#wgd<-aywY z?PVkGr9kkeQo8fIEXegX;e3gB%oi*pO20Djm&8Yu{1=QKF7dGLB!!9NGCb!m=gHv8 z#VGjuCXW9S0iDkeQFmJud9Y$T8J2BsbnDoQv%wO(1~!nK_^nhW`WD&em`xz>9UU2# z!|-)Qu)Kdc?vb9#(@{J@9OFh&Xu*7rxo`#pUz)lPB}mWK-p4Hpn%JbW99Fa}0~Pff)Vsr-Njs@Y zW%eiHEbBRNaxfPbi<;u1|Jvz=dIH_+CefEyPs2BlTQDd2G1;wjgWR3InVxP~3BJ$P zqiRDjIVmIsi{sV!9bdV6`MVR6y~9n6rxkwpQ|Dr=D`A7-5IMqBp=jp_ zne{sh{6>Xf-{?NN1n=UfRdZ0Xc?piSXP{=-NhlaT3tPWyl8nQOn47yCJg=vdm|*S< zjY=@x`#KPoZth_`e;p#+2KA9C@{6Kd$7%A*zEC9qW-o0>o+U!*^8-{A{%YWkm{~m)0>( z!O3WNJ`1zzMRE4E$JoB+2&9Pk;)13`v~$X)Un30o1(~;q)pKny{CSQ&SFw!h`@N#} zcVkGKIG<$fF(j=muH@8aJ{}hr;Lkgefa|V}Kv%+3(^3@?{=@1B+;RLXxc+`Z{)``> zR%!~ky1@b@@H$zr{3vWHa)E+C9fn9IVJPPZcD|ns4PN@xC0&3QuqTfM{#*kgr(VL; zy9MYyCjn2q_Xg+d8RV6?89iCvM>U=uBo>AVaOQv{>Li|{!l!NF>CFG=%(KVvl?4|a ziIxDp0Rj!Pp5S7G-B8*Y4}0lk{CcOEE}SRHV>v#X+m3Pud<__hBj<>V*JG&u=>Qj2 znd6}qd(m0+4-{)z!zi~lx@~QYuB!>mP>F&GU0BRTucuqma7 ze9l&fh{fe>e|kS$jGBth(+|)NYG~84Ys7V~5FHhZ#j_4^rZ>Vl zj<2I9d{#YxUYb+!n6(e6D*eRgi7y+!ByySPX+OydA9>O^5{9kQ^T?(MZ*nN+2sAhC zp(+=1NGQLJdR~hn8>Dk_RecD0C03KHL<_?AFsHkFe?ibHb6CCJ8DcKoV=H5JfKs0h z@5FOq-Zr7VL}w98zUwrR)Rs27PGNu%l$U{;Im$Tc-f4~%FM#pKO+fyHBT<7lWc?B! za{N#^5$%w>Ds)zlxxw!!qw?)x_?_ren*)zn}^%4TW=esJx+1zc}FOyXVR zxx2S8-ykiQoU{t!__@Atu%jNjTfe|}e>)Hnmt}u00cn4yfzyEsm^RURzuIz(5*OYpAG`$BC_uEigVw!z*--k>bNd1b=< zL9lcpFik07w$KTb-83*(s}|h5Cu1|`ZTQFkL0@fmBrCmnL?Toej<}>l(}rFqSjiD4 zwDVAM)CN}kK0<2-{t&z4L#P`35}gjZqF>u)`en2j|5QvOtImajTDS(eU82rAZ|_1Z zO15JA3PE=?Vpf@YL@fKvLpc-b5xriykg5v8nxv- z=-KG{-*i~3X@H@txm--m37l(P!P+l7OGQ5XBYT76OjAxd(-pdQ+@1Cm+v_U_xwlt> za@0!X9qU|rF!?20aX62p{t^QL!}I8GvI<__n@wkK$siB!SHbq<4@s?pBI>#_jJ^7N zJZCzQw{hkn%&91VhsWl^eGjf4x5}dpXMG@`HxDzCd64l^l(&NJ!s$j=;r>n?;;twK ziwyR&mam>Mp>7&5k@MtuhWw>VZEDEVg)*pbcN6xX7Ns4lZ!uAG z@p_C4<5cyT&QvvqC0;KviR)v;L?nPxRuOG{AkUMzxd_faj3A@NpSk%5x3SCDgI+Uj zC7!~@5Z*fhPw(EyR%M3*?|w6l@cs$C5fh;=eIIx(%|i+67sT=RBZ%iYkaf}W)c$QO z{t~T$E19h*3kMxh-ax>Ojaqj zP_>3v%a+z&qMKG;BED`dP&1_tg4I-5TU`~>yL~xR{wf;&_!q&|&{s52@jQwR^RegO z5cX`C4f$rP!F{xr%6PkgIzI#Qo%ErtZV#!`bYgboTt!#44fy2GDIB@72BN1Z^Yeq^ zsN0O!V43qDmhVKSyGFxtZ!Zjd@}AV4Is@0k6R?cAOxyBG z*`K;cQ9M%<&wiJO!LuDiCclyT9(agL4k$zA`&%e4-36ih55by)Cs4z$7AK_#V*9(j za6gmljhWk`v-)2;@aH*>Eq%glQ96S;e{TTq$y^*%W%2T{a9lNI1u0K$gpGTaqLj~6 z(2ST4C$Aiad3ihFsIoa-s~57&`)w+FYl;c`Fs=-(ojb{jz1FDx${BP%4bYy14d^?} z2h*w_Wa%yfsavDCOmGf*y>I^e|_aJ+h^OGxOqr!s_98{S{ zY_5pm>gBP}Gy0k6ye}Y@9w!-v8x@EOX?W59I4B?ejAFtsXtlj1^!YIH~;(>dc-z&tbm)zzuApJXTYJq9`?uDqoe3tl#G6e3hLYN#)~tY7itRszjvkR zR8WO8o2=kxU=@y?G{DbZO;rEkFiqZ{f}PbhtZ2PHS!%2Xv8PjLu}(1lRo{g!+AHxM z^`)iGk8xVmd00_s0$E3r7-7F%P%Qs}1T2@KdaN3RaP{dV(^@*Fvw%u@T)|gQKf#w3 zFBpwo{z#`9zzb6zeL0ZTIBDK(5;`%&v~=7KcYRGl*<(ShmaP{Q?(D?G_#zr^l0nkM zEkOHGFFMs(JDdwJQ`1)hF=wMFbHkri!jye-t*W-^I@R zjo@o{0~&-(vF=zVIr!gCbmVd-hLaYPc8$HT?{N!xV0H&Soa?7+XS9)Z^~+et6}Fgn z>k7wvu^@S$mg6yQjc~U-ziDhUa#0IZ`ecuZPt;(M{RIArl;dQi)`@9TEyJC$^7!e5 zF-=Mpg&iLg@Z`Hdj&VFf##^evy1XCPJgUXl6NXLiN9tkRru+EgK`!+kC#+FM95(1R zavaaaxW{4`Mfyf)Y{@C#*OGn}p9~Tcn@QcKKNN%Gu=AE1jL*qo4lAp$ zvah$np>_eV{;ZAF%W|mA_0#mDav08gvlspo^@jJWm*SKl4SwBk2HF}Ka#_d*y2>g* zyK6OOc_v`!jbkvtMnm&DEi{dNOD6*#mfw8Ddaij*GEfR<$NYd_Iho9kwcD}&eHiSl zErF^PV*FQD0$`OlALQ2Q;EAWo=(;nKPVh5=^qWf1xPK-!8q>h%sSC-8kf+dB)P%1O ztI_V|m*@o5i*#f3WwP^wJUTym2>Sk$`HAZ`K>OPaM%QdN$1$z|k)>t0UtJFp($nFh zvPje09fI&DDjSZ=bu_JZ4`*%8K7g86^1PxQAuu`00{miwTynjIK9N~Uw${uby5*J- zW$Dk%ODe{;?kEqs`;4wGSRfzq5&(jb71Uc9c{g+hUo*y zq`oH7!`6_#=ol?KlL=~EHuP(d2zEbM424h!w*xPr`nHM0J-`OVZazlIMW#%e+&+l# zNFg#8i{Y@~Dbg1%4Xst*X~3&yQkkKT62YdBcWW~JFhK}({6C1PU6eJMVaIu{`lgdy;||zVVanY6@RMCA zb&;r>t3cEXhU?X(l3ULo)3TkhOl|gaIyQ!|Wo(?r|3wgU*o40MKx0#)==Mn-IM`kf zHL0a+(6kP^<(D>okxe0u*+X|_Nca+tU$7K;4{b5%a5diWv?CeW{m|-a4f?mFsLWFr`2D$>~_#;CnD&`SB3^&Y9eLoSMch0TexLA zlWE+#A5T6UC#$|WfzrTKM7=DSA6r3+@|IzbP#RdL@t{h<2E3eDbpNEqR9J2WCrK~% zZR7wf+wg|WA1Hy=+M}rA#(B#49^mpZi@AK@6l`z~!9(ZfK**e>a3n4ruUkHVWLE*2 z+{CA*Cej#PF2;-1H$%^jvuIq!Kg`k4fZ632*x5hw$#nJ>KHBC7KH_JvAisc&`P>H= zr69~!HGwyw3ou`PGX9d@hO6^t&ykh~@D;c%$z)>EHRDO4rWAYt7U6 z|2|IO9r*4EK_--F^!gzaEe&oyk*wcIJJ2_Gg7{Suki0XK`S@r#+jYE}iI>y>8w)MA zy5uR_W8MdszC6arpRwexm;#vW)rH5!8Th9u2plVd;lRo3;OLM6o4=lbviC0-+uzc7 zb$9`WJY}IJ%MayVT_6<;w!(w@UUsl$1A4R;f~;9CmJFG|j>R9LuQr${_DV35CGVr^ z`CG)`6*mLvQW`Qs5`0~98pSznw`M^CRWA8PQdXY^-IA zJiB4E} z>0HyrgdChtDnr{jU#b-7_#B6@WumZYyAU!8;i&)69Ct3vB46$e5}x@m>?JY46I}_1 zMdGpHRtecy)`WkzUBPV|t`eV^d^Gres^PNRSM29=b9BYxQS{|bm?=CBPkq#AI{jG-{LZ#B zkENEN`MewCfwUh4-r&Ho(^hgiemKbTWvNJW3_P2BmAHE<;HLNx@N>M49>?|Yh~HIw zD$#S>>s%Utuuu9SzPA7f%EJeNra&gS9=DDaGbB046s|z?dQ9u^M4c< z;f8Ptp3AEy{I%B<&L|k+J)x@*H=b{5oSQ;gPn^YxHU5zL!Uq#xsDNR&6kWbb99h3} zP>`}4BiAo!3cGm$?zG>+hf}5S`P5Od9}#K#3sb#N@Y35uBhAq&23yNIf*rt$XG z%)&q7!(?zl2r8ub!J*m3@V>B_RV|r;*G~rEt+(5mLxoDHb*6(TahkjSqr=Sl)?&8d z;uOAnrVJ)3$YN6ZSKNQ*tf`9TN>=dIVSN1U0u5UAiYdMMhJ2d53UiGZ(*2?rCodD? zH5fMG(7_J;?Q$CWrkTM(MeaFCRl+!K&wj2h264X2C~wblvSL#*W8SVs)t_C1AE`dz z_}dG19-IVI@_tfi=aYQROK3LB24*#j!vG`1GwJ5$Q0P0*k8&EMv&4&7IDa9-*P~G2 zVIV8)q)kpf4W!P0%F#z44z;wj;Vk>xZX*PP%#}S9TtNanE`nF zsfcDB7K%juY|Gw?4g+&Ae#KgFt{@<6Bz(fHb-|aj0%-`;Q(0#sv zrJ0bxrcF%SEGlv88oS*{ov2h#qQbjtnDtjn*t9_nviEZrE0m{4C(DY`n%D+*-S6eh z-IQ1C?Zl~!p8s6d=BpKR-ETTk+^s>QpBs=f2Md{dE$Vc|A9dm#exBJnL4~+|QzuQI zB}tvzTUMj(>#~`p^=zckLgvhx8O+bJzwG-;A;N2wBe#7j*+PR>ro>vBehPigoHeUm zw$^?=ePyaMzOUHcaZ1i#0$&LtS>y8{btKjCBRm2fb8HER57 zV6%}nBd_}vO`-JNJ%L~4=4tGQ5;HU~vjn;<@llNvZtk@U`S~8z_e~%Zlf1}>RVKY@a@$7xH8&bwYr!K*& z@kIPt=>>0URA}@+E2?w%70S~?tX;ef30mMtj?b&Z@ytnZ@qr}qLj}S+k%rkV@#xb~ z%uWb-f{j&!u=3_zv{2R{ZSOyVZQ2;`(V8w$>Ffj7Ln`#zj4SZeTnc5h(jhocl#T`d z#H_{&ZVy_PKlhF$toqr*Y7P#eZvRa1xD$=1zL>*c+!g2>Q^IquN>pN+JsGSez!N%& z$6pyyrzeYG%~W%u({9A}nhCH6>?hF7lkb`6r)SXpxB{7R^csXOQ=?nIsF5w%Vnjh) zj$$3c73Ak=3ue@XG45cyQfe6e<7CUbAgt^m4Vybk7ks=$1K| z>EFxphE!-;vKM&y*%9lfd~B+C3TytYWlc6n5SL;*T41XQdY(lH#b>zF<1A{o?*MZ% z2bgrmo~c+ZL%ZV^!?HeEl=8a-VfibV!Y%L7>vbnwd6o?~FMo#^Rb7%Fl7@bP?{Ivx zC-_Iy!=)c$s5nxM(I3^RZ^#0CZfe3*R2h+lqFmO>oOFy91NNw31#{%iGq^tO5>#DN zr-BXIbhgfI%sPJnPH(Xz?*p#jSo1$dByt13vhHRMXLf+{f+41Jvj7P=`WFMYMuASm z8ho493|VCc^g>fXVbr@=G^*N){dp0%DMF0y3Vsj1&rRr&Jbk)*CO0EaG9Ve7#mS(+ z0REo&2tOL8p{R2YHec5!a!F@kbyYn7LEQw{sC)x&KTbhYrD~idnhc3irqt=F1^H8A zLEJ0(D73_wYHo5M#TM?Y=ZAX6vr!&xiUkR`+{rYC%ff;!1DG=UP^xuHo5+myVCK^LDmtw-@y*!KEUs2lU3|`I+#Xa>! zaP?OrGjmLuc&yT(bN{oTcJIaMs~c{xuF8OPR=dEESrr7(NSM7qom8&A1>xWQK{LD- z#&(+0g0rF|MSKI~oW6tEiAm6L)|U7<-3J?ETM8}$^Z_`bgIO80*Ii&u7yV&VY_}n= z-IyxfuZB{oQCJeBK=${YfuE;dpnj$t*)1A|Gd1g=QnDXn8_H1sqXpz{4P=M1Ub1mh zkFs%fnso1t2}JOED|4vw4OS-zf|AlF$dDO>^G<>!Pc;*hq7d2z)u@xEI%)HLhN|a< zLF3~S<~iGs3HAE)d6)u`ITHZS>h(y3w=hvMPlxGW!qDN`dq%wB2S4YTCC8>qkas)m z$(CJ4^w`PY;NKj>Q*8f@b@O83$t+8HAZ`MY((i!)SGGTai)14SJ~z)QTlk^J(v~mM09s2y%;~GcS>V-a#CsWSj#6_nkiWDH zG@7Kzk9>WStPu<$Ym?v?m+y=>&1p{aaVG9f4CXo9aof9B359GGsM}zvKV%#|(9IccYYTFFSFG0G;P0L->+6!AX7q_{x%` z=RZs8snG-%u@5c&>ao5`HSCg)2DGaymaT5k!l~otM4Dd)7E03OzN0M>3$P)buH{e~ z(hc)`xjgR)Vr1-e3EwM9kMuOW!bO&6LFo4#D6W6a?p|a;Tl-Hj&-dt(p*k~uu(CF> z^nQdJ?WUsrx_PY4z7x30{V}_u+!jR}t>InjQLOZJBu8SxVUBwc-uDcK%+HfBMPmTx z>eyh_C1E0~{R!c(BwZCIO@jorsl`Iq$+1bjxct2wsnq?3u6rJV{J<}Ge^Hsn@R~u< zL7DEn?g-KH{kT##7qVwKkXN6~$d%0+G|j<^#{S{KciwCCc?Eorg3r7)a16DV>5@-M z+Qe1w26mqP#g?p8B!`?;>77%qu<76l^xl!e-|*OwXw0hO{hVz}T06cnB?|u-vo{mS z%lq%(9N&r#Rf^D=Z5L44%N*}KbV11)9gK6cBc~I@@PL#h*}+;-R{Apx>9)b>b8+fq zt4bNG5N!Nj$@U63ush;+f@Pa2`Egf+d9o$Rt>0m=XrTn?2(xP0-V?9ap`eZC*TIW+-FbZTr9{O zgGi9lZGf@4o;cJfiN2Y-P_-ZmPWH4xec?_#cU_OHziC1H#~MJYI}`84$Ffq*FXjvVNE$x0XuFCl{+o_x*Ih%slW&T)1)pR(KN?_Y$}V>3f)&|@lfW>V%l&IT#CSVe zz{?%J$V~jrd=qy*z8nBdJi81R_Nff8Yyyfc^Q06U5fKd$C=y%5&VKDmC$)inw%`3k3CY& zkbQ14mip~vmWS40I(KG=b!K9aeLwc*{R0~hJ9_uJDVbwzNunZEh=PDH87sK%mXFCW zn-#&#uP5seB$N1ucVbD0laSdgJXp0;{38GE#0&ZJkc=*rljAj)WN46E;tlzI=F^=jka(r>z{rtN|I?xLl5yH>WWM zRSHzEL71PtW*>W7TLseuJyGn^If#A9{m$emsO#y*7PN$6`=}u?o)*r6K@_aeHz#RP z9_-%Jf0^do>FB{K9n4 z0W`2uAZnMKF)vJ&Ms3}I_fFr1f;k%GeryG7&m04}$f+2ebs2^B-ogTFcj&)&5f0u{ z!QOui_Ab|D7zRiN0QXN#-KZ6HH8}XKFJ*aI~a?_cS%;xWS4HhptAnxC9 zp6(R|QllS-i+aA`c%&Ebcl^NIh1YSJu?}sz8i@_xlu4eM4IQ0W#lEt!qT61_z=}yJ zP$*gpO)HD|nlf!@(76?Jze$qnrMGd#t`N+TOohv161XY)1FQDxCvQWe6+IQ6fuhnj z@VZ`{o;rRVyU(j*(6#}1?jS|3JP%=0N8Up0jEy|=o>bh^odp*A3z6ND zxYT|dY z2fbutK17QUW&dP&`F0vQ)yME_36E&PzjFUt{coH5T@#J?= zczWK4S&$|{0;1+X8gm~ELbZs7n;!g$jD&yFoFOyq7`wgC5fZ{hXc1TApXJMwH9qbr zdLkX~(m$}MRi5^AtI@Lx64GJyCpue?r%Q(JV@WCv^*< zVarQ=Sju_!PjUlw&32IYs>JItQe>Njh?E*+6V0zJ3Sn9H{S>Gcum+^sX&)bjApZqHK+@Ski^TT zG$8K;EO+|^0}| zLZx{i(PKxAKMGRu)DMtrr$s+}H>NYE|H2o%W|s2|f}pSSF-I&N+L;nG@=iyCHZeLg zLWq?0JmCc&RHG6(Z7?e%jj7HPr&{lXXvElQ6m5FUO!kr|f7hLXBP%a*J={Y^BE*<* zZDx^tfh@^yN0kVAzGvotHX}aAqOf~$FpgS1$J+OTIF|j45w_%SVBEH-lCnxg(%U9U*7h{Brh(7U%F2jN-0~QX3H)NCr3NtduN*O{)gn`Nbz;TO zJ)rxg4?13NW@j+_;7YV5Rf{%fwdpOCczg#0_g@8BHrC8Z+U-DPuA*IH7Vb#)hISQ6_E>udsG|&-TfT|8f8q(A zvelxm#I)$eCVA$b=uI9*{lo(mzA$s%Rd8J%#Y`TK0h;{?(~3iI3e5nCg-c+_Fc%fF zj{cyVn5 z{!vw>J#Y0%4Lyz(cQiS6`gYOnn~wCxm^_i4>OiGiM9B;_2dZ~A8CSe$W~Qh9hVStu zIO9+TCayK3N{IqYK-xtJ_md#TyNz-7L?PmQ>M-o;kOA4d3N+}j0DTx12W~RMjL+IH z_#;PR#m7!lna^R_y9sBWc9)1dZ2X!OwU~_{Lto8rG z9MyS^@9i4kaiBa`Lraol8WSOAohMFg@`FIPCs5nyfI4}0WU{Ip?fhGSt%ZkK_q0^( z4Rs>UpVY~AMLCiiV~wBohwq^oYCD))?rV4KTYlivTr0Gu8F8Chgh`o!X=|e`4+BDdb zg{R$N)IJ)-FBQUkk3Ue>l@2!ohEPyhjzn2xGA`DZEVY?~UuVhENlPqAxTPd1+|tYY zm`cF@dowIkG=NK?z&u3_x`nF|MJpe(X)W@k&q;)QQu_sC)rQQb3O%a7@iNpe)Sw>z ziZs+qgr+WSfv^9%c{jQh>EE{7IJ&rq@jm{J9pNT~pOi1*cB}PJz4Qk&tLz4+H!g?d zyhU(v`EihXs81!ABtx=AG8QR0L-g4iEdQuL{?-!+4cvmw!G*Yc<1&DW8q|8aISt$3 zLd>jx@u`(9EgaG&KR&3CoSf^->_h43ULs77wV9ERZJ+pa?RVky4T4mn&I~@ttI?I; zZiDNa7^aW&A={7`jD~6|_}fE~w78iQX2U4E(bgLh0t^XnM3sJ6_z)xxE=99QA^zdP z0O-2Y0qv74z;9(C?zq6^f)?)p;lBweR;x`8?QRFZT{3jFlMuD_xC+hX(o~!u%6fq_ z{eE;OuDd^u(J2B{)Y29#Dy>MQln8eFEyb0Qo#30nabb%!8e#Sk4SM&SK4G>=5EaMe*r8Jb zKVAru(ork&cA6RSm+*kNxC-`G_zw`f9LeT;oCNKfLe`^vF*^F>u+!r5G2^c|Tpu+d zxz!RRvAGo|%@QTgm#@Ukgmx5p_6Ws}&S4ilEa#7kDX|j@UW3n^J8apY6pfkY33A(| zXh?7X9v9J~s=+oi_wQ}~I@v^=9i&Qcv`|!Yiou!u?{x=ZThAzD1!iDNjV@UyD-8zC4)kZTF#1-C z7EN9#M06XPVP=mQRLTuQ$P-(tcKsUG{8pfYMm)IG-NB@@S72$d6x|S{Lz<^|;l=B* zm^F^58uSn2Y^BIZZ7)0C*1_Jg;A;HE`Y>2O1|VRDT1pA{T~8o}eo=EVHfKa9zeB|Fud*lI5KwW@J4lY3Q-q*?vL$GmjD9Ug_)Z`ttp#U-S5 z5=7nFn1n1)Cb1V8@KDRelCzgl`OqCa?3aZ{HJdrU+L7M-WkUiMN5P^iW3Z>A3nK=^ zX_AsJ*A!%nJ zj2^9E%{q#4biz_}3wZ#QmddndnE>uuB0~d41YyBtGpcAX!c5#FKsIcB4MKnP3E8Ye zat@}!vZN|pG*gjI%8Q00%NMch8bndT(VF%35T$$L7UM+k^$_{2nt8uFkEuG=1nnBX zQT?L>F>`waQ}!40wvL>`+|@?prhzau`#J}2D(TS=mh132H#2K77A72t4E1}pP<-_e z`Y-0P3XN+(qgxbrX*|Liqp#tJyBwKYbcR{mAWLum`G6Du2$PRToPp$+Q>RuN>@qN; z79Xr2>P7?08#ku+lNVu@&Q=urn2wQq4T40t zM7Y|MS204^)A$Wm;438KW;}KIQzIeo8n={yV~W>x?4x{ z?-d90wwESDsL24dHylFE%8TIk$(ruk*ax9vV)R|S0o^-dPBPo<$dh~T*jxuaQs!}= z@%?2+F0T@zH(Gz7fx<_Kin_pvMqGeH%67!k;xfi*8&MJMT^Oh8BId=N0kC#}nJ-mn;X*ZNf2s`Gs|MLma?Ye((1e7Q zreSx4616W?B6q~~$g#uf#OnOuiQ||X0lN1fex}qZX=rV3L(s~60bR@}K3pG+QtbhXxvhh}SA-EURDV`> z@v$uqDo5bbMTeO1PD46b%9@5m`{4TLr`Qd77Svng8jLA#hgzqpm=!V)*8a7lf~M

S)4S1o-~>Odg0%2?YIRg-tWqaPIsmq!x>wb#Bw_Y)R|_7 zThxNsnf1pYW#%cE^~8bBcT^!TU_soh)yebMCSE76 zz<5s+16Snfs;VyVvZ%nd8k?ZbmZGnV2Js0i0wskp_GnrwySei`N*~r@roGoDK>OeS;S-;>wXgK@GnU8C+uuGigw21ir6O71Vy8E!~+ANU7J zbFMOLCUu~=rzUOvn!yGwHKC`sI8voUqU2wL7WLV<14E8$(JDb@#zVCM{Vm1lcWYT% z8UB=SXn7AmESds-9+%Og_#E1aXTjSq$KkB}I>zl0AN*4?n6mvUR3{=BQU}Fp)4x3Q zzN$zqxOvURxFJ}v)c_~=OHyOk7ub4fKkV9b6C*j!AXMi(FbccTEn+QubVQC8C5>Xr z#vB~_p-0*#=QA~*yI8ej{G!hfr^73`Fc9b10PkQS+O_pI_@9$Ti!OU=H7-ZRo3+T# z`Y24fydBza2ob}kGPIem&03s($6k$*#N)q3XmDc~UfJ>yN8)e6feRkYK~8fR^;qgA z^wfx?Z7+ps<|W{&Y=G~I+A%~&f_xqC!hsS2;+tXHj&d8<`~X~N#7@6^8HsZU|h?cjmhA9Vgzn? zcVTcv7~?v1IaF+yBla1BWGqXTmo;KWr(T$a&jd3eR(KnuJY3CgyEhM!)3YU_Eiq6> zmRz6Z5ATj!5)lnia=ow<1pXVu=&NRA`Y#ztgsr8y0bN8oF`#qs0@+$^9$ zN0#b?<#c88rdEtjP@qg+mJ&|dW<^xl_sndoGT8tA4d%)WFjwS)7>iECySp{`%Ke+* z`t+-qy7CKZT!_I=qtEQ;vq7L`HklnTScemj>(c3E*7V=_J-q)R3r6}kAU~`cDl~=Z z(kzPlDstpku_USFAHe_O3z#3R`e64|mNH4La7N6GJgz?nZ*E+}Sl3wWS}KnPH|y}v z%O_Z|^*}sSS-5Ooga`CVW|a8}5#$gYJv__+{!< z{@1>7ejC zaJCOcn`tWwdrYq2XH`4QmFoxF#S@5+kV;{6`Yo6*b^_5F3+8e<<(%u~oUVEf8y`MlhW)JQ ze)mE~?pqBz{&X|+pYO&2xlu;xzegDEa~e%!Ikx9mGfu9MqE@$dpmw7a^*!uBXDL3$ z7sqV4Jp?Vz$M_|<^6#<5`6G;B?F?M@^*aoVzeHa#3Ea8GlKgc0$XoEe6hh4{siW&L zR`tqUOdr)J_S4G2`-42kSH|KA$yU6&WH}oxw-gr+?Q*NRy@J_nCqZ9SG{LPK^Dudi zI^nEMpiM%SOnjpO^+IWw5wH$l=~1X7h8eF=SBAA#S3^Z?GGII+rYToZGwtUMJn{T3QO%P@frILoo3v|xZe`= zo{bv0^q9{uMjVH?|0lCEC=t`1`$J9m71-mL#~F|3V97F7eD+bE%YXfiOBp9{xE>4z z7F(gKT96D$oQ2?*444*AX5|x7ct_7kl8?6hBK4TNn5)S7_()uXvf*Z4?T;Ox5kWx2 zUyvN%YeGLwlOSb>6Dq5!x|jF~f5;)KZ0Y;Is1ByzjJHjWD*<7);ai#e0ojZg5iaWNL3cO>8E z*5Hb%I`q;GOM=tPY3zybsN^L^_rEYBDJBB+Ka*Pg^x+-)aCKs0uPOao`4-j)ZAIk= z++1Ul7Jb3y;E!+ir1VHX&W0hBY}~~%r&Wo*#ZkPFuSyTfxey_*M=1;2HtoK?4eTrYsDL&rESA~x38eb1U}r{nGb#Y8bN6KMA(y63H!I5 zKo#GqSeV24w#ADOl|?7vtU+{9`BhtPRsmqSn!#mJk+5V&3jXPqWtu(GKIhth@U z$ae>7+^b1Way?M0?0NR!p%NyuvjFEwU1e_ZbV+KW4!!ya&^o3B%0!JxpZ6Bto2_yr zJVcyz_77z4Hk6}`&~lLYV@Fd5E}(gw9JNapqmz1Vse7e1DR<=hr#(N|jokcT(q##F zc4j@k9MmCsi7()3Y8M_8m_U|CE0gyrM=|d10CV_n1C$%<@C3Ycaj}LX)pxDK3qOCc zjgm4%sp&o#kA*^~-!NEz?t_FwrQr6T4P)k6h3oW%@Z3fbg4>^g%-SflyJkf<@;9T0 z`(OB!;YiX!gVqG9PM+)1h!w)g7;?^>{0SGN4X?R=JgWwT12xI6X~%G_`aj%Zt3_(+ zstsY!PbKCrTeIyn_Op%NPU4 z28g<($nBxku*1=^WaO3!>TOD3|I@X`34P-9yi6$T=#kCU4nJViG}dkROhqE0CPF^H zT!NipqtG$(n^`dwgP+qii21KF6nvn_W=+wht+M-Zyv2wJ3@<^Y*8QH$h4*6(v7fWq6zi<;D~Z|n$+)$4oOlJ zL)VZ&y!H1Sd=Z>L=gZ$^cRg!i&q+0aM4=m&9keET<_%Zn-8|wB;eZR@KCd%WLtWtpM|%pETOmyW#JmA7HQ0$T!@^^@o1a zT;|M2jJ46i+q3%-g{^U6t_I=DpTSRl6>v$GbNrcRj7gzaapv(}l*&<{Gmb>Tj?8di z5_e#ETo=xIqfahY{=pHWEdIyYgQ%~hMD-qv(qnGoWNVx?c~I1ZqBp*=JdWS?i0p-D za17qudW=^tO+_j7w@@rogP$^WY0h0`GFQkC{lCc4#Z84cS9v=sCN?msFC=KrDpRT$ zREG;}CWFRfSw^JcYLQiN2>17ev;W5P+&WXc+%`PT#J*6#DLeDg8?(@>qDS9I z$}rRQ$8g5)OZaD!7>S%Bi5LHLGC|@$;BLGEX$o%z^CkzvSKG~wY(LE2tFi?1nd|Y~ zomF7f=tOoFxzK#B&NDn|M63c8NhYU*NR+xzbCa{I@!D!PnC}VI>beYXrV4m(Rf3(e zW<)u_gzAK)GN#Y2pb;vP^X}nrPEdymbvu*V!|m8|AdfMa%7W(0C`gu&q0)hN)bc=@ z+pns-?CKTrO?l<(kI8@VCpD;i>^9$Yw0m-y1JnzgyS~;US*ocQywk* ztVskD>Og^G71aZ|8H=tGIr;Sv)c%M-(F7|R8d-$rew#3g%?h;I&5$ZZO~nzP7Pja6 zd3ZWG7C+5+#@{lgPqrN6&g7UnxYbbxvY#Hqp~w`b=B5F;s%n6DB0l5RwKXVuRGYGv z9GfNl37Qi$VBrT->QiVz-+WDih^lCu#LcfK|FEILA@7hsNt)J;r{ae|Eh3m0jz$W5 zL1S|U)aKp7`nQUt^ko!QH9f;AH94?M-HdLXn$1eJAI0g(GT3**6TIB5Nl{59vo>r$ zXg(7pC%n{XZ&5UKl3}dOeTlAt|3Iv{0K*gq*{T0_!O411(hO5ALq*;rjmX zN@u|4J4KbZe^`N^9k6hY9rcKigQ~T)yaLZLyq@BY-#d3h>7``oZIGjRkIwP~SJbjI zOpl`L&Cd`Sv>7KEIWUbr7UZAD57-bthB=ElUfJ?-f}i15^Ck?GjK#?0 zbae#ewUAi!}qflIXMbPXqJd-DS(HJZ><-4VFa$eMVT9D-e? zlfmK882e{tDf)KW(ZF&UGTzMo$jD+pW*&}Iw;KTn3WY) zf_|$teRQLq=g&PGsrGWPiFQL$Nd)8D*@W9(U4%1>tFWcZgw`B*1}$IoNaC;vhX2qY zcfQ+_B@fSlbnR#CB$+&Q_aRU)YKLu#VyyLATb%Pz1s|HsV;9>bg1}%KYje+xZgGjh z?4nBc;X!%)aY>JG8Ao`oL4pLX(i1r%A=$#<8Ao9Fq?Qqn(&BRn5r2xDIC`D5*wP-Pa=7d*ksmw-@8xD~+cM zlEH9mIx~mU?f+}Grnj9B@MlfE#3nyE4nNnLkns_NwhP3`b zNwgCB-1~)<(@tRa<}!%eUjWjRQ{c)p9m3xn$Xbc@UV=JPlW?SM5$HP`Q|4zqv%a?gOx}qR{Rf%M)az$xz~kEopFxoiQ|~% z=Mrq9p%oc?Vh%r!no_^-fp}%Q1V^aegKd3c#QR4+#+vBR`Z<@uv2qHAm9@Zs@0IA6 zB`jNN_8dBTM$ohC6vxa-ll&>&u-NrByTSE1_*B)Q`XGtU|*bbvS0k zi3%iyqWoPyM!db4NjzT6pVcBxrS<#x+OvN%b0>U;^8Ss?CRGbgOSFg6w_n2g^c0?@ zlRbUiy#>7&RfArZB*SvOaQBiW{Urfx?B}ZG7agm}3acfxvK3fpYetpH0D_`KkZFQ)7+m=j=Y=%}|62q?0 zAfJ+U;NQVkHZ^_?Bt2XOqJOnWSNwi(9eRmubTB_(L=d8Cdid`LYvFeEC_V`_AeXov z_CZ_&iofl^ky*Oz@bmllbfO&9N!SG`j=Py%ZLzpjLXHd^)1c|kClF_8Y2w$*y*|De z5~DX`4rq~$!FE*LN|Y)aeh2FOf^XVpO9TGi<{64#0<%g_oNbg3lAD~-mG4Bzup7Mb z6C|E$dgOLMA9H=40a?L41A)8LXq0$2?i9=^?48N+5j~l(x!N2QoYnEu<|{zI&VcD= zrc_W&nyQIhV)q9J!2YA*>>rz>{KA@8XkIsuzwmG=F798A+Qmni7boSYx3dj-9(#qA zm{kR?`eNj#XdTYddIm4|Ix!~iGEm5`9c~qGfS*;R7{nyv-a!?TFx7}QJTaorb0p~_ z*Z1tQ*8nrBgy`GzF|aBBCS!Rz0m_E_AV5l^@Xa(I)@ce%KQXq*jtGqC(T#_VBc!b~TXG7&0Pk4Xi8oHfQ z;`Uxl$;(@xnStwNkoNQ|n_~0`_Ho=Veolb5S;CwL>prY%zK<$}7Lflbja8N21eICJ zw0Ti=(dR!GU`fm%bPCJT{y%Ma{hTG$Y*C^E%N>YJg*BeLdksVOkKw$FKk)JGNS2>u zOk;zOK-LRuIxEnaC~21Pa(1YYjT2`wrYFPLxnC^k*A)izUTP$+3Tns9r#56}#wK3k z6^@fV;{#SVUZRVa0sXrF29&*XCSSB7VAf)1(k)AH-=_y~oH?r#PMU-GJ?{`-Z{)X5r^a z;_M@F33{~j3nOmS34P8sbm!G-v{PMzK>7Gzxgm|dA<3i(*wbf>D4DQa6<)2W#spg% zlJ8|i?}ZLR*K)2$Z@v#V`dp~N<+nKV$OSO2>xHBz7g?=Ir%?XX1Soi-OeSb`F#q~G zSb1SXY90QE=`;6Zub3K=YBf$np1u+Kx+?MXnM`I>a{{e??vEwBs~G=PhnDuVvoR)j zVCttC=%u&0ji1{O4GwKWan?}4tvJ0R9~AM8I{3it9~ zf#eHI`b9t-Z!fvd2J-|-)$TafsJ9nregIyW;X=0#YmxEy6{r)cM1o?LLs@Jh9Qzr{ z?G`B0pV^(TxndQ5ljk@eb8SL;IDd2F2sVAyY|vV$NH?Zu!7Yxf$UXfFH=#WF6Qs_L z86U;oOpbT>83V`m_~4F?k04=si@o~Bknu}O01%IW6fF_*S4*4hUv3Mp4>aJ#rXrLt zP$0HjMCo@wGn!$t6s%4-l8%d}D68&B)8_Vp#mqjC50l}1)`t1o3zUfcdkGXSG>4>k zH7v05W6|4y^sape+trN7et{L7AAllpobd`XX0+m9HwzlcPDIoH8r&agK+VKEyzaPE zcqi2ctLBQ4S00Y+iWCikhoq?x_kZNiup{fwXi)DvBbea+3k}7zi0SlIkf%F=z8$Sa zufC1Aqp$`HN(ylCQyJQCu0j5L&+U!I-AD7wEX+SCNaH8Hhd;}D!Jjr;V#tBXfDrq;U|m<=z-TCOi1*p zY+Nm7PG`D_Q9m~qGILoagqf~`6*ZsHncK6~`EnbY>?h&{{2bC(;G2;&EpY_7_dtUJExiURe zElM8DOk?J32B`*}egpm>4*1 zt%AbmZeee4Haz?)!~9#r?Q32%q1pm{_}jq_1jmtAHMk zMI2ps6;obYkkc_Ap>?_n<23yQ&hw6iX*Jo{IQS3z`7QjL!#nYdy()H9aBPd0IC*%; zoQ%BGq9b$F$+`lhV7W|~Ui)?h;ARiClo`e>UrFzCPiwL1W_<6iLH2U zPhy7n(BvsY+E$;0XdN;7QPT&S9%_S8Y7h!htD?s%eQ<-|N8CMQCP=k&ecujck{{g9 zcpRAqjvt<|8Z;KaIXJ;0Q%+0I2?Og_&eSIC6ziem%ieSo<}yK=Q7F6t*$hc)arY`r z;=qe9osP=Nhy%A}R!UW}FOXyx`Q$c&waC*-A3e%UANOKOMUln3zR@;QuIDMR0% zU(Sr}ZpXT`L%i)vL-CpQ4;+Ie_S@{|ozM8IE^3lSB@w!1=>#e{dk45z7?4xJ zYD9MFKd{O_!d4HW?4u-+-U(Tr8L)jlzS*~-1bwY z1|i2$rltw2;?vN(+>(B#T12Q+5|h`}@O39kk!2Ga*_p!1T>O<3U#8= zZ|ixhZKPpodI6;GJ;p3P)(!_$X9Dl02+fM&c#&aqYI9kEhK$-VN>{rfIbs2ZxvGKY zTO)e4LJOZQ55yyh!`LuqE5-@zg)wrSMMfFjyocfYV_7O~whFd!`$1>R3`me>KgWlJ zv0-hNw0Bq*n!Q=JWn(OS5bojTq<5HWMcTBlBnQrVNK)~`HsJc70r{EO1T)uNh2pOd z`7eLpWZb;=vhFR5V9_mKPUEfzeVsC#x_2S}>x^r-c5*$gdy@!DEk1E9moN=DHU?I4 zD%85688y_4aWPW_kC~_Z07GSxU2+4`X5Pbsxhaf}hC9Z#4CB7BGMHf)f_i6OF~=UN z(B)Ik;Obn?Ybjopa5=p6mUt964dr9%8XF2@DUkU)9K8jug0TAy{HmM>-)3LH;#Oz4 z{Vg9A?=512f>z-kEmtf|c7%UY^=O|Ji>B3kFu43Dj-I{4H;YO{m+HA}2De)`L+%$F ze9VBzHpILAoY`C?aCr~xuWNu!dNudWidMa$5@_F}eLf#WI9aGJm_8Thh)E`EO13_6cP&?8Bc z)ZOLk|Hh42(WHY%qMJ~~JRLU<9fq%aEXaeKHcYO32=-?TFbdbrX(zW^{CKSq+9?Gv zS~Au|@IOgB#QDL#)>b1)^SPO``2*NLi({+@jcEDh7tCWZwy4cVk9cbs5bMnb^kld* znR{6X`?`d2yN)Xc1dD^f#R@d~^2yDRR}C+;;eX2BJetZkjQcgu^E}U)GppFobvKVn zk|t?Rqf$!qgwjCClnRj)LWLyubKNSLGnO%xXrf3|Qqg&S=e*}V>wVXH|2TWC=MUR@ z?zQ)}-NSW#zn?E-++NK0?;FLFQr+m`u1woDa10{L7v+WpTxeF79)S&nGe0(rNhyKu0r2T5=@qtDqxaB*b z&A?XX$-ZDXc7_lA%3`=rwwW*I(t|>B*HHauKE6(T%&eR^4Bdy4af^j0U2(~l9L~&U zrsN9~-)#X{(rQM{`(HuJ8c{kA2T|+E12p=<@jsSY!_p}x$gC_z$7!gqn`s%^B zKT({VYSg5kEVnY=5pF2`^&Q&Ib%Wqv&3MXHlC%zJl1_PlnDZ_f;)mnyUC` zgCl)3H=iG}(iBhoq_AagAE3MG26kv>5h@<8M{*;PAAWlj?UdqO7aOZ^IfpaR(vz!g z+Nsi#NKVi2@jN>6rh$u<96`>9V0r#6xP6yl)n6CkN9UPP?ED8-b9MU#f!~?Hi5jFT zD*`S*9AMaZdosm#3fAl1!7U^IpkLaUI$qxmQ7`O3=#M>)C>X=Fmg(%RM>6ny)n|4- z`ONOkQKwH_FXG@-Mba8!OS|$^$vhVua@aZ?9>30EI=_q1$JY({J6$f~SyU%^_Z#u* z&rN(AT?%tk1;}#;Nutx&g&i#h;1acwUA|A6tZCvH2-(`CZmARSE_lOpSvM4!-^1|F z_<^dzF~-9}iQfDoOna{CvF8`RLy^k^$ougbUwxg<^kmdR(VW?giqi-znDPgWBJ&|~ z9k@9y1Q|fM;K9e>jWmzs1hut zBH`4w^Y~QrjjQ~GO?cqiNt`zI45Zv%gT3?D!>a5H7`yW`xU8>1!=;AwI9Fe}xl#cf z?{M=y1Kh>!r>vY$LR&j$l6k%dzoh#xVjJ}6+N6vkKSwL#6>t}3Kxf&hOxOQJ@Gdh zXxWoXN4GJ1cV^<%{dM@|)uSS@0!heJFN!Utv~rL&#X!NI|E#{Hw(NQMA6&5Az z-kX%&9WkFD1D`QRbr;U$^hfr$LYP~fE8sz)CNZFxJ!>}OEWF_M&&7hGyvu^AFnqEF`@i1B zv%8$p_{mpz95=w+Gp=;uUlt`X3Y zEqz^j$?OXgrXR#^pIZkVWv9_cUzVPcRL2FSTR^`^2Gxg**gYRR80%nlwmG1U#Ww@E z&#;!6-m{pk@(>`I*5er2mG;D;{w{X<39+lW`8xj9E1VQsjSgkGkd*9!y;ky=;V(fH ze(r|Dy5B);&N-f>VK@2}uk@uMwqIcLE z*&^gZ!x2d5Jcv>c1laxeEaB4b+w8MlZ=i9yEXj@=zz+_(T#rqNtbSoZ>;t^<$mlg_ z*=J1(_V%E^&PIr?ssanH2lz7M1&rp_K|qoYy|Cv31ip;IdkX2$K8Vci#g?e4^S)L_n~o;K0;UX2ubB{;A}KnF(*|y&l6)!AP*|p?PK;!oTyv8p zsQ;Sn;INBhrxhf!hh$V;FUp#b0ILD?nqWz7BK4rzlJl$@L}2!ook+&~FnOjdT_T%? z7emjmI`Q?KU(p0^EnCGD&M}}j)YOT0Xbmgf+l*h7|I^(r2SGh6Z0}gXi=R-yrWJ2s z_uuXWzLpaAUVK@TQ>FO6u@%+U*wUlAEoi9n86FJV(OYvHz+|B&4gWhI-leJ1xAOBL zEjJocc9el>&l(GvG)jD95tSJ@ru0Z9>*hmL=XVAA^R|IdB(BgS_QdbVAUq zBB9%}KqXO>?FdySKWh3Jx$`C9l=ud>ZF-9mx%w_EyLE{n#~0B`bcDI_MpWgQI%<~z zE3_qw-QmUQEDlG(+A3z!z-u8k{k1H)F;Wg!?c12D5gB5Uafv@`zcTxMiat>nImnJg z7sD%JO$7}zAiU=%Ts*qtp~sAmc(L4ETS$-Y2y*m!^ zCM+wwN|j_@Rw7l$H^JTy0!0(_FMxp8U#R{03!O7`Vf-yl^ZG-H)H#PR7k=zw{#gEH zdh?$^%ZY0sq_hWLa{IC?YVTk};21pod6Rva`~ z8-_zD_wf#1a8CrC)EMT4qB+s?KLLRW%Tef$G;yjt!Fix#F!pmAn>G9xr!EZOhtIl+ zZgx*#_F^%*dY1tGXYmcRg>>kx@rtx*ZW5DTBS2ozVtn^Xn$Ee<%`9?{#nSVhtkQH9 zD$MC5SDoUx5SMph_BU@_vw4`U&H2J^Y`B4!k~uwT_-Xhm@ej8f7{It4jWC$P@s(hF#2vkQ)8=W{`32 z5F~OdWKmmAg!oMx<@Tx8q-VVye7HA?9a$&%PDx^vx5S3Hx7FhgcNLuWA_`-|U*n+` zV{$ZEo-v8Brha46RF~6{zYq>9B$XDJK`VI|-81mgRzu>RsRw^6bV)^-C1feT!KO$Wzwd2%~(MWhSv8l1@#PVfUU{aZ|=p9a~^lf~lVDp+&Hk%UM1;K@8& z+WuLd#7o-HD!(?o`1Tu9Kj#S!v^KEEA1cz%$r?m$`eJswcmy(u*^FbfJ*{+61qE9V zh`8%ORsWjdF_Adf9b--$>v$j)p3gf`Hh_!uGx4XY7BxS51$com_*6%Q4jBcZRl;3N zNOEQVwfMuYU!2}K#g_Ascc7@6GWFSB#pF#fqbmjZuyl7gUevh{#%E2b^Mr1+Ue}GM zvM;iMOe#MA-h#C!iXrE936><-vrp~sGp-8)!ROO`s7KIGL<=Bh8E5g%NOX9%0XGOC;bNuSuAJP{(0G9KlBh~U?zI9}^! zB`O!Ik5|H_c=N_D!RtjS&^aJa?gqSP8kc3TI|XF1-YpY<4+~SvbYtaWQ z?y=)?hLO$^qcz43*dA-jd#a~Q-e$G1PU<=&Ma}`-8ue(jmlQp)_z#+9+fqT3I`nT- zrjjcjv9U_Q=y56c@8=s^rf`J?}rt|%HdQL9|nVnadyowv( zHp_q>D2;>5ldi!6>vwQu`f6Nwe*!)d*2gZl0@&amj6wp5Xt}-tl7~!4>ft%Cn_tSj ztByqXd}LH6OOfOYFF}I{GkF{@>$mJ@zQ<-AI$hTgin(+7-&O07zlYQP-`64wlL}yX za|vEp@55Ydnh62P;V2-m&!tTK5^6^+VJx?6&>o`5`k#-&i*!EPhzC&>re0eB(+B>tUN`rHUZ@3Id)OBLZlmZvItsH)+?hrW zI^FZnl5D)EPLf?0qngGHII7C&Ah~^G=$dGVH4~t_Le1#$`DS$bhXFV)qfgw z30_(oz*NAHD9Q7|O==3sCj@y{Qd2`34NaLjk zAm{xSA&pz3npDWLt12W{Scq2foj@@28HD3b!n`N0S5I=Y+@X%nND zGkS5#EIIVLu>sc||AMT!0I8jlg@)`HU+U;Am~tf^46f|QHdlT2$vHiGJ)sZg3XY-B z%|mc>$|F2H@M_I1aJVE7n`WGXNj~?$Wb+u_ncoki_9ci5 z5F*DO8I#Xij$}UPea}^1kIx@ohDq!x#+q_kk^}1GtfD9#O$~!PfAXN$XgymHGYEpK zGC}GSz@gD!SXnAg?(5((Q?Wv=KNG~GJR(vyx6@1m&_C( zKKrz&ZF@gS zyZ;f07ZD~Mt2F5|zxQmxF?;ekzKF3e>Vxw4I&dOci^#XU=e*iC;GeEMO7;)pSsKp2 z(pim9tc1x)KaT%UAW52>gJ9P5kGNRaAG6KO$pTMV(!EiDL_bOe-@_j0b)^zI`<7zL zkt0m~?|1FS(y#$9j=;Zn%hV+?`96g#+3w6HI9mVN1jsPifOuC{nwd7txP#w*dh#x=~{ z+Ar9kIR`6)^>E)oTe|*^F`1|+ip|_vtGoUMNZ%F%)hc=rvYLm`q(uR8e~}Akn%JH zCx8H$SYYj8`W;3A3PJv~{PQ!#rz5K$nUzoUqs?>6R2PBnO;P=Ikii-8a zp;N3HnpTKY7Xt-i|AU1$E=qLy79DblcM0E=o@0a0q%hs~A7IIYFT7=b60{}14b|Sn zp+KcQEYiJ!h3l-zm93Vft2`H1U&wW>Xm4ShzUD&fk=gK(w-n-QPcgE`RLS2tNucFj zi#{*?d6(OwF;cA$j~s8qPf05D<(VG1U2v8i8%n{n>Q0{MOKDns^%S^o6XNZ3xel`u z4N1#aSvq~L9{TQ4V_rSTWk)Cb!Qsjy%uU;TxG5k=$4PKJ(aKEUe8qFlpbuc8C~)i&h$3xc(TEmpwu7 zOMrxr`H(pI3TVx#guEMvSYbU=a>CCKyyuNT-0%U6={khX2M_Y3^SM5^at^OVdjckV zJwf3(5hiq-65ZHjMotDapz6gwi0#wH;l>l78UF%J+>CJOTMItgrbkEiJ%@>(`#A=} zRo=)NUD6iR3^Ci}*wd3msp9+~DEc^_Msm!~w0rZha7z+OirbR&a(`hjrvr@U7)65X zqS^7&_hIwfNRW4q1nE!d{7}w^C;YILojXC7iI`mr4!>2&G#U-Nhxdb)TO*8YvZD_a zw5Yo9cIZgq0n6#T4%X!IUNlFrrn`G_;>=`dYMl>bekrhxFF_mE|G?Qtobh_N0`0i| z64V?m$>o7bto`w9cv>9}`3;=@IcWmco;w90{X^Ii8;5Ha|AfW=+L#3&Q~7_Ytw?;? zIDFRjgTGJM6B_CT@VIprTb0#~KetHI&WDvCWv5Th2mS_LXDa*dRTjLlx(rHp&f+%t z2hiaqgvz(4W6_i#I9x45mh4cVFT+g8%&;qv@+1wTKRVMvo)>go6M^5oVT_FaFI<0B znk?F2iI;TBK%bLVzW;m)K8clL<8O{JTy+BS61U@%Ef2Bg{CMgYbRKBSR+zuTh%V3K z*r6*8sP^lbm@ab?&6bt1F$?XOk=8<{W_~26;}Ioof8?n5LMwXPj^p^cmbx03WwMHg zEWlbi3=b$gz-#NSVRFefSfug+vI8Ax+{h%xN3N20Z1D;B_51+SC1y_DUkSj57gIrD z!&8V?j>okHTsDp8ci{B|!V5Vk2#MPRakqQexwlVa)HPAYxLc426!)TM`8Q~{Xkir1 zwCHoCG;|#;hCk}b%)b3r)bSV}9dsN?!K}4-#H zLQ?w^O(t>co)WiiFTVouA7sc^)T2SE2{_?n8y4p^v7gj8L8M|CoA0VaqI^E^#!lLj zR6|Gh*(^(F;QG!{oY!emq%PWUI*QFBY1lVgkyic5V?AWz&}YU3xVGO1;GG>2U^s19 z=NE9`^I&H+Hy4b41H(20_<3;-ZaSb$#q`>t)Tb4cr1Z!J7xB|+0Va2` zGWmj6Fz&l48G2I&^D_Rym(WC(KmR(&>>7buc^Q}+Y>y{%6q%V9PC@tvHB{JKrZ5^%|u z3h3hc3ombJf>r)_oU|(#3!@}Se^)8xSKFw887ff~;L>ykegWmhOLDvod9kh~+!=;QdCPaomD>eK9Pu`M|B{bWpi zwG7v&O@*wfHSCJsPB_SU=YBalvT;lTFqu*~7-UON2T0KG<2VLg;W*l}RGiIHFeUC2 zIN$y&U_H#F=wF>!*tklNZlCCgik^<7)cZdNu00_BJF{)j|^6 zgI)t`@YweG@N3&?{Hyc|+8V6!-OP^=GvgDkw9_S2K#j(8b)Hwd!*Fvk*N>4frt2Ha zKt)ZC6i3&fdnymRW~-7@d1>ete*(^(^=G0V`~h(*4LGkXKs5KO5mwL#Rl2vZu`?b* z*OvS2(KE`F@tFz+lLVO1St4XcWG-8y&b&w0pJ3iUb( z{8w*p!~VtG8Zqn!8cK3>?GQ4?%Wq)nPkXXxZ#-NNd4oMS7`Ve_4s?~f;lszZr_~{ZBDe94*Gm$O!mW?}KKSc40-f9SK-#PIh!OaNM^!jE;;V{i0F{6sr+q`V;luh0I8 zawml8z^z?4MSTybK9HfYvA*!`Ao47&0C!K{%J^Q(z}^)Pa9X<)q-;i<;O&C*do~ty&ldUgcI@<(2&P~|*d<&jm#hpov4avHi zbFep0kj{@?%4QdG9IxZgm}t(|7N}xNQ*0Oz81cpxgG!J(wi>%rUcu(8icD#K670>n z!kgwg$CYo?f|D9rG4}6bh)ebb6IWYWeAAX%M})Z!-sa9=-|E?Ug{kbcd9P6F(s_2^ zrUgk3se{2y*7VNgQGi@|;*+olx8z1~Ol@VRU+f<~@xIL8yEz`#JTxXL(>3VK7h<%m zJr?5v&0tYLKhljK(X%EKRvxz`3+`m2^)_kxF1Z^nzE5>MZKpNTXHmTWvOKGcTyJXML=v?TCXX7O+52K?Eq zL;82u0UbWa=m)Fdw^{aN-sW?-sP`rq9OdSZ3=x_h*Tz31t3{HFt6U4iCGkYf9bB=k z9ZpVP2Xn_s6MptjCO-Q!R%*=RSd(Sw9QG3zkLyJ_pCEkEQI7gc^yrc&7)tfB{;JDbMdL(619IpGt z^%xCi!;=GY%;xoFY%seEbDk*BgZb8EZrwS?{b~yOSx;v94>NG@UXBe`!@~7Qd06?) z2xa%TGydr#5Wii4mUg#dy=@dbDEAfLc>d$O!d#9b$E?;2bL9L2?$Dtf2RBz4(vqxE z$W;0bsW#8iXzxEOXLZ37#yxDVb3d}g!@%FMkRL6~>k#AE$Gr?@-fqGDew`rp+8Rtn`cU(9D}%urr2d`& z$!*Pn#eLI(O*Em*3q#Uidzszm(}~*0%TOabi;bFg3tp>CMr-2_d`H`KHvO^^%r41? z^e;o~<<&A&tf2<`HRl!0Y2H%Q`YwYBOtZsZQ>^J&t~uce@lkBwGrk4KMpET;?J3MS z&fCq^7M$!c`5SkhnfVBZwRU6C)p*D<%Hi$y6(A>{Rr3~U+EW=_De`&v4!ql3jhd$a z81u}RI79m#Se>w@zAM6DxICNn{wGUaFS z*OwXaO*$F_{9D+;>-w}K(2$fU2vglXya&b#Laaf6LF0IC~b24=H^Y83@eL?E>_z9e{H|E~MFA$h)jL(i}(tz7b*!C%UVBPc% zZ;4xDdSMK2MrQ~n&PhP0?tS27XG8ki42fG(11yZxr`zY4(7QL*!v0%l@b^MdD*t8z z{Rc0{w`4SPvaAD^_I!l_ukCtUIJ7MRZM{2Mpq!Qum;v@Mu6_w2jG>PhO1 zp*bQ07Ac0{p_)aw#I+W3w|<6No1@&{@geiwNRe6fK>}^#c0k5SZRozq>9U3|W9!X2 zX!&PDYR4`^%@Zv+enOlaIF^WdHnNy{`5a8I4}v2(wJ0W?3~L9(sbYBozpBKC>$_Fp zVR>zG>+vR-nXF7bw>4sq=L6ic<~=O>XG7<0DuT84)~w>07S>X*oBdb)4_^^^(kCHJ zRpt#~;y+1<;uv}JzNF(C6LFfyWy8!aX#mqdrliK?6TIG=#^ujUf{Y;%x{l*u&cFEy zI*d1gK>JG+w|t2Y@Be_KpIezT332SkyZ!j@L_4Y^{DXo1aXj_YexTNtk4Aq-*sBA< zjI)d)`CgR4Zhp89Eu_-X?}QY+nQKQ{23|AQA1V;<)26r*a*CSHY0xnT6H>S$fv-`r ziqRSUf#b#A!X7V8sN1dtbJ|UzYRHZhy^tk4U)wV==@&tah@wILARbYl$y3(qW8=IGBQ8)%S z+~37K`j!ZHOtm49W1M{b&he@5Ud3p2NAjmX8(ofw(swmdD1EpKd7XFR#_Vrwf#!Yw zef7`qsO2Q=^S{Q#x@pl97n0Cf;WpgaBgGT;yAOYVR`PVq#~?_i1s>IYWWtSRp-|OL z*hJQWeoY#anp*-2Z^n`D?T$3%*be5wg;$BJ#&gNVd_ zh_2_@mm(r`(^@0ir)NSyH4hxX38<_EJvBWBwno2V7ybUno0InjU!*o+PR>aP5NX8^ zO*6o*qn;;b$JN><_krNcTWqTnpAFh4OXuc^(W7g%m>W+o!||nlP_s21dd2s^>RMB5 zaW{aM8?ES(3q7#t>nheU;|xY|b)KEY@7cQ+H7J-C%j(ET(JD&|I*vQ<^IAoS!{iPa zwzQ&NU0q;Q$?bi6ZRk@k&L=o~6wOmCaZKz3zMq?mo;|;y>Rc=9*>RcmE>b5`O>JmJ z^$vVKGXmY@!@=UV7@^Ev*Ey?+xx^yIHA%tGz z{BF1U!M=YZ8#mC*j|yMJ#BLaXao*R!@6-%P`t=F+C8*KS%0jl0xed)sB(v{>Ew0J^ zg0?A~9{ssBElAx24lktXZY?cx+)a+&HDgfsQzyn8%!V}_Uvc%*pV0iY1{@MMFq>96 z(B22(Ap9{C=09kJ9d8e!@9RrwHtiaEXIl`j8d19Lr93fdNn)MnnNXoY5mMJ-2UgQw zVO(${nk`6xPo=f+MKBLEy}a;Y{TXOz_ClMOzc`pB4rM6QLVMIPc&YXJ&B01ibGPg>_qW31=LH zsRNIgamSCr&VFCm=B-9mu5RNmnCyuGAqqruM49?6c!7n{=vkM*t~qPr#`YYz({4__he!~qKzsUg+89__212G!IXkaPm5A}RXtYo?o?D_x z?;Pw0$-gOh=GV(2_h@82{g*IZ8&9Cz6n6~Vd>Rs^l}YsuV`|*^8dpa*GahNW;O3Hn zw+|_k+10ib3~r+^F{NK$6l02zIT3r)fG(zO?2kb$a?nMMe9yiM*PCCUXtpWM)Of;- zCFG*4Z9GP8GQ#7<^7Npe4aCRrpmQ?E^81wmS=W`o$32fpy)}p(65cRJZwSj*aeLb! zS;*b~5i^fhez$09;%7+wO_$APf3z+(VE-~a08)7&tOD+H{6XBq&Ye7@zGpG zJeTqchaEoQZT1s(zA+=Qm#NVdXHjP#~h@Xj8^#RW>GNB zO#<}3pT^)>KcN3)9$O@M7^jr)hY(dwGRA2aKRw@vm&)(LvJwL#;$#Efr7NNFbqenE zb;Zc5f>gaigLp?8;KY`*{AGUTc%@s5T;e#E-LWl@UK7jGsvB%!s3o}+ti}9lGQpU{ zFuvq*1$_TSml&-Ng2<>K9KS*ng9g81{4y~TbB^LRGckJXkRtKz=kjtoths&ZdU$yt z7(dTEhXZwyFmLJ)C|>as+D2wGQmOy2#OxN+>^uneTa@YF7327a?PSp^_z`xUmnW;r z`Rw=)Q*cvQCUz&JyS~}~3e=nnQOUuSjF-rTc#@4*zLbMu&uN~|***M%-76q#cs0yb z+k{zR+L-?ZP{CY|cn|9FugtQ>&IWr%IO-xid8I=WEyU@@o#RNP_f|Mv_lEP6#-qjF z%dqT982stv^a#gV;7;Rhd=-`fDv~Mqr}I5d>Zycd6$a#wS1a!P7mS_`nyk~+RP;-p z4T3>0p>$M~s5@QaxHTGR?)4JF=4(*%{d-X0b|Ff~>CvJzA-Zv80B_e#YudH*1lDfV zBk%T|#Na1cSaGx&SGh<-YNR@Iww+^!RC(h9j@2^xpAhY+>wry1#*^QZ7|77HBflQY z($Y&EaFNRuJcnEsSZxX#ML&fCuj`miLfBK02+@b0GC!~WVVzZ8z|6;WxOnUq223+1 zW*)ED_SHAwtmQt4)4mI8KknkfI8R=L=rX9DsfvMa?hsv@&i3DoWYx>G=~%CnYoK=u z-VbbN*34aiCd8g@bF5+ttz=12++H|mvJls2*^;qEqHN4V#H*Jqu&-+$G`c)vIKm*E z(fl4gFCtFu6`(~&b?AUn8!r3&fMF9H$-dc{=rd|gO$0J=;cR(2{4cm@I$wlLd}KqF zLj=fgJ4v!t)RIPWtjDl^uCDZ|8p?`;q2ZT0En2~S$6wl#?^BJL>+!Y(g9|Z3vYg3{ z492DvZqQ|F3gP{s7*i%obH5mJ-!B=Cxjl?lNu0;@h6M3k*a;%;Tpp;i5)Ha(MhoU% z!T1hM8oNx37&<5sud5BLUe95C7}<-LK1vhEcaO12H3KD&OOn5&4M)86A>2bBcEvdo z%aU-^?JdOdrVg~9bH;vORf91L?=t<)Qe@i1J8*58JB>`0Xkd2Cq@&bHFT_DL1`>RrdB z;pzBrOpHDs9}5Q$%>ma1N_3QCh{{zLU{LrNyjtwan5`Q{5C0XsARR8li(`2A6-J;; zYZLezN|EZm513MlBc?f>um$KhG z)?yv62^w{^9`bj~^l@^ye?N_JHJ> z+N3@-l~+GtLng#TW8rl!3q@9vnrif7nX?v%&HRP;;0!w$UyWgnwcr}7?K--AkZH7Z zpz-o8sD2^?zGsM&6(ZRN{ z`)XBTM4sUGkw}zt6rxKdZ{gG7QmkHPOv}@_r12t-Z{jLNZZ44}a_Vas=^>77Hk*$T z!LsCo7I)4PsblB;xq?cgT&CP~P7gK5h@Oy(Li4cz)_$uC%;>WrU;jyi?FKWtAmJ(_ ziN-`|V>I|ZYy_iW5&9|V1DNN8GJWMv)U&G&y|~=VBu-zbn|7UdL*kd~;=gD4*V;q~ zzwR>n4C+zqiZ;CdRSl~m#){4z`^ppv*J1lcEmHhxfEODoO??OMqO9djyvJpyOd?Ha zpnDgzV;(Z{Dhc4HGM7CfY)=O42&0%Y%GN54;D3iixGr|p(-&G04|m)YUtwXN{PUyXb? z&+T<=bMT~dIDcO1U5wW3;SEKYleE~&*rM_i3BASXZ;i+uPM;fk=^LI25+dPJoCiBl zn_LhWgVB@2%yn)bVQFPZy)JlyEjp4*kOqIhtik&In{iv4F)OflF3#682f;L!{nuWK zyEgFIhlkXN!c|qSUh^JuCUacX1!vJ%e-qfvvZ4!AIDel?KU$6Z1Lq=M;_`0{{tH*3 z(=zH&;?x?*x$H>a8s00q*P%*29CoC;y9#&}%nx3?K`dU$t>C=;E%^J|7#4+&!yw%P zlo#h?9(Lo4@0v8pHw9iO8^X0!W;9i60u!*ihZXgDg*$XLY05icx@T02WUBP>Z;El6 z+A0m|EagBpe(i!>b43zkCQml`Wug9FQ8IHM0lA{r@X**7^lcvS`uayfw=e`2_hw=% zslwhZB@n#Pg%@$>2jftzNe5Oapu?(M$jmdRCzUFhbb}$#4IhQBUSq(3^Rf^D21TAO)->f9`hGtI;akF`kSg@^E@IvXE&ro#DeS9zmWU6^dh zaX_S!kn9S=A#YiDoUcb6s!oB~mJzk;zh__m=Zm zr^jy)56Tmx5CyvIlP#Ak;f_%g|DsVZmkZfzPuu-=vCXSoL1E(@=vtJI!M{71>o={* zgCs+8?_oXcSYbv7E@ZPR7v8a_CDdp{%Wb5|EuitY7=u$~iH*4d(b2gASEce<`EVKH zxa|W>->N{8dTfZPeG;-xjquz+o@^`5gEbQt;We|5jHuEX{`eb@P-R2}BZV(Aj|YU{ z-e3>w&o#d`EzHM;m#@+1WImH%Re_Jo9%7T55GgL3Q$&r*_^}p-w0>?T{@_`I(#I3* zh52zz8^h^xUWV`=>7Rh-Z$$|08ev+x5+T(y8{KzvEPyu*YQ8b%@(os_dv`1dyH3Tj z{d^2pwt=8Owj@N!5I_Br#toGYRBc@*dsJMKh{Fq9tjFbr_2|)+-rRb&#gQ6$=+hge z*7WG2en{09qIY(bql}|HnUvQI(S(}|UQ06FiC39A{x!JKb`QeDcVoyDIog&M3BJ#E zV|?fdE|=GVku7ip%@3{k?_VpHMW*BLIvLttl!?s=_i-#yfTpkD@qU<%!O)2>jJ2H{ z_RL!WoANbC=P?yheCq}Tl%5CQDWPztRk6s!OD?rpC<53nB(f2 zZ%=mobtDy=!(jgXKVWFiX#s{;qIR|}-Lr?ltmT~FwmBcq3+%y-yaurTtuNe zAHm4Wn2!AHVh{I!WukfnXaUDH%K4%~1V)X>&h~DcVN}Yz;LdsfZivwS>yGSHwVNPu z!<_YY+sT}cT#vKzMxYb8yezqFSo-Y=#9gmJ^RgNEJZ6|l|ML~+2%6E9E!ymxr1v=>KAQ;+ss zmLc_%(xKvlF_|)654UD#F{g?|sfSc1s&F~=(n%*_(y359GSi8^v#-L&710pPt+DF+ zB#5XqzN=zR@7gffTH!b7I=mkbj6Z?eUYcaGg)f*YDw6t0H86vnsOCDJ9^LpC zHZIu6<;t8utp`fv;E~U`qh5t>`0<4=B(jL*D<;D?g$!&c5T#)sLXhR^B&|O`v2`|2 zVUgSoC{4SIqL;L(`@$+Hl zVG+1m%J8S6zLHxg$l`sB-Zc3{(cd@3=SJvgd~-=ob)t@%^5%O1vE-4-DBDH1~hvq0|5 zX~I2HNdQmatI=lWBgYElnpw8q1_;>e8(Sp6tVU^@7TV`FFrH>~_X=;<0A5Zv^o=&jZ;Us!^S73}rzU!sH@w95ZJb8L55#LN##05jehnTm5&=nkFdV?I`u%2o2XZFA?Gf`0x5ZkDw#q^gl+h`M;;2J-z{3*ZFNd zv~Djq+M2B!XHB!?W~Bdr54%Zr6P)bq9Ubgk9Gx8O?CtF*PPDh1G|}F{$==bC`@zm> zlAW`i(|@nB;GavYIrj?xyFA zV~9O_{R7r*_Fcn$W}A2J@ZGuhe;?%(bZd%ncmH?E|1YC7{?Ad?AKdHfAF$Ck;Qt!B z=Iv9Y>p?XL2=kz54r7Kn0UT`x=sJ<>A5@(eno)EbqU%IXd8j%CSQw$+hSXN*I+0Tx zFN$jeIAA()gf((9kU`Np39c1;0uAtHW7C1^kYm<`>*a*9V6-VXX)!QZaDtKqD6z4z YgXmmt2p>cSc(a0{iGdRcLFyrD0poOt761SM literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_2/model.pt b/test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_2/model.pt new file mode 100644 index 0000000000000000000000000000000000000000..0ac29b8c853c465d84ff69d1843a24d06ec895a1 GIT binary patch literal 68559 zcmbrlc{r8d`!+0OEJV>D2^lgcBKEpANdpZuNRfy_RK`-tRLDFNWr$RyGL^FLb?pif z(xf7#G^bJsDSGzj`~Cf%=Xrnc@%`t0@8ejpZWu-daGAk55E| z@Bej4@J;9Q+2`i&t?T9z;G(mCkGGYD6yMhWafR{k+_}%&+kIz%=f1uEV(a|e-2L3$ zEIoGyi23qq*!fOU-y+3>cK300cXRXHyIbdgyXS6?0AK!{0sH)RdgwR@26%e=i#hwb zy9RoCyEzBA@Acp3=Nz<1%vV5NeTy)!u0QWdm)-8Zg8!}}X63!lC1At9Z;JU&-ZF{z zjGnL176IPp&i#SD!fW^x1AIknt@+mQO|n*u@)fmKw4M~@D|W);AB)5Te5cs?PTeBT zd)&j_#qGZ>lJMX)=ppFwZ$N!tNsoU6N&O$7Y5xY2{x^_JfbVoW-x*s({~O5F)5YIc z_WuF1$XD(km`MS?Gye^9+;^7sq~pG`{|zxGz*pYRcWz*aufo4zoPFE_T>j~9-+BMC zRZ)El51h|;eu%HqzxpD`-Or!b(Z0&oll=cx<9~OouS$sT0*`;)=MCt;{+X|8h_Bke zZUy?g>a4dG7Mbo+YF*0fuYbz=|2Xn9_+Aurv8g{u}nchSb@`+jI9`ANRchRu+c;6ZwBkwEytcXz@P=zyaS+{Jh5h zDgW63Nj~%cGQc%Bzq$r&}?@F_`=kKcc3diHW(s* z7b?K8_D$%HKfzj&wHcG0&eQkqi(&t3AvjlY1ELbcNKf`vmP&yjJISH|-Umj*^XS*0 zk@^aE9f*Q${vxb+k!-RdQV{EE+v)qJaC-AlA|{qjKvQ}mW}lgady6i^+$&FL=+RIZ zYMuq3hlFUdc`}T7i9tiH9=pM>2-BL5+H~PhZ#;0@nF3P$&vvBn50{n2<8UMT#W~=BFL&ew` zJgIxql*S8a6KL%TCBd|lb>V|D*0a^0Alkhua!M%wR<{)1_UG=kx z1lKWOdMyGC?&aaehgytJ_B5`c;uLnAxiA<8F2jb`3t^t08HOE0A}kosI{juogr(m}L|;y&`%2wmONR`$-I&Y1a+iagIxS2cP=nXaWoW&7E>xX+1{s@% z7~{UHR3gZk`qXHk%HT%o`tb&YJG{cho9v(}LlFwIj$?B4WZdvOo}O>XVQHt`Bs-pV zql2d)o-N7(w*Cf|-RW{V&b>iC(iB*}atbJa*}-Xd-VYZ&-Ci{=6BNp0e)6C7=5XO+R{Lm+y z6%fNX+wDWYm>bmgtPc8^4C9T73XYTn8^T33(WQPqv6^Xy`@Q%e-w*M+aRu!)6QhCa zVriw_Ib78v$}x8S3Y>4-pv@|cR0??FNQweF-n4%ds#8Si;dR;;(TYajzEEm#3T4V)(U1fuSZjV0cb$p> z)9EY70`DLAclTLXHolK)KjEXcMh@_&EEj&H?E>ei-emmUWORyBq@rss5uZPL@L>ifS`n137XE6dJb^d9O=MTFiMkb}WHdOQf)-NyIX`{7*oBK@S|v zQsb&*H=`N995+CEke<6zhrt6P==gXD4@}jEqyCk2lbtB{diF5A8?l#4M?9nhDR!u` zTbX$ld<;c)-lDHGXR=Q&olV3S4dQaIRHnc)oIn6Sx3H-S>+D4__%VaI1y+oE_c3bt zGRSO0LIW)>ipDXnEL@Dc%jjPJOm4}=<1-gocz9G2E?la_6;9$1Wo!+4;onG3^B{fh zDQCvy7SlT->$p}b&WwpR1z(Lad{$vc4D%Oaf?h8EXx~jEZ5Pm=7k0pEWkmYfly(RU z!0@_0uv+sK?1>9k(EcFVTJV+_vajQ@n^ve1B}t@4#PEpX05b8sHC)(&+xdMb9iCZ0 z%Pd#GwkfGp*5Ez7dT|_&b>13u~_L*pTJJO!N0eW>rY*;pC)8<-$j?xm?&Fzu2z zB)`~&4?!M7cKe{xAcKO=71BZ9x|}j{ZCLu;$80!qzYiyx|U*yYjja8qc z-O@c|Ts45KNV<+nrq1+I=>~jS?g$s>M*&~G01fy<*1{N; z;n-nZc3u={Svu~v$)quLop6Xw#zqGL_Ah~OeCkW^Nv{CBlC*{6ih^9J$IGzrYXaXnk8GRLwucx>RF}E;WEB=3PXy;~$~>s0~g$p32Q) zipjj~iMYSFh4P!X(Q}V67QZ~J;!Jgb6)7Ej>U4imWMQ)?#l^(jr( zlYmaW0%mbMAH){9fiLGQHU99C30I9|J=$J~ekzI}a_JiFGfSW^MEce2N7Z5!o zj3i}l#QHs%blWr^DEAqnmf}&kuXYwnSKKDzYv*EXb1VWQ4Rb!pp=sDc+FTJtEa*m1 z87srMyll`ZUr4TLUW7ceA*$t@g*D-U9oB=wq?mlkn z0(gGu1ay>TvASJjvDGn|wyr29UFNpvG=DBAv;0?}WR&3%NNccGk9X*f2%cvaqS^0@$w>lo?hP0!f&pW)XQHACkJD{7yu=p0< zBGabpVB;qr%=3A{EMN}65{YQS#Ovcbwj0F@nh;#WFp}?o6NRKnN7Q7(4Q;SK6NimFW*aT*F4J5He4APXdp?zT+8jf!xZSMEL zt=$GnJiPGjU<4SLRAHInG;kTt0kNHziB-QlK2hbuU#Arqppy+>v|giH?{B!dKMDtsHyX1ai{#7#u8r0m?!V5VF-8Ot&pG%b3oF?T!>GRDBp-b0K!XyIT65vl*SF zd~ls^5zJHVLryrdUVn1Is{;nOLBk2t>eTVn#&BZw>pskvivbmVW%BhA8=_L)G3i4h z&>>)n_NN88NmG0v^Y2Q=bU_(ez`6uSK1N{ML@dl~ct^A3vuVnHDeR96hErRr;OQkh zP^+AU^DpJ2#KN_BqjMvX=2OEcff^bzI1NKp<57M|22}C({=&chU~le8*X@>sehERM z>m~~d5%bX8eGQJ7S`ZS`g!6xOfFm`7t)5Rnwy_i>7K)&4Tqb#QrHr2I?uLo(<=9*x z0$U5NQ@`hLXxQ*(ruv5oW&}ULMOJDgb#?&ptxVutoHi4-zX$-m7o`|HCzsYJT!8pY zb1)q}jZYVU!nYQSIPcEgr5*3WVb$Bu#MHBqIwr>A2Fb@fKcEYgPG96yDkMPL$OC*6 zavU`^N~l-Zd@8s+9zKN5!hMIPf?x0-T$yu&>J7a@^$Uo$(;BF+t|^qf(}1X}=Si}Z zF^FYffWt@Uz{c)AEU0{f{pwK=_c;~9TU+ zQPx{Uv=`ol=9j|2bFL#iD$&HV`_3>-18_f9PJ`;2G9o8=6D-RrdH#wUJh$>9YAdB+ zaO)jtF7JV9A}8osD|b-2Q4i8!P@^g3RX~aBp}6%4;Oj?Z=Koi&O=6c`Abq z@BNgnP=_8fPn>lt2mY+mMmNtHP<5k*4*oVH9s)ujShW@m1eDl^H%L&A30JTVwINsI zzfxuULgHB-3;oswjJ2;Ps!xB0-D}eD;R*?2^~o9DH=Tu(Ml!f^P!n#e`a?f0#0{FA zpx_t8Q9QaC6}HB*Mnn^V{f!?;dMUYky@n3ORKv9x8=%{}sZiv5)N1NS51mg{_YbDd}$9Bygocr`Gc&87H2oDnFa?y84vPhV&~j;Qg0Ja zW+b-afqQoNBj74t?}(;8E$eB_;q%1c%2te)Zzi!)0D-j=yh+ld4u5kUVvQ ziT>3L+uDAi>famiVj_VR;Aen?s{>hu$)hyDAO_nnX~Hkt-)R1-gIWq6hRw(SSp%=b za)txN4g2xHxG#xtD#Q?pz39nAp+KJ~zIXShK2f3g=wK&#`z)BICg#wxP+|7SeQheN zx&thK2hlCpGMU(}g?M+s9zW%u2D=jz@a#h+et9H-KEAy5*Xa!2daVN@Dbi%EVJj3a zuQOGi>5N`nWiq@m0*x*?LAZcAd>-|H*MXvF{!zQ>~6*aXY36fkX(hQqBt15GZ~{NxzYrqNGdV#l5+1 z)`j8LsdDhB_7zrt*o2*#2F$&|Ix4wo5=joJgdPnk{BtXl`Y$Rco>x=R-!PZ*&sFDs z{c@T0OI`zB_iTXHc1mu2^}}m6-sI^^RXiWWVm#Jl;6uLoaFh{1y*vSsQ{Ig>2UE~@ z?remqno!(&8V2t~5{s2ucvDoK>npbsUp;wZ*8a`_4Ksexiz0i#6IXJTHhhFPF?+%C z)>B;lH4HXRox{p@U{h74i{LP!3VKVA!=GuV;dpRAimiD=s%$18ry&MMMUqI{92IzX zJ|0IG@1?624l*LjYU~%gCqdaYmq~eZ%{k#gOX`h2%xO`@w=}~m&m00GT z$1HsJOObs3+((qVzcSxn+=Y*Q1+17GUF4%MAJ?)YiHHk^flbp4*wEL>`FPz#` z>rENRhxBkRsaKO+b_cMP<=LKg65zc{q0ULJgjBZ2;^z!qwxs%RbPEPdHeHKvOJZU4 zQ#q2sa$Ml}71=U(;Zej8@ViEW-6?S#Z11AGj-AG%ue#{Mg`06=tpg+$jM0UQ)iKNd zAiCe#gYQ>8qleaaf=covZ<|Fuw+w}d%q^O4zeX@Uw> z8&T1feB4QuY|uM%4Wb{e!<2K$wEU?XX1`@S{F5u4wWfR=(cD+jugEo8$IhmL$3|i-%P=P8`rQb z;TO3peID|Yx8Z_2r-&GJCf+Cu%g-1>baV!e7jA~qTRSjyw*~4cO0f-|9>WF38gy%A zui5WX4YZX_#X{W}`a;9 zQGPRz`x#1yRP%Z|{-u!4J5!B)_cxHEu4nM|JV_LGcB9V}UXiP$lsIDR<)WhgLlJ&)$R~Q;t(ntFxqT?oqSc%mjKg@G)BR^L){aLnyS_ z3}i<`(7kvr%HlCn^L-D>eRBYQ`65^w{g}4gTR>;5y$>^-k3d6f2yVS6g7Wt>XwFtX zq>~xyDcuUs#C(}$DFLvn#0BHB_M&3ZdaUO8d5OslRBHcrOc2b6y7V|Ap>6?3cgB-b zHx^^y);Vm_?Trt@CzDU7HiE(SQeb%r;k%oGxOO}OJZeQ*l4EnsIuA9H2t!#Mohk(} zH!LCVK@J(qo=eN+j+6a!TtSM|poHFRs`%NPF;Yn*QCU2NG=Us>A3@)YHNoB${#0E22FT8tL%Q{x z!69S>MV)8kn0pEi2iL*&Z;{w#SpYkNR>07%XUyK$BOpGoA9eeHWW}Ry=ddL4py^oUIW6utu zZ~9@V%WS8gFJzGOcheyy#sMZxjF8K62!5^`ao(f}`pZ8Ay{xrys7{w#P-X%~VhSW} z_enBW)Q3(y6sEIlEJ*O`Ud$D@!{amOfm^LK9G;j9KbEU8FGY(<{l!Xj-Kl|R^q0Y< z`%%pGR~~d>njm#_ki+xeO+ewuFg|k8MF*!FX6u~0&_7v)C1c8FM)#=0n!~3+;OaOv zm)6D5`(-fV>W721R&echFUaMr#l<&bcrnvix_lr7zlh7x-$}wCvH1Xz&E5v7K{3=Y z$s4b|en$fKq`|Mzk z`xY{OaSz<>d(ZjqDF>(H^ua7Y5`TdV_j;!r)isDhPnGrLl*oE4b2BD2Q)kmw4-Vz~ zB?-POqDafR=g?LZ#2So#2w7tD;gQBy?0K#PVim8cSVsrba*dFDnN+a*;6ONMcj5gV z*J$qZKIr%$i0l^;a8|yBN#Lz_Z;$POJ)RFpebXXnFz~CET;FxPxSH3Ce{jrM0bQuUM9)G^uL1aqx0TU%gv8SvV{R%BjJFZNiXT4H&eOc zZv|mPr4?Q9HV)F0KVVsS82CL?z{>l7iB;1>IOdd1W$YACMrRZJ3GpF;wQIop(F%y3 zewRK;6Ae^BzQStB_0X1pp#RA z;kVdlvNi1?VWO@;a-UxYlmI zWV_M?OXNrdnphg*!nX}HGi(k$$%_*f?=7SgZ^mK6Vk1^()D-BOehrf<1QGYwb1w1y zqW<1HU}pA7+LU4gH|@&7c$X1WDq2y;^e?RG-Rn@xLIG0~>IfNLj&q`;aj~=~y6p`> zTA9yW`N^xZR|37(ZG(#smecnGF}TS(mi4k>Iu1{hXP;XX#!Bx_0R^c8bXII8Js1BO zG?@)c%q@)P^*KV1m_dI02*tOE_JKtdarMkkKK5&*GS_%4jpIH3y+cNdSXY4dAzhjM@9`0q|&+G%m5f z4aVXgcv<}xeIewJSDxO){&r`xagRUH&8o#u)+<23SAo6O<^kHem&2pkSFpXq}N`|;i3yLQ5^;)+it^U;ZMx^pMlUl{XR$y z7T~s)FQ|0Bmlb5tLszAlz;dl7BJ?4J-rE|4{iB8OrECJ^*Ifb5&bjQ79%ET^8&xHh?g=igpn$$!$L^_?f_xKIlIc+g1J z?rxz+K8zA?t!!Yd@`$rRENDqbV1s-%3}4j4;BWV#^xJl*`J9b;Ka9A+p;;K~orbAy zx9Mm@Bs#T;a}8>)vGV-8p>~lt_v(W*+`GgD!V}Md$Bqba)F_Ah*AGLHcOqHjDn^`U zo72n7wxNzd5b2pwfr^pxaK>>x^lYhzqvC?x%y?nsK1~Lv7h)KAr<$HicBB&-F{DOI zmB_t~#|u2)fGl_9PRo zY`sg~+WC?Z+npdU&msO(-_s#c7Ja^-$G`IUj|G7(5Fk4hHI}PVjYZvz&9Ek9%`c%- zS1u>b`t!-A4n6j-k6TF8g%ixAacSsSJ_Byo_iZqG2bGUtc#h9)F21#rV}C+@?vcz?RH}_JC>Z?oL1Q z;Jh{W`Tc0pi!Uk3vE%v23vhAVSJoZYZ`O3vG(4=pP?NC+mg4zFGLoT!hg`1H-tQT- zeoZ3yCREbRytqHUI0bXuv#B>G(L9wR>S8^ImK{F<#p}E9-bDjozvX8I^6kf}(_VD= zr8KM&Yp4CGTfm{g3zSFBqq6ryG<$WED#}b@uN;)e*``|XAU?)a|AGlPr5(jYxeP4& zwgRZf26%MA5yIz{qWArmw6W(6lgEVMsPzl%19i5zBR|{5{WU~p-bbUD2?{r(;7wl} zdG2$N71DkKXQs|4Z`aL$M?W3t>^vP^^SIm#K0N3nC04EYBq^Ko#$OfI zlyE55ZyxPTvxISpHQb{-&g-mC0=a#>g6N&n z$X-4ZdR$kN-TFB!_r7HS$7P}auQbU<>SGVzAOp;G@8+|1Ji`R&=UI=XsmOC zA3JVAdSNe7ds+s64uoS&AO|izH-Ht|j?g~d$vRsh#@#so7^iIadnQmq6QW$a(P-B) zP+0yP!*1=tKQ$w?)b$&Y)Ba5r0U>kVDGti0x=bHVY)gWY%_BHG7DGG4Rp9W-09a|3ja;kgsF)DMyDHTbjn>cZ>*Czy*7S2G-Xr~FIwRkS<9u6Hi zZ)zLOi;V}1>7nbp(eb+xl>Ui>+s*;VNxh4k0xmHU#y^cWCc}4v za2EE1$LguvYoDyp)ISckUwTDCn{!zo>_3q8-?wsZT}h^~+JOFaH*B)ZWi&s}!+0+p zG`_Bk2K?pBc2danyj}rc@~?y8cm)39teR_aRO>(DdUUlH|eL-W~hI?8qJcXa)m!N)0xi~QO&wWYP|al zw65O{-ydAVXA9obEan&Ma9kvOS^zMYF9T8~*5i_lR+PK2m~G{dL=P<+VoAT54%4Q7 zrkO(r2xwP=#fcA8u;eG&ElhtCVzHh&_jJf7X}a0YZu%D}xB2l3##EA+HxHL%}{ z6V>0BadvVCT#?HISH)NiP~h#M(uw5Ujw(9u??F^eux2e!n2n07)sXBnfVGPjL-fsu ztZ#2`Q}g}DW9~6FYcrXo!-;5i%@a*h57Cg-yYW%^ zI+V;iOXe)GC+=^;h`(XFnb>BEK|QJHFiDEtcj6=QUc3qe6JKJ>Q7&l6iNf>eo1r&i z4?e9BCS|^>=@0XE1}~4G*-#L}pW6i+6`a6FZ5tLVRhn6BUXO}!3Dj(&!6)S}s0Uj> zT67$!-kgapc7HHG=scY~brN>+i^GZgpNMB>7^?L@hP`_h0^h46uB3Q31MNsf;xEqQ(u-bQ5MGp7W2o_5~M$Iye!OFoNjDm_$8M1XB8 zGy?)zv9wJ~6x?|F#8~+XOe)!nf3*jQ*w73}@|?>_HJXX*Pe>z5oW`WgNnDo|WAxX( zStNVM4M=#f3;5?r(+kJ7KyPC|9IujRcCCv?wUfuqs+)5l!Q>2jXnbLvJIo=^E8<}+ z_A^<>i$k?`my?y6<;Xh6<7f?EL2b%e5z?us9tc!5${J{_u0fNd3*v3r&f99cA*)$uwRgkCrhrR9(C zzQk9$K>aETZA+mgVOjL7{&eh3I6zhv^Wvv_okS31Fy}!EOX067Eo}d4HXKw2(zE2D zeT0JrJpr(8-w9I1(+>t>H=ymRM)Eyu0k#TRP=oRmaNYQcwQ}xlminANe3^ZP;SS`I zO5<33)GCXEj6V)9m0%yzXkuM_vKLIw3c{GL7!2(Yg;DiXvb&;&cJh3s^7(C?-1Bdk z1GRvvhDxt37L^^ca@ka)TNBBVa)CJc;reg@V0r=o?K_>V3Js?vMTo zdUD!c6e_m`rLPn8$=%h^)bNtkc~KR0nvFmzZw@53croiPM&s$JH(=tnH9$f=R?iMc zK>-^G`+gpjJ`~eFtfVdXKhsNMTUeh{R^ql3Ef^nZfz|XKt?0iGs_)Hk)szadah$;Y zk;%}&M%Z>d7|ORQu#YG{pwH4SV-VJn9>)|k8(jf!gzPbLe<_};*TkVS;mpD2d2Hi_ zbD%qQf<(8}0!B-*PAMDUq`wD#J^GU-_8x_y;ut89v4yt02XIzV4)`)|V5&Jk z@)eoWA+r&(vt5w=vojkjVv}iiRSwmP|BhX8X~2KD9A6($BF5QI$dTd#U8%+OOj>%7A6?CRsY;7J8r1EDKfxWaN6ZB0)Q8}Q6#=+VYcf}B z>ti}?@(P%<;|MEdz8e{ENW%GZMyX*2mzLOWpvJn#&61ywVnFU^)?wFk)Y0%Y8LV%G z+Nk>w-RFtn4&(Ij-uG0y`3IPN8Kt4sN%%xr1S1zL#_TsL5a)FcICsxO&ysLZj)-B6 zRhMJ8))XQ){F3~>90;KW?N}UNh^a*jNRZ7>rYT)f7GY;`lTArTh%*`-ao3 zLw>ICF?%7tYs}~QeV{E<_RdB*^a{EvFH?3j#E_XXwV8>@?J}sXjVm#99Mpv za^035<_6Hh!68;To`k?^Hsl_8MF+dL;go^9SidU@B)V6Cao8wi2@U~Weiu*07()F0 zTB;$|2E`LA;EDcbkPmo>Z!!$w!<;UvfB6a(R*<8tVtuTM9wX57g%=w=q|MArI$cl? zTuSHS_u6rK@=z+y?X?5#aSgoKw~zP)l@L#(S!iBhKvF)W;iuxdX z9fz`CMr1gw238(Qgrk-IoF}Ez;GC>Az~;P#rqn{!7&etZG8Jl#Q; zhK-PFvsQ9-_ia|S#8vVkNem9I6z2XOcg2BsZOomI9juC9VyMB>!WG{-keMIX;&H{R zkbl1h^n1%#y8VuHm5Bqahz%lI8&xWC6D&Tl=GekD@n*~kc zXTNlL2mU%Dygr_e8t)Pzblzjy^wuAR{JQYT!|$y9C%NRRx*Yy)@+VDxmH7JYL8xri z0%a9RthTd)*}o)N#%iAQEB{@rQ9h10T2G;gwlf+ZP=vP!Md5mD5`0@9k6!)Rm{KhT zQ=f7nXxl*?Es}t=Wx6ED)dzZZ3&MQ!YS_lpvp+)u&UmQ-pY|U_`3ni;qvSW%MYAYK z40eD4KT|qfAPFfors(l1o$0t+PcA10(7Cl%*e!4gCSCD^f@ekW^ra%Yt(=L+-8O;7 zlMghNtBWZeEOZ=iz_uTAiTuO}t9!E!+x_)Xyp?eREP2`jNA)f1?DkHaS`bO^Cf{Xh zH|3#?^cHXtu^`V>35*Q&qr7$z1b8aK{+iXapk)RKuQ-R?U0aFRNfSnCfeu|OYKp!m zrqPh5N}}v4#{LoUiHX~rj_J;|q&C^rjMb`z*235D2kk$m0}Fo$;thqZ(>g)Z$e!BtY z=q5OJU5E}Dll|3y-*L5t& z-+qGSl%9^#9h0zl7B4T+G=;7kbfRP7kBLKg7Gb{Vpz?Dm5-)$9{#d>fRK*)<=K>2F z>1GSfyUwF!urPT3xJJ8rGXZJ|*6~-va@jgE?ktK+?#n=zy&$_};}NEz&>QpLr$g(~ zLTo8)1D#2Nu;pSdv%8>}7&De&{xtf*(Q_%7 z#nTzYjZ#^McQwu z!p=`|CtW#m>_Hbv_I~{j9HBpauz>rAlA36G@PH{j?U4t^8>X^2_a{SogD@Uf34@Fu zk6|^H$CkMgR70g0efwtdbgX9bXGau$F{_#7yN$3GRc<5J`Fo)0=MSnN5J$+ZV%##h zk#RI%fX}X8qGQG zBTqlFoJVbKtU4BlXodM6JSyD2Ptw&VJ8j1w8#g ztS6mjm31YM=r#VZ?!^b*ywJf_?DN!U>IdTaREshZU! z2&`52<>dvWL(rK8P^7;Vu6_MO&(3>{iu1k`X&XJ5&#tGsw-j)%a}hSy&W6PPYjDKl z6!~=bI(>hd7iW4k(M4%DaMP1)P8KgG({b7xT6pOuNuRfkv)_LUGqygDD7SS(>uD$K zb^FSkEY{ySI~+tkA^3 zwVkl=JwI2h_6$15ibHqhcCaqy<&?lqoN(6VBLxc=#X++6Lo8YS6W;prc-LhD(A}LxzkT(^ZH7*)ZP>tS)UwA%{&9HjWG2bw zufgrLrtDeTA^1HzmNHqh{H)a(Yr#9`FL~4X1X4!Lxq=7F z$j$a;5I&nro@A7Pg(pEZ^FXkY)}z9*t6;aM7d}yP#*h~lv_P7dZ^(}RS#M6WZ-M-SD!rJJp-bnKOg6Q4DqGs8Hyu8OjIqq^R0jy#B;L~aLL?Ks=x!^61 zeMgp{T6;F?%q@VF)^H-pC&7&z>meC@^YB|^2!?8OV1&UEcy_@OS+YD{XVn4_yOB&^ zYpLS)?LxTvT@r3c{|GlzHQDF?C_~PSe$3SJ1&5}6r03E;n(=jlmmiS@oIiJ2OK)4y z!Fx*N>9R^XnDqr$m86okZ}*ArnYkp!;{!;h0Ik z^~8brRdxJ*qz%?Qwubrnh4f&09eKK37O(Gkhoa>fw0A)Sy|^$APm5^c4w)}hYsGJR zhQ{-L+k}@M{UKw+yt7SCAF=%VETa6P4_@R{5EFeCYa0J~GuxU`$QKB~zx`Eak!q22 zW^Nxef3Seh&zteq-M8djeGn~C+0R_nmBs_#ydZ3t1DEf~5Z@P{$dO!Ke6X~J^u4*l z%UhPmWn#e)bI2B25}sg(M>uLFDqe-l3U5>PU@N?$mK(aF0uVaiw1A z6XUf~^zq~++z)NP8IyUZuM_gu8wqdpXu9(d>xEpeu6<4!x(E>4So|^+pmQ##bQvg5f6Vb!U65kdG;PsLm^7K~* z%-;Th<@#klY?5DsGllN5CIr-RXWd#bd6I&aT?Oz(P=I@8tu;>SvBjbjUpXgBLSc8z z4u%~d2t9i}XvnF9%$r0dIKcA&fU) zBUdJs;t~@!I`H$+p8lICD4GD5Pd3wUvDGwD?JEh*k;0?WzVu7FEFPSq&*Lthl2@h@ z?3sxwaO{93^cJnBnFHCVtgL|riv-wL&9_2pLj%tz7NTC($zYRl2gm3}tk#GiyFO>2 znWjECw=1H9Y${k@w5gZ+ep%alO>31(JXq+;aBXr;o%I@6_9&1j4{L*DGw=ai$ z`QrvF3{=q4>OJ;uQeY&<#!&yjPWV3NP76-1hxMyg61xXa5ch~ceoHegtJHzHN+mRJ z*AH6ycPn`J&cHVNEo`pGdU9uF9)`@02Fsr+uvbIeDb%C6`bxOim=5yVUBtw7 zF9_?*gOr<&aAM^FP?&s)yso*0?UFN5FDx3S>a{U?E9XHFk2|Wd-$)H7rP5kf8>{oF zEd7&{4gK772-}seAwch18faT{A@SC zieyL9;r9zk$B77*dv_#wzrG5JCIKiKxDjVMHDkJ~Gwza=Vjr%*fV0gy7||FNB8aKz zTXBO!E0^OUqQkaHJ%nu|N%(WuHvH@&LquCjnTkge*xpqR7p5fQYSqKA-P#jRPSM6b zDK}<{{uqirtH1`QY?S*sMmg*L!rF7Sa3x9rt`{^BT+AWCH>a|HejA`pt7GUQa}N@B z=wqG7QZY_f{0^{h8z8!YVrUR74(Tt$Nz+6qE+z%U{!u5&71h#BnJTEG?~09Gk=UTW zpGJ?EaH#HDG93E~trE9F*YwG-t6Y-yKWKrkcMCvH7*IouxA(o7z~;ASXe{GkHm#k) za7F-TJ&DIJ`v>T{9ls&%yC%EBwHPl+JF*&d_tEhlNz9K+M-QiHIBu>6>0g={?dfUM z`1MA%szDjZzEMHrU5CicJq_@?{2-3pnod`$lu!q)sf@9ZHoZE#mZiqaWo*tk3{f)f zsCS`?7HM810$=q|Ik<F9d`6mka_I?(;p;@ex$FHH}d>!H* zm`ZGoF2bp-k96{{25K~Sj3_dT7_p6YxNlzqDRnxIaWlTc?=&rN+*ifgC%+98Qjr`xQ$Eoiso!$b(oU z3=^5f`EYt_5_YND!sFiEyz?{BJi6yGZih&MUIe%$Ms#A^CL9>N!yJj90;><#!Z(== zRE@I5jZ(_^;io8jZ^$sIkyL>Lwg}Ccz4QFm!o;)HH!u6vo+{e!Kt|906>Hu(~{v*A76VQb88{G`i&)un`oUno-LvU6m%?F{(hsY<^r zD#2w37%cLN1EHEd_-w~)HvelHFttfE?0OSf;U$RP$I|G{c_uuy>lffc?hDv%=1KNW z)TwV;6hbCHmgaTbk0&=CCZSc8G8EZ{k}wJGd|qRU8$Xt!^5_;~==g&UN}9msufibO zt&OqqmauASIQJS&M2Shhm?siW*5%x_StTOGfBT>SSDGN&6{Mh3;%)kN<1y%T>4ard z0$Cl4L-0{$8mbE|sTVLa#M_crVSD5QD$La**-w*EeM}HZSq5{h$QZ(perB~e597%Q zSza2a!=x7a!H<*nxZO#Z_>Emg4WS4e+wqRtJqVzW_r0$Fuxc(|^)1E0U`tfrvluPS zis+A|0M^5QKWmi(OL^Hppzl)3|<74*UfXOP&YY`pcb zmn`a>3D3CaQy6JXj+n;dsNh=yVVjwDW(t^XmSFamaW!Z9eMo*;LjBhT5Z4!H$f>m% zv?U=8I>LL%se2P)757seyJ(bcJe7$mCl|yPW95bfG@m2H@3{Ml;|biy^WqN}8<9C^ zxgws(F9dK?dWZFpjUCBg|MMlh7##(J-n+QKb`Cr>FT{x+ zBGCH6lGD-3KvPB$lbpr)=2xA8|3?N57hZw-d#>2@AqxlpjWQzl+c9zLH7rp7OBUn| zvvw2z5ud{ZR$b>)J7+Az5yGfLZ(_d?Gc7nr|wC27lDiBfQj zewF2;2X{9;aV7XFsGBw_2yxlcR5GrL z93dZ0?!n8)k3+4xDvnshp>yOl+81*XMZ-k!xAS%8?}r_zuJ)Ony(@^H=V?GsSubvt z@gWzF*nn|kEAi>5q4)D=@lW9#2o-(=Kku%C<=)Tn#NYd5=S*)fQaM8N#cjxu!N)YN zRf5MghtQn8xjv;Z33c4>fYW|0n!2|eC)mGWCGYU-=2uuVW|y*1t>r9TWc1s{!>t_; z-q}w@UTN|^-~LL(-HKpPpVMN-8P3>RgN2dtG_KkbG<@6ethpX*S(l6qH*<8oQbi2D zRKS5TH+uJe4j#U-kog|!3kFs1VR+;TJ-EdbRI3a*jg$wjyK7)eiWT|rNFEEPVF#kt81{o{Cilh!aw8|83REqIe7-ce~RTn(sYr#Id z7>ngcfqkEh(H%zc>HQD7x^5ceyjX`LzOxV_c7j-+KPo<~$6o=laM-$?-sf_(b9tet zo>_sH`GK(Wawb{1b`dcv5#pP_7Qo!JFsfVe1RgotV36Bdd|WPwnV#qHy4pMPZg~jG z-^r#EbdKZiWn3>Mx*TM@`e=LHO1S&Lm2DPpW^<)|K+$&>GR}#ZRH_BrM^&)cu>kR# z8%A}%Wl9#bf#Ra`V0CjAT;;ONOzAdK4eRPZNa~|p?r$(0F$S5lo0uE!=V5cyK4eCs z!Tez!DX|RT@|6DY{A(s;5pf!H$N;?Fc0uv90_^rSLDw01RQdKC5K)YS2pt!^urCF2 z>^7oFyEv~5TWHRGVOSVeL9Bmy(XLtbG)bTf$5gxEq2oB7<22{`raD;Q@ES!dCg3?c zExf`^B|kfRiBG*6Z}z1|P7@lZ_3_t8?x-*xIS~qHBPKJa3j?tr!W1PPvQX>sPfV|r z;9Di}sNITS+JD3pQ$iwex`{Z1n=OONMJ0qy8KR?BGf=f&kk8-9Wg>Pifq&d*s6$?q zU)mLnE5jUc*3OGGY0Y)=amyR13LYba#{>wkC>FV<8T63Hi1+xzlvTC3sz4izv?%q> z=wo~}$LYLZx5?o53HZ4ACwst50s`LEkU!gVAZ@=3e0Xw{nLE)HG)*~gmVXF|+~7@Z z_grNn18p(E)fh|mmOzW_I_$ER!26n%e%U966E7%|_6Nst=e@=MIeU zvO_`TY_NSH1)JS|fNYg1=&D80$eVE(b7(3X?EIIc3ce%Dy@JH)&r)bTod|v@T3o zU%;pD0&J?f_S*c6X2~R9X*^Vt${2lrjN!?@Kr2xQ-$k9n`{PeQ?q)G{iub0wj5y8F zKMF%1pTi%kj^G_3AxOAvhsRf5r;FxgFh2G|^xL-kY-+eT(^BNkq`3Dpt)Bl#-yLDl znO;LNXeqmRha_H9(n9ZTS>#$!EHUGJ4o7Yj!xX~|n|cj^;+XYx^T!!n-C{sqb*qx7 z*EaZx9%l?W&c{?viw;m(4<{~62RkKt`Dw4Pq8xDE}chamra9{&Oa#= zE{AFdR)Aj~ms9Ro3TO8;L93zAjS??Oc-El}G0Udm=0A6tPTRfY8UGBZ+8raxALMv1 zSNStAIth!4Rp4dGCYvn%$uJ}^nT$&=0Lil{z+OGdW~~OCDG|;bSrh@EMbAV2@N>Lb z{Sy?nDAd1%}tfyK9_9} zo2)@yxwEo;qZXIhos12CwCJkAR%9h>h=OthP6&w4SQx>X9@ukM4MIpJMi=m$Mj zUSv&36o^NJlfT`T{7u*5=r8V>x3oD^J-=v-@9BWGe}kE%rV!}Vd1h1C=Sg;JMb`K0 z93+~_XV^&TpTOw1(XfY;afvw6n>m8K*yqyxR%^l@+_n%7eSe7kt_PVD|0&Tu`vTDW zM=QxQ*P*9J;^-iXuwS!g@$N0|WqbtxQJZ8%{MTN;X+Qy(#!Voy zTjqlAd>J@%)B<|z7g7E2)i6~;3j@37z`=?0G0=J^VBp9I0Tds!()7c6>5>pjklL$)55f4^VA_!<4qD$FuDda z9tgq6nF;)N`-;$NgFD7FcVQm}lD5C{xKQghtH<@)zfKBso?v-!7c}Ga$UE>gEDql< zSYCI^shSxTF@+c6`_VqX5X`=2!*RE6*pVK_#yzls>B-aZlrB<_Klac)n1%UbN>cS?5xv!gC-x2XW*v=PMqa$lqP>2oIn0 zz~assHuC~^o=l%l7uKAHW9s$b{8bTav<%zM^nmx$F$^4dj8W}}z$vB~ z3$yHSjYI|fJO9i^;=?oOu-B%uKQAZyuRSK2N_FtuYn-moZL0q#6M{{rdcnuggRGx+ z4WDaAK!4~OENaTdTmPjqV1ik}Tk)o<1*aM2f6@Ur&F%cn5zc zc9Y<#jr7Uh1(34Ah3K2aqW#wwbgl;lm{Y^7Yx07Wy;ti3KCXio@5LGU`lnQ+_b20Y zVh|!zzmOHxmgxVe0y6v<+#lyaNBf6y{KRV7w=)knUP!@R!Nu@{e}d?gouUCR?7;5Y z9(XNSLL}9O=m+6?GWn-0|CyvZZdn|T_dFQbXn%(s>Nn?~KC+g+eN>D|M^$N$AAycx z3v{`r#9OkJrA;x%V7q=8%6y-O7x&v@D z@7y5_7HMZ;(Vg#P<*H>i{Uddh|K}TOZ>Px1pF6t zQ>&trWFW-^Ez*hIU|7HUiPw-oqf!ofTfm*)=`s5FH3o6y)b} z{@BE(7~0uxh9@`g#@|WJbi++iey;Ki)Zg?UWWUuy=E`{(6M9NhXMToJ-E3+&a0VPJ zok;CdNl>0-M_#U54RuE)dD}Xo(8(#Cy55?A$_lT^x8=>0*Ih^rTU9Y|_XW5yQ5=t& zAH!E;1>lq_#2<(PG7uvK*Osj!<%4SQVzUz-TpU7`MMY39XI7oZ>@wVQB#6xYa|Sjo zF2)F-Bt5`cm;?F8u1v$BFg%^p2GkO8w`8)v~3;Kt&uT_eH~{i#1rCiv;zsUQtSl zFSl_jfAPR6W_^hhC-T+68aZiZ^-ew%kM8_AQ3Qk*@y45sC$)2X%* zG|j&jW{HVHg+m;TYZ#`HhYtY#Zxsx!N+(COPoui=J=mb|n!2lSeQ>!dKFWKDSdc`m z@)pvTTaf^V6>;?{b<7NDCZam7oOdsszB+9VQ|Am*r7dmL%G?1r{&Rxh;|*x^J{-Qz zli)v3?PfY7mcqdn;0ecs!p>!?@0CQ?@iAZSdCFKf4lxh!;@%U>&D@`o2h#BMT5Y8cXs--;MZ z?|iNnPlsi5zd-1NA+}(r2{aif)_EH&!zG^%;k9kg*Z}1W+@~-~g@kv~6CuYijg959 zF^=rL>c!}^MU207X+6*$7!N9^oQT``%j6lCXYez*Kx7(Hk(BVaYj)$ig-a>uLc^kvF3fh-&>IX zgT5r2&fg<}tj48q)HC4EMYzMyfNQ7r{%jh<{Jv4QS4zKO@G+YwsgHnS z8`tzvo%C!_Z_P%j!Y2B?a~#UIX2Qa0-zmLV$eq8Upsp{^7kn9q8BdI%Rc-(du2+C| zwPL62#yW5_HclV@8HE;O=o}m|zx0HikXHmd3TTyz4AJ;`;Vep4&;^^f~lE zC#R`R+>hI0cEcBmnY7e*JIXrB@>0(qB3~9yq;qDr5h1&S=yoH77LOgnfd#|N*j7_` zG~8X^H02Lx$#z>KX-R9ewg74Vdpo26&pzYrEs43$mfKe+l?RgXTf5vMhAAW{Bw$QO0?H_uVn}lY*~G!if!kH~hMhg`pNrWV_8%h%z%K*;~`0*s~ZRzLUCd=X^-{y`SCkR|0nHx8r-RHdjnr<$e_ZuP~39g6%yVr!exs% zkLHU-{OGftWd87ctT0^8W!wYf2tL-gWe`vhXcti|Wu*EkPw4_Z`lzK)HuAm$fA+KU3{i24Ombi^Ebqq=C?_p|ha zCBu7l;SprtI{=4WG~va6J$Pqd0g3YIVk_2JFiLY?L2Ueb;BAaSQw;%ddlv_LC z88fie=N5grDiUftJL%tfb#&2pchdc}ooq5SVgKq+OelcH~%8F#c#Qs*h-k1#_>*%+i;wxZ{if-*h5N zd;jR6x#K;M>al^khA^}}>j7^*Oyh5xdY1g>oq@MYF2U6oV^r5Yozywq!-A}%pvBW9 zo}2jKa7Ph*@<+*{Gw$g1x{l425rM>0wwRHoh?2a?zKN0hAVi}0F>IPu5{)ko!mC=} zVPxlX8gomQc=3f{vq3oR*7Jk9-F5L7uMSSuBU*F27JHD*J zsODL~OgV!09jCx6=~fgTx{4yM)?9yG&DgJWhD>9?<6)d;9lV%0Up|Wy^%mn8-wbxz zPDkfU5%92gnAOQ_!A|!ga^}@eh~sjl+e1rn&-fy^we2@aNR#B(yTm~1l8Jm0_(!lDC0%&=KNG<;4jBnKm zuqm@0g?|i@6rnS8uJj%DxnB<~EA$3slR#*y+JG~^)T72t9^NeZg~vN$$(F4l==U!i z&aK;qD=p^Xdy_2YyPFnYe5DGw>KpKEMM`n0eI$+Fu0a1>nE|t|mE)#RH<$DiB_M6A2h|R%@e4Y>kh@jW z@r}6zZ?(o4wrO97jSb82x8)IdIy9H^L~p^LnRcMB8%`=;+=cgCw&VJ36|&x}09A#W zu;l1ZXbAOzJn?%(A!03vKMR5Gst)$RLUDe+w;pyVK8M*|G2~!W1ywuhf$PsCpxhNX zq9mxz)1R4(j_)!s|4$s}c|6bDu*{~gtCp&bCg4#QN&2!?9CnCDV0)JbFkLZpY49*z z@!1a_cwR>_$p~`#?g-hc-iAscG5Bt31kB-HYd8JnXmryKns!X)bo*_z^q4qL-|h{8 ztLk)yWH-^9EetO;CE)o;3^Z;QMTgfO;5Y98=I-he48w388W5#%;YBxOfn~5_XXi_gPLB7S`P86FL2F?rBq50@jjuG*P`i*+R z!^YdJz{)g?I(8L4KMki&Qk>`WavLn`yUy_)FVh2=;gJ2hhU?d#P=%#|(DV5te!HQ| zYZVnk@tPV^%ew&;3U65r?*8LPcfldw3Mk~5f_3&K?BCJU`nGCf7l-Sp%@Yz6(z5ma_4tn<1=U98dLDe8-qoQn>u|R?L=T{RE1l-kt$Pbm~HSCyz+5uB|YPa*q%%J%Q zM(t#~XDR!jkB@rc&sqEDD z`c1Ie9!R(K@<8_umyw?#$m!OuD} zEWvsIG{=dJ&~*GNlg?(9zaVq>=%dlXn{fK&KJXiNfZoyi(nin$Mf!vLwA{t_2N(IkLsW`qa6@2~X;9nwE?{7DNA3WC3 zAyZk>9yA-T=Y3}-6pz5Hgw4eNgDC&1>M8nriY-}aT}V{M#W1nCj!dJ#)J<7KUoT(I zJmh9l)8nrYr}9-~{gz;^4!nnoUZ$k5Czu@L{0*Zji7auH{Kw}akE4@uD70=g~!1XKQxMZf0(;Ap=V4>>P| z_9Qh7do7An$K27<+7oy0pNA!{BOoE=AW_mDquS5DGV2e|WJ36>>nrcx!1kQE&|lO~ z@7$NBL8V(!uJkLjM79;x$}d5#rZ1e??GC{$`E*ihIz8f)0T))!VXM>wu%e|A{_a{! zrxYjA!u1@}tHU1LAM$ZP&#x|Z#XsUw{1gqJOo7`M6~I%CLTGUn&TBdemHXb;muk3R ztw{o`@Mq~W?>Tg6$tIp#RWuD)835H*RbBJ2bvIzEj43%1o(tmV3>ODCmxj~q35hbOu-nMo>x zRBNLI>fh9Zn#e13jS0g%i!;QDMykBjc^|;|M;5zE;1Q8I_z!ZP1VV%FI{bQR0zH0> z!HC`0P*JM}@5S#YH$H0OhM%*cELYp+{_BVEGy4Kg^x6aYd@HD{?|{r}x^Tq93~tYO zi|#WX6SXJfSozWoZy8$F-&u5r)+io>iB6d)Ulb3I8fViYGgW57PEsHJkAbSb8uEe{ z%;~6dwEkTH3CKH4->$ks)WTwDaVZZ3BvV0pxC|7ub*Pr>Slzn?oR?W!1I~1`5sj=! zyxUeoH`oV&M_?}*{Tzg+&ab6?4ywG-DY;46+)xf1^5sp4G^JG>0Cfg|Cfc+ zpZq|juP^boKokskZUdu-Uc@me4O2~&d2PifsLsFZuyR`#>|bTU_jtJ#mQNRgjP`F> z9eM%Mb`L`JI18IZRB3#HAp|+vf&UvPNGV=Me(vYkX>-b-I7dN9vlFPJ?Ch=oh{portr%A z8Ys$3QQPp@)a76etZNa1OR}PP`{x$;YcRsb<~*jBv!AoFWxDKyW5sN&@LNn!(ByyI zVu<6@jX>$qCRjMxpW_knG5_`skXT$zb@f)D%T0fn{n3Dz>0b=*a5kPf@B!asd?GG? z3fY-+9l`3bChjZba;HXt?6UlD5TEr+Z- z=dp8dIyCrvC(qy2vu`Iwqx`PDP$u}93>87vgurYkV5`%}%E(9LY*{(*Ht!*a{7mr9`l^kX)7{_S`gh49k zC*FxX$6oNB2a{ai(}wP3*pR_-E2Qnnueu1hyw#p)U$)0#_uFK|=L&h-V+xTI(m+ys zHF4kPj6*^7>{E{4))ml+cYF+B>W{VbT;Nu!?6(C)HJU*9xd_j^_a{3oyBR#}7n0r6 zZxZ`!Pg&K~8Mw7g5JG0JMx8HyM5SFDdTS8HJ$Itfs{Js)d2=3reM(ZlspHQNuc-E5 zGJN4g%FPw??7k$U4xG4#fjgri1?DXsr7ziGMduqKBrG zgV}v)aJKZrCsnJ_`fmi*<*f%f#d40pCd9iP6-3rmRZ`uir67?S0s?7rGeihA-ABj)UvEk-RN~o*Z%B3DdaG01UE94a4sP~~^IK1?V=qJma64M8 z;n0fXxM7tPbUuEK71r?(>^90I&W3=Hta7thJox$V&UzG(vp6V#PR9nW}gJTqbhWwdK~%wONkd;R!tT(yko33 z%pgsY)i6})L)n>~w7F;${>|~h+M=6u_fJdO_IV*sS}Kk<3)s@|JrejdLKBnS=I}qP z4y2!4vOuWk6e^S~Wt-*Q&`NCs%~>RjuAi%Md1M6=Jx@^oIu-ti|D-bozCq)D8!(;t z2W0!Q&{4#N-LWnWldc6~sc8$DTZmMqx&yx`aI+Wn1#qv?8qR6lrd_Su82wXPwDdqC zRxH8UjaGPoy!mK^)(&5i*jx$UD{B#9C=1{a3@~=X=&*c})S) z6q4qc)f)UgBZ?66mGh+R9j>q0u^gigY4WZo>Tqmk4W8ZeB~WKHL?$q0xT}rJbN$W& zwNW8>IC6kqqYv=(QXNcau*AgH4D=5>#c`R>!pK)GV(P1c8aWF<@K!nz2wsODq7rPB zUkAXI4bPc7KaY?Nu3k{TBaQsmVUN!$g275UlPs;v#7ega7`fX{{j5`LQqyag$kmzT zNsJ48UOtz8y`D(esT$VNRTn^%>f))^HMkWL;EUD)+*8KDzWb{nN14J=tLx17pk#b- zAq#D5#4wHDh59Rx!cXD-*j|^2@785g|41XgW@aPl?wt+yzn^0@ORQ;{&j9^;KbAO1 z@VR{?#>Bj7D-qntM;!?Pe%r|etmJh6w@3`{INZCm2}}cYnO?~xl;ixsKiZRFiI)KtPZ!`#_Rb~0zORH&r(SWHhdh+l zNx=Shdtmft2Jw(sNIzcgp+P-|$$v%(pz9-rHxtg$lYtIks`{HAO+A4-7W1$mS`s)! z4Cu{xirMpa!}9ickfoE*=iW{F)If^2g5$G&_PD}4*k{CC^gTz~c6Wi!4`%$9Lr5JV04QKh}&ntR9_pIa@iDr?as$m+jqoSj3N8>JK)~z1~UENLNrKuPC~LZ zLD~EYYoFc=j?q)FM)3%(6MG8B>q5Ens+$~4s-TQ@1Ci7hqN(C%xVj?FW@E&3T(ov4 zteWnF5?WKRclloMSN(y@6JOPxPSl5&Q+|+sZw2E1B^=$9atTK4A)PTtL8soER+XJ6 z0{mtw*$_=WO6TC0>mm3pp`55BE+#y8TYBgDFA!X63$?4)gXpyuRxx%5lyvLzv|kGI zngsWe5)+o3(5)x(P0bV)`kB0`vamu&4eOeNP&Z2e6;E>h;FD`fG4QT=iJ8?=+ zOMTeY_IjO@1OgpS<0-#WIQI1`J@#@Z%+Sz)#^jAOg&YFtSPU9BeTmW5c*rjn=HES= zLv)u1;+Kp2;ZJJ~Sls^%-p5u!>_t<2W8_3E&PsysOG%jjR|&nRh=Poa5Pxv;O=EX)Z%21SLU&|Q}T zRmLt*v2`XYXjg;alSydy`Y~?ef2S@UYsoz?9;poFc=DUlL4RF0^FwtlgthQ6bi^KV ze;=jN{bQu+#1KXWy~5jvw&K78E+ai!fLSFI$>*#vs1Bb=HWzC0COK^)Wd$CnM(bgo zQ6hA9Xp*=zhk#eu+bh(M9}bz7&qM%%atsGKgD889Y1DNt_f_uyhN<^lBL5VjEH3b(JG% zQj!PmC-mX4`x!d2ESIXC-3ybub8%WS4;H)<<6U8QVfOr5aQDNXQXIZqBh_%FS)qJsFD$Z{UWJD?OKMprItWL`VUq3oJql)NxPZ|>fW#<822+R{(- zqPiL6?S6%poQ`1-nE+*(`PB8H0`KhY`M`8Wl67XE$iKsPk+tY}E@oGxZ~DCn-xOc=@aEVCHeSmUE;p9pwlm87))O)4urCulD=eW> zJczEWD5Q6;B*OK?U~JdXgytFJ)Gv7{46fud{@TsdP`Z@yDU72=6UvG7^d;0+A(xHk z@^UAZe4_6k7GbekI4L>FSFKf4W9IbELe8#*gZu zczGq9DzvA$&SkKwgyTS6_JrHQQ}MTs6}%R5AjcC^*f86U#E>t=!a!euZx zQceB6HbFgRz&sZ&!+hPF%+YdTK4jP8!x`&v-q>mMs#*!!lhyc(0^{g?rPuI6=RA`T z`55Z<22gV9G-k~2p*t_Qkoqk#(C_7iZ@UJ`*3+S|Jt6_;GnI66ZV|hB&T%}Kp@s9m zDS+GAHj=Pal>Z68EcChqsA1cZ1z&Z1R(Dz^{Y?;nQ{!LVf ziQZ+DQVFN+u9?{3C(aixbU>9QT=xIkOd4EJORqh?N)qpv(NAtN5GbEOKFKtbCz~Fz zwbYL^pA*FX?xT?Y!Vy)sJj7L6o*dJn*=B`UB|BfGg|sLSlj1f5(sLmh*UEX|ulbMI z1#OF9M)Dt4ATSi3y{Lh=u}=6}R38JPJ26OOJ9_tpf>qjNe$?9{e0{MDQ|p#PNI)5e zoHD{gUiCEo;V?Bmn1UP2E7+9l2Bh6o1N4JZsFQ9m?$F$Y&vcgHJi4DwTi=D3qb|aO zJPWWsn#6ed>;f5u_hiNbS=zuEQs;90X}Wba4bh!PQ?^y%l4l=b^P)Z`!1EX`pJD{= zHavQ=KdbJH!Chh~8e%i!-zpRvNy6IWfo$|jFPP@pj@t40bf!fHQIuHB&8`aY(@|lb z>5MAeEccAGa~fYj-(F%rR{>0Rg+aH52v0RKkfhs`(Tl5(!xN1MxVEDXh8=GM5wbz2 z6Pcvr*AE<6Zh*D&=EQjBKKS^gi8w602d?LO={==p^7Ohj+seH!=QLKqin)u4=Ensn zmRE+Gb}R7pe{RGuZ@|PMC!GCM1755W;ddpUB-^W9m`xn-bHW(~JmP0Yty0B6w7Jrv#0fiVwr=8UUYKM1qG8<8 z{e{kHO~ZwIOX2FdYI;@AjwVV>f@l$L-_wRMx-B>kZ5rL+EcbbpRa0k=4{V1Stpd<9 zJR6r;pQqn%2GK;da7=i;58TA|!2V@cSQs#qZ}o=($2x}06|#rzmrEe;(K2Lqa`o%2 z6A;SAz`E7icq#Tj%8?DA>h>eH-TpNpD2*X8-y!LICe!BNfm;W|;b&DLtXm|`k6SJP zT{(u3>#U1Yo^hFW&nSAv#}th3OoO!tRq4GSGjVsS3HccO4BYbT@r17ibz5+aCa7Pf zuc9l-g!c;A+Sv&$M)F@(1CbRuME>nT(0uuv6ffn@oFlcU{_rfUUo{yMxvbk_ zpL!bA*g$j)Rj5JqTCBR5g7JkGkQy9?UQfQUU(PSVo`n~wc=l~_$Rrk=Em9bj9YthA zIUnc0O0-$J_y#V{J`bl~U8f#bRd9BLIW3-&3a4yk_)n7W(J5LK6?;Yb-3=u$zZq<948IJ(<^f)DW98VE*Xro;~W^K@0Y{O{2|G}cvRZ`2%nPmGIx-Hlm<%^MZac<;v|ZXR?Ga&8;*Us=RrN3SJl zZnc9eeIEElAPUo;1k+vI{)D@Fv)~}diF3-SB!7Fv$f8y!^4{bwnoDv1jKLTZ)fYl9 z{CU7`kgPyE=kF+%%)*?FlElS64Sm*}<=7s(@CC0BrVH+cFZb2R=AiY|D>0beSe1*H zm1FSRiAXq}V}Pm6Cdd~(OS6T}LvNBi%;t8i{Oj2dXJ$@gdcD^Xlht#<_wk|RER$HR6aiDNg+(f`yxx`JcKHT*XfcPu=L(T2nDEu#^aoqCJU-ZYTg z;g)b@yA{?vbU+#3a$n4^EgVCA;e(ht zFBQ_i5}>P7(euns^57@OXVq@QJ@ZS5ks+Viz@6FUmRHeCX$#r@H;3D6#O=R`eM{am z5{NOjD6A+2JME1@BY%W2KLd%!svWfMWF$R2!q5rV>WPVF6&inY05=C!Ms3SMj?49r z)Q-A9ZQm4Jua^aEYzfiJwMJi|G-x@?&D9j`VR#*jUx&0ARl6;~N_w%*QT>p&_6_0p z6~e6QT)q#_w52nt#8En+Yf<)L?~KZ$Rqprc7WKlK-8XY0SCk8 z;X;K;=pnNmdva!B_Y^@~;``6q=v8BE08ccfte< zN`jvs!oFx35ZN2WzW3+!mxV51x>OS8dS)`-j~1}oPL?y;QZu1%kv6MY_>5g<+XLF4 zIX&jb8ImEc2zU3+0iS{lET|8Jf5pKt;(rT1b91SxFMgmf*vEYNErWK$^HA&=3p!bc z@cgS{qB?I2EUf8fH#V)~@;8?te?bl!4q0%#oe$j3H!f%VT#|{D?7(vu8cE$N6FhP) z4POaL@*gunxSgBruAY}b{R+4@(Xt@8qoP8GrLHgs!zh|ItK;E;k9g-BH+wfoV(;J6 zVM}bQNSiQp!|H24UeU1tRreS250S3&9B#Bwhe60|H#Sd*!z$A;fw7esE3x{DMi3L`42`Em8$K{QMq^GDJ z!?su9;M!Uu6ng;&zea%6l$98uUW$&jgt`Ai(`LzoAUGCa1#vF#q35_5?|GO2W;K6f z&Zct=IIXkHvlwp2vD*kn@PkQ=cs%a!_k4}s5X?&6mddid9;7S~BOp=11Ua9o!J zM{4$vC!Md*mQkRK-RmK1mkWLLXfe#{c4a)XO<)eq$Ly30I3&D`KI%alSRIP|Xdz6T zmJ5Yy=dqrNf<{?!kSsWl<-e+_X`3(!dVd8)7d&Kx0*^7%Pejv=B?i>w{a$QYwg(J? z@8S9{_uz=K5T99{fQvcLevd>r#&NypU*UVCHzot>R=Y!orxHK1ARqsPOY-_ShJ^n< z8<15r#nnQ!p!M&9&7<=v#MAFA$0$DrzhCY}-9B}A@>rU_T_S<&4xIz3l-(%5#$gr?iNu&|LzsAu2(tFQ>HA=SCqrA zX(K2bde$a$<`Q=6D_`94wV0dT4ltAMydhqbmZFv^L+tvxk+l-yF~;@iakvdHZ3=?T zQx}4&N(AVoPQw{tx)`P@4pa79(}q0@$iVt!=1Ge-z1Y(L8&dZ|-ES`tKRgi*K9gZqtq>Ep z92jB+0t5v9?|an>;Ryl);^N$I|L;p$KvZDwevcjAh927vZ!q+ck}gWh`1}Tc&q*y=TwEp65d7D<@a%Nxs zRYv~h93r~#Ju~|8olV1TD<;QHi?mFYq8)A$bk_}e+OSoP+8rumf+{yLWuL0qiqBh_ z_hO}NzF-0CoFn!>imp4J%KwWad+)vXo>95a`Lu_Iv}tRnrM^v3Dj|hXM5ST06v@8N z`6Mf&R1&h4l?ur!;&*@l-q#(^ecjJ}&N=UK-e53SjFe6{X1RNlQP4%07D{TcJ#xuVgLBdDwQ8Q;pUgTseBa9_zMrvB1PxL#R;2QIF~v!}Yi zC2j#T*Zn2eRj30NgB=ZDtjHaIu@JIeF2gyZO`s@tlF8oR3_V%K5FV^aYZEO<-fc0m zVqzG#AD=)u=QB8e=sND@GbYa}OsQsoEH`ORG>S|tfUR#Wh)bCb-Sg)erd%54E;>=e zq~+gK%Zt}+<*m;kq^n3D_&rCjdKnx#6$uL^?qW;&N(ib^qI@H~EVO$S zc+O)Vn;2z5rZ2K3QBa4?g$x*^iW1pEIieE&2>pKE!lozLY`qk&3Y=pBr7Iw`ztH>Q}UH9 z|2Kr1wX-4cRycMwT7Y=c4bV_gLBc4|6VBG;{m(gIC>?|oC3@83;ZpcG!^&V}H2*SX4mS7G&X%3e}l4XYgX1iwR;k>iE1|K14Ov#^%=bi;rimsMxqE%(P{Vh_6h1>hd>4({HO zgWij}Bw1dLrfjtrHeQLX-@ZPJW4&nGSecrjoJu4d84KkfYW|Er_qmEl%*lB>1LiKqSqt zVUB_o>1+IsV{XAH#`xo(YhCQB@fzksrY31o?PnWq8WZ{GL6-hdpvfUCLE6iPT+Ycw zpHHvBR6fUA@xSeWTB7q&}Lnzja33CkmU zC>s9q{Cmfaen!Qn9;nWH0^H!AuvtT!T=si}wkK+^+;ss=jcJ681_2EG{ubA?s8SX8 z#dx|vfeEiRAe*&(p=@R{`X^Yj#Qp;#n^^`=r$$2TJyq)ZMUz&VJjBeS$Dqs8isT-@ zfs(01OwF;)nDwWPvB~}h;+o%?k%9?0{NG>zKeRrep!1nvlsF#IsBEY3ODfVt;8BOGUpj zw!;e8StLLjg}yRfcje&hhCbZA<}K!?Tt?V80ztk)VE^tWe%_c3A}2y2LAj7qS{DjA z^6#NyodH#Bj=~ju%kho$EzYsC-PpPPG7fz8$B%Dw;Gan{Q#~S1KCe-sf)~wbZ=)#f z%OOzrT8HRn+d`WCd#HIH3hx&x6ZsW);hM-k`0w;bxU%1nG690*kR;ugg3Ako2uE5hlAPejq21k*@>JwSkIL4Qfz}o z#+VMRCU`nI20Nw;kZRFK*m!{po@0uXUq_YfbS*}e?g_^CK`wJWwHIf#>e2;gWJvm< zUEo};MZ{MKkbe8e@T}oH4py`<&C4a&2Q5~Ztsq8R_E;0?QwBUe%NSI1c5yuFMsU`w z>o9$mDOHPiB9`*sAmjI0@V%`-%aV+kfxy>TctnDBy?WD zA@{90iPac|Udd?i`S1iv_s^a2dy5qHxgttZm7DR}#d^@4|B_qI!^E5nia_MRV;q>N z3Sq1}er-YS)|I*3%{qNhJcEyHy&^*`6Wh^ncQ?LG+zs!0-C3(zE0}+Uj~wrugC6p} z++^K7j9Z62?aqo|6O#q0`m8i~5oJfD{FCtg`~PtL=ttJYU4T}#>2uU~*&yF!DcFeK zz;Yo=TEl#ScZbwzVS*{G3Vz1Bh5~2V#}@c^bqdCADS_YZk|a7$m#mxI2j2Vc!r$ZV zAac`~evrG&1eQc#guXIo-zI4cHW&(vbN|EDA2~ev38>UH#lAMd?biPCrSeEtU_Z!lzU+ZhO zyIGH}QNPP>9@56rQDed_DS;Of;>2~DH95K6f)Mi}*zWfO*kv)GVIxGQ72V@DUeY3) zKU83zW-wF=roeXbde&*J8Lc|&$DBQ_O;k7S;To%Hl39zhuuF--^%ETS_xX$X__y#Q*0`VLz8d6mx))u*;$@m-k)%42F~5(&+)4JVr#x9aLzz~@ zJH!0Ii@3qAm@8MJPmZ5|$~iLIlDMk&F##=uOiry6k$O-C0-0tsxOfVk({~ly4p<<) zZHwyNy100j4QaR_fC{qaq=WaIk%`anSGJAUABoa$_R5rB?f{C?LbhScEOy7agOJ{6 zNDP*VGHH3ToWHl6xivF7Vbb?FS_N~*rY$gRzW_~3gfOpA53J{e zK~i%YjC?qb{Wr9T&I2?0?^grNXnKU%d&1e1K1w7a@FO_;#-a!GF&?9@K=QOAgtc9Q zojzNkNztBkdA6X-KUL_m&xH;By7c48P&Ur31RuT4$1gwR$jy5t5L_FB{=0aRnEkg= zqtcu^?Tioe^_L-Dn!TMJ3N|CTiBsW9h!y$ezmM@%HH7LlYtcdY7vmRZM_#nkhvWWz;C zo|o31Y}h44%_fD(dV@07P_zpr#N+X3`$IUZrbhK18`ANT{Y-VndibPtoB8OE7(GiB z*OrTsb)F@lN!KA?FHHv(vj0_k9V1s)k2s z&l$jUoP?fbHuPwcF_AShCxVw0NRyBt`LkP&v%4$_{1W*vbRY<`KFY%ZJsW1{UcgMt zuPon79U2!RNWGqS;kh(5B0YZ(^Jt?AJhP|(-P~hXOf;DAKE%DD=7ev$J(}VUyuj0s z8yee^8BZkX(UxT#Wj6u3+;tpJj7ZTN8)QhcY#NjPT84T)49MFswu^O{B8%ecuILpM z0zJhNG+vj3{f`#2PksjCmLXjtcjPLoY8eS{RgH;*^>lWZU?&s%={Tmn)1}$V%ALE7 zjPO!e8tmT`0*<#1fq9NPt-tIIWBQ@6ee45X-2Mkkp%3pE$dElgHaP8!A}w>FjBKA4APccRc??_E@!w-8n*Uj>(PRs60r8@-lm(7z}{HmfR zDpU=3Ic0F*N-I{G)xmw2H_lIvK4BX@-+>c$z)?>rCi$ui2~vngsgX{!ez+bE`;6fD zoZCn>dD(Xfp?LqdB2m+|p#CByY^1#f%`A$5F^BuG`cD;%YBq4&R60y;Z#0it-lMLO!q?kwi3vmR+RTXWC{uPxCbBd0DEs{aC4s} z!T#)9@Jy%{U6T0e?ZpnXbj~X*njgz~v8n-|i-^O|-aX8er($Hz!)5T@<~f`?u13`L z)Pa}T3e(n4gVo=Tuv2TSU|X0F^*(t8)ib4u-^`g<9`+dZ%f~^N$0sHCtI*()DfoHU zR(!Z93hW>0usa-z2;C^2P$ww;DB!DHT&@Tx5gxQ}#*&Go-HmCuUGKYak=Vpo|RUq$E#T`ousnG^E^2y%iF^l?i* zlvqE-p_!N9_BKZ{=W8EymsMlr2PI@Y(M$3Z*E3 z^{Xz7b`1fI|1x1qx)#`ekfR;DV_6d|6`JQXg)HaQ^qqJSu3CKthqJdqron~;dBmYi zTQ8jcX+n3npXQcJj)BB;Q<{)i&hB4O4bA+`ct!g++%=d9QSDZAtXY7tr1Sk847SgKLHkZd z#dHYcjpEoNH`|#x+eGPGF>_qK&YBh^52Cx3E`6PDOk%dX@AI4)>p#~i+NWs!fK6)&|9E>h# z(goXUQO7G94#jk#u-hth8|jDT&&!Zcs0O87xbRkT1tgWSoXSn#VSwR-$(1>50Iv>= zaP(NcDOVtW>19aV><1qos^L-#OF{+=sY$>Ts#;+|W-Z`j#t$fyfDiH{ze$wb)cD4x zA1}ktHU_lkzXI4}JIU7n>qX09DU!g;_&U0)6JIqQ29Mewu>R0GcA3F{pmo`lx(rNX zeV^Y&w~8m=wl4;5C9h_ymG|&!*iW2)@hMJS;16FG$6~}MJ$MtvVp>rom)$bX7%x4A z(~5`S@2U~>oLGm$N2bt6r?23Q6VKRB&RX==i|?E&DKFOegc*%{VN4$=H{$s7yUc@M z&2X8&8!oBdM4d;^aAU|SV0QfC+Wz_m7qcWt@%A;mXttNQ$U%edlGLCpX6rHrC9gP@ z7Y6Zq+h+K??j~>yf|+Yw5g>Y>N3tXzz|is(`0nTm8CK~y(Rhi?yqCrX6j;*(8T{1K zrWUW9Yr+bROxPW6M%JI9u>Y+pYris*r~hq3p$ZM6-+Uhi>U`lNSBdO#Q)AMjw_^Q< zR?s_MiyNX8k?(8@o219{1xi_ybIMPkD^?nFzw*i6YcYcs zv%d$Mp;XqIT-tFJl<#_Q*AG5nR@8}7&&`Is*=s-gJN2OXz7{OfP^LTIY7@tFe>|J2 zP8PgVFa7Re>ECYVd)gROhUKG4Pzo;HX+rHMWf_kb z*WkF97;(O0f=#ykWC|~v^u(krl)jLo5ZDzW1)cRE8@(Bqy}1RI>+i$PP+gw(W|;T5BCQVa!G0dr z#qZIG-9}baa`+W?Zd#05A}?^4kpfR3w3KxSFrZ+&5;|EW;;=pvh3|*rrH^fR+dz?S zE(}D@Hh?^RDf&|OIUL(h*c-twFyTZEDE+8{Jw?`Vb!sD%Eb|WUIJbb}Hd&IZB1#_E zav=4jE1He$0p|sUaInM@E3#}zuCx?Q=+8v8us~Mj#RI%?!GZi}RVBg_Ql#aH4OZ=4 z$dSLj8S5?_!SdBX@H=oE#+@eEa@*?=lk1OTruLleiSHOEqYg$tz8YSwzk$EAVpz?r zJXXrzjhQEX1E$GXkYvH{Y)p0}#zt*J@mgdm&m3l&%QmuqVgXCdJI!E_AXsxrtq_vWCvlAbUtFa^@2WLVfCknO&WkVci6hem{ zgURtBj8K&!S|j(Fj8awh(cEP?F-MXmvh$j z%hPqWi5R7u&g7*xvZ*B&*GG`T9Q@z4!N_>5~T>y|EO8UHl;+RhzoczXvO( zCLx+ngBHI^ywoB`gnrL~2dj4AYhNyUEp~$kwkkB5V@&t%aU@GeB-pvO*3|K*I*Dsm zB8$(&Fi8iKQMFW%-fA);&e~kA@|n$N-Fe8Ya)c+z0AxF4M5?5{TMna zgU9B`lK5Gs#HWlOqvvmc4c_{s=$9hBw;=~6w=TyNaz5{m$RQBC-2tU5EWyDw8>hvk zVnDJNd=|Nbrz_Qot$!C7osy!R7W`Cc^-b8FFV54f1hLe~o;L43hyg8pl*3G7)@(ay zd2d0g^hHt6Zyl!d^5ov^(xne4-lItfGPwowFh4tuYtgFDi5Q*@r>t!#)jtH|32m^O zPo3VCk>}}F6zTkfhU{s>Rwy{3LJvpklKh<_#8h}e;s;r%;B4T8yq?>NtQg5 zqPyFbiKm1a+4HFmpRwBXexo)$@AQKCzPS@mJvO5YN~h9w(XSyObO!i+7NuI%y!!v4 z1g{8)k|o+gB-CsW6i5ESg%c^bzFd=>92AC2pKa(O5A zv#Ziu*q<8JFud0QCf<(2ZdG#}(~8Hn-J$H6zO20{{DVe{+AuZGn9Rr@ zL)~OaGNq%24QO+qeW%Ts(|1(J8mCEYJr=|@_Vj}-e^TLbO*AfjFG4OF>J!J+iX`Xp zEC?2Rh7Y1+aPz?jxWfAx+8KSpkRP^GBJ~Ixkd5o)_^`Y6C^VBq3|wD8^zszq3$|WDyUKk>jlK| zp+pwyiBv=XLK)H?e2)2CBT4rQH=qQc5E+Y}2H6jdsdbqt?o&6Son6+jv8sdpBWT3i zFSZmz1$JU#`(ylfNSBnBa+yb)_-Xo@t4z1hR7TzTE`+sknR80TFo&@vqA9`{*3*aQ zXN)r?j`ir}(F&VVKEm21qU7Bw0k(JlU&ef=5xAEO;nX^LWLgGU>vPR$l-9?1)z#w+ zr9a@o{|Ib0NRW1(CpE;i9}dj2peH1>@J#zE_VD>K=e0{#vv=QY<(4?ua2CExg2yU- z5I1xdztvoW##T#Oy7mVM@(I!Z?&?vw2~(oeWJSEry=U9Aa>Xo&n`^IDvXTeW*F}JM7XBAb-my@urR*c|6Kb*Xd}` zZ}VeOTJ<8Bw)3)8J_oQ?%X~m}wg!2=@C{l`T9Gw}zJumS0OYzorD^EsehacbKEqGj)ToGKEwDbGkiM`LXIDzm!{xwgIpjjH z_ZSLG=#Uk`>8y{d6%nYphF_FKiJ-L#k(E-yvh}GLmCFUb!bW6Jj4arcG^@1p`;} zkrVIqIK0qgvE8nuqphdl|(B8>l=Q1m%U}usl(jmj^VC zgRBra{lk#5&xDA}urzafvnCZ9e}Oy2c0={>Ip~tIgOI#lJSrT)N(p@iH<38h*`iDm zCJw;vavA*Zn-A=G*n@%ma@2U19L@ajABdi*U_M&t(^#X+z~|H9ym-ZYtO&HDm%Wzr z&UPOv{^H>bYjWU`xi$%m<6;L7hl$V=W-12->FhLq6!Ne~!_3WW;LWq3H6s9C<=N0` za|OcfF(CuCs$^+}0r??(6aQS!0U^1U;GTY$X=xIr7P>!p8EiEWko%6Yoh<}(unw=E z_=dZdnj`R&^Sg~G~kBx4C|TKlfX0!_&LvN7bn!?E(l$@2j+(daPON?NUAjiJI!up^rkGm^QsH3YP?3j z$*r(RkHtnS6(WC?h2-WT)}^k8wHORXpC)q#->VY~Zv!$ReHm2GNmGWs4m0`1>GayE z^z4CI%;8^87*76M^hs{yFmrf$2;3da?X@ff^LI0zN!#Gm`e0_(h09F$LLC}@L7Rw| z+mNe#PeEB-ob0>B!$1e@sI!0`IXO#$PT!b_C-{e;H}xMZ%PB?|p2A9P-54gF%!5_T zD+ox?XT<(#kX=(xz`5{r_WX(t&{p0Dr2sAAth|R2 zZ@0BAy?IoS9I92Ldlq})_-QpNxZQvm)@{K#HX<~~PMTg_(#hSRnTCUV=E9*>G00yL zhLwLGfmfYB-1PQlBA(>Jg6eeU@);$nab!Q3{1B!O#4=Fnjy%0x#rscR{smR%3{hxU zoGvvh#T?(Gkb5oxWs1beZqsluFg=Nr=F8dMUsBXF@(&KIeTt=HI;3MS%N&pzV22j! zaO*1!=(7j8;~#6%gq|HYdA5R|0_9UA0MXCy}W?uD1hQ%Fxw3Hm&< zVBOZdVXK}<;oeChda5T76E@W1?y$R%)9232_+zu<;#CalDM$^2wMHwwk$8FHB}+bTO9giA;&Q5b1uJ#4fT+LQjt* zR=DaPy6GTmRMH5`W-Nh@8avdd??6iBBb*4o2WH`a;YL#z>W^Jvj7?U+=G{^R6ZlA$ z!*b5137$UU*c{XzdI+cQZD44@YZl7g@L-5C)jMf~e9Dq!-exaY;%iDuwSe7Q>9cjiwQJQIW2^MX6flGq4>7_ZZv47_ch~1%0!@KK{W|X6;KF?fWpw4P9QX;-9 ztO#SL4|}9%gYbwy?9FV)zLKV;Zpgk20;@X8>OoDiVwLLiAv3CL>&| zj43dd+663jY9cI)e1*9Tuacq)2VCI5~0u7+xxW z$vBM}z*8zopFC=Zrb$C0R2c$a5^iJT>{vX!PXRAJtwU~IAxa8ehFAK=bj`*}CSZ(L z!)~^M+VQRE!p?*E#WUb&S`8H1H?n$#V$|tsD28$4utT+%;q3U$(?2LubB8A&!S@8K zKk|{)58lG7IcM=7YeCmYJ%H)Q+i;>F5&8y_q4rZIhK_i1wY=Wquxcc}u?l6UrmIlr zRuP=7*@Y*bd_~dDy?ErbBxO2X;Pejxq9}C@&RFWxN|_qC%G0{+m>HkfVS57~kDFnT z`T(S@bt0YDujd74B*HrRi#T(cI2n-M&K@%nr0=pM$)l;0xb)C%tm^&CjQ$oOO(oKB znx~zPn<2sUh~EL*AE()YoXL{{v@vBkGds$}H)VA?81WakN5+X3UJlo-sYr z_pKZTq9u7ci$|PPW*6RwnFj7p4M&opDhU%$&SdnqDT7S>bJTlMis@QmsCO}!@!V`iYvrCZtGK0XPs(=K7W)Gu z@9;xGNFG}3xP*KOsW3hC3;y6`SC8i&!TYshwD_0}wbLp+G7fW!?l(ph+ zK~1u%eJWYkq{%Lru>iu|g^A+tHqgD`#NJN~fyx)fFq--b42mt_<1In9G58Ynsoi7? z;;&*&+$h|y_{6y9wZV;Ed0JHQ9%DIg(IBk~HQgSf(r*#!V5~&Wguh_Ylp?TbVJ~BT z`VJmx^#XU_YoO0V8b`XG<1daJ9{4Ct&K@7baRX}@&N>ROWOl;iPXZ+QUl7=}&w_)S z%vf&S1&%+*K{ef@zVVN=3|Es{D4Po%_csdwu z+=9zCRkO2Cbbwi33kbNZ1kw73yxGZ~DE1WM6`NOhAj+PY&#c6f`C3$Jk11(gz{_Dj z@e>o43(=9n|KCR^(8IPC>np0zl-DP29x$fsUVZ@o?j0EPOp=@+8nmeNIcEO0C1N21 zxZL&^&e1*3Du*f)=c(th=cyu{q3B2qU9w<$v?CNBHlU}}4x`*mO?a5|l>K{nn7tWA zAz*ep_n%-q>~XL~lY|>MZ8pO7Gg**#frnw6IY8c>G8o-*4u2hu@?h=- z$p6xnGsfGUu=V)nUss%6I=chj3Y-sH-b+VY3`AV#> zvu|ATm~Df(xP)_$@tmzq`l2=H+4r;YSztaanA9T+darS|Y?mVMb$hvMr)*$+zLnx1 zH4n&`w4vw!UB%lGQnc%#2&KQQDdp|!3z;TIHqHIX9^vr^$9)AM(R&ll{GmZ6BTJ$G zMi&|iI}w!_MY6)q4|Qw)Fz5RkpnYnla}=Y7FXd!uY*a0tQQ$-WDH7yB)pHmYKL-Nt zJflfhKU5xk1@c;&j61x+xM{+uv}pZ|77&wYNGE@j8QY29x;HSdFZDFU`CBU!ZXfHk%eZa`<5;IRtBy{s&tv+Q-}jY+G)^>({}&F@h)NVBsB**->I|v)l*SG zTpV?D&0+FjCKPmNGpj`Tsqc&XY|@A!>`hlC+qcGm{n1orMcRE3+#H34dYRbYtVu_C zn%+H~i`i8x>(OpwKTalEQpbq~kOL!nwcim>nW)m{HVtC&haZ3X4&pP>aEKFeqDn1E zto!xPY~{at=)2>De*TtZGBl0D_bDAb2JNWa5PV=nAyWz4--x3i#{>ljhOGZHO;{^BHVL7^Zvp8AsvjLweDC2wQUS!p6 z@be=Tk}ME}A>I|Brq%~39wumgI0mJ|dhu0;9Gw>u2}SXNpqzOGUtjLRoC<9+t9BgE zbid)&Irrlh2|1dVD@ey3go$~)B{^TxhTjf!uu2(I2wdoae3uI#5KVFHG=l+>AK;p5 z6)t?PP2C>K6GnXxI`>FZz3*J~usDow-*zyoN<^sIT0`3HQ-^C69O0(EHp8Bf<_fMm z07tUVvX(4&#;E=>=Vc$BV(N|=xa9N;bT+<+!!0_rrXw86JF-}fu}L=Yv@qr-YmyC5 z)0y_=ow#hHF3}a!rHyr&5UyOzYVQ_j<9l@Ika8X*sq0W_*Ab4J{5YN#iotRsLMGQq zp?Fy*S%W<)>Uz}PHV za$$K0NR6q}j6PoKW^flCUG#_%T*~A9UWUN|9*47khZRk`6EQ=OFPnY0QkvA}mcbmK z7a;Is8!p*<7NEJFo9(E93Vzm%<DuD{8m(*{STxkHX}rs~q=59i^=OW)Y`v2b|C!^JX0ySa{ndgQ^; zGDrxlhKl+E_|{nft9T#>xSA}tB)Ty3<84ZzX0^Lka$p2tSo6=2a z<7Zw!R3C-;M-=IazgG05Zw-bLNt!6}5M6hwku6sPF>ClR3>-;;G)%%K~k|+?iA3&?b za(s7u63E9)^!PK(j(j}?)dM}Oqlgr?>nTtZB1tSY@?e*65D1LrW9YpBcIvkdD4JtM z&m9p5om&~4HW)`Ab|LD#_l6sHlOX=93>E&piko<;iS@Jd#g8dG96o3t=H}}#mp7Xc zedaeD4;@E?`H^^Qiym*6+zqV!bON^zeuhV*d(lZL77wI828Zcq@&0r%W~0pt94Oqt z9WXutIVy@o*=@P!xFef^XPQcR!fVXR=VC{-xRPME*v))J% zO-78ac%6X{Z7fjbUkNUEZN^)Ci=f)XftZiEvzw>7;)MnthOLyt9Q>?FJ}Q|KC8<)( zkdTA=f60()+R7A2Ud432W*8NhMEmSA^xCY7ML8B!^l2IRH<(kuhFs1$B|iFlp*&oE z-VNDTFEECKZFu1GHE8pAk7vFb(4qas@Tfkud@eTD1)DYIz@?U38AiXQ_uvX^yk!Ug>wY)`fcEij3|UEe>l>7EjJButCP;{@WO zuVUo8hbCEj@;^q2r`Iq);RM@V%_uL0ja=9HgQ1dkL@-Q=@{IfNw@!pQ>k8AC1?yoB z+7go`AGykLsSq{Qo+Q|DS&uX7AZ7zt^r;91atz6K<#DJRuY^Iyma5NIr(O51vf3^I zIO4eWq zbDO2Fu!@=fkhIf?NG4oi#N+#LMqD&=Yn>Wrt-CsrmL7#SkCgF1(hx3MdJ%K~D}k1M znQ-3nJ}7fE$P1wj>`S=;oU%-jzUcR7*5psX=86&&eR&@J>$Bit*DqXc^bJjZ7!sKd zTRaeJL>{*q(CZ$dF!`>66>a&&34VxpTelR9yp2eia|(>Rq;l8Z%*PamTNpRC8h%VS zr2ZvU%$Jr-xc63wC|pQj!uBl0ypTlP=<7&Ij$UInMJmw+=4!0Gh8dBrw}3~1#?(Q? z8&@0(&C|3?gYGUNV#1$|651NHWK9g<*SYvSy9NHfm!o$t6tS`P)+}WX_~*ifZ8v#*@h=qg?7$xFT1;6Z=DcfEleF!;30i&* zR7B1Z_DqYzGcS9gH(G?m8yispZ6h)(c@mob@BOvVpxK^wwC}S&Zd-6xa16{UL9e;hd5}GU?mVwaSg8ya ziccY=bUj?(z{NU&Z+PCd6a%(YBYk2``r^Lue&b}OWwRRL&pv_&48F7SFSbE*?Xa19hHXYuw48`44vNqV;GGHV!o5OS9L zv&~h6Yf^L_jt>QL6@!aWS9BZJ_XRUc&Pq}38CJxxG@iXT;|;u26(Y`mK4OeiF{ISY zVN_aE(0ScgD6icGuj`9(!J<33U{r~?FEF49uMKE?rZ`O$e8=wXnGN-?`KkK32)Nww zh}rHF$K%)b0?5jeC7LEQbJICIYhy)(xOVK9^yukumoD?FMybk+vt8k8lM{)lJcr{2BHdJ*0pBV z!#WQ-1@wvY`#6Y87bGjpco&Y4ub_FY5}M+GIi*e)Xi>m@ zNc=pN2uNRo2aD~=s=*mpTKxj7hlPpnntW86dxG5{76v}fo3YZp3BNZgkf~<{X!o)) zSiF51yDMos_P$yG4w9cB!`YPFe$athPGgMhidayHtAUh#2E@_MpUHFo$;=8zj44|O z-uXPdNAoPBe@%^aM=8=6dp-I`zYvdFe}z^lS#(>$N6O9^!LH6Y=E{;Ph=z=Nl&i1Hc2o-Apy`n?I;VRIgjCMi;xo(OohaW&qr zuZ1~l99lqIkmc47Z!byFl2hXB&4qGgR-Ys)eXxKd=j1WIXcgv7ZR}#R?{wsW+Cq&{qby?eZ z6>|5SB#q*IkIjp1c)mq7dg0bEmN*R|S3-mQ@Yo6#22ON?NF9Rk9?VRsgpHY*_=HN( zVkT=1X4^8+jK^u)72VZ_KAXn3MXHe}5MJ|ak` zn$N^yfmiJQ_WO{M!cV`3rZSPcRxnvkvc%QyEk500M0uSp+dJhR!p2UFe8!Wg{)XgAZNtuxKIn>=KRuc9{oyR?I` zJhuglhiz!XG!JZ8{TQX^*03jTKfpHcm3XauJrq_d($P{ua$ETh)4Yer@9MWe#(G!0 zpD#!PW(>nTzkQftD*#^pWpGK7H&cWO&`$jZObUzu@42eD>Fizn)cOPx7iuwQR$c+Y zD+YAK@9(IuY7P%8glWX>77Wa60keS+G<)?A9r`NZDGv*Hz5gaERhW?Mz*;bEo5I|4 zJcsJrW8qZc6O`#31Dlb2?u&+lsIMZ2CkrKs%0^LQdCZukR%y^@D^!WVHAk9uJr>fJ z2~fqhYjEn?HypjQixHar3arI0<2M;Gl5Z}APkf@;X$98AYZ4*Ojps+*8w5JaLi8iw zYDm4U0yg*`{@7QS7d2-!1`pPtq2+7{=V7ikd*sQUnca+C^nCCZEobANU&jm;YpB=e zBj>q+&{#E059EMsyhEaV>9(E7Dg8$AT znx$Wc_Z~I)>Y)O;T($%;!Ux2sXp)fJsr2va@9Z7>tIVsGK$se)q>EoMFq2NCpINpvv*HbZK^aCo^JO}UC1jwG#$V9|{;P!U5aoo_6JlS8sx?QWn za~82!N#amWIhEa-n#}FItV&KuPN4=KPE^I(3nbp@k+Ho>#A3l147wd;KQ@Sifwu^) zYm%Wuv6jUCsynDmv%_@JdN3RkBZp5ug*L7S70z9%c8JsX z_8m?UuE6aYj@0eF7~y-UN_vmI;;OWngZVE@s$A5K6PpyNx?ccl6*i$(SQ1vfG^IC- zG|0KfLYVeCm3z)!jP&p9WX;7CNy>#wu#d;@1ZUaMj6w%`LpqNWI8O#5Zf1hXgG)@* z(XViDd=}KjO`)E#3iRV2Q<@egL&a}tGdB`{z>0*GxZ717;@{}e*fwpPec%vgUmd^) zo(J&OkHfG)I)*hfl)>_CJdV9Ynl?zfgWcY8l%zT&QnD8n{+whh8%^orMlldJ&S38z zisflrx^d^|UB*5`ooZ)2g{7|Ibm28ycyf}bv59B`yZtvo{c$a~_jN2|yYT{h^v`N| z5V96L%NyaBNeS-gk>Xal-Ny5lb-1DV4s>aJM)~goG<*Rc(Th}|L)~AnOaB!vT*N}p za0ho#U7qx0#>3$iyjrS$i;6nlZjpHj-ylT zapIB{_F)u7mzQ(9Z{ERkwi{W`XdUvJOtShxdgR6dUaOF3$E{2` z1<%V`Vdqa>s^Gr|7PjnSmKRA8<1>rdDLEye-Zp~bJYD3UTq$xVRE^l$>(IX){G`^x z28P-RtaztEf(QNa$sHAVNkr(E&vCFh%7Ik53?tlEhpN-Y#5J)w@3@E=-S+(-MjzwV zPZ3Glz;8&tp9$hxC2j`3$bcCWnM!n(+FB@Io&~dyroqw;_n=^RJbaB9<}BUI^LI1^ z!WKbk%!-ks_Aj#82xVQe$=d*@U6F;>EekQa?h8zRcmQ)^RLS25mejpy3wDj@;+)%U z*lqt9HS15pz0+nyZ>A=5adcLdY@vxR?Df~HAnYbz` z5ru_nw9FwJHu8F_>=6U%#G5NWT+!j)Ua3W-we<+k5J4TorjoqT|55hlQ8|Tg-*;(F z^Q3tmHK#OO`#2?2ri9G%P#GFXks*qbP)LfBWNILyqPq5RHponhij+ngD58)wy!-dO z_w&5#zSnyGc(1kgAH_b`<#O$FIF9f4^Brb&u8y&#_AVH+Ob8}KJ;B>y*1V;&szJKQ zf;n}ug|F~;3?GiPpq!TyO$aQ3@tYpN`Di2hEW?5qxU3OAsk*}7*oVw)y+Pc(Xa+uP zH6WFHLQ&zYF&egfgf+!S8HER0Byqtd;GZ%gvc1+c>t`M)M7`ikn3~f++TWP9fB%By znI~|!?FGJ3Jc^yY4iLQO5_4&CC{_u}5@oRuxPK8hSMF+JOWfaL;vF-3HNt`{+oOiZ z)OX=%!7nV(OG9P15E$Mw14D9N!tb2>u=cqvSwD~X$rE_n@CBG(vcgBPE0}`AoHlKL z5ey9p;tlr#zOO|mt`_9Z{oQ%kv#p46ocIfhk6yu#`ogsHf(_ZY?>h7N_Bdj8csK5D zGNpBYo8hdtDBYLahq9H0DB4wmRRK1@IvbEqB~NfX$*noMqF~k3ig_a39D)7CyHX@b zrmP{Mqcd^T{~lYKJcu)gWQpu;MM6#W!E`UDt>|2ab5hD+r(`&KUKQsI-JFi<$#Nzw zV*$1gbzqnEELbgEkLz3|N#<{LB5Jw|vff>S>~JysP|9O#bX2H9N;?jR$`Q9cT@cXR ziNiAA(S{w5E%TjOdxv0j$c+Q(t=*93aUUFtromc6J9(8yRqcT!;e2L(RxGpxE zJ=j}_HV+rEcFu*k^XMBi^P&9j1!K70%+x*Wi0$QA5bPdga?6&Q_s&X2#>~SqdCK z&xZQsC=rn<*5rfEagM!`#jO7(M4y^&;&0_@i-Y%7$jgi>j$v??ztgl75_w~g=_E-$ z41PkXK0`QZ<;Aw_mm&tOPrxuwlgnXnf}Y@|&||a!O~QUKH+O6S!8`tpmbD@c_$f^P z3|p}UGu!a~)t|Vis~g=;PGWRZUxLBSWsJVbALyGqf}*JpAnsxlPgUX+UOXy8Wj{H? z@5*DW{D=~>KuZDbF8pE-R?Pu#2ku-m-;PW>Jc0Z^_LWgDZN!B#8F1Sw5yO_+kirdy z^lXI#O%NMoJoY%yjExG^wPF@zstM5T5z(x89%VKbh|;es%&EqAA?mQuffcWu2&rL1 zIMO6ba>tv%5cfUWW-tWZZ>32g$-$Xzzwpj6JsLW6mKjp!xDP64!F%^9Y@A@rE7IJE zt!ED7F8iZUUcLzx?AL-^(P@0MuNPzkUSq>5ed^lWjk&v&V4mPBxHIkof{qiOsp!CS zNt$S%T!u-ehhb9X3H1NE2S;bjV~V%v&|?nCMH0>y#PL)Lo~lzMkIwN>d1ODNm|C!E zRnqjxjVFxP3>8w&akA-6*L^6-lvyQ5eC2}uWk30$yCqkH+oK9AL z^E6l;qr{vy{0E*5@t_=MNNQI}k(c2*G}m@7JeRbl>buVJ%wIkPh4U&fb#Ntr1jzCCB2?53NOy_8hzyXN$k{d!gOCi}~VP z;PNhBn7F9eQjLqPI49yURGU9%^=>?ddkxo6`mHEEsf(!U=mxAo8MJ&J#)8pSEWc)r zYp*pz=eY#7FwvG6zE6fjt`Yp$Oj*KTdXOi`jHBr-AJ~8yeRx(?lTKMSz)We}$+|45 zhQQ(|G&ho=m-RG|e)I$Fba9+_N`ZY@P{T0oCT!f*R(9mgHyr)`h>?t*#ug`x!usb* z%x#WS(A97k9bPH02?3R;+1-rC_CCYYMY&KEJr5@;jz`O_Vr241e~>f#4Q}F#c`8b+ zSfag{`DD`oeo1;{hO04g72vc2o|*9CxiH~vC_~OZ!W7!yXYDhDNJeoeNUnQ?37IYY zoFrp-;(CRZ-~17lffV_9{2S`2t3lAH0FnAIkvxi7i}n)fuyltx`RCh-vi4h`k#k<( zeP>Jd7Sw?o#}jEkuR*6BIt`DE3YJZ3iwI-vv z{|Ik!%oTWGU4d0sjYxUPc=}Q8D3CdG`3DD&fS#c$>6v`3DC~v=y|gC~Izx=9Zr648 zm|I(sm!c6d*Zzj@t<9)bs5*EUiqPp6XK?X?ZP@*33$C8aF|!1&W0O}nTYlpWc>dD? z7?{T__u%rVU8!eci5h;M8Ex>1$XH=7!7?2T^A$p z*V?ZTNEL|Bj8R-T76Eb#RncR@Csf!Li5pIy=O=R<1k2Xlu-zgbsux$``Am7xlUaeT zHbwaUfhL*p;4ap(vc&US14xHz!5p=lAfge7GS;&6t)mRFe4>t6WkWXimEdU+RgRs# z28MUZ(yZV1ko^!Dx8Fhb)%5b{Tl>;FXN0ZBflgK_4DY`P_XY#d z@i6Bz*6)CDR{^46e490I?`O+b8PbOBYFyUyIFe}73l?4u}yxFI1$1-NJNRQN+Q z*>oMVQpMQA=T_n>aqgV3i}TjC8-U6)1nN#YfuU*E5vB$+fg*s z`VOgF4}9Mw1!}L6#2kAoNNznZ!}IM@)TiVtGizlMy7X;iJKUA2lS2~zJt#?LAM(Ry ziFNqT{ySUQHozXMNXOkb#u4}MD3BN)#u6t(coSL!LcSk)D^C7o!ZYn5b4fRdTlwJj z`#tdLgdx`G!N*%WAeu=sx!Q zUO)qbiB#vxRy?C1%JHWs(%GN8@c`wvj3Q(S^?s;Qyx1NMTnHg7~Z~U zP7L1Uig#A^I3TlBLek_UWGoe<(i}{$CzV4wW9B`bFBF-E!zJ(4K_M&-H<;dshBy=YVd`gG;l=f7n$ELR-EVNZqFS67jNtv{ z5xS2~Wdk;{%!1~f5dQNCW-IjKnzhk*zNHfG4%m|)SFS*~P!`**bBoW!=cBlW3h`Cb zCPx~Ss7iPR-Y{kH_F`=^yGM%TrThl*Em|bXW&%+^QN|35j-uTeF}iTK5Qsck2et0e zIH<53PShz7skB7c9iUCztNK{?sUl>}F*BUeD1ctN0la_>@^oE}0nQYPcM(%sh}Ail zA@{c&IeWF2F)&VN_0;6Ca9IvM9}%YSBJJqGS%#3-qCvxs7qTDOznrgAgz7Sr@t4jP zo`b3aS^BY={i~@(F8#8EPjxy})I)-*ts6nVdp7j7bv3rVQJ~k23)#b>;mA944u1@M z2ATd8kXSsAIsEJ)rgK&Az9s2cw<;R96jZ?LQ_o@6emN>9Gm$u_M`HN=PHdF)z-We9;d7Xc*wrWksB3DiYoQCF5WJx1jl#TTjo<1EZc-%!ZOvoJO^PIq4)pv=7&V zU+HI_SC%r3=oVom{I#fyuok%3bM?F3-k5(P7|c11T5@~=tXx%weggBDa&{^-o;{9+ zaqh)#|IT8Z%?zes^91^;bP+Gsua!A@wi|TzIN^>Zm(YFuSN0lLZ!E|$CQtgW!-rB& zu)843dmO1oI>PfX!cm!=R+fMn4jq`E^^ZM#^UjG_khUxp5~sHS zTdm!pLA)6=_Gps+MQ32Ur64suX-dr&nbO`LKcP=Vn^r#3rF(Z}LA>BPxcXOzyiiAo z{=oxjxx1{ps3`U2#e-$I6Uvt=vtZEd5^i`3zg{eb3}H?;b37m1=QrcEz`b)fmin{VOH>RXu7f!?|d-8o+IO!#PTjw({N`hnm8ZE#V*`nDT!xd*5M$x zzcQOK3L*1uhx<6sRKu#^D~8q#>u!WfyE@pcAV8a!kTi-riewWm=C84A=li5 zyuUk+e5=TYGoiLL?YKV4-0=?mw#d=fZ}q9f2W7ndSDi?#KEVp)n!roPD)iyjm_G_( z=+s}&Z%}H7lS{9GXV`dHXjn&;R(~vD(`W>ju!orEQ8~yFMC_855{~Sz#gdy^uQr`dLiT*#%0RU!JqFSi(dkr zs@vJ;N3wC@#-*H}`2yzn)InFR1l?epg7XeA*j*z|%uUXN>mDKUy-1&2(zPcOPrAU? zp*2`qkqn!AVwubbN;Kr4DzTIjroBlq(Esf&9Ha}`0`5Gz+%pThE1hA2#6P_7LY#gs zl!Q0<1I)Gx5%0Wh=)=AhG|r!wEKl9y#sk^Qt#9M1amtCK zOvFTGYR&Z{Mov$K5zdQyU|0x6?kUjIuXIRLas>vjaK?Wt1JUyRcq+8jiiVxnMTb+b zip$^Wp!J3>G<*~dZ!2o>g0m{D{VPjmZ>?j$xv0|RPj@0Lm7|>+Qsh)8LG$kdG&=nc zidQ_~d;hbbJ1m8WR?{Hdr|Pm~z%OM}nLx1!8kLDCqgMt^+n!zlqCaLsE0 zbN56jWbKis(ytTQcKagU@_RQi#^O2Z`nAJ&M?ol7>V)uDlL>LNr$yYkX;A$v20WX> zt_fJrR25p_+q@M}qb^IMhBI-=oOQTT{t?zE^s(W8uk#=MZA7`Hp)h+?ka%!D-E7`R z)<4pYWW6kBiXVN4B`;N>?*gZDYwN_Xeb-^wUJ*Y0$nxl-iLHbJ70e+AMu&ciDwpTM`8Mfg16DAU$E0zaDNs4l;a zRq#rHpIMUdDMXj99hRb|x2s^qI*uu4Do#2!wli<)F5ygj?PBHfyKubKo(!Z2vR77o z$JYxQ;b`+Jm@9Y$X74c|jrzvq%#r6%cO@Lcf;HK3uF~LDCPs^xL*-W@^Y%C{VkA%{ucy_tFKJcSnlYtrDgu9S?!Bmo>?MBS_O$|H7|q z7mW3EKwpRwDH( z!npB(Az3;ukKHbJi{0jygBx{vVd?j3?pz;3bUS_m;1qc1)g5bv_RLJzVW5 zGzvBbN5ZK4Ib0)H&n)`z9Nt-dhx@*7A;swz`&@7W$<@-QqgsMg{GBVKE$@oG{gX&V z*Ehybmh&l`(Pd>NkAqH_2)nIlfSG?tg>IPg0S1d7Mfa=|!g8aORp3FF3MnWQ~RWVcs3JoT=^%EeYZsaI#vME^Ug zo@hWHt`DYvpcAG=N3dmM*HHC|0FzWBNj2k+fPZC#3z=~hXreBe*)2s=Y}E1UTVp0U zDw`cJ-U9KP{g`h3JlHBaj((QbBdHS8`D?7DN$iPSc))uM^F_2td;LO;%=`=TXqC?^jgu;p#A)hPd!m9I33HRY{+!gQJBQ(0OxRwq895D?AulQP^tD5oacOs z!PlShyLSJEk6kV7hqqEpk;_Z?KBhwU-8}=ovIl@is^GStEj8zAP(9r~&=%tedb);` zClSx96FtwqKhT3Z3$Fn0hbP<(x&}6767=Jeems!ijEYBP>A9SbQ0`<-ZpCsN-Q#!Q zcv&1&`AIW79=LFv%xIX}`U4XVBu$^0h07i#S1uQrcDlR8HBHLIc!cyC-j{Ma+h+Lq74X5Da@ zRxM4w`N-0QGe!iGQh?mQj`Mpbb9w?#So}a7Iy4fP874#6a#oTo-EV~@vK6rP10QEL zCxH1-IZB!jvZe>Zpdiv0_XZcE-&rf_5qk>Ss5j@8(4$Aven6y`4xRL9DxOw7%59t~ z+5TKt=4{4YrhfTZa6TH^LiyOY{W2zJ z`@lP~PY||$63tyXo0&N`lQ(fK%>MX;?I?)B;W1^VpizM1GIil#@ppK$qM1q5RikOzS-83nA+{rl(G9bp z0XvIuhOr&FX0aOi>Tki7(>2(xQ)2`8P3Y~^jH@1JF&3o?INfU>o7Zl^+6?NGj!cd( zn|}gQ{I6hXSO>O!`2)v_jH%B{bMkAE1d(zTA@TY)kaqeVt|%M8ad-a0m$2q%1M&{PVjo*?gRmxK9qcv89k>(m|AZz5N2yuQqRE zYQoPw(>dRe0%gq_;mDQ`a7$K)xavGX?{Vt*^@A{%Zzo8v&a@(5d=-f3!SN8)6at@* z|6u~x&MAH|Pm>uu;>hV#r((FE9SP{SA@$W}c-2|}Zwi=_lK49?O(+JH_Uco*csv{s z6r?{xud+vL&G5FwWa_3TNsHdJK!Vpd-h~yMUzB4*eM`Loo}aafd)hMDh9?urog-mP zjl!eic>@O-uXmdCNP`+~F}EfE&Xw}qvP_6{(M7zxU4yPALyXArNX%cUM(2d3qRiki z;Qfun)R`>m-qD~f^@R|hXF1uK(;IB|M^nGP*Jt;P%1dJeuRrsUwiPDp6E2lqxf7T*Vsug&>S zw!NPS3YTuNJ!i^_Crs^z#82bM*X7q>id7!^^>^^k%Ink6MeV38c#GXAmj>D^J~3+) zq)CI7AxS@DK>tRnQ-}I=OimY}A+D{sVT}YfWZZ?>=3I^{jw5x)hH+{9Wp=~GUyzd> z569fa>8w}t5sG!0ZN?v=U)+vn@;jI-RpnSY=@84;_QRbc({OslV!S@WKypwmd+=iu zI0R25!&Uk$Yn=>%4`p!Uek-~%RD!13_F~{YLpuFyFW*nagan&$+}Qn=thMEMI$Q26 zsBPjnFWT1FzRaGKWY|Nf&j)tpT!uN&@fbquI9{&bEui=kz7~H)op-Cycab~1*&Tz= zw40%|+XnlcKEndfFQ_|Nn^+7f(GjlBQyCVEZwmEkl#C&DZh8u>8XWg6`USe3aKx_#hy5N*5EhN+)Dm`&AlVDU5?dMx@mtmx68F1bUD#X3{Q(bf{ccnC(S%Aj|o9#n#q0tzYT4KaUx1|+snK7VrDIT{KRQ7UFGPnjDKLBx0~-)n+bEaFNJ;0v*61F zSvte;F>`osI%@RU5T)=`&^gtLFZiy|_xT6DXeOu@qC`F_dt;)N37y{Xn{Sb*L?VxH zYu28{ps;=|G7F;c*N%zQb5}Cz@xOq^23NdY`vqOXxA47u1gL?zE$bfFjLRb}$l?>1 zc(>p9K+A+MxEpvD`1=n+P?sI*yB}tySBueG^;aN5UlZl!1j*M!k6?beGDM4&!RlPIe$^U_?RKwJ0d{M|2dFnAJ1Tn%K-j}5~kB*{V>pa4?N~e z)99S7kV=|(s}!7Z{k6T!`Ue>p>s^TF%4{HFR|&=k0UlWJ02Vlk!xEVq=yiw(w3R2% z#7Y>G0Zk&}8h{5{&9Uai8~F3&9fVJPhfVdHQDm7388+1?lj={x%p#86{mX|n&*OaD z9u>@%NNMs_+KRf&bOpJVrC8P=1Iv{*p;Tf6Tyzp-^2*ZTdq^>Fb@Ps*O;+_-*7yOh zwl4sm!maRdiVdBTW<^WaMLV6!wWsYRPg#{Ox7gk#&FH>4id~&%O4!}6;GUl)-9C2= zdT+{*bw}o7aC=LrWks*?$JoQViu6&k8Y%w9MV&|Io;I_&e-fBw{o2F4l zA-x-S+spy+^a^~OIEW)QJvi!n1P^pQ!}A_m^htv?wSM*)+vW+9+{LEk*afZ@>l)9h z2p1O@%3VQ&_ru6)#k)>G@h})aSb(|S+QvqH@VuM06kSt!7)n_w!hcLl#DjUC+{BwaURH+ z?;p@?B!+EP`+;IJMB~L3F>#pQg3aXD;Eny#T9SP7jBXz{6=&VAM}yEdj(=wgIe))k<&r99*D*DcaGzt;zPJN%HB-PL$$%ET z(j`)dPqPmeG~v;p3T)bcjom%@8nC)1JtqwDC1A z*XSxfHrnk}nwQQzi?hI+Gc9SrEfW&;s}RpS_wuvHhCa|APxxF$kNB!*xIJ44zTN+bJ7n76$X;{0 z+dCGdB`!cwuO4&D!It)|)Wlnt8!>Q`1G7MKC%p4hCx6^@>Am7;)U9!alnLjs9$vHO zGj!>}{rcpniZJb~y#%36PkA;RlYD)V4^Lb^0^a*yhtdcMvVrqzGljP}Em9VqGmwVr ztY^Fx&R1Zk$xY}Hw4vSHzN~NS2dDEQxkyin(&F&fsL+(_vb|WJmaFK~ts(Nnu=*7y zMUJQQghp6#qj6O1RRxT>n;@TCvz{(B!KJ%Zsle|1ZcK+UpXG}9^l_Rkp@Lnkubu&ly*z?zL!RK{8+)MqbR+txdcmip%P_6s61&@) z^J~BR2f5;duxeQcwv_F|YM(;zo>9+eO+N(-EegR#M4XO2+rWALw8>+6O_IAihcSG? zab^+~$W602_N0#?apZD{emsq20)FWbk17K?dR>4@&Wh!7B95@&okUE9Fr5DoL0e{(0JyB&+Z zYL+xlXb||jt!b@lr&yGglz^K+3bo^vNJXH!gCgVHK|KW_P%tNS7xe2Ml5xDa65=^mt z3A00b;feBIuo=63D=8Q^lCEuOUxP1Z?-;D$7uZcMB!Yf$(*OFY5Oo6^E74YC# z51)3X;B{pQ+L;@p}l zOk7)t1KT=5N`%WZUQq}#l^X2j!e;i0?N?T$WCYhc$&kk~QuOVTpEx{02FwNy;k1?; zXgiT(s!|=g{r+oc=guf;HecZCmg|_Q&45m?5PiULFqfY1fK17aQ1h}L-5ow6pWhGR zMOBR1t29=f--lMg?@{yA2pkRd<=yt*0;@hf!0u;1*sozBOr?k%X*-tA?yK@fO_gk% zesnzDT*zra3_6+hRG!N>oQPF1g+*6StI;P;M&z;49)8gJ`HXX4KmL(#2Qxn{cz8qw z=9KAkyl!hUzfy|0?AK#nr^La^r4rcEFo07Q9^pxMePVlPI9^$zN}Lpz;#xl|`YvGr z2Iu>-^%h_Lv`BCU{;AU%=Bx<@eV1>;=Uo~ z!ubnW*es9gPLJ?D`;^^1)qxrfB)}7&&8*0!F2-w>D7BVN#D<0Ine!uQ@I-n7#6`Q~ zhHrADoPQB#Y1xzNp*uJlAxfX;i(>xKPZ;qw2fRZ6vh3os{A7b(_}F$7S|E`TnxRGm zlhaXG^A>cC%;nKN_raL|g|}*}0Lht959d>w8NSOLoKcqnvF2;wS4tZ5>UtSOy*DIR zTkPqgmM|u^4T7s$G0N)Pty!*F~L1l9@Db_o$W$;W`^8yb;? z+6Az0i4z=FoJi9aBm%AY%*t$#W880i#Jjog@X@uyaQIIxe(QCIcj-TPOWfyz;H0nc zWBeUf%I6`w>Hv2}FA}3w!xBthRWdvb*a0OW+0gne05)_?#791caAcbWl05 z&-~+9!_|3CfA3{~YrequA+c{Ok9NrUt4S_hng{_oKXMg6YkOw-J^mzMD+~gdKMdOY`*;Nsu zZIg-jH`Tx$eKFW2=?}}fObJyTM;Ox;AouoWq2k*_HhShU?%&dY^T%s|^C>TUevEsr z_2ub#uJ$h^^$Dz&rn5Ja+EHb@7@fw|c?Yf?gem=e*yP3a??2vU{=5iAyTo4ASPjxs3mk}3Db_UPw=J@AFG|9N2RJ74M%Cp=30WU6Xf$e&K;DlK_tCii3 z@p92PSzVfxMR1XrU|(n&OI|``fV2?m zqzmA!izi-gJPs!wd!k$P5MFveSy!uYV_eTDSE|1AAReLIjyx3iRX-~LrpeRXJ{!3@jro%XD#zYzm)SXb@EjU zMCk0UJ9xt+7KeHas8pO74b6Um0v%r&9o2khYI7vkh3S#_y|aP0RfS!9z@CPL+L3!J zTVUpgVeofXBy-mMg)34z)GBi|w1;v1s@4`5v!98LBQj)eVJ*noDS)J37~WeK!%o>X zp6Y5S)A;yA_JD&RRZ{o^-Rl*I;`}oFsyPNI%BUD7Bc z2p?8(wQ zAr%=);UC>LjMk1H@w%HCn|oS>Hvg0-i@(fZ8ogcc)|Lcx->6Au3U7uI-DgaY_dbpf zwE?;pE7N58M1J;sF2^QDo;>}jKoeZwV9}9NOh=JAJ(Z_N*LV-Wn!@iG{_PyBcH*>N z)~n&~+B=|DV?y#`B*^`Jc66GF02!9s368O^S+Ob=Qc|ixx5{v58xK|5>DL2~#ja!T z5o><=h5}Zn+MChec^JPhTZEf-#ek}a0Q(H7V3eE%R+9lXyDnM^K zB(u)m9OI|imC=2tg~2inaBaCHkvwirVpq%pqrB&!s2c)`Cj{u>>+LwUK^ZTeYd}8v zg7@xp;HA%|WEmKPc>FKMxV{>UraKUyN=@S5z@WIT4H0;rhl^$Gz#>GA9P|{!172m| z8?8^wucxCy#4{*Rl_0y{n1brfo7g0kiSzbcWR#`v!_tJGjFfjWNJ=i`U9ZW-gJ)yd zMLr_rB~-bD?gBQ}qyrqqEODKRFzLBHp2q+7W@I-ep@zf@JX`k?95qgZ|0XFo(HVsU z&i!Chz-K??9l-ld`@um&odn-F1M2)B%qh+R#bb2y}1lpsxRX!ZXX(Wc^o}j zHi1-T8R9>kMSRmmhPb+0gY5V$PG6?igV|Ur>wP|jJ#^BXtkscZ)_pVOd?ZWwqP|j? z@l%^91RQ~`)FU{3rxwl`{ej~bijdI6Qk-ciMwf9KM8^RovZIY-8~<1X{K!c3b3TUa zAD)76`+ivNJqTOQJ2EqpMzH92DzjZi3_DY;iK4F zkd2BvYw)Bl$6B=!V;ov^$b+`Es8YQH8U_XFwuUAUKWs$=b)7&^(V9GcB16X?{{RZr zqEz{TC_VlD8ipM$hm2Wi_)L8_tDDO48)vhO{I-5}kJuad`jYdM|G0*IJbm)-&}a7M zw(D?HJ_sC4?n14=Jv=OPoVQwQ6?|BuhS_#=U|#BFc4yrM_5`OFuLytY@^k)WtiRsI zXl+=CHPbkTzF;{s%ZSUXyAuj$$InHB8&E$|k1UgU%g%rZx9THV@- zLKjQ0{K*(@Iif`mX*Xb+MhUY!(T>RSvhd%yiS$f=CVq02p&r6Q{C1AFR8V9|7ylgv z{zP%oGipkwcEoX>_G0v}eg-ai;Se*bN@p$Rc)6`M8w z-njtWWc0zfEfUwfl%Y*;wIFZ9c)I7tUlhF=kB(UqFmQ3YXgxvmHc4h_Rt{v0lscMJvg#quOnq)BVFGWE`h6Yrk_ zIo%*irYcL*htZdDnA=y{WUA4LF9k_wY$W(Dv>`zmm6%(kjGc1VP{jKRtg}#ti&q|E z>52&4@p}>xl)njb)*QR3fdywy`^(&o!;Mc?V1nKdGCfA*38&{i&lr*ETYAxGxhmp)oE8+;g1@}?-=M}z};yehRt4U<$ zKjLlqVo7u_pF_V4BPy>bNj=7Q;gF^Zm^l5$)PU1$V-8neZK{IJ+Oy76Wg>}iQ(&b@M=1-;cc^m-S*M(p47iwKadml+EIOiR1 zm&<_@6{XBtv1FLIZ3Sx~VMi{V@?g?i$C$(oQl$Gq35YIqpw)LXpex!0r%%y?aZipw z^7G%UZlxTlxMxKjy%O+hLvr!vUEbi>7qj6qWQDrn|dppaJ`tmXXJ zt`SjCuYU)xb>HG&InQZIy`J)JoiigR(vxvOYygd(XF~Np1M(kzZg0$Yl;X0q1cjA} zL!de_78M|WR(xl^aQlc(8+{rS;sF=$+Y#^CSk8ukZm68!SxZNBII$;ymoMOR;2l^(VQ=PBfOq#L6zDsu$y%Iu+e4&st?!WrT0#F z^r#~3&VPdi+gHK*OZK!XQH{T=O@(8BbMx_~_dJ=sHM~paNw|gczDP^dqU#a?suiGz z#HQrjQW#}+Bf=Qc9>7~6hnPcfc*r~G`@TZC@-TH;&-*GG-#f2~V zFMBm0{QoQe& zuksrrf)>MTX*uH0{T->N09j#MFo`UMcqSVM)v~a-SdGXZz7Hqg-9f{dSD-nc&jXzn z+-rFo)~Tf9>?a2?F-RV!-qE7Pc!XnayyyE2rGx4cQ^s7J(_em&rR_Pgv}Nfj{C8KG zt}LF*j=XHexI=Q}!~t0 zOm4O%QM{l_{5S@O@sKeMDk)%xXb(GGW&+*T&awM%)q|pVInK|PA(?tQd)It|(Exd(({4$g8m8i~NfpE!%aI#hcOlec32yw|#Dre-;J4i_$E7U-=w^SO zNe~xGJi_IEbNYnog0|%8L?hH_5kt1zmd>@g%1)D(B=VE$P*8O|5%{h{A1&4)qyF~v z^AcUU@r5Pjt?2_@H9`7%{UeOBupuEgYCy|Li{2aj$rJUDXD&Ut3@Wc~L&-NkoIF#O z%O^Vv*Yf;vSNvi0E7oH=DjflTaQ%(`I-C`CgX8dwr@Y%)7?pV+pI#NDx>x#L%r%C= z=I#I!HbD|MIxK;{+Y?A;B=7|TK&+{KirtfU zaXFYABRTyu9G|aGZA`dYD0XuBYGb(UgFP|qP$bvJ8Il{XT5)e5%Oq#$&>g8lRBfsO zJ5fIazKS@rja_S)z$_n(qyOOIG&yockjp*(R0{KQUSn#GE0Rs$83(bSC@yA7my3;O z|73UKX0E1tdN!AmoqZZL;w@?P-brN3p5;(^;TA4>_ZY3u>d|XToTezlmL8g}Kzla| z;pSi+8W2C8I9S|(kOV^x_oI%__FrSh@`R~{N)G08J{bL*N5TEfF*Kd)K%a7a*PY(y zpl{HaH0_rl53O&&TFtlU{FTp~?l+)6UFPF`?`q!Z)k4H4@+5BRR3Wv4noMzLA?iEq zz|#rau}AU(25mDXM6QL^<8q>+@5&L4zmXtR^Z`zBdQTx81Nb$^lujNq0M7#gbc9`j z?Pq`Cv%4!`@rfM%`p=J0uR#nRk&CeI)^{k`vA6r>I9~4g)B)q@+(vUM3w|$ z=p+j|7B~v??bqW=3(n7TN1j{{>_*c%Wy)B+plKXs)K`1qws9G zF!}Z2B?JiC(rmfYuvIn#PAb`ulIe!TM{ENaICtT`yew9Tx}xE>bX;jy0G^HZMIpY` zAg(PR}yeM1~}u;r7m)Ip%K% zqC*zvg}pEeTj($LThKGS+WZzZBxi#3rQBj=;iI@D_yZnSk$pz41c zVj=hI{~BUfaA42|U+;C?XXYE=?;Q~QKSzmzb~RD%?*Ck}|80~v|7VnqdxO0LgEo5y z{m+}7+k5bTuOd?a?dGLI|NAZcum86HX9nmxk?S8+ofn!>bOK`mHPn$)9;!|O7DlMI zA+;5{PUIBFi{jb<4wz0HVU3&&WKgtDf@{T|Km)wl*mR&e82HAW{QbG z=2&K$rYT;5&B9C+T?1Wjc&AiAML<1@hn+b;c6N65%$#4%eDlpa^ZfYU=Y8Mjd!JiB z__%BB0qp?*09r7Q(?0?LDo)CHX}7BKR-84m2LLq0u+yjfQcHxR8GZ#)mCj{zB6ZLA zk9kjEcVQ2TxQ2qH@2;ah)W*2Zb$N{?`kwpJP-B-sLwfZg`)uAbH9Zrv4z z9f|jE`;PcqEKIDpuam%X(NO)EA?<#Nqim8MngNxg85|4+Srbnc&%T!4`bY@}MAZcg z4*(F$yS2Y`W8#jhs%Py#eh80K3E%O>Zv8MPZ56fG|AiQuy+i)?5evPX^mH$e0j42x z++?hUHl8JnuCtSp(?xDBN3`ye7*XvF2SK`4#?elxl8KH`vInVUap=~7^jJzusW+>F zuE5e8l6p0oU8&&B`Oz_*sTr9CyjAoE3dOV&Ado0F)M2d;ye?UDNc?z*herQ zX|aJAGOE(~MV(Xj2Ara`zO2z%HQznJ_T@n~L_?Y!pQEX#8a3njF&Oz!Gx{Dv$g+#EEfEc=a~HB$dwNCiP*1dqj)t{zow#BD^nb;SyfnCn>$Sh3a*d1 zbC1cazw=9qqOKnC)=e(zaUroOR)}S!eqoPJ+Jd)mH2a;`neS29nYuLnk*y|IwS6j9 zD>!)T>DZyEA}j0gh=g_AOU?5@Vk8C$sS?~cfQQtF7&)X>q7cK~yq@!uhqvw1+1kjZ zzL(0FB6({5Q{d|6yEgnAGjff&F<&qawKSY8nAK4)r=K*7?0U7jtEx*yfdz{<7E2+T zz#1dcgY@`6UhS1LmBsX&Q?U3P*+34jT@Nj)CbAszT1T}db5vRcetzL!d~D#1+^cqd zE$B^v85%8V*=M{l%7xg?(i@K2Q83Lzpj;s+X)DRJT6pY~3f(%8Jn-pSGw;FTaaNmj zyivRX-mz4OtCllaMdvav?K(0lLYAsR4VubgfnUvt#S6{d#Oz$!-hI^@D+|#VZ(`Hd zQrppiH+Rw)FSv8U0?+MN>tk9Op%;qg_YQFet!I{r9KXTg7>D4vxKKeN2wq}FtnZER zu6Xe*_T6C|i;<-W8!(`aCyud9w>@&iKjUFJV!sWWY=IR=Bb0g)({c923D)Lgd92xB z#`DJC6$fSL^41OcVhp~yMqnx~5LvKJH%8B5orv9RszpW5i5>zZyoaP$VLLy*RTf)- zfy42Tgy6D#g`~{TF*Gop76tcWtdVSD64D0`u*%)?KsN5lOW{pRtLQ&hCDtC0m z#&Kf8mPLD?#FElDc+=abJwEKr^?&P5wYui&@FeVq#kNnQS4z08y8b-TL(B1Z-Wj#9 zdl|uGNf*CnZB^32)2K0hmJ@YAAzk+UG*Ae(Mcv5Fn`l=FO=EbsL`oXpH-Pg&O|1VXc)x!weUp}7Tp|K1^p7MFDD*WZ}TM+6-{ zrwc~45&O&A^YYFqkK;!bHC0t3W4SFk$(mHtJ!^}2WO3-wghk28wy!TtNZMq>cgoxy z_iJnajQ_+FiW+0}uSQ2hYhJnM>UF*I06|edoOxfX@4mNL481nfSC%V7o|KiedL|}% zxxTfAvnfzJyTqn`kbUyv^Tox^{QPV@Nb2G0x*mZc^ylnfO4Gdy?e9N0W@F&9Nv85? zCO^)x)1J8JqC--{6U5_k;MeR%_2{ct>*`npFx6jd6ieg#U%a@|6MCv(NSG3ki4^#t z*Cr1m1&ZZQPb25%E(hNw0>^PjSJO&-B3&pA-Xv?Uk~KW!*x||RO-&BGu#k{ss)L-L z;7&v3w3ZNh^@`YC~v^be}F|3wit|(CF>pOl$;z{Yl;|u ztNE?=^tI+|*M6g-jKp@fDdb@0P`Zn=GXcWoa`$$|!M(N>YV+Q4JQMb1$xEyrP*?Yo z7LUvAp=@R2a86GL0z&8yQ3(k@Ia3WF2?(sBs<`+noNXs=3kb#}cldVRC3~K^O@KT< zZ%TH|xGC+Z{6&+9U4DDLz?hiYOB)gQa;U$TcXP({$##4?cFPvdW)Z~S0_ljn8of3> zWy4nIx$)Zyj7#=77ziAH?Aony;8@_aaJa$TgblV$e2`>$;skR31OD;j3z?ZN_4OR} z%^vPhVZLN>Y4X;&b2iC~sWOl#SwK!$U$^|$6x9vAUtIiQ=O*vzqw2a$=wDrB;L5;vLC~BOv}RzjPFiUJ3UyV=5B7p>BD>g`Nr<{ z%cpr89ZHDfSe@^y_99G(R|TZd;;R#8V}kgDx-2O5*DAS^4lKhM&_dc5bXY@fbE|^J zHkX!UlTBOGwwvf=CCdeG`BC9tA#hBKc%Yf0^GwuQfwzCCjj0t=#c2W0zhr82ZX!F`^Np};hWe^s?PVn8SKdV0 zXBD~8WF^H+YiIV1Wz@tiSf&g35`j`|S?Q-TcsYiR9!BoT`t4X}kCkbOIQHFc3rWMH zj7&J_*hBG@{n*wtb+}ZmTUIjJgLf@rtv;{S-o`y5g2z>PUiVb(ln?oN`K)OJ(j~g~ z=J+*kStEjq3wfEH{{7PYNjF}jN+4xx;jm*qex3+Juc}*hYYjvZy1s>MmP!({U=ize z7N`!j!Kr7d$2=gzVX~)onWan5#a^m|r`nvahk6Jo7s46(1Oox?*4x|#`@p7EY~XIb zoT6n_(qcC}+Ew{SB+aOd*`nz_IG#m)p`muA7sx6Ak_Q5)1w72#ivslZ=oH>Vn~1Dc zUItn9oji@b9>tpO3X|SO?VBEqH-Jyx5`3qY&*i8`&hA+FpaoRAeWUr@i6z6)g>Jei zP|E}*doh#y!I%bV!zuC|qT_vE)$OnwQSw~7H&!ffYff&@nL{LYD4aTC2hfk>#kYu;tc60`ih3>PV$mlx<0Gm?uwg4!`1G`rXkr zTgtb_b9$Nvf*Z16C$!RBq>`!p97?q>^Capx2aSjvxlDp?vAH0R?XZ>LiMsl+H$4zI zaes|a%YOw%xNxo%Ho+eq+f1_{nNPY4_|m?+dsr_1wm&6({MNTjE3%B86*Ti2@3qYo zIg)SVB=J5sUt^I3hf3XqNhD@Z(JM=Xsc&dV+{t*UGDAf` zDmUj`ov0q6PWE{48uaN{!H28j$AEd&6^ldWvEx$umcvZZW%;d9nJWPo{>!od4G;W3 zgbH%zP1Zl>#W0NJmd`{z@nOej*ct_)j-MHzEQ@zU)eZ^!ZKmIZD1rXXU4M;Pof0#3 z4PyJr)ddSV_>^6Ta;<)?W;m^hioOCi@I5G^)jlzM9pK|rO{HEK>|R;1V77*TuC@Tr zwehagQ)XsPL<|@p5Xi5SlZ=o~Zy=Ca>OmT#S^WGIcl78Y2X`2W$;4zJk!xw zCW1kNwj>g{+|7?3nFUy+g9*I$N$bKqy;Cgn$Px6~_f@GgU2e$jw^A-+y^ z-RbvCxWw}H)vA#gmxHhgs0fq&`zuiG5IsGDmRWe>xi7yZ%n!7x{C=H&gE>mQ>x~f% zbTiX)%vfpZjF0tU&CmL;htEiG6?FO(>e;Kq?b7e`W399RVsiG<6Q zvI>@j@STPJm0p^K-JNST20A+LcNysGKd@P?rPGs?)A#9y!WX~vY~XWoa-!7N1Lfsc zSp^Ld_ML1-BEJURZLMWqb%<9Qrm3Q0fj)i_JyDdLT(Yv#DTnkWVt_!Egyrn=z-E{32l<0h`I8SLAKWufn&qn2 zlj4ssHYc|8rSg z?QxJ-&7U@Sh(9~0cxh)sK18u4l4xl9XPxoS0sNEP`5(hDp~=8ur|){v+JU4EJqU1f L_He2>5_IhkKy85? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_2.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd3281c7c398172e361683a9701cd4d6a39853f GIT binary patch literal 2707 zcmdT`do&Xa8=sU?$?Hu~6otHqy?>ls%$o(zjbJ^T) z+f4R0VH>$EjJ1SZHZ+$p<8!`$zSBAH`TqI-`QCG$^PK0L-}A@woacFd&oAYwBSdEZ z@%;b*K*rA2+8F?lu-b_i_wCy8TTtx_0Kk5CJL`+rqH}p{^tBBCT^&ow5*PQ#+julS z$Esgp)I=Nu|3eq5jq|egS_o|^`o%iq(eFt~(n|ivY}Ng{as0BNe`c=@);+SR{Ll_M z;NLlMU+};|&k(&_IqWy$>{?q8YZ*rt&;?8qUAThEO`MP$(E14I^&_$s0EJWg6o0zh z7JqJ+)FZibs@QmmJG&3=Q}eb`l#p!yH`I3I#9|t#hu$3>`C#hJ0`s?OP7GP}2zo>P zhS_g}PMSs-mq#1l%G*IFkmj1;q42bm&oCYu1$nl{Rk1|2P-;+U~# zV70sNm8!WE>E>Rz#9+LRcKJpJeI6VYu$i&vg~|fFI{$o3cp&ROy$b(WW#Kn0Q}67E zdB6wRjP*@na!0Y=yh@Ith!>}xno=6IvA*x%BBp5?CiV$P%U)*LRg-}HvP^`W^>*&~6 zb*9Ky%J{orX~}?AvE_~C{}IcYkrB^16nu)~+p8(~T^@^ZfwNrHZ6IG6Pu!m#8{A~2 zR=kT(T7fG}nJF{LqO{#c6>$#(Z*+eUphrrIi&AX4`vHaz|(W&GV>LOi^dR-ZHQhanl_M4 z6c_jKKEeE@0Z^BFF{B20f&h(*U0KY!F|DVSs|YUu3H@hS-9s=#nsp?MxSGhD-gc3s z_yxYKSGm#A4ZlTugCN}l?*{RVzZUxw(lG{zBK@g6N|?R!AQjU}#w?~^sX|2$eAZSt z%W0Vvf8itR9n*N^2x=gZ>F%4Foc!1m2`fZ+67Y>B4A;r<^Lfl8N*0E+vmT9=BOFzh z*I`AF>L#+<1k@yDW#B!>X`^L1Nm50Z+59D!JuT31o6$BxXr5_4zhvGrniTB2jS;2a zI`WOO{dwu`nv|5Vp{b#B2x>n~AtHFVIDA(se9!!3u+qk#75$T$#yODW9FJ=z$~48~ z{+ZGU_rqN}+Ft1s9zAHTp&UG8d$Ico9#%;XdI!#X&6gOdtnDsEK^vKu$J};>)nb%ZTM|xS_`!kL8BCAv-2Ny<--I0See=Tp;F|nn zK^UQOZ`D>lCfTbbY}j=~jg+d7vv&(xMix9kp+;Jw4uWXQvoQjkEQNeYRyIA@P8_k- zu=M6j&1;H#JbVAVv-2vVT4 za4meaRDughFZk8gtTr1=TjrrWqTOt*s2h?CvSz5+x)oBqY5MKYNFT9&%k&VeSOqOo>f*ygrG$9x>~BH>P;X7+vvc*R$55HVD_x_%BFP_G@*Ml}UXXN%XBe{_FBCo# zt@7%nh=`Cdtd`brbI`|JmDm%N()@PnsJh1crqDB*mU1V@r+mmLE7+#jHx(y0;a1so zdw9f@NI1agi34hAoH7(Ru*mP;o!T*l<@oXO@#12la+-DyqkkrnKkPEg<6)%rlP(EqlWBT+mg* z^XGXSOAVtshx<#$zI0~Zs7J#+f0>hJQR*h^DOp)XZ!XLHqNmsLc0nKSy*oB-C%ves z(hJ;?9yioIx7Sz;NV%}WC!$-wcd^k6WT0kX3&_pMN&il}Z@Q&L(TFyzk#qfO6?c9+ zVZ^(U<1Z87_jY9tY@{{;d~t^S^tCD1nN(jY^XXCnl^dShQ{I3Q;Fcyzj{BZIeR969 zm>jP?2zMu)psm0)X?D0l=N>yrkRFHia8|(1r&W8i9~w)74Cbbzyee55ZbHS z79gmykQJ<~)Jm0?mEoXq)X~unZn*prSn;iagC5`D)|U@4nfb0xPNCSFm$Lg=I zFHBCgI#ZFd^(S`*)`FP3?%II-dhQ;<8nNol literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_3.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_0_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8770b85f0426c5c79773fa1144830f4cfadd072b GIT binary patch literal 2740 zcmds(c`zG@9>>$#qE&3EqqOYSE3Xt)O|3J!T1V?_sUwJ1kz!Ftf=DPTrAV!oI8sHm zR-~?qBPDTcEaGa2khlqTB+j^sHS_*>^Im86{k!x2`OR z+z9{xAZlTL;|>6D#Q3mZ7Cw4d_ia=S0Duz+iyPPN!*iF|NPBy)qirkb35O#$``Ok1 z2mzj;&0`nJFIq(O7l(>Kti646NUBK^7p_C!)=nhwveTT}y}5RMt3_RdS5!TKZWbn8 z&E^EpZMp1YG@1elh_}pX_1#J5&6er+7{F^o+B7$xG_9Oic=-STt#n%y0N5hFJ1MN> zVJv$@pjlYB3!%Q zHos0Zq~_JxNv;Ug)11ruhQ-8AV)ckN&=!hPn~k!S>mAf8%Qv0n&NA?F5{D@ARM8=p z-lMY+1yIOlcCpO3zHT)c}ohz{Iok=65JV;|>_~NEai*L7XldSf}(~Ys*64@8)1z}Yd&|XKgjub73f<~Z( z+_dgN*6iT4q5f613m;5Kcpa(e`B6i4BiR1u*!{#cQ=d!OFQdwULp_7DaU;73OgL&H z$!bc1OBBRp=9QF&S}G30-8mE$WwOhfk0|uukII-#7kST#pi;vbR~Cm$OZXY%5U%Q2?$~8;L*_tXUv?r zr)6g9#0qGi-`U2JmXr!eu2bVA#1cSf?+4i$*L0tvV);7puTZdJzRJnkm*KcIr7(7& z*nr5gn|5?4IX>3{Gv)}Q@Nxpxs1G^Fh}tNx?q>triblJurhZDi6hhD2R-A4=B6J!H zg6l`Ew-Rx?igO!?g+2~Qo9X2$eqlDUF(uTi>cvXp=DPf=DWe2z@p4}rZ;MO1g{A{h zoQ{zqA;Jhu=K*x5X9pA0#ohVlJn*=L@YdkwjjuQ`F_RGS{w<7jP*79&r1PuKIAn|-GFr<- z1E961%P0WfXXK~<6)Jy`H-AfM8>`2uf~&YKnoyofF)kKyb0_s=%C+7V&rLl?3fI~$ z@)=?C)0Of6`%FBzF{+R9#1Jh`23>sgM^hZcDb9^F>Ysd3eWc2NNDUOBKsf%opiqha zS%R%Yrz@tUrW!yr6>Mb=q<4J$hu68o)oLNZ(!0Atr==TlX=w%sekT_JuJ)yuIOIUq zV^AoRmlpzOjqc(s1=oq4{pZ@+8VMkjs+Xj;?Cc)lHM%^3+1?eB^(-g|Agy+kmz1dX zs4Z1^n%%uKi5BO9eEY`>&BRGO!^rhz0dcm2OZ_a(t+_?%_AR2kCx3BhsD2}i;SsUD zvc7I6DIq8(4~w?2SUHAFd3;7`yy|5J_qaGFXw1@T50B}wxpc?7J8Fl|;ze=mo{rRy z;L^2QGXkyxM zfUNv89XKrnI;CW1pXKs*u*UDW*g?-E69IqGI zWyLtcs(E~61|qko zT^W4fax3-+dBrE{KO9ZR%H3Ajr>qxv4*U;@T)ihTp{wGd>X4EV{;=c|SEA!=4gEfB zn~TrrR#zXEa9LPKdw(d^Qq;7@ZuifC#N6h8wKI%)vqRC(6EqI5EnibnR^#U6{UzqX z<)W%w>~!mC%fkoM$o1qq!5iZ^R)F7GWPJXE3$=9J2BTYnEsO~M0d_){Vv+| z_a@dD_uEV>V_nwpk)qGYumXLyq1#Ivv6^2SK0xZ2 zOQN@i9gL(d2k+&;uVlu;k`^m8{kvruI{qXuVfF zX|?9#pQbV#uaO&W%-Y0m@o9P>#2B?@lS)`o4RB06i7GK=&}-ZGv-z)9n9nI&-2@#_ zC{S^{3yGuyY%8qUvAq-nXrSZ}c z0fgKS9$sG*%_j*w7+iS4_M?pey?W6O+OLM7S?e2N%XTYW9ZXPSrf7sShw2b9jBCti z^XjmcX49Yz;aheY_d5SV;l!b;NhFZ(lQT)~p6z^6Dv~TiV$s6H-Y^A zC5QyMbh;OV(ibl-;MIfjKP#aH8Q`IXH1vXxc2RS-y3nhg0eT6gvP@=$IVqXa<=*Ix z7i6e$i=b+RYbO)83z0;vC(#g%qEVZ^2^-Yr_=_j?0h*sW?)H%#3oZ2ASt&`c%vTt> z*}WJW-Wfyx)z1ZE(ibL|G6?r{ZOgkBXQ3KdX9|$%H*yFp)atj(y1qr0@yNlt6}prx z*Pt+IxQX*|rD%DO?{|~>TN)c_Iiy5*jawHd!5zD)A}!d8I^WrAyZ0Qenk>JE>?Ach z`)?ZmFY^EMK|S;s+(=SV!UtD5Gq3YkuL)wGQH=r-PT~9wGs&UI*XBAX>QdX>L9IWe zZc863RTYbP2X$G9@j5vrHEx6ABr!B3UH{ZL@y;j8nr-Hog6qr-5ClT7nj9QxG@5om zEp-2KC;MshGYX~FyUK@GB`Dk5*-tA%$TIGG*~dbhKJ(7>l9t_<}Y*4TEj_#={6fu zSa(ZtKP()f;OAoBRwEYDm`$%QQ)f6BLRv0*3O7LFfrj7oN3dm|s;b_O1wMGN@@>!< zsB0<4U!Rz{msijv%5QmelM`A0UU7KXqY1?+AjtCHA)uut>CNh{h7`H{fjRTSzV6r& zIMT-~WJCesbmyyyy1H&vTYY_rnl2%3eem#tQ}`4m$fb`dx91ByyeA`dDGWG2pGZVU z6cZD~>#k#_BBEX4GJKch)vJYtRt;vz%{o};+)pQ*mT3%j`qM}y451^+Q9xItcHR=OeOpS{F)oc9UjrGq)>3=6bD7^K#GtV<1**|&L76KeD Lxm>I{ANc6+lZc&P literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf5af91558d9e51075a64026546d49afd3159a7 GIT binary patch literal 2501 zcmd5;X;cyl7RIb5%jGqinkd%msiWpXxq@3wxuj1kMGGCNuuM%Mf#JJ${)f;xUkv~E~akc z7hq#JK@k1~Zc-SF8Ej4R*DZ9f-a<1LoK2v_c zCJe;`ukN>L+-|1lNBAw+ONrHPDA^vhmIPrw!Jf$pvJB~-B&%()#LJDeHDi3%!RVOF z1OJ>l=XsMD?1;LV6NVJM%Y^2cN55&r_JJTvXl}x1PLp9>(f#}Hl6nxwos@I*W)l-G zPHt+r>|&-l;beZq-D{6W8jjmJ#;kvuc`C?!yD+jsnX{iB&mS9KvO?YEDZ+wZk@z6Q zLHnx`X#@)MDLg(xx+w)Bvm@o6m`%838W!#^a>TuUlP^wh@J0=Pijf$zkZ!8|aJyUa z=tWni3EvpM7ZiQ=dhsOpPpm3}6Ad--fogzD_c6by+z>mV#3n_?7H9@B8f&-hBrhLY zFgm)cZJG3hgm z(-CK=!DB)dKx1PHlkQ`{yIkb)(*Sf=QIyqtj`o&K%`k^dT_Pj4C(pxd%ZCPJ*e za^9vvZ+f;vFVP$N8*lUP)oYFlzpx{z(V9>q*u07}d$h$+r@GJ z+-eXinz5idNcbIWPwz(Yyj8yvFIm25p`Y|zduTJQZw?prol9@bXZ)%>#!x=RgbfGB;R9Z3ZH#ED3BX_ubEL6`2p z+g!#=$DuMoMObG=FnQyqI}^04kjWvRMc2qmeM4EUDx-|(w&q_~7W3|6k@Y3Z=O#NC z#!<dFOnKWo)v)EeQ(@^n1{$l8Q(FN|5 zc2Vp0n}J>^2b(ZC{qqn!u5&_b*WHFL=OW_q^Ggx~fKE!bsU`l{2WZQp_wAL#-#uNK}h4BhNBpU5R=N00Ux~H#yfccoWzWJYD<=d^6*WT4}bnX7- z77|h#!%wF=~5l(N@PlFutOIRr?sj1 zML5=cmE#r`RwI*}hKAyF^qs->iEYxF+qX}AE$k{jB_$;>v5L}nh0c93i!O02o}Zt` zs+sEsXC0vB9Wb4`N4V9?V>W^-BPUeV95v4R`OUNq26vG3)sG)L)+i!@Q^jHn8k1a# zD@QPw+S-g79DlN-Z46Xo5Wq%0poqZ-)z%4u!GM?;e#I}lv$Y52KMtfyR;^ukxpqCA znWHMJqUNSbtOSt=9&qx((F>ORqR@6T_>;!i`Ou-kxxm!4w6t6!CIlm#S?~|bs7Uti z%NA{G4Xb8UbXt@0teOHEZhLs(NRW8UN!Co#${-6Ez3*>XLxQ86rWUMd$s_lgHj?!W zp}cS5ii)8jJ6`Zv=Ihhki9)-((`#!9<$rx4oG4V^Kfu%Jc{P?e=S6K!o_&3F0VI9F zq%7O)3_9cD!dExSwvO70KoU5!SvjTabH$mqf=L)!5hAt3+fk6dGxp{EyJcmSz2yAbX_Sw%UI7^bJ%UV4`UwKDIehp_ zs+#}i`Z^rTcd;Ms_@sEJw*UEuBk?Ad85NlU^4vL1o&RT#-yZUBob&sGHgrV%Xsb3} zAz)Ikg@ngo1?2$QFfHxBUH|*z{@Yyghck2?!6{_f#SLpDxKY2xGl0iw?^E?BFa7=B DC*Dh^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_2.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..268454d1d37c51f825a87221f41eeb34e812bf45 GIT binary patch literal 2626 zcmd5;dpHvc8y^)R^toi#hf~5+&LL&iFjKi4$7wn#cTGnnmfU9Up|FbSf?Q{vO2isP zt{aOsNu$W!#t~tg;TgNx=5xO9ukZQ3@0|b6`TlvI_kDiP`@X+F-plXyX@sk~Do7Oo z0I0it?{o$LP;lJxS9U6HS-Hm{djLRH#m(vX+4!=h$)vOSmlV5KLzK4bS{AiTcs;)V z^p_UD)|}FP82jf%n0--{w#7SDyL~}fSuQ)AOT3*9W}jl7d-LiQ`L#Z%?tECF?#Q=y zOzw7nDZvcR9;wHkkMjb0S~ITq3Hi$NcckMI|as>VpYJR-!dh`_iQ}2B4c`Hla5)E?9HXiXk zi_%DU33tjdh?X!~aiBHAs;B`L(vC${PN$hOd2YdCQ2BeVTAQ_duW30uZl3#NZ%T~4_$(|^Y z?xmgVw9}hU1wvz`eM5Wo1ho7rR7pK$5}KWrz}kZH1PW6h<4J0@JyPoCu0m zcYL2F25sNFy_AVj2x$qPvvcM&WeCVmBBG_`u?c&TK38$r3@kW2it>8NyOzZ4<`L1Y z0VEiTUyTT2B!T5SLdR!XSBlboQ-f60YgI-i2BSc2hsz(sWyax+F**y-HwNKM7xiTJ zXXupYt}CGU*j|o1hRb?6vy@6HCDb`g7}POGLRRZs4YI4g_F-Z^4} z>Dl~(w&iZiM=Yv%FvhGRC2n?9T)yp_jtu!lej~?jQX2XOyR^T}AN6Ub^R9hm0zxF` zEMHF*$dN6`mbzABy@slNX1){`!zrN~FsV;+{Ox4OH%veTcg$S$ZDTPzgO$ofl8H&Tb9p$cCc(0SmZ2BCE^72q62cH3MgO80 zeYJzy|CTKijXp4FyE7c#UdPOftHrZOBQ%GDj#5==eZqWkPH&28S{8Cf7wGuiYSYL6 zwe7!i2>zcS`sZLDAyH+eai8UneP$N-yf{^so>foIVqE%r9XmuU8B7hnz{F z>+HF%to3Z1!LbXSRVT3;em7x>XluHT-ZJua*rGnc6?LO>Wu?*0Es9s#({nci+eGoP zG@Qnzs-^7lZ@T8&A!iVYx^j7}nkvh~t=Kw(Rl{3WQpRpq#+Hp3NW|iT{N%4_ukj@Z zi$V@HT?-EHaF3i>ITMgxMrPpn|t&0J$TUb6Uvg$s-8XVO{$#^_7M2$o0Y-J9>Go93GK4HXM|YAkIIi36rkm zgSZ)=gNsB)ePg)4 ze72__7`)$jIs4W^sQR-?Ga)y@qY@Dq_M?UxrzEfb;^!*S(uCTR$5}o%Gc!xw-Q9^x z+Ge@_C@w)B-8r#45`6slcW`-p#6)8UnBE*f%FlQ6u)i-i#i$8D&(SFfT4+(MaDibu@%;q9vQ^s-FQ;GcdvdE{uw z!@@%SV4JJ)HAG@qm*>^jY+V!+eG>Xv?8#BNAPZpRebVo1>}{stxjsRgY_v32tq5a(_sS zx_jWjfr@9Q6v6lrBO@dVtPubx^-f8?E7&cO%1{pH_3@*fWMfBoZs zc~(*Fs)L4W&DI^F(k{5~Vkh3`sZ#rKCf5HUIsS60|584GCXK_bay5o!{sljU?368S O2yk;oIFU{S-S`LO5|{u0 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_3.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_1_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb3dd32a4fbb24d156660d8b7b76c9a0f7e95e6 GIT binary patch literal 2655 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 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2.json new file mode 100644 index 0000000..bd58ec2 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 2, + "task_id": "mock_task_001", + "reward": 1.0, + "advantage": 0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.40, y=0.50)", + "action_type": "click", + "x": 128, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.40, y=0.55)", + "action_type": "click", + "x": 128, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.40, y=0.60)", + "action_type": "click", + "x": 128, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.40, y=0.65)", + "action_type": "click", + "x": 128, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff70b0458500abfec9a26e26b5c7d42af34579 GIT binary patch literal 2711 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 LT(zyb3{C$7>olK< literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_2.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5934673d272476bb5cf0b52294fb2357ec9213e8 GIT binary patch literal 2610 zcmdUxYcLy#7RMv4Dk-*A^{(67YR0NZnqsd6eNeTEwo0|0T@@5jRFK4D(bAT+`oN;m zY84GFO++Omt!U~MDS}v!pi+;Bh({7cTyyXJa_7$O=eu9doSFZeIdjg;??3;07u=jw zRdiJV0D!9VIfqLCfWpb`esMQ&yUN|ahXVl0Yt9a*E+>=-MlhEj2LnHgLhkO}-xN57 z1V8CI;$vZLQVWXZPX2liL51LfHyYC94+)DrJr@RPv3QP@_-W zgv#N4c9ji1-<`qa!Zs&T^}Zg+HN#p(3xq9YP2hl}#DX=6X@GQE20r^n>WS}cj*rSB z7y?5}6b9K|;A744ExqrZ{7X(i5Z~5p7Qgs&HMRBk_in9Y_T@8}3D>cc2GAz3J0%2p zwujw1f(ejMFNu1pR#8z|hPFGOwe>7kl^&GM^yU}%^_DS-oJJ-P=#I0=yLf{4ASiRr zbs1M{B}gAepz3h-Bq#B2>@NFT@}y3%sou@(FimY=qA81qGJvC>c?Q->p8Hsj-y95WQ(&oS2%pBX*!-i z1Ml2fEKo|hK~!!0=@xsYb;Lfwes%qg7T3%#B{qT93hT8>d5;`ofU8AqwUwwtSGs$u0F<2;pwY56*ZNx_^?d%j`(I0K9Eo2wz*srDsxy1g-sC&o=js3 zGdVJIVS5#XAwcz${RT4TieBH<2ZqWDzQF9pmWok>%^U5c?SJ_UmI(I%|atFJdAZQuIhngiB8Gmc+ENTvK@Uu)tg}lX$8jnsuK=LfSQ`?6FI@ zK?{+L@?bCij>P-ihe-~K1xaD{low9ZK67s4zbgpyBR8L)0Z`*K@RJvYJPZ6D{fZH$ z$A>T+)Yiyz4reFWWYJc#O|?WiZDmTbdKXaobl-+_Rs)AMiuA&wcp^H+E`>`tl8+_X z#!8{>i7Ce!E41VbH@q+7KaBsJCjz@aZM!P*?lpjF#Pai#g1UO%QVR*kjgroZtL8k+ z;v>IVzYP=ENqFoj3Unb`{}TUoQUou3K=!)GqnW&7sBgJ0Z8wKLcv$lhomu+}sFJV= zq-livZqeq=xb@|?M;isn>#kAHqBoRH7FkC(R-Men#sJ;qdnOjCyC$Qa|2NZrg8Toc zr1mvvtXszVWT)usz3pB})28Ca)EvmCPlf^W9v|*Z-bO7|Sr@p3{>QWa_=xvZPyAA* zdae!(wfNFmVhB(8pgZ4JQ4D!i9l`B*VnUT95sxN3xPSkgtLq~Cyi2jZre-wN4*o%F z>%jUkQdA0NbNxz8EC>iJLJo_)(CDQyM^++Ez=2c;eXcECNt4UvJYFf;w;n|)-DZeJ z8{u-dfF(a*_nR#0cvUB$=Q+j-3a&X2TlC7!VJqURR}4(KZOqH#M!_STI?=s*Db>~R z`9#vYrNv(l?da$bKc%`%ckeAPr{q93#DZD&tZw)sr|v~q*dvX7cXM^1?}@~zv}8tT z>u%|u;NT6Lcr^*U#43_R7ujkVgS70>{F=>zV~Nx#?r?0ZmUnu8e}7+vy+!oo3K~!B zON@;ceT$N7u@M!^h;R!N6Q~(7!E1nv=qfD8gKVD05*HPHPnUk=#aK@H4c7(niD9|A zL1iz5bEA|}%O67AuF;ZrL^ahpHMi&G*@8d?+?15b?x&yX>dw@BoSZb()Z`6_+aH0e z!{@iQzGl2VG!D(Ui{en?-5pw^av;bCn62&FMCP>Y&GoTIdwySW}NS0UdV=CHCbb`g_Y2mDJ_~>c8h=sC`2w;1GYw0!@;ATY#p& za^>ehhDps&3L2*L?QNxSuW{(gEc98~Bw_F2UAvS5ddYEZ>?&xDNGyO&@p#$V5C*#N z@#FQj!^U^+uoM;R&$-}1(&By&4kvGI%d5M7eJ~?)ux8?*^(Y$#4jEhGg~Ja!J6GxG zRGBxgG?kXp$+}A2KQk++C)?KDj!`dF?2Wa7t+DOH%>L@I{yRMs(xnG02z}egj>~FS z&nw%yn=6h_GmK9BPr~?PTK_DU{H3QX$Z{o6J7b@9bD7I_76dpux;eZ#9hmk{C&-(K literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_3.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_2_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6babda92b9757c66d2a8c02f61bd353181a083cd GIT binary patch literal 2740 zcmdUxX*3(?8poB{SMI{8al}IcJAtV`d=A3)(mzjI+x4B=Q^PKaX_kW)MdC&WQe@U01 zHUL>=SqTXVfbGv0E=x%4I=9m=%Si52k>hDI2?<$@?S=EscXQdJSZ8N{$pYqhjfxlS2H%BJlru|FXLv8aAIqd)vr&>Yt*00+6t9Rt#G{fuU*f(qnqR; zT9S_Yo&)ZZqR0RbTDQcWk=z|Gf93~V?5^wI?U(su{5bvSC^H!<*H{&WhBWhl;knYLXU+PdK%6L=?|&*}V3 zshYt%?L%oC(oXdmYi7lc*XjJA8v3qQJ9?liFy+Ra*|TsA51+o)4%-qs`(E;0e$S0#@El~kIXK9&W_ZQ@)%TwJaNB0H@t_8FzCZja(GAGXbU&Tf^Vg%Wqjs}btMshIYOI!on5pZu!RvUMfP)hFbuj1|s;0LExn%v3OOYh@9le!9Z%)0HGgT>nX;)}}x+xTc^=oanP1vM|-= zb}Ldtl!L*yJ^=4o$c^B)L!N;6?Zi0_MC1m57u?5Uw{L4463~T~{iJWy#NFEY^`^Dc zP*`tFJ=u7E;n32ixv5FCe_Y>siiKXk94XX!x;=h7=I;2~YJI@Crq8euB9uayS7G`z z`w1n3&HiDq8aJ`8f_+$|#YU@T^~|H2jfi9_kV{`5{3SZh?~wZXh%WqR+9U%K$;#GI zh0E^pBulBltZksl3nrACwL-zYrM>xZ&jvVaZi-)vA@JmK!9mwuZC6E0>)@uJPM+C_ zt2JFL8(sfcU+ADl^mz2PU-3=a7(Z1#jIfr-Hr!G_8r66W3d1qjx0}3%;+q5>!N+x@ z(ETa3d6j~l6FJK1*j_h)0YRNNlx8Gai?bWw^y9jW72;<&%}OtspNJ>!@r6c5X^mfi z`emIF$f^305d?ZG?K%TdU-xBG%*^)jUaJIu6yc%yd%{)tivx{A9dqc4xOL7rdjyM_ zVf;GjW|W)U%p0kmnDW6!!Nji|$)peTE^H+7Vy~19^zOHZypbYQ zIeDyso5D9MZLgu#`*mnRwcm~a^`~p(^hKhxe1emY4>3xrVjLs=*}@F_fkD9KC4{JA+}ES!G^5mPY&rFt|mY+`paJ zjol=D!pg)ZSWJO{En#0nUi?R<{6*aSZAYY%r;++B?v5v8f}l9wprGOHh%^FsN=vvA zt|kdpN-RRvMxop-|0+xWF!xKvHFw~VBj%B-WyQswe9jmQa6t7-8}N!#b#O4@olyF+1A{Cn9hV1zqH7>#&rL*Hys9rXGkp;(?=G5-tPH$5lB)s&b*DiDb#qK; zp5@sHS)qg6x1}W?_sv&5Gj$B?C~`+XLnIQFPP7czhwX;Eukm-Z&%YON?%Y0@{Ss5y zZ(&hPA~Cn@n`2@kF1~-#oo;jD$5CgmcQjN;#2QH#mf-5VXnH$K+l$iE)1U%Fv*{y^ zD7WC{iB_rk`8(~Moent$uZhIPC(%?mMP}oql2UV1_+IX)y+a<0wWXi(#OC|Pke1kE zY3A#_&(9A}&siV||+adXG2Izr0Ka!A6mHtgTny z@o$PP=Qs({xUtd*mLWBpPNyd)r{Q!5297H`AQ^^T$OiY}Hc2T@&j-*_?qp&Ck1rS6 zc+KCRQFi1+f;!LX#trK1OkY)bIhaaZeV;-g092S1N>j*}H%wq{kc$(NW5&8MSZHO1 zSzq*StoeW;wGHU#EVX*St6au~FEP1m!^0q$VMuh*^NDK3ZQh5)-><9X{y)oKLsX2A zS1)~d8jve*hTX|{B6jP5v~=VY)u9Hdp;6NJH2w0m?Qmb;XFOg)Y>crALtpPOPEAcw znGV*(PpWdlW-^4_)$gx0g%bjP)Ya9}*Jn4*<*%%)5L~BP_Pzm^>l~~hDW+6?4y352 z_V+Cm7}&x83l{us-|4@><@XI|gLBjpi@5WU?cLDc4$<>)(U!|($Y8XH&Mv%jsO4v literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3.json new file mode 100644 index 0000000..916eb51 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 3, + "task_id": "mock_task_001", + "reward": 0.0, + "advantage": -0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.50, y=0.50)", + "action_type": "click", + "x": 160, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.50, y=0.55)", + "action_type": "click", + "x": 160, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.50, y=0.60)", + "action_type": "click", + "x": 160, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.50, y=0.65)", + "action_type": "click", + "x": 160, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0191bdf45db85f51430c63acec25e81650af7671 GIT binary patch literal 2720 zcmds3X;2eb66O#PhJeS693r?yF%Ba~BBumFQAAJ(BM244rIAF40Tn_x6NE9y7(fLk zK~6=32m}ISIAVgx5Z*R-_4<9?Uw`S| zUTy#leGLT#1%Ug7bC(qq6i>@-;a(;AxdZvpQ9(fi>3;5vZ)^d7B+1)%TB%)x91Pv> z3iLtUnxwef?inbY0->bXt{JUhJlIqXW(U$`(^jB}vJV;0JN*3rQ_`<#^R?Ccr?rUIz6 z3jZ=MGEi`NdwjpKp~OO4@5#nAi4j1(bMj>Nu}iTn*p(OVgK=?TgM(A_Tc!`PdTzdn zhY|H{N}HOlPrPq<`t+B_#=AIEL&c*Q_3iZm85q+9GOI*+c;MnUH*<2fYHFw~PU0~h zFL8o7aMkdXgUt`Gwkx43{UKrV&9;%aR$UHLhBi0%WDRQqm`*@ohi)Bez|9C>AP8h8 z$!cD_2rVy1aX15#xjQ6@8&NM?w8n9rpI>A|HxB9(GgB7>ocTXo-k*Y@yGo4@b3?d`}-FUI&D_$BwwC!Dgwzgi@9Hx2fB4~&dhV-~s~ zjLrlu#tE(j-5G)c&k^@2v z)3HWzH|T<`F(w=zn(|Tnu=zv~K4~WNNUN%*ZXH%ITebY-aaeQIEQL&-m|}-s@ry7s zg@$LixdN8@`H=p*-rl!QCy(+YKx`kV^ce^t6H9ROc6-My6=Bu)GCoeB-(bk zx<^ttomkRmClz0rN5Dbcs$p|At)-2vRm_zu`Lmx! zc>w#P??fwI>YkouXnOL42RP)S&2rsN^J+%_`_61nuueNo!AyPKmdx= zn;=f?FKrK$iP3xx@&$+jDSj-I)Z^TSbf>@*edXDs3@(B=&)vP2)eiTp8&rCGO-&6; zOxHsY8`t}txHuS!*f>Eb8Uw^T7KL&AqL)WTbve(@mciRIWBr|Pha_C;Rz?O-YKd7@ zq4nVBr2;$l8Xp|aWt~9XmMlXy*AJtKjk0AmtYC+SH2{rk|2?Lqx=)0&=S8db6f!ysV{FME5-oCR)vmNkxVvRL5_75zfAfwKLa}3RVNe z_YGaWd$*{43d%~X1yQ1AmwhN^Zw7D4yA?IygsfM~G;+2C%euq32aY7|rfO5HZHr9pOd9Sj8rKpSbO0U?2qEtSr%ue(Wg)prgH zbL|k_R&pF(RgT2oso14tmEJ>b*$8v}eb*+xj;Wk(H4MGXz1q6^E0pmB< zMCIk~+$2ecjeYb@B8Wn#BU%YI&Itxp>MT_);)f3M1T!ypo%inEPo#xT<>?zuRD&hPV1>jKl>1>)-)2O+kVoX+h6tClN zWt=#@7z5ldR>HXcN~lfJrjIBAfJ~MJ9UXnRfhpY!tD2T}Fpn6#9`Z@**g?u7E2BL>HP9?+y_Rs1L0F|5| zXtbwb?D1HB)XY}v#75r3oPq+KG)+CxLIo-fAY1&9+f~^@p-{TJbD(u6V1+N?aKUj) z%Tu!E5)Zjqr%JNKhb{g7^K=)t0E`u-sN|8R%I`amAJ}w^sArhFp@-?UC!>O_*+c_r zeM@Q@EY-rlUpS$?&Igx#46~&JpWwOa^HhX9&9NsH#3-+z|rHyFtGfgGt3720GHxp7R$7e5fe|(3^qB-DZZX2 z>Q1Td=m1~5xQiy5nnLTZyVBPYUs2UnvYCA2wzm7MRXAL2dd6aTKwv27D8z~fYeTa^ zh{b-$>S{2v1F4P6k|RdYI)d2{lG4+)F$;atrbQ~`Vm>m1o49H&l{TiQb1L(#kchX! z_e;;8*E>Ydk#jNMkJllmlBKI8uR?vD{dW>>@baP>2AC49PagvVyoE*B8#CQRm2Xar z;S#Dwmusl(dk;faD=hcbvJO71?rS8pvBfJD_%8u2|8?#EMTYXvJtIxzET2xQ*g}Cs zFgG>bI)K)Am&-P>{x=!(=Mw#=`1wDG0ygcaS$-UN>7(~FU#>hA++DrSQC&h({sD+= B+Bg6J literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da6a005b208747137ca7f31ff1b32f686d205c57 GIT binary patch literal 2631 zcmds3X*3%O77m^+mT0T`G?bZVI(@Awc{HR!jH1sQl3H2~QB-Y>QYA=YSM^$3OIu5* z_gYJBRa=OXC>3i%wGA3eVhNfewuG$D%$fNy=e(K!Z~okK&-u=|_k8EO-#y>Gi--%V zN+2Zw0HA9Bqm45FAZNAP^Y+Q_Rw?q7IRKypw72=2YjolAMEu1^Soxl{)ie5kIfZiM z1csG91C~UUWLA03fHUD*T<7Z@-#GZ+adtU`ROqT7L5ovT9>IaC*o(B00Zx55ZP9fP zR_wHpWd^3#Mf~(G_?EYiz^?f9F~0_Je%zRVTN_X;u^h6r*PN8$3<^j8o1S9!9cMcl;DLp~X=NpxMdfrx=|AYcR$}KGD(g#n|2hp%tVb3wx zImzC+`Pgx9_6-%#W?LxKtYvAeZuPqV5o9r?0yBC=_J+;QLKL`~;BJT6(JBe6H$Ql9 zR2>F^Ao$IRwzhar?%jl29awBguKv_Ks4fO)cWtK1l$&B`U<85eaBBr*^coKLTwUEu zpj()o?Qtb9pQuH}Vw})u#+IUaoOr#m(lC8(idUx)rPT9DO~N5|8F-K=q7{*g^X>E2 z)|eZW%E~8-EkvHlK2nACbxNTT+lh<9;1-9|A3PYg&$-VTif3rLxVM&(NS`%7lsWbY z@y)Wor>0Dfme~Ic_MfI8hl*hHOz~ut*N+Y{2B*Kqr9SU##fEBIw2tEMjf|XKW?mq) zPt6Y)Q)JS-rktdt&4vIfLAcasdaD&MUYw|>C(=IGXmKV4kK4Hm4WH>BFn!zYCsGrA zlB4BiXf1sD=<2Zr@~x~IVtgX^q@#>NCPtn;%a!!hdcgzwA7#&7ceAm{x_|%nG$$+! z&>(|&X5l4u%_i4I!&a!{{K6geY9DVRu)j-(ae7BlAk5)ZxF zGJXa2XLU4Awa*4an1)#bT~->z#AJ{iI779!?!z35GZmGyCsshjcRB~(&t7Y%g};}nQTT4ML@O(_wXPX&M=wjv z9{%;%WUDHK7QuyV^VmPgcIBlP%jz77nY6s87R7wLEK04;@Ut@T456E4Udq*ZXpDF_D&c##1N^!6+(1TO)RIz-0u% zpHqQ1sdXC)CQpc0P9R(@x4i>$^({{ZMLG=jrU_pBkO4k{)H!CpostEQ>v8}7Bu)>C zqn9c$s{4+@AhHRv%Z03!EysHr8uPO>1CPeQMlh#K&2z}Y6b^xuQl>nwn2~QX>HGKB zayVD>_!(fhBmzI*UlA0v)6{fU2ie|)#B5xus<+E1&`>uXnXT|5uNyL=n_qM4diJPl z8j)IsJsSFD6G=IHCQb%Nv7)Z2>Ppui>b(|x-I)_YsGDV`!!4d&Dq`ZvlempYUHMlUOh<0g)Xp}dcw<^@H16eqTD|qBjYxvpPWW%9lAZ5d93(dA#{GZd0Jq>eCcWPI`ZIX zV;76Xs;qpzE9Rum+!j7dw^j)Vq$uvq1azy!>~#5P+!^vs-Zr#+at}Y zaKSRH!+q)Yyox5zRj|?yQdt?_$U1)9wxU8ka`}`N zmDDo4Cjc!zISbHA~Mt4 zj8aAB(&*{kUADHw7|dT0g9T^xxyfpm_bNiGtHN04#^k>!->F`GJEM;Uf&X#Jl3dQA zKe%K66)vC-tgv&iUEcyifF3t)Y&(9|NSFrY4*$30@jI6NcPRP4gE|(4h8l8BK}z2d RN_GPxz}^;N^U~To={Lkdp&9@H literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_2.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4bea64d39ad308d7729deaa1d8b96db02dd18226 GIT binary patch literal 2735 zcmd5;Sx^&L76n8^Xh_>4U;rb7OCthCMYaT7kN|2>QISpb?cpa_n!Oe-cu*}DjcRD z2b7bLkWjF;vbZiGA$e9DFUm@Z&n??y5D5vnP-}~GH^TGSw3w?IAyPd{+>VZNQPOgq zX&7>1;NAO<{-&80te(e@ zyO?@00cQ)4bIvxF3B5SF8oF5HK_AGQpDviMLA43dp?Lc02LWa0Xl90zmxR~y8|p3z z#^*gJ4q{^^5z;@%YPp?NmE6%GtNNp5d+Z4*nP2}2@p*&q`>6I#&HbuQiHd~vb)JB$ z?`?osUyiZO4V|W_sknC~!OYeU_EY(MjuGN~aoe_^N${fXap&s}>$qEwckJL|(+XI# zvy;JRroX*VH{Y71G~am^#YxtH7?GKaXd(LnKE^frnoz1-$3G~@&a(R{7W>7($FrLV z4SLH77pJF#)S7@O=r+C_wpg$BC2d&1#1o>Nb&oOtf;*PYlHO_9hXF%jq5 zViY>r2LnZVjZcP4$9Bjq@F%l`Qd0MuI8A!V$=Qmq61x&$V4!Ed(Nfzj5*2O~<U3g3gT{2eQ@2x z4*~(#y)mkFl^lc`RDw@j3|QJIfL?IX8_h8|)wVJB4BXvwl)=IUx#*!>=m-!#7B6@q z8PAPNNYLVQ=*oL}H@v->Uy0zNq6c8G_q~$*uz0X1sko>FZg6`Qhy()Rrwt9SuMB~TP5?>;kz+j<|qxjJharU(FlT2UWSRn^o6c9lzW%J~b0-B@dV z{cV3zu?IQa%F1H2y3uh=5e5SQY)fj1s`e4<6Iiggw$rBc?B_{xX=!hEHXvVcZO5op zJ2}b?Ie-=%1^|_iwG>PwW^6ad%QR%UajccfIT^Yj5{cH~s34EY%&so%t*b53;spuPsn>i4)(OM%c3 zVGA=VKogoOsTS3y1-pv{8;*bJL?`HFiSy3?rq<-(=Ya#6e;aRYYC3*;#SD3Qf^dNb z@`;F~3i+F@;NqBVp@2i@Z_+78;LeUW>dG4$L@0<$>_XygSlTcxItY)&f|r&)!YtEF zdHZjsfTw0YQPZ_R=7Ra5#zPUC8!Nq!Yv<;1BVR<0pMq7N4sNJ)5u$uBcBHaq?twk~4BkFx=F(^sGUM4fu%_l70zoo8JzxSo>PFXp zHptfz!7D!%;w!7i9bC7VMQqHqwlo=PzntiI?VoRl*8?Pn7JZ!KB%Kd#DFgpaN&Z4) zzDLN@kUcOrvfWBejMdT6)_%DOA+q({ke97{W2*U@44d8Z^CQ&-&hY1dDW89K#vsed z^H?m{mF$zDQv)vwVF0Iu&fgvYk$3NwpSkZWNcdQ2@VqK1>EZBj4^4$c!Y3ukzIE0= zFmzyBdE;nC=2mU#OijhDd;Ufyz7t!$@jGkpVAd4`_0UM^)tNoP*9>RaY&7F+6^Zhd z$(#**tEgeZ5Z~-nRA(#cEEae);ryeRbMaByzuwRcUbI7Y3Z&F0l?27g3%r&C%63QQSp-}Pb^^Oz6zNc(UFS` zNgv_2UYU7y;dEP`m!IsKdR$y1d!p^=p>K`ds#*Q@ZtoUK@PljVgDxeuZV(6>y@>^< zrluMg2vfm@mc+W81ulreMAVuAcuPz5GER<;u936)v zUS}@uNW7#HS&8C7TRcfuioF9Y8TwaS^Ib9ikH+i&!?1m3!#r<>nYAjP2@)Go3G0h+ Ki|X@k@qYlS7v{tO literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_3.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_3_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8010e79301f0007ee583eb3399095c7eed8d4c06 GIT binary patch literal 2639 zcmds(dr%Vi7RND5Oe@=Qchj_Ot0^nPM?Q#9DOV#iA4Ta38k*r-^NmlSG_4zHW~Hv0 zZkdK6Xd;q=&qVWu?}}zD zl@2Na0D!$#mo2UX0CE?$-wTR6wxiVUvLT;@6P0Ws_#o6k>#UE@2 zfoh-F=8kCqa@Z^bGCSak{xy2E)qL-%}JGU`V^GyHDqryZXePr4MEf(-E{I zapzA~O=)QRBzdE*eB6`7E+FWv$^!C@%DIa?$-G*&6sTVZaw&k;UM z7Y^pzBz{WmiHk!yGk<;YV%6EQ5xh5HQ-vXE^8+PoLZIgujbtZ{G~FC8;wKKipt7<> zt%uYT8y03HMI^@4RFssA*_!7Tf-s*UycypCGb5a&^~jM!Ssl5>C^Redtv$>VCxyDX zrQD*f7gu=T#X=JMs+{3s&b@{Ppr)Dge${33YuCn}9oM(CjMUdZC2gQUYt_nP#qS>< zC?ZEa(Z6}~hw^eGL;)pYi@&M?HWR^cBlP1TGt=y*f-pgU0gcvN5qb6Ml2*KBGzlxL2l)9t6roX??VBE7{pdxwJIu|Qwpek(ngBf0`Md5xlbiM>VKS*pN=gI!i8V-P z>_eeFFjO|%z)l}y z9frg(#(fX~8-lPBO`59O^*Pum2Zr}V4l@{xMi}?amBM!$cEL;0jg3$<$pWX}{Nlxc z7|F9%pv9$q8b+r{@0YlXQ)1x0ELRrt_U)Ggg7)V0+eGgHO3zfXZpDz_w%0PjHD3aE zHnOXqzq*ANjC608PBuILrgH0b6Cy2jxtreuC%1$Bue>t!PHFAqPLW1RChT}I%WumY zwyQ!z6^jeE%%IV>+b)%z>Ud=uE=UF~C@XHvf<4-no05duI%ARUnX)`IT>jpYZ(fc~ zz>o>W)6aBQ)n^M7srH;%&JK`Pj-Cm6s-R$=8T9L&wV#x*Ai%7bc%UpGYC zV=``X=P7bwfgj?(dEEY-L!+g&_0eMuNNm*H+|X_`K9-Gy+_{{mpHC)-j?isjQJTea zQiVMaFWchS>v~43Lvr#*1Nt+8J12SO=wGgN!NP@6cSkEhb#?9GBB@{9eF(KiN*4|3 zxKxJmyMC?Sl$axws?AlKc%Xwm6n#XY>K*t3#gBWx3pZ*<>f`MKa2y)yoskkroH99 zD!v#D#?t4HGLDHV*dIAp7Y7XBM-xvF2~>LrhhbJULo~sRq@K@)1*g3C>8r1cOQbrL zMSkgokx>=hNGAj$_1RhXe)4k#Pwxux@AdT(Ynk$Co)FiJ%t$GXm>XmeiF=o4bzNvD zKRYnX6?ZzDqwA&?4QJj7hY)&q$IRW^9)5?{H1tX@KMMkd4VE-TtOj6Bnac%0IS6 zE;iDNLg$NX2&GVDxsN}QM4{+tLw$(qkhA%9<4>Q`!>igW5BI;vX!~MZTt-`7;DbKg zH~oooPhR})064+=i?#*auC2}40fF!*Zf;Di7ZnK(NFF4vw{T>c`X1snP?2K+3S2Z6 z;oh2IP_VodENQA5l{YX*TjTfeD)Jqv@9bcs7~&91TsAjn1m2iGG9IK*UH|k*a@P5< zqh``ly8p;%5L}#>mquR2@?!16!#!dohJuNT509SLHMLIKAt^;rZ&gTCP9e-v2 g2ao)JOK$`xNB?~D&7ApW&Np-BoRjqrcSj|8 zO?fFPDJ5s8OIM|&02g+5{(kA*De*XKBPAv8=zQs-S3=nmE6J-MM7mdy0gye+N0JJI zt8ZTMuC;ksdR$$v@PlDB-2YcMiv#J5!Kg|nlba`r>W`}1;d7SKkkN6MqQb@kL@>9` z-~+ywJ^RZbkn(Y{vZcHVi^tc1IpWQQ@(fOSVu_${)mXMyuQk37@Z^15myuL=$;rSA z>HwLZ{ptrCx>Jp%_x*g(_!u@7aC491{@)=rRCnohcb_t`lYr$o0nPi`DhQ{`1$2}T z%uRWnQqJaUVHXd#g&<*zp?1$ss^Y6ItC&Yu#CIL_kfs+dP8SNJ~S*M9fM|zD{u->6AI; z$=q+4>YOY)9#;K>tm8`Po8;Z%&B}#5u{tH zkRnyTTK32E4CptZY*K=~R&T98)lkt*4hpy5**vXl>1Rk6!^f-`laqAyrkN_Ybe9o| zN2JDQ_{~f!OO9gLC~cO?qat-b5gPrTwV_OnKqxs_+2dY{Sn8|Hx({8QZDpc( zCFm(YhH$Q9eW*^a*8%skUJJPXuCcI?3pTi)vo*5^_7S_OucFcG}_=cWg%8phe_In7uwC!Y9)R$YK`|pmcHUQHVr=|S7#BH@KftQy$S6! z!7Q?UT(BlYYWs0eC6$Bjbvv$C61XZ5*u0x~YlLu(MMDO%8Y;iOTz& zO|yL^3f>U*w5@djD#Ul8)yK1)*zdg@+XiiD89|3(6JcxjRk!y5I!*^J#0SD$d-C`f z2Q0)|#O|s@_bA7)6TgP#pXsWoRm|M40Ox`A*ebN*+5SbdA=%tg$f6{C%p0Ihgttht z=VvTNh!8RHTl(L5soQ8obgseqtDd1vo8MczV4Xu@*yuLsClNt74I-h2Usoi{jM{aw z9=sWN|Dpm)X8cz}{Noc*u#k{!_RPMAI@?nlf~vUXi4Y}+%j3b==XK1sSZ)v7E_Zm3 z$Mp30;NWAHg_)_2g359n+25x7=*|(*sk3M8pj}&}d-sAcJ2eZ#orDt0XdVkU9-t)0 z)jBk|+00`gTdrS^jImlkm5TI!*ir&4Y75jIJpwXA3 z{QSx}SHw##Voy(1$6TGqWm^o%cG7sjI2E(ZsEqf%hOiYCFc`?A7D!_ne7xy5Q$u$dL2!nU@#&s*T;v; znfWE%B2Xb&v34l&ES=e_ODqS5;Z4q1iMlc~Q-%ZG-5sbYLe?D@qC~!-)fv!=(_~~pc-GU)`lbE7cfse59b;(L6Nv;{F)^;4I>fE7 zhkA6LH-lH^9#l0u2gW!c5IH8d-aQzJ2-j4$K`k+p`|*Xe;*h=vt1A^v6ZLotV!}v6 z`K|(NIo4XqE337_IYE-pNyxLH3McNsKDMEj)sA#U-6!gF=;-rJo<8NVUctnf2Zhby zztx}?$f{>t$u#TOxf?f%!9kbqq0CO7M$CWyJUEDxk-leYswpiA1Cc{+ebTZtt%>0n z`n8+aPa|6~0OdpibpLqn&DY?q^D-rB->z zJOSu?`+p?-9|ip%;r|0cv!NZiZw9#N0O_c>jXgqlTbKB~Q!TV3ntxVYejx6DQmy`f e4AuR1WSVWB9nJa>P_x@CrJOIjUuv)qy!USr%+T=w literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b42380529f090fa92cb8b3f64809830875e8eb GIT binary patch literal 2599 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 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_3.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_4_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2d4fcec1579b8b973fd03cea390e2ab219525e GIT binary patch literal 2703 zcmd^>eKZpaAIC>U#Zr%}$->ih(+gtB>o&TCT!l(W%uCp44Mp>^7`ny9NR$b!BD&;t zY-B@WV{Bex7TU^dEN_j>%eJTUocqsn&V8Q0pL^~jX#zFmhY(Q^7V=oBs@yi~g zf2PID`E6C+uH$=BU2eB? zU+n33j5EzGS&>ztr+D*2$77j|-r>3-FG~D$L8-XM6OJ0bAHLG^Tj9n4IGC@0*rLe?QP36nbu-r% z6#xh4cwOGyY<^eLmcP9G4va&c8g%es98?>9xV}uAp-L!d#jVs{Z9GL*LoqOHsJA=E zsULJwO}WWH+`OSA2yRkM_sK0EpBXRAGpPd^)^CVa-{}Iqn$|U`%yAqEb45{c+ctH7 zQyRG}h>cvB0o4V)j>3+X+NoYLJXr6|bO#<(S{qiK+# zi28x(8q%JVTU5+z97q39ntWI%DCmQmbd=izWTWNHSbXI~79c0oE~XEnJ2INugU zZM;PUOSR0KcN{vi7rof1z00DY!j7C|ovS8m*_`HVHY!Lv()H0LAoY(v51K(g%ZccsqEN7l$^Ohey*FZ6B49NCCVwY8l(C_jtn0H zg#CCJ#L=+Ac>lgyhPh%AiVqyYK(GDcGyLsJyMr+GJWWnfJTkU`xKU5xAVtC(2wctx zChZ0e7BW;F8&yu`SQ7J&2ZYQITjp%krDWVhGNfaXz!S9w%buRr4bovfv*y*{GlB{R zk=TULlU!bYsH@FyHoz6^o*pE0FLv$TY9UiU&FN^e(^2!Nm)K!i ze=in8kNmtuq&4W2n~^*b1J?!8PG96Ve)f!EmBtq+l?8@^EgC1 zj#*J<7nUWZw-O*9DwTehjtR;5w}5grURlfn9_kb8;dS2cnes^HYNkua<>jmV(M-X9@sb4L6O+?saFJx#lisXX*Rh&lndEJH zXp&n$VI!Q9HEkR*K%MoTdfA#(aEyww$L6jsFR%5WUhpkuzdbpYvmtG+te(=YCRsNqMB_l#NC=})M*{Nks ztzWNv3D!e3N|AOI=iU0@BKkIyc1`vGtTemI5s`ozC~kPU_)X&G6=2okzMuk z3wCwQV&@6EyU!qAFYjA$x3z`dy@y@D7#TzzL0_{9Z$y~pH8aQGQ!5!ER8o?XgHHR- z+ldeLNcpg}rl(JJ8N}pdD|fFw=iS|>8~fun<`Qaa+d8uxbPr`f!#;u++*S6AkpnN^ z3=ZPbtqf#iP5Fog3UuJpLWD{|#iXbpxG%x!H>)`(60%#dWh)z>Ti+6EF&=2YB zkK)3ox|6oZJJ&dR)J$Z?Nfh8xaj8@idPLvrI?%F!<3XO!HN{+_UmX7Q8R5||^I4WS zJQ21`Q3wwwC#huguq8}e75JlvCc@ja+8||~4XI@gOX?(3ZlT+|b2HTauU?%`PSNlM zPE7@|ru5YcbE)OA`r~wa!Rm6lJq_I-`&FbZ>>JlzI86=tAc*p(Ly)2=v(ywV z>n?W{f|lOmj^~An3m-Ptc-7RpYqxF)xfoi3!jQ_%Ob@V7+20)wb z%HP&(zanSDMO|IWv;-1c`>M}LvXFoEw*Fx$@@K}!!y;(kIg}5MJ3#N}^daQL^y<5R jSj(Ta^Y0Vc56R>}NHW~>6AS)bGy#rw&ZjDDd=vi#fBwdL literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5.json new file mode 100644 index 0000000..d0f509f --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 5, + "task_id": "mock_task_001", + "reward": 0.0, + "advantage": -0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.70, y=0.50)", + "action_type": "click", + "x": 224, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.70, y=0.55)", + "action_type": "click", + "x": 224, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.70, y=0.60)", + "action_type": "click", + "x": 224, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.70, y=0.65)", + "action_type": "click", + "x": 224, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d658cac4dc0e3090b148ee866a2ab68050d54c GIT binary patch literal 2730 zcmd6pc~lYz9>-BeEhjaP1=P$bXLZdZQAbHdOH*{VwDKx1Y{)AQGzIe@oNCKfZN{wd zAj!5e8zlt~6cLY7OHd~iFGQ^bZ^Q!?M5lfG&%QUav;XbvKfm{T@ArQ1eSgRMzR#UA z-Uu~SJyiezpyuUy@*Du5aQt(=yhrhK-0?Z$1OTWed7V7rca^xv!}<9|D0YdXZUri3 zDqvFo`Zi=Qkm@k)@bK^pMBY1YH;*+i&ifPezWF{kqYgD+YUW$dbd*is+5U5}zEpO# ze*ou!c?ji<_3ETlulQ{bt5l3Nj;QP&To7iu;1ideR(VA|xf6{Wy_3V%hv~Y2;stOz z5I}@0D&N$!`YJa|;o=wj_85g9hbREs_dxc0v}RfTtHjzxL^%c23v#N)^4K7q(apTB zNRc@|2<^&6n3<$5q|Ujzy)NH(!4ds^-GM>IY8G*=BjZROlx~NkrF(=i-V#!ppCCOb z$Sfwco@@mdb`xaYp^QVQrpyAs{Aym1BGB#JomGL_L;=ooqG{Jqiw`)C#u)LdG4tcgFTmj9ze zoUpU1(aV%>_we-(Ey9p(<*b22DG?*R#>@mwu65?sowa#U3Ytw2Z$BV7ua*dQ?7sPm=-}$-v%^u%A$sD?Q&b)wG#b8ge&X8S|;Ox zlsI-WaNI@Pq$%~*`u5BhC{}UNQ9nFx`^}+`l{u$_+*4-K+*a9YA^Zs& zdrQ%08s4TIpIC5)nFSE}bD4gLmqaZEi0*miPfv&Fc3(fakW*h}W{0m$6Hn}}_DX99 zw@R}Xcdi{($32#utYasj$F`0{J>tl(Or|svG2EM@b9%8;GdnjfT68d9@(j60KFnO( zAVZd`+-7`+;xFUa4@mLD@1f8(2nPx+Yu=pTbDB*uR|jj5p-GKU!RW+Bk|^GXG7@hm zYuMl)HEMKwrJoCpC*P?sm$4w6C!r;xgrBGNoJ2Lx3ANUpwh7#Ubn0jjk8u!S<`WeSKDfVBCnc^AP3Sxq`Yk$IrMvUH%yPKStADSnezsioG)A}FJ9|-o z$VA?U&^RFdZeB7mjw`{$b|6aySBkb>ntVcnL-^9Wx*CqL^OwE-j*@I`9-r;6D&VXr z=ZWLoQe20^P`8JOu&I~H?1J zIIuf6b5HF1g8_`y<+(hbg}-JGC!VWG3!Z(6iE5DgNMU-k?!NEw*U)fhktmYtrIXPk6nD4V62oui$VneP`~sHhlruJ3xDem47S!zfz`jjbkaqK%H*X>% zpQl?!M!@%j!5QRIr&jPTNU9RY+uWHOG+S8#sVFI-hnK^!lFi0sq&Q@Z9O_5Mo^_d3 z1_FU*N3af$FjzXNXL^)ce%Q)t*(nZ|sgp6uX_n5d{=)+f(b0*^ogJ;~dPeZza=GcE z7!5<``}z6Smj@=Hs9S~(DXqziWo{}3)XWZ2hsj-Q@#EMk@v6NmS6E2-8ICf0CugmvK zWb2`|7@~KS+rhfiC0w7vWg65Nnshuf6B(N*U8`)tq3JtP^15;A?E9+f#I|frl=J3e zm}yM*H|Il|6E>DqW4AWNuc}ZBySuYDUmcp{ob;%de=1n4sR`6ag;)lD-Xh{)(GL6( zou^`jW%l=5p-y2in6xdE&cYqJ3b%y!)XRoG9?38SX=zn8i`UPEhyTc#H8&kO z#eg{;a3vX=#&{+yv5Jc?qgZ2T=GoB2uw{@or{YC)9yD@m<;|*qUCpm7cEOAJjEsjC z!Jpt0Q#1J`vP;5V`>P%fn5Klq(ZS9_HGO_hA6{Zkf^RxWTFYn0WrA^fs+vAFm>N07 zEXnPRv)LiQzNZ)@Ylp6mte-2~OvzC5?+Uz5!rBk)&%^*@vmo+8(% YGvk~H_13fh%%A`-ckh#A*YNAV0IAa5X#fBK literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/rollout_5_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..884fcc187b0bb1a1a7b0a13279409577d695862f GIT binary patch literal 2634 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 Zn6LIwzp|7!_WUTo;i8l6`wM;#{|Zaza zV0Ym`(?JwBTQj!^&y@HFvFLq{yFW+U_Z;MC?5#U-8cx2a5?uzZQ{(Yj+E8Dh1mvz` zm5siJ?bJiWW4u~($5JC%Kgn9-eeUk`_SQ3QS2MS(UVkc!pCiJ=%ZzmbdOXe9Vu10E zW4dQ>(IW0YNQx`FU6mCPZ4#F~daEH?_rRgpf2LCUy0YsL92(IC*C`|W(QRfLQg|YO zXsE<3CacvfI--iT!&BsF$gT*4NhPN2>5xXkhN3Pbf;Qhga4D=tjrMf|xU-2v7rbP!fXu}6aUczvCS+&Wsm-SKJ z>|^kmcufCU-CrOXXw=Cagb-nF92N);7v{f8Xs07tbc+bam$+hm#C}(oTaus2{&Rx& z5;q75$>CaPI7=Qj_Hg&jgQ}c)jo_1%m&`!{zfxN7;`9Rrj>dg^VQ%^9G z;BwLRYhU^>!kk=fBJW-$BSB&%7V71Tf*F`j9Us8num+ytL$Nt=MmG1CLDXYTqTu^^uq_n08#D>Dy1Souqn5rGWZ{ zHX6_-zrFUlspg((K(YnnXDLd3NsYo$c~5>7#RZwlOkxjih2CFZhzMv1O<;2q`3?%C>LCu%#APP*{hKKHcUM5<_FNl> z`D&v>)?nzRuv$u64VP0C>oZ?QWi`ar#tK7rOYx3-k=^lHoJq_n*yk4hIV~Z1#ejX- zJYsuy|8VZO`PDMB0r>EbexZa;;S`Z?W#x;(I>M~qyeXDm`V7PQ$n`EnvA(QH67;u< zWIB`efO4*$RER$Zy3x3i9T~*PE-%Q(q}1&)DbuS-3j-~(r~x4LPEzf|XV+dT^KQFL`qmK^znAvV#jIh&Vz}% zGS^C@+T-;(x`xEr*lb!5)>bGOZG4V>gx*=JB@hvmsg_ru)K+?xAP&)|=_J(^*5fi0 z3?ez31;s}Nj^E8l=f~lBxyFhF6ir&BXZ4Y(sA##eP)6=QNaw%s(f62| z)#Y_$>WrDN6QWU?TJ?{1!~VAD(!j``oV?e~R~mOtO!l`Uft>L@|4yvmTqMxH9j|rA zT3$DJnmEN|W5=()Hyos(#bDMx^UEbxuEJJkZ|=CJwzirw49EBIp2Y?Q>A@FUMHi;n z*9)5%$ty%C^(UQxAUC(3c;Je+SBV*~-)d~-*3FyyCM?pF6c<0Mx!u7D9pXfSQsH~T z%IN55RN#1d*+tR9>6xs#WcjctH@7ssQmZUbmWvG3!C?kddL^X%CoTW}4}WiFq)>~C zCSUL=Cr*e3P&n})KaLur6Q4iV&=^AEhNu_|f{{P5QQ1NY?mcGgZS7(Ek*KOV+%=EF zNyv&6{!$%+wzse5dxQ&$rI`25+j@6~FV!sy%()#gW>{oLJHZEdIlt@hkBm{wN~{xn zesFNPr6o>Xc+%e8&kv0V+*r~ekECD3Y?y;0pM-~Q#G=;vi_F{(WB)=PcFD5v?<+0( z`jv^(TU!&wY%C#wU;=)Kywb^X?ko8;-IY%{alC`Rz5JVEgiT(W?uguZZ73ZbkW+(Q z8oZB4-rY0LFAoskRGF9{ns0epSa&Gm^gyZVnwq?q38lN%a|H_raicmaD*du{5D3Ic zkf`U~5Uo_BX6)NPh$KT+5)A!hJ%Dx2Z*%lr#l^)#D5Jx*{-w~oQ}`Zr%iFRA1e50Z z3Ij$3q^h#AGQ8O_BxJj(sfLj~(|)o$Cj&->7^0Ua*VlLVF|eMmczRgb7#&^)cA+YB zhSAPsWR0G8b3B^MExgnWm*#=s;~8IgrAX0eo^l(*W!Mnw`u^&Fv_Vy0U1(FaXP7c8YE8JmG zmG=vVhE9=abq(F!?nK5@eYZD`if25rYBGwiP$EfxB3Woz75guJ@J$&1PgU`qR7u(G z{m!Vp#7+R@Db!Z4BH{C|0Xv@`UjK#;`c5YPKaNqnNY~9=RSbcX{uHbL%fEtezP;`i F^9Ka$?*{+? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/summary.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/summary.json new file mode 100644 index 0000000..c65d591 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_collection/summary.json @@ -0,0 +1,23 @@ +{ + "test_name": "test_e2e_rollout_collection_mock", + "num_rollouts": 6, + "steps_per_rollout": 4, + "rewards": [ + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0 + ], + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "reward_mean": 0.5, + "duration_s": 0.04496502876281738 +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0.json new file mode 100644 index 0000000..fda167c --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 0, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.30, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.30, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_0_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..673fea72cee53b931d5d1fc744d1329b0c395120 GIT binary patch literal 2600 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 L_He2>5_IhkKy85? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1.json new file mode 100644 index 0000000..38c7391 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 1, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.40, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.40, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f5db13f2a53e5d1d657aa8986b7aa1c94b82c6aa GIT binary patch literal 2621 zcmdT`X)qg#77kTh8m*>Nv89XKrnI;CW1pXKs*u*UDW*g?-E69IqGI zWyLtcs(E~61|qko zT^W4fax3-+dBrE{KO9ZR%H3Ajr>qxv4*U;@T)ihTp{wGd>X4EV{;=c|SEA!=4gEfB zn~TrrR#zXEa9LPKdw(d^Qq;7@ZuifC#N6h8wKI%)vqRC(6EqI5EnibnR^#U6{UzqX z<)W%w>~!mC%fkoM$o1qq!5iZ^R)F7GWPJXE3$=9J2BTYnEsO~M0d_){Vv+| z_a@dD_uEV>V_nwpk)qGYumXLyq1#Ivv6^2SK0xZ2 zOQN@i9gL(d2k+&;uVlu;k`^m8{kvruI{qXuVfF zX|?9#pQbV#uaO&W%-Y0m@o9P>#2B?@lS)`o4RB06i7GK=&}-ZGv-z)9n9nI&-2@#_ zC{S^{3yGuyY%8qUvAq-nXrSZ}c z0fgKS9$sG*%_j*w7+iS4_M?pey?W6O+OLM7S?e2N%XTYW9ZXPSrf7sShw2b9jBCti z^XjmcX49Yz;aheY_d5SV;l!b;NhFZ(lQT)~p6z^6Dv~TiV$s6H-Y^A zC5QyMbh;OV(ibl-;MIfjKP#aH8Q`IXH1vXxc2RS-y3nhg0eT6gvP@=$IVqXa<=*Ix z7i6e$i=b+RYbO)83z0;vC(#g%qEVZ^2^-Yr_=_j?0h*sW?)H%#3oZ2ASt&`c%vTt> z*}WJW-Wfyx)z1ZE(ibL|G6?r{ZOgkBXQ3KdX9|$%H*yFp)atj(y1qr0@yNlt6}prx z*Pt+IxQX*|rD%DO?{|~>TN)c_Iiy5*jawHd!5zD)A}!d8I^WrAyZ0Qenk>JE>?Ach z`)?ZmFY^EMK|S;s+(=SV!UtD5Gq3YkuL)wGQH=r-PT~9wGs&UI*XBAX>QdX>L9IWe zZc863RTYbP2X$G9@j5vrHEx6ABr!B3UH{ZL@y;j8nr-Hog6qr-5ClT7nj9QxG@5om zEp-2KC;MshGYX~FyUK@GB`Dk5*-tA%$TIGG*~dbhKJ(7>l9t_<}Y*4TEj_#={6fu zSa(ZtKP()f;OAoBRwEYDm`$%QQ)f6BLRv0*3O7LFfrj7oN3dm|s;b_O1wMGN@@>!< zsB0<4U!Rz{msijv%5QmelM`A0UU7KXqY1?+AjtCHA)uut>CNh{h7`H{fjRTSzV6r& zIMT-~WJCesbmyyyy1H&vTYY_rnl2%3eem#tQ}`4m$fb`dx91ByyeA`dDGWG2pGZVU z6cZD~>#k#_BBEX4GJKch)vJYtRt;vz%{o};+)pQ*mT3%j`qM}y451^+Q9xItcHR=OeOpS{F)oc9UjrGq)>3=6bD7^K#GtV<1**|&L76KeD Lxm>I{ANc6+lZc&P literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_1_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf5af91558d9e51075a64026546d49afd3159a7 GIT binary patch literal 2501 zcmd5;X;cyl7RIb5%jGqinkd%msiWpXxq@3wxuj1kMGGCNuuM%Mf#JJ${)f;xUkv~E~akc z7hq#JK@k1~Zc-SF8Ej4R*DZ9f-a<1LoK2v_c zCJe;`ukN>L+-|1lNBAw+ONrHPDA^vhmIPrw!Jf$pvJB~-B&%()#LJDeHDi3%!RVOF z1OJ>l=XsMD?1;LV6NVJM%Y^2cN55&r_JJTvXl}x1PLp9>(f#}Hl6nxwos@I*W)l-G zPHt+r>|&-l;beZq-D{6W8jjmJ#;kvuc`C?!yD+jsnX{iB&mS9KvO?YEDZ+wZk@z6Q zLHnx`X#@)MDLg(xx+w)Bvm@o6m`%838W!#^a>TuUlP^wh@J0=Pijf$zkZ!8|aJyUa z=tWni3EvpM7ZiQ=dhsOpPpm3}6Ad--fogzD_c6by+z>mV#3n_?7H9@B8f&-hBrhLY zFgm)cZJG3hgm z(-CK=!DB)dKx1PHlkQ`{yIkb)(*Sf=QIyqtj`o&K%`k^dT_Pj4C(pxd%ZCPJ*e za^9vvZ+f;vFVP$N8*lUP)oYFlzpx{z(V9>q*u07}d$h$+r@GJ z+-eXinz5idNcbIWPwz(Yyj8yvFIm25p`Y|zduTJQZw?prol9@bXZ)%>#!x=RgbfGB;R9Z3ZH#ED3BX_ubEL6`2p z+g!#=$DuMoMObG=FnQyqI}^04kjWvRMc2qmeM4EUDx-|(w&q_~7W3|6k@Y3Z=O#NC z#!<dFOnKWo)v)EeQ(@^n1{$l8Q(FN|5 zc2Vp0n}J>^2b(ZC{qqn!u5&_b*WHFL=OW_q^Ggx~fKE!bsU`l{2WZQp_wAL#-#uNK}h4BhNBpU5R=N00Ux~H#yfccoWzWJYD<=d^6*WT4}bnX7- z77|h#!%wF=~5l(N@PlFutOIRr?sj1 zML5=cmE#r`RwI*}hKAyF^qs->iEYxF+qX}AE$k{jB_$;>v5L}nh0c93i!O02o}Zt` zs+sEsXC0vB9Wb4`N4V9?V>W^-BPUeV95v4R`OUNq26vG3)sG)L)+i!@Q^jHn8k1a# zD@QPw+S-g79DlN-Z46Xo5Wq%0poqZ-)z%4u!GM?;e#I}lv$Y52KMtfyR;^ukxpqCA znWHMJqUNSbtOSt=9&qx((F>ORqR@6T_>;!i`Ou-kxxm!4w6t6!CIlm#S?~|bs7Uti z%NA{G4Xb8UbXt@0teOHEZhLs(NRW8UN!Co#${-6Ez3*>XLxQ86rWUMd$s_lgHj?!W zp}cS5ii)8jJ6`Zv=Ihhki9)-((`#!9<$rx4oG4V^Kfu%Jc{P?e=S6K!o_&3F0VI9F zq%7O)3_9cD!dExSwvO70KoU5!SvjTabH$mqf=L)!5hAt3+fk6dGxp{EyJcmSz2yAbX_Sw%UI7^bJ%UV4`UwKDIehp_ zs+#}i`Z^rTcd;Ms_@sEJw*UEuBk?Ad85NlU^4vL1o&RT#-yZUBob&sGHgrV%Xsb3} zAz)Ikg@ngo1?2$QFfHxBUH|*z{@Yyghck2?!6{_f#SLpDxKY2xGl0iw?^E?BFa7=B DC*Dh^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2.json new file mode 100644 index 0000000..bc83a6b --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 2, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.50, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.50, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_2_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff70b0458500abfec9a26e26b5c7d42af34579 GIT binary patch literal 2711 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 LT(zyb3{C$7>olK< literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3.json new file mode 100644 index 0000000..407fbef --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 3, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.60, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.60, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0191bdf45db85f51430c63acec25e81650af7671 GIT binary patch literal 2720 zcmds3X;2eb66O#PhJeS693r?yF%Ba~BBumFQAAJ(BM244rIAF40Tn_x6NE9y7(fLk zK~6=32m}ISIAVgx5Z*R-_4<9?Uw`S| zUTy#leGLT#1%Ug7bC(qq6i>@-;a(;AxdZvpQ9(fi>3;5vZ)^d7B+1)%TB%)x91Pv> z3iLtUnxwef?inbY0->bXt{JUhJlIqXW(U$`(^jB}vJV;0JN*3rQ_`<#^R?Ccr?rUIz6 z3jZ=MGEi`NdwjpKp~OO4@5#nAi4j1(bMj>Nu}iTn*p(OVgK=?TgM(A_Tc!`PdTzdn zhY|H{N}HOlPrPq<`t+B_#=AIEL&c*Q_3iZm85q+9GOI*+c;MnUH*<2fYHFw~PU0~h zFL8o7aMkdXgUt`Gwkx43{UKrV&9;%aR$UHLhBi0%WDRQqm`*@ohi)Bez|9C>AP8h8 z$!cD_2rVy1aX15#xjQ6@8&NM?w8n9rpI>A|HxB9(GgB7>ocTXo-k*Y@yGo4@b3?d`}-FUI&D_$BwwC!Dgwzgi@9Hx2fB4~&dhV-~s~ zjLrlu#tE(j-5G)c&k^@2v z)3HWzH|T<`F(w=zn(|Tnu=zv~K4~WNNUN%*ZXH%ITebY-aaeQIEQL&-m|}-s@ry7s zg@$LixdN8@`H=p*-rl!QCy(+YKx`kV^ce^t6H9ROc6-My6=Bu)GCoeB-(bk zx<^ttomkRmClz0rN5Dbcs$p|At)-2vRm_zu`Lmx! zc>w#P??fwI>YkouXnOL42RP)S&2rsN^J+%_`_61nuueNo!AyPKmdx= zn;=f?FKrK$iP3xx@&$+jDSj-I)Z^TSbf>@*edXDs3@(B=&)vP2)eiTp8&rCGO-&6; zOxHsY8`t}txHuS!*f>Eb8Uw^T7KL&AqL)WTbve(@mciRIWBr|Pha_C;Rz?O-YKd7@ zq4nVBr2;$l8Xp|aWt~9XmMlXy*AJtKjk0AmtYC+SH2{rk|2?Lqx=)0&=S8db6f!ysV{FME5-oCR)vmNkxVvRL5_75zfAfwKLa}3RVNe z_YGaWd$*{43d%~X1yQ1AmwhN^Zw7D4yA?IygsfM~G;+2C%euq32aY7|rfO5HZHr9pOd9Sj8rKpSbO0U?2qEtSr%ue(Wg)prgH zbL|k_R&pF(RgT2oso14tmEJ>b*$8v}eb*+xj;Wk(H4MGXz1q6^E0pmB< zMCIk~+$2ecjeYb@B8Wn#BU%YI&Itxp>MT_);)f3M1T!ypo%inEPo#xT<>?zuRD&hPV1>jKl>1>)-)2O+kVoX+h6tClN zWt=#@7z5ldR>HXcN~lfJrjIBAfJ~MJ9UXnRfhpY!tD2T}Fpn6#9`Z@**g?u7E2BL>HP9?+y_Rs1L0F|5| zXtbwb?D1HB)XY}v#75r3oPq+KG)+CxLIo-fAY1&9+f~^@p-{TJbD(u6V1+N?aKUj) z%Tu!E5)Zjqr%JNKhb{g7^K=)t0E`u-sN|8R%I`amAJ}w^sArhFp@-?UC!>O_*+c_r zeM@Q@EY-rlUpS$?&Igx#46~&JpWwOa^HhX9&9NsH#3-+z|rHyFtGfgGt3720GHxp7R$7e5fe|(3^qB-DZZX2 z>Q1Td=m1~5xQiy5nnLTZyVBPYUs2UnvYCA2wzm7MRXAL2dd6aTKwv27D8z~fYeTa^ zh{b-$>S{2v1F4P6k|RdYI)d2{lG4+)F$;atrbQ~`Vm>m1o49H&l{TiQb1L(#kchX! z_e;;8*E>Ydk#jNMkJllmlBKI8uR?vD{dW>>@baP>2AC49PagvVyoE*B8#CQRm2Xar z;S#Dwmusl(dk;faD=hcbvJO71?rS8pvBfJD_%8u2|8?#EMTYXvJtIxzET2xQ*g}Cs zFgG>bI)K)Am&-P>{x=!(=Mw#=`1wDG0ygcaS$-UN>7(~FU#>hA++DrSQC&h({sD+= B+Bg6J literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_0_rollout_3_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da6a005b208747137ca7f31ff1b32f686d205c57 GIT binary patch literal 2631 zcmds3X*3%O77m^+mT0T`G?bZVI(@Awc{HR!jH1sQl3H2~QB-Y>QYA=YSM^$3OIu5* z_gYJBRa=OXC>3i%wGA3eVhNfewuG$D%$fNy=e(K!Z~okK&-u=|_k8EO-#y>Gi--%V zN+2Zw0HA9Bqm45FAZNAP^Y+Q_Rw?q7IRKypw72=2YjolAMEu1^Soxl{)ie5kIfZiM z1csG91C~UUWLA03fHUD*T<7Z@-#GZ+adtU`ROqT7L5ovT9>IaC*o(B00Zx55ZP9fP zR_wHpWd^3#Mf~(G_?EYiz^?f9F~0_Je%zRVTN_X;u^h6r*PN8$3<^j8o1S9!9cMcl;DLp~X=NpxMdfrx=|AYcR$}KGD(g#n|2hp%tVb3wx zImzC+`Pgx9_6-%#W?LxKtYvAeZuPqV5o9r?0yBC=_J+;QLKL`~;BJT6(JBe6H$Ql9 zR2>F^Ao$IRwzhar?%jl29awBguKv_Ks4fO)cWtK1l$&B`U<85eaBBr*^coKLTwUEu zpj()o?Qtb9pQuH}Vw})u#+IUaoOr#m(lC8(idUx)rPT9DO~N5|8F-K=q7{*g^X>E2 z)|eZW%E~8-EkvHlK2nACbxNTT+lh<9;1-9|A3PYg&$-VTif3rLxVM&(NS`%7lsWbY z@y)Wor>0Dfme~Ic_MfI8hl*hHOz~ut*N+Y{2B*Kqr9SU##fEBIw2tEMjf|XKW?mq) zPt6Y)Q)JS-rktdt&4vIfLAcasdaD&MUYw|>C(=IGXmKV4kK4Hm4WH>BFn!zYCsGrA zlB4BiXf1sD=<2Zr@~x~IVtgX^q@#>NCPtn;%a!!hdcgzwA7#&7ceAm{x_|%nG$$+! z&>(|&X5l4u%_i4I!&a!{{K6geY9DVRu)j-(ae7BlAk5)ZxF zGJXa2XLU4Awa*4an1)#bT~->z#AJ{iI779!?!z35GZmGyCsshjcRB~(&t7Y%g};}nQTT4ML@O(_wXPX&M=wjv z9{%;%WUDHK7QuyV^VmPgcIBlP%jz77nY6s87R7wLEK04;@Ut@T456E4Udq*ZXpDF_D&c##1N^!6+(1TO)RIz-0u% zpHqQ1sdXC)CQpc0P9R(@x4i>$^({{ZMLG=jrU_pBkO4k{)H!CpostEQ>v8}7Bu)>C zqn9c$s{4+@AhHRv%Z03!EysHr8uPO>1CPeQMlh#K&2z}Y6b^xuQl>nwn2~QX>HGKB zayVD>_!(fhBmzI*UlA0v)6{fU2ie|)#B5xus<+E1&`>uXnXT|5uNyL=n_qM4diJPl z8j)IsJsSFD6G=IHCQb%Nv7)Z2>Ppui>b(|x-I)_YsGDV`!!4d&Dq`ZvlempYUHMlUOh<0g)Xp}dcw<^@H16eqTD|qBjYxvpPWW%9lAZ5d93(dA#{GZd0Jq>eCcWPI`ZIX zV;76Xs;qpzE9Rum+!j7dw^j)Vq$uvq1azy!>~#5P+!^vs-Zr#+at}Y zaKSRH!+q)Yyox5zRj|?yQdt?_$U1)9wxU8ka`}`N zmDDo4Cjc!zISbHA~Mt4 zj8aAB(&*{kUADHw7|dT0g9T^xxyfpm_bNiGtHN04#^k>!->F`GJEM;Uf&X#Jl3dQA zKe%K66)vC-tgv&iUEcyifF3t)Y&(9|NSFrY4*$30@jI6NcPRP4gE|(4h8l8BK}z2d RN_GPxz}^;N^U~To={Lkdp&9@H literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0.json new file mode 100644 index 0000000..408b611 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 0, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.30, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.30, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_0_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..673fea72cee53b931d5d1fc744d1329b0c395120 GIT binary patch literal 2600 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 L_He2>5_IhkKy85? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1.json new file mode 100644 index 0000000..7eb87d0 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 1, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.40, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.40, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f5db13f2a53e5d1d657aa8986b7aa1c94b82c6aa GIT binary patch literal 2621 zcmdT`X)qg#77kTh8m*>Nv89XKrnI;CW1pXKs*u*UDW*g?-E69IqGI zWyLtcs(E~61|qko zT^W4fax3-+dBrE{KO9ZR%H3Ajr>qxv4*U;@T)ihTp{wGd>X4EV{;=c|SEA!=4gEfB zn~TrrR#zXEa9LPKdw(d^Qq;7@ZuifC#N6h8wKI%)vqRC(6EqI5EnibnR^#U6{UzqX z<)W%w>~!mC%fkoM$o1qq!5iZ^R)F7GWPJXE3$=9J2BTYnEsO~M0d_){Vv+| z_a@dD_uEV>V_nwpk)qGYumXLyq1#Ivv6^2SK0xZ2 zOQN@i9gL(d2k+&;uVlu;k`^m8{kvruI{qXuVfF zX|?9#pQbV#uaO&W%-Y0m@o9P>#2B?@lS)`o4RB06i7GK=&}-ZGv-z)9n9nI&-2@#_ zC{S^{3yGuyY%8qUvAq-nXrSZ}c z0fgKS9$sG*%_j*w7+iS4_M?pey?W6O+OLM7S?e2N%XTYW9ZXPSrf7sShw2b9jBCti z^XjmcX49Yz;aheY_d5SV;l!b;NhFZ(lQT)~p6z^6Dv~TiV$s6H-Y^A zC5QyMbh;OV(ibl-;MIfjKP#aH8Q`IXH1vXxc2RS-y3nhg0eT6gvP@=$IVqXa<=*Ix z7i6e$i=b+RYbO)83z0;vC(#g%qEVZ^2^-Yr_=_j?0h*sW?)H%#3oZ2ASt&`c%vTt> z*}WJW-Wfyx)z1ZE(ibL|G6?r{ZOgkBXQ3KdX9|$%H*yFp)atj(y1qr0@yNlt6}prx z*Pt+IxQX*|rD%DO?{|~>TN)c_Iiy5*jawHd!5zD)A}!d8I^WrAyZ0Qenk>JE>?Ach z`)?ZmFY^EMK|S;s+(=SV!UtD5Gq3YkuL)wGQH=r-PT~9wGs&UI*XBAX>QdX>L9IWe zZc863RTYbP2X$G9@j5vrHEx6ABr!B3UH{ZL@y;j8nr-Hog6qr-5ClT7nj9QxG@5om zEp-2KC;MshGYX~FyUK@GB`Dk5*-tA%$TIGG*~dbhKJ(7>l9t_<}Y*4TEj_#={6fu zSa(ZtKP()f;OAoBRwEYDm`$%QQ)f6BLRv0*3O7LFfrj7oN3dm|s;b_O1wMGN@@>!< zsB0<4U!Rz{msijv%5QmelM`A0UU7KXqY1?+AjtCHA)uut>CNh{h7`H{fjRTSzV6r& zIMT-~WJCesbmyyyy1H&vTYY_rnl2%3eem#tQ}`4m$fb`dx91ByyeA`dDGWG2pGZVU z6cZD~>#k#_BBEX4GJKch)vJYtRt;vz%{o};+)pQ*mT3%j`qM}y451^+Q9xItcHR=OeOpS{F)oc9UjrGq)>3=6bD7^K#GtV<1**|&L76KeD Lxm>I{ANc6+lZc&P literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_1_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf5af91558d9e51075a64026546d49afd3159a7 GIT binary patch literal 2501 zcmd5;X;cyl7RIb5%jGqinkd%msiWpXxq@3wxuj1kMGGCNuuM%Mf#JJ${)f;xUkv~E~akc z7hq#JK@k1~Zc-SF8Ej4R*DZ9f-a<1LoK2v_c zCJe;`ukN>L+-|1lNBAw+ONrHPDA^vhmIPrw!Jf$pvJB~-B&%()#LJDeHDi3%!RVOF z1OJ>l=XsMD?1;LV6NVJM%Y^2cN55&r_JJTvXl}x1PLp9>(f#}Hl6nxwos@I*W)l-G zPHt+r>|&-l;beZq-D{6W8jjmJ#;kvuc`C?!yD+jsnX{iB&mS9KvO?YEDZ+wZk@z6Q zLHnx`X#@)MDLg(xx+w)Bvm@o6m`%838W!#^a>TuUlP^wh@J0=Pijf$zkZ!8|aJyUa z=tWni3EvpM7ZiQ=dhsOpPpm3}6Ad--fogzD_c6by+z>mV#3n_?7H9@B8f&-hBrhLY zFgm)cZJG3hgm z(-CK=!DB)dKx1PHlkQ`{yIkb)(*Sf=QIyqtj`o&K%`k^dT_Pj4C(pxd%ZCPJ*e za^9vvZ+f;vFVP$N8*lUP)oYFlzpx{z(V9>q*u07}d$h$+r@GJ z+-eXinz5idNcbIWPwz(Yyj8yvFIm25p`Y|zduTJQZw?prol9@bXZ)%>#!x=RgbfGB;R9Z3ZH#ED3BX_ubEL6`2p z+g!#=$DuMoMObG=FnQyqI}^04kjWvRMc2qmeM4EUDx-|(w&q_~7W3|6k@Y3Z=O#NC z#!<dFOnKWo)v)EeQ(@^n1{$l8Q(FN|5 zc2Vp0n}J>^2b(ZC{qqn!u5&_b*WHFL=OW_q^Ggx~fKE!bsU`l{2WZQp_wAL#-#uNK}h4BhNBpU5R=N00Ux~H#yfccoWzWJYD<=d^6*WT4}bnX7- z77|h#!%wF=~5l(N@PlFutOIRr?sj1 zML5=cmE#r`RwI*}hKAyF^qs->iEYxF+qX}AE$k{jB_$;>v5L}nh0c93i!O02o}Zt` zs+sEsXC0vB9Wb4`N4V9?V>W^-BPUeV95v4R`OUNq26vG3)sG)L)+i!@Q^jHn8k1a# zD@QPw+S-g79DlN-Z46Xo5Wq%0poqZ-)z%4u!GM?;e#I}lv$Y52KMtfyR;^ukxpqCA znWHMJqUNSbtOSt=9&qx((F>ORqR@6T_>;!i`Ou-kxxm!4w6t6!CIlm#S?~|bs7Uti z%NA{G4Xb8UbXt@0teOHEZhLs(NRW8UN!Co#${-6Ez3*>XLxQ86rWUMd$s_lgHj?!W zp}cS5ii)8jJ6`Zv=Ihhki9)-((`#!9<$rx4oG4V^Kfu%Jc{P?e=S6K!o_&3F0VI9F zq%7O)3_9cD!dExSwvO70KoU5!SvjTabH$mqf=L)!5hAt3+fk6dGxp{EyJcmSz2yAbX_Sw%UI7^bJ%UV4`UwKDIehp_ zs+#}i`Z^rTcd;Ms_@sEJw*UEuBk?Ad85NlU^4vL1o&RT#-yZUBob&sGHgrV%Xsb3} zAz)Ikg@ngo1?2$QFfHxBUH|*z{@Yyghck2?!6{_f#SLpDxKY2xGl0iw?^E?BFa7=B DC*Dh^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2.json new file mode 100644 index 0000000..fbd67cc --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 2, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.50, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.50, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_2_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff70b0458500abfec9a26e26b5c7d42af34579 GIT binary patch literal 2711 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 LT(zyb3{C$7>olK< literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3.json b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3.json new file mode 100644 index 0000000..821c840 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 3, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.60, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.60, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0191bdf45db85f51430c63acec25e81650af7671 GIT binary patch literal 2720 zcmds3X;2eb66O#PhJeS693r?yF%Ba~BBumFQAAJ(BM244rIAF40Tn_x6NE9y7(fLk zK~6=32m}ISIAVgx5Z*R-_4<9?Uw`S| zUTy#leGLT#1%Ug7bC(qq6i>@-;a(;AxdZvpQ9(fi>3;5vZ)^d7B+1)%TB%)x91Pv> z3iLtUnxwef?inbY0->bXt{JUhJlIqXW(U$`(^jB}vJV;0JN*3rQ_`<#^R?Ccr?rUIz6 z3jZ=MGEi`NdwjpKp~OO4@5#nAi4j1(bMj>Nu}iTn*p(OVgK=?TgM(A_Tc!`PdTzdn zhY|H{N}HOlPrPq<`t+B_#=AIEL&c*Q_3iZm85q+9GOI*+c;MnUH*<2fYHFw~PU0~h zFL8o7aMkdXgUt`Gwkx43{UKrV&9;%aR$UHLhBi0%WDRQqm`*@ohi)Bez|9C>AP8h8 z$!cD_2rVy1aX15#xjQ6@8&NM?w8n9rpI>A|HxB9(GgB7>ocTXo-k*Y@yGo4@b3?d`}-FUI&D_$BwwC!Dgwzgi@9Hx2fB4~&dhV-~s~ zjLrlu#tE(j-5G)c&k^@2v z)3HWzH|T<`F(w=zn(|Tnu=zv~K4~WNNUN%*ZXH%ITebY-aaeQIEQL&-m|}-s@ry7s zg@$LixdN8@`H=p*-rl!QCy(+YKx`kV^ce^t6H9ROc6-My6=Bu)GCoeB-(bk zx<^ttomkRmClz0rN5Dbcs$p|At)-2vRm_zu`Lmx! zc>w#P??fwI>YkouXnOL42RP)S&2rsN^J+%_`_61nuueNo!AyPKmdx= zn;=f?FKrK$iP3xx@&$+jDSj-I)Z^TSbf>@*edXDs3@(B=&)vP2)eiTp8&rCGO-&6; zOxHsY8`t}txHuS!*f>Eb8Uw^T7KL&AqL)WTbve(@mciRIWBr|Pha_C;Rz?O-YKd7@ zq4nVBr2;$l8Xp|aWt~9XmMlXy*AJtKjk0AmtYC+SH2{rk|2?Lqx=)0&=S8db6f!ysV{FME5-oCR)vmNkxVvRL5_75zfAfwKLa}3RVNe z_YGaWd$*{43d%~X1yQ1AmwhN^Zw7D4yA?IygsfM~G;+2C%euq32aY7|rfO5HZHr9pOd9Sj8rKpSbO0U?2qEtSr%ue(Wg)prgH zbL|k_R&pF(RgT2oso14tmEJ>b*$8v}eb*+xj;Wk(H4MGXz1q6^E0pmB< zMCIk~+$2ecjeYb@B8Wn#BU%YI&Itxp>MT_);)f3M1T!ypo%inEPo#xT<>?zuRD&hPV1>jKl>1>)-)2O+kVoX+h6tClN zWt=#@7z5ldR>HXcN~lfJrjIBAfJ~MJ9UXnRfhpY!tD2T}Fpn6#9`Z@**g?u7E2BL>HP9?+y_Rs1L0F|5| zXtbwb?D1HB)XY}v#75r3oPq+KG)+CxLIo-fAY1&9+f~^@p-{TJbD(u6V1+N?aKUj) z%Tu!E5)Zjqr%JNKhb{g7^K=)t0E`u-sN|8R%I`amAJ}w^sArhFp@-?UC!>O_*+c_r zeM@Q@EY-rlUpS$?&Igx#46~&JpWwOa^HhX9&9NsH#3-+z|rHyFtGfgGt3720GHxp7R$7e5fe|(3^qB-DZZX2 z>Q1Td=m1~5xQiy5nnLTZyVBPYUs2UnvYCA2wzm7MRXAL2dd6aTKwv27D8z~fYeTa^ zh{b-$>S{2v1F4P6k|RdYI)d2{lG4+)F$;atrbQ~`Vm>m1o49H&l{TiQb1L(#kchX! z_e;;8*E>Ydk#jNMkJllmlBKI8uR?vD{dW>>@baP>2AC49PagvVyoE*B8#CQRm2Xar z;S#Dwmusl(dk;faD=hcbvJO71?rS8pvBfJD_%8u2|8?#EMTYXvJtIxzET2xQ*g}Cs zFgG>bI)K)Am&-P>{x=!(=Mw#=`1wDG0ygcaS$-UN>7(~FU#>hA++DrSQC&h({sD+= B+Bg6J literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215856/rollout_traces/step_1_rollout_3_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da6a005b208747137ca7f31ff1b32f686d205c57 GIT binary patch literal 2631 zcmds3X*3%O77m^+mT0T`G?bZVI(@Awc{HR!jH1sQl3H2~QB-Y>QYA=YSM^$3OIu5* z_gYJBRa=OXC>3i%wGA3eVhNfewuG$D%$fNy=e(K!Z~okK&-u=|_k8EO-#y>Gi--%V zN+2Zw0HA9Bqm45FAZNAP^Y+Q_Rw?q7IRKypw72=2YjolAMEu1^Soxl{)ie5kIfZiM z1csG91C~UUWLA03fHUD*T<7Z@-#GZ+adtU`ROqT7L5ovT9>IaC*o(B00Zx55ZP9fP zR_wHpWd^3#Mf~(G_?EYiz^?f9F~0_Je%zRVTN_X;u^h6r*PN8$3<^j8o1S9!9cMcl;DLp~X=NpxMdfrx=|AYcR$}KGD(g#n|2hp%tVb3wx zImzC+`Pgx9_6-%#W?LxKtYvAeZuPqV5o9r?0yBC=_J+;QLKL`~;BJT6(JBe6H$Ql9 zR2>F^Ao$IRwzhar?%jl29awBguKv_Ks4fO)cWtK1l$&B`U<85eaBBr*^coKLTwUEu zpj()o?Qtb9pQuH}Vw})u#+IUaoOr#m(lC8(idUx)rPT9DO~N5|8F-K=q7{*g^X>E2 z)|eZW%E~8-EkvHlK2nACbxNTT+lh<9;1-9|A3PYg&$-VTif3rLxVM&(NS`%7lsWbY z@y)Wor>0Dfme~Ic_MfI8hl*hHOz~ut*N+Y{2B*Kqr9SU##fEBIw2tEMjf|XKW?mq) zPt6Y)Q)JS-rktdt&4vIfLAcasdaD&MUYw|>C(=IGXmKV4kK4Hm4WH>BFn!zYCsGrA zlB4BiXf1sD=<2Zr@~x~IVtgX^q@#>NCPtn;%a!!hdcgzwA7#&7ceAm{x_|%nG$$+! z&>(|&X5l4u%_i4I!&a!{{K6geY9DVRu)j-(ae7BlAk5)ZxF zGJXa2XLU4Awa*4an1)#bT~->z#AJ{iI779!?!z35GZmGyCsshjcRB~(&t7Y%g};}nQTT4ML@O(_wXPX&M=wjv z9{%;%WUDHK7QuyV^VmPgcIBlP%jz77nY6s87R7wLEK04;@Ut@T456E4Udq*ZXpDF_D&c##1N^!6+(1TO)RIz-0u% zpHqQ1sdXC)CQpc0P9R(@x4i>$^({{ZMLG=jrU_pBkO4k{)H!CpostEQ>v8}7Bu)>C zqn9c$s{4+@AhHRv%Z03!EysHr8uPO>1CPeQMlh#K&2z}Y6b^xuQl>nwn2~QX>HGKB zayVD>_!(fhBmzI*UlA0v)6{fU2ie|)#B5xus<+E1&`>uXnXT|5uNyL=n_qM4diJPl z8j)IsJsSFD6G=IHCQb%Nv7)Z2>Ppui>b(|x-I)_YsGDV`!!4d&Dq`ZvlempYUHMlUOh<0g)Xp}dcw<^@H16eqTD|qBjYxvpPWW%9lAZ5d93(dA#{GZd0Jq>eCcWPI`ZIX zV;76Xs;qpzE9Rum+!j7dw^j)Vq$uvq1azy!>~#5P+!^vs-Zr#+at}Y zaKSRH!+q)Yyox5zRj|?yQdt?_$U1)9wxU8ka`}`N zmDDo4Cjc!zISbHA~Mt4 zj8aAB(&*{kUADHw7|dT0g9T^xxyfpm_bNiGtHN04#^k>!->F`GJEM;Uf&X#Jl3dQA zKe%K66)vC-tgv&iUEcyifF3t)Y&(9|NSFrY4*$30@jI6NcPRP4gE|(4h8l8BK}z2d RN_GPxz}^;N^U~To={Lkdp&9@H literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215856/summary.txt b/test_artifacts/grpo_e2e/20261016_215856/summary.txt new file mode 100644 index 0000000..0246fd0 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/summary.txt @@ -0,0 +1,25 @@ +============================================================ +GRPO E2E TEST REPORT: test_e2e_training_loop_mock +============================================================ +Status: passed +Duration: 0.04s +Training steps: 2 +Rollouts per step: 4 +Total rollouts: 8 + +--- Model Weight Change --- +Weights changed: True +Total delta L2 norm: 0.185388 + embedding.weight: delta=0.025263 (norm 90.3909 -> 90.3893) + head.weight: delta=0.180862 (norm 9.1759 -> 9.1803) + head.bias: delta=0.031929 (norm 1.6532 -> 1.6515) + +--- Training Metrics --- + Step 0: loss=0.0000 reward_mean=0.50 grad_norm=1.0000 valid_terms=8 + Step 1: loss=0.0000 reward_mean=0.50 grad_norm=1.0000 valid_terms=8 + +--- Checkpoint --- +Checkpoint path: test_artifacts/grpo_e2e/20261016_215856/checkpoint/step_2 +Checkpoint loadable: True + +============================================================ \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/test_report.json b/test_artifacts/grpo_e2e/20261016_215856/test_report.json new file mode 100644 index 0000000..b4e9138 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/test_report.json @@ -0,0 +1,15 @@ +{ + "test_name": "test_e2e_training_loop_mock", + "start_time": "2026-10-16T21:58:56", + "status": "passed", + "duration_s": 0.0386500358581543, + "num_training_steps": 2, + "num_rollouts_per_step": 4, + "total_rollouts": 8, + "model_weights_changed": true, + "total_delta_norm": 0.18538758670094135, + "checkpoint_loadable": true, + "final_loss": 0.0, + "final_reward_mean": 0.5, + "final_grad_norm": 0.9999997175711289 +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/training_log.json b/test_artifacts/grpo_e2e/20261016_215856/training_log.json new file mode 100644 index 0000000..3071712 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/training_log.json @@ -0,0 +1,34 @@ +[ + { + "step": 0, + "loss": 0.0, + "reward_mean": 0.5, + "reward_std": 0.5, + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "grad_norm": 1.0000000347938705, + "lr": 0.001, + "valid_terms": 8, + "step_time": 0.019833087921142578 + }, + { + "step": 1, + "loss": 0.0, + "reward_mean": 0.5, + "reward_std": 0.5, + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "grad_norm": 0.9999997175711289, + "lr": 0.001, + "valid_terms": 8, + "step_time": 0.015851974487304688 + } +] \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215856/weight_diff/detailed_diff.json b/test_artifacts/grpo_e2e/20261016_215856/weight_diff/detailed_diff.json new file mode 100644 index 0000000..6713397 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215856/weight_diff/detailed_diff.json @@ -0,0 +1,51 @@ +{ + "parameters": { + "embedding.weight": { + "before_norm": 91.11665344238281, + "after_norm": 91.11591339111328, + "delta_l2": 0.012671872042119503, + "delta_max": 0.0010254383087158203, + "delta_mean": -1.0594574177957838e-06, + "shape": [ + 256, + 32 + ], + "num_elements": 8192, + "grad_norm": 3.506531000137329, + "grad_max": 1.0161888599395752 + }, + "head.weight": { + "before_norm": 9.253376960754395, + "after_norm": 9.25264835357666, + "delta_l2": 0.09050253033638, + "delta_max": 0.0010017603635787964, + "delta_mean": 4.1243034502258524e-05, + "shape": [ + 256, + 32 + ], + "num_elements": 8192, + "grad_norm": 32.2695198059082, + "grad_max": 6.838644027709961 + }, + "head.bias": { + "before_norm": 1.6341360807418823, + "after_norm": 1.6350926160812378, + "delta_l2": 0.01599622517824173, + "delta_max": 0.0010016560554504395, + "delta_mean": 1.566299397381954e-05, + "shape": [ + 256 + ], + "num_elements": 256, + "grad_norm": 4.00044059753418, + "grad_max": 2.012416124343872 + } + }, + "summary": { + "total_params": 16640, + "trainable_params": 16640, + "changed_param_groups": 3, + "total_param_groups": 3 + } +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_1/model.pt b/test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_1/model.pt new file mode 100644 index 0000000000000000000000000000000000000000..7efb5f1e00394e8466006d13a85a23573ff93d5b GIT binary patch literal 68559 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 E04RPt_y7O^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_2/model.pt b/test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_2/model.pt new file mode 100644 index 0000000000000000000000000000000000000000..c49a2b7b812d36b520023e942dd2bf8f6566c7dd GIT binary patch literal 68559 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

?b*W9a!g!ATxKSr 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 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/convergence/convergence_data.json b/test_artifacts/grpo_e2e/20261016_215929/convergence/convergence_data.json new file mode 100644 index 0000000..0a9af61 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/convergence/convergence_data.json @@ -0,0 +1,383 @@ +{ + "test_name": "test_e2e_policy_gradient_loss_convergence", + "num_steps": 50, + "rewards": [ + 1.0, + 0.0, + 1.0, + 0.0 + ], + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "loss_history": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "policy_history": [ + [ + 0.26248958706855774, + 0.23751039803028107, + 0.26248958706855774, + 0.23751039803028107 + ], + [ + 0.27491697669029236, + 0.22508299350738525, + 0.27491697669029236, + 0.22508299350738525 + ], + [ + 0.2872212529182434, + 0.2127787321805954, + 0.2872212529182434, + 0.2127787321805954 + ], + [ + 0.2993438243865967, + 0.20065616071224213, + 0.2993438243865967, + 0.20065616071224213 + ], + [ + 0.3112296760082245, + 0.1887703388929367, + 0.3112296760082245, + 0.1887703388929367 + ], + [ + 0.32282814383506775, + 0.17717184126377106, + 0.32282814383506775, + 0.17717184126377106 + ], + [ + 0.3340938985347748, + 0.1659061163663864, + 0.3340938985347748, + 0.1659061163663864 + ], + [ + 0.34498724341392517, + 0.15501274168491364, + 0.34498724341392517, + 0.15501274168491364 + ], + [ + 0.3554747700691223, + 0.14452524483203888, + 0.3554747700691223, + 0.14452524483203888 + ], + [ + 0.36552929878234863, + 0.13447070121765137, + 0.36552929878234863, + 0.13447070121765137 + ], + [ + 0.3751300871372223, + 0.1248699352145195, + 0.3751300871372223, + 0.1248699352145195 + ], + [ + 0.38426241278648376, + 0.11573759466409683, + 0.38426241278648376, + 0.11573759466409683 + ], + [ + 0.3929175138473511, + 0.10708249360322952, + 0.3929175138473511, + 0.10708249360322952 + ], + [ + 0.40109196305274963, + 0.09890804439783096, + 0.40109196305274963, + 0.09890804439783096 + ], + [ + 0.40878725051879883, + 0.09121274203062057, + 0.40878725051879883, + 0.09121274203062057 + ], + [ + 0.41600921750068665, + 0.08399078994989395, + 0.41600921750068665, + 0.08399078994989395 + ], + [ + 0.42276740074157715, + 0.07723261415958405, + 0.42276740074157715, + 0.07723261415958405 + ], + [ + 0.4290744960308075, + 0.0709255114197731, + 0.4290744960308075, + 0.0709255114197731 + ], + [ + 0.4349457919597626, + 0.06505422294139862, + 0.4349457919597626, + 0.06505422294139862 + ], + [ + 0.44039857387542725, + 0.05960145220160484, + 0.44039857387542725, + 0.05960145220160484 + ], + [ + 0.4454515874385834, + 0.05454840138554573, + 0.4454515874385834, + 0.05454840138554573 + ], + [ + 0.4501247704029083, + 0.04987524449825287, + 0.4501247704029083, + 0.04987524449825287 + ], + [ + 0.45443853735923767, + 0.04556148499250412, + 0.45443853735923767, + 0.04556148499250412 + ], + [ + 0.45841363072395325, + 0.04158635437488556, + 0.45841363072395325, + 0.04158635437488556 + ], + [ + 0.46207091212272644, + 0.037929099053144455, + 0.46207091212272644, + 0.037929099053144455 + ], + [ + 0.4654307961463928, + 0.03456922248005867, + 0.4654307961463928, + 0.03456922248005867 + ], + [ + 0.4685133099555969, + 0.031486690044403076, + 0.4685133099555969, + 0.031486690044403076 + ], + [ + 0.4713379144668579, + 0.028662102296948433, + 0.4713379144668579, + 0.028662102296948433 + ], + [ + 0.4739232361316681, + 0.026076797395944595, + 0.4739232361316681, + 0.026076797395944595 + ], + [ + 0.4762870669364929, + 0.02371295355260372, + 0.4762870669364929, + 0.02371295355260372 + ], + [ + 0.478446364402771, + 0.02155364491045475, + 0.478446364402771, + 0.02155364491045475 + ], + [ + 0.4804171323776245, + 0.019582878798246384, + 0.4804171323776245, + 0.019582878798246384 + ], + [ + 0.4822143614292145, + 0.017785610631108284, + 0.4822143614292145, + 0.017785610631108284 + ], + [ + 0.48385223746299744, + 0.01614774949848652, + 0.48385223746299744, + 0.01614774949848652 + ], + [ + 0.485343873500824, + 0.014656132087111473, + 0.485343873500824, + 0.014656132087111473 + ], + [ + 0.48670148849487305, + 0.013298512436449528, + 0.48670148849487305, + 0.013298512436449528 + ], + [ + 0.48793649673461914, + 0.0120635274797678, + 0.48793649673461914, + 0.0120635274797678 + ], + [ + 0.48905932903289795, + 0.01094065047800541, + 0.48905932903289795, + 0.01094065047800541 + ], + [ + 0.4900798201560974, + 0.009920168668031693, + 0.4900798201560974, + 0.009920168668031693 + ], + [ + 0.49100688099861145, + 0.008993119932711124, + 0.49100688099861145, + 0.008993119932711124 + ], + [ + 0.49184873700141907, + 0.008151262067258358, + 0.49184873700141907, + 0.008151262067258358 + ], + [ + 0.4926129877567291, + 0.007387027610093355, + 0.4926129877567291, + 0.007387027610093355 + ], + [ + 0.4933064877986908, + 0.006693469360470772, + 0.4933064877986908, + 0.006693469360470772 + ], + [ + 0.493935763835907, + 0.006064228247851133, + 0.493935763835907, + 0.006064228247851133 + ], + [ + 0.4945065379142761, + 0.005493482109159231, + 0.4945065379142761, + 0.005493482109159231 + ], + [ + 0.49502408504486084, + 0.004975910764187574, + 0.49502408504486084, + 0.004975910764187574 + ], + [ + 0.4954933226108551, + 0.004506658762693405, + 0.4954933226108551, + 0.004506658762693405 + ], + [ + 0.49591872096061707, + 0.004081294406205416, + 0.49591872096061707, + 0.004081294406205416 + ], + [ + 0.4963041841983795, + 0.0036957787815481424, + 0.4963041841983795, + 0.0036957787815481424 + ], + [ + 0.49665358662605286, + 0.0033464336302131414, + 0.49665358662605286, + 0.0033464336302131414 + ] + ], + "final_policy": [ + 0.49665358662605286, + 0.0033464336302131414, + 0.49665358662605286, + 0.0033464336302131414 + ], + "initial_policy": [ + 0.26248958706855774, + 0.23751039803028107, + 0.26248958706855774, + 0.23751039803028107 + ], + "duration_s": 0.017443180084228516 +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/convergence/summary.txt b/test_artifacts/grpo_e2e/20261016_215929/convergence/summary.txt new file mode 100644 index 0000000..5b1a9bc --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/convergence/summary.txt @@ -0,0 +1,22 @@ +GRPO Loss Convergence Test +======================================== +Steps: 50 +Rewards: [1.0, 0.0, 1.0, 0.0] +Initial policy (uniform): ['0.2625', '0.2375', '0.2625', '0.2375'] +Final policy: ['0.4967', '0.0033', '0.4967', '0.0033'] +Good action total prob: 0.9933 +Bad action total prob: 0.0067 +Early avg loss: 0.0000 +Late avg loss: 0.0000 + +Per-step loss history (every 5th): + Step 0: loss=0.0000 policy=[0.262, 0.238, 0.262, 0.238] + Step 5: loss=0.0000 policy=[0.323, 0.177, 0.323, 0.177] + Step 10: loss=0.0000 policy=[0.375, 0.125, 0.375, 0.125] + Step 15: loss=0.0000 policy=[0.416, 0.084, 0.416, 0.084] + Step 20: loss=0.0000 policy=[0.445, 0.055, 0.445, 0.055] + Step 25: loss=0.0000 policy=[0.465, 0.035, 0.465, 0.035] + Step 30: loss=0.0000 policy=[0.478, 0.022, 0.478, 0.022] + Step 35: loss=0.0000 policy=[0.487, 0.013, 0.487, 0.013] + Step 40: loss=0.0000 policy=[0.492, 0.008, 0.492, 0.008] + Step 45: loss=0.0000 policy=[0.495, 0.005, 0.495, 0.005] \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/model_diff.json b/test_artifacts/grpo_e2e/20261016_215929/model_diff.json new file mode 100644 index 0000000..1c5fdb2 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/model_diff.json @@ -0,0 +1,22 @@ +{ + "embedding.weight": { + "initial_norm": 91.4769058227539, + "final_norm": 91.474609375, + "delta_norm": 0.025375721976161003, + "changed": true + }, + "head.weight": { + "initial_norm": 9.211176872253418, + "final_norm": 9.209989547729492, + "delta_norm": 0.18093866109848022, + "changed": true + }, + "head.bias": { + "initial_norm": 1.5798417329788208, + "final_norm": 1.580965280532837, + "delta_norm": 0.031921159476041794, + "changed": true + }, + "_total_delta_norm": 0.1854769170765381, + "_any_changed": true +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/policy_gradient_loss_properties.json b/test_artifacts/grpo_e2e/20261016_215929/policy_gradient_loss_properties.json new file mode 100644 index 0000000..4f163ab --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/policy_gradient_loss_properties.json @@ -0,0 +1,48 @@ +{ + "tests": [ + { + "name": "positive_advantage_gradient", + "logp": -1.0, + "advantage": 1.0, + "gradient": -1.0, + "expected": "negative (optimizer increases logp)", + "passed": true + }, + { + "name": "negative_advantage_gradient", + "logp": -1.0, + "advantage": -1.0, + "gradient": 1.0, + "expected": "positive (optimizer decreases logp)", + "passed": true + }, + { + "name": "zero_advantage_gradient", + "logp": -1.0, + "advantage": 0.0, + "gradient": -0.0, + "expected": "zero", + "passed": true + }, + { + "name": "clipping_large_ratio", + "ratio": 18.17414536944306, + "clipped_ratio": 1.2, + "loss": -1.2000000476837158, + "expected_loss": -1.2, + "passed": true + }, + { + "name": "batch_consistency", + "individual_losses": [ + -1.0, + 0.5, + -0.0 + ], + "batch_loss": -0.1666666716337204, + "expected_batch_mean": -0.16666666666666666, + "passed": true + } + ], + "all_passed": true +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0.json new file mode 100644 index 0000000..384a2d3 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 0, + "task_id": "mock_task_001", + "reward": 1.0, + "advantage": 0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.20, y=0.50)", + "action_type": "click", + "x": 63, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.20, y=0.55)", + "action_type": "click", + "x": 63, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.20, y=0.60)", + "action_type": "click", + "x": 63, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.20, y=0.65)", + "action_type": "click", + "x": 63, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..673fea72cee53b931d5d1fc744d1329b0c395120 GIT binary patch literal 2600 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 L_He2>5_IhkKy85? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_2.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd3281c7c398172e361683a9701cd4d6a39853f GIT binary patch literal 2707 zcmdT`do&Xa8=sU?$?Hu~6otHqy?>ls%$o(zjbJ^T) z+f4R0VH>$EjJ1SZHZ+$p<8!`$zSBAH`TqI-`QCG$^PK0L-}A@woacFd&oAYwBSdEZ z@%;b*K*rA2+8F?lu-b_i_wCy8TTtx_0Kk5CJL`+rqH}p{^tBBCT^&ow5*PQ#+julS z$Esgp)I=Nu|3eq5jq|egS_o|^`o%iq(eFt~(n|ivY}Ng{as0BNe`c=@);+SR{Ll_M z;NLlMU+};|&k(&_IqWy$>{?q8YZ*rt&;?8qUAThEO`MP$(E14I^&_$s0EJWg6o0zh z7JqJ+)FZibs@QmmJG&3=Q}eb`l#p!yH`I3I#9|t#hu$3>`C#hJ0`s?OP7GP}2zo>P zhS_g}PMSs-mq#1l%G*IFkmj1;q42bm&oCYu1$nl{Rk1|2P-;+U~# zV70sNm8!WE>E>Rz#9+LRcKJpJeI6VYu$i&vg~|fFI{$o3cp&ROy$b(WW#Kn0Q}67E zdB6wRjP*@na!0Y=yh@Ith!>}xno=6IvA*x%BBp5?CiV$P%U)*LRg-}HvP^`W^>*&~6 zb*9Ky%J{orX~}?AvE_~C{}IcYkrB^16nu)~+p8(~T^@^ZfwNrHZ6IG6Pu!m#8{A~2 zR=kT(T7fG}nJF{LqO{#c6>$#(Z*+eUphrrIi&AX4`vHaz|(W&GV>LOi^dR-ZHQhanl_M4 z6c_jKKEeE@0Z^BFF{B20f&h(*U0KY!F|DVSs|YUu3H@hS-9s=#nsp?MxSGhD-gc3s z_yxYKSGm#A4ZlTugCN}l?*{RVzZUxw(lG{zBK@g6N|?R!AQjU}#w?~^sX|2$eAZSt z%W0Vvf8itR9n*N^2x=gZ>F%4Foc!1m2`fZ+67Y>B4A;r<^Lfl8N*0E+vmT9=BOFzh z*I`AF>L#+<1k@yDW#B!>X`^L1Nm50Z+59D!JuT31o6$BxXr5_4zhvGrniTB2jS;2a zI`WOO{dwu`nv|5Vp{b#B2x>n~AtHFVIDA(se9!!3u+qk#75$T$#yODW9FJ=z$~48~ z{+ZGU_rqN}+Ft1s9zAHTp&UG8d$Ico9#%;XdI!#X&6gOdtnDsEK^vKu$J};>)nb%ZTM|xS_`!kL8BCAv-2Ny<--I0See=Tp;F|nn zK^UQOZ`D>lCfTbbY}j=~jg+d7vv&(xMix9kp+;Jw4uWXQvoQjkEQNeYRyIA@P8_k- zu=M6j&1;H#JbVAVv-2vVT4 za4meaRDughFZk8gtTr1=TjrrWqTOt*s2h?CvSz5+x)oBqY5MKYNFT9&%k&VeSOqOo>f*ygrG$9x>~BH>P;X7+vvc*R$55HVD_x_%BFP_G@*Ml}UXXN%XBe{_FBCo# zt@7%nh=`Cdtd`brbI`|JmDm%N()@PnsJh1crqDB*mU1V@r+mmLE7+#jHx(y0;a1so zdw9f@NI1agi34hAoH7(Ru*mP;o!T*l<@oXO@#12la+-DyqkkrnKkPEg<6)%rlP(EqlWBT+mg* z^XGXSOAVtshx<#$zI0~Zs7J#+f0>hJQR*h^DOp)XZ!XLHqNmsLc0nKSy*oB-C%ves z(hJ;?9yioIx7Sz;NV%}WC!$-wcd^k6WT0kX3&_pMN&il}Z@Q&L(TFyzk#qfO6?c9+ zVZ^(U<1Z87_jY9tY@{{;d~t^S^tCD1nN(jY^XXCnl^dShQ{I3Q;Fcyzj{BZIeR969 zm>jP?2zMu)psm0)X?D0l=N>yrkRFHia8|(1r&W8i9~w)74Cbbzyee55ZbHS z79gmykQJ<~)Jm0?mEoXq)X~unZn*prSn;iagC5`D)|U@4nfb0xPNCSFm$Lg=I zFHBCgI#ZFd^(S`*)`FP3?%II-dhQ;<8nNol literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_3.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_0_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8770b85f0426c5c79773fa1144830f4cfadd072b GIT binary patch literal 2740 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 Lxm>I{ANc6+lZc&P literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf5af91558d9e51075a64026546d49afd3159a7 GIT binary patch literal 2501 zcmd5;X;cyl7RIb5%jGqinkd%msiWpXxq@3wxuj1kMGGCNuuM%Mf#JJ${)f;xUkv~E~akc z7hq#JK@k1~Zc-SF8Ej4R*DZ9f-a<1LoK2v_c zCJe;`ukN>L+-|1lNBAw+ONrHPDA^vhmIPrw!Jf$pvJB~-B&%()#LJDeHDi3%!RVOF z1OJ>l=XsMD?1;LV6NVJM%Y^2cN55&r_JJTvXl}x1PLp9>(f#}Hl6nxwos@I*W)l-G zPHt+r>|&-l;beZq-D{6W8jjmJ#;kvuc`C?!yD+jsnX{iB&mS9KvO?YEDZ+wZk@z6Q zLHnx`X#@)MDLg(xx+w)Bvm@o6m`%838W!#^a>TuUlP^wh@J0=Pijf$zkZ!8|aJyUa z=tWni3EvpM7ZiQ=dhsOpPpm3}6Ad--fogzD_c6by+z>mV#3n_?7H9@B8f&-hBrhLY zFgm)cZJG3hgm z(-CK=!DB)dKx1PHlkQ`{yIkb)(*Sf=QIyqtj`o&K%`k^dT_Pj4C(pxd%ZCPJ*e za^9vvZ+f;vFVP$N8*lUP)oYFlzpx{z(V9>q*u07}d$h$+r@GJ z+-eXinz5idNcbIWPwz(Yyj8yvFIm25p`Y|zduTJQZw?prol9@bXZ)%>#!x=RgbfGB;R9Z3ZH#ED3BX_ubEL6`2p z+g!#=$DuMoMObG=FnQyqI}^04kjWvRMc2qmeM4EUDx-|(w&q_~7W3|6k@Y3Z=O#NC z#!<dFOnKWo)v)EeQ(@^n1{$l8Q(FN|5 zc2Vp0n}J>^2b(ZC{qqn!u5&_b*WHFL=OW_q^Ggx~fKE!bsU`l{2WZQp_wAL#-#uNK}h4BhNBpU5R=N00Ux~H#yfccoWzWJYD<=d^6*WT4}bnX7- z77|h#!%wF=~5l(N@PlFutOIRr?sj1 zML5=cmE#r`RwI*}hKAyF^qs->iEYxF+qX}AE$k{jB_$;>v5L}nh0c93i!O02o}Zt` zs+sEsXC0vB9Wb4`N4V9?V>W^-BPUeV95v4R`OUNq26vG3)sG)L)+i!@Q^jHn8k1a# zD@QPw+S-g79DlN-Z46Xo5Wq%0poqZ-)z%4u!GM?;e#I}lv$Y52KMtfyR;^ukxpqCA znWHMJqUNSbtOSt=9&qx((F>ORqR@6T_>;!i`Ou-kxxm!4w6t6!CIlm#S?~|bs7Uti z%NA{G4Xb8UbXt@0teOHEZhLs(NRW8UN!Co#${-6Ez3*>XLxQ86rWUMd$s_lgHj?!W zp}cS5ii)8jJ6`Zv=Ihhki9)-((`#!9<$rx4oG4V^Kfu%Jc{P?e=S6K!o_&3F0VI9F zq%7O)3_9cD!dExSwvO70KoU5!SvjTabH$mqf=L)!5hAt3+fk6dGxp{EyJcmSz2yAbX_Sw%UI7^bJ%UV4`UwKDIehp_ zs+#}i`Z^rTcd;Ms_@sEJw*UEuBk?Ad85NlU^4vL1o&RT#-yZUBob&sGHgrV%Xsb3} zAz)Ikg@ngo1?2$QFfHxBUH|*z{@Yyghck2?!6{_f#SLpDxKY2xGl0iw?^E?BFa7=B DC*Dh^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_2.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..268454d1d37c51f825a87221f41eeb34e812bf45 GIT binary patch literal 2626 zcmd5;dpHvc8y^)R^toi#hf~5+&LL&iFjKi4$7wn#cTGnnmfU9Up|FbSf?Q{vO2isP zt{aOsNu$W!#t~tg;TgNx=5xO9ukZQ3@0|b6`TlvI_kDiP`@X+F-plXyX@sk~Do7Oo z0I0it?{o$LP;lJxS9U6HS-Hm{djLRH#m(vX+4!=h$)vOSmlV5KLzK4bS{AiTcs;)V z^p_UD)|}FP82jf%n0--{w#7SDyL~}fSuQ)AOT3*9W}jl7d-LiQ`L#Z%?tECF?#Q=y zOzw7nDZvcR9;wHkkMjb0S~ITq3Hi$NcckMI|as>VpYJR-!dh`_iQ}2B4c`Hla5)E?9HXiXk zi_%DU33tjdh?X!~aiBHAs;B`L(vC${PN$hOd2YdCQ2BeVTAQ_duW30uZl3#NZ%T~4_$(|^Y z?xmgVw9}hU1wvz`eM5Wo1ho7rR7pK$5}KWrz}kZH1PW6h<4J0@JyPoCu0m zcYL2F25sNFy_AVj2x$qPvvcM&WeCVmBBG_`u?c&TK38$r3@kW2it>8NyOzZ4<`L1Y z0VEiTUyTT2B!T5SLdR!XSBlboQ-f60YgI-i2BSc2hsz(sWyax+F**y-HwNKM7xiTJ zXXupYt}CGU*j|o1hRb?6vy@6HCDb`g7}POGLRRZs4YI4g_F-Z^4} z>Dl~(w&iZiM=Yv%FvhGRC2n?9T)yp_jtu!lej~?jQX2XOyR^T}AN6Ub^R9hm0zxF` zEMHF*$dN6`mbzABy@slNX1){`!zrN~FsV;+{Ox4OH%veTcg$S$ZDTPzgO$ofl8H&Tb9p$cCc(0SmZ2BCE^72q62cH3MgO80 zeYJzy|CTKijXp4FyE7c#UdPOftHrZOBQ%GDj#5==eZqWkPH&28S{8Cf7wGuiYSYL6 zwe7!i2>zcS`sZLDAyH+eai8UneP$N-yf{^so>foIVqE%r9XmuU8B7hnz{F z>+HF%to3Z1!LbXSRVT3;em7x>XluHT-ZJua*rGnc6?LO>Wu?*0Es9s#({nci+eGoP zG@Qnzs-^7lZ@T8&A!iVYx^j7}nkvh~t=Kw(Rl{3WQpRpq#+Hp3NW|iT{N%4_ukj@Z zi$V@HT?-EHaF3i>ITMgxMrPpn|t&0J$TUb6Uvg$s-8XVO{$#^_7M2$o0Y-J9>Go93GK4HXM|YAkIIi36rkm zgSZ)=gNsB)ePg)4 ze72__7`)$jIs4W^sQR-?Ga)y@qY@Dq_M?UxrzEfb;^!*S(uCTR$5}o%Gc!xw-Q9^x z+Ge@_C@w)B-8r#45`6slcW`-p#6)8UnBE*f%FlQ6u)i-i#i$8D&(SFfT4+(MaDibu@%;q9vQ^s-FQ;GcdvdE{uw z!@@%SV4JJ)HAG@qm*>^jY+V!+eG>Xv?8#BNAPZpRebVo1>}{stxjsRgY_v32tq5a(_sS zx_jWjfr@9Q6v6lrBO@dVtPubx^-f8?E7&cO%1{pH_3@*fWMfBoZs zc~(*Fs)L4W&DI^F(k{5~Vkh3`sZ#rKCf5HUIsS60|584GCXK_bay5o!{sljU?368S O2yk;oIFU{S-S`LO5|{u0 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_3.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_1_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb3dd32a4fbb24d156660d8b7b76c9a0f7e95e6 GIT binary patch literal 2655 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 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2.json new file mode 100644 index 0000000..bd58ec2 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 2, + "task_id": "mock_task_001", + "reward": 1.0, + "advantage": 0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.40, y=0.50)", + "action_type": "click", + "x": 128, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.40, y=0.55)", + "action_type": "click", + "x": 128, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.40, y=0.60)", + "action_type": "click", + "x": 128, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.40, y=0.65)", + "action_type": "click", + "x": 128, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff70b0458500abfec9a26e26b5c7d42af34579 GIT binary patch literal 2711 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 LT(zyb3{C$7>olK< literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_2.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5934673d272476bb5cf0b52294fb2357ec9213e8 GIT binary patch literal 2610 zcmdUxYcLy#7RMv4Dk-*A^{(67YR0NZnqsd6eNeTEwo0|0T@@5jRFK4D(bAT+`oN;m zY84GFO++Omt!U~MDS}v!pi+;Bh({7cTyyXJa_7$O=eu9doSFZeIdjg;??3;07u=jw zRdiJV0D!9VIfqLCfWpb`esMQ&yUN|ahXVl0Yt9a*E+>=-MlhEj2LnHgLhkO}-xN57 z1V8CI;$vZLQVWXZPX2liL51LfHyYC94+)DrJr@RPv3QP@_-W zgv#N4c9ji1-<`qa!Zs&T^}Zg+HN#p(3xq9YP2hl}#DX=6X@GQE20r^n>WS}cj*rSB z7y?5}6b9K|;A744ExqrZ{7X(i5Z~5p7Qgs&HMRBk_in9Y_T@8}3D>cc2GAz3J0%2p zwujw1f(ejMFNu1pR#8z|hPFGOwe>7kl^&GM^yU}%^_DS-oJJ-P=#I0=yLf{4ASiRr zbs1M{B}gAepz3h-Bq#B2>@NFT@}y3%sou@(FimY=qA81qGJvC>c?Q->p8Hsj-y95WQ(&oS2%pBX*!-i z1Ml2fEKo|hK~!!0=@xsYb;Lfwes%qg7T3%#B{qT93hT8>d5;`ofU8AqwUwwtSGs$u0F<2;pwY56*ZNx_^?d%j`(I0K9Eo2wz*srDsxy1g-sC&o=js3 zGdVJIVS5#XAwcz${RT4TieBH<2ZqWDzQF9pmWok>%^U5c?SJ_UmI(I%|atFJdAZQuIhngiB8Gmc+ENTvK@Uu)tg}lX$8jnsuK=LfSQ`?6FI@ zK?{+L@?bCij>P-ihe-~K1xaD{low9ZK67s4zbgpyBR8L)0Z`*K@RJvYJPZ6D{fZH$ z$A>T+)Yiyz4reFWWYJc#O|?WiZDmTbdKXaobl-+_Rs)AMiuA&wcp^H+E`>`tl8+_X z#!8{>i7Ce!E41VbH@q+7KaBsJCjz@aZM!P*?lpjF#Pai#g1UO%QVR*kjgroZtL8k+ z;v>IVzYP=ENqFoj3Unb`{}TUoQUou3K=!)GqnW&7sBgJ0Z8wKLcv$lhomu+}sFJV= zq-livZqeq=xb@|?M;isn>#kAHqBoRH7FkC(R-Men#sJ;qdnOjCyC$Qa|2NZrg8Toc zr1mvvtXszVWT)usz3pB})28Ca)EvmCPlf^W9v|*Z-bO7|Sr@p3{>QWa_=xvZPyAA* zdae!(wfNFmVhB(8pgZ4JQ4D!i9l`B*VnUT95sxN3xPSkgtLq~Cyi2jZre-wN4*o%F z>%jUkQdA0NbNxz8EC>iJLJo_)(CDQyM^++Ez=2c;eXcECNt4UvJYFf;w;n|)-DZeJ z8{u-dfF(a*_nR#0cvUB$=Q+j-3a&X2TlC7!VJqURR}4(KZOqH#M!_STI?=s*Db>~R z`9#vYrNv(l?da$bKc%`%ckeAPr{q93#DZD&tZw)sr|v~q*dvX7cXM^1?}@~zv}8tT z>u%|u;NT6Lcr^*U#43_R7ujkVgS70>{F=>zV~Nx#?r?0ZmUnu8e}7+vy+!oo3K~!B zON@;ceT$N7u@M!^h;R!N6Q~(7!E1nv=qfD8gKVD05*HPHPnUk=#aK@H4c7(niD9|A zL1iz5bEA|}%O67AuF;ZrL^ahpHMi&G*@8d?+?15b?x&yX>dw@BoSZb()Z`6_+aH0e z!{@iQzGl2VG!D(Ui{en?-5pw^av;bCn62&FMCP>Y&GoTIdwySW}NS0UdV=CHCbb`g_Y2mDJ_~>c8h=sC`2w;1GYw0!@;ATY#p& za^>ehhDps&3L2*L?QNxSuW{(gEc98~Bw_F2UAvS5ddYEZ>?&xDNGyO&@p#$V5C*#N z@#FQj!^U^+uoM;R&$-}1(&By&4kvGI%d5M7eJ~?)ux8?*^(Y$#4jEhGg~Ja!J6GxG zRGBxgG?kXp$+}A2KQk++C)?KDj!`dF?2Wa7t+DOH%>L@I{yRMs(xnG02z}egj>~FS z&nw%yn=6h_GmK9BPr~?PTK_DU{H3QX$Z{o6J7b@9bD7I_76dpux;eZ#9hmk{C&-(K literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_3.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_2_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6babda92b9757c66d2a8c02f61bd353181a083cd GIT binary patch literal 2740 zcmdUxX*3(?8poB{SMI{8al}IcJAtV`d=A3)(mzjI+x4B=Q^PKaX_kW)MdC&WQe@U01 zHUL>=SqTXVfbGv0E=x%4I=9m=%Si52k>hDI2?<$@?S=EscXQdJSZ8N{$pYqhjfxlS2H%BJlru|FXLv8aAIqd)vr&>Yt*00+6t9Rt#G{fuU*f(qnqR; zT9S_Yo&)ZZqR0RbTDQcWk=z|Gf93~V?5^wI?U(su{5bvSC^H!<*H{&WhBWhl;knYLXU+PdK%6L=?|&*}V3 zshYt%?L%oC(oXdmYi7lc*XjJA8v3qQJ9?liFy+Ra*|TsA51+o)4%-qs`(E;0e$S0#@El~kIXK9&W_ZQ@)%TwJaNB0H@t_8FzCZja(GAGXbU&Tf^Vg%Wqjs}btMshIYOI!on5pZu!RvUMfP)hFbuj1|s;0LExn%v3OOYh@9le!9Z%)0HGgT>nX;)}}x+xTc^=oanP1vM|-= zb}Ldtl!L*yJ^=4o$c^B)L!N;6?Zi0_MC1m57u?5Uw{L4463~T~{iJWy#NFEY^`^Dc zP*`tFJ=u7E;n32ixv5FCe_Y>siiKXk94XX!x;=h7=I;2~YJI@Crq8euB9uayS7G`z z`w1n3&HiDq8aJ`8f_+$|#YU@T^~|H2jfi9_kV{`5{3SZh?~wZXh%WqR+9U%K$;#GI zh0E^pBulBltZksl3nrACwL-zYrM>xZ&jvVaZi-)vA@JmK!9mwuZC6E0>)@uJPM+C_ zt2JFL8(sfcU+ADl^mz2PU-3=a7(Z1#jIfr-Hr!G_8r66W3d1qjx0}3%;+q5>!N+x@ z(ETa3d6j~l6FJK1*j_h)0YRNNlx8Gai?bWw^y9jW72;<&%}OtspNJ>!@r6c5X^mfi z`emIF$f^305d?ZG?K%TdU-xBG%*^)jUaJIu6yc%yd%{)tivx{A9dqc4xOL7rdjyM_ zVf;GjW|W)U%p0kmnDW6!!Nji|$)peTE^H+7Vy~19^zOHZypbYQ zIeDyso5D9MZLgu#`*mnRwcm~a^`~p(^hKhxe1emY4>3xrVjLs=*}@F_fkD9KC4{JA+}ES!G^5mPY&rFt|mY+`paJ zjol=D!pg)ZSWJO{En#0nUi?R<{6*aSZAYY%r;++B?v5v8f}l9wprGOHh%^FsN=vvA zt|kdpN-RRvMxop-|0+xWF!xKvHFw~VBj%B-WyQswe9jmQa6t7-8}N!#b#O4@olyF+1A{Cn9hV1zqH7>#&rL*Hys9rXGkp;(?=G5-tPH$5lB)s&b*DiDb#qK; zp5@sHS)qg6x1}W?_sv&5Gj$B?C~`+XLnIQFPP7czhwX;Eukm-Z&%YON?%Y0@{Ss5y zZ(&hPA~Cn@n`2@kF1~-#oo;jD$5CgmcQjN;#2QH#mf-5VXnH$K+l$iE)1U%Fv*{y^ zD7WC{iB_rk`8(~Moent$uZhIPC(%?mMP}oql2UV1_+IX)y+a<0wWXi(#OC|Pke1kE zY3A#_&(9A}&siV||+adXG2Izr0Ka!A6mHtgTny z@o$PP=Qs({xUtd*mLWBpPNyd)r{Q!5297H`AQ^^T$OiY}Hc2T@&j-*_?qp&Ck1rS6 zc+KCRQFi1+f;!LX#trK1OkY)bIhaaZeV;-g092S1N>j*}H%wq{kc$(NW5&8MSZHO1 zSzq*StoeW;wGHU#EVX*St6au~FEP1m!^0q$VMuh*^NDK3ZQh5)-><9X{y)oKLsX2A zS1)~d8jve*hTX|{B6jP5v~=VY)u9Hdp;6NJH2w0m?Qmb;XFOg)Y>crALtpPOPEAcw znGV*(PpWdlW-^4_)$gx0g%bjP)Ya9}*Jn4*<*%%)5L~BP_Pzm^>l~~hDW+6?4y352 z_V+Cm7}&x83l{us-|4@><@XI|gLBjpi@5WU?cLDc4$<>)(U!|($Y8XH&Mv%jsO4v literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3.json new file mode 100644 index 0000000..916eb51 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 3, + "task_id": "mock_task_001", + "reward": 0.0, + "advantage": -0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.50, y=0.50)", + "action_type": "click", + "x": 160, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.50, y=0.55)", + "action_type": "click", + "x": 160, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.50, y=0.60)", + "action_type": "click", + "x": 160, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.50, y=0.65)", + "action_type": "click", + "x": 160, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0191bdf45db85f51430c63acec25e81650af7671 GIT binary patch literal 2720 zcmds3X;2eb66O#PhJeS693r?yF%Ba~BBumFQAAJ(BM244rIAF40Tn_x6NE9y7(fLk zK~6=32m}ISIAVgx5Z*R-_4<9?Uw`S| zUTy#leGLT#1%Ug7bC(qq6i>@-;a(;AxdZvpQ9(fi>3;5vZ)^d7B+1)%TB%)x91Pv> z3iLtUnxwef?inbY0->bXt{JUhJlIqXW(U$`(^jB}vJV;0JN*3rQ_`<#^R?Ccr?rUIz6 z3jZ=MGEi`NdwjpKp~OO4@5#nAi4j1(bMj>Nu}iTn*p(OVgK=?TgM(A_Tc!`PdTzdn zhY|H{N}HOlPrPq<`t+B_#=AIEL&c*Q_3iZm85q+9GOI*+c;MnUH*<2fYHFw~PU0~h zFL8o7aMkdXgUt`Gwkx43{UKrV&9;%aR$UHLhBi0%WDRQqm`*@ohi)Bez|9C>AP8h8 z$!cD_2rVy1aX15#xjQ6@8&NM?w8n9rpI>A|HxB9(GgB7>ocTXo-k*Y@yGo4@b3?d`}-FUI&D_$BwwC!Dgwzgi@9Hx2fB4~&dhV-~s~ zjLrlu#tE(j-5G)c&k^@2v z)3HWzH|T<`F(w=zn(|Tnu=zv~K4~WNNUN%*ZXH%ITebY-aaeQIEQL&-m|}-s@ry7s zg@$LixdN8@`H=p*-rl!QCy(+YKx`kV^ce^t6H9ROc6-My6=Bu)GCoeB-(bk zx<^ttomkRmClz0rN5Dbcs$p|At)-2vRm_zu`Lmx! zc>w#P??fwI>YkouXnOL42RP)S&2rsN^J+%_`_61nuueNo!AyPKmdx= zn;=f?FKrK$iP3xx@&$+jDSj-I)Z^TSbf>@*edXDs3@(B=&)vP2)eiTp8&rCGO-&6; zOxHsY8`t}txHuS!*f>Eb8Uw^T7KL&AqL)WTbve(@mciRIWBr|Pha_C;Rz?O-YKd7@ zq4nVBr2;$l8Xp|aWt~9XmMlXy*AJtKjk0AmtYC+SH2{rk|2?Lqx=)0&=S8db6f!ysV{FME5-oCR)vmNkxVvRL5_75zfAfwKLa}3RVNe z_YGaWd$*{43d%~X1yQ1AmwhN^Zw7D4yA?IygsfM~G;+2C%euq32aY7|rfO5HZHr9pOd9Sj8rKpSbO0U?2qEtSr%ue(Wg)prgH zbL|k_R&pF(RgT2oso14tmEJ>b*$8v}eb*+xj;Wk(H4MGXz1q6^E0pmB< zMCIk~+$2ecjeYb@B8Wn#BU%YI&Itxp>MT_);)f3M1T!ypo%inEPo#xT<>?zuRD&hPV1>jKl>1>)-)2O+kVoX+h6tClN zWt=#@7z5ldR>HXcN~lfJrjIBAfJ~MJ9UXnRfhpY!tD2T}Fpn6#9`Z@**g?u7E2BL>HP9?+y_Rs1L0F|5| zXtbwb?D1HB)XY}v#75r3oPq+KG)+CxLIo-fAY1&9+f~^@p-{TJbD(u6V1+N?aKUj) z%Tu!E5)Zjqr%JNKhb{g7^K=)t0E`u-sN|8R%I`amAJ}w^sArhFp@-?UC!>O_*+c_r zeM@Q@EY-rlUpS$?&Igx#46~&JpWwOa^HhX9&9NsH#3-+z|rHyFtGfgGt3720GHxp7R$7e5fe|(3^qB-DZZX2 z>Q1Td=m1~5xQiy5nnLTZyVBPYUs2UnvYCA2wzm7MRXAL2dd6aTKwv27D8z~fYeTa^ zh{b-$>S{2v1F4P6k|RdYI)d2{lG4+)F$;atrbQ~`Vm>m1o49H&l{TiQb1L(#kchX! z_e;;8*E>Ydk#jNMkJllmlBKI8uR?vD{dW>>@baP>2AC49PagvVyoE*B8#CQRm2Xar z;S#Dwmusl(dk;faD=hcbvJO71?rS8pvBfJD_%8u2|8?#EMTYXvJtIxzET2xQ*g}Cs zFgG>bI)K)Am&-P>{x=!(=Mw#=`1wDG0ygcaS$-UN>7(~FU#>hA++DrSQC&h({sD+= B+Bg6J literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da6a005b208747137ca7f31ff1b32f686d205c57 GIT binary patch literal 2631 zcmds3X*3%O77m^+mT0T`G?bZVI(@Awc{HR!jH1sQl3H2~QB-Y>QYA=YSM^$3OIu5* z_gYJBRa=OXC>3i%wGA3eVhNfewuG$D%$fNy=e(K!Z~okK&-u=|_k8EO-#y>Gi--%V zN+2Zw0HA9Bqm45FAZNAP^Y+Q_Rw?q7IRKypw72=2YjolAMEu1^Soxl{)ie5kIfZiM z1csG91C~UUWLA03fHUD*T<7Z@-#GZ+adtU`ROqT7L5ovT9>IaC*o(B00Zx55ZP9fP zR_wHpWd^3#Mf~(G_?EYiz^?f9F~0_Je%zRVTN_X;u^h6r*PN8$3<^j8o1S9!9cMcl;DLp~X=NpxMdfrx=|AYcR$}KGD(g#n|2hp%tVb3wx zImzC+`Pgx9_6-%#W?LxKtYvAeZuPqV5o9r?0yBC=_J+;QLKL`~;BJT6(JBe6H$Ql9 zR2>F^Ao$IRwzhar?%jl29awBguKv_Ks4fO)cWtK1l$&B`U<85eaBBr*^coKLTwUEu zpj()o?Qtb9pQuH}Vw})u#+IUaoOr#m(lC8(idUx)rPT9DO~N5|8F-K=q7{*g^X>E2 z)|eZW%E~8-EkvHlK2nACbxNTT+lh<9;1-9|A3PYg&$-VTif3rLxVM&(NS`%7lsWbY z@y)Wor>0Dfme~Ic_MfI8hl*hHOz~ut*N+Y{2B*Kqr9SU##fEBIw2tEMjf|XKW?mq) zPt6Y)Q)JS-rktdt&4vIfLAcasdaD&MUYw|>C(=IGXmKV4kK4Hm4WH>BFn!zYCsGrA zlB4BiXf1sD=<2Zr@~x~IVtgX^q@#>NCPtn;%a!!hdcgzwA7#&7ceAm{x_|%nG$$+! z&>(|&X5l4u%_i4I!&a!{{K6geY9DVRu)j-(ae7BlAk5)ZxF zGJXa2XLU4Awa*4an1)#bT~->z#AJ{iI779!?!z35GZmGyCsshjcRB~(&t7Y%g};}nQTT4ML@O(_wXPX&M=wjv z9{%;%WUDHK7QuyV^VmPgcIBlP%jz77nY6s87R7wLEK04;@Ut@T456E4Udq*ZXpDF_D&c##1N^!6+(1TO)RIz-0u% zpHqQ1sdXC)CQpc0P9R(@x4i>$^({{ZMLG=jrU_pBkO4k{)H!CpostEQ>v8}7Bu)>C zqn9c$s{4+@AhHRv%Z03!EysHr8uPO>1CPeQMlh#K&2z}Y6b^xuQl>nwn2~QX>HGKB zayVD>_!(fhBmzI*UlA0v)6{fU2ie|)#B5xus<+E1&`>uXnXT|5uNyL=n_qM4diJPl z8j)IsJsSFD6G=IHCQb%Nv7)Z2>Ppui>b(|x-I)_YsGDV`!!4d&Dq`ZvlempYUHMlUOh<0g)Xp}dcw<^@H16eqTD|qBjYxvpPWW%9lAZ5d93(dA#{GZd0Jq>eCcWPI`ZIX zV;76Xs;qpzE9Rum+!j7dw^j)Vq$uvq1azy!>~#5P+!^vs-Zr#+at}Y zaKSRH!+q)Yyox5zRj|?yQdt?_$U1)9wxU8ka`}`N zmDDo4Cjc!zISbHA~Mt4 zj8aAB(&*{kUADHw7|dT0g9T^xxyfpm_bNiGtHN04#^k>!->F`GJEM;Uf&X#Jl3dQA zKe%K66)vC-tgv&iUEcyifF3t)Y&(9|NSFrY4*$30@jI6NcPRP4gE|(4h8l8BK}z2d RN_GPxz}^;N^U~To={Lkdp&9@H literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_2.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4bea64d39ad308d7729deaa1d8b96db02dd18226 GIT binary patch literal 2735 zcmd5;Sx^&L76n8^Xh_>4U;rb7OCthCMYaT7kN|2>QISpb?cpa_n!Oe-cu*}DjcRD z2b7bLkWjF;vbZiGA$e9DFUm@Z&n??y5D5vnP-}~GH^TGSw3w?IAyPd{+>VZNQPOgq zX&7>1;NAO<{-&80te(e@ zyO?@00cQ)4bIvxF3B5SF8oF5HK_AGQpDviMLA43dp?Lc02LWa0Xl90zmxR~y8|p3z z#^*gJ4q{^^5z;@%YPp?NmE6%GtNNp5d+Z4*nP2}2@p*&q`>6I#&HbuQiHd~vb)JB$ z?`?osUyiZO4V|W_sknC~!OYeU_EY(MjuGN~aoe_^N${fXap&s}>$qEwckJL|(+XI# zvy;JRroX*VH{Y71G~am^#YxtH7?GKaXd(LnKE^frnoz1-$3G~@&a(R{7W>7($FrLV z4SLH77pJF#)S7@O=r+C_wpg$BC2d&1#1o>Nb&oOtf;*PYlHO_9hXF%jq5 zViY>r2LnZVjZcP4$9Bjq@F%l`Qd0MuI8A!V$=Qmq61x&$V4!Ed(Nfzj5*2O~<U3g3gT{2eQ@2x z4*~(#y)mkFl^lc`RDw@j3|QJIfL?IX8_h8|)wVJB4BXvwl)=IUx#*!>=m-!#7B6@q z8PAPNNYLVQ=*oL}H@v->Uy0zNq6c8G_q~$*uz0X1sko>FZg6`Qhy()Rrwt9SuMB~TP5?>;kz+j<|qxjJharU(FlT2UWSRn^o6c9lzW%J~b0-B@dV z{cV3zu?IQa%F1H2y3uh=5e5SQY)fj1s`e4<6Iiggw$rBc?B_{xX=!hEHXvVcZO5op zJ2}b?Ie-=%1^|_iwG>PwW^6ad%QR%UajccfIT^Yj5{cH~s34EY%&so%t*b53;spuPsn>i4)(OM%c3 zVGA=VKogoOsTS3y1-pv{8;*bJL?`HFiSy3?rq<-(=Ya#6e;aRYYC3*;#SD3Qf^dNb z@`;F~3i+F@;NqBVp@2i@Z_+78;LeUW>dG4$L@0<$>_XygSlTcxItY)&f|r&)!YtEF zdHZjsfTw0YQPZ_R=7Ra5#zPUC8!Nq!Yv<;1BVR<0pMq7N4sNJ)5u$uBcBHaq?twk~4BkFx=F(^sGUM4fu%_l70zoo8JzxSo>PFXp zHptfz!7D!%;w!7i9bC7VMQqHqwlo=PzntiI?VoRl*8?Pn7JZ!KB%Kd#DFgpaN&Z4) zzDLN@kUcOrvfWBejMdT6)_%DOA+q({ke97{W2*U@44d8Z^CQ&-&hY1dDW89K#vsed z^H?m{mF$zDQv)vwVF0Iu&fgvYk$3NwpSkZWNcdQ2@VqK1>EZBj4^4$c!Y3ukzIE0= zFmzyBdE;nC=2mU#OijhDd;Ufyz7t!$@jGkpVAd4`_0UM^)tNoP*9>RaY&7F+6^Zhd z$(#**tEgeZ5Z~-nRA(#cEEae);ryeRbMaByzuwRcUbI7Y3Z&F0l?27g3%r&C%63QQSp-}Pb^^Oz6zNc(UFS` zNgv_2UYU7y;dEP`m!IsKdR$y1d!p^=p>K`ds#*Q@ZtoUK@PljVgDxeuZV(6>y@>^< zrluMg2vfm@mc+W81ulreMAVuAcuPz5GER<;u936)v zUS}@uNW7#HS&8C7TRcfuioF9Y8TwaS^Ib9ikH+i&!?1m3!#r<>nYAjP2@)Go3G0h+ Ki|X@k@qYlS7v{tO literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_3.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_3_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8010e79301f0007ee583eb3399095c7eed8d4c06 GIT binary patch literal 2639 zcmds(dr%Vi7RND5Oe@=Qchj_Ot0^nPM?Q#9DOV#iA4Ta38k*r-^NmlSG_4zHW~Hv0 zZkdK6Xd;q=&qVWu?}}zD zl@2Na0D!$#mo2UX0CE?$-wTR6wxiVUvLT;@6P0Ws_#o6k>#UE@2 zfoh-F=8kCqa@Z^bGCSak{xy2E)qL-%}JGU`V^GyHDqryZXePr4MEf(-E{I zapzA~O=)QRBzdE*eB6`7E+FWv$^!C@%DIa?$-G*&6sTVZaw&k;UM z7Y^pzBz{WmiHk!yGk<;YV%6EQ5xh5HQ-vXE^8+PoLZIgujbtZ{G~FC8;wKKipt7<> zt%uYT8y03HMI^@4RFssA*_!7Tf-s*UycypCGb5a&^~jM!Ssl5>C^Redtv$>VCxyDX zrQD*f7gu=T#X=JMs+{3s&b@{Ppr)Dge${33YuCn}9oM(CjMUdZC2gQUYt_nP#qS>< zC?ZEa(Z6}~hw^eGL;)pYi@&M?HWR^cBlP1TGt=y*f-pgU0gcvN5qb6Ml2*KBGzlxL2l)9t6roX??VBE7{pdxwJIu|Qwpek(ngBf0`Md5xlbiM>VKS*pN=gI!i8V-P z>_eeFFjO|%z)l}y z9frg(#(fX~8-lPBO`59O^*Pum2Zr}V4l@{xMi}?amBM!$cEL;0jg3$<$pWX}{Nlxc z7|F9%pv9$q8b+r{@0YlXQ)1x0ELRrt_U)Ggg7)V0+eGgHO3zfXZpDz_w%0PjHD3aE zHnOXqzq*ANjC608PBuILrgH0b6Cy2jxtreuC%1$Bue>t!PHFAqPLW1RChT}I%WumY zwyQ!z6^jeE%%IV>+b)%z>Ud=uE=UF~C@XHvf<4-no05duI%ARUnX)`IT>jpYZ(fc~ zz>o>W)6aBQ)n^M7srH;%&JK`Pj-Cm6s-R$=8T9L&wV#x*Ai%7bc%UpGYC zV=``X=P7bwfgj?(dEEY-L!+g&_0eMuNNm*H+|X_`K9-Gy+_{{mpHC)-j?isjQJTea zQiVMaFWchS>v~43Lvr#*1Nt+8J12SO=wGgN!NP@6cSkEhb#?9GBB@{9eF(KiN*4|3 zxKxJmyMC?Sl$axws?AlKc%Xwm6n#XY>K*t3#gBWx3pZ*<>f`MKa2y)yoskkroH99 zD!v#D#?t4HGLDHV*dIAp7Y7XBM-xvF2~>LrhhbJULo~sRq@K@)1*g3C>8r1cOQbrL zMSkgokx>=hNGAj$_1RhXe)4k#Pwxux@AdT(Ynk$Co)FiJ%t$GXm>XmeiF=o4bzNvD zKRYnX6?ZzDqwA&?4QJj7hY)&q$IRW^9)5?{H1tX@KMMkd4VE-TtOj6Bnac%0IS6 zE;iDNLg$NX2&GVDxsN}QM4{+tLw$(qkhA%9<4>Q`!>igW5BI;vX!~MZTt-`7;DbKg zH~oooPhR})064+=i?#*auC2}40fF!*Zf;Di7ZnK(NFF4vw{T>c`X1snP?2K+3S2Z6 z;oh2IP_VodENQA5l{YX*TjTfeD)Jqv@9bcs7~&91TsAjn1m2iGG9IK*UH|k*a@P5< zqh``ly8p;%5L}#>mquR2@?!16!#!dohJuNT509SLHMLIKAt^;rZ&gTCP9e-v2 g2ao)JOK$`xNB?~D&7ApW&Np-BoRjqrcSj|8 zO?fFPDJ5s8OIM|&02g+5{(kA*De*XKBPAv8=zQs-S3=nmE6J-MM7mdy0gye+N0JJI zt8ZTMuC;ksdR$$v@PlDB-2YcMiv#J5!Kg|nlba`r>W`}1;d7SKkkN6MqQb@kL@>9` z-~+ywJ^RZbkn(Y{vZcHVi^tc1IpWQQ@(fOSVu_${)mXMyuQk37@Z^15myuL=$;rSA z>HwLZ{ptrCx>Jp%_x*g(_!u@7aC491{@)=rRCnohcb_t`lYr$o0nPi`DhQ{`1$2}T z%uRWnQqJaUVHXd#g&<*zp?1$ss^Y6ItC&Yu#CIL_kfs+dP8SNJ~S*M9fM|zD{u->6AI; z$=q+4>YOY)9#;K>tm8`Po8;Z%&B}#5u{tH zkRnyTTK32E4CptZY*K=~R&T98)lkt*4hpy5**vXl>1Rk6!^f-`laqAyrkN_Ybe9o| zN2JDQ_{~f!OO9gLC~cO?qat-b5gPrTwV_OnKqxs_+2dY{Sn8|Hx({8QZDpc( zCFm(YhH$Q9eW*^a*8%skUJJPXuCcI?3pTi)vo*5^_7S_OucFcG}_=cWg%8phe_In7uwC!Y9)R$YK`|pmcHUQHVr=|S7#BH@KftQy$S6! z!7Q?UT(BlYYWs0eC6$Bjbvv$C61XZ5*u0x~YlLu(MMDO%8Y;iOTz& zO|yL^3f>U*w5@djD#Ul8)yK1)*zdg@+XiiD89|3(6JcxjRk!y5I!*^J#0SD$d-C`f z2Q0)|#O|s@_bA7)6TgP#pXsWoRm|M40Ox`A*ebN*+5SbdA=%tg$f6{C%p0Ihgttht z=VvTNh!8RHTl(L5soQ8obgseqtDd1vo8MczV4Xu@*yuLsClNt74I-h2Usoi{jM{aw z9=sWN|Dpm)X8cz}{Noc*u#k{!_RPMAI@?nlf~vUXi4Y}+%j3b==XK1sSZ)v7E_Zm3 z$Mp30;NWAHg_)_2g359n+25x7=*|(*sk3M8pj}&}d-sAcJ2eZ#orDt0XdVkU9-t)0 z)jBk|+00`gTdrS^jImlkm5TI!*ir&4Y75jIJpwXA3 z{QSx}SHw##Voy(1$6TGqWm^o%cG7sjI2E(ZsEqf%hOiYCFc`?A7D!_ne7xy5Q$u$dL2!nU@#&s*T;v; znfWE%B2Xb&v34l&ES=e_ODqS5;Z4q1iMlc~Q-%ZG-5sbYLe?D@qC~!-)fv!=(_~~pc-GU)`lbE7cfse59b;(L6Nv;{F)^;4I>fE7 zhkA6LH-lH^9#l0u2gW!c5IH8d-aQzJ2-j4$K`k+p`|*Xe;*h=vt1A^v6ZLotV!}v6 z`K|(NIo4XqE337_IYE-pNyxLH3McNsKDMEj)sA#U-6!gF=;-rJo<8NVUctnf2Zhby zztx}?$f{>t$u#TOxf?f%!9kbqq0CO7M$CWyJUEDxk-leYswpiA1Cc{+ebTZtt%>0n z`n8+aPa|6~0OdpibpLqn&DY?q^D-rB->z zJOSu?`+p?-9|ip%;r|0cv!NZiZw9#N0O_c>jXgqlTbKB~Q!TV3ntxVYejx6DQmy`f e4AuR1WSVWB9nJa>P_x@CrJOIjUuv)qy!USr%+T=w literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b42380529f090fa92cb8b3f64809830875e8eb GIT binary patch literal 2599 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 literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_3.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_4_step_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2d4fcec1579b8b973fd03cea390e2ab219525e GIT binary patch literal 2703 zcmd^>eKZpaAIC>U#Zr%}$->ih(+gtB>o&TCT!l(W%uCp44Mp>^7`ny9NR$b!BD&;t zY-B@WV{Bex7TU^dEN_j>%eJTUocqsn&V8Q0pL^~jX#zFmhY(Q^7V=oBs@yi~g zf2PID`E6C+uH$=BU2eB? zU+n33j5EzGS&>ztr+D*2$77j|-r>3-FG~D$L8-XM6OJ0bAHLG^Tj9n4IGC@0*rLe?QP36nbu-r% z6#xh4cwOGyY<^eLmcP9G4va&c8g%es98?>9xV}uAp-L!d#jVs{Z9GL*LoqOHsJA=E zsULJwO}WWH+`OSA2yRkM_sK0EpBXRAGpPd^)^CVa-{}Iqn$|U`%yAqEb45{c+ctH7 zQyRG}h>cvB0o4V)j>3+X+NoYLJXr6|bO#<(S{qiK+# zi28x(8q%JVTU5+z97q39ntWI%DCmQmbd=izWTWNHSbXI~79c0oE~XEnJ2INugU zZM;PUOSR0KcN{vi7rof1z00DY!j7C|ovS8m*_`HVHY!Lv()H0LAoY(v51K(g%ZccsqEN7l$^Ohey*FZ6B49NCCVwY8l(C_jtn0H zg#CCJ#L=+Ac>lgyhPh%AiVqyYK(GDcGyLsJyMr+GJWWnfJTkU`xKU5xAVtC(2wctx zChZ0e7BW;F8&yu`SQ7J&2ZYQITjp%krDWVhGNfaXz!S9w%buRr4bovfv*y*{GlB{R zk=TULlU!bYsH@FyHoz6^o*pE0FLv$TY9UiU&FN^e(^2!Nm)K!i ze=in8kNmtuq&4W2n~^*b1J?!8PG96Ve)f!EmBtq+l?8@^EgC1 zj#*J<7nUWZw-O*9DwTehjtR;5w}5grURlfn9_kb8;dS2cnes^HYNkua<>jmV(M-X9@sb4L6O+?saFJx#lisXX*Rh&lndEJH zXp&n$VI!Q9HEkR*K%MoTdfA#(aEyww$L6jsFR%5WUhpkuzdbpYvmtG+te(=YCRsNqMB_l#NC=})M*{Nks ztzWNv3D!e3N|AOI=iU0@BKkIyc1`vGtTemI5s`ozC~kPU_)X&G6=2okzMuk z3wCwQV&@6EyU!qAFYjA$x3z`dy@y@D7#TzzL0_{9Z$y~pH8aQGQ!5!ER8o?XgHHR- z+ldeLNcpg}rl(JJ8N}pdD|fFw=iS|>8~fun<`Qaa+d8uxbPr`f!#;u++*S6AkpnN^ z3=ZPbtqf#iP5Fog3UuJpLWD{|#iXbpxG%x!H>)`(60%#dWh)z>Ti+6EF&=2YB zkK)3ox|6oZJJ&dR)J$Z?Nfh8xaj8@idPLvrI?%F!<3XO!HN{+_UmX7Q8R5||^I4WS zJQ21`Q3wwwC#huguq8}e75JlvCc@ja+8||~4XI@gOX?(3ZlT+|b2HTauU?%`PSNlM zPE7@|ru5YcbE)OA`r~wa!Rm6lJq_I-`&FbZ>>JlzI86=tAc*p(Ly)2=v(ywV z>n?W{f|lOmj^~An3m-Ptc-7RpYqxF)xfoi3!jQ_%Ob@V7+20)wb z%HP&(zanSDMO|IWv;-1c`>M}LvXFoEw*Fx$@@K}!!y;(kIg}5MJ3#N}^daQL^y<5R jSj(Ta^Y0Vc56R>}NHW~>6AS)bGy#rw&ZjDDd=vi#fBwdL literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5.json new file mode 100644 index 0000000..d0f509f --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5.json @@ -0,0 +1,38 @@ +{ + "rollout_idx": 5, + "task_id": "mock_task_001", + "reward": 0.0, + "advantage": -0.9999999800000003, + "num_steps": 4, + "instruction": "Open Notepad and type Hello World", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.70, y=0.50)", + "action_type": "click", + "x": 224, + "y": 120 + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.70, y=0.55)", + "action_type": "click", + "x": 224, + "y": 132 + }, + { + "step_idx": 2, + "action_text": "CLICK(x=0.70, y=0.60)", + "action_type": "click", + "x": 224, + "y": 144 + }, + { + "step_idx": 3, + "action_text": "CLICK(x=0.70, y=0.65)", + "action_type": "click", + "x": 224, + "y": 156 + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d658cac4dc0e3090b148ee866a2ab68050d54c GIT binary patch literal 2730 zcmd6pc~lYz9>-BeEhjaP1=P$bXLZdZQAbHdOH*{VwDKx1Y{)AQGzIe@oNCKfZN{wd zAj!5e8zlt~6cLY7OHd~iFGQ^bZ^Q!?M5lfG&%QUav;XbvKfm{T@ArQ1eSgRMzR#UA z-Uu~SJyiezpyuUy@*Du5aQt(=yhrhK-0?Z$1OTWed7V7rca^xv!}<9|D0YdXZUri3 zDqvFo`Zi=Qkm@k)@bK^pMBY1YH;*+i&ifPezWF{kqYgD+YUW$dbd*is+5U5}zEpO# ze*ou!c?ji<_3ETlulQ{bt5l3Nj;QP&To7iu;1ideR(VA|xf6{Wy_3V%hv~Y2;stOz z5I}@0D&N$!`YJa|;o=wj_85g9hbREs_dxc0v}RfTtHjzxL^%c23v#N)^4K7q(apTB zNRc@|2<^&6n3<$5q|Ujzy)NH(!4ds^-GM>IY8G*=BjZROlx~NkrF(=i-V#!ppCCOb z$Sfwco@@mdb`xaYp^QVQrpyAs{Aym1BGB#JomGL_L;=ooqG{Jqiw`)C#u)LdG4tcgFTmj9ze zoUpU1(aV%>_we-(Ey9p(<*b22DG?*R#>@mwu65?sowa#U3Ytw2Z$BV7ua*dQ?7sPm=-}$-v%^u%A$sD?Q&b)wG#b8ge&X8S|;Ox zlsI-WaNI@Pq$%~*`u5BhC{}UNQ9nFx`^}+`l{u$_+*4-K+*a9YA^Zs& zdrQ%08s4TIpIC5)nFSE}bD4gLmqaZEi0*miPfv&Fc3(fakW*h}W{0m$6Hn}}_DX99 zw@R}Xcdi{($32#utYasj$F`0{J>tl(Or|svG2EM@b9%8;GdnjfT68d9@(j60KFnO( zAVZd`+-7`+;xFUa4@mLD@1f8(2nPx+Yu=pTbDB*uR|jj5p-GKU!RW+Bk|^GXG7@hm zYuMl)HEMKwrJoCpC*P?sm$4w6C!r;xgrBGNoJ2Lx3ANUpwh7#Ubn0jjk8u!S<`WeSKDfVBCnc^AP3Sxq`Yk$IrMvUH%yPKStADSnezsioG)A}FJ9|-o z$VA?U&^RFdZeB7mjw`{$b|6aySBkb>ntVcnL-^9Wx*CqL^OwE-j*@I`9-r;6D&VXr z=ZWLoQe20^P`8JOu&I~H?1J zIIuf6b5HF1g8_`y<+(hbg}-JGC!VWG3!Z(6iE5DgNMU-k?!NEw*U)fhktmYtrIXPk6nD4V62oui$VneP`~sHhlruJ3xDem47S!zfz`jjbkaqK%H*X>% zpQl?!M!@%j!5QRIr&jPTNU9RY+uWHOG+S8#sVFI-hnK^!lFi0sq&Q@Z9O_5Mo^_d3 z1_FU*N3af$FjzXNXL^)ce%Q)t*(nZ|sgp6uX_n5d{=)+f(b0*^ogJ;~dPeZza=GcE z7!5<``}z6Smj@=Hs9S~(DXqziWo{}3)XWZ2hsj-Q@#EMk@v6NmS6E2-8ICf0CugmvK zWb2`|7@~KS+rhfiC0w7vWg65Nnshuf6B(N*U8`)tq3JtP^15;A?E9+f#I|frl=J3e zm}yM*H|Il|6E>DqW4AWNuc}ZBySuYDUmcp{ob;%de=1n4sR`6ag;)lD-Xh{)(GL6( zou^`jW%l=5p-y2in6xdE&cYqJ3b%y!)XRoG9?38SX=zn8i`UPEhyTc#H8&kO z#eg{;a3vX=#&{+yv5Jc?qgZ2T=GoB2uw{@or{YC)9yD@m<;|*qUCpm7cEOAJjEsjC z!Jpt0Q#1J`vP;5V`>P%fn5Klq(ZS9_HGO_hA6{Zkf^RxWTFYn0WrA^fs+vAFm>N07 zEXnPRv)LiQzNZ)@Ylp6mte-2~OvzC5?+Uz5!rBk)&%^*@vmo+8(% YGvk~H_13fh%%A`-ckh#A*YNAV0IAa5X#fBK literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/rollout_5_step_1.png new file mode 100644 index 0000000000000000000000000000000000000000..884fcc187b0bb1a1a7b0a13279409577d695862f GIT binary patch literal 2634 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 Zn6LIwzp|7!_WUTo;i8l6`wM;#{|Zaza zV0Ym`(?JwBTQj!^&y@HFvFLq{yFW+U_Z;MC?5#U-8cx2a5?uzZQ{(Yj+E8Dh1mvz` zm5siJ?bJiWW4u~($5JC%Kgn9-eeUk`_SQ3QS2MS(UVkc!pCiJ=%ZzmbdOXe9Vu10E zW4dQ>(IW0YNQx`FU6mCPZ4#F~daEH?_rRgpf2LCUy0YsL92(IC*C`|W(QRfLQg|YO zXsE<3CacvfI--iT!&BsF$gT*4NhPN2>5xXkhN3Pbf;Qhga4D=tjrMf|xU-2v7rbP!fXu}6aUczvCS+&Wsm-SKJ z>|^kmcufCU-CrOXXw=Cagb-nF92N);7v{f8Xs07tbc+bam$+hm#C}(oTaus2{&Rx& z5;q75$>CaPI7=Qj_Hg&jgQ}c)jo_1%m&`!{zfxN7;`9Rrj>dg^VQ%^9G z;BwLRYhU^>!kk=fBJW-$BSB&%7V71Tf*F`j9Us8num+ytL$Nt=MmG1CLDXYTqTu^^uq_n08#D>Dy1Souqn5rGWZ{ zHX6_-zrFUlspg((K(YnnXDLd3NsYo$c~5>7#RZwlOkxjih2CFZhzMv1O<;2q`3?%C>LCu%#APP*{hKKHcUM5<_FNl> z`D&v>)?nzRuv$u64VP0C>oZ?QWi`ar#tK7rOYx3-k=^lHoJq_n*yk4hIV~Z1#ejX- zJYsuy|8VZO`PDMB0r>EbexZa;;S`Z?W#x;(I>M~qyeXDm`V7PQ$n`EnvA(QH67;u< zWIB`efO4*$RER$Zy3x3i9T~*PE-%Q(q}1&)DbuS-3j-~(r~x4LPEzf|XV+dT^KQFL`qmK^znAvV#jIh&Vz}% zGS^C@+T-;(x`xEr*lb!5)>bGOZG4V>gx*=JB@hvmsg_ru)K+?xAP&)|=_J(^*5fi0 z3?ez31;s}Nj^E8l=f~lBxyFhF6ir&BXZ4Y(sA##eP)6=QNaw%s(f62| z)#Y_$>WrDN6QWU?TJ?{1!~VAD(!j``oV?e~R~mOtO!l`Uft>L@|4yvmTqMxH9j|rA zT3$DJnmEN|W5=()Hyos(#bDMx^UEbxuEJJkZ|=CJwzirw49EBIp2Y?Q>A@FUMHi;n z*9)5%$ty%C^(UQxAUC(3c;Je+SBV*~-)d~-*3FyyCM?pF6c<0Mx!u7D9pXfSQsH~T z%IN55RN#1d*+tR9>6xs#WcjctH@7ssQmZUbmWvG3!C?kddL^X%CoTW}4}WiFq)>~C zCSUL=Cr*e3P&n})KaLur6Q4iV&=^AEhNu_|f{{P5QQ1NY?mcGgZS7(Ek*KOV+%=EF zNyv&6{!$%+wzse5dxQ&$rI`25+j@6~FV!sy%()#gW>{oLJHZEdIlt@hkBm{wN~{xn zesFNPr6o>Xc+%e8&kv0V+*r~ekECD3Y?y;0pM-~Q#G=;vi_F{(WB)=PcFD5v?<+0( z`jv^(TU!&wY%C#wU;=)Kywb^X?ko8;-IY%{alC`Rz5JVEgiT(W?uguZZ73ZbkW+(Q z8oZB4-rY0LFAoskRGF9{ns0epSa&Gm^gyZVnwq?q38lN%a|H_raicmaD*du{5D3Ic zkf`U~5Uo_BX6)NPh$KT+5)A!hJ%Dx2Z*%lr#l^)#D5Jx*{-w~oQ}`Zr%iFRA1e50Z z3Ij$3q^h#AGQ8O_BxJj(sfLj~(|)o$Cj&->7^0Ua*VlLVF|eMmczRgb7#&^)cA+YB zhSAPsWR0G8b3B^MExgnWm*#=s;~8IgrAX0eo^l(*W!Mnw`u^&Fv_Vy0U1(FaXP7c8YE8JmG zmG=vVhE9=abq(F!?nK5@eYZD`if25rYBGwiP$EfxB3Woz75guJ@J$&1PgU`qR7u(G z{m!Vp#7+R@Db!Z4BH{C|0Xv@`UjK#;`c5YPKaNqnNY~9=RSbcX{uHbL%fEtezP;`i F^9Ka$?*{+? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/summary.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/summary.json new file mode 100644 index 0000000..3ce8547 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_collection/summary.json @@ -0,0 +1,23 @@ +{ + "test_name": "test_e2e_rollout_collection_mock", + "num_rollouts": 6, + "steps_per_rollout": 4, + "rewards": [ + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0 + ], + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "reward_mean": 0.5, + "duration_s": 0.0335538387298584 +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0.json new file mode 100644 index 0000000..fda167c --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 0, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.30, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.30, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_0_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..673fea72cee53b931d5d1fc744d1329b0c395120 GIT binary patch literal 2600 zcmd5;YfuvC8b&S4Tx;8QSr<)etX%J*rX3YE%?o*HTea4_$C{Qm46h(a>82HAW{QbG z=2&K$rYT;5&B9C+T?1Wjc&AiAML<1@hn+b;c6N65%$#4%eDlpa^ZfYU=Y8Mjd!JiB z__%BB0qp?*09r7Q(?0?LDo)CHX}7BKR-84m2LLq0u+yjfQcHxR8GZ#)mCj{zB6ZLA zk9kjEcVQ2TxQ2qH@2;ah)W*2Zb$N{?`kwpJP-B-sLwfZg`)uAbH9Zrv4z z9f|jE`;PcqEKIDpuam%X(NO)EA?<#Nqim8MngNxg85|4+Srbnc&%T!4`bY@}MAZcg z4*(F$yS2Y`W8#jhs%Py#eh80K3E%O>Zv8MPZ56fG|AiQuy+i)?5evPX^mH$e0j42x z++?hUHl8JnuCtSp(?xDBN3`ye7*XvF2SK`4#?elxl8KH`vInVUap=~7^jJzusW+>F zuE5e8l6p0oU8&&B`Oz_*sTr9CyjAoE3dOV&Ado0F)M2d;ye?UDNc?z*herQ zX|aJAGOE(~MV(Xj2Ara`zO2z%HQznJ_T@n~L_?Y!pQEX#8a3njF&Oz!Gx{Dv$g+#EEfEc=a~HB$dwNCiP*1dqj)t{zow#BD^nb;SyfnCn>$Sh3a*d1 zbC1cazw=9qqOKnC)=e(zaUroOR)}S!eqoPJ+Jd)mH2a;`neS29nYuLnk*y|IwS6j9 zD>!)T>DZyEA}j0gh=g_AOU?5@Vk8C$sS?~cfQQtF7&)X>q7cK~yq@!uhqvw1+1kjZ zzL(0FB6({5Q{d|6yEgnAGjff&F<&qawKSY8nAK4)r=K*7?0U7jtEx*yfdz{<7E2+T zz#1dcgY@`6UhS1LmBsX&Q?U3P*+34jT@Nj)CbAszT1T}db5vRcetzL!d~D#1+^cqd zE$B^v85%8V*=M{l%7xg?(i@K2Q83Lzpj;s+X)DRJT6pY~3f(%8Jn-pSGw;FTaaNmj zyivRX-mz4OtCllaMdvav?K(0lLYAsR4VubgfnUvt#S6{d#Oz$!-hI^@D+|#VZ(`Hd zQrppiH+Rw)FSv8U0?+MN>tk9Op%;qg_YQFet!I{r9KXTg7>D4vxKKeN2wq}FtnZER zu6Xe*_T6C|i;<-W8!(`aCyud9w>@&iKjUFJV!sWWY=IR=Bb0g)({c923D)Lgd92xB z#`DJC6$fSL^41OcVhp~yMqnx~5LvKJH%8B5orv9RszpW5i5>zZyoaP$VLLy*RTf)- zfy42Tgy6D#g`~{TF*Gop76tcWtdVSD64D0`u*%)?KsN5lOW{pRtLQ&hCDtC0m z#&Kf8mPLD?#FElDc+=abJwEKr^?&P5wYui&@FeVq#kNnQS4z08y8b-TL(B1Z-Wj#9 zdl|uGNf*CnZB^32)2K0hmJ@YAAzk+UG*Ae(Mcv5Fn`l=FO=EbsL`oXpH-Pg&O|1VXc)x!weUp}7Tp|K1^p7MFDD*WZ}TM+6-{ zrwc~45&O&A^YYFqkK;!bHC0t3W4SFk$(mHtJ!^}2WO3-wghk28wy!TtNZMq>cgoxy z_iJnajQ_+FiW+0}uSQ2hYhJnM>UF*I06|edoOxfX@4mNL481nfSC%V7o|KiedL|}% zxxTfAvnfzJyTqn`kbUyv^Tox^{QPV@Nb2G0x*mZc^ylnfO4Gdy?e9N0W@F&9Nv85? zCO^)x)1J8JqC--{6U5_k;MeR%_2{ct>*`npFx6jd6ieg#U%a@|6MCv(NSG3ki4^#t z*Cr1m1&ZZQPb25%E(hNw0>^PjSJO&-B3&pA-Xv?Uk~KW!*x||RO-&BGu#k{ss)L-L z;7&v3w3ZNh^@`YC~v^be}F|3wit|(CF>pOl$;z{Yl;|u ztNE?=^tI+|*M6g-jKp@fDdb@0P`Zn=GXcWoa`$$|!M(N>YV+Q4JQMb1$xEyrP*?Yo z7LUvAp=@R2a86GL0z&8yQ3(k@Ia3WF2?(sBs<`+noNXs=3kb#}cldVRC3~K^O@KT< zZ%TH|xGC+Z{6&+9U4DDLz?hiYOB)gQa;U$TcXP({$##4?cFPvdW)Z~S0_ljn8of3> zWy4nIx$)Zyj7#=77ziAH?Aony;8@_aaJa$TgblV$e2`>$;skR31OD;j3z?ZN_4OR} z%^vPhVZLN>Y4X;&b2iC~sWOl#SwK!$U$^|$6x9vAUtIiQ=O*vzqw2a$=wDrB;L5;vLC~BOv}RzjPFiUJ3UyV=5B7p>BD>g`Nr<{ z%cpr89ZHDfSe@^y_99G(R|TZd;;R#8V}kgDx-2O5*DAS^4lKhM&_dc5bXY@fbE|^J zHkX!UlTBOGwwvf=CCdeG`BC9tA#hBKc%Yf0^GwuQfwzCCjj0t=#c2W0zhr82ZX!F`^Np};hWe^s?PVn8SKdV0 zXBD~8WF^H+YiIV1Wz@tiSf&g35`j`|S?Q-TcsYiR9!BoT`t4X}kCkbOIQHFc3rWMH zj7&J_*hBG@{n*wtb+}ZmTUIjJgLf@rtv;{S-o`y5g2z>PUiVb(ln?oN`K)OJ(j~g~ z=J+*kStEjq3wfEH{{7PYNjF}jN+4xx;jm*qex3+Juc}*hYYjvZy1s>MmP!({U=ize z7N`!j!Kr7d$2=gzVX~)onWan5#a^m|r`nvahk6Jo7s46(1Oox?*4x|#`@p7EY~XIb zoT6n_(qcC}+Ew{SB+aOd*`nz_IG#m)p`muA7sx6Ak_Q5)1w72#ivslZ=oH>Vn~1Dc zUItn9oji@b9>tpO3X|SO?VBEqH-Jyx5`3qY&*i8`&hA+FpaoRAeWUr@i6z6)g>Jei zP|E}*doh#y!I%bV!zuC|qT_vE)$OnwQSw~7H&!ffYff&@nL{LYD4aTC2hfk>#kYu;tc60`ih3>PV$mlx<0Gm?uwg4!`1G`rXkr zTgtb_b9$Nvf*Z16C$!RBq>`!p97?q>^Capx2aSjvxlDp?vAH0R?XZ>LiMsl+H$4zI zaes|a%YOw%xNxo%Ho+eq+f1_{nNPY4_|m?+dsr_1wm&6({MNTjE3%B86*Ti2@3qYo zIg)SVB=J5sUt^I3hf3XqNhD@Z(JM=Xsc&dV+{t*UGDAf` zDmUj`ov0q6PWE{48uaN{!H28j$AEd&6^ldWvEx$umcvZZW%;d9nJWPo{>!od4G;W3 zgbH%zP1Zl>#W0NJmd`{z@nOej*ct_)j-MHzEQ@zU)eZ^!ZKmIZD1rXXU4M;Pof0#3 z4PyJr)ddSV_>^6Ta;<)?W;m^hioOCi@I5G^)jlzM9pK|rO{HEK>|R;1V77*TuC@Tr zwehagQ)XsPL<|@p5Xi5SlZ=o~Zy=Ca>OmT#S^WGIcl78Y2X`2W$;4zJk!xw zCW1kNwj>g{+|7?3nFUy+g9*I$N$bKqy;Cgn$Px6~_f@GgU2e$jw^A-+y^ z-RbvCxWw}H)vA#gmxHhgs0fq&`zuiG5IsGDmRWe>xi7yZ%n!7x{C=H&gE>mQ>x~f% zbTiX)%vfpZjF0tU&CmL;htEiG6?FO(>e;Kq?b7e`W399RVsiG<6Q zvI>@j@STPJm0p^K-JNST20A+LcNysGKd@P?rPGs?)A#9y!WX~vY~XWoa-!7N1Lfsc zSp^Ld_ML1-BEJURZLMWqb%<9Qrm3Q0fj)i_JyDdLT(Yv#DTnkWVt_!Egyrn=z-E{32l<0h`I8SLAKWufn&qn2 zlj4ssHYc|8rSg z?QxJ-&7U@Sh(9~0cxh)sK18u4l4xl9XPxoS0sNEP`5(hDp~=8ur|){v+JU4EJqU1f L_He2>5_IhkKy85? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1.json new file mode 100644 index 0000000..38c7391 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 1, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.40, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.40, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f5db13f2a53e5d1d657aa8986b7aa1c94b82c6aa GIT binary patch literal 2621 zcmdT`X)qg#77kTh8m*>Nv89XKrnI;CW1pXKs*u*UDW*g?-E69IqGI zWyLtcs(E~61|qko zT^W4fax3-+dBrE{KO9ZR%H3Ajr>qxv4*U;@T)ihTp{wGd>X4EV{;=c|SEA!=4gEfB zn~TrrR#zXEa9LPKdw(d^Qq;7@ZuifC#N6h8wKI%)vqRC(6EqI5EnibnR^#U6{UzqX z<)W%w>~!mC%fkoM$o1qq!5iZ^R)F7GWPJXE3$=9J2BTYnEsO~M0d_){Vv+| z_a@dD_uEV>V_nwpk)qGYumXLyq1#Ivv6^2SK0xZ2 zOQN@i9gL(d2k+&;uVlu;k`^m8{kvruI{qXuVfF zX|?9#pQbV#uaO&W%-Y0m@o9P>#2B?@lS)`o4RB06i7GK=&}-ZGv-z)9n9nI&-2@#_ zC{S^{3yGuyY%8qUvAq-nXrSZ}c z0fgKS9$sG*%_j*w7+iS4_M?pey?W6O+OLM7S?e2N%XTYW9ZXPSrf7sShw2b9jBCti z^XjmcX49Yz;aheY_d5SV;l!b;NhFZ(lQT)~p6z^6Dv~TiV$s6H-Y^A zC5QyMbh;OV(ibl-;MIfjKP#aH8Q`IXH1vXxc2RS-y3nhg0eT6gvP@=$IVqXa<=*Ix z7i6e$i=b+RYbO)83z0;vC(#g%qEVZ^2^-Yr_=_j?0h*sW?)H%#3oZ2ASt&`c%vTt> z*}WJW-Wfyx)z1ZE(ibL|G6?r{ZOgkBXQ3KdX9|$%H*yFp)atj(y1qr0@yNlt6}prx z*Pt+IxQX*|rD%DO?{|~>TN)c_Iiy5*jawHd!5zD)A}!d8I^WrAyZ0Qenk>JE>?Ach z`)?ZmFY^EMK|S;s+(=SV!UtD5Gq3YkuL)wGQH=r-PT~9wGs&UI*XBAX>QdX>L9IWe zZc863RTYbP2X$G9@j5vrHEx6ABr!B3UH{ZL@y;j8nr-Hog6qr-5ClT7nj9QxG@5om zEp-2KC;MshGYX~FyUK@GB`Dk5*-tA%$TIGG*~dbhKJ(7>l9t_<}Y*4TEj_#={6fu zSa(ZtKP()f;OAoBRwEYDm`$%QQ)f6BLRv0*3O7LFfrj7oN3dm|s;b_O1wMGN@@>!< zsB0<4U!Rz{msijv%5QmelM`A0UU7KXqY1?+AjtCHA)uut>CNh{h7`H{fjRTSzV6r& zIMT-~WJCesbmyyyy1H&vTYY_rnl2%3eem#tQ}`4m$fb`dx91ByyeA`dDGWG2pGZVU z6cZD~>#k#_BBEX4GJKch)vJYtRt;vz%{o};+)pQ*mT3%j`qM}y451^+Q9xItcHR=OeOpS{F)oc9UjrGq)>3=6bD7^K#GtV<1**|&L76KeD Lxm>I{ANc6+lZc&P literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_1_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf5af91558d9e51075a64026546d49afd3159a7 GIT binary patch literal 2501 zcmd5;X;cyl7RIb5%jGqinkd%msiWpXxq@3wxuj1kMGGCNuuM%Mf#JJ${)f;xUkv~E~akc z7hq#JK@k1~Zc-SF8Ej4R*DZ9f-a<1LoK2v_c zCJe;`ukN>L+-|1lNBAw+ONrHPDA^vhmIPrw!Jf$pvJB~-B&%()#LJDeHDi3%!RVOF z1OJ>l=XsMD?1;LV6NVJM%Y^2cN55&r_JJTvXl}x1PLp9>(f#}Hl6nxwos@I*W)l-G zPHt+r>|&-l;beZq-D{6W8jjmJ#;kvuc`C?!yD+jsnX{iB&mS9KvO?YEDZ+wZk@z6Q zLHnx`X#@)MDLg(xx+w)Bvm@o6m`%838W!#^a>TuUlP^wh@J0=Pijf$zkZ!8|aJyUa z=tWni3EvpM7ZiQ=dhsOpPpm3}6Ad--fogzD_c6by+z>mV#3n_?7H9@B8f&-hBrhLY zFgm)cZJG3hgm z(-CK=!DB)dKx1PHlkQ`{yIkb)(*Sf=QIyqtj`o&K%`k^dT_Pj4C(pxd%ZCPJ*e za^9vvZ+f;vFVP$N8*lUP)oYFlzpx{z(V9>q*u07}d$h$+r@GJ z+-eXinz5idNcbIWPwz(Yyj8yvFIm25p`Y|zduTJQZw?prol9@bXZ)%>#!x=RgbfGB;R9Z3ZH#ED3BX_ubEL6`2p z+g!#=$DuMoMObG=FnQyqI}^04kjWvRMc2qmeM4EUDx-|(w&q_~7W3|6k@Y3Z=O#NC z#!<dFOnKWo)v)EeQ(@^n1{$l8Q(FN|5 zc2Vp0n}J>^2b(ZC{qqn!u5&_b*WHFL=OW_q^Ggx~fKE!bsU`l{2WZQp_wAL#-#uNK}h4BhNBpU5R=N00Ux~H#yfccoWzWJYD<=d^6*WT4}bnX7- z77|h#!%wF=~5l(N@PlFutOIRr?sj1 zML5=cmE#r`RwI*}hKAyF^qs->iEYxF+qX}AE$k{jB_$;>v5L}nh0c93i!O02o}Zt` zs+sEsXC0vB9Wb4`N4V9?V>W^-BPUeV95v4R`OUNq26vG3)sG)L)+i!@Q^jHn8k1a# zD@QPw+S-g79DlN-Z46Xo5Wq%0poqZ-)z%4u!GM?;e#I}lv$Y52KMtfyR;^ukxpqCA znWHMJqUNSbtOSt=9&qx((F>ORqR@6T_>;!i`Ou-kxxm!4w6t6!CIlm#S?~|bs7Uti z%NA{G4Xb8UbXt@0teOHEZhLs(NRW8UN!Co#${-6Ez3*>XLxQ86rWUMd$s_lgHj?!W zp}cS5ii)8jJ6`Zv=Ihhki9)-((`#!9<$rx4oG4V^Kfu%Jc{P?e=S6K!o_&3F0VI9F zq%7O)3_9cD!dExSwvO70KoU5!SvjTabH$mqf=L)!5hAt3+fk6dGxp{EyJcmSz2yAbX_Sw%UI7^bJ%UV4`UwKDIehp_ zs+#}i`Z^rTcd;Ms_@sEJw*UEuBk?Ad85NlU^4vL1o&RT#-yZUBob&sGHgrV%Xsb3} zAz)Ikg@ngo1?2$QFfHxBUH|*z{@Yyghck2?!6{_f#SLpDxKY2xGl0iw?^E?BFa7=B DC*Dh^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2.json new file mode 100644 index 0000000..bc83a6b --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 2, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.50, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.50, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_2_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff70b0458500abfec9a26e26b5c7d42af34579 GIT binary patch literal 2711 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 LT(zyb3{C$7>olK< literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3.json new file mode 100644 index 0000000..407fbef --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3.json @@ -0,0 +1,20 @@ +{ + "step": 0, + "rollout_idx": 3, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.60, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.60, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0191bdf45db85f51430c63acec25e81650af7671 GIT binary patch literal 2720 zcmds3X;2eb66O#PhJeS693r?yF%Ba~BBumFQAAJ(BM244rIAF40Tn_x6NE9y7(fLk zK~6=32m}ISIAVgx5Z*R-_4<9?Uw`S| zUTy#leGLT#1%Ug7bC(qq6i>@-;a(;AxdZvpQ9(fi>3;5vZ)^d7B+1)%TB%)x91Pv> z3iLtUnxwef?inbY0->bXt{JUhJlIqXW(U$`(^jB}vJV;0JN*3rQ_`<#^R?Ccr?rUIz6 z3jZ=MGEi`NdwjpKp~OO4@5#nAi4j1(bMj>Nu}iTn*p(OVgK=?TgM(A_Tc!`PdTzdn zhY|H{N}HOlPrPq<`t+B_#=AIEL&c*Q_3iZm85q+9GOI*+c;MnUH*<2fYHFw~PU0~h zFL8o7aMkdXgUt`Gwkx43{UKrV&9;%aR$UHLhBi0%WDRQqm`*@ohi)Bez|9C>AP8h8 z$!cD_2rVy1aX15#xjQ6@8&NM?w8n9rpI>A|HxB9(GgB7>ocTXo-k*Y@yGo4@b3?d`}-FUI&D_$BwwC!Dgwzgi@9Hx2fB4~&dhV-~s~ zjLrlu#tE(j-5G)c&k^@2v z)3HWzH|T<`F(w=zn(|Tnu=zv~K4~WNNUN%*ZXH%ITebY-aaeQIEQL&-m|}-s@ry7s zg@$LixdN8@`H=p*-rl!QCy(+YKx`kV^ce^t6H9ROc6-My6=Bu)GCoeB-(bk zx<^ttomkRmClz0rN5Dbcs$p|At)-2vRm_zu`Lmx! zc>w#P??fwI>YkouXnOL42RP)S&2rsN^J+%_`_61nuueNo!AyPKmdx= zn;=f?FKrK$iP3xx@&$+jDSj-I)Z^TSbf>@*edXDs3@(B=&)vP2)eiTp8&rCGO-&6; zOxHsY8`t}txHuS!*f>Eb8Uw^T7KL&AqL)WTbve(@mciRIWBr|Pha_C;Rz?O-YKd7@ zq4nVBr2;$l8Xp|aWt~9XmMlXy*AJtKjk0AmtYC+SH2{rk|2?Lqx=)0&=S8db6f!ysV{FME5-oCR)vmNkxVvRL5_75zfAfwKLa}3RVNe z_YGaWd$*{43d%~X1yQ1AmwhN^Zw7D4yA?IygsfM~G;+2C%euq32aY7|rfO5HZHr9pOd9Sj8rKpSbO0U?2qEtSr%ue(Wg)prgH zbL|k_R&pF(RgT2oso14tmEJ>b*$8v}eb*+xj;Wk(H4MGXz1q6^E0pmB< zMCIk~+$2ecjeYb@B8Wn#BU%YI&Itxp>MT_);)f3M1T!ypo%inEPo#xT<>?zuRD&hPV1>jKl>1>)-)2O+kVoX+h6tClN zWt=#@7z5ldR>HXcN~lfJrjIBAfJ~MJ9UXnRfhpY!tD2T}Fpn6#9`Z@**g?u7E2BL>HP9?+y_Rs1L0F|5| zXtbwb?D1HB)XY}v#75r3oPq+KG)+CxLIo-fAY1&9+f~^@p-{TJbD(u6V1+N?aKUj) z%Tu!E5)Zjqr%JNKhb{g7^K=)t0E`u-sN|8R%I`amAJ}w^sArhFp@-?UC!>O_*+c_r zeM@Q@EY-rlUpS$?&Igx#46~&JpWwOa^HhX9&9NsH#3-+z|rHyFtGfgGt3720GHxp7R$7e5fe|(3^qB-DZZX2 z>Q1Td=m1~5xQiy5nnLTZyVBPYUs2UnvYCA2wzm7MRXAL2dd6aTKwv27D8z~fYeTa^ zh{b-$>S{2v1F4P6k|RdYI)d2{lG4+)F$;atrbQ~`Vm>m1o49H&l{TiQb1L(#kchX! z_e;;8*E>Ydk#jNMkJllmlBKI8uR?vD{dW>>@baP>2AC49PagvVyoE*B8#CQRm2Xar z;S#Dwmusl(dk;faD=hcbvJO71?rS8pvBfJD_%8u2|8?#EMTYXvJtIxzET2xQ*g}Cs zFgG>bI)K)Am&-P>{x=!(=Mw#=`1wDG0ygcaS$-UN>7(~FU#>hA++DrSQC&h({sD+= B+Bg6J literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_0_rollout_3_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da6a005b208747137ca7f31ff1b32f686d205c57 GIT binary patch literal 2631 zcmds3X*3%O77m^+mT0T`G?bZVI(@Awc{HR!jH1sQl3H2~QB-Y>QYA=YSM^$3OIu5* z_gYJBRa=OXC>3i%wGA3eVhNfewuG$D%$fNy=e(K!Z~okK&-u=|_k8EO-#y>Gi--%V zN+2Zw0HA9Bqm45FAZNAP^Y+Q_Rw?q7IRKypw72=2YjolAMEu1^Soxl{)ie5kIfZiM z1csG91C~UUWLA03fHUD*T<7Z@-#GZ+adtU`ROqT7L5ovT9>IaC*o(B00Zx55ZP9fP zR_wHpWd^3#Mf~(G_?EYiz^?f9F~0_Je%zRVTN_X;u^h6r*PN8$3<^j8o1S9!9cMcl;DLp~X=NpxMdfrx=|AYcR$}KGD(g#n|2hp%tVb3wx zImzC+`Pgx9_6-%#W?LxKtYvAeZuPqV5o9r?0yBC=_J+;QLKL`~;BJT6(JBe6H$Ql9 zR2>F^Ao$IRwzhar?%jl29awBguKv_Ks4fO)cWtK1l$&B`U<85eaBBr*^coKLTwUEu zpj()o?Qtb9pQuH}Vw})u#+IUaoOr#m(lC8(idUx)rPT9DO~N5|8F-K=q7{*g^X>E2 z)|eZW%E~8-EkvHlK2nACbxNTT+lh<9;1-9|A3PYg&$-VTif3rLxVM&(NS`%7lsWbY z@y)Wor>0Dfme~Ic_MfI8hl*hHOz~ut*N+Y{2B*Kqr9SU##fEBIw2tEMjf|XKW?mq) zPt6Y)Q)JS-rktdt&4vIfLAcasdaD&MUYw|>C(=IGXmKV4kK4Hm4WH>BFn!zYCsGrA zlB4BiXf1sD=<2Zr@~x~IVtgX^q@#>NCPtn;%a!!hdcgzwA7#&7ceAm{x_|%nG$$+! z&>(|&X5l4u%_i4I!&a!{{K6geY9DVRu)j-(ae7BlAk5)ZxF zGJXa2XLU4Awa*4an1)#bT~->z#AJ{iI779!?!z35GZmGyCsshjcRB~(&t7Y%g};}nQTT4ML@O(_wXPX&M=wjv z9{%;%WUDHK7QuyV^VmPgcIBlP%jz77nY6s87R7wLEK04;@Ut@T456E4Udq*ZXpDF_D&c##1N^!6+(1TO)RIz-0u% zpHqQ1sdXC)CQpc0P9R(@x4i>$^({{ZMLG=jrU_pBkO4k{)H!CpostEQ>v8}7Bu)>C zqn9c$s{4+@AhHRv%Z03!EysHr8uPO>1CPeQMlh#K&2z}Y6b^xuQl>nwn2~QX>HGKB zayVD>_!(fhBmzI*UlA0v)6{fU2ie|)#B5xus<+E1&`>uXnXT|5uNyL=n_qM4diJPl z8j)IsJsSFD6G=IHCQb%Nv7)Z2>Ppui>b(|x-I)_YsGDV`!!4d&Dq`ZvlempYUHMlUOh<0g)Xp}dcw<^@H16eqTD|qBjYxvpPWW%9lAZ5d93(dA#{GZd0Jq>eCcWPI`ZIX zV;76Xs;qpzE9Rum+!j7dw^j)Vq$uvq1azy!>~#5P+!^vs-Zr#+at}Y zaKSRH!+q)Yyox5zRj|?yQdt?_$U1)9wxU8ka`}`N zmDDo4Cjc!zISbHA~Mt4 zj8aAB(&*{kUADHw7|dT0g9T^xxyfpm_bNiGtHN04#^k>!->F`GJEM;Uf&X#Jl3dQA zKe%K66)vC-tgv&iUEcyifF3t)Y&(9|NSFrY4*$30@jI6NcPRP4gE|(4h8l8BK}z2d RN_GPxz}^;N^U~To={Lkdp&9@H literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0.json new file mode 100644 index 0000000..408b611 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 0, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.30, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.30, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_0_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..673fea72cee53b931d5d1fc744d1329b0c395120 GIT binary patch literal 2600 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 L_He2>5_IhkKy85? literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1.json new file mode 100644 index 0000000..7eb87d0 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 1, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.40, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.40, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..f5db13f2a53e5d1d657aa8986b7aa1c94b82c6aa GIT binary patch literal 2621 zcmdT`X)qg#77kTh8m*>Nv89XKrnI;CW1pXKs*u*UDW*g?-E69IqGI zWyLtcs(E~61|qko zT^W4fax3-+dBrE{KO9ZR%H3Ajr>qxv4*U;@T)ihTp{wGd>X4EV{;=c|SEA!=4gEfB zn~TrrR#zXEa9LPKdw(d^Qq;7@ZuifC#N6h8wKI%)vqRC(6EqI5EnibnR^#U6{UzqX z<)W%w>~!mC%fkoM$o1qq!5iZ^R)F7GWPJXE3$=9J2BTYnEsO~M0d_){Vv+| z_a@dD_uEV>V_nwpk)qGYumXLyq1#Ivv6^2SK0xZ2 zOQN@i9gL(d2k+&;uVlu;k`^m8{kvruI{qXuVfF zX|?9#pQbV#uaO&W%-Y0m@o9P>#2B?@lS)`o4RB06i7GK=&}-ZGv-z)9n9nI&-2@#_ zC{S^{3yGuyY%8qUvAq-nXrSZ}c z0fgKS9$sG*%_j*w7+iS4_M?pey?W6O+OLM7S?e2N%XTYW9ZXPSrf7sShw2b9jBCti z^XjmcX49Yz;aheY_d5SV;l!b;NhFZ(lQT)~p6z^6Dv~TiV$s6H-Y^A zC5QyMbh;OV(ibl-;MIfjKP#aH8Q`IXH1vXxc2RS-y3nhg0eT6gvP@=$IVqXa<=*Ix z7i6e$i=b+RYbO)83z0;vC(#g%qEVZ^2^-Yr_=_j?0h*sW?)H%#3oZ2ASt&`c%vTt> z*}WJW-Wfyx)z1ZE(ibL|G6?r{ZOgkBXQ3KdX9|$%H*yFp)atj(y1qr0@yNlt6}prx z*Pt+IxQX*|rD%DO?{|~>TN)c_Iiy5*jawHd!5zD)A}!d8I^WrAyZ0Qenk>JE>?Ach z`)?ZmFY^EMK|S;s+(=SV!UtD5Gq3YkuL)wGQH=r-PT~9wGs&UI*XBAX>QdX>L9IWe zZc863RTYbP2X$G9@j5vrHEx6ABr!B3UH{ZL@y;j8nr-Hog6qr-5ClT7nj9QxG@5om zEp-2KC;MshGYX~FyUK@GB`Dk5*-tA%$TIGG*~dbhKJ(7>l9t_<}Y*4TEj_#={6fu zSa(ZtKP()f;OAoBRwEYDm`$%QQ)f6BLRv0*3O7LFfrj7oN3dm|s;b_O1wMGN@@>!< zsB0<4U!Rz{msijv%5QmelM`A0UU7KXqY1?+AjtCHA)uut>CNh{h7`H{fjRTSzV6r& zIMT-~WJCesbmyyyy1H&vTYY_rnl2%3eem#tQ}`4m$fb`dx91ByyeA`dDGWG2pGZVU z6cZD~>#k#_BBEX4GJKch)vJYtRt;vz%{o};+)pQ*mT3%j`qM}y451^+Q9xItcHR=OeOpS{F)oc9UjrGq)>3=6bD7^K#GtV<1**|&L76KeD Lxm>I{ANc6+lZc&P literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_1_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf5af91558d9e51075a64026546d49afd3159a7 GIT binary patch literal 2501 zcmd5;X;cyl7RIb5%jGqinkd%msiWpXxq@3wxuj1kMGGCNuuM%Mf#JJ${)f;xUkv~E~akc z7hq#JK@k1~Zc-SF8Ej4R*DZ9f-a<1LoK2v_c zCJe;`ukN>L+-|1lNBAw+ONrHPDA^vhmIPrw!Jf$pvJB~-B&%()#LJDeHDi3%!RVOF z1OJ>l=XsMD?1;LV6NVJM%Y^2cN55&r_JJTvXl}x1PLp9>(f#}Hl6nxwos@I*W)l-G zPHt+r>|&-l;beZq-D{6W8jjmJ#;kvuc`C?!yD+jsnX{iB&mS9KvO?YEDZ+wZk@z6Q zLHnx`X#@)MDLg(xx+w)Bvm@o6m`%838W!#^a>TuUlP^wh@J0=Pijf$zkZ!8|aJyUa z=tWni3EvpM7ZiQ=dhsOpPpm3}6Ad--fogzD_c6by+z>mV#3n_?7H9@B8f&-hBrhLY zFgm)cZJG3hgm z(-CK=!DB)dKx1PHlkQ`{yIkb)(*Sf=QIyqtj`o&K%`k^dT_Pj4C(pxd%ZCPJ*e za^9vvZ+f;vFVP$N8*lUP)oYFlzpx{z(V9>q*u07}d$h$+r@GJ z+-eXinz5idNcbIWPwz(Yyj8yvFIm25p`Y|zduTJQZw?prol9@bXZ)%>#!x=RgbfGB;R9Z3ZH#ED3BX_ubEL6`2p z+g!#=$DuMoMObG=FnQyqI}^04kjWvRMc2qmeM4EUDx-|(w&q_~7W3|6k@Y3Z=O#NC z#!<dFOnKWo)v)EeQ(@^n1{$l8Q(FN|5 zc2Vp0n}J>^2b(ZC{qqn!u5&_b*WHFL=OW_q^Ggx~fKE!bsU`l{2WZQp_wAL#-#uNK}h4BhNBpU5R=N00Ux~H#yfccoWzWJYD<=d^6*WT4}bnX7- z77|h#!%wF=~5l(N@PlFutOIRr?sj1 zML5=cmE#r`RwI*}hKAyF^qs->iEYxF+qX}AE$k{jB_$;>v5L}nh0c93i!O02o}Zt` zs+sEsXC0vB9Wb4`N4V9?V>W^-BPUeV95v4R`OUNq26vG3)sG)L)+i!@Q^jHn8k1a# zD@QPw+S-g79DlN-Z46Xo5Wq%0poqZ-)z%4u!GM?;e#I}lv$Y52KMtfyR;^ukxpqCA znWHMJqUNSbtOSt=9&qx((F>ORqR@6T_>;!i`Ou-kxxm!4w6t6!CIlm#S?~|bs7Uti z%NA{G4Xb8UbXt@0teOHEZhLs(NRW8UN!Co#${-6Ez3*>XLxQ86rWUMd$s_lgHj?!W zp}cS5ii)8jJ6`Zv=Ihhki9)-((`#!9<$rx4oG4V^Kfu%Jc{P?e=S6K!o_&3F0VI9F zq%7O)3_9cD!dExSwvO70KoU5!SvjTabH$mqf=L)!5hAt3+fk6dGxp{EyJcmSz2yAbX_Sw%UI7^bJ%UV4`UwKDIehp_ zs+#}i`Z^rTcd;Ms_@sEJw*UEuBk?Ad85NlU^4vL1o&RT#-yZUBob&sGHgrV%Xsb3} zAz)Ikg@ngo1?2$QFfHxBUH|*z{@Yyghck2?!6{_f#SLpDxKY2xGl0iw?^E?BFa7=B DC*Dh^ literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2.json new file mode 100644 index 0000000..fbd67cc --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 2, + "task_id": "mock_task_001", + "reward": 1.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.50, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.50, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_2_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..71ff70b0458500abfec9a26e26b5c7d42af34579 GIT binary patch literal 2711 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 LT(zyb3{C$7>olK< literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3.json b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3.json new file mode 100644 index 0000000..821c840 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3.json @@ -0,0 +1,20 @@ +{ + "step": 1, + "rollout_idx": 3, + "task_id": "mock_task_001", + "reward": 0.0, + "num_steps": 2, + "instruction": "Click the OK button", + "actions": [ + { + "step_idx": 0, + "action_text": "CLICK(x=0.60, y=0.50)", + "action_type": "click" + }, + { + "step_idx": 1, + "action_text": "CLICK(x=0.60, y=0.55)", + "action_type": "click" + } + ] +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3_screenshot_0.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3_screenshot_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0191bdf45db85f51430c63acec25e81650af7671 GIT binary patch literal 2720 zcmds3X;2eb66O#PhJeS693r?yF%Ba~BBumFQAAJ(BM244rIAF40Tn_x6NE9y7(fLk zK~6=32m}ISIAVgx5Z*R-_4<9?Uw`S| zUTy#leGLT#1%Ug7bC(qq6i>@-;a(;AxdZvpQ9(fi>3;5vZ)^d7B+1)%TB%)x91Pv> z3iLtUnxwef?inbY0->bXt{JUhJlIqXW(U$`(^jB}vJV;0JN*3rQ_`<#^R?Ccr?rUIz6 z3jZ=MGEi`NdwjpKp~OO4@5#nAi4j1(bMj>Nu}iTn*p(OVgK=?TgM(A_Tc!`PdTzdn zhY|H{N}HOlPrPq<`t+B_#=AIEL&c*Q_3iZm85q+9GOI*+c;MnUH*<2fYHFw~PU0~h zFL8o7aMkdXgUt`Gwkx43{UKrV&9;%aR$UHLhBi0%WDRQqm`*@ohi)Bez|9C>AP8h8 z$!cD_2rVy1aX15#xjQ6@8&NM?w8n9rpI>A|HxB9(GgB7>ocTXo-k*Y@yGo4@b3?d`}-FUI&D_$BwwC!Dgwzgi@9Hx2fB4~&dhV-~s~ zjLrlu#tE(j-5G)c&k^@2v z)3HWzH|T<`F(w=zn(|Tnu=zv~K4~WNNUN%*ZXH%ITebY-aaeQIEQL&-m|}-s@ry7s zg@$LixdN8@`H=p*-rl!QCy(+YKx`kV^ce^t6H9ROc6-My6=Bu)GCoeB-(bk zx<^ttomkRmClz0rN5Dbcs$p|At)-2vRm_zu`Lmx! zc>w#P??fwI>YkouXnOL42RP)S&2rsN^J+%_`_61nuueNo!AyPKmdx= zn;=f?FKrK$iP3xx@&$+jDSj-I)Z^TSbf>@*edXDs3@(B=&)vP2)eiTp8&rCGO-&6; zOxHsY8`t}txHuS!*f>Eb8Uw^T7KL&AqL)WTbve(@mciRIWBr|Pha_C;Rz?O-YKd7@ zq4nVBr2;$l8Xp|aWt~9XmMlXy*AJtKjk0AmtYC+SH2{rk|2?Lqx=)0&=S8db6f!ysV{FME5-oCR)vmNkxVvRL5_75zfAfwKLa}3RVNe z_YGaWd$*{43d%~X1yQ1AmwhN^Zw7D4yA?IygsfM~G;+2C%euq32aY7|rfO5HZHr9pOd9Sj8rKpSbO0U?2qEtSr%ue(Wg)prgH zbL|k_R&pF(RgT2oso14tmEJ>b*$8v}eb*+xj;Wk(H4MGXz1q6^E0pmB< zMCIk~+$2ecjeYb@B8Wn#BU%YI&Itxp>MT_);)f3M1T!ypo%inEPo#xT<>?zuRD&hPV1>jKl>1>)-)2O+kVoX+h6tClN zWt=#@7z5ldR>HXcN~lfJrjIBAfJ~MJ9UXnRfhpY!tD2T}Fpn6#9`Z@**g?u7E2BL>HP9?+y_Rs1L0F|5| zXtbwb?D1HB)XY}v#75r3oPq+KG)+CxLIo-fAY1&9+f~^@p-{TJbD(u6V1+N?aKUj) z%Tu!E5)Zjqr%JNKhb{g7^K=)t0E`u-sN|8R%I`amAJ}w^sArhFp@-?UC!>O_*+c_r zeM@Q@EY-rlUpS$?&Igx#46~&JpWwOa^HhX9&9NsH#3-+z|rHyFtGfgGt3720GHxp7R$7e5fe|(3^qB-DZZX2 z>Q1Td=m1~5xQiy5nnLTZyVBPYUs2UnvYCA2wzm7MRXAL2dd6aTKwv27D8z~fYeTa^ zh{b-$>S{2v1F4P6k|RdYI)d2{lG4+)F$;atrbQ~`Vm>m1o49H&l{TiQb1L(#kchX! z_e;;8*E>Ydk#jNMkJllmlBKI8uR?vD{dW>>@baP>2AC49PagvVyoE*B8#CQRm2Xar z;S#Dwmusl(dk;faD=hcbvJO71?rS8pvBfJD_%8u2|8?#EMTYXvJtIxzET2xQ*g}Cs zFgG>bI)K)Am&-P>{x=!(=Mw#=`1wDG0ygcaS$-UN>7(~FU#>hA++DrSQC&h({sD+= B+Bg6J literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3_screenshot_1.png b/test_artifacts/grpo_e2e/20261016_215929/rollout_traces/step_1_rollout_3_screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da6a005b208747137ca7f31ff1b32f686d205c57 GIT binary patch literal 2631 zcmds3X*3%O77m^+mT0T`G?bZVI(@Awc{HR!jH1sQl3H2~QB-Y>QYA=YSM^$3OIu5* z_gYJBRa=OXC>3i%wGA3eVhNfewuG$D%$fNy=e(K!Z~okK&-u=|_k8EO-#y>Gi--%V zN+2Zw0HA9Bqm45FAZNAP^Y+Q_Rw?q7IRKypw72=2YjolAMEu1^Soxl{)ie5kIfZiM z1csG91C~UUWLA03fHUD*T<7Z@-#GZ+adtU`ROqT7L5ovT9>IaC*o(B00Zx55ZP9fP zR_wHpWd^3#Mf~(G_?EYiz^?f9F~0_Je%zRVTN_X;u^h6r*PN8$3<^j8o1S9!9cMcl;DLp~X=NpxMdfrx=|AYcR$}KGD(g#n|2hp%tVb3wx zImzC+`Pgx9_6-%#W?LxKtYvAeZuPqV5o9r?0yBC=_J+;QLKL`~;BJT6(JBe6H$Ql9 zR2>F^Ao$IRwzhar?%jl29awBguKv_Ks4fO)cWtK1l$&B`U<85eaBBr*^coKLTwUEu zpj()o?Qtb9pQuH}Vw})u#+IUaoOr#m(lC8(idUx)rPT9DO~N5|8F-K=q7{*g^X>E2 z)|eZW%E~8-EkvHlK2nACbxNTT+lh<9;1-9|A3PYg&$-VTif3rLxVM&(NS`%7lsWbY z@y)Wor>0Dfme~Ic_MfI8hl*hHOz~ut*N+Y{2B*Kqr9SU##fEBIw2tEMjf|XKW?mq) zPt6Y)Q)JS-rktdt&4vIfLAcasdaD&MUYw|>C(=IGXmKV4kK4Hm4WH>BFn!zYCsGrA zlB4BiXf1sD=<2Zr@~x~IVtgX^q@#>NCPtn;%a!!hdcgzwA7#&7ceAm{x_|%nG$$+! z&>(|&X5l4u%_i4I!&a!{{K6geY9DVRu)j-(ae7BlAk5)ZxF zGJXa2XLU4Awa*4an1)#bT~->z#AJ{iI779!?!z35GZmGyCsshjcRB~(&t7Y%g};}nQTT4ML@O(_wXPX&M=wjv z9{%;%WUDHK7QuyV^VmPgcIBlP%jz77nY6s87R7wLEK04;@Ut@T456E4Udq*ZXpDF_D&c##1N^!6+(1TO)RIz-0u% zpHqQ1sdXC)CQpc0P9R(@x4i>$^({{ZMLG=jrU_pBkO4k{)H!CpostEQ>v8}7Bu)>C zqn9c$s{4+@AhHRv%Z03!EysHr8uPO>1CPeQMlh#K&2z}Y6b^xuQl>nwn2~QX>HGKB zayVD>_!(fhBmzI*UlA0v)6{fU2ie|)#B5xus<+E1&`>uXnXT|5uNyL=n_qM4diJPl z8j)IsJsSFD6G=IHCQb%Nv7)Z2>Ppui>b(|x-I)_YsGDV`!!4d&Dq`ZvlempYUHMlUOh<0g)Xp}dcw<^@H16eqTD|qBjYxvpPWW%9lAZ5d93(dA#{GZd0Jq>eCcWPI`ZIX zV;76Xs;qpzE9Rum+!j7dw^j)Vq$uvq1azy!>~#5P+!^vs-Zr#+at}Y zaKSRH!+q)Yyox5zRj|?yQdt?_$U1)9wxU8ka`}`N zmDDo4Cjc!zISbHA~Mt4 zj8aAB(&*{kUADHw7|dT0g9T^xxyfpm_bNiGtHN04#^k>!->F`GJEM;Uf&X#Jl3dQA zKe%K66)vC-tgv&iUEcyifF3t)Y&(9|NSFrY4*$30@jI6NcPRP4gE|(4h8l8BK}z2d RN_GPxz}^;N^U~To={Lkdp&9@H literal 0 HcmV?d00001 diff --git a/test_artifacts/grpo_e2e/20261016_215929/summary.txt b/test_artifacts/grpo_e2e/20261016_215929/summary.txt new file mode 100644 index 0000000..464d3a6 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/summary.txt @@ -0,0 +1,25 @@ +============================================================ +GRPO E2E TEST REPORT: test_e2e_training_loop_mock +============================================================ +Status: passed +Duration: 0.04s +Training steps: 2 +Rollouts per step: 4 +Total rollouts: 8 + +--- Model Weight Change --- +Weights changed: True +Total delta L2 norm: 0.185477 + embedding.weight: delta=0.025376 (norm 91.4769 -> 91.4746) + head.weight: delta=0.180939 (norm 9.2112 -> 9.2100) + head.bias: delta=0.031921 (norm 1.5798 -> 1.5810) + +--- Training Metrics --- + Step 0: loss=0.0000 reward_mean=0.50 grad_norm=1.0000 valid_terms=8 + Step 1: loss=0.0000 reward_mean=0.50 grad_norm=1.0000 valid_terms=8 + +--- Checkpoint --- +Checkpoint path: test_artifacts/grpo_e2e/20261016_215929/checkpoint/step_2 +Checkpoint loadable: True + +============================================================ \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/test_report.json b/test_artifacts/grpo_e2e/20261016_215929/test_report.json new file mode 100644 index 0000000..a187795 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/test_report.json @@ -0,0 +1,15 @@ +{ + "test_name": "test_e2e_training_loop_mock", + "start_time": "2026-10-16T21:59:29", + "status": "passed", + "duration_s": 0.036730051040649414, + "num_training_steps": 2, + "num_rollouts_per_step": 4, + "total_rollouts": 8, + "model_weights_changed": true, + "total_delta_norm": 0.1854769170765381, + "checkpoint_loadable": true, + "final_loss": 0.0, + "final_reward_mean": 0.5, + "final_grad_norm": 1.0000000528613704 +} \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/training_log.json b/test_artifacts/grpo_e2e/20261016_215929/training_log.json new file mode 100644 index 0000000..ba6679a --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/training_log.json @@ -0,0 +1,34 @@ +[ + { + "step": 0, + "loss": 0.0, + "reward_mean": 0.5, + "reward_std": 0.5, + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "grad_norm": 1.0000001900372488, + "lr": 0.001, + "valid_terms": 8, + "step_time": 0.01689004898071289 + }, + { + "step": 1, + "loss": 0.0, + "reward_mean": 0.5, + "reward_std": 0.5, + "advantages": [ + 0.9999999800000003, + -0.9999999800000003, + 0.9999999800000003, + -0.9999999800000003 + ], + "grad_norm": 1.0000000528613704, + "lr": 0.001, + "valid_terms": 8, + "step_time": 0.015859127044677734 + } +] \ No newline at end of file diff --git a/test_artifacts/grpo_e2e/20261016_215929/weight_diff/detailed_diff.json b/test_artifacts/grpo_e2e/20261016_215929/weight_diff/detailed_diff.json new file mode 100644 index 0000000..7467ea5 --- /dev/null +++ b/test_artifacts/grpo_e2e/20261016_215929/weight_diff/detailed_diff.json @@ -0,0 +1,51 @@ +{ + "parameters": { + "embedding.weight": { + "before_norm": 90.87411499023438, + "after_norm": 90.87342071533203, + "delta_l2": 0.012669733725488186, + "delta_max": 0.0010232925415039062, + "delta_mean": 5.214037628320511e-07, + "shape": [ + 256, + 32 + ], + "num_elements": 8192, + "grad_norm": 3.2811145782470703, + "grad_max": 0.7971603870391846 + }, + "head.weight": { + "before_norm": 9.232221603393555, + "after_norm": 9.232917785644531, + "delta_l2": 0.09049731492996216, + "delta_max": 0.0010017603635787964, + "delta_mean": -0.00018775406351778656, + "shape": [ + 256, + 32 + ], + "num_elements": 8192, + "grad_norm": 32.86104965209961, + "grad_max": 7.829895496368408 + }, + "head.bias": { + "before_norm": 1.5759165287017822, + "after_norm": 1.576166033744812, + "delta_l2": 0.015995899215340614, + "delta_max": 0.0010016560554504395, + "delta_mean": -7.669492333661765e-06, + "shape": [ + 256 + ], + "num_elements": 256, + "grad_norm": 3.992352247238159, + "grad_max": 2.0116944313049316 + } + }, + "summary": { + "total_params": 16640, + "trainable_params": 16640, + "changed_param_groups": 3, + "total_param_groups": 3 + } +} \ No newline at end of file diff --git a/tests/test_kaggle_cloud_and_modal_guard.py b/tests/test_kaggle_cloud_and_modal_guard.py new file mode 100644 index 0000000..fef3c44 --- /dev/null +++ b/tests/test_kaggle_cloud_and_modal_guard.py @@ -0,0 +1,88 @@ +"""Kaggle staging and the Modal GPU production guard (no network).""" + +from __future__ import annotations + +import json + +import pytest + +from openadapt_ml.cloud import kaggle_cloud +from openadapt_ml.cloud.modal_gpu_guard import modal_gpu_refusal + + +def test_guard_refuses_by_default(): + assert "off by default" in modal_gpu_refusal({}, profile="other") + + +@pytest.mark.parametrize("environment", ["", "main", "prod", "Production"]) +def test_guard_refuses_production_environments(environment): + env = {"OPENADAPT_ALLOW_MODAL_GPU": "1", "MODAL_ENVIRONMENT": environment} + assert "non-production" in modal_gpu_refusal(env, profile="research") + + +def test_guard_refuses_production_workspace(): + env = {"OPENADAPT_ALLOW_MODAL_GPU": "1", "MODAL_ENVIRONMENT": "gpu-research"} + assert "production workspace" in modal_gpu_refusal(env, profile="abrichr") + assert modal_gpu_refusal(env, profile="") is not None + + +def test_guard_allows_explicit_nonprod_target(): + env = {"OPENADAPT_ALLOW_MODAL_GPU": "1", "MODAL_ENVIRONMENT": "gpu-research"} + assert modal_gpu_refusal(env, profile="openadapt-research") is None + + +def test_modal_train_cli_refuses_without_opt_in(monkeypatch, tmp_path, capsys): + from openadapt_ml.cloud.modal_cloud import cli_main + + monkeypatch.delenv("OPENADAPT_ALLOW_MODAL_GPU", raising=False) + rc = cli_main(["train", "--bundle", str(tmp_path)]) + assert rc == 1 + assert "Refusing Modal GPU work" in capsys.readouterr().out + + +def test_stage_writes_gpu_kernel_and_dataset(tmp_path): + bundle = tmp_path / "bundle" + bundle.mkdir() + (bundle / "training_data.jsonl").write_text("{}\n") + config = tmp_path / "c.yaml" + config.write_text("model: x\n") + ckpt = tmp_path / "results" + ckpt.mkdir() + (ckpt / "adapter.bin").write_bytes(b"0") + d, k = kaggle_cloud.stage( + bundle, + config, + tmp_path / "out", + "someone", + "oa-train-data", + "oa-train", + checkpoint=ckpt, + ) + meta = json.loads((k / "kernel-metadata.json").read_text()) + assert ( + meta["enable_gpu"] is True + and meta["enable_internet"] is True + and meta["is_private"] is True + ) + assert meta["dataset_sources"] == ["someone/oa-train-data"] + assert (k / meta["code_file"]).is_file() + assert (d / "bundle" / "training_data.jsonl").is_file() + assert (d / "checkpoint" / "adapter.bin").is_file() + assert ( + json.loads((d / "dataset-metadata.json").read_text())["id"] + == "someone/oa-train-data" + ) + + +def test_stage_rejects_bad_slug_and_missing_bundle(tmp_path): + with pytest.raises(ValueError): + kaggle_cloud.kernel_metadata("u", "Bad Slug", "oa-train-data", "NvidiaTeslaT4") + with pytest.raises(FileNotFoundError): + kaggle_cloud.stage( + tmp_path, + tmp_path / "c.yaml", + tmp_path / "o", + "u", + "oa-train-data", + "oa-train", + ) diff --git a/tests/test_modal_cloud.py b/tests/test_modal_cloud.py index ff2e274..73c91b0 100644 --- a/tests/test_modal_cloud.py +++ b/tests/test_modal_cloud.py @@ -9,6 +9,16 @@ import pytest + +@pytest.fixture(autouse=True) +def _allow_modal_gpu_in_mocked_tests(): + """These tests mock Modal; the production GPU guard is tested separately.""" + with ( + patch("openadapt_ml.cloud.modal_cloud.modal_gpu_refusal", return_value=None), + patch("openadapt_ml.cloud.modal_cloud.require_nonprod_modal_gpu"), + ): + yield + # --------------------------------------------------------------------------- # CLI argument parsing tests # ---------------------------------------------------------------------------