1 module bio.maf.parser;
2 #line 1 "maf_block.rl"
3 /*
4     This file is part of BioD.
5     Copyright (C) 2013    Artem Tarasov <lomereiter@gmail.com>
6 
7     Permission is hereby granted, free of charge, to any person obtaining a
8     copy of this software and associated documentation files (the "Software"),
9     to deal in the Software without restriction, including without limitation
10     the rights to use, copy, modify, merge, publish, distribute, sublicense,
11     and/or sell copies of the Software, and to permit persons to whom the
12     Software is furnished to do so, subject to the following conditions:
13     
14     The above copyright notice and this permission notice shall be included in
15     all copies or substantial portions of the Software.
16     
17     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23     DEALINGS IN THE SOFTWARE.
24 
25 */
26 import std.conv, std.array;
27 import bio.maf.block;
28 
29 
30 #line 27 "maf_block.d"
31 static byte[] _maf_block_actions = [
32 	0, 1, 1, 1, 2, 1, 5, 1, 
33 	6, 1, 7, 1, 8, 1, 9, 1, 
34 	10, 1, 11, 1, 12, 1, 14, 1, 
35 	16, 1, 17, 1, 18, 1, 19, 1, 
36 	20, 1, 21, 1, 22, 2, 0, 1, 
37 	2, 3, 4, 2, 7, 13, 2, 15, 
38 	12
39 ];
40 
41 static short[] _maf_block_key_offsets = [
42 	0, 0, 1, 5, 11, 20, 23, 26, 
43 	29, 34, 39, 44, 49, 54, 57, 62, 
44 	67, 74, 77, 80, 83, 92, 95, 100, 
45 	105, 114, 117, 122, 127, 132, 137, 142, 
46 	147, 152, 157, 162, 167, 172, 177, 182, 
47 	187, 192, 197, 202, 205, 208, 211, 214, 
48 	221, 224, 227, 230, 235, 240, 245, 250, 
49 	255, 258, 263, 268, 271, 276, 281, 286, 
50 	291, 296, 301, 306, 311, 316, 321, 326, 
51 	331, 336, 341, 346, 351, 354, 359, 364, 
52 	369, 374, 379, 384, 389, 394, 399, 404, 
53 	409, 414, 419, 424, 429, 434, 437, 442, 
54 	447, 452, 457, 462, 467, 472, 477, 482, 
55 	487, 492, 497, 502, 507, 512, 517, 520, 
56 	525, 530, 535, 540, 545, 550, 555, 560, 
57 	565, 570, 575, 580, 585, 590, 595, 600, 
58 	603, 608, 613, 618, 623, 628, 633, 638, 
59 	643, 648, 653, 658, 663, 668, 673, 678, 
60 	683, 686, 691, 696, 701, 706, 711, 716, 
61 	721, 726, 731, 736, 741, 746, 751, 756, 
62 	761, 766, 769, 770, 771, 772, 773, 775, 
63 	781, 787, 793, 799, 805, 811, 817, 823, 
64 	829, 835, 841, 847, 853, 859, 865, 871, 
65 	877, 881, 885, 886, 887, 888, 889, 896, 
66 	900, 902, 910, 914, 916, 922, 931, 932, 
67 	933, 937, 938, 939, 940, 944, 948, 956, 
68 	962, 968, 974, 980, 986, 992, 998, 1004, 
69 	1010, 1016, 1022, 1028, 1034, 1040, 1046, 1052, 
70 	1058, 1062, 1070
71 ];
72 
73 static char[] _maf_block_trans_keys = [
74 	97u, 10u, 32u, 9u, 13u, 10u, 32u, 112u, 
75 	115u, 9u, 13u, 10u, 32u, 101u, 105u, 112u, 
76 	113u, 115u, 9u, 13u, 32u, 9u, 13u, 32u, 
77 	9u, 13u, 32u, 9u, 13u, 32u, 9u, 13u, 
78 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
79 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
80 	57u, 32u, 43u, 45u, 9u, 13u, 32u, 9u, 
81 	13u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
82 	13u, 48u, 57u, 32u, 67u, 73u, 77u, 110u, 
83 	9u, 13u, 32u, 9u, 13u, 32u, 9u, 13u, 
84 	32u, 9u, 13u, 32u, 67u, 73u, 84u, 110u, 
85 	9u, 13u, 77u, 78u, 32u, 9u, 13u, 32u, 
86 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
87 	57u, 32u, 67u, 73u, 84u, 110u, 9u, 13u, 
88 	77u, 78u, 32u, 9u, 13u, 32u, 9u, 13u, 
89 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
90 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
91 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
92 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
93 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
94 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
95 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
96 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
97 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
98 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
99 	48u, 57u, 32u, 9u, 13u, 32u, 9u, 13u, 
100 	32u, 9u, 13u, 32u, 9u, 13u, 32u, 45u, 
101 	70u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
102 	32u, 9u, 13u, 32u, 9u, 13u, 32u, 9u, 
103 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
104 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
105 	48u, 57u, 32u, 43u, 45u, 9u, 13u, 32u, 
106 	9u, 13u, 32u, 9u, 13u, 48u, 57u, 32u, 
107 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 32u, 
108 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
109 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
110 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
111 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
112 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
113 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
114 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
115 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
116 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
117 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
118 	9u, 13u, 32u, 9u, 13u, 48u, 57u, 32u, 
119 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
120 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
121 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
122 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
123 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
124 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
125 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
126 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
127 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
128 	48u, 57u, 32u, 9u, 13u, 32u, 9u, 13u, 
129 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
130 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
131 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
132 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
133 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
134 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
135 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
136 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
137 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
138 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
139 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
140 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
141 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
142 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
143 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
144 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
145 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
146 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
147 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
148 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
149 	32u, 9u, 13u, 32u, 9u, 13u, 48u, 57u, 
150 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
151 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
152 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
153 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
154 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
155 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
156 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
157 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
158 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
159 	13u, 48u, 57u, 32u, 9u, 13u, 32u, 9u, 
160 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
161 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
162 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
163 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
164 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
165 	13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 
166 	32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 
167 	48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 
168 	9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 
169 	57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 
170 	13u, 97u, 115u, 115u, 61u, 48u, 57u, 10u, 
171 	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
172 	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
173 	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
174 	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
175 	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
176 	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
177 	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
178 	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
179 	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
180 	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
181 	13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 
182 	57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 
183 	32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 
184 	13u, 32u, 99u, 9u, 13u, 111u, 114u, 101u, 
185 	61u, 43u, 45u, 46u, 105u, 110u, 48u, 57u, 
186 	46u, 105u, 48u, 57u, 48u, 57u, 10u, 32u, 
187 	69u, 101u, 9u, 13u, 48u, 57u, 43u, 45u, 
188 	48u, 57u, 48u, 57u, 10u, 32u, 9u, 13u, 
189 	48u, 57u, 10u, 32u, 46u, 69u, 101u, 9u, 
190 	13u, 48u, 57u, 110u, 102u, 10u, 32u, 9u, 
191 	13u, 97u, 110u, 99u, 10u, 32u, 9u, 13u, 
192 	10u, 32u, 9u, 13u, 10u, 32u, 101u, 105u, 
193 	113u, 115u, 9u, 13u, 10u, 32u, 9u, 13u, 
194 	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
195 	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
196 	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
197 	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
198 	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
199 	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
200 	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
201 	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
202 	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
203 	48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 
204 	10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 
205 	9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 
206 	48u, 57u, 10u, 32u, 9u, 13u, 10u, 32u, 
207 	45u, 70u, 9u, 13u, 48u, 57u, 10u, 32u, 
208 	9u, 13u, 0
209 ];
210 
211 static byte[] _maf_block_single_lengths = [
212 	0, 1, 2, 4, 7, 1, 1, 1, 
213 	1, 1, 1, 1, 3, 1, 1, 1, 
214 	5, 1, 1, 1, 5, 1, 1, 1, 
215 	5, 1, 1, 1, 1, 1, 1, 1, 
216 	1, 1, 1, 1, 1, 1, 1, 1, 
217 	1, 1, 1, 1, 1, 1, 1, 3, 
218 	1, 1, 1, 1, 1, 1, 1, 3, 
219 	1, 1, 1, 1, 1, 1, 1, 1, 
220 	1, 1, 1, 1, 1, 1, 1, 1, 
221 	1, 1, 1, 1, 1, 1, 1, 1, 
222 	1, 1, 1, 1, 1, 1, 1, 1, 
223 	1, 1, 1, 1, 1, 1, 1, 1, 
224 	1, 1, 1, 1, 1, 1, 1, 1, 
225 	1, 1, 1, 1, 1, 1, 1, 1, 
226 	1, 1, 1, 1, 1, 1, 1, 1, 
227 	1, 1, 1, 1, 1, 1, 1, 1, 
228 	1, 1, 1, 1, 1, 1, 1, 1, 
229 	1, 1, 1, 1, 1, 1, 1, 1, 
230 	1, 1, 1, 1, 1, 1, 1, 1, 
231 	1, 1, 1, 1, 1, 1, 1, 1, 
232 	1, 1, 1, 1, 1, 1, 0, 2, 
233 	2, 2, 2, 2, 2, 2, 2, 2, 
234 	2, 2, 2, 2, 2, 2, 2, 2, 
235 	2, 2, 1, 1, 1, 1, 5, 2, 
236 	0, 4, 2, 0, 2, 5, 1, 1, 
237 	2, 1, 1, 1, 2, 2, 6, 2, 
238 	2, 2, 2, 2, 2, 2, 2, 2, 
239 	2, 2, 2, 2, 2, 2, 2, 2, 
240 	2, 4, 2
241 ];
242 
243 static byte[] _maf_block_range_lengths = [
244 	0, 0, 1, 1, 1, 1, 1, 1, 
245 	2, 2, 2, 2, 1, 1, 2, 2, 
246 	1, 1, 1, 1, 2, 1, 2, 2, 
247 	2, 1, 2, 2, 2, 2, 2, 2, 
248 	2, 2, 2, 2, 2, 2, 2, 2, 
249 	2, 2, 2, 1, 1, 1, 1, 2, 
250 	1, 1, 1, 2, 2, 2, 2, 1, 
251 	1, 2, 2, 1, 2, 2, 2, 2, 
252 	2, 2, 2, 2, 2, 2, 2, 2, 
253 	2, 2, 2, 2, 1, 2, 2, 2, 
254 	2, 2, 2, 2, 2, 2, 2, 2, 
255 	2, 2, 2, 2, 2, 1, 2, 2, 
256 	2, 2, 2, 2, 2, 2, 2, 2, 
257 	2, 2, 2, 2, 2, 2, 1, 2, 
258 	2, 2, 2, 2, 2, 2, 2, 2, 
259 	2, 2, 2, 2, 2, 2, 2, 1, 
260 	2, 2, 2, 2, 2, 2, 2, 2, 
261 	2, 2, 2, 2, 2, 2, 2, 2, 
262 	1, 2, 2, 2, 2, 2, 2, 2, 
263 	2, 2, 2, 2, 2, 2, 2, 2, 
264 	2, 1, 0, 0, 0, 0, 1, 2, 
265 	2, 2, 2, 2, 2, 2, 2, 2, 
266 	2, 2, 2, 2, 2, 2, 2, 2, 
267 	1, 1, 0, 0, 0, 0, 1, 1, 
268 	1, 2, 1, 1, 2, 2, 0, 0, 
269 	1, 0, 0, 0, 1, 1, 1, 2, 
270 	2, 2, 2, 2, 2, 2, 2, 2, 
271 	2, 2, 2, 2, 2, 2, 2, 2, 
272 	1, 2, 1
273 ];
274 
275 static short[] _maf_block_index_offsets = [
276 	0, 0, 2, 6, 12, 21, 24, 27, 
277 	30, 34, 38, 42, 46, 51, 54, 58, 
278 	62, 69, 72, 75, 78, 86, 89, 93, 
279 	97, 105, 108, 112, 116, 120, 124, 128, 
280 	132, 136, 140, 144, 148, 152, 156, 160, 
281 	164, 168, 172, 176, 179, 182, 185, 188, 
282 	194, 197, 200, 203, 207, 211, 215, 219, 
283 	224, 227, 231, 235, 238, 242, 246, 250, 
284 	254, 258, 262, 266, 270, 274, 278, 282, 
285 	286, 290, 294, 298, 302, 305, 309, 313, 
286 	317, 321, 325, 329, 333, 337, 341, 345, 
287 	349, 353, 357, 361, 365, 369, 372, 376, 
288 	380, 384, 388, 392, 396, 400, 404, 408, 
289 	412, 416, 420, 424, 428, 432, 436, 439, 
290 	443, 447, 451, 455, 459, 463, 467, 471, 
291 	475, 479, 483, 487, 491, 495, 499, 503, 
292 	506, 510, 514, 518, 522, 526, 530, 534, 
293 	538, 542, 546, 550, 554, 558, 562, 566, 
294 	570, 573, 577, 581, 585, 589, 593, 597, 
295 	601, 605, 609, 613, 617, 621, 625, 629, 
296 	633, 637, 640, 642, 644, 646, 648, 650, 
297 	655, 660, 665, 670, 675, 680, 685, 690, 
298 	695, 700, 705, 710, 715, 720, 725, 730, 
299 	735, 739, 743, 745, 747, 749, 751, 758, 
300 	762, 764, 771, 775, 777, 782, 790, 792, 
301 	794, 798, 800, 802, 804, 808, 812, 820, 
302 	825, 830, 835, 840, 845, 850, 855, 860, 
303 	865, 870, 875, 880, 885, 890, 895, 900, 
304 	905, 909, 916
305 ];
306 
307 static ubyte[] _maf_block_trans_targs = [
308 	2, 0, 4, 3, 3, 0, 4, 3, 
309 	162, 203, 3, 0, 4, 3, 5, 17, 
310 	162, 44, 185, 3, 0, 6, 6, 0, 
311 	6, 6, 7, 8, 8, 7, 8, 8, 
312 	9, 0, 10, 10, 145, 0, 10, 10, 
313 	11, 0, 12, 12, 128, 0, 12, 13, 
314 	13, 12, 0, 14, 14, 0, 14, 14, 
315 	15, 0, 16, 16, 111, 0, 16, 204, 
316 	204, 204, 204, 16, 0, 18, 18, 0, 
317 	18, 18, 19, 20, 20, 19, 20, 21, 
318 	21, 21, 21, 20, 21, 0, 22, 22, 
319 	0, 22, 22, 23, 0, 24, 24, 27, 
320 	0, 24, 25, 25, 25, 25, 24, 25, 
321 	0, 26, 26, 0, 26, 26, 207, 0, 
322 	24, 24, 28, 0, 24, 24, 29, 0, 
323 	24, 24, 30, 0, 24, 24, 31, 0, 
324 	24, 24, 32, 0, 24, 24, 33, 0, 
325 	24, 24, 34, 0, 24, 24, 35, 0, 
326 	24, 24, 36, 0, 24, 24, 37, 0, 
327 	24, 24, 38, 0, 24, 24, 39, 0, 
328 	24, 24, 40, 0, 24, 24, 41, 0, 
329 	24, 24, 42, 0, 24, 24, 43, 0, 
330 	24, 24, 0, 45, 45, 0, 45, 45, 
331 	46, 47, 47, 46, 47, 225, 225, 47, 
332 	225, 0, 49, 49, 0, 49, 49, 50, 
333 	51, 51, 50, 51, 51, 52, 0, 53, 
334 	53, 94, 0, 53, 53, 54, 0, 55, 
335 	55, 77, 0, 55, 56, 56, 55, 0, 
336 	57, 57, 0, 57, 57, 58, 0, 59, 
337 	59, 60, 0, 59, 59, 226, 59, 59, 
338 	61, 0, 59, 59, 62, 0, 59, 59, 
339 	63, 0, 59, 59, 64, 0, 59, 59, 
340 	65, 0, 59, 59, 66, 0, 59, 59, 
341 	67, 0, 59, 59, 68, 0, 59, 59, 
342 	69, 0, 59, 59, 70, 0, 59, 59, 
343 	71, 0, 59, 59, 72, 0, 59, 59, 
344 	73, 0, 59, 59, 74, 0, 59, 59, 
345 	75, 0, 59, 59, 76, 0, 59, 59, 
346 	0, 55, 55, 78, 0, 55, 55, 79, 
347 	0, 55, 55, 80, 0, 55, 55, 81, 
348 	0, 55, 55, 82, 0, 55, 55, 83, 
349 	0, 55, 55, 84, 0, 55, 55, 85, 
350 	0, 55, 55, 86, 0, 55, 55, 87, 
351 	0, 55, 55, 88, 0, 55, 55, 89, 
352 	0, 55, 55, 90, 0, 55, 55, 91, 
353 	0, 55, 55, 92, 0, 55, 55, 93, 
354 	0, 55, 55, 0, 53, 53, 95, 0, 
355 	53, 53, 96, 0, 53, 53, 97, 0, 
356 	53, 53, 98, 0, 53, 53, 99, 0, 
357 	53, 53, 100, 0, 53, 53, 101, 0, 
358 	53, 53, 102, 0, 53, 53, 103, 0, 
359 	53, 53, 104, 0, 53, 53, 105, 0, 
360 	53, 53, 106, 0, 53, 53, 107, 0, 
361 	53, 53, 108, 0, 53, 53, 109, 0, 
362 	53, 53, 110, 0, 53, 53, 0, 16, 
363 	16, 112, 0, 16, 16, 113, 0, 16, 
364 	16, 114, 0, 16, 16, 115, 0, 16, 
365 	16, 116, 0, 16, 16, 117, 0, 16, 
366 	16, 118, 0, 16, 16, 119, 0, 16, 
367 	16, 120, 0, 16, 16, 121, 0, 16, 
368 	16, 122, 0, 16, 16, 123, 0, 16, 
369 	16, 124, 0, 16, 16, 125, 0, 16, 
370 	16, 126, 0, 16, 16, 127, 0, 16, 
371 	16, 0, 12, 12, 129, 0, 12, 12, 
372 	130, 0, 12, 12, 131, 0, 12, 12, 
373 	132, 0, 12, 12, 133, 0, 12, 12, 
374 	134, 0, 12, 12, 135, 0, 12, 12, 
375 	136, 0, 12, 12, 137, 0, 12, 12, 
376 	138, 0, 12, 12, 139, 0, 12, 12, 
377 	140, 0, 12, 12, 141, 0, 12, 12, 
378 	142, 0, 12, 12, 143, 0, 12, 12, 
379 	144, 0, 12, 12, 0, 10, 10, 146, 
380 	0, 10, 10, 147, 0, 10, 10, 148, 
381 	0, 10, 10, 149, 0, 10, 10, 150, 
382 	0, 10, 10, 151, 0, 10, 10, 152, 
383 	0, 10, 10, 153, 0, 10, 10, 154, 
384 	0, 10, 10, 155, 0, 10, 10, 156, 
385 	0, 10, 10, 157, 0, 10, 10, 158, 
386 	0, 10, 10, 159, 0, 10, 10, 160, 
387 	0, 10, 10, 161, 0, 10, 10, 0, 
388 	163, 0, 164, 0, 165, 0, 166, 0, 
389 	167, 0, 4, 3, 3, 168, 0, 4, 
390 	3, 3, 169, 0, 4, 3, 3, 170, 
391 	0, 4, 3, 3, 171, 0, 4, 3, 
392 	3, 172, 0, 4, 3, 3, 173, 0, 
393 	4, 3, 3, 174, 0, 4, 3, 3, 
394 	175, 0, 4, 3, 3, 176, 0, 4, 
395 	3, 3, 177, 0, 4, 3, 3, 178, 
396 	0, 4, 3, 3, 179, 0, 4, 3, 
397 	3, 180, 0, 4, 3, 3, 181, 0, 
398 	4, 3, 3, 182, 0, 4, 3, 3, 
399 	183, 0, 4, 3, 3, 184, 0, 4, 
400 	3, 3, 0, 49, 186, 49, 0, 187, 
401 	0, 188, 0, 189, 0, 190, 0, 191, 
402 	191, 192, 198, 201, 197, 0, 192, 198, 
403 	197, 0, 193, 0, 4, 3, 194, 194, 
404 	3, 193, 0, 195, 195, 196, 0, 196, 
405 	0, 4, 3, 3, 196, 0, 4, 3, 
406 	192, 194, 194, 3, 197, 0, 199, 0, 
407 	200, 0, 4, 3, 3, 0, 202, 0, 
408 	200, 0, 186, 0, 206, 205, 205, 0, 
409 	206, 205, 205, 0, 206, 205, 5, 17, 
410 	44, 48, 205, 0, 206, 205, 205, 208, 
411 	0, 206, 205, 205, 209, 0, 206, 205, 
412 	205, 210, 0, 206, 205, 205, 211, 0, 
413 	206, 205, 205, 212, 0, 206, 205, 205, 
414 	213, 0, 206, 205, 205, 214, 0, 206, 
415 	205, 205, 215, 0, 206, 205, 205, 216, 
416 	0, 206, 205, 205, 217, 0, 206, 205, 
417 	205, 218, 0, 206, 205, 205, 219, 0, 
418 	206, 205, 205, 220, 0, 206, 205, 205, 
419 	221, 0, 206, 205, 205, 222, 0, 206, 
420 	205, 205, 223, 0, 206, 205, 205, 224, 
421 	0, 206, 205, 205, 0, 206, 205, 225, 
422 	225, 205, 225, 0, 206, 205, 205, 226, 
423 	0
424 ];
425 
426 static byte[] _maf_block_trans_actions = [
427 	0, 0, 0, 0, 0, 0, 0, 0, 
428 	0, 0, 0, 0, 0, 0, 0, 0, 
429 	0, 0, 0, 0, 0, 0, 0, 0, 
430 	0, 0, 7, 9, 9, 0, 0, 0, 
431 	37, 0, 11, 11, 1, 0, 0, 0, 
432 	37, 0, 13, 13, 1, 0, 0, 15, 
433 	15, 0, 0, 0, 0, 0, 0, 0, 
434 	37, 0, 17, 17, 1, 0, 0, 31, 
435 	31, 31, 31, 0, 0, 0, 0, 0, 
436 	0, 0, 7, 43, 43, 0, 0, 23, 
437 	23, 23, 23, 0, 23, 0, 0, 0, 
438 	0, 0, 0, 37, 0, 25, 25, 1, 
439 	0, 0, 27, 27, 27, 27, 0, 27, 
440 	0, 0, 0, 0, 0, 0, 37, 0, 
441 	25, 25, 1, 0, 25, 25, 1, 0, 
442 	25, 25, 1, 0, 25, 25, 1, 0, 
443 	25, 25, 1, 0, 25, 25, 1, 0, 
444 	25, 25, 1, 0, 25, 25, 1, 0, 
445 	25, 25, 1, 0, 25, 25, 1, 0, 
446 	25, 25, 1, 0, 25, 25, 1, 0, 
447 	25, 25, 1, 0, 25, 25, 1, 0, 
448 	25, 25, 1, 0, 25, 25, 1, 0, 
449 	25, 25, 0, 0, 0, 0, 0, 0, 
450 	7, 43, 43, 0, 0, 33, 33, 0, 
451 	33, 0, 0, 0, 0, 0, 0, 7, 
452 	9, 9, 0, 0, 0, 37, 0, 11, 
453 	11, 1, 0, 0, 0, 37, 0, 13, 
454 	13, 1, 0, 0, 15, 15, 0, 0, 
455 	0, 0, 0, 0, 0, 37, 0, 17, 
456 	17, 1, 0, 0, 0, 21, 17, 17, 
457 	1, 0, 17, 17, 1, 0, 17, 17, 
458 	1, 0, 17, 17, 1, 0, 17, 17, 
459 	1, 0, 17, 17, 1, 0, 17, 17, 
460 	1, 0, 17, 17, 1, 0, 17, 17, 
461 	1, 0, 17, 17, 1, 0, 17, 17, 
462 	1, 0, 17, 17, 1, 0, 17, 17, 
463 	1, 0, 17, 17, 1, 0, 17, 17, 
464 	1, 0, 17, 17, 1, 0, 17, 17, 
465 	0, 13, 13, 1, 0, 13, 13, 1, 
466 	0, 13, 13, 1, 0, 13, 13, 1, 
467 	0, 13, 13, 1, 0, 13, 13, 1, 
468 	0, 13, 13, 1, 0, 13, 13, 1, 
469 	0, 13, 13, 1, 0, 13, 13, 1, 
470 	0, 13, 13, 1, 0, 13, 13, 1, 
471 	0, 13, 13, 1, 0, 13, 13, 1, 
472 	0, 13, 13, 1, 0, 13, 13, 1, 
473 	0, 13, 13, 0, 11, 11, 1, 0, 
474 	11, 11, 1, 0, 11, 11, 1, 0, 
475 	11, 11, 1, 0, 11, 11, 1, 0, 
476 	11, 11, 1, 0, 11, 11, 1, 0, 
477 	11, 11, 1, 0, 11, 11, 1, 0, 
478 	11, 11, 1, 0, 11, 11, 1, 0, 
479 	11, 11, 1, 0, 11, 11, 1, 0, 
480 	11, 11, 1, 0, 11, 11, 1, 0, 
481 	11, 11, 1, 0, 11, 11, 0, 17, 
482 	17, 1, 0, 17, 17, 1, 0, 17, 
483 	17, 1, 0, 17, 17, 1, 0, 17, 
484 	17, 1, 0, 17, 17, 1, 0, 17, 
485 	17, 1, 0, 17, 17, 1, 0, 17, 
486 	17, 1, 0, 17, 17, 1, 0, 17, 
487 	17, 1, 0, 17, 17, 1, 0, 17, 
488 	17, 1, 0, 17, 17, 1, 0, 17, 
489 	17, 1, 0, 17, 17, 1, 0, 17, 
490 	17, 0, 13, 13, 1, 0, 13, 13, 
491 	1, 0, 13, 13, 1, 0, 13, 13, 
492 	1, 0, 13, 13, 1, 0, 13, 13, 
493 	1, 0, 13, 13, 1, 0, 13, 13, 
494 	1, 0, 13, 13, 1, 0, 13, 13, 
495 	1, 0, 13, 13, 1, 0, 13, 13, 
496 	1, 0, 13, 13, 1, 0, 13, 13, 
497 	1, 0, 13, 13, 1, 0, 13, 13, 
498 	1, 0, 13, 13, 0, 11, 11, 1, 
499 	0, 11, 11, 1, 0, 11, 11, 1, 
500 	0, 11, 11, 1, 0, 11, 11, 1, 
501 	0, 11, 11, 1, 0, 11, 11, 1, 
502 	0, 11, 11, 1, 0, 11, 11, 1, 
503 	0, 11, 11, 1, 0, 11, 11, 1, 
504 	0, 11, 11, 1, 0, 11, 11, 1, 
505 	0, 11, 11, 1, 0, 11, 11, 1, 
506 	0, 11, 11, 1, 0, 11, 11, 0, 
507 	0, 0, 0, 0, 0, 0, 0, 0, 
508 	37, 0, 5, 5, 5, 1, 0, 5, 
509 	5, 5, 1, 0, 5, 5, 5, 1, 
510 	0, 5, 5, 5, 1, 0, 5, 5, 
511 	5, 1, 0, 5, 5, 5, 1, 0, 
512 	5, 5, 5, 1, 0, 5, 5, 5, 
513 	1, 0, 5, 5, 5, 1, 0, 5, 
514 	5, 5, 1, 0, 5, 5, 5, 1, 
515 	0, 5, 5, 5, 1, 0, 5, 5, 
516 	5, 1, 0, 5, 5, 5, 1, 0, 
517 	5, 5, 5, 1, 0, 5, 5, 5, 
518 	1, 0, 5, 5, 5, 1, 0, 5, 
519 	5, 5, 0, 0, 0, 0, 0, 0, 
520 	0, 0, 0, 0, 0, 0, 0, 3, 
521 	3, 3, 3, 3, 3, 0, 0, 0, 
522 	0, 0, 0, 0, 40, 40, 0, 0, 
523 	40, 0, 0, 0, 0, 0, 0, 0, 
524 	0, 40, 40, 40, 0, 0, 40, 40, 
525 	0, 0, 0, 40, 0, 0, 0, 0, 
526 	0, 0, 40, 40, 40, 0, 0, 0, 
527 	0, 0, 0, 0, 19, 19, 19, 0, 
528 	0, 0, 0, 0, 0, 0, 0, 0, 
529 	0, 0, 0, 0, 29, 29, 29, 1, 
530 	0, 29, 29, 29, 1, 0, 29, 29, 
531 	29, 1, 0, 29, 29, 29, 1, 0, 
532 	29, 29, 29, 1, 0, 29, 29, 29, 
533 	1, 0, 29, 29, 29, 1, 0, 29, 
534 	29, 29, 1, 0, 29, 29, 29, 1, 
535 	0, 29, 29, 29, 1, 0, 29, 29, 
536 	29, 1, 0, 29, 29, 29, 1, 0, 
537 	29, 29, 29, 1, 0, 29, 29, 29, 
538 	1, 0, 29, 29, 29, 1, 0, 29, 
539 	29, 29, 1, 0, 29, 29, 29, 1, 
540 	0, 29, 29, 29, 0, 35, 35, 0, 
541 	0, 35, 0, 0, 46, 46, 46, 0, 
542 	0
543 ];
544 
545 static byte[] _maf_block_eof_actions = [
546 	0, 0, 0, 0, 0, 0, 0, 0, 
547 	0, 0, 0, 0, 0, 0, 0, 0, 
548 	0, 0, 0, 0, 0, 0, 0, 0, 
549 	0, 0, 0, 0, 0, 0, 0, 0, 
550 	0, 0, 0, 0, 0, 0, 0, 0, 
551 	0, 0, 0, 0, 0, 0, 0, 0, 
552 	0, 0, 0, 0, 0, 0, 0, 0, 
553 	0, 0, 0, 0, 0, 0, 0, 0, 
554 	0, 0, 0, 0, 0, 0, 0, 0, 
555 	0, 0, 0, 0, 0, 0, 0, 0, 
556 	0, 0, 0, 0, 0, 0, 0, 0, 
557 	0, 0, 0, 0, 0, 0, 0, 0, 
558 	0, 0, 0, 0, 0, 0, 0, 0, 
559 	0, 0, 0, 0, 0, 0, 0, 0, 
560 	0, 0, 0, 0, 0, 0, 0, 0, 
561 	0, 0, 0, 0, 0, 0, 0, 0, 
562 	0, 0, 0, 0, 0, 0, 0, 0, 
563 	0, 0, 0, 0, 0, 0, 0, 0, 
564 	0, 0, 0, 0, 0, 0, 0, 0, 
565 	0, 0, 0, 0, 0, 0, 0, 0, 
566 	0, 0, 0, 0, 0, 0, 0, 0, 
567 	0, 0, 0, 0, 0, 0, 0, 0, 
568 	0, 0, 0, 0, 0, 0, 0, 0, 
569 	0, 0, 0, 0, 0, 0, 0, 0, 
570 	0, 0, 0, 0, 0, 0, 0, 0, 
571 	0, 0, 0, 0, 19, 0, 0, 29, 
572 	29, 29, 29, 29, 29, 29, 29, 29, 
573 	29, 29, 29, 29, 29, 29, 29, 29, 
574 	29, 35, 46
575 ];
576 
577 static int maf_block_start = 1;
578 static int maf_block_first_final = 204;
579 static int maf_block_error = 0;
580 
581 static int maf_block_en_block = 1;
582 
583 
584 #line 122 "maf_block.rl"
585 
586 
587 MafBlock parseMafBlock(string line) {
588     char* p = cast(char*)line.ptr;
589     char* pe = p + line.length;
590     char* eof = pe;
591     int cs;
592 
593     int current_sign;
594     int int_value;
595     double float_value;
596     size_t float_beg;
597 
598     MafBlock block;
599     MafSequence sequence;
600     auto sequences = Appender!(MafSequence[])();
601 
602     size_t src_beg;
603     size_t text_beg;
604     size_t qual_beg;
605 
606     
607 #line 604 "maf_block.d"
608 	{
609 	cs = maf_block_start;
610 	}
611 
612 #line 144 "maf_block.rl"
613     
614 #line 611 "maf_block.d"
615 	{
616 	int _klen;
617 	uint _trans;
618 	byte* _acts;
619 	uint _nacts;
620 	char* _keys;
621 
622 	if ( p == pe )
623 		goto _test_eof;
624 	if ( cs == 0 )
625 		goto _out;
626 _resume:
627 	_keys = &_maf_block_trans_keys[_maf_block_key_offsets[cs]];
628 	_trans = _maf_block_index_offsets[cs];
629 
630 	_klen = _maf_block_single_lengths[cs];
631 	if ( _klen > 0 ) {
632 		char* _lower = _keys;
633 		char* _mid;
634 		char* _upper = _keys + _klen - 1;
635 		while (1) {
636 			if ( _upper < _lower )
637 				break;
638 
639 			_mid = _lower + ((_upper-_lower) >> 1);
640 			if ( (*p) < *_mid )
641 				_upper = _mid - 1;
642 			else if ( (*p) > *_mid )
643 				_lower = _mid + 1;
644 			else {
645 				_trans += cast(uint)(_mid - _keys);
646 				goto _match;
647 			}
648 		}
649 		_keys += _klen;
650 		_trans += _klen;
651 	}
652 
653 	_klen = _maf_block_range_lengths[cs];
654 	if ( _klen > 0 ) {
655 		char* _lower = _keys;
656 		char* _mid;
657 		char* _upper = _keys + (_klen<<1) - 2;
658 		while (1) {
659 			if ( _upper < _lower )
660 				break;
661 
662 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
663 			if ( (*p) < _mid[0] )
664 				_upper = _mid - 2;
665 			else if ( (*p) > _mid[1] )
666 				_lower = _mid + 2;
667 			else {
668 				_trans += cast(uint)((_mid - _keys)>>1);
669 				goto _match;
670 			}
671 		}
672 		_trans += _klen;
673 	}
674 
675 _match:
676 	cs = _maf_block_trans_targs[_trans];
677 
678 	if ( _maf_block_trans_actions[_trans] == 0 )
679 		goto _again;
680 
681 	_acts = &_maf_block_actions[_maf_block_trans_actions[_trans]];
682 	_nacts = cast(uint) *_acts++;
683 	while ( _nacts-- > 0 )
684 	{
685 		switch ( *_acts++ )
686 		{
687 	case 0:
688 #line 28 "maf_block.rl"
689 	{ int_value = 0; }
690 	break;
691 	case 1:
692 #line 29 "maf_block.rl"
693 	{ int_value *= 10; int_value += (*p) - '0'; }
694 	break;
695 	case 2:
696 #line 37 "maf_block.rl"
697 	{ float_beg = p - line.ptr; }
698 	break;
699 	case 3:
700 #line 38 "maf_block.rl"
701 	{ 
702         float_value = to!float(line[float_beg .. p - line.ptr]);
703     }
704 	break;
705 	case 4:
706 #line 46 "maf_block.rl"
707 	{ block.score = float_value; }
708 	break;
709 	case 5:
710 #line 47 "maf_block.rl"
711 	{ block.pass = int_value; }
712 	break;
713 	case 6:
714 #line 55 "maf_block.rl"
715 	{ src_beg = p - line.ptr; }
716 	break;
717 	case 7:
718 #line 56 "maf_block.rl"
719 	{ sequence.source = line[src_beg .. p - line.ptr]; }
720 	break;
721 	case 8:
722 #line 57 "maf_block.rl"
723 	{ sequence.start = int_value; }
724 	break;
725 	case 9:
726 #line 58 "maf_block.rl"
727 	{ sequence.size = int_value; }
728 	break;
729 	case 10:
730 #line 59 "maf_block.rl"
731 	{ sequence.strand = (*p); }
732 	break;
733 	case 11:
734 #line 60 "maf_block.rl"
735 	{ sequence.source_size = int_value; }
736 	break;
737 	case 12:
738 #line 61 "maf_block.rl"
739 	{ sequences.put(sequence); sequence = MafSequence.init; }
740 	break;
741 	case 13:
742 #line 62 "maf_block.rl"
743 	{ assert(line[src_beg .. p - line.ptr] == sequences.data.back.source); }
744 	break;
745 	case 14:
746 #line 70 "maf_block.rl"
747 	{ text_beg = p - line.ptr; }
748 	break;
749 	case 15:
750 #line 71 "maf_block.rl"
751 	{ sequence.text = line[text_beg .. p - line.ptr]; }
752 	break;
753 	case 16:
754 #line 82 "maf_block.rl"
755 	{ sequences.data.back.left_status = (*p); }
756 	break;
757 	case 17:
758 #line 83 "maf_block.rl"
759 	{ sequences.data.back.left_count = int_value; }
760 	break;
761 	case 18:
762 #line 84 "maf_block.rl"
763 	{ sequences.data.back.right_status = (*p); }
764 	break;
765 	case 19:
766 #line 85 "maf_block.rl"
767 	{ sequences.data.back.right_count = int_value; }
768 	break;
769 	case 20:
770 #line 99 "maf_block.rl"
771 	{ sequence.empty_status = *p; }
772 	break;
773 	case 21:
774 #line 110 "maf_block.rl"
775 	{ qual_beg = p - line.ptr; }
776 	break;
777 	case 22:
778 #line 111 "maf_block.rl"
779 	{ sequences.data.back.quality = line[qual_beg .. p - line.ptr]; }
780 	break;
781 #line 778 "maf_block.d"
782 		default: break;
783 		}
784 	}
785 
786 _again:
787 	if ( cs == 0 )
788 		goto _out;
789 	if ( ++p != pe )
790 		goto _resume;
791 	_test_eof: {}
792 	if ( p == eof )
793 	{
794 	byte* __acts = &_maf_block_actions[_maf_block_eof_actions[cs]];
795 	uint __nacts = cast(uint) *__acts++;
796 	while ( __nacts-- > 0 ) {
797 		switch ( *__acts++ ) {
798 	case 12:
799 #line 61 "maf_block.rl"
800 	{ sequences.put(sequence); sequence = MafSequence.init; }
801 	break;
802 	case 15:
803 #line 71 "maf_block.rl"
804 	{ sequence.text = line[text_beg .. p - line.ptr]; }
805 	break;
806 	case 19:
807 #line 85 "maf_block.rl"
808 	{ sequences.data.back.right_count = int_value; }
809 	break;
810 	case 22:
811 #line 111 "maf_block.rl"
812 	{ sequences.data.back.quality = line[qual_beg .. p - line.ptr]; }
813 	break;
814 #line 811 "maf_block.d"
815 		default: break;
816 		}
817 	}
818 	}
819 
820 	_out: {}
821 	}
822 
823 #line 145 "maf_block.rl"
824 
825     block.sequences = sequences.data;
826     return block;
827 }