const_str/
printable.rs

1#![allow(clippy::comparison_chain)]
2#![allow(clippy::manual_range_contains)]
3
4// Edited from <https://github.com/rust-lang/rust/blob/052114f0c5e8d49f62f8caba364b07017310ab09/library/core/src/unicode/printable.rs>
5
6const fn check(
7    x: u16,
8    singletonuppers: &[(u8, u8)],
9    singletonlowers: &[u8],
10    normal: &[u8],
11) -> bool {
12    let xupper = (x >> 8) as u8;
13    let mut lowerstart = 0;
14
15    // for &(upper, lowercount) in singletonuppers
16    let mut i = 0;
17    while i < singletonuppers.len() {
18        let (upper, lowercount) = singletonuppers[i];
19
20        let lowerend = lowerstart + lowercount as usize;
21        if xupper == upper {
22            // for &lower in &singletonlowers[lowerstart..lowerend]
23            let mut j = lowerstart;
24            while j < lowerend {
25                let lower = singletonlowers[j];
26
27                if lower == x as u8 {
28                    return false;
29                }
30
31                j += 1;
32            }
33            // end for
34        } else if xupper < upper {
35            break;
36        }
37        lowerstart = lowerend;
38
39        i += 1;
40    }
41    // end for
42
43    let mut i = 0;
44    macro_rules! normal_next {
45        () => {{
46            let v = normal[i];
47            i += 1;
48            v
49        }};
50    }
51
52    let mut x = x as i32;
53    let mut current = true;
54    while i < normal.len() {
55        let v = normal_next!();
56        let len = if v & 0x80 != 0 {
57            (((v & 0x7f) as i32) << 8) | normal_next!() as i32
58        } else {
59            v as i32
60        };
61        x -= len;
62        if x < 0 {
63            break;
64        }
65        current = !current;
66    }
67    current
68}
69
70pub const fn is_printable(x: char) -> bool {
71    let x = x as u32;
72    let lower = x as u16;
73
74    if x < 32 {
75        // ASCII fast path
76        false
77    } else if x < 127 {
78        // ASCII fast path
79        true
80    } else if x < 0x10000 {
81        check(lower, SINGLETONS0U, SINGLETONS0L, NORMAL0)
82    } else if x < 0x20000 {
83        check(lower, SINGLETONS1U, SINGLETONS1L, NORMAL1)
84    } else {
85        if 0x2a6e0 <= x && x < 0x2a700 {
86            return false;
87        }
88        if 0x2b73a <= x && x < 0x2b740 {
89            return false;
90        }
91        if 0x2b81e <= x && x < 0x2b820 {
92            return false;
93        }
94        if 0x2cea2 <= x && x < 0x2ceb0 {
95            return false;
96        }
97        if 0x2ebe1 <= x && x < 0x2ebf0 {
98            return false;
99        }
100        if 0x2ee5e <= x && x < 0x2f800 {
101            return false;
102        }
103        if 0x2fa1e <= x && x < 0x30000 {
104            return false;
105        }
106        if 0x3134b <= x && x < 0x31350 {
107            return false;
108        }
109        if 0x323b0 <= x && x < 0xe0100 {
110            return false;
111        }
112        if 0xe01f0 <= x && x < 0x110000 {
113            return false;
114        }
115        true
116    }
117}
118
119#[rustfmt::skip]
120const SINGLETONS0U: &[(u8, u8)] = &[
121    (0x00, 1),
122    (0x03, 5),
123    (0x05, 6),
124    (0x06, 2),
125    (0x07, 6),
126    (0x08, 7),
127    (0x09, 17),
128    (0x0a, 28),
129    (0x0b, 25),
130    (0x0c, 26),
131    (0x0d, 16),
132    (0x0e, 12),
133    (0x0f, 4),
134    (0x10, 3),
135    (0x12, 18),
136    (0x13, 9),
137    (0x16, 1),
138    (0x17, 4),
139    (0x18, 1),
140    (0x19, 3),
141    (0x1a, 7),
142    (0x1b, 1),
143    (0x1c, 2),
144    (0x1f, 22),
145    (0x20, 3),
146    (0x2b, 3),
147    (0x2d, 11),
148    (0x2e, 1),
149    (0x30, 4),
150    (0x31, 2),
151    (0x32, 1),
152    (0xa7, 4),
153    (0xa9, 2),
154    (0xaa, 4),
155    (0xab, 8),
156    (0xfa, 2),
157    (0xfb, 5),
158    (0xfd, 2),
159    (0xfe, 3),
160    (0xff, 9),
161];
162#[rustfmt::skip]
163const SINGLETONS0L: &[u8] = &[
164    0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57,
165    0x58, 0x8b, 0x8c, 0x90, 0x1c, 0xdd, 0x0e, 0x0f,
166    0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f, 0x5c,
167    0x5d, 0x5f, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92,
168    0xa9, 0xb1, 0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca,
169    0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04, 0x11, 0x12,
170    0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49,
171    0x4a, 0x5d, 0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4,
172    0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf, 0xe4, 0xe5,
173    0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31,
174    0x34, 0x3a, 0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e,
175    0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d, 0xc9, 0xce,
176    0xcf, 0x0d, 0x11, 0x29, 0x3a, 0x3b, 0x45, 0x49,
177    0x57, 0x5b, 0x5c, 0x5e, 0x5f, 0x64, 0x65, 0x8d,
178    0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf,
179    0xe4, 0xe5, 0xf0, 0x0d, 0x11, 0x45, 0x49, 0x64,
180    0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5,
181    0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6,
182    0xbe, 0xbf, 0xc5, 0xc7, 0xcf, 0xda, 0xdb, 0x48,
183    0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49, 0x4e,
184    0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f,
185    0xb1, 0xb6, 0xb7, 0xbf, 0xc1, 0xc6, 0xc7, 0xd7,
186    0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7, 0xfe,
187    0xff, 0x80, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x1f,
188    0x6e, 0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae,
189    0xaf, 0x4d, 0xbb, 0xbc, 0x16, 0x17, 0x1e, 0x1f,
190    0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e,
191    0x7e, 0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0,
192    0xf1, 0xf5, 0x72, 0x73, 0x8f, 0x74, 0x75, 0x96,
193    0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf, 0xc7,
194    0xcf, 0xd7, 0xdf, 0x9a, 0x00, 0x40, 0x97, 0x98,
195    0x30, 0x8f, 0x1f, 0xce, 0xcf, 0xd2, 0xd4, 0xce,
196    0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f,
197    0x10, 0x27, 0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37,
198    0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91, 0x53, 0x67,
199    0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7,
200    0xfe, 0xff,
201];
202#[rustfmt::skip]
203const SINGLETONS1U: &[(u8, u8)] = &[
204    (0x00, 6),
205    (0x01, 1),
206    (0x03, 1),
207    (0x04, 2),
208    (0x05, 7),
209    (0x07, 2),
210    (0x08, 8),
211    (0x09, 2),
212    (0x0a, 5),
213    (0x0b, 2),
214    (0x0e, 4),
215    (0x10, 1),
216    (0x11, 2),
217    (0x12, 5),
218    (0x13, 28),
219    (0x14, 1),
220    (0x15, 2),
221    (0x17, 2),
222    (0x19, 13),
223    (0x1c, 5),
224    (0x1d, 8),
225    (0x1f, 1),
226    (0x24, 1),
227    (0x6a, 4),
228    (0x6b, 2),
229    (0xaf, 3),
230    (0xb1, 2),
231    (0xbc, 2),
232    (0xcf, 2),
233    (0xd1, 2),
234    (0xd4, 12),
235    (0xd5, 9),
236    (0xd6, 2),
237    (0xd7, 2),
238    (0xda, 1),
239    (0xe0, 5),
240    (0xe1, 2),
241    (0xe7, 4),
242    (0xe8, 2),
243    (0xee, 32),
244    (0xf0, 4),
245    (0xf8, 2),
246    (0xfa, 4),
247    (0xfb, 1),
248];
249#[rustfmt::skip]
250const SINGLETONS1L: &[u8] = &[
251    0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e,
252    0x9e, 0x9f, 0x7b, 0x8b, 0x93, 0x96, 0xa2, 0xb2,
253    0xba, 0x86, 0xb1, 0x06, 0x07, 0x09, 0x36, 0x3d,
254    0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18,
255    0x36, 0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf,
256    0xbd, 0x35, 0xe0, 0x12, 0x87, 0x89, 0x8e, 0x9e,
257    0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34,
258    0x3a, 0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64,
259    0x65, 0x8a, 0x8c, 0x8d, 0x8f, 0xb6, 0xc1, 0xc3,
260    0xc4, 0xc6, 0xcb, 0xd6, 0x5c, 0xb6, 0xb7, 0x1b,
261    0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36,
262    0x39, 0x3a, 0xa8, 0xa9, 0xd8, 0xd9, 0x09, 0x37,
263    0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66,
264    0x69, 0x8f, 0x92, 0x11, 0x6f, 0x5f, 0xbf, 0xee,
265    0xef, 0x5a, 0x62, 0xf4, 0xfc, 0xff, 0x53, 0x54,
266    0x9a, 0x9b, 0x2e, 0x2f, 0x27, 0x28, 0x55, 0x9d,
267    0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba,
268    0xbc, 0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a,
269    0x3f, 0x45, 0x51, 0xa6, 0xa7, 0xcc, 0xcd, 0xa0,
270    0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xe7,
271    0xec, 0xef, 0xff, 0xc5, 0xc6, 0x04, 0x20, 0x23,
272    0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a,
273    0x4c, 0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c,
274    0x5e, 0x60, 0x63, 0x65, 0x66, 0x6b, 0x73, 0x78,
275    0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0,
276    0xd0, 0xae, 0xaf, 0x6e, 0x6f, 0xdd, 0xde, 0x93,
277];
278#[rustfmt::skip]
279const NORMAL0: &[u8] = &[
280    0x00, 0x20,
281    0x5f, 0x22,
282    0x82, 0xdf, 0x04,
283    0x82, 0x44, 0x08,
284    0x1b, 0x04,
285    0x06, 0x11,
286    0x81, 0xac, 0x0e,
287    0x80, 0xab, 0x05,
288    0x1f, 0x08,
289    0x81, 0x1c, 0x03,
290    0x19, 0x08,
291    0x01, 0x04,
292    0x2f, 0x04,
293    0x34, 0x04,
294    0x07, 0x03,
295    0x01, 0x07,
296    0x06, 0x07,
297    0x11, 0x0a,
298    0x50, 0x0f,
299    0x12, 0x07,
300    0x55, 0x07,
301    0x03, 0x04,
302    0x1c, 0x0a,
303    0x09, 0x03,
304    0x08, 0x03,
305    0x07, 0x03,
306    0x02, 0x03,
307    0x03, 0x03,
308    0x0c, 0x04,
309    0x05, 0x03,
310    0x0b, 0x06,
311    0x01, 0x0e,
312    0x15, 0x05,
313    0x4e, 0x07,
314    0x1b, 0x07,
315    0x57, 0x07,
316    0x02, 0x06,
317    0x17, 0x0c,
318    0x50, 0x04,
319    0x43, 0x03,
320    0x2d, 0x03,
321    0x01, 0x04,
322    0x11, 0x06,
323    0x0f, 0x0c,
324    0x3a, 0x04,
325    0x1d, 0x25,
326    0x5f, 0x20,
327    0x6d, 0x04,
328    0x6a, 0x25,
329    0x80, 0xc8, 0x05,
330    0x82, 0xb0, 0x03,
331    0x1a, 0x06,
332    0x82, 0xfd, 0x03,
333    0x59, 0x07,
334    0x16, 0x09,
335    0x18, 0x09,
336    0x14, 0x0c,
337    0x14, 0x0c,
338    0x6a, 0x06,
339    0x0a, 0x06,
340    0x1a, 0x06,
341    0x59, 0x07,
342    0x2b, 0x05,
343    0x46, 0x0a,
344    0x2c, 0x04,
345    0x0c, 0x04,
346    0x01, 0x03,
347    0x31, 0x0b,
348    0x2c, 0x04,
349    0x1a, 0x06,
350    0x0b, 0x03,
351    0x80, 0xac, 0x06,
352    0x0a, 0x06,
353    0x2f, 0x31,
354    0x80, 0xf4, 0x08,
355    0x3c, 0x03,
356    0x0f, 0x03,
357    0x3e, 0x05,
358    0x38, 0x08,
359    0x2b, 0x05,
360    0x82, 0xff, 0x11,
361    0x18, 0x08,
362    0x2f, 0x11,
363    0x2d, 0x03,
364    0x21, 0x0f,
365    0x21, 0x0f,
366    0x80, 0x8c, 0x04,
367    0x82, 0x9a, 0x16,
368    0x0b, 0x15,
369    0x88, 0x94, 0x05,
370    0x2f, 0x05,
371    0x3b, 0x07,
372    0x02, 0x0e,
373    0x18, 0x09,
374    0x80, 0xbe, 0x22,
375    0x74, 0x0c,
376    0x80, 0xd6, 0x1a,
377    0x81, 0x10, 0x05,
378    0x80, 0xe1, 0x09,
379    0xf2, 0x9e, 0x03,
380    0x37, 0x09,
381    0x81, 0x5c, 0x14,
382    0x80, 0xb8, 0x08,
383    0x80, 0xdd, 0x15,
384    0x3b, 0x03,
385    0x0a, 0x06,
386    0x38, 0x08,
387    0x46, 0x08,
388    0x0c, 0x06,
389    0x74, 0x0b,
390    0x1e, 0x03,
391    0x5a, 0x04,
392    0x59, 0x09,
393    0x80, 0x83, 0x18,
394    0x1c, 0x0a,
395    0x16, 0x09,
396    0x4c, 0x04,
397    0x80, 0x8a, 0x06,
398    0xab, 0xa4, 0x0c,
399    0x17, 0x04,
400    0x31, 0xa1, 0x04,
401    0x81, 0xda, 0x26,
402    0x07, 0x0c,
403    0x05, 0x05,
404    0x80, 0xa6, 0x10,
405    0x81, 0xf5, 0x07,
406    0x01, 0x20,
407    0x2a, 0x06,
408    0x4c, 0x04,
409    0x80, 0x8d, 0x04,
410    0x80, 0xbe, 0x03,
411    0x1b, 0x03,
412    0x0f, 0x0d,
413];
414#[rustfmt::skip]
415const NORMAL1: &[u8] = &[
416    0x5e, 0x22,
417    0x7b, 0x05,
418    0x03, 0x04,
419    0x2d, 0x03,
420    0x66, 0x03,
421    0x01, 0x2f,
422    0x2e, 0x80, 0x82,
423    0x1d, 0x03,
424    0x31, 0x0f,
425    0x1c, 0x04,
426    0x24, 0x09,
427    0x1e, 0x05,
428    0x2b, 0x05,
429    0x44, 0x04,
430    0x0e, 0x2a,
431    0x80, 0xaa, 0x06,
432    0x24, 0x04,
433    0x24, 0x04,
434    0x28, 0x08,
435    0x34, 0x0b,
436    0x4e, 0x03,
437    0x34, 0x0c,
438    0x81, 0x37, 0x09,
439    0x16, 0x0a,
440    0x08, 0x18,
441    0x3b, 0x45,
442    0x39, 0x03,
443    0x63, 0x08,
444    0x09, 0x30,
445    0x16, 0x05,
446    0x21, 0x03,
447    0x1b, 0x05,
448    0x01, 0x40,
449    0x38, 0x04,
450    0x4b, 0x05,
451    0x2f, 0x04,
452    0x0a, 0x07,
453    0x09, 0x07,
454    0x40, 0x20,
455    0x27, 0x04,
456    0x0c, 0x09,
457    0x36, 0x03,
458    0x3a, 0x05,
459    0x1a, 0x07,
460    0x04, 0x0c,
461    0x07, 0x50,
462    0x49, 0x37,
463    0x33, 0x0d,
464    0x33, 0x07,
465    0x2e, 0x08,
466    0x0a, 0x06,
467    0x26, 0x03,
468    0x1d, 0x08,
469    0x02, 0x80, 0xd0,
470    0x52, 0x10,
471    0x03, 0x37,
472    0x2c, 0x08,
473    0x2a, 0x16,
474    0x1a, 0x26,
475    0x1c, 0x14,
476    0x17, 0x09,
477    0x4e, 0x04,
478    0x24, 0x09,
479    0x44, 0x0d,
480    0x19, 0x07,
481    0x0a, 0x06,
482    0x48, 0x08,
483    0x27, 0x09,
484    0x75, 0x0b,
485    0x42, 0x3e,
486    0x2a, 0x06,
487    0x3b, 0x05,
488    0x0a, 0x06,
489    0x51, 0x06,
490    0x01, 0x05,
491    0x10, 0x03,
492    0x05, 0x0b,
493    0x59, 0x08,
494    0x02, 0x1d,
495    0x62, 0x1e,
496    0x48, 0x08,
497    0x0a, 0x80, 0xa6,
498    0x5e, 0x22,
499    0x45, 0x0b,
500    0x0a, 0x06,
501    0x0d, 0x13,
502    0x3a, 0x06,
503    0x0a, 0x06,
504    0x14, 0x1c,
505    0x2c, 0x04,
506    0x17, 0x80, 0xb9,
507    0x3c, 0x64,
508    0x53, 0x0c,
509    0x48, 0x09,
510    0x0a, 0x46,
511    0x45, 0x1b,
512    0x48, 0x08,
513    0x53, 0x0d,
514    0x49, 0x07,
515    0x0a, 0x80, 0xb6,
516    0x22, 0x0e,
517    0x0a, 0x06,
518    0x46, 0x0a,
519    0x1d, 0x03,
520    0x47, 0x49,
521    0x37, 0x03,
522    0x0e, 0x08,
523    0x0a, 0x06,
524    0x39, 0x07,
525    0x0a, 0x81, 0x36,
526    0x19, 0x07,
527    0x3b, 0x03,
528    0x1d, 0x55,
529    0x01, 0x0f,
530    0x32, 0x0d,
531    0x83, 0x9b, 0x66,
532    0x75, 0x0b,
533    0x80, 0xc4, 0x8a, 0x4c,
534    0x63, 0x0d,
535    0x84, 0x30, 0x10,
536    0x16, 0x0a,
537    0x8f, 0x9b, 0x05,
538    0x82, 0x47, 0x9a, 0xb9,
539    0x3a, 0x86, 0xc6,
540    0x82, 0x39, 0x07,
541    0x2a, 0x04,
542    0x5c, 0x06,
543    0x26, 0x0a,
544    0x46, 0x0a,
545    0x28, 0x05,
546    0x13, 0x81, 0xb0,
547    0x3a, 0x80, 0xc6,
548    0x5b, 0x65,
549    0x4b, 0x04,
550    0x39, 0x07,
551    0x11, 0x40,
552    0x05, 0x0b,
553    0x02, 0x0e,
554    0x97, 0xf8, 0x08,
555    0x84, 0xd6, 0x29,
556    0x0a, 0xa2, 0xe7,
557    0x81, 0x33, 0x0f,
558    0x01, 0x1d,
559    0x06, 0x0e,
560    0x04, 0x08,
561    0x81, 0x8c, 0x89, 0x04,
562    0x6b, 0x05,
563    0x0d, 0x03,
564    0x09, 0x07,
565    0x10, 0x8f, 0x60,
566    0x80, 0xfa, 0x06,
567    0x81, 0xb4, 0x4c,
568    0x47, 0x09,
569    0x74, 0x3c,
570    0x80, 0xf6, 0x0a,
571    0x73, 0x08,
572    0x70, 0x15,
573    0x46, 0x7a,
574    0x14, 0x0c,
575    0x14, 0x0c,
576    0x57, 0x09,
577    0x19, 0x80, 0x87,
578    0x81, 0x47, 0x03,
579    0x85, 0x42, 0x0f,
580    0x15, 0x84, 0x50,
581    0x1f, 0x06,
582    0x06, 0x80, 0xd5,
583    0x2b, 0x05,
584    0x3e, 0x21,
585    0x01, 0x70,
586    0x2d, 0x03,
587    0x1a, 0x04,
588    0x02, 0x81, 0x40,
589    0x1f, 0x11,
590    0x3a, 0x05,
591    0x01, 0x81, 0xd0,
592    0x2a, 0x80, 0xd6,
593    0x2b, 0x04,
594    0x01, 0x81, 0xe0,
595    0x80, 0xf7, 0x29,
596    0x4c, 0x04,
597    0x0a, 0x04,
598    0x02, 0x83, 0x11,
599    0x44, 0x4c,
600    0x3d, 0x80, 0xc2,
601    0x3c, 0x06,
602    0x01, 0x04,
603    0x55, 0x05,
604    0x1b, 0x34,
605    0x02, 0x81, 0x0e,
606    0x2c, 0x04,
607    0x64, 0x0c,
608    0x56, 0x0a,
609    0x80, 0xae, 0x38,
610    0x1d, 0x0d,
611    0x2c, 0x04,
612    0x09, 0x07,
613    0x02, 0x0e,
614    0x06, 0x80, 0x9a,
615    0x83, 0xd8, 0x04,
616    0x11, 0x03,
617    0x0d, 0x03,
618    0x77, 0x04,
619    0x5f, 0x06,
620    0x0c, 0x04,
621    0x01, 0x0f,
622    0x0c, 0x04,
623    0x38, 0x08,
624    0x0a, 0x06,
625    0x28, 0x08,
626    0x2c, 0x04,
627    0x02, 0x3e,
628    0x81, 0x54, 0x0c,
629    0x1d, 0x03,
630    0x0a, 0x05,
631    0x38, 0x07,
632    0x1c, 0x06,
633    0x09, 0x07,
634    0x80, 0xfa, 0x84, 0x06,
635];