GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/dirac_vlc.c Lines: 14 20 70.0 %
Date: 2021-04-20 04:37:23 Branches: 16 28 57.1 %

Line Branch Exec Source
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) */
25
    STATE_START  = 0,
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
32076
int ff_dirac_golomb_read_16bit(const uint8_t *buf, int bytes,
1096
                               uint8_t *_dst, int coeffs)
1097
{
1098
32076
    LUTState lut = dirac_golomb_lut[*buf++];
1099
32076
    int16_t *dst = (int16_t *)_dst, *last = dst + coeffs;
1100
32076
    uint16_t val = 0;
1101
1102
8831968
    for (int i = 1; i < bytes; i++)
1103

8831806
        PROCESS_VALS;
1104
1105
    /* Reader needs to be flushed */
1106

162
    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
85536
int ff_dirac_golomb_read_32bit(const uint8_t *buf, int bytes,
1116
                               uint8_t *_dst, int coeffs)
1117
{
1118
85536
    LUTState lut = dirac_golomb_lut[*buf++];
1119
85536
    int32_t *dst = (int32_t *)_dst, *last = dst + coeffs;
1120
85536
    uint32_t val = 0;
1121
1122
38628086
    for (int i = 1; i < bytes; i++)
1123

38627692
        PROCESS_VALS;
1124
1125
    /* Reader needs to be flushed */
1126

394
    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
}