FFmpeg
dirac_vlc.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #include "libavutil/mem_internal.h"
20 
21 #include "dirac_vlc.h"
22 
23 enum {
24  /* Next byte contains an exactly aligned start to a new symbol (even bit) */
26  /* Next byte should end the current value on an odd bit */
27  STATE_FOLLOW = 256,
28  /* Byte is completely data and doesn't end nor start a value */
29  STATE_DATA = 512,
30  /* Byte has the current value's sign bit and starts a new value */
31  STATE_SIGN = 768,
32 };
33 
34 /* Exactly 128 bits */
35 typedef struct LUTState {
36  int16_t val0; /* Bits to which to add after applying preshift */
37  int16_t val1;
38  int16_t val2;
39  int16_t val3;
40  int16_t val4;
41  uint8_t val0_bits; /* The size of val0 in bits */
42  int8_t sign; /* Sign of the current value (0 == zero the value) */
43  int8_t num; /* Number of values in this byte */
44  uint8_t val; /* Init value in case current value was terminated */
45  uint16_t state; /* Expected state for the next byte */
46 } LUTState;
47 
48 static const DECLARE_ALIGNED(32, LUTState, dirac_golomb_lut)[1024] = {
49  { +16, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
50  { +17, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
51  { +8, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
52  { +8, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
53  { +18, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
54  { +19, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
55  { +9, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
56  { +9, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
57  { +4, 0, 0, 0, 0, 3, +1, 1, 2, STATE_FOLLOW },
58  { +4, 0, 0, 0, 0, 3, +1, 1, 3, STATE_FOLLOW },
59  { +4, 0, 0, 0, 0, 3, +1, 2, 1, STATE_DATA },
60  { +4, 0, 0, 0, 0, 3, +1, 3, 0, STATE_START },
61  { +4, 0, 0, 0, 0, 3, -1, 1, 2, STATE_FOLLOW },
62  { +4, 0, 0, 0, 0, 3, -1, 1, 3, STATE_FOLLOW },
63  { +4, 0, 0, 0, 0, 3, -1, 2, 1, STATE_DATA },
64  { +4, 0, 0, 0, 0, 3, -1, 3, 0, STATE_START },
65  { +20, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
66  { +21, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
67  { +10, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
68  { +10, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
69  { +22, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
70  { +23, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
71  { +11, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
72  { +11, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
73  { +5, 0, 0, 0, 0, 3, +1, 1, 2, STATE_FOLLOW },
74  { +5, 0, 0, 0, 0, 3, +1, 1, 3, STATE_FOLLOW },
75  { +5, 0, 0, 0, 0, 3, +1, 2, 1, STATE_DATA },
76  { +5, 0, 0, 0, 0, 3, +1, 3, 0, STATE_START },
77  { +5, 0, 0, 0, 0, 3, -1, 1, 2, STATE_FOLLOW },
78  { +5, 0, 0, 0, 0, 3, -1, 1, 3, STATE_FOLLOW },
79  { +5, 0, 0, 0, 0, 3, -1, 2, 1, STATE_DATA },
80  { +5, 0, 0, 0, 0, 3, -1, 3, 0, STATE_START },
81  { +2, 0, 0, 0, 0, 2, +1, 1, 4, STATE_FOLLOW },
82  { +2, 0, 0, 0, 0, 2, +1, 1, 5, STATE_FOLLOW },
83  { +2, +1, 0, 0, 0, 2, +1, 2, 0, STATE_START },
84  { +2, -1, 0, 0, 0, 2, +1, 2, 0, STATE_START },
85  { +2, 0, 0, 0, 0, 2, +1, 1, 6, STATE_FOLLOW },
86  { +2, 0, 0, 0, 0, 2, +1, 1, 7, STATE_FOLLOW },
87  { +2, +2, 0, 0, 0, 2, +1, 2, 0, STATE_START },
88  { +2, -2, 0, 0, 0, 2, +1, 2, 0, STATE_START },
89  { +2, 0, 0, 0, 0, 2, +1, 2, 2, STATE_DATA },
90  { +2, 0, 0, 0, 0, 2, +1, 2, 2, STATE_SIGN },
91  { +2, 0, 0, 0, 0, 2, +1, 2, 3, STATE_DATA },
92  { +2, 0, 0, 0, 0, 2, +1, 2, 3, STATE_SIGN },
93  { +2, 0, 0, 0, 0, 2, +1, 3, 2, STATE_FOLLOW },
94  { +2, 0, 0, 0, 0, 2, +1, 3, 3, STATE_FOLLOW },
95  { +2, 0, 0, 0, 0, 2, +1, 4, 1, STATE_DATA },
96  { +2, 0, 0, 0, 0, 2, +1, 5, 0, STATE_START },
97  { +2, 0, 0, 0, 0, 2, -1, 1, 4, STATE_FOLLOW },
98  { +2, 0, 0, 0, 0, 2, -1, 1, 5, STATE_FOLLOW },
99  { +2, +1, 0, 0, 0, 2, -1, 2, 0, STATE_START },
100  { +2, -1, 0, 0, 0, 2, -1, 2, 0, STATE_START },
101  { +2, 0, 0, 0, 0, 2, -1, 1, 6, STATE_FOLLOW },
102  { +2, 0, 0, 0, 0, 2, -1, 1, 7, STATE_FOLLOW },
103  { +2, +2, 0, 0, 0, 2, -1, 2, 0, STATE_START },
104  { +2, -2, 0, 0, 0, 2, -1, 2, 0, STATE_START },
105  { +2, 0, 0, 0, 0, 2, -1, 2, 2, STATE_DATA },
106  { +2, 0, 0, 0, 0, 2, -1, 2, 2, STATE_SIGN },
107  { +2, 0, 0, 0, 0, 2, -1, 2, 3, STATE_DATA },
108  { +2, 0, 0, 0, 0, 2, -1, 2, 3, STATE_SIGN },
109  { +2, 0, 0, 0, 0, 2, -1, 3, 2, STATE_FOLLOW },
110  { +2, 0, 0, 0, 0, 2, -1, 3, 3, STATE_FOLLOW },
111  { +2, 0, 0, 0, 0, 2, -1, 4, 1, STATE_DATA },
112  { +2, 0, 0, 0, 0, 2, -1, 5, 0, STATE_START },
113  { +24, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
114  { +25, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
115  { +12, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
116  { +12, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
117  { +26, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
118  { +27, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
119  { +13, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
120  { +13, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
121  { +6, 0, 0, 0, 0, 3, +1, 1, 2, STATE_FOLLOW },
122  { +6, 0, 0, 0, 0, 3, +1, 1, 3, STATE_FOLLOW },
123  { +6, 0, 0, 0, 0, 3, +1, 2, 1, STATE_DATA },
124  { +6, 0, 0, 0, 0, 3, +1, 3, 0, STATE_START },
125  { +6, 0, 0, 0, 0, 3, -1, 1, 2, STATE_FOLLOW },
126  { +6, 0, 0, 0, 0, 3, -1, 1, 3, STATE_FOLLOW },
127  { +6, 0, 0, 0, 0, 3, -1, 2, 1, STATE_DATA },
128  { +6, 0, 0, 0, 0, 3, -1, 3, 0, STATE_START },
129  { +28, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
130  { +29, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
131  { +14, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
132  { +14, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
133  { +30, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
134  { +31, 0, 0, 0, 0, 5, +1, 0, 0, STATE_FOLLOW },
135  { +15, 0, 0, 0, 0, 4, +1, 1, 0, STATE_START },
136  { +15, 0, 0, 0, 0, 4, -1, 1, 0, STATE_START },
137  { +7, 0, 0, 0, 0, 3, +1, 1, 2, STATE_FOLLOW },
138  { +7, 0, 0, 0, 0, 3, +1, 1, 3, STATE_FOLLOW },
139  { +7, 0, 0, 0, 0, 3, +1, 2, 1, STATE_DATA },
140  { +7, 0, 0, 0, 0, 3, +1, 3, 0, STATE_START },
141  { +7, 0, 0, 0, 0, 3, -1, 1, 2, STATE_FOLLOW },
142  { +7, 0, 0, 0, 0, 3, -1, 1, 3, STATE_FOLLOW },
143  { +7, 0, 0, 0, 0, 3, -1, 2, 1, STATE_DATA },
144  { +7, 0, 0, 0, 0, 3, -1, 3, 0, STATE_START },
145  { +3, 0, 0, 0, 0, 2, +1, 1, 4, STATE_FOLLOW },
146  { +3, 0, 0, 0, 0, 2, +1, 1, 5, STATE_FOLLOW },
147  { +3, +1, 0, 0, 0, 2, +1, 2, 0, STATE_START },
148  { +3, -1, 0, 0, 0, 2, +1, 2, 0, STATE_START },
149  { +3, 0, 0, 0, 0, 2, +1, 1, 6, STATE_FOLLOW },
150  { +3, 0, 0, 0, 0, 2, +1, 1, 7, STATE_FOLLOW },
151  { +3, +2, 0, 0, 0, 2, +1, 2, 0, STATE_START },
152  { +3, -2, 0, 0, 0, 2, +1, 2, 0, STATE_START },
153  { +3, 0, 0, 0, 0, 2, +1, 2, 2, STATE_DATA },
154  { +3, 0, 0, 0, 0, 2, +1, 2, 2, STATE_SIGN },
155  { +3, 0, 0, 0, 0, 2, +1, 2, 3, STATE_DATA },
156  { +3, 0, 0, 0, 0, 2, +1, 2, 3, STATE_SIGN },
157  { +3, 0, 0, 0, 0, 2, +1, 3, 2, STATE_FOLLOW },
158  { +3, 0, 0, 0, 0, 2, +1, 3, 3, STATE_FOLLOW },
159  { +3, 0, 0, 0, 0, 2, +1, 4, 1, STATE_DATA },
160  { +3, 0, 0, 0, 0, 2, +1, 5, 0, STATE_START },
161  { +3, 0, 0, 0, 0, 2, -1, 1, 4, STATE_FOLLOW },
162  { +3, 0, 0, 0, 0, 2, -1, 1, 5, STATE_FOLLOW },
163  { +3, +1, 0, 0, 0, 2, -1, 2, 0, STATE_START },
164  { +3, -1, 0, 0, 0, 2, -1, 2, 0, STATE_START },
165  { +3, 0, 0, 0, 0, 2, -1, 1, 6, STATE_FOLLOW },
166  { +3, 0, 0, 0, 0, 2, -1, 1, 7, STATE_FOLLOW },
167  { +3, +2, 0, 0, 0, 2, -1, 2, 0, STATE_START },
168  { +3, -2, 0, 0, 0, 2, -1, 2, 0, STATE_START },
169  { +3, 0, 0, 0, 0, 2, -1, 2, 2, STATE_DATA },
170  { +3, 0, 0, 0, 0, 2, -1, 2, 2, STATE_SIGN },
171  { +3, 0, 0, 0, 0, 2, -1, 2, 3, STATE_DATA },
172  { +3, 0, 0, 0, 0, 2, -1, 2, 3, STATE_SIGN },
173  { +3, 0, 0, 0, 0, 2, -1, 3, 2, STATE_FOLLOW },
174  { +3, 0, 0, 0, 0, 2, -1, 3, 3, STATE_FOLLOW },
175  { +3, 0, 0, 0, 0, 2, -1, 4, 1, STATE_DATA },
176  { +3, 0, 0, 0, 0, 2, -1, 5, 0, STATE_START },
177  { 0, 0, 0, 0, 0, 0, 0, 1, 8, STATE_DATA },
178  { 0, 0, 0, 0, 0, 0, 0, 1, 8, STATE_SIGN },
179  { 0, 0, 0, 0, 0, 0, 0, 1, 9, STATE_DATA },
180  { 0, 0, 0, 0, 0, 0, 0, 1, 9, STATE_SIGN },
181  { 0, +3, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
182  { 0, +3, 0, 0, 0, 0, 0, 3, 0, STATE_START },
183  { 0, -3, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
184  { 0, -3, 0, 0, 0, 0, 0, 3, 0, STATE_START },
185  { 0, 0, 0, 0, 0, 0, 0, 1, 10, STATE_DATA },
186  { 0, 0, 0, 0, 0, 0, 0, 1, 10, STATE_SIGN },
187  { 0, 0, 0, 0, 0, 0, 0, 1, 11, STATE_DATA },
188  { 0, 0, 0, 0, 0, 0, 0, 1, 11, STATE_SIGN },
189  { 0, +4, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
190  { 0, +4, 0, 0, 0, 0, 0, 3, 0, STATE_START },
191  { 0, -4, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
192  { 0, -4, 0, 0, 0, 0, 0, 3, 0, STATE_START },
193  { 0, +1, 0, 0, 0, 0, 0, 2, 2, STATE_DATA },
194  { 0, +1, 0, 0, 0, 0, 0, 2, 2, STATE_SIGN },
195  { 0, +1, 0, 0, 0, 0, 0, 2, 3, STATE_DATA },
196  { 0, +1, 0, 0, 0, 0, 0, 2, 3, STATE_SIGN },
197  { 0, +1, 0, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
198  { 0, +1, 0, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
199  { 0, +1, 0, 0, 0, 0, 0, 4, 1, STATE_DATA },
200  { 0, +1, 0, 0, 0, 0, 0, 5, 0, STATE_START },
201  { 0, -1, 0, 0, 0, 0, 0, 2, 2, STATE_DATA },
202  { 0, -1, 0, 0, 0, 0, 0, 2, 2, STATE_SIGN },
203  { 0, -1, 0, 0, 0, 0, 0, 2, 3, STATE_DATA },
204  { 0, -1, 0, 0, 0, 0, 0, 2, 3, STATE_SIGN },
205  { 0, -1, 0, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
206  { 0, -1, 0, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
207  { 0, -1, 0, 0, 0, 0, 0, 4, 1, STATE_DATA },
208  { 0, -1, 0, 0, 0, 0, 0, 5, 0, STATE_START },
209  { 0, 0, 0, 0, 0, 0, 0, 1, 12, STATE_DATA },
210  { 0, 0, 0, 0, 0, 0, 0, 1, 12, STATE_SIGN },
211  { 0, 0, 0, 0, 0, 0, 0, 1, 13, STATE_DATA },
212  { 0, 0, 0, 0, 0, 0, 0, 1, 13, STATE_SIGN },
213  { 0, +5, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
214  { 0, +5, 0, 0, 0, 0, 0, 3, 0, STATE_START },
215  { 0, -5, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
216  { 0, -5, 0, 0, 0, 0, 0, 3, 0, STATE_START },
217  { 0, 0, 0, 0, 0, 0, 0, 1, 14, STATE_DATA },
218  { 0, 0, 0, 0, 0, 0, 0, 1, 14, STATE_SIGN },
219  { 0, 0, 0, 0, 0, 0, 0, 1, 15, STATE_DATA },
220  { 0, 0, 0, 0, 0, 0, 0, 1, 15, STATE_SIGN },
221  { 0, +6, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
222  { 0, +6, 0, 0, 0, 0, 0, 3, 0, STATE_START },
223  { 0, -6, 0, 0, 0, 0, 0, 2, 1, STATE_DATA },
224  { 0, -6, 0, 0, 0, 0, 0, 3, 0, STATE_START },
225  { 0, +2, 0, 0, 0, 0, 0, 2, 2, STATE_DATA },
226  { 0, +2, 0, 0, 0, 0, 0, 2, 2, STATE_SIGN },
227  { 0, +2, 0, 0, 0, 0, 0, 2, 3, STATE_DATA },
228  { 0, +2, 0, 0, 0, 0, 0, 2, 3, STATE_SIGN },
229  { 0, +2, 0, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
230  { 0, +2, 0, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
231  { 0, +2, 0, 0, 0, 0, 0, 4, 1, STATE_DATA },
232  { 0, +2, 0, 0, 0, 0, 0, 5, 0, STATE_START },
233  { 0, -2, 0, 0, 0, 0, 0, 2, 2, STATE_DATA },
234  { 0, -2, 0, 0, 0, 0, 0, 2, 2, STATE_SIGN },
235  { 0, -2, 0, 0, 0, 0, 0, 2, 3, STATE_DATA },
236  { 0, -2, 0, 0, 0, 0, 0, 2, 3, STATE_SIGN },
237  { 0, -2, 0, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
238  { 0, -2, 0, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
239  { 0, -2, 0, 0, 0, 0, 0, 4, 1, STATE_DATA },
240  { 0, -2, 0, 0, 0, 0, 0, 5, 0, STATE_START },
241  { 0, 0, 0, 0, 0, 0, 0, 2, 8, STATE_FOLLOW },
242  { 0, 0, 0, 0, 0, 0, 0, 2, 9, STATE_FOLLOW },
243  { 0, 0, +3, 0, 0, 0, 0, 3, 0, STATE_START },
244  { 0, 0, -3, 0, 0, 0, 0, 3, 0, STATE_START },
245  { 0, 0, 0, 0, 0, 0, 0, 2, 10, STATE_FOLLOW },
246  { 0, 0, 0, 0, 0, 0, 0, 2, 11, STATE_FOLLOW },
247  { 0, 0, +4, 0, 0, 0, 0, 3, 0, STATE_START },
248  { 0, 0, -4, 0, 0, 0, 0, 3, 0, STATE_START },
249  { 0, 0, +1, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
250  { 0, 0, +1, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
251  { 0, 0, +1, 0, 0, 0, 0, 4, 1, STATE_DATA },
252  { 0, 0, +1, 0, 0, 0, 0, 5, 0, STATE_START },
253  { 0, 0, -1, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
254  { 0, 0, -1, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
255  { 0, 0, -1, 0, 0, 0, 0, 4, 1, STATE_DATA },
256  { 0, 0, -1, 0, 0, 0, 0, 5, 0, STATE_START },
257  { 0, 0, 0, 0, 0, 0, 0, 2, 12, STATE_FOLLOW },
258  { 0, 0, 0, 0, 0, 0, 0, 2, 13, STATE_FOLLOW },
259  { 0, 0, +5, 0, 0, 0, 0, 3, 0, STATE_START },
260  { 0, 0, -5, 0, 0, 0, 0, 3, 0, STATE_START },
261  { 0, 0, 0, 0, 0, 0, 0, 2, 14, STATE_FOLLOW },
262  { 0, 0, 0, 0, 0, 0, 0, 2, 15, STATE_FOLLOW },
263  { 0, 0, +6, 0, 0, 0, 0, 3, 0, STATE_START },
264  { 0, 0, -6, 0, 0, 0, 0, 3, 0, STATE_START },
265  { 0, 0, +2, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
266  { 0, 0, +2, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
267  { 0, 0, +2, 0, 0, 0, 0, 4, 1, STATE_DATA },
268  { 0, 0, +2, 0, 0, 0, 0, 5, 0, STATE_START },
269  { 0, 0, -2, 0, 0, 0, 0, 3, 2, STATE_FOLLOW },
270  { 0, 0, -2, 0, 0, 0, 0, 3, 3, STATE_FOLLOW },
271  { 0, 0, -2, 0, 0, 0, 0, 4, 1, STATE_DATA },
272  { 0, 0, -2, 0, 0, 0, 0, 5, 0, STATE_START },
273  { 0, 0, 0, 0, 0, 0, 0, 3, 4, STATE_DATA },
274  { 0, 0, 0, 0, 0, 0, 0, 3, 4, STATE_SIGN },
275  { 0, 0, 0, 0, 0, 0, 0, 3, 5, STATE_DATA },
276  { 0, 0, 0, 0, 0, 0, 0, 3, 5, STATE_SIGN },
277  { 0, 0, 0, +1, 0, 0, 0, 4, 1, STATE_DATA },
278  { 0, 0, 0, +1, 0, 0, 0, 5, 0, STATE_START },
279  { 0, 0, 0, -1, 0, 0, 0, 4, 1, STATE_DATA },
280  { 0, 0, 0, -1, 0, 0, 0, 5, 0, STATE_START },
281  { 0, 0, 0, 0, 0, 0, 0, 3, 6, STATE_DATA },
282  { 0, 0, 0, 0, 0, 0, 0, 3, 6, STATE_SIGN },
283  { 0, 0, 0, 0, 0, 0, 0, 3, 7, STATE_DATA },
284  { 0, 0, 0, 0, 0, 0, 0, 3, 7, STATE_SIGN },
285  { 0, 0, 0, +2, 0, 0, 0, 4, 1, STATE_DATA },
286  { 0, 0, 0, +2, 0, 0, 0, 5, 0, STATE_START },
287  { 0, 0, 0, -2, 0, 0, 0, 4, 1, STATE_DATA },
288  { 0, 0, 0, -2, 0, 0, 0, 5, 0, STATE_START },
289  { 0, 0, 0, 0, 0, 0, 0, 4, 4, STATE_FOLLOW },
290  { 0, 0, 0, 0, 0, 0, 0, 4, 5, STATE_FOLLOW },
291  { 0, 0, 0, 0, +1, 0, 0, 5, 0, STATE_START },
292  { 0, 0, 0, 0, -1, 0, 0, 5, 0, STATE_START },
293  { 0, 0, 0, 0, 0, 0, 0, 4, 6, STATE_FOLLOW },
294  { 0, 0, 0, 0, 0, 0, 0, 4, 7, STATE_FOLLOW },
295  { 0, 0, 0, 0, +2, 0, 0, 5, 0, STATE_START },
296  { 0, 0, 0, 0, -2, 0, 0, 5, 0, STATE_START },
297  { 0, 0, 0, 0, 0, 0, 0, 5, 2, STATE_DATA },
298  { 0, 0, 0, 0, 0, 0, 0, 5, 2, STATE_SIGN },
299  { 0, 0, 0, 0, 0, 0, 0, 5, 3, STATE_DATA },
300  { 0, 0, 0, 0, 0, 0, 0, 5, 3, STATE_SIGN },
301  { 0, 0, 0, 0, 0, 0, 0, 6, 2, STATE_FOLLOW },
302  { 0, 0, 0, 0, 0, 0, 0, 6, 3, STATE_FOLLOW },
303  { 0, 0, 0, 0, 0, 0, 0, 7, 1, STATE_DATA },
304  { 0, 0, 0, 0, 0, 0, 0, 8, 0, STATE_START },
305  { 0, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
306  { +1, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
307  { 0, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
308  { 0, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
309  { +2, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
310  { +3, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
311  { +1, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
312  { +1, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
313  { 0, 0, 0, 0, 0, 2, +1, 1, 2, STATE_FOLLOW },
314  { 0, 0, 0, 0, 0, 2, +1, 1, 3, STATE_FOLLOW },
315  { 0, 0, 0, 0, 0, 2, +1, 2, 1, STATE_DATA },
316  { 0, 0, 0, 0, 0, 2, +1, 3, 0, STATE_START },
317  { 0, 0, 0, 0, 0, 2, -1, 1, 2, STATE_FOLLOW },
318  { 0, 0, 0, 0, 0, 2, -1, 1, 3, STATE_FOLLOW },
319  { 0, 0, 0, 0, 0, 2, -1, 2, 1, STATE_DATA },
320  { 0, 0, 0, 0, 0, 2, -1, 3, 0, STATE_START },
321  { +4, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
322  { +5, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
323  { +2, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
324  { +2, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
325  { +6, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
326  { +7, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
327  { +3, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
328  { +3, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
329  { +1, 0, 0, 0, 0, 2, +1, 1, 2, STATE_FOLLOW },
330  { +1, 0, 0, 0, 0, 2, +1, 1, 3, STATE_FOLLOW },
331  { +1, 0, 0, 0, 0, 2, +1, 2, 1, STATE_DATA },
332  { +1, 0, 0, 0, 0, 2, +1, 3, 0, STATE_START },
333  { +1, 0, 0, 0, 0, 2, -1, 1, 2, STATE_FOLLOW },
334  { +1, 0, 0, 0, 0, 2, -1, 1, 3, STATE_FOLLOW },
335  { +1, 0, 0, 0, 0, 2, -1, 2, 1, STATE_DATA },
336  { +1, 0, 0, 0, 0, 2, -1, 3, 0, STATE_START },
337  { 0, 0, 0, 0, 0, 1, +1, 1, 4, STATE_FOLLOW },
338  { 0, 0, 0, 0, 0, 1, +1, 1, 5, STATE_FOLLOW },
339  { 0, +1, 0, 0, 0, 1, +1, 2, 0, STATE_START },
340  { 0, -1, 0, 0, 0, 1, +1, 2, 0, STATE_START },
341  { 0, 0, 0, 0, 0, 1, +1, 1, 6, STATE_FOLLOW },
342  { 0, 0, 0, 0, 0, 1, +1, 1, 7, STATE_FOLLOW },
343  { 0, +2, 0, 0, 0, 1, +1, 2, 0, STATE_START },
344  { 0, -2, 0, 0, 0, 1, +1, 2, 0, STATE_START },
345  { 0, 0, 0, 0, 0, 1, +1, 2, 2, STATE_DATA },
346  { 0, 0, 0, 0, 0, 1, +1, 2, 2, STATE_SIGN },
347  { 0, 0, 0, 0, 0, 1, +1, 2, 3, STATE_DATA },
348  { 0, 0, 0, 0, 0, 1, +1, 2, 3, STATE_SIGN },
349  { 0, 0, 0, 0, 0, 1, +1, 3, 2, STATE_FOLLOW },
350  { 0, 0, 0, 0, 0, 1, +1, 3, 3, STATE_FOLLOW },
351  { 0, 0, 0, 0, 0, 1, +1, 4, 1, STATE_DATA },
352  { 0, 0, 0, 0, 0, 1, +1, 5, 0, STATE_START },
353  { 0, 0, 0, 0, 0, 1, -1, 1, 4, STATE_FOLLOW },
354  { 0, 0, 0, 0, 0, 1, -1, 1, 5, STATE_FOLLOW },
355  { 0, +1, 0, 0, 0, 1, -1, 2, 0, STATE_START },
356  { 0, -1, 0, 0, 0, 1, -1, 2, 0, STATE_START },
357  { 0, 0, 0, 0, 0, 1, -1, 1, 6, STATE_FOLLOW },
358  { 0, 0, 0, 0, 0, 1, -1, 1, 7, STATE_FOLLOW },
359  { 0, +2, 0, 0, 0, 1, -1, 2, 0, STATE_START },
360  { 0, -2, 0, 0, 0, 1, -1, 2, 0, STATE_START },
361  { 0, 0, 0, 0, 0, 1, -1, 2, 2, STATE_DATA },
362  { 0, 0, 0, 0, 0, 1, -1, 2, 2, STATE_SIGN },
363  { 0, 0, 0, 0, 0, 1, -1, 2, 3, STATE_DATA },
364  { 0, 0, 0, 0, 0, 1, -1, 2, 3, STATE_SIGN },
365  { 0, 0, 0, 0, 0, 1, -1, 3, 2, STATE_FOLLOW },
366  { 0, 0, 0, 0, 0, 1, -1, 3, 3, STATE_FOLLOW },
367  { 0, 0, 0, 0, 0, 1, -1, 4, 1, STATE_DATA },
368  { 0, 0, 0, 0, 0, 1, -1, 5, 0, STATE_START },
369  { +8, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
370  { +9, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
371  { +4, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
372  { +4, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
373  { +10, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
374  { +11, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
375  { +5, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
376  { +5, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
377  { +2, 0, 0, 0, 0, 2, +1, 1, 2, STATE_FOLLOW },
378  { +2, 0, 0, 0, 0, 2, +1, 1, 3, STATE_FOLLOW },
379  { +2, 0, 0, 0, 0, 2, +1, 2, 1, STATE_DATA },
380  { +2, 0, 0, 0, 0, 2, +1, 3, 0, STATE_START },
381  { +2, 0, 0, 0, 0, 2, -1, 1, 2, STATE_FOLLOW },
382  { +2, 0, 0, 0, 0, 2, -1, 1, 3, STATE_FOLLOW },
383  { +2, 0, 0, 0, 0, 2, -1, 2, 1, STATE_DATA },
384  { +2, 0, 0, 0, 0, 2, -1, 3, 0, STATE_START },
385  { +12, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
386  { +13, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
387  { +6, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
388  { +6, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
389  { +14, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
390  { +15, 0, 0, 0, 0, 4, +1, 0, 0, STATE_FOLLOW },
391  { +7, 0, 0, 0, 0, 3, +1, 1, 0, STATE_START },
392  { +7, 0, 0, 0, 0, 3, -1, 1, 0, STATE_START },
393  { +3, 0, 0, 0, 0, 2, +1, 1, 2, STATE_FOLLOW },
394  { +3, 0, 0, 0, 0, 2, +1, 1, 3, STATE_FOLLOW },
395  { +3, 0, 0, 0, 0, 2, +1, 2, 1, STATE_DATA },
396  { +3, 0, 0, 0, 0, 2, +1, 3, 0, STATE_START },
397  { +3, 0, 0, 0, 0, 2, -1, 1, 2, STATE_FOLLOW },
398  { +3, 0, 0, 0, 0, 2, -1, 1, 3, STATE_FOLLOW },
399  { +3, 0, 0, 0, 0, 2, -1, 2, 1, STATE_DATA },
400  { +3, 0, 0, 0, 0, 2, -1, 3, 0, STATE_START },
401  { +1, 0, 0, 0, 0, 1, +1, 1, 4, STATE_FOLLOW },
402  { +1, 0, 0, 0, 0, 1, +1, 1, 5, STATE_FOLLOW },
403  { +1, +1, 0, 0, 0, 1, +1, 2, 0, STATE_START },
404  { +1, -1, 0, 0, 0, 1, +1, 2, 0, STATE_START },
405  { +1, 0, 0, 0, 0, 1, +1, 1, 6, STATE_FOLLOW },
406  { +1, 0, 0, 0, 0, 1, +1, 1, 7, STATE_FOLLOW },
407  { +1, +2, 0, 0, 0, 1, +1, 2, 0, STATE_START },
408  { +1, -2, 0, 0, 0, 1, +1, 2, 0, STATE_START },
409  { +1, 0, 0, 0, 0, 1, +1, 2, 2, STATE_DATA },
410  { +1, 0, 0, 0, 0, 1, +1, 2, 2, STATE_SIGN },
411  { +1, 0, 0, 0, 0, 1, +1, 2, 3, STATE_DATA },
412  { +1, 0, 0, 0, 0, 1, +1, 2, 3, STATE_SIGN },
413  { +1, 0, 0, 0, 0, 1, +1, 3, 2, STATE_FOLLOW },
414  { +1, 0, 0, 0, 0, 1, +1, 3, 3, STATE_FOLLOW },
415  { +1, 0, 0, 0, 0, 1, +1, 4, 1, STATE_DATA },
416  { +1, 0, 0, 0, 0, 1, +1, 5, 0, STATE_START },
417  { +1, 0, 0, 0, 0, 1, -1, 1, 4, STATE_FOLLOW },
418  { +1, 0, 0, 0, 0, 1, -1, 1, 5, STATE_FOLLOW },
419  { +1, +1, 0, 0, 0, 1, -1, 2, 0, STATE_START },
420  { +1, -1, 0, 0, 0, 1, -1, 2, 0, STATE_START },
421  { +1, 0, 0, 0, 0, 1, -1, 1, 6, STATE_FOLLOW },
422  { +1, 0, 0, 0, 0, 1, -1, 1, 7, STATE_FOLLOW },
423  { +1, +2, 0, 0, 0, 1, -1, 2, 0, STATE_START },
424  { +1, -2, 0, 0, 0, 1, -1, 2, 0, STATE_START },
425  { +1, 0, 0, 0, 0, 1, -1, 2, 2, STATE_DATA },
426  { +1, 0, 0, 0, 0, 1, -1, 2, 2, STATE_SIGN },
427  { +1, 0, 0, 0, 0, 1, -1, 2, 3, STATE_DATA },
428  { +1, 0, 0, 0, 0, 1, -1, 2, 3, STATE_SIGN },
429  { +1, 0, 0, 0, 0, 1, -1, 3, 2, STATE_FOLLOW },
430  { +1, 0, 0, 0, 0, 1, -1, 3, 3, STATE_FOLLOW },
431  { +1, 0, 0, 0, 0, 1, -1, 4, 1, STATE_DATA },
432  { +1, 0, 0, 0, 0, 1, -1, 5, 0, STATE_START },
433  { 0, 0, 0, 0, 0, 0, +1, 1, 8, STATE_FOLLOW },
434  { 0, 0, 0, 0, 0, 0, +1, 1, 9, STATE_FOLLOW },
435  { 0, +3, 0, 0, 0, 0, +1, 2, 0, STATE_START },
436  { 0, -3, 0, 0, 0, 0, +1, 2, 0, STATE_START },
437  { 0, 0, 0, 0, 0, 0, +1, 1, 10, STATE_FOLLOW },
438  { 0, 0, 0, 0, 0, 0, +1, 1, 11, STATE_FOLLOW },
439  { 0, +4, 0, 0, 0, 0, +1, 2, 0, STATE_START },
440  { 0, -4, 0, 0, 0, 0, +1, 2, 0, STATE_START },
441  { 0, +1, 0, 0, 0, 0, +1, 2, 2, STATE_FOLLOW },
442  { 0, +1, 0, 0, 0, 0, +1, 2, 3, STATE_FOLLOW },
443  { 0, +1, 0, 0, 0, 0, +1, 3, 1, STATE_DATA },
444  { 0, +1, 0, 0, 0, 0, +1, 4, 0, STATE_START },
445  { 0, -1, 0, 0, 0, 0, +1, 2, 2, STATE_FOLLOW },
446  { 0, -1, 0, 0, 0, 0, +1, 2, 3, STATE_FOLLOW },
447  { 0, -1, 0, 0, 0, 0, +1, 3, 1, STATE_DATA },
448  { 0, -1, 0, 0, 0, 0, +1, 4, 0, STATE_START },
449  { 0, 0, 0, 0, 0, 0, +1, 1, 12, STATE_FOLLOW },
450  { 0, 0, 0, 0, 0, 0, +1, 1, 13, STATE_FOLLOW },
451  { 0, +5, 0, 0, 0, 0, +1, 2, 0, STATE_START },
452  { 0, -5, 0, 0, 0, 0, +1, 2, 0, STATE_START },
453  { 0, 0, 0, 0, 0, 0, +1, 1, 14, STATE_FOLLOW },
454  { 0, 0, 0, 0, 0, 0, +1, 1, 15, STATE_FOLLOW },
455  { 0, +6, 0, 0, 0, 0, +1, 2, 0, STATE_START },
456  { 0, -6, 0, 0, 0, 0, +1, 2, 0, STATE_START },
457  { 0, +2, 0, 0, 0, 0, +1, 2, 2, STATE_FOLLOW },
458  { 0, +2, 0, 0, 0, 0, +1, 2, 3, STATE_FOLLOW },
459  { 0, +2, 0, 0, 0, 0, +1, 3, 1, STATE_DATA },
460  { 0, +2, 0, 0, 0, 0, +1, 4, 0, STATE_START },
461  { 0, -2, 0, 0, 0, 0, +1, 2, 2, STATE_FOLLOW },
462  { 0, -2, 0, 0, 0, 0, +1, 2, 3, STATE_FOLLOW },
463  { 0, -2, 0, 0, 0, 0, +1, 3, 1, STATE_DATA },
464  { 0, -2, 0, 0, 0, 0, +1, 4, 0, STATE_START },
465  { 0, 0, 0, 0, 0, 0, +1, 2, 4, STATE_DATA },
466  { 0, 0, 0, 0, 0, 0, +1, 2, 4, STATE_SIGN },
467  { 0, 0, 0, 0, 0, 0, +1, 2, 5, STATE_DATA },
468  { 0, 0, 0, 0, 0, 0, +1, 2, 5, STATE_SIGN },
469  { 0, 0, +1, 0, 0, 0, +1, 3, 1, STATE_DATA },
470  { 0, 0, +1, 0, 0, 0, +1, 4, 0, STATE_START },
471  { 0, 0, -1, 0, 0, 0, +1, 3, 1, STATE_DATA },
472  { 0, 0, -1, 0, 0, 0, +1, 4, 0, STATE_START },
473  { 0, 0, 0, 0, 0, 0, +1, 2, 6, STATE_DATA },
474  { 0, 0, 0, 0, 0, 0, +1, 2, 6, STATE_SIGN },
475  { 0, 0, 0, 0, 0, 0, +1, 2, 7, STATE_DATA },
476  { 0, 0, 0, 0, 0, 0, +1, 2, 7, STATE_SIGN },
477  { 0, 0, +2, 0, 0, 0, +1, 3, 1, STATE_DATA },
478  { 0, 0, +2, 0, 0, 0, +1, 4, 0, STATE_START },
479  { 0, 0, -2, 0, 0, 0, +1, 3, 1, STATE_DATA },
480  { 0, 0, -2, 0, 0, 0, +1, 4, 0, STATE_START },
481  { 0, 0, 0, 0, 0, 0, +1, 3, 4, STATE_FOLLOW },
482  { 0, 0, 0, 0, 0, 0, +1, 3, 5, STATE_FOLLOW },
483  { 0, 0, 0, +1, 0, 0, +1, 4, 0, STATE_START },
484  { 0, 0, 0, -1, 0, 0, +1, 4, 0, STATE_START },
485  { 0, 0, 0, 0, 0, 0, +1, 3, 6, STATE_FOLLOW },
486  { 0, 0, 0, 0, 0, 0, +1, 3, 7, STATE_FOLLOW },
487  { 0, 0, 0, +2, 0, 0, +1, 4, 0, STATE_START },
488  { 0, 0, 0, -2, 0, 0, +1, 4, 0, STATE_START },
489  { 0, 0, 0, 0, 0, 0, +1, 4, 2, STATE_DATA },
490  { 0, 0, 0, 0, 0, 0, +1, 4, 2, STATE_SIGN },
491  { 0, 0, 0, 0, 0, 0, +1, 4, 3, STATE_DATA },
492  { 0, 0, 0, 0, 0, 0, +1, 4, 3, STATE_SIGN },
493  { 0, 0, 0, 0, 0, 0, +1, 5, 2, STATE_FOLLOW },
494  { 0, 0, 0, 0, 0, 0, +1, 5, 3, STATE_FOLLOW },
495  { 0, 0, 0, 0, 0, 0, +1, 6, 1, STATE_DATA },
496  { 0, 0, 0, 0, 0, 0, +1, 7, 0, STATE_START },
497  { 0, 0, 0, 0, 0, 0, -1, 1, 8, STATE_FOLLOW },
498  { 0, 0, 0, 0, 0, 0, -1, 1, 9, STATE_FOLLOW },
499  { 0, +3, 0, 0, 0, 0, -1, 2, 0, STATE_START },
500  { 0, -3, 0, 0, 0, 0, -1, 2, 0, STATE_START },
501  { 0, 0, 0, 0, 0, 0, -1, 1, 10, STATE_FOLLOW },
502  { 0, 0, 0, 0, 0, 0, -1, 1, 11, STATE_FOLLOW },
503  { 0, +4, 0, 0, 0, 0, -1, 2, 0, STATE_START },
504  { 0, -4, 0, 0, 0, 0, -1, 2, 0, STATE_START },
505  { 0, +1, 0, 0, 0, 0, -1, 2, 2, STATE_FOLLOW },
506  { 0, +1, 0, 0, 0, 0, -1, 2, 3, STATE_FOLLOW },
507  { 0, +1, 0, 0, 0, 0, -1, 3, 1, STATE_DATA },
508  { 0, +1, 0, 0, 0, 0, -1, 4, 0, STATE_START },
509  { 0, -1, 0, 0, 0, 0, -1, 2, 2, STATE_FOLLOW },
510  { 0, -1, 0, 0, 0, 0, -1, 2, 3, STATE_FOLLOW },
511  { 0, -1, 0, 0, 0, 0, -1, 3, 1, STATE_DATA },
512  { 0, -1, 0, 0, 0, 0, -1, 4, 0, STATE_START },
513  { 0, 0, 0, 0, 0, 0, -1, 1, 12, STATE_FOLLOW },
514  { 0, 0, 0, 0, 0, 0, -1, 1, 13, STATE_FOLLOW },
515  { 0, +5, 0, 0, 0, 0, -1, 2, 0, STATE_START },
516  { 0, -5, 0, 0, 0, 0, -1, 2, 0, STATE_START },
517  { 0, 0, 0, 0, 0, 0, -1, 1, 14, STATE_FOLLOW },
518  { 0, 0, 0, 0, 0, 0, -1, 1, 15, STATE_FOLLOW },
519  { 0, +6, 0, 0, 0, 0, -1, 2, 0, STATE_START },
520  { 0, -6, 0, 0, 0, 0, -1, 2, 0, STATE_START },
521  { 0, +2, 0, 0, 0, 0, -1, 2, 2, STATE_FOLLOW },
522  { 0, +2, 0, 0, 0, 0, -1, 2, 3, STATE_FOLLOW },
523  { 0, +2, 0, 0, 0, 0, -1, 3, 1, STATE_DATA },
524  { 0, +2, 0, 0, 0, 0, -1, 4, 0, STATE_START },
525  { 0, -2, 0, 0, 0, 0, -1, 2, 2, STATE_FOLLOW },
526  { 0, -2, 0, 0, 0, 0, -1, 2, 3, STATE_FOLLOW },
527  { 0, -2, 0, 0, 0, 0, -1, 3, 1, STATE_DATA },
528  { 0, -2, 0, 0, 0, 0, -1, 4, 0, STATE_START },
529  { 0, 0, 0, 0, 0, 0, -1, 2, 4, STATE_DATA },
530  { 0, 0, 0, 0, 0, 0, -1, 2, 4, STATE_SIGN },
531  { 0, 0, 0, 0, 0, 0, -1, 2, 5, STATE_DATA },
532  { 0, 0, 0, 0, 0, 0, -1, 2, 5, STATE_SIGN },
533  { 0, 0, +1, 0, 0, 0, -1, 3, 1, STATE_DATA },
534  { 0, 0, +1, 0, 0, 0, -1, 4, 0, STATE_START },
535  { 0, 0, -1, 0, 0, 0, -1, 3, 1, STATE_DATA },
536  { 0, 0, -1, 0, 0, 0, -1, 4, 0, STATE_START },
537  { 0, 0, 0, 0, 0, 0, -1, 2, 6, STATE_DATA },
538  { 0, 0, 0, 0, 0, 0, -1, 2, 6, STATE_SIGN },
539  { 0, 0, 0, 0, 0, 0, -1, 2, 7, STATE_DATA },
540  { 0, 0, 0, 0, 0, 0, -1, 2, 7, STATE_SIGN },
541  { 0, 0, +2, 0, 0, 0, -1, 3, 1, STATE_DATA },
542  { 0, 0, +2, 0, 0, 0, -1, 4, 0, STATE_START },
543  { 0, 0, -2, 0, 0, 0, -1, 3, 1, STATE_DATA },
544  { 0, 0, -2, 0, 0, 0, -1, 4, 0, STATE_START },
545  { 0, 0, 0, 0, 0, 0, -1, 3, 4, STATE_FOLLOW },
546  { 0, 0, 0, 0, 0, 0, -1, 3, 5, STATE_FOLLOW },
547  { 0, 0, 0, +1, 0, 0, -1, 4, 0, STATE_START },
548  { 0, 0, 0, -1, 0, 0, -1, 4, 0, STATE_START },
549  { 0, 0, 0, 0, 0, 0, -1, 3, 6, STATE_FOLLOW },
550  { 0, 0, 0, 0, 0, 0, -1, 3, 7, STATE_FOLLOW },
551  { 0, 0, 0, +2, 0, 0, -1, 4, 0, STATE_START },
552  { 0, 0, 0, -2, 0, 0, -1, 4, 0, STATE_START },
553  { 0, 0, 0, 0, 0, 0, -1, 4, 2, STATE_DATA },
554  { 0, 0, 0, 0, 0, 0, -1, 4, 2, STATE_SIGN },
555  { 0, 0, 0, 0, 0, 0, -1, 4, 3, STATE_DATA },
556  { 0, 0, 0, 0, 0, 0, -1, 4, 3, STATE_SIGN },
557  { 0, 0, 0, 0, 0, 0, -1, 5, 2, STATE_FOLLOW },
558  { 0, 0, 0, 0, 0, 0, -1, 5, 3, STATE_FOLLOW },
559  { 0, 0, 0, 0, 0, 0, -1, 6, 1, STATE_DATA },
560  { 0, 0, 0, 0, 0, 0, -1, 7, 0, STATE_START },
561  { 0, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
562  { 0, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
563  { +1, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
564  { +1, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
565  { 0, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
566  { 0, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
567  { 0, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
568  { 0, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
569  { +2, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
570  { +2, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
571  { +3, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
572  { +3, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
573  { +1, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
574  { +1, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
575  { +1, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
576  { +1, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
577  { 0, 0, 0, 0, 0, 2, +1, 1, 2, STATE_DATA },
578  { 0, 0, 0, 0, 0, 2, +1, 1, 2, STATE_SIGN },
579  { 0, 0, 0, 0, 0, 2, +1, 1, 3, STATE_DATA },
580  { 0, 0, 0, 0, 0, 2, +1, 1, 3, STATE_SIGN },
581  { 0, 0, 0, 0, 0, 2, +1, 2, 2, STATE_FOLLOW },
582  { 0, 0, 0, 0, 0, 2, +1, 2, 3, STATE_FOLLOW },
583  { 0, 0, 0, 0, 0, 2, +1, 3, 1, STATE_DATA },
584  { 0, 0, 0, 0, 0, 2, +1, 4, 0, STATE_START },
585  { 0, 0, 0, 0, 0, 2, -1, 1, 2, STATE_DATA },
586  { 0, 0, 0, 0, 0, 2, -1, 1, 2, STATE_SIGN },
587  { 0, 0, 0, 0, 0, 2, -1, 1, 3, STATE_DATA },
588  { 0, 0, 0, 0, 0, 2, -1, 1, 3, STATE_SIGN },
589  { 0, 0, 0, 0, 0, 2, -1, 2, 2, STATE_FOLLOW },
590  { 0, 0, 0, 0, 0, 2, -1, 2, 3, STATE_FOLLOW },
591  { 0, 0, 0, 0, 0, 2, -1, 3, 1, STATE_DATA },
592  { 0, 0, 0, 0, 0, 2, -1, 4, 0, STATE_START },
593  { +4, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
594  { +4, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
595  { +5, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
596  { +5, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
597  { +2, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
598  { +2, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
599  { +2, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
600  { +2, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
601  { +6, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
602  { +6, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
603  { +7, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
604  { +7, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
605  { +3, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
606  { +3, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
607  { +3, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
608  { +3, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
609  { +1, 0, 0, 0, 0, 2, +1, 1, 2, STATE_DATA },
610  { +1, 0, 0, 0, 0, 2, +1, 1, 2, STATE_SIGN },
611  { +1, 0, 0, 0, 0, 2, +1, 1, 3, STATE_DATA },
612  { +1, 0, 0, 0, 0, 2, +1, 1, 3, STATE_SIGN },
613  { +1, 0, 0, 0, 0, 2, +1, 2, 2, STATE_FOLLOW },
614  { +1, 0, 0, 0, 0, 2, +1, 2, 3, STATE_FOLLOW },
615  { +1, 0, 0, 0, 0, 2, +1, 3, 1, STATE_DATA },
616  { +1, 0, 0, 0, 0, 2, +1, 4, 0, STATE_START },
617  { +1, 0, 0, 0, 0, 2, -1, 1, 2, STATE_DATA },
618  { +1, 0, 0, 0, 0, 2, -1, 1, 2, STATE_SIGN },
619  { +1, 0, 0, 0, 0, 2, -1, 1, 3, STATE_DATA },
620  { +1, 0, 0, 0, 0, 2, -1, 1, 3, STATE_SIGN },
621  { +1, 0, 0, 0, 0, 2, -1, 2, 2, STATE_FOLLOW },
622  { +1, 0, 0, 0, 0, 2, -1, 2, 3, STATE_FOLLOW },
623  { +1, 0, 0, 0, 0, 2, -1, 3, 1, STATE_DATA },
624  { +1, 0, 0, 0, 0, 2, -1, 4, 0, STATE_START },
625  { 0, 0, 0, 0, 0, 1, +1, 1, 4, STATE_DATA },
626  { 0, 0, 0, 0, 0, 1, +1, 1, 4, STATE_SIGN },
627  { 0, 0, 0, 0, 0, 1, +1, 1, 5, STATE_DATA },
628  { 0, 0, 0, 0, 0, 1, +1, 1, 5, STATE_SIGN },
629  { 0, +1, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
630  { 0, +1, 0, 0, 0, 1, +1, 3, 0, STATE_START },
631  { 0, -1, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
632  { 0, -1, 0, 0, 0, 1, +1, 3, 0, STATE_START },
633  { 0, 0, 0, 0, 0, 1, +1, 1, 6, STATE_DATA },
634  { 0, 0, 0, 0, 0, 1, +1, 1, 6, STATE_SIGN },
635  { 0, 0, 0, 0, 0, 1, +1, 1, 7, STATE_DATA },
636  { 0, 0, 0, 0, 0, 1, +1, 1, 7, STATE_SIGN },
637  { 0, +2, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
638  { 0, +2, 0, 0, 0, 1, +1, 3, 0, STATE_START },
639  { 0, -2, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
640  { 0, -2, 0, 0, 0, 1, +1, 3, 0, STATE_START },
641  { 0, 0, 0, 0, 0, 1, +1, 2, 4, STATE_FOLLOW },
642  { 0, 0, 0, 0, 0, 1, +1, 2, 5, STATE_FOLLOW },
643  { 0, 0, +1, 0, 0, 1, +1, 3, 0, STATE_START },
644  { 0, 0, -1, 0, 0, 1, +1, 3, 0, STATE_START },
645  { 0, 0, 0, 0, 0, 1, +1, 2, 6, STATE_FOLLOW },
646  { 0, 0, 0, 0, 0, 1, +1, 2, 7, STATE_FOLLOW },
647  { 0, 0, +2, 0, 0, 1, +1, 3, 0, STATE_START },
648  { 0, 0, -2, 0, 0, 1, +1, 3, 0, STATE_START },
649  { 0, 0, 0, 0, 0, 1, +1, 3, 2, STATE_DATA },
650  { 0, 0, 0, 0, 0, 1, +1, 3, 2, STATE_SIGN },
651  { 0, 0, 0, 0, 0, 1, +1, 3, 3, STATE_DATA },
652  { 0, 0, 0, 0, 0, 1, +1, 3, 3, STATE_SIGN },
653  { 0, 0, 0, 0, 0, 1, +1, 4, 2, STATE_FOLLOW },
654  { 0, 0, 0, 0, 0, 1, +1, 4, 3, STATE_FOLLOW },
655  { 0, 0, 0, 0, 0, 1, +1, 5, 1, STATE_DATA },
656  { 0, 0, 0, 0, 0, 1, +1, 6, 0, STATE_START },
657  { 0, 0, 0, 0, 0, 1, -1, 1, 4, STATE_DATA },
658  { 0, 0, 0, 0, 0, 1, -1, 1, 4, STATE_SIGN },
659  { 0, 0, 0, 0, 0, 1, -1, 1, 5, STATE_DATA },
660  { 0, 0, 0, 0, 0, 1, -1, 1, 5, STATE_SIGN },
661  { 0, +1, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
662  { 0, +1, 0, 0, 0, 1, -1, 3, 0, STATE_START },
663  { 0, -1, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
664  { 0, -1, 0, 0, 0, 1, -1, 3, 0, STATE_START },
665  { 0, 0, 0, 0, 0, 1, -1, 1, 6, STATE_DATA },
666  { 0, 0, 0, 0, 0, 1, -1, 1, 6, STATE_SIGN },
667  { 0, 0, 0, 0, 0, 1, -1, 1, 7, STATE_DATA },
668  { 0, 0, 0, 0, 0, 1, -1, 1, 7, STATE_SIGN },
669  { 0, +2, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
670  { 0, +2, 0, 0, 0, 1, -1, 3, 0, STATE_START },
671  { 0, -2, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
672  { 0, -2, 0, 0, 0, 1, -1, 3, 0, STATE_START },
673  { 0, 0, 0, 0, 0, 1, -1, 2, 4, STATE_FOLLOW },
674  { 0, 0, 0, 0, 0, 1, -1, 2, 5, STATE_FOLLOW },
675  { 0, 0, +1, 0, 0, 1, -1, 3, 0, STATE_START },
676  { 0, 0, -1, 0, 0, 1, -1, 3, 0, STATE_START },
677  { 0, 0, 0, 0, 0, 1, -1, 2, 6, STATE_FOLLOW },
678  { 0, 0, 0, 0, 0, 1, -1, 2, 7, STATE_FOLLOW },
679  { 0, 0, +2, 0, 0, 1, -1, 3, 0, STATE_START },
680  { 0, 0, -2, 0, 0, 1, -1, 3, 0, STATE_START },
681  { 0, 0, 0, 0, 0, 1, -1, 3, 2, STATE_DATA },
682  { 0, 0, 0, 0, 0, 1, -1, 3, 2, STATE_SIGN },
683  { 0, 0, 0, 0, 0, 1, -1, 3, 3, STATE_DATA },
684  { 0, 0, 0, 0, 0, 1, -1, 3, 3, STATE_SIGN },
685  { 0, 0, 0, 0, 0, 1, -1, 4, 2, STATE_FOLLOW },
686  { 0, 0, 0, 0, 0, 1, -1, 4, 3, STATE_FOLLOW },
687  { 0, 0, 0, 0, 0, 1, -1, 5, 1, STATE_DATA },
688  { 0, 0, 0, 0, 0, 1, -1, 6, 0, STATE_START },
689  { +8, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
690  { +8, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
691  { +9, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
692  { +9, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
693  { +4, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
694  { +4, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
695  { +4, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
696  { +4, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
697  { +10, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
698  { +10, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
699  { +11, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
700  { +11, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
701  { +5, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
702  { +5, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
703  { +5, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
704  { +5, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
705  { +2, 0, 0, 0, 0, 2, +1, 1, 2, STATE_DATA },
706  { +2, 0, 0, 0, 0, 2, +1, 1, 2, STATE_SIGN },
707  { +2, 0, 0, 0, 0, 2, +1, 1, 3, STATE_DATA },
708  { +2, 0, 0, 0, 0, 2, +1, 1, 3, STATE_SIGN },
709  { +2, 0, 0, 0, 0, 2, +1, 2, 2, STATE_FOLLOW },
710  { +2, 0, 0, 0, 0, 2, +1, 2, 3, STATE_FOLLOW },
711  { +2, 0, 0, 0, 0, 2, +1, 3, 1, STATE_DATA },
712  { +2, 0, 0, 0, 0, 2, +1, 4, 0, STATE_START },
713  { +2, 0, 0, 0, 0, 2, -1, 1, 2, STATE_DATA },
714  { +2, 0, 0, 0, 0, 2, -1, 1, 2, STATE_SIGN },
715  { +2, 0, 0, 0, 0, 2, -1, 1, 3, STATE_DATA },
716  { +2, 0, 0, 0, 0, 2, -1, 1, 3, STATE_SIGN },
717  { +2, 0, 0, 0, 0, 2, -1, 2, 2, STATE_FOLLOW },
718  { +2, 0, 0, 0, 0, 2, -1, 2, 3, STATE_FOLLOW },
719  { +2, 0, 0, 0, 0, 2, -1, 3, 1, STATE_DATA },
720  { +2, 0, 0, 0, 0, 2, -1, 4, 0, STATE_START },
721  { +12, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
722  { +12, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
723  { +13, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
724  { +13, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
725  { +6, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
726  { +6, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
727  { +6, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
728  { +6, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
729  { +14, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
730  { +14, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
731  { +15, 0, 0, 0, 0, 4, +1, 0, 0, STATE_DATA },
732  { +15, 0, 0, 0, 0, 4, +1, 0, 0, STATE_SIGN },
733  { +7, 0, 0, 0, 0, 3, +1, 1, 1, STATE_DATA },
734  { +7, 0, 0, 0, 0, 3, +1, 2, 0, STATE_START },
735  { +7, 0, 0, 0, 0, 3, -1, 1, 1, STATE_DATA },
736  { +7, 0, 0, 0, 0, 3, -1, 2, 0, STATE_START },
737  { +3, 0, 0, 0, 0, 2, +1, 1, 2, STATE_DATA },
738  { +3, 0, 0, 0, 0, 2, +1, 1, 2, STATE_SIGN },
739  { +3, 0, 0, 0, 0, 2, +1, 1, 3, STATE_DATA },
740  { +3, 0, 0, 0, 0, 2, +1, 1, 3, STATE_SIGN },
741  { +3, 0, 0, 0, 0, 2, +1, 2, 2, STATE_FOLLOW },
742  { +3, 0, 0, 0, 0, 2, +1, 2, 3, STATE_FOLLOW },
743  { +3, 0, 0, 0, 0, 2, +1, 3, 1, STATE_DATA },
744  { +3, 0, 0, 0, 0, 2, +1, 4, 0, STATE_START },
745  { +3, 0, 0, 0, 0, 2, -1, 1, 2, STATE_DATA },
746  { +3, 0, 0, 0, 0, 2, -1, 1, 2, STATE_SIGN },
747  { +3, 0, 0, 0, 0, 2, -1, 1, 3, STATE_DATA },
748  { +3, 0, 0, 0, 0, 2, -1, 1, 3, STATE_SIGN },
749  { +3, 0, 0, 0, 0, 2, -1, 2, 2, STATE_FOLLOW },
750  { +3, 0, 0, 0, 0, 2, -1, 2, 3, STATE_FOLLOW },
751  { +3, 0, 0, 0, 0, 2, -1, 3, 1, STATE_DATA },
752  { +3, 0, 0, 0, 0, 2, -1, 4, 0, STATE_START },
753  { +1, 0, 0, 0, 0, 1, +1, 1, 4, STATE_DATA },
754  { +1, 0, 0, 0, 0, 1, +1, 1, 4, STATE_SIGN },
755  { +1, 0, 0, 0, 0, 1, +1, 1, 5, STATE_DATA },
756  { +1, 0, 0, 0, 0, 1, +1, 1, 5, STATE_SIGN },
757  { +1, +1, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
758  { +1, +1, 0, 0, 0, 1, +1, 3, 0, STATE_START },
759  { +1, -1, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
760  { +1, -1, 0, 0, 0, 1, +1, 3, 0, STATE_START },
761  { +1, 0, 0, 0, 0, 1, +1, 1, 6, STATE_DATA },
762  { +1, 0, 0, 0, 0, 1, +1, 1, 6, STATE_SIGN },
763  { +1, 0, 0, 0, 0, 1, +1, 1, 7, STATE_DATA },
764  { +1, 0, 0, 0, 0, 1, +1, 1, 7, STATE_SIGN },
765  { +1, +2, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
766  { +1, +2, 0, 0, 0, 1, +1, 3, 0, STATE_START },
767  { +1, -2, 0, 0, 0, 1, +1, 2, 1, STATE_DATA },
768  { +1, -2, 0, 0, 0, 1, +1, 3, 0, STATE_START },
769  { +1, 0, 0, 0, 0, 1, +1, 2, 4, STATE_FOLLOW },
770  { +1, 0, 0, 0, 0, 1, +1, 2, 5, STATE_FOLLOW },
771  { +1, 0, +1, 0, 0, 1, +1, 3, 0, STATE_START },
772  { +1, 0, -1, 0, 0, 1, +1, 3, 0, STATE_START },
773  { +1, 0, 0, 0, 0, 1, +1, 2, 6, STATE_FOLLOW },
774  { +1, 0, 0, 0, 0, 1, +1, 2, 7, STATE_FOLLOW },
775  { +1, 0, +2, 0, 0, 1, +1, 3, 0, STATE_START },
776  { +1, 0, -2, 0, 0, 1, +1, 3, 0, STATE_START },
777  { +1, 0, 0, 0, 0, 1, +1, 3, 2, STATE_DATA },
778  { +1, 0, 0, 0, 0, 1, +1, 3, 2, STATE_SIGN },
779  { +1, 0, 0, 0, 0, 1, +1, 3, 3, STATE_DATA },
780  { +1, 0, 0, 0, 0, 1, +1, 3, 3, STATE_SIGN },
781  { +1, 0, 0, 0, 0, 1, +1, 4, 2, STATE_FOLLOW },
782  { +1, 0, 0, 0, 0, 1, +1, 4, 3, STATE_FOLLOW },
783  { +1, 0, 0, 0, 0, 1, +1, 5, 1, STATE_DATA },
784  { +1, 0, 0, 0, 0, 1, +1, 6, 0, STATE_START },
785  { +1, 0, 0, 0, 0, 1, -1, 1, 4, STATE_DATA },
786  { +1, 0, 0, 0, 0, 1, -1, 1, 4, STATE_SIGN },
787  { +1, 0, 0, 0, 0, 1, -1, 1, 5, STATE_DATA },
788  { +1, 0, 0, 0, 0, 1, -1, 1, 5, STATE_SIGN },
789  { +1, +1, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
790  { +1, +1, 0, 0, 0, 1, -1, 3, 0, STATE_START },
791  { +1, -1, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
792  { +1, -1, 0, 0, 0, 1, -1, 3, 0, STATE_START },
793  { +1, 0, 0, 0, 0, 1, -1, 1, 6, STATE_DATA },
794  { +1, 0, 0, 0, 0, 1, -1, 1, 6, STATE_SIGN },
795  { +1, 0, 0, 0, 0, 1, -1, 1, 7, STATE_DATA },
796  { +1, 0, 0, 0, 0, 1, -1, 1, 7, STATE_SIGN },
797  { +1, +2, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
798  { +1, +2, 0, 0, 0, 1, -1, 3, 0, STATE_START },
799  { +1, -2, 0, 0, 0, 1, -1, 2, 1, STATE_DATA },
800  { +1, -2, 0, 0, 0, 1, -1, 3, 0, STATE_START },
801  { +1, 0, 0, 0, 0, 1, -1, 2, 4, STATE_FOLLOW },
802  { +1, 0, 0, 0, 0, 1, -1, 2, 5, STATE_FOLLOW },
803  { +1, 0, +1, 0, 0, 1, -1, 3, 0, STATE_START },
804  { +1, 0, -1, 0, 0, 1, -1, 3, 0, STATE_START },
805  { +1, 0, 0, 0, 0, 1, -1, 2, 6, STATE_FOLLOW },
806  { +1, 0, 0, 0, 0, 1, -1, 2, 7, STATE_FOLLOW },
807  { +1, 0, +2, 0, 0, 1, -1, 3, 0, STATE_START },
808  { +1, 0, -2, 0, 0, 1, -1, 3, 0, STATE_START },
809  { +1, 0, 0, 0, 0, 1, -1, 3, 2, STATE_DATA },
810  { +1, 0, 0, 0, 0, 1, -1, 3, 2, STATE_SIGN },
811  { +1, 0, 0, 0, 0, 1, -1, 3, 3, STATE_DATA },
812  { +1, 0, 0, 0, 0, 1, -1, 3, 3, STATE_SIGN },
813  { +1, 0, 0, 0, 0, 1, -1, 4, 2, STATE_FOLLOW },
814  { +1, 0, 0, 0, 0, 1, -1, 4, 3, STATE_FOLLOW },
815  { +1, 0, 0, 0, 0, 1, -1, 5, 1, STATE_DATA },
816  { +1, 0, 0, 0, 0, 1, -1, 6, 0, STATE_START },
817  { 0, 0, 0, 0, 0, 0, +1, 1, 8, STATE_DATA },
818  { 0, 0, 0, 0, 0, 0, +1, 1, 8, STATE_SIGN },
819  { 0, 0, 0, 0, 0, 0, +1, 1, 9, STATE_DATA },
820  { 0, 0, 0, 0, 0, 0, +1, 1, 9, STATE_SIGN },
821  { 0, +3, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
822  { 0, +3, 0, 0, 0, 0, +1, 3, 0, STATE_START },
823  { 0, -3, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
824  { 0, -3, 0, 0, 0, 0, +1, 3, 0, STATE_START },
825  { 0, 0, 0, 0, 0, 0, +1, 1, 10, STATE_DATA },
826  { 0, 0, 0, 0, 0, 0, +1, 1, 10, STATE_SIGN },
827  { 0, 0, 0, 0, 0, 0, +1, 1, 11, STATE_DATA },
828  { 0, 0, 0, 0, 0, 0, +1, 1, 11, STATE_SIGN },
829  { 0, +4, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
830  { 0, +4, 0, 0, 0, 0, +1, 3, 0, STATE_START },
831  { 0, -4, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
832  { 0, -4, 0, 0, 0, 0, +1, 3, 0, STATE_START },
833  { 0, +1, 0, 0, 0, 0, +1, 2, 2, STATE_DATA },
834  { 0, +1, 0, 0, 0, 0, +1, 2, 2, STATE_SIGN },
835  { 0, +1, 0, 0, 0, 0, +1, 2, 3, STATE_DATA },
836  { 0, +1, 0, 0, 0, 0, +1, 2, 3, STATE_SIGN },
837  { 0, +1, 0, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
838  { 0, +1, 0, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
839  { 0, +1, 0, 0, 0, 0, +1, 4, 1, STATE_DATA },
840  { 0, +1, 0, 0, 0, 0, +1, 5, 0, STATE_START },
841  { 0, -1, 0, 0, 0, 0, +1, 2, 2, STATE_DATA },
842  { 0, -1, 0, 0, 0, 0, +1, 2, 2, STATE_SIGN },
843  { 0, -1, 0, 0, 0, 0, +1, 2, 3, STATE_DATA },
844  { 0, -1, 0, 0, 0, 0, +1, 2, 3, STATE_SIGN },
845  { 0, -1, 0, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
846  { 0, -1, 0, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
847  { 0, -1, 0, 0, 0, 0, +1, 4, 1, STATE_DATA },
848  { 0, -1, 0, 0, 0, 0, +1, 5, 0, STATE_START },
849  { 0, 0, 0, 0, 0, 0, +1, 1, 12, STATE_DATA },
850  { 0, 0, 0, 0, 0, 0, +1, 1, 12, STATE_SIGN },
851  { 0, 0, 0, 0, 0, 0, +1, 1, 13, STATE_DATA },
852  { 0, 0, 0, 0, 0, 0, +1, 1, 13, STATE_SIGN },
853  { 0, +5, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
854  { 0, +5, 0, 0, 0, 0, +1, 3, 0, STATE_START },
855  { 0, -5, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
856  { 0, -5, 0, 0, 0, 0, +1, 3, 0, STATE_START },
857  { 0, 0, 0, 0, 0, 0, +1, 1, 14, STATE_DATA },
858  { 0, 0, 0, 0, 0, 0, +1, 1, 14, STATE_SIGN },
859  { 0, 0, 0, 0, 0, 0, +1, 1, 15, STATE_DATA },
860  { 0, 0, 0, 0, 0, 0, +1, 1, 15, STATE_SIGN },
861  { 0, +6, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
862  { 0, +6, 0, 0, 0, 0, +1, 3, 0, STATE_START },
863  { 0, -6, 0, 0, 0, 0, +1, 2, 1, STATE_DATA },
864  { 0, -6, 0, 0, 0, 0, +1, 3, 0, STATE_START },
865  { 0, +2, 0, 0, 0, 0, +1, 2, 2, STATE_DATA },
866  { 0, +2, 0, 0, 0, 0, +1, 2, 2, STATE_SIGN },
867  { 0, +2, 0, 0, 0, 0, +1, 2, 3, STATE_DATA },
868  { 0, +2, 0, 0, 0, 0, +1, 2, 3, STATE_SIGN },
869  { 0, +2, 0, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
870  { 0, +2, 0, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
871  { 0, +2, 0, 0, 0, 0, +1, 4, 1, STATE_DATA },
872  { 0, +2, 0, 0, 0, 0, +1, 5, 0, STATE_START },
873  { 0, -2, 0, 0, 0, 0, +1, 2, 2, STATE_DATA },
874  { 0, -2, 0, 0, 0, 0, +1, 2, 2, STATE_SIGN },
875  { 0, -2, 0, 0, 0, 0, +1, 2, 3, STATE_DATA },
876  { 0, -2, 0, 0, 0, 0, +1, 2, 3, STATE_SIGN },
877  { 0, -2, 0, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
878  { 0, -2, 0, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
879  { 0, -2, 0, 0, 0, 0, +1, 4, 1, STATE_DATA },
880  { 0, -2, 0, 0, 0, 0, +1, 5, 0, STATE_START },
881  { 0, 0, 0, 0, 0, 0, +1, 2, 8, STATE_FOLLOW },
882  { 0, 0, 0, 0, 0, 0, +1, 2, 9, STATE_FOLLOW },
883  { 0, 0, +3, 0, 0, 0, +1, 3, 0, STATE_START },
884  { 0, 0, -3, 0, 0, 0, +1, 3, 0, STATE_START },
885  { 0, 0, 0, 0, 0, 0, +1, 2, 10, STATE_FOLLOW },
886  { 0, 0, 0, 0, 0, 0, +1, 2, 11, STATE_FOLLOW },
887  { 0, 0, +4, 0, 0, 0, +1, 3, 0, STATE_START },
888  { 0, 0, -4, 0, 0, 0, +1, 3, 0, STATE_START },
889  { 0, 0, +1, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
890  { 0, 0, +1, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
891  { 0, 0, +1, 0, 0, 0, +1, 4, 1, STATE_DATA },
892  { 0, 0, +1, 0, 0, 0, +1, 5, 0, STATE_START },
893  { 0, 0, -1, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
894  { 0, 0, -1, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
895  { 0, 0, -1, 0, 0, 0, +1, 4, 1, STATE_DATA },
896  { 0, 0, -1, 0, 0, 0, +1, 5, 0, STATE_START },
897  { 0, 0, 0, 0, 0, 0, +1, 2, 12, STATE_FOLLOW },
898  { 0, 0, 0, 0, 0, 0, +1, 2, 13, STATE_FOLLOW },
899  { 0, 0, +5, 0, 0, 0, +1, 3, 0, STATE_START },
900  { 0, 0, -5, 0, 0, 0, +1, 3, 0, STATE_START },
901  { 0, 0, 0, 0, 0, 0, +1, 2, 14, STATE_FOLLOW },
902  { 0, 0, 0, 0, 0, 0, +1, 2, 15, STATE_FOLLOW },
903  { 0, 0, +6, 0, 0, 0, +1, 3, 0, STATE_START },
904  { 0, 0, -6, 0, 0, 0, +1, 3, 0, STATE_START },
905  { 0, 0, +2, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
906  { 0, 0, +2, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
907  { 0, 0, +2, 0, 0, 0, +1, 4, 1, STATE_DATA },
908  { 0, 0, +2, 0, 0, 0, +1, 5, 0, STATE_START },
909  { 0, 0, -2, 0, 0, 0, +1, 3, 2, STATE_FOLLOW },
910  { 0, 0, -2, 0, 0, 0, +1, 3, 3, STATE_FOLLOW },
911  { 0, 0, -2, 0, 0, 0, +1, 4, 1, STATE_DATA },
912  { 0, 0, -2, 0, 0, 0, +1, 5, 0, STATE_START },
913  { 0, 0, 0, 0, 0, 0, +1, 3, 4, STATE_DATA },
914  { 0, 0, 0, 0, 0, 0, +1, 3, 4, STATE_SIGN },
915  { 0, 0, 0, 0, 0, 0, +1, 3, 5, STATE_DATA },
916  { 0, 0, 0, 0, 0, 0, +1, 3, 5, STATE_SIGN },
917  { 0, 0, 0, +1, 0, 0, +1, 4, 1, STATE_DATA },
918  { 0, 0, 0, +1, 0, 0, +1, 5, 0, STATE_START },
919  { 0, 0, 0, -1, 0, 0, +1, 4, 1, STATE_DATA },
920  { 0, 0, 0, -1, 0, 0, +1, 5, 0, STATE_START },
921  { 0, 0, 0, 0, 0, 0, +1, 3, 6, STATE_DATA },
922  { 0, 0, 0, 0, 0, 0, +1, 3, 6, STATE_SIGN },
923  { 0, 0, 0, 0, 0, 0, +1, 3, 7, STATE_DATA },
924  { 0, 0, 0, 0, 0, 0, +1, 3, 7, STATE_SIGN },
925  { 0, 0, 0, +2, 0, 0, +1, 4, 1, STATE_DATA },
926  { 0, 0, 0, +2, 0, 0, +1, 5, 0, STATE_START },
927  { 0, 0, 0, -2, 0, 0, +1, 4, 1, STATE_DATA },
928  { 0, 0, 0, -2, 0, 0, +1, 5, 0, STATE_START },
929  { 0, 0, 0, 0, 0, 0, +1, 4, 4, STATE_FOLLOW },
930  { 0, 0, 0, 0, 0, 0, +1, 4, 5, STATE_FOLLOW },
931  { 0, 0, 0, 0, +1, 0, +1, 5, 0, STATE_START },
932  { 0, 0, 0, 0, -1, 0, +1, 5, 0, STATE_START },
933  { 0, 0, 0, 0, 0, 0, +1, 4, 6, STATE_FOLLOW },
934  { 0, 0, 0, 0, 0, 0, +1, 4, 7, STATE_FOLLOW },
935  { 0, 0, 0, 0, +2, 0, +1, 5, 0, STATE_START },
936  { 0, 0, 0, 0, -2, 0, +1, 5, 0, STATE_START },
937  { 0, 0, 0, 0, 0, 0, +1, 5, 2, STATE_DATA },
938  { 0, 0, 0, 0, 0, 0, +1, 5, 2, STATE_SIGN },
939  { 0, 0, 0, 0, 0, 0, +1, 5, 3, STATE_DATA },
940  { 0, 0, 0, 0, 0, 0, +1, 5, 3, STATE_SIGN },
941  { 0, 0, 0, 0, 0, 0, +1, 6, 2, STATE_FOLLOW },
942  { 0, 0, 0, 0, 0, 0, +1, 6, 3, STATE_FOLLOW },
943  { 0, 0, 0, 0, 0, 0, +1, 7, 1, STATE_DATA },
944  { 0, 0, 0, 0, 0, 0, +1, 8, 0, STATE_START },
945  { 0, 0, 0, 0, 0, 0, -1, 1, 8, STATE_DATA },
946  { 0, 0, 0, 0, 0, 0, -1, 1, 8, STATE_SIGN },
947  { 0, 0, 0, 0, 0, 0, -1, 1, 9, STATE_DATA },
948  { 0, 0, 0, 0, 0, 0, -1, 1, 9, STATE_SIGN },
949  { 0, +3, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
950  { 0, +3, 0, 0, 0, 0, -1, 3, 0, STATE_START },
951  { 0, -3, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
952  { 0, -3, 0, 0, 0, 0, -1, 3, 0, STATE_START },
953  { 0, 0, 0, 0, 0, 0, -1, 1, 10, STATE_DATA },
954  { 0, 0, 0, 0, 0, 0, -1, 1, 10, STATE_SIGN },
955  { 0, 0, 0, 0, 0, 0, -1, 1, 11, STATE_DATA },
956  { 0, 0, 0, 0, 0, 0, -1, 1, 11, STATE_SIGN },
957  { 0, +4, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
958  { 0, +4, 0, 0, 0, 0, -1, 3, 0, STATE_START },
959  { 0, -4, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
960  { 0, -4, 0, 0, 0, 0, -1, 3, 0, STATE_START },
961  { 0, +1, 0, 0, 0, 0, -1, 2, 2, STATE_DATA },
962  { 0, +1, 0, 0, 0, 0, -1, 2, 2, STATE_SIGN },
963  { 0, +1, 0, 0, 0, 0, -1, 2, 3, STATE_DATA },
964  { 0, +1, 0, 0, 0, 0, -1, 2, 3, STATE_SIGN },
965  { 0, +1, 0, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
966  { 0, +1, 0, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
967  { 0, +1, 0, 0, 0, 0, -1, 4, 1, STATE_DATA },
968  { 0, +1, 0, 0, 0, 0, -1, 5, 0, STATE_START },
969  { 0, -1, 0, 0, 0, 0, -1, 2, 2, STATE_DATA },
970  { 0, -1, 0, 0, 0, 0, -1, 2, 2, STATE_SIGN },
971  { 0, -1, 0, 0, 0, 0, -1, 2, 3, STATE_DATA },
972  { 0, -1, 0, 0, 0, 0, -1, 2, 3, STATE_SIGN },
973  { 0, -1, 0, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
974  { 0, -1, 0, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
975  { 0, -1, 0, 0, 0, 0, -1, 4, 1, STATE_DATA },
976  { 0, -1, 0, 0, 0, 0, -1, 5, 0, STATE_START },
977  { 0, 0, 0, 0, 0, 0, -1, 1, 12, STATE_DATA },
978  { 0, 0, 0, 0, 0, 0, -1, 1, 12, STATE_SIGN },
979  { 0, 0, 0, 0, 0, 0, -1, 1, 13, STATE_DATA },
980  { 0, 0, 0, 0, 0, 0, -1, 1, 13, STATE_SIGN },
981  { 0, +5, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
982  { 0, +5, 0, 0, 0, 0, -1, 3, 0, STATE_START },
983  { 0, -5, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
984  { 0, -5, 0, 0, 0, 0, -1, 3, 0, STATE_START },
985  { 0, 0, 0, 0, 0, 0, -1, 1, 14, STATE_DATA },
986  { 0, 0, 0, 0, 0, 0, -1, 1, 14, STATE_SIGN },
987  { 0, 0, 0, 0, 0, 0, -1, 1, 15, STATE_DATA },
988  { 0, 0, 0, 0, 0, 0, -1, 1, 15, STATE_SIGN },
989  { 0, +6, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
990  { 0, +6, 0, 0, 0, 0, -1, 3, 0, STATE_START },
991  { 0, -6, 0, 0, 0, 0, -1, 2, 1, STATE_DATA },
992  { 0, -6, 0, 0, 0, 0, -1, 3, 0, STATE_START },
993  { 0, +2, 0, 0, 0, 0, -1, 2, 2, STATE_DATA },
994  { 0, +2, 0, 0, 0, 0, -1, 2, 2, STATE_SIGN },
995  { 0, +2, 0, 0, 0, 0, -1, 2, 3, STATE_DATA },
996  { 0, +2, 0, 0, 0, 0, -1, 2, 3, STATE_SIGN },
997  { 0, +2, 0, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
998  { 0, +2, 0, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
999  { 0, +2, 0, 0, 0, 0, -1, 4, 1, STATE_DATA },
1000  { 0, +2, 0, 0, 0, 0, -1, 5, 0, STATE_START },
1001  { 0, -2, 0, 0, 0, 0, -1, 2, 2, STATE_DATA },
1002  { 0, -2, 0, 0, 0, 0, -1, 2, 2, STATE_SIGN },
1003  { 0, -2, 0, 0, 0, 0, -1, 2, 3, STATE_DATA },
1004  { 0, -2, 0, 0, 0, 0, -1, 2, 3, STATE_SIGN },
1005  { 0, -2, 0, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
1006  { 0, -2, 0, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
1007  { 0, -2, 0, 0, 0, 0, -1, 4, 1, STATE_DATA },
1008  { 0, -2, 0, 0, 0, 0, -1, 5, 0, STATE_START },
1009  { 0, 0, 0, 0, 0, 0, -1, 2, 8, STATE_FOLLOW },
1010  { 0, 0, 0, 0, 0, 0, -1, 2, 9, STATE_FOLLOW },
1011  { 0, 0, +3, 0, 0, 0, -1, 3, 0, STATE_START },
1012  { 0, 0, -3, 0, 0, 0, -1, 3, 0, STATE_START },
1013  { 0, 0, 0, 0, 0, 0, -1, 2, 10, STATE_FOLLOW },
1014  { 0, 0, 0, 0, 0, 0, -1, 2, 11, STATE_FOLLOW },
1015  { 0, 0, +4, 0, 0, 0, -1, 3, 0, STATE_START },
1016  { 0, 0, -4, 0, 0, 0, -1, 3, 0, STATE_START },
1017  { 0, 0, +1, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
1018  { 0, 0, +1, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
1019  { 0, 0, +1, 0, 0, 0, -1, 4, 1, STATE_DATA },
1020  { 0, 0, +1, 0, 0, 0, -1, 5, 0, STATE_START },
1021  { 0, 0, -1, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
1022  { 0, 0, -1, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
1023  { 0, 0, -1, 0, 0, 0, -1, 4, 1, STATE_DATA },
1024  { 0, 0, -1, 0, 0, 0, -1, 5, 0, STATE_START },
1025  { 0, 0, 0, 0, 0, 0, -1, 2, 12, STATE_FOLLOW },
1026  { 0, 0, 0, 0, 0, 0, -1, 2, 13, STATE_FOLLOW },
1027  { 0, 0, +5, 0, 0, 0, -1, 3, 0, STATE_START },
1028  { 0, 0, -5, 0, 0, 0, -1, 3, 0, STATE_START },
1029  { 0, 0, 0, 0, 0, 0, -1, 2, 14, STATE_FOLLOW },
1030  { 0, 0, 0, 0, 0, 0, -1, 2, 15, STATE_FOLLOW },
1031  { 0, 0, +6, 0, 0, 0, -1, 3, 0, STATE_START },
1032  { 0, 0, -6, 0, 0, 0, -1, 3, 0, STATE_START },
1033  { 0, 0, +2, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
1034  { 0, 0, +2, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
1035  { 0, 0, +2, 0, 0, 0, -1, 4, 1, STATE_DATA },
1036  { 0, 0, +2, 0, 0, 0, -1, 5, 0, STATE_START },
1037  { 0, 0, -2, 0, 0, 0, -1, 3, 2, STATE_FOLLOW },
1038  { 0, 0, -2, 0, 0, 0, -1, 3, 3, STATE_FOLLOW },
1039  { 0, 0, -2, 0, 0, 0, -1, 4, 1, STATE_DATA },
1040  { 0, 0, -2, 0, 0, 0, -1, 5, 0, STATE_START },
1041  { 0, 0, 0, 0, 0, 0, -1, 3, 4, STATE_DATA },
1042  { 0, 0, 0, 0, 0, 0, -1, 3, 4, STATE_SIGN },
1043  { 0, 0, 0, 0, 0, 0, -1, 3, 5, STATE_DATA },
1044  { 0, 0, 0, 0, 0, 0, -1, 3, 5, STATE_SIGN },
1045  { 0, 0, 0, +1, 0, 0, -1, 4, 1, STATE_DATA },
1046  { 0, 0, 0, +1, 0, 0, -1, 5, 0, STATE_START },
1047  { 0, 0, 0, -1, 0, 0, -1, 4, 1, STATE_DATA },
1048  { 0, 0, 0, -1, 0, 0, -1, 5, 0, STATE_START },
1049  { 0, 0, 0, 0, 0, 0, -1, 3, 6, STATE_DATA },
1050  { 0, 0, 0, 0, 0, 0, -1, 3, 6, STATE_SIGN },
1051  { 0, 0, 0, 0, 0, 0, -1, 3, 7, STATE_DATA },
1052  { 0, 0, 0, 0, 0, 0, -1, 3, 7, STATE_SIGN },
1053  { 0, 0, 0, +2, 0, 0, -1, 4, 1, STATE_DATA },
1054  { 0, 0, 0, +2, 0, 0, -1, 5, 0, STATE_START },
1055  { 0, 0, 0, -2, 0, 0, -1, 4, 1, STATE_DATA },
1056  { 0, 0, 0, -2, 0, 0, -1, 5, 0, STATE_START },
1057  { 0, 0, 0, 0, 0, 0, -1, 4, 4, STATE_FOLLOW },
1058  { 0, 0, 0, 0, 0, 0, -1, 4, 5, STATE_FOLLOW },
1059  { 0, 0, 0, 0, +1, 0, -1, 5, 0, STATE_START },
1060  { 0, 0, 0, 0, -1, 0, -1, 5, 0, STATE_START },
1061  { 0, 0, 0, 0, 0, 0, -1, 4, 6, STATE_FOLLOW },
1062  { 0, 0, 0, 0, 0, 0, -1, 4, 7, STATE_FOLLOW },
1063  { 0, 0, 0, 0, +2, 0, -1, 5, 0, STATE_START },
1064  { 0, 0, 0, 0, -2, 0, -1, 5, 0, STATE_START },
1065  { 0, 0, 0, 0, 0, 0, -1, 5, 2, STATE_DATA },
1066  { 0, 0, 0, 0, 0, 0, -1, 5, 2, STATE_SIGN },
1067  { 0, 0, 0, 0, 0, 0, -1, 5, 3, STATE_DATA },
1068  { 0, 0, 0, 0, 0, 0, -1, 5, 3, STATE_SIGN },
1069  { 0, 0, 0, 0, 0, 0, -1, 6, 2, STATE_FOLLOW },
1070  { 0, 0, 0, 0, 0, 0, -1, 6, 3, STATE_FOLLOW },
1071  { 0, 0, 0, 0, 0, 0, -1, 7, 1, STATE_DATA },
1072  { 0, 0, 0, 0, 0, 0, -1, 8, 0, STATE_START },
1073 };
1074 
1075 #define PROCESS_VALS \
1076  do { \
1077  val <<= lut.val0_bits; \
1078  val |= lut.val0; \
1079  dst[0] = (val - 1) * lut.sign; \
1080  dst[1] = lut.val1; \
1081  dst[2] = lut.val2; \
1082  dst[3] = lut.val3; \
1083  dst[4] = lut.val4; \
1084  dst[5] = 0; \
1085  dst[6] = 0; \
1086  dst[7] = 0; \
1087  if (lut.num) \
1088  val = lut.val; \
1089  dst += lut.num; \
1090  if (dst >= last) \
1091  return coeffs; \
1092  lut = dirac_golomb_lut[lut.state + *buf++]; \
1093  } while (0)
1094 
1095 int ff_dirac_golomb_read_16bit(const uint8_t *buf, int bytes,
1096  uint8_t *_dst, int coeffs)
1097 {
1098  LUTState lut = dirac_golomb_lut[*buf++];
1099  int16_t *dst = (int16_t *)_dst, *last = dst + coeffs;
1100  uint16_t val = 0;
1101 
1102  for (int i = 1; i < bytes; i++)
1103  PROCESS_VALS;
1104 
1105  /* Reader needs to be flushed */
1106  PROCESS_VALS;
1107 
1108  /* Still short of coeffs - try to guess and at least output what we have */
1109  if (lut.state != STATE_START)
1110  *dst++ = -((lut.state != STATE_SIGN ? (val << 1) | 1 : val) - 1);
1111 
1112  return coeffs - (int)(last - dst);
1113 }
1114 
1115 int ff_dirac_golomb_read_32bit(const uint8_t *buf, int bytes,
1116  uint8_t *_dst, int coeffs)
1117 {
1118  LUTState lut = dirac_golomb_lut[*buf++];
1119  int32_t *dst = (int32_t *)_dst, *last = dst + coeffs;
1120  uint32_t val = 0;
1121 
1122  for (int i = 1; i < bytes; i++)
1123  PROCESS_VALS;
1124 
1125  /* Reader needs to be flushed */
1126  PROCESS_VALS;
1127 
1128  /* Still short of coeffs - try to guess and at least output what we have */
1129  if (lut.state != STATE_START)
1130  *dst++ = -((lut.state != STATE_SIGN ? (val << 1) | 1 : val) - 1);
1131 
1132  return coeffs - (int)(last - dst);
1133 }
mem_internal.h
STATE_START
@ STATE_START
Definition: dirac_vlc.c:25
STATE_FOLLOW
@ STATE_FOLLOW
Definition: dirac_vlc.c:27
dirac_golomb_lut
static const LUTState dirac_golomb_lut[1024]
Definition: dirac_vlc.c:48
LUTState::val4
int16_t val4
Definition: dirac_vlc.c:40
LUTState::val0_bits
uint8_t val0_bits
Definition: dirac_vlc.c:41
LUTState::val2
int16_t val2
Definition: dirac_vlc.c:38
LUTState::state
uint16_t state
Definition: dirac_vlc.c:45
LUTState::val0
int16_t val0
Definition: dirac_vlc.c:36
val
static double val(void *priv, double ch)
Definition: aeval.c:77
LUTState::val1
int16_t val1
Definition: dirac_vlc.c:37
STATE_SIGN
@ STATE_SIGN
Definition: dirac_vlc.c:31
LUTState::num
int8_t num
Definition: dirac_vlc.c:43
LUTState::val3
int16_t val3
Definition: dirac_vlc.c:39
STATE_DATA
@ STATE_DATA
Definition: dirac_vlc.c:29
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:87
dirac_vlc.h
PROCESS_VALS
#define PROCESS_VALS
Definition: dirac_vlc.c:1075
LUTState::sign
int8_t sign
Definition: dirac_vlc.c:42
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
ff_dirac_golomb_read_16bit
int ff_dirac_golomb_read_16bit(const uint8_t *buf, int bytes, uint8_t *_dst, int coeffs)
Definition: dirac_vlc.c:1095
LUTState
Definition: dirac_vlc.c:35
ff_dirac_golomb_read_32bit
int ff_dirac_golomb_read_32bit(const uint8_t *buf, int bytes, uint8_t *_dst, int coeffs)
Definition: dirac_vlc.c:1115
LUTState::val
uint8_t val
Definition: dirac_vlc.c:44
int32_t
int32_t
Definition: audioconvert.c:56
int
int
Definition: ffmpeg_filter.c:156