Spaces:
Running
Running
Show maintenance notice while leaderboard is updated
Browse files- index.html +26 -178
index.html
CHANGED
|
@@ -1,183 +1,31 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html lang="en">
|
|
|
|
|
|
|
|
|
|
| 3 |
<title>MoveBench Leaderboard</title>
|
| 4 |
-
<link rel="icon" href="https://keep-tech.github.io/MoveBench/assets/brand/movebench-mb-square.png">
|
| 5 |
<style>
|
| 6 |
-
:root{
|
| 7 |
-
--g1:#5fe39a;--g2:#c7e24b;--g3:#f6a43a;--g4:#f45b8a;--g5:#e85cc8;--accent:#8ff0b0;--s1:#30a96b;--s2:#d27c1a;--s3:#cc4aae;
|
| 8 |
-
--grad:linear-gradient(90deg,var(--g1),var(--g2) 30%,var(--g3) 55%,var(--g4) 80%,var(--g5))}
|
| 9 |
*{box-sizing:border-box}
|
| 10 |
-
body{
|
| 11 |
-
|
| 12 |
-
.
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
.
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin:28px 0 18px}
|
| 30 |
-
.tab{background:var(--panel);border:1px solid var(--line);color:var(--muted);padding:8px 16px;border-radius:999px;font:inherit;font-size:14px;cursor:pointer}
|
| 31 |
-
.tab:hover{color:var(--ink);border-color:var(--line2)}.tab[aria-selected=true]{color:#0b0b0c;background:var(--accent);border-color:var(--accent);font-weight:600}
|
| 32 |
-
section.panel{display:none;padding-bottom:56px}section.panel.on{display:block}
|
| 33 |
-
h2{font-size:22px;margin:0 0 4px}.sub{color:var(--muted);margin:0 0 18px;font-size:14px}
|
| 34 |
-
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px}
|
| 35 |
-
.controls{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}
|
| 36 |
-
input,select{background:var(--panel2);border:1px solid var(--line2);color:var(--ink);border-radius:9px;padding:8px 12px;font:inherit;font-size:14px}
|
| 37 |
-
input{min-width:220px}
|
| 38 |
-
.tw{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:var(--panel)}
|
| 39 |
-
table{border-collapse:collapse;width:100%;font-variant-numeric:tabular-nums;font-size:14px}
|
| 40 |
-
th,td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap}
|
| 41 |
-
tbody tr:last-child td{border-bottom:0}tbody tr:hover td{background:var(--panel2)}
|
| 42 |
-
th{position:sticky;top:0;background:var(--panel2);color:var(--muted);font-weight:600;font-size:12.5px;cursor:pointer;user-select:none}
|
| 43 |
-
th.nosort{cursor:default}th.act{color:var(--ink)}th .ar{opacity:.7}
|
| 44 |
-
th.l,td.l{text-align:left}
|
| 45 |
-
.grp th{cursor:default;text-align:center;font-size:11.5px;letter-spacing:.06em;border-bottom:1px solid var(--line2)}
|
| 46 |
-
.rk{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--panel2);color:var(--muted);font-weight:700;font-size:13px}
|
| 47 |
-
.r1 .rk{background:var(--g1);color:#07130c}.r2 .rk{background:var(--g2);color:#151803}.r3 .rk{background:var(--g3);color:#1d1003}
|
| 48 |
-
.mname{font-weight:600;color:var(--ink)}.fam{display:block;color:var(--faint);font-size:12px}
|
| 49 |
-
.tot{display:flex;align-items:center;gap:10px;justify-content:flex-end}.tot b{min-width:38px}
|
| 50 |
-
.mini{width:90px;height:6px;border-radius:3px;background:var(--line);overflow:hidden}.mini i{display:block;height:100%;background:var(--grad);background-size:90px 6px}
|
| 51 |
-
.hfb{font-size:11px;border:1px solid var(--line2);border-radius:5px;padding:0 5px;margin-left:6px;color:var(--muted)}
|
| 52 |
-
.notes{color:var(--faint);font-size:12.5px;margin-top:10px}
|
| 53 |
-
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
|
| 54 |
-
.sc h3{margin:0;font-size:16px}.sc .d{color:var(--muted);font-size:12.5px;margin:2px 0 12px}
|
| 55 |
-
.bars{display:grid;gap:7px}
|
| 56 |
-
.bar{display:grid;grid-template-columns:18px 132px minmax(0,1fr) 34px;gap:8px;align-items:center;font-size:12.5px}
|
| 57 |
-
.bar .nm2{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink)}
|
| 58 |
-
.bar .n{color:var(--faint);text-align:right}.bar .v{text-align:right;font-variant-numeric:tabular-nums}
|
| 59 |
-
.bar .t{height:8px;background:var(--panel2);border-radius:0 4px 4px 0}
|
| 60 |
-
.bar .t i{display:block;height:100%;border-radius:0 4px 4px 0}
|
| 61 |
-
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--muted);margin:0 0 12px}
|
| 62 |
-
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px}
|
| 63 |
-
.gb{display:grid;grid-template-columns:200px 1fr;gap:4px 14px;align-items:center}
|
| 64 |
-
.gb .nm{font-size:13px;text-align:right;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
| 65 |
-
.gb .rows{display:grid;gap:2px;padding:6px 0;border-bottom:1px solid var(--line)}
|
| 66 |
-
.gb .rr{display:grid;grid-template-columns:1fr 40px;gap:8px;align-items:center}
|
| 67 |
-
.gb .rr .tr{height:8px;background:var(--panel2);border-radius:0 4px 4px 0}.gb .rr .tr i{display:block;height:100%;border-radius:0 4px 4px 0}
|
| 68 |
-
.gb .rr b{font-size:11.5px;font-weight:500;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}
|
| 69 |
-
.prog{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
|
| 70 |
-
.pc .fam2{color:var(--muted);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase}
|
| 71 |
-
.pc .dl{font-size:34px;font-weight:800;margin:4px 0 2px}.pc .dl small{font-size:14px;color:var(--muted);font-weight:500;margin-left:6px}
|
| 72 |
-
.pc .pair{display:flex;justify-content:space-between;gap:10px;margin-top:14px;font-size:13px}
|
| 73 |
-
.pc .pair div{flex:1;background:var(--panel2);border-radius:10px;padding:10px}.pc .pair b{display:block;font-size:20px}
|
| 74 |
-
.pc .arrow{align-self:center;color:var(--faint)}
|
| 75 |
-
.pc p{color:var(--faint);font-size:12.5px;margin:12px 0 0}
|
| 76 |
-
.about{display:grid;grid-template-columns:1fr 1fr;gap:14px}.about h3{margin:0 0 8px;font-size:16px}.about ul{margin:0;padding-left:18px;color:var(--muted)}.about li{margin:4px 0}
|
| 77 |
-
.pill{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;border:1px solid var(--line2);color:var(--muted);margin:0 6px 6px 0}
|
| 78 |
-
footer{border-top:1px solid var(--line);color:var(--faint);font-size:12.5px;padding:22px 0 40px}
|
| 79 |
-
@media (max-width:860px){.stats{grid-template-columns:repeat(2,1fr)}.grid3,.prog,.about{grid-template-columns:1fr}.gb{grid-template-columns:120px 1fr}input{min-width:0;flex:1}}
|
| 80 |
-
select{appearance:none;-webkit-appearance:none;padding-right:40px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%239a9ba6' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;background-size:12px 8px}
|
| 81 |
-
select:hover{border-color:var(--line2);background-color:var(--panel)}</style></head><body>
|
| 82 |
-
<header><div class="wrap"><a class="brand" href="https://keep-tech.github.io/MoveBench/"><img src="https://keep-tech.github.io/MoveBench/assets/brand/movebench-mb-square.png" alt="">MoveBench</a>
|
| 83 |
-
<div class="lang" role="group" aria-label="Language"><button data-lang="en" aria-pressed="true">EN</button><button data-lang="zh" aria-pressed="false">中文</button></div></div></header>
|
| 84 |
-
<div class="hero"><div class="wrap">
|
| 85 |
-
<div class="eyebrow" data-i18n="eyebrow"></div>
|
| 86 |
-
<h1><span data-i18n="h1a"></span> <span class="gt" data-i18n="h1b"></span></h1>
|
| 87 |
-
<p class="lead" data-i18n="lead"></p>
|
| 88 |
-
<div class="stats">
|
| 89 |
-
<div class="stat"><b>25</b><span data-i18n="st1"></span></div><div class="stat"><b>809</b><span data-i18n="st2"></span></div><div class="stat"><b>3</b><span data-i18n="st3"></span></div><div class="stat"><b>3</b><span data-i18n="st4"></span></div>
|
| 90 |
-
</div></div></div>
|
| 91 |
-
<main class="wrap">
|
| 92 |
-
<div class="tabs" role="tablist">
|
| 93 |
-
<button class="tab" role="tab" data-t="overall" aria-selected="true" data-i18n="t_overall"></button>
|
| 94 |
-
<button class="tab" role="tab" data-t="scene" data-i18n="t_scene"></button>
|
| 95 |
-
<button class="tab" role="tab" data-t="cap" data-i18n="t_cap"></button>
|
| 96 |
-
<button class="tab" role="tab" data-t="type" data-i18n="t_type"></button>
|
| 97 |
-
<button class="tab" role="tab" data-t="prog" data-i18n="t_prog"></button>
|
| 98 |
-
<button class="tab" role="tab" data-t="about" data-i18n="t_about"></button>
|
| 99 |
-
</div>
|
| 100 |
-
<section class="panel on" id="p-overall">
|
| 101 |
-
<h2 data-i18n="h_overall"></h2><p class="sub" data-i18n="s_overall"></p>
|
| 102 |
-
<div class="controls"><input id="q"><select id="fam"></select></div>
|
| 103 |
-
<div class="tw"><table id="tbl"><thead>
|
| 104 |
-
<tr class="grp"><th class="nosort" colspan="3"></th><th class="nosort" colspan="3" data-i18n="g_fmt"></th><th class="nosort" colspan="3" data-i18n="g_sc"></th><th class="nosort" colspan="3" data-i18n="g_layer"></th><th class="nosort"></th></tr>
|
| 105 |
-
<tr id="hdr"></tr></thead><tbody></tbody></table></div>
|
| 106 |
-
<p class="notes" data-i18n-html="n_overall"></p>
|
| 107 |
-
</section>
|
| 108 |
-
<section class="panel" id="p-scene"><h2 data-i18n="h_scene"></h2><p class="sub" data-i18n="s_scene"></p><div class="grid3" id="scenes"></div></section>
|
| 109 |
-
<section class="panel" id="p-cap"><h2 data-i18n="h_cap"></h2><p class="sub" data-i18n="s_cap"></p>
|
| 110 |
-
<div class="controls"><select id="capSort"><option value="total" data-i18n="so_total"></option><option value="safe" data-i18n="so_safe"></option><option value="pro" data-i18n="so_pro"></option><option value="exp" data-i18n="so_exp"></option></select></div>
|
| 111 |
-
<div class="card"><div class="legend" id="capLeg"></div><div class="gb" id="capChart"></div></div></section>
|
| 112 |
-
<section class="panel" id="p-type"><h2 data-i18n="h_type"></h2><p class="sub" data-i18n="s_type"></p>
|
| 113 |
-
<div class="controls"><select id="typeSort"><option value="total" data-i18n="so_total"></option><option value="ms" data-i18n="so_ms"></option><option value="oq" data-i18n="so_oq"></option></select></div>
|
| 114 |
-
<div class="card"><div class="legend" id="typeLeg"></div><div class="gb" id="typeChart"></div></div></section>
|
| 115 |
-
<section class="panel" id="p-prog"><h2 data-i18n="h_prog"></h2><p class="sub" data-i18n="s_prog"></p><div class="prog" id="progCards"></div><p class="notes" data-i18n="n_prog"></p></section>
|
| 116 |
-
<section class="panel" id="p-about"><h2 data-i18n="h_about"></h2><p class="sub" data-i18n="s_about"></p>
|
| 117 |
-
<div class="about">
|
| 118 |
-
<div class="card"><h3 data-i18n="a_fw"></h3><span class="pill" data-i18n="p_safe"></span><span class="pill" data-i18n="p_pro"></span><span class="pill" data-i18n="p_exp"></span><ul data-i18n-html="a_fw_l"></ul></div>
|
| 119 |
-
<div class="card"><h3 data-i18n="a_sc"></h3><ul data-i18n-html="a_sc_l"></ul></div>
|
| 120 |
-
<div class="card"><h3 data-i18n="a_dn"></h3><ul data-i18n-html="a_dn_l"></ul></div>
|
| 121 |
-
<div class="card"><h3 data-i18n="a_sub"></h3><ul data-i18n-html="a_sub_l"></ul></div>
|
| 122 |
-
</div></section>
|
| 123 |
</main>
|
| 124 |
-
<
|
| 125 |
-
<
|
| 126 |
-
const M=[{"rank": 1, "name": "GPT-5.2", "cov": "全量", "total": 0.924, "oq": 0.895, "mcq": 0.971, "DA": 0.94, "PG": 0.872, "QA": 0.957, "ss": 1.0, "ms": 0.954, "safe": 0.891, "pro": 0.922, "exp": 0.909, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "GPT", "hf": null}, {"rank": 2, "name": "GLM-5.3", "cov": "全量", "total": 0.922, "oq": 0.889, "mcq": 0.974, "DA": 0.935, "PG": 0.873, "QA": 0.955, "ss": 1.0, "ms": 0.959, "safe": 0.905, "pro": 0.913, "exp": 0.907, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "GLM", "hf": "zai-org/GLM-5.3"}, {"rank": 3, "name": "Claude Opus 5.5", "cov": "全量", "total": 0.921, "oq": 0.895, "mcq": 0.965, "DA": 0.926, "PG": 0.88, "QA": 0.957, "ss": 1.0, "ms": 0.944, "safe": 0.916, "pro": 0.919, "exp": 0.915, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Claude", "hf": null}, {"rank": 4, "name": "Claude Opus 4.6", "cov": "全量", "total": 0.912, "oq": 0.87, "mcq": 0.981, "DA": 0.925, "PG": 0.859, "QA": 0.95, "ss": 1.0, "ms": 0.97, "safe": 0.856, "pro": 0.909, "exp": 0.895, "n": 809, "nOq": 499, "nMcq": 310, "zero": 1, "family": "Claude", "hf": null}, {"rank": 5, "name": "Qwen3.8 Max", "cov": "全量", "total": 0.912, "oq": 0.868, "mcq": 0.984, "DA": 0.918, "PG": 0.881, "QA": 0.936, "ss": 1.0, "ms": 0.975, "safe": 0.915, "pro": 0.88, "exp": 0.9, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Qwen", "hf": null}, {"rank": 6, "name": "Doubao Seed 2.1 Pro", "cov": "全量", "total": 0.91, "oq": 0.861, "mcq": 0.987, "DA": 0.907, "PG": 0.882, "QA": 0.94, "ss": 1.0, "ms": 0.98, "safe": 0.892, "pro": 0.879, "exp": 0.898, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Doubao", "hf": null}, {"rank": 7, "name": "Kimi K3", "cov": "全量", "total": 0.909, "oq": 0.865, "mcq": 0.981, "DA": 0.922, "PG": 0.863, "QA": 0.941, "ss": 1.0, "ms": 0.97, "safe": 0.895, "pro": 0.89, "exp": 0.891, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Kimi", "hf": "moonshotai/Kimi-K3"}, {"rank": 8, "name": "Qwen3.5 397B-A17B", "cov": "全量", "total": 0.909, "oq": 0.872, "mcq": 0.968, "DA": 0.929, "PG": 0.83, "QA": 0.964, "ss": 1.0, "ms": 0.949, "safe": 0.894, "pro": 0.91, "exp": 0.901, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Qwen", "hf": "Qwen/Qwen3.5-397B-A17B"}, {"rank": 9, "name": "MiniMax M3", "cov": "全量", "total": 0.907, "oq": 0.874, "mcq": 0.961, "DA": 0.927, "PG": 0.838, "QA": 0.954, "ss": 1.0, "ms": 0.939, "safe": 0.926, "pro": 0.909, "exp": 0.879, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "MiniMax", "hf": "MiniMaxAI/MiniMax-M3"}, {"rank": 10, "name": "Qwen3.5 27B", "cov": "全量", "total": 0.899, "oq": 0.856, "mcq": 0.968, "DA": 0.925, "PG": 0.808, "QA": 0.96, "ss": 1.0, "ms": 0.949, "safe": 0.869, "pro": 0.897, "exp": 0.894, "n": 809, "nOq": 499, "nMcq": 310, "zero": 1, "family": "Qwen", "hf": "Qwen/Qwen3.5-27B"}, {"rank": 11, "name": "MiMo v2.6 Pro", "cov": "全量", "total": 0.898, "oq": 0.85, "mcq": 0.974, "DA": 0.917, "PG": 0.855, "QA": 0.918, "ss": 1.0, "ms": 0.959, "safe": 0.869, "pro": 0.872, "exp": 0.876, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "MiMo", "hf": null}, {"rank": 12, "name": "Qwen3.5 35B-A3B", "cov": "全量", "total": 0.891, "oq": 0.849, "mcq": 0.958, "DA": 0.921, "PG": 0.799, "QA": 0.948, "ss": 1.0, "ms": 0.934, "safe": 0.858, "pro": 0.889, "exp": 0.885, "n": 809, "nOq": 499, "nMcq": 310, "zero": 3, "family": "Qwen", "hf": "Qwen/Qwen3.5-35B-A3B"}, {"rank": 13, "name": "Gemini 4 Argon", "cov": "全量", "total": 0.89, "oq": 0.83, "mcq": 0.987, "DA": 0.918, "PG": 0.84, "QA": 0.908, "ss": 1.0, "ms": 0.98, "safe": 0.824, "pro": 0.874, "exp": 0.867, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "Gemini", "hf": null}, {"rank": 14, "name": "HY3", "cov": "全量", "total": 0.887, "oq": 0.845, "mcq": 0.955, "DA": 0.909, "PG": 0.826, "QA": 0.924, "ss": 1.0, "ms": 0.929, "safe": 0.868, "pro": 0.886, "exp": 0.867, "n": 809, "nOq": 499, "nMcq": 310, "zero": 0, "family": "HY", "hf": "tencent/Hy3"}, {"rank": 15, "name": "GPT-6", "cov": "全量", "total": 0.88, "oq": 0.846, "mcq": 0.935, "DA": 0.885, "PG": 0.858, "QA": 0.898, "ss": 1.0, "ms": 0.898, "safe": 0.889, "pro": 0.869, "exp": 0.873, "n": 808, "nOq": 499, "nMcq": 309, "zero": 0, "family": "GPT", "hf": null}, {"rank": 16, "name": "Qwen3 Max", "cov": "全量", "total": 0.873, "oq": 0.806, "mcq": 0.981, "DA": 0.905, "PG": 0.804, "QA": 0.906, "ss": 1.0, "ms": 0.97, "safe": 0.772, "pro": 0.851, "exp": 0.861, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "Qwen", "hf": null}, {"rank": 17, "name": "DeepSeek R1", "cov": "全量", "total": 0.861, "oq": 0.797, "mcq": 0.965, "DA": 0.892, "PG": 0.78, "QA": 0.907, "ss": 1.0, "ms": 0.944, "safe": 0.788, "pro": 0.84, "exp": 0.852, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "DeepSeek", "hf": "deepseek-ai/DeepSeek-R1"}, {"rank": 18, "name": "Doubao Seed 2.0 Pro", "cov": "全量", "total": 0.856, "oq": 0.786, "mcq": 0.968, "DA": 0.877, "PG": 0.783, "QA": 0.903, "ss": 1.0, "ms": 0.949, "safe": 0.784, "pro": 0.836, "exp": 0.849, "n": 809, "nOq": 499, "nMcq": 310, "zero": 2, "family": "Doubao", "hf": null}, {"rank": 19, "name": "Kimi K2", "cov": "全量", "total": 0.847, "oq": 0.765, "mcq": 0.981, "DA": 0.895, "PG": 0.737, "QA": 0.903, "ss": 1.0, "ms": 0.97, "safe": 0.753, "pro": 0.83, "exp": 0.822, "n": 809, "nOq": 499, "nMcq": 310, "zero": 6, "family": "Kimi", "hf": null}, {"rank": 20, "name": "GLM-4.7", "cov": "全量", "total": 0.843, "oq": 0.79, "mcq": 0.929, "DA": 0.894, "PG": 0.716, "QA": 0.911, "ss": 1.0, "ms": 0.888, "safe": 0.752, "pro": 0.854, "exp": 0.854, "n": 809, "nOq": 499, "nMcq": 310, "zero": 4, "family": "GLM", "hf": "zai-org/GLM-4.7"}, {"rank": 21, "name": "Grok 4.1 Fast", "cov": "全量", "total": 0.842, "oq": 0.77, "mcq": 0.958, "DA": 0.869, "PG": 0.766, "QA": 0.887, "ss": 1.0, "ms": 0.934, "safe": 0.714, "pro": 0.809, "exp": 0.834, "n": 809, "nOq": 499, "nMcq": 310, "zero": 3, "family": "Grok", "hf": null}, {"rank": 22, "name": "DeepSeek V3.2/DeepSeek V3", "cov": "全量(OQ=V3.2/MCQ=V3)", "total": 0.842, "oq": 0.769, "mcq": 0.958, "DA": 0.847, "PG": 0.787, "QA": 0.89, "ss": 1.0, "ms": 0.934, "safe": 0.737, "pro": 0.808, "exp": 0.832, "n": 809, "nOq": 499, "nMcq": 310, "zero": 8, "family": "DeepSeek", "hf": null}, {"rank": 23, "name": "GPT-OSS 120B", "cov": "全量", "total": 0.81, "oq": 0.723, "mcq": 0.952, "DA": 0.827, "PG": 0.723, "QA": 0.878, "ss": 1.0, "ms": 0.924, "safe": 0.672, "pro": 0.769, "exp": 0.799, "n": 809, "nOq": 499, "nMcq": 310, "zero": 10, "family": "GPT", "hf": "openai/gpt-oss-120b"}, {"rank": 24, "name": "Qwen3 235B-A22B", "cov": "全量", "total": 0.78, "oq": 0.672, "mcq": 0.955, "DA": 0.81, "PG": 0.686, "QA": 0.84, "ss": 1.0, "ms": 0.929, "safe": 0.59, "pro": 0.721, "exp": 0.769, "n": 809, "nOq": 499, "nMcq": 310, "zero": 10, "family": "Qwen", "hf": "Qwen/Qwen3-235B-A22B"}, {"rank": 25, "name": "Qwen3 32B", "cov": "全量", "total": 0.734, "oq": 0.595, "mcq": 0.958, "DA": 0.77, "PG": 0.636, "QA": 0.79, "ss": 1.0, "ms": 0.934, "safe": 0.516, "pro": 0.636, "exp": 0.711, "n": 809, "nOq": 499, "nMcq": 310, "zero": 21, "family": "Qwen", "hf": "Qwen/Qwen3-32B"}],T={"en": {"eyebrow": "Leaderboard · Movement intelligence", "h1a": "MoveBench", "h1b": "Sports Science LLM Leaderboard", "lead": "A unified framework of expertise, safety and experience, measuring what large language models can and cannot do across three real coaching scenarios: workout data analysis, personalized training plans and expert knowledge QA.", "st1": "models evaluated", "st2": "questions · 499 open-ended + 310 multiple-choice", "st3": "scenarios · DA / PG / QA", "st4": "evaluation layers · safety / expertise / experience", "t_overall": "Overall", "t_scene": "Scenarios", "t_cap": "Capability", "t_type": "Question type", "t_prog": "Progress", "t_about": "About", "h_overall": "Overall leaderboard", "s_overall": "Full 809-question evaluation, scores out of 100. Click a column header to sort.", "search": "Search models", "allfam": "All families", "g_fmt": "Format", "g_sc": "Scenario", "g_layer": "Layer", "c_rank": "#", "c_name": "Model", "c_total": "Overall", "c_oq": "OQ", "c_mcq": "MCQ", "c_ss": "SS", "c_safe": "Safety", "c_pro": "Expertise", "c_exp": "Experience", "c_zero": "Zeroed", "n_overall": "OQ = open-ended, MCQ = multiple-choice, SS = single-select; Zeroed = open-ended answers scored 0 for a safety red-line violation. † GPT-6 answered 808 questions (one multiple-choice question missing). ‡ DeepSeek V3.2 / V3 combines V3.2 on open-ended and V3 on multiple-choice questions. Overall scores are taken from the source table, not recomputed from sub-scores. Bars in the Overall column run from 70 to 100 to make the gaps visible. Models marked <span class=\"hfb\">HF</span> link to their Hugging Face model page.", "empty": "No matching models", "h_scene": "Scenario leaderboards", "s_scene": "Each scenario ranked separately. Personalized training plans (PG) are the lowest-scoring scenario for nearly every model.", "DA_t": "Workout data analysis", "DA_d": "Data understanding, metric interpretation and action advice", "PG_t": "Personalized training plans", "PG_d": "Goal fit, course selection and plan structure", "QA_t": "Expert knowledge QA", "QA_d": "Knowledge accuracy, applicability and clarity", "top": "Top", "h_cap": "Capability leaderboard", "s_cap": "Safety, expertise and experience layers side by side.", "so_total": "Sort by overall", "so_safe": "Sort by safety", "so_pro": "Sort by expertise", "so_exp": "Sort by experience", "so_ms": "Sort by multi-select", "so_oq": "Sort by open-ended", "l_safe": "Safety", "l_pro": "Expertise", "l_exp": "Experience", "l_ss": "Single-select", "l_ms": "Multi-select", "l_oq": "Open-ended", "h_type": "Question-type leaderboard", "s_type": "Single-select, multi-select and open-ended side by side. Every model scores 100 on single-select, so open-ended questions do most of the separating.", "h_prog": "Progress leaderboard", "s_prog": "Change in overall score between two versions in the same model family. This is a score difference between versions, not a rate over time, and is not attributable to the version upgrade alone.", "n_prog": "For Qwen, only Max → Max is linked. 32B, 27B, 35B-A3B, 235B-A22B and 397B-A17B differ in size or architecture and are not treated as an upgrade chain.", "rankN": "Gain #", "pts": "pts", "safeL": "Safety", "h_about": "About the evaluation", "s_about": "Framework, scoring and data notes.", "a_fw": "Framework", "p_safe": "Safety", "p_pro": "Expertise", "p_exp": "Experience", "a_fw_l": "<li><b>DA · Workout data analysis</b>: data understanding, metric interpretation and action advice</li><li><b>PG · Personalized training plans</b>: goal fit, course selection and plan structure</li><li><b>QA · Expert knowledge QA</b>: knowledge accuracy, applicability and clarity</li>", "a_sc": "Scoring", "a_sc_l": "<li>Open-ended answers are graded against expert-written, per-question rubrics by a three-judge weighted LLM panel.</li><li>Single- and multi-select questions are scored by exact match against the gold answer.</li><li>An open-ended answer that violates a safety red line scores 0. The \"Zeroed\" column counts these for each model.</li>", "a_dn": "Data notes", "a_dn_l": "<li>Scores are the source scores × 100, rounded to one decimal.</li><li>This page reports the full 809-question evaluation. Scores on the 80-question public subset are on the <a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">dataset page</a>; the two are not interchangeable.</li><li>Model names follow the source table.</li>", "a_sub": "Get your model listed", "a_sub_l": "<li>Download the <a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">dataset</a> and generate answers with your model.</li><li>Submit the answer file following the <a href=\"https://github.com/Keep-Tech/MoveBench/blob/main/docs/SUBMISSION.md\">submission guide</a>. Maintainers score and review submissions before updating the leaderboard.</li><li>Cite the <a href=\"https://arxiv.org/abs/2610.26185\">MoveBench paper</a> (arXiv 2610.26185).</li>", "foot": "MoveBench Team × Capital University of Physical Education and Sports · Dataset and documentation licensed under CC BY 4.0"}, "zh": {"eyebrow": "Leaderboard · Movement intelligence", "h1a": "MoveBench", "h1b": "运动科学大模型榜单", "lead": "以专业、安全、体验为统一评价框架,在运动数据解读、个性化课程方案、专业知识问答三个真实服务场景中衡量大模型的能力与边界。", "st1": "参评模型", "st2": "评测题 · 499 道开放题 + 310 道选择题", "st3": "业务主题 · DA / PG / QA", "st4": "评价层面 · 安全 / 专业 / 体验", "t_overall": "总榜", "t_scene": "主题榜", "t_cap": "能力榜", "t_type": "题型榜", "t_prog": "进步榜", "t_about": "说明", "h_overall": "总榜", "s_overall": "809 题全量评测,分数为百分制。点击表头排序。", "search": "搜索模型", "allfam": "全部系列", "g_fmt": "题型", "g_sc": "主题", "g_layer": "评价层面", "c_rank": "#", "c_name": "模型", "c_total": "总分", "c_oq": "开放题", "c_mcq": "选择题", "c_ss": "单选", "c_safe": "安全", "c_pro": "专业", "c_exp": "体验", "c_zero": "红线置零", "n_overall": "OQ = open-ended, MCQ = multiple-choice, SS = single-select; Zeroed = open-ended answers scored 0 for a safety red-line violation. † GPT-6 为 808 题(少 1 道选择题)。‡ DeepSeek V3.2 / V3:开放题用 V3.2、选择题用 V3 的混合结果。总分沿用原表,不由分项均值重算。总分列的进度条从 70 分起算,便于看出差距。带 <span class=\"hfb\">HF</span> 标记的模型可跳转到其 Hugging Face 模型页。", "empty": "没有匹配的模型", "h_scene": "主题榜", "s_scene": "三个业务场景各自排名。几乎所有模型都在 PG 个性化课程方案上得分最低。", "DA_t": "运动数据解读", "DA_d": "数据理解、指标解释与行动建议", "PG_t": "个性化课程方案", "PG_d": "目标适配、课程选择与方案编排", "QA_t": "专业知识问答", "QA_d": "知识准确、适用条件与表达质量", "top": "最高", "h_cap": "能力榜", "s_cap": "安全层、专业层、体验层并排对照。", "so_total": "按总分排序", "so_safe": "按安全层排序", "so_pro": "按专业层排序", "so_exp": "按体验层排序", "so_ms": "按多选排序", "so_oq": "按开放问答排序", "l_safe": "安全层", "l_pro": "专业层", "l_exp": "体验层", "l_ss": "单选", "l_ms": "多选", "l_oq": "开放问答", "h_type": "题型榜", "s_type": "单选、多选、开放问答并排对照。单选题全部满分,区分度主要来自开放问答。", "h_prog": "进步榜", "s_prog": "同系列两个版本之间的总分变化。这里的“进步”指版本间分数差,不代表时间速度,也不能单独归因于版本升级。", "n_prog": "Qwen 系列只连接 Max → Max;32B、27B、35B-A3B、235B-A22B、397B-A17B 属于不同规模或架构,不作为连续升级链。", "rankN": "增幅第 ", "pts": "分", "safeL": "安全", "h_about": "评测说明", "s_about": "评价框架、评分方式与数据口径。", "a_fw": "评价框架", "p_safe": "安全", "p_pro": "专业", "p_exp": "体验", "a_fw_l": "<li><b>DA 运动数据解读</b>:数据理解、指标解释与行动建议</li><li><b>PG 个性化课程方案</b>:目标适配、课程选择与方案编排</li><li><b>QA 专业知识问答</b>:知识准确、适用条件与表达质量</li>", "a_sc": "评分方式", "a_sc_l": "<li>开放题由三个 LLM judge 组成的加权评审团,依据专家编写的逐题 rubric 评分。</li><li>选择题(单选、多选)按标准答案精确匹配评分。</li><li>触犯安全红线的开放题记 0 分;总榜“红线置零”列为每个模型被置零的题数。</li>", "a_dn": "数据口径", "a_dn_l": "<li>分数为原表分数 × 100,保留 1 位小数。</li><li>本页为 809 题全量评测结果。公开的 80 题子集成绩见<a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">数据集页</a>,两者不可混用。</li><li>模型名称沿用原表写法。</li>", "a_sub": "参与评测", "a_sub_l": "<li>下载<a href=\"https://huggingface.co/datasets/KeepaceAI/MoveBench\">数据集</a>,用你的模型生成答案。</li><li>按<a href=\"https://github.com/Keep-Tech/MoveBench/blob/main/docs/SUBMISSION.md\">提交指南</a>提交答案文件,维护方评分审核后更新榜单。</li><li>引用:<a href=\"https://arxiv.org/abs/2610.26185\">MoveBench 论文</a>(arXiv 2610.26185)。</li>", "foot": "MoveBench Team × 首都体育学院 · 数据集与文档采用 CC BY 4.0 许可"}};
|
| 127 |
-
let L='en';try{const s=localStorage.getItem('mb-lang');if(s==='zh'||s==='en')L=s;}catch(e){}
|
| 128 |
-
const t=k=>T[L][k];
|
| 129 |
-
const f=v=>(v*100).toFixed(1);
|
| 130 |
-
const esc=s=>String(s).replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c]));
|
| 131 |
-
const flag=m=>m.name==='GPT-6'?'†':m.name.startsWith('DeepSeek V3')?'‡':'';
|
| 132 |
-
const S=['var(--s1)','var(--s2)','var(--s3)'];
|
| 133 |
-
const $=id=>document.getElementById(id);
|
| 134 |
-
document.querySelectorAll('.tab').forEach(b=>b.onclick=()=>{document.querySelectorAll('.tab').forEach(x=>x.setAttribute('aria-selected',x===b));document.querySelectorAll('.panel').forEach(p=>p.classList.toggle('on',p.id==='p-'+b.dataset.t));try{history.replaceState(null,'','#'+b.dataset.t)}catch(e){}});
|
| 135 |
-
const fromHash=()=>{const h=location.hash.slice(1);const b=h&&document.querySelector(`.tab[data-t="${h}"]`);if(b)b.click();};fromHash();addEventListener('hashchange',fromHash);
|
| 136 |
-
const COLS=['rank','name','total','oq','mcq','ss','DA','PG','QA','safe','pro','exp','zero'];
|
| 137 |
-
const CL={rank:'c_rank',name:'c_name',total:'c_total',oq:'c_oq',mcq:'c_mcq',ss:'c_ss',safe:'c_safe',pro:'c_pro',exp:'c_exp',zero:'c_zero'};
|
| 138 |
-
let sk='total',sd=true;
|
| 139 |
-
const fams=[...new Set(M.map(m=>m.family))];
|
| 140 |
-
function rankOf(rows,k){let prev=null,r=0;return rows.map((m,i)=>{if(prev===null||Math.abs(m[k]-prev)>1e-9)r=i+1;prev=m[k];return r;});}
|
| 141 |
-
function renderTable(){
|
| 142 |
-
$('hdr').innerHTML=COLS.map(k=>`<th class="${k==='rank'||k==='name'?'l':''} ${k===sk?'act':''}" data-k="${k}" aria-sort="${k===sk?(sd?'descending':'ascending'):'none'}">${CL[k]?t(CL[k]):k}${k===sk?` <span class="ar">${sd?'↓':'↑'}</span>`:''}</th>`).join('');
|
| 143 |
-
document.querySelectorAll('#hdr th').forEach(th=>th.onclick=()=>{const k=th.dataset.k;if(k===sk)sd=!sd;else{sk=k;sd=!(k==='rank'||k==='name'||k==='zero');}renderTable();});
|
| 144 |
-
const q=$('q').value.toLowerCase().trim(),fa=$('fam').value;
|
| 145 |
-
let rows=M.filter(m=>(fa==='all'||m.family===fa)&&(m.name+' '+m.family).toLowerCase().includes(q));
|
| 146 |
-
const k=sk==='rank'?'total':sk;
|
| 147 |
-
rows.sort((a,b)=>{if(k==='name')return sd?b.name.localeCompare(a.name):a.name.localeCompare(b.name);return (sd?b[k]-a[k]:a[k]-b[k])||a.rank-b.rank;});
|
| 148 |
-
if(sk==='rank'&&!sd)rows.reverse();
|
| 149 |
-
document.querySelector('#tbl tbody').innerHTML=rows.length?rows.map(m=>`<tr class="r${m.rank}">
|
| 150 |
-
<td class="l"><span class="rk">${m.rank}</span></td>
|
| 151 |
-
<td class="l"><span class="mname">${esc(m.name)}${flag(m)}</span>${m.hf?`<a class="hfb" href="https://huggingface.co/${m.hf}" title="${m.hf}">HF</a>`:''}<span class="fam">${esc(m.family)}</span></td>
|
| 152 |
-
<td><div class="tot"><b>${f(m.total)}</b><div class="mini" title="70–100"><i style="width:${Math.max(0,Math.min(100,(m.total*100-70)/30*100))}%"></i></div></div></td>
|
| 153 |
-
<td>${f(m.oq)}</td><td>${f(m.mcq)}</td><td>${f(m.ss)}</td><td>${f(m.DA)}</td><td>${f(m.PG)}</td><td>${f(m.QA)}</td><td>${f(m.safe)}</td><td>${f(m.pro)}</td><td>${f(m.exp)}</td><td>${m.zero}</td></tr>`).join(''):`<tr><td colspan="13" class="l">${t('empty')}</td></tr>`;
|
| 154 |
-
}
|
| 155 |
-
function renderScenes(){
|
| 156 |
-
const SC=[['DA','var(--g1)'],['PG','var(--g3)'],['QA','var(--g5)']];
|
| 157 |
-
$('scenes').innerHTML=SC.map(([k,c])=>{const rows=[...M].sort((a,b)=>b[k]-a[k]||a.rank-b.rank);const rk=rankOf(rows,k);return `<div class="card sc"><h3>${k} · ${t(k+'_t')}</h3><div class="d">${t(k+'_d')} · ${t('top')} ${f(rows[0][k])}</div><div class="bars">${rows.map((m,i)=>`<div class="bar" title="${esc(m.name)} · ${k} ${f(m[k])}"><span class="n">${rk[i]}</span><span class="nm2">${esc(m.name)}${flag(m)}</span><div class="t"><i style="width:${m[k]*100}%;background:${c}"></i></div><span class="v">${f(m[k])}</span></div>`).join('')}</div></div>`}).join('');
|
| 158 |
-
}
|
| 159 |
-
function grouped(el,leg,keys,sortKey){
|
| 160 |
-
const labels=keys.map(k=>t('l_'+k));
|
| 161 |
-
$(leg).innerHTML=labels.map((l,i)=>`<span><i style="background:${S[i]}"></i>${l}</span>`).join('');
|
| 162 |
-
const rows=[...M].sort((a,b)=>b[sortKey]-a[sortKey]||a.rank-b.rank);
|
| 163 |
-
$(el).innerHTML=rows.map(m=>`<div class="nm" title="${esc(m.name)}">${esc(m.name)}${flag(m)}</div><div class="rows">${keys.map((k,i)=>`<div class="rr" title="${esc(m.name)} · ${labels[i]} ${f(m[k])}"><div class="tr"><i style="width:${m[k]*100}%;background:${S[i]}"></i></div><b>${f(m[k])}</b></div>`).join('')}</div>`).join('');
|
| 164 |
-
}
|
| 165 |
-
const rc=()=>grouped('capChart','capLeg',['safe','pro','exp'],$('capSort').value);
|
| 166 |
-
const rt=()=>grouped('typeChart','typeLeg',['ss','ms','oq'],$('typeSort').value);
|
| 167 |
-
function renderProg(){
|
| 168 |
-
const P=[['GLM','GLM-4.7','GLM-5.3'],['Qwen Max','Qwen3 Max','Qwen3.8 Max'],['Claude Opus','Claude Opus 4.6','Claude Opus 5.5']].map(([fa,a,b])=>{const A=M.find(m=>m.name===a),B=M.find(m=>m.name===b);return {fa,A,B,d:(B.total-A.total)*100,rel:(B.total/A.total-1)*100};}).sort((x,y)=>y.d-x.d);
|
| 169 |
-
$('progCards').innerHTML=P.map((p,i)=>`<div class="card pc"><div class="fam2">${p.fa} · ${t('rankN')}${i+1}</div><div class="dl" style="color:${['var(--g1)','var(--g2)','var(--g3)'][i]}">+${p.d.toFixed(1)}<small>${t('pts')} · +${p.rel.toFixed(1)}%</small></div><div class="pair"><div>${esc(p.A.name)}<b>${f(p.A.total)}</b></div><span class="arrow">→</span><div>${esc(p.B.name)}<b>${f(p.B.total)}</b></div></div><p>${t('safeL')} ${f(p.A.safe)} → ${f(p.B.safe)} · PG ${f(p.A.PG)} → ${f(p.B.PG)}</p></div>`).join('');
|
| 170 |
-
}
|
| 171 |
-
function applyLang(){
|
| 172 |
-
document.documentElement.lang=L==='zh'?'zh-CN':'en';
|
| 173 |
-
document.querySelectorAll('[data-i18n]').forEach(e=>e.textContent=t(e.dataset.i18n));
|
| 174 |
-
document.querySelectorAll('[data-i18n-html]').forEach(e=>e.innerHTML=t(e.dataset.i18nHtml));
|
| 175 |
-
document.querySelectorAll('.lang button').forEach(b=>b.setAttribute('aria-pressed',b.dataset.lang===L));
|
| 176 |
-
$('q').placeholder=t('search');$('q').setAttribute('aria-label',t('search'));
|
| 177 |
-
const fv=$('fam').value||'all';$('fam').innerHTML=`<option value="all">${t('allfam')}</option>`+fams.map(x=>`<option>${esc(x)}</option>`).join('');$('fam').value=fv;
|
| 178 |
-
renderTable();renderScenes();rc();rt();renderProg();
|
| 179 |
-
}
|
| 180 |
-
document.querySelectorAll('.lang button').forEach(b=>b.onclick=()=>{L=b.dataset.lang;try{localStorage.setItem('mb-lang',L)}catch(e){}applyLang();});
|
| 181 |
-
$('q').oninput=renderTable;$('fam').onchange=renderTable;$('capSort').onchange=rc;$('typeSort').onchange=rt;
|
| 182 |
-
applyLang();
|
| 183 |
-
</script></body></html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
<title>MoveBench Leaderboard</title>
|
|
|
|
| 7 |
<style>
|
| 8 |
+
:root{--bg:#070708;--panel:#111116;--line:#26262f;--ink:#ececf1;--muted:#9a9ba6;--accent:#8ff0b0;--g1:#5fe39a;--g2:#c7e24b;--g3:#f6a43a;--g4:#f45b8a;--g5:#e85cc8;color-scheme:dark}
|
|
|
|
|
|
|
| 9 |
*{box-sizing:border-box}
|
| 10 |
+
html,body{height:100%}
|
| 11 |
+
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.6 system-ui,-apple-system,"PingFang SC","Noto Sans SC",sans-serif;display:grid;place-items:center;padding:24px 16px}
|
| 12 |
+
.card{max-width:560px;width:100%;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:32px 28px;display:grid;gap:14px}
|
| 13 |
+
.bar{height:4px;border-radius:2px;background:linear-gradient(90deg,var(--g1),var(--g2),var(--g3),var(--g4),var(--g5))}
|
| 14 |
+
.eyebrow{font:500 12px ui-monospace,Menlo,monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
|
| 15 |
+
h1{margin:0;font-size:26px;line-height:1.2}
|
| 16 |
+
p{margin:0;color:var(--muted)}
|
| 17 |
+
.zh{border-top:1px solid var(--line);padding-top:14px}
|
| 18 |
+
a{color:var(--accent)}
|
| 19 |
+
</style>
|
| 20 |
+
</head>
|
| 21 |
+
<body>
|
| 22 |
+
<main class="card">
|
| 23 |
+
<div class="bar"></div>
|
| 24 |
+
<div class="eyebrow">MoveBench Leaderboard</div>
|
| 25 |
+
<h1>We're updating the leaderboard</h1>
|
| 26 |
+
<p>The full-benchmark results are temporarily offline while we update them. They will be back soon.</p>
|
| 27 |
+
<p>The public 80-question release and its leaderboard are still on the <a href="https://huggingface.co/datasets/KeepaceAI/MoveBench">MoveBench dataset page</a>.</p>
|
| 28 |
+
<p class="zh">榜单正在更新,全量结果暂时下线,稍后恢复。80 题公开版本及其榜单请见 <a href="https://huggingface.co/datasets/KeepaceAI/MoveBench">MoveBench 数据集页面</a>。</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
</main>
|
| 30 |
+
</body>
|
| 31 |
+
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|