nmarshall commited on
Commit
69d6bf3
·
1 Parent(s): 6a55e9b

gameplay: port exit class guard

Browse files
crates/urt-gameplay/src/bin/urt-lifecycle.rs CHANGED
@@ -79,6 +79,20 @@ fn scoreboard_clients(
79
  }
80
  Ok((clients, names))
81
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  fn main() {
83
  if let Err(e) = run() {
84
  eprintln!("{e}");
@@ -394,6 +408,16 @@ fn run() -> Result<(), String> {
394
  second.cached_ping as u32
395
  );
396
  }
 
 
 
 
 
 
 
 
 
 
397
  "qvm-float" if w.len() == 3 => {
398
  let precision = if (w[2] as i32) < 0 {
399
  None
 
79
  }
80
  Ok((clients, names))
81
  }
82
+ fn exit_client(v: &[u32]) -> urt_gameplay::exit_rules::Client {
83
+ urt_gameplay::exit_rules::Client {
84
+ connection: v[0] as i32,
85
+ team: v[1] as i32,
86
+ class: v[2] as i32,
87
+ id: v[3] as i32,
88
+ score: v[4] as i32,
89
+ field304: v[5] as i32,
90
+ field308: v[6] as i32,
91
+ packed: v[7],
92
+ field3692: v[8] as i32,
93
+ field3700: v[9] as i32,
94
+ }
95
+ }
96
  fn main() {
97
  if let Err(e) = run() {
98
  eprintln!("{e}");
 
408
  second.cached_ping as u32
409
  );
410
  }
411
+ "exit-class" if w.len() >= 3 && w[2] <= 64 => {
412
+ let n = w[2] as usize;
413
+ if w.len() != 3 + 10 * n {
414
+ return Err("invalid exit clients".into());
415
+ }
416
+ let clients: Vec<_> = w[3..].chunks_exact(10).map(exit_client).collect();
417
+ let p = urt_gameplay::exit_rules::class_guard(w[0] as i32, &clients, w[1] as usize)
418
+ .map_err(|e| format!("unsupported input: {e:?}"))?;
419
+ println!("{{\"offender\":{}}}", p.map(|i| i as i32).unwrap_or(-1));
420
+ }
421
  "qvm-float" if w.len() == 3 => {
422
  let precision = if (w[2] as i32) < 0 {
423
  None
crates/urt-gameplay/src/exit_rules.rs ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //! Finite7805 policy contracts. Transition/format/send/world effects are separate.
2
+ #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
3
+ pub struct Client {
4
+ pub connection: i32,
5
+ pub team: i32,
6
+ pub class: i32,
7
+ pub id: i32,
8
+ pub score: i32,
9
+ pub field304: i32,
10
+ pub field308: i32,
11
+ pub packed: u32,
12
+ pub field3692: i32,
13
+ pub field3700: i32,
14
+ }
15
+ #[derive(Clone, Copy, Debug, PartialEq, Eq)]
16
+ pub enum Error {
17
+ InvalidScan,
18
+ InvalidEntity,
19
+ }
20
+ fn scan(clients: &[Client], count: usize) -> Result<&[Client], Error> {
21
+ if clients.len() > 64 || count > clients.len() {
22
+ return Err(Error::InvalidScan);
23
+ }
24
+ Ok(&clients[..count])
25
+ }
26
+ /// Mode11 first offending state2/team0 record, scanning configured max slots.
27
+ pub fn class_guard(
28
+ mode: i32,
29
+ clients: &[Client],
30
+ max_clients: usize,
31
+ ) -> Result<Option<usize>, Error> {
32
+ let clients = scan(clients, max_clients)?;
33
+ if mode != 11 {
34
+ return Ok(None);
35
+ }
36
+ Ok(clients
37
+ .iter()
38
+ .position(|c| c.connection == 2 && c.team == 0 && c.class > 20))
39
+ }
40
+ #[cfg(test)]
41
+ mod tests {
42
+ use super::*;
43
+ #[test]
44
+ fn first_offender_and_count_limit() {
45
+ let mut c = [Client::default(); 64];
46
+ c[31] = Client {
47
+ connection: 2,
48
+ class: 21,
49
+ ..Client::default()
50
+ };
51
+ c[63] = c[31];
52
+ assert_eq!(class_guard(11, &c, 64).unwrap(), Some(31));
53
+ assert_eq!(class_guard(11, &c, 31).unwrap(), None);
54
+ assert_eq!(class_guard(9, &c, 64).unwrap(), None);
55
+ }
56
+ #[test]
57
+ fn signed_class_connection_team_and_safe_scan() {
58
+ let c = [
59
+ Client {
60
+ connection: 2,
61
+ class: -1,
62
+ ..Client::default()
63
+ },
64
+ Client {
65
+ connection: 1,
66
+ class: 99,
67
+ ..Client::default()
68
+ },
69
+ Client {
70
+ connection: 2,
71
+ team: 3,
72
+ class: 99,
73
+ ..Client::default()
74
+ },
75
+ ];
76
+ assert_eq!(class_guard(11, &c, 3).unwrap(), None);
77
+ assert_eq!(class_guard(11, &c, 4), Err(Error::InvalidScan));
78
+ }
79
+ }
crates/urt-gameplay/src/lib.rs CHANGED
@@ -169,3 +169,5 @@ pub mod scoreboard_wire;
169
  pub mod qvm_format;
170
 
171
  pub mod exit_prefix;
 
 
 
169
  pub mod qvm_format;
170
 
171
  pub mod exit_prefix;
172
+
173
+ pub mod exit_rules;
docs/FINDINGS.md CHANGED
@@ -1478,3 +1478,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1478
 
1479
 
1480
  **RE-826:** Mode11 exits on the first state2/team0 client whose signed class exceeds20, using the configured max-client count rather than the collected client count. [Evidence](research/QVM_EXIT_CLASS.md).
 
 
 
 
1478
 
1479
 
1480
  **RE-826:** Mode11 exits on the first state2/team0 client whose signed class exceeds20, using the configured max-client count rather than the collected client count. [Evidence](research/QVM_EXIT_CLASS.md).
1481
+
1482
+
1483
+ **RE-827:** Rust reproduces the original first-offender mode11 guard and keeps the configured scan bound explicit and safe. [Evidence](research/RUST_EXIT_CLASS.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1491,3 +1491,6 @@ RE-825: Rust now reproduces original37498 fractional truncation and integer-only
1491
 
1492
 
1493
  RE-826: Mode11 exits on the first state2/team0 client whose signed class exceeds20, using the configured max-client count rather than the collected client count. Full runtime completion remains open. [Evidence](research/QVM_EXIT_CLASS.md).
 
 
 
 
1491
 
1492
 
1493
  RE-826: Mode11 exits on the first state2/team0 client whose signed class exceeds20, using the configured max-client count rather than the collected client count. Full runtime completion remains open. [Evidence](research/QVM_EXIT_CLASS.md).
1494
+
1495
+
1496
+ RE-827: Rust reproduces the original first-offender mode11 guard and keeps the configured scan bound explicit and safe. Full runtime completion remains open. [Evidence](research/RUST_EXIT_CLASS.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -1800,3 +1800,8 @@ Rust now reproduces original37498 fractional truncation and integer-only width p
1800
  ## 2026-10-27 — RE-826 Original exit-rule mode11 class guard and scan bound
1801
 
1802
  Mode11 exits on the first state2/team0 client whose signed class exceeds20, using the configured max-client count rather than the collected client count. Focused `cargo xtask test-group exit-class` passes (5 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
 
 
 
 
 
 
1800
  ## 2026-10-27 — RE-826 Original exit-rule mode11 class guard and scan bound
1801
 
1802
  Mode11 exits on the first state2/team0 client whose signed class exceeds20, using the configured max-client count rather than the collected client count. Focused `cargo xtask test-group exit-class` passes (5 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
1803
+
1804
+
1805
+ ## 2026-10-27 — RE-827 Rust exit-rule class guard with bounded configured scanning
1806
+
1807
+ Rust reproduces the original first-offender mode11 guard and keeps the configured scan bound explicit and safe. Focused `cargo xtask test-group rust-exit-class` passes (9 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1528,3 +1528,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1528
 
1529
 
1530
  - [x] RE-826 Original exit-rule mode11 class guard and scan bound ([evidence](research/QVM_EXIT_CLASS.md)).
 
 
 
 
1528
 
1529
 
1530
  - [x] RE-826 Original exit-rule mode11 class guard and scan bound ([evidence](research/QVM_EXIT_CLASS.md)).
1531
+
1532
+
1533
+ - [x] RE-827 Rust exit-rule class guard with bounded configured scanning ([evidence](research/RUST_EXIT_CLASS.md)).
docs/research/README.md CHANGED
@@ -1068,3 +1068,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1068
 
1069
 
1070
  [RE-826: Original exit-rule mode11 class guard and scan bound](QVM_EXIT_CLASS.md).
 
 
 
 
1068
 
1069
 
1070
  [RE-826: Original exit-rule mode11 class guard and scan bound](QVM_EXIT_CLASS.md).
1071
+
1072
+
1073
+ [RE-827: Rust exit-rule class guard with bounded configured scanning](RUST_EXIT_CLASS.md).
docs/research/RUST_EXIT_CLASS.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Rust exit-rule class guard with bounded configured scanning
2
+
3
+ RE-827. Reproduce with `python3 scripts/analyze_rust_exit_class.py`; focused validation: `cargo xtask test-group rust-exit-class`. [Machine report](rust-exit-class.json).
4
+
5
+ 45 source fixtures verify exact offender selection, raw signed class behavior and mode/state/team gates. Unit tests cover64-slot ordering, truncation and invalid safe-slice bounds. The API returns an offender intention without formatting, sending or transition effects.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/rust-exit-class.json ADDED
@@ -0,0 +1,1740 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Rust first-offender mode11 guard over45 original source fixtures. Safe configured count<=slice length<=64; no raw invalid-pointer ABI or transition/native side-effect claim.",
3
+ "probes": [
4
+ {
5
+ "input": {
6
+ "clients": [
7
+ {
8
+ "3096": 0,
9
+ "468": 0,
10
+ "696": -1
11
+ }
12
+ ],
13
+ "max_clients": 1,
14
+ "mode": 11
15
+ },
16
+ "rust": {
17
+ "offender": -1
18
+ },
19
+ "source": {
20
+ "offender": -1
21
+ },
22
+ "source_calls": []
23
+ },
24
+ {
25
+ "input": {
26
+ "clients": [
27
+ {
28
+ "3096": 0,
29
+ "468": 0,
30
+ "696": 20
31
+ }
32
+ ],
33
+ "max_clients": 1,
34
+ "mode": 11
35
+ },
36
+ "rust": {
37
+ "offender": -1
38
+ },
39
+ "source": {
40
+ "offender": -1
41
+ },
42
+ "source_calls": []
43
+ },
44
+ {
45
+ "input": {
46
+ "clients": [
47
+ {
48
+ "3096": 0,
49
+ "468": 0,
50
+ "696": 21
51
+ }
52
+ ],
53
+ "max_clients": 1,
54
+ "mode": 11
55
+ },
56
+ "rust": {
57
+ "offender": -1
58
+ },
59
+ "source": {
60
+ "offender": -1
61
+ },
62
+ "source_calls": []
63
+ },
64
+ {
65
+ "input": {
66
+ "clients": [
67
+ {
68
+ "3096": 0,
69
+ "468": 0,
70
+ "696": 2147483647
71
+ }
72
+ ],
73
+ "max_clients": 1,
74
+ "mode": 11
75
+ },
76
+ "rust": {
77
+ "offender": -1
78
+ },
79
+ "source": {
80
+ "offender": -1
81
+ },
82
+ "source_calls": []
83
+ },
84
+ {
85
+ "input": {
86
+ "clients": [
87
+ {
88
+ "3096": 1,
89
+ "468": 0,
90
+ "696": -1
91
+ }
92
+ ],
93
+ "max_clients": 1,
94
+ "mode": 11
95
+ },
96
+ "rust": {
97
+ "offender": -1
98
+ },
99
+ "source": {
100
+ "offender": -1
101
+ },
102
+ "source_calls": []
103
+ },
104
+ {
105
+ "input": {
106
+ "clients": [
107
+ {
108
+ "3096": 1,
109
+ "468": 0,
110
+ "696": 20
111
+ }
112
+ ],
113
+ "max_clients": 1,
114
+ "mode": 11
115
+ },
116
+ "rust": {
117
+ "offender": -1
118
+ },
119
+ "source": {
120
+ "offender": -1
121
+ },
122
+ "source_calls": []
123
+ },
124
+ {
125
+ "input": {
126
+ "clients": [
127
+ {
128
+ "3096": 1,
129
+ "468": 0,
130
+ "696": 21
131
+ }
132
+ ],
133
+ "max_clients": 1,
134
+ "mode": 11
135
+ },
136
+ "rust": {
137
+ "offender": -1
138
+ },
139
+ "source": {
140
+ "offender": -1
141
+ },
142
+ "source_calls": []
143
+ },
144
+ {
145
+ "input": {
146
+ "clients": [
147
+ {
148
+ "3096": 1,
149
+ "468": 0,
150
+ "696": 2147483647
151
+ }
152
+ ],
153
+ "max_clients": 1,
154
+ "mode": 11
155
+ },
156
+ "rust": {
157
+ "offender": -1
158
+ },
159
+ "source": {
160
+ "offender": -1
161
+ },
162
+ "source_calls": []
163
+ },
164
+ {
165
+ "input": {
166
+ "clients": [
167
+ {
168
+ "3096": 3,
169
+ "468": 0,
170
+ "696": -1
171
+ }
172
+ ],
173
+ "max_clients": 1,
174
+ "mode": 11
175
+ },
176
+ "rust": {
177
+ "offender": -1
178
+ },
179
+ "source": {
180
+ "offender": -1
181
+ },
182
+ "source_calls": []
183
+ },
184
+ {
185
+ "input": {
186
+ "clients": [
187
+ {
188
+ "3096": 3,
189
+ "468": 0,
190
+ "696": 20
191
+ }
192
+ ],
193
+ "max_clients": 1,
194
+ "mode": 11
195
+ },
196
+ "rust": {
197
+ "offender": -1
198
+ },
199
+ "source": {
200
+ "offender": -1
201
+ },
202
+ "source_calls": []
203
+ },
204
+ {
205
+ "input": {
206
+ "clients": [
207
+ {
208
+ "3096": 3,
209
+ "468": 0,
210
+ "696": 21
211
+ }
212
+ ],
213
+ "max_clients": 1,
214
+ "mode": 11
215
+ },
216
+ "rust": {
217
+ "offender": -1
218
+ },
219
+ "source": {
220
+ "offender": -1
221
+ },
222
+ "source_calls": []
223
+ },
224
+ {
225
+ "input": {
226
+ "clients": [
227
+ {
228
+ "3096": 3,
229
+ "468": 0,
230
+ "696": 2147483647
231
+ }
232
+ ],
233
+ "max_clients": 1,
234
+ "mode": 11
235
+ },
236
+ "rust": {
237
+ "offender": -1
238
+ },
239
+ "source": {
240
+ "offender": -1
241
+ },
242
+ "source_calls": []
243
+ },
244
+ {
245
+ "input": {
246
+ "clients": [
247
+ {
248
+ "3096": 0,
249
+ "468": 1,
250
+ "696": -1
251
+ }
252
+ ],
253
+ "max_clients": 1,
254
+ "mode": 11
255
+ },
256
+ "rust": {
257
+ "offender": -1
258
+ },
259
+ "source": {
260
+ "offender": -1
261
+ },
262
+ "source_calls": []
263
+ },
264
+ {
265
+ "input": {
266
+ "clients": [
267
+ {
268
+ "3096": 0,
269
+ "468": 1,
270
+ "696": 20
271
+ }
272
+ ],
273
+ "max_clients": 1,
274
+ "mode": 11
275
+ },
276
+ "rust": {
277
+ "offender": -1
278
+ },
279
+ "source": {
280
+ "offender": -1
281
+ },
282
+ "source_calls": []
283
+ },
284
+ {
285
+ "input": {
286
+ "clients": [
287
+ {
288
+ "3096": 0,
289
+ "468": 1,
290
+ "696": 21
291
+ }
292
+ ],
293
+ "max_clients": 1,
294
+ "mode": 11
295
+ },
296
+ "rust": {
297
+ "offender": -1
298
+ },
299
+ "source": {
300
+ "offender": -1
301
+ },
302
+ "source_calls": []
303
+ },
304
+ {
305
+ "input": {
306
+ "clients": [
307
+ {
308
+ "3096": 0,
309
+ "468": 1,
310
+ "696": 2147483647
311
+ }
312
+ ],
313
+ "max_clients": 1,
314
+ "mode": 11
315
+ },
316
+ "rust": {
317
+ "offender": -1
318
+ },
319
+ "source": {
320
+ "offender": -1
321
+ },
322
+ "source_calls": []
323
+ },
324
+ {
325
+ "input": {
326
+ "clients": [
327
+ {
328
+ "3096": 1,
329
+ "468": 1,
330
+ "696": -1
331
+ }
332
+ ],
333
+ "max_clients": 1,
334
+ "mode": 11
335
+ },
336
+ "rust": {
337
+ "offender": -1
338
+ },
339
+ "source": {
340
+ "offender": -1
341
+ },
342
+ "source_calls": []
343
+ },
344
+ {
345
+ "input": {
346
+ "clients": [
347
+ {
348
+ "3096": 1,
349
+ "468": 1,
350
+ "696": 20
351
+ }
352
+ ],
353
+ "max_clients": 1,
354
+ "mode": 11
355
+ },
356
+ "rust": {
357
+ "offender": -1
358
+ },
359
+ "source": {
360
+ "offender": -1
361
+ },
362
+ "source_calls": []
363
+ },
364
+ {
365
+ "input": {
366
+ "clients": [
367
+ {
368
+ "3096": 1,
369
+ "468": 1,
370
+ "696": 21
371
+ }
372
+ ],
373
+ "max_clients": 1,
374
+ "mode": 11
375
+ },
376
+ "rust": {
377
+ "offender": -1
378
+ },
379
+ "source": {
380
+ "offender": -1
381
+ },
382
+ "source_calls": []
383
+ },
384
+ {
385
+ "input": {
386
+ "clients": [
387
+ {
388
+ "3096": 1,
389
+ "468": 1,
390
+ "696": 2147483647
391
+ }
392
+ ],
393
+ "max_clients": 1,
394
+ "mode": 11
395
+ },
396
+ "rust": {
397
+ "offender": -1
398
+ },
399
+ "source": {
400
+ "offender": -1
401
+ },
402
+ "source_calls": []
403
+ },
404
+ {
405
+ "input": {
406
+ "clients": [
407
+ {
408
+ "3096": 3,
409
+ "468": 1,
410
+ "696": -1
411
+ }
412
+ ],
413
+ "max_clients": 1,
414
+ "mode": 11
415
+ },
416
+ "rust": {
417
+ "offender": -1
418
+ },
419
+ "source": {
420
+ "offender": -1
421
+ },
422
+ "source_calls": []
423
+ },
424
+ {
425
+ "input": {
426
+ "clients": [
427
+ {
428
+ "3096": 3,
429
+ "468": 1,
430
+ "696": 20
431
+ }
432
+ ],
433
+ "max_clients": 1,
434
+ "mode": 11
435
+ },
436
+ "rust": {
437
+ "offender": -1
438
+ },
439
+ "source": {
440
+ "offender": -1
441
+ },
442
+ "source_calls": []
443
+ },
444
+ {
445
+ "input": {
446
+ "clients": [
447
+ {
448
+ "3096": 3,
449
+ "468": 1,
450
+ "696": 21
451
+ }
452
+ ],
453
+ "max_clients": 1,
454
+ "mode": 11
455
+ },
456
+ "rust": {
457
+ "offender": -1
458
+ },
459
+ "source": {
460
+ "offender": -1
461
+ },
462
+ "source_calls": []
463
+ },
464
+ {
465
+ "input": {
466
+ "clients": [
467
+ {
468
+ "3096": 3,
469
+ "468": 1,
470
+ "696": 2147483647
471
+ }
472
+ ],
473
+ "max_clients": 1,
474
+ "mode": 11
475
+ },
476
+ "rust": {
477
+ "offender": -1
478
+ },
479
+ "source": {
480
+ "offender": -1
481
+ },
482
+ "source_calls": []
483
+ },
484
+ {
485
+ "input": {
486
+ "clients": [
487
+ {
488
+ "3096": 0,
489
+ "468": 2,
490
+ "696": -1
491
+ }
492
+ ],
493
+ "max_clients": 1,
494
+ "mode": 11
495
+ },
496
+ "rust": {
497
+ "offender": -1
498
+ },
499
+ "source": {
500
+ "offender": -1
501
+ },
502
+ "source_calls": []
503
+ },
504
+ {
505
+ "input": {
506
+ "clients": [
507
+ {
508
+ "3096": 0,
509
+ "468": 2,
510
+ "696": 20
511
+ }
512
+ ],
513
+ "max_clients": 1,
514
+ "mode": 11
515
+ },
516
+ "rust": {
517
+ "offender": -1
518
+ },
519
+ "source": {
520
+ "offender": -1
521
+ },
522
+ "source_calls": []
523
+ },
524
+ {
525
+ "input": {
526
+ "clients": [
527
+ {
528
+ "3096": 0,
529
+ "468": 2,
530
+ "696": 21
531
+ }
532
+ ],
533
+ "max_clients": 1,
534
+ "mode": 11
535
+ },
536
+ "rust": {
537
+ "offender": 0
538
+ },
539
+ "source": {
540
+ "offender": 0
541
+ },
542
+ "source_calls": [
543
+ {
544
+ "arguments": {
545
+ "8": 34641
546
+ },
547
+ "target": 7367
548
+ },
549
+ {
550
+ "arguments": {
551
+ "12": 16,
552
+ "16": 0,
553
+ "20": 2067792376,
554
+ "8": 34618
555
+ },
556
+ "target": 70458
557
+ },
558
+ {
559
+ "arguments": {
560
+ "12": 2073042944,
561
+ "8": -1
562
+ },
563
+ "target": -18
564
+ }
565
+ ]
566
+ },
567
+ {
568
+ "input": {
569
+ "clients": [
570
+ {
571
+ "3096": 0,
572
+ "468": 2,
573
+ "696": 2147483647
574
+ }
575
+ ],
576
+ "max_clients": 1,
577
+ "mode": 11
578
+ },
579
+ "rust": {
580
+ "offender": 0
581
+ },
582
+ "source": {
583
+ "offender": 0
584
+ },
585
+ "source_calls": [
586
+ {
587
+ "arguments": {
588
+ "8": 34641
589
+ },
590
+ "target": 7367
591
+ },
592
+ {
593
+ "arguments": {
594
+ "12": 16,
595
+ "16": 0,
596
+ "20": 2067792376,
597
+ "8": 34618
598
+ },
599
+ "target": 70458
600
+ },
601
+ {
602
+ "arguments": {
603
+ "12": 2073042944,
604
+ "8": -1
605
+ },
606
+ "target": -18
607
+ }
608
+ ]
609
+ },
610
+ {
611
+ "input": {
612
+ "clients": [
613
+ {
614
+ "3096": 1,
615
+ "468": 2,
616
+ "696": -1
617
+ }
618
+ ],
619
+ "max_clients": 1,
620
+ "mode": 11
621
+ },
622
+ "rust": {
623
+ "offender": -1
624
+ },
625
+ "source": {
626
+ "offender": -1
627
+ },
628
+ "source_calls": []
629
+ },
630
+ {
631
+ "input": {
632
+ "clients": [
633
+ {
634
+ "3096": 1,
635
+ "468": 2,
636
+ "696": 20
637
+ }
638
+ ],
639
+ "max_clients": 1,
640
+ "mode": 11
641
+ },
642
+ "rust": {
643
+ "offender": -1
644
+ },
645
+ "source": {
646
+ "offender": -1
647
+ },
648
+ "source_calls": []
649
+ },
650
+ {
651
+ "input": {
652
+ "clients": [
653
+ {
654
+ "3096": 1,
655
+ "468": 2,
656
+ "696": 21
657
+ }
658
+ ],
659
+ "max_clients": 1,
660
+ "mode": 11
661
+ },
662
+ "rust": {
663
+ "offender": -1
664
+ },
665
+ "source": {
666
+ "offender": -1
667
+ },
668
+ "source_calls": []
669
+ },
670
+ {
671
+ "input": {
672
+ "clients": [
673
+ {
674
+ "3096": 1,
675
+ "468": 2,
676
+ "696": 2147483647
677
+ }
678
+ ],
679
+ "max_clients": 1,
680
+ "mode": 11
681
+ },
682
+ "rust": {
683
+ "offender": -1
684
+ },
685
+ "source": {
686
+ "offender": -1
687
+ },
688
+ "source_calls": []
689
+ },
690
+ {
691
+ "input": {
692
+ "clients": [
693
+ {
694
+ "3096": 3,
695
+ "468": 2,
696
+ "696": -1
697
+ }
698
+ ],
699
+ "max_clients": 1,
700
+ "mode": 11
701
+ },
702
+ "rust": {
703
+ "offender": -1
704
+ },
705
+ "source": {
706
+ "offender": -1
707
+ },
708
+ "source_calls": []
709
+ },
710
+ {
711
+ "input": {
712
+ "clients": [
713
+ {
714
+ "3096": 3,
715
+ "468": 2,
716
+ "696": 20
717
+ }
718
+ ],
719
+ "max_clients": 1,
720
+ "mode": 11
721
+ },
722
+ "rust": {
723
+ "offender": -1
724
+ },
725
+ "source": {
726
+ "offender": -1
727
+ },
728
+ "source_calls": []
729
+ },
730
+ {
731
+ "input": {
732
+ "clients": [
733
+ {
734
+ "3096": 3,
735
+ "468": 2,
736
+ "696": 21
737
+ }
738
+ ],
739
+ "max_clients": 1,
740
+ "mode": 11
741
+ },
742
+ "rust": {
743
+ "offender": -1
744
+ },
745
+ "source": {
746
+ "offender": -1
747
+ },
748
+ "source_calls": []
749
+ },
750
+ {
751
+ "input": {
752
+ "clients": [
753
+ {
754
+ "3096": 3,
755
+ "468": 2,
756
+ "696": 2147483647
757
+ }
758
+ ],
759
+ "max_clients": 1,
760
+ "mode": 11
761
+ },
762
+ "rust": {
763
+ "offender": -1
764
+ },
765
+ "source": {
766
+ "offender": -1
767
+ },
768
+ "source_calls": []
769
+ },
770
+ {
771
+ "input": {
772
+ "clients": [
773
+ {
774
+ "3096": 0,
775
+ "468": 2,
776
+ "696": 21
777
+ },
778
+ {
779
+ "3096": 0,
780
+ "468": 2,
781
+ "696": 20
782
+ },
783
+ {
784
+ "3096": 0,
785
+ "468": 2,
786
+ "696": 20
787
+ },
788
+ {
789
+ "3096": 0,
790
+ "468": 2,
791
+ "696": 20
792
+ }
793
+ ],
794
+ "max_clients": 4,
795
+ "mode": 11
796
+ },
797
+ "rust": {
798
+ "offender": 0
799
+ },
800
+ "source": {
801
+ "offender": 0
802
+ },
803
+ "source_calls": [
804
+ {
805
+ "arguments": {
806
+ "8": 34641
807
+ },
808
+ "target": 7367
809
+ },
810
+ {
811
+ "arguments": {
812
+ "12": 16,
813
+ "16": 0,
814
+ "20": 2067792376,
815
+ "8": 34618
816
+ },
817
+ "target": 70458
818
+ },
819
+ {
820
+ "arguments": {
821
+ "12": 2073042944,
822
+ "8": -1
823
+ },
824
+ "target": -18
825
+ }
826
+ ]
827
+ },
828
+ {
829
+ "input": {
830
+ "clients": [
831
+ {
832
+ "3096": 0,
833
+ "468": 2,
834
+ "696": 20
835
+ },
836
+ {
837
+ "3096": 0,
838
+ "468": 2,
839
+ "696": 20
840
+ },
841
+ {
842
+ "3096": 0,
843
+ "468": 2,
844
+ "696": 20
845
+ },
846
+ {
847
+ "3096": 0,
848
+ "468": 2,
849
+ "696": 21
850
+ }
851
+ ],
852
+ "max_clients": 4,
853
+ "mode": 11
854
+ },
855
+ "rust": {
856
+ "offender": 3
857
+ },
858
+ "source": {
859
+ "offender": 3
860
+ },
861
+ "source_calls": [
862
+ {
863
+ "arguments": {
864
+ "8": 34641
865
+ },
866
+ "target": 7367
867
+ },
868
+ {
869
+ "arguments": {
870
+ "12": 16,
871
+ "16": 0,
872
+ "20": 2067811384,
873
+ "8": 34618
874
+ },
875
+ "target": 70458
876
+ },
877
+ {
878
+ "arguments": {
879
+ "12": 2073042944,
880
+ "8": -1
881
+ },
882
+ "target": -18
883
+ }
884
+ ]
885
+ },
886
+ {
887
+ "input": {
888
+ "clients": [
889
+ {
890
+ "3096": 0,
891
+ "468": 2,
892
+ "696": 21
893
+ },
894
+ {
895
+ "3096": 0,
896
+ "468": 2,
897
+ "696": 20
898
+ },
899
+ {
900
+ "3096": 0,
901
+ "468": 2,
902
+ "696": 20
903
+ },
904
+ {
905
+ "3096": 0,
906
+ "468": 2,
907
+ "696": 20
908
+ },
909
+ {
910
+ "3096": 0,
911
+ "468": 2,
912
+ "696": 20
913
+ },
914
+ {
915
+ "3096": 0,
916
+ "468": 2,
917
+ "696": 20
918
+ },
919
+ {
920
+ "3096": 0,
921
+ "468": 2,
922
+ "696": 20
923
+ },
924
+ {
925
+ "3096": 0,
926
+ "468": 2,
927
+ "696": 20
928
+ },
929
+ {
930
+ "3096": 0,
931
+ "468": 2,
932
+ "696": 20
933
+ },
934
+ {
935
+ "3096": 0,
936
+ "468": 2,
937
+ "696": 20
938
+ },
939
+ {
940
+ "3096": 0,
941
+ "468": 2,
942
+ "696": 20
943
+ },
944
+ {
945
+ "3096": 0,
946
+ "468": 2,
947
+ "696": 20
948
+ },
949
+ {
950
+ "3096": 0,
951
+ "468": 2,
952
+ "696": 20
953
+ },
954
+ {
955
+ "3096": 0,
956
+ "468": 2,
957
+ "696": 20
958
+ },
959
+ {
960
+ "3096": 0,
961
+ "468": 2,
962
+ "696": 20
963
+ },
964
+ {
965
+ "3096": 0,
966
+ "468": 2,
967
+ "696": 20
968
+ },
969
+ {
970
+ "3096": 0,
971
+ "468": 2,
972
+ "696": 20
973
+ },
974
+ {
975
+ "3096": 0,
976
+ "468": 2,
977
+ "696": 20
978
+ },
979
+ {
980
+ "3096": 0,
981
+ "468": 2,
982
+ "696": 20
983
+ },
984
+ {
985
+ "3096": 0,
986
+ "468": 2,
987
+ "696": 20
988
+ },
989
+ {
990
+ "3096": 0,
991
+ "468": 2,
992
+ "696": 20
993
+ },
994
+ {
995
+ "3096": 0,
996
+ "468": 2,
997
+ "696": 20
998
+ },
999
+ {
1000
+ "3096": 0,
1001
+ "468": 2,
1002
+ "696": 20
1003
+ },
1004
+ {
1005
+ "3096": 0,
1006
+ "468": 2,
1007
+ "696": 20
1008
+ },
1009
+ {
1010
+ "3096": 0,
1011
+ "468": 2,
1012
+ "696": 20
1013
+ },
1014
+ {
1015
+ "3096": 0,
1016
+ "468": 2,
1017
+ "696": 20
1018
+ },
1019
+ {
1020
+ "3096": 0,
1021
+ "468": 2,
1022
+ "696": 20
1023
+ },
1024
+ {
1025
+ "3096": 0,
1026
+ "468": 2,
1027
+ "696": 20
1028
+ },
1029
+ {
1030
+ "3096": 0,
1031
+ "468": 2,
1032
+ "696": 20
1033
+ },
1034
+ {
1035
+ "3096": 0,
1036
+ "468": 2,
1037
+ "696": 20
1038
+ },
1039
+ {
1040
+ "3096": 0,
1041
+ "468": 2,
1042
+ "696": 20
1043
+ },
1044
+ {
1045
+ "3096": 0,
1046
+ "468": 2,
1047
+ "696": 20
1048
+ },
1049
+ {
1050
+ "3096": 0,
1051
+ "468": 2,
1052
+ "696": 20
1053
+ },
1054
+ {
1055
+ "3096": 0,
1056
+ "468": 2,
1057
+ "696": 20
1058
+ },
1059
+ {
1060
+ "3096": 0,
1061
+ "468": 2,
1062
+ "696": 20
1063
+ },
1064
+ {
1065
+ "3096": 0,
1066
+ "468": 2,
1067
+ "696": 20
1068
+ },
1069
+ {
1070
+ "3096": 0,
1071
+ "468": 2,
1072
+ "696": 20
1073
+ },
1074
+ {
1075
+ "3096": 0,
1076
+ "468": 2,
1077
+ "696": 20
1078
+ },
1079
+ {
1080
+ "3096": 0,
1081
+ "468": 2,
1082
+ "696": 20
1083
+ },
1084
+ {
1085
+ "3096": 0,
1086
+ "468": 2,
1087
+ "696": 20
1088
+ },
1089
+ {
1090
+ "3096": 0,
1091
+ "468": 2,
1092
+ "696": 20
1093
+ },
1094
+ {
1095
+ "3096": 0,
1096
+ "468": 2,
1097
+ "696": 20
1098
+ },
1099
+ {
1100
+ "3096": 0,
1101
+ "468": 2,
1102
+ "696": 20
1103
+ },
1104
+ {
1105
+ "3096": 0,
1106
+ "468": 2,
1107
+ "696": 20
1108
+ },
1109
+ {
1110
+ "3096": 0,
1111
+ "468": 2,
1112
+ "696": 20
1113
+ },
1114
+ {
1115
+ "3096": 0,
1116
+ "468": 2,
1117
+ "696": 20
1118
+ },
1119
+ {
1120
+ "3096": 0,
1121
+ "468": 2,
1122
+ "696": 20
1123
+ },
1124
+ {
1125
+ "3096": 0,
1126
+ "468": 2,
1127
+ "696": 20
1128
+ },
1129
+ {
1130
+ "3096": 0,
1131
+ "468": 2,
1132
+ "696": 20
1133
+ },
1134
+ {
1135
+ "3096": 0,
1136
+ "468": 2,
1137
+ "696": 20
1138
+ },
1139
+ {
1140
+ "3096": 0,
1141
+ "468": 2,
1142
+ "696": 20
1143
+ },
1144
+ {
1145
+ "3096": 0,
1146
+ "468": 2,
1147
+ "696": 20
1148
+ },
1149
+ {
1150
+ "3096": 0,
1151
+ "468": 2,
1152
+ "696": 20
1153
+ },
1154
+ {
1155
+ "3096": 0,
1156
+ "468": 2,
1157
+ "696": 20
1158
+ },
1159
+ {
1160
+ "3096": 0,
1161
+ "468": 2,
1162
+ "696": 20
1163
+ },
1164
+ {
1165
+ "3096": 0,
1166
+ "468": 2,
1167
+ "696": 20
1168
+ },
1169
+ {
1170
+ "3096": 0,
1171
+ "468": 2,
1172
+ "696": 20
1173
+ },
1174
+ {
1175
+ "3096": 0,
1176
+ "468": 2,
1177
+ "696": 20
1178
+ },
1179
+ {
1180
+ "3096": 0,
1181
+ "468": 2,
1182
+ "696": 20
1183
+ },
1184
+ {
1185
+ "3096": 0,
1186
+ "468": 2,
1187
+ "696": 20
1188
+ },
1189
+ {
1190
+ "3096": 0,
1191
+ "468": 2,
1192
+ "696": 20
1193
+ },
1194
+ {
1195
+ "3096": 0,
1196
+ "468": 2,
1197
+ "696": 20
1198
+ },
1199
+ {
1200
+ "3096": 0,
1201
+ "468": 2,
1202
+ "696": 20
1203
+ },
1204
+ {
1205
+ "3096": 0,
1206
+ "468": 2,
1207
+ "696": 20
1208
+ }
1209
+ ],
1210
+ "max_clients": 64,
1211
+ "mode": 11
1212
+ },
1213
+ "rust": {
1214
+ "offender": 0
1215
+ },
1216
+ "source": {
1217
+ "offender": 0
1218
+ },
1219
+ "source_calls": [
1220
+ {
1221
+ "arguments": {
1222
+ "8": 34641
1223
+ },
1224
+ "target": 7367
1225
+ },
1226
+ {
1227
+ "arguments": {
1228
+ "12": 16,
1229
+ "16": 0,
1230
+ "20": 2067792376,
1231
+ "8": 34618
1232
+ },
1233
+ "target": 70458
1234
+ },
1235
+ {
1236
+ "arguments": {
1237
+ "12": 2073042944,
1238
+ "8": -1
1239
+ },
1240
+ "target": -18
1241
+ }
1242
+ ]
1243
+ },
1244
+ {
1245
+ "input": {
1246
+ "clients": [
1247
+ {
1248
+ "3096": 0,
1249
+ "468": 2,
1250
+ "696": 20
1251
+ },
1252
+ {
1253
+ "3096": 0,
1254
+ "468": 2,
1255
+ "696": 20
1256
+ },
1257
+ {
1258
+ "3096": 0,
1259
+ "468": 2,
1260
+ "696": 20
1261
+ },
1262
+ {
1263
+ "3096": 0,
1264
+ "468": 2,
1265
+ "696": 21
1266
+ },
1267
+ {
1268
+ "3096": 0,
1269
+ "468": 2,
1270
+ "696": 20
1271
+ },
1272
+ {
1273
+ "3096": 0,
1274
+ "468": 2,
1275
+ "696": 20
1276
+ },
1277
+ {
1278
+ "3096": 0,
1279
+ "468": 2,
1280
+ "696": 20
1281
+ },
1282
+ {
1283
+ "3096": 0,
1284
+ "468": 2,
1285
+ "696": 20
1286
+ },
1287
+ {
1288
+ "3096": 0,
1289
+ "468": 2,
1290
+ "696": 20
1291
+ },
1292
+ {
1293
+ "3096": 0,
1294
+ "468": 2,
1295
+ "696": 20
1296
+ },
1297
+ {
1298
+ "3096": 0,
1299
+ "468": 2,
1300
+ "696": 20
1301
+ },
1302
+ {
1303
+ "3096": 0,
1304
+ "468": 2,
1305
+ "696": 20
1306
+ },
1307
+ {
1308
+ "3096": 0,
1309
+ "468": 2,
1310
+ "696": 20
1311
+ },
1312
+ {
1313
+ "3096": 0,
1314
+ "468": 2,
1315
+ "696": 20
1316
+ },
1317
+ {
1318
+ "3096": 0,
1319
+ "468": 2,
1320
+ "696": 20
1321
+ },
1322
+ {
1323
+ "3096": 0,
1324
+ "468": 2,
1325
+ "696": 20
1326
+ },
1327
+ {
1328
+ "3096": 0,
1329
+ "468": 2,
1330
+ "696": 20
1331
+ },
1332
+ {
1333
+ "3096": 0,
1334
+ "468": 2,
1335
+ "696": 20
1336
+ },
1337
+ {
1338
+ "3096": 0,
1339
+ "468": 2,
1340
+ "696": 20
1341
+ },
1342
+ {
1343
+ "3096": 0,
1344
+ "468": 2,
1345
+ "696": 20
1346
+ },
1347
+ {
1348
+ "3096": 0,
1349
+ "468": 2,
1350
+ "696": 20
1351
+ },
1352
+ {
1353
+ "3096": 0,
1354
+ "468": 2,
1355
+ "696": 20
1356
+ },
1357
+ {
1358
+ "3096": 0,
1359
+ "468": 2,
1360
+ "696": 20
1361
+ },
1362
+ {
1363
+ "3096": 0,
1364
+ "468": 2,
1365
+ "696": 20
1366
+ },
1367
+ {
1368
+ "3096": 0,
1369
+ "468": 2,
1370
+ "696": 20
1371
+ },
1372
+ {
1373
+ "3096": 0,
1374
+ "468": 2,
1375
+ "696": 20
1376
+ },
1377
+ {
1378
+ "3096": 0,
1379
+ "468": 2,
1380
+ "696": 20
1381
+ },
1382
+ {
1383
+ "3096": 0,
1384
+ "468": 2,
1385
+ "696": 20
1386
+ },
1387
+ {
1388
+ "3096": 0,
1389
+ "468": 2,
1390
+ "696": 20
1391
+ },
1392
+ {
1393
+ "3096": 0,
1394
+ "468": 2,
1395
+ "696": 20
1396
+ },
1397
+ {
1398
+ "3096": 0,
1399
+ "468": 2,
1400
+ "696": 20
1401
+ },
1402
+ {
1403
+ "3096": 0,
1404
+ "468": 2,
1405
+ "696": 20
1406
+ },
1407
+ {
1408
+ "3096": 0,
1409
+ "468": 2,
1410
+ "696": 20
1411
+ },
1412
+ {
1413
+ "3096": 0,
1414
+ "468": 2,
1415
+ "696": 20
1416
+ },
1417
+ {
1418
+ "3096": 0,
1419
+ "468": 2,
1420
+ "696": 20
1421
+ },
1422
+ {
1423
+ "3096": 0,
1424
+ "468": 2,
1425
+ "696": 20
1426
+ },
1427
+ {
1428
+ "3096": 0,
1429
+ "468": 2,
1430
+ "696": 20
1431
+ },
1432
+ {
1433
+ "3096": 0,
1434
+ "468": 2,
1435
+ "696": 20
1436
+ },
1437
+ {
1438
+ "3096": 0,
1439
+ "468": 2,
1440
+ "696": 20
1441
+ },
1442
+ {
1443
+ "3096": 0,
1444
+ "468": 2,
1445
+ "696": 20
1446
+ },
1447
+ {
1448
+ "3096": 0,
1449
+ "468": 2,
1450
+ "696": 20
1451
+ },
1452
+ {
1453
+ "3096": 0,
1454
+ "468": 2,
1455
+ "696": 20
1456
+ },
1457
+ {
1458
+ "3096": 0,
1459
+ "468": 2,
1460
+ "696": 20
1461
+ },
1462
+ {
1463
+ "3096": 0,
1464
+ "468": 2,
1465
+ "696": 20
1466
+ },
1467
+ {
1468
+ "3096": 0,
1469
+ "468": 2,
1470
+ "696": 20
1471
+ },
1472
+ {
1473
+ "3096": 0,
1474
+ "468": 2,
1475
+ "696": 20
1476
+ },
1477
+ {
1478
+ "3096": 0,
1479
+ "468": 2,
1480
+ "696": 20
1481
+ },
1482
+ {
1483
+ "3096": 0,
1484
+ "468": 2,
1485
+ "696": 20
1486
+ },
1487
+ {
1488
+ "3096": 0,
1489
+ "468": 2,
1490
+ "696": 20
1491
+ },
1492
+ {
1493
+ "3096": 0,
1494
+ "468": 2,
1495
+ "696": 20
1496
+ },
1497
+ {
1498
+ "3096": 0,
1499
+ "468": 2,
1500
+ "696": 20
1501
+ },
1502
+ {
1503
+ "3096": 0,
1504
+ "468": 2,
1505
+ "696": 20
1506
+ },
1507
+ {
1508
+ "3096": 0,
1509
+ "468": 2,
1510
+ "696": 20
1511
+ },
1512
+ {
1513
+ "3096": 0,
1514
+ "468": 2,
1515
+ "696": 20
1516
+ },
1517
+ {
1518
+ "3096": 0,
1519
+ "468": 2,
1520
+ "696": 20
1521
+ },
1522
+ {
1523
+ "3096": 0,
1524
+ "468": 2,
1525
+ "696": 20
1526
+ },
1527
+ {
1528
+ "3096": 0,
1529
+ "468": 2,
1530
+ "696": 20
1531
+ },
1532
+ {
1533
+ "3096": 0,
1534
+ "468": 2,
1535
+ "696": 20
1536
+ },
1537
+ {
1538
+ "3096": 0,
1539
+ "468": 2,
1540
+ "696": 20
1541
+ },
1542
+ {
1543
+ "3096": 0,
1544
+ "468": 2,
1545
+ "696": 20
1546
+ },
1547
+ {
1548
+ "3096": 0,
1549
+ "468": 2,
1550
+ "696": 20
1551
+ },
1552
+ {
1553
+ "3096": 0,
1554
+ "468": 2,
1555
+ "696": 20
1556
+ },
1557
+ {
1558
+ "3096": 0,
1559
+ "468": 2,
1560
+ "696": 20
1561
+ },
1562
+ {
1563
+ "3096": 0,
1564
+ "468": 2,
1565
+ "696": 20
1566
+ }
1567
+ ],
1568
+ "max_clients": 64,
1569
+ "mode": 11
1570
+ },
1571
+ "rust": {
1572
+ "offender": 3
1573
+ },
1574
+ "source": {
1575
+ "offender": 3
1576
+ },
1577
+ "source_calls": [
1578
+ {
1579
+ "arguments": {
1580
+ "8": 34641
1581
+ },
1582
+ "target": 7367
1583
+ },
1584
+ {
1585
+ "arguments": {
1586
+ "12": 16,
1587
+ "16": 0,
1588
+ "20": 2067811384,
1589
+ "8": 34618
1590
+ },
1591
+ "target": 70458
1592
+ },
1593
+ {
1594
+ "arguments": {
1595
+ "12": 2073042944,
1596
+ "8": -1
1597
+ },
1598
+ "target": -18
1599
+ }
1600
+ ]
1601
+ },
1602
+ {
1603
+ "input": {
1604
+ "clients": [],
1605
+ "max_clients": 0,
1606
+ "mode": 0
1607
+ },
1608
+ "rust": {
1609
+ "offender": -1
1610
+ },
1611
+ "source": {
1612
+ "offender": -1
1613
+ },
1614
+ "source_calls": []
1615
+ },
1616
+ {
1617
+ "input": {
1618
+ "clients": [],
1619
+ "max_clients": 0,
1620
+ "mode": 9
1621
+ },
1622
+ "rust": {
1623
+ "offender": -1
1624
+ },
1625
+ "source": {
1626
+ "offender": -1
1627
+ },
1628
+ "source_calls": []
1629
+ },
1630
+ {
1631
+ "input": {
1632
+ "clients": [],
1633
+ "max_clients": 0,
1634
+ "mode": 11
1635
+ },
1636
+ "rust": {
1637
+ "offender": -1
1638
+ },
1639
+ "source": {
1640
+ "offender": -1
1641
+ },
1642
+ "source_calls": []
1643
+ },
1644
+ {
1645
+ "input": {
1646
+ "clients": [
1647
+ {
1648
+ "3096": 0,
1649
+ "468": 2,
1650
+ "696": 21
1651
+ },
1652
+ {
1653
+ "3096": 0,
1654
+ "468": 2,
1655
+ "696": 21
1656
+ },
1657
+ {
1658
+ "3096": 0,
1659
+ "468": 2,
1660
+ "696": 21
1661
+ },
1662
+ {
1663
+ "3096": 0,
1664
+ "468": 2,
1665
+ "696": 21
1666
+ }
1667
+ ],
1668
+ "max_clients": 0,
1669
+ "mode": 11
1670
+ },
1671
+ "rust": {
1672
+ "offender": -1
1673
+ },
1674
+ "source": {
1675
+ "offender": -1
1676
+ },
1677
+ "source_calls": []
1678
+ },
1679
+ {
1680
+ "input": {
1681
+ "clients": [
1682
+ {
1683
+ "3096": 0,
1684
+ "468": 2,
1685
+ "696": 21
1686
+ },
1687
+ {
1688
+ "3096": 0,
1689
+ "468": 2,
1690
+ "696": 21
1691
+ },
1692
+ {
1693
+ "3096": 0,
1694
+ "468": 2,
1695
+ "696": 21
1696
+ },
1697
+ {
1698
+ "3096": 0,
1699
+ "468": 2,
1700
+ "696": 21
1701
+ }
1702
+ ],
1703
+ "max_clients": 2,
1704
+ "mode": 11
1705
+ },
1706
+ "rust": {
1707
+ "offender": 0
1708
+ },
1709
+ "source": {
1710
+ "offender": 0
1711
+ },
1712
+ "source_calls": [
1713
+ {
1714
+ "arguments": {
1715
+ "8": 34641
1716
+ },
1717
+ "target": 7367
1718
+ },
1719
+ {
1720
+ "arguments": {
1721
+ "12": 16,
1722
+ "16": 0,
1723
+ "20": 2067792376,
1724
+ "8": 34618
1725
+ },
1726
+ "target": 70458
1727
+ },
1728
+ {
1729
+ "arguments": {
1730
+ "12": 2073042944,
1731
+ "8": -1
1732
+ },
1733
+ "target": -18
1734
+ }
1735
+ ]
1736
+ }
1737
+ ],
1738
+ "source_report": "docs/research/qvm-exit-class.json",
1739
+ "source_report_sha256": "f8bba4248e4f44ea6ab4d98b2225d4661d4d609df768d81e1d81892b4fc358de"
1740
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 81,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
 
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
+ "rust_unit_tests": 83,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
scripts/analyze_rust_exit_class.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import hashlib,json
3
+ from pathlib import Path
4
+ from rust_lifecycle_support import binary,result
5
+ from qvm_exit_rules_support import FIELDS
6
+ from analyze_qvm import write_json
7
+
8
+ def words(c,j):return [c.get(str(o),2 if o==468 else j if o==140 else 0) for o in FIELDS]
9
+ def main():
10
+ b=binary();p=Path('docs/research/qvm-exit-class.json');data=p.read_bytes();rows=[]
11
+ for s in json.loads(data)['probes']:
12
+ a=s['input'];clients=a['clients'];ids=[j for j,c in enumerate(clients[:a['max_clients']]) if a['mode']==11 and c['468']==2 and c['3096']==0 and c['696']>20];rows.append({'input':a,'source':{'offender':ids[0] if ids else -1},'source_calls':s['requests'],'rust':result(b,'exit-class',[a['mode'],a['max_clients'],len(clients),*[v for j,c in enumerate(clients) for v in words(c,j)]])})
13
+ write_json(Path('docs/research/rust-exit-class.json'),{'source_report':str(p),'source_report_sha256':hashlib.sha256(data).hexdigest(),'probes':rows,'limits':'Rust first-offender mode11 guard over45 original source fixtures. Safe configured count<=slice length<=64; no raw invalid-pointer ABI or transition/native side-effect claim.'})
14
+ if __name__=='__main__':main()
scripts/test_rust_exit_class.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ class RustExitClassTests(unittest.TestCase):
4
+ def test_source_offender_and_gate(self):
5
+ r=json.loads(Path('docs/research/rust-exit-class.json').read_text());self.assertEqual(len(r['probes']),45)
6
+ for p in r['probes']:self.assertEqual(p['rust'],p['source']);self.assertEqual(bool(p['source_calls']),p['rust']['offender']>=0)
7
+ def test_source_identity(self):
8
+ r=json.loads(Path('docs/research/rust-exit-class.json').read_text());self.assertEqual(hashlib.sha256(Path(r['source_report']).read_bytes()).hexdigest(),r['source_report_sha256'])
9
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -2083,3 +2083,16 @@ edge docs/research/qvm-exit-class.json scripts/test_qvm_exit_class.py
2083
  group exit-class scripts/analyze_qvm_exit_class.py
2084
  edge scripts/analyze_qvm_exit_class.py scripts/analyze_qvm_resumer_audit.py
2085
  edge scripts/qvm_exit_rules_support.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2083
  group exit-class scripts/analyze_qvm_exit_class.py
2084
  edge scripts/analyze_qvm_exit_class.py scripts/analyze_qvm_resumer_audit.py
2085
  edge scripts/qvm_exit_rules_support.py scripts/analyze_qvm_resumer_audit.py
2086
+ edge Cargo.toml scripts/analyze_rust_exit_class.py
2087
+ edge Cargo.lock scripts/analyze_rust_exit_class.py
2088
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_exit_class.py
2089
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_exit_class.py
2090
+ edge crates/urt-gameplay/src/bin/urt-lifecycle.rs scripts/analyze_rust_exit_class.py
2091
+ edge crates/urt-gameplay/src/exit_rules.rs scripts/analyze_rust_exit_class.py
2092
+ edge crates/urt-gameplay/src/exit_rules.rs scripts/analyze_rust_health_impulse.py
2093
+ group gameplay scripts/analyze_rust_exit_class.py
2094
+ group rust-exit-class scripts/analyze_rust_health_impulse.py
2095
+ report scripts/analyze_rust_exit_class.py docs/research/rust-exit-class.json
2096
+ edge docs/research/rust-exit-class.json scripts/test_rust_exit_class.py
2097
+ group rust-exit-class scripts/analyze_rust_exit_class.py
2098
+ edge scripts/analyze_rust_exit_class.py scripts/analyze_qvm_resumer_audit.py
xtask/src/lib.rs CHANGED
@@ -1047,6 +1047,7 @@ mod integration_tests {
1047
  ("scoreboard_wire", "scoreboard_rows"),
1048
  ("qvm_format", "qvm_format"),
1049
  ("exit_prefix", "exit_prefix"),
 
1050
  ("leaderboard", "leaderboard"),
1051
  ("recipient_wire", "recipient_wire"),
1052
  ] {
 
1047
  ("scoreboard_wire", "scoreboard_rows"),
1048
  ("qvm_format", "qvm_format"),
1049
  ("exit_prefix", "exit_prefix"),
1050
+ ("exit_rules", "exit_class"),
1051
  ("leaderboard", "leaderboard"),
1052
  ("recipient_wire", "recipient_wire"),
1053
  ] {