Package com.connect_group.thymesheet.css.selectors.scanner

Source Code of com.connect_group.thymesheet.css.selectors.scanner.Scanner

/**
* Copyright (c) 2009-2012, Christer Sandberg
* Thymesheet modifications Copyright (c) 2013 Adam Perry, Connect Group
*/
// line 1 "Scanner.java.rl"
package com.connect_group.thymesheet.css.selectors.scanner;

import java.util.LinkedList;
import java.util.List;

import com.connect_group.thymesheet.css.selectors.Selector;
import com.connect_group.thymesheet.css.selectors.Specifier;
import com.connect_group.thymesheet.css.selectors.specifier.AttributeSpecifier;
import com.connect_group.thymesheet.css.selectors.specifier.NegationSpecifier;
import com.connect_group.thymesheet.css.selectors.specifier.PseudoClassSpecifier;
import com.connect_group.thymesheet.css.selectors.specifier.PseudoNthSpecifier;
import com.connect_group.thymesheet.css.util.Assert;

/**
* A selectors scanner as defined by
* <a href="http://www.w3.org/TR/css3-selectors/#w3cselgrammar">Selectors Level 3 specification</a>.
* <p/>
* This implementation uses the <a href="http://www.complang.org/ragel/">Ragel State Machine Compiler</a>.
* <p/>
* Use the following command to generate the Java code for the scanner:
* <br/>
* <pre>
* ragel -J Scanner.java.rl -o ../java/se/fishtank/css/selectors/scanner/Scanner.java
* </pre>
*
* @author Christer Sandberg
*/
public class Scanner {
 
  /** The input to scan. */
  private final String input;
 
  /**
   * Create a new scanner instance with the specified {@code input}.
   */
  public Scanner(CharSequence input) {
      Assert.notNull(input, "input is null!");
      this.input = input.toString();
  }
 

// line 45 "../java/se/fishtank/css/selectors/scanner/Scanner.java"
private static byte[] init__Scanner_actions_0()
{
  return new byte [] {
      0,    1,    0,    1,    1,    1,    2,    1,    3,    1,    4,    1,
      5,    1,    6,    1,    7,    1,    8,    1,    9,    1,   12,    1,
     13,    1,   14,    1,   15,    1,   16,    2,    1,    0,    2,    1,
      9,    2,    2,    9,    2,    3,    0,    2,    4,   15,    2,    4,
     16,    2,    6,    9,    2,    8,   15,    2,    8,   16,    2,   10,
     17,    2,   11,   18,    2,   12,   15,    2,   12,   16,    2,   15,
      5,    2,   15,    7,    2,   15,   16,    2,   16,    4,    2,   16,
      8,    2,   16,   12,    2,   16,   15,    3,    4,   15,    5,    3,
      4,   15,    7,    3,    4,   15,   16,    3,    8,   15,    5,    3,
      8,   15,    7,    3,    8,   15,   16,    3,   12,   15,    5,    3,
     12,   15,    7,    3,   12,   15,   16,    3,   15,   11,   18,    3,
     15,   16,    5,    3,   15,   16,    7,    3,   16,    4,   15,    3,
     16,    8,   15,    3,   16,   12,   15,    3,   16,   15,    5,    3,
     16,   15,    7,    4,    4,   15,   11,   18,    4,    4,   15,   16,
      5,    4,    4,   15,   16,    7,    4,    8,   15,   11,   18,    4,
      8,   15,   16,    5,    4,    8,   15,   16,    7,    4,   12,   15,
     11,   18,    4,   12,   15,   16,    5,    4,   12,   15,   16,    7,
      4,   16,    4,   15,    5,    4,   16,    4,   15,    7,    4,   16,
      8,   15,    5,    4,   16,    8,   15,    7,    4,   16,   12,   15,
      5,    4,   16,   12,   15,    7,    4,   16,   15,   11,   18
  };
}

private static final byte _Scanner_actions[] = init__Scanner_actions_0();


private static short[] init__Scanner_key_offsets_0()
{
  return new short [] {
      0,    0,   17,   28,   39,   56,   65,   73,   84,   92102105,
    112116128136157167168182196203207211,
    233241261281301321341349356378386406,
    426446466486494502517528547566585604,
    623638649674699724749774795801806811,
    817818819820824825826837848857865876,
    887898909917928939948956967975985988,
    995999, 1011, 1019, 1040, 1050, 1051, 1065, 1079, 1086, 1090, 1094,
   1116, 1124, 1144, 1164, 1184, 1204, 1224, 1232, 1239, 1261, 1269, 1289,
   1309, 1329, 1349, 1369, 1377, 1385, 1400, 1411, 1430, 1449, 1468, 1487,
   1506, 1521, 1532, 1557, 1582, 1607, 1632, 1657, 1678, 1684, 1689, 1694,
   1700, 1701, 1702, 1703, 1707, 1708, 1709, 1720, 1731, 1740, 1748, 1759,
   1770, 1781, 1792, 1803, 1814, 1822, 1833, 1850, 1861, 1880, 1884, 1893,
   1901, 1920, 1930, 1938, 1958, 1968, 1971, 1978, 1982, 1990, 2002, 2010,
   2031, 2041, 2042, 2056, 2070, 2077, 2081, 2085, 2107, 2115, 2135, 2155,
   2175, 2195, 2215, 2223, 2230, 2252, 2260, 2280, 2300, 2320, 2340, 2360,
   2368, 2376, 2391, 2402, 2421, 2440, 2459, 2478, 2497, 2512, 2523, 2548,
   2573, 2598, 2623, 2648, 2669, 2675, 2680, 2685, 2691, 2692, 2693, 2694,
   2698, 2699, 2700, 2711, 2735, 2759, 2783, 2807, 2831, 2851, 2872, 2893,
   2912, 2923, 2946, 2969, 2992, 3015, 3038, 3057, 3068, 3091, 3114, 3137,
   3160, 3183, 3202, 3210, 3218, 3237, 3248, 3271, 3294, 3317, 3340, 3363,
   3382, 3404, 3425, 3447, 3458, 3480, 3503, 3514, 3541, 3565, 3588, 3611,
   3638, 3662, 3689, 3716, 3743, 3770, 3793, 3820, 3847, 3874, 3901, 3924,
   3946, 3972, 3995, 4017, 4039, 4065, 4088, 4114, 4140, 4166, 4192, 4214,
   4240, 4266, 4292, 4318, 4340, 4364, 4388, 4411, 4437, 4460, 4482, 4504,
   4530, 4553, 4579, 4605, 4631, 4657, 4679, 4705, 4731, 4757, 4783, 4805,
   4831, 4854, 4876, 4898, 4924, 4947, 4973, 4999, 5025, 5051, 5073, 5099,
   5125, 5151, 5177, 5199, 5221, 5244, 5255, 5282, 5306, 5329, 5352, 5379,
   5403, 5430, 5457, 5484, 5511, 5534, 5561, 5588, 5615, 5642, 5665, 5687,
   5713, 5736, 5758, 5780, 5806, 5829, 5855, 5881, 5907, 5933, 5955, 5981,
   6007, 6033, 6059, 6081, 6105, 6129, 6152, 6178, 6201, 6223, 6245, 6271,
   6294, 6320, 6346, 6372, 6398, 6420, 6446, 6472, 6498, 6524, 6546, 6572,
   6595, 6617, 6639, 6665, 6688, 6714, 6740, 6766, 6792, 6814, 6840, 6866,
   6892, 6918, 6940, 6951, 6973, 6999, 7022, 7048, 7074, 7100, 7126, 7148
  };
}

private static final short _Scanner_key_offsets[] = init__Scanner_key_offsets_0();


private static char[] init__Scanner_trans_keys_0()
{
  return new char [] {
     32,   35,   42,   45,   46,   58,   91,   92,   95,    9,   13,   65,
     90,   97122128255,   45,   92,   95,   48,   57,   65,   90,
     97122128255,   45,   92,   95,   48,   57,   65,   90,   97,
    122128255,   32,   35,   42,   45,   46,   58,   91,   92,   95,
      9,   13,   65,   90,   97122128255,   45,   92,   95,   65,
     90,   97122128255,   92,   95,   65,   90,   97122128,
    255,   45,   58,   92,   95110,   65,   90,   97122128255,
     92,   95,   65,   90,   97122128255,   32,   43,   45101,
    110111,    9,   13,   48,   57110,   48,   57,   32,   41110,
      9,   13,   48,   57,   32,   41,    9,   13,   32,   45,   92,   95,
      9,   13,   65,   90,   97122128255,   92,   95,   65,   90,
     97122128255,   32,   36,   42,   45,   61,   92,   93,   94,
     95124126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   36,   42,   61,   93,   94124126,    9,   13,   61,
     32,   34,   39,   45,   92,   95,    9,   13,   65,   90,   97122,
    128255,   32,   34,   39,   45,   92,   95,    9,   13,   65,   90,
     97122128255,    9,   34,   92,   32126128255,   32,
     93,    9,   13,   32,   93,    9,   13,   12,   13,   34,   92,    9,
     10,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97,
    102103126128255,   34,   92,    9,   10,   32126128,
    255,   34,   92,    9,   13,   32,   47,   48,   57,   58,   64,   65,
     70,   71,   96,   97102103126128255,   34,   92,    9,
     13,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97,
    102103126128255,   34,   92,    9,   13,   32,   47,   48,
     57,   58,   64,   65,   70,   71,   96,   97102103126128,
    255,   34,   92,    9,   13,   32,   47,   48,   57,   58,   64,   65,
     70,   71,   96,   97102103126128255,   34,   92,    9,
     13,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97,
    102103126128255,   34,   92,    9,   13,   32126128,
    255,    9,   39,   92,   32126128255,   12,   13,   39,   92,
      9,   10,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,
     97102103126128255,   39,   92,    9,   10,   32126,
    128255,   39,   92,    9,   13,   32,   47,   48,   57,   58,   64,
     65,   70,   71,   96,   97102103126128255,   39,   92,
      9,   13,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,
     97102103126128255,   39,   92,    9,   13,   32,   47,
     48,   57,   58,   64,   65,   70,   71,   96,   97102103126,
    128255,   39,   92,    9,   13,   32,   47,   48,   57,   58,   64,
     65,   70,   71,   96,   97102103126128255,   39,   92,
      9,   13,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,
     97102103126128255,   39,   92,    9,   13,   32126,
    128255,   92,   95,   65,   90,   97122128255,   32,   45,
     92,   93,   95,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   45126,   48,   57,   65,   70,   97102128255,
     32,   45,   92,   93,   95,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   45,   92,   93,   95,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   45,   92,   93,   95,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   45,   92,
     93,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   45,   92,   93,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     45,   92,   93,   95,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   45126,   48,   57,   65,   70,   97102128,
    255,   32,   36,   42,   45,   61,   92,   93,   94,   95124126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   36,   42,   45,   61,   92,   93,   94,   95124,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   36,   42,   45,   61,   92,   93,   94,   95,
    124126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   36,   42,   45,   61,   92,   93,   94,
     95124126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   36,   42,   45,   61,   92,   93,
     94,   95124126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   36,   42,   45,   61,   92,
     93,   94,   95124126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   41,   43,   45,    9,   13,   32,   43,   45,
      9,   13,   32,    9,   13,   48,   57,   32,   41,    9,   13,   48,
     57118101110,   32,   41,    9,   13100100,   32,   45,
    126,   48,   57,   65,   70,   97102128255,   32,   45126,
     48,   57,   65,   70,   97102128255,   45,   92,   95,   65,
     90,   97122128255,   92,   95,   65,   90,   97122128,
    255,   32,   45126,   48,   57,   65,   70,   97102128255,
     32,   45126,   48,   57,   65,   70,   97102128255,   32,
     45126,   48,   57,   65,   70,   97102128255,   32,   45,
    126,   48,   57,   65,   70,   97102128255,   92,   95,   65,
     90,   97122128255,   32,   45126,   48,   57,   65,   70,
     97102128255,   32,   45126,   48,   57,   65,   70,   97,
    102128255,   45,   92,   95,   65,   90,   97122128255,
     92,   95,   65,   90,   97122128255,   45,   58,   92,   95,
    110,   65,   90,   97122128255,   92,   95,   65,   90,   97,
    122128255,   32,   43,   45101110111,    9,   13,   48,
     57110,   48,   57,   32,   41110,    9,   13,   48,   57,   32,
     41,    9,   13,   32,   45,   92,   95,    9,   13,   65,   90,   97,
    122128255,   92,   95,   65,   90,   97122128255,   32,
     36,   42,   45,   61,   92,   93,   94,   95124126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   36,   42,   61,
     93,   94124126,    9,   13,   61,   32,   34,   39,   45,   92,
     95,    9,   13,   65,   90,   97122128255,   32,   34,   39,
     45,   92,   95,    9,   13,   65,   90,   97122128255,    9,
     34,   92,   32126128255,   32,   93,    9,   13,   32,   93,
      9,   13,   12,   13,   34,   92,    9,   10,   32,   47,   48,   57,
     58,   64,   65,   70,   71,   96,   97102103126128255,
     34,   92,    9,   10,   32126128255,   34,   92,    9,   13,
     32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97102,
    103126128255,   34,   92,    9,   13,   32,   47,   48,   57,
     58,   64,   65,   70,   71,   96,   97102103126128255,
     34,   92,    9,   13,   32,   47,   48,   57,   58,   64,   65,   70,
     71,   96,   97102103126128255,   34,   92,    9,   13,
     32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97102,
    103126128255,   34,   92,    9,   13,   32,   47,   48,   57,
     58,   64,   65,   70,   71,   96,   97102103126128255,
     34,   92,    9,   13,   32126128255,    9,   39,   92,   32,
    126128255,   12,   13,   39,   92,    9,   10,   32,   47,   48,
     57,   58,   64,   65,   70,   71,   96,   97102103126128,
    255,   39,   92,    9,   10,   32126128255,   39,   92,    9,
     13,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97,
    102103126128255,   39,   92,    9,   13,   32,   47,   48,
     57,   58,   64,   65,   70,   71,   96,   97102103126128,
    255,   39,   92,    9,   13,   32,   47,   48,   57,   58,   64,   65,
     70,   71,   96,   97102103126128255,   39,   92,    9,
     13,   32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97,
    102103126128255,   39,   92,    9,   13,   32,   47,   48,
     57,   58,   64,   65,   70,   71,   96,   97102103126128,
    255,   39,   92,    9,   13,   32126128255,   92,   95,   65,
     90,   97122128255,   32,   45,   92,   93,   95,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   45126,   48,
     57,   65,   70,   97102128255,   32,   45,   92,   93,   95,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   45,   92,   93,   95,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   45,   92,
     93,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   45,   92,   93,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     45,   92,   93,   95,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   45,   92,   93,   95,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   45126,
     48,   57,   65,   70,   97102128255,   32,   36,   42,   45,
     61,   92,   93,   94,   95124126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   36,   42,
     45,   61,   92,   93,   94,   95124126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   36,
     42,   45,   61,   92,   93,   94,   95124126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     36,   42,   45,   61,   92,   93,   94,   95124126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   36,   42,   45,   61,   92,   93,   94,   95124126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   36,   42,   45,   61,   92,   93,   94,   95124126,
      9,   13,   48,   57,   65,   90,   97122128255,   32,   41,
     43,   45,    9,   13,   32,   43,   45,    9,   13,   32,    9,   13,
     48,   57,   32,   41,    9,   13,   48,   57118101110,   32,
     41,    9,   13100100,   32,   45126,   48,   57,   65,   70,
     97102128255,   32,   45126,   48,   57,   65,   70,   97,
    102128255,   45,   92,   95,   65,   90,   97122128255,
     92,   95,   65,   90,   97122128255,   32,   45126,   48,
     57,   65,   70,   97102128255,   32,   45126,   48,   57,
     65,   70,   97102128255,   32,   45126,   48,   57,   65,
     70,   97102128255,   32,   45126,   48,   57,   65,   70,
     97102128255,   32,   45126,   48,   57,   65,   70,   97,
    102128255,   32,   45126,   48,   57,   65,   70,   97102,
    128255,   92,   95,   65,   90,   97122128255,   32,   45,
    126,   48,   57,   65,   70,   97102128255,   32,   35,   42,
     45,   46,   58,   91,   92,   95,    9,   13,   65,   90,   97122,
    128255,   45,   92,   95,   48,   57,   65,   90,   97122128,
    255,   32,   35,   41,   45,   46,   58,   91,   92,   95,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   41,    9,   13,
     45,   92,   95,   65,   90,   97122128255,   92,   95,   65,
     90,   97122128255,   32,   35,   41,   45,   46,   58,   91,
     92,   95,    9,   13,   48,   57,   65,   90,   97122128255,
     45,   92,   95110,   65,   90,   97122128255,   92,   95,
     65,   90,   97122128255,   32,   35,   40,   41,   45,   46,
     58,   91,   92,   95,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   43,   45101110111,    9,   13,   48,   57,
    110,   48,   57,   32,   41110,    9,   13,   48,   57,   32,   41,
      9,   13,   32,   35,   41,   46,   58,   91,    9,   13,   32,   45,
     92,   95,    9,   13,   65,   90,   97122128255,   92,   95,
     65,   90,   97122128255,   32,   36,   42,   45,   61,   92,
     93,   94,   95124126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   36,   42,   61,   93,   94124126,    9,
     13,   61,   32,   34,   39,   45,   92,   95,    9,   13,   65,   90,
     97122128255,   32,   34,   39,   45,   92,   95,    9,   13,
     65,   90,   97122128255,    9,   34,   92,   32126128,
    255,   32,   93,    9,   13,   32,   93,    9,   13,   12,   13,   34,
     92,    9,   10,   32,   47,   48,   57,   58,   64,   65,   70,   71,
     96,   97102103126128255,   34,   92,    9,   10,   32,
    126128255,   34,   92,    9,   13,   32,   47,   48,   57,   58,
     64,   65,   70,   71,   96,   97102103126128255,   34,
     92,    9,   13,   32,   47,   48,   57,   58,   64,   65,   70,   71,
     96,   97102103126128255,   34,   92,    9,   13,   32,
     47,   48,   57,   58,   64,   65,   70,   71,   96,   97102103,
    126128255,   34,   92,    9,   13,   32,   47,   48,   57,   58,
     64,   65,   70,   71,   96,   97102103126128255,   34,
     92,    9,   13,   32,   47,   48,   57,   58,   64,   65,   70,   71,
     96,   97102103126128255,   34,   92,    9,   13,   32,
    126128255,    9,   39,   92,   32126128255,   12,   13,
     39,   92,    9,   10,   32,   47,   48,   57,   58,   64,   65,   70,
     71,   96,   97102103126128255,   39,   92,    9,   10,
     32126128255,   39,   92,    9,   13,   32,   47,   48,   57,
     58,   64,   65,   70,   71,   96,   97102103126128255,
     39,   92,    9,   13,   32,   47,   48,   57,   58,   64,   65,   70,
     71,   96,   97102103126128255,   39,   92,    9,   13,
     32,   47,   48,   57,   58,   64,   65,   70,   71,   96,   97102,
    103126128255,   39,   92,    9,   13,   32,   47,   48,   57,
     58,   64,   65,   70,   71,   96,   97102103126128255,
     39,   92,    9,   13,   32,   47,   48,   57,   58,   64,   65,   70,
     71,   96,   97102103126128255,   39,   92,    9,   13,
     32126128255,   92,   95,   65,   90,   97122128255,
     32,   45,   92,   93,   95,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   45126,   48,   57,   65,   70,   97102,
    128255,   32,   45,   92,   93,   95,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   45,   92,
     93,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   45,   92,   93,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     45,   92,   93,   95,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   45,   92,   93,   95,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   45,   92,   93,   95,    9,   13,   48,   57,   65,   90,
     97122128255,   32,   45126,   48,   57,   65,   70,   97,
    102128255,   32,   36,   42,   45,   61,   92,   93,   94,   95,
    124126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   36,   42,   45,   61,   92,   93,   94,
     95124126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   36,   42,   45,   61,   92,   93,
     94,   95124126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   36,   42,   45,   61,   92,
     93,   94,   95124126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   36,   42,   45,   61,
     92,   93,   94,   95124126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   36,   42,   45,
     61,   92,   93,   94,   95124126,    9,   13,   48,   57,   65,
     90,   97122128255,   32,   41,   43,   45,    9,   13,   32,
     43,   45,    9,   13,   32,    9,   13,   48,   57,   32,   41,    9,
     13,   48,   57118101110,   32,   41,    9,   13100100,
     32,   45126,   48,   57,   65,   70,   97102128255,   32,
     35,   40,   41,   45,   46,   58,   91,   92,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   41,   45,   46,   58,   91,   92,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   41,   45,   46,   58,   91,   92,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   41,   45,   46,   58,   91,   92,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   41,   45,   46,   58,   91,   92,   95,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   41,   45,   46,   58,   91,   92,   95,    9,   13,   48,
     57,   65,   90,   97122128255,   32,   35,   40,   41,   45,
     46,   58,   91,   92,   95111,    9,   13,   48,   57,   65,   90,
     97122128255,   32,   35,   40,   41,   45,   46,   58,   91,
     92,   95116,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   41,   45,   46,   58,   91,   92,   95,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   45126,   48,
     57,   65,   70,   97102128255,   32,   35,   41,   45,   46,
     58,   91,   92,   95,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   41,   45,   46,   58,
     91,   92,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   41,   45,   46,   58,   91,
     92,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   41,   45,   46,   58,   91,   92,
     95,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   41,   45,   46,   58,   91,   92,   95,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   41,   45,   46,   58,   91,   92,   95,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   45126,
     48,   57,   65,   70,   97102128255,   32,   35,   41,   45,
     46,   58,   91,   92,   95,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   41,   45,   46,
     58,   91,   92,   95,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   41,   45,   46,   58,
     91,   92,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   41,   45,   46,   58,   91,
     92,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   41,   45,   46,   58,   91,   92,
     95,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   41,   45,   46,   58,   91,   92,   95,
      9,   13,   48,   57,   65,   90,   97122128255,   32,   35,
     41,   46,   58,   91,    9,   13,   92,   95,   65,   90,   97122,
    128255,   32,   35,   41,   45,   46,   58,   91,   92,   95,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   45126,
     48,   57,   65,   70,   97102128255,   32,   35,   41,   45,
     46,   58,   91,   92,   95,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   41,   45,   46,
     58,   91,   92,   95,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   41,   45,   46,   58,
     91,   92,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   41,   45,   46,   58,   91,
     92,   95,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   41,   45,   46,   58,   91,   92,
     95,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   41,   45,   46,   58,   91,   92,   95,
      9,   13,   48,   57,   65,   90,   97122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   42,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   65,
     90,   97122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   35,   43,   44,   46,   58,   62,   91126,
      9,   13,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   90,   97122128255,   32,
     35,   43,   44,   46,   58,   62,   91126,    9,   13,   32,   35,
     40,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   40,   42,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   90,   97122128255,   32,
     35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   40,   42,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   40,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   40,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   40,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   40,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     40,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   90,   97122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   35,   42,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   90,   97122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   90,   97122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   35,   42,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   40,   43,
     44,   45,   46,   58,   62,   91,   92,   95111126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   40,   43,
     44,   45,   46,   58,   62,   91,   92,   95116126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   40,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   90,   97122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   35,   42,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   90,   97122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,
     97122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   42,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     90,   97122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   90,   97122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     90,   97122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   42,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   90,   97122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,
     97122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   42,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   43,   44,   46,   58,   62,   91126,    9,   13,   32,
     35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   40,   42,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   40,   42,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   40,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   35,   40,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   40,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   40,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   40,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   40,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   90,   97122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   42,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   90,   97122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     42,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   70,   71,   90,   97102103122128,
    255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     70,   71,   90,   97102103122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   70,   71,   90,   97102103122128255,   32,
     35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   40,
     43,   44,   45,   46,   58,   62,   91,   92,   95111126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   40,
     43,   44,   45,   46,   58,   62,   91,   92,   95116126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   40,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     42,   43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,
     13,   48,   57,   65,   90,   97122128255,   32,   35,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   90,   97122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     90,   97122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,
     90,   97102103122128255,   32,   35,   42,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   90,   97122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   90,   97122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   90,   97122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   42,   43,
     44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,
     57,   65,   90,   97122128255,   32,   35,   43,   44,   45,
     46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,
     90,   97122128255,   32,   35,   43,   44,   45,   46,   58,
     62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,   97,
    122128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,   97,
    102103122128255,   32,   35,   42,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,
     97122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   90,   97122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   70,   71,   90,   97102103122128255,
     32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95126,
      9,   13,   48,   57,   65,   70,   71,   90,   97102103122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   90,
     97122128255,   32,   35,   43,   44,   46,   58,   62,   91,
    126,    9,   13,   32,   35,   43,   44,   45,   46,   58,   62,   91,
     92,   95126,    9,   13,   48,   57,   65,   90,   97122128,
    255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,   95,
    126,    9,   13,   48,   57,   65,   70,   71,   90,   97102103,
    122128255,   32,   35,   42,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   90,   97122,
    128255,   32,   35,   43,   44,   45,   46,   58,   62,   91,   92,
     95126,    9,   13,   48,   57,   65,   70,   71,   90,   97102,
    103122128255,   32,   35,   43,   44,   45,   46,   58,   62,
     91,   92,   95126,    9,   13,   48,   57,   65,   70,   71,   90,
     97102103122128255,   32,   35,   43,   44,   45,   46,
     58,   62,   91,   92,   95126,    9,   13,   48,   57,   65,   70,
     71,   90,   97102103122128255,   32,   35,   43,   44,
     45,   46,   58,   62,   91,   92,   95126,    9,   13,   48,   57,
     65,   70,   71,   90,   97102103122128255,   32,   35,
     43,   44,   45,   46,   58,   62,   91,   92,   95126,    9,   13,
     48,   57,   65,   90,   97122128255,    0
  };
}

private static final char _Scanner_trans_keys[] = init__Scanner_trans_keys_0();


private static byte[] init__Scanner_single_lengths_0()
{
  return new byte [] {
      0,    9,    3,    3,    9,    3,    2,    5,    2,    6,    1,    3,
      2,    4,    2,   11,    8,    1,    6,    6,    3,    2,    2,    4,
      2,    2,    2,    2,    2,    2,    2,    3,    4,    2,    2,    2,
      2,    2,    2,    2,    2,    5,    3,    5,    5,    5,    5,    5,
      5,    3,   11,   11,   11,   11,   11,   11,    4,    3,    1,    2,
      1,    1,    1,    2,    1,    1,    3,    3,    3,    2,    3,    3,
      3,    3,    2,    3,    3,    3,    2,    5,    2,    6,    1,    3,
      2,    4,    2,   11,    8,    1,    6,    6,    3,    2,    2,    4,
      2,    2,    2,    2,    2,    2,    2,    3,    4,    2,    2,    2,
      2,    2,    2,    2,    2,    5,    3,    5,    5,    5,    5,    5,
      5,    3,   11,   11,   11,   11,   11,   11,    4,    3,    1,    2,
      1,    1,    1,    2,    1,    1,    3,    3,    3,    2,    3,    3,
      3,    3,    3,    3,    2,    3,    9,    3,    9,    2,    3,    2,
      9,    4,    2,   10,    6,    1,    3,    2,    6,    4,    2,   11,
      8,    1,    6,    6,    3,    2,    2,    4,    2,    2,    2,    2,
      2,    2,    2,    3,    4,    2,    2,    2,    2,    2,    2,    2,
      2,    5,    3,    5,    5,    5,    5,    5,    5,    3,   11,   11,
     11,   11,   11,   11,    4,    3,    1,    2,    1,    1,    1,    2,
      1,    1,    3,   10,   10,   10,   10,   10,   10,   11,   11,    9,
      3,    9,    9,    9,    9,    9,    9,    3,    9,    9,    9,    9,
      9,    9,    6,    2,    9,    3,    9,    9,    9,    9,    9,    9,
     12,   13,   12,    9,   12,   13,    9,   13,   14,   13,   13,   13,
     14,   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,   12,
     12,   13,   12,   12,   12,   13,   12,   12,   12,   12,   12,   12,
     12,   12,   12,   12,   14,   14,   13,   12,   13,   12,   12,   12,
     13,   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
     13,   12,   12,   12,   13,   12,   12,   12,   12,   12,   12,   12,
     12,   12,   12,   12,   13,    9,   13,   14,   13,   13,   13,   14,
     13,   13,   13,   13,   13,   13,   13,   13,   13,   13,   12,   12,
     13,   12,   12,   12,   13,   12,   12,   12,   12,   12,   12,   12,
     12,   12,   12,   14,   14,   13,   12,   13,   12,   12,   12,   13,
     12,   12,   12,   12,   12,   12,   12,   12,   12,   12,   12,   13,
     12,   12,   12,   13,   12,   12,   12,   12,   12,   12,   12,   12,
     12,   12,    9,   12,   12,   13,   12,   12,   12,   12,   12,    0
  };
}

private static final byte _Scanner_single_lengths[] = init__Scanner_single_lengths_0();


private static byte[] init__Scanner_range_lengths_0()
{
  return new byte [] {
      0,    4,    4,    4,    4,    3,    3,    3,    3,    2,    1,    2,
      1,    4,    3,    5,    1,    0,    4,    4,    2,    1,    1,    9,
      3,    9,    9,    9,    9,    9,    3,    2,    9,    3,    9,    9,
      9,    9,    9,    3,    3,    5,    4,    7,    7,    7,    7,    7,
      5,    4,    7,    7,    7,    7,    7,    5,    1,    1,    2,    2,
      0,    0,    0,    1,    0,    0,    4,    4,    3,    3,    4,    4,
      4,    4,    3,    4,    4,    3,    3,    3,    3,    2,    1,    2,
      1,    4,    3,    5,    1,    0,    4,    4,    2,    1,    1,    9,
      3,    9,    9,    9,    9,    9,    3,    2,    9,    3,    9,    9,
      9,    9,    9,    3,    3,    5,    4,    7,    7,    7,    7,    7,
      5,    4,    7,    7,    7,    7,    7,    5,    1,    1,    2,    2,
      0,    0,    0,    1,    0,    0,    4,    4,    3,    3,    4,    4,
      4,    4,    4,    4,    3,    4,    4,    4,    5,    1,    3,    3,
      5,    3,    3,    5,    2,    1,    2,    1,    1,    4,    3,    5,
      1,    0,    4,    4,    2,    1,    1,    9,    3,    9,    9,    9,
      9,    9,    3,    2,    9,    3,    9,    9,    9,    9,    9,    3,
      3,    5,    4,    7,    7,    7,    7,    7,    5,    4,    7,    7,
      7,    7,    7,    5,    1,    1,    2,    2,    0,    0,    0,    1,
      0,    0,    4,    7,    7,    7,    7,    7,    5,    5,    5,    5,
      4,    7,    7,    7,    7,    7,    5,    4,    7,    7,    7,    7,
      7,    5,    1,    3,    5,    4,    7,    7,    7,    7,    7,    5,
      5,    4,    5,    1,    5,    5,    1,    7,    5,    5,    5,    7,
      5,    7,    7,    7,    7,    5,    7,    7,    7,    7,    5,    5,
      7,    5,    5,    5,    7,    5,    7,    7,    7,    7,    5,    7,
      7,    7,    7,    5,    5,    5,    5,    7,    5,    5,    5,    7,
      5,    7,    7,    7,    7,    5,    7,    7,    7,    7,    5,    7,
      5,    5,    5,    7,    5,    7,    7,    7,    7,    5,    7,    7,
      7,    7,    5,    5,    5,    1,    7,    5,    5,    5,    7,    5,
      7,    7,    7,    7,    5,    7,    7,    7,    7,    5,    5,    7,
      5,    5,    5,    7,    5,    7,    7,    7,    7,    5,    7,    7,
      7,    7,    5,    5,    5,    5,    7,    5,    5,    5,    7,    5,
      7,    7,    7,    7,    5,    7,    7,    7,    7,    5,    7,    5,
      5,    5,    7,    5,    7,    7,    7,    7,    5,    7,    7,    7,
      7,    5,    1,    5,    7,    5,    7,    7,    7,    7,    5,    0
  };
}

private static final byte _Scanner_range_lengths[] = init__Scanner_range_lengths_0();


private static short[] init__Scanner_index_offsets_0()
{
  return new short [] {
      0,    0,   14,   22,   30,   44,   51,   57,   66,   72,   81,   84,
     90,   94103109126136138149160166170174,
    188194206218230242254260266280286298,
    310322334346352358369377390403416429,
    442453461480499518537556573579584588,
    593595597599603605607615623630636644,
    652660668674682690697703712718727730,
    736740749755772782784795806812816820,
    834840852864876888900906912926932944,
    956968980992998, 1004, 1015, 1023, 1036, 1049, 1062, 1075,
   1088, 1099, 1107, 1126, 1145, 1164, 1183, 1202, 1219, 1225, 1230, 1234,
   1239, 1241, 1243, 1245, 1249, 1251, 1253, 1261, 1269, 1276, 1282, 1290,
   1298, 1306, 1314, 1322, 1330, 1336, 1344, 1358, 1366, 1381, 1385, 1392,
   1398, 1413, 1421, 1427, 1443, 1452, 1455, 1461, 1465, 1473, 1482, 1488,
   1505, 1515, 1517, 1528, 1539, 1545, 1549, 1553, 1567, 1573, 1585, 1597,
   1609, 1621, 1633, 1639, 1645, 1659, 1665, 1677, 1689, 1701, 1713, 1725,
   1731, 1737, 1748, 1756, 1769, 1782, 1795, 1808, 1821, 1832, 1840, 1859,
   1878, 1897, 1916, 1935, 1952, 1958, 1963, 1967, 1972, 1974, 1976, 1978,
   1982, 1984, 1986, 1994, 2012, 2030, 2048, 2066, 2084, 2100, 2117, 2134,
   2149, 2157, 2174, 2191, 2208, 2225, 2242, 2257, 2265, 2282, 2299, 2316,
   2333, 2350, 2365, 2373, 2379, 2394, 2402, 2419, 2436, 2453, 2470, 2487,
   2502, 2520, 2538, 2556, 2567, 2585, 2604, 2615, 2636, 2656, 2675, 2694,
   2715, 2735, 2756, 2777, 2798, 2819, 2838, 2859, 2880, 2901, 2922, 2941,
   2959, 2979, 2998, 3016, 3034, 3054, 3073, 3093, 3113, 3133, 3153, 3171,
   3191, 3211, 3231, 3251, 3269, 3289, 3309, 3328, 3348, 3367, 3385, 3403,
   3423, 3442, 3462, 3482, 3502, 3522, 3540, 3560, 3580, 3600, 3620, 3638,
   3658, 3677, 3695, 3713, 3733, 3752, 3772, 3792, 3812, 3832, 3850, 3870,
   3890, 3910, 3930, 3948, 3966, 3985, 3996, 4017, 4037, 4056, 4075, 4096,
   4116, 4137, 4158, 4179, 4200, 4219, 4240, 4261, 4282, 4303, 4322, 4340,
   4360, 4379, 4397, 4415, 4435, 4454, 4474, 4494, 4514, 4534, 4552, 4572,
   4592, 4612, 4632, 4650, 4670, 4690, 4709, 4729, 4748, 4766, 4784, 4804,
   4823, 4843, 4863, 4883, 4903, 4921, 4941, 4961, 4981, 5001, 5019, 5039,
   5058, 5076, 5094, 5114, 5133, 5153, 5173, 5193, 5213, 5231, 5251, 5271,
   5291, 5311, 5329, 5340, 5358, 5378, 5397, 5417, 5437, 5457, 5477, 5495
  };
}

private static final short _Scanner_index_offsets[] = init__Scanner_index_offsets_0();


private static short[] init__Scanner_indicies_0()
{
  return new short [] {
      0,    2,    3,    4,    5,    6,    8,    9,    7,    0,    7,    7,
      7,    1,   10,   11,   10,   10,   10,   10,   10,    1,   12,   13,
     12,   12,   12,   12,   12,    1,   14,   15,   16,   17,   18,   19,
     21,   22,   20,   14,   20,   20,   20,    1,   23,   25,   24,   24,
     24,   24,    1,   27,   26,   26,   26,   26,    1,   28,   29,   31,
     30,   32,   30,   30,   30,    1,   34,   33,   33,   33,   33,    1,
     35,   36,   36,   38,   39,   40,   35,   37,    1,   42,   41,    1,
     43,   44,   42,   43,   41,    1,   45,   46,   45,    1,   21,   47,
     49,   48,   21,   48,   48,   48,    1,   51,   50,   50,   50,   50,
      1,   52,   53,   53,   50,   54,   51,   55,   53,   50,   53,   53,
     52,   50,   50,   50,   50,    1,   56,   57,   57,   58,   59,   57,
     57,   57,   56,    1,   60,    1,   61,   62,   63,   64,   66,   65,
     61,   65,   65,   65,    1,   67,   68,   69,   70,   72,   71,   67,
     71,   71,   71,    1,   73,   74,   75,   73,   73,    1,   76,   77,
     76,    1,   78,   59,   78,    1,   73,   79,   74,   75,   73,   73,
     80,   73,   80,   73,   80,   73,   73,    1,   74,   75,   73,   73,
     73,    1,   74,   75,   73,   73,   81,   73,   81,   73,   81,   73,
     73,    1,   74,   75,   73,   73,   82,   73,   82,   73,   82,   73,
     73,    1,   74,   75,   73,   73,   83,   73,   83,   73,   83,   73,
     73,    1,   74,   75,   73,   73,   84,   73,   84,   73,   84,   73,
     73,    1,   74,   75,   73,   73,   85,   73,   85,   73,   85,   73,
     73,    1,   74,   75,   73,   73,   73,    1,   86,   74,   87,   86,
     86,    1,   86,   88,   74,   87,   86,   86,   89,   86,   89,   86,
     89,   86,   86,    1,   74,   87,   86,   86,   86,    1,   74,   87,
     86,   86,   90,   86,   90,   86,   90,   86,   86,    1,   74,   87,
     86,   86,   91,   86,   91,   86,   91,   86,   86,    1,   74,   87,
     86,   86,   92,   86,   92,   86,   92,   86,   86,    1,   74,   87,
     86,   86,   93,   86,   93,   86,   93,   86,   86,    1,   74,   87,
     86,   86,   94,   86,   94,   86,   94,   86,   86,    1,   74,   87,
     86,   86,   86,    1,   96,   95,   95,   95,   95,    1,   76,   95,
     96,   77,   95,   76,   95,   95,   95,   95,    1,   95,   95,   95,
     97,   97,   97,   95,    1,   98,   95,   96,   77,   95,   98,   99,
     99,   95,   99,   95,   95,    1,   98,   95,   96,   77,   95,   98,
    100100,   95100,   95,   95,    1,   98,   95,   96,   77,   95,
     98101101,   95101,   95,   95,    1,   98,   95,   96,   77,
     95,   98102102,   95102,   95,   95,    1,   98,   95,   96,
     77,   95,   98103103,   95103,   95,   95,    1,   98,   95,
     96,   77,   95,   98,   95,   95,   95,   95,    1,   50,   50,   50,
    104104104,   50,    1105,   53,   53,   50,   54,   51,   55,
     53,   50,   53,   53105106106,   50106,   50,   50,    1,
    105,   53,   53,   50,   54,   51,   55,   53,   50,   53,   53105,
    107107,   50107,   50,   50,    1105,   53,   53,   50,   54,
     51,   55,   53,   50,   53,   53105108108,   50108,   50,
     50,    1105,   53,   53,   50,   54,   51,   55,   53,   50,   53,
     53105109109,   50109,   50,   50,    1105,   53,   53,
     50,   54,   51,   55,   53,   50,   53,   53105110110,   50,
    110,   50,   50,    1105,   53,   53,   50,   54,   51,   55,   53,
     50,   53,   53105,   50,   50,   50,   50,    1111,   44112,
    112111,    1111112112111,    1112112113,    1,
     43,   44,   43113,    1114,    1115,    1116,    1,   43,
     44,   43,    1117,    1116,    1,   33,   33,   33118118,
    118,   33,    1119119119120120120119,    1121,
    123122122122122,    1123122122122122,    1,
    122122122124124124122,    1125125125126,
    126126125,    1,   26,   26,   26127127127,   26,    1,
    128128128129129129128,    1130125125125,
    125,    1131131131132132132131,    1133133,
    133134134134133,    1135137136136136136,
      1139138138138138,    1140141143142144,
    142142142,    1146145145145145,    1147148,
    148150151152147149,    1154153,    1155156,
    154155153,    1157158157,    1159160162161,
    159161161161,    1164163163163163,    1165,
    166166163167164168166163166166165163,
    163163163,    1169170170171172170170170,
    169,    1173,    1174175176177179178174178,
    178178,    1180181182183185184180184184,
    184,    1186187188186186,    1189190189,    1,
    191172191,    1186192187188186186193186,
    193186193186186,    1187188186186186,    1,
    187188186186194186194186194186186,    1,
    187188186186195186195186195186186,    1,
    187188186186196186196186196186186,    1,
    187188186186197186197186197186186,    1,
    187188186186198186198186198186186,    1,
    187188186186186,    1199187200199199,    1,
    199201187200199199202199202199202199,
    199,    1187200199199199,    1187200199199,
    203199203199203199199,    1187200199199,
    204199204199204199199,    1187200199199,
    205199205199205199199,    1187200199199,
    206199206199206199199,    1187200199199,
    207199207199207199199,    1187200199199,
    199,    1209208208208208,    1189208209190,
    208189208208208208,    1208208208210210,
    210208,    1211208209190208211212212208,
    212208208,    1211208209190208211213213,
    208213208208,    1211208209190208211214,
    214208214208208,    1211208209190208211,
    215215208215208208,    1211208209190208,
    211216216208216208208,    1211208209190,
    208211208208208208,    1163163163217217,
    217163,    1218166166163167164168166163,
    166166218219219163219163163,    1218166,
    166163167164168166163166166218220220,
    163220163163,    1218166166163167164168,
    166163166166218221221163221163163,    1,
    218166166163167164168166163166166218,
    222222163222163163,    1218166166163167,
    164168166163166166218223223163223163,
    163,    1218166166163167164168166163166,
    166218163163163163,    1224156225225224,
      1224225225224,    1225225226,    1155156,
    155226,    1227,    1228,    1229,    1155156155,
      1230,    1229,    1145145145231231231145,
      1232232232233233233232,    1234236235,
    235235235,    1236235235235235,    1235235,
    235237237237235,    1238238238239239239,
    238,    1138138138240240240138,    1241241,
    241242242242241,    1243243243244244244,
    243,    1245245245246246246245,    1248247,
    247247247,    1247247247249249249247,    1,
    250251252253254255257258256250256256,
    256,    1259260259259259259259,    1261262,
    263264265266267268264261264264264264,
      1269270269,    1271273272272272272,    1,
    275274274274274,    1276277278274279280,
    281275274276274274274274,    1282284283,
    285283283283,    1287286286286286,    1288,
    289290291286292293294287286288286286,
    286286,    1295296296298299300295297,    1,
    302301,    1303304302303301,    1305306305,
      1307251308254255257307,    1257309311,
    310257310310310,    1313312312312312,    1,
    314315315312316313317315312315315314,
    312312312312,    1318319319320321319319,
    319318,    1322,    1323324325326328327323,
    327327327,    1329330331332334333329333,
    333333,    1335336337335335,    1338339338,
      1340321340,    1335341336337335335342,
    335342335342335335,    1336337335335335,
      1336337335335343335343335343335335,
      1336337335335344335344335344335335,
      1336337335335345335345335345335335,
      1336337335335346335346335346335335,
      1336337335335347335347335347335335,
      1336337335335335,    1348336349348348,
      1348350336349348348351348351348351,
    348348,    1336349348348348,    1336349348,
    348352348352348352348348,    1336349348,
    348353348353348353348348,    1336349348,
    348354348354348354348348,    1336349348,
    348355348355348355348348,    1336349348,
    348356348356348356348348,    1336349348,
    348348,    1358357357357357,    1338357358,
    339357338357357357357,    1357357357359,
    359359357,    1360357358339357360361361,
    357361357357,    1360357358339357360362,
    362357362357357,    1360357358339357360,
    363363357363357357,    1360357358339357,
    360364364357364357357,    1360357358339,
    357360365365357365357357,    1360357358,
    339357360357357357357,    1312312312366,
    366366312,    1367315315312316313317315,
    312315315367368368312368312312,    1367,
    315315312316313317315312315315367369,
    369312369312312,    1367315315312316313,
    317315312315315367370370312370312312,
      1367315315312316313317315312315315,
    367371371312371312312,    1367315315312,
    316313317315312315315367372372312372,
    312312,    1367315315312316313317315312,
    315315367312312312312,    1373304374374,
    373,    1373374374373,    1374374375,    1303,
    304303375,    1376,    1377,    1378,    1303304,
    303,    1379,    1378,    1286286286380380380,
    286,    1381289290291286292293294287286,
    381382382286382286286,    1381289290291,
    286292293294287286381383383286383286,
    286,    1381289290291286292293294287286,
    381384384286384286286,    1381289290291,
    286292293294287286381385385286385286,
    286,    1381289290291286292293294287286,
    381386386286386286286,    1381289290291,
    286292293294287286381286286286286,    1,
    288289290291286292293294287286387288,
    286286286286,    1288289290291286292293,
    294287286388288286286286286,    1288289,
    291286292293294287286288286286286286,
      1274274274389389389274,    1390277278,
    274279280281275274390391391274391274,
    274,    1390277278274279280281275274390,
    392392274392274274,    1390277278274279,
    280281275274390393393274393274274,    1,
    390277278274279280281275274390394394,
    274394274274,    1390277278274279280281,
    275274390395395274395274274,    1390277,
    278274279280281275274390274274274274,
      1264264264396396396264,    1397262263,
    264265266267268264397398398264398264,
    264,    1397262263264265266267268264397,
    399399264399264264,    1397262263264265,
    266267268264397400400264400264264,    1,
    397262263264265266267268264397401401,
    264401264264,    1397262263264265266267,
    268264397402402264402264264,    1397262,
    263264265266267268264397264264264264,
      1403404405406407408403,    1410409409,
    409409,    1403404405409406407408410409,
    403409409409409,    1409409409411411411,
    409,    1412404405409406407408410409412,
    413413409413409409,    1412404405409406,
    407408410409412414414409414409409,    1,
    412404405409406407408410409412415415,
    409415409409,    1412404405409406407408,
    410409412416416409416409409,    1412404,
    405409406407408410409412417417409417,
    409409,    1412404405409406407408410409,
    412409409409409,    1418419420421243422,
    423420424425243420418243243243243,    1,
    426,   15,   16427428,   17,   18,   19427,   21,   22,   20,
    427426,   20,   20,   20,    1418429420421131430,
    431420432433131420418131131131131,    1,
    434435436437438439436440436434,    1441,
    442443444,   26445446443447,   27,   26443441,
     26,   26,   26,   26,    1448449450451452,   33453,
    454451455,   34,   33451448,   33,   33,   33,   33,    1,
    456,   15457458,   18,   19457,   21457456,    1459,
    449450451452,   33453454451455,   34,   33451,
    459460460,   33460,   33,   33,    1448449450,   16,
    451452461453454451455463462451448,   33,
    462462462,    1448449450451452,   33453454,
    451455464119451448,   33119119119,    1465,
    466450467468119469470467471464119467,
    465119119119119,    1472466450467468119,
    469470467471464119467472473473119473,
    119119,    1465466450,   16467468462469470,
    467471463462467465119462462462,    1472,
    466450467468119469470467471464119467,
    472474474119474119119,    1472466450467,
    468119469470467471464119467472475475,
    119475119119,    1472466450467468119469,
    470467471464119467472476476119476119,
    119,    1472466450467468119469470467471,
    464119467472477477119477119119,    1472,
    466450467468119469470467471464119467,
    472119119119119,    1459449450451452,   33,
    453454451455,   34,   33451459478478,   33478,
     33,   33,    1459449450451452,   33453454451,
    455,   34,   33451459479479,   33479,   33,   33,    1,
    459449450451452,   33453454451455,   34,   33,
    451459480480,   33480,   33,   33,    1459449450,
    451452,   33453454451455,   34,   33451459481,
    481,   33481,   33,   33,    1459449450451452,   33,
    453454451455,   34,   33451459,   33,   33,   33,   33,
      1456,   15457458122,   18,   19457,   21123122,
    457456122122122122,    1482,   15457458122,
     18,   19457,   21123122457482483483122483,
    122122,    1456,   15,   16457458484,   18,   19457,
     21,   22,   20457456122,   20,   20,   20,    1456,   15,
    457458122,   18,   19457,   21130125457456122,
    125125125,    1434435436437125438439436,
    440130125436434125125125125,    1485435,
    436437125438439436440130125436485486,
    486125486125125,    1434435,   16436437,   20,
    438439436440,   22,   20436434125,   20,   20,   20,
      1485435436437125438439436440130125,
    436485487487125487125125,    1485435436,
    437125438439436440130125436485488488,
    125488125125,    1485435436437125438439,
    436440130125436485489489125489125125,
      1485435436437125438439436440130125,
    436485490490125490125125,    1485435436,
    437125438439436440130125436485125125,
    125125,    1482,   15457458122,   18,   19457,   21,
    123122457482491491122491122122,    1482,
     15457458122,   18,   19457,   21123122457482,
    492492122492122122,    1482,   15457458122,
     18,   19457,   21123122457482493493122493,
    122122,    1482,   15457458122,   18,   19457,   21,
    123122457482494494122494122122,    1482,
     15457458122,   18,   19457,   21123122457482,
    122122122122,    1448449450451452,   33453,
    454451455,   34,   33495451448,   33,   33,   33,   33,
      1448449450451452,   33453454451455,   34,
     33496451448,   33,   33,   33,   33,    1448449497,
    451452,   33453454451455,   34,   33451448,   33,
     33,   33,   33,    1498442443444,   26445446443,
    447,   27,   26443498499499,   26499,   26,   26,    1,
    441442,   16443444500445446443447502501,
    443441,   26501501501,    1441442443444,   26,
    445446443447503128443441,   26128128128,
      1504505506507128508509506510503128,
    506504128128128128,    1511505506507128,
    508509506510503128506511512512128512,
    128128,    1504505,   16506507501508509506,
    510502501506504128501501501,    1511505,
    506507128508509506510503128506511513,
    513128513128128,    1511505506507128508,
    509506510503128506511514514128514128,
    128,    1511505506507128508509506510503,
    128506511515515128515128128,    1511505,
    506507128508509506510503128506511516,
    516128516128128,    1511505506507128508,
    509506510503128506511128128128128,    1,
    498442443444,   26445446443447,   27,   26443,
    498517517,   26517,   26,   26,    1498442443444,
     26445446443447,   27,   26443498518518,   26,
    518,   26,   26,    1498442443444,   26445446443,
    447,   27,   26443498519519,   26519,   26,   26,    1,
    498442443444,   26445446443447,   27,   26443,
    498520520,   26520,   26,   26,    1498442443444,
     26445446443447,   27,   26443498,   26,   26,   26,
     26,    1521429420421131430431420432433,
    131420521522522131522131131,    1418429,
     16420421523430431420432525524420418,
    131524524524,    1418429420421131430431,
    420432526133420418131133133133,    1527,
    528529530133531532529533526133529527,
    133133133133,    1534528529530133531532,
    529533526133529534535535133535133133,
      1527528,   16529530524531532529533525,
    524529527133524524524,    1534528529530,
    133531532529533526133529534536536133,
    536133133,    1534528529530133531532529,
    533526133529534537537133537133133,    1,
    534528529530133531532529533526133529,
    534538538133538133133,    1534528529530,
    133531532529533526133529534539539133,
    539133133,    1534528529530133531532529,
    533526133529534133133133133,    1521429,
    420421131430431420432433131420521540,
    540131540131131,    1521429420421131430,
    431420432433131420521541541131541131,
    131,    1521429420421131430431420432433,
    131420521542542131542131131,    1521429,
    420421131430431420432433131420521543,
    543131543131131,    1521429420421131430,
    431420432433131420521131131131131,    1,
    441544443444138545546443547139138443,
    441138138138138,    1448548549451452145,
    550551451552146145451448145145145145,
      1456553457458554555457159457456,    1,
    556548549451452145550551451552146145,
    451556557557145557145145,    1448548549,
     16451452558550551451552560559451448,
    145559559559,    1448548549451452145550,
    551451552561232451448145232232232,    1,
    562563549564565232566567564568561232,
    564562232232232232,    1569563549564565,
    232566567564568561232564569570570232,
    570232232,    1562563549,   16564565559566,
    567564568560559564562232559559559,    1,
    569563549564565232566567564568561232,
    564569571571232571232232,    1569563549,
    564565232566567564568561232564569572,
    572232572232232,    1569563549564565232,
    566567564568561232564569573573232573,
    232232,    1569563549564565232566567564,
    568561232564569574574232574232232,    1,
    569563549564565232566567564568561232,
    564569232232232232,    1556548549451452,
    145550551451552146145451556575575145,
    575145145,    1556548549451452145550551,
    451552146145451556576576145576145145,
      1556548549451452145550551451552146,
    145451556577577145577145145,    1556548,
    549451452145550551451552146145451556,
    578578145578145145,    1556548549451452,
    145550551451552146145451556145145145,
    145,    1456553457458235554555457159236,
    235457456235235235235,    1579553457458,
    235554555457159236235457579580580235,
    580235235,    1456553,   16457458581554555,
    457159583582457456235582582582,    1456,
    553457458235554555457159584238457456,
    235238238238,    1585586587588238589590,
    587591584238587585238238238238,    1592,
    586587588238589590587591584238587592,
    593593238593238238,    1585586,   16587588,
    582589590587591583582587585238582582,
    582,    1592586587588238589590587591584,
    238587592594594238594238238,    1592586,
    587588238589590587591584238587592595,
    595238595238238,    1592586587588238589,
    590587591584238587592596596238596238,
    238,    1592586587588238589590587591584,
    238587592597597238597238238,    1592586,
    587588238589590587591584238587592238,
    238238238,    1579553457458235554555457,
    159236235457579598598235598235235,    1,
    579553457458235554555457159236235457,
    579599599235599235235,    1579553457458,
    235554555457159236235457579600600235,
    600235235,    1579553457458235554555457,
    159236235457579601601235601235235,    1,
    579553457458235554555457159236235457,
    579235235235235,    1448548549451452145,
    550551451552146145602451448145145145,
    145,    1448548549451452145550551451552,
    146145603451448145145145145,    1448548,
    604451452145550551451552146145451448,
    145145145145,    1605544443444138545546,
    443547139138443605606606138606138138,
      1441544,   16443444607545546443547609,
    608443441138608608608,    1441544443444,
    138545546443547610241443441138241241,
    241,    1611612613614241615616613617610,
    241613611241241241241,    1618612613614,
    241615616613617610241613618619619241,
    619241241,    1611612,   16613614608615616,
    613617609608613611241608608608,    1618,
    612613614241615616613617610241613618,
    620620241620241241,    1618612613614241,
    615616613617610241613618621621241621,
    241241,    1618612613614241615616613617,
    610241613618622622241622241241,    1618,
    612613614241615616613617610241613618,
    623623241623241241,    1618612613614241,
    615616613617610241613618241241241241,
      1605544443444138545546443547139138,
    443605624624138624138138,    1605544443,
    444138545546443547139138443605625625,
    138625138138,    1605544443444138545546,
    443547139138443605626626138626138138,
      1605544443444138545546443547139138,
    443605627627138627138138,    1605544443,
    444138545546443547139138443605138138,
    138138,    1628419420421243422423420424,
    425243420628629629243629243243,    1418,
    419,   16420421630422423420424632631420,
    418243631631631,    1418419420421243422,
    423420424633245420418243245245245,    1,
    634635636637245638639636640633245636,
    634245245245245,    1641635636637245638,
    639636640633245636641642642245642245,
    245,    1634635,   16636637631638639636640,
    632631636634245631631631,    1641635636,
    637245638639636640633245636641643643,
    245643245245,    1641635636637245638639,
    636640633245636641644644245644245245,
      1641635636637245638639636640633245,
    636641645645245645245245,    1641635636,
    637245638639636640633245636641646646,
    245646245245,    1641635636637245638639,
    636640633245636641245245245245,    1628,
    419420421243422423420424425243420628,
    647647243647243243,    1628419420421243,
    422423420424425243420628648648243648,
    243243,    1628419420421243422423420424,
    425243420628649649243649243243,    1628,
    419420421243422423420424425243420628,
    650650243650243243,    1628419420421243,
    422423420424425243420628243243243243,
      1434586436437589590436591436434,    1,
    434586436437247589590436591248247436,
    434247247247247,    1651586436437247589,
    590436591248247436651652652247652247,
    247,    1434586,   16436437653589590436591,
    654653436434247653653653,    1651586436,
    437247589590436591248247436651655655,
    247655247247,    1651586436437247589590,
    436591248247436651656656247656247247,
      1651586436437247589590436591248247,
    436651657657247657247247,    1651586436,
    437247589590436591248247436651658658,
    247658247247,    1651586436437247589590,
    436591248247436651247247247247,    1,    1,
      0
  };
}

private static final short _Scanner_indicies[] = init__Scanner_indicies_0();


private static short[] init__Scanner_trans_targs_0()
{
  return new short [] {
      1,    0,    2398148,   77,   79399,   85149252146,
    254,   75,    4,    3255,   74,    5,    7279,   13,   71,    6,
    256,   72256,   72,    8,   68257,   66292257,   66,    9,
     10,   11,   60,   56,   64,   11,   56,   12258,   12258,   14,
     15,   49,   15,   49,   16,   17,   18258,   16,   17,   18258,
     18,   19,   20,   31,   40,   41,   42,   19,   20,   31,   40,   41,
     42,   20,   21,   23,   22258,   22,   24,   25,   26,   27,   28,
     29,   30,   31,   32,   33,   34,   35,   36,   37,   38,   39,   41,
     42,   43,   41,   44,   45,   46,   47,   48,   50,   15,   51,   52,
     53,   54,   55,   57,   58,   59,   61,   62,   63,   65259262,
    263,   69275,   70276279280295298299,   71254,
    311314315,   78327144327144,   80140328138,
    363328138,   81,   82,   83132128136,   83128,   84,
    329,   84329,   85,   86,   87121,   87121,   88,   89,   90,
    329,   88,   89,   90329,   90,   91,   92103112113114,
     91,   92103112113114,   92,   93,   95,   94329,   94,
     96,   97,   98,   99100101102103104105106107,
    108109110111113114115113116117118119,
    120122,   87123124125126127129130131133,
    134135137330333334141346142347350351,
    366369370252382385386399149400150151,
    242243154157244165245152235153151407,
    152154157165235153407155156228156228,
    153151407154157165158159218225159218,
    153151160407154157165160161162212208,
    216162208163164163164153407166167201,
    167201168169170164168169170164170171,
    172183192193194171172183192193194172,
    173175174164174176177178179180181182,
    183184185186187188189190191193194195,
    193196197198199200202167203204205206,
    207209210211213214215217219159220221,
    222223224226227229156230231232233234,
    236152237238239240241153151407154157,
    165244245246244247248249250251253,    2,
      4,    1,   77,   79,   85146253,    4,    1,    3,    5,    7,
     13,   75253,    3,    4,    1,    5,    7,   13253,    3,    4,
      1,    5,    7,   13253,    3,    9,    4,    1,    5,    7,   13,
    253,    4,    1260270261262,   67,   67253,    3,    4,
      1,    5,    7,   13264265266267268269271272,
    273274277287278281282283284285286288,
    289290291293294258296306297298,   73,   73,
    253,    3,    4,    1,    5,    7,   13300301302303304,
    305307308309310312322313314,   76,   76253,
      3,    4,    1,    5,    7,   13316317318319320321,
    323324325326,    2,   77,   79,   85,    2,   81,   77,   79,
     85,    2,   77,   79331341332333139139253,    2,
      4,    1,   77,   79,   85335336337338339340342,
    343344345348358349350143143253,    2,    4,
      1,   77,   79,   85352353354355356357359360,
    361362364365329367377368369145145253,
      2,    4,    1,   77,   79,   85371372373374375376,
    378379380381383393384385147147253,    2,
      4,    1,   77,   79,   85387388389390391392394,
    395396397401402399149403404405406
  };
}

private static final short _Scanner_trans_targs[] = init__Scanner_trans_targs_0();


private static short[] init__Scanner_trans_actions_0()
{
  return new short [] {
      0,    0,   13,   49,   49,   13,   13,   49,   13,   49,   19,   19,
     19,   19,    0,    0,   19,   19,    0,    0,   19,    0,   19,   19,
     19,   19,    0,    0,   19,    0,   19,   19,   19,    0,    0,    0,
     19,   19,   19,   19,   19,    0,    0,   23,   23,    0,    0,   19,
     19,   19,    0,    0,    3,   34,   34,   31,    0,   19,   19,    1,
      0,    5,   37,   37,   37,   37,   37,    0,   19,   19,   19,   19,
     19,    0,    0,    0,    7,   40,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    7,    0,    0,    0,    0,    0,    0,    3,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,   19,   19,   19,    0,    0,   19,    0,   19,   19,
     19,    0,    0,    0,   19,   19,   19,   19,   19,    0,    0,   23,
     23,    0,    0,    0,   19,   19,   19,    0,    0,    3,   34,   34,
     31,    0,   19,   19,    1,    0,    5,   37,   37,   37,   37,   37,
      0,   19,   19,   19,   19,   19,    0,    0,    0,    7,   40,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    7,    0,    0,    0,    0,
      0,    0,    3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     19,   19,    0,    0,   19,    0,   19,   19,   19,   52,   17174,
      0,   17,   17,   17,    0,    0,   61,   19,   19,   19,    0,    0,
     43,    9159,    9,    9,    9,   19,   19,   19,   19,    0,    0,
     64,   21,   25189,   21,   21,   21,    0,   19,   19,   19,   19,
     19,    0,    0,   23,   23,    0,    0,   27127,   19,   19,   19,
      0,    0,    3,   34,   34,   31,    0,   19,   19,    1,    0,    5,
     37,   37,   37,   37,   37,    0,   19,   19,   19,   19,   19,    0,
      0,    0,    7,   40,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      7,    0,    0,    0,    0,    0,    0,    3,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,   64,    0,    0,
      0,    0,    0,    0,    0,    0,   43,    0,    0,    0,    0,    0,
      0,   52,    0,    0,    0,    0,    0,   88,   29234,   29,   29,
     29,    0,    0,    0,   88,    0,    0,    0,    0,    0,   52,   17,
    103107,   17,   17,   17,    0,    0,   11,   15,   17,   17,   17,
     17,    0,   88,   29151155,   29,   29,   29,   43,    9,   91,
     95,    9,    9,    9,   64,   21,   25115119,   21,   21,   21,
     27,   70,   73,   64,    0,   19,   19,   19,    0147,   85224,
    229,   85,   85,   85147,    0,    0,    0,    0,    0,    0,    0,
      0,    0,   27,    0,   19,   88,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,   58,   43,    0,   19,   19,   19,    0,
    139,   79204209,   79,   79,   79139,    0,    0,    0,    0,
      0,    0,    0,    0,    0,   52,    0,   19,   19,   19,    0143,
     82214219,   82,   82,   82143,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    9,    9,    9,    9,   21,   25,   21,   21,
     21,    0,    0,    0,   64,    0,   19,   19,   19,    0123,   67,
    194199,   67,   67,   67123,    0,    0,    0,    0,    0,    0,
      0,    0,    0,   27,    0,   19,   19,   19,    0,   76,   29131,
    135,   29,   29,   29,   76,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,   58,   43,    0,   19,   19,   19,    0,   99,
     46164169,   46,   46,   46,   99,    0,    0,    0,    0,    0,
      0,    0,    0,    0,   52,    0,   19,   19,   19,    0111,   55,
    179184,   55,   55,   55111,    0,    0,    0,    0,    0,    0,
      0,    0,    0,   88,    0,   19,   19,    0,    0,    0,    0
  };
}

private static final short _Scanner_trans_actions[] = init__Scanner_trans_actions_0();


private static short[] init__Scanner_eof_actions_0()
{
  return new short [] {
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    107,   15107155,   95119,   73119119119229229,
    229229229229229229119119119119119,   73,
     73,   73,   73155155155155155155155155,   73,
     73,   73,   73,   73119119119,   95,   95,   95209209,
    209209209209209209,   95,   95,   95,   95,   95107,
    107107219219219219219219219219107107,
    107107107,   95119,   73119119119199199199,
    199199199199199119119119119119,   73,   73,
     73,   73135135135135135135135135,   73,   73,
     73,   73,   73119119119,   95,   95,   95169169169,
    169169169169169,   95,   95,   95,   95,   95107107,
    107184184184184184184184184107107107,
    107107155155155155155155155155155,    0
  };
}

private static final short _Scanner_eof_actions[] = init__Scanner_eof_actions_0();


static final int Scanner_start = 1;
static final int Scanner_first_final = 252;
static final int Scanner_error = 0;

static final int Scanner_en_neg = 150;
static final int Scanner_en_main = 1;


// line 183 "Scanner.java.rl"

 
  /**
   * Scan the {@link #input}.
   *
   * @return A list of selector groups that contain a list of {@link Selector}s scanned.
   * @throws ScannerException If the input is invalid.
   */
  public List<List<Selector>> scan() throws ScannerException {
    char[] data = input.toCharArray();
    int cs;
    int top;
    int[] stack = new int[32];
    int eof = data.length;
    int p = 0;
    int pe = eof;
   
      int mark = 0;
     
      LinkedList<List<Selector>> selectors = new LinkedList<List<Selector>>();
      // List<Selector> parts = new LinkedList<Selector>();
            List<Selector> parts = null;

      String tagName = Selector.UNIVERSAL_TAG;
      String negationTagName = Selector.UNIVERSAL_TAG;
      Selector.Combinator combinator = null;
      List<Specifier> specifiers = new LinkedList<Specifier>();
   
    String attributeName = null;
    String attributeValue = null;
    AttributeSpecifier.Match attributeMatch = null;

    String pseudoNthClass = null;
   
    boolean isNegation = false;
    Selector negationSelector = null;
   
   
// line 1538 "../java/se/fishtank/css/selectors/scanner/Scanner.java"
  {
  cs = Scanner_start;
  top = 0;
  }

// line 221 "Scanner.java.rl"
   
// line 1546 "../java/se/fishtank/css/selectors/scanner/Scanner.java"
  {
  int _klen;
  int _trans = 0;
  int _acts;
  int _nacts;
  int _keys;
  int _goto_targ = 0;

  _goto: while (true) {
  switch ( _goto_targ ) {
  case 0:
  if ( p == pe ) {
    _goto_targ = 4;
    continue _goto;
  }
  if ( cs == 0 ) {
    _goto_targ = 5;
    continue _goto;
  }
case 1:
  _match: do {
  _keys = _Scanner_key_offsets[cs];
  _trans = _Scanner_index_offsets[cs];
  _klen = _Scanner_single_lengths[cs];
  if ( _klen > 0 ) {
    int _lower = _keys;
    int _mid;
    int _upper = _keys + _klen - 1;
    while (true) {
      if ( _upper < _lower )
        break;

      _mid = _lower + ((_upper-_lower) >> 1);
      if ( data[p] < _Scanner_trans_keys[_mid] )
        _upper = _mid - 1;
      else if ( data[p] > _Scanner_trans_keys[_mid] )
        _lower = _mid + 1;
      else {
        _trans += (_mid - _keys);
        break _match;
      }
    }
    _keys += _klen;
    _trans += _klen;
  }

  _klen = _Scanner_range_lengths[cs];
  if ( _klen > 0 ) {
    int _lower = _keys;
    int _mid;
    int _upper = _keys + (_klen<<1) - 2;
    while (true) {
      if ( _upper < _lower )
        break;

      _mid = _lower + (((_upper-_lower) >> 1) & ~1);
      if ( data[p] < _Scanner_trans_keys[_mid] )
        _upper = _mid - 2;
      else if ( data[p] > _Scanner_trans_keys[_mid+1] )
        _lower = _mid + 2;
      else {
        _trans += ((_mid - _keys)>>1);
        break _match;
      }
    }
    _trans += _klen;
  }
  } while (false);

  _trans = _Scanner_indicies[_trans];
  cs = _Scanner_trans_targs[_trans];

  if ( _Scanner_trans_actions[_trans] != 0 ) {
    _acts = _Scanner_trans_actions[_trans];
    _nacts = (int) _Scanner_actions[_acts++];
    while ( _nacts-- > 0 )
  {
      switch ( _Scanner_actions[_acts++] )
      {
  case 0:
// line 44 "Scanner.java.rl"
  {
      AttributeSpecifier specifier;
      if (attributeValue != null) {
          specifier = new AttributeSpecifier(attributeName, attributeValue, attributeMatch);
      } else {
          specifier = new AttributeSpecifier(attributeName);
      }
     
      specifiers.add(specifier);
  }
  break;
  case 1:
// line 55 "Scanner.java.rl"
  {
      attributeName = getSlice(mark, p);
  }
  break;
  case 2:
// line 59 "Scanner.java.rl"
  {
      String m = getSlice(mark, p);
      if ("=".equals(m)) {
          attributeMatch = AttributeSpecifier.Match.EXACT;
      } else if ("~=".equals(m)) {
          attributeMatch = AttributeSpecifier.Match.LIST;
      } else if ("|=".equals(m)) {
          attributeMatch = AttributeSpecifier.Match.HYPHEN;
      } else if ("^=".equals(m)) {
          attributeMatch = AttributeSpecifier.Match.PREFIX;
      } else if ("$=".equals(m)) {
          attributeMatch = AttributeSpecifier.Match.SUFFIX;
      } else if ("*=".equals(m)) {
          attributeMatch = AttributeSpecifier.Match.CONTAINS;
      }
  }
  break;
  case 3:
// line 76 "Scanner.java.rl"
  {
      String value = getSlice(mark, p);
      if (value.charAt(0) == '"' || value.charAt(0) == '\'') {
          value = value.substring(1, value.length() - 1);
      }
         
      attributeValue = value;
  }
  break;
  case 4:
// line 85 "Scanner.java.rl"
  {
      specifiers.add(new AttributeSpecifier("class",
          getSlice(mark, p), AttributeSpecifier.Match.LIST));
  }
  break;
  case 5:
// line 90 "Scanner.java.rl"
  {
      switch (data[p]) {
      case ' ':
          combinator = Selector.Combinator.DESCENDANT;
          break;
      case '>':
          combinator = Selector.Combinator.CHILD;
          break;
      case '+':
          combinator = Selector.Combinator.ADJACENT_SIBLING;
          break;
      case '~':
          combinator = Selector.Combinator.GENERAL_SIBLING;
          break;
      }
  }
  break;
  case 6:
// line 107 "Scanner.java.rl"
  {
      parts = new LinkedList<Selector>();
  }
  break;
  case 7:
// line 111 "Scanner.java.rl"
  {
      selectors.add(parts);
  }
  break;
  case 8:
// line 115 "Scanner.java.rl"
  {
      specifiers.add(new AttributeSpecifier("id",
          getSlice(mark, p), AttributeSpecifier.Match.EXACT));
  }
  break;
  case 9:
// line 120 "Scanner.java.rl"
  {
      mark = p;
  }
  break;
  case 10:
// line 124 "Scanner.java.rl"
  {
      isNegation = true;
  }
  break;
  case 11:
// line 128 "Scanner.java.rl"
  {
      specifiers.add(new NegationSpecifier(negationSelector));
      isNegation = false;
  }
  break;
  case 12:
// line 133 "Scanner.java.rl"
  {
            specifiers.add(new PseudoClassSpecifier(getSlice(mark, p)));   
  }
  break;
  case 13:
// line 137 "Scanner.java.rl"
  {
      specifiers.add(new PseudoNthSpecifier(pseudoNthClass, getSlice(mark, p)));
  }
  break;
  case 14:
// line 141 "Scanner.java.rl"
  {
      pseudoNthClass = getSlice(mark, p);
  }
  break;
  case 15:
// line 145 "Scanner.java.rl"
  {
      Selector selector;
      List<Specifier> list = specifiers.isEmpty() ? null : specifiers;
      if (isNegation) {
          negationSelector = new Selector(negationTagName, list);
      } else {
          if (combinator == null) {
              selector = new Selector(tagName, list);
          } else {
              selector = new Selector(tagName, combinator, list);
          }
         
          parts.add(selector);
          tagName = Selector.UNIVERSAL_TAG;
          combinator = null;
      }
     
      negationTagName = Selector.UNIVERSAL_TAG;
      attributeName = null;
      attributeValue = null;
      attributeMatch = null;
      pseudoNthClass = null;
      specifiers = new LinkedList<Specifier>();
  }
  break;
  case 16:
// line 170 "Scanner.java.rl"
  {
      if (isNegation) {
          negationTagName = getSlice(mark, p);
      } else {
          tagName = getSlice(mark, p);
      }
  }
  break;
  case 17:
// line 28 "ScannerCommon.rl"
  { {stack[top++] = cs; cs = 150; _goto_targ = 2; if (true) continue _goto;} }
  case 18:
// line 42 "ScannerCommon.rl"
  { {cs = stack[--top];_goto_targ = 2; if (true) continue _goto;} }
// line 1802 "../java/se/fishtank/css/selectors/scanner/Scanner.java"
      }
    }
  }

case 2:
  if ( cs == 0 ) {
    _goto_targ = 5;
    continue _goto;
  }
  if ( ++p != pe ) {
    _goto_targ = 1;
    continue _goto;
  }
case 4:
  if ( p == eof )
  {
  int __acts = _Scanner_eof_actions[cs];
  int __nacts = (int) _Scanner_actions[__acts++];
  while ( __nacts-- > 0 ) {
    switch ( _Scanner_actions[__acts++] ) {
  case 4:
// line 85 "Scanner.java.rl"
  {
      specifiers.add(new AttributeSpecifier("class",
          getSlice(mark, p), AttributeSpecifier.Match.LIST));
  }
  break;
  case 7:
// line 111 "Scanner.java.rl"
  {
      selectors.add(parts);
  }
  break;
  case 8:
// line 115 "Scanner.java.rl"
  {
      specifiers.add(new AttributeSpecifier("id",
          getSlice(mark, p), AttributeSpecifier.Match.EXACT));
  }
  break;
  case 12:
// line 133 "Scanner.java.rl"
  {
            specifiers.add(new PseudoClassSpecifier(getSlice(mark, p)));   
  }
  break;
  case 15:
// line 145 "Scanner.java.rl"
  {
      Selector selector;
      List<Specifier> list = specifiers.isEmpty() ? null : specifiers;
      if (isNegation) {
          negationSelector = new Selector(negationTagName, list);
      } else {
          if (combinator == null) {
              selector = new Selector(tagName, list);
          } else {
              selector = new Selector(tagName, combinator, list);
          }
         
          parts.add(selector);
          tagName = Selector.UNIVERSAL_TAG;
          combinator = null;
      }
     
      negationTagName = Selector.UNIVERSAL_TAG;
      attributeName = null;
      attributeValue = null;
      attributeMatch = null;
      pseudoNthClass = null;
      specifiers = new LinkedList<Specifier>();
  }
  break;
  case 16:
// line 170 "Scanner.java.rl"
  {
      if (isNegation) {
          negationTagName = getSlice(mark, p);
      } else {
          tagName = getSlice(mark, p);
      }
  }
  break;
// line 1886 "../java/se/fishtank/css/selectors/scanner/Scanner.java"
    }
  }
  }

case 5:
  }
  break; }
  }

// line 222 "Scanner.java.rl"
   
    if (cs < Scanner_first_final && p != pe) {
        // TODO: Better error reporting ;)
      throw new ScannerException("Bad input!");
    }
   
    return selectors;
  }

  /**
   * Get a slice from the {@linkplain #input scanner input}.
   *
   * @param start The start offset.
   * @param end The end offset.
   * @return A substring starting at {@code start} and ending in {@code end}.
   */
  private String getSlice(int start, int end) {
    return input.substring(start, end);
  }
 
}
TOP

Related Classes of com.connect_group.thymesheet.css.selectors.scanner.Scanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.