NTP samples: 72 replies, best per round/server: 18; local clock drift vs NTP: +1.70 ppm

Per-round NTP best offsets (s, relative to board clock) and server spread:
round  ntp1(delay)                 ntp2(delay)                 ntp3(delay)                 spread_ms  resid_vs_fit_ms
r1  1790931373.325233( 68.5ms)  1790931373.327086( 73.7ms)  1790931373.323854( 67.1ms)     3.23  +1.10 +2.94 -0.31
r2  1790931373.323892( 66.0ms)  1790931373.325250( 70.6ms)  1790931373.325805( 71.2ms)     1.91  -0.29 +1.06 +1.60
r3  1790931373.319700( 57.7ms)  1790931373.321981( 62.2ms)  1790931373.324088( 68.3ms)     4.39  -4.53 -2.26 -0.17
r4  1790931373.321446( 60.7ms)  1790931373.325700( 69.0ms)  1790931373.321714( 63.6ms)     4.25  -2.83 +1.41 -2.59
r5  1790931373.323808( 65.1ms)  1790931373.328886( 74.6ms)  1790931373.325714( 70.6ms)     5.08  -0.51 +4.55 +1.37
r6  1790931373.322036( 59.4ms)  1790931373.321430( 63.0ms)  1790931373.329130( 76.0ms)     7.70  -2.33 -2.95 +4.73

Table: uptime / DMS / NITZ / ntp1 / ntp2 / ntp3 (UTC at the sample's local midpoint; NTP = board clock + NTP offset at that instant)
round uptime   DMS_UTC        NITZ_UTC   ntp1           ntp2           ntp3           DMS-NTP_ms  qmi_halfwin_ms
r1    2287.40  09:34:23.383  09:34:22   09:34:23.664  09:34:23.666  09:34:23.663    -280.7     17.5
r1    2287.45  09:34:23.428  09:34:22   09:34:23.707  09:34:23.709  09:34:23.706    -278.6     18.8
r1    2287.49  09:34:23.469  09:34:22   09:34:23.751  09:34:23.752  09:34:23.749    -280.9     17.2
r2    2314.72  09:34:50.704  09:34:49   09:34:50.982  09:34:50.984  09:34:50.984    -279.0     19.2
r2    2314.77  09:34:50.746  09:34:49   09:34:51.026  09:34:51.028  09:34:51.028    -281.0     17.7
r2    2314.81  09:34:50.787  09:34:49   09:34:51.068  09:34:51.069  09:34:51.070    -281.6     17.0
r3    2342.02  09:35:18.007  09:35:17   09:35:18.280  09:35:18.282  09:35:18.284    -278.1     20.9
r3    2342.07  09:35:18.052  09:35:17   09:35:18.327  09:35:18.329  09:35:18.331    -279.8     18.5
r3    2342.12  09:35:18.093  09:35:17   09:35:18.369  09:35:18.371  09:35:18.374    -281.2     16.8
r4    2369.33  09:35:45.308  09:35:44   09:35:45.584  09:35:45.588  09:35:45.584    -279.3     18.9
r4    2369.37  09:35:45.350  09:35:44   09:35:45.627  09:35:45.631  09:35:45.627    -280.4     17.2
r4    2369.41  09:35:45.390  09:35:44   09:35:45.668  09:35:45.672  09:35:45.668    -281.5     16.4
r5    2396.63  09:36:12.613  09:36:11   09:36:12.891  09:36:12.896  09:36:12.893    -279.4     19.0
r5    2396.68  09:36:12.658  09:36:11   09:36:12.937  09:36:12.942  09:36:12.939    -280.0     18.4
r5    2396.72  09:36:12.701  09:36:11   09:36:12.980  09:36:12.986  09:36:12.982    -280.4     17.9
r6    2423.97  09:36:39.952  09:36:39   09:36:40.229  09:36:40.228  09:36:40.236    -279.3     19.1
r6    2424.02  09:36:39.996  09:36:39   09:36:40.273  09:36:40.273  09:36:40.280    -280.1     18.1
r6    2424.06  09:36:40.037  09:36:39   09:36:40.316  09:36:40.315  09:36:40.323    -281.5     16.7

DMS - NTP (ms): n=18 mean -280.2 median -280.3 min -281.6 max -278.1 stdev 1.0 ; max |DMS-NTP| 281.6 ms; qmicli half-window max 20.9 ms
NITZ - NTP (ms, NITZ truncated to 1 s => expected in (-1000, 0]): n=12 min -1161.6 max -359.6
NTP server spread (max-min of best offsets within a round): max 7.70 ms
DMS formula check: Unix UTC = DMS_ms/1000 + 315964800 -> DMS-NTP mean above (0 = formula exact; ~ +18000 ms would mean GPS time without leap correction)
