Code

sync with current 2geom, split_at_discontinuities method and SVGEllipticalArc
authorjohanengelen <johanengelen@users.sourceforge.net>
Sun, 13 Apr 2008 20:19:07 +0000 (20:19 +0000)
committerjohanengelen <johanengelen@users.sourceforge.net>
Sun, 13 Apr 2008 20:19:07 +0000 (20:19 +0000)
src/2geom/path.cpp
src/2geom/path.h
src/2geom/svg-path-parser.cpp

index 3d8d5ead3cafd63bfd00732abb85b6f5c882c220..a529c37512b7241f2daf049f0324eb0f3d3dfb33 100644 (file)
@@ -221,29 +221,7 @@ void Path::check_continuity(Sequence::iterator first_replaced,
   }
 }
 
-Rect SVGEllipticalArc::boundsFast() const {
-    throwNotImplemented();
-}
-Rect SVGEllipticalArc::boundsExact() const {
-    throwNotImplemented();
-}
-Rect SVGEllipticalArc::boundsLocal(Interval i, unsigned deg) const {
-    throwNotImplemented();
-}
-
-std::vector<Point> SVGEllipticalArc::pointAndDerivatives(Coord t, unsigned n) const {
-    throwNotImplemented();
-}
-
-std::vector<double> SVGEllipticalArc::roots(double v, Dim2 d) const {
-    throwNotImplemented();
-}
-
-D2<SBasis> SVGEllipticalArc::toSBasis() const {
-    return D2<SBasis>(Linear(initial_[X], final_[X]), Linear(initial_[Y], final_[Y]));
-}
-
-}
+} // end namespace Geom
 
 /*
   Local Variables:
index f314e6efaba722ea8f06b50bf28d736c42cb08e0..fee96a86a456cd4b3670e22028152408defb51cc 100644 (file)
@@ -1,7 +1,11 @@
 /*
  * Path - Series of continuous curves
  *
- * Copyright 2007  MenTaLguY <mental@rydia.net>
+ * Authors:
+ *             MenTaLguY <mental@rydia.net>
+ *             Marco Cecchetti <mrcekets at gmail.com>
+ * 
+ * Copyright 2007-2008  authors
  *
  * This library is free software; you can redistribute it and/or
  * modify it either under the terms of the GNU Lesser General Public
@@ -31,6 +35,7 @@
 #define SEEN_GEOM_PATH_H
 
 #include "point.h"
+#include "angle.h"
 #include <iterator>
 #include <algorithm>
 #include "exception.h"
@@ -264,84 +269,222 @@ typedef BezierCurve<1> LineSegment;
 typedef BezierCurve<2> QuadraticBezier;
 typedef BezierCurve<3> CubicBezier;
 
-class SVGEllipticalArc : public Curve {
-public:
-  SVGEllipticalArc() {}
 
-  SVGEllipticalArc(Point initial, double rx, double ry,
-                   double x_axis_rotation, bool large_arc,
-                   bool sweep, Point final)
-  : initial_(initial), rx_(rx), ry_(ry), x_axis_rotation_(x_axis_rotation),
-    large_arc_(large_arc), sweep_(sweep), final_(final)
-  {}
 
-  Curve *duplicate() const { return new SVGEllipticalArc(*this); }
 
-  Point initialPoint() const { return initial_; }
-  Point finalPoint() const { return final_; }
+class SVGEllipticalArc : public Curve
+{
+  public:
+       SVGEllipticalArc()
+       {}
+       
+    SVGEllipticalArc( Point _initial_point, double _rx, double _ry,
+                      double _rot_angle, bool _large_arc, bool _sweep,
+                      Point _final_point
+                    )
+        : m_initial_point(_initial_point), m_final_point(_final_point),
+          m_rx(_rx), m_ry(_ry), m_rot_angle(_rot_angle),
+          m_large_arc(_large_arc), m_sweep(_sweep)
+    {
+        //assert( (ray(X) >= 0) && (ray(Y) >= 0) );
+        if ( are_near(initialPoint(), finalPoint()) )
+        {
+            m_start_angle = m_end_angle = 0;
+            m_center = initialPoint();
+        }
+        else
+        {
+            calculate_center_and_extreme_angles();
+        }
+    }
+         
+       Curve* duplicate() const
+       {
+               return new SVGEllipticalArc(*this);
+       }
+       
+    double center(Dim2 i) const
+    {
+        return m_center[i];
+    }
 
-  void setInitial(Point v) { initial_ = v; }
-  void setFinal(Point v) { final_ = v; }
+    Point center() const
+    {
+        return m_center;
+    }
 
-  //TODO: implement funcs
+    Point initialPoint() const
+    {
+        return m_initial_point;
+    }
 
-  bool isDegenerate() const { return toSBasis().isConstant(); }
-  Rect boundsFast() const;
-  Rect boundsExact() const;
-  Rect boundsLocal(Interval i, unsigned deg) const;
+    Point finalPoint() const
+    {
+        return m_final_point;
+    }
 
-  int winding(Point p) const {
-    return SBasisCurve(toSBasis()).winding(p);
-  }
+    double start_angle() const
+    {
+        return m_start_angle;
+    }
 
-  std::vector<double> roots(double v, Dim2 d) const;
+    double end_angle() const
+    {
+        return m_end_angle;
+    }
 
-  inline std::pair<SVGEllipticalArc, SVGEllipticalArc>
-  subdivide(Coord t) {
-    SVGEllipticalArc a(*this), b(*this);
-    a.final_ = b.initial_ = pointAt(t);
-    return std::pair<SVGEllipticalArc, SVGEllipticalArc>(a, b);
-  }
+    double ray(Dim2 i) const
+    {
+        return (i == 0) ? m_rx : m_ry;
+    }
 
-// TODO: how are the flags affected by reducing an arc from more than 180deg to less than 180deg?
-  Curve *portion(double f, double t) const {
-    SVGEllipticalArc *ret = new SVGEllipticalArc (*this);
-    ret->initial_ = pointAt(f);
-    ret->final_ = pointAt(t);
-    return ret;
-  }
+    bool large_arc_flag() const
+    {
+        return m_large_arc;
+    }
 
-// TODO: incomplete/buggy
-  Curve *reverse(double /*f*/, double /*t*/) const {
-    SVGEllipticalArc *ret = new SVGEllipticalArc (*this);
-    ret->initial_ = final_;
-    ret->final_ = initial_;
-    return ret;
-  }
+    bool sweep_flag() const
+    {
+        return m_sweep;
+    }
 
-  //TODO: this next def isn't right
-  Curve *transformed(Matrix const & m) const {
-    SVGEllipticalArc *ret = new SVGEllipticalArc (*this);
-    ret->initial_ = initial_ * m;
-    ret->final_ = final_ * m;
-    return ret;
-  }
+    double rotation_angle() const
+    {
+        return m_rot_angle;
+    }
 
-  Curve *derivative() const { throwNotImplemented(); }
+    void setInitial( const Point _point)
+    {
+        m_initial_point = _point;
+        calculate_center_and_extreme_angles();
+    }
+
+    void setFinal( const Point _point)
+    {
+        m_final_point = _point;
+        calculate_center_and_extreme_angles();
+    }
+
+    void setExtremes( const Point& _initial_point, const Point& _final_point )
+    {
+        m_initial_point = _initial_point;
+        m_final_point = _final_point;
+        calculate_center_and_extreme_angles();
+    }
+
+    bool isDegenerate() const
+    {
+        return are_near(initialPoint(), finalPoint());
+    }
+    
+    // TODO: native implementation of the following methods
+    Rect boundsFast() const
+    {
+       return SBasisCurve(toSBasis()).boundsFast();
+    }
+  
+    Rect boundsExact() const
+    {
+       return SBasisCurve(toSBasis()).boundsExact();
+    }
+    
+    Rect boundsLocal(Interval i, unsigned int deg) const
+    {
+       return SBasisCurve(toSBasis()).boundsLocal(i, deg);
+    }
+    
+    std::vector<double> roots(double v, Dim2 d) const
+    {
+       return SBasisCurve(toSBasis()).roots(v, d);
+    }
+    
+    int winding(Point p) const
+    {
+       return SBasisCurve(toSBasis()).winding(p);
+    }
+    
+    Curve *derivative() const
+    {
+       return SBasisCurve(toSBasis()).derivative();
+    }
+    
+    Curve *transformed(Matrix const &m) const
+    {
+       return SBasisCurve(toSBasis()).transformed(m);
+    }
+    
+    std::vector<Point> pointAndDerivatives(Coord t, unsigned n) const
+    {
+       return SBasisCurve(toSBasis()).pointAndDerivatives(t, n);
+    }
+    
+    D2<SBasis> toSBasis() const;
+    
+    double valueAt(Coord t, Dim2 d) const;
+
+    Point pointAt(Coord t) const
+    {
+        Coord tt = from_01_to_02PI(t);
+        double sin_rot_angle = std::sin(rotation_angle());
+        double cos_rot_angle = std::cos(rotation_angle());
+        Matrix m( ray(X) * cos_rot_angle, ray(X) * sin_rot_angle,
+                 -ray(Y) * sin_rot_angle, ray(Y) * cos_rot_angle,
+                  center(X),              center(Y) );
+        Point p( std::cos(tt), std::sin(tt) );
+        return p * m;
+    }
+
+    std::pair<SVGEllipticalArc, SVGEllipticalArc>
+    subdivide(Coord t) const
+    {
+        SVGEllipticalArc* arc1 = static_cast<SVGEllipticalArc*>(portion(0, t));
+        SVGEllipticalArc* arc2 = static_cast<SVGEllipticalArc*>(portion(t, 1));
+        assert( arc1 != NULL && arc2 != NULL);
+        std::pair<SVGEllipticalArc, SVGEllipticalArc> arc_pair(*arc1, *arc2);        
+        delete arc1;
+        delete arc2;
+        return arc_pair;
+    }
+
+    Curve* portion(double f, double t) const;
+    
+    // the arc is the same but traversed in the opposite direction
+    Curve* reverse() const
+    {
+        SVGEllipticalArc* rarc = new SVGEllipticalArc( *this );
+        rarc->m_sweep = !m_sweep;
+        rarc->m_initial_point = m_final_point;
+        rarc->m_final_point = m_initial_point;
+        rarc->m_start_angle = m_end_angle;
+        rarc->m_end_angle = m_start_angle;
+        return rarc;
+    }
+
+  private:
+    double sweep_angle() const
+    {
+        Coord d = end_angle() - start_angle();
+        if ( !sweep_flag() ) d = -d;
+        if ( d < 0 )
+            d += 2*M_PI;
+        return d;
+    }
+
+    Coord from_01_to_02PI(Coord t) const;
+
+    void calculate_center_and_extreme_angles();
+    
+  private:
+    Point m_initial_point, m_final_point;
+    double m_rx, m_ry, m_rot_angle;
+    bool m_large_arc, m_sweep;
+    double m_start_angle, m_end_angle;
+    Point m_center;
+    
+}; // end class SVGEllipticalArc
 
-  std::vector<Point> pointAndDerivatives(Coord t, unsigned n) const;
 
-  D2<SBasis> toSBasis() const;
 
-private:
-  Point initial_;
-  double rx_;
-  double ry_;
-  double x_axis_rotation_;
-  bool large_arc_;
-  bool sweep_;
-  Point final_;
-};
 
 template <typename IteratorImpl>
 class BaseIterator
index ba0fbe7da0adedfb47bde1ee6bf60726174c0c55..fbe017c8ae2bddb04bb8ab2e7b79a52c2bc3d7af 100644 (file)
@@ -1,4 +1,4 @@
-#line 1 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 1 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
 /*
  * parse SVG path specifications
  *
@@ -129,7 +129,7 @@ private:
 };
 
 
-#line 133 "/home/mental/trees/lib2geom/src/svg-path-parser.cpp"
+#line 133 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.cpp"
 static const char _svg_path_actions[] = {
        0, 1, 0, 1, 1, 1, 2, 1, 
        3, 1, 4, 1, 5, 1, 15, 1, 
@@ -152,7 +152,7 @@ static const char _svg_path_actions[] = {
 };
 
 static const short _svg_path_key_offsets[] = {
-       0, 7, 7, 16, 25, 28, 30, 42, 
+       0, 0, 7, 16, 25, 28, 30, 42, 
        52, 55, 57, 90, 121, 124, 126, 138, 
        148, 151, 153, 186, 195, 207, 216, 249, 
        256, 263, 265, 275, 283, 290, 292, 304, 
@@ -626,7 +626,7 @@ static const char _svg_path_trans_keys[] = {
 };
 
 static const char _svg_path_single_lengths[] = {
-       5, 0, 5, 5, 1, 0, 6, 4, 
+       0, 5, 5, 5, 1, 0, 6, 4, 
        1, 0, 27, 25, 1, 0, 6, 4, 
        1, 0, 27, 5, 6, 5, 27, 3, 
        3, 0, 6, 4, 3, 0, 6, 4, 
@@ -670,7 +670,7 @@ static const char _svg_path_single_lengths[] = {
 };
 
 static const char _svg_path_range_lengths[] = {
-       1, 0, 2, 2, 1, 1, 3, 3, 
+       0, 1, 2, 2, 1, 1, 3, 3, 
        1, 1, 3, 3, 1, 1, 3, 3, 
        1, 1, 3, 2, 3, 2, 3, 2, 
        2, 1, 2, 2, 2, 1, 3, 3, 
@@ -714,7 +714,7 @@ static const char _svg_path_range_lengths[] = {
 };
 
 static const short _svg_path_index_offsets[] = {
-       0, 7, 7, 15, 23, 26, 28, 38, 
+       0, 0, 7, 15, 23, 26, 28, 38, 
        46, 49, 51, 82, 111, 114, 116, 126, 
        134, 137, 139, 170, 178, 188, 196, 227, 
        233, 239, 241, 250, 257, 263, 265, 275, 
@@ -758,605 +758,606 @@ static const short _svg_path_index_offsets[] = {
 };
 
 static const short _svg_path_indicies[] = {
-       73, 74, 74, 75, 76, 74, 0, 571, 
-       571, 572, 572, 573, 571, 574, 0, 631, 
-       631, 632, 632, 633, 631, 634, 0, 670, 
-       513, 0, 512, 0, 509, 509, 511, 548, 
-       514, 514, 509, 510, 512, 0, 490, 490, 
-       434, 436, 490, 435, 437, 0, 393, 127, 
-       0, 126, 0, 122, 123, 123, 125, 148, 
-       128, 129, 130, 131, 132, 133, 134, 135, 
-       136, 137, 138, 139, 140, 130, 141, 142, 
-       143, 144, 145, 146, 147, 138, 123, 124, 
-       126, 0, 73, 611, 611, 613, 614, 78, 
-       79, 80, 81, 75, 82, 83, 84, 85, 
-       86, 87, 88, 89, 90, 76, 91, 92, 
-       93, 94, 86, 611, 612, 615, 0, 671, 
-       519, 0, 518, 0, 515, 515, 517, 550, 
-       520, 520, 515, 516, 518, 0, 491, 491, 
-       438, 440, 491, 439, 441, 0, 394, 155, 
-       0, 154, 0, 150, 151, 151, 153, 176, 
-       156, 157, 158, 159, 160, 161, 162, 163, 
-       164, 165, 166, 167, 168, 158, 169, 170, 
-       171, 172, 173, 174, 175, 166, 151, 152, 
-       154, 0, 613, 613, 612, 612, 614, 613, 
-       615, 0, 515, 515, 517, 518, 520, 520, 
-       515, 516, 519, 0, 438, 438, 439, 439, 
-       440, 438, 441, 0, 150, 151, 151, 153, 
-       154, 156, 157, 158, 159, 160, 161, 162, 
-       163, 164, 165, 166, 167, 168, 158, 169, 
-       170, 171, 172, 173, 174, 175, 166, 151, 
-       152, 155, 0, 47, 47, 48, 47, 49, 
-       0, 8, 8, 9, 8, 10, 0, 385, 
-       0, 25, 25, 26, 27, 31, 31, 25, 
-       498, 0, 12, 12, 13, 14, 12, 15, 
-       0, 13, 13, 14, 13, 15, 0, 35, 
-       0, 32, 32, 34, 38, 37, 37, 32, 
-       33, 35, 0, 20, 20, 16, 18, 20, 
-       17, 19, 0, 2, 3, 0, 23, 0, 
-       21, 21, 22, 24, 24, 21, 23, 0, 
-       11, 11, 5, 6, 7, 11, 0, 5, 
-       5, 6, 7, 5, 0, 45, 45, 46, 
-       45, 0, 722, 722, 716, 717, 718, 722, 
-       0, 716, 716, 717, 718, 716, 0, 567, 
-       567, 568, 567, 0, 651, 651, 647, 430, 
-       651, 429, 433, 0, 676, 69, 0, 68, 
-       0, 351, 351, 352, 375, 70, 70, 351, 
-       66, 68, 0, 497, 497, 478, 480, 497, 
-       479, 481, 0, 406, 380, 0, 379, 0, 
-       350, 377, 377, 378, 382, 355, 356, 381, 
-       358, 359, 360, 361, 362, 363, 364, 365, 
-       366, 367, 381, 368, 369, 370, 371, 372, 
-       373, 374, 365, 377, 379, 0, 73, 95, 
-       95, 8, 9, 78, 79, 80, 81, 75, 
-       82, 83, 84, 85, 86, 87, 88, 89, 
-       90, 76, 91, 92, 93, 94, 86, 95, 
-       10, 0, 25, 25, 26, 29, 31, 31, 
-       25, 30, 0, 40, 40, 41, 562, 561, 
-       561, 40, 33, 30, 0, 483, 483, 425, 
-       426, 483, 17, 427, 0, 425, 425, 17, 
-       17, 426, 425, 427, 0, 501, 0, 499, 
-       499, 500, 38, 503, 503, 499, 33, 501, 
-       0, 482, 482, 422, 18, 423, 424, 482, 
-       17, 19, 0, 422, 422, 17, 17, 18, 
-       423, 424, 422, 19, 0, 63, 63, 64, 
-       23, 24, 24, 63, 3, 0, 723, 723, 
-       719, 720, 721, 723, 0, 719, 719, 720, 
-       721, 719, 0, 569, 569, 570, 569, 0, 
-       489, 489, 428, 430, 431, 432, 489, 429, 
-       433, 0, 428, 428, 429, 429, 430, 431, 
-       432, 428, 433, 0, 71, 71, 72, 68, 
-       70, 70, 71, 66, 69, 0, 496, 496, 
-       474, 476, 496, 475, 477, 0, 405, 354, 
-       0, 353, 0, 350, 351, 351, 352, 375, 
-       355, 356, 357, 358, 359, 360, 361, 362, 
-       363, 364, 365, 366, 367, 357, 368, 369, 
-       370, 371, 372, 373, 374, 365, 351, 66, 
-       353, 0, 478, 478, 479, 479, 480, 478, 
-       481, 0, 350, 377, 377, 378, 379, 355, 
-       356, 381, 358, 359, 360, 361, 362, 363, 
-       364, 365, 366, 367, 381, 368, 369, 370, 
-       371, 372, 373, 374, 365, 377, 380, 0, 
-       50, 50, 51, 51, 52, 50, 53, 0, 
-       98, 98, 97, 97, 99, 98, 100, 0, 
-       391, 392, 0, 507, 0, 504, 504, 506, 
-       546, 508, 508, 504, 505, 507, 0, 484, 
-       484, 486, 487, 484, 485, 488, 0, 790, 
-       788, 0, 755, 0, 751, 751, 753, 754, 
-       756, 756, 751, 752, 755, 0, 787, 787, 
-       773, 775, 787, 774, 776, 0, 748, 739, 
-       0, 710, 0, 689, 689, 691, 692, 711, 
-       711, 689, 690, 710, 0, 736, 736, 724, 
-       726, 736, 725, 727, 0, 677, 656, 0, 
-       655, 0, 652, 652, 654, 704, 657, 657, 
-       652, 653, 655, 0, 648, 648, 635, 637, 
-       648, 636, 638, 0, 672, 525, 0, 524, 
-       0, 521, 521, 523, 552, 526, 526, 521, 
-       522, 524, 0, 492, 492, 458, 460, 492, 
-       459, 461, 0, 401, 243, 0, 242, 0, 
-       238, 239, 239, 241, 264, 244, 245, 246, 
-       247, 248, 249, 250, 251, 252, 253, 254, 
-       255, 256, 246, 257, 258, 259, 260, 261, 
-       262, 263, 254, 239, 240, 242, 0, 73, 
-       96, 96, 98, 99, 78, 79, 80, 81, 
-       75, 82, 83, 84, 85, 86, 87, 88, 
-       89, 90, 76, 91, 92, 93, 94, 86, 
-       96, 97, 100, 0, 504, 504, 506, 507, 
-       508, 508, 504, 505, 392, 0, 486, 486, 
-       485, 485, 487, 486, 488, 0, 751, 751, 
-       753, 755, 756, 756, 751, 752, 788, 0, 
-       773, 773, 774, 774, 775, 773, 776, 0, 
-       689, 689, 691, 710, 711, 711, 689, 690, 
-       739, 0, 724, 724, 725, 725, 726, 724, 
-       727, 0, 652, 652, 654, 655, 657, 657, 
-       652, 653, 656, 0, 635, 635, 636, 636, 
-       637, 635, 638, 0, 521, 521, 523, 524, 
-       526, 526, 521, 522, 525, 0, 458, 458, 
-       459, 459, 460, 458, 461, 0, 238, 239, 
-       239, 241, 242, 244, 245, 246, 247, 248, 
-       249, 250, 251, 252, 253, 254, 255, 256, 
-       246, 257, 258, 259, 260, 261, 262, 263, 
-       254, 239, 240, 243, 0, 416, 416, 265, 
-       0, 265, 0, 238, 239, 239, 241, 264, 
-       244, 245, 247, 248, 249, 250, 251, 252, 
-       253, 254, 255, 256, 257, 258, 259, 260, 
-       261, 262, 263, 254, 239, 240, 265, 0, 
-       583, 583, 584, 584, 585, 583, 586, 0, 
-       446, 446, 447, 447, 448, 446, 449, 0, 
-       396, 397, 0, 388, 0, 178, 179, 179, 
-       181, 204, 184, 185, 624, 187, 188, 189, 
-       190, 191, 192, 193, 194, 195, 196, 624, 
-       197, 198, 199, 200, 201, 202, 203, 194, 
-       179, 180, 623, 0, 73, 621, 621, 442, 
-       444, 78, 79, 80, 81, 75, 82, 83, 
-       84, 85, 86, 87, 88, 89, 90, 76, 
-       91, 92, 93, 94, 86, 621, 443, 445, 
-       0, 395, 183, 0, 182, 0, 178, 179, 
-       179, 181, 204, 184, 185, 186, 187, 188, 
-       189, 190, 191, 192, 193, 194, 195, 196, 
-       186, 197, 198, 199, 200, 201, 202, 203, 
-       194, 179, 180, 182, 0, 442, 442, 443, 
-       443, 444, 442, 445, 0, 178, 179, 179, 
-       181, 182, 184, 185, 186, 187, 188, 189, 
-       190, 191, 192, 193, 194, 195, 196, 186, 
-       197, 198, 199, 200, 201, 202, 203, 194, 
-       179, 180, 183, 0, 412, 412, 205, 0, 
-       205, 0, 178, 179, 179, 181, 204, 184, 
-       185, 187, 188, 189, 190, 191, 192, 193, 
-       194, 195, 196, 197, 198, 199, 200, 201, 
-       202, 203, 194, 179, 180, 205, 0, 575, 
-       575, 576, 576, 577, 575, 578, 0, 761, 
-       761, 762, 762, 763, 761, 764, 0, 781, 
-       781, 782, 782, 783, 781, 784, 0, 750, 
-       741, 0, 714, 0, 699, 699, 701, 702, 
-       715, 715, 699, 700, 714, 0, 738, 738, 
-       732, 734, 738, 733, 735, 0, 679, 668, 
-       0, 667, 0, 664, 664, 666, 708, 669, 
-       669, 664, 665, 667, 0, 650, 650, 643, 
-       645, 650, 644, 646, 0, 674, 537, 0, 
-       536, 0, 533, 533, 535, 556, 538, 538, 
-       533, 534, 536, 0, 494, 494, 466, 468, 
-       494, 467, 469, 0, 403, 299, 0, 298, 
-       0, 294, 295, 295, 297, 320, 300, 301, 
-       302, 303, 304, 305, 306, 307, 308, 309, 
-       310, 311, 312, 302, 313, 314, 315, 316, 
-       317, 318, 319, 310, 295, 296, 298, 0, 
-       73, 786, 786, 781, 783, 78, 79, 80, 
-       81, 75, 82, 83, 84, 85, 86, 87, 
-       88, 89, 90, 76, 91, 92, 93, 94, 
-       86, 786, 782, 784, 0, 699, 699, 701, 
-       714, 715, 715, 699, 700, 741, 0, 732, 
-       732, 733, 733, 734, 732, 735, 0, 664, 
-       664, 666, 667, 669, 669, 664, 665, 668, 
-       0, 643, 643, 644, 644, 645, 643, 646, 
-       0, 533, 533, 535, 536, 538, 538, 533, 
-       534, 537, 0, 466, 466, 467, 467, 468, 
-       466, 469, 0, 294, 295, 295, 297, 298, 
-       300, 301, 302, 303, 304, 305, 306, 307, 
-       308, 309, 310, 311, 312, 302, 313, 314, 
-       315, 316, 317, 318, 319, 310, 295, 296, 
-       299, 0, 418, 418, 321, 0, 321, 0, 
-       294, 295, 295, 297, 320, 300, 301, 303, 
-       304, 305, 306, 307, 308, 309, 310, 311, 
-       312, 313, 314, 315, 316, 317, 318, 319, 
-       310, 295, 296, 321, 0, 757, 757, 758, 
-       758, 759, 757, 760, 0, 777, 777, 778, 
-       778, 779, 777, 780, 0, 749, 740, 0, 
-       712, 0, 694, 694, 696, 697, 713, 713, 
-       694, 695, 712, 0, 737, 737, 728, 730, 
-       737, 729, 731, 0, 678, 662, 0, 661, 
-       0, 658, 658, 660, 706, 663, 663, 658, 
-       659, 661, 0, 649, 649, 639, 641, 649, 
-       640, 642, 0, 673, 531, 0, 530, 0, 
-       527, 527, 529, 554, 532, 532, 527, 528, 
-       530, 0, 493, 493, 462, 464, 493, 463, 
-       465, 0, 402, 271, 0, 270, 0, 266, 
-       267, 267, 269, 292, 272, 273, 274, 275, 
-       276, 277, 278, 279, 280, 281, 282, 283, 
-       284, 274, 285, 286, 287, 288, 289, 290, 
-       291, 282, 267, 268, 270, 0, 73, 785, 
-       785, 777, 779, 78, 79, 80, 81, 75, 
-       82, 83, 84, 85, 86, 87, 88, 89, 
-       90, 76, 91, 92, 93, 94, 86, 785, 
-       778, 780, 0, 694, 694, 696, 712, 713, 
-       713, 694, 695, 740, 0, 728, 728, 729, 
-       729, 730, 728, 731, 0, 658, 658, 660, 
-       661, 663, 663, 658, 659, 662, 0, 639, 
-       639, 640, 640, 641, 639, 642, 0, 527, 
-       527, 529, 530, 532, 532, 527, 528, 531, 
-       0, 462, 462, 463, 463, 464, 462, 465, 
-       0, 266, 267, 267, 269, 270, 272, 273, 
-       274, 275, 276, 277, 278, 279, 280, 281, 
-       282, 283, 284, 274, 285, 286, 287, 288, 
-       289, 290, 291, 282, 267, 268, 271, 0, 
-       417, 417, 293, 0, 293, 0, 266, 267, 
-       267, 269, 292, 272, 273, 275, 276, 277, 
-       278, 279, 280, 281, 282, 283, 284, 285, 
-       286, 287, 288, 289, 290, 291, 282, 267, 
-       268, 293, 0, 579, 579, 580, 580, 581, 
-       579, 582, 0, 618, 618, 617, 617, 619, 
-       618, 620, 0, 675, 543, 0, 542, 0, 
-       539, 539, 541, 558, 544, 544, 539, 540, 
-       542, 0, 495, 495, 470, 472, 495, 471, 
-       473, 0, 404, 327, 0, 326, 0, 322, 
-       323, 323, 325, 348, 328, 329, 330, 331, 
-       332, 333, 334, 335, 336, 337, 338, 339, 
-       340, 330, 341, 342, 343, 344, 345, 346, 
-       347, 338, 323, 324, 326, 0, 73, 616, 
-       616, 618, 619, 78, 79, 80, 81, 75, 
-       82, 83, 84, 85, 86, 87, 88, 89, 
-       90, 76, 91, 92, 93, 94, 86, 616, 
-       617, 620, 0, 539, 539, 541, 542, 544, 
-       544, 539, 540, 543, 0, 470, 470, 471, 
-       471, 472, 470, 473, 0, 322, 323, 323, 
-       325, 326, 328, 329, 330, 331, 332, 333, 
-       334, 335, 336, 337, 338, 339, 340, 330, 
-       341, 342, 343, 344, 345, 346, 347, 338, 
-       323, 324, 327, 0, 419, 419, 349, 0, 
-       349, 0, 322, 323, 323, 325, 348, 328, 
-       329, 331, 332, 333, 334, 335, 336, 337, 
-       338, 339, 340, 341, 342, 343, 344, 345, 
-       346, 347, 338, 323, 324, 349, 0, 587, 
-       587, 588, 588, 589, 587, 590, 0, 454, 
-       454, 455, 455, 456, 454, 457, 0, 399, 
-       400, 0, 390, 0, 208, 209, 209, 211, 
-       234, 214, 215, 628, 217, 218, 219, 220, 
-       221, 222, 223, 224, 225, 226, 628, 227, 
-       228, 229, 230, 231, 232, 233, 224, 209, 
-       210, 627, 0, 73, 622, 622, 450, 452, 
-       78, 79, 80, 81, 75, 82, 83, 84, 
-       85, 86, 87, 88, 89, 90, 76, 91, 
-       92, 93, 94, 86, 622, 451, 453, 0, 
-       398, 213, 0, 212, 0, 208, 209, 209, 
-       211, 234, 214, 215, 216, 217, 218, 219, 
-       220, 221, 222, 223, 224, 225, 226, 216, 
-       227, 228, 229, 230, 231, 232, 233, 224, 
-       209, 210, 212, 0, 450, 450, 451, 451, 
-       452, 450, 453, 0, 208, 209, 209, 211, 
-       212, 214, 215, 216, 217, 218, 219, 220, 
-       221, 222, 223, 224, 225, 226, 216, 227, 
-       228, 229, 230, 231, 232, 233, 224, 209, 
-       210, 213, 0, 414, 414, 235, 0, 235, 
-       0, 208, 209, 209, 211, 234, 214, 215, 
-       217, 218, 219, 220, 221, 222, 223, 224, 
-       225, 226, 227, 228, 229, 230, 231, 232, 
-       233, 224, 209, 210, 235, 0, 101, 102, 
-       102, 103, 104, 105, 106, 107, 108, 109, 
-       110, 111, 112, 113, 114, 115, 116, 117, 
-       118, 119, 120, 121, 112, 102, 0, 73, 
-       77, 77, 78, 79, 80, 81, 75, 82, 
-       83, 84, 85, 86, 87, 88, 89, 90, 
-       76, 91, 92, 93, 94, 86, 77, 0, 
-       54, 54, 55, 54, 56, 0, 57, 57, 
-       58, 58, 59, 57, 60, 0, 603, 603, 
-       604, 604, 605, 603, 606, 0, 178, 179, 
-       179, 181, 625, 184, 185, 624, 187, 188, 
-       189, 190, 191, 192, 193, 194, 195, 196, 
-       624, 197, 198, 199, 200, 201, 202, 203, 
-       194, 179, 180, 626, 0, 413, 413, 387, 
-       0, 387, 0, 178, 179, 179, 181, 204, 
-       184, 185, 187, 188, 189, 190, 191, 192, 
+       0, 2, 2, 3, 4, 2, 1, 5, 
+       5, 6, 6, 7, 5, 8, 1, 9, 
+       9, 10, 10, 11, 9, 12, 1, 13, 
+       14, 1, 15, 1, 16, 16, 18, 19, 
+       20, 20, 16, 17, 15, 1, 21, 21, 
+       23, 24, 21, 22, 25, 1, 26, 27, 
+       1, 28, 1, 29, 30, 30, 32, 33, 
+       34, 35, 36, 37, 38, 39, 40, 41, 
+       42, 43, 44, 45, 46, 36, 47, 48, 
+       49, 50, 51, 52, 53, 44, 30, 31, 
+       28, 1, 0, 54, 54, 56, 57, 59, 
+       60, 61, 62, 3, 63, 64, 65, 66, 
+       67, 68, 69, 70, 71, 4, 72, 73, 
+       74, 75, 67, 54, 55, 58, 1, 76, 
+       77, 1, 78, 1, 79, 79, 81, 82, 
+       83, 83, 79, 80, 78, 1, 84, 84, 
+       86, 87, 84, 85, 88, 1, 89, 90, 
+       1, 91, 1, 92, 93, 93, 95, 96, 
+       97, 98, 99, 100, 101, 102, 103, 104, 
+       105, 106, 107, 108, 109, 99, 110, 111, 
+       112, 113, 114, 115, 116, 107, 93, 94, 
+       91, 1, 56, 56, 55, 55, 57, 56, 
+       58, 1, 79, 79, 81, 78, 83, 83, 
+       79, 80, 77, 1, 86, 86, 85, 85, 
+       87, 86, 88, 1, 92, 93, 93, 95, 
+       91, 97, 98, 99, 100, 101, 102, 103, 
+       104, 105, 106, 107, 108, 109, 99, 110, 
+       111, 112, 113, 114, 115, 116, 107, 93, 
+       94, 90, 1, 117, 117, 118, 117, 119, 
+       1, 120, 120, 121, 120, 122, 1, 123, 
+       1, 124, 124, 125, 126, 128, 128, 124, 
+       127, 1, 129, 129, 130, 131, 129, 132, 
+       1, 130, 130, 131, 130, 132, 1, 133, 
+       1, 134, 134, 136, 137, 138, 138, 134, 
+       135, 133, 1, 139, 139, 141, 142, 139, 
+       140, 143, 1, 144, 145, 1, 146, 1, 
+       147, 147, 148, 149, 149, 147, 146, 1, 
+       150, 150, 151, 152, 153, 150, 1, 151, 
+       151, 152, 153, 151, 1, 154, 154, 155, 
+       154, 1, 156, 156, 157, 158, 159, 156, 
+       1, 157, 157, 158, 159, 157, 1, 160, 
+       160, 161, 160, 1, 162, 162, 164, 165, 
+       162, 163, 166, 1, 167, 168, 1, 169, 
+       1, 170, 170, 172, 173, 174, 174, 170, 
+       171, 169, 1, 175, 175, 177, 178, 175, 
+       176, 179, 1, 180, 181, 1, 182, 1, 
+       183, 184, 184, 185, 186, 187, 188, 189, 
+       190, 191, 192, 193, 194, 195, 196, 197, 
+       198, 199, 189, 200, 201, 202, 203, 204, 
+       205, 206, 197, 184, 182, 1, 0, 207, 
+       207, 120, 121, 59, 60, 61, 62, 3, 
+       63, 64, 65, 66, 67, 68, 69, 70, 
+       71, 4, 72, 73, 74, 75, 67, 207, 
+       122, 1, 124, 124, 125, 208, 128, 128, 
+       124, 209, 1, 210, 210, 211, 212, 213, 
+       213, 210, 135, 209, 1, 214, 214, 215, 
+       216, 214, 140, 217, 1, 215, 215, 140, 
+       140, 216, 215, 217, 1, 218, 1, 219, 
+       219, 220, 137, 221, 221, 219, 135, 218, 
+       1, 222, 222, 223, 142, 224, 225, 222, 
+       140, 143, 1, 223, 223, 140, 140, 142, 
+       224, 225, 223, 143, 1, 226, 226, 227, 
+       146, 149, 149, 226, 145, 1, 228, 228, 
+       229, 230, 231, 228, 1, 229, 229, 230, 
+       231, 229, 1, 232, 232, 233, 232, 1, 
+       234, 234, 235, 165, 236, 237, 234, 163, 
+       166, 1, 235, 235, 163, 163, 165, 236, 
+       237, 235, 166, 1, 238, 238, 239, 169, 
+       174, 174, 238, 171, 168, 1, 240, 240, 
+       242, 243, 240, 241, 244, 1, 245, 246, 
+       1, 247, 1, 183, 170, 170, 172, 173, 
+       187, 188, 248, 190, 191, 192, 193, 194, 
+       195, 196, 197, 198, 199, 248, 200, 201, 
+       202, 203, 204, 205, 206, 197, 170, 171, 
+       247, 1, 177, 177, 176, 176, 178, 177, 
+       179, 1, 183, 184, 184, 185, 182, 187, 
+       188, 189, 190, 191, 192, 193, 194, 195, 
+       196, 197, 198, 199, 189, 200, 201, 202, 
+       203, 204, 205, 206, 197, 184, 181, 1, 
+       249, 249, 250, 250, 251, 249, 252, 1, 
+       253, 253, 254, 254, 255, 253, 256, 1, 
+       257, 258, 1, 259, 1, 260, 260, 262, 
+       263, 264, 264, 260, 261, 259, 1, 265, 
+       265, 267, 268, 265, 266, 269, 1, 270, 
+       271, 1, 272, 1, 273, 273, 275, 276, 
+       277, 277, 273, 274, 272, 1, 278, 278, 
+       280, 281, 278, 279, 282, 1, 283, 284, 
+       1, 285, 1, 286, 286, 288, 289, 290, 
+       290, 286, 287, 285, 1, 291, 291, 293, 
+       294, 291, 292, 295, 1, 296, 297, 1, 
+       298, 1, 299, 299, 301, 302, 303, 303, 
+       299, 300, 298, 1, 304, 304, 306, 307, 
+       304, 305, 308, 1, 309, 310, 1, 311, 
+       1, 312, 312, 314, 315, 316, 316, 312, 
+       313, 311, 1, 317, 317, 319, 320, 317, 
+       318, 321, 1, 322, 323, 1, 324, 1, 
+       325, 326, 326, 328, 329, 330, 331, 332, 
+       333, 334, 335, 336, 337, 338, 339, 340, 
+       341, 342, 332, 343, 344, 345, 346, 347, 
+       348, 349, 340, 326, 327, 324, 1, 0, 
+       350, 350, 253, 255, 59, 60, 61, 62, 
+       3, 63, 64, 65, 66, 67, 68, 69, 
+       70, 71, 4, 72, 73, 74, 75, 67, 
+       350, 254, 256, 1, 260, 260, 262, 259, 
+       264, 264, 260, 261, 258, 1, 267, 267, 
+       266, 266, 268, 267, 269, 1, 273, 273, 
+       275, 272, 277, 277, 273, 274, 271, 1, 
+       280, 280, 279, 279, 281, 280, 282, 1, 
+       286, 286, 288, 285, 290, 290, 286, 287, 
+       284, 1, 293, 293, 292, 292, 294, 293, 
+       295, 1, 299, 299, 301, 298, 303, 303, 
+       299, 300, 297, 1, 306, 306, 305, 305, 
+       307, 306, 308, 1, 312, 312, 314, 311, 
+       316, 316, 312, 313, 310, 1, 319, 319, 
+       318, 318, 320, 319, 321, 1, 325, 326, 
+       326, 328, 324, 330, 331, 332, 333, 334, 
+       335, 336, 337, 338, 339, 340, 341, 342, 
+       332, 343, 344, 345, 346, 347, 348, 349, 
+       340, 326, 327, 323, 1, 351, 351, 352, 
+       1, 352, 1, 325, 326, 326, 328, 329, 
+       330, 331, 333, 334, 335, 336, 337, 338, 
+       339, 340, 341, 342, 343, 344, 345, 346, 
+       347, 348, 349, 340, 326, 327, 352, 1, 
+       353, 353, 354, 354, 355, 353, 356, 1, 
+       357, 357, 358, 358, 359, 357, 360, 1, 
+       361, 362, 1, 363, 1, 364, 365, 365, 
+       367, 368, 370, 371, 372, 373, 374, 375, 
+       376, 377, 378, 379, 380, 381, 382, 372, 
+       383, 384, 385, 386, 387, 388, 389, 380, 
+       365, 366, 369, 1, 0, 390, 390, 392, 
+       393, 59, 60, 61, 62, 3, 63, 64, 
+       65, 66, 67, 68, 69, 70, 71, 4, 
+       72, 73, 74, 75, 67, 390, 391, 394, 
+       1, 395, 396, 1, 397, 1, 364, 365, 
+       365, 367, 368, 370, 371, 398, 373, 374, 
+       375, 376, 377, 378, 379, 380, 381, 382, 
+       398, 383, 384, 385, 386, 387, 388, 389, 
+       380, 365, 366, 397, 1, 392, 392, 391, 
+       391, 393, 392, 394, 1, 364, 365, 365, 
+       367, 397, 370, 371, 398, 373, 374, 375, 
+       376, 377, 378, 379, 380, 381, 382, 398, 
+       383, 384, 385, 386, 387, 388, 389, 380, 
+       365, 366, 396, 1, 399, 399, 400, 1, 
+       400, 1, 364, 365, 365, 367, 368, 370, 
+       371, 373, 374, 375, 376, 377, 378, 379, 
+       380, 381, 382, 383, 384, 385, 386, 387, 
+       388, 389, 380, 365, 366, 400, 1, 401, 
+       401, 402, 402, 403, 401, 404, 1, 405, 
+       405, 406, 406, 407, 405, 408, 1, 409, 
+       409, 410, 410, 411, 409, 412, 1, 413, 
+       414, 1, 415, 1, 416, 416, 418, 419, 
+       420, 420, 416, 417, 415, 1, 421, 421, 
+       423, 424, 421, 422, 425, 1, 426, 427, 
+       1, 428, 1, 429, 429, 431, 432, 433, 
+       433, 429, 430, 428, 1, 434, 434, 436, 
+       437, 434, 435, 438, 1, 439, 440, 1, 
+       441, 1, 442, 442, 444, 445, 446, 446, 
+       442, 443, 441, 1, 447, 447, 449, 450, 
+       447, 448, 451, 1, 452, 453, 1, 454, 
+       1, 455, 456, 456, 458, 459, 460, 461, 
+       462, 463, 464, 465, 466, 467, 468, 469, 
+       470, 471, 472, 462, 473, 474, 475, 476, 
+       477, 478, 479, 470, 456, 457, 454, 1, 
+       0, 480, 480, 409, 411, 59, 60, 61, 
+       62, 3, 63, 64, 65, 66, 67, 68, 
+       69, 70, 71, 4, 72, 73, 74, 75, 
+       67, 480, 410, 412, 1, 416, 416, 418, 
+       415, 420, 420, 416, 417, 414, 1, 423, 
+       423, 422, 422, 424, 423, 425, 1, 429, 
+       429, 431, 428, 433, 433, 429, 430, 427, 
+       1, 436, 436, 435, 435, 437, 436, 438, 
+       1, 442, 442, 444, 441, 446, 446, 442, 
+       443, 440, 1, 449, 449, 448, 448, 450, 
+       449, 451, 1, 455, 456, 456, 458, 454, 
+       460, 461, 462, 463, 464, 465, 466, 467, 
+       468, 469, 470, 471, 472, 462, 473, 474, 
+       475, 476, 477, 478, 479, 470, 456, 457, 
+       453, 1, 481, 481, 482, 1, 482, 1, 
+       455, 456, 456, 458, 459, 460, 461, 463, 
+       464, 465, 466, 467, 468, 469, 470, 471, 
+       472, 473, 474, 475, 476, 477, 478, 479, 
+       470, 456, 457, 482, 1, 483, 483, 484, 
+       484, 485, 483, 486, 1, 487, 487, 488, 
+       488, 489, 487, 490, 1, 491, 492, 1, 
+       493, 1, 494, 494, 496, 497, 498, 498, 
+       494, 495, 493, 1, 499, 499, 501, 502, 
+       499, 500, 503, 1, 504, 505, 1, 506, 
+       1, 507, 507, 509, 510, 511, 511, 507, 
+       508, 506, 1, 512, 512, 514, 515, 512, 
+       513, 516, 1, 517, 518, 1, 519, 1, 
+       520, 520, 522, 523, 524, 524, 520, 521, 
+       519, 1, 525, 525, 527, 528, 525, 526, 
+       529, 1, 530, 531, 1, 532, 1, 533, 
+       534, 534, 536, 537, 538, 539, 540, 541, 
+       542, 543, 544, 545, 546, 547, 548, 549, 
+       550, 540, 551, 552, 553, 554, 555, 556, 
+       557, 548, 534, 535, 532, 1, 0, 558, 
+       558, 487, 489, 59, 60, 61, 62, 3, 
+       63, 64, 65, 66, 67, 68, 69, 70, 
+       71, 4, 72, 73, 74, 75, 67, 558, 
+       488, 490, 1, 494, 494, 496, 493, 498, 
+       498, 494, 495, 492, 1, 501, 501, 500, 
+       500, 502, 501, 503, 1, 507, 507, 509, 
+       506, 511, 511, 507, 508, 505, 1, 514, 
+       514, 513, 513, 515, 514, 516, 1, 520, 
+       520, 522, 519, 524, 524, 520, 521, 518, 
+       1, 527, 527, 526, 526, 528, 527, 529, 
+       1, 533, 534, 534, 536, 532, 538, 539, 
+       540, 541, 542, 543, 544, 545, 546, 547, 
+       548, 549, 550, 540, 551, 552, 553, 554, 
+       555, 556, 557, 548, 534, 535, 531, 1, 
+       559, 559, 560, 1, 560, 1, 533, 534, 
+       534, 536, 537, 538, 539, 541, 542, 543, 
+       544, 545, 546, 547, 548, 549, 550, 551, 
+       552, 553, 554, 555, 556, 557, 548, 534, 
+       535, 560, 1, 561, 561, 562, 562, 563, 
+       561, 564, 1, 565, 565, 566, 566, 567, 
+       565, 568, 1, 569, 570, 1, 571, 1, 
+       572, 572, 574, 575, 576, 576, 572, 573, 
+       571, 1, 577, 577, 579, 580, 577, 578, 
+       581, 1, 582, 583, 1, 584, 1, 585, 
+       586, 586, 588, 589, 590, 591, 592, 593, 
+       594, 595, 596, 597, 598, 599, 600, 601, 
+       602, 592, 603, 604, 605, 606, 607, 608, 
+       609, 600, 586, 587, 584, 1, 0, 610, 
+       610, 565, 567, 59, 60, 61, 62, 3, 
+       63, 64, 65, 66, 67, 68, 69, 70, 
+       71, 4, 72, 73, 74, 75, 67, 610, 
+       566, 568, 1, 572, 572, 574, 571, 576, 
+       576, 572, 573, 570, 1, 579, 579, 578, 
+       578, 580, 579, 581, 1, 585, 586, 586, 
+       588, 584, 590, 591, 592, 593, 594, 595, 
+       596, 597, 598, 599, 600, 601, 602, 592, 
+       603, 604, 605, 606, 607, 608, 609, 600, 
+       586, 587, 583, 1, 611, 611, 612, 1, 
+       612, 1, 585, 586, 586, 588, 589, 590, 
+       591, 593, 594, 595, 596, 597, 598, 599, 
+       600, 601, 602, 603, 604, 605, 606, 607, 
+       608, 609, 600, 586, 587, 612, 1, 613, 
+       613, 614, 614, 615, 613, 616, 1, 617, 
+       617, 618, 618, 619, 617, 620, 1, 621, 
+       622, 1, 623, 1, 624, 625, 625, 627, 
+       628, 630, 631, 632, 633, 634, 635, 636, 
+       637, 638, 639, 640, 641, 642, 632, 643, 
+       644, 645, 646, 647, 648, 649, 640, 625, 
+       626, 629, 1, 0, 650, 650, 652, 653, 
+       59, 60, 61, 62, 3, 63, 64, 65, 
+       66, 67, 68, 69, 70, 71, 4, 72, 
+       73, 74, 75, 67, 650, 651, 654, 1, 
+       655, 656, 1, 657, 1, 624, 625, 625, 
+       627, 628, 630, 631, 658, 633, 634, 635, 
+       636, 637, 638, 639, 640, 641, 642, 658, 
+       643, 644, 645, 646, 647, 648, 649, 640, 
+       625, 626, 657, 1, 652, 652, 651, 651, 
+       653, 652, 654, 1, 624, 625, 625, 627, 
+       657, 630, 631, 658, 633, 634, 635, 636, 
+       637, 638, 639, 640, 641, 642, 658, 643, 
+       644, 645, 646, 647, 648, 649, 640, 625, 
+       626, 656, 1, 659, 659, 660, 1, 660, 
+       1, 624, 625, 625, 627, 628, 630, 631, 
+       633, 634, 635, 636, 637, 638, 639, 640, 
+       641, 642, 643, 644, 645, 646, 647, 648, 
+       649, 640, 625, 626, 660, 1, 661, 662, 
+       662, 663, 664, 665, 666, 667, 668, 669, 
+       670, 671, 672, 673, 674, 675, 676, 677, 
+       678, 679, 680, 681, 672, 662, 1, 0, 
+       682, 682, 59, 60, 61, 62, 3, 63, 
+       64, 65, 66, 67, 68, 69, 70, 71, 
+       4, 72, 73, 74, 75, 67, 682, 1, 
+       683, 683, 684, 683, 685, 1, 686, 686, 
+       687, 687, 688, 686, 689, 1, 690, 690, 
+       691, 691, 692, 690, 693, 1, 364, 365, 
+       365, 367, 694, 370, 371, 372, 373, 374, 
+       375, 376, 377, 378, 379, 380, 381, 382, 
+       372, 383, 384, 385, 386, 387, 388, 389, 
+       380, 365, 366, 695, 1, 696, 696, 697, 
+       1, 697, 1, 364, 365, 365, 367, 368, 
+       370, 371, 373, 374, 375, 376, 377, 378, 
+       379, 380, 381, 382, 383, 384, 385, 386, 
+       387, 388, 389, 380, 365, 366, 698, 1, 
+       364, 365, 365, 367, 699, 370, 371, 398, 
+       373, 374, 375, 376, 377, 378, 379, 380, 
+       381, 382, 398, 383, 384, 385, 386, 387, 
+       388, 389, 380, 365, 366, 698, 1, 700, 
+       700, 701, 701, 702, 700, 703, 1, 704, 
+       704, 705, 705, 706, 704, 707, 1, 16, 
+       16, 18, 15, 20, 20, 16, 17, 14, 
+       1, 23, 23, 22, 22, 24, 23, 25, 
+       1, 29, 30, 30, 32, 28, 34, 35, 
+       36, 37, 38, 39, 40, 41, 42, 43, 
+       44, 45, 46, 36, 47, 48, 49, 50, 
+       51, 52, 53, 44, 30, 31, 27, 1, 
+       708, 708, 709, 1, 709, 1, 29, 30, 
+       30, 32, 33, 34, 35, 37, 38, 39, 
+       40, 41, 42, 43, 44, 45, 46, 47, 
+       48, 49, 50, 51, 52, 53, 44, 30, 
+       31, 709, 1, 710, 710, 711, 711, 712, 
+       710, 713, 1, 714, 714, 715, 715, 716, 
+       714, 717, 1, 718, 718, 719, 719, 720, 
+       718, 721, 1, 722, 722, 723, 723, 724, 
+       722, 725, 1, 624, 625, 625, 627, 726, 
+       630, 631, 632, 633, 634, 635, 636, 637, 
+       638, 639, 640, 641, 642, 632, 643, 644, 
+       645, 646, 647, 648, 649, 640, 625, 626, 
+       727, 1, 728, 728, 729, 1, 729, 1, 
+       624, 625, 625, 627, 628, 630, 631, 633, 
+       634, 635, 636, 637, 638, 639, 640, 641, 
+       642, 643, 644, 645, 646, 647, 648, 649, 
+       640, 625, 626, 730, 1, 624, 625, 625, 
+       627, 731, 630, 631, 658, 633, 634, 635, 
+       636, 637, 638, 639, 640, 641, 642, 658, 
+       643, 644, 645, 646, 647, 648, 649, 640, 
+       625, 626, 730, 1, 732, 732, 733, 1, 
+       733, 1, 16, 16, 18, 19, 16, 17, 
+       733, 1, 624, 625, 625, 627, 731, 630, 
+       631, 632, 633, 634, 635, 636, 637, 638, 
+       639, 640, 641, 642, 632, 643, 644, 645, 
+       646, 647, 648, 649, 640, 625, 626, 629, 
+       1, 734, 734, 735, 1, 735, 1, 572, 
+       572, 574, 575, 572, 573, 735, 1, 736, 
+       736, 737, 1, 737, 1, 520, 520, 522, 
+       523, 520, 521, 737, 1, 738, 738, 739, 
+       1, 739, 1, 507, 507, 509, 510, 507, 
+       508, 739, 1, 740, 740, 741, 1, 741, 
+       1, 494, 494, 496, 497, 494, 495, 741, 
+       1, 742, 742, 743, 1, 743, 1, 442, 
+       442, 444, 445, 442, 443, 743, 1, 744, 
+       744, 745, 1, 745, 1, 429, 429, 431, 
+       432, 429, 430, 745, 1, 746, 746, 747, 
+       1, 747, 1, 416, 416, 418, 419, 416, 
+       417, 747, 1, 364, 365, 365, 367, 699, 
+       370, 371, 372, 373, 374, 375, 376, 377, 
+       378, 379, 380, 381, 382, 372, 383, 384, 
+       385, 386, 387, 388, 389, 380, 365, 366, 
+       369, 1, 748, 748, 749, 1, 749, 1, 
+       312, 312, 314, 315, 312, 313, 749, 1, 
+       750, 750, 751, 1, 751, 1, 299, 299, 
+       301, 302, 299, 300, 751, 1, 752, 752, 
+       753, 1, 753, 1, 286, 286, 288, 289, 
+       286, 287, 753, 1, 754, 754, 755, 1, 
+       755, 1, 273, 273, 275, 276, 273, 274, 
+       755, 1, 756, 756, 757, 1, 757, 1, 
+       260, 260, 262, 263, 260, 261, 757, 1, 
+       758, 758, 759, 1, 759, 1, 183, 184, 
+       184, 185, 186, 187, 188, 190, 191, 192, 
        193, 194, 195, 196, 197, 198, 199, 200, 
-       201, 202, 203, 194, 179, 180, 206, 0, 
-       178, 179, 179, 181, 207, 184, 185, 186, 
-       187, 188, 189, 190, 191, 192, 193, 194, 
-       195, 196, 186, 197, 198, 199, 200, 201, 
-       202, 203, 194, 179, 180, 206, 0, 595, 
-       595, 596, 596, 597, 595, 598, 0, 591, 
-       591, 592, 592, 593, 591, 594, 0, 509, 
-       509, 511, 512, 514, 514, 509, 510, 513, 
-       0, 434, 434, 435, 435, 436, 434, 437, 
-       0, 122, 123, 123, 125, 126, 128, 129, 
-       130, 131, 132, 133, 134, 135, 136, 137, 
-       138, 139, 140, 130, 141, 142, 143, 144, 
-       145, 146, 147, 138, 123, 124, 127, 0, 
-       410, 410, 149, 0, 149, 0, 122, 123, 
-       123, 125, 148, 128, 129, 131, 132, 133, 
-       134, 135, 136, 137, 138, 139, 140, 141, 
-       142, 143, 144, 145, 146, 147, 138, 123, 
-       124, 149, 0, 769, 769, 770, 770, 771, 
-       769, 772, 0, 765, 765, 766, 766, 767, 
-       765, 768, 0, 599, 599, 600, 600, 601, 
-       599, 602, 0, 607, 607, 608, 608, 609, 
-       607, 610, 0, 208, 209, 209, 211, 629, 
-       214, 215, 628, 217, 218, 219, 220, 221, 
-       222, 223, 224, 225, 226, 628, 227, 228, 
-       229, 230, 231, 232, 233, 224, 209, 210, 
-       630, 0, 415, 415, 389, 0, 389, 0, 
-       208, 209, 209, 211, 234, 214, 215, 217, 
-       218, 219, 220, 221, 222, 223, 224, 225, 
-       226, 227, 228, 229, 230, 231, 232, 233, 
-       224, 209, 210, 236, 0, 208, 209, 209, 
-       211, 237, 214, 215, 216, 217, 218, 219, 
-       220, 221, 222, 223, 224, 225, 226, 216, 
-       227, 228, 229, 230, 231, 232, 233, 224, 
-       209, 210, 236, 0, 682, 682, 549, 0, 
-       549, 0, 509, 509, 511, 548, 509, 510, 
-       549, 0, 208, 209, 209, 211, 237, 214, 
-       215, 628, 217, 218, 219, 220, 221, 222, 
-       223, 224, 225, 226, 628, 227, 228, 229, 
-       230, 231, 232, 233, 224, 209, 210, 627, 
-       0, 687, 687, 559, 0, 559, 0, 539, 
-       539, 541, 558, 539, 540, 559, 0, 685, 
-       685, 555, 0, 555, 0, 527, 527, 529, 
-       554, 527, 528, 555, 0, 746, 746, 707, 
-       0, 707, 0, 658, 658, 660, 706, 658, 
-       659, 707, 0, 743, 743, 698, 0, 698, 
-       0, 694, 694, 696, 697, 694, 695, 698, 
-       0, 686, 686, 557, 0, 557, 0, 533, 
-       533, 535, 556, 533, 534, 557, 0, 747, 
-       747, 709, 0, 709, 0, 664, 664, 666, 
-       708, 664, 665, 709, 0, 744, 744, 703, 
-       0, 703, 0, 699, 699, 701, 702, 699, 
-       700, 703, 0, 178, 179, 179, 181, 207, 
-       184, 185, 624, 187, 188, 189, 190, 191, 
-       192, 193, 194, 195, 196, 624, 197, 198, 
-       199, 200, 201, 202, 203, 194, 179, 180, 
-       623, 0, 684, 684, 553, 0, 553, 0, 
-       521, 521, 523, 552, 521, 522, 553, 0, 
-       745, 745, 705, 0, 705, 0, 652, 652, 
-       654, 704, 652, 653, 705, 0, 742, 742, 
-       693, 0, 693, 0, 689, 689, 691, 692, 
-       689, 690, 693, 0, 791, 791, 789, 0, 
-       789, 0, 751, 751, 753, 754, 751, 752, 
-       789, 0, 681, 681, 547, 0, 547, 0, 
-       504, 504, 506, 546, 504, 505, 547, 0, 
-       421, 421, 383, 0, 383, 0, 350, 377, 
-       377, 378, 382, 355, 356, 358, 359, 360, 
-       361, 362, 363, 364, 365, 366, 367, 368, 
-       369, 370, 371, 372, 373, 374, 365, 377, 
-       383, 0, 420, 420, 376, 0, 376, 0, 
-       350, 351, 351, 352, 375, 355, 356, 358, 
-       359, 360, 361, 362, 363, 364, 365, 366, 
-       367, 368, 369, 370, 371, 372, 373, 374, 
-       365, 351, 66, 376, 0, 350, 351, 351, 
-       352, 353, 355, 356, 357, 358, 359, 360, 
-       361, 362, 363, 364, 365, 366, 367, 357, 
-       368, 369, 370, 371, 372, 373, 374, 365, 
-       351, 66, 354, 0, 474, 474, 475, 475, 
-       476, 474, 477, 0, 351, 351, 352, 68, 
-       70, 70, 351, 66, 69, 0, 688, 688, 
-       560, 0, 560, 0, 351, 351, 352, 375, 
-       351, 66, 560, 0, 65, 65, 67, 68, 
-       70, 70, 65, 66, 69, 0, 565, 565, 
-       566, 565, 0, 21, 21, 22, 23, 24, 
-       24, 21, 3, 0, 4, 4, 1, 0, 
-       1, 0, 21, 21, 22, 21, 1, 0, 
-       61, 61, 62, 23, 24, 24, 61, 3, 
-       0, 680, 680, 545, 0, 545, 0, 499, 
-       499, 500, 38, 499, 33, 545, 0, 499, 
-       499, 500, 501, 503, 503, 499, 33, 502, 
-       0, 40, 40, 41, 27, 561, 561, 40, 
-       33, 498, 0, 40, 40, 41, 42, 561, 
-       561, 40, 33, 498, 0, 409, 409, 386, 
-       0, 386, 0, 40, 40, 41, 27, 40, 
-       33, 28, 0, 40, 40, 41, 42, 37, 
-       37, 40, 33, 28, 0, 408, 408, 39, 
-       0, 39, 0, 32, 32, 34, 38, 32, 
-       33, 39, 0, 16, 16, 17, 17, 18, 
-       16, 19, 0, 407, 407, 384, 0, 384, 
-       0, 25, 25, 26, 27, 25, 28, 0, 
-       647, 647, 429, 429, 430, 647, 433, 0, 
-       563, 563, 564, 563, 0, 43, 43, 44, 
-       43, 0, 32, 32, 34, 35, 37, 37, 
-       32, 33, 36, 0, 411, 411, 177, 0, 
-       177, 0, 150, 151, 151, 153, 176, 156, 
-       157, 159, 160, 161, 162, 163, 164, 165, 
-       166, 167, 168, 169, 170, 171, 172, 173, 
-       174, 175, 166, 151, 152, 177, 0, 683, 
-       683, 551, 0, 551, 0, 515, 515, 517, 
-       550, 515, 516, 551, 0, 0, 0
+       201, 202, 203, 204, 205, 206, 197, 184, 
+       759, 1, 760, 760, 761, 1, 761, 1, 
+       183, 170, 170, 172, 173, 187, 188, 190, 
+       191, 192, 193, 194, 195, 196, 197, 198, 
+       199, 200, 201, 202, 203, 204, 205, 206, 
+       197, 170, 171, 761, 1, 183, 170, 170, 
+       172, 247, 187, 188, 248, 190, 191, 192, 
+       193, 194, 195, 196, 197, 198, 199, 248, 
+       200, 201, 202, 203, 204, 205, 206, 197, 
+       170, 171, 246, 1, 242, 242, 241, 241, 
+       243, 242, 244, 1, 170, 170, 172, 169, 
+       174, 174, 170, 171, 168, 1, 762, 762, 
+       763, 1, 763, 1, 170, 170, 172, 173, 
+       170, 171, 763, 1, 764, 764, 765, 169, 
+       174, 174, 764, 171, 168, 1, 766, 766, 
+       767, 766, 1, 147, 147, 148, 146, 149, 
+       149, 147, 145, 1, 768, 768, 769, 1, 
+       769, 1, 147, 147, 148, 147, 769, 1, 
+       770, 770, 771, 146, 149, 149, 770, 145, 
+       1, 772, 772, 773, 1, 773, 1, 219, 
+       219, 220, 137, 219, 135, 773, 1, 219, 
+       219, 220, 218, 221, 221, 219, 135, 774, 
+       1, 210, 210, 211, 126, 213, 213, 210, 
+       135, 127, 1, 210, 210, 211, 775, 213, 
+       213, 210, 135, 127, 1, 776, 776, 777, 
+       1, 777, 1, 210, 210, 211, 126, 210, 
+       135, 778, 1, 210, 210, 211, 775, 138, 
+       138, 210, 135, 778, 1, 779, 779, 780, 
+       1, 780, 1, 134, 134, 136, 137, 134, 
+       135, 780, 1, 141, 141, 140, 140, 142, 
+       141, 143, 1, 781, 781, 782, 1, 782, 
+       1, 124, 124, 125, 126, 124, 778, 1, 
+       164, 164, 163, 163, 165, 164, 166, 1, 
+       783, 783, 784, 783, 1, 785, 785, 786, 
+       785, 1, 134, 134, 136, 133, 138, 138, 
+       134, 135, 787, 1, 788, 788, 789, 1, 
+       789, 1, 92, 93, 93, 95, 96, 97, 
+       98, 100, 101, 102, 103, 104, 105, 106, 
+       107, 108, 109, 110, 111, 112, 113, 114, 
+       115, 116, 107, 93, 94, 789, 1, 790, 
+       790, 791, 1, 791, 1, 79, 79, 81, 
+       82, 79, 80, 791, 1, 1, 0
 };
 
 static const short _svg_path_trans_targs_wi[] = {
-       1, 297, 33, 294, 296, 36, 37, 318, 
-       24, 25, 50, 35, 27, 28, 29, 319, 
-       312, 32, 33, 294, 31, 35, 36, 34, 
-       295, 27, 28, 29, 308, 26, 51, 313, 
-       31, 32, 312, 30, 319, 309, 33, 311, 
-       52, 53, 30, 38, 39, 38, 39, 24, 
-       25, 50, 72, 73, 74, 97, 24, 25, 
-       50, 72, 73, 74, 97, 59, 60, 59, 
-       60, 65, 46, 287, 44, 288, 289, 65, 
-       287, 326, 0, 2, 223, 213, 23, 71, 
-       111, 125, 126, 154, 182, 198, 212, 214, 
-       215, 216, 222, 230, 231, 232, 233, 49, 
-       96, 73, 72, 74, 97, 326, 213, 23, 
-       71, 111, 125, 2, 126, 154, 182, 198, 
-       212, 214, 215, 216, 222, 223, 230, 231, 
-       232, 233, 326, 11, 12, 19, 10, 226, 
-       23, 71, 227, 111, 125, 2, 126, 154, 
-       182, 198, 212, 214, 215, 216, 222, 223, 
-       230, 231, 232, 233, 13, 229, 326, 11, 
-       12, 19, 18, 22, 23, 71, 320, 111, 
+       326, 0, 1, 2, 223, 3, 4, 5, 
+       224, 3, 4, 5, 224, 5, 224, 6, 
+       7, 8, 225, 9, 239, 7, 8, 225, 
+       9, 226, 9, 226, 10, 326, 11, 12, 
+       19, 13, 23, 71, 227, 111, 125, 2, 
+       126, 154, 182, 198, 212, 214, 215, 216, 
+       222, 223, 230, 231, 232, 233, 11, 12, 
+       19, 13, 20, 23, 71, 111, 125, 126, 
+       154, 182, 198, 212, 214, 215, 216, 222, 
+       230, 231, 232, 233, 13, 20, 14, 15, 
+       16, 21, 17, 323, 15, 16, 21, 17, 
+       22, 17, 22, 18, 326, 11, 12, 19, 
+       13, 23, 71, 320, 111, 125, 2, 126, 
+       154, 182, 198, 212, 214, 215, 216, 222, 
+       223, 230, 231, 232, 233, 24, 25, 50, 
+       24, 25, 50, 26, 27, 28, 29, 304, 
+       313, 27, 28, 29, 319, 30, 31, 32, 
+       312, 33, 309, 31, 32, 312, 33, 294, 
+       33, 294, 34, 35, 36, 295, 35, 36, 
+       37, 318, 38, 39, 38, 39, 40, 317, 
+       41, 316, 41, 42, 316, 43, 288, 43, 
+       288, 44, 45, 46, 69, 47, 289, 45, 
+       46, 69, 47, 70, 47, 70, 48, 326, 
+       49, 24, 25, 23, 71, 280, 111, 125, 
+       2, 126, 154, 182, 198, 212, 214, 215, 
+       216, 222, 223, 230, 231, 232, 233, 49, 
+       26, 51, 52, 53, 303, 305, 52, 53, 
+       54, 302, 55, 56, 57, 299, 56, 57, 
+       58, 298, 59, 60, 59, 60, 61, 293, 
+       62, 63, 62, 63, 64, 292, 65, 287, 
+       65, 66, 287, 67, 286, 67, 286, 68, 
+       283, 72, 73, 74, 97, 72, 73, 74, 
+       97, 74, 97, 75, 76, 77, 98, 78, 
+       277, 76, 77, 98, 78, 99, 78, 99, 
+       79, 80, 81, 100, 82, 274, 80, 81, 
+       100, 82, 101, 82, 101, 83, 84, 85, 
+       102, 86, 271, 84, 85, 102, 86, 103, 
+       86, 103, 87, 88, 89, 104, 90, 268, 
+       88, 89, 104, 90, 105, 90, 105, 91, 
+       92, 93, 106, 94, 265, 92, 93, 106, 
+       94, 107, 94, 107, 95, 326, 96, 73, 
+       72, 74, 23, 71, 108, 111, 125, 2, 
+       126, 154, 182, 198, 212, 214, 215, 216, 
+       222, 223, 230, 231, 232, 233, 96, 109, 
+       110, 112, 113, 114, 217, 112, 113, 114, 
+       217, 114, 217, 115, 326, 116, 117, 120, 
+       118, 264, 23, 71, 218, 111, 125, 2, 
+       126, 154, 182, 198, 212, 214, 215, 216, 
+       222, 223, 230, 231, 232, 233, 116, 117, 
+       120, 118, 121, 118, 121, 119, 122, 123, 
+       124, 19, 12, 13, 20, 127, 128, 129, 
+       144, 127, 128, 129, 144, 129, 144, 130, 
+       131, 132, 145, 133, 261, 131, 132, 145, 
+       133, 146, 133, 146, 134, 135, 136, 147, 
+       137, 258, 135, 136, 147, 137, 148, 137, 
+       148, 138, 139, 140, 149, 141, 255, 139, 
+       140, 149, 141, 150, 141, 150, 142, 326, 
+       143, 128, 127, 129, 23, 71, 151, 111, 
        125, 2, 126, 154, 182, 198, 212, 214, 
        215, 216, 222, 223, 230, 231, 232, 233, 
-       13, 322, 326, 116, 117, 120, 119, 121, 
-       23, 71, 122, 111, 125, 2, 126, 154, 
-       182, 198, 212, 214, 215, 216, 222, 223, 
-       230, 231, 232, 233, 118, 124, 221, 119, 
-       326, 203, 204, 207, 206, 208, 23, 71, 
-       209, 111, 125, 2, 126, 154, 182, 198, 
+       143, 152, 153, 155, 156, 157, 172, 155, 
+       156, 157, 172, 157, 172, 158, 159, 160, 
+       173, 161, 252, 159, 160, 173, 161, 174, 
+       161, 174, 162, 163, 164, 175, 165, 249, 
+       163, 164, 175, 165, 176, 165, 176, 166, 
+       167, 168, 177, 169, 246, 167, 168, 177, 
+       169, 178, 169, 178, 170, 326, 171, 156, 
+       155, 157, 23, 71, 179, 111, 125, 2, 
+       126, 154, 182, 198, 212, 214, 215, 216, 
+       222, 223, 230, 231, 232, 233, 171, 180, 
+       181, 183, 184, 185, 192, 183, 184, 185, 
+       192, 185, 192, 186, 187, 188, 193, 189, 
+       243, 187, 188, 193, 189, 194, 189, 194, 
+       190, 326, 191, 184, 183, 185, 23, 71, 
+       195, 111, 125, 2, 126, 154, 182, 198, 
        212, 214, 215, 216, 222, 223, 230, 231, 
-       232, 233, 205, 211, 238, 206, 326, 96, 
-       73, 72, 95, 107, 23, 71, 108, 111, 
-       125, 2, 126, 154, 182, 198, 212, 214, 
-       215, 216, 222, 223, 230, 231, 232, 233, 
-       74, 110, 326, 171, 156, 155, 170, 178, 
-       23, 71, 179, 111, 125, 2, 126, 154, 
-       182, 198, 212, 214, 215, 216, 222, 223, 
-       230, 231, 232, 233, 157, 181, 326, 143, 
-       128, 127, 142, 150, 23, 71, 151, 111, 
-       125, 2, 126, 154, 182, 198, 212, 214, 
-       215, 216, 222, 223, 230, 231, 232, 233, 
-       129, 153, 326, 191, 184, 183, 190, 194, 
-       23, 71, 195, 111, 125, 2, 126, 154, 
-       182, 198, 212, 214, 215, 216, 222, 223, 
-       230, 231, 232, 233, 185, 197, 326, 45, 
-       69, 68, 286, 23, 71, 283, 111, 125, 
-       2, 126, 154, 182, 198, 212, 214, 215, 
-       216, 222, 223, 230, 231, 232, 233, 47, 
-       285, 49, 24, 48, 70, 280, 25, 282, 
-       315, 26, 307, 220, 115, 237, 202, 74, 
-       97, 9, 17, 118, 114, 217, 205, 201, 
-       234, 94, 169, 141, 189, 67, 47, 314, 
-       310, 306, 228, 321, 123, 219, 210, 236, 
-       109, 180, 152, 196, 284, 281, 57, 58, 
-       298, 53, 54, 302, 63, 42, 43, 64, 
-       292, 288, 225, 8, 9, 226, 21, 16, 
-       17, 22, 120, 117, 118, 121, 112, 113, 
-       114, 217, 207, 204, 205, 208, 199, 200, 
-       201, 234, 106, 93, 94, 107, 177, 168, 
-       169, 178, 149, 140, 141, 150, 193, 188, 
-       189, 194, 287, 66, 67, 286, 69, 46, 
-       47, 70, 56, 52, 76, 77, 98, 78, 
-       99, 62, 7, 15, 92, 167, 139, 187, 
-       65, 45, 304, 56, 57, 55, 302, 299, 
-       76, 77, 98, 75, 277, 7, 8, 225, 
-       6, 224, 239, 15, 16, 21, 14, 20, 
-       323, 92, 93, 106, 91, 105, 265, 167, 
-       168, 177, 166, 176, 246, 139, 140, 149, 
-       138, 148, 255, 187, 188, 193, 186, 192, 
-       243, 301, 78, 279, 9, 241, 17, 325, 
-       94, 267, 169, 248, 141, 257, 189, 245, 
-       291, 305, 303, 41, 316, 62, 63, 41, 
-       316, 62, 63, 3, 4, 5, 224, 19, 
-       12, 13, 20, 183, 184, 185, 192, 112, 
-       113, 114, 217, 199, 200, 201, 234, 3, 
-       4, 5, 224, 19, 12, 13, 20, 183, 
-       184, 185, 192, 112, 113, 114, 217, 199, 
-       200, 201, 234, 11, 12, 19, 13, 20, 
-       191, 184, 183, 185, 192, 116, 203, 264, 
-       218, 115, 217, 242, 235, 202, 234, 3, 
-       4, 5, 224, 104, 89, 90, 105, 175, 
-       164, 165, 176, 147, 136, 137, 148, 316, 
-       88, 163, 135, 41, 88, 89, 104, 87, 
-       103, 268, 163, 164, 175, 162, 174, 249, 
-       135, 136, 147, 134, 146, 258, 5, 13, 
-       90, 165, 137, 185, 43, 86, 161, 133, 
-       300, 278, 240, 324, 266, 247, 256, 244, 
-       290, 84, 85, 102, 86, 273, 159, 160, 
-       173, 161, 254, 131, 132, 145, 133, 263, 
-       90, 270, 165, 251, 137, 260, 83, 271, 
-       158, 252, 130, 261, 39, 40, 317, 60, 
-       61, 293, 38, 59, 102, 85, 86, 103, 
-       173, 160, 161, 174, 145, 132, 133, 146, 
-       84, 159, 131, 101, 172, 144, 272, 253, 
-       262, 269, 250, 259, 82, 157, 129, 80, 
-       81, 100, 82, 79, 274, 155, 156, 157, 
-       172, 127, 128, 129, 144, 155, 156, 157, 
-       172, 127, 128, 129, 144, 100, 81, 82, 
-       101, 155, 156, 157, 172, 127, 128, 129, 
-       144, 171, 143, 80, 99, 276, 78, 275
+       232, 233, 191, 196, 197, 199, 200, 201, 
+       234, 199, 200, 201, 234, 201, 234, 202, 
+       326, 203, 204, 207, 205, 242, 23, 71, 
+       235, 111, 125, 2, 126, 154, 182, 198, 
+       212, 214, 215, 216, 222, 223, 230, 231, 
+       232, 233, 203, 204, 207, 205, 208, 205, 
+       208, 206, 209, 210, 211, 326, 213, 23, 
+       71, 111, 125, 2, 126, 154, 182, 198, 
+       212, 214, 215, 216, 222, 223, 230, 231, 
+       232, 233, 213, 24, 25, 50, 72, 73, 
+       74, 97, 112, 113, 114, 217, 115, 217, 
+       219, 220, 221, 119, 19, 12, 13, 20, 
+       3, 4, 5, 224, 228, 229, 127, 128, 
+       129, 144, 155, 156, 157, 172, 183, 184, 
+       185, 192, 199, 200, 201, 234, 202, 234, 
+       236, 237, 238, 206, 240, 241, 244, 245, 
+       247, 248, 250, 251, 253, 254, 256, 257, 
+       259, 260, 262, 263, 266, 267, 269, 270, 
+       272, 273, 275, 276, 278, 279, 281, 282, 
+       284, 285, 290, 291, 65, 287, 62, 63, 
+       296, 297, 59, 60, 300, 301, 302, 30, 
+       306, 307, 308, 310, 311, 314, 315, 41, 
+       316, 38, 39, 319, 321, 322, 324, 325
 };
 
 static const unsigned char _svg_path_trans_actions_wi[] = {
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 1, 1, 0, 0, 0, 1, 1, 
-       0, 1, 1, 1, 0, 3, 3, 0, 
-       0, 3, 3, 17, 17, 17, 17, 0, 
-       3, 17, 3, 0, 0, 0, 17, 0, 
-       3, 3, 17, 5, 5, 7, 7, 9, 
-       59, 59, 9, 59, 59, 59, 11, 62, 
-       62, 11, 62, 62, 62, 20, 20, 23, 
-       23, 53, 17, 53, 0, 0, 0, 56, 
-       56, 15, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 1, 0, 1, 1, 65, 13, 13, 
-       13, 13, 13, 13, 13, 13, 13, 13, 
-       13, 13, 13, 13, 13, 13, 13, 13, 
-       13, 13, 72, 26, 68, 26, 0, 0, 
-       26, 26, 0, 26, 26, 26, 26, 26, 
+       15, 0, 0, 0, 0, 9, 59, 59, 
+       59, 0, 1, 1, 1, 0, 0, 0, 
+       3, 17, 3, 17, 0, 0, 1, 0, 
+       1, 1, 0, 0, 0, 72, 26, 68, 
+       26, 68, 26, 26, 0, 26, 26, 26, 
        26, 26, 26, 26, 26, 26, 26, 26, 
-       26, 26, 26, 26, 68, 0, 80, 29, 
-       76, 29, 0, 0, 29, 29, 0, 29, 
-       29, 29, 29, 29, 29, 29, 29, 29, 
+       26, 26, 26, 26, 26, 26, 0, 1, 
+       0, 1, 1, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 3, 
+       17, 3, 17, 0, 0, 1, 0, 1, 
+       1, 0, 0, 0, 80, 29, 76, 29, 
+       76, 29, 29, 0, 29, 29, 29, 29, 
        29, 29, 29, 29, 29, 29, 29, 29, 
-       76, 0, 88, 32, 84, 32, 0, 0, 
-       32, 32, 0, 32, 32, 32, 32, 32, 
-       32, 32, 32, 32, 32, 32, 32, 32, 
-       32, 32, 32, 32, 84, 0, 84, 84, 
-       96, 35, 92, 35, 0, 0, 35, 35, 
-       0, 35, 35, 35, 35, 35, 35, 35, 
-       35, 35, 35, 35, 35, 35, 35, 35, 
-       35, 35, 92, 0, 92, 92, 104, 38, 
-       100, 38, 0, 0, 38, 38, 0, 38, 
-       38, 38, 38, 38, 38, 38, 38, 38, 
+       29, 29, 29, 29, 29, 9, 59, 59, 
+       0, 1, 1, 0, 3, 3, 17, 17, 
+       0, 0, 0, 1, 1, 0, 3, 17, 
+       3, 17, 0, 0, 1, 0, 1, 1, 
+       0, 0, 0, 3, 3, 0, 0, 0, 
+       0, 0, 7, 7, 0, 0, 0, 0, 
+       7, 7, 0, 1, 0, 1, 1, 0, 
+       0, 0, 3, 17, 3, 17, 0, 0, 
+       1, 0, 1, 1, 0, 0, 0, 136, 
+       50, 50, 132, 50, 50, 0, 50, 50, 
+       50, 50, 50, 50, 50, 50, 50, 50, 
+       50, 50, 50, 50, 50, 50, 50, 0, 
+       17, 17, 3, 3, 17, 0, 0, 0, 
+       1, 1, 0, 3, 3, 0, 0, 0, 
+       1, 1, 23, 23, 0, 0, 0, 0, 
+       7, 7, 0, 0, 1, 1, 56, 56, 
+       0, 1, 0, 1, 1, 0, 0, 0, 
+       0, 9, 59, 59, 59, 0, 1, 1, 
+       1, 0, 0, 0, 3, 17, 3, 17, 
+       0, 0, 1, 0, 1, 1, 0, 0, 
+       0, 3, 17, 3, 17, 0, 0, 1, 
+       0, 1, 1, 0, 0, 0, 3, 17, 
+       3, 17, 0, 0, 1, 0, 1, 1, 
+       0, 0, 0, 3, 17, 3, 17, 0, 
+       0, 1, 0, 1, 1, 0, 0, 0, 
+       3, 17, 3, 17, 0, 0, 1, 0, 
+       1, 1, 0, 0, 0, 104, 38, 100, 
+       38, 100, 38, 38, 0, 38, 38, 38, 
        38, 38, 38, 38, 38, 38, 38, 38, 
-       100, 0, 112, 41, 108, 41, 0, 0, 
-       41, 41, 0, 41, 41, 41, 41, 41, 
-       41, 41, 41, 41, 41, 41, 41, 41, 
-       41, 41, 41, 41, 108, 0, 120, 44, 
-       116, 44, 0, 0, 44, 44, 0, 44, 
+       38, 38, 38, 38, 38, 38, 0, 0, 
+       0, 9, 59, 59, 59, 0, 1, 1, 
+       1, 0, 0, 0, 88, 32, 84, 32, 
+       84, 84, 32, 32, 0, 32, 32, 32, 
+       32, 32, 32, 32, 32, 32, 32, 32, 
+       32, 32, 32, 32, 32, 32, 0, 1, 
+       0, 1, 1, 0, 0, 0, 0, 0, 
+       0, 9, 59, 59, 59, 9, 59, 59, 
+       59, 0, 1, 1, 1, 0, 0, 0, 
+       3, 17, 3, 17, 0, 0, 1, 0, 
+       1, 1, 0, 0, 0, 3, 17, 3, 
+       17, 0, 0, 1, 0, 1, 1, 0, 
+       0, 0, 3, 17, 3, 17, 0, 0, 
+       1, 0, 1, 1, 0, 0, 0, 120, 
+       44, 116, 44, 116, 44, 44, 0, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
        44, 44, 44, 44, 44, 44, 44, 44, 
-       116, 0, 128, 47, 124, 47, 0, 0, 
-       47, 47, 0, 47, 47, 47, 47, 47, 
+       0, 0, 0, 9, 59, 59, 59, 0, 
+       1, 1, 1, 0, 0, 0, 3, 17, 
+       3, 17, 0, 0, 1, 0, 1, 1, 
+       0, 0, 0, 3, 17, 3, 17, 0, 
+       0, 1, 0, 1, 1, 0, 0, 0, 
+       3, 17, 3, 17, 0, 0, 1, 0, 
+       1, 1, 0, 0, 0, 112, 41, 108, 
+       41, 108, 41, 41, 0, 41, 41, 41, 
+       41, 41, 41, 41, 41, 41, 41, 41, 
+       41, 41, 41, 41, 41, 41, 0, 0, 
+       0, 9, 59, 59, 59, 0, 1, 1, 
+       1, 0, 0, 0, 3, 17, 3, 17, 
+       0, 0, 1, 0, 1, 1, 0, 0, 
+       0, 128, 47, 124, 47, 124, 47, 47, 
+       0, 47, 47, 47, 47, 47, 47, 47, 
        47, 47, 47, 47, 47, 47, 47, 47, 
-       47, 47, 47, 47, 124, 0, 136, 3, 
-       3, 0, 0, 50, 50, 0, 50, 50, 
-       50, 50, 50, 50, 50, 50, 50, 50, 
-       50, 50, 50, 50, 50, 50, 50, 17, 
-       0, 50, 50, 0, 0, 0, 132, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 1, 
-       1, 0, 1, 1, 0, 1, 1, 1, 
-       1, 1, 0, 1, 1, 1, 0, 1, 
-       1, 1, 0, 1, 1, 1, 0, 1, 
-       1, 1, 0, 1, 1, 1, 0, 1, 
-       1, 1, 0, 1, 1, 1, 0, 1, 
-       1, 1, 0, 1, 1, 1, 0, 1, 
-       1, 1, 0, 1, 1, 1, 0, 1, 
-       1, 1, 0, 0, 0, 1, 0, 1, 
-       1, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 17, 3, 3, 0, 0, 0, 
-       3, 17, 3, 0, 0, 3, 17, 3, 
-       0, 0, 0, 3, 17, 3, 0, 0, 
-       0, 3, 17, 3, 0, 0, 0, 3, 
-       17, 3, 0, 0, 0, 3, 17, 3, 
-       0, 0, 0, 3, 17, 3, 0, 0, 
-       0, 0, 17, 0, 17, 0, 17, 0, 
-       17, 0, 17, 0, 17, 0, 17, 0, 
-       0, 0, 17, 5, 5, 5, 5, 7, 
-       7, 7, 7, 9, 59, 59, 59, 9, 
-       59, 59, 59, 9, 59, 59, 59, 9, 
-       59, 59, 59, 9, 59, 59, 59, 11, 
-       62, 62, 62, 11, 62, 62, 62, 11, 
-       62, 62, 62, 11, 62, 62, 62, 11, 
-       62, 62, 62, 0, 1, 0, 1, 1, 
-       0, 1, 0, 1, 1, 0, 0, 84, 
-       0, 84, 84, 92, 0, 92, 92, 0, 
-       1, 1, 1, 0, 1, 1, 1, 0, 
-       1, 1, 1, 0, 1, 1, 1, 0, 
-       0, 0, 0, 0, 3, 17, 3, 0, 
-       0, 0, 3, 17, 3, 0, 0, 0, 
-       3, 17, 3, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
+       47, 47, 0, 0, 0, 9, 59, 59, 
+       59, 0, 1, 1, 1, 0, 0, 0, 
+       96, 35, 92, 35, 92, 92, 35, 35, 
+       0, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 35, 35, 35, 35, 35, 35, 
+       35, 35, 0, 1, 0, 1, 1, 0, 
+       0, 0, 0, 0, 0, 65, 13, 13, 
+       13, 13, 13, 13, 13, 13, 13, 13, 
+       13, 13, 13, 13, 13, 13, 13, 13, 
+       13, 13, 0, 11, 62, 62, 11, 62, 
+       62, 62, 11, 62, 62, 62, 84, 84, 
+       0, 0, 84, 84, 11, 62, 62, 62, 
+       11, 62, 62, 62, 0, 0, 11, 62, 
+       62, 62, 11, 62, 62, 62, 11, 62, 
+       62, 62, 11, 62, 62, 62, 92, 92, 
+       0, 0, 92, 92, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 3, 17, 3, 17, 0, 3, 17, 
-       3, 17, 0, 3, 17, 3, 17, 0, 
-       17, 0, 17, 0, 17, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 1, 1, 1, 
-       0, 1, 1, 1, 0, 1, 1, 1, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 3, 
-       17, 3, 17, 0, 0, 9, 59, 59, 
-       59, 9, 59, 59, 59, 11, 62, 62, 
-       62, 11, 62, 62, 62, 0, 1, 1, 
-       1, 0, 1, 1, 1, 0, 1, 1, 
-       1, 0, 0, 0, 0, 0, 0, 0
+       0, 0, 0, 0, 53, 53, 5, 5, 
+       0, 0, 20, 20, 0, 0, 0, 17, 
+       0, 0, 17, 0, 0, 0, 0, 5, 
+       5, 5, 5, 0, 0, 0, 0, 0
 };
 
-static const int svg_path_start = 0;
-
+static const int svg_path_start = 1;
 static const int svg_path_first_final = 326;
 
-#line 133 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+static const int svg_path_en_main = 1;
+
+#line 133 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
 
 
 void Parser::parse(char const *str)
@@ -1369,10 +1370,12 @@ throw(SVGPathParseError)
     _reset();
 
     
-#line 1373 "/home/mental/trees/lib2geom/src/svg-path-parser.cpp"
+#line 1374 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.cpp"
        {
        cs = svg_path_start;
        }
+
+#line 1379 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.cpp"
        {
        int _klen;
        unsigned int _trans;
@@ -1380,9 +1383,9 @@ throw(SVGPathParseError)
        unsigned int _nacts;
        const char *_keys;
 
-_resume:
-       if ( cs == 1 )
+       if ( cs == 0 )
                goto _out;
+_resume:
        _keys = _svg_path_trans_keys + _svg_path_key_offsets[cs];
        _trans = _svg_path_index_offsets[cs];
 
@@ -1445,13 +1448,13 @@ _match:
                switch ( *_acts++ )
                {
        case 0:
-#line 145 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 145 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             start = p;
         }
        break;
        case 1:
-#line 149 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 149 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             char const *end=p;
             std::string buf(start, end);
@@ -1460,55 +1463,55 @@ _match:
         }
        break;
        case 2:
-#line 156 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 156 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _push(1.0);
         }
        break;
        case 3:
-#line 160 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 160 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _push(0.0);
         }
        break;
        case 4:
-#line 164 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 164 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _absolute = true;
         }
        break;
        case 5:
-#line 168 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 168 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _absolute = false;
         }
        break;
        case 6:
-#line 172 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 172 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _moveTo(_pop_point());
         }
        break;
        case 7:
-#line 176 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 176 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _lineTo(_pop_point());
         }
        break;
        case 8:
-#line 180 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 180 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _lineTo(Point(_pop_coord(X), _current[Y]));
         }
        break;
        case 9:
-#line 184 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 184 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _lineTo(Point(_current[X], _pop_coord(Y)));
         }
        break;
        case 10:
-#line 188 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 188 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             Point p = _pop_point();
             Point c1 = _pop_point();
@@ -1517,7 +1520,7 @@ _match:
         }
        break;
        case 11:
-#line 195 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 195 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             Point p = _pop_point();
             Point c1 = _pop_point();
@@ -1525,7 +1528,7 @@ _match:
         }
        break;
        case 12:
-#line 201 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 201 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             Point p = _pop_point();
             Point c = _pop_point();
@@ -1533,14 +1536,14 @@ _match:
         }
        break;
        case 13:
-#line 207 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 207 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             Point p = _pop_point();
             _quadTo(_quad_tangent, p);
         }
        break;
        case 14:
-#line 212 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 212 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             Point point = _pop_point();
             bool sweep = _pop_flag();
@@ -1553,25 +1556,27 @@ _match:
         }
        break;
        case 15:
-#line 223 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 223 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {
             _closePath();
         }
        break;
        case 16:
-#line 360 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 360 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
        {goto _out;}
        break;
-#line 1566 "/home/mental/trees/lib2geom/src/svg-path-parser.cpp"
+#line 1569 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.cpp"
                }
        }
 
 _again:
+       if ( cs == 0 )
+               goto _out;
        p += 1;
        goto _resume;
        _out: {}
        }
-#line 370 "/home/mental/trees/lib2geom/src/svg-path-parser.rl"
+#line 370 "/opt/shared/work/programming/eclipse/eclipse_3.3/lib2geom/src/svg-path-parser.rl"
 
 
     if ( cs < svg_path_first_final ) {