Fix for 3254464, radio buttons do not work for quiz on netscape.com. Left/top overf...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Dec 2004 00:34:02 +0000 (00:34 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Dec 2004 00:34:02 +0000 (00:34 +0000)
This also fixes 3106907, link hover color only partially set on rollover and the more general architecture bug
3126929, handle top/left overflow.

This patch also fixes 3902891, scroll bar of position:fixed content moves when a page is scrolled.

Finally, the Emerson regression 3869718 (error involving computing the rightmost/lowest position of overflow:auto
regions and web pages) has been fixed.

        Reviewed by mjs

        * khtml/rendering/bidi.cpp:
        (khtml::RenderBlock::computeHorizontalPositionsForLine):
        (khtml::RenderBlock::checkLinesForOverflow):
        * khtml/rendering/render_block.cpp:
        (khtml:::RenderFlow):
        (khtml::RenderBlock::overflowHeight):
        (khtml::RenderBlock::overflowWidth):
        (khtml::RenderBlock::overflowLeft):
        (khtml::RenderBlock::overflowTop):
        (khtml::RenderBlock::overflowRect):
        (khtml::RenderBlock::layoutBlock):
        (khtml::RenderBlock::layoutBlockChildren):
        (khtml::RenderBlock::paint):
        (khtml::RenderBlock::floatRect):
        (khtml::RenderBlock::lowestPosition):
        (khtml::RenderBlock::rightmostPosition):
        (khtml::RenderBlock::leftmostPosition):
        (khtml::RenderBlock::nodeAtPoint):
        * khtml/rendering/render_block.h:
        * khtml/rendering/render_box.h:
        (khtml::RenderBox::borderBox):
        (khtml::RenderBox::borderTopExtra):
        (khtml::RenderBox::borderBottomExtra):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paintScrollbars):
        (mustExamineRenderer):
        (RenderLayer::intersectsDamageRect):
        (RenderLayer::containsPoint):
        * khtml/rendering/render_line.cpp:
        (khtml::InlineFlowBox::placeBoxesHorizontally):
        (khtml::InlineFlowBox::verticallyAlignBoxes):
        * khtml/rendering/render_line.h:
        (khtml::InlineBox::leftOverflow):
        (khtml::InlineBox::rightOverflow):
        (khtml::InlineFlowBox::setVerticalOverflowPositions):
        (khtml::RootInlineBox::RootInlineBox):
        (khtml::RootInlineBox::leftOverflow):
        (khtml::RootInlineBox::rightOverflow):
        (khtml::RootInlineBox::setVerticalOverflowPositions):
        (khtml::RootInlineBox::setHorizontalOverflowPositions):
        * khtml/rendering/render_object.h:
        (khtml::RenderObject::borderBox):
        (khtml::RenderObject::overflowLeft):
        (khtml::RenderObject::overflowTop):
        (khtml::RenderObject::overflowRect):
        (khtml::RenderObject::floatRect):
        * khtml/rendering/render_table.cpp:
        (RenderTable::layout):
        (RenderTable::paint):
        (RenderTable::paintBoxDecorations):
        (RenderTable::calcMinMaxWidth):
        * khtml/rendering/render_table.h:
        (khtml::RenderTableCell::borderTopExtra):
        (khtml::RenderTableCell::borderBottomExtra):
        * kwq/KWQRect.h:
        * kwq/KWQRect.mm:
        (QRect::inflate):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8137 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
WebCore/ChangeLog-2005-08-23
WebCore/khtml/css/cssproperties.c
WebCore/khtml/css/cssvalues.c
WebCore/khtml/rendering/bidi.cpp
WebCore/khtml/rendering/render_block.cpp
WebCore/khtml/rendering/render_block.h
WebCore/khtml/rendering/render_box.h
WebCore/khtml/rendering/render_layer.cpp
WebCore/khtml/rendering/render_line.cpp
WebCore/khtml/rendering/render_line.h
WebCore/khtml/rendering/render_object.h
WebCore/khtml/rendering/render_table.cpp
WebCore/khtml/rendering/render_table.h
WebCore/kwq/KWQRect.h
WebCore/kwq/KWQRect.mm

index b0ddc595ff222f7d31eab073a247120f8a964b78..e9bf0893444adbbd77ee45ef1abf9d3f950b4c61 100644 (file)
@@ -1,3 +1,74 @@
+2004-12-06  David Hyatt  <hyatt@apple.com>
+
+       Fix for 3254464, radio buttons do not work for quiz on netscape.com.  Left/top overflow needed to be implemented.
+       This also fixes 3106907, link hover color only partially set on rollover and the more general architecture bug
+       3126929, handle top/left overflow.
+
+       This patch also fixes 3902891, scroll bar of position:fixed content moves when a page is scrolled.
+
+       Finally, the Emerson regression 3869718 (error involving computing the rightmost/lowest position of overflow:auto
+       regions and web pages) has been fixed.
+       
+        Reviewed by mjs
+
+        * khtml/rendering/bidi.cpp:
+        (khtml::RenderBlock::computeHorizontalPositionsForLine):
+        (khtml::RenderBlock::checkLinesForOverflow):
+        * khtml/rendering/render_block.cpp:
+        (khtml:::RenderFlow):
+        (khtml::RenderBlock::overflowHeight):
+        (khtml::RenderBlock::overflowWidth):
+        (khtml::RenderBlock::overflowLeft):
+        (khtml::RenderBlock::overflowTop):
+        (khtml::RenderBlock::overflowRect):
+        (khtml::RenderBlock::layoutBlock):
+        (khtml::RenderBlock::layoutBlockChildren):
+        (khtml::RenderBlock::paint):
+        (khtml::RenderBlock::floatRect):
+        (khtml::RenderBlock::lowestPosition):
+        (khtml::RenderBlock::rightmostPosition):
+        (khtml::RenderBlock::leftmostPosition):
+        (khtml::RenderBlock::nodeAtPoint):
+        * khtml/rendering/render_block.h:
+        * khtml/rendering/render_box.h:
+        (khtml::RenderBox::borderBox):
+        (khtml::RenderBox::borderTopExtra):
+        (khtml::RenderBox::borderBottomExtra):
+        * khtml/rendering/render_layer.cpp:
+        (RenderLayer::paintScrollbars):
+        (mustExamineRenderer):
+        (RenderLayer::intersectsDamageRect):
+        (RenderLayer::containsPoint):
+        * khtml/rendering/render_line.cpp:
+        (khtml::InlineFlowBox::placeBoxesHorizontally):
+        (khtml::InlineFlowBox::verticallyAlignBoxes):
+        * khtml/rendering/render_line.h:
+        (khtml::InlineBox::leftOverflow):
+        (khtml::InlineBox::rightOverflow):
+        (khtml::InlineFlowBox::setVerticalOverflowPositions):
+        (khtml::RootInlineBox::RootInlineBox):
+        (khtml::RootInlineBox::leftOverflow):
+        (khtml::RootInlineBox::rightOverflow):
+        (khtml::RootInlineBox::setVerticalOverflowPositions):
+        (khtml::RootInlineBox::setHorizontalOverflowPositions):
+        * khtml/rendering/render_object.h:
+        (khtml::RenderObject::borderBox):
+        (khtml::RenderObject::overflowLeft):
+        (khtml::RenderObject::overflowTop):
+        (khtml::RenderObject::overflowRect):
+        (khtml::RenderObject::floatRect):
+        * khtml/rendering/render_table.cpp:
+        (RenderTable::layout):
+        (RenderTable::paint):
+        (RenderTable::paintBoxDecorations):
+        (RenderTable::calcMinMaxWidth):
+        * khtml/rendering/render_table.h:
+        (khtml::RenderTableCell::borderTopExtra):
+        (khtml::RenderTableCell::borderBottomExtra):
+        * kwq/KWQRect.h:
+        * kwq/KWQRect.mm:
+        (QRect::inflate):
+
 2004-12-06  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by John.
index a9917d03e30a4c87200f9bcee9d4982d37124570..192244c9a97ae2b97951f3085230437e05f4415c 100644 (file)
@@ -1,44 +1,13 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 2.7.2 */
 /* Command-line: gperf -a -L ANSI-C -E -C -c -o -t -k '*' -NfindProp -Hhash_prop -Wwordlist_prop -D -s 2 cssproperties.gperf  */
-
-#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-/* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
-#endif
-
-#line 1 "cssproperties.gperf"
-
 /* This file is automatically generated from cssproperties.in by makeprop, do not edit */
 /* Copyright 1999 W. Bastian */
 #include "cssproperties.h"
-#line 6 "cssproperties.gperf"
 struct props {
     const char *name;
     int id;
 };
-/* maximum key range = 514, duplicates = 0 */
+/* maximum key range = 1493, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -52,130 +21,100 @@ hash_prop (register const char *str, register unsigned int len)
 {
   static const unsigned short asso_values[] =
     {
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517,   0, 517, 517, 517, 517,
-      517,   5, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517,   0,   0,   0,
-        0,   5, 135,  25,  15,   0,   5,  25,   0,   0,
-        0,   0,   0,  45,   0,  25,   0,  70,  40, 205,
-      110, 210,  15, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
-      517, 517, 517, 517, 517, 517
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513,    0, 1513, 1513, 1513, 1513,
+      1513,    5, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513,   20,   40,   45,
+         0,    0,  305,   15,    0,    0,    0,   10,    0,   65,
+       430,    0,   35,   55,    0,   30,    0,   50,  115,  285,
+         0,  210,    0, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513,
+      1513, 1513, 1513, 1513, 1513, 1513
     };
   register int hval = len;
 
   switch (hval)
     {
       default:
+      case 32:
         hval += asso_values[(unsigned char)str[31]];
-      /*FALLTHROUGH*/
       case 31:
         hval += asso_values[(unsigned char)str[30]];
-      /*FALLTHROUGH*/
       case 30:
         hval += asso_values[(unsigned char)str[29]];
-      /*FALLTHROUGH*/
       case 29:
         hval += asso_values[(unsigned char)str[28]];
-      /*FALLTHROUGH*/
       case 28:
         hval += asso_values[(unsigned char)str[27]];
-      /*FALLTHROUGH*/
       case 27:
         hval += asso_values[(unsigned char)str[26]];
-      /*FALLTHROUGH*/
       case 26:
         hval += asso_values[(unsigned char)str[25]];
-      /*FALLTHROUGH*/
       case 25:
         hval += asso_values[(unsigned char)str[24]];
-      /*FALLTHROUGH*/
       case 24:
         hval += asso_values[(unsigned char)str[23]];
-      /*FALLTHROUGH*/
       case 23:
         hval += asso_values[(unsigned char)str[22]];
-      /*FALLTHROUGH*/
       case 22:
         hval += asso_values[(unsigned char)str[21]];
-      /*FALLTHROUGH*/
       case 21:
         hval += asso_values[(unsigned char)str[20]];
-      /*FALLTHROUGH*/
       case 20:
         hval += asso_values[(unsigned char)str[19]];
-      /*FALLTHROUGH*/
       case 19:
         hval += asso_values[(unsigned char)str[18]];
-      /*FALLTHROUGH*/
       case 18:
         hval += asso_values[(unsigned char)str[17]];
-      /*FALLTHROUGH*/
       case 17:
         hval += asso_values[(unsigned char)str[16]];
-      /*FALLTHROUGH*/
       case 16:
         hval += asso_values[(unsigned char)str[15]];
-      /*FALLTHROUGH*/
       case 15:
         hval += asso_values[(unsigned char)str[14]];
-      /*FALLTHROUGH*/
       case 14:
         hval += asso_values[(unsigned char)str[13]];
-      /*FALLTHROUGH*/
       case 13:
         hval += asso_values[(unsigned char)str[12]];
-      /*FALLTHROUGH*/
       case 12:
         hval += asso_values[(unsigned char)str[11]];
-      /*FALLTHROUGH*/
       case 11:
         hval += asso_values[(unsigned char)str[10]];
-      /*FALLTHROUGH*/
       case 10:
         hval += asso_values[(unsigned char)str[9]];
-      /*FALLTHROUGH*/
       case 9:
         hval += asso_values[(unsigned char)str[8]];
-      /*FALLTHROUGH*/
       case 8:
         hval += asso_values[(unsigned char)str[7]];
-      /*FALLTHROUGH*/
       case 7:
         hval += asso_values[(unsigned char)str[6]];
-      /*FALLTHROUGH*/
       case 6:
         hval += asso_values[(unsigned char)str[5]];
-      /*FALLTHROUGH*/
       case 5:
         hval += asso_values[(unsigned char)str[4]];
-      /*FALLTHROUGH*/
       case 4:
         hval += asso_values[(unsigned char)str[3]];
-      /*FALLTHROUGH*/
       case 3:
         hval += asso_values[(unsigned char)str[2]];
-      /*FALLTHROUGH*/
       case 2:
         hval += asso_values[(unsigned char)str[1]];
-      /*FALLTHROUGH*/
       case 1:
         hval += asso_values[(unsigned char)str[0]];
         break;
@@ -194,382 +133,325 @@ findProp (register const char *str, register unsigned int len)
       TOTAL_KEYWORDS = 157,
       MIN_WORD_LENGTH = 3,
       MAX_WORD_LENGTH = 32,
-      MIN_HASH_VALUE = 3,
-      MAX_HASH_VALUE = 516
+      MIN_HASH_VALUE = 20,
+      MAX_HASH_VALUE = 1512
     };
 
   static const struct props wordlist_prop[] =
     {
-#line 134 "cssproperties.gperf"
+      {"right", CSS_PROP_RIGHT},
+      {"height", CSS_PROP_HEIGHT},
+      {"size", CSS_PROP_SIZE},
       {"top", CSS_PROP_TOP},
-#line 46 "cssproperties.gperf"
-      {"clip", CSS_PROP_CLIP},
-#line 47 "cssproperties.gperf"
+      {"border", CSS_PROP_BORDER},
       {"color", CSS_PROP_COLOR},
-#line 35 "cssproperties.gperf"
-      {"bottom", CSS_PROP_BOTTOM},
-#line 45 "cssproperties.gperf"
+      {"border-right", CSS_PROP_BORDER_RIGHT},
       {"clear", CSS_PROP_CLEAR},
-#line 148 "cssproperties.gperf"
-      {"border", CSS_PROP_BORDER},
-#line 48 "cssproperties.gperf"
-      {"content", CSS_PROP_CONTENT},
-#line 52 "cssproperties.gperf"
-      {"direction", CSS_PROP_DIRECTION},
-#line 151 "cssproperties.gperf"
+      {"page", CSS_PROP_PAGE},
+      {"clip", CSS_PROP_CLIP},
       {"border-top", CSS_PROP_BORDER_TOP},
-#line 149 "cssproperties.gperf"
       {"border-color", CSS_PROP_BORDER_COLOR},
-#line 153 "cssproperties.gperf"
-      {"border-bottom", CSS_PROP_BORDER_BOTTOM},
-#line 23 "cssproperties.gperf"
+      {"max-height", CSS_PROP_MAX_HEIGHT},
+      {"bottom", CSS_PROP_BOTTOM},
+      {"border-right-color", CSS_PROP_BORDER_RIGHT_COLOR},
+      {"cursor", CSS_PROP_CURSOR},
       {"border-top-color", CSS_PROP_BORDER_TOP_COLOR},
-#line 25 "cssproperties.gperf"
-      {"border-bottom-color", CSS_PROP_BORDER_BOTTOM_COLOR},
-#line 65 "cssproperties.gperf"
-      {"-apple-line-clamp", CSS_PROP__APPLE_LINE_CLAMP},
-#line 158 "cssproperties.gperf"
-      {"margin", CSS_PROP_MARGIN},
-#line 160 "cssproperties.gperf"
-      {"padding", CSS_PROP_PADDING},
-#line 106 "cssproperties.gperf"
-      {"position", CSS_PROP_POSITION},
-#line 102 "cssproperties.gperf"
-      {"page", CSS_PROP_PAGE},
-#line 70 "cssproperties.gperf"
-      {"margin-top", CSS_PROP_MARGIN_TOP},
-#line 97 "cssproperties.gperf"
-      {"padding-top", CSS_PROP_PADDING_TOP},
-#line 72 "cssproperties.gperf"
-      {"margin-bottom", CSS_PROP_MARGIN_BOTTOM},
-#line 99 "cssproperties.gperf"
-      {"padding-bottom", CSS_PROP_PADDING_BOTTOM},
-#line 44 "cssproperties.gperf"
-      {"caption-side", CSS_PROP_CAPTION_SIDE},
-#line 108 "cssproperties.gperf"
-      {"right", CSS_PROP_RIGHT},
-#line 91 "cssproperties.gperf"
-      {"orphans", CSS_PROP_ORPHANS},
-#line 109 "cssproperties.gperf"
-      {"size", CSS_PROP_SIZE},
-#line 19 "cssproperties.gperf"
+      {"quotes", CSS_PROP_QUOTES},
+      {"border-bottom", CSS_PROP_BORDER_BOTTOM},
       {"border-collapse", CSS_PROP_BORDER_COLLAPSE},
-#line 152 "cssproperties.gperf"
-      {"border-right", CSS_PROP_BORDER_RIGHT},
-#line 24 "cssproperties.gperf"
-      {"border-right-color", CSS_PROP_BORDER_RIGHT_COLOR},
-#line 62 "cssproperties.gperf"
-      {"height", CSS_PROP_HEIGHT},
-#line 20 "cssproperties.gperf"
-      {"border-spacing", CSS_PROP_BORDER_SPACING},
-#line 87 "cssproperties.gperf"
-      {"min-height", CSS_PROP_MIN_HEIGHT},
-#line 166 "cssproperties.gperf"
+      {"-khtml-user-drag", CSS_PROP__KHTML_USER_DRAG},
+      {"border-bottom-color", CSS_PROP_BORDER_BOTTOM_COLOR},
+      {"scrollbar-3dlight-color", CSS_PROP_SCROLLBAR_3DLIGHT_COLOR},
+      {"scrollbar-highlight-color", CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR},
+      {"-khtml-box-pack", CSS_PROP__KHTML_BOX_PACK},
+      {"-apple-text-size-adjust", CSS_PROP__APPLE_TEXT_SIZE_ADJUST},
+      {"-khtml-user-select", CSS_PROP__KHTML_USER_SELECT},
       {"scrollbar-track-color", CSS_PROP_SCROLLBAR_TRACK_COLOR},
-#line 64 "cssproperties.gperf"
-      {"letter-spacing", CSS_PROP_LETTER_SPACING},
-#line 66 "cssproperties.gperf"
+      {"-khtml-marquee", CSS_PROP__KHTML_MARQUEE},
+      {"list-style", CSS_PROP_LIST_STYLE},
+      {"width", CSS_PROP_WIDTH},
+      {"border-style", CSS_PROP_BORDER_STYLE},
+      {"display", CSS_PROP_DISPLAY},
+      {"left", CSS_PROP_LEFT},
+      {"border-right-style", CSS_PROP_BORDER_RIGHT_STYLE},
+      {"opacity", CSS_PROP_OPACITY},
+      {"float", CSS_PROP_FLOAT},
+      {"border-top-style", CSS_PROP_BORDER_TOP_STYLE},
+      {"border-width", CSS_PROP_BORDER_WIDTH},
+      {"text-shadow", CSS_PROP_TEXT_SHADOW},
+      {"-khtml-marquee-speed", CSS_PROP__KHTML_MARQUEE_SPEED},
+      {"table-layout", CSS_PROP_TABLE_LAYOUT},
+      {"border-left", CSS_PROP_BORDER_LEFT},
+      {"border-right-width", CSS_PROP_BORDER_RIGHT_WIDTH},
+      {"border-top-width", CSS_PROP_BORDER_TOP_WIDTH},
+      {"max-width", CSS_PROP_MAX_WIDTH},
+      {"list-style-image", CSS_PROP_LIST_STYLE_IMAGE},
+      {"empty-cells", CSS_PROP_EMPTY_CELLS},
+      {"border-bottom-style", CSS_PROP_BORDER_BOTTOM_STYLE},
+      {"visibility", CSS_PROP_VISIBILITY},
+      {"border-left-color", CSS_PROP_BORDER_LEFT_COLOR},
+      {"white-space", CSS_PROP_WHITE_SPACE},
+      {"-khtml-box-flex", CSS_PROP__KHTML_BOX_FLEX},
+      {"z-index", CSS_PROP_Z_INDEX},
+      {"border-bottom-width", CSS_PROP_BORDER_BOTTOM_WIDTH},
       {"line-height", CSS_PROP_LINE_HEIGHT},
-#line 71 "cssproperties.gperf"
-      {"margin-right", CSS_PROP_MARGIN_RIGHT},
-#line 98 "cssproperties.gperf"
-      {"padding-right", CSS_PROP_PADDING_RIGHT},
-#line 18 "cssproperties.gperf"
-      {"-khtml-binding", CSS_PROP__KHTML_BINDING},
-#line 159 "cssproperties.gperf"
+      {"text-align", CSS_PROP_TEXT_ALIGN},
+      {"page-break-after", CSS_PROP_PAGE_BREAK_AFTER},
+      {"direction", CSS_PROP_DIRECTION},
       {"outline", CSS_PROP_OUTLINE},
-#line 139 "cssproperties.gperf"
-      {"vertical-align", CSS_PROP_VERTICAL_ALIGN},
-#line 89 "cssproperties.gperf"
-      {"-khtml-nbsp-mode", CSS_PROP__KHTML_NBSP_MODE},
-#line 135 "cssproperties.gperf"
-      {"unicode-bidi", CSS_PROP_UNICODE_BIDI},
-#line 92 "cssproperties.gperf"
+      {"page-break-before", CSS_PROP_PAGE_BREAK_BEFORE},
+      {"position", CSS_PROP_POSITION},
+      {"scrollbar-arrow-color", CSS_PROP_SCROLLBAR_ARROW_COLOR},
+      {"padding", CSS_PROP_PADDING},
+      {"text-decoration", CSS_PROP_TEXT_DECORATION},
+      {"text-line-through", CSS_PROP_TEXT_LINE_THROUGH},
+      {"min-height", CSS_PROP_MIN_HEIGHT},
+      {"orphans", CSS_PROP_ORPHANS},
+      {"-khtml-marquee-style", CSS_PROP__KHTML_MARQUEE_STYLE},
+      {"padding-right", CSS_PROP_PADDING_RIGHT},
+      {"list-style-type", CSS_PROP_LIST_STYLE_TYPE},
+      {"margin", CSS_PROP_MARGIN},
+      {"scrollbar-shadow-color", CSS_PROP_SCROLLBAR_SHADOW_COLOR},
       {"outline-color", CSS_PROP_OUTLINE_COLOR},
-#line 74 "cssproperties.gperf"
+      {"-khtml-box-flex-group", CSS_PROP__KHTML_BOX_FLEX_GROUP},
+      {"padding-top", CSS_PROP_PADDING_TOP},
+      {"margin-right", CSS_PROP_MARGIN_RIGHT},
+      {"text-overline", CSS_PROP_TEXT_OVERLINE},
+      {"-khtml-box-orient", CSS_PROP__KHTML_BOX_ORIENT},
+      {"text-line-through-color", CSS_PROP_TEXT_LINE_THROUGH_COLOR},
+      {"counter-reset", CSS_PROP_COUNTER_RESET},
+      {"scrollbar-face-color", CSS_PROP_SCROLLBAR_FACE_COLOR},
+      {"scrollbar-darkshadow-color", CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR},
+      {"caption-side", CSS_PROP_CAPTION_SIDE},
+      {"margin-top", CSS_PROP_MARGIN_TOP},
+      {"unicode-bidi", CSS_PROP_UNICODE_BIDI},
+      {"text-line-through-mode", CSS_PROP_TEXT_LINE_THROUGH_MODE},
+      {"letter-spacing", CSS_PROP_LETTER_SPACING},
+      {"-khtml-box-lines", CSS_PROP__KHTML_BOX_LINES},
       {"-khtml-line-break", CSS_PROP__KHTML_LINE_BREAK},
-#line 164 "cssproperties.gperf"
-      {"scrollbar-3dlight-color", CSS_PROP_SCROLLBAR_3DLIGHT_COLOR},
-#line 133 "cssproperties.gperf"
-      {"-apple-dashboard-region", CSS_PROP__APPLE_DASHBOARD_REGION},
-#line 51 "cssproperties.gperf"
-      {"cursor", CSS_PROP_CURSOR},
-#line 49 "cssproperties.gperf"
-      {"counter-increment", CSS_PROP_COUNTER_INCREMENT},
-#line 105 "cssproperties.gperf"
+      {"-khtml-box-align", CSS_PROP__KHTML_BOX_ALIGN},
+      {"border-left-style", CSS_PROP_BORDER_LEFT_STYLE},
+      {"widows", CSS_PROP_WIDOWS},
+      {"text-overline-color", CSS_PROP_TEXT_OVERLINE_COLOR},
+      {"-khtml-box-direction", CSS_PROP__KHTML_BOX_DIRECTION},
       {"page-break-inside", CSS_PROP_PAGE_BREAK_INSIDE},
-#line 78 "cssproperties.gperf"
-      {"-khtml-margin-start", CSS_PROP__KHTML_MARGIN_START},
-#line 101 "cssproperties.gperf"
-      {"-khtml-padding-start", CSS_PROP__KHTML_PADDING_START},
-#line 75 "cssproperties.gperf"
-      {"-khtml-margin-collapse", CSS_PROP__KHTML_MARGIN_COLLAPSE},
-#line 76 "cssproperties.gperf"
-      {"-khtml-margin-top-collapse", CSS_PROP__KHTML_MARGIN_TOP_COLLAPSE},
-#line 50 "cssproperties.gperf"
-      {"counter-reset", CSS_PROP_COUNTER_RESET},
-#line 77 "cssproperties.gperf"
-      {"-khtml-margin-bottom-collapse", CSS_PROP__KHTML_MARGIN_BOTTOM_COLLAPSE},
-#line 147 "cssproperties.gperf"
+      {"padding-bottom", CSS_PROP_PADDING_BOTTOM},
       {"background", CSS_PROP_BACKGROUND},
-#line 113 "cssproperties.gperf"
-      {"text-indent", CSS_PROP_TEXT_INDENT},
-#line 112 "cssproperties.gperf"
-      {"text-decoration", CSS_PROP_TEXT_DECORATION},
-#line 11 "cssproperties.gperf"
+      {"text-overline-mode", CSS_PROP_TEXT_OVERLINE_MODE},
+      {"border-spacing", CSS_PROP_BORDER_SPACING},
+      {"word-wrap", CSS_PROP_WORD_WRAP},
+      {"-khtml-padding-start", CSS_PROP__KHTML_PADDING_START},
+      {"border-left-width", CSS_PROP_BORDER_LEFT_WIDTH},
+      {"margin-bottom", CSS_PROP_MARGIN_BOTTOM},
+      {"vertical-align", CSS_PROP_VERTICAL_ALIGN},
+      {"-apple-dashboard-region", CSS_PROP__APPLE_DASHBOARD_REGION},
       {"background-color", CSS_PROP_BACKGROUND_COLOR},
-#line 146 "cssproperties.gperf"
-      {"z-index", CSS_PROP_Z_INDEX},
-#line 156 "cssproperties.gperf"
-      {"font", CSS_PROP_FONT},
-#line 55 "cssproperties.gperf"
-      {"float", CSS_PROP_FLOAT},
-#line 63 "cssproperties.gperf"
-      {"left", CSS_PROP_LEFT},
-#line 163 "cssproperties.gperf"
-      {"scrollbar-highlight-color", CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR},
-#line 13 "cssproperties.gperf"
+      {"-khtml-margin-start", CSS_PROP__KHTML_MARGIN_START},
       {"background-repeat", CSS_PROP_BACKGROUND_REPEAT},
-#line 111 "cssproperties.gperf"
-      {"text-align", CSS_PROP_TEXT_ALIGN},
-#line 107 "cssproperties.gperf"
-      {"quotes", CSS_PROP_QUOTES},
-#line 154 "cssproperties.gperf"
-      {"border-left", CSS_PROP_BORDER_LEFT},
-#line 21 "cssproperties.gperf"
-      {"-khtml-border-horizontal-spacing", CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING},
-#line 14 "cssproperties.gperf"
-      {"background-attachment", CSS_PROP_BACKGROUND_ATTACHMENT},
-#line 26 "cssproperties.gperf"
-      {"border-left-color", CSS_PROP_BORDER_LEFT_COLOR},
-#line 15 "cssproperties.gperf"
-      {"background-position", CSS_PROP_BACKGROUND_POSITION},
-#line 12 "cssproperties.gperf"
+      {"-khtml-box-ordinal-group", CSS_PROP__KHTML_BOX_ORDINAL_GROUP},
+      {"-khtml-nbsp-mode", CSS_PROP__KHTML_NBSP_MODE},
+      {"-apple-line-clamp", CSS_PROP__APPLE_LINE_CLAMP},
+      {"overflow", CSS_PROP_OVERFLOW},
+      {"text-overflow", CSS_PROP_TEXT_OVERFLOW},
       {"background-image", CSS_PROP_BACKGROUND_IMAGE},
-#line 22 "cssproperties.gperf"
-      {"-khtml-border-vertical-spacing", CSS_PROP__KHTML_BORDER_VERTICAL_SPACING},
-#line 42 "cssproperties.gperf"
-      {"-khtml-box-orient", CSS_PROP__KHTML_BOX_ORIENT},
-#line 37 "cssproperties.gperf"
-      {"-khtml-box-direction", CSS_PROP__KHTML_BOX_DIRECTION},
-#line 73 "cssproperties.gperf"
-      {"margin-left", CSS_PROP_MARGIN_LEFT},
-#line 100 "cssproperties.gperf"
-      {"padding-left", CSS_PROP_PADDING_LEFT},
-#line 120 "cssproperties.gperf"
-      {"text-overline", CSS_PROP_TEXT_OVERLINE},
-#line 79 "cssproperties.gperf"
-      {"-khtml-marquee", CSS_PROP__KHTML_MARQUEE},
-#line 85 "cssproperties.gperf"
-      {"max-height", CSS_PROP_MAX_HEIGHT},
-#line 136 "cssproperties.gperf"
-      {"-khtml-user-drag", CSS_PROP__KHTML_USER_DRAG},
-#line 121 "cssproperties.gperf"
-      {"text-overline-color", CSS_PROP_TEXT_OVERLINE_COLOR},
-#line 161 "cssproperties.gperf"
-      {"scrollbar-face-color", CSS_PROP_SCROLLBAR_FACE_COLOR},
-#line 60 "cssproperties.gperf"
-      {"font-variant", CSS_PROP_FONT_VARIANT},
-#line 122 "cssproperties.gperf"
-      {"text-overline-mode", CSS_PROP_TEXT_OVERLINE_MODE},
-#line 57 "cssproperties.gperf"
+      {"outline-style", CSS_PROP_OUTLINE_STYLE},
+      {"font", CSS_PROP_FONT},
+      {"-khtml-user-modify", CSS_PROP__KHTML_USER_MODIFY},
+      {"-khtml-marquee-repetition", CSS_PROP__KHTML_MARQUEE_REPETITION},
+      {"-khtml-margin-collapse", CSS_PROP__KHTML_MARGIN_COLLAPSE},
+      {"text-line-through-style", CSS_PROP_TEXT_LINE_THROUGH_STYLE},
+      {"-khtml-marquee-direction", CSS_PROP__KHTML_MARQUEE_DIRECTION},
       {"font-size", CSS_PROP_FONT_SIZE},
-#line 43 "cssproperties.gperf"
-      {"-khtml-box-pack", CSS_PROP__KHTML_BOX_PACK},
-#line 36 "cssproperties.gperf"
-      {"-khtml-box-align", CSS_PROP__KHTML_BOX_ALIGN},
-#line 58 "cssproperties.gperf"
+      {"outline-width", CSS_PROP_OUTLINE_WIDTH},
+      {"list-style-position", CSS_PROP_LIST_STYLE_POSITION},
+      {"min-width", CSS_PROP_MIN_WIDTH},
+      {"-khtml-margin-top-collapse", CSS_PROP__KHTML_MARGIN_TOP_COLLAPSE},
+      {"text-line-through-width", CSS_PROP_TEXT_LINE_THROUGH_WIDTH},
+      {"text-overline-style", CSS_PROP_TEXT_OVERLINE_STYLE},
+      {"padding-left", CSS_PROP_PADDING_LEFT},
       {"font-stretch", CSS_PROP_FONT_STRETCH},
-#line 138 "cssproperties.gperf"
-      {"-khtml-user-select", CSS_PROP__KHTML_USER_SELECT},
-#line 80 "cssproperties.gperf"
-      {"-khtml-marquee-direction", CSS_PROP__KHTML_MARQUEE_DIRECTION},
-#line 40 "cssproperties.gperf"
-      {"-khtml-box-lines", CSS_PROP__KHTML_BOX_LINES},
-#line 81 "cssproperties.gperf"
-      {"-khtml-marquee-increment", CSS_PROP__KHTML_MARQUEE_INCREMENT},
-#line 82 "cssproperties.gperf"
-      {"-khtml-marquee-repetition", CSS_PROP__KHTML_MARQUEE_REPETITION},
-#line 127 "cssproperties.gperf"
+      {"margin-left", CSS_PROP_MARGIN_LEFT},
+      {"text-overline-width", CSS_PROP_TEXT_OVERLINE_WIDTH},
+      {"text-transform", CSS_PROP_TEXT_TRANSFORM},
+      {"-khtml-margin-bottom-collapse", CSS_PROP__KHTML_MARGIN_BOTTOM_COLLAPSE},
+      {"text-indent", CSS_PROP_TEXT_INDENT},
+      {"word-spacing", CSS_PROP_WORD_SPACING},
+      {"-khtml-border-vertical-spacing", CSS_PROP__KHTML_BORDER_VERTICAL_SPACING},
+      {"content", CSS_PROP_CONTENT},
       {"text-underline", CSS_PROP_TEXT_UNDERLINE},
-#line 128 "cssproperties.gperf"
       {"text-underline-color", CSS_PROP_TEXT_UNDERLINE_COLOR},
-#line 103 "cssproperties.gperf"
-      {"page-break-after", CSS_PROP_PAGE_BREAK_AFTER},
-#line 90 "cssproperties.gperf"
-      {"opacity", CSS_PROP_OPACITY},
-#line 129 "cssproperties.gperf"
+      {"font-style", CSS_PROP_FONT_STYLE},
       {"text-underline-mode", CSS_PROP_TEXT_UNDERLINE_MODE},
-#line 83 "cssproperties.gperf"
-      {"-khtml-marquee-speed", CSS_PROP__KHTML_MARQUEE_SPEED},
-#line 104 "cssproperties.gperf"
-      {"page-break-before", CSS_PROP_PAGE_BREAK_BEFORE},
-#line 143 "cssproperties.gperf"
-      {"width", CSS_PROP_WIDTH},
-#line 88 "cssproperties.gperf"
-      {"min-width", CSS_PROP_MIN_WIDTH},
-#line 155 "cssproperties.gperf"
-      {"border-width", CSS_PROP_BORDER_WIDTH},
-#line 31 "cssproperties.gperf"
-      {"border-top-width", CSS_PROP_BORDER_TOP_WIDTH},
-#line 53 "cssproperties.gperf"
-      {"display", CSS_PROP_DISPLAY},
-#line 33 "cssproperties.gperf"
-      {"border-bottom-width", CSS_PROP_BORDER_BOTTOM_WIDTH},
-#line 167 "cssproperties.gperf"
-      {"scrollbar-arrow-color", CSS_PROP_SCROLLBAR_ARROW_COLOR},
-#line 54 "cssproperties.gperf"
-      {"empty-cells", CSS_PROP_EMPTY_CELLS},
-#line 150 "cssproperties.gperf"
-      {"border-style", CSS_PROP_BORDER_STYLE},
-#line 27 "cssproperties.gperf"
-      {"border-top-style", CSS_PROP_BORDER_TOP_STYLE},
-#line 114 "cssproperties.gperf"
-      {"text-line-through", CSS_PROP_TEXT_LINE_THROUGH},
-#line 29 "cssproperties.gperf"
-      {"border-bottom-style", CSS_PROP_BORDER_BOTTOM_STYLE},
-#line 141 "cssproperties.gperf"
-      {"white-space", CSS_PROP_WHITE_SPACE},
-#line 145 "cssproperties.gperf"
-      {"word-spacing", CSS_PROP_WORD_SPACING},
-#line 115 "cssproperties.gperf"
-      {"text-line-through-color", CSS_PROP_TEXT_LINE_THROUGH_COLOR},
-#line 41 "cssproperties.gperf"
-      {"-khtml-box-ordinal-group", CSS_PROP__KHTML_BOX_ORDINAL_GROUP},
-#line 116 "cssproperties.gperf"
-      {"text-line-through-mode", CSS_PROP_TEXT_LINE_THROUGH_MODE},
-#line 157 "cssproperties.gperf"
-      {"list-style", CSS_PROP_LIST_STYLE},
-#line 16 "cssproperties.gperf"
+      {"-khtml-binding", CSS_PROP__KHTML_BINDING},
+      {"font-weight", CSS_PROP_FONT_WEIGHT},
+      {"background-position", CSS_PROP_BACKGROUND_POSITION},
       {"background-position-x", CSS_PROP_BACKGROUND_POSITION_X},
-#line 32 "cssproperties.gperf"
-      {"border-right-width", CSS_PROP_BORDER_RIGHT_WIDTH},
-#line 140 "cssproperties.gperf"
-      {"visibility", CSS_PROP_VISIBILITY},
-#line 132 "cssproperties.gperf"
-      {"-apple-text-size-adjust", CSS_PROP__APPLE_TEXT_SIZE_ADJUST},
-#line 126 "cssproperties.gperf"
-      {"text-transform", CSS_PROP_TEXT_TRANSFORM},
-#line 162 "cssproperties.gperf"
-      {"scrollbar-shadow-color", CSS_PROP_SCROLLBAR_SHADOW_COLOR},
-#line 110 "cssproperties.gperf"
-      {"table-layout", CSS_PROP_TABLE_LAYOUT},
-#line 28 "cssproperties.gperf"
-      {"border-right-style", CSS_PROP_BORDER_RIGHT_STYLE},
-#line 95 "cssproperties.gperf"
-      {"outline-width", CSS_PROP_OUTLINE_WIDTH},
-#line 68 "cssproperties.gperf"
-      {"list-style-position", CSS_PROP_LIST_STYLE_POSITION},
-#line 67 "cssproperties.gperf"
-      {"list-style-image", CSS_PROP_LIST_STYLE_IMAGE},
-#line 165 "cssproperties.gperf"
-      {"scrollbar-darkshadow-color", CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR},
-#line 94 "cssproperties.gperf"
-      {"outline-style", CSS_PROP_OUTLINE_STYLE},
-#line 86 "cssproperties.gperf"
-      {"max-width", CSS_PROP_MAX_WIDTH},
-#line 125 "cssproperties.gperf"
-      {"text-shadow", CSS_PROP_TEXT_SHADOW},
-#line 17 "cssproperties.gperf"
-      {"background-position-y", CSS_PROP_BACKGROUND_POSITION_Y},
-#line 34 "cssproperties.gperf"
-      {"border-left-width", CSS_PROP_BORDER_LEFT_WIDTH},
-#line 59 "cssproperties.gperf"
-      {"font-style", CSS_PROP_FONT_STYLE},
-#line 93 "cssproperties.gperf"
       {"outline-offset", CSS_PROP_OUTLINE_OFFSET},
-#line 96 "cssproperties.gperf"
-      {"overflow", CSS_PROP_OVERFLOW},
-#line 61 "cssproperties.gperf"
-      {"font-weight", CSS_PROP_FONT_WEIGHT},
-#line 30 "cssproperties.gperf"
-      {"border-left-style", CSS_PROP_BORDER_LEFT_STYLE},
-#line 124 "cssproperties.gperf"
-      {"text-overline-width", CSS_PROP_TEXT_OVERLINE_WIDTH},
-#line 38 "cssproperties.gperf"
-      {"-khtml-box-flex", CSS_PROP__KHTML_BOX_FLEX},
-#line 144 "cssproperties.gperf"
-      {"word-wrap", CSS_PROP_WORD_WRAP},
-#line 123 "cssproperties.gperf"
-      {"text-overline-style", CSS_PROP_TEXT_OVERLINE_STYLE},
-#line 84 "cssproperties.gperf"
-      {"-khtml-marquee-style", CSS_PROP__KHTML_MARQUEE_STYLE},
-#line 131 "cssproperties.gperf"
-      {"text-underline-width", CSS_PROP_TEXT_UNDERLINE_WIDTH},
-#line 142 "cssproperties.gperf"
-      {"widows", CSS_PROP_WIDOWS},
-#line 130 "cssproperties.gperf"
       {"text-underline-style", CSS_PROP_TEXT_UNDERLINE_STYLE},
-#line 118 "cssproperties.gperf"
-      {"text-line-through-width", CSS_PROP_TEXT_LINE_THROUGH_WIDTH},
-#line 56 "cssproperties.gperf"
+      {"-khtml-border-horizontal-spacing", CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING},
+      {"background-attachment", CSS_PROP_BACKGROUND_ATTACHMENT},
+      {"text-underline-width", CSS_PROP_TEXT_UNDERLINE_WIDTH},
+      {"-khtml-marquee-increment", CSS_PROP__KHTML_MARQUEE_INCREMENT},
+      {"font-variant", CSS_PROP_FONT_VARIANT},
+      {"background-position-y", CSS_PROP_BACKGROUND_POSITION_Y},
       {"font-family", CSS_PROP_FONT_FAMILY},
-#line 69 "cssproperties.gperf"
-      {"list-style-type", CSS_PROP_LIST_STYLE_TYPE},
-#line 137 "cssproperties.gperf"
-      {"-khtml-user-modify", CSS_PROP__KHTML_USER_MODIFY},
-#line 117 "cssproperties.gperf"
-      {"text-line-through-style", CSS_PROP_TEXT_LINE_THROUGH_STYLE},
-#line 119 "cssproperties.gperf"
-      {"text-overflow", CSS_PROP_TEXT_OVERFLOW},
-#line 39 "cssproperties.gperf"
-      {"-khtml-box-flex-group", CSS_PROP__KHTML_BOX_FLEX_GROUP}
+      {"counter-increment", CSS_PROP_COUNTER_INCREMENT}
     };
 
   static const short lookup[] =
     {
-       -1,  -1,  -1,   0,   1,   2,   3,  -1,  -1,  -1,
-        4,   5,   6,  -1,   7,   8,  -1,   9,  10,  -1,
-       -1,  11,  -1,  -1,  12,  -1,  -1,  13,  -1,  -1,
-       -1,  14,  15,  16,  17,  18,  19,  -1,  20,  21,
-       -1,  -1,  22,  -1,  -1,  23,  -1,  24,  -1,  25,
-       26,  -1,  -1,  -1,  -1,  -1,  -1,  27,  -1,  -1,
-       -1,  -1,  -1,  28,  -1,  -1,  29,  -1,  -1,  30,
-       31,  32,  -1,  -1,  33,  -1,  34,  35,  36,  37,
-       -1,  -1,  38,  -1,  39,  -1,  40,  41,  42,  -1,
-       -1,  -1,  43,  44,  -1,  -1,  -1,  -1,  45,  -1,
-       -1,  46,  47,  -1,  -1,  -1,  -1,  48,  -1,  49,
-       50,  -1,  -1,  -1,  -1,  -1,  -1,  51,  -1,  -1,
-       -1,  52,  -1,  53,  54,  -1,  -1,  -1,  -1,  -1,
-       55,  56,  -1,  -1,  -1,  57,  58,  59,  -1,  60,
-       61,  -1,  -1,  -1,  62,  63,  -1,  64,  -1,  -1,
-       65,  66,  -1,  -1,  -1,  -1,  67,  68,  -1,  -1,
-       -1,  69,  70,  -1,  71,  -1,  72,  -1,  -1,  -1,
-       73,  -1,  74,  -1,  -1,  75,  76,  77,  78,  79,
-       80,  81,  -1,  -1,  82,  83,  -1,  84,  85,  86,
-       87,  88,  89,  90,  91,  -1,  92,  -1,  -1,  93,
-       94,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  95,
-       -1,  -1,  -1,  -1,  -1,  96,  97,  98,  -1,  99,
-      100,  -1, 101,  -1,  -1, 102,  -1,  -1,  -1, 103,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1, 104,  -1,  -1,
-       -1, 105, 106,  -1, 107,  -1,  -1,  -1,  -1,  -1,
-       -1, 108,  -1,  -1,  -1,  -1, 109, 110,  -1,  -1,
-       -1, 111, 112,  -1, 113,  -1, 114, 115, 116, 117,
-       -1,  -1, 118,  -1,  -1, 119, 120,  -1,  -1,  -1,
-       -1,  -1,  -1, 121,  -1, 122,  -1,  -1, 123, 124,
-       -1,  -1, 125,  -1,  -1,  -1,  -1, 126,  -1,  -1,
-       -1,  -1,  -1, 127,  -1,  -1,  -1,  -1, 128, 129,
-       -1, 130,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1, 131,  -1,  -1,  -1,  -1,  -1,  -1, 132,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 133,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1, 134,  -1,  -1,  -1,  -1, 135,  -1,  -1,  -1,
-       -1,  -1, 136,  -1,  -1, 137,  -1,  -1,  -1, 138,
-       -1,  -1,  -1, 139,  -1,  -1, 140,  -1,  -1,  -1,
-       -1,  -1, 141,  -1, 142,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 143,  -1,  -1,  -1, 144,
-       -1,  -1,  -1,  -1, 145, 146,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 147,  -1,  -1,  -1,  -1,
-       -1, 148,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 149,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 150,  -1,
-       -1, 151,  -1,  -1,  -1, 152,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 153,  -1,  -1,  -1,  -1, 154,  -1,
-       -1,  -1,  -1, 155,  -1,  -1, 156
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+        0,   1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,   2,  -1,  -1,  -1,   3,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,   4,  -1,  -1,  -1,
+        5,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,   6,  -1,  -1,
+        7,  -1,  -1,  -1,   8,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,   9,  10,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  11,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       12,  13,  -1,  -1,  -1,  -1,  -1,  -1,  14,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  15,  -1,  -1,  -1,  -1,  16,  -1,  -1,  -1,
+       -1,  17,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  18,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  19,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  20,  -1,  -1,  21,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  22,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  23,  -1,  -1,  -1,  -1,
+       24,  -1,  -1,  25,  -1,  -1,  -1,  -1,  26,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  27,  -1,  -1,  28,
+       29,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       30,  -1,  31,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  32,  -1,  -1,  -1,  -1,  -1,  -1,  33,
+       -1,  -1,  -1,  34,  -1,  -1,  -1,  35,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       36,  37,  -1,  -1,  -1,  -1,  -1,  38,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  39,  -1,  -1,  -1,
+       40,  -1,  41,  -1,  -1,  -1,  42,  -1,  43,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  44,  -1,  -1,  45,
+       -1,  -1,  -1,  -1,  -1,  -1,  46,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  47,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  48,  49,  -1,  50,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  51,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  52,  -1,  53,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  54,
+       -1,  -1,  -1,  -1,  -1,  -1,  55,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  56,  -1,  -1,  -1,  -1,
+       -1,  57,  -1,  -1,  58,  -1,  -1,  59,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  60,  61,  -1,  -1,  62,  63,  -1,  -1,
+       64,  -1,  65,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       66,  -1,  67,  -1,  -1,  68,  -1,  -1,  69,  -1,
+       70,  -1,  -1,  -1,  -1,  -1,  71,  72,  73,  -1,
+       -1,  74,  -1,  -1,  -1,  -1,  75,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  76,  77,  -1,
+       -1,  -1,  78,  79,  -1,  -1,  -1,  -1,  80,  -1,
+       81,  82,  83,  -1,  -1,  84,  -1,  85,  -1,  -1,
+       -1,  -1,  86,  -1,  -1,  -1,  -1,  -1,  -1,  87,
+       -1,  88,  89,  -1,  -1,  -1,  90,  -1,  -1,  -1,
+       -1,  -1,  91,  -1,  -1,  -1,  92,  -1,  -1,  93,
+       94,  -1,  -1,  -1,  -1,  -1,  -1,  95,  -1,  96,
+       97,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  98,  99,
+       -1,  -1,  -1,  -1, 100,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1, 101,  -1, 102, 103,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 104,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 105,  -1,
+       -1, 106,  -1,  -1, 107,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 108,  -1,  -1,  -1,  -1,  -1,  -1, 109,
+       -1, 110,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 111,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 112,  -1,  -1,  -1,  -1, 113,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 114,  -1,  -1,  -1,
+       -1,  -1,  -1, 115,  -1,  -1,  -1,  -1,  -1, 116,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1, 117,  -1, 118,  -1, 119, 120,  -1,
+       -1,  -1,  -1,  -1, 121,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 122,  -1,  -1,  -1, 123,  -1,
+       -1,  -1,  -1,  -1, 124,  -1,  -1,  -1,  -1, 125,
+       -1,  -1,  -1,  -1,  -1,  -1, 126,  -1,  -1,  -1,
+       -1,  -1,  -1, 127, 128,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1, 129,  -1,  -1,
+       -1,  -1, 130,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 131,  -1,  -1, 132,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 133,  -1,  -1,  -1,  -1, 134,
+       -1, 135, 136,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+      137,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 138,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 139,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1, 140,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1, 141,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 142,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 143,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 144,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 145,  -1, 146,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1, 147,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+      148,  -1, 149,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1, 150,  -1,  -1,  -1, 151,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 152,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 153,  -1,  -1,  -1, 154,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1, 155,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       -1,  -1, 156
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -591,8 +473,6 @@ findProp (register const char *str, register unsigned int len)
     }
   return 0;
 }
-#line 168 "cssproperties.gperf"
-
 static const char * const propertyList[] = {
 "",
 "background-color", 
index 2f8082051b6c43f85a2e697d0760cff22f4e36cf..b48406ebb9bc5f02f5e65cdeeefd99a31c75e9cc 100644 (file)
@@ -1,44 +1,13 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 2.7.2 */
 /* Command-line: gperf -L ANSI-C -E -C -n -o -t -k '*' -NfindValue -Hhash_val -Wwordlist_value -D cssvalues.gperf  */
-
-#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-/* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
-#endif
-
-#line 1 "cssvalues.gperf"
-
 /* This file is automatically generated from cssvalues.in by makevalues, do not edit */
 /* Copyright 1999 W. Bastian */
 #include "cssvalues.h"
-#line 6 "cssvalues.gperf"
 struct css_value {
     const char *name;
     int id;
 };
-/* maximum key range = 3201, duplicates = 0 */
+/* maximum key range = 2888, duplicates = 1 */
 
 #ifdef __GNUC__
 __inline
@@ -52,100 +21,80 @@ hash_val (register const char *str, register unsigned int len)
 {
   static const unsigned short asso_values[] =
     {
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201,  200,  490, 3201,    0,    0,
-       115,  110,   95,   70,   65,   60,   25,   20, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201,   60,  265,    5,
-       360,    0,   68,  475,  460,    5,  440,  160,   20,   95,
-        10,   35,  150,  153,    5,   20,    0,   25,    8,    8,
-         3,   68,    5, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201,
-      3201, 3201, 3201, 3201, 3201, 3201, 3201
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888,   15, 2888, 2888,    0,    5,
+        10,   15,   20,   25,   30,   35,   40,    0, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888,    0,   28,    3,
+       400,  300,  160,  463,   56,   35,   10,  425,    0,   13,
+        55,    5,    8,   90,   65,   10,    0,  465,  258,  405,
+       450,   80,  250, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888,
+      2888, 2888, 2888, 2888, 2888, 2888
     };
   register int hval = 0;
 
   switch (len)
     {
       default:
+      case 22:
         hval += asso_values[(unsigned char)str[21]];
-      /*FALLTHROUGH*/
       case 21:
         hval += asso_values[(unsigned char)str[20]];
-      /*FALLTHROUGH*/
       case 20:
         hval += asso_values[(unsigned char)str[19]];
-      /*FALLTHROUGH*/
       case 19:
         hval += asso_values[(unsigned char)str[18]];
-      /*FALLTHROUGH*/
       case 18:
         hval += asso_values[(unsigned char)str[17]];
-      /*FALLTHROUGH*/
       case 17:
         hval += asso_values[(unsigned char)str[16]];
-      /*FALLTHROUGH*/
       case 16:
         hval += asso_values[(unsigned char)str[15]];
-      /*FALLTHROUGH*/
       case 15:
         hval += asso_values[(unsigned char)str[14]];
-      /*FALLTHROUGH*/
       case 14:
         hval += asso_values[(unsigned char)str[13]];
-      /*FALLTHROUGH*/
       case 13:
         hval += asso_values[(unsigned char)str[12]];
-      /*FALLTHROUGH*/
       case 12:
         hval += asso_values[(unsigned char)str[11]];
-      /*FALLTHROUGH*/
       case 11:
         hval += asso_values[(unsigned char)str[10]];
-      /*FALLTHROUGH*/
       case 10:
         hval += asso_values[(unsigned char)str[9]];
-      /*FALLTHROUGH*/
       case 9:
         hval += asso_values[(unsigned char)str[8]];
-      /*FALLTHROUGH*/
       case 8:
         hval += asso_values[(unsigned char)str[7]];
-      /*FALLTHROUGH*/
       case 7:
         hval += asso_values[(unsigned char)str[6]];
-      /*FALLTHROUGH*/
       case 6:
         hval += asso_values[(unsigned char)str[5]];
-      /*FALLTHROUGH*/
       case 5:
         hval += asso_values[(unsigned char)str[4]];
-      /*FALLTHROUGH*/
       case 4:
         hval += asso_values[(unsigned char)str[3]];
-      /*FALLTHROUGH*/
       case 3:
-        hval += asso_values[(unsigned char)str[2]+1];
-      /*FALLTHROUGH*/
+        hval += asso_values[(unsigned char)str[2]];
       case 2:
         hval += asso_values[(unsigned char)str[1]];
-      /*FALLTHROUGH*/
       case 1:
         hval += asso_values[(unsigned char)str[0]];
         break;
@@ -165,878 +114,647 @@ findValue (register const char *str, register unsigned int len)
       MIN_WORD_LENGTH = 2,
       MAX_WORD_LENGTH = 22,
       MIN_HASH_VALUE = 0,
-      MAX_HASH_VALUE = 3200
+      MAX_HASH_VALUE = 2887
     };
 
   static const struct css_value wordlist_value[] =
     {
-#line 36 "cssvalues.gperf"
-      {"100", CSS_VAL_100},
-#line 83 "cssvalues.gperf"
-      {"red", CSS_VAL_RED},
-#line 247 "cssvalues.gperf"
-      {"end", CSS_VAL_END},
-#line 15 "cssvalues.gperf"
-      {"inset", CSS_VAL_INSET},
-#line 55 "cssvalues.gperf"
-      {"wider", CSS_VAL_WIDER},
-#line 44 "cssvalues.gperf"
       {"900", CSS_VAL_900},
-#line 43 "cssvalues.gperf"
+      {"100", CSS_VAL_100},
+      {"200", CSS_VAL_200},
+      {"top", CSS_VAL_TOP},
+      {"300", CSS_VAL_300},
+      {"400", CSS_VAL_400},
+      {"small", CSS_VAL_SMALL},
+      {"500", CSS_VAL_500},
+      {"600", CSS_VAL_600},
+      {"compact", CSS_VAL_COMPACT},
+      {"700", CSS_VAL_700},
       {"800", CSS_VAL_800},
-#line 220 "cssvalues.gperf"
-      {"invert", CSS_VAL_INVERT},
-#line 11 "cssvalues.gperf"
-      {"inherit", CSS_VAL_INHERIT},
-#line 77 "cssvalues.gperf"
-      {"lime", CSS_VAL_LIME},
-#line 248 "cssvalues.gperf"
-      {"reverse", CSS_VAL_REVERSE},
-#line 197 "cssvalues.gperf"
+      {"clip", CSS_VAL_CLIP},
+      {"static", CSS_VAL_STATIC},
+      {"bottom", CSS_VAL_BOTTOM},
+      {"small-caps", CSS_VAL_SMALL_CAPS},
       {"ltr", CSS_VAL_LTR},
-#line 136 "cssvalues.gperf"
-      {"center", CSS_VAL_CENTER},
-#line 222 "cssvalues.gperf"
-      {"level", CSS_VAL_LEVEL},
-#line 126 "cssvalues.gperf"
-      {"sub", CSS_VAL_SUB},
-#line 144 "cssvalues.gperf"
-      {"circle", CSS_VAL_CIRCLE},
-#line 42 "cssvalues.gperf"
-      {"700", CSS_VAL_700},
-#line 225 "cssvalues.gperf"
-      {"lower", CSS_VAL_LOWER},
-#line 41 "cssvalues.gperf"
-      {"600", CSS_VAL_600},
-#line 194 "cssvalues.gperf"
-      {"text", CSS_VAL_TEXT},
-#line 40 "cssvalues.gperf"
-      {"500", CSS_VAL_500},
-#line 243 "cssvalues.gperf"
-      {"underline", CSS_VAL_UNDERLINE},
-#line 276 "cssvalues.gperf"
-      {"wave", CSS_VAL_WAVE},
-#line 13 "cssvalues.gperf"
-      {"none", CSS_VAL_NONE},
-#line 67 "cssvalues.gperf"
-      {"cursive", CSS_VAL_CURSIVE},
-#line 169 "cssvalues.gperf"
-      {"table", CSS_VAL_TABLE},
-#line 269 "cssvalues.gperf"
-      {"intrinsic", CSS_VAL_INTRINSIC},
-#line 39 "cssvalues.gperf"
-      {"400", CSS_VAL_400},
-#line 198 "cssvalues.gperf"
       {"rtl", CSS_VAL_RTL},
-#line 18 "cssvalues.gperf"
-      {"outset", CSS_VAL_OUTSET},
-#line 38 "cssvalues.gperf"
-      {"300", CSS_VAL_300},
-#line 65 "cssvalues.gperf"
-      {"serif", CSS_VAL_SERIF},
-#line 37 "cssvalues.gperf"
-      {"200", CSS_VAL_200},
-#line 250 "cssvalues.gperf"
-      {"vertical", CSS_VAL_VERTICAL},
-#line 237 "cssvalues.gperf"
+      {"italic", CSS_VAL_ITALIC},
+      {"start", CSS_VAL_START},
+      {"crop", CSS_VAL_CROP},
       {"scroll", CSS_VAL_SCROLL},
-#line 163 "cssvalues.gperf"
-      {"inline", CSS_VAL_INLINE},
-#line 261 "cssvalues.gperf"
-      {"fast", CSS_VAL_FAST},
-#line 84 "cssvalues.gperf"
-      {"silver", CSS_VAL_SILVER},
-#line 185 "cssvalues.gperf"
-      {"move", CSS_VAL_MOVE},
-#line 56 "cssvalues.gperf"
-      {"narrower", CSS_VAL_NARROWER},
-#line 181 "cssvalues.gperf"
-      {"auto", CSS_VAL_AUTO},
-#line 79 "cssvalues.gperf"
-      {"navy", CSS_VAL_NAVY},
-#line 201 "cssvalues.gperf"
-      {"lowercase", CSS_VAL_LOWERCASE},
-#line 233 "cssvalues.gperf"
-      {"overline", CSS_VAL_OVERLINE},
-#line 25 "cssvalues.gperf"
-      {"menu", CSS_VAL_MENU},
-#line 108 "cssvalues.gperf"
-      {"menutext", CSS_VAL_MENUTEXT},
-#line 156 "cssvalues.gperf"
-      {"armenian", CSS_VAL_ARMENIAN},
-#line 227 "cssvalues.gperf"
-      {"mix", CSS_VAL_MIX},
-#line 24 "cssvalues.gperf"
-      {"icon", CSS_VAL_ICON},
-#line 236 "cssvalues.gperf"
-      {"relative", CSS_VAL_RELATIVE},
-#line 258 "cssvalues.gperf"
-      {"up", CSS_VAL_UP},
-#line 264 "cssvalues.gperf"
-      {"alternate", CSS_VAL_ALTERNATE},
-#line 130 "cssvalues.gperf"
-      {"top", CSS_VAL_TOP},
-#line 268 "cssvalues.gperf"
-      {"element", CSS_VAL_ELEMENT},
-#line 277 "cssvalues.gperf"
-      {"continuous", CSS_VAL_CONTINUOUS},
-#line 260 "cssvalues.gperf"
-      {"slow", CSS_VAL_SLOW},
-#line 214 "cssvalues.gperf"
+      {"both", CSS_VAL_BOTH},
       {"cross", CSS_VAL_CROSS},
-#line 127 "cssvalues.gperf"
-      {"super", CSS_VAL_SUPER},
-#line 120 "cssvalues.gperf"
-      {"repeat", CSS_VAL_REPEAT},
-#line 48 "cssvalues.gperf"
-      {"medium", CSS_VAL_MEDIUM},
-#line 235 "cssvalues.gperf"
-      {"pre", CSS_VAL_PRE},
-#line 87 "cssvalues.gperf"
-      {"yellow", CSS_VAL_YELLOW},
-#line 206 "cssvalues.gperf"
-      {"always", CSS_VAL_ALWAYS},
-#line 32 "cssvalues.gperf"
+      {"icon", CSS_VAL_ICON},
+      {"caption", CSS_VAL_CAPTION},
       {"normal", CSS_VAL_NORMAL},
-#line 145 "cssvalues.gperf"
-      {"square", CSS_VAL_SQUARE},
-#line 186 "cssvalues.gperf"
-      {"e-resize", CSS_VAL_E_RESIZE},
-#line 78 "cssvalues.gperf"
       {"maroon", CSS_VAL_MAROON},
-#line 193 "cssvalues.gperf"
-      {"w-resize", CSS_VAL_W_RESIZE},
-#line 189 "cssvalues.gperf"
-      {"n-resize", CSS_VAL_N_RESIZE},
-#line 230 "cssvalues.gperf"
-      {"nowrap", CSS_VAL_NOWRAP},
-#line 232 "cssvalues.gperf"
-      {"overlay", CSS_VAL_OVERLAY},
-#line 167 "cssvalues.gperf"
-      {"compact", CSS_VAL_COMPACT},
-#line 23 "cssvalues.gperf"
-      {"caption", CSS_VAL_CAPTION},
-#line 192 "cssvalues.gperf"
-      {"s-resize", CSS_VAL_S_RESIZE},
-#line 99 "cssvalues.gperf"
-      {"captiontext", CSS_VAL_CAPTIONTEXT},
-#line 234 "cssvalues.gperf"
+      {"small-caption", CSS_VAL_SMALL_CAPTION},
+      {"thin", CSS_VAL_THIN},
+      {"initial", CSS_VAL_INITIAL},
+      {"fast", CSS_VAL_FAST},
+      {"scrollbar", CSS_VAL_SCROLLBAR},
       {"portrait", CSS_VAL_PORTRAIT},
-#line 166 "cssvalues.gperf"
-      {"run-in", CSS_VAL_RUN_IN},
-#line 71 "cssvalues.gperf"
-      {"aqua", CSS_VAL_AQUA},
-#line 85 "cssvalues.gperf"
+      {"crosshair", CSS_VAL_CROSSHAIR},
+      {"intrinsic", CSS_VAL_INTRINSIC},
       {"teal", CSS_VAL_TEAL},
-#line 246 "cssvalues.gperf"
-      {"start", CSS_VAL_START},
-#line 73 "cssvalues.gperf"
-      {"blue", CSS_VAL_BLUE},
-#line 240 "cssvalues.gperf"
-      {"static", CSS_VAL_STATIC},
-#line 238 "cssvalues.gperf"
-      {"separate", CSS_VAL_SEPARATE},
-#line 29 "cssvalues.gperf"
-      {"italic", CSS_VAL_ITALIC},
-#line 202 "cssvalues.gperf"
-      {"visible", CSS_VAL_VISIBLE},
-#line 213 "cssvalues.gperf"
-      {"crop", CSS_VAL_CROP},
-#line 68 "cssvalues.gperf"
       {"fantasy", CSS_VAL_FANTASY},
-#line 199 "cssvalues.gperf"
-      {"capitalize", CSS_VAL_CAPITALIZE},
-#line 272 "cssvalues.gperf"
-      {"ellipsis", CSS_VAL_ELLIPSIS},
-#line 165 "cssvalues.gperf"
-      {"list-item", CSS_VAL_LIST_ITEM},
-#line 177 "cssvalues.gperf"
-      {"table-cell", CSS_VAL_TABLE_CELL},
-#line 174 "cssvalues.gperf"
-      {"table-row", CSS_VAL_TABLE_ROW},
-#line 226 "cssvalues.gperf"
-      {"marquee", CSS_VAL_MARQUEE},
-#line 152 "cssvalues.gperf"
-      {"lower-latin", CSS_VAL_LOWER_LATIN},
-#line 124 "cssvalues.gperf"
-      {"baseline", CSS_VAL_BASELINE},
-#line 98 "cssvalues.gperf"
-      {"buttontext", CSS_VAL_BUTTONTEXT},
-#line 82 "cssvalues.gperf"
-      {"purple", CSS_VAL_PURPLE},
-#line 92 "cssvalues.gperf"
-      {"activecaption", CSS_VAL_ACTIVECAPTION},
-#line 143 "cssvalues.gperf"
-      {"disc", CSS_VAL_DISC},
-#line 142 "cssvalues.gperf"
-      {"inside", CSS_VAL_INSIDE},
-#line 203 "cssvalues.gperf"
+      {"space", CSS_VAL_SPACE},
       {"collapse", CSS_VAL_COLLAPSE},
-#line 254 "cssvalues.gperf"
-      {"multiple", CSS_VAL_MULTIPLE},
-#line 46 "cssvalues.gperf"
-      {"x-small", CSS_VAL_X_SMALL},
-#line 270 "cssvalues.gperf"
-      {"min-intrinsic", CSS_VAL_MIN_INTRINSIC},
-#line 208 "cssvalues.gperf"
-      {"below", CSS_VAL_BELOW},
-#line 205 "cssvalues.gperf"
-      {"absolute", CSS_VAL_ABSOLUTE},
-#line 259 "cssvalues.gperf"
-      {"down", CSS_VAL_DOWN},
-#line 251 "cssvalues.gperf"
-      {"inline-axis", CSS_VAL_INLINE_AXIS},
-#line 200 "cssvalues.gperf"
-      {"uppercase", CSS_VAL_UPPERCASE},
-#line 47 "cssvalues.gperf"
-      {"small", CSS_VAL_SMALL},
-#line 121 "cssvalues.gperf"
-      {"repeat-x", CSS_VAL_REPEAT_X},
-#line 224 "cssvalues.gperf"
-      {"loud", CSS_VAL_LOUD},
-#line 53 "cssvalues.gperf"
+      {"table", CSS_VAL_TABLE},
+      {"lime", CSS_VAL_LIME},
+      {"help", CSS_VAL_HELP},
+      {"pre", CSS_VAL_PRE},
       {"smaller", CSS_VAL_SMALLER},
-#line 66 "cssvalues.gperf"
-      {"sans-serif", CSS_VAL_SANS_SERIF},
-#line 69 "cssvalues.gperf"
+      {"navy", CSS_VAL_NAVY},
+      {"ellipsis", CSS_VAL_ELLIPSIS},
       {"monospace", CSS_VAL_MONOSPACE},
-#line 280 "cssvalues.gperf"
-      {"space", CSS_VAL_SPACE},
-#line 109 "cssvalues.gperf"
-      {"scrollbar", CSS_VAL_SCROLLBAR},
-#line 115 "cssvalues.gperf"
-      {"window", CSS_VAL_WINDOW},
-#line 128 "cssvalues.gperf"
-      {"text-top", CSS_VAL_TEXT_TOP},
-#line 117 "cssvalues.gperf"
-      {"windowtext", CSS_VAL_WINDOWTEXT},
-#line 131 "cssvalues.gperf"
-      {"bottom", CSS_VAL_BOTTOM},
-#line 215 "cssvalues.gperf"
-      {"embed", CSS_VAL_EMBED},
-#line 218 "cssvalues.gperf"
-      {"hide", CSS_VAL_HIDE},
-#line 148 "cssvalues.gperf"
-      {"lower-roman", CSS_VAL_LOWER_ROMAN},
-#line 141 "cssvalues.gperf"
-      {"outside", CSS_VAL_OUTSIDE},
-#line 176 "cssvalues.gperf"
-      {"table-column", CSS_VAL_TABLE_COLUMN},
-#line 155 "cssvalues.gperf"
-      {"hebrew", CSS_VAL_HEBREW},
-#line 125 "cssvalues.gperf"
-      {"middle", CSS_VAL_MIDDLE},
-#line 204 "cssvalues.gperf"
-      {"above", CSS_VAL_ABOVE},
-#line 17 "cssvalues.gperf"
-      {"ridge", CSS_VAL_RIDGE},
-#line 122 "cssvalues.gperf"
-      {"repeat-y", CSS_VAL_REPEAT_Y},
-#line 95 "cssvalues.gperf"
-      {"buttonface", CSS_VAL_BUTTONFACE},
-#line 134 "cssvalues.gperf"
-      {"left", CSS_VAL_LEFT},
-#line 216 "cssvalues.gperf"
-      {"fixed", CSS_VAL_FIXED},
-#line 80 "cssvalues.gperf"
-      {"olive", CSS_VAL_OLIVE},
-#line 245 "cssvalues.gperf"
+      {"inset", CSS_VAL_INSET},
+      {"circle", CSS_VAL_CIRCLE},
+      {"list-item", CSS_VAL_LIST_ITEM},
+      {"min-intrinsic", CSS_VAL_MIN_INTRINSIC},
+      {"none", CSS_VAL_NONE},
+      {"slow", CSS_VAL_SLOW},
+      {"bold", CSS_VAL_BOLD},
       {"stretch", CSS_VAL_STRETCH},
-#line 195 "cssvalues.gperf"
       {"wait", CSS_VAL_WAIT},
-#line 262 "cssvalues.gperf"
-      {"infinite", CSS_VAL_INFINITE},
-#line 21 "cssvalues.gperf"
+      {"disc", CSS_VAL_DISC},
+      {"table-caption", CSS_VAL_TABLE_CAPTION},
       {"solid", CSS_VAL_SOLID},
-#line 88 "cssvalues.gperf"
+      {"black", CSS_VAL_BLACK},
+      {"left", CSS_VAL_LEFT},
+      {"block", CSS_VAL_BLOCK},
+      {"pointer", CSS_VAL_POINTER},
+      {"auto", CSS_VAL_AUTO},
+      {"horizontal", CSS_VAL_HORIZONTAL},
+      {"up", CSS_VAL_UP},
+      {"show", CSS_VAL_SHOW},
+      {"inline", CSS_VAL_INLINE},
+      {"x-small", CSS_VAL_X_SMALL},
+      {"always", CSS_VAL_ALWAYS},
+      {"mix", CSS_VAL_MIX},
+      {"sub", CSS_VAL_SUB},
+      {"hand", CSS_VAL_HAND},
+      {"thick", CSS_VAL_THICK},
+      {"armenian", CSS_VAL_ARMENIAN},
+      {"nowrap", CSS_VAL_NOWRAP},
+      {"blink", CSS_VAL_BLINK},
+      {"inherit", CSS_VAL_INHERIT},
+      {"aqua", CSS_VAL_AQUA},
       {"transparent", CSS_VAL_TRANSPARENT},
-#line 107 "cssvalues.gperf"
-      {"infotext", CSS_VAL_INFOTEXT},
-#line 187 "cssvalues.gperf"
-      {"ne-resize", CSS_VAL_NE_RESIZE},
-#line 12 "cssvalues.gperf"
-      {"initial", CSS_VAL_INITIAL},
-#line 188 "cssvalues.gperf"
-      {"nw-resize", CSS_VAL_NW_RESIZE},
-#line 190 "cssvalues.gperf"
-      {"se-resize", CSS_VAL_SE_RESIZE},
-#line 178 "cssvalues.gperf"
-      {"table-caption", CSS_VAL_TABLE_CAPTION},
-#line 191 "cssvalues.gperf"
-      {"sw-resize", CSS_VAL_SW_RESIZE},
-#line 253 "cssvalues.gperf"
-      {"single", CSS_VAL_SINGLE},
-#line 76 "cssvalues.gperf"
-      {"green", CSS_VAL_GREEN},
-#line 265 "cssvalues.gperf"
-      {"unfurl", CSS_VAL_UNFURL},
-#line 104 "cssvalues.gperf"
+      {"serif", CSS_VAL_SERIF},
+      {"move", CSS_VAL_MOVE},
+      {"above", CSS_VAL_ABOVE},
+      {"status-bar", CSS_VAL_STATUS_BAR},
+      {"olive", CSS_VAL_OLIVE},
+      {"gray", CSS_VAL_GRAY},
+      {"right", CSS_VAL_RIGHT},
+      {"capitalize", CSS_VAL_CAPITALIZE},
+      {"table-cell", CSS_VAL_TABLE_CELL},
+      {"sans-serif", CSS_VAL_SANS_SERIF},
+      {"vertical", CSS_VAL_VERTICAL},
+      {"visible", CSS_VAL_VISIBLE},
+      {"silver", CSS_VAL_SILVER},
+      {"repeat", CSS_VAL_REPEAT},
+      {"hiragana", CSS_VAL_HIRAGANA},
+      {"infinite", CSS_VAL_INFINITE},
+      {"separate", CSS_VAL_SEPARATE},
+      {"run-in", CSS_VAL_RUN_IN},
+      {"avoid", CSS_VAL_AVOID},
+      {"activecaption", CSS_VAL_ACTIVECAPTION},
+      {"overlay", CSS_VAL_OVERLAY},
+      {"invert", CSS_VAL_INVERT},
+      {"alternate", CSS_VAL_ALTERNATE},
+      {"center", CSS_VAL_CENTER},
+      {"baseline", CSS_VAL_BASELINE},
+      {"fuchsia", CSS_VAL_FUCHSIA},
+      {"below", CSS_VAL_BELOW},
+      {"slide", CSS_VAL_SLIDE},
+      {"no-repeat", CSS_VAL_NO_REPEAT},
+      {"text", CSS_VAL_TEXT},
+      {"decimal", CSS_VAL_DECIMAL},
+      {"end", CSS_VAL_END},
+      {"ahead", CSS_VAL_AHEAD},
+      {"justify", CSS_VAL_JUSTIFY},
+      {"red", CSS_VAL_RED},
+      {"repeat-y", CSS_VAL_REPEAT_Y},
+      {"lower", CSS_VAL_LOWER},
+      {"landscape", CSS_VAL_LANDSCAPE},
+      {"text-top", CSS_VAL_TEXT_TOP},
+      {"outset", CSS_VAL_OUTSET},
+      {"yellow", CSS_VAL_YELLOW},
+      {"hide", CSS_VAL_HIDE},
       {"inactivecaption", CSS_VAL_INACTIVECAPTION},
-#line 105 "cssvalues.gperf"
-      {"inactivecaptiontext", CSS_VAL_INACTIVECAPTIONTEXT},
-#line 49 "cssvalues.gperf"
+      {"blue", CSS_VAL_BLUE},
+      {"white", CSS_VAL_WHITE},
+      {"bolder", CSS_VAL_BOLDER},
+      {"absolute", CSS_VAL_ABSOLUTE},
+      {"text-bottom", CSS_VAL_TEXT_BOTTOM},
+      {"table-row", CSS_VAL_TABLE_ROW},
+      {"multiple", CSS_VAL_MULTIPLE},
+      {"inline-table", CSS_VAL_INLINE_TABLE},
       {"large", CSS_VAL_LARGE},
-#line 255 "cssvalues.gperf"
-      {"forwards", CSS_VAL_FORWARDS},
-#line 30 "cssvalues.gperf"
-      {"oblique", CSS_VAL_OBLIQUE},
-#line 54 "cssvalues.gperf"
+      {"menu", CSS_VAL_MENU},
+      {"inside", CSS_VAL_INSIDE},
+      {"purple", CSS_VAL_PURPLE},
+      {"super", CSS_VAL_SUPER},
+      {"hiragana-iroha", CSS_VAL_HIRAGANA_IROHA},
+      {"lower-alpha", CSS_VAL_LOWER_ALPHA},
+      {"captiontext", CSS_VAL_CAPTIONTEXT},
+      {"level", CSS_VAL_LEVEL},
+      {"single", CSS_VAL_SINGLE},
+      {"down", CSS_VAL_DOWN},
+      {"loud", CSS_VAL_LOUD},
+      {"lower-latin", CSS_VAL_LOWER_LATIN},
+      {"table-column", CSS_VAL_TABLE_COLUMN},
+      {"dot-dash", CSS_VAL_DOT_DASH},
+      {"orange", CSS_VAL_ORANGE},
       {"larger", CSS_VAL_LARGER},
-#line 207 "cssvalues.gperf"
-      {"avoid", CSS_VAL_AVOID},
-#line 160 "cssvalues.gperf"
       {"katakana", CSS_VAL_KATAKANA},
-#line 164 "cssvalues.gperf"
-      {"block", CSS_VAL_BLOCK},
-#line 137 "cssvalues.gperf"
-      {"justify", CSS_VAL_JUSTIFY},
-#line 212 "cssvalues.gperf"
-      {"close-quote", CSS_VAL_CLOSE_QUOTE},
-#line 271 "cssvalues.gperf"
-      {"clip", CSS_VAL_CLIP},
-#line 118 "cssvalues.gperf"
       {"grey", CSS_VAL_GREY},
-#line 154 "cssvalues.gperf"
-      {"upper-latin", CSS_VAL_UPPER_LATIN},
-#line 239 "cssvalues.gperf"
-      {"show", CSS_VAL_SHOW},
-#line 184 "cssvalues.gperf"
-      {"pointer", CSS_VAL_POINTER},
-#line 249 "cssvalues.gperf"
-      {"horizontal", CSS_VAL_HORIZONTAL},
-#line 170 "cssvalues.gperf"
-      {"inline-table", CSS_VAL_INLINE_TABLE},
-#line 16 "cssvalues.gperf"
-      {"groove", CSS_VAL_GROOVE},
-#line 231 "cssvalues.gperf"
-      {"open-quote", CSS_VAL_OPEN_QUOTE},
-#line 116 "cssvalues.gperf"
-      {"windowframe", CSS_VAL_WINDOWFRAME},
-#line 119 "cssvalues.gperf"
-      {"-khtml-text", CSS_VAL__KHTML_TEXT},
-#line 22 "cssvalues.gperf"
-      {"double", CSS_VAL_DOUBLE},
-#line 129 "cssvalues.gperf"
-      {"text-bottom", CSS_VAL_TEXT_BOTTOM},
-#line 140 "cssvalues.gperf"
-      {"-khtml-center", CSS_VAL__KHTML_CENTER},
-#line 196 "cssvalues.gperf"
-      {"help", CSS_VAL_HELP},
-#line 221 "cssvalues.gperf"
-      {"landscape", CSS_VAL_LANDSCAPE},
-#line 45 "cssvalues.gperf"
+      {"discard", CSS_VAL_DISCARD},
+      {"lighter", CSS_VAL_LIGHTER},
+      {"read-only", CSS_VAL_READ_ONLY},
+      {"oblique", CSS_VAL_OBLIQUE},
+      {"upper-alpha", CSS_VAL_UPPER_ALPHA},
+      {"lower-roman", CSS_VAL_LOWER_ROMAN},
+      {"square", CSS_VAL_SQUARE},
       {"xx-small", CSS_VAL_XX_SMALL},
-#line 72 "cssvalues.gperf"
-      {"black", CSS_VAL_BLACK},
-#line 182 "cssvalues.gperf"
-      {"crosshair", CSS_VAL_CROSSHAIR},
-#line 149 "cssvalues.gperf"
-      {"upper-roman", CSS_VAL_UPPER_ROMAN},
-#line 123 "cssvalues.gperf"
-      {"no-repeat", CSS_VAL_NO_REPEAT},
-#line 33 "cssvalues.gperf"
-      {"bold", CSS_VAL_BOLD},
-#line 34 "cssvalues.gperf"
-      {"bolder", CSS_VAL_BOLDER},
-#line 138 "cssvalues.gperf"
+      {"upper-latin", CSS_VAL_UPPER_LATIN},
+      {"inline-block", CSS_VAL_INLINE_BLOCK},
+      {"relative", CSS_VAL_RELATIVE},
+      {"narrower", CSS_VAL_NARROWER},
+      {"wave", CSS_VAL_WAVE},
+      {"element", CSS_VAL_ELEMENT},
+      {"block-axis", CSS_VAL_BLOCK_AXIS},
+      {"higher", CSS_VAL_HIGHER},
       {"-khtml-left", CSS_VAL__KHTML_LEFT},
-#line 91 "cssvalues.gperf"
-      {"activeborder", CSS_VAL_ACTIVEBORDER},
-#line 19 "cssvalues.gperf"
-      {"dotted", CSS_VAL_DOTTED},
-#line 211 "cssvalues.gperf"
-      {"both", CSS_VAL_BOTH},
-#line 81 "cssvalues.gperf"
-      {"orange", CSS_VAL_ORANGE},
-#line 273 "cssvalues.gperf"
-      {"discard", CSS_VAL_DISCARD},
-#line 133 "cssvalues.gperf"
+      {"s-resize", CSS_VAL_S_RESIZE},
+      {"inline-axis", CSS_VAL_INLINE_AXIS},
       {"-khtml-auto", CSS_VAL__KHTML_AUTO},
-#line 93 "cssvalues.gperf"
+      {"upper-roman", CSS_VAL_UPPER_ROMAN},
+      {"infotext", CSS_VAL_INFOTEXT},
+      {"-khtml-box", CSS_VAL__KHTML_BOX},
+      {"buttonface", CSS_VAL_BUTTONFACE},
+      {"overline", CSS_VAL_OVERLINE},
+      {"n-resize", CSS_VAL_N_RESIZE},
+      {"-khtml-body", CSS_VAL__KHTML_BODY},
+      {"-khtml-link", CSS_VAL__KHTML_LINK},
+      {"embed", CSS_VAL_EMBED},
+      {"-khtml-nowrap", CSS_VAL__KHTML_NOWRAP},
+      {"katakana-iroha", CSS_VAL_KATAKANA_IROHA},
+      {"lowercase", CSS_VAL_LOWERCASE},
+      {"groove", CSS_VAL_GROOVE},
+      {"continuous", CSS_VAL_CONTINUOUS},
+      {"dotted", CSS_VAL_DOTTED},
+      {"forwards", CSS_VAL_FORWARDS},
+      {"cursive", CSS_VAL_CURSIVE},
+      {"repeat-x", CSS_VAL_REPEAT_X},
+      {"-khtml-right", CSS_VAL__KHTML_RIGHT},
+      {"middle", CSS_VAL_MIDDLE},
+      {"hebrew", CSS_VAL_HEBREW},
+      {"uppercase", CSS_VAL_UPPERCASE},
+      {"highlight", CSS_VAL_HIGHLIGHT},
+      {"dashed", CSS_VAL_DASHED},
+      {"green", CSS_VAL_GREEN},
+      {"close-quote", CSS_VAL_CLOSE_QUOTE},
+      {"double", CSS_VAL_DOUBLE},
+      {"wider", CSS_VAL_WIDER},
+      {"unfurl", CSS_VAL_UNFURL},
+      {"outside", CSS_VAL_OUTSIDE},
+      {"medium", CSS_VAL_MEDIUM},
+      {"marquee", CSS_VAL_MARQUEE},
       {"appworkspace", CSS_VAL_APPWORKSPACE},
-#line 168 "cssvalues.gperf"
-      {"inline-block", CSS_VAL_INLINE_BLOCK},
-#line 75 "cssvalues.gperf"
-      {"gray", CSS_VAL_GRAY},
-#line 100 "cssvalues.gperf"
-      {"graytext", CSS_VAL_GRAYTEXT},
-#line 59 "cssvalues.gperf"
-      {"condensed", CSS_VAL_CONDENSED},
-#line 14 "cssvalues.gperf"
+      {"open-quote", CSS_VAL_OPEN_QUOTE},
       {"hidden", CSS_VAL_HIDDEN},
-#line 50 "cssvalues.gperf"
+      {"-khtml-center", CSS_VAL__KHTML_CENTER},
+      {"ridge", CSS_VAL_RIDGE},
+      {"no-close-quote", CSS_VAL_NO_CLOSE_QUOTE},
+      {"-khtml-text", CSS_VAL__KHTML_TEXT},
+      {"e-resize", CSS_VAL_E_RESIZE},
+      {"se-resize", CSS_VAL_SE_RESIZE},
       {"x-large", CSS_VAL_X_LARGE},
-#line 263 "cssvalues.gperf"
-      {"slide", CSS_VAL_SLIDE},
-#line 267 "cssvalues.gperf"
-      {"read-write", CSS_VAL_READ_WRITE},
-#line 31 "cssvalues.gperf"
-      {"small-caps", CSS_VAL_SMALL_CAPS},
-#line 28 "cssvalues.gperf"
-      {"status-bar", CSS_VAL_STATUS_BAR},
-#line 89 "cssvalues.gperf"
-      {"-khtml-link", CSS_VAL__KHTML_LINK},
-#line 27 "cssvalues.gperf"
-      {"small-caption", CSS_VAL_SMALL_CAPTION},
-#line 252 "cssvalues.gperf"
-      {"block-axis", CSS_VAL_BLOCK_AXIS},
-#line 209 "cssvalues.gperf"
-      {"bidi-override", CSS_VAL_BIDI_OVERRIDE},
-#line 210 "cssvalues.gperf"
-      {"blink", CSS_VAL_BLINK},
-#line 146 "cssvalues.gperf"
-      {"decimal", CSS_VAL_DECIMAL},
-#line 150 "cssvalues.gperf"
-      {"lower-greek", CSS_VAL_LOWER_GREEK},
-#line 86 "cssvalues.gperf"
-      {"white", CSS_VAL_WHITE},
-#line 242 "cssvalues.gperf"
-      {"thin", CSS_VAL_THIN},
-#line 217 "cssvalues.gperf"
-      {"hand", CSS_VAL_HAND},
-#line 135 "cssvalues.gperf"
-      {"right", CSS_VAL_RIGHT},
-#line 183 "cssvalues.gperf"
+      {"reverse", CSS_VAL_REVERSE},
+      {"buttontext", CSS_VAL_BUTTONTEXT},
+      {"window", CSS_VAL_WINDOW},
+      {"dot-dot-dash", CSS_VAL_DOT_DOT_DASH},
+      {"no-open-quote", CSS_VAL_NO_OPEN_QUOTE},
       {"default", CSS_VAL_DEFAULT},
-#line 62 "cssvalues.gperf"
-      {"expanded", CSS_VAL_EXPANDED},
-#line 244 "cssvalues.gperf"
-      {"-khtml-nowrap", CSS_VAL__KHTML_NOWRAP},
-#line 35 "cssvalues.gperf"
-      {"lighter", CSS_VAL_LIGHTER},
-#line 90 "cssvalues.gperf"
-      {"-khtml-activelink", CSS_VAL__KHTML_ACTIVELINK},
-#line 266 "cssvalues.gperf"
-      {"read-only", CSS_VAL_READ_ONLY},
-#line 103 "cssvalues.gperf"
+      {"ne-resize", CSS_VAL_NE_RESIZE},
+      {"backwards", CSS_VAL_BACKWARDS},
+      {"fixed", CSS_VAL_FIXED},
+      {"graytext", CSS_VAL_GRAYTEXT},
+      {"w-resize", CSS_VAL_W_RESIZE},
+      {"georgian", CSS_VAL_GEORGIAN},
+      {"sw-resize", CSS_VAL_SW_RESIZE},
+      {"buttonshadow", CSS_VAL_BUTTONSHADOW},
+      {"nw-resize", CSS_VAL_NW_RESIZE},
+      {"activeborder", CSS_VAL_ACTIVEBORDER},
+      {"-khtml-inline-box", CSS_VAL__KHTML_INLINE_BOX},
+      {"line-through", CSS_VAL_LINE_THROUGH},
+      {"condensed", CSS_VAL_CONDENSED},
+      {"inactivecaptiontext", CSS_VAL_INACTIVECAPTIONTEXT},
       {"inactiveborder", CSS_VAL_INACTIVEBORDER},
-#line 111 "cssvalues.gperf"
+      {"menutext", CSS_VAL_MENUTEXT},
       {"threedface", CSS_VAL_THREEDFACE},
-#line 179 "cssvalues.gperf"
-      {"-khtml-box", CSS_VAL__KHTML_BOX},
-#line 74 "cssvalues.gperf"
-      {"fuchsia", CSS_VAL_FUCHSIA},
-#line 257 "cssvalues.gperf"
-      {"ahead", CSS_VAL_AHEAD},
-#line 151 "cssvalues.gperf"
-      {"lower-alpha", CSS_VAL_LOWER_ALPHA},
-#line 228 "cssvalues.gperf"
-      {"no-close-quote", CSS_VAL_NO_CLOSE_QUOTE},
-#line 60 "cssvalues.gperf"
-      {"semi-condensed", CSS_VAL_SEMI_CONDENSED},
-#line 51 "cssvalues.gperf"
-      {"xx-large", CSS_VAL_XX_LARGE},
-#line 241 "cssvalues.gperf"
-      {"thick", CSS_VAL_THICK},
-#line 58 "cssvalues.gperf"
-      {"extra-condensed", CSS_VAL_EXTRA_CONDENSED},
-#line 57 "cssvalues.gperf"
-      {"ultra-condensed", CSS_VAL_ULTRA_CONDENSED},
-#line 229 "cssvalues.gperf"
-      {"no-open-quote", CSS_VAL_NO_OPEN_QUOTE},
-#line 159 "cssvalues.gperf"
-      {"hiragana", CSS_VAL_HIRAGANA},
-#line 26 "cssvalues.gperf"
+      {"read-write", CSS_VAL_READ_WRITE},
       {"message-box", CSS_VAL_MESSAGE_BOX},
-#line 279 "cssvalues.gperf"
+      {"skip-white-space", CSS_VAL_SKIP_WHITE_SPACE},
+      {"-khtml-activelink", CSS_VAL__KHTML_ACTIVELINK},
+      {"after-white-space", CSS_VAL_AFTER_WHITE_SPACE},
+      {"underline", CSS_VAL_UNDERLINE},
       {"break-word", CSS_VAL_BREAK_WORD},
-#line 61 "cssvalues.gperf"
-      {"semi-expanded", CSS_VAL_SEMI_EXPANDED},
-#line 157 "cssvalues.gperf"
-      {"georgian", CSS_VAL_GEORGIAN},
-#line 171 "cssvalues.gperf"
+      {"buttonhighlight", CSS_VAL_BUTTONHIGHLIGHT},
+      {"xx-large", CSS_VAL_XX_LARGE},
+      {"cjk-ideographic", CSS_VAL_CJK_IDEOGRAPHIC},
       {"table-row-group", CSS_VAL_TABLE_ROW_GROUP},
-#line 180 "cssvalues.gperf"
-      {"-khtml-inline-box", CSS_VAL__KHTML_INLINE_BOX},
-#line 63 "cssvalues.gperf"
-      {"extra-expanded", CSS_VAL_EXTRA_EXPANDED},
-#line 20 "cssvalues.gperf"
-      {"dashed", CSS_VAL_DASHED},
-#line 281 "cssvalues.gperf"
-      {"after-white-space", CSS_VAL_AFTER_WHITE_SPACE},
-#line 64 "cssvalues.gperf"
-      {"ultra-expanded", CSS_VAL_ULTRA_EXPANDED},
-#line 153 "cssvalues.gperf"
-      {"upper-alpha", CSS_VAL_UPPER_ALPHA},
-#line 256 "cssvalues.gperf"
-      {"backwards", CSS_VAL_BACKWARDS},
-#line 97 "cssvalues.gperf"
-      {"buttonshadow", CSS_VAL_BUTTONSHADOW},
-#line 173 "cssvalues.gperf"
+      {"windowframe", CSS_VAL_WINDOWFRAME},
       {"table-footer-group", CSS_VAL_TABLE_FOOTER_GROUP},
-#line 162 "cssvalues.gperf"
-      {"katakana-iroha", CSS_VAL_KATAKANA_IROHA},
-#line 175 "cssvalues.gperf"
+      {"semi-condensed", CSS_VAL_SEMI_CONDENSED},
       {"table-column-group", CSS_VAL_TABLE_COLUMN_GROUP},
-#line 219 "cssvalues.gperf"
-      {"higher", CSS_VAL_HIGHER},
-#line 70 "cssvalues.gperf"
-      {"-khtml-body", CSS_VAL__KHTML_BODY},
-#line 52 "cssvalues.gperf"
-      {"-khtml-xxx-large", CSS_VAL__KHTML_XXX_LARGE},
-#line 274 "cssvalues.gperf"
-      {"dot-dash", CSS_VAL_DOT_DASH},
-#line 139 "cssvalues.gperf"
-      {"-khtml-right", CSS_VAL__KHTML_RIGHT},
-#line 223 "cssvalues.gperf"
-      {"line-through", CSS_VAL_LINE_THROUGH},
-#line 94 "cssvalues.gperf"
       {"background", CSS_VAL_BACKGROUND},
-#line 114 "cssvalues.gperf"
+      {"expanded", CSS_VAL_EXPANDED},
+      {"highlighttext", CSS_VAL_HIGHLIGHTTEXT},
+      {"bidi-override", CSS_VAL_BIDI_OVERRIDE},
       {"threedshadow", CSS_VAL_THREEDSHADOW},
-#line 278 "cssvalues.gperf"
-      {"skip-white-space", CSS_VAL_SKIP_WHITE_SPACE},
-#line 161 "cssvalues.gperf"
-      {"hiragana-iroha", CSS_VAL_HIRAGANA_IROHA},
-#line 106 "cssvalues.gperf"
+      {"windowtext", CSS_VAL_WINDOWTEXT},
+      {"ultra-condensed", CSS_VAL_ULTRA_CONDENSED},
       {"infobackground", CSS_VAL_INFOBACKGROUND},
-#line 172 "cssvalues.gperf"
-      {"table-header-group", CSS_VAL_TABLE_HEADER_GROUP},
-#line 132 "cssvalues.gperf"
+      {"threedhighlight", CSS_VAL_THREEDHIGHLIGHT},
+      {"semi-expanded", CSS_VAL_SEMI_EXPANDED},
+      {"lower-greek", CSS_VAL_LOWER_GREEK},
+      {"extra-condensed", CSS_VAL_EXTRA_CONDENSED},
       {"-khtml-baseline-middle", CSS_VAL__KHTML_BASELINE_MIDDLE},
-#line 275 "cssvalues.gperf"
-      {"dot-dot-dash", CSS_VAL_DOT_DOT_DASH},
-#line 158 "cssvalues.gperf"
-      {"cjk-ideographic", CSS_VAL_CJK_IDEOGRAPHIC},
-#line 147 "cssvalues.gperf"
-      {"decimal-leading-zero", CSS_VAL_DECIMAL_LEADING_ZERO},
-#line 101 "cssvalues.gperf"
-      {"highlight", CSS_VAL_HIGHLIGHT},
-#line 102 "cssvalues.gperf"
-      {"highlighttext", CSS_VAL_HIGHLIGHTTEXT},
-#line 110 "cssvalues.gperf"
-      {"threeddarkshadow", CSS_VAL_THREEDDARKSHADOW},
-#line 96 "cssvalues.gperf"
-      {"buttonhighlight", CSS_VAL_BUTTONHIGHLIGHT},
-#line 113 "cssvalues.gperf"
+      {"ultra-expanded", CSS_VAL_ULTRA_EXPANDED},
+      {"table-header-group", CSS_VAL_TABLE_HEADER_GROUP},
       {"threedlightshadow", CSS_VAL_THREEDLIGHTSHADOW},
-#line 112 "cssvalues.gperf"
-      {"threedhighlight", CSS_VAL_THREEDHIGHLIGHT}
+      {"decimal-leading-zero", CSS_VAL_DECIMAL_LEADING_ZERO},
+      {"-khtml-xxx-large", CSS_VAL__KHTML_XXX_LARGE},
+      {"extra-expanded", CSS_VAL_EXTRA_EXPANDED},
+      {"threeddarkshadow", CSS_VAL_THREEDDARKSHADOW}
     };
 
   static const short lookup[] =
     {
-        0,  -1,  -1,  -1,  -1,   1,  -1,  -1,  -1,  -1,
-        2,  -1,  -1,  -1,  -1,   3,  -1,  -1,   4,  -1,
-        5,  -1,  -1,  -1,  -1,   6,  -1,  -1,   7,  -1,
-        8,  -1,  -1,  -1,  -1,   9,  -1,  -1,  10,  -1,
-       11,  -1,  -1,  -1,  -1,  12,  -1,  -1,  13,  -1,
-       14,  -1,  -1,  -1,  -1,  15,  -1,  -1,  -1,  -1,
-       16,  -1,  -1,  17,  -1,  18,  -1,  -1,  19,  -1,
-       20,  -1,  -1,  -1,  -1,  21,  22,  -1,  -1,  -1,
-       23,  -1,  -1,  24,  -1,  25,  -1,  -1,  -1,  -1,
-       26,  -1,  -1,  -1,  -1,  27,  -1,  -1,  -1,  -1,
-       28,  -1,  -1,  -1,  -1,  29,  -1,  -1,  -1,  -1,
-       30,  -1,  -1,  31,  -1,  32,  -1,  -1,  33,  -1,
-       34,  -1,  -1,  -1,  -1,  35,  -1,  -1,  36,  -1,
-       -1,  -1,  -1,  37,  -1,  -1,  -1,  -1,  38,  -1,
-       -1,  -1,  -1,  39,  -1,  40,  41,  -1,  42,  -1,
-       -1,  43,  -1,  -1,  -1,  44,  -1,  -1,  45,  -1,
-       46,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  47,  -1,
-       48,  -1,  -1,  49,  -1,  50,  -1,  -1,  -1,  -1,
-       51,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  52,  -1,
-       -1,  -1,  -1,  53,  -1,  54,  -1,  -1,  55,  -1,
-       56,  -1,  -1,  57,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  58,  -1,
-       59,  -1,  -1,  60,  -1,  -1,  61,  -1,  -1,  -1,
-       -1,  62,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       63,  -1,  -1,  -1,  -1,  -1,  64,  -1,  -1,  -1,
-       65,  -1,  -1,  -1,  -1,  66,  -1,  -1,  67,  -1,
-       68,  -1,  -1,  69,  70,  71,  -1,  -1,  72,  -1,
-       73,  74,  -1,  -1,  -1,  75,  -1,  -1,  -1,  -1,
-       76,  77,  -1,  -1,  -1,  78,  -1,  -1,  -1,  -1,
-       79,  -1,  -1,  80,  -1,  81,  -1,  -1,  82,  -1,
-       83,  -1,  -1,  84,  -1,  -1,  -1,  -1,  -1,  -1,
-       85,  86,  -1,  87,  -1,  88,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  89,  -1,  -1,  -1,  -1,
-       90,  -1,  -1,  91,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  92,  -1,  -1,  -1,  -1,  93,  -1,
-       94,  -1,  -1,  95,  -1,  96,  -1,  -1,  97,  -1,
-       98,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       99,  -1,  -1,  -1,  -1, 100,  -1,  -1,  -1,  -1,
-      101,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 102,  -1,
-      103,  -1,  -1, 104,  -1, 105,  -1,  -1, 106,  -1,
-       -1,  -1,  -1, 107,  -1,  -1,  -1,  -1, 108,  -1,
-      109, 110,  -1, 111,  -1, 112,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 113,  -1, 114,  -1,  -1,  -1,  -1,
-      115,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      116, 117,  -1, 118, 119, 120,  -1,  -1,  -1,  -1,
-      121,  -1,  -1,  -1,  -1, 122,  -1,  -1, 123,  -1,
-      124,  -1,  -1,  -1,  -1, 125,  -1,  -1, 126,  -1,
-      127,  -1,  -1, 128,  -1, 129, 130,  -1,  -1,  -1,
-       -1,  -1,  -1, 131,  -1, 132,  -1,  -1,  -1,  -1,
-       -1, 133,  -1, 134,  -1, 135,  -1,  -1, 136,  -1,
-      137,  -1,  -1,  -1,  -1, 138,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 139,  -1,  -1, 140,  -1,
-       -1,  -1,  -1,  -1,  -1, 141,  -1,  -1,  -1,  -1,
-      142,  -1,  -1, 143,  -1, 144,  -1,  -1,  -1,  -1,
-      145,  -1,  -1, 146,  -1, 147,  -1,  -1, 148,  -1,
-      149,  -1,  -1, 150,  -1,  -1, 151,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 152, 153,  -1, 154,  -1,
-      155,  -1,  -1, 156,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 157,  -1,  -1,  -1,  -1,
-      158,  -1,  -1,  -1,  -1,  -1, 159,  -1, 160,  -1,
-       -1,  -1,  -1,  -1,  -1, 161, 162,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 163,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 164,  -1,
-      165,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      166,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      167,  -1,  -1, 168,  -1,  -1, 169,  -1,  -1, 170,
-       -1,  -1,  -1, 171,  -1,  -1,  -1,  -1, 172,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 173,  -1,
-      174,  -1,  -1,  -1,  -1, 175,  -1,  -1,  -1,  -1,
-      176, 177,  -1,  -1,  -1, 178,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      179,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 180,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      181,  -1,  -1,  -1,  -1, 182,  -1,  -1,  -1,  -1,
-      183,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 184,  -1,
-       -1,  -1,  -1, 185,  -1,  -1,  -1,  -1,  -1,  -1,
-      186,  -1,  -1,  -1,  -1, 187,  -1,  -1,  -1,  -1,
-      188,  -1,  -1,  -1,  -1, 189,  -1,  -1,  -1,  -1,
-      190,  -1,  -1,  -1,  -1,  -1, 191,  -1,  -1,  -1,
-      192,  -1,  -1, 193,  -1,  -1, 194,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 195,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 196,  -1,  -1, 197,  -1,
-      198,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 199,  -1,
-       -1,  -1,  -1,  -1,  -1, 200,  -1,  -1,  -1,  -1,
-      201,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 202,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 203,  -1,  -1, 204,  -1,
-       -1,  -1,  -1, 205,  -1, 206,  -1,  -1,  -1,  -1,
-      207,  -1,  -1, 208,  -1,  -1,  -1,  -1, 209,  -1,
-      210,  -1,  -1,  -1,  -1, 211,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      212,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      213,  -1,  -1,  -1,  -1,  -1, 214,  -1, 215,  -1,
-      216,  -1,  -1, 217,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 218,  -1,  -1,  -1,  -1, 219,  -1,
-       -1,  -1,  -1, 220,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 221,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 222,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 223,  -1,
-       -1,  -1,  -1, 224,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 225,  -1,
-       -1,  -1,  -1,  -1,  -1, 226,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1, 227,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 228,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 229,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 230,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 231,  -1,  -1,  -1,  -1,  -1,  -1,
-      232,  -1,  -1, 233,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1, 234,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 235,  -1,
-      236,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 237,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 238,  -1,  -1, 239,  -1,  -1,  -1,
-      240,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1, 241,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 242,  -1,
-       -1,  -1,  -1, 243,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 244,  -1,
-       -1,  -1,  -1, 245,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 246,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      247,  -1,  -1,  -1,  -1, 248,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      249,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 250,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 251,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      252,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 253,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      254,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 255,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 256,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 257,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 258,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 259,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      260,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      261,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 262,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 263,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 264,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1, 265,  -1,  -1, 266,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 267,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      268,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1, 269,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-       -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
-      270
+         0,   -1,   -1,   -1,   -1,    1,   -1,   -1,
+        -1,   -1,    2,   -1,   -1,    3,   -1,    4,
+        -1,   -1,   -1,   -1,    5,   -1,   -1,    6,
+        -1,    7,   -1,   -1,   -1,   -1,    8,   -1,
+         9,   -1,   -1,   10,   -1,   -1,   -1,   -1,
+        11,   -1,   -1,   -1,   -1,   -1,   12,   -1,
+        13,   -1,   -1,   14,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   15,   -1,   -1,   -1,   -1,
+        -1, -338, -255,   -2,   -1,   -1,   -1,   -1,
+        -1,   18,   -1,   19,   -1,   -1,   -1,   -1,
+        -1,   20,   -1,   21,   -1,   -1,   -1,   -1,
+        -1,   22,   -1,   -1,   -1,   23,   -1,   -1,
+        -1,   -1,   24,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   25,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   26,   -1,   -1,   -1,   -1,   27,
+        28,   -1,   29,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        30,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   31,   -1,   -1,   -1,   -1,   -1,
+        32,   -1,   33,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   34,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   35,   -1,   -1,
+        -1,   -1,   -1,   -1,   36,   -1,   -1,   -1,
+        -1,   37,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   38,   -1,   -1,   -1,   -1,   39,   -1,
+        40,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   41,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   42,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   43,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   44,   -1,   -1,   -1,
+        -1,   45,   -1,   -1,   -1,   -1,   46,   47,
+        48,   -1,   -1,   -1,   -1,   -1,   49,   -1,
+        50,   -1,   -1,   51,   -1,   -1,   -1,   52,
+        -1,   -1,   -1,   -1,   53,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   54,   55,   -1,   -1,   -1,   -1,   -1,
+        56,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        57,   58,   59,   -1,   -1,   -1,   -1,   -1,
+        60,   -1,   -1,   -1,   61,   62,   -1,   -1,
+        -1,   -1,   -1,   -1,   63,   -1,   64,   65,
+        -1,   66,   -1,   -1,   67,   -1,   -1,   -1,
+        68,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        69,   -1,   -1,   -1,   -1,   -1,   -1,   70,
+        -1,   -1,   71,   -1,   -1,   -1,   -1,   72,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   73,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   74,
+        -1,   -1,   -1,   75,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   76,   -1,   -1,   -1,   -1,   77,
+        -1,   -1,   78,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   79,   -1,   -1,   80,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   81,   -1,   -1,   -1,   -1,   -1,
+        82,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   83,
+        -1,   84,   -1,   -1,   -1,   -1,   85,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        86,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   87,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   88,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   89,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   90,   91,   -1,   -1,
+        -1,   -1,   92,   -1,   93,   -1,   -1,   -1,
+        -1,   94,   95,   96,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   97,   -1,   -1,   -1,   -1,
+        -1,   -1,   98,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   99,   -1,   -1,   -1,  100,   -1,
+        -1,   -1,   -1,   -1,  101,   -1,   -1,   -1,
+        -1,  102,   -1,   -1,   -1,   -1,   -1,   -1,
+       103,   -1,   -1,  104,   -1,   -1,   -1,   -1,
+       105,  106,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  107,   -1,   -1,   -1,   -1,   -1,
+        -1,  108,   -1,   -1,  109,   -1,  110,  111,
+        -1,   -1,   -1,  112,  113,   -1,   -1,   -1,
+       114,   -1,   -1,   -1,   -1,  115,   -1,   -1,
+       116,   -1,   -1,   -1,   -1,   -1,   -1,  117,
+       118,   -1,  119,   -1,  120,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  121,  122,
+       123,  124,   -1,   -1,  125,   -1,  126,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       127,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       128,   -1,  129,   -1,   -1,  130,   -1,  131,
+        -1,   -1,   -1,   -1,  132,   -1,   -1,   -1,
+        -1,  133,   -1,  134,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  135,   -1,
+       136,   -1,  137,   -1,   -1,   -1,  138,   -1,
+       139,   -1,  140,   -1,   -1,   -1,   -1,  141,
+        -1,  142,   -1,   -1,   -1,   -1,  143,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       144,   -1,   -1,   -1,  145,   -1,  146,   -1,
+       147,   -1,   -1,   -1,   -1,  148,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  149,   -1,   -1,  150,   -1,   -1,   -1,
+        -1,  151,   -1,   -1,   -1,   -1,   -1,  152,
+       153,   -1,   -1,  154,   -1,  155,   -1,   -1,
+       156,   -1,  157,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  158,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  159,
+        -1,   -1,   -1,   -1,  160,   -1,  161,   -1,
+       162,   -1,   -1,  163,   -1,   -1,   -1,   -1,
+       164,   -1,   -1,  165,   -1,   -1,   -1,  166,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       167,  168,   -1,   -1,   -1,   -1,  169,   -1,
+        -1,   -1,  170,   -1,   -1,   -1,   -1,  171,
+        -1,   -1,   -1,   -1,   -1,  172,   -1,  173,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       174,   -1,  175,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  176,   -1,
+        -1,   -1,   -1,   -1,   -1,  177,   -1,  178,
+        -1,  179,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  180,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  181,   -1,   -1,   -1,   -1,   -1,   -1,
+       182,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       183,   -1,  184,   -1,   -1,   -1,   -1,   -1,
+        -1,  185,   -1,   -1,   -1,   -1,  186,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       187,   -1,  188,   -1,   -1,   -1,   -1,  189,
+        -1,   -1,   -1,   -1,  190,   -1,   -1,   -1,
+        -1,   -1,  191,   -1,   -1,   -1,   -1,  192,
+        -1,   -1,   -1,   -1,  193,   -1,  194,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  195,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  196,   -1,   -1,   -1,   -1,  197,   -1,
+        -1,   -1,   -1,   -1,   -1,  198,   -1,   -1,
+        -1,   -1,  199,   -1,   -1,   -1,   -1,  200,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  201,   -1,   -1,   -1,   -1,   -1,
+        -1,  202,   -1,   -1,   -1,  203,   -1,   -1,
+        -1,   -1,   -1,  204,   -1,   -1,  205,  206,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  207,
+        -1,   -1,   -1,   -1,  208,   -1,   -1,   -1,
+        -1,   -1,  209,  210,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  211,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  212,   -1,   -1,
+        -1,   -1,  213,   -1,   -1,   -1,   -1,  214,
+        -1,  215,  216,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  217,   -1,
+        -1,   -1,   -1,   -1,   -1,  218,   -1,   -1,
+        -1,   -1,  219,   -1,   -1,   -1,   -1,   -1,
+       220,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  221,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  222,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,  223,   -1,   -1,   -1,
+        -1,   -1,  224,   -1,   -1,   -1,  225,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  226,   -1,   -1,
+        -1,   -1,   -1,  227,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  228,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  229,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  230,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       231,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  232,   -1,
+        -1,   -1,   -1,   -1,   -1,  233,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  234,
+       235,  236,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  237,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  238,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  239,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       240,   -1,   -1,  241,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,  242,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  243,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  244,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  245,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  246,
+        -1,   -1,   -1,  247,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  248,   -1,  249,   -1,   -1,
+        -1,  250,   -1,   -1,   -1,  251,   -1,   -1,
+        -1,  252,  253,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  254,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  255,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  257,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,  258,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  259,  260,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  262,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  263,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  264,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  265,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  266,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  267,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  268,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  269,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  270
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -1054,12 +772,25 @@ findValue (register const char *str, register unsigned int len)
               if (*str == *s && !strcmp (str + 1, s + 1))
                 return &wordlist_value[index];
             }
+          else if (index < -TOTAL_KEYWORDS)
+            {
+              register int offset = - 1 - TOTAL_KEYWORDS - index;
+              register const struct css_value *wordptr = &wordlist_value[TOTAL_KEYWORDS + lookup[offset]];
+              register const struct css_value *wordendptr = wordptr + -lookup[offset + 1];
+
+              while (wordptr < wordendptr)
+                {
+                  register const char *s = wordptr->name;
+
+                  if (*str == *s && !strcmp (str + 1, s + 1))
+                    return wordptr;
+                  wordptr++;
+                }
+            }
         }
     }
   return 0;
 }
-#line 282 "cssvalues.gperf"
-
 static const char * const valueList[] = {
 "",
 "inherit", 
index 9a412b17eb2423d59946ac7303060dc176ef9910..129fab735cf7304f4ae9e86f2f9b0de7622280a7 100644 (file)
@@ -816,7 +816,10 @@ void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, Bidi
     
     // The widths of all runs are now known.  We can now place every inline box (and
     // compute accurate widths for the inline flow boxes).
-    lineBox->placeBoxesHorizontally(x);
+    int leftPosition = x;
+    int rightPosition = x;
+    lineBox->placeBoxesHorizontally(x, leftPosition, rightPosition);
+    lineBox->setHorizontalOverflowPositions(leftPosition, rightPosition);
 }
 
 void RenderBlock::computeVerticalPositionsForLine(RootInlineBox* lineBox)
@@ -2351,13 +2354,14 @@ BidiIterator RenderBlock::findNextLineBreak(BidiIterator &start, BidiState &bidi
 
 void RenderBlock::checkLinesForOverflow()
 {
-    // FIXME: Work for left overflow also.
     // FIXME: Inline blocks can have overflow.  Need to understand when those objects are present on a line
     // and factor that in somehow.
     m_overflowWidth = m_width;
     for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBox()) {
-        int rightPos = curr->xPos() + curr->width();
-        m_overflowWidth = kMax(rightPos, m_overflowWidth);
+        m_overflowLeft = kMin(curr->leftOverflow(), m_overflowLeft);
+        m_overflowTop = kMin(curr->topOverflow(), m_overflowTop);
+        m_overflowWidth = kMax(curr->rightOverflow(), m_overflowWidth);
+        m_overflowHeight = kMax(curr->bottomOverflow(), m_overflowHeight);
     }
 }
 
index 1c024c000dcbab3803eef9845cf7ea0602240ffe..3cbb919deb1862e1199ddfe8c4096f9ebec7b8f8 100644 (file)
@@ -96,8 +96,8 @@ RenderBlock::RenderBlock(DOM::NodeImpl* node)
     m_clearStatus = CNONE;
     m_maxTopPosMargin = m_maxTopNegMargin = m_maxBottomPosMargin = m_maxBottomNegMargin = 0;
     m_topMarginQuirk = m_bottomMarginQuirk = false;
-    m_overflowHeight = 0;
-    m_overflowWidth = 0;
+    m_overflowHeight = m_overflowWidth = 0;
+    m_overflowLeft = m_overflowTop = 0;
 }
 
 RenderBlock::~RenderBlock()
@@ -346,6 +346,34 @@ void RenderBlock::removeChild(RenderObject *oldChild)
     }
 }
 
+int RenderBlock::overflowHeight(bool includeInterior) const
+{
+    return (!includeInterior && hasOverflowClip()) ? m_height : m_overflowHeight;
+}
+
+int RenderBlock::overflowWidth(bool includeInterior) const
+{
+    return (!includeInterior && hasOverflowClip()) ? m_width : m_overflowWidth;
+}
+int RenderBlock::overflowLeft(bool includeInterior) const
+{
+    return (!includeInterior && hasOverflowClip()) ? 0 : m_overflowLeft;
+}
+
+int RenderBlock::overflowTop(bool includeInterior) const
+{
+    return (!includeInterior && hasOverflowClip()) ? 0 : m_overflowTop;
+}
+
+QRect RenderBlock::overflowRect(bool includeInterior) const
+{
+    if (!includeInterior && hasOverflowClip())
+        return borderBox();
+    int l = overflowLeft(includeInterior);
+    int t = kMin(overflowTop(includeInterior), -borderTopExtra());
+    return QRect(l, t, m_overflowWidth - 2*l, m_overflowHeight + borderTopExtra() + borderBottomExtra() - 2*t);
+}
+
 bool RenderBlock::isSelfCollapsingBlock() const
 {
     // We are not self-collapsing if we
@@ -508,11 +536,9 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     layoutPositionedObjects( relayoutChildren );
 
     // Always ensure our overflow width/height are at least as large as our width/height.
-    if (m_overflowWidth < m_width)
-        m_overflowWidth = m_width;
-    if (m_overflowHeight < m_height)
-        m_overflowHeight = m_height;
-    
+    m_overflowWidth = kMax(m_overflowWidth, m_width);
+    m_overflowHeight = kMax(m_overflowHeight, m_height);
+
     // Update our scroll information if we're overflow:auto/scroll/hidden now that we know if
     // we overflow or not.
     if (hasOverflowClip())
@@ -1052,6 +1078,9 @@ void RenderBlock::layoutBlockChildren(bool relayoutChildren)
         // Now place the child in the correct horizontal position
         determineHorizontalPosition(child);
 
+        // Update our top overflow in case the child spills out the top of the block.
+        m_overflowTop = kMin(m_overflowTop, child->yPos() - child->overflowTop(false));
+        
         // Update our height now that the child has been placed in the correct position.
         m_height += child->height();
         if (child->style()->marginBottomCollapse() == MSEPARATE) {
@@ -1068,11 +1097,10 @@ void RenderBlock::layoutBlockChildren(bool relayoutChildren)
             addOverHangingFloats(static_cast<RenderBlock *>(child), -child->xPos(), -child->yPos(), true);
 
         // See if this child has made our overflow need to grow.
-        // FIXME: Work with left overflow as well as right overflow.
         int rightChildPos = child->xPos() + kMax(child->overflowWidth(false), child->width());
-        if (rightChildPos > m_overflowWidth)
-            m_overflowWidth = rightChildPos;
-
+        m_overflowWidth = kMax(rightChildPos, m_overflowWidth);
+        m_overflowLeft = kMin(child->xPos() - child->overflowLeft(false), m_overflowLeft);
+        
         // Insert our compact into the block margin if we have one.
         insertCompactIfNeeded(child, compactInfo);
 
@@ -1179,24 +1207,21 @@ void RenderBlock::paint(PaintInfo& i, int _tx, int _ty)
     _ty += m_y;
 
     // Check if we need to do anything at all.
-    // FIXME: This check is limited to only the y-coordinates when it could check x as well.
-    // Compacts keep us from being strict about x-direction at the moment.
     if (!isInlineFlow() && !isRoot()) {
-        int h = m_overflowHeight;
-        int yPos = _ty;
-        if (m_floatingObjects && floatBottom() > h)
-            h = floatBottom();
-
-        // FIXME: This is a pretty feeble check that doesn't really work in practice, since top overflow
-        // is not propagated. Sanity check the first line
-        // to see if it extended a little above our box. Overflow out the bottom is already handled via
-        // overflowHeight(), so we don't need to check that.
-        if (m_firstLineBox && m_firstLineBox->topOverflow() < 0)
-            yPos += m_firstLineBox->topOverflow();
-        
-        int os = 2*maximalOutlineSize(i.phase);
-        if( (yPos >= i.r.y() + i.r.height() + os) || (_ty + h <= i.r.y() - os))
-            return;
+        QRect overflowBox = overflowRect(false);
+        overflowBox.inflate(maximalOutlineSize(i.phase));
+        overflowBox.setX(overflowBox.x() + _tx);
+        overflowBox.setY(overflowBox.y() + _ty);
+        bool intersectsOverflowBox = overflowBox.intersects(i.r);
+        if (!intersectsOverflowBox) {
+            // Check floats next.
+            QRect floatBox = floatRect();
+            floatBox.inflate(maximalOutlineSize(i.phase));
+            floatBox.setX(overflowBox.x() + _tx);
+            floatBox.setY(overflowBox.y() + _ty);
+            if (!floatBox.intersects(i.r))
+                return;
+        }
     }
 
     return paintObject(i, _tx, _ty);
@@ -1992,6 +2017,42 @@ RenderBlock::floatBottom() const
     return bottom;
 }
 
+QRect RenderBlock::floatRect() const
+{
+    QRect result(borderBox());
+    if (!m_floatingObjects)
+        return result;
+    FloatingObject* r;
+    QPtrListIterator<FloatingObject> it(*m_floatingObjects);
+    for (; (r = it.current()); ++it) {
+        if (!r->noPaint && !r->node->layer()) {
+            // Check this float.
+            int bottomDelta = kMax(0, r->startY + r->node->marginTop() + r->node->overflowHeight(false) -
+                                      (result.y() + result.height()));
+            if (bottomDelta)
+                result.setHeight(result.height() + bottomDelta);
+            int rightDelta = kMax(0, r->left + r->node->marginLeft() + r->node->overflowWidth(false) -
+                                     (result.x() + result.width()));
+            if (rightDelta)
+                result.setWidth(result.width() + rightDelta);
+            
+            // Now check left and top
+            int topDelta = kMin(0, r->startY + r->node->marginTop() - result.y());
+            if (topDelta < 0) {
+                result.setY(result.y() + topDelta);
+                result.setHeight(result.height() - 2*topDelta);
+            }
+            int leftDelta = kMin(0, r->left + r->node->marginLeft() - result.x());
+            if (topDelta < 0) {
+                result.setX(result.x() + leftDelta);
+                result.setHeight(result.width() - 2*leftDelta);
+            }
+        }
+    }
+
+    return result;
+}
+
 int
 RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf) const
 {
@@ -2018,9 +2079,7 @@ RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf) cons
         RenderObject* r;
         QPtrListIterator<RenderObject> it(*m_positionedObjects);
         for ( ; (r = it.current()); ++it ) {
-            // Use the layer's position, since it has been corrected for crazy relpositioned inline
-            // edge cases.
-            int lp = r->layer()->yPos() + r->lowestPosition(false);
+            int lp = r->yPos() + r->lowestPosition(false);
             bottom = kMax(bottom, lp);
         }
     }
@@ -2056,9 +2115,7 @@ int RenderBlock::rightmostPosition(bool includeOverflowInterior, bool includeSel
         RenderObject* r;
         QPtrListIterator<RenderObject> it(*m_positionedObjects);
         for ( ; (r = it.current()); ++it ) {
-            // Use the layer's position, since it has been corrected for crazy relpositioned inline
-            // edge cases.
-            int rp = r->layer()->xPos() + r->rightmostPosition(false);
+            int rp = r->xPos() + r->rightmostPosition(false);
             right = kMax(right, rp);
         }
     }
@@ -2096,9 +2153,7 @@ int RenderBlock::leftmostPosition(bool includeOverflowInterior, bool includeSelf
         RenderObject* r;
         QPtrListIterator<RenderObject> it(*m_positionedObjects);
         for ( ; (r = it.current()); ++it ) {
-            // Use the layer's position, since it has been corrected for crazy relpositioned inline
-            // edge cases.
-            int lp = r->layer()->xPos() + r->leftmostPosition(false);
+            int lp = r->xPos() + r->leftmostPosition(false);
             left = kMin(left, lp);
         }
     }
@@ -2338,23 +2393,23 @@ bool RenderBlock::nodeAtPoint(NodeInfo& info, int _x, int _y, int _tx, int _ty,
     bool inlineFlow = isInlineFlow();
 
     int tx = _tx + m_x;
-    int ty = _ty + m_y;
-
+    int ty = _ty + m_y + borderTopExtra();
+    
     if (!inlineFlow && !isRoot()) {
-        // Check if we need to do anything at all with this block.
-        // FIXME: This check is limited to only the y-coordinates when it could check x as well.
-        // Compacts keep us from being strict about x-coordinates at the moment.
-        int h = m_overflowHeight;
-        if (m_floatingObjects && floatBottom() > h)
-            h = floatBottom();
-        if (isTableCell())
-            h = kMax(height() + borderTopExtra() + borderBottomExtra(), h);
-        if ((ty > _y) || (ty + h <= _y))
-            return false;
+        // Check if we need to do anything at all.
+        QRect overflowBox = overflowRect(false);
+        overflowBox.setX(overflowBox.x() + tx);
+        overflowBox.setY(overflowBox.y() + ty);
+        bool insideOverflowBox = overflowBox.contains(_x, _y);
+        if (!insideOverflowBox) {
+            // Check floats next.
+            QRect floatBox = floatRect();
+            floatBox.setX(overflowBox.x() + tx);
+            floatBox.setY(overflowBox.y() + ty);
+            if (!floatBox.contains(_x, _y))
+                return false;
+        }
     }
-    
-    if (isTableCell())
-        ty += borderTopExtra();
 
     // See if we're inside the scrollbar (if we're overflow:scroll/auto).
     if (isPointInScrollbar(_x, _y, tx, ty)) {
index 3394758d856e55efb2655b373b6e19963aacb7c3..54a274f5e7df31119f155df081c107b352fcae26 100644 (file)
@@ -59,13 +59,14 @@ public:
     // The height (and width) of a block when you include overflow spillage out of the bottom
     // of the block (e.g., a <div style="height:25px"> that has a 100px tall image inside
     // it would have an overflow height of borderTop() + paddingTop() + 100px.
-    virtual int overflowHeight(bool includeInterior=true) const
-    { return (!includeInterior && hasOverflowClip()) ? m_height : m_overflowHeight; }
-    virtual int overflowWidth(bool includeInterior=true) const
-    { return (!includeInterior && hasOverflowClip()) ? m_width : m_overflowWidth; }
+    virtual int overflowHeight(bool includeInterior=true) const;
+    virtual int overflowWidth(bool includeInterior=true) const;
+    virtual int overflowLeft(bool includeInterior=true) const;
+    virtual int overflowTop(bool includeInterior=true) const;
+    virtual QRect overflowRect(bool includeInterior=true) const;
     virtual void setOverflowHeight(int h) { m_overflowHeight = h; }
     virtual void setOverflowWidth(int w) { m_overflowWidth = w; }
-
+    
     virtual bool isSelfCollapsingBlock() const;
     virtual bool isTopMarginQuirk() const { return m_topMarginQuirk; }
     virtual bool isBottomMarginQuirk() const { return m_bottomMarginQuirk; }
@@ -159,6 +160,7 @@ public:
     int floatBottom() const;
     inline int leftBottom();
     inline int rightBottom();
+    virtual QRect floatRect() const;
 
     virtual int lineWidth(int y) const;
     virtual int lowestPosition(bool includeOverflowInterior=true, bool includeSelf=true) const;
@@ -415,6 +417,11 @@ protected:
     // XXX Generalize to work with top and left as well.
     int m_overflowHeight;
     int m_overflowWidth;
+    
+    // Left and top overflow.  Does not affect scrolling dimensions, but we do at least use it
+    // when dirty rect checking and hit testing.
+    int m_overflowLeft;
+    int m_overflowTop;
 };
 
 }; // namespace
index 200761f4db207c86d93db1f97281e99874d5396b..d3b4382ca2d7fa5b8e6f850d3fa46efd88779b4b 100644 (file)
@@ -81,6 +81,8 @@ public:
     virtual void setWidth( int width ) { m_width = width; }
     virtual void setHeight( int height ) { m_height = height; }
 
+    virtual QRect borderBox() const { return QRect(0, -borderTopExtra(), width(), height() + borderTopExtra() + borderBottomExtra()); }
+
     // This method is now public so that centered objects like tables that are
     // shifted right by left-aligned floats can recompute their left and
     // right margins (so that they can remain centered after being 
@@ -150,8 +152,8 @@ protected:
     void paintBackground(QPainter *p, const QColor& c, const BackgroundLayer* bgLayer, int clipy, int cliph, int _tx, int _ty, int w, int h);
     void outlineBox(QPainter *p, int _tx, int _ty, const char *color = "red");
 
-    virtual int borderTopExtra() { return 0; }
-    virtual int borderBottomExtra() { return 0; }
+    virtual int borderTopExtra() const { return 0; }
+    virtual int borderBottomExtra() const { return 0; }
 
     void calcAbsoluteHorizontal();
     void calcAbsoluteVertical();
index e2a7dfd3c0a49d5f56ef8dd63e2dbe52be7aa774..78db93fee758e3e16eb28909592d1a32b163fc65 100644 (file)
@@ -722,6 +722,18 @@ RenderLayer::updateScrollInfoAfterLayout()
 void
 RenderLayer::paintScrollbars(QPainter* p, const QRect& damageRect)
 {
+    // Move the widgets if necessary.  We normally move and resize widgets during layout, but sometimes
+    // widgets can move without layout occurring (most notably when you scroll a document that
+    // contains fixed positioned elements).
+    if (m_hBar || m_vBar) {
+        int x = 0;
+        int y = 0;
+        convertToLayerCoords(root(), x, y);
+        QRect layerBounds = QRect(x, y, width(), height());
+        positionScrollbars(layerBounds);
+    }
+
+    // Now that we're sure the scrollbars are in the right place, paint them.
     if (m_hBar)
         m_hBar->paint(p, damageRect);
     if (m_vBar)
@@ -1074,20 +1086,30 @@ void RenderLayer::calculateRects(const RenderLayer* rootLayer, const QRect& pain
     }
 }
 
+static bool mustExamineRenderer(RenderObject* renderer)
+{
+    if (renderer->isCanvas() || renderer->isRoot() || renderer->isInlineFlow())
+        return true;
+    
+    QRect bbox = renderer->borderBox();
+    QRect overflowRect = renderer->overflowRect(false);
+    if (bbox != overflowRect)
+        return true;
+    QRect floatRect = renderer->floatRect();
+    if (bbox != floatRect)
+        return true;
+
+    return false;
+}
+
 bool RenderLayer::intersectsDamageRect(const QRect& layerBounds, const QRect& damageRect) const
 {
-    return (renderer()->isCanvas() || renderer()->isRoot() || renderer()->isBody() ||
-            (renderer()->hasOverhangingFloats() && !renderer()->hasOverflowClip()) ||
-            (renderer()->isInline() && !renderer()->isReplaced()) ||
-            layerBounds.intersects(damageRect));
+    return mustExamineRenderer(renderer()) || layerBounds.intersects(damageRect);
 }
 
 bool RenderLayer::containsPoint(int x, int y, const QRect& damageRect) const
 {
-    return (renderer()->isCanvas() || renderer()->isRoot() || renderer()->isBody() ||
-            (renderer()->hasOverhangingFloats() && !renderer()->hasOverflowClip()) ||
-            (renderer()->isInline() && !renderer()->isReplaced()) ||
-            damageRect.contains(x, y));
+    return mustExamineRenderer(renderer()) || damageRect.contains(x, y);
 }
 
 // This code has been written to anticipate the addition of CSS3-::outside and ::inside generated
index bd75409d51109683a4c1607c0afbdde981cab8fc..02044dd789fab1f5b0dfc38ce502b7e06297be45 100644 (file)
@@ -469,10 +469,11 @@ void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, RenderObject* en
     }
 }
 
-int InlineFlowBox::placeBoxesHorizontally(int x)
+int InlineFlowBox::placeBoxesHorizontally(int x, int& leftPosition, int& rightPosition)
 {
     // Set our x position.
     setXPos(x);
+    leftPosition = kMin(x, leftPosition);
 
     int startX = x;
     x += borderLeft() + paddingLeft();
@@ -481,6 +482,8 @@ int InlineFlowBox::placeBoxesHorizontally(int x)
         if (curr->object()->isText()) {
             InlineTextBox* text = static_cast<InlineTextBox*>(curr);
             text->setXPos(x);
+            leftPosition = kMin(x, leftPosition);
+            rightPosition = kMax(x + text->width(), rightPosition);
             x += text->width();
         }
         else {
@@ -498,17 +501,19 @@ int InlineFlowBox::placeBoxesHorizontally(int x)
                 InlineFlowBox* flow = static_cast<InlineFlowBox*>(curr);
                 if (curr->object()->isCompact()) {
                     int ignoredX = x;
-                    flow->placeBoxesHorizontally(ignoredX);
+                    flow->placeBoxesHorizontally(ignoredX, leftPosition, rightPosition);
                 }
                 else {
                     x += flow->marginLeft();
-                    x = flow->placeBoxesHorizontally(x);
+                    x = flow->placeBoxesHorizontally(x, leftPosition, rightPosition);
                     x += flow->marginRight();
                 }
             }
             else if (!curr->object()->isCompact()) {
                 x += curr->object()->marginLeft();
                 curr->setXPos(x);
+                leftPosition = kMin(x, leftPosition);
+                rightPosition = kMax(x + curr->width(), rightPosition);
                 x += curr->width() + curr->object()->marginRight();
             }
         }
@@ -516,6 +521,8 @@ int InlineFlowBox::placeBoxesHorizontally(int x)
 
     x += borderRight() + paddingRight();
     setWidth(x-startX);
+    rightPosition = kMax(xPos() + width(), rightPosition);
+
     return x;
 }
 
@@ -543,7 +550,7 @@ void InlineFlowBox::verticallyAlignBoxes(int& heightOfBlock)
     int bottomPosition = heightOfBlock;
     placeBoxesVertically(heightOfBlock, maxHeight, maxAscent, strictMode, topPosition, bottomPosition);
 
-    setOverflowPositions(topPosition, bottomPosition);
+    setVerticalOverflowPositions(topPosition, bottomPosition);
 
     // Shrink boxes with no text children in quirks and almost strict mode.
     if (!strictMode)
index 9611e7d475ae893fdc1b43366eb41c1a5a077090..093884505c7d9a8b1d1373afb8ed7a1db06a8717 100644 (file)
@@ -134,6 +134,8 @@ public:
 
     virtual int topOverflow() { return yPos(); }
     virtual int bottomOverflow() { return yPos()+height(); }
+    virtual int leftOverflow() { return xPos(); }
+    virtual int rightOverflow() { return xPos()+width(); }
 
     virtual long caretMinOffset() const;
     virtual long caretMaxOffset() const;
@@ -267,7 +269,7 @@ public:
     void determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject);
     int getFlowSpacingWidth();
     bool onEndChain(RenderObject* endObject);
-    int placeBoxesHorizontally(int x);
+    int placeBoxesHorizontally(int x, int& leftPosition, int& rightPosition);
     void verticallyAlignBoxes(int& heightOfBlock);
     void computeLogicalBoxHeights(int& maxPositionTop, int& maxPositionBottom,
                                   int& maxAscent, int& maxDescent, bool strictMode);
@@ -277,8 +279,8 @@ public:
                               int& topPosition, int& bottomPosition);
     void shrinkBoxesWithNoTextChildren(int topPosition, int bottomPosition);
     
-    virtual void setOverflowPositions(int top, int bottom) {}
-    
+    virtual void setVerticalOverflowPositions(int top, int bottom) {}
+
     void removeChild(InlineBox* child);
     
     virtual RenderObject::SelectionState selectionState();
@@ -298,7 +300,8 @@ class RootInlineBox : public InlineFlowBox
 {
 public:
     RootInlineBox(RenderObject* obj)
-    : InlineFlowBox(obj), m_topOverflow(0), m_bottomOverflow(0), m_lineBreakObj(0), m_lineBreakPos(0), 
+    : InlineFlowBox(obj), m_topOverflow(0), m_bottomOverflow(0), m_leftOverflow(0), m_rightOverflow(0),
+      m_lineBreakObj(0), m_lineBreakPos(0), 
       m_blockHeight(0), m_endsWithBreak(false), m_hasSelectedChildren(false), m_ellipsisBox(0)
     {}
     
@@ -313,8 +316,10 @@ public:
     virtual bool isRootInlineBox() { return true; }
     virtual int topOverflow() { return m_topOverflow; }
     virtual int bottomOverflow() { return m_bottomOverflow; }
-    virtual void setOverflowPositions(int top, int bottom) { m_topOverflow = top; m_bottomOverflow = bottom; }
-
+    virtual int leftOverflow() { return m_leftOverflow; }
+    virtual int rightOverflow() { return m_rightOverflow; }
+    virtual void setVerticalOverflowPositions(int top, int bottom) { m_topOverflow = top; m_bottomOverflow = bottom; }
+    void setHorizontalOverflowPositions(int left, int right) { m_leftOverflow = left; m_rightOverflow = right; }
     void setLineBreakInfo(RenderObject* obj, uint breakPos)
     { m_lineBreakObj = obj; m_lineBreakPos = breakPos; }
     void setLineBreakPos(int p) { m_lineBreakPos = p; }
@@ -364,6 +369,8 @@ protected:
     // below our line (e.g., a child whose font has a huge descent).
     int m_topOverflow;
     int m_bottomOverflow;
+    int m_leftOverflow;
+    int m_rightOverflow;
 
     // Where this line ended.  The exact object and the position within that object are stored so that
     // we can create a BidiIterator beginning just after the end of this line.
index cb5da8888ef535f34b89ccf3aa88ed04c488829d..2971817d0d0aa189c2ed1687400b2a2c9e3998e2 100644 (file)
@@ -568,6 +568,8 @@ public:
     virtual int width() const { return 0; }
     virtual int height() const { return 0; }
 
+    virtual QRect borderBox() const { return QRect(0, 0, width(), height()); }
+
     // The height of a block when you include normal flow overflow spillage out of the bottom
     // of the block (e.g., a <div style="height:25px"> that has a 100px tall image inside
     // it would have an overflow height of borderTop() + paddingTop() + 100px.
@@ -575,6 +577,9 @@ public:
     virtual int overflowWidth(bool includeInterior=true) const { return width(); }
     virtual void setOverflowHeight(int) {}
     virtual void setOverflowWidth(int) {}
+    virtual int overflowLeft(bool includeInterior=true) const { return 0; }
+    virtual int overflowTop(bool includeInterior=true) const { return 0; }
+    virtual QRect overflowRect(bool includeInterior=true) const { return borderBox(); }
 
     // IE extensions. Used to calculate offsetWidth/Height.  Overridden by inlines (render_flow) 
     // to return the remaining width on a given line (and the height of a single line). -dwh
@@ -723,6 +728,7 @@ public:
     virtual bool containsFloats() { return false; }
     virtual bool containsFloat(RenderObject* o) { return false; }
     virtual bool hasOverhangingFloats() { return false; }
+    virtual QRect floatRect() { return borderBox(); }
 
     bool avoidsFloats() const;
     bool usesLineWidth() const;
index 3d7869c9b0d6494137f80bfa090206435913caf4..67546f4a5d46b3ebe92fc5a1f8d77506c024c951 100644 (file)
@@ -348,6 +348,7 @@ void RenderTable::layout()
         repaintAfterLayoutIfNeeded(oldBounds, oldFullBounds);
     
     m_overflowHeight = kMax(m_overflowHeight, m_height);
+    m_overflowWidth = kMax(m_overflowWidth, m_width);
 
     setNeedsLayout(false);
 }
@@ -368,9 +369,6 @@ void RenderTable::setCellWidths()
 
 void RenderTable::paint(PaintInfo& i, int _tx, int _ty)
 {
-    if (needsLayout())
-        return;
-        
     _tx += xPos();
     _ty += yPos();
 
@@ -429,9 +427,16 @@ void RenderTable::paint(PaintInfo& i, int _tx, int _ty)
 void RenderTable::paintBoxDecorations(PaintInfo& i, int _tx, int _ty)
 {
     int w = width();
-    int h = height() + borderTopExtra() + borderBottomExtra();
-    _ty -= borderTopExtra();
+    int h = height();
     
+    // Account for the caption.
+    if (tCaption) {
+        int captionHeight = (tCaption->height() + tCaption->marginBottom() +  tCaption->marginTop());
+        h -= captionHeight;
+        if (tCaption->style()->captionSide() != CAPBOTTOM)
+            _ty += captionHeight;
+    }
+
     int my = kMax(_ty, i.r.y());
     int mh;
     if (_ty < i.r.y())
@@ -467,24 +472,6 @@ void RenderTable::calcMinMaxWidth()
 #endif
 }
 
-int RenderTable::borderTopExtra()
-{
-    if (tCaption && tCaption->style()->captionSide()!=CAPBOTTOM)
-        return -(tCaption->height() + tCaption->marginBottom() +  tCaption->marginTop());
-    else
-        return 0;
-
-}
-
-int RenderTable::borderBottomExtra()
-{
-    if (tCaption && tCaption->style()->captionSide()==CAPBOTTOM)
-        return -(tCaption->height() + tCaption->marginBottom() +  tCaption->marginTop());
-    else
-        return 0;
-}
-
-
 void RenderTable::splitColumn( int pos, int firstSpan )
 {
     // we need to add a new columnStruct
index 53c343383e448d07567d20fa92efd3cf0e135dab..1a5798cb358568c127f6e83f772dfb478a39ac9d 100644 (file)
@@ -112,9 +112,6 @@ public:
 
     virtual void calcWidth();
 
-    virtual int borderTopExtra();
-    virtual int borderBottomExtra();
-
 #ifndef NDEBUG
     virtual void dump(QTextStream *stream, QString ind = "") const;
 #endif
@@ -372,8 +369,8 @@ public:
 
     virtual short baselinePosition( bool = false ) const;
 
-    virtual int borderTopExtra() { return _topExtra; }
-    virtual int borderBottomExtra() { return _bottomExtra; }
+    virtual int borderTopExtra() const { return _topExtra; }
+    virtual int borderBottomExtra() const { return _bottomExtra; }
 
     RenderTable *table() const { return static_cast<RenderTable *>(parent()->parent()->parent()); }
     RenderTableSection *section() const { return static_cast<RenderTableSection *>(parent()->parent()); }
index 80f92b168916768e2e67e41b926dff41e6bbe422..494e73216b3b61078f4e2cdfe2eff9a61a034a85 100644 (file)
@@ -69,6 +69,8 @@ public:
         return x >= xp && x < (xp + w) && y >= yp && y < (yp + h);
     }
     
+    void inflate(int s);
+
     inline QRect operator&(const QRect &r) const { return intersect(r); }
 
     operator NSRect() const;
index dca4d53a9e195c473fe53350b7573e2b545c1a8e..1380e3dd483b05b75575d8280f30a7f061cd159e 100644 (file)
@@ -141,6 +141,14 @@ QRect QRect::intersect(const QRect &r) const
     return QRect(nx, ny, nw, nh);
 }
 
+void QRect::inflate(int s)
+{
+    xp -= s;
+    yp -= s;
+    w += 2*s;
+    h += 2*s;
+}
+
 QRect::operator NSRect() const
 {
     return NSMakeRect(xp, yp, w, h);