[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

zimmermann at webkit.org zimmermann at webkit.org
Wed Dec 22 16:10:49 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 673f822208e97ab9599edc44c4b0126e121b4a54
Author: zimmermann at webkit.org <zimmermann at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Nov 19 12:54:11 2010 +0000

    2010-11-19  Nikolas Zimmermann  <nzimmermann at rim.com>
    
            Reviewed by Dirk Schulze.
    
            Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
            https://bugs.webkit.org/show_bug.cgi?id=49580
    
            SVGPathElement.cloneNode loses generated pathSegList
            https://bugs.webkit.org/show_bug.cgi?id=43388
    
            SVG Path elements are not correctly updated through pathSegList manipulation on relative values
            https://bugs.webkit.org/show_bug.cgi?id=30219
    
            Changing an SVGPathSeg does not update a following Smooth Cubic Curveto
            https://bugs.webkit.org/show_bug.cgi?id=19741
    
            SVGPathElement should only build SVGPathSeg* list on demand
            https://bugs.webkit.org/show_bug.cgi?id=10827
    
            Tests: svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg
                   svg/dom/SVGPathSegList-appendItem.xhtml
                   svg/dom/SVGPathSegList-clear-and-initialize.xhtml
                   svg/dom/SVGPathSegList-cloning.html
                   svg/dom/SVGPathSegList-insertItemBefore.xhtml
                   svg/dom/SVGPathSegList-removeItem.xhtml
                   svg/dom/SVGPathSegList-replaceItem.xhtml
                   svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml
                   svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml
                   svg/dom/SVGPathSegList-segment-modification.svg
    
            Convert SVGPathSeg*/SVGPathSegList to the new SVG(Animated)PropertyTearOff concept.
            Unlike all other SVG* types that use the SVGPropertyTearOff concept, SVGPathSegs are already refcounted,
            and don't need to be wrapped in SVGPropertyTearOff objects. The consequence is that SVGPathSegs need to track
            themselves to which list and path element they belong. Introduce new SVGAnimatedPathSegListPropertyTearOff
            and SVGPathSegListPropertyTearOff classes, that encapsulate the special needed for SVGPathSegList.
    
            Each SVGPathSeg now needs to store a RefPtr<SVGPathElement> - this makes it impossible to use SVGPathSegList
            to represent the 'd' attribute internally in SVGPathElement. SVGPathSegList is now only used in the SVG DOM bindings
            if someone explicitely requests 'pathElement.pathSegList' (eg. via JS). Switch to use SVGPathByteStream to store
            the 'd' attribute data in SVGPathElement, which is much more compact, and less memory intensive.
            Dirk already prepared SVGPathParserFactory some months ago, which allows easy conversion between
            String/Path/SVGPathSegList/SVGPathByteStream in all directions, including normalizing the lists, when requested.
    
            As consequence SVGPathSegList is now only built on demand, when explicitely requested. Using the SVGAnimatedProperty
            concept gives us 'd' attribute <-> SVGPathSegList synchronization for free, fixing several bugs, listed above.
    
            * Android.mk: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
            * CMakeLists.txt: Ditto.
            * DerivedSources.make: Remove SVGAnimatedPathData IDL generation.
            * GNUmakefile.am: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
            * WebCore.gyp/WebCore.gyp: Remove SVGAnimatedPathData IDL generation.
            * WebCore.gypi: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
            * WebCore.order: Remove no-longer existant SVGAnimatedPathData symbols.
            * WebCore.pro:  Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp / JSSVGPathSegCustom.* from build.
            * WebCore.vcproj/WebCore.vcproj: Ditto.
            * WebCore.xcodeproj/project.pbxproj: Ditto.
            * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGPathSegCustom.cpp from build.
            * bindings/js/JSDOMBinding.cpp: Adapt to toJS() changes, remove context parameter.
            (WebCore::setDOMException):
            * bindings/js/JSDOMBinding.h: Remove obsolete CREATE_SVG_OBJECT_WRAPPER macro, the context parameter is not existant anymore.
            * bindings/js/JSSVGPathSegCustom.cpp: Replace CREATE_SVG_OBJECT_WRAPPER by CREATE_DOM_OBJECT_WRAPPER. Remove context parameter/handling.
            (WebCore::toJS):
            * bindings/js/JSSVGPathSegListCustom.cpp: Removed.
            * bindings/scripts/CodeGenerator.pm: Map 'SVGPathSegList' IDL type to SVG 'SVGPathSegListPropertyTearOff' native type.
            * bindings/scripts/CodeGeneratorJS.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages. Handle SVGPathSegListPropertyTearOff.
            * bindings/scripts/CodeGeneratorObjC.pm: Handle SVGPathSegListPropertyTearOff.
            * bindings/scripts/CodeGeneratorV8.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages.
            * rendering/SVGRenderTreeAsText.cpp: Build path string from byte stream, not path segment list.
            (WebCore::operator<<):
            * svg/SVGAllInOne.cpp: Remove obsolete cpp files.
            * svg/SVGAnimatedPathData.cpp: Removed.
            * svg/SVGAnimatedPathData.h: Removed.
            * svg/SVGAnimatedPathData.idl: Removed.
            * svg/SVGPathElement.cpp: Build SVGPathList on demand. Use SVGPathByteStream to parse/store the 'd' attribute content.
            (WebCore::SVGPathElement::SVGPathElement):
            (WebCore::SVGPathElement::getPathSegAtLength): Use SVGPathByteStream, not SVGPathSegList to determine the getPathSegAtLength() information.
            (WebCore::SVGPathElement::createSVGPathSegClosePath): Pass SVGPathElement to SVGPathSeg and a SVGPathSegRole parameter and store it to track the list origin.
            (WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegMovetoRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegLinetoRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegArcAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegArcRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Ditto.
            (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Ditto.
            (WebCore::SVGPathElement::parseMappedAttribute): Build SVGPathByteStream from 'd' attribute, not a SVGPathSegList.
            (WebCore::SVGPathElement::svgAttributeChanged): If a SVGPathSegList object has been built, synchronize it with the 'd' attribute.
            (WebCore::SVGPathElement::synchronizeProperty): Synchronize 'd' attribute with the SVGPathSegList, if needed.
            (WebCore::SVGPathElement::synchronizeD): Added.
            (WebCore::SVGPathElement::pathSegList): Use same trick as in SVGPolyElement to expose the 'pathSegList' / 'animatedPathSegList' object to the SVG DOM bindings.
            (WebCore::SVGPathElement::normalizedPathSegList): Ditto.
            (WebCore::SVGPathElement::animatedPathSegList): Ditto.
            (WebCore::SVGPathElement::animatedNormalizedPathSegList): Ditto.
            (WebCore::SVGPathElement::toPathData): Build 'Path' object from SVGPathByteStream, not from SVGPathSegList.
            (WebCore::SVGPathElement::pathSegListChanged): Used to synchronize the SVGPathSegLists and the d attribute, as well as any changes from any SVGPathSeg associated with this SVGPathElement.
            * svg/SVGPathElement.h: Add new accessors...
            (WebCore::SVGPathElement::pathByteStream): ... needed by SVGRenderTreeAsText.
            (WebCore::SVGPathElement::animatablePathSegList): ... needed by SVGPathSegListPropertyTearOff.
            * svg/SVGPathElement.idl: Merge SVGAnimatedPathData interface into SVGPathElement.
            * svg/SVGPathParserFactory.cpp: Cleanup SVGPathParserFactory, remove obsolete methods, now that SVGPathElement switched to using SVGPathByteStream internally.
            (WebCore::globalSVGPathSegListBuilder):
            (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromSVGPathSegList):
            (WebCore::SVGPathParserFactory::buildPathFromByteStream):
            (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
            (WebCore::SVGPathParserFactory::buildStringFromSVGPathSegList):
            (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
            (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
            (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathByteStream):
            * svg/SVGPathParserFactory.h:
            * svg/SVGPathSeg.cpp: Removed.
            * svg/SVGPathSeg.h: Add new SVGPathSegRole enum, identifying to which list a path segment belongs.
            (WebCore::SVGPathSeg::SVGPathSeg):
            * svg/SVGPathSeg.idl: Reindented.
            * svg/SVGPathSegArc.cpp: Removed.
            * svg/SVGPathSegArc.h: All setters now call the commitChange() method.
            * svg/SVGPathSegArcAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegArcRel.idl: Ditto.
            * svg/SVGPathSegClosePath.cpp: Removed.
            * svg/SVGPathSegClosePath.h:
            * svg/SVGPathSegCurvetoCubic.cpp: Removed.
            * svg/SVGPathSegCurvetoCubic.h: All setters now call the commitChange() method.
            * svg/SVGPathSegCurvetoCubicAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegCurvetoCubicRel.idl: Ditto.
            * svg/SVGPathSegCurvetoCubicSmooth.cpp: Removed.
            * svg/SVGPathSegCurvetoCubicSmooth.h: All setters now call the commitChange() method.
            * svg/SVGPathSegCurvetoCubicSmoothAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegCurvetoCubicSmoothRel.idl: Ditto.
            * svg/SVGPathSegCurvetoQuadratic.cpp: Removed.
            * svg/SVGPathSegCurvetoQuadratic.h: All setters now call the commitChange() method.
            * svg/SVGPathSegCurvetoQuadraticAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegCurvetoQuadraticRel.idl: Ditto.
            * svg/SVGPathSegCurvetoQuadraticSmooth.cpp: Removed.
            * svg/SVGPathSegCurvetoQuadraticSmooth.h: All setters now call the commitChange() method.
            * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl: Ditto.
            * svg/SVGPathSegLineto.cpp: Removed.
            * svg/SVGPathSegLineto.h: All setters now call the commitChange() method.
            * svg/SVGPathSegLinetoAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegLinetoHorizontal.cpp: Removed.
            * svg/SVGPathSegLinetoHorizontal.h: All setters now call the commitChange() method.
            * svg/SVGPathSegLinetoHorizontalAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegLinetoHorizontalRel.idl: Ditto.
            * svg/SVGPathSegLinetoRel.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegLinetoVertical.cpp: Removed.
            * svg/SVGPathSegLinetoVertical.h: All setters now call the commitChange() method.
            * svg/SVGPathSegLinetoVerticalAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegLinetoVerticalRel.idl: Ditto.
            * svg/SVGPathSegList.cpp: Switch from SVGList<RefPtr<SVGPathSeg> > to a plain Vector<RefPtr<SVGPathSeg> >.
            (WebCore::SVGPathSegList::valueAsString): Utilize SVGPathParserFactory to build a String from a SVGPathSegList.
            (WebCore::SVGPathSegList::commitChange): Call SVGPathElement::pathSegListChanged().
            * svg/SVGPathSegList.h:
            (WebCore::SVGPathSegList::SVGPathSegList):
            * svg/SVGPathSegList.idl: Remove [JSCCustom] flags, no longer needed.
            * svg/SVGPathSegListBuilder.cpp: Adapt to SVGPathSegList API changes.
            (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
            (WebCore::SVGPathSegListBuilder::moveTo):
            (WebCore::SVGPathSegListBuilder::lineTo):
            (WebCore::SVGPathSegListBuilder::lineToHorizontal):
            (WebCore::SVGPathSegListBuilder::lineToVertical):
            (WebCore::SVGPathSegListBuilder::curveToCubic):
            (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
            (WebCore::SVGPathSegListBuilder::curveToQuadratic):
            (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
            (WebCore::SVGPathSegListBuilder::arcTo):
            (WebCore::SVGPathSegListBuilder::closePath):
            * svg/SVGPathSegListBuilder.h: Ditto.
            (WebCore::SVGPathSegListBuilder::setCurrentSVGPathElement):
            (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList):
            (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegRole):
            (WebCore::SVGPathSegListBuilder::cleanup):
            * svg/SVGPathSegListSource.cpp: Ditto.
            (WebCore::SVGPathSegListSource::SVGPathSegListSource):
            (WebCore::SVGPathSegListSource::parseSVGSegmentType):
            (WebCore::SVGPathSegListSource::nextCommand):
            (WebCore::SVGPathSegListSource::parseMoveToSegment):
            (WebCore::SVGPathSegListSource::parseLineToSegment):
            (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
            * svg/SVGPathSegListSource.h: Ditto.
            (WebCore::SVGPathSegListSource::create):
            * svg/SVGPathSegMoveto.cpp: Removed.
            * svg/SVGPathSegMoveto.h: All setters now call the commitChange() method.
            * svg/SVGPathSegMovetoAbs.idl: Enable StrictTypeChecking.
            * svg/SVGPathSegMovetoRel.idl: Ditto.
            * svg/SVGPathSegWithContext.h: Added. This is the new base class for all SVGPathSeg derived types, that's associated with a SVGPathElement and a 'role' (normalized/unaltered segment list).
            (WebCore::SVGPathSegWithContext::SVGPathSegWithContext):
            (WebCore::SVGPathSegWithContext::animatedProperty):
            (WebCore::SVGPathSegWithContext::setContextAndRole):
            (WebCore::SVGPathSegWithContext::commitChange):
            (WebCore::SVGPathSegSingleCoordinate::x):
            (WebCore::SVGPathSegSingleCoordinate::setX):
            (WebCore::SVGPathSegSingleCoordinate::y):
            (WebCore::SVGPathSegSingleCoordinate::setY):
            (WebCore::SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate):
            * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Added.
            (WebCore::SVGAnimatedPathSegListPropertyTearOff::baseVal):
            (WebCore::SVGAnimatedPathSegListPropertyTearOff::animVal):
            (WebCore::SVGAnimatedPathSegListPropertyTearOff::removeItemFromList):
            (WebCore::SVGAnimatedPathSegListPropertyTearOff::create):
            (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
            * svg/properties/SVGPathSegListPropertyTearOff.cpp: Added.
            (WebCore::SVGPathSegListPropertyTearOff::clear): Added in the cpp file, not in the header, as it needs access to SVGPathSegWithContext, which we can't include from the header.
            (WebCore::SVGPathSegListPropertyTearOff::getItem): Ditto.
            (WebCore::SVGPathSegListPropertyTearOff::removeItem): Ditto.
            (WebCore::SVGPathSegListPropertyTearOff::contextElement): Needs access to SVGPathElement, that's why it lives in the cpp file.
            (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemValue): Needs access to SVGPathSegWithContext.
            * svg/properties/SVGPathSegListPropertyTearOff.h: Added.
            (WebCore::SVGPathSegListPropertyTearOff::create):
            (WebCore::SVGPathSegListPropertyTearOff::removeItemFromList):
            (WebCore::SVGPathSegListPropertyTearOff::numberOfItems):
            (WebCore::SVGPathSegListPropertyTearOff::initialize):
            (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
            (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
            (WebCore::SVGPathSegListPropertyTearOff::appendItem):
            (WebCore::SVGPathSegListPropertyTearOff::SVGPathSegListPropertyTearOff):
            (WebCore::SVGPathSegListPropertyTearOff::commitChange):
            (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemWrapper):
    
    2010-11-19  Nikolas Zimmermann  <nzimmermann at rim.com>
    
            Reviewed by Dirk Schulze.
    
            Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
            https://bugs.webkit.org/show_bug.cgi?id=49580
    
            Add several new tests covering SVGPathSegList usage.
    
            * platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.checksum: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.png: Added.
            * platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.txt: Added.
            * platform/mac/svg/custom/svg-curve-with-relative-cordinates-expected.txt:
            * platform/mac/svg/dom/SVGPathSegList-appendItem-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-appendItem-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-cloning-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-cloning-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-cloning-expected.txt: Added.
            * platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-removeItem-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-removeItem-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.txt: Added.
            * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.checksum: Added.
            * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.png: Added.
            * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.txt: Added.
            * svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg: Added.
            * svg/dom/SVGPathSegList-appendItem-expected.txt: Added.
            * svg/dom/SVGPathSegList-appendItem.xhtml: Added.
            * svg/dom/SVGPathSegList-clear-and-initialize-expected.txt: Added.
            * svg/dom/SVGPathSegList-clear-and-initialize.xhtml: Added.
            * svg/dom/SVGPathSegList-cloning.html: Added.
            * svg/dom/SVGPathSegList-insertItemBefore-expected.txt: Added.
            * svg/dom/SVGPathSegList-insertItemBefore.xhtml: Added.
            * svg/dom/SVGPathSegList-removeItem-expected.txt: Added.
            * svg/dom/SVGPathSegList-removeItem.xhtml: Added.
            * svg/dom/SVGPathSegList-replaceItem-expected.txt: Added.
            * svg/dom/SVGPathSegList-replaceItem.xhtml: Added.
            * svg/dom/SVGPathSegList-segment-modification.svg: Added.
            * svg/dom/SVGPathSegList-xml-dom-synchronization-expected.txt: Added.
            * svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml: Added.
            * svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml: Added.
            * svg/dom/fuzz-path-parser-expected.txt:
            * svg/dom/path-parser-expected.txt:
            * svg/dom/script-tests/path-parser.js:
            ():
            * svg/dom/svglist-exception-on-out-bounds-error-expected.txt:
            * svg/dom/svglist-exception-on-out-bounds-error.html:
            * svg/dom/svgpath-out-of-bounds-getPathSeg-expected.txt:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72381 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index f41aaad..734b63c 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,61 @@
+2010-11-19  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=49580
+
+        Add several new tests covering SVGPathSegList usage.
+
+        * platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.checksum: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.png: Added.
+        * platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.txt: Added.
+        * platform/mac/svg/custom/svg-curve-with-relative-cordinates-expected.txt:
+        * platform/mac/svg/dom/SVGPathSegList-appendItem-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-appendItem-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-cloning-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-cloning-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-cloning-expected.txt: Added.
+        * platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-removeItem-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-removeItem-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.txt: Added.
+        * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.checksum: Added.
+        * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.png: Added.
+        * platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.txt: Added.
+        * svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg: Added.
+        * svg/dom/SVGPathSegList-appendItem-expected.txt: Added.
+        * svg/dom/SVGPathSegList-appendItem.xhtml: Added.
+        * svg/dom/SVGPathSegList-clear-and-initialize-expected.txt: Added.
+        * svg/dom/SVGPathSegList-clear-and-initialize.xhtml: Added.
+        * svg/dom/SVGPathSegList-cloning.html: Added.
+        * svg/dom/SVGPathSegList-insertItemBefore-expected.txt: Added.
+        * svg/dom/SVGPathSegList-insertItemBefore.xhtml: Added.
+        * svg/dom/SVGPathSegList-removeItem-expected.txt: Added.
+        * svg/dom/SVGPathSegList-removeItem.xhtml: Added.
+        * svg/dom/SVGPathSegList-replaceItem-expected.txt: Added.
+        * svg/dom/SVGPathSegList-replaceItem.xhtml: Added.
+        * svg/dom/SVGPathSegList-segment-modification.svg: Added.
+        * svg/dom/SVGPathSegList-xml-dom-synchronization-expected.txt: Added.
+        * svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml: Added.
+        * svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml: Added.
+        * svg/dom/fuzz-path-parser-expected.txt:
+        * svg/dom/path-parser-expected.txt:
+        * svg/dom/script-tests/path-parser.js:
+        ():
+        * svg/dom/svglist-exception-on-out-bounds-error-expected.txt:
+        * svg/dom/svglist-exception-on-out-bounds-error.html:
+        * svg/dom/svgpath-out-of-bounds-getPathSeg-expected.txt:
+
 2010-11-19  Alejandro G. Castro  <alex at igalia.com>
 
         Unreviewed, GTK expectations update after r72347
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.checksum b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.checksum
new file mode 100644
index 0000000..856b928
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.checksum
@@ -0,0 +1 @@
+d0ddb1998d90b5296942f0e72b6b1061
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.png
new file mode 100644
index 0000000..252ef68
Binary files /dev/null and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.txt b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.txt
new file mode 100644
index 0000000..1feb275
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/paths-dom-02-f-expected.txt
@@ -0,0 +1,18 @@
+CONSOLE MESSAGE: line 267: Error: Problem parsing d=""
+layer at (0,0) size 480x360
+  RenderView at (0,0) size 480x360
+layer at (0,0) size 480x360
+  RenderSVGRoot {svg} at (0,0) size 480x360
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+    RenderSVGContainer {g} at (119,61) size 242x239
+      RenderSVGPath {path} at (119,61) size 242x239 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#0000FF]}] [data="M 250.261 208.191 C 256 300 224 300 229.739 208.191 C 175.122 282.21 150.609 261.641 214.019 195 C 124.601 216.595 119.045 185.081 210.456 174.791 C 128.077 133.856 144.077 106.144 220.716 157.019 C 183.923 72.7092 213.993 61.7646 240 150 C 266.007 61.7646 296.077 72.7092 259.284 157.019 C 335.923 106.144 351.923 133.856 269.544 174.791 C 360.955 185.081 355.399 216.595 265.981 195 C 329.391 261.641 304.878 282.21 250.261 208.191 Z"]
+    RenderSVGContainer {g} at (10,310) size 231x37
+      RenderSVGText {text} at (10,310) size 231x37 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 231x37
+          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 231.00: "$Revision: 1.5 $"
+    RenderSVGPath {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
+    RenderSVGContainer {g} at (0,0) size 480x24
+      RenderSVGPath {rect} at (0,0) size 480x22 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [x=1.00] [y=1.00] [width=478.00] [height=20.00]
+      RenderSVGText {text} at (207,0) size 66x23 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,0) size 66x23
+          chunk 1 (middle anchor) text run 1 at (207.00,18.00) startOffset 0 endOffset 5 width 66.00: "DRAFT"
diff --git a/LayoutTests/platform/mac/svg/custom/svg-curve-with-relative-cordinates-expected.txt b/LayoutTests/platform/mac/svg/custom/svg-curve-with-relative-cordinates-expected.txt
index cf5dae3..249ce92 100644
--- a/LayoutTests/platform/mac/svg/custom/svg-curve-with-relative-cordinates-expected.txt
+++ b/LayoutTests/platform/mac/svg/custom/svg-curve-with-relative-cordinates-expected.txt
@@ -8,4 +8,4 @@ layer at (0,0) size 800x600
           text run at (0,0) width 349: "Here is an html paragraph. And below is a svg drawing"
       RenderBlock {DIV} at (0,34) size 784x400
         RenderSVGRoot {svg} at (48,57) size 340x310
-          RenderSVGPath {path} at (48,57) size 340x310 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M 14.8649 27.5434 C 10.9361 23.4486 5.53039 20.9307 2.16163 16.2739 C 0.1954 13.4713 -0.27051 9.80295 0.40252 6.50142 C 1.50231 3.03806 4.88027 0.20151 8.61522 0.38648 C 11.4904 0.13255 14.1594 2.02987 15.543 4.44105 c 0.37594 0.23175 0.35941 2.21266 0.71868 1.07327 C 17.3118 2.6047 20.1552 0.48976 23.2581 0.39544 C 27.3718 0.07861 31.5625 3.22656 31.9769 7.4138 c 0.46508 3.14678 -0.04068 6.54082 -2.04024 9.1006 c -2.92245 3.93336 -7.42165 6.18284 -10.9046 9.53931 c -1.0882 0.79363 -2.28426 2.46524 -3.12799 2.94243 c -0.28088 -0.52741 -0.6413 -1.00829 -1.03915 -1.45272 Z"]
+          RenderSVGPath {path} at (48,57) size 340x310 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M 14.8649 27.5434 C 10.9361 23.4486 5.53039 20.9307 2.16163 16.2739 C 0.1954 13.4713 -0.27051 9.80295 0.40252 6.50142 C 1.50231 3.03806 4.88027 0.20151 8.61522 0.38648 C 11.4904 0.13255 14.1594 2.02987 15.543 4.44105 C 15.919 4.6728 15.9025 6.65371 16.2617 5.51432 C 17.3118 2.6047 20.1552 0.48976 23.2581 0.39544 C 27.3718 0.07861 31.5625 3.22656 31.9769 7.4138 C 32.4419 10.5606 31.9362 13.9546 29.9366 16.5144 C 27.0142 20.4478 22.515 22.6972 19.032 26.0537 C 17.9438 26.8473 16.7477 28.519 15.904 28.9961 C 15.6231 28.4687 15.2627 27.9879 14.8649 27.5434 Z"]
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-appendItem-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-appendItem-expected.checksum
new file mode 100644
index 0000000..7d62f77
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-appendItem-expected.checksum
@@ -0,0 +1 @@
+b0741ea3954a97f6350eade3873aec3b
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-appendItem-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-appendItem-expected.png
new file mode 100644
index 0000000..56b2476
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-appendItem-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.checksum
new file mode 100644
index 0000000..630e945
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.checksum
@@ -0,0 +1 @@
+15f1f1bee1df648b74f170a609a52c91
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.png
new file mode 100644
index 0000000..01cec09
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-clear-and-initialize-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.checksum
new file mode 100644
index 0000000..5143299
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.checksum
@@ -0,0 +1 @@
+fd7678dd8df9f12286e26baf0507cdb4
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.png
new file mode 100644
index 0000000..ee631a2
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.txt b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.txt
new file mode 100644
index 0000000..9eab518
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-cloning-expected.txt
@@ -0,0 +1,13 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {P} at (0,0) size 784x36
+        RenderText {#text} at (0,0) size 783x36
+          text run at (0,0) width 783: "Below is a JavaScript-generated svg drawing. You should see two red blobs: the left, a programmatically generated path and"
+          text run at (0,18) width 116: "the right, its clone."
+      RenderBlock {DIV} at (0,52) size 784x400
+        RenderSVGRoot {svg} at (26,188) size 374x164
+          RenderSVGPath {path} at (26,188) size 224x164 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M 10 10 L 25 15 L 110 75 L 120 90 L 42 42 Z"]
+          RenderSVGPath {path} at (176,188) size 224x164 [transform={m=((1.00,0.00)(0.00,1.00)) t=(75.00,0.00)}] [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M 10 10 L 25 15 L 110 75 L 120 90 L 42 42 Z"]
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.checksum
new file mode 100644
index 0000000..9e20823
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.checksum
@@ -0,0 +1 @@
+338a43f97d98410a01905b61101b04c7
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.png
new file mode 100644
index 0000000..c6212b9
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-insertItemBefore-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-removeItem-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-removeItem-expected.checksum
new file mode 100644
index 0000000..a455a56
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-removeItem-expected.checksum
@@ -0,0 +1 @@
+da5a4614bab6f5ef7fb6d021e062ca00
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-removeItem-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-removeItem-expected.png
new file mode 100644
index 0000000..2bda30f
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-removeItem-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.checksum
new file mode 100644
index 0000000..3cfa992
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.checksum
@@ -0,0 +1 @@
+36a012ee1a5fd8148b27e87386ee28ca
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.png
new file mode 100644
index 0000000..59785e6
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-replaceItem-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.checksum
new file mode 100644
index 0000000..b579dcc
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.checksum
@@ -0,0 +1 @@
+20619e1b0dba942a7e96c7a785e71e54
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.png
new file mode 100644
index 0000000..6008841
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.txt b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.txt
new file mode 100644
index 0000000..dd7c9c7
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-segment-modification-expected.txt
@@ -0,0 +1,8 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 300x300
+  RenderSVGRoot {svg} at (10,6) size 245x74
+    RenderSVGPath {path} at (78,38) size 84x42 [stroke={[type=SOLID] [color=#000000] [stroke width=3.00]}] [data="M 80 40 C 80 40 120 80 160 40"]
+    RenderSVGText {text} at (10,6) size 245x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 245x18
+        chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 36 width 245.00: "There should be a smooth curve below"
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.checksum
new file mode 100644
index 0000000..51b7c29
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.checksum
@@ -0,0 +1 @@
+7a1153f9a5ef269a8071df8f211603f0
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.png
new file mode 100644
index 0000000..79e5108
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.checksum b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.checksum
new file mode 100644
index 0000000..7afcdd7
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.checksum
@@ -0,0 +1 @@
+d671b3c8a0ad134b052156775db6b4a7
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.png b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.png
new file mode 100644
index 0000000..c2d564d
Binary files /dev/null and b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.png differ
diff --git a/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.txt b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.txt
new file mode 100644
index 0000000..1ac2a06
--- /dev/null
+++ b/LayoutTests/platform/mac/svg/dom/SVGPathSegList-xml-dom-synchronization2-expected.txt
@@ -0,0 +1,23 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 600x500
+  RenderSVGRoot {svg} at (10,6) size 493x219
+    RenderSVGPath {path} at (46,103) size 128x122 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00]}] [fill={[type=SOLID] [color=#FF0000]}] [data="M 50 150 L 95 107 L 145 157 L 169 221 L 100 200 Z"]
+    RenderSVGText {text} at (10,6) size 344x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 344x18
+        chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 52 width 344.00: "Right after loading, a segment is added to the path."
+    RenderSVGText {text} at (10,26) size 493x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 493x18
+        chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 72 width 493.00: "The path and its attribute should be updated to include the new segment."
+    RenderSVGText {text} at (10,56) size 65x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 65x18
+        chunk 1 text run 1 at (10.00,70.00) startOffset 0 endOffset 12 width 65.00: "\"d\" initial:"
+    RenderSVGText {text} at (90,56) size 212x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 212x18
+        chunk 1 text run 1 at (90.00,70.00) startOffset 0 endOffset 32 width 212.00: "M50,150 l45,-43 l24,64 l-69,-21z"
+    RenderSVGText {text} at (10,76) size 58x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 58x18
+        chunk 1 text run 1 at (10.00,90.00) startOffset 0 endOffset 10 width 58.00: "\"d\" after:"
+    RenderSVGText {text} at (90,76) size 283x18 contains 1 chunk(s)
+      RenderSVGInlineText {#text} at (0,0) size 283x18
+        chunk 1 text run 1 at (90.00,90.00) startOffset 0 endOffset 45 width 283.00: "M 50 150 l 45 -43 l 50 50 l 24 64 l -69 -21 Z"
diff --git a/LayoutTests/svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg b/LayoutTests/svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg
new file mode 100644
index 0000000..209ccf1
--- /dev/null
+++ b/LayoutTests/svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg
@@ -0,0 +1,279 @@
+<svg version="1.1" baseProfile="full" onload="CreatePath();setTimeout('AnimatePath();', 0);" id="svg-root"
+  width="100%" height="100%" viewBox="0 0 480 360"
+  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <!--======================================================================-->
+  <!--=  SVG 1.1 2nd Edition Test Case                                     =-->
+  <!--======================================================================-->
+  <!--=  Copyright 2009 World Wide Web Consortium, (Massachusetts          =-->
+  <!--=  Institute of Technology, European Research Consortium for         =-->
+  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
+  <!--=  All Rights Reserved.                                              =-->
+  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
+  <!--======================================================================-->
+  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
+    template-version="1.4" reviewer="[reviewer]" author="ED" status="created"
+    version="$Revision: 1.5 $" testname="$RCSfile: paths-dom-02-f.svg,v $">
+    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/paths.html#DOMInterfaces">
+        <p>
+          This test is designed to test the PathSegList interface. At first a flower-like shape with 6 petals should be displayed.
+          The roundness and number of petals are then animated using script.
+        </p>
+    </d:testDescription>
+    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        The roundness of the petals is animated from star-like sharp petals to softly rounded petals and back again, and is repeated like that until the animation stops.
+        The number of petals should increase one by one until the flower has a total of 12 petals, and then go back one by one until it has 6 petals, then increase again one by one until the flower has 9 petals.
+        Then the animation will stop. The rendered image should look exactly like the reference image.
+      </p>
+      <p>
+        If the flower is clicked after the animation has finished, it will restart the animation and repeat it for some time.
+      </p>
+    </d:operatorScript>
+    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
+      <p>
+        [[Describe the pass criteria of the test here. The pass criteria is what
+        should be displayed when the test is run.]]
+      </p>
+    </d:passCriteria>
+  </d:SVGTestCase>
+  <title id="test-title">$RCSfile: paths-dom-02-f.svg,v $</title>
+  <defs>
+    <font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
+      <font-face-src>
+        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
+      </font-face-src>
+    </font-face>
+  </defs>
+  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
+    <script><![CDATA[
+       if (window.layoutTestController)
+        layoutTestController.waitUntilDone();
+      var offset_angle = 90;
+      var current_shift = 0;
+      var shift_inc = 1;
+      var THRESHOLD = 60;
+      var segments_added = 0;
+      var seg_diff = 1;
+      var adjust_count = 0;
+      var anim_count = 0;
+      var adjust_count_max = 8;
+      var anim_count_max = 10;
+      var stopped = false;
+
+      function DegToRad(degs)
+      {
+      return (degs * Math.PI) / 180;
+      }
+
+      function CreatePath()
+      {
+      var pathelm = document.getElementById("mypath");
+      var pathlist = pathelm.pathSegList;
+
+      var move = pathelm.createSVGPathSegMovetoAbs(240 + 30 * Math.cos(DegToRad(offset_angle - 30)),
+      180 + 30 * Math.sin(DegToRad(offset_angle - 30)));
+      pathlist.appendItem(move);
+
+      var angle = offset_angle;
+      for (var i = 0; i < 6; i++)
+      {
+      var x, y, xcp, ycp;
+
+      x = 240 + 30 * Math.cos(DegToRad(angle + 30));
+      y = 180 + 30 * Math.sin(DegToRad(angle + 30));
+
+      xcp = 240 + 120 * Math.cos(DegToRad(angle));
+      ycp = 180 + 120 * Math.sin(DegToRad(angle));
+
+      var curve = pathelm.createSVGPathSegCurvetoCubicAbs(x, y,
+      xcp, ycp,
+      xcp, ycp);
+
+      pathlist.appendItem(curve);
+
+      angle += 60;
+      }
+
+      pathlist.appendItem(pathelm.createSVGPathSegClosePath());
+      setTimeout('AdjustPath()', 0);
+      }
+
+      function AddSegment()
+      {
+      var pathelm = document.getElementById("mypath");
+      var pathlist = pathelm.pathSegList;
+
+      var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
+      var angle = offset_angle;
+      var inc_angle = 360/(segments+1);
+      var shift_v_x, shift_v_y, xcp, ycp;
+
+      var move = pathlist.getItem(0);
+      move.x = 240 + 30 * Math.cos(DegToRad(offset_angle - inc_angle/2));
+      move.y = 180 + 30 * Math.sin(DegToRad(offset_angle - inc_angle/2));
+
+      for (var i = 0; i < segments; i++)
+      {
+      var curve = pathlist.getItem(1+i);
+
+      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
+      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
+
+      xcp = 240 + 120 * Math.cos(DegToRad(angle));
+      ycp = 180 + 120 * Math.sin(DegToRad(angle));
+
+      curve.x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
+      curve.y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));
+
+      curve.x1 = xcp - shift_v_x;
+      curve.y1 = ycp - shift_v_y;
+
+      curve.x2 = xcp + shift_v_x;
+      curve.y2 = ycp + shift_v_y;
+
+      angle += inc_angle;
+      }
+
+      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
+      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
+
+      xcp = 240 + 120 * Math.cos(DegToRad(angle));
+      ycp = 180 + 120 * Math.sin(DegToRad(angle));
+
+      var x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
+      var y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));
+
+      var curve = pathelm.createSVGPathSegCurvetoCubicAbs(x, y,
+      xcp - shift_v_x,
+      ycp - shift_v_y,
+      xcp + shift_v_x,
+      ycp + shift_v_y);
+
+      pathlist.insertItemBefore(curve, pathlist.numberOfItems-1);
+      }
+
+      function RemoveSegment()
+      {
+      var pathelm = document.getElementById("mypath");
+      var pathlist = pathelm.pathSegList;
+
+      var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
+      var angle = offset_angle;
+      var inc_angle = 360/(segments-1);
+      var shift_v_x, shift_v_y, xcp, ycp;
+
+      var move = pathlist.getItem(0);
+      move.x = 240 + 30 * Math.cos(DegToRad(offset_angle - inc_angle/2));
+      move.y = 180 + 30 * Math.sin(DegToRad(offset_angle - inc_angle/2));
+
+      for (var i = 0; i < segments-1; i++)
+      {
+      var curve = pathlist.getItem(1+i);
+
+      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
+      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
+
+      xcp = 240 + 120 * Math.cos(DegToRad(angle));
+      ycp = 180 + 120 * Math.sin(DegToRad(angle));
+
+      curve.x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
+      curve.y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));
+
+      curve.x1 = xcp - shift_v_x;
+      curve.y1 = ycp - shift_v_y;
+
+      curve.x2 = xcp + shift_v_x;
+      curve.y2 = ycp + shift_v_y;
+
+      angle += inc_angle;
+      }
+
+      pathlist.removeItem(pathlist.numberOfItems-2);
+      }
+
+      function AdjustPath()
+      {
+      if (seg_diff > 0)
+      {
+      AddSegment();
+      }
+      else
+      {
+      RemoveSegment();
+      }
+
+      segments_added += seg_diff;
+
+      if (segments_added > 5)
+      seg_diff = -1;
+      else if (segments_added <= 0)
+      seg_diff = 1;
+
+      if(adjust_count < adjust_count_max)
+      {
+      adjust_count++;
+      setTimeout('AdjustPath()', 0);
+      }
+      }
+
+      function AnimatePath()
+      {
+      var pathelm = document.getElementById("mypath");
+      var pathlist = pathelm.pathSegList;
+
+      var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
+      var angle = offset_angle;
+      var inc_angle = 360/segments;
+      for (var i = 0; i < segments; i++)
+      {
+      var curve = pathlist.getItem(1+i);
+
+      var shift_v_x, shift_v_y, xcp, ycp;
+
+      shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
+      shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
+
+      xcp = 240 + 120 * Math.cos(DegToRad(angle));
+      ycp = 180 + 120 * Math.sin(DegToRad(angle));
+
+      curve.x1 = xcp - shift_v_x;
+      curve.y1 = ycp - shift_v_y;
+
+      curve.x2 = xcp + shift_v_x;
+      curve.y2 = ycp + shift_v_y;
+
+      angle += inc_angle;
+      }
+
+      current_shift += shift_inc;
+      if (current_shift >= THRESHOLD || current_shift < 0)
+      shift_inc = -shift_inc;
+
+      if(adjust_count >= adjust_count_max)
+      {
+      anim_count++;
+      }
+
+      if(anim_count < anim_count_max)
+      setTimeout('AnimatePath();', 0);
+      else {
+        document.getElementById("mypath").addEventListener("click", function func() { adjust_count_max=32768;anim_count_max=32768; AdjustPath(); AnimatePath(); }, false);
+        if (window.layoutTestController)
+          layoutTestController.notifyDone();
+      }
+      }
+
+    ]]></script>
+    <path d="" id="mypath" stroke="black" fill="blue"/>
+  </g>
+  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
+    <text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.5 $</text>
+  </g>
+  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
+  <!-- comment out this watermark once the test is approved -->
+  <g id="draft-watermark">
+    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
+    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
+      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
+  </g>
+</svg>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt b/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt
new file mode 100644
index 0000000..833738d
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-appendItem-expected.txt
@@ -0,0 +1,75 @@
+This is a test of the SVGPathSegList::appendItem() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 3
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 100
+
+Check initial 'pathSegList' value of path2
+PASS path2.pathSegList.numberOfItems is 5
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 0
+PASS path2.pathSegList.getItem(0).y is 0
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path2.pathSegList.getItem(1).x is 50
+PASS path2.pathSegList.getItem(1).y is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(2).x is 100
+PASS path2.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(3).x is 100
+PASS path2.pathSegList.getItem(4).toString() is "[object SVGPathSegLinetoVerticalRel]"
+PASS path2.pathSegList.getItem(4).y is 100
+
+Negate x value of fourth segment in path2
+PASS path2.pathSegList.getItem(3).x = -path2.pathSegList.getItem(3).x is -100
+
+Swap segment four and five of path2 - now should look like a rectangle
+PASS path2.pathSegList.appendItem(path2.pathSegList.getItem(3)).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+
+Append second item from path2 to path1 list
+PASS path1.pathSegList.appendItem(path2.pathSegList.getItem(1)).toString() is "[object SVGPathSegLinetoAbs]"
+
+Change last item of path1 list, that came from path2 list, assure it's updating path1
+PASS path1.pathSegList.getItem(3).x -= 50 is 0
+
+Check final 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 4
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 100
+PASS path1.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(3).x is 0
+PASS path1.pathSegList.getItem(3).y is 100
+
+Check final 'pathSegList' value of path2
+PASS path2.pathSegList.numberOfItems is 4
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 0
+PASS path2.pathSegList.getItem(0).y is 0
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(1).x is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoVerticalRel]"
+PASS path2.pathSegList.getItem(2).y is 100
+PASS path2.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(3).x is -100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml b/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml
new file mode 100644
index 0000000..8e487a9
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-appendItem.xhtml
@@ -0,0 +1,104 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="250" height="250">
+    <g transform="translate(10, 10)">
+        <path id="path1" d="M 0 0 L 100 0 L 100 100" fill="green"/>
+        <path transform="translate(110, 0)" id="path2" d="M 0 0 L 50 100 h 100 h 100 v 100" fill="green"/>
+    </g>
+</svg>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+    description("This is a test of the SVGPathSegList::appendItem() API.");
+
+    var svg = document.getElementById("svg");
+    var path1 = document.getElementById("path1");
+    var path2 = document.getElementById("path2");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "3");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+ 
+    debug("");
+    debug("Check initial 'pathSegList' value of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "5");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "0");
+    shouldBe("path2.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path2.pathSegList.getItem(1).x", "50");
+    shouldBe("path2.pathSegList.getItem(1).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(2).x", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(3).x", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(4).toString()", "[object SVGPathSegLinetoVerticalRel]");
+    shouldBe("path2.pathSegList.getItem(4).y", "100");
+
+    debug("");
+    debug("Negate x value of fourth segment in path2");
+    shouldBe("path2.pathSegList.getItem(3).x = -path2.pathSegList.getItem(3).x", "-100");
+
+    debug("")
+    debug("Swap segment four and five of path2 - now should look like a rectangle");
+    shouldBeEqualToString("path2.pathSegList.appendItem(path2.pathSegList.getItem(3)).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+
+    debug("");
+    debug("Append second item from path2 to path1 list");
+    shouldBeEqualToString("path1.pathSegList.appendItem(path2.pathSegList.getItem(1)).toString()", "[object SVGPathSegLinetoAbs]");
+
+    debug("");
+    debug("Change last item of path1 list, that came from path2 list, assure it's updating path1");
+    shouldBe("path1.pathSegList.getItem(3).x -= 50", "0");
+
+    debug("");
+    debug("Check final 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(3).x", "0");
+    shouldBe("path1.pathSegList.getItem(3).y", "100");
+
+    debug("");
+    debug("Check final 'pathSegList' value of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "0");
+    shouldBe("path2.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(1).x", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoVerticalRel]");
+    shouldBe("path2.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(3).x", "-100");
+
+    successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt b/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt
new file mode 100644
index 0000000..aff0a50
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize-expected.txt
@@ -0,0 +1,95 @@
+This is a test of the SVGPathSegList::appendItem() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 3
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 100
+PASS path1.pathSegList.getItem(0).y is 100
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 100
+
+Check initial 'pathSegList' value of path2
+PASS path2.pathSegList.numberOfItems is 3
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 50
+PASS path2.pathSegList.getItem(0).y is 50
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path2.pathSegList.getItem(1).x is 0
+PASS path2.pathSegList.getItem(1).y is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(2).x is 0
+PASS path2.pathSegList.getItem(2).y is 0
+
+Cache first item of path1 in local variable 'item0'
+PASS item0.x is 100
+PASS item0.y is 100
+
+Clear path1 segment list
+PASS path1.pathSegList.clear() is undefined.
+
+Verify that item0 is still alive, and can be modified
+PASS item0.x is 100
+PASS item0.y is 100
+PASS item0.x += 50 is 150
+PASS item0.y += 50 is 150
+
+Check intermediate list state of path1
+PASS path1.pathSegList.numberOfItems is 0
+PASS path1.pathSegList.getItem(0) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+
+Check intermediate list state of path2
+PASS path2.pathSegList.numberOfItems is 3
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 50
+PASS path2.pathSegList.getItem(0).y is 50
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path2.pathSegList.getItem(1).x is 0
+PASS path2.pathSegList.getItem(1).y is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(2).x is 0
+PASS path2.pathSegList.getItem(2).y is 0
+
+Initialize path1 list with first item of path2
+PASS path1.pathSegList.initialize(path2.pathSegList.getItem(0)).toString() is "[object SVGPathSegMovetoAbs]"
+
+Check intermediate list state of path1
+PASS path1.pathSegList.numberOfItems is 1
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 50
+PASS path1.pathSegList.getItem(0).y is 50
+
+Check intermediate list state of path2
+PASS path2.pathSegList.numberOfItems is 2
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 0
+PASS path2.pathSegList.getItem(0).y is 100
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(1).x is 0
+PASS path2.pathSegList.getItem(1).y is 0
+
+Initialize path2 list with item0
+PASS path2.pathSegList.initialize(item0).toString() is "[object SVGPathSegMovetoAbs]"
+
+Check final list state of path1
+PASS path1.pathSegList.numberOfItems is 1
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 50
+PASS path1.pathSegList.getItem(0).y is 50
+
+Check final list state of path2
+PASS path2.pathSegList.numberOfItems is 1
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 150
+PASS path2.pathSegList.getItem(0).y is 150
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml b/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml
new file mode 100644
index 0000000..956d88f
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-clear-and-initialize.xhtml
@@ -0,0 +1,130 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="250" height="250">
+    <g transform="translate(10, 10)">
+        <path id="path1" d="M 100 100 L 100 0 L 100 100" fill="green"/>
+        <path transform="translate(110, 0)" id="path2" d="M 50 50 L 0 100 M 0 0" fill="green"/>
+    </g>
+</svg>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+    description("This is a test of the SVGPathSegList::appendItem() API.");
+
+    var svg = document.getElementById("svg");
+    var path1 = document.getElementById("path1");
+    var path2 = document.getElementById("path2");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "3");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "100");
+    shouldBe("path1.pathSegList.getItem(0).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+ 
+    debug("");
+    debug("Check initial 'pathSegList' value of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "3");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "50");
+    shouldBe("path2.pathSegList.getItem(0).y", "50");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path2.pathSegList.getItem(1).x", "0");
+    shouldBe("path2.pathSegList.getItem(1).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(2).x", "0");
+    shouldBe("path2.pathSegList.getItem(2).y", "0");
+
+    debug("");
+    debug("Cache first item of path1 in local variable 'item0'");
+    var item0 = path1.pathSegList.getItem(0);
+    shouldBe("item0.x", "100");
+    shouldBe("item0.y", "100");
+
+    debug("");
+    debug("Clear path1 segment list");
+    shouldBeUndefined("path1.pathSegList.clear()");
+
+    debug("");
+    debug("Verify that item0 is still alive, and can be modified");
+    shouldBe("item0.x", "100");
+    shouldBe("item0.y", "100");
+    shouldBe("item0.x += 50", "150");
+    shouldBe("item0.y += 50", "150");
+
+    debug("");
+    debug("Check intermediate list state of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "0");
+    shouldThrow("path1.pathSegList.getItem(0)");
+
+    debug("");
+    debug("Check intermediate list state of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "3");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "50");
+    shouldBe("path2.pathSegList.getItem(0).y", "50");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path2.pathSegList.getItem(1).x", "0");
+    shouldBe("path2.pathSegList.getItem(1).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(2).x", "0");
+    shouldBe("path2.pathSegList.getItem(2).y", "0");
+
+    debug("");
+    debug("Initialize path1 list with first item of path2");
+    shouldBeEqualToString("path1.pathSegList.initialize(path2.pathSegList.getItem(0)).toString()", "[object SVGPathSegMovetoAbs]");
+
+    debug("");
+    debug("Check intermediate list state of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "1");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "50");
+    shouldBe("path1.pathSegList.getItem(0).y", "50");
+
+    debug("");
+    debug("Check intermediate list state of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "2");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "0");
+    shouldBe("path2.pathSegList.getItem(0).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(1).x", "0");
+    shouldBe("path2.pathSegList.getItem(1).y", "0");
+
+    debug("");
+    debug("Initialize path2 list with item0");
+    shouldBeEqualToString("path2.pathSegList.initialize(item0).toString()", "[object SVGPathSegMovetoAbs]");
+
+    debug("");
+    debug("Check final list state of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "1");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "50");
+    shouldBe("path1.pathSegList.getItem(0).y", "50");
+
+    debug("");
+    debug("Check final list state of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "1");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "150");
+    shouldBe("path2.pathSegList.getItem(0).y", "150");
+
+    successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-cloning.html b/LayoutTests/svg/dom/SVGPathSegList-cloning.html
new file mode 100644
index 0000000..07041ea
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-cloning.html
@@ -0,0 +1,54 @@
+<html>
+<head>
+    <style type="text/css">
+      .cls1 {
+        stroke: black;
+        fill: rgb(0,128,255);
+        stroke-width: 1;
+      }
+    </style>
+
+<script type="text/javascript">
+function setup() {
+ var SHOW_BUG = true;
+ 
+ var SVGNS = 'http://www.w3.org/2000/svg';
+ var svg = document.createElementNS(SVGNS, "svg");
+ svg.width.baseVal.valueAsString = "400px";
+ svg.height.baseVal.valueAsString = "400px";
+ svg.viewBox.baseVal.x = 0;
+ svg.viewBox.baseVal.y = 0;
+ svg.viewBox.baseVal.width = 200;
+ svg.viewBox.baseVal.height = 90;
+ 
+ var path1 = document.createElementNS(SVGNS, "path");
+ if (SHOW_BUG) {
+     path1.pathSegList.appendItem(path1.createSVGPathSegMovetoAbs(10, 10));
+     path1.pathSegList.appendItem(path1.createSVGPathSegLinetoAbs(25, 15));
+     path1.pathSegList.appendItem(path1.createSVGPathSegLinetoAbs(110, 75));
+     path1.pathSegList.appendItem(path1.createSVGPathSegLinetoAbs(120, 90));
+     path1.pathSegList.appendItem(path1.createSVGPathSegLinetoAbs(42, 42));
+     path1.pathSegList.appendItem(path1.createSVGPathSegClosePath());
+ } else {
+     path1.setAttributeNS(null, 'd', "M 10 10 L 25 15 L 110 75 L 120 90 L 42 42 Z");
+ }
+ 
+ path1.style.setProperty("stroke", "black", "");
+ path1.style.setProperty("fill", "red", "");
+ var path2 = path1.cloneNode(true);
+ path2.setAttributeNS(null, 'transform', "translate(75, 0)");
+ 
+ var drawing = document.getElementById("drawing");
+ svg.appendChild(path1);
+ svg.appendChild(path2);
+ drawing.appendChild(svg);
+}
+</script>
+</head>
+<body onload="setup()">
+<p>Below is a JavaScript-generated svg drawing. You should see two red blobs: the left, a programmatically generated path and the right, its clone.</p>
+<div id="drawing"></div>
+</body>
+</html>
+
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt b/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt
new file mode 100644
index 0000000..ca43b3d
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore-expected.txt
@@ -0,0 +1,42 @@
+This is a test of the SVGPathSegList::insertItemBefore() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 4
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 0
+PASS path1.pathSegList.getItem(2).y is 100
+PASS path1.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(3).x is 100
+PASS path1.pathSegList.getItem(3).y is 100
+
+Insert fourth item at position three using insertItemBefore()
+PASS path1.pathSegList.insertItemBefore(path1.pathSegList.getItem(3), 2).toString() is "[object SVGPathSegLinetoAbs]"
+
+Check final 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 4
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 100
+PASS path1.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(3).x is 0
+PASS path1.pathSegList.getItem(3).y is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml b/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml
new file mode 100644
index 0000000..8e536aa
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-insertItemBefore.xhtml
@@ -0,0 +1,64 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="250" height="250">
+    <g transform="translate(10, 10)">
+        <path id="path1" d="M 0 0 L 100 0 L 0 100 L 100 100" fill="green"/>
+    </g>
+</svg>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+    description("This is a test of the SVGPathSegList::insertItemBefore() API.");
+
+    var svg = document.getElementById("svg");
+    var path1 = document.getElementById("path1");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "0");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(3).x", "100");
+    shouldBe("path1.pathSegList.getItem(3).y", "100");
+
+    debug("");
+    debug("Insert fourth item at position three using insertItemBefore()");
+    shouldBeEqualToString("path1.pathSegList.insertItemBefore(path1.pathSegList.getItem(3), 2).toString()", "[object SVGPathSegLinetoAbs]");
+
+    debug("");
+    debug("Check final 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(3).x", "0");
+    shouldBe("path1.pathSegList.getItem(3).y", "100");
+
+    successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-removeItem-expected.txt b/LayoutTests/svg/dom/SVGPathSegList-removeItem-expected.txt
new file mode 100644
index 0000000..1a8aed2
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-removeItem-expected.txt
@@ -0,0 +1,44 @@
+This is a test of the SVGPathSegList::removeItem() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 5
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 100
+PASS path1.pathSegList.getItem(3).toString() is "[object SVGPathSegClosePath]"
+PASS path1.pathSegList.getItem(4).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(4).x is 0
+PASS path1.pathSegList.getItem(4).y is 100
+
+Check initial 'pathSegList' value of path2
+PASS path2.pathSegList.numberOfItems is 5
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 0
+PASS path2.pathSegList.getItem(0).y is 0
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(1).x is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegClosePath]"
+PASS path2.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoVerticalRel]"
+PASS path2.pathSegList.getItem(3).y is 100
+PASS path2.pathSegList.getItem(4).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(4).x is -100
+
+Remove fourth item of path1
+PASS path1.pathSegList.removeItem(3).toString() is "[object SVGPathSegClosePath]"
+
+Remove third item of path2
+PASS path2.pathSegList.removeItem(2).toString() is "[object SVGPathSegClosePath]"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-removeItem.xhtml b/LayoutTests/svg/dom/SVGPathSegList-removeItem.xhtml
new file mode 100644
index 0000000..95b33ea
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-removeItem.xhtml
@@ -0,0 +1,69 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="250" height="250">
+    <g transform="translate(10, 10)">
+        <path id="path1" d="M 0 0 L 100 0 L 100 100 z L 0 100" fill="green"/>
+        <path transform="translate(110, 0)" id="path2" d="M 0 0 h 100 z v 100 h -100" fill="green"/>
+    </g>
+</svg>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+    description("This is a test of the SVGPathSegList::removeItem() API.");
+
+    var svg = document.getElementById("svg");
+    var path1 = document.getElementById("path1");
+    var path2 = document.getElementById("path2");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "5");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegClosePath]");
+    shouldBeEqualToString("path1.pathSegList.getItem(4).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(4).x", "0");
+    shouldBe("path1.pathSegList.getItem(4).y", "100");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "5");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "0");
+    shouldBe("path2.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(1).x", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegClosePath]");
+    shouldBeEqualToString("path2.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoVerticalRel]");
+    shouldBe("path2.pathSegList.getItem(3).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(4).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(4).x", "-100");
+
+    debug("");
+    debug("Remove fourth item of path1");
+    shouldBeEqualToString("path1.pathSegList.removeItem(3).toString()", "[object SVGPathSegClosePath]");
+
+    debug("");
+    debug("Remove third item of path2");
+    shouldBeEqualToString("path2.pathSegList.removeItem(2).toString()", "[object SVGPathSegClosePath]");
+
+    successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt b/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt
new file mode 100644
index 0000000..6b982aa
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-replaceItem-expected.txt
@@ -0,0 +1,75 @@
+This is a test of the SVGPathSegList::replaceItem() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 6
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 100
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 0
+PASS path1.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(3).x is 100
+PASS path1.pathSegList.getItem(3).y is 100
+PASS path1.pathSegList.getItem(4).toString() is "[object SVGPathSegLinetoVerticalRel]"
+PASS path1.pathSegList.getItem(4).y is 100
+PASS path1.pathSegList.getItem(5).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(5).x is 0
+PASS path1.pathSegList.getItem(5).y is 100
+
+Check initial 'pathSegList' value of path2
+PASS path2.pathSegList.numberOfItems is 4
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 0
+PASS path2.pathSegList.getItem(0).y is 0
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(1).x is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path2.pathSegList.getItem(2).x is 200
+PASS path2.pathSegList.getItem(2).y is 100
+PASS path2.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(3).x is -100
+
+Replace second item with third item of path1
+PASS path1.pathSegList.replaceItem(path1.pathSegList.getItem(2), 1).toString() is "[object SVGPathSegLinetoAbs]"
+
+Replace third item of path2 with fourth item of path1
+PASS path2.pathSegList.replaceItem(path1.pathSegList.getItem(3), 2).toString() is "[object SVGPathSegLinetoVerticalRel]"
+
+Check final 'pathSegList' value of path1
+PASS path1.pathSegList.numberOfItems is 4
+PASS path1.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path1.pathSegList.getItem(0).x is 0
+PASS path1.pathSegList.getItem(0).y is 0
+PASS path1.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(1).x is 100
+PASS path1.pathSegList.getItem(1).y is 0
+PASS path1.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(2).x is 100
+PASS path1.pathSegList.getItem(2).y is 100
+PASS path1.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoAbs]"
+PASS path1.pathSegList.getItem(3).x is 0
+PASS path1.pathSegList.getItem(3).y is 100
+
+Check final 'pathSegList' value of path2
+PASS path2.pathSegList.numberOfItems is 4
+PASS path2.pathSegList.getItem(0).toString() is "[object SVGPathSegMovetoAbs]"
+PASS path2.pathSegList.getItem(0).x is 0
+PASS path2.pathSegList.getItem(0).y is 0
+PASS path2.pathSegList.getItem(1).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(1).x is 100
+PASS path2.pathSegList.getItem(2).toString() is "[object SVGPathSegLinetoVerticalRel]"
+PASS path2.pathSegList.getItem(2).y is 100
+PASS path2.pathSegList.getItem(3).toString() is "[object SVGPathSegLinetoHorizontalRel]"
+PASS path2.pathSegList.getItem(3).x is -100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml b/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml
new file mode 100644
index 0000000..848ebc9
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-replaceItem.xhtml
@@ -0,0 +1,102 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="250" height="250">
+    <g transform="translate(10, 10)">
+        <path id="path1" d="M 0 0 L 100 100 L 100 0 L 100 100 v 100 L 0 100" fill="green"/>
+        <path transform="translate(110, 0)" id="path2" d="M 0 0 h 100 L 200 100 h -100" fill="green"/>
+    </g>
+</svg>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+    description("This is a test of the SVGPathSegList::replaceItem() API.");
+
+    var svg = document.getElementById("svg");
+    var path1 = document.getElementById("path1");
+    var path2 = document.getElementById("path2");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "6");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(3).x", "100");
+    shouldBe("path1.pathSegList.getItem(3).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(4).toString()", "[object SVGPathSegLinetoVerticalRel]");
+    shouldBe("path1.pathSegList.getItem(4).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(5).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(5).x", "0");
+    shouldBe("path1.pathSegList.getItem(5).y", "100");
+
+    debug("");
+    debug("Check initial 'pathSegList' value of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "0");
+    shouldBe("path2.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(1).x", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path2.pathSegList.getItem(2).x", "200");
+    shouldBe("path2.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(3).x", "-100");
+
+    debug("");
+    debug("Replace second item with third item of path1");
+    shouldBeEqualToString("path1.pathSegList.replaceItem(path1.pathSegList.getItem(2), 1).toString()", "[object SVGPathSegLinetoAbs]");
+
+    debug("");
+    debug("Replace third item of path2 with fourth item of path1");
+    shouldBeEqualToString("path2.pathSegList.replaceItem(path1.pathSegList.getItem(3), 2).toString()", "[object SVGPathSegLinetoVerticalRel]");
+
+    debug("");
+    debug("Check final 'pathSegList' value of path1");
+    shouldBe("path1.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path1.pathSegList.getItem(0).x", "0");
+    shouldBe("path1.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(1).x", "100");
+    shouldBe("path1.pathSegList.getItem(1).y", "0");
+    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(2).x", "100");
+    shouldBe("path1.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoAbs]");
+    shouldBe("path1.pathSegList.getItem(3).x", "0");
+    shouldBe("path1.pathSegList.getItem(3).y", "100");
+
+    debug("");
+    debug("Check final 'pathSegList' value of path2");
+    shouldBe("path2.pathSegList.numberOfItems", "4");
+    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
+    shouldBe("path2.pathSegList.getItem(0).x", "0");
+    shouldBe("path2.pathSegList.getItem(0).y", "0");
+    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(1).x", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoVerticalRel]");
+    shouldBe("path2.pathSegList.getItem(2).y", "100");
+    shouldBeEqualToString("path2.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoHorizontalRel]");
+    shouldBe("path2.pathSegList.getItem(3).x", "-100");
+
+    successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-segment-modification.svg b/LayoutTests/svg/dom/SVGPathSegList-segment-modification.svg
new file mode 100644
index 0000000..19fc427
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-segment-modification.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink='http://www.w3.org/1999/xlink' width="300px" height="300px" viewBox="0 0 300 300" onload="test()">
+    <script type="text/ecmascript"><![CDATA[
+        if (window.layoutTestController)
+            layoutTestController.notifyDone();
+
+        function test() {
+            var smile = document.getElementById('smile');
+            var segList = smile.pathSegList;
+            var moveSeg = segList.getItem(0);    // This represents the M 80 40 segment (Move to)
+            var smoothCurveSeg = segList.getItem(1); // This represents the S 20 80 80 40 segment (Smooth Curveto)
+            setTimeout(function() {
+                moveSeg.x = 50;
+                moveSeg.y = 50;
+        
+                if (window.layoutTestController)
+                    layoutTestController.notifyDone();
+            }, 0);
+        }
+    ]]></script>
+    <path id="smile" d="M 80 40 S 120 80 160 40" stroke="black" stroke-width="3" fill="none"/>
+    <text x="10" y="20">There should be a smooth curve below</text>
+</svg>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.txt b/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.txt
new file mode 100644
index 0000000..9c672da
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization-expected.txt
@@ -0,0 +1,14 @@
+This is a test how SVGLengthList reacts to XML DOM modifications.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS path.pathSegList.numberOfItems is 3
+PASS path.getAttribute('d').formatDAttribute() is "M 200 0 L 100 0 L 100 100"
+PASS path.getAttribute('d').formatDAttribute() is "M 200 0 L 100 0 L 100 100 L 0 100"
+PASS path.getAttribute('d').formatDAttribute() is "M 100 0 L 100 0 L 100 100 L 0 100"
+PASS path.getAttribute('d').formatDAttribute() is "M 0 0 L 100 0 L 100 100 L 0 100"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml b/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml
new file mode 100644
index 0000000..2c25f83
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml
@@ -0,0 +1,49 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
+<script>window.enablePixelTesting = true;</script>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="200" height="200">
+    <path id="path" fill="green" transform="translate(10 10)" d="M 200 0 L 100 0 L 100 100"/>
+</svg>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/javascript">
+<![CDATA[
+    description("This is a test how SVGLengthList reacts to XML DOM modifications.");
+
+    // Extend String prototype, to offer a function, that formas the d attribute in the same way across browsers
+    String.prototype.formatDAttribute = function() {
+        return this.replace(/,/g, " ")          // Remove Firefox commas
+                   .replace(/([A-Z])/g, " $1 ") // "M 100 0L 50 0" -> " M 100 0 L 50 0"
+                   .replace(/^\s/, "")          // " M 100 0" -> "M 100 0" 
+                   .replace(/\s\s/g, " ");      // If there was already whitespace between coordinates & commands, fix it up again.      
+    }
+
+    var path = document.getElementById("path");
+    shouldBe("path.pathSegList.numberOfItems", "3");
+
+    // Check initial 'd' attribute value.
+    shouldBeEqualToString("path.getAttribute('d').formatDAttribute()", "M 200 0 L 100 0 L 100 100");
+
+    // Append one item, check 'd' attribute changed.
+    path.pathSegList.appendItem(path.createSVGPathSegLinetoAbs(0, 100));
+    shouldBeEqualToString("path.getAttribute('d').formatDAttribute()", "M 200 0 L 100 0 L 100 100 L 0 100");
+
+    // Modify first item, check 'd' attribute changed.
+    path.pathSegList.getItem(0).x -= 100;
+    shouldBeEqualToString("path.getAttribute('d').formatDAttribute()", "M 100 0 L 100 0 L 100 100 L 0 100");
+
+    // Modify first item, check 'd' attribute changed, now a green rectangle should be visible.
+    path.pathSegList.getItem(0).x -= 100;
+    shouldBeEqualToString("path.getAttribute('d').formatDAttribute()", "M 0 0 L 100 0 L 100 100 L 0 100");
+
+    successfullyParsed = true;
+]]>
+</script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml b/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml
new file mode 100644
index 0000000..52d72d3
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml
@@ -0,0 +1,41 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="600" height="500" xmlns="http://www.w3.org/2000/svg">
+  <script type="text/javascript">
+  <![CDATA[
+    if (window.layoutTestController)
+        layoutTestController.waitUntilDone();
+
+        window.onload = function() {
+            var path = document.getElementsByTagName('path')[0];
+            var start = document.getElementById('d_start');
+            var end = document.getElementById('d_end');
+
+            var start_d = path.getAttribute('d');
+            start.textContent = start_d;
+            var list = path.pathSegList;
+            var seg = path.createSVGPathSegLinetoRel(50, 50);
+
+            setTimeout(function() {
+                list.insertItemBefore(seg, 2); 
+                var end_d = path.getAttribute('d');
+                end.textContent = end_d;
+                if(start_d == end_d) {
+                    end.textContent += ' (failed)';
+                }
+
+                if (window.layoutTestController)
+                    layoutTestController.notifyDone();
+            }, 0);
+        }
+]]>
+</script>
+  <path d="M50,150 l45,-43 l24,64 l-69,-21z" fill="#FF0000" stroke="#000000" stroke-width="5"/>
+  <text x="10" y="20" style="font-weight:bold">Right after loading, a segment is added to the path.</text>
+  <text x="10" y="40" style="font-weight:bold">The path and its attribute should be updated to include the new segment.</text>
+  
+  <text x="10" y="70">"d" initial: </text>
+  <text id="d_start" x="90" y="70"></text>
+
+  <text x="10" y="90">"d" after: </text>
+  <text id="d_end" x="90" y="90"></text>
+</svg>
diff --git a/LayoutTests/svg/dom/fuzz-path-parser-expected.txt b/LayoutTests/svg/dom/fuzz-path-parser-expected.txt
index 3e81df0..be07cdc 100644
--- a/LayoutTests/svg/dom/fuzz-path-parser-expected.txt
+++ b/LayoutTests/svg/dom/fuzz-path-parser-expected.txt
@@ -207,255 +207,255 @@ This test fuzzes the path parser with semi-random attribute values and dumps the
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-Parsed as 4 command(s) [MCZL]: M1,1T4,1,zl5 3 a0,5,1,4,0,3 2,m6,C7,2,3,8,6,7,zt2,8 
-Parsed as 5 command(s) [MCCLC]: M1,1Q8,5 5 1 Q4,8,4,3,h4,q8 4,9,2,1 L4,0 l7 4 L1,0,q1,9,9,2 c5 5 2,8,1 1,q0,3 6,5,
-Parsed as 2 command(s) [ML]: M1,1h0 A6 5,5 4,1,5,3 H5 a8 8,0 0,9,8 3 a6,1,6,3 5,6,3,S1 9 5 1 7,
+Parsed as 4 command(s) [MTZl]: M1,1T4,1,zl5 3 a0,5,1,4,0,3 2,m6,C7,2,3,8,6,7,zt2,8 
+Parsed as 5 command(s) [MQQhq]: M1,1Q8,5 5 1 Q4,8,4,3,h4,q8 4,9,2,1 L4,0 l7 4 L1,0,q1,9,9,2 c5 5 2,8,1 1,q0,3 6,5,
+Parsed as 2 command(s) [Mh]: M1,1h0 A6 5,5 4,1,5,3 H5 a8 8,0 0,9,8 3 a6,1,6,3 5,6,3,S1 9 5 1 7,
 Parsed as 1 command(s) [M]: M1,1s6 3,8,h9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,s6,3,1,
-Parsed as 6 command(s) [MCLCCL]: M1,1t4 4 l6 6 a4 2,3,0,1,2 1,Q1,1,0,3,H8 C7,9 8 4,0 t5,2,H9,zHq1 5,9,T6 8,
+Parsed as 6 command(s) [MtlaQH]: M1,1t4 4 l6 6 a4 2,3,0,1,2 1,Q1,1,0,3,H8 C7,9 8 4,0 t5,2,H9,zHq1 5,9,T6 8,
 Parsed as 1 command(s) [M]: M1,1
-Parsed as 12 command(s) [MCZCZZCLLLCC]: M1,1t1 0 Zc3,8,8 7 3,4 zzQ5,3 4,4 H0 v8,v1,C0,1,6,2,5,4 q2 7 5 3 a7,4 7 9,7,2 9,ZL6 6,
-Parsed as 7 command(s) [MLCCCCC]: M1,1L5,9,t3 7 Q6 1 1,1 T3,0 s4 6 8 1,s8 3,8 9,a5 4 3 2,4,2 3,6 
-Parsed as 6 command(s) [MCLLCC]: M1,1t8 9,l3 5 l9,5 s6,9,2 9,T1 9 
+Parsed as 12 command(s) [MtZcZZQHvvCq]: M1,1t1 0 Zc3,8,8 7 3,4 zzQ5,3 4,4 H0 v8,v1,C0,1,6,2,5,4 q2 7 5 3 a7,4 7 9,7,2 9,ZL6 6,
+Parsed as 7 command(s) [MLtQTss]: M1,1L5,9,t3 7 Q6 1 1,1 T3,0 s4 6 8 1,s8 3,8 9,a5 4 3 2,4,2 3,6 
+Parsed as 6 command(s) [MtllsT]: M1,1t8 9,l3 5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
-Parsed as 2 command(s) [MC]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
-Parsed as 8 command(s) [MMCCCCCL]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
-Parsed as 7 command(s) [MCLZLMC]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
+Parsed as 2 command(s) [MT]: M1,1T8 5,A2 7 5,7 9 6 5,7,zC8,5,8 1,6 3 v8,zM7,8,q8,6 4 7,c9,6,4,9,2 1 c0 6,9 9,0 7,
+Parsed as 8 command(s) [MMqstQsV]: M1,1M7 7,q5,1 9 8,s4,9,0 7,t8,0,Q8 8 7,6,s0 8 5,7 V1 
+Parsed as 7 command(s) [MtlZhMs]: M1,1t7,1 l1 7,zh0 M3 1,s7,5 2,6 0 a0 0,6,8,5 6 5,m3 3 8 C9 0 2,2,5 3,s6 8 8 5,T4 8,L1 4 q0 1,2,3 l8,0 S8 3 1 3,Vc5 5,3,9,0,9 
 Parsed as 1 command(s) [M]: M1,1
 Parsed as 1 command(s) [M]: M1,1a4 5,7 3,5 9 8 7 S8 8 6 7 c2 8 4,1,4,1,c3 9,0,5,1,4,m3 2,0,S5,7,2,3,8,s7,4,8 2,T5,6,q0,3 2,6 A5 5 7 7 7,8,2 6,A8 0 3 5 2 3,3 v5 a6,3 7,7,9 4,3,H2 
-Parsed as 4 command(s) [MCCL]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
+Parsed as 4 command(s) [MTqv]: M1,1T1 1,q0,3 6,5,v0 m5,M6,2 q5,5 1 6,vS1,5 4 5,5,H4,s5 6,7 2,a9 9,8 4,3,1 0,c6,6 3,8,2,9 q5,5 1 4,4,h0 T5 t3,6 s8 5 8 2 zS0 7,7,
 Parsed as 1 command(s) [M]: M1,1A8 5 5,8 4 4 1 s6 9 4 2,v0,l2 L7,1,L0,3,H8 C7,9 8 4,0 t5,2,H9,zH
 Parsed as 1 command(s) [M]: M1,1A3,6,9,7,2,7 7,c1 1 1,0 7,7,l1 6 zH0,Zs0 5 0 0 zL8 4 7,zA8,8 5,9 2,6 4,l2 2,L9 4,V
-Parsed as 4 command(s) [MCCC]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
+Parsed as 4 command(s) [MQss]: M1,1Q2 9,4 1,s6,3 6,9,s6 0,0,6,1 zc2,1 7 0,1 4,Z2 A3,4 5,4,6,8,2 ZV5 t2 6,v8,t9,1 V5 l9,5 s6,9,2 9,T1 9 
 Parsed as 1 command(s) [M]: M1,1a9,2 6 1 2 2 2,za9 0 2 8,2,3,3 s5,8,8 1,HC5 8 5,8,4 2 c8 4 5 2 5 9,l3 9,H7 s6 2,0 0 a4 9,1 6,3,7,0,M6,
 Could not parse: 
 Could not parse: M
diff --git a/LayoutTests/svg/dom/path-parser-expected.txt b/LayoutTests/svg/dom/path-parser-expected.txt
index 8f48efc..b27305b 100644
--- a/LayoutTests/svg/dom/path-parser-expected.txt
+++ b/LayoutTests/svg/dom/path-parser-expected.txt
@@ -14,41 +14,41 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS parsePath('M1,2') is 'M1,2'
-PASS parsePath('m1,2') is 'M1,2'
-PASS parsePath('M100,200 m3,4') is 'M100,200 M103,204'
+PASS parsePath('m1,2') is 'm1,2'
+PASS parsePath('M100,200 m3,4') is 'M100,200 m3,4'
 PASS parsePath('M100,200 L3,4') is 'M100,200 L3,4'
-PASS parsePath('M100,200 l3,4') is 'M100,200 L103,204'
-PASS parsePath('M100,200 H3') is 'M100,200 L3,200'
-PASS parsePath('M100,200 h3') is 'M100,200 L103,200'
-PASS parsePath('M100,200 V3') is 'M100,200 L100,3'
-PASS parsePath('M100,200 v3') is 'M100,200 L100,203'
+PASS parsePath('M100,200 l3,4') is 'M100,200 l3,4'
+PASS parsePath('M100,200 H3') is 'M100,200 H3'
+PASS parsePath('M100,200 h3') is 'M100,200 h3'
+PASS parsePath('M100,200 V3') is 'M100,200 V3'
+PASS parsePath('M100,200 v3') is 'M100,200 v3'
 PASS parsePath('M100,200 Z') is 'M100,200 Z'
 PASS parsePath('M100,200 z') is 'M100,200 Z'
 PASS parsePath('M100,200 C3,4,5,6,7,8') is 'M100,200 C3,4,5,6,7,8'
-PASS parsePath('M100,200 c3,4,5,6,7,8') is 'M100,200 C103,204,105,206,107,208'
-PASS parsePath('M100,200 S3,4,5,6') is 'M100,200 C100,200,3,4,5,6'
-PASS parsePath('M100,200 s3,4,5,6') is 'M100,200 C100,200,103,204,105,206'
-PASS parsePath('M100,200 Q3,4,5,6') is 'M100,200 C35.3,69.3,3.7,4.7,5,6'
-PASS parsePath('M100,200 q3,4,5,6') is 'M100,200 C102,202.7,103.7,204.7,105,206'
-PASS parsePath('M100,200 T3,4') is 'M100,200 C100,200,67.7,134.7,3,4'
-PASS parsePath('M100,200 t3,4') is 'M100,200 C100,200,101,201.3,103,204'
-PASS parsePath('M100,200 A3,4,5,0,0,6,7') is 'M100,200 C141.5,162.8,154.1,89.5,128.2,36.2 C102.2,-17.1,47.5,-30.2,6,7'
-PASS parsePath('M100,200 A3,4,5,1,0,6,7') is 'M100,200 C141.5,162.8,154.2,89.4,128.2,36.1 C102.2,-17.2,47.5,-30.2,6,7'
-PASS parsePath('M100,200 A3,4,5,0,1,6,7') is 'M100,200 C58.5,237.2,3.8,224.1,-22.2,170.8 C-48.1,117.5,-35.5,44.2,6,7'
-PASS parsePath('M100,200 A3,4,5,1,1,6,7') is 'M100,200 C58.5,237.2,3.8,224.2,-22.2,170.9 C-48.2,117.6,-35.5,44.2,6,7'
-PASS parsePath('M100,200 a3,4,5,0,0,6,7') is 'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'
-PASS parsePath('M100,200 a3,4,5,0,1,6,7') is 'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'
-PASS parsePath('M100,200 a3,4,5,1,0,6,7') is 'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'
-PASS parsePath('M100,200 a3,4,5,1,1,6,7') is 'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'
-PASS parsePath('M100,200 a3,4,5,006,7') is 'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'
-PASS parsePath('M100,200 a3,4,5,016,7') is 'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'
-PASS parsePath('M100,200 a3,4,5,106,7') is 'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'
-PASS parsePath('M100,200 a3,4,5,116,7') is 'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'
+PASS parsePath('M100,200 c3,4,5,6,7,8') is 'M100,200 c3,4,5,6,7,8'
+PASS parsePath('M100,200 S3,4,5,6') is 'M100,200 S3,4,5,6'
+PASS parsePath('M100,200 s3,4,5,6') is 'M100,200 s3,4,5,6'
+PASS parsePath('M100,200 Q3,4,5,6') is 'M100,200 Q3,4,5,6'
+PASS parsePath('M100,200 q3,4,5,6') is 'M100,200 q3,4,5,6'
+PASS parsePath('M100,200 T3,4') is 'M100,200 T3,4'
+PASS parsePath('M100,200 t3,4') is 'M100,200 t3,4'
+PASS parsePath('M100,200 A3,4,5,0,0,6,7') is 'M100,200 A3,4,5,0,0,6,7'
+PASS parsePath('M100,200 A3,4,5,1,0,6,7') is 'M100,200 A3,4,5,1,0,6,7'
+PASS parsePath('M100,200 A3,4,5,0,1,6,7') is 'M100,200 A3,4,5,0,1,6,7'
+PASS parsePath('M100,200 A3,4,5,1,1,6,7') is 'M100,200 A3,4,5,1,1,6,7'
+PASS parsePath('M100,200 a3,4,5,0,0,6,7') is 'M100,200 a3,4,5,0,0,6,7'
+PASS parsePath('M100,200 a3,4,5,0,1,6,7') is 'M100,200 a3,4,5,0,1,6,7'
+PASS parsePath('M100,200 a3,4,5,1,0,6,7') is 'M100,200 a3,4,5,1,0,6,7'
+PASS parsePath('M100,200 a3,4,5,1,1,6,7') is 'M100,200 a3,4,5,1,1,6,7'
+PASS parsePath('M100,200 a3,4,5,006,7') is 'M100,200 a3,4,5,0,0,6,7'
+PASS parsePath('M100,200 a3,4,5,016,7') is 'M100,200 a3,4,5,0,1,6,7'
+PASS parsePath('M100,200 a3,4,5,106,7') is 'M100,200 a3,4,5,1,0,6,7'
+PASS parsePath('M100,200 a3,4,5,116,7') is 'M100,200 a3,4,5,1,1,6,7'
 PASS parsePath('M100,200 a3,4,5,2,1,6,7') is 'M100,200'
 PASS parsePath('M100,200 a3,4,5,1,2,6,7') is 'M100,200'
-PASS parsePath('M100,200 a0,4,5,0,0,10,0 a4,0,5,0,0,0,10 a0,0,5,0,0,-10,0 z') is 'M100,200 L110,200 L110,210 L100,210 Z'
+PASS parsePath('M100,200 a0,4,5,0,0,10,0 a4,0,5,0,0,0,10 a0,0,5,0,0,-10,0 z') is 'M100,200 l10,0 l0,10 l-10,0 Z'
 PASS parsePath('M1,2,3,4') is 'M1,2 L3,4'
-PASS parsePath('m100,200,3,4') is 'M100,200 L103,204'
+PASS parsePath('m100,200,3,4') is 'm100,200 l3,4'
 PASS parsePath('M 100-200') is 'M100,-200'
 PASS parsePath('M 0.6.5') is 'M0.6,0.5'
 PASS parsePath(' M1,2') is 'M1,2'
diff --git a/LayoutTests/svg/dom/script-tests/path-parser.js b/LayoutTests/svg/dom/script-tests/path-parser.js
index 60b6476..f835d9d 100644
--- a/LayoutTests/svg/dom/script-tests/path-parser.js
+++ b/LayoutTests/svg/dom/script-tests/path-parser.js
@@ -4,21 +4,31 @@ var pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path")
 
 var pathProperties = {
     "M": [ "x", "y" ],
+    "m": [ "x", "y" ],
     "L": [ "x", "y" ],
+    "l": [ "x", "y" ],
     "H": [ "x" ],
+    "h": [ "x" ],
     "V": [ "y" ],
+    "v": [ "y" ],
     "Z": [ ],
+    "z": [ ],
     "C": [ "x1", "y1", "x2", "y2", "x", "y" ],
+    "c": [ "x1", "y1", "x2", "y2", "x", "y" ],
     "S": [ "x2", "y2", "x", "y" ],
+    "s": [ "x2", "y2", "x", "y" ],
     "Q": [ "x1", "y1", "x", "y" ],
+    "q": [ "x1", "y1", "x", "y" ],
     "T": [ "x", "y" ],
+    "t": [ "x", "y" ],
     "A": [ "r1", "r2", "angle", "largeArcFlag", "sweepFlag", "x", "y" ],
+    "a": [ "r1", "r2", "angle", "largeArcFlag", "sweepFlag", "x", "y" ]
 };
 
 function printSegment(segment)
 {
     var letter = segment.pathSegTypeAsLetter;
-    var names = pathProperties[letter.toUpperCase()];
+    var names = pathProperties[letter];
     if (!names)
         return letter + "?";
     var string = letter;
@@ -57,42 +67,45 @@ function parsePath(string)
 }
 
 shouldBe("parsePath('M1,2')", "'M1,2'");
-shouldBe("parsePath('m1,2')", "'M1,2'");
-shouldBe("parsePath('M100,200 m3,4')", "'M100,200 M103,204'");
+shouldBe("parsePath('m1,2')", "'m1,2'");
+shouldBe("parsePath('M100,200 m3,4')", "'M100,200 m3,4'");
 shouldBe("parsePath('M100,200 L3,4')", "'M100,200 L3,4'");
-shouldBe("parsePath('M100,200 l3,4')", "'M100,200 L103,204'");
-shouldBe("parsePath('M100,200 H3')", "'M100,200 L3,200'");
-shouldBe("parsePath('M100,200 h3')", "'M100,200 L103,200'");
-shouldBe("parsePath('M100,200 V3')", "'M100,200 L100,3'");
-shouldBe("parsePath('M100,200 v3')", "'M100,200 L100,203'");
+shouldBe("parsePath('M100,200 l3,4')", "'M100,200 l3,4'");
+shouldBe("parsePath('M100,200 H3')", "'M100,200 H3'");
+shouldBe("parsePath('M100,200 h3')", "'M100,200 h3'");
+shouldBe("parsePath('M100,200 V3')", "'M100,200 V3'");
+shouldBe("parsePath('M100,200 v3')", "'M100,200 v3'");
 shouldBe("parsePath('M100,200 Z')", "'M100,200 Z'");
 shouldBe("parsePath('M100,200 z')", "'M100,200 Z'");
 shouldBe("parsePath('M100,200 C3,4,5,6,7,8')", "'M100,200 C3,4,5,6,7,8'");
-shouldBe("parsePath('M100,200 c3,4,5,6,7,8')", "'M100,200 C103,204,105,206,107,208'");
-shouldBe("parsePath('M100,200 S3,4,5,6')", "'M100,200 C100,200,3,4,5,6'");
-shouldBe("parsePath('M100,200 s3,4,5,6')", "'M100,200 C100,200,103,204,105,206'");
-shouldBe("parsePath('M100,200 Q3,4,5,6')", "'M100,200 C35.3,69.3,3.7,4.7,5,6'");
-shouldBe("parsePath('M100,200 q3,4,5,6')", "'M100,200 C102,202.7,103.7,204.7,105,206'");
-shouldBe("parsePath('M100,200 T3,4')", "'M100,200 C100,200,67.7,134.7,3,4'");
-shouldBe("parsePath('M100,200 t3,4')", "'M100,200 C100,200,101,201.3,103,204'");
-shouldBe("parsePath('M100,200 A3,4,5,0,0,6,7')", "'M100,200 C141.5,162.8,154.1,89.5,128.2,36.2 C102.2,-17.1,47.5,-30.2,6,7'");
-shouldBe("parsePath('M100,200 A3,4,5,1,0,6,7')", "'M100,200 C141.5,162.8,154.2,89.4,128.2,36.1 C102.2,-17.2,47.5,-30.2,6,7'");
-shouldBe("parsePath('M100,200 A3,4,5,0,1,6,7')", "'M100,200 C58.5,237.2,3.8,224.1,-22.2,170.8 C-48.1,117.5,-35.5,44.2,6,7'");
-shouldBe("parsePath('M100,200 A3,4,5,1,1,6,7')", "'M100,200 C58.5,237.2,3.8,224.2,-22.2,170.9 C-48.2,117.6,-35.5,44.2,6,7'");
-shouldBe("parsePath('M100,200 a3,4,5,0,0,6,7')", "'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,0,1,6,7')", "'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,1,0,6,7')", "'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,1,1,6,7')", "'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,006,7')", "'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,016,7')", "'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,106,7')", "'M100,200 C98.5,202.3,98.6,205.7,100.2,207.7 C101.9,209.6,104.5,209.3,106,207'");
-shouldBe("parsePath('M100,200 a3,4,5,116,7')", "'M100,200 C101.5,197.7,104.1,197.4,105.8,199.3 C107.4,201.3,107.5,204.7,106,207'");
+shouldBe("parsePath('M100,200 c3,4,5,6,7,8')", "'M100,200 c3,4,5,6,7,8'");
+shouldBe("parsePath('M100,200 S3,4,5,6')", "'M100,200 S3,4,5,6'");
+shouldBe("parsePath('M100,200 s3,4,5,6')", "'M100,200 s3,4,5,6'");
+shouldBe("parsePath('M100,200 Q3,4,5,6')", "'M100,200 Q3,4,5,6'");
+shouldBe("parsePath('M100,200 q3,4,5,6')", "'M100,200 q3,4,5,6'");
+shouldBe("parsePath('M100,200 T3,4')", "'M100,200 T3,4'");
+shouldBe("parsePath('M100,200 t3,4')", "'M100,200 t3,4'");
+shouldBe("parsePath('M100,200 A3,4,5,0,0,6,7')", "'M100,200 A3,4,5,0,0,6,7'");
+shouldBe("parsePath('M100,200 A3,4,5,1,0,6,7')", "'M100,200 A3,4,5,1,0,6,7'");
+shouldBe("parsePath('M100,200 A3,4,5,0,1,6,7')", "'M100,200 A3,4,5,0,1,6,7'");
+shouldBe("parsePath('M100,200 A3,4,5,1,1,6,7')", "'M100,200 A3,4,5,1,1,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,0,0,6,7')", "'M100,200 a3,4,5,0,0,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,0,1,6,7')", "'M100,200 a3,4,5,0,1,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,1,0,6,7')", "'M100,200 a3,4,5,1,0,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,1,1,6,7')", "'M100,200 a3,4,5,1,1,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,006,7')", "'M100,200 a3,4,5,0,0,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,016,7')", "'M100,200 a3,4,5,0,1,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,106,7')", "'M100,200 a3,4,5,1,0,6,7'");
+shouldBe("parsePath('M100,200 a3,4,5,116,7')", "'M100,200 a3,4,5,1,1,6,7'");
 shouldBe("parsePath('M100,200 a3,4,5,2,1,6,7')", "'M100,200'");
 shouldBe("parsePath('M100,200 a3,4,5,1,2,6,7')", "'M100,200'");
-shouldBe("parsePath('M100,200 a0,4,5,0,0,10,0 a4,0,5,0,0,0,10 a0,0,5,0,0,-10,0 z')", "'M100,200 L110,200 L110,210 L100,210 Z'");
+
+// FIXME: This uses 'If rx = 0 or ry = 0 then this arc is treated as a straight line segment (a "lineto") joining the endpoints.'
+// I think the SVG DOM should still show the arc segment, fix that!
+shouldBe("parsePath('M100,200 a0,4,5,0,0,10,0 a4,0,5,0,0,0,10 a0,0,5,0,0,-10,0 z')", "'M100,200 l10,0 l0,10 l-10,0 Z'");
 
 shouldBe("parsePath('M1,2,3,4')", "'M1,2 L3,4'");
-shouldBe("parsePath('m100,200,3,4')", "'M100,200 L103,204'");
+shouldBe("parsePath('m100,200,3,4')", "'m100,200 l3,4'");
 
 shouldBe("parsePath('M 100-200')", "'M100,-200'");
 shouldBe("parsePath('M 0.6.5')", "'M0.6,0.5'");
diff --git a/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error-expected.txt b/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error-expected.txt
index 83af6bb..dda168c 100644
--- a/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error-expected.txt
+++ b/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error-expected.txt
@@ -3,42 +3,42 @@ Tests that out of bounds accesses of SVGList correctly throw exceptions
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS svgList.getItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.insertItemBefore(null, i) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS svgList.insertItemBefore(seg, i) is seg
-PASS svgList.replaceItem(seg, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.replaceItem(null, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.removeItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.getItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.insertItemBefore(null, i) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS svgList.insertItemBefore(seg, i) is seg
-PASS svgList.replaceItem(seg, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.replaceItem(null, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.removeItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.getItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.insertItemBefore(null, i) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS svgList.insertItemBefore(seg, i) is seg
-PASS svgList.replaceItem(seg, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.replaceItem(null, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.removeItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.getItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.insertItemBefore(null, i) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS svgList.insertItemBefore(seg, i) is seg
-PASS svgList.replaceItem(seg, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.replaceItem(null, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.removeItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.getItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.insertItemBefore(null, i) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS svgList.insertItemBefore(seg, i) is seg
-PASS svgList.replaceItem(seg, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.replaceItem(null, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.removeItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.getItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.insertItemBefore(null, i) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
-PASS svgList.insertItemBefore(seg, i) is seg
-PASS svgList.replaceItem(seg, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.replaceItem(null, i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
-PASS svgList.removeItem(i) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.getItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.insertItemBefore(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.insertItemBefore(seg, index) is seg
+PASS svgList.replaceItem(seg, index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.replaceItem(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.removeItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.getItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.insertItemBefore(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.insertItemBefore(seg, index) is seg
+PASS svgList.replaceItem(seg, index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.replaceItem(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.removeItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.getItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.insertItemBefore(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.insertItemBefore(seg, index) is seg
+PASS svgList.replaceItem(seg, index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.replaceItem(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.removeItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.getItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.insertItemBefore(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.insertItemBefore(seg, index) is seg
+PASS svgList.replaceItem(seg, index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.replaceItem(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.removeItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.getItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.insertItemBefore(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.insertItemBefore(seg, index) is seg
+PASS svgList.replaceItem(seg, index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.replaceItem(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.removeItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.getItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.insertItemBefore(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.insertItemBefore(seg, index) is seg
+PASS svgList.replaceItem(seg, index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
+PASS svgList.replaceItem(null, index) threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS svgList.removeItem(index) threw exception Error: INDEX_SIZE_ERR: DOM Exception 1.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error.html b/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error.html
index 1a0d571..f30756a 100644
--- a/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error.html
+++ b/LayoutTests/svg/dom/svglist-exception-on-out-bounds-error.html
@@ -13,14 +13,15 @@
     var svgList = path.pathSegList;
     var indicesToTest = [-Infinity, NaN, -1, 0, 1, Infinity];
     for (var i = 0; i < indicesToTest.length; i++) {
-         shouldThrow("svgList.getItem(i)");
-         shouldThrow("svgList.insertItemBefore(null, i)");
+         var index = indicesToTest[i];
+         shouldThrow("svgList.getItem(index)");
+         shouldThrow("svgList.insertItemBefore(null, index)");
          var seg = path.createSVGPathSegClosePath();
-         shouldBe("svgList.insertItemBefore(seg, i)", "seg");
+         shouldBe("svgList.insertItemBefore(seg, index)", "seg");
          svgList.removeItem(0);
-         shouldThrow("svgList.replaceItem(seg, i)");
-         shouldThrow("svgList.replaceItem(null, i)");
-         shouldThrow("svgList.removeItem(i)");
+         shouldThrow("svgList.replaceItem(seg, index)");
+         shouldThrow("svgList.replaceItem(null, index)");
+         shouldThrow("svgList.removeItem(index)");
     }
     successfullyParsed = true;
 </script>
diff --git a/LayoutTests/svg/dom/svgpath-out-of-bounds-getPathSeg-expected.txt b/LayoutTests/svg/dom/svgpath-out-of-bounds-getPathSeg-expected.txt
index f02ab55..bef59ec 100644
--- a/LayoutTests/svg/dom/svgpath-out-of-bounds-getPathSeg-expected.txt
+++ b/LayoutTests/svg/dom/svgpath-out-of-bounds-getPathSeg-expected.txt
@@ -3,7 +3,7 @@ Tests that an exception is thrown if we try to get a pathSeg for a length out of
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS path.pathSegList.initialize(); threw exception Error: TYPE_MISMATCH_ERR: DOM Exception 17.
+PASS path.pathSegList.initialize(); threw exception SyntaxError: Not enough arguments.
 PASS path.getPathSegAtLength(0) is 0
 PASS path.insertItemBefore(null, 0) threw exception TypeError: 'undefined' is not a function (evaluating 'path.insertItemBefore(null, 0)').
 PASS path.replaceItem(null, 0) threw exception TypeError: 'undefined' is not a function (evaluating 'path.replaceItem(null, 0)').
diff --git a/WebCore/Android.mk b/WebCore/Android.mk
index cc490ee..23c59b4 100644
--- a/WebCore/Android.mk
+++ b/WebCore/Android.mk
@@ -861,7 +861,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
 	svg/SVGAnimateElement.cpp \
 	svg/SVGAnimateMotionElement.cpp \
 	svg/SVGAnimateTransformElement.cpp \
-	svg/SVGAnimatedPathData.cpp \
 	svg/SVGAnimationElement.cpp \
 	svg/SVGCircleElement.cpp \
 	svg/SVGClipPathElement.cpp \
@@ -940,20 +939,9 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
 	svg/SVGPathElement.cpp \
 	svg/SVGPathParser.cpp \
 	svg/SVGPathParserFactory.cpp \
-	svg/SVGPathSeg.cpp \
-	svg/SVGPathSegArc.cpp \
-	svg/SVGPathSegClosePath.cpp \
-	svg/SVGPathSegCurvetoCubic.cpp \
-	svg/SVGPathSegCurvetoCubicSmooth.cpp \
-	svg/SVGPathSegCurvetoQuadratic.cpp \
-	svg/SVGPathSegCurvetoQuadraticSmooth.cpp \
-	svg/SVGPathSegLineto.cpp \
-	svg/SVGPathSegLinetoHorizontal.cpp \
-	svg/SVGPathSegLinetoVertical.cpp \
 	svg/SVGPathSegList.cpp \
 	svg/SVGPathSegListBuilder.cpp \
 	svg/SVGPathSegListSource.cpp \
-	svg/SVGPathSegMoveto.cpp \
 	svg/SVGPathStringBuilder.cpp \
 	svg/SVGPathStringSource.cpp \
 	svg/SVGPathTraversalStateBuilder.cpp \
diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
index 71b4571..3fbc7b5 100644
--- a/WebCore/CMakeLists.txt
+++ b/WebCore/CMakeLists.txt
@@ -99,7 +99,6 @@ SET(WebCore_IDL_INCLUDES
 
 SET(WebCore_IDL_PURE_FILES
     svg/ElementTimeControl.idl
-    svg/SVGAnimatedPathData.idl
     svg/SVGExternalResourcesRequired.idl
     svg/SVGFilterPrimitiveStandardAttributes.idl
     svg/SVGFitToViewBox.idl
@@ -1717,7 +1716,6 @@ IF (ENABLE_SVG)
         bindings/js/JSSVGElementInstanceCustom.cpp
         bindings/js/JSSVGLengthCustom.cpp
         bindings/js/JSSVGPathSegCustom.cpp
-        bindings/js/JSSVGPathSegListCustom.cpp
         css/SVGCSSComputedStyleDeclaration.cpp
         css/SVGCSSParser.cpp
         css/SVGCSSStyleSelector.cpp
@@ -1781,7 +1779,6 @@ IF (ENABLE_SVG)
         svg/SVGAnimateElement.cpp
         svg/SVGAnimateMotionElement.cpp
         svg/SVGAnimateTransformElement.cpp
-        svg/SVGAnimatedPathData.cpp
         svg/SVGAnimationElement.cpp
         svg/SVGCircleElement.cpp
         svg/SVGClipPathElement.cpp
@@ -1861,20 +1858,9 @@ IF (ENABLE_SVG)
         svg/SVGPathElement.cpp
         svg/SVGPathParser.cpp
         svg/SVGPathParserFactory.cpp
-        svg/SVGPathSeg.cpp
-        svg/SVGPathSegArc.cpp
-        svg/SVGPathSegClosePath.cpp
-        svg/SVGPathSegCurvetoCubic.cpp
-        svg/SVGPathSegCurvetoCubicSmooth.cpp
-        svg/SVGPathSegCurvetoQuadratic.cpp
-        svg/SVGPathSegCurvetoQuadraticSmooth.cpp
-        svg/SVGPathSegLineto.cpp
-        svg/SVGPathSegLinetoHorizontal.cpp
-        svg/SVGPathSegLinetoVertical.cpp
         svg/SVGPathSegList.cpp
         svg/SVGPathSegListBuilder.cpp
         svg/SVGPathSegListSource.cpp
-        svg/SVGPathSegMoveto.cpp
         svg/SVGPathStringBuilder.cpp
         svg/SVGPathStringSource.cpp
         svg/SVGPathTraversalStateBuilder.cpp
@@ -1924,6 +1910,7 @@ IF (ENABLE_SVG)
         svg/graphics/filters/SVGFEImage.cpp
         svg/graphics/filters/SVGFilter.cpp
         svg/graphics/filters/SVGFilterBuilder.cpp
+        svg/properties/SVGPathSegListPropertyTearOff.cpp
     )
 ENDIF()
 
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 5f2be5a..01242ed 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,230 @@
+2010-11-19  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=49580
+
+        SVGPathElement.cloneNode loses generated pathSegList
+        https://bugs.webkit.org/show_bug.cgi?id=43388
+
+        SVG Path elements are not correctly updated through pathSegList manipulation on relative values
+        https://bugs.webkit.org/show_bug.cgi?id=30219
+
+        Changing an SVGPathSeg does not update a following Smooth Cubic Curveto
+        https://bugs.webkit.org/show_bug.cgi?id=19741
+
+        SVGPathElement should only build SVGPathSeg* list on demand
+        https://bugs.webkit.org/show_bug.cgi?id=10827
+
+        Tests: svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg
+               svg/dom/SVGPathSegList-appendItem.xhtml
+               svg/dom/SVGPathSegList-clear-and-initialize.xhtml
+               svg/dom/SVGPathSegList-cloning.html
+               svg/dom/SVGPathSegList-insertItemBefore.xhtml
+               svg/dom/SVGPathSegList-removeItem.xhtml
+               svg/dom/SVGPathSegList-replaceItem.xhtml
+               svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml
+               svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml
+               svg/dom/SVGPathSegList-segment-modification.svg
+
+        Convert SVGPathSeg*/SVGPathSegList to the new SVG(Animated)PropertyTearOff concept.
+        Unlike all other SVG* types that use the SVGPropertyTearOff concept, SVGPathSegs are already refcounted,
+        and don't need to be wrapped in SVGPropertyTearOff objects. The consequence is that SVGPathSegs need to track
+        themselves to which list and path element they belong. Introduce new SVGAnimatedPathSegListPropertyTearOff
+        and SVGPathSegListPropertyTearOff classes, that encapsulate the special needed for SVGPathSegList.
+
+        Each SVGPathSeg now needs to store a RefPtr<SVGPathElement> - this makes it impossible to use SVGPathSegList
+        to represent the 'd' attribute internally in SVGPathElement. SVGPathSegList is now only used in the SVG DOM bindings
+        if someone explicitely requests 'pathElement.pathSegList' (eg. via JS). Switch to use SVGPathByteStream to store
+        the 'd' attribute data in SVGPathElement, which is much more compact, and less memory intensive.
+        Dirk already prepared SVGPathParserFactory some months ago, which allows easy conversion between
+        String/Path/SVGPathSegList/SVGPathByteStream in all directions, including normalizing the lists, when requested.
+
+        As consequence SVGPathSegList is now only built on demand, when explicitely requested. Using the SVGAnimatedProperty
+        concept gives us 'd' attribute <-> SVGPathSegList synchronization for free, fixing several bugs, listed above.
+
+        * Android.mk: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
+        * CMakeLists.txt: Ditto.
+        * DerivedSources.make: Remove SVGAnimatedPathData IDL generation.
+        * GNUmakefile.am: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
+        * WebCore.gyp/WebCore.gyp: Remove SVGAnimatedPathData IDL generation.
+        * WebCore.gypi: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
+        * WebCore.order: Remove no-longer existant SVGAnimatedPathData symbols.
+        * WebCore.pro:  Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp / JSSVGPathSegCustom.* from build.
+        * WebCore.vcproj/WebCore.vcproj: Ditto.
+        * WebCore.xcodeproj/project.pbxproj: Ditto.
+        * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGPathSegCustom.cpp from build.
+        * bindings/js/JSDOMBinding.cpp: Adapt to toJS() changes, remove context parameter.
+        (WebCore::setDOMException):
+        * bindings/js/JSDOMBinding.h: Remove obsolete CREATE_SVG_OBJECT_WRAPPER macro, the context parameter is not existant anymore.
+        * bindings/js/JSSVGPathSegCustom.cpp: Replace CREATE_SVG_OBJECT_WRAPPER by CREATE_DOM_OBJECT_WRAPPER. Remove context parameter/handling.
+        (WebCore::toJS):
+        * bindings/js/JSSVGPathSegListCustom.cpp: Removed.
+        * bindings/scripts/CodeGenerator.pm: Map 'SVGPathSegList' IDL type to SVG 'SVGPathSegListPropertyTearOff' native type.
+        * bindings/scripts/CodeGeneratorJS.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages. Handle SVGPathSegListPropertyTearOff.
+        * bindings/scripts/CodeGeneratorObjC.pm: Handle SVGPathSegListPropertyTearOff.
+        * bindings/scripts/CodeGeneratorV8.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages.
+        * rendering/SVGRenderTreeAsText.cpp: Build path string from byte stream, not path segment list.
+        (WebCore::operator<<):
+        * svg/SVGAllInOne.cpp: Remove obsolete cpp files.
+        * svg/SVGAnimatedPathData.cpp: Removed.
+        * svg/SVGAnimatedPathData.h: Removed.
+        * svg/SVGAnimatedPathData.idl: Removed.
+        * svg/SVGPathElement.cpp: Build SVGPathList on demand. Use SVGPathByteStream to parse/store the 'd' attribute content.
+        (WebCore::SVGPathElement::SVGPathElement):
+        (WebCore::SVGPathElement::getPathSegAtLength): Use SVGPathByteStream, not SVGPathSegList to determine the getPathSegAtLength() information.
+        (WebCore::SVGPathElement::createSVGPathSegClosePath): Pass SVGPathElement to SVGPathSeg and a SVGPathSegRole parameter and store it to track the list origin.
+        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegMovetoRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegArcAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegArcRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Ditto.
+        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Ditto.
+        (WebCore::SVGPathElement::parseMappedAttribute): Build SVGPathByteStream from 'd' attribute, not a SVGPathSegList.
+        (WebCore::SVGPathElement::svgAttributeChanged): If a SVGPathSegList object has been built, synchronize it with the 'd' attribute.
+        (WebCore::SVGPathElement::synchronizeProperty): Synchronize 'd' attribute with the SVGPathSegList, if needed.
+        (WebCore::SVGPathElement::synchronizeD): Added.
+        (WebCore::SVGPathElement::pathSegList): Use same trick as in SVGPolyElement to expose the 'pathSegList' / 'animatedPathSegList' object to the SVG DOM bindings.
+        (WebCore::SVGPathElement::normalizedPathSegList): Ditto.
+        (WebCore::SVGPathElement::animatedPathSegList): Ditto.
+        (WebCore::SVGPathElement::animatedNormalizedPathSegList): Ditto.
+        (WebCore::SVGPathElement::toPathData): Build 'Path' object from SVGPathByteStream, not from SVGPathSegList.
+        (WebCore::SVGPathElement::pathSegListChanged): Used to synchronize the SVGPathSegLists and the d attribute, as well as any changes from any SVGPathSeg associated with this SVGPathElement.
+        * svg/SVGPathElement.h: Add new accessors...
+        (WebCore::SVGPathElement::pathByteStream): ... needed by SVGRenderTreeAsText.
+        (WebCore::SVGPathElement::animatablePathSegList): ... needed by SVGPathSegListPropertyTearOff.
+        * svg/SVGPathElement.idl: Merge SVGAnimatedPathData interface into SVGPathElement.
+        * svg/SVGPathParserFactory.cpp: Cleanup SVGPathParserFactory, remove obsolete methods, now that SVGPathElement switched to using SVGPathByteStream internally.
+        (WebCore::globalSVGPathSegListBuilder):
+        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromSVGPathSegList):
+        (WebCore::SVGPathParserFactory::buildPathFromByteStream):
+        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
+        (WebCore::SVGPathParserFactory::buildStringFromSVGPathSegList):
+        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
+        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
+        (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathByteStream):
+        * svg/SVGPathParserFactory.h:
+        * svg/SVGPathSeg.cpp: Removed.
+        * svg/SVGPathSeg.h: Add new SVGPathSegRole enum, identifying to which list a path segment belongs.
+        (WebCore::SVGPathSeg::SVGPathSeg):
+        * svg/SVGPathSeg.idl: Reindented.
+        * svg/SVGPathSegArc.cpp: Removed.
+        * svg/SVGPathSegArc.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegArcAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegArcRel.idl: Ditto.
+        * svg/SVGPathSegClosePath.cpp: Removed.
+        * svg/SVGPathSegClosePath.h:
+        * svg/SVGPathSegCurvetoCubic.cpp: Removed.
+        * svg/SVGPathSegCurvetoCubic.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegCurvetoCubicAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegCurvetoCubicRel.idl: Ditto.
+        * svg/SVGPathSegCurvetoCubicSmooth.cpp: Removed.
+        * svg/SVGPathSegCurvetoCubicSmooth.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegCurvetoCubicSmoothRel.idl: Ditto.
+        * svg/SVGPathSegCurvetoQuadratic.cpp: Removed.
+        * svg/SVGPathSegCurvetoQuadratic.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegCurvetoQuadraticAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegCurvetoQuadraticRel.idl: Ditto.
+        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp: Removed.
+        * svg/SVGPathSegCurvetoQuadraticSmooth.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl: Ditto.
+        * svg/SVGPathSegLineto.cpp: Removed.
+        * svg/SVGPathSegLineto.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegLinetoAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegLinetoHorizontal.cpp: Removed.
+        * svg/SVGPathSegLinetoHorizontal.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegLinetoHorizontalAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegLinetoHorizontalRel.idl: Ditto.
+        * svg/SVGPathSegLinetoRel.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegLinetoVertical.cpp: Removed.
+        * svg/SVGPathSegLinetoVertical.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegLinetoVerticalAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegLinetoVerticalRel.idl: Ditto.
+        * svg/SVGPathSegList.cpp: Switch from SVGList<RefPtr<SVGPathSeg> > to a plain Vector<RefPtr<SVGPathSeg> >.
+        (WebCore::SVGPathSegList::valueAsString): Utilize SVGPathParserFactory to build a String from a SVGPathSegList.
+        (WebCore::SVGPathSegList::commitChange): Call SVGPathElement::pathSegListChanged().
+        * svg/SVGPathSegList.h:
+        (WebCore::SVGPathSegList::SVGPathSegList):
+        * svg/SVGPathSegList.idl: Remove [JSCCustom] flags, no longer needed. 
+        * svg/SVGPathSegListBuilder.cpp: Adapt to SVGPathSegList API changes.
+        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
+        (WebCore::SVGPathSegListBuilder::moveTo):
+        (WebCore::SVGPathSegListBuilder::lineTo):
+        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
+        (WebCore::SVGPathSegListBuilder::lineToVertical):
+        (WebCore::SVGPathSegListBuilder::curveToCubic):
+        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
+        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
+        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
+        (WebCore::SVGPathSegListBuilder::arcTo):
+        (WebCore::SVGPathSegListBuilder::closePath):
+        * svg/SVGPathSegListBuilder.h: Ditto.
+        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathElement):
+        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList):
+        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegRole):
+        (WebCore::SVGPathSegListBuilder::cleanup):
+        * svg/SVGPathSegListSource.cpp: Ditto.
+        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
+        (WebCore::SVGPathSegListSource::parseSVGSegmentType):
+        (WebCore::SVGPathSegListSource::nextCommand):
+        (WebCore::SVGPathSegListSource::parseMoveToSegment):
+        (WebCore::SVGPathSegListSource::parseLineToSegment):
+        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
+        * svg/SVGPathSegListSource.h: Ditto.
+        (WebCore::SVGPathSegListSource::create):
+        * svg/SVGPathSegMoveto.cpp: Removed.
+        * svg/SVGPathSegMoveto.h: All setters now call the commitChange() method.
+        * svg/SVGPathSegMovetoAbs.idl: Enable StrictTypeChecking.
+        * svg/SVGPathSegMovetoRel.idl: Ditto.
+        * svg/SVGPathSegWithContext.h: Added. This is the new base class for all SVGPathSeg derived types, that's associated with a SVGPathElement and a 'role' (normalized/unaltered segment list).
+        (WebCore::SVGPathSegWithContext::SVGPathSegWithContext):
+        (WebCore::SVGPathSegWithContext::animatedProperty):
+        (WebCore::SVGPathSegWithContext::setContextAndRole):
+        (WebCore::SVGPathSegWithContext::commitChange):
+        (WebCore::SVGPathSegSingleCoordinate::x):
+        (WebCore::SVGPathSegSingleCoordinate::setX):
+        (WebCore::SVGPathSegSingleCoordinate::y):
+        (WebCore::SVGPathSegSingleCoordinate::setY):
+        (WebCore::SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate):
+        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Added. 
+        (WebCore::SVGAnimatedPathSegListPropertyTearOff::baseVal):
+        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animVal):
+        (WebCore::SVGAnimatedPathSegListPropertyTearOff::removeItemFromList):
+        (WebCore::SVGAnimatedPathSegListPropertyTearOff::create):
+        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
+        * svg/properties/SVGPathSegListPropertyTearOff.cpp: Added.
+        (WebCore::SVGPathSegListPropertyTearOff::clear): Added in the cpp file, not in the header, as it needs access to SVGPathSegWithContext, which we can't include from the header.
+        (WebCore::SVGPathSegListPropertyTearOff::getItem): Ditto.
+        (WebCore::SVGPathSegListPropertyTearOff::removeItem): Ditto.
+        (WebCore::SVGPathSegListPropertyTearOff::contextElement): Needs access to SVGPathElement, that's why it lives in the cpp file.
+        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemValue): Needs access to SVGPathSegWithContext.
+        * svg/properties/SVGPathSegListPropertyTearOff.h: Added.
+        (WebCore::SVGPathSegListPropertyTearOff::create):
+        (WebCore::SVGPathSegListPropertyTearOff::removeItemFromList):
+        (WebCore::SVGPathSegListPropertyTearOff::numberOfItems):
+        (WebCore::SVGPathSegListPropertyTearOff::initialize):
+        (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
+        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
+        (WebCore::SVGPathSegListPropertyTearOff::appendItem):
+        (WebCore::SVGPathSegListPropertyTearOff::SVGPathSegListPropertyTearOff):
+        (WebCore::SVGPathSegListPropertyTearOff::commitChange):
+        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemWrapper):
+
 2010-11-19  Pavel Feldman  <pfeldman at chromium.org>
 
         Not reviewed: one line follow up to r72376.
diff --git a/WebCore/DerivedSources.make b/WebCore/DerivedSources.make
index 1b6a266..793e155 100644
--- a/WebCore/DerivedSources.make
+++ b/WebCore/DerivedSources.make
@@ -329,7 +329,6 @@ DOM_CLASSES = \
     SVGAnimatedLengthList \
     SVGAnimatedNumber \
     SVGAnimatedNumberList \
-    SVGAnimatedPathData \
     SVGAnimatedPreserveAspectRatio \
     SVGAnimatedRect \
     SVGAnimatedString \
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index bae72a6..4a82421 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -798,7 +798,6 @@ webcore_sources += \
 	WebCore/bindings/js/JSSVGElementInstanceCustom.cpp \
 	WebCore/bindings/js/JSSVGLengthCustom.cpp \
 	WebCore/bindings/js/JSSVGPathSegCustom.cpp \
-	WebCore/bindings/js/JSSVGPathSegListCustom.cpp \
 	WebCore/bindings/js/JSSVGPODListCustom.h \
 	WebCore/bindings/js/JSSVGPODTypeWrapper.h \
 	WebCore/bindings/js/JSTextCustom.cpp \
@@ -3050,6 +3049,7 @@ webcore_sources += \
 	WebCore/svg/LinearGradientAttributes.h \
 	WebCore/svg/PatternAttributes.h \
 	WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h \
+	WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h \
 	WebCore/svg/properties/SVGAnimatedProperty.h \
 	WebCore/svg/properties/SVGAnimatedPropertyDescription.h \
 	WebCore/svg/properties/SVGAnimatedPropertyMacros.h \
@@ -3059,6 +3059,8 @@ webcore_sources += \
 	WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
 	WebCore/svg/properties/SVGListProperty.h \
 	WebCore/svg/properties/SVGListPropertyTearOff.h \
+	WebCore/svg/properties/SVGPathSegListPropertyTearOff.cpp \
+	WebCore/svg/properties/SVGPathSegListPropertyTearOff.h \
 	WebCore/svg/properties/SVGProperty.h \
 	WebCore/svg/properties/SVGPropertyTearOff.h \
 	WebCore/svg/properties/SVGPropertyTraits.h \
@@ -3083,8 +3085,6 @@ webcore_sources += \
 	WebCore/svg/SVGAnimatedLengthList.h \
 	WebCore/svg/SVGAnimatedNumber.h \
 	WebCore/svg/SVGAnimatedNumberList.h \
-	WebCore/svg/SVGAnimatedPathData.cpp \
-	WebCore/svg/SVGAnimatedPathData.h \
 	WebCore/svg/SVGAnimatedPreserveAspectRatio.h \
 	WebCore/svg/SVGAnimatedRect.h \
 	WebCore/svg/SVGAnimatedString.h \
@@ -3260,25 +3260,15 @@ webcore_sources += \
 	WebCore/svg/SVGPathParserFactory.cpp \
 	WebCore/svg/SVGPathParserFactory.h \
 	WebCore/svg/SVGPathParser.h \
-	WebCore/svg/SVGPathSegArc.cpp \
 	WebCore/svg/SVGPathSegArc.h \
-	WebCore/svg/SVGPathSegClosePath.cpp \
 	WebCore/svg/SVGPathSegClosePath.h \
-	WebCore/svg/SVGPathSeg.cpp \
-	WebCore/svg/SVGPathSegCurvetoCubic.cpp \
 	WebCore/svg/SVGPathSegCurvetoCubic.h \
-	WebCore/svg/SVGPathSegCurvetoCubicSmooth.cpp \
 	WebCore/svg/SVGPathSegCurvetoCubicSmooth.h \
-	WebCore/svg/SVGPathSegCurvetoQuadratic.cpp \
 	WebCore/svg/SVGPathSegCurvetoQuadratic.h \
-	WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.cpp \
 	WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.h \
 	WebCore/svg/SVGPathSeg.h \
-	WebCore/svg/SVGPathSegLineto.cpp \
 	WebCore/svg/SVGPathSegLineto.h \
-	WebCore/svg/SVGPathSegLinetoHorizontal.cpp \
 	WebCore/svg/SVGPathSegLinetoHorizontal.h \
-	WebCore/svg/SVGPathSegLinetoVertical.cpp \
 	WebCore/svg/SVGPathSegLinetoVertical.h \
 	WebCore/svg/SVGPathSegListBuilder.cpp \
 	WebCore/svg/SVGPathSegListBuilder.h \
@@ -3286,8 +3276,8 @@ webcore_sources += \
 	WebCore/svg/SVGPathSegList.h \
 	WebCore/svg/SVGPathSegListSource.cpp \
 	WebCore/svg/SVGPathSegListSource.h \
-	WebCore/svg/SVGPathSegMoveto.cpp \
 	WebCore/svg/SVGPathSegMoveto.h \
+	WebCore/svg/SVGPathSegWithContext.h \
 	WebCore/svg/SVGPathSource.h \
 	WebCore/svg/SVGPathStringBuilder.cpp \
 	WebCore/svg/SVGPathStringBuilder.h \
@@ -4210,7 +4200,6 @@ webcore_built_sources += \
 	DerivedSources/WebCore/JSSVGAnimatedNumber.h \
 	DerivedSources/WebCore/JSSVGAnimatedNumberList.cpp \
 	DerivedSources/WebCore/JSSVGAnimatedNumberList.h \
-	DerivedSources/WebCore/JSSVGAnimatedPathData.h \
 	DerivedSources/WebCore/JSSVGAnimatedPreserveAspectRatio.cpp \
 	DerivedSources/WebCore/JSSVGAnimatedPreserveAspectRatio.h \
 	DerivedSources/WebCore/JSSVGAnimatedRect.cpp \
diff --git a/WebCore/WebCore.gyp/WebCore.gyp b/WebCore/WebCore.gyp/WebCore.gyp
index 4792a2a..e8f343a 100644
--- a/WebCore/WebCore.gyp/WebCore.gyp
+++ b/WebCore/WebCore.gyp/WebCore.gyp
@@ -197,10 +197,8 @@
       # Bindings with custom Objective-C implementations.
       '../page/AbstractView.idl',
 
-      # FIXME: I don't know why all of these are excluded.
-      # Extra SVG bindings to exclude.
+      # These bindings are excluded, as they're only used through inheritance and don't define constants that would need a constructor.
       '../svg/ElementTimeControl.idl',
-      '../svg/SVGAnimatedPathData.idl',
       '../svg/SVGExternalResourcesRequired.idl',
       '../svg/SVGFilterPrimitiveStandardAttributes.idl',
       '../svg/SVGFitToViewBox.idl',
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index 1dacdf8..1feebfb 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -324,7 +324,6 @@
             'svg/SVGAnimatedLengthList.idl',
             'svg/SVGAnimatedNumber.idl',
             'svg/SVGAnimatedNumberList.idl',
-            'svg/SVGAnimatedPathData.idl',
             'svg/SVGAnimatedPreserveAspectRatio.idl',
             'svg/SVGAnimatedRect.idl',
             'svg/SVGAnimatedString.idl',
@@ -3966,6 +3965,7 @@
             'svg/graphics/SVGImage.h',
             'svg/properties/SVGAnimatedPropertySynchronizer.h',
             'svg/properties/SVGAnimatedListPropertyTearOff.h',
+            'svg/properties/SVGAnimatedPathSegListPropertyTearOff.h',
             'svg/properties/SVGAnimatedProperty.h',
             'svg/properties/SVGAnimatedPropertyDescription.h',
             'svg/properties/SVGAnimatedPropertyMacros.h',
@@ -3975,6 +3975,8 @@
             'svg/properties/SVGAnimatedTransformListPropertyTearOff.h',
             'svg/properties/SVGListProperty.h',
             'svg/properties/SVGListPropertyTearOff.h',
+            'svg/properties/SVGPathSegListPropertyTearOff.cpp',
+            'svg/properties/SVGPathSegListPropertyTearOff.h',
             'svg/properties/SVGProperty.h',
             'svg/properties/SVGPropertyTearOff.h',
             'svg/properties/SVGPropertyTraits.h',
@@ -4015,8 +4017,6 @@
             'svg/SVGAnimatedLengthList.h',
             'svg/SVGAnimatedNumber.h',
             'svg/SVGAnimatedNumberList.h',
-            'svg/SVGAnimatedPathData.cpp',
-            'svg/SVGAnimatedPathData.h',
             'svg/SVGAnimatedPreserveAspectRatio.h',
             'svg/SVGAnimatedRect.h',
             'svg/SVGAnimatedString.h',
@@ -4186,25 +4186,15 @@
             'svg/SVGPathParser.h',
             'svg/SVGPathParserFactory.cpp',
             'svg/SVGPathParserFactory.h',
-            'svg/SVGPathSeg.cpp',
             'svg/SVGPathSeg.h',
-            'svg/SVGPathSegArc.cpp',
             'svg/SVGPathSegArc.h',
-            'svg/SVGPathSegClosePath.cpp',
             'svg/SVGPathSegClosePath.h',
-            'svg/SVGPathSegCurvetoCubic.cpp',
             'svg/SVGPathSegCurvetoCubic.h',
-            'svg/SVGPathSegCurvetoCubicSmooth.cpp',
             'svg/SVGPathSegCurvetoCubicSmooth.h',
-            'svg/SVGPathSegCurvetoQuadratic.cpp',
             'svg/SVGPathSegCurvetoQuadratic.h',
-            'svg/SVGPathSegCurvetoQuadraticSmooth.cpp',
             'svg/SVGPathSegCurvetoQuadraticSmooth.h',
-            'svg/SVGPathSegLineto.cpp',
             'svg/SVGPathSegLineto.h',
-            'svg/SVGPathSegLinetoHorizontal.cpp',
             'svg/SVGPathSegLinetoHorizontal.h',
-            'svg/SVGPathSegLinetoVertical.cpp',
             'svg/SVGPathSegLinetoVertical.h',
             'svg/SVGPathSegList.cpp',
             'svg/SVGPathSegList.h',
@@ -4212,8 +4202,8 @@
             'svg/SVGPathSegListBuilder.h',
             'svg/SVGPathSegListSource.cpp',
             'svg/SVGPathSegListSource.h',
-            'svg/SVGPathSegMoveto.cpp',
             'svg/SVGPathSegMoveto.h',
+            'svg/SVGPathSegWithContext.h',
             'svg/SVGPathSource.h',
             'svg/SVGPathStringBuilder.cpp',
             'svg/SVGPathStringBuilder.h',
diff --git a/WebCore/WebCore.order b/WebCore/WebCore.order
index 76f3275..a31461c 100644
--- a/WebCore/WebCore.order
+++ b/WebCore/WebCore.order
@@ -18669,7 +18669,6 @@ __ZN7WebCore24RenderSVGHiddenContainerC1EPNS_16SVGStyledElementE
 __ZN7WebCore24RenderSVGHiddenContainerC2EPNS_16SVGStyledElementE
 __ZN7WebCoreL15pathConstructorERKNS_13QualifiedNameEPNS_8DocumentEb
 __ZN7WebCore14SVGPathElementC1ERKNS_13QualifiedNameEPNS_8DocumentE
-__ZN7WebCore19SVGAnimatedPathDataC2Ev
 __ZN7WebCore14SVGPathElement20parseMappedAttributeEPNS_15MappedAttributeE
 __ZN7WebCore14SVGPathElement19svgAttributeChangedERKNS_13QualifiedNameE
 __ZNK7WebCore14SVGPathElement7isValidEv
@@ -18913,7 +18912,6 @@ __ZN7WebCore14SVGPathSegListD0Ev
 __ZN7WebCore19SVGPathSegMovetoAbsD0Ev
 __ZN7WebCore19SVGPathSegLinetoAbsD0Ev
 __ZN7WebCore19SVGPathSegClosePathD0Ev
-__ZN7WebCore19SVGAnimatedPathDataD2Ev
 __ZN3WTF6VectorINS_6RefPtrIN7WebCore14SVGPODListItemINS2_12SVGTransformEEEEELm0EE6shrinkEm
 __ZN7WebCore25SVGPathSegCurvetoCubicAbsD0Ev
 __ZN7WebCore15SVGTSpanElementD0Ev
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index b4555a6..7521903 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -2359,6 +2359,7 @@ HEADERS += \
     svg/graphics/filters/SVGFilter.h \
     svg/graphics/SVGImage.h \
     svg/properties/SVGAnimatedListPropertyTearOff.h \
+    svg/properties/SVGAnimatedPathSegListPropertyTearOff.h \
     svg/properties/SVGAnimatedProperty.h \
     svg/properties/SVGAnimatedPropertyDescription.h \
     svg/properties/SVGAnimatedPropertyMacros.h \
@@ -2368,6 +2369,8 @@ HEADERS += \
     svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
     svg/properties/SVGListProperty.h \
     svg/properties/SVGListPropertyTearOff.h \
+    svg/properties/SVGPathSegListPropertyTearOff.cpp \
+    svg/properties/SVGPathSegListPropertyTearOff.h \
     svg/properties/SVGProperty.h \
     svg/properties/SVGPropertyTearOff.h \
     svg/properties/SVGPropertyTraits.h \
@@ -2387,7 +2390,6 @@ HEADERS += \
     svg/SVGAnimatedLengthList.h \
     svg/SVGAnimatedNumber.h \
     svg/SVGAnimatedNumberList.h \
-    svg/SVGAnimatedPathData.h \
     svg/SVGAnimatedPreserveAspectRatio.h \
     svg/SVGAnimatedRect.h \
     svg/SVGAnimatedString.h \
@@ -3395,8 +3397,7 @@ contains(DEFINES, ENABLE_SVG=1) {
     # TODO: this-one-is-not-auto-added! FIXME! tmp/SVGElementFactory.cpp \
             bindings/js/JSSVGElementInstanceCustom.cpp \
             bindings/js/JSSVGLengthCustom.cpp \
-            bindings/js/JSSVGPathSegCustom.cpp \
-            bindings/js/JSSVGPathSegListCustom.cpp
+            bindings/js/JSSVGPathSegCustom.cpp
     }
 
     SOURCES += \
@@ -3431,7 +3432,6 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGAltGlyphElement.cpp \
         svg/SVGAngle.cpp \
         svg/SVGAnimateColorElement.cpp \
-        svg/SVGAnimatedPathData.cpp \
         svg/SVGAnimateElement.cpp \
         svg/SVGAnimateMotionElement.cpp \
         svg/SVGAnimateTransformElement.cpp \
@@ -3512,20 +3512,9 @@ contains(DEFINES, ENABLE_SVG=1) {
         svg/SVGPathElement.cpp \
         svg/SVGPathParser.cpp \
         svg/SVGPathParserFactory.cpp \
-        svg/SVGPathSeg.cpp \
-        svg/SVGPathSegArc.cpp \
-        svg/SVGPathSegClosePath.cpp \
-        svg/SVGPathSegCurvetoCubic.cpp \
-        svg/SVGPathSegCurvetoCubicSmooth.cpp \
-        svg/SVGPathSegCurvetoQuadratic.cpp \
-        svg/SVGPathSegCurvetoQuadraticSmooth.cpp \
-        svg/SVGPathSegLineto.cpp \
-        svg/SVGPathSegLinetoHorizontal.cpp \
-        svg/SVGPathSegLinetoVertical.cpp \
         svg/SVGPathSegList.cpp \
         svg/SVGPathSegListBuilder.cpp \
         svg/SVGPathSegListSource.cpp \
-        svg/SVGPathSegMoveto.cpp \
         svg/SVGPathStringBuilder.cpp \
         svg/SVGPathStringSource.cpp \
         svg/SVGPathTraversalStateBuilder.cpp \
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 1274c9b..b21942b 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -61959,10 +61959,6 @@
 				>
 			</File>
 			<File
-				RelativePath="..\svg\SVGAnimatedPathData.h"
-				>
-			</File>
-			<File
 				RelativePath="..\svg\SVGAnimatedPreserveAspectRatio.h"
 				>
 			</File>
@@ -63006,6 +63002,10 @@
 					>
 				</File>
 				<File
+					RelativePath="..\svg\properties\SVGAnimatedPathSegListPropertyTearOff.h"
+					>
+				</File>
+				<File
 					RelativePath="..\svg\properties\SVGAnimatedProperty.h"
 					>
 				</File>
@@ -63042,6 +63042,14 @@
 					>
 				</File>
 				<File
+					RelativePath="..\svg\properties\SVGPathSegListPropertyTearOff.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\svg\properties\SVGPathSegListPropertyTearOff.h"
+					>
+				</File>
+				<File
 					RelativePath="..\svg\properties\SVGProperty.h"
 					>
 				</File>
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index b9e51e0..c29b41d 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -97,6 +97,7 @@
 		082341C60FCF3A9500D75BD6 /* WMLSelectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 082341C40FCF3A9400D75BD6 /* WMLSelectElement.h */; };
 		0823D159127AD6AC000EBC95 /* SVGAnimatedInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */ = {isa = PBXBuildFile; fileRef = 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		082DE42D1292621600D923DF /* SVGPathSegWithContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 082DE42C1292621600D923DF /* SVGPathSegWithContext.h */; };
 		082FCAC4110927CE00CC4821 /* JSSVGContextCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		083192AA112B43050083C3B9 /* RenderSVGResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 083192A7112B43050083C3B9 /* RenderSVGResource.h */; };
 		083192AB112B43050083C3B9 /* RenderSVGResourceMasker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */; };
@@ -108,6 +109,7 @@
 		083DAEA70F01A7FB00342754 /* RenderTextControlMultiLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */; };
 		083DAEA80F01A7FB00342754 /* RenderTextControlSingleLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083DAEA40F01A7FB00342754 /* RenderTextControlSingleLine.cpp */; };
 		083DAEA90F01A7FB00342754 /* RenderTextControlSingleLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 083DAEA50F01A7FB00342754 /* RenderTextControlSingleLine.h */; };
+		084A0829128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 084A0828128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h */; };
 		084AEBE40FB505FA0038483E /* SelectElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084AEBE20FB505FA0038483E /* SelectElement.cpp */; };
 		084AEBE50FB505FA0038483E /* SelectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 084AEBE30FB505FA0038483E /* SelectElement.h */; };
 		084CE5CB0F27DADC00E6240E /* WMLOptGroupElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084CE5C70F27DADC00E6240E /* WMLOptGroupElement.cpp */; };
@@ -218,6 +220,7 @@
 		0897C14D0ED2EBA500AE06DB /* WMLBRElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0897C14B0ED2EBA400AE06DB /* WMLBRElement.h */; };
 		0897D97A0F007A4600411BB3 /* WMLMetaElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0897D9780F007A4600411BB3 /* WMLMetaElement.cpp */; };
 		0897D97B0F007A4600411BB3 /* WMLMetaElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0897D9790F007A4600411BB3 /* WMLMetaElement.h */; };
+		089A8E07128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 089A8E06128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h */; };
 		08A484770E5272C500C3FE76 /* ScriptElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08A484750E5272C500C3FE76 /* ScriptElement.cpp */; };
 		08A484780E5272C500C3FE76 /* ScriptElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A484760E5272C500C3FE76 /* ScriptElement.h */; };
 		08A48A6E0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */; };
@@ -265,6 +268,7 @@
 		08F2F0091213E61700DCEC48 /* RenderImageResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08F2F0071213E61700DCEC48 /* RenderImageResource.cpp */; };
 		08F2F00A1213E61700DCEC48 /* RenderImageResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 08F2F0081213E61700DCEC48 /* RenderImageResource.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		08FE0BC5127E2AC1000C4FB5 /* SVGAnimatedPreserveAspectRatio.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FE0BC4127E2AC1000C4FB5 /* SVGAnimatedPreserveAspectRatio.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		08FF102012950F5A00F00276 /* SVGPathSegListPropertyTearOff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08FF101F12950F5900F00276 /* SVGPathSegListPropertyTearOff.cpp */; };
 		0A4844990CA44CB200B7BD48 /* SoftLinking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A4844980CA44CB200B7BD48 /* SoftLinking.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0AFDAC3D10F5448C00E1F3D2 /* PluginViewBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AFDAC3C10F5448C00E1F3D2 /* PluginViewBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0B8C56D40F28627F000502E1 /* HTTPHeaderMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B8C56D30F28627F000502E1 /* HTTPHeaderMap.cpp */; };
@@ -2157,7 +2161,6 @@
 		85ACAA8E0A9B759C00671E90 /* DOMNodeList.mm in Sources */ = {isa = PBXBuildFile; fileRef = 85ACAA8A0A9B759C00671E90 /* DOMNodeList.mm */; };
 		85ACABB00A9CAF8000671E90 /* DOMDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 85ACABAE0A9CAF8000671E90 /* DOMDocument.h */; settings = {ATTRIBUTES = (); }; };
 		85ACABB10A9CAF8000671E90 /* DOMDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 85ACABAF0A9CAF8000671E90 /* DOMDocument.mm */; };
-		85ACEF0C0ACDCCCF001214FF /* DOMSVGAnimatedPathData.h in Headers */ = {isa = PBXBuildFile; fileRef = 85ACEF060ACDCCCF001214FF /* DOMSVGAnimatedPathData.h */; };
 		85ACEF0E0ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.h in Headers */ = {isa = PBXBuildFile; fileRef = 85ACEF080ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.h */; };
 		85ACEF0F0ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.mm in Sources */ = {isa = PBXBuildFile; fileRef = 85ACEF090ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.mm */; };
 		85ACEF100ACDCCCF001214FF /* DOMSVGPreserveAspectRatio.h in Headers */ = {isa = PBXBuildFile; fileRef = 85ACEF0A0ACDCCCF001214FF /* DOMSVGPreserveAspectRatio.h */; };
@@ -3491,7 +3494,6 @@
 		A8A909AC0CBCD6B50029B807 /* RenderSVGTransformableContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */; };
 		A8A909AD0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */; };
 		A8BC04921214F69600B5F122 /* HTMLEntityTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8BC04911214F69600B5F122 /* HTMLEntityTable.cpp */; };
-		A8BCFD05120A046100B5F122 /* SVGPathSeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8BCFD04120A046100B5F122 /* SVGPathSeg.cpp */; };
 		A8C2280E11D4A59700D5A7D3 /* DocumentParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */; };
 		A8C228A111D5722E00D5A7D3 /* DecodedDataDocumentParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */; };
 		A8C228A211D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8C228A011D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp */; };
@@ -3714,7 +3716,6 @@
 		A8E545A70CA9D1C20097D09B /* DOMSVGAnimatedStringInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544A90CA9D1C20097D09B /* DOMSVGAnimatedStringInternal.h */; };
 		A8E545A90CA9D1C20097D09B /* DOMSVGAnimatedRectInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544AB0CA9D1C20097D09B /* DOMSVGAnimatedRectInternal.h */; };
 		A8E545AB0CA9D1C20097D09B /* DOMSVGAnimatedPreserveAspectRatioInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544AD0CA9D1C20097D09B /* DOMSVGAnimatedPreserveAspectRatioInternal.h */; };
-		A8E545AE0CA9D1C20097D09B /* DOMSVGAnimatedPathData.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544B00CA9D1C20097D09B /* DOMSVGAnimatedPathData.h */; };
 		A8E545AF0CA9D1C20097D09B /* DOMSVGAnimatedNumberListInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544B10CA9D1C20097D09B /* DOMSVGAnimatedNumberListInternal.h */; };
 		A8E545B10CA9D1C20097D09B /* DOMSVGAnimatedNumberInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544B30CA9D1C20097D09B /* DOMSVGAnimatedNumberInternal.h */; };
 		A8E545B30CA9D1C20097D09B /* DOMSVGAnimatedLengthListInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E544B50CA9D1C20097D09B /* DOMSVGAnimatedLengthListInternal.h */; };
@@ -3786,7 +3787,6 @@
 		A8F46A890CB20A9D003A9670 /* DOMSVGAnimateColorElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 850361280ACE007B001F3D9E /* DOMSVGAnimateColorElement.h */; };
 		A8F46A8C0CB20A9D003A9670 /* DOMSVGSetElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 859D627F0AD888EE00012995 /* DOMSVGSetElement.h */; };
 		A8F46A8E0CB20A9D003A9670 /* DOMSVGCircleElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 8503612A0ACE007B001F3D9E /* DOMSVGCircleElement.h */; };
-		A8F46A900CB20A9D003A9670 /* DOMSVGAnimatedPathData.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85ACEF060ACDCCCF001214FF /* DOMSVGAnimatedPathData.h */; };
 		A8F46A910CB20A9D003A9670 /* DOMSVGViewElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 859D62970AD888EF00012995 /* DOMSVGViewElement.h */; };
 		A8F46A920CB20A9D003A9670 /* DOMSVGPathSegLinetoRel.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85CE1A330ADAC473003BBDEA /* DOMSVGPathSegLinetoRel.h */; };
 		A8F46A930CB20A9D003A9670 /* DOMSVGZoomEvent.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 859D629A0AD888EF00012995 /* DOMSVGZoomEvent.h */; };
@@ -3979,8 +3979,6 @@
 		B22279770D00BF220071B782 /* SVGAngle.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277E10D00BF1F0071B782 /* SVGAngle.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		B22279790D00BF220071B782 /* SVGAnimateColorElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277E30D00BF1F0071B782 /* SVGAnimateColorElement.cpp */; };
 		B222797A0D00BF220071B782 /* SVGAnimateColorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277E40D00BF1F0071B782 /* SVGAnimateColorElement.h */; };
-		B22279840D00BF220071B782 /* SVGAnimatedPathData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277EE0D00BF1F0071B782 /* SVGAnimatedPathData.cpp */; };
-		B22279850D00BF220071B782 /* SVGAnimatedPathData.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277EF0D00BF1F0071B782 /* SVGAnimatedPathData.h */; };
 		B222798F0D00BF220071B782 /* SVGAnimateElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277F90D00BF1F0071B782 /* SVGAnimateElement.cpp */; };
 		B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22277FA0D00BF1F0071B782 /* SVGAnimateElement.h */; };
 		B22279920D00BF220071B782 /* SVGAnimateMotionElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22277FC0D00BF1F0071B782 /* SVGAnimateMotionElement.cpp */; };
@@ -4117,27 +4115,17 @@
 		B2227A580D00BF220071B782 /* SVGPathElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278C20D00BF200071B782 /* SVGPathElement.cpp */; };
 		B2227A590D00BF220071B782 /* SVGPathElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C30D00BF200071B782 /* SVGPathElement.h */; };
 		B2227A5B0D00BF220071B782 /* SVGPathSeg.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C50D00BF200071B782 /* SVGPathSeg.h */; };
-		B2227A5D0D00BF220071B782 /* SVGPathSegArc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278C70D00BF200071B782 /* SVGPathSegArc.cpp */; };
 		B2227A5E0D00BF220071B782 /* SVGPathSegArc.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278C80D00BF200071B782 /* SVGPathSegArc.h */; };
-		B2227A610D00BF220071B782 /* SVGPathSegClosePath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278CB0D00BF200071B782 /* SVGPathSegClosePath.cpp */; };
 		B2227A620D00BF220071B782 /* SVGPathSegClosePath.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278CC0D00BF200071B782 /* SVGPathSegClosePath.h */; };
-		B2227A640D00BF220071B782 /* SVGPathSegCurvetoCubic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278CE0D00BF200071B782 /* SVGPathSegCurvetoCubic.cpp */; };
 		B2227A650D00BF220071B782 /* SVGPathSegCurvetoCubic.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278CF0D00BF200071B782 /* SVGPathSegCurvetoCubic.h */; };
-		B2227A680D00BF220071B782 /* SVGPathSegCurvetoCubicSmooth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278D20D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.cpp */; };
 		B2227A690D00BF220071B782 /* SVGPathSegCurvetoCubicSmooth.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278D30D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.h */; };
-		B2227A6C0D00BF220071B782 /* SVGPathSegCurvetoQuadratic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278D60D00BF200071B782 /* SVGPathSegCurvetoQuadratic.cpp */; };
 		B2227A6D0D00BF220071B782 /* SVGPathSegCurvetoQuadratic.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278D70D00BF200071B782 /* SVGPathSegCurvetoQuadratic.h */; };
-		B2227A700D00BF220071B782 /* SVGPathSegCurvetoQuadraticSmooth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278DA0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmooth.cpp */; };
 		B2227A710D00BF220071B782 /* SVGPathSegCurvetoQuadraticSmooth.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278DB0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmooth.h */; };
-		B2227A740D00BF220071B782 /* SVGPathSegLineto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278DE0D00BF200071B782 /* SVGPathSegLineto.cpp */; };
 		B2227A750D00BF220071B782 /* SVGPathSegLineto.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278DF0D00BF200071B782 /* SVGPathSegLineto.h */; };
-		B2227A770D00BF220071B782 /* SVGPathSegLinetoHorizontal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278E10D00BF200071B782 /* SVGPathSegLinetoHorizontal.cpp */; };
 		B2227A780D00BF220071B782 /* SVGPathSegLinetoHorizontal.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278E20D00BF200071B782 /* SVGPathSegLinetoHorizontal.h */; };
-		B2227A7C0D00BF220071B782 /* SVGPathSegLinetoVertical.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278E60D00BF200071B782 /* SVGPathSegLinetoVertical.cpp */; };
 		B2227A7D0D00BF220071B782 /* SVGPathSegLinetoVertical.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278E70D00BF200071B782 /* SVGPathSegLinetoVertical.h */; };
 		B2227A800D00BF220071B782 /* SVGPathSegList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278EA0D00BF200071B782 /* SVGPathSegList.cpp */; };
 		B2227A810D00BF220071B782 /* SVGPathSegList.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278EB0D00BF200071B782 /* SVGPathSegList.h */; };
-		B2227A830D00BF220071B782 /* SVGPathSegMoveto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278ED0D00BF210071B782 /* SVGPathSegMoveto.cpp */; };
 		B2227A840D00BF220071B782 /* SVGPathSegMoveto.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278EE0D00BF210071B782 /* SVGPathSegMoveto.h */; };
 		B2227A870D00BF220071B782 /* SVGPatternElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278F10D00BF210071B782 /* SVGPatternElement.cpp */; };
 		B2227A880D00BF220071B782 /* SVGPatternElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278F20D00BF210071B782 /* SVGPatternElement.h */; };
@@ -4304,7 +4292,6 @@
 		B28C6A280D00C44800334AA4 /* SVGDocumentExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = B28C6A1F0D00C44800334AA4 /* SVGDocumentExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		B28C6A290D00C44800334AA4 /* SVGImageLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B28C6A200D00C44800334AA4 /* SVGImageLoader.cpp */; };
 		B28C6A2A0D00C44800334AA4 /* SVGImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B28C6A210D00C44800334AA4 /* SVGImageLoader.h */; };
-		B297BC700B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */; };
 		B2A015A80AF6CD53006BCE0E /* GraphicsContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A015920AF6CD53006BCE0E /* GraphicsContext.cpp */; };
 		B2A015A90AF6CD53006BCE0E /* GraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A015930AF6CD53006BCE0E /* GraphicsContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		B2A015AA0AF6CD53006BCE0E /* GraphicsTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A015940AF6CD53006BCE0E /* GraphicsTypes.cpp */; };
@@ -5823,7 +5810,6 @@
 				A80F3B8B0CCDCE24002DD990 /* DOMSVGAnimatedNumberInternal.h in Copy Generated Headers */,
 				A8F46AAF0CB20A9D003A9670 /* DOMSVGAnimatedNumberList.h in Copy Generated Headers */,
 				A80F3B700CCDCE24002DD990 /* DOMSVGAnimatedNumberListInternal.h in Copy Generated Headers */,
-				A8F46A900CB20A9D003A9670 /* DOMSVGAnimatedPathData.h in Copy Generated Headers */,
 				A8F46B2E0CB20A9D003A9670 /* DOMSVGAnimatedPreserveAspectRatio.h in Copy Generated Headers */,
 				A80F3B7E0CCDCE24002DD990 /* DOMSVGAnimatedPreserveAspectRatioInternal.h in Copy Generated Headers */,
 				A8F46B1B0CB20A9D003A9670 /* DOMSVGAnimatedRect.h in Copy Generated Headers */,
@@ -6150,6 +6136,7 @@
 		082341C40FCF3A9400D75BD6 /* WMLSelectElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLSelectElement.h; sourceTree = "<group>"; };
 		0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedInteger.h; sourceTree = "<group>"; };
 		08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformList.h; sourceTree = "<group>"; };
+		082DE42C1292621600D923DF /* SVGPathSegWithContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegWithContext.h; sourceTree = "<group>"; };
 		082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGContextCache.h; sourceTree = "<group>"; };
 		083192A7112B43050083C3B9 /* RenderSVGResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResource.h; sourceTree = "<group>"; };
 		083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMasker.cpp; sourceTree = "<group>"; };
@@ -6159,6 +6146,7 @@
 		083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTextControlMultiLine.h; sourceTree = "<group>"; };
 		083DAEA40F01A7FB00342754 /* RenderTextControlSingleLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextControlSingleLine.cpp; sourceTree = "<group>"; };
 		083DAEA50F01A7FB00342754 /* RenderTextControlSingleLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTextControlSingleLine.h; sourceTree = "<group>"; };
+		084A0828128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegListPropertyTearOff.h; sourceTree = "<group>"; };
 		084AEBE20FB505FA0038483E /* SelectElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelectElement.cpp; sourceTree = "<group>"; };
 		084AEBE30FB505FA0038483E /* SelectElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelectElement.h; sourceTree = "<group>"; };
 		084CE5C70F27DADC00E6240E /* WMLOptGroupElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLOptGroupElement.cpp; sourceTree = "<group>"; };
@@ -6257,6 +6245,7 @@
 		0897C14B0ED2EBA400AE06DB /* WMLBRElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLBRElement.h; sourceTree = "<group>"; };
 		0897D9780F007A4600411BB3 /* WMLMetaElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLMetaElement.cpp; sourceTree = "<group>"; };
 		0897D9790F007A4600411BB3 /* WMLMetaElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLMetaElement.h; sourceTree = "<group>"; };
+		089A8E06128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPathSegListPropertyTearOff.h; sourceTree = "<group>"; };
 		08A484750E5272C500C3FE76 /* ScriptElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptElement.cpp; sourceTree = "<group>"; };
 		08A484760E5272C500C3FE76 /* ScriptElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptElement.h; sourceTree = "<group>"; };
 		08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGElementInstanceCustom.cpp; sourceTree = "<group>"; };
@@ -6305,6 +6294,7 @@
 		08FB84B00ECE373300DC064E /* WMLElementFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLElementFactory.cpp; sourceTree = "<group>"; };
 		08FB84B10ECE373300DC064E /* WMLElementFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLElementFactory.h; sourceTree = "<group>"; };
 		08FE0BC4127E2AC1000C4FB5 /* SVGAnimatedPreserveAspectRatio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPreserveAspectRatio.h; sourceTree = "<group>"; };
+		08FF101F12950F5900F00276 /* SVGPathSegListPropertyTearOff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegListPropertyTearOff.cpp; sourceTree = "<group>"; };
 		0A4844980CA44CB200B7BD48 /* SoftLinking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoftLinking.h; sourceTree = "<group>"; };
 		0AFDAC3C10F5448C00E1F3D2 /* PluginViewBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginViewBase.h; sourceTree = "<group>"; };
 		0B8C56D30F28627F000502E1 /* HTTPHeaderMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPHeaderMap.cpp; sourceTree = "<group>"; };
@@ -8320,7 +8310,6 @@
 		85ACAA8A0A9B759C00671E90 /* DOMNodeList.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMNodeList.mm; sourceTree = "<group>"; };
 		85ACABAE0A9CAF8000671E90 /* DOMDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMDocument.h; sourceTree = "<group>"; };
 		85ACABAF0A9CAF8000671E90 /* DOMDocument.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMDocument.mm; sourceTree = "<group>"; };
-		85ACEF060ACDCCCF001214FF /* DOMSVGAnimatedPathData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedPathData.h; sourceTree = "<group>"; };
 		85ACEF080ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedPreserveAspectRatio.h; sourceTree = "<group>"; };
 		85ACEF090ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGAnimatedPreserveAspectRatio.mm; sourceTree = "<group>"; };
 		85ACEF0A0ACDCCCF001214FF /* DOMSVGPreserveAspectRatio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGPreserveAspectRatio.h; sourceTree = "<group>"; };
@@ -9475,7 +9464,6 @@
 		A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGTransformableContainer.h; sourceTree = "<group>"; };
 		A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGTransformableContainer.cpp; sourceTree = "<group>"; };
 		A8BC04911214F69600B5F122 /* HTMLEntityTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLEntityTable.cpp; sourceTree = "<group>"; };
-		A8BCFD04120A046100B5F122 /* SVGPathSeg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSeg.cpp; sourceTree = "<group>"; };
 		A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentParser.cpp; sourceTree = "<group>"; };
 		A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DecodedDataDocumentParser.h; sourceTree = "<group>"; };
 		A8C228A011D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DecodedDataDocumentParser.cpp; sourceTree = "<group>"; };
@@ -9691,7 +9679,6 @@
 		A8E544A90CA9D1C20097D09B /* DOMSVGAnimatedStringInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedStringInternal.h; sourceTree = "<group>"; };
 		A8E544AB0CA9D1C20097D09B /* DOMSVGAnimatedRectInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedRectInternal.h; sourceTree = "<group>"; };
 		A8E544AD0CA9D1C20097D09B /* DOMSVGAnimatedPreserveAspectRatioInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedPreserveAspectRatioInternal.h; sourceTree = "<group>"; };
-		A8E544B00CA9D1C20097D09B /* DOMSVGAnimatedPathData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedPathData.h; sourceTree = "<group>"; };
 		A8E544B10CA9D1C20097D09B /* DOMSVGAnimatedNumberListInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedNumberListInternal.h; sourceTree = "<group>"; };
 		A8E544B30CA9D1C20097D09B /* DOMSVGAnimatedNumberInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedNumberInternal.h; sourceTree = "<group>"; };
 		A8E544B50CA9D1C20097D09B /* DOMSVGAnimatedLengthListInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGAnimatedLengthListInternal.h; sourceTree = "<group>"; };
@@ -9854,9 +9841,6 @@
 		B22277EB0D00BF1F0071B782 /* SVGAnimatedLengthList.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedLengthList.idl; sourceTree = "<group>"; };
 		B22277EC0D00BF1F0071B782 /* SVGAnimatedNumber.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedNumber.idl; sourceTree = "<group>"; };
 		B22277ED0D00BF1F0071B782 /* SVGAnimatedNumberList.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedNumberList.idl; sourceTree = "<group>"; };
-		B22277EE0D00BF1F0071B782 /* SVGAnimatedPathData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedPathData.cpp; sourceTree = "<group>"; };
-		B22277EF0D00BF1F0071B782 /* SVGAnimatedPathData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPathData.h; sourceTree = "<group>"; };
-		B22277F00D00BF1F0071B782 /* SVGAnimatedPathData.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedPathData.idl; sourceTree = "<group>"; };
 		B22277F40D00BF1F0071B782 /* SVGAnimatedPreserveAspectRatio.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedPreserveAspectRatio.idl; sourceTree = "<group>"; };
 		B22277F50D00BF1F0071B782 /* SVGAnimatedRect.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedRect.idl; sourceTree = "<group>"; };
 		B22277F60D00BF1F0071B782 /* SVGAnimatedString.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGAnimatedString.idl; sourceTree = "<group>"; };
@@ -10064,45 +10048,35 @@
 		B22278C40D00BF200071B782 /* SVGPathElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathElement.idl; sourceTree = "<group>"; };
 		B22278C50D00BF200071B782 /* SVGPathSeg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSeg.h; sourceTree = "<group>"; };
 		B22278C60D00BF200071B782 /* SVGPathSeg.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSeg.idl; sourceTree = "<group>"; };
-		B22278C70D00BF200071B782 /* SVGPathSegArc.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegArc.cpp; sourceTree = "<group>"; };
 		B22278C80D00BF200071B782 /* SVGPathSegArc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegArc.h; sourceTree = "<group>"; };
 		B22278C90D00BF200071B782 /* SVGPathSegArcAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegArcAbs.idl; sourceTree = "<group>"; };
 		B22278CA0D00BF200071B782 /* SVGPathSegArcRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegArcRel.idl; sourceTree = "<group>"; };
-		B22278CB0D00BF200071B782 /* SVGPathSegClosePath.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegClosePath.cpp; sourceTree = "<group>"; };
 		B22278CC0D00BF200071B782 /* SVGPathSegClosePath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegClosePath.h; sourceTree = "<group>"; };
 		B22278CD0D00BF200071B782 /* SVGPathSegClosePath.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegClosePath.idl; sourceTree = "<group>"; };
-		B22278CE0D00BF200071B782 /* SVGPathSegCurvetoCubic.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegCurvetoCubic.cpp; sourceTree = "<group>"; };
 		B22278CF0D00BF200071B782 /* SVGPathSegCurvetoCubic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubic.h; sourceTree = "<group>"; };
 		B22278D00D00BF200071B782 /* SVGPathSegCurvetoCubicAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicAbs.idl; sourceTree = "<group>"; };
 		B22278D10D00BF200071B782 /* SVGPathSegCurvetoCubicRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicRel.idl; sourceTree = "<group>"; };
-		B22278D20D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegCurvetoCubicSmooth.cpp; sourceTree = "<group>"; };
 		B22278D30D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoCubicSmooth.h; sourceTree = "<group>"; };
 		B22278D40D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicSmoothAbs.idl; sourceTree = "<group>"; };
 		B22278D50D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoCubicSmoothRel.idl; sourceTree = "<group>"; };
-		B22278D60D00BF200071B782 /* SVGPathSegCurvetoQuadratic.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegCurvetoQuadratic.cpp; sourceTree = "<group>"; };
 		B22278D70D00BF200071B782 /* SVGPathSegCurvetoQuadratic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadratic.h; sourceTree = "<group>"; };
 		B22278D80D00BF200071B782 /* SVGPathSegCurvetoQuadraticAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticAbs.idl; sourceTree = "<group>"; };
 		B22278D90D00BF200071B782 /* SVGPathSegCurvetoQuadraticRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticRel.idl; sourceTree = "<group>"; };
-		B22278DA0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmooth.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegCurvetoQuadraticSmooth.cpp; sourceTree = "<group>"; };
 		B22278DB0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmooth.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegCurvetoQuadraticSmooth.h; sourceTree = "<group>"; };
 		B22278DC0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticSmoothAbs.idl; sourceTree = "<group>"; };
 		B22278DD0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegCurvetoQuadraticSmoothRel.idl; sourceTree = "<group>"; };
-		B22278DE0D00BF200071B782 /* SVGPathSegLineto.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegLineto.cpp; sourceTree = "<group>"; };
 		B22278DF0D00BF200071B782 /* SVGPathSegLineto.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLineto.h; sourceTree = "<group>"; };
 		B22278E00D00BF200071B782 /* SVGPathSegLinetoAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoAbs.idl; sourceTree = "<group>"; };
-		B22278E10D00BF200071B782 /* SVGPathSegLinetoHorizontal.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegLinetoHorizontal.cpp; sourceTree = "<group>"; };
 		B22278E20D00BF200071B782 /* SVGPathSegLinetoHorizontal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoHorizontal.h; sourceTree = "<group>"; };
 		B22278E30D00BF200071B782 /* SVGPathSegLinetoHorizontalAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoHorizontalAbs.idl; sourceTree = "<group>"; };
 		B22278E40D00BF200071B782 /* SVGPathSegLinetoHorizontalRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoHorizontalRel.idl; sourceTree = "<group>"; };
 		B22278E50D00BF200071B782 /* SVGPathSegLinetoRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoRel.idl; sourceTree = "<group>"; };
-		B22278E60D00BF200071B782 /* SVGPathSegLinetoVertical.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegLinetoVertical.cpp; sourceTree = "<group>"; };
 		B22278E70D00BF200071B782 /* SVGPathSegLinetoVertical.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegLinetoVertical.h; sourceTree = "<group>"; };
 		B22278E80D00BF200071B782 /* SVGPathSegLinetoVerticalAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoVerticalAbs.idl; sourceTree = "<group>"; };
 		B22278E90D00BF200071B782 /* SVGPathSegLinetoVerticalRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegLinetoVerticalRel.idl; sourceTree = "<group>"; };
 		B22278EA0D00BF200071B782 /* SVGPathSegList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegList.cpp; sourceTree = "<group>"; };
 		B22278EB0D00BF200071B782 /* SVGPathSegList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegList.h; sourceTree = "<group>"; };
 		B22278EC0D00BF210071B782 /* SVGPathSegList.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegList.idl; sourceTree = "<group>"; };
-		B22278ED0D00BF210071B782 /* SVGPathSegMoveto.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegMoveto.cpp; sourceTree = "<group>"; };
 		B22278EE0D00BF210071B782 /* SVGPathSegMoveto.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGPathSegMoveto.h; sourceTree = "<group>"; };
 		B22278EF0D00BF210071B782 /* SVGPathSegMovetoAbs.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegMovetoAbs.idl; sourceTree = "<group>"; };
 		B22278F00D00BF210071B782 /* SVGPathSegMovetoRel.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGPathSegMovetoRel.idl; sourceTree = "<group>"; };
@@ -10308,7 +10282,6 @@
 		B28C6A200D00C44800334AA4 /* SVGImageLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGImageLoader.cpp; sourceTree = "<group>"; };
 		B28C6A210D00C44800334AA4 /* SVGImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGImageLoader.h; sourceTree = "<group>"; };
 		B28C6A260D00C44800334AA4 /* xlinkattrs.in */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = xlinkattrs.in; sourceTree = "<group>"; };
-		B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGPathSegListCustom.cpp; sourceTree = "<group>"; };
 		B2A015920AF6CD53006BCE0E /* GraphicsContext.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext.cpp; sourceTree = "<group>"; };
 		B2A015930AF6CD53006BCE0E /* GraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GraphicsContext.h; sourceTree = "<group>"; };
 		B2A015940AF6CD53006BCE0E /* GraphicsTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsTypes.cpp; sourceTree = "<group>"; };
@@ -11803,6 +11776,7 @@
 			isa = PBXGroup;
 			children = (
 				088A0DFB126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h */,
+				089A8E06128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h */,
 				088A0DFC126EF1DB00978F7A /* SVGAnimatedProperty.h */,
 				088A0DFD126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h */,
 				088A0DFE126EF1DB00978F7A /* SVGAnimatedPropertyMacros.h */,
@@ -11812,6 +11786,8 @@
 				085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */,
 				0810764312828556007C63BA /* SVGListProperty.h */,
 				088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */,
+				08FF101F12950F5900F00276 /* SVGPathSegListPropertyTearOff.cpp */,
+				084A0828128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h */,
 				088A0E01126EF1DB00978F7A /* SVGProperty.h */,
 				088A0E02126EF1DB00978F7A /* SVGPropertyTearOff.h */,
 				088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */,
@@ -13578,8 +13554,6 @@
 				8502AB6C0AD438E600378540 /* DOMSVGAnimatedNumberList.h */,
 				8502AB6D0AD438E600378540 /* DOMSVGAnimatedNumberList.mm */,
 				A8E544B10CA9D1C20097D09B /* DOMSVGAnimatedNumberListInternal.h */,
-				A8E544B00CA9D1C20097D09B /* DOMSVGAnimatedPathData.h */,
-				85ACEF060ACDCCCF001214FF /* DOMSVGAnimatedPathData.h */,
 				85ACEF080ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.h */,
 				85ACEF090ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.mm */,
 				A8E544AD0CA9D1C20097D09B /* DOMSVGAnimatedPreserveAspectRatioInternal.h */,
@@ -16132,9 +16106,6 @@
 				B22277EC0D00BF1F0071B782 /* SVGAnimatedNumber.idl */,
 				08B35B16127B6A88005314DD /* SVGAnimatedNumberList.h */,
 				B22277ED0D00BF1F0071B782 /* SVGAnimatedNumberList.idl */,
-				B22277EE0D00BF1F0071B782 /* SVGAnimatedPathData.cpp */,
-				B22277EF0D00BF1F0071B782 /* SVGAnimatedPathData.h */,
-				B22277F00D00BF1F0071B782 /* SVGAnimatedPathData.idl */,
 				08FE0BC4127E2AC1000C4FB5 /* SVGAnimatedPreserveAspectRatio.h */,
 				B22277F40D00BF1F0071B782 /* SVGAnimatedPreserveAspectRatio.idl */,
 				08C859BF1274575300A5728D /* SVGAnimatedRect.h */,
@@ -16386,41 +16357,31 @@
 				8476C9EE11DF6A5800555B02 /* SVGPathParser.h */,
 				84300BD1120C9A710021954A /* SVGPathParserFactory.cpp */,
 				84300BD2120C9A710021954A /* SVGPathParserFactory.h */,
-				A8BCFD04120A046100B5F122 /* SVGPathSeg.cpp */,
 				B22278C50D00BF200071B782 /* SVGPathSeg.h */,
 				B22278C60D00BF200071B782 /* SVGPathSeg.idl */,
-				B22278C70D00BF200071B782 /* SVGPathSegArc.cpp */,
 				B22278C80D00BF200071B782 /* SVGPathSegArc.h */,
 				B22278C90D00BF200071B782 /* SVGPathSegArcAbs.idl */,
 				B22278CA0D00BF200071B782 /* SVGPathSegArcRel.idl */,
-				B22278CB0D00BF200071B782 /* SVGPathSegClosePath.cpp */,
 				B22278CC0D00BF200071B782 /* SVGPathSegClosePath.h */,
 				B22278CD0D00BF200071B782 /* SVGPathSegClosePath.idl */,
-				B22278CE0D00BF200071B782 /* SVGPathSegCurvetoCubic.cpp */,
 				B22278CF0D00BF200071B782 /* SVGPathSegCurvetoCubic.h */,
 				B22278D00D00BF200071B782 /* SVGPathSegCurvetoCubicAbs.idl */,
 				B22278D10D00BF200071B782 /* SVGPathSegCurvetoCubicRel.idl */,
-				B22278D20D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.cpp */,
 				B22278D30D00BF200071B782 /* SVGPathSegCurvetoCubicSmooth.h */,
 				B22278D40D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothAbs.idl */,
 				B22278D50D00BF200071B782 /* SVGPathSegCurvetoCubicSmoothRel.idl */,
-				B22278D60D00BF200071B782 /* SVGPathSegCurvetoQuadratic.cpp */,
 				B22278D70D00BF200071B782 /* SVGPathSegCurvetoQuadratic.h */,
 				B22278D80D00BF200071B782 /* SVGPathSegCurvetoQuadraticAbs.idl */,
 				B22278D90D00BF200071B782 /* SVGPathSegCurvetoQuadraticRel.idl */,
-				B22278DA0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmooth.cpp */,
 				B22278DB0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmooth.h */,
 				B22278DC0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothAbs.idl */,
 				B22278DD0D00BF200071B782 /* SVGPathSegCurvetoQuadraticSmoothRel.idl */,
-				B22278DE0D00BF200071B782 /* SVGPathSegLineto.cpp */,
 				B22278DF0D00BF200071B782 /* SVGPathSegLineto.h */,
 				B22278E00D00BF200071B782 /* SVGPathSegLinetoAbs.idl */,
-				B22278E10D00BF200071B782 /* SVGPathSegLinetoHorizontal.cpp */,
 				B22278E20D00BF200071B782 /* SVGPathSegLinetoHorizontal.h */,
 				B22278E30D00BF200071B782 /* SVGPathSegLinetoHorizontalAbs.idl */,
 				B22278E40D00BF200071B782 /* SVGPathSegLinetoHorizontalRel.idl */,
 				B22278E50D00BF200071B782 /* SVGPathSegLinetoRel.idl */,
-				B22278E60D00BF200071B782 /* SVGPathSegLinetoVertical.cpp */,
 				B22278E70D00BF200071B782 /* SVGPathSegLinetoVertical.h */,
 				B22278E80D00BF200071B782 /* SVGPathSegLinetoVerticalAbs.idl */,
 				B22278E90D00BF200071B782 /* SVGPathSegLinetoVerticalRel.idl */,
@@ -16431,10 +16392,10 @@
 				8476C9E411DF6A0B00555B02 /* SVGPathSegListBuilder.h */,
 				84B6B975120F13E500B8EFAF /* SVGPathSegListSource.cpp */,
 				84B6B976120F13E500B8EFAF /* SVGPathSegListSource.h */,
-				B22278ED0D00BF210071B782 /* SVGPathSegMoveto.cpp */,
 				B22278EE0D00BF210071B782 /* SVGPathSegMoveto.h */,
 				B22278EF0D00BF210071B782 /* SVGPathSegMovetoAbs.idl */,
 				B22278F00D00BF210071B782 /* SVGPathSegMovetoRel.idl */,
+				082DE42C1292621600D923DF /* SVGPathSegWithContext.h */,
 				84300BD7120C9AD40021954A /* SVGPathSource.h */,
 				8419D2B7120E0C7600141F8F /* SVGPathStringBuilder.cpp */,
 				8419D2B8120E0C7600141F8F /* SVGPathStringBuilder.h */,
@@ -17152,7 +17113,6 @@
 				08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */,
 				08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */,
 				B2C96D8C0B3AF2B7005E80EC /* JSSVGPathSegCustom.cpp */,
-				B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */,
 				087D97BE10FB8D7700C00874 /* JSSVGPODListCustom.h */,
 				1A2C40AA0DEB55AA005AF19E /* JSTextCustom.cpp */,
 				516BB7920CE91E6800512F79 /* JSTreeWalkerCustom.cpp */,
@@ -19099,8 +19059,6 @@
 				8502AB720AD438E600378540 /* DOMSVGAnimatedNumberList.h in Headers */,
 				8502ABA70AD4396900378540 /* DOMSVGAnimatedNumberListInternal.h in Headers */,
 				A8E545AF0CA9D1C20097D09B /* DOMSVGAnimatedNumberListInternal.h in Headers */,
-				85ACEF0C0ACDCCCF001214FF /* DOMSVGAnimatedPathData.h in Headers */,
-				A8E545AE0CA9D1C20097D09B /* DOMSVGAnimatedPathData.h in Headers */,
 				85ACEF0E0ACDCCCF001214FF /* DOMSVGAnimatedPreserveAspectRatio.h in Headers */,
 				85ACEF180ACDCD1A001214FF /* DOMSVGAnimatedPreserveAspectRatioInternal.h in Headers */,
 				A8E545AB0CA9D1C20097D09B /* DOMSVGAnimatedPreserveAspectRatioInternal.h in Headers */,
@@ -19710,6 +19668,7 @@
 				A88FE3340E5EEE87008D8C0F /* GraphicsContextPrivate.h in Headers */,
 				0F580B0D0F12A2690051D689 /* GraphicsLayer.h in Headers */,
 				0F580B0E0F12A2690051D689 /* GraphicsLayerClient.h in Headers */,
+				499B3C59128C641E00E726C2 /* GraphicsLayerMac.h in Headers */,
 				B2A015AB0AF6CD53006BCE0E /* GraphicsTypes.h in Headers */,
 				C50B561712119D23008B46E0 /* GroupSettings.h in Headers */,
 				7693BAD2106C2DCA007B0823 /* HaltablePlugin.h in Headers */,
@@ -19907,6 +19866,7 @@
 				F33F053E120B0DA500E5743A /* InspectorDebuggerAgent.h in Headers */,
 				7A24587C1021EAF4000A00AA /* InspectorDOMAgent.h in Headers */,
 				41F061740F5F00AC00A07EAC /* InspectorDOMStorageResource.h in Headers */,
+				3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */,
 				F344C7141125B82C00F26EEE /* InspectorFrontendClient.h in Headers */,
 				F344C75311294D9D00F26EEE /* InspectorFrontendClientLocal.h in Headers */,
 				7A0E770F10C00A8800A0276E /* InspectorFrontendHost.h in Headers */,
@@ -20921,7 +20881,7 @@
 				088A0E04126EF1DB00978F7A /* SVGAnimatedListPropertyTearOff.h in Headers */,
 				08B35B13127B6A7C005314DD /* SVGAnimatedNumber.h in Headers */,
 				08B35B17127B6A88005314DD /* SVGAnimatedNumberList.h in Headers */,
-				B22279850D00BF220071B782 /* SVGAnimatedPathData.h in Headers */,
+				089A8E07128D8B3D00E7A534 /* SVGAnimatedPathSegListPropertyTearOff.h in Headers */,
 				08FE0BC5127E2AC1000C4FB5 /* SVGAnimatedPreserveAspectRatio.h in Headers */,
 				088A0E05126EF1DB00978F7A /* SVGAnimatedProperty.h in Headers */,
 				088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */,
@@ -20931,6 +20891,7 @@
 				08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */,
 				08525E631278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h in Headers */,
 				084DB59B128008CC002A6D64 /* SVGAnimatedString.h in Headers */,
+				08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */,
 				085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */,
 				B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
 				B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
@@ -21045,8 +21006,10 @@
 				B2227A7D0D00BF220071B782 /* SVGPathSegLinetoVertical.h in Headers */,
 				B2227A810D00BF220071B782 /* SVGPathSegList.h in Headers */,
 				8476C9E611DF6A0B00555B02 /* SVGPathSegListBuilder.h in Headers */,
+				084A0829128D7867002DB1F1 /* SVGPathSegListPropertyTearOff.h in Headers */,
 				84B6B978120F13E500B8EFAF /* SVGPathSegListSource.h in Headers */,
 				B2227A840D00BF220071B782 /* SVGPathSegMoveto.h in Headers */,
+				082DE42D1292621600D923DF /* SVGPathSegWithContext.h in Headers */,
 				84300BD8120C9AD40021954A /* SVGPathSource.h in Headers */,
 				8419D2BA120E0C7600141F8F /* SVGPathStringBuilder.h in Headers */,
 				84300BD6120C9AAC0021954A /* SVGPathStringSource.h in Headers */,
@@ -21353,9 +21316,6 @@
 				93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */,
 				E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
 				97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
-				499B3C59128C641E00E726C2 /* GraphicsLayerMac.h in Headers */,
-				08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */,
-				3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */,
 				BCB92D4F1293550B00C8387F /* FontBaseline.h in Headers */,
 				BCA257151293C010007A263D /* VerticalPositionCache.h in Headers */,
 				BCAE1FA712939DB7004CB026 /* ScrollAnimatorMac.h in Headers */,
@@ -22345,6 +22305,7 @@
 				B2ED97710B1F55CE00257D0F /* GraphicsContextCG.cpp in Sources */,
 				B277B4040B22F37C0004BEC6 /* GraphicsContextMac.mm in Sources */,
 				0F580B0C0F12A2690051D689 /* GraphicsLayer.cpp in Sources */,
+				499B3C5A128C641E00E726C2 /* GraphicsLayerMac.mm in Sources */,
 				B2A015AA0AF6CD53006BCE0E /* GraphicsTypes.cpp in Sources */,
 				C50B561612119D23008B46E0 /* GroupSettings.cpp in Sources */,
 				F55B3DBF1251F12D003EF269 /* HiddenInputType.cpp in Sources */,
@@ -22526,6 +22487,7 @@
 				F33F053D120B0DA500E5743A /* InspectorDebuggerAgent.cpp in Sources */,
 				7A24587B1021EAF4000A00AA /* InspectorDOMAgent.cpp in Sources */,
 				41F061750F5F00AC00A07EAC /* InspectorDOMStorageResource.cpp in Sources */,
+				3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */,
 				4F4F5FFB11CBD2E100A186BF /* InspectorFrontend.cpp in Sources */,
 				F344C75811294FF600F26EEE /* InspectorFrontendClientLocal.cpp in Sources */,
 				7A0E770E10C00A8800A0276E /* InspectorFrontendHost.cpp in Sources */,
@@ -23020,7 +22982,6 @@
 				B2FA3DD60AB75A6F000E5AC4 /* JSSVGPathSegLinetoVerticalAbs.cpp in Sources */,
 				B2FA3DD80AB75A6F000E5AC4 /* JSSVGPathSegLinetoVerticalRel.cpp in Sources */,
 				B2FA3DDA0AB75A6F000E5AC4 /* JSSVGPathSegList.cpp in Sources */,
-				B297BC700B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp in Sources */,
 				B2FA3DDC0AB75A6F000E5AC4 /* JSSVGPathSegMovetoAbs.cpp in Sources */,
 				B2FA3DDE0AB75A6F000E5AC4 /* JSSVGPathSegMovetoRel.cpp in Sources */,
 				B2FA3DE00AB75A6F000E5AC4 /* JSSVGPatternElement.cpp in Sources */,
@@ -23558,7 +23519,6 @@
 				65653F2D0D9727D200CA9723 /* SVGAltGlyphElement.cpp in Sources */,
 				B22279760D00BF220071B782 /* SVGAngle.cpp in Sources */,
 				B22279790D00BF220071B782 /* SVGAnimateColorElement.cpp in Sources */,
-				B22279840D00BF220071B782 /* SVGAnimatedPathData.cpp in Sources */,
 				B222798F0D00BF220071B782 /* SVGAnimateElement.cpp in Sources */,
 				B22279920D00BF220071B782 /* SVGAnimateMotionElement.cpp in Sources */,
 				B22279940D00BF220071B782 /* SVGAnimateTransformElement.cpp in Sources */,
@@ -23654,20 +23614,9 @@
 				B2227A580D00BF220071B782 /* SVGPathElement.cpp in Sources */,
 				8476C9EF11DF6A5800555B02 /* SVGPathParser.cpp in Sources */,
 				84300BD3120C9A710021954A /* SVGPathParserFactory.cpp in Sources */,
-				A8BCFD05120A046100B5F122 /* SVGPathSeg.cpp in Sources */,
-				B2227A5D0D00BF220071B782 /* SVGPathSegArc.cpp in Sources */,
-				B2227A610D00BF220071B782 /* SVGPathSegClosePath.cpp in Sources */,
-				B2227A640D00BF220071B782 /* SVGPathSegCurvetoCubic.cpp in Sources */,
-				B2227A680D00BF220071B782 /* SVGPathSegCurvetoCubicSmooth.cpp in Sources */,
-				B2227A6C0D00BF220071B782 /* SVGPathSegCurvetoQuadratic.cpp in Sources */,
-				B2227A700D00BF220071B782 /* SVGPathSegCurvetoQuadraticSmooth.cpp in Sources */,
-				B2227A740D00BF220071B782 /* SVGPathSegLineto.cpp in Sources */,
-				B2227A770D00BF220071B782 /* SVGPathSegLinetoHorizontal.cpp in Sources */,
-				B2227A7C0D00BF220071B782 /* SVGPathSegLinetoVertical.cpp in Sources */,
 				B2227A800D00BF220071B782 /* SVGPathSegList.cpp in Sources */,
 				8476C9E511DF6A0B00555B02 /* SVGPathSegListBuilder.cpp in Sources */,
 				84B6B977120F13E500B8EFAF /* SVGPathSegListSource.cpp in Sources */,
-				B2227A830D00BF220071B782 /* SVGPathSegMoveto.cpp in Sources */,
 				8419D2B9120E0C7600141F8F /* SVGPathStringBuilder.cpp in Sources */,
 				84300BDA120C9AED0021954A /* SVGPathStringSource.cpp in Sources */,
 				84C5B2FA1216DC810088B53A /* SVGPathTraversalStateBuilder.cpp in Sources */,
@@ -23926,8 +23875,7 @@
 				93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */,
 				E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
 				97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
-				499B3C5A128C641E00E726C2 /* GraphicsLayerMac.mm in Sources */,
-				3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */,
+				08FF102012950F5A00F00276 /* SVGPathSegListPropertyTearOff.cpp in Sources */,
 				BCAE1FA612939DB7004CB026 /* ScrollAnimatorMac.cpp in Sources */,
 				E1AD12D61295D0BD00ACA989 /* JSProcessingInstructionCustom.cpp in Sources */,
 				E1AD139B1295D92600ACA989 /* JSHTMLLinkElementCustom.cpp in Sources */,
diff --git a/WebCore/bindings/js/JSBindingsAllInOne.cpp b/WebCore/bindings/js/JSBindingsAllInOne.cpp
index 27c7ad5..0fa16c5 100644
--- a/WebCore/bindings/js/JSBindingsAllInOne.cpp
+++ b/WebCore/bindings/js/JSBindingsAllInOne.cpp
@@ -120,7 +120,6 @@
 #include "JSSVGElementInstanceCustom.cpp"
 #include "JSSVGLengthCustom.cpp"
 #include "JSSVGPathSegCustom.cpp"
-#include "JSSVGPathSegListCustom.cpp"
 #include "JSScriptProfileNodeCustom.cpp"
 #include "JSSharedWorkerCustom.cpp"
 #include "JSStorageCustom.cpp"
diff --git a/WebCore/bindings/js/JSDOMBinding.cpp b/WebCore/bindings/js/JSDOMBinding.cpp
index e91ac27..0d94b44 100644
--- a/WebCore/bindings/js/JSDOMBinding.cpp
+++ b/WebCore/bindings/js/JSDOMBinding.cpp
@@ -632,7 +632,7 @@ void setDOMException(ExecState* exec, ExceptionCode ec)
             break;
 #if ENABLE(SVG)
         case SVGExceptionType:
-            errorObject = toJS(exec, globalObject, SVGException::create(description).get(), 0 /* no context on purpose */);
+            errorObject = toJS(exec, globalObject, SVGException::create(description).get());
             break;
 #endif
 #if ENABLE(XPATH)
diff --git a/WebCore/bindings/js/JSDOMBinding.h b/WebCore/bindings/js/JSDOMBinding.h
index 64a3dad..54e9cf6 100644
--- a/WebCore/bindings/js/JSDOMBinding.h
+++ b/WebCore/bindings/js/JSDOMBinding.h
@@ -25,7 +25,6 @@
 #include "JSDOMGlobalObject.h"
 #include "JSDOMWrapper.h"
 #include "DOMWrapperWorld.h"
-#include "JSSVGContextCache.h"
 #include "Document.h"
 #include <runtime/Completion.h>
 #include <runtime/Lookup.h>
@@ -50,10 +49,6 @@ namespace WebCore {
 
     typedef int ExceptionCode;
 
-#if ENABLE(SVG)
-    class SVGElement;
-#endif
-
     // FIXME: This class should collapse into DOMObject once all DOMObjects are
     // updated to store a globalObject pointer.
     class DOMObjectWithGlobalPointer : public DOMObject {
@@ -185,28 +180,6 @@ namespace WebCore {
         return createDOMObjectWrapper<WrapperClass>(exec, globalObject, object);
     }
 
-#if ENABLE(SVG)
-    #define CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, className, object, context) createDOMObjectWrapper<JS##className>(exec, globalObject, static_cast<className*>(object), context)
-    template<class WrapperClass, class DOMClass> inline DOMObject* createDOMObjectWrapper(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, DOMClass* object, SVGElement* context)
-    {
-        DOMObject* wrapper = createDOMObjectWrapper<WrapperClass, DOMClass>(exec, globalObject, object);
-        ASSERT(wrapper);
-        if (context)
-            JSSVGContextCache::addWrapper(wrapper, context);
-        return wrapper;
-    }
-    template<class WrapperClass, class DOMClass> inline JSC::JSValue getDOMObjectWrapper(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, DOMClass* object, SVGElement* context)
-    {
-        if (!object)
-            return JSC::jsNull();
-        if (DOMObject* wrapper = getCachedDOMObjectWrapper(exec, object)) {
-            ASSERT(JSSVGContextCache::svgContextForDOMObject(wrapper) == context);
-            return wrapper;
-        }
-        return createDOMObjectWrapper<WrapperClass, DOMClass>(exec, globalObject, object, context);
-    }
-#endif
-
     #define CREATE_DOM_NODE_WRAPPER(exec, globalObject, className, object) createDOMNodeWrapper<JS##className>(exec, globalObject, static_cast<className*>(object))
     template<class WrapperClass, class DOMClass> inline JSNode* createDOMNodeWrapper(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, DOMClass* node)
     {
diff --git a/WebCore/bindings/js/JSSVGPathSegCustom.cpp b/WebCore/bindings/js/JSSVGPathSegCustom.cpp
index eac2c4b..f0aa86b 100644
--- a/WebCore/bindings/js/JSSVGPathSegCustom.cpp
+++ b/WebCore/bindings/js/JSSVGPathSegCustom.cpp
@@ -58,58 +58,56 @@ using namespace JSC;
 
 namespace WebCore {
 
-JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, SVGPathSeg* object, SVGElement* context)
+JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, SVGPathSeg* object)
 {
     if (!object)
         return jsNull();
 
-    if (DOMObject* wrapper = getCachedDOMObjectWrapper(exec, object)) {
-        ASSERT(JSSVGContextCache::svgContextForDOMObject(wrapper) == context);
+    if (DOMObject* wrapper = getCachedDOMObjectWrapper(exec, object))
         return wrapper;
-    }
 
     switch (object->pathSegType()) {
     case SVGPathSeg::PATHSEG_CLOSEPATH:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegClosePath, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegClosePath, object);
     case SVGPathSeg::PATHSEG_MOVETO_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegMovetoAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegMovetoAbs, object);
     case SVGPathSeg::PATHSEG_MOVETO_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegMovetoRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegMovetoRel, object);
     case SVGPathSeg::PATHSEG_LINETO_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoAbs, object);
     case SVGPathSeg::PATHSEG_LINETO_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoRel, object);
     case SVGPathSeg::PATHSEG_CURVETO_CUBIC_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicAbs, object);
     case SVGPathSeg::PATHSEG_CURVETO_CUBIC_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicRel, object);
     case SVGPathSeg::PATHSEG_CURVETO_QUADRATIC_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticAbs, object);
     case SVGPathSeg::PATHSEG_CURVETO_QUADRATIC_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticRel, object);
     case SVGPathSeg::PATHSEG_ARC_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegArcAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegArcAbs, object);
     case SVGPathSeg::PATHSEG_ARC_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegArcRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegArcRel, object);
     case SVGPathSeg::PATHSEG_LINETO_HORIZONTAL_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoHorizontalAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoHorizontalAbs, object);
     case SVGPathSeg::PATHSEG_LINETO_HORIZONTAL_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoHorizontalRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoHorizontalRel, object);
     case SVGPathSeg::PATHSEG_LINETO_VERTICAL_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoVerticalAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoVerticalAbs, object);
     case SVGPathSeg::PATHSEG_LINETO_VERTICAL_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoVerticalRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegLinetoVerticalRel, object);
     case SVGPathSeg::PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicSmoothAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicSmoothAbs, object);
     case SVGPathSeg::PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicSmoothRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoCubicSmoothRel, object);
     case SVGPathSeg::PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticSmoothAbs, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticSmoothAbs, object);
     case SVGPathSeg::PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticSmoothRel, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSegCurvetoQuadraticSmoothRel, object);
     case SVGPathSeg::PATHSEG_UNKNOWN:
     default:
-        return CREATE_SVG_OBJECT_WRAPPER(exec, globalObject, SVGPathSeg, object, context);
+        return CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, SVGPathSeg, object);
     }
 }
 
diff --git a/WebCore/bindings/js/JSSVGPathSegListCustom.cpp b/WebCore/bindings/js/JSSVGPathSegListCustom.cpp
deleted file mode 100644
index 9767c1a..0000000
--- a/WebCore/bindings/js/JSSVGPathSegListCustom.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Nikolas Zimmermann <zimmermann at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "JSSVGPathSegList.h"
-
-#include "Document.h"
-#include "Frame.h"
-#include "JSSVGContextCache.h"
-#include "JSSVGPathSeg.h"
-#include "SVGDocumentExtensions.h"
-#include "SVGElement.h"
-#include "SVGPathSegList.h"
-
-#include <wtf/Assertions.h>
-
-using namespace JSC;
-
-namespace WebCore {
-
-JSValue JSSVGPathSegList::clear(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-
-    SVGPathSegList* list = impl();
-    list->clear(ec);
-
-    setDOMException(exec, ec);
-
-    JSSVGContextCache::propagateSVGDOMChange(this, list->associatedAttributeName());
-    return jsUndefined();
-}
-
-JSValue JSSVGPathSegList::initialize(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(exec->argument(0));
-
-    SVGPathSegList* list = impl();
-
-    SVGPathSeg* obj = WTF::getPtr(list->initialize(newItem, ec));
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-
-    JSValue result = toJS(exec, globalObject(), obj, context);
-    setDOMException(exec, ec);
-
-    JSSVGContextCache::propagateSVGDOMChange(this, list->associatedAttributeName());
-    return result;
-}
-
-JSValue JSSVGPathSegList::getItem(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-
-    bool indexOk;
-    unsigned index = finiteInt32Value(exec->argument(0), exec, indexOk);
-    if (!indexOk) {
-        setDOMException(exec, TYPE_MISMATCH_ERR);
-        return jsUndefined();
-    }
-
-    SVGPathSegList* list = impl();
-    SVGPathSeg* obj = WTF::getPtr(list->getItem(index, ec));
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-
-    JSValue result = toJS(exec, globalObject(), obj, context);
-    setDOMException(exec, ec);
-    return result;
-}
-
-JSValue JSSVGPathSegList::insertItemBefore(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(exec->argument(0));
-
-    bool indexOk;
-    unsigned index = finiteInt32Value(exec->argument(1), exec, indexOk);
-    if (!indexOk) {
-        setDOMException(exec, TYPE_MISMATCH_ERR);
-        return jsUndefined();
-    }
-
-    SVGPathSegList* list = impl();
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-
-    JSValue result = toJS(exec, globalObject(), WTF::getPtr(list->insertItemBefore(newItem, index, ec)), context);
-    setDOMException(exec, ec);
-
-    JSSVGContextCache::propagateSVGDOMChange(this, list->associatedAttributeName());
-    return result;
-}
-
-JSValue JSSVGPathSegList::replaceItem(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(exec->argument(0));
-    
-    bool indexOk;
-    unsigned index = finiteInt32Value(exec->argument(1), exec, indexOk);
-    if (!indexOk) {
-        setDOMException(exec, TYPE_MISMATCH_ERR);
-        return jsUndefined();
-    }
-
-    SVGPathSegList* list = impl();
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-
-    JSValue result = toJS(exec, globalObject(), WTF::getPtr(list->replaceItem(newItem, index, ec)), context);
-    setDOMException(exec, ec);
-
-    JSSVGContextCache::propagateSVGDOMChange(this, list->associatedAttributeName());
-    return result;
-}
-
-JSValue JSSVGPathSegList::removeItem(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-    
-    bool indexOk;
-    unsigned index = finiteInt32Value(exec->argument(0), exec, indexOk);
-    if (!indexOk) {
-        setDOMException(exec, TYPE_MISMATCH_ERR);
-        return jsUndefined();
-    }
-
-    SVGPathSegList* list = impl();
-
-    RefPtr<SVGPathSeg> obj(list->removeItem(index, ec));
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-
-    JSValue result = toJS(exec, globalObject(), obj.get(), context);
-    setDOMException(exec, ec);
-
-    JSSVGContextCache::propagateSVGDOMChange(this, list->associatedAttributeName());
-    return result;
-}
-
-JSValue JSSVGPathSegList::appendItem(ExecState* exec)
-{
-    ExceptionCode ec = 0;
-    SVGPathSeg* newItem = toSVGPathSeg(exec->argument(0));
-
-    SVGPathSegList* list = impl();
-    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
-
-    JSValue result = toJS(exec, globalObject(), WTF::getPtr(list->appendItem(newItem, ec)), context);
-    setDOMException(exec, ec);
-
-    JSSVGContextCache::propagateSVGDOMChange(this, list->associatedAttributeName());
-    return result;
-}
-
-}
-
-#endif // ENABLE(SVG)
diff --git a/WebCore/bindings/scripts/CodeGenerator.pm b/WebCore/bindings/scripts/CodeGenerator.pm
index 1e56b0c..42f3f1c 100644
--- a/WebCore/bindings/scripts/CodeGenerator.pm
+++ b/WebCore/bindings/scripts/CodeGenerator.pm
@@ -75,6 +75,7 @@ my %svgTypeNeedingTearOff = (
     "SVGMatrix" => "SVGPropertyTearOff<SVGMatrix>",
     "SVGNumber" => "SVGPropertyTearOff<float>",
     "SVGNumberList" => "SVGListPropertyTearOff<SVGNumberList>",
+    "SVGPathSegList" => "SVGPathSegListPropertyTearOff",
     "SVGPoint" => "SVGPropertyTearOff<FloatPoint>",
     "SVGPointList" => "SVGListPropertyTearOff<SVGPointList>",
     "SVGPreserveAspectRatio" => "SVGPropertyTearOff<SVGPreserveAspectRatio>",
diff --git a/WebCore/bindings/scripts/CodeGeneratorJS.pm b/WebCore/bindings/scripts/CodeGeneratorJS.pm
index 25e8d18..e09a95a 100644
--- a/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -316,25 +316,6 @@ sub AddClassForwardIfNeeded
     }
 }
 
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsSVGTypeNeedingContextParameter
-{
-    # FIXME: This function will be removed, as soon the PODType concept is gone, and all SVG datatypes use the new style JS bindings.
-
-    my $implClassName = shift;
-
-    return 0 unless $implClassName =~ /SVG/;
-    return 0 if $implClassName =~ /Element/;
-    return 0 if $codeGenerator->IsSVGAnimatedType($implClassName);
-    return 0 if $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
-
-    my @noContextNeeded = ("SVGColor", "SVGDocument", "SVGPaint", "SVGZoomEvent");
-    foreach (@noContextNeeded) {
-        return 0 if $implClassName eq $_;
-    }
-    return 1;
-}
-
 sub HashValueForClassAndName
 {
     my $class = shift;
@@ -937,8 +918,6 @@ sub GenerateHeader
     if (!$hasParent || $dataNode->extendedAttributes->{"GenerateToJS"} || $dataNode->extendedAttributes->{"CustomToJS"}) {
         if ($svgPropertyType) {
             push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*);\n");
-        } elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
-            push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*, SVGElement* context);\n");
         } else {
             push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*);\n");
         }
@@ -1461,8 +1440,6 @@ sub GenerateImplementation
             } else {
                 push(@implContent, "    forgetDOMObject(this, impl());\n");
             }
-
-            push(@implContent, "    JSSVGContextCache::forgetWrapper(this);\n") if IsSVGTypeNeedingContextParameter($implClassName);
         }
 
         push(@implContent, "}\n\n");
@@ -1793,9 +1770,6 @@ sub GenerateImplementation
                                 push(@implContent, ", ec") if @{$attribute->setterExceptions};
                                 push(@implContent, ");\n");
                                 push(@implContent, "    setDOMException(exec, ec);\n") if @{$attribute->setterExceptions};
-                                if (IsSVGTypeNeedingContextParameter($implClassName)) {
-                                    push(@implContent, "    JSSVGContextCache::propagateSVGDOMChange(castedThis, imp->associatedAttributeName());\n");
-                                }
                             }
                         }
                         
@@ -2115,16 +2089,12 @@ sub GenerateImplementation
     if ((!$hasParent or $dataNode->extendedAttributes->{"GenerateToJS"}) and !$dataNode->extendedAttributes->{"CustomToJS"}) {
         if ($svgPropertyType) {
             push(@implContent, "JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, $implType* object)\n");
-        } elsif ($podType or IsSVGTypeNeedingContextParameter($implClassName)) {
-            push(@implContent, "JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, $implType* object, SVGElement* context)\n");
         } else {
             push(@implContent, "JSC::JSValue toJS(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, $implType* object)\n");
         }
         push(@implContent, "{\n");
         if ($svgPropertyType) {
             push(@implContent, "    return getDOMObjectWrapper<$className, $implType>(exec, globalObject, object);\n");
-        } elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
-            push(@implContent, "    return getDOMObjectWrapper<$className>(exec, globalObject, object, context);\n");
         } else {
             push(@implContent, "    return getDOMObjectWrapper<$className>(exec, globalObject, object);\n");
         }
@@ -2426,6 +2396,11 @@ sub GetSVGPropertyTypes
         $headerIncludes{"$svgWrappedNativeType.h"} = 1;
         $headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
         $headerIncludes{"SVGTransformListPropertyTearOff.h"} = 1;
+    } elsif ($svgNativeType =~ /SVGPathSegListPropertyTearOff/) {
+        $svgListPropertyType = $svgWrappedNativeType;
+        $headerIncludes{"$svgWrappedNativeType.h"} = 1;
+        $headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+        $headerIncludes{"SVGPathSegListPropertyTearOff.h"} = 1;
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -2554,11 +2529,6 @@ sub NativeToJSValue
 
     return $value if $codeGenerator->IsSVGAnimatedType($type);
 
-    if (IsSVGTypeNeedingContextParameter($type)) {
-        my $contextPtr = IsSVGTypeNeedingContextParameter($implClassName) ? "JSSVGContextCache::svgContextForDOMObject(castedThis)" : "imp";
-        return "toJS(exec, $globalObject, WTF::getPtr($value), $contextPtr)";
-    }
-
     if ($signature->extendedAttributes->{"ReturnsNew"}) {        
         return "toJSNewlyCreated(exec, $globalObject, WTF::getPtr($value))";
     }
@@ -2595,7 +2565,7 @@ sub NativeToJSValue
         } elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
             my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
             $value = "${tearOffType}::create($extraImp$value)";
-        } elsif (not $tearOffType =~ /SVGPointList/) {
+        } elsif (not $tearOffType =~ /SVG(Point|PathSeg)List/) {
             $value = "${tearOffType}::create($value)";
         }
     }
diff --git a/WebCore/bindings/scripts/CodeGeneratorObjC.pm b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
index 50334a2..979b71e 100644
--- a/WebCore/bindings/scripts/CodeGeneratorObjC.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
@@ -673,6 +673,9 @@ sub GetSVGPropertyTypes
     } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
         $svgListPropertyType = "WebCore::$svgWrappedNativeType";
         $svgListPropertyType =~ s/</\<WebCore::/;
+    } elsif ($svgNativeType =~ /SVGPathSegListPropertyTearOff/) {
+        $svgListPropertyType = "WebCore::$svgWrappedNativeType";
+        $svgListPropertyType =~ s/</\<WebCore::/;
     }
 
     return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -1004,6 +1007,7 @@ sub GenerateHeader
         if ($svgListPropertyType) {
             push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n");
             push(@internalHeaderContent, "#import <WebCore/SVGTransformListPropertyTearOff.h>\n\n") if $svgListPropertyType =~ /SVGTransformList/;
+            push(@internalHeaderContent, "#import <WebCore/SVGPathSegListPropertyTearOff.h>\n\n") if $svgListPropertyType =~ /SVGPathSegList/;
         }
         push(@internalHeaderContent, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion;
 
@@ -1310,13 +1314,13 @@ sub GenerateImplementation
                         my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter);
                         $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod";
                         $getterContentTail .= "))";
+                    } elsif ($idlTypeWithNamespace =~ /SVG(Point|PathSeg)List/) {
+                        $getterContentHead = "kit(WTF::getPtr($getterContentHead";
+                        $getterContentTail .= "))";
                     } elsif ($idlTypeWithNamespace =~ /SVGStaticListPropertyTearOff/) {
                         my $extraImp = "WebCore::GetOwnerElementForType<$implClassNameWithNamespace, WebCore::IsDerivedFromSVGElement<$implClassNameWithNamespace>::value>::ownerElement(IMPL), ";
                         $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($extraImp$getterContentHead";
                         $getterContentTail .= ")))";
-                    } elsif ($idlTypeWithNamespace =~ /SVGPointList/) {
-                        $getterContentHead = "kit(WTF::getPtr($getterContentHead";
-                        $getterContentTail .= "))";
                     } else {
                         $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($getterContentHead";
                         $getterContentTail .= ")))";
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 40d0e92..390bcfb 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -679,18 +679,9 @@ sub GenerateNormalAttrGetter
     my $interfaceName = shift;
 
     my $attrExt = $attribute->signature->extendedAttributes;
-
     my $attrName = $attribute->signature->name;
-
     my $attrType = GetTypeFromSignature($attribute->signature);
-
     my $nativeType = GetNativeTypeFromSignature($attribute->signature, -1);
-    my $skipContext = 0;
-
-    # Special case: SVGZoomEvent's attributes are all read-only
-    if ($implClassName eq "SVGZoomEvent") {
-        $skipContext = 1;
-    }
 
     my $getterStringUsesImp = $implClassName ne "SVGNumber";
     my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($implClassName);
@@ -834,14 +825,6 @@ END
         return;
     }
 
-    if (IsSVGTypeNeedingContextParameter($attrType) && !$skipContext) {
-        push(@implContentDecls, GenerateSVGContextRetrieval($implClassName, "    "));
-        # The templating associated with passing withSVGContext()'s return value directly into toV8 can get compilers confused,
-        # so just manually set the return value to a PassRefPtr of the expected type.
-        push(@implContentDecls, "    PassRefPtr<$attrType> resultAsPassRefPtr = V8Proxy::withSVGContext($result, context);\n");
-        $result = "resultAsPassRefPtr";
-    }
-
     if ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
         $implIncludes{"V8$attrType.h"} = 1;
         my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
@@ -879,7 +862,7 @@ END
         } elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
             my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
             push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create($extraImp$result)));\n");
-        } elsif ($tearOffType =~ /SVGPointList/) {
+        } elsif ($tearOffType =~ /SVG(Point|PathSeg)List/) {
             push(@implContentDecls, "    return toV8(WTF::getPtr($result));\n");
         } else {
             push(@implContentDecls, "    return toV8(WTF::getPtr(${tearOffType}::create($result)));\n");
@@ -1036,10 +1019,6 @@ END
         } else {
             push(@implContentDecls, "    wrapper->commitChange();\n");
         }
-    } elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
-        $implIncludes{"SVGElement.h"} = 1;
-        push(@implContentDecls, "    if (SVGElement* context = V8Proxy::svgContext(imp))\n");
-        push(@implContentDecls, "        context->svgAttributeChanged(imp->associatedAttributeName());\n");
     }
 
     push(@implContentDecls, "    return;\n");
@@ -2722,23 +2701,6 @@ sub GenerateFunctionCallString()
         return $result;
     }
 
-    my $generatedSVGContextRetrieval = 0;
-    # If the return type needs an SVG context, output it
-    if (IsSVGTypeNeedingContextParameter($returnType)) {
-        $result .= GenerateSVGContextAssignment($implClassName, $return . ".get()", $indent);
-        $generatedSVGContextRetrieval = 1;
-    }
-
-    if (IsSVGTypeNeedingContextParameter($implClassName) && $implClassName =~ /List$/ && IsSVGListMutator($name)) {
-        if (!$generatedSVGContextRetrieval) {
-            $result .= GenerateSVGContextRetrieval($implClassName, $indent);
-            $generatedSVGContextRetrieval = 1;
-        }
-
-        $result .= $indent . "context->svgAttributeChanged(imp->associatedAttributeName());\n";
-        $implIncludes{"SVGElement.h"} = 1;
-    }
-
     # If the implementing class is a POD type, commit changes
     if ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName) and not $implClassName =~ /List$/) {
         $result .= $indent . "wrapper->commitChange();\n";
@@ -3208,64 +3170,6 @@ sub WriteData
     }
 }
 
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsSVGTypeNeedingContextParameter
-{
-    my $implClassName = shift;
-
-    return 0 unless $implClassName =~ /SVG/;
-    return 0 if $implClassName =~ /Element/;
-    return 0 if $codeGenerator->IsSVGAnimatedType($implClassName);
-    return 0 if $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
-
-    my @noContextNeeded = ("SVGColor", "SVGDocument", "SVGPaintType", "SVGPaint", "SVGZoomEvent");
-    foreach (@noContextNeeded) {
-        return 0 if $implClassName eq $_;
-    }
-    return 1;
-}
-
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub GenerateSVGContextAssignment
-{
-    my $srcType = shift;
-    my $value = shift;
-    my $indent = shift;
-
-    $result = GenerateSVGContextRetrieval($srcType, $indent);
-    $result .= $indent . "V8Proxy::setSVGContext($value, context);\n";
-
-    return $result;
-}
-
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub GenerateSVGContextRetrieval
-{
-    my $srcType = shift;
-    my $indent = shift;
-
-    my $contextDecl = "imp";
-    if (IsSVGTypeNeedingContextParameter($srcType)) {
-        $contextDecl = "V8Proxy::svgContext($contextDecl)";
-    }
-
-    return $indent . "SVGElement* context = $contextDecl;\n";
-}
-
-sub IsSVGListMutator
-{
-    my $functionName = shift;
-
-    return 1 if $functionName eq "clear";
-    return 1 if $functionName eq "initialize";
-    return 1 if $functionName eq "insertItemBefore";
-    return 1 if $functionName eq "replaceItem";
-    return 1 if $functionName eq "removeItem";
-    return 1 if $functionName eq "appendItem";
-
-    return 0;
-}
-
 sub GetVisibleInterfaceName
 {
     my $interfaceName = shift;
diff --git a/WebCore/rendering/SVGRenderTreeAsText.cpp b/WebCore/rendering/SVGRenderTreeAsText.cpp
index b9a854d..4e47ec8 100644
--- a/WebCore/rendering/SVGRenderTreeAsText.cpp
+++ b/WebCore/rendering/SVGRenderTreeAsText.cpp
@@ -415,7 +415,8 @@ static TextStream& operator<<(TextStream& ts, const RenderSVGPath& path)
     } else if (svgElement->hasTagName(SVGNames::pathTag)) {
         SVGPathElement* element = static_cast<SVGPathElement*>(svgElement);
         String pathString;
-        SVGPathParserFactory::self()->buildStringFromSVGPathSegList(element->pathSegList(), pathString, UnalteredParsing);
+        // FIXME: We should switch to UnalteredParsing here - this will affect the path dumping output of dozens of tests.
+        SVGPathParserFactory::self()->buildStringFromByteStream(element->pathByteStream(), pathString, NormalizedParsing);
         writeNameAndQuotedValue(ts, "data", pathString);
     } else
         ASSERT_NOT_REACHED();
diff --git a/WebCore/svg/SVGAllInOne.cpp b/WebCore/svg/SVGAllInOne.cpp
index e01af2c..60d3071 100644
--- a/WebCore/svg/SVGAllInOne.cpp
+++ b/WebCore/svg/SVGAllInOne.cpp
@@ -30,7 +30,6 @@
 #include "SVGAltGlyphElement.cpp"
 #include "SVGAngle.cpp"
 #include "SVGAnimateColorElement.cpp"
-#include "SVGAnimatedPathData.cpp"
 #include "SVGAnimateElement.cpp"
 #include "SVGAnimateMotionElement.cpp"
 #include "SVGAnimateTransformElement.cpp"
@@ -113,20 +112,9 @@
 #include "SVGPathElement.cpp"
 #include "SVGPathParser.cpp"
 #include "SVGPathParserFactory.cpp"
-#include "SVGPathSeg.cpp"
-#include "SVGPathSegArc.cpp"
-#include "SVGPathSegClosePath.cpp"
-#include "SVGPathSegCurvetoCubic.cpp"
-#include "SVGPathSegCurvetoCubicSmooth.cpp"
-#include "SVGPathSegCurvetoQuadratic.cpp"
-#include "SVGPathSegCurvetoQuadraticSmooth.cpp"
-#include "SVGPathSegLineto.cpp"
-#include "SVGPathSegLinetoHorizontal.cpp"
-#include "SVGPathSegLinetoVertical.cpp"
 #include "SVGPathSegList.cpp"
 #include "SVGPathSegListBuilder.cpp"
 #include "SVGPathSegListSource.cpp"
-#include "SVGPathSegMoveto.cpp"
 #include "SVGPathStringBuilder.cpp"
 #include "SVGPathStringSource.cpp"
 #include "SVGPathTraversalStateBuilder.cpp"
diff --git a/WebCore/svg/SVGAnimatedPathData.cpp b/WebCore/svg/SVGAnimatedPathData.cpp
deleted file mode 100644
index 6f54888..0000000
--- a/WebCore/svg/SVGAnimatedPathData.cpp
+++ /dev/null
@@ -1 +0,0 @@
-// This file is now intentionally empty. Delete it after removing it from all the build systems and project files.
diff --git a/WebCore/svg/SVGAnimatedPathData.h b/WebCore/svg/SVGAnimatedPathData.h
deleted file mode 100644
index 5ff66d3..0000000
--- a/WebCore/svg/SVGAnimatedPathData.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef SVGAnimatedPathData_h
-#define SVGAnimatedPathData_h
-
-#if ENABLE(SVG)
-
-namespace WebCore {
-
-    class SVGPathSegList;
-
-    class SVGAnimatedPathData {
-    public:
-        virtual ~SVGAnimatedPathData() { }
-
-        virtual SVGPathSegList* pathSegList() const = 0;
-        virtual SVGPathSegList* normalizedPathSegList() const = 0;
-        virtual SVGPathSegList* animatedPathSegList() const = 0;
-        virtual SVGPathSegList* animatedNormalizedPathSegList() const = 0;
-    };
-
-} // namespace WebCore
-
-#endif // ENABLE(SVG)
-#endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGAnimatedPathData.idl b/WebCore/svg/SVGAnimatedPathData.idl
deleted file mode 100644
index eae1340..0000000
--- a/WebCore/svg/SVGAnimatedPathData.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [Conditional=SVG, ObjCProtocol, OmitConstructor] SVGAnimatedPathData {
-        readonly attribute SVGPathSegList   pathSegList;
-        readonly attribute SVGPathSegList   normalizedPathSegList;
-        readonly attribute SVGPathSegList   animatedPathSegList;
-        readonly attribute SVGPathSegList   animatedNormalizedPathSegList;
-    };
-
-}
diff --git a/WebCore/svg/SVGPathElement.cpp b/WebCore/svg/SVGPathElement.cpp
index 8f8bef9..f9432ce 100644
--- a/WebCore/svg/SVGPathElement.cpp
+++ b/WebCore/svg/SVGPathElement.cpp
@@ -26,7 +26,6 @@
 #include "Attribute.h"
 #include "RenderSVGPath.h"
 #include "RenderSVGResource.h"
-#include "SVGNames.h"
 #include "SVGPathParserFactory.h"
 #include "SVGPathSegArc.h"
 #include "SVGPathSegClosePath.h"
@@ -38,6 +37,7 @@
 #include "SVGPathSegLinetoHorizontal.h"
 #include "SVGPathSegLinetoVertical.h"
 #include "SVGPathSegList.h"
+#include "SVGPathSegListPropertyTearOff.h"
 #include "SVGPathSegListBuilder.h"
 #include "SVGPathSegMoveto.h"
 #include "SVGSVGElement.h"
@@ -46,6 +46,8 @@ namespace WebCore {
 
 inline SVGPathElement::SVGPathElement(const QualifiedName& tagName, Document* document)
     : SVGStyledTransformableElement(tagName, document)
+    , m_pathByteStream(SVGPathByteStream::create())
+    , m_pathSegList(PathSegUnalteredRole)
 {
 }
 
@@ -75,112 +77,110 @@ unsigned long SVGPathElement::getPathSegAtLength(float length)
 {
     SVGPathParserFactory* factory = SVGPathParserFactory::self();
     unsigned long pathSeg = 0;
-    factory->getSVGPathSegAtLengthFromSVGPathSegList(pathSegList(), length, pathSeg);
+    factory->getSVGPathSegAtLengthFromSVGPathByteStream(m_pathByteStream.get(), length, pathSeg);
     return pathSeg;
 }
 
-PassRefPtr<SVGPathSegClosePath> SVGPathElement::createSVGPathSegClosePath()
+PassRefPtr<SVGPathSegClosePath> SVGPathElement::createSVGPathSegClosePath(SVGPathSegRole role)
 {
-    return SVGPathSegClosePath::create();
+    return SVGPathSegClosePath::create(this, role);
 }
 
-PassRefPtr<SVGPathSegMovetoAbs> SVGPathElement::createSVGPathSegMovetoAbs(float x, float y)
+PassRefPtr<SVGPathSegMovetoAbs> SVGPathElement::createSVGPathSegMovetoAbs(float x, float y, SVGPathSegRole role)
 {
-    return SVGPathSegMovetoAbs::create(x, y);
+    return SVGPathSegMovetoAbs::create(this, role, x, y);
 }
 
-PassRefPtr<SVGPathSegMovetoRel> SVGPathElement::createSVGPathSegMovetoRel(float x, float y)
+PassRefPtr<SVGPathSegMovetoRel> SVGPathElement::createSVGPathSegMovetoRel(float x, float y, SVGPathSegRole role)
 {
-    return SVGPathSegMovetoRel::create(x, y);
+    return SVGPathSegMovetoRel::create(this, role, x, y);
 }
 
-PassRefPtr<SVGPathSegLinetoAbs> SVGPathElement::createSVGPathSegLinetoAbs(float x, float y)
+PassRefPtr<SVGPathSegLinetoAbs> SVGPathElement::createSVGPathSegLinetoAbs(float x, float y, SVGPathSegRole role)
 {
-    return SVGPathSegLinetoAbs::create(x, y);
+    return SVGPathSegLinetoAbs::create(this, role, x, y);
 }
 
-PassRefPtr<SVGPathSegLinetoRel> SVGPathElement::createSVGPathSegLinetoRel(float x, float y)
+PassRefPtr<SVGPathSegLinetoRel> SVGPathElement::createSVGPathSegLinetoRel(float x, float y, SVGPathSegRole role)
 {
-    return SVGPathSegLinetoRel::create(x, y);
+    return SVGPathSegLinetoRel::create(this, role, x, y);
 }
 
-PassRefPtr<SVGPathSegCurvetoCubicAbs> SVGPathElement::createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2)
+PassRefPtr<SVGPathSegCurvetoCubicAbs> SVGPathElement::createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoCubicAbs::create(x, y, x1, y1, x2, y2);
+    return SVGPathSegCurvetoCubicAbs::create(this, role, x, y, x1, y1, x2, y2);
 }
 
-PassRefPtr<SVGPathSegCurvetoCubicRel> SVGPathElement::createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2)
+PassRefPtr<SVGPathSegCurvetoCubicRel> SVGPathElement::createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoCubicRel::create(x, y, x1, y1, x2, y2);
+    return SVGPathSegCurvetoCubicRel::create(this, role, x, y, x1, y1, x2, y2);
 }
 
-PassRefPtr<SVGPathSegCurvetoQuadraticAbs> SVGPathElement::createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1)
+PassRefPtr<SVGPathSegCurvetoQuadraticAbs> SVGPathElement::createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoQuadraticAbs::create(x, y, x1, y1);
+    return SVGPathSegCurvetoQuadraticAbs::create(this, role, x, y, x1, y1);
 }
 
-PassRefPtr<SVGPathSegCurvetoQuadraticRel> SVGPathElement::createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1)
+PassRefPtr<SVGPathSegCurvetoQuadraticRel> SVGPathElement::createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoQuadraticRel::create(x, y, x1, y1);
+    return SVGPathSegCurvetoQuadraticRel::create(this, role, x, y, x1, y1);
 }
 
-PassRefPtr<SVGPathSegArcAbs> SVGPathElement::createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+PassRefPtr<SVGPathSegArcAbs> SVGPathElement::createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role)
 {
-    return SVGPathSegArcAbs::create(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    return SVGPathSegArcAbs::create(this, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
 }
 
-PassRefPtr<SVGPathSegArcRel> SVGPathElement::createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+PassRefPtr<SVGPathSegArcRel> SVGPathElement::createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role)
 {
-    return SVGPathSegArcRel::create(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
+    return SVGPathSegArcRel::create(this, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag);
 }
 
-PassRefPtr<SVGPathSegLinetoHorizontalAbs> SVGPathElement::createSVGPathSegLinetoHorizontalAbs(float x)
+PassRefPtr<SVGPathSegLinetoHorizontalAbs> SVGPathElement::createSVGPathSegLinetoHorizontalAbs(float x, SVGPathSegRole role)
 {
-    return SVGPathSegLinetoHorizontalAbs::create(x);
+    return SVGPathSegLinetoHorizontalAbs::create(this, role, x);
 }
 
-PassRefPtr<SVGPathSegLinetoHorizontalRel> SVGPathElement::createSVGPathSegLinetoHorizontalRel(float x)
+PassRefPtr<SVGPathSegLinetoHorizontalRel> SVGPathElement::createSVGPathSegLinetoHorizontalRel(float x, SVGPathSegRole role)
 {
-    return SVGPathSegLinetoHorizontalRel::create(x);
+    return SVGPathSegLinetoHorizontalRel::create(this, role, x);
 }
 
-PassRefPtr<SVGPathSegLinetoVerticalAbs> SVGPathElement::createSVGPathSegLinetoVerticalAbs(float y)
+PassRefPtr<SVGPathSegLinetoVerticalAbs> SVGPathElement::createSVGPathSegLinetoVerticalAbs(float y, SVGPathSegRole role)
 {
-    return SVGPathSegLinetoVerticalAbs::create(y);
+    return SVGPathSegLinetoVerticalAbs::create(this, role, y);
 }
 
-PassRefPtr<SVGPathSegLinetoVerticalRel> SVGPathElement::createSVGPathSegLinetoVerticalRel(float y)
+PassRefPtr<SVGPathSegLinetoVerticalRel> SVGPathElement::createSVGPathSegLinetoVerticalRel(float y, SVGPathSegRole role)
 {
-    return SVGPathSegLinetoVerticalRel::create(y);
+    return SVGPathSegLinetoVerticalRel::create(this, role, y);
 }
 
-PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2)
+PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoCubicSmoothAbs::create(x, y, x2, y2);
+    return SVGPathSegCurvetoCubicSmoothAbs::create(this, role, x, y, x2, y2);
 }
 
-PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2)
+PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoCubicSmoothRel::create(x, y, x2, y2);
+    return SVGPathSegCurvetoCubicSmoothRel::create(this, role, x, y, x2, y2);
 }
 
-PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y)
+PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoQuadraticSmoothAbs::create(x, y);
+    return SVGPathSegCurvetoQuadraticSmoothAbs::create(this, role, x, y);
 }
 
-PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y)
+PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y, SVGPathSegRole role)
 {
-    return SVGPathSegCurvetoQuadraticSmoothRel::create(x, y);
+    return SVGPathSegCurvetoQuadraticSmoothRel::create(this, role, x, y);
 }
 
 void SVGPathElement::parseMappedAttribute(Attribute* attr)
 {
     if (attr->name() == SVGNames::dAttr) {
-        ExceptionCode ec;
-        pathSegList()->clear(ec);
         SVGPathParserFactory* factory = SVGPathParserFactory::self();
-        if (!factory->buildSVGPathSegListFromString(attr->value(), pathSegList(), NormalizedParsing))
+        if (!factory->buildSVGPathByteStreamFromString(attr->value(), m_pathByteStream, UnalteredParsing))
             document()->accessSVGExtensions()->reportError("Problem parsing d=\"" + attr->value() + "\"");
     } else if (attr->name() == SVGNames::pathLengthAttr) {
         setPathLengthBaseValue(attr->value().toFloat());
@@ -205,15 +205,26 @@ void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
         return;
 
     RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
-    if (!renderer)
-        return;
 
     if (attrName == SVGNames::dAttr) {
+        if (m_animatablePathSegList) {
+            SVGPathSegList newList(PathSegUnalteredRole);
+            SVGPathParserFactory* factory = SVGPathParserFactory::self();
+            factory->buildSVGPathSegListFromByteStream(m_pathByteStream.get(), this, newList, UnalteredParsing);
+            m_pathSegList.value = newList;
+        }
+
+        if (!renderer)
+            return;
+
         renderer->setNeedsPathUpdate();
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
         return;
     }
 
+    if (!renderer)
+        return;
+
     if (SVGStyledTransformableElement::isKnownAttribute(attrName)) {
         renderer->setNeedsTransformUpdate();
         RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
@@ -231,40 +242,67 @@ void SVGPathElement::synchronizeProperty(const QualifiedName& attrName)
     SVGStyledTransformableElement::synchronizeProperty(attrName);
 
     if (attrName == anyQName()) {
+        synchronizeD();
         synchronizePathLength();
         synchronizeExternalResourcesRequired();
         return;
     }
 
-    if (attrName == SVGNames::pathLengthAttr)
+    if (attrName == SVGNames::dAttr)
+        synchronizeD();
+    else if (attrName == SVGNames::pathLengthAttr)
         synchronizePathLength();
     else if (SVGExternalResourcesRequired::isKnownAttribute(attrName))
         synchronizeExternalResourcesRequired();
 }
 
-SVGPathSegList* SVGPathElement::pathSegList() const
+void SVGPathElement::synchronizeD()
 {
-    if (!m_pathSegList)
-        m_pathSegList = SVGPathSegList::create(SVGNames::dAttr);
+    if (!m_pathSegList.shouldSynchronize)
+        return;
 
-    return m_pathSegList.get();
+    SVGAnimatedPropertySynchronizer<true>::synchronize(this, SVGNames::dAttr, m_pathSegList.value.valueAsString());
 }
 
-SVGPathSegList* SVGPathElement::normalizedPathSegList() const
+SVGPathSegListPropertyTearOff* SVGPathElement::pathSegList()
 {
-    // TODO
-    return 0;
+    if (!m_animatablePathSegList) {
+        m_pathSegList.shouldSynchronize = true;
+
+        SVGPathParserFactory* factory = SVGPathParserFactory::self();
+        factory->buildSVGPathSegListFromByteStream(m_pathByteStream.get(), this, m_pathSegList.value, UnalteredParsing);
+
+        m_animatablePathSegList = SVGAnimatedProperty::lookupOrCreateWrapper<SVGAnimatedPathSegListPropertyTearOff, SVGPathSegList>
+                                 (this, SVGNames::dAttr, SVGNames::dAttr.localName(), m_pathSegList.value);
+    }
+
+    return static_cast<SVGPathSegListPropertyTearOff*>(m_animatablePathSegList->baseVal(PathSegUnalteredRole));
 }
 
-SVGPathSegList* SVGPathElement::animatedPathSegList() const
+SVGPathSegListPropertyTearOff* SVGPathElement::normalizedPathSegList()
 {
-    // TODO
+    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
     return 0;
 }
 
-SVGPathSegList* SVGPathElement::animatedNormalizedPathSegList() const
+SVGPathSegListPropertyTearOff* SVGPathElement::animatedPathSegList()
 {
-    // TODO
+    if (!m_animatablePathSegList) {
+        m_pathSegList.shouldSynchronize = true;
+
+        SVGPathParserFactory* factory = SVGPathParserFactory::self();
+        factory->buildSVGPathSegListFromByteStream(m_pathByteStream.get(), this, m_pathSegList.value, UnalteredParsing);
+
+        m_animatablePathSegList = SVGAnimatedProperty::lookupOrCreateWrapper<SVGAnimatedPathSegListPropertyTearOff, SVGPathSegList>
+                                 (this, SVGNames::dAttr, SVGNames::dAttr.localName(), m_pathSegList.value);
+    }
+
+    return static_cast<SVGPathSegListPropertyTearOff*>(m_animatablePathSegList->animVal(PathSegUnalteredRole));
+}
+
+SVGPathSegListPropertyTearOff* SVGPathElement::animatedNormalizedPathSegList()
+{
+    // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
     return 0;
 }
 
@@ -273,7 +311,33 @@ void SVGPathElement::toPathData(Path& path) const
     ASSERT(path.isEmpty());
 
     SVGPathParserFactory* factory = SVGPathParserFactory::self();
-    factory->buildPathFromSVGPathSegList(pathSegList(), path);
+    factory->buildPathFromByteStream(m_pathByteStream.get(), path);
+}
+
+void SVGPathElement::pathSegListChanged(SVGPathSegRole role)
+{
+    SVGPathParserFactory* factory = SVGPathParserFactory::self();
+
+    switch (role) {
+    case PathSegNormalizedRole:
+        // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
+        break;
+    case PathSegUnalteredRole:
+        m_pathByteStream->clear();
+        factory->buildSVGPathByteStreamFromSVGPathSegList(m_pathSegList.value, m_pathByteStream, UnalteredParsing);
+        break;
+    case PathSegUndefinedRole:
+        return;
+    }
+
+    invalidateSVGAttributes();
+
+    RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
+    if (!renderer)
+        return;
+
+    renderer->setNeedsPathUpdate();
+    RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
 }
 
 }
diff --git a/WebCore/svg/SVGPathElement.h b/WebCore/svg/SVGPathElement.h
index 91d55b1..0590dea 100644
--- a/WebCore/svg/SVGPathElement.h
+++ b/WebCore/svg/SVGPathElement.h
@@ -22,94 +22,101 @@
 #define SVGPathElement_h
 
 #if ENABLE(SVG)
-#include "SVGAnimatedPathData.h"
+#include "SVGAnimatedPathSegListPropertyTearOff.h"
 #include "SVGAnimatedPropertyMacros.h"
 #include "SVGExternalResourcesRequired.h"
 #include "SVGLangSpace.h"
+#include "SVGPathByteStream.h"
 #include "SVGStyledTransformableElement.h"
 #include "SVGTests.h"
 
 namespace WebCore {
 
-    class SVGPathSeg;
-    class SVGPathSegArcAbs;
-    class SVGPathSegArcRel;
-    class SVGPathSegClosePath;
-    class SVGPathSegLinetoAbs;
-    class SVGPathSegLinetoRel;
-    class SVGPathSegMovetoAbs;
-    class SVGPathSegMovetoRel;
-    class SVGPathSegCurvetoCubicAbs;
-    class SVGPathSegCurvetoCubicRel;
-    class SVGPathSegLinetoVerticalAbs;
-    class SVGPathSegLinetoVerticalRel;
-    class SVGPathSegLinetoHorizontalAbs;
-    class SVGPathSegLinetoHorizontalRel;
-    class SVGPathSegCurvetoQuadraticAbs;
-    class SVGPathSegCurvetoQuadraticRel;
-    class SVGPathSegCurvetoCubicSmoothAbs;
-    class SVGPathSegCurvetoCubicSmoothRel;
-    class SVGPathSegCurvetoQuadraticSmoothAbs;
-    class SVGPathSegCurvetoQuadraticSmoothRel;
-
-    class SVGPathElement : public SVGStyledTransformableElement,
-                           public SVGTests,
-                           public SVGLangSpace,
-                           public SVGExternalResourcesRequired,
-                           public SVGAnimatedPathData {
-    public:
-        static PassRefPtr<SVGPathElement> create(const QualifiedName&, Document*);
-        
-        float getTotalLength();
-        FloatPoint getPointAtLength(float distance);
-        unsigned long getPathSegAtLength(float distance);
-
-        static PassRefPtr<SVGPathSegClosePath> createSVGPathSegClosePath();
-        static PassRefPtr<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y);
-        static PassRefPtr<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y);
-        static PassRefPtr<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y);
-        static PassRefPtr<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y);
-        static PassRefPtr<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2);
-        static PassRefPtr<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2);
-        static PassRefPtr<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1);
-        static PassRefPtr<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1);
-        static PassRefPtr<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag);
-        static PassRefPtr<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag);
-        static PassRefPtr<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x);
-        static PassRefPtr<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x);
-        static PassRefPtr<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y);
-        static PassRefPtr<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y);
-        static PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2);
-        static PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2);
-        static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y);
-        static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y);
-
-        // Derived from: 'SVGAnimatedPathData'
-        virtual SVGPathSegList* pathSegList() const;
-        virtual SVGPathSegList* normalizedPathSegList() const;
-        virtual SVGPathSegList* animatedPathSegList() const;
-        virtual SVGPathSegList* animatedNormalizedPathSegList() const;
-
-        virtual void toPathData(Path&) const;
-
-    private:
-        SVGPathElement(const QualifiedName&, Document*);
-
-        virtual bool isValid() const { return SVGTests::isValid(); }
-
-        virtual void parseMappedAttribute(Attribute*);
-        virtual void svgAttributeChanged(const QualifiedName&);
-        virtual void synchronizeProperty(const QualifiedName&);
-
-        virtual bool supportsMarkers() const { return true; }
-
-        mutable RefPtr<SVGPathSegList> m_pathSegList;
-
-        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::pathLengthAttr, float, PathLength, pathLength)
-
-        // SVGExternalResourcesRequired
-        DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
-    };
+class SVGPathSegArcAbs;
+class SVGPathSegArcRel;
+class SVGPathSegClosePath;
+class SVGPathSegLinetoAbs;
+class SVGPathSegLinetoRel;
+class SVGPathSegMovetoAbs;
+class SVGPathSegMovetoRel;
+class SVGPathSegCurvetoCubicAbs;
+class SVGPathSegCurvetoCubicRel;
+class SVGPathSegLinetoVerticalAbs;
+class SVGPathSegLinetoVerticalRel;
+class SVGPathSegLinetoHorizontalAbs;
+class SVGPathSegLinetoHorizontalRel;
+class SVGPathSegCurvetoQuadraticAbs;
+class SVGPathSegCurvetoQuadraticRel;
+class SVGPathSegCurvetoCubicSmoothAbs;
+class SVGPathSegCurvetoCubicSmoothRel;
+class SVGPathSegCurvetoQuadraticSmoothAbs;
+class SVGPathSegCurvetoQuadraticSmoothRel;
+
+class SVGPathElement : public SVGStyledTransformableElement,
+                       public SVGTests,
+                       public SVGLangSpace,
+                       public SVGExternalResourcesRequired {
+public:
+    static PassRefPtr<SVGPathElement> create(const QualifiedName&, Document*);
+    
+    float getTotalLength();
+    FloatPoint getPointAtLength(float distance);
+    unsigned long getPathSegAtLength(float distance);
+
+    PassRefPtr<SVGPathSegClosePath> createSVGPathSegClosePath(SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegMovetoAbs> createSVGPathSegMovetoAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegMovetoRel> createSVGPathSegMovetoRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegLinetoAbs> createSVGPathSegLinetoAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegLinetoRel> createSVGPathSegLinetoRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoCubicAbs> createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoCubicRel> createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoQuadraticAbs> createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoQuadraticRel> createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegArcAbs> createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegArcRel> createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegLinetoHorizontalAbs> createSVGPathSegLinetoHorizontalAbs(float x, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegLinetoHorizontalRel> createSVGPathSegLinetoHorizontalRel(float x, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegLinetoVerticalAbs> createSVGPathSegLinetoVerticalAbs(float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegLinetoVerticalRel> createSVGPathSegLinetoVerticalRel(float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
+    PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y, SVGPathSegRole role = PathSegUndefinedRole);
+
+    // Used in the bindings only.
+    SVGPathSegListPropertyTearOff* pathSegList();
+    SVGPathSegListPropertyTearOff* animatedPathSegList();
+    SVGPathSegListPropertyTearOff* normalizedPathSegList();
+    SVGPathSegListPropertyTearOff* animatedNormalizedPathSegList();
+
+    SVGPathByteStream* pathByteStream() const { return m_pathByteStream.get(); }
+    SVGAnimatedProperty* animatablePathSegList() const { return m_animatablePathSegList.get(); }
+
+    virtual void toPathData(Path&) const;
+    void pathSegListChanged(SVGPathSegRole);
+
+private:
+    SVGPathElement(const QualifiedName&, Document*);
+
+    virtual bool isValid() const { return SVGTests::isValid(); }
+
+    virtual void parseMappedAttribute(Attribute*);
+    virtual void synchronizeProperty(const QualifiedName&);
+    virtual void svgAttributeChanged(const QualifiedName&);
+    virtual bool supportsMarkers() const { return true; }
+
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::pathLengthAttr, float, PathLength, pathLength)
+
+    // SVGExternalResourcesRequired
+    DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPathElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
+
+    void synchronizeD();
+
+protected:
+    OwnPtr<SVGPathByteStream> m_pathByteStream;
+    mutable SVGSynchronizableAnimatedProperty<SVGPathSegList> m_pathSegList;
+    RefPtr<SVGAnimatedPathSegListPropertyTearOff> m_animatablePathSegList;
+};
 
 } // namespace WebCore
 
diff --git a/WebCore/svg/SVGPathElement.idl b/WebCore/svg/SVGPathElement.idl
index 1c1dca7..00a9d85 100644
--- a/WebCore/svg/SVGPathElement.idl
+++ b/WebCore/svg/SVGPathElement.idl
@@ -31,8 +31,7 @@ module svg {
                                                  SVGLangSpace,
                                                  SVGExternalResourcesRequired,
                                                  SVGStylable,
-                                                 SVGTransformable,
-                                                 SVGAnimatedPathData {
+                                                 SVGTransformable {
         readonly attribute SVGAnimatedNumber pathLength;
 
         float getTotalLength();
@@ -107,6 +106,11 @@ module svg {
                                                                                       in float y);
         SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(in float x, 
                                                                                       in float y);
+
+        readonly attribute SVGPathSegList pathSegList;
+        readonly attribute SVGPathSegList normalizedPathSegList;
+        readonly attribute SVGPathSegList animatedPathSegList;
+        readonly attribute SVGPathSegList animatedNormalizedPathSegList;
     };
 
 }
diff --git a/WebCore/svg/SVGPathParserFactory.cpp b/WebCore/svg/SVGPathParserFactory.cpp
index e707c20..deb0307 100644
--- a/WebCore/svg/SVGPathParserFactory.cpp
+++ b/WebCore/svg/SVGPathParserFactory.cpp
@@ -27,6 +27,7 @@
 #include "SVGPathBuilder.h"
 #include "SVGPathByteStreamBuilder.h"
 #include "SVGPathByteStreamSource.h"
+#include "SVGPathElement.h"
 #include "SVGPathParser.h"
 #include "SVGPathSegListBuilder.h"
 #include "SVGPathSegListSource.h"
@@ -46,13 +47,15 @@ static SVGPathBuilder* globalSVGPathBuilder(Path& result)
     return s_builder;
 }
 
-static SVGPathSegListBuilder* globalSVGPathSegListBuilder(SVGPathSegList* result)
+static SVGPathSegListBuilder* globalSVGPathSegListBuilder(SVGPathElement* element, SVGPathSegRole role, SVGPathSegList& result)
 {
     static SVGPathSegListBuilder* s_builder = 0;
     if (!s_builder)
         s_builder = new SVGPathSegListBuilder;
 
+    s_builder->setCurrentSVGPathElement(element);
     s_builder->setCurrentSVGPathSegList(result);
+    s_builder->setCurrentSVGPathSegRole(role);
     return s_builder;
 }
 
@@ -137,59 +140,43 @@ bool SVGPathParserFactory::buildPathFromString(const String& d, Path& result)
     return ok;
 }
 
-bool SVGPathParserFactory::buildPathFromByteStream(SVGPathByteStream* stream, Path& result)
+bool SVGPathParserFactory::buildSVGPathByteStreamFromSVGPathSegList(const SVGPathSegList& list, OwnPtr<SVGPathByteStream>& result, PathParsingMode parsingMode)
 {
-    ASSERT(stream);
-    if (stream->isEmpty())
+    result = SVGPathByteStream::create();
+    if (list.isEmpty())
         return false;
 
-    SVGPathBuilder* builder = globalSVGPathBuilder(result);
+    SVGPathByteStreamBuilder* builder = globalSVGPathByteStreamBuilder(result.get());
 
-    OwnPtr<SVGPathByteStreamSource> source = SVGPathByteStreamSource::create(stream);
+    OwnPtr<SVGPathSegListSource> source = SVGPathSegListSource::create(list);
     SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
-    bool ok = parser->parsePathDataFromSource(NormalizedParsing);
+    bool ok = parser->parsePathDataFromSource(parsingMode);
     parser->cleanup();
     return ok;
 }
 
-bool SVGPathParserFactory::buildPathFromSVGPathSegList(SVGPathSegList* pathSegList, Path& result)
+bool SVGPathParserFactory::buildPathFromByteStream(SVGPathByteStream* stream, Path& result)
 {
-    ASSERT(pathSegList);
-    if (!pathSegList->numberOfItems())
+    ASSERT(stream);
+    if (stream->isEmpty())
         return false;
 
     SVGPathBuilder* builder = globalSVGPathBuilder(result);
 
-    OwnPtr<SVGPathSegListSource> source = SVGPathSegListSource::create(pathSegList);
+    OwnPtr<SVGPathByteStreamSource> source = SVGPathByteStreamSource::create(stream);
     SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
     bool ok = parser->parsePathDataFromSource(NormalizedParsing);
     parser->cleanup();
     return ok;
 }
 
-bool SVGPathParserFactory::buildSVGPathSegListFromString(const String& d, SVGPathSegList* result, PathParsingMode parsingMode)
-{
-    ASSERT(result);
-    if (d.isEmpty())
-        return false;
-
-    SVGPathSegListBuilder* builder = globalSVGPathSegListBuilder(result);
-
-    OwnPtr<SVGPathStringSource> source = SVGPathStringSource::create(d);
-    SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
-    bool ok = parser->parsePathDataFromSource(parsingMode);
-    parser->cleanup();
-    return ok;
-}
-
-bool SVGPathParserFactory::buildSVGPathSegListFromByteStream(SVGPathByteStream* stream, SVGPathSegList* result, PathParsingMode parsingMode)
+bool SVGPathParserFactory::buildSVGPathSegListFromByteStream(SVGPathByteStream* stream, SVGPathElement* element, SVGPathSegList& result, PathParsingMode parsingMode)
 {
     ASSERT(stream);
-    ASSERT(result);
     if (stream->isEmpty())
         return false; 
 
-    SVGPathSegListBuilder* builder = globalSVGPathSegListBuilder(result);
+    SVGPathSegListBuilder* builder = globalSVGPathSegListBuilder(element, parsingMode == NormalizedParsing ? PathSegNormalizedRole : PathSegUnalteredRole, result);
 
     OwnPtr<SVGPathByteStreamSource> source = SVGPathByteStreamSource::create(stream);
     SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
@@ -214,15 +201,15 @@ bool SVGPathParserFactory::buildStringFromByteStream(SVGPathByteStream* stream,
     return ok;
 }
 
-bool SVGPathParserFactory::buildStringFromSVGPathSegList(SVGPathSegList* pathSegList, String& result, PathParsingMode parsingMode)
+bool SVGPathParserFactory::buildStringFromSVGPathSegList(const SVGPathSegList& list, String& result, PathParsingMode parsingMode)
 {
-    ASSERT(pathSegList);
-    if (!pathSegList->numberOfItems())
-        return false; 
+    result = String();
+    if (list.isEmpty())
+        return false;
 
     SVGPathStringBuilder* builder = globalSVGPathStringBuilder();
 
-    OwnPtr<SVGPathSegListSource> source = SVGPathSegListSource::create(pathSegList);
+    OwnPtr<SVGPathSegListSource> source = SVGPathSegListSource::create(list);
     SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
     bool ok = parser->parsePathDataFromSource(parsingMode);
     result = builder->result();
@@ -232,16 +219,15 @@ bool SVGPathParserFactory::buildStringFromSVGPathSegList(SVGPathSegList* pathSeg
 
 bool SVGPathParserFactory::buildSVGPathByteStreamFromString(const String& d, OwnPtr<SVGPathByteStream>& result, PathParsingMode parsingMode)
 {
+    result = SVGPathByteStream::create();
     if (d.isEmpty())
         return false;
 
-    OwnPtr<SVGPathByteStream> stream = SVGPathByteStream::create();
-    SVGPathByteStreamBuilder* builder = globalSVGPathByteStreamBuilder(stream.get());
+    SVGPathByteStreamBuilder* builder = globalSVGPathByteStreamBuilder(result.get());
 
     OwnPtr<SVGPathStringSource> source = SVGPathStringSource::create(d);
     SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
     bool ok = parser->parsePathDataFromSource(parsingMode);
-    result = stream.release();
     parser->cleanup();
     return ok;
 }
@@ -250,31 +236,30 @@ bool SVGPathParserFactory::buildAnimatedSVGPathByteStream(SVGPathByteStream* fro
 {
     ASSERT(fromStream);
     ASSERT(toStream);
+    result = SVGPathByteStream::create();
     if (fromStream->isEmpty() || toStream->isEmpty())
         return false;
 
-    OwnPtr<SVGPathByteStream> stream = SVGPathByteStream::create();
-    SVGPathByteStreamBuilder* builder = globalSVGPathByteStreamBuilder(stream.get());
+    SVGPathByteStreamBuilder* builder = globalSVGPathByteStreamBuilder(result.get());
 
     OwnPtr<SVGPathByteStreamSource> fromSource = SVGPathByteStreamSource::create(fromStream);
     OwnPtr<SVGPathByteStreamSource> toSource = SVGPathByteStreamSource::create(toStream);
     SVGPathBlender* blender = globalSVGPathBlender();
     bool ok = blender->blendAnimatedPath(progress, fromSource.get(), toSource.get(), builder);
-    result = stream.release();
     blender->cleanup();
     return ok;
 }
 
-bool SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathSegList(SVGPathSegList* pathSegList, float length, unsigned long& pathSeg)
+bool SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathByteStream(SVGPathByteStream* stream, float length, unsigned long& pathSeg)
 {
-    ASSERT(pathSegList);
-    if (!pathSegList->numberOfItems())
-        return false; 
+    ASSERT(stream);
+    if (stream->isEmpty())
+        return false;
 
     PathTraversalState traversalState(PathTraversalState::TraversalSegmentAtLength);
     SVGPathTraversalStateBuilder* builder = globalSVGPathTraversalStateBuilder(traversalState, length);
 
-    OwnPtr<SVGPathSegListSource> source = SVGPathSegListSource::create(pathSegList);
+    OwnPtr<SVGPathByteStreamSource> source = SVGPathByteStreamSource::create(stream);
     SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
     bool ok = parser->parsePathDataFromSource(NormalizedParsing);
     pathSeg = builder->pathSegmentIndex();
diff --git a/WebCore/svg/SVGPathParserFactory.h b/WebCore/svg/SVGPathParserFactory.h
index b8a2dd5..5ae5e8a 100644
--- a/WebCore/svg/SVGPathParserFactory.h
+++ b/WebCore/svg/SVGPathParserFactory.h
@@ -30,25 +30,29 @@
 
 namespace WebCore {
 
+class SVGPathElement;
+
 class SVGPathParserFactory {
 public:
     static SVGPathParserFactory* self();
 
+    // String/SVGPathByteStream -> Path
     bool buildPathFromString(const String&, Path&);
     bool buildPathFromByteStream(SVGPathByteStream*, Path&);
-    bool buildPathFromSVGPathSegList(SVGPathSegList*, Path&);
 
-    bool buildSVGPathSegListFromString(const String&, SVGPathSegList*, PathParsingMode);
-    bool buildSVGPathSegListFromByteStream(SVGPathByteStream*, SVGPathSegList*, PathParsingMode);
+    // SVGPathSegList/String -> SVGPathByteStream
+    bool buildSVGPathByteStreamFromSVGPathSegList(const SVGPathSegList&, OwnPtr<SVGPathByteStream>&, PathParsingMode);
+    bool buildSVGPathByteStreamFromString(const String&, OwnPtr<SVGPathByteStream>&, PathParsingMode);
 
+    // SVGPathByteStream/SVGPathSegList -> String
     bool buildStringFromByteStream(SVGPathByteStream*, String&, PathParsingMode);
-    bool buildStringFromSVGPathSegList(SVGPathSegList*, String&, PathParsingMode);
+    bool buildStringFromSVGPathSegList(const SVGPathSegList&, String&, PathParsingMode);
 
-    bool buildSVGPathByteStreamFromString(const String&, OwnPtr<SVGPathByteStream>&, PathParsingMode);
+    // SVGPathByteStream -> SVGPathSegList
+    bool buildSVGPathSegListFromByteStream(SVGPathByteStream*, SVGPathElement*, SVGPathSegList&, PathParsingMode);
 
     bool buildAnimatedSVGPathByteStream(SVGPathByteStream*, SVGPathByteStream*, OwnPtr<SVGPathByteStream>&, float);
-
-    bool getSVGPathSegAtLengthFromSVGPathSegList(SVGPathSegList*, float, unsigned long&);
+    bool getSVGPathSegAtLengthFromSVGPathByteStream(SVGPathByteStream*, float length, unsigned long& pathSeg);
 
 private:
     SVGPathParserFactory();
diff --git a/WebCore/svg/SVGPathSeg.cpp b/WebCore/svg/SVGPathSeg.cpp
deleted file mode 100644
index 5939976..0000000
--- a/WebCore/svg/SVGPathSeg.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 Google, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#if ENABLE(SVG)
-#include "SVGPathSeg.h"
-
-#include "SVGNames.h"
-
-namespace WebCore {
-
-const QualifiedName& SVGPathSeg::associatedAttributeName() const
-{
-    return SVGNames::dAttr;
-}
-
-} // namespace WebCore
-#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGPathSeg.h b/WebCore/svg/SVGPathSeg.h
index a2cf261..4fce0c3 100644
--- a/WebCore/svg/SVGPathSeg.h
+++ b/WebCore/svg/SVGPathSeg.h
@@ -22,8 +22,7 @@
 #define SVGPathSeg_h
 
 #if ENABLE(SVG)
-#include <wtf/Forward.h>
-#include <wtf/RefCounted.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
@@ -50,10 +49,15 @@ enum SVGPathSegType {
     PathSegCurveToQuadraticSmoothRel = 19
 };
 
-class QualifiedName;
+enum SVGPathSegRole {
+    PathSegUnalteredRole = 0,
+    PathSegNormalizedRole = 1,
+    PathSegUndefinedRole = 2
+};
 
 class SVGPathSeg : public RefCounted<SVGPathSeg> {
 public:
+    SVGPathSeg() { }
     virtual ~SVGPathSeg() { }
 
     // Forward declare these enums in the w3c naming scheme, for IDL generation
@@ -80,31 +84,8 @@ public:
         PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = PathSegCurveToQuadraticSmoothRel
     };
 
-
     virtual unsigned short pathSegType() const = 0;
     virtual String pathSegTypeAsLetter() const = 0;
-
-    const QualifiedName& associatedAttributeName() const;
-};
-
-class SVGPathSegSingleCoord : public SVGPathSeg { 
-public:
-    void setX(float x) { m_x = x; }
-    float x() const { return m_x; }
-
-    void setY(float y) { m_y = y; }
-    float y() const { return m_y; }
-
-protected:
-    SVGPathSegSingleCoord(float x, float y)
-        : m_x(x)
-        , m_y(y)
-    {
-    }
-
-private:
-    float m_x;
-    float m_y;
 };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGPathSeg.idl b/WebCore/svg/SVGPathSeg.idl
index 8641a48..f46518c 100644
--- a/WebCore/svg/SVGPathSeg.idl
+++ b/WebCore/svg/SVGPathSeg.idl
@@ -28,29 +28,29 @@ module svg {
 
     interface [Conditional=SVG, CustomToJS, Polymorphic] SVGPathSeg {
         // Path Segment Types
-        const unsigned short PATHSEG_UNKNOWN                      = 0;
-        const unsigned short PATHSEG_CLOSEPATH                    = 1;
-        const unsigned short PATHSEG_MOVETO_ABS                   = 2;
-        const unsigned short PATHSEG_MOVETO_REL                   = 3;
-        const unsigned short PATHSEG_LINETO_ABS                   = 4;
-        const unsigned short PATHSEG_LINETO_REL                   = 5;
-        const unsigned short PATHSEG_CURVETO_CUBIC_ABS            = 6;
-        const unsigned short PATHSEG_CURVETO_CUBIC_REL            = 7;
-        const unsigned short PATHSEG_CURVETO_QUADRATIC_ABS        = 8;
-        const unsigned short PATHSEG_CURVETO_QUADRATIC_REL        = 9;
-        const unsigned short PATHSEG_ARC_ABS                      = 10;
-        const unsigned short PATHSEG_ARC_REL                      = 11;
-        const unsigned short PATHSEG_LINETO_HORIZONTAL_ABS        = 12;
-        const unsigned short PATHSEG_LINETO_HORIZONTAL_REL        = 13;
-        const unsigned short PATHSEG_LINETO_VERTICAL_ABS          = 14;
-        const unsigned short PATHSEG_LINETO_VERTICAL_REL          = 15;
-        const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_ABS     = 16;
-        const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_REL     = 17;
+        const unsigned short PATHSEG_UNKNOWN = 0;
+        const unsigned short PATHSEG_CLOSEPATH = 1;
+        const unsigned short PATHSEG_MOVETO_ABS = 2;
+        const unsigned short PATHSEG_MOVETO_REL = 3;
+        const unsigned short PATHSEG_LINETO_ABS = 4;
+        const unsigned short PATHSEG_LINETO_REL = 5;
+        const unsigned short PATHSEG_CURVETO_CUBIC_ABS = 6;
+        const unsigned short PATHSEG_CURVETO_CUBIC_REL = 7;
+        const unsigned short PATHSEG_CURVETO_QUADRATIC_ABS = 8;
+        const unsigned short PATHSEG_CURVETO_QUADRATIC_REL = 9;
+        const unsigned short PATHSEG_ARC_ABS = 10;
+        const unsigned short PATHSEG_ARC_REL = 11;
+        const unsigned short PATHSEG_LINETO_HORIZONTAL_ABS = 12;
+        const unsigned short PATHSEG_LINETO_HORIZONTAL_REL = 13;
+        const unsigned short PATHSEG_LINETO_VERTICAL_ABS = 14;
+        const unsigned short PATHSEG_LINETO_VERTICAL_REL = 15;
+        const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
+        const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
         const unsigned short PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
         const unsigned short PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
 
-        readonly attribute unsigned short       pathSegType;
-        readonly attribute DOMString            pathSegTypeAsLetter;
+        readonly attribute unsigned short pathSegType;
+        readonly attribute DOMString pathSegTypeAsLetter;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegArc.cpp b/WebCore/svg/SVGPathSegArc.cpp
deleted file mode 100644
index f606905..0000000
--- a/WebCore/svg/SVGPathSegArc.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegArc.h"
-
-namespace WebCore {
-
-SVGPathSegArcAbs::SVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-    : SVGPathSegArc(x, y, r1, r2, angle, largeArcFlag, sweepFlag)
-{
-}
-
-SVGPathSegArcRel::SVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-    : SVGPathSegArc(x, y, r1, r2, angle, largeArcFlag, sweepFlag)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegArc.h b/WebCore/svg/SVGPathSegArc.h
index 5d5c332..e835bc3 100644
--- a/WebCore/svg/SVGPathSegArc.h
+++ b/WebCore/svg/SVGPathSegArc.h
@@ -22,88 +22,119 @@
 #define SVGPathSegArc_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegArc : public SVGPathSeg {
-    public:
-        SVGPathSegArc(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-            : m_x(x)
-            , m_y(y)
-            , m_r1(r1)
-            , m_r2(r2)
-            , m_angle(angle)
-            , m_largeArcFlag(largeArcFlag)
-            , m_sweepFlag(sweepFlag)
-        {
-        }
-
-        void setX(float x) { m_x = x; }
-        float x() const { return m_x; }
-
-        void setY(float y) { m_y = y; }
-        float y() const { return m_y; }
-
-        void setR1(float r1) { m_r1 = r1; }
-        float r1() const { return m_r1; }
-
-        void setR2(float r2) { m_r2 = r2; }
-        float r2() const { return m_r2; }
-
-        void setAngle(float angle) { m_angle = angle; }
-        float angle() const { return m_angle; }
-
-        void setLargeArcFlag(bool largeArcFlag) { m_largeArcFlag = largeArcFlag; }
-        bool largeArcFlag() const { return m_largeArcFlag; }
-
-        void setSweepFlag(bool sweepFlag) { m_sweepFlag = sweepFlag; }
-        bool sweepFlag() const { return m_sweepFlag; }
-
-    private:
-        float m_x;
-        float m_y;
-        float m_r1;
-        float m_r2;
-        float m_angle;
-
-        bool m_largeArcFlag    : 1;
-        bool m_sweepFlag : 1;
-    };
-
-    class SVGPathSegArcAbs : public SVGPathSegArc {
-    public:
-        static PassRefPtr<SVGPathSegArcAbs> create(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-        {
-            return adoptRef(new SVGPathSegArcAbs(x, y, r1, r2, angle, largeArcFlag, sweepFlag));
-        }
-
-    private:
-        SVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_ARC_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "A"; }
-    };
-
-    class SVGPathSegArcRel : public SVGPathSegArc {
-    public:
-        static PassRefPtr<SVGPathSegArcRel> create(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
-        {
-            return adoptRef(new SVGPathSegArcRel(x, y, r1, r2, angle, largeArcFlag, sweepFlag));
-        }
-
-    private:
-        SVGPathSegArcRel(float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_ARC_REL; }
-        virtual String pathSegTypeAsLetter() const { return "a"; }
-    };
+class SVGPathSegArc : public SVGPathSegWithContext {
+public:
+    SVGPathSegArc(SVGPathElement* element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+        : SVGPathSegWithContext(element, role)
+        , m_x(x)
+        , m_y(y)
+        , m_r1(r1)
+        , m_r2(r2)
+        , m_angle(angle)
+        , m_largeArcFlag(largeArcFlag)
+        , m_sweepFlag(sweepFlag)
+    {
+    }
+
+    float x() const { return m_x; }
+    void setX(float x)
+    {
+        m_x = x;
+        commitChange();
+    }
+
+    float y() const { return m_y; }
+    void setY(float y)
+    {
+        m_y = y;
+        commitChange();
+    }
+
+    float r1() const { return m_r1; }
+    void setR1(float r1)
+    {
+        m_r1 = r1;
+        commitChange();
+    }
+
+    float r2() const { return m_r2; }
+    void setR2(float r2)
+    {
+        m_r2 = r2;
+        commitChange();
+    }
+
+    float angle() const { return m_angle; }
+    void setAngle(float angle)
+    {
+        m_angle = angle;
+        commitChange();
+    }
+
+    bool largeArcFlag() const { return m_largeArcFlag; }
+    void setLargeArcFlag(bool largeArcFlag)
+    {
+        m_largeArcFlag = largeArcFlag;
+        commitChange();
+    }
+
+    bool sweepFlag() const { return m_sweepFlag; }
+    void setSweepFlag(bool sweepFlag)
+    {
+        m_sweepFlag = sweepFlag;
+        commitChange();
+    }
+
+private:
+    float m_x;
+    float m_y;
+    float m_r1;
+    float m_r2;
+    float m_angle;
+
+    bool m_largeArcFlag : 1;
+    bool m_sweepFlag : 1;
+};
+
+class SVGPathSegArcAbs : public SVGPathSegArc {
+public:
+    static PassRefPtr<SVGPathSegArcAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+    {
+        return adoptRef(new SVGPathSegArcAbs(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag));
+    }
+
+private:
+    SVGPathSegArcAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+        : SVGPathSegArc(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_ARC_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "A"; }
+};
+
+class SVGPathSegArcRel : public SVGPathSegArc {
+public:
+    static PassRefPtr<SVGPathSegArcRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+    {
+        return adoptRef(new SVGPathSegArcRel(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag));
+    }
+
+private:
+    SVGPathSegArcRel(SVGPathElement* element, SVGPathSegRole role, float x, float y, float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag)
+        : SVGPathSegArc(element, role, x, y, r1, r2, angle, largeArcFlag, sweepFlag)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_ARC_REL; }
+    virtual String pathSegTypeAsLetter() const { return "a"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegArcAbs.idl b/WebCore/svg/SVGPathSegArcAbs.idl
index bdc45a7..7568155 100644
--- a/WebCore/svg/SVGPathSegArcAbs.idl
+++ b/WebCore/svg/SVGPathSegArcAbs.idl
@@ -27,20 +27,13 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegArcAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   r1
-                     /*setter raises(DOMException)*/;
-                 attribute float   r2
-                     /*setter raises(DOMException)*/;
-                 attribute float   angle
-                     /*setter raises(DOMException)*/;
-                 attribute boolean largeArcFlag
-                     /*setter raises(DOMException)*/;
-                 attribute boolean sweepFlag
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float r1;
+        attribute [StrictTypeChecking] float r2;
+        attribute [StrictTypeChecking] float angle;
+        attribute [StrictTypeChecking] boolean largeArcFlag;
+        attribute [StrictTypeChecking] boolean sweepFlag;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegArcRel.idl b/WebCore/svg/SVGPathSegArcRel.idl
index 8b08d68..78852d8 100644
--- a/WebCore/svg/SVGPathSegArcRel.idl
+++ b/WebCore/svg/SVGPathSegArcRel.idl
@@ -27,20 +27,13 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegArcRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   r1
-                     /*setter raises(DOMException)*/;
-                 attribute float   r2
-                     /*setter raises(DOMException)*/;
-                 attribute float   angle
-                     /*setter raises(DOMException)*/;
-                 attribute boolean largeArcFlag
-                     /*setter raises(DOMException)*/;
-                 attribute boolean sweepFlag
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float r1;
+        attribute [StrictTypeChecking] float r2;
+        attribute [StrictTypeChecking] float angle;
+        attribute [StrictTypeChecking] boolean largeArcFlag;
+        attribute [StrictTypeChecking] boolean sweepFlag;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegClosePath.cpp b/WebCore/svg/SVGPathSegClosePath.cpp
deleted file mode 100644
index 6f54888..0000000
--- a/WebCore/svg/SVGPathSegClosePath.cpp
+++ /dev/null
@@ -1 +0,0 @@
-// This file is now intentionally empty. Delete it after removing it from all the build systems and project files.
diff --git a/WebCore/svg/SVGPathSegClosePath.h b/WebCore/svg/SVGPathSegClosePath.h
index 8f074ed..c3b2c14 100644
--- a/WebCore/svg/SVGPathSegClosePath.h
+++ b/WebCore/svg/SVGPathSegClosePath.h
@@ -22,18 +22,22 @@
 #define SVGPathSegClosePath_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-class SVGPathSegClosePath : public SVGPathSeg {
+class SVGPathSegClosePath : public SVGPathSegWithContext {
 public:
-    static PassRefPtr<SVGPathSegClosePath> create() { return adoptRef(new SVGPathSegClosePath); }
+    static PassRefPtr<SVGPathSegClosePath> create(SVGPathElement* element, SVGPathSegRole role)
+    {
+        return adoptRef(new SVGPathSegClosePath(element, role));
+    }
 
 private:
-    SVGPathSegClosePath() { }
+    SVGPathSegClosePath(SVGPathElement* element, SVGPathSegRole role)
+        : SVGPathSegWithContext(element, role)
+    {
+    }
 
     virtual unsigned short pathSegType() const { return PATHSEG_CLOSEPATH; }
     virtual String pathSegTypeAsLetter() const { return "Z"; }
diff --git a/WebCore/svg/SVGPathSegCurvetoCubic.cpp b/WebCore/svg/SVGPathSegCurvetoCubic.cpp
deleted file mode 100644
index 33f2d96..0000000
--- a/WebCore/svg/SVGPathSegCurvetoCubic.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegCurvetoCubic.h"
-
-namespace WebCore {
-
-SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2)
-    : SVGPathSegCurvetoCubic(x, y, x1, y1, x2, y2)
-{
-}
-
-SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2)
-    : SVGPathSegCurvetoCubic(x, y, x1, y1, x2, y2)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoCubic.h b/WebCore/svg/SVGPathSegCurvetoCubic.h
index ae4a21d..169d8f8 100644
--- a/WebCore/svg/SVGPathSegCurvetoCubic.h
+++ b/WebCore/svg/SVGPathSegCurvetoCubic.h
@@ -22,74 +22,109 @@
 #define SVGPathSegCurvetoCubic_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegCurvetoCubic : public SVGPathSeg { 
-    public:
-        SVGPathSegCurvetoCubic(float x, float y, float x1, float y1, float x2, float y2) : m_x(x), m_y(y), m_x1(x1), m_y1(y1), m_x2(x2), m_y2(y2) { }
-
-        void setX(float x) { m_x = x; }
-        float x() const { return m_x; }
-
-        void setY(float y) { m_y = y; }
-        float y() const { return m_y; }
-
-        void setX1(float x1) { m_x1 = x1; }
-        float x1() const { return m_x1; }
-
-        void setY1(float y1) { m_y1 = y1; }
-        float y1() const { return m_y1; }
-
-        void setX2(float x2) { m_x2 = x2; }
-        float x2() const { return m_x2; }
-
-        void setY2(float y2) { m_y2 = y2; }
-        float y2() const { return m_y2; }
-
-    private:
-        float m_x;
-        float m_y;
-        float m_x1;
-        float m_y1;
-        float m_x2;
-        float m_y2;
-    };
-
-    class SVGPathSegCurvetoCubicAbs : public SVGPathSegCurvetoCubic { 
-    public:
-        static PassRefPtr<SVGPathSegCurvetoCubicAbs> create(float x, float y, float x1, float y1, float x2, float y2)
-        {
-            return adoptRef(new SVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2));
-        }
-
-    private:
-        SVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "C"; }
-    };
-
-    class SVGPathSegCurvetoCubicRel : public SVGPathSegCurvetoCubic { 
-    public:
-        static PassRefPtr<SVGPathSegCurvetoCubicRel> create(float x, float y, float x1, float y1, float x2, float y2)
-        {
-            return adoptRef(new SVGPathSegCurvetoCubicRel(x, y, x1, y1, x2, y2));
-        }
-
-    private:
-        SVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_REL; }
-        virtual String pathSegTypeAsLetter() const { return "c"; }
-    };
+class SVGPathSegCurvetoCubic : public SVGPathSegWithContext { 
+public:
+    SVGPathSegCurvetoCubic(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
+        : SVGPathSegWithContext(element, role)
+        , m_x(x)
+        , m_y(y)
+        , m_x1(x1)
+        , m_y1(y1)
+        , m_x2(x2)
+        , m_y2(y2)
+    {
+    }
+
+    float x() const { return m_x; }
+    void setX(float x)
+    {
+        m_x = x;
+        commitChange();
+    }
+
+    float y() const { return m_y; }
+    void setY(float y)
+    {
+        m_y = y;
+        commitChange();
+    }
+
+    float x1() const { return m_x1; }
+    void setX1(float x1)
+    {
+        m_x1 = x1;
+        commitChange();
+    }
+
+    float y1() const { return m_y1; }
+    void setY1(float y1)
+    {
+        m_y1 = y1;
+        commitChange();
+    }
+
+    float x2() const { return m_x2; }
+    void setX2(float x2)
+    {
+        m_x2 = x2;
+        commitChange();
+    }
+
+    float y2() const { return m_y2; }
+    void setY2(float y2)
+    {
+        m_y2 = y2;
+        commitChange();
+    }
+
+private:
+    float m_x;
+    float m_y;
+    float m_x1;
+    float m_y1;
+    float m_x2;
+    float m_y2;
+};
+
+class SVGPathSegCurvetoCubicAbs : public SVGPathSegCurvetoCubic { 
+public:
+    static PassRefPtr<SVGPathSegCurvetoCubicAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
+    {
+        return adoptRef(new SVGPathSegCurvetoCubicAbs(element, role, x, y, x1, y1, x2, y2));
+    }
+
+private:
+    SVGPathSegCurvetoCubicAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
+        : SVGPathSegCurvetoCubic(element, role, x, y, x1, y1, x2, y2)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "C"; }
+};
+
+class SVGPathSegCurvetoCubicRel : public SVGPathSegCurvetoCubic { 
+public:
+    static PassRefPtr<SVGPathSegCurvetoCubicRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
+    {
+        return adoptRef(new SVGPathSegCurvetoCubicRel(element, role, x, y, x1, y1, x2, y2));
+    }
+
+private:
+    SVGPathSegCurvetoCubicRel(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1, float x2, float y2)
+        : SVGPathSegCurvetoCubic(element, role, x, y, x1, y1, x2, y2)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_REL; }
+    virtual String pathSegTypeAsLetter() const { return "c"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl b/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl
index 6b16809..4baf113 100644
--- a/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl
+++ b/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl
@@ -22,23 +22,17 @@
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
+ */ 
 
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoCubicAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   x1
-                     /*setter raises(DOMException)*/;
-                 attribute float   y1
-                     /*setter raises(DOMException)*/;
-                 attribute float   x2
-                     /*setter raises(DOMException)*/;
-                 attribute float   y2
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float x1;
+        attribute [StrictTypeChecking] float y1;
+        attribute [StrictTypeChecking] float x2;
+        attribute [StrictTypeChecking] float y2;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoCubicRel.idl b/WebCore/svg/SVGPathSegCurvetoCubicRel.idl
index be6606d..7e9fb7f 100644
--- a/WebCore/svg/SVGPathSegCurvetoCubicRel.idl
+++ b/WebCore/svg/SVGPathSegCurvetoCubicRel.idl
@@ -22,23 +22,17 @@
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
+ */ 
 
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoCubicRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   x1
-                     /*setter raises(DOMException)*/;
-                 attribute float   y1
-                     /*setter raises(DOMException)*/;
-                 attribute float   x2
-                     /*setter raises(DOMException)*/;
-                 attribute float   y2
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float x1;
+        attribute [StrictTypeChecking] float y1;
+        attribute [StrictTypeChecking] float x2;
+        attribute [StrictTypeChecking] float y2;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoCubicSmooth.cpp b/WebCore/svg/SVGPathSegCurvetoCubicSmooth.cpp
deleted file mode 100644
index a7625e3..0000000
--- a/WebCore/svg/SVGPathSegCurvetoCubicSmooth.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#if ENABLE(SVG)
-#include "SVGPathSegCurvetoCubicSmooth.h"
-
-namespace WebCore {
-
-SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2)
-    : SVGPathSegCurvetoCubicSmooth(x, y, x2, y2)
-{
-}
-
-SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2)
-    : SVGPathSegCurvetoCubicSmooth(x, y, x2, y2)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h b/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h
index 2227951..a654297 100644
--- a/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h
+++ b/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h
@@ -22,62 +22,89 @@
 #define SVGPathSegCurvetoCubicSmooth_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegCurvetoCubicSmooth : public SVGPathSeg {
-    public:
-        SVGPathSegCurvetoCubicSmooth(float x, float y, float x2, float y2)
-            : m_x(x)
-            , m_y(y)
-            , m_x2(x2)
-            , m_y2(y2)
-        {
-        }
-
-        void setX(float x) { m_x = x; }
-        float x() const { return m_x; }
-
-        void setY(float y) { m_y = y; }
-        float y() const { return m_y; }
-
-        void setX2(float x2) { m_x2 = x2; }
-        float x2() const { return m_x2; }
-
-        void setY2(float y2) { m_y2 = y2; }
-        float y2() const { return m_y2; }
-
-    private:
-        float m_x;
-        float m_y;
-        float m_x2;
-        float m_y2;
-    };
-
-    class SVGPathSegCurvetoCubicSmoothAbs : public SVGPathSegCurvetoCubicSmooth { 
-    public:
-        static PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> create(float x, float y, float x2, float y2) { return adoptRef(new SVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2)); }
-
-    private:
-        SVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "S"; }
-    };
-
-    class SVGPathSegCurvetoCubicSmoothRel : public SVGPathSegCurvetoCubicSmooth { 
-    public:
-        static PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> create(float x, float y, float x2, float y2) { return adoptRef(new SVGPathSegCurvetoCubicSmoothRel(x, y, x2, y2)); }
-
-    private:
-        SVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_SMOOTH_REL; }
-        virtual String pathSegTypeAsLetter() const { return "s"; }
-    };
+class SVGPathSegCurvetoCubicSmooth : public SVGPathSegWithContext {
+public:
+    SVGPathSegCurvetoCubicSmooth(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x2, float y2)
+        : SVGPathSegWithContext(element, role)
+        , m_x(x)
+        , m_y(y)
+        , m_x2(x2)
+        , m_y2(y2)
+    {
+    }
+
+    float x() const { return m_x; }
+    void setX(float x)
+    {
+        m_x = x;
+        commitChange();
+    }
+
+    float y() const { return m_y; }
+    void setY(float y)
+    {
+        m_y = y;
+        commitChange();
+    }
+
+    float x2() const { return m_x2; }
+    void setX2(float x2)
+    {
+        m_x2 = x2;
+        commitChange();
+    }
+
+    float y2() const { return m_y2; }
+    void setY2(float y2)
+    {
+        m_y2 = y2;
+        commitChange();
+    }
+
+private:
+    float m_x;
+    float m_y;
+    float m_x2;
+    float m_y2;
+};
+
+class SVGPathSegCurvetoCubicSmoothAbs : public SVGPathSegCurvetoCubicSmooth { 
+public:
+    static PassRefPtr<SVGPathSegCurvetoCubicSmoothAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x2, float y2)
+    {
+        return adoptRef(new SVGPathSegCurvetoCubicSmoothAbs(element, role, x, y, x2, y2));
+    }
+
+private:
+    SVGPathSegCurvetoCubicSmoothAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x2, float y2)
+        : SVGPathSegCurvetoCubicSmooth(element, role, x, y, x2, y2)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "S"; }
+};
+
+class SVGPathSegCurvetoCubicSmoothRel : public SVGPathSegCurvetoCubicSmooth { 
+public:
+    static PassRefPtr<SVGPathSegCurvetoCubicSmoothRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x2, float y2)
+    {
+        return adoptRef(new SVGPathSegCurvetoCubicSmoothRel(element, role, x, y, x2, y2));
+    }
+
+private:
+    SVGPathSegCurvetoCubicSmoothRel(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x2, float y2)
+        : SVGPathSegCurvetoCubicSmooth(element, role, x, y, x2, y2)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_CUBIC_SMOOTH_REL; }
+    virtual String pathSegTypeAsLetter() const { return "s"; }
+};
 
 } // namespace WebCore
 
diff --git a/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl b/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
index d31582e..0779c9f 100644
--- a/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+++ b/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
@@ -22,19 +22,15 @@
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
+ */ 
 
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoCubicSmoothAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   x2
-                     /*setter raises(DOMException)*/;
-                 attribute float   y2
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float x2;
+        attribute [StrictTypeChecking] float y2;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl b/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl
index 2dd71f0..d4f71e4 100644
--- a/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl
+++ b/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl
@@ -22,19 +22,15 @@
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
+ */ 
 
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoCubicSmoothRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   x2
-                     /*setter raises(DOMException)*/;
-                 attribute float   y2
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float x2;
+        attribute [StrictTypeChecking] float y2;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadratic.cpp b/WebCore/svg/SVGPathSegCurvetoQuadratic.cpp
deleted file mode 100644
index bf2bb4d..0000000
--- a/WebCore/svg/SVGPathSegCurvetoQuadratic.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegCurvetoQuadratic.h"
-
-namespace WebCore {
-
-SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1)
-    : SVGPathSegCurvetoQuadratic(x, y, x1, y1)
-{
-}
-
-SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1)
-    : SVGPathSegCurvetoQuadratic(x, y, x1, y1)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadratic.h b/WebCore/svg/SVGPathSegCurvetoQuadratic.h
index f84cfaa..894f787 100644
--- a/WebCore/svg/SVGPathSegCurvetoQuadratic.h
+++ b/WebCore/svg/SVGPathSegCurvetoQuadratic.h
@@ -22,66 +22,91 @@
 #define SVGPathSegCurvetoQuadratic_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegCurvetoQuadratic : public SVGPathSeg { 
-    public:
-        SVGPathSegCurvetoQuadratic(float x, float y, float x1, float y1)
-            : m_x(x)
-            , m_y(y)
-            , m_x1(x1)
-            , m_y1(y1)
-        {
-        }
-
-        void setX(float x) { m_x = x; }
-        float x() const { return m_x; }
-
-        void setY(float y) { m_y = y; }
-        float y() const { return m_y; }
-
-        void setX1(float x1) { m_x1 = x1; }
-        float x1() const { return m_x1; }
-
-        void setY1(float y1) { m_y1 = y1; }
-        float y1() const { return m_y1; }
-
-    private:
-        float m_x;
-        float m_y;
-        float m_x1;
-        float m_y1;
-    };
-
-    class SVGPathSegCurvetoQuadraticAbs : public SVGPathSegCurvetoQuadratic {
-    public:
-        static PassRefPtr<SVGPathSegCurvetoQuadraticAbs> create(float x, float y, float x1, float y1) { return adoptRef(new SVGPathSegCurvetoQuadraticAbs(x, y, x1, y1)); }
-
-    private:
-        SVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "Q"; }
-    };
-
-    class SVGPathSegCurvetoQuadraticRel : public SVGPathSegCurvetoQuadratic {
-    public:
-        static PassRefPtr<SVGPathSegCurvetoQuadraticRel> create(float x, float y, float x1, float y1) { return adoptRef(new SVGPathSegCurvetoQuadraticRel(x, y, x1, y1)); }
-
-    private:
-        SVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_REL; }
-        virtual String pathSegTypeAsLetter() const { return "q"; }
-    };
+class SVGPathSegCurvetoQuadratic : public SVGPathSegWithContext { 
+public:
+    SVGPathSegCurvetoQuadratic(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1)
+        : SVGPathSegWithContext(element, role)
+        , m_x(x)
+        , m_y(y)
+        , m_x1(x1)
+        , m_y1(y1)
+    {
+    }
+
+    float x() const { return m_x; }
+    void setX(float x)
+    {
+        m_x = x;
+        commitChange();
+    }
+
+    float y() const { return m_y; }
+    void setY(float y)
+    {
+        m_y = y;
+        commitChange();
+    }
+
+    float x1() const { return m_x1; }
+    void setX1(float x1)
+    {
+        m_x1 = x1;
+        commitChange();
+    }
+
+    float y1() const { return m_y1; }
+    void setY1(float y1)
+    {
+        m_y1 = y1;
+        commitChange();
+    }
+
+private:
+    float m_x;
+    float m_y;
+    float m_x1;
+    float m_y1;
+};
+
+class SVGPathSegCurvetoQuadraticAbs : public SVGPathSegCurvetoQuadratic {
+public:
+    static PassRefPtr<SVGPathSegCurvetoQuadraticAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1)
+    {
+        return adoptRef(new SVGPathSegCurvetoQuadraticAbs(element, role, x, y, x1, y1));
+    }
+
+private:
+    SVGPathSegCurvetoQuadraticAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1)
+        : SVGPathSegCurvetoQuadratic(element, role, x, y, x1, y1)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "Q"; }
+};
+
+class SVGPathSegCurvetoQuadraticRel : public SVGPathSegCurvetoQuadratic {
+public:
+    static PassRefPtr<SVGPathSegCurvetoQuadraticRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1)
+    {
+        return adoptRef(new SVGPathSegCurvetoQuadraticRel(element, role, x, y, x1, y1));
+    }
+
+private:
+    SVGPathSegCurvetoQuadraticRel(SVGPathElement* element, SVGPathSegRole role, float x, float y, float x1, float y1)
+        : SVGPathSegCurvetoQuadratic(element, role, x, y, x1, y1)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_REL; }
+    virtual String pathSegTypeAsLetter() const { return "q"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl b/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl
index 9b09222..1fbb461 100644
--- a/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl
+++ b/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl
@@ -27,14 +27,10 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoQuadraticAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   x1
-                     /*setter raises(DOMException)*/;
-                 attribute float   y1
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float x1;
+        attribute [StrictTypeChecking] float y1;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl b/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl
index 01e1e6d..48a39fb 100644
--- a/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl
+++ b/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl
@@ -27,14 +27,10 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoQuadraticRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
-                 attribute float   x1
-                     /*setter raises(DOMException)*/;
-                 attribute float   y1
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
+        attribute [StrictTypeChecking] float x1;
+        attribute [StrictTypeChecking] float y1;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.cpp b/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.cpp
deleted file mode 100644
index 6a7e9f7..0000000
--- a/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegCurvetoQuadraticSmooth.h"
-
-namespace WebCore {
-
-SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs(float x, float y)
-    : SVGPathSegSingleCoord(x, y)
-{
-}
-
-SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel(float x, float y)
-    : SVGPathSegSingleCoord(x, y)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.h b/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.h
index 109799e..b66062a 100644
--- a/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.h
+++ b/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.h
@@ -22,37 +22,45 @@
 #define SVGPathSegCurvetoQuadraticSmooth_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegCurvetoQuadraticSmoothAbs : public SVGPathSegSingleCoord {
-    public:
-        static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> create(float x, float y) { return adoptRef(new SVGPathSegCurvetoQuadraticSmoothAbs(x, y)); }
+class SVGPathSegCurvetoQuadraticSmoothAbs : public SVGPathSegSingleCoordinate {
+public:
+    static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+    {
+        return adoptRef(new SVGPathSegCurvetoQuadraticSmoothAbs(element, role, x, y));
+    }
 
-    private:
-        SVGPathSegCurvetoQuadraticSmoothAbs(float x, float y);
+private:
+    SVGPathSegCurvetoQuadraticSmoothAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegSingleCoordinate(element, role, x, y)
+    {
+    }
 
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "T"; }
-    };
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "T"; }
+};
 
-    class SVGPathSegCurvetoQuadraticSmoothRel : public SVGPathSegSingleCoord {
-    public:
-        static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> create(float x, float y) { return adoptRef(new SVGPathSegCurvetoQuadraticSmoothRel(x, y)); }
+class SVGPathSegCurvetoQuadraticSmoothRel : public SVGPathSegSingleCoordinate {
+public:
+    static PassRefPtr<SVGPathSegCurvetoQuadraticSmoothRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+    {
+        return adoptRef(new SVGPathSegCurvetoQuadraticSmoothRel(element, role, x, y));
+    }
 
-    private:
-        SVGPathSegCurvetoQuadraticSmoothRel(float x, float y);
+private:
+    SVGPathSegCurvetoQuadraticSmoothRel(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegSingleCoordinate(element, role, x, y)
+    {
+    }
 
-        virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; }
-        virtual String pathSegTypeAsLetter() const { return "t"; }
-    };
+    virtual unsigned short pathSegType() const { return PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; }
+    virtual String pathSegTypeAsLetter() const { return "t"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl b/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
index 4568538..ad02534 100644
--- a/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+++ b/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
@@ -27,10 +27,8 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoQuadraticSmoothAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl b/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
index 5ffde79..6d58b8f 100644
--- a/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+++ b/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
@@ -27,10 +27,8 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegCurvetoQuadraticSmoothRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegLineto.cpp b/WebCore/svg/SVGPathSegLineto.cpp
deleted file mode 100644
index 746f2c1..0000000
--- a/WebCore/svg/SVGPathSegLineto.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegLineto.h"
-
-namespace WebCore {
-
-SVGPathSegLinetoAbs::SVGPathSegLinetoAbs(float x, float y)
-    : SVGPathSegSingleCoord(x, y)
-{
-}
-
-SVGPathSegLinetoRel::SVGPathSegLinetoRel(float x, float y)
-    : SVGPathSegSingleCoord(x, y)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegLineto.h b/WebCore/svg/SVGPathSegLineto.h
index 3cd3b7f..c995c98 100644
--- a/WebCore/svg/SVGPathSegLineto.h
+++ b/WebCore/svg/SVGPathSegLineto.h
@@ -22,37 +22,45 @@
 #define SVGPathSegLineto_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegLinetoAbs : public SVGPathSegSingleCoord { 
-    public:
-        static PassRefPtr<SVGPathSegLinetoAbs> create(float x, float y) { return adoptRef(new SVGPathSegLinetoAbs(x, y)); }
+class SVGPathSegLinetoAbs : public SVGPathSegSingleCoordinate { 
+public:
+    static PassRefPtr<SVGPathSegLinetoAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+    {
+        return adoptRef(new SVGPathSegLinetoAbs(element, role, x, y));
+    }
 
-    private:
-        SVGPathSegLinetoAbs(float x, float y);
+private:
+    SVGPathSegLinetoAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegSingleCoordinate(element, role, x, y)
+    {
+    }
 
-        virtual unsigned short pathSegType() const { return PATHSEG_LINETO_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "L"; }
-    };
+    virtual unsigned short pathSegType() const { return PATHSEG_LINETO_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "L"; }
+};
 
-    class SVGPathSegLinetoRel : public SVGPathSegSingleCoord { 
-    public:
-        static PassRefPtr<SVGPathSegLinetoRel> create(float x, float y) { return adoptRef(new SVGPathSegLinetoRel(x, y)); }
+class SVGPathSegLinetoRel : public SVGPathSegSingleCoordinate { 
+public:
+    static PassRefPtr<SVGPathSegLinetoRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+    {
+        return adoptRef(new SVGPathSegLinetoRel(element, role, x, y));
+    }
 
-    private:
-        SVGPathSegLinetoRel(float x, float y);
+private:
+    SVGPathSegLinetoRel(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegSingleCoordinate(element, role, x, y)
+    {
+    }
 
-        virtual unsigned short pathSegType() const { return PATHSEG_LINETO_REL; }
-        virtual String pathSegTypeAsLetter() const { return "l"; }
-    };
+    virtual unsigned short pathSegType() const { return PATHSEG_LINETO_REL; }
+    virtual String pathSegTypeAsLetter() const { return "l"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegLinetoAbs.idl b/WebCore/svg/SVGPathSegLinetoAbs.idl
index 85dfca5..c428a2b 100644
--- a/WebCore/svg/SVGPathSegLinetoAbs.idl
+++ b/WebCore/svg/SVGPathSegLinetoAbs.idl
@@ -27,10 +27,8 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegLinetoAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegLinetoHorizontal.cpp b/WebCore/svg/SVGPathSegLinetoHorizontal.cpp
deleted file mode 100644
index 85f2896..0000000
--- a/WebCore/svg/SVGPathSegLinetoHorizontal.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegLinetoHorizontal.h"
-
-namespace WebCore {
-
-SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs(float x)
-    : SVGPathSegLinetoHorizontal(x)
-{
-}
-
-SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel(float x)
-    : SVGPathSegLinetoHorizontal(x)
-{
-}
-
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegLinetoHorizontal.h b/WebCore/svg/SVGPathSegLinetoHorizontal.h
index da59f05..d175cdd 100644
--- a/WebCore/svg/SVGPathSegLinetoHorizontal.h
+++ b/WebCore/svg/SVGPathSegLinetoHorizontal.h
@@ -22,48 +22,64 @@
 #define SVGPathSegLinetoHorizontal_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegLinetoHorizontal : public SVGPathSeg {
-    public:
-        SVGPathSegLinetoHorizontal(float x) : SVGPathSeg(), m_x(x) {}
-
-        void setX(float x) { m_x = x; }
-        float x() const { return m_x; }
-
-    private:
-        float m_x;
-    };
-
-    class SVGPathSegLinetoHorizontalAbs : public SVGPathSegLinetoHorizontal {
-    public:
-        static PassRefPtr<SVGPathSegLinetoHorizontalAbs> create(float x) { return adoptRef(new SVGPathSegLinetoHorizontalAbs(x)); }
-
-    private:
-        SVGPathSegLinetoHorizontalAbs(float x);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_LINETO_HORIZONTAL_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "H"; }
-    };
-
-    class SVGPathSegLinetoHorizontalRel : public SVGPathSegLinetoHorizontal {
-    public:
-        static PassRefPtr<SVGPathSegLinetoHorizontalRel> create(float x) { return adoptRef(new SVGPathSegLinetoHorizontalRel(x)); }
-
-    private:
-        SVGPathSegLinetoHorizontalRel(float x);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_LINETO_HORIZONTAL_REL; }
-        virtual String pathSegTypeAsLetter() const { return "h"; }
-    };
+class SVGPathSegLinetoHorizontal : public SVGPathSegWithContext {
+public:
+    SVGPathSegLinetoHorizontal(SVGPathElement* element, SVGPathSegRole role, float x)
+        : SVGPathSegWithContext(element, role)
+        , m_x(x)
+    {
+    }
+
+    float x() const { return m_x; }
+    void setX(float x)
+    {
+        m_x = x;
+        commitChange();
+    }
+
+private:
+    float m_x;
+};
+
+class SVGPathSegLinetoHorizontalAbs : public SVGPathSegLinetoHorizontal {
+public:
+    static PassRefPtr<SVGPathSegLinetoHorizontalAbs> create(SVGPathElement* element, SVGPathSegRole role, float x)
+    {
+        return adoptRef(new SVGPathSegLinetoHorizontalAbs(element, role, x));
+    }
+
+private:
+    SVGPathSegLinetoHorizontalAbs(SVGPathElement* element, SVGPathSegRole role, float x)
+        : SVGPathSegLinetoHorizontal(element, role, x)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_LINETO_HORIZONTAL_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "H"; }
+};
+
+class SVGPathSegLinetoHorizontalRel : public SVGPathSegLinetoHorizontal {
+public:
+    static PassRefPtr<SVGPathSegLinetoHorizontalRel> create(SVGPathElement* element, SVGPathSegRole role, float x)
+    {
+        return adoptRef(new SVGPathSegLinetoHorizontalRel(element, role, x));
+    }
+
+private:
+    SVGPathSegLinetoHorizontalRel(SVGPathElement* element, SVGPathSegRole role, float x)
+        : SVGPathSegLinetoHorizontal(element, role, x)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_LINETO_HORIZONTAL_REL; }
+    virtual String pathSegTypeAsLetter() const { return "h"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl b/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl
index eadb612..522f997 100644
--- a/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl
+++ b/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl
@@ -27,8 +27,7 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegLinetoHorizontalAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl b/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl
index 91f537c..3f9a22a 100644
--- a/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl
+++ b/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl
@@ -27,8 +27,7 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegLinetoHorizontalRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegLinetoRel.idl b/WebCore/svg/SVGPathSegLinetoRel.idl
index 51a8b5d..d92cdc4 100644
--- a/WebCore/svg/SVGPathSegLinetoRel.idl
+++ b/WebCore/svg/SVGPathSegLinetoRel.idl
@@ -27,10 +27,8 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegLinetoRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegLinetoVertical.cpp b/WebCore/svg/SVGPathSegLinetoVertical.cpp
deleted file mode 100644
index ba02c9e..0000000
--- a/WebCore/svg/SVGPathSegLinetoVertical.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegLinetoVertical.h"
-
-namespace WebCore {
-
-SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs(float y)
-    : SVGPathSegLinetoVertical(y)
-{
-}
-
-SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel(float y)
-    : SVGPathSegLinetoVertical(y)
-{
-}
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegLinetoVertical.h b/WebCore/svg/SVGPathSegLinetoVertical.h
index b13b9f4..fec7fb6 100644
--- a/WebCore/svg/SVGPathSegLinetoVertical.h
+++ b/WebCore/svg/SVGPathSegLinetoVertical.h
@@ -22,48 +22,64 @@
 #define SVGPathSegLinetoVertical_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
 
-    class SVGPathSegLinetoVertical : public SVGPathSeg {
-    public:
-        SVGPathSegLinetoVertical(float y) : SVGPathSeg(), m_y(y) {}
-
-        void setY(float y) { m_y = y; }
-        float y() const { return m_y; }
-
-    private:
-        float m_y;
-    };
-
-    class SVGPathSegLinetoVerticalAbs : public SVGPathSegLinetoVertical {
-    public:
-        static PassRefPtr<SVGPathSegLinetoVerticalAbs> create(float y) { return adoptRef(new SVGPathSegLinetoVerticalAbs(y)); }
-
-    private:
-        SVGPathSegLinetoVerticalAbs(float y);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_LINETO_VERTICAL_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "V"; }
-    };
-
-    class SVGPathSegLinetoVerticalRel : public SVGPathSegLinetoVertical {
-    public:
-        static PassRefPtr<SVGPathSegLinetoVerticalRel> create(float y) { return adoptRef(new SVGPathSegLinetoVerticalRel(y)); }
-
-    private:
-        SVGPathSegLinetoVerticalRel(float y);
-
-        virtual unsigned short pathSegType() const { return PATHSEG_LINETO_VERTICAL_REL; }
-        virtual String pathSegTypeAsLetter() const { return "v"; }
-    };
+class SVGPathSegLinetoVertical : public SVGPathSegWithContext {
+public:
+    SVGPathSegLinetoVertical(SVGPathElement* element, SVGPathSegRole role, float y)
+        : SVGPathSegWithContext(element, role)
+        , m_y(y)
+    {
+    }
+
+    float y() const { return m_y; }
+    void setY(float y)
+    {
+        m_y = y;
+        commitChange();
+    }
+
+private:
+    float m_y;
+};
+
+class SVGPathSegLinetoVerticalAbs : public SVGPathSegLinetoVertical {
+public:
+    static PassRefPtr<SVGPathSegLinetoVerticalAbs> create(SVGPathElement* element, SVGPathSegRole role, float y)
+    {
+        return adoptRef(new SVGPathSegLinetoVerticalAbs(element, role, y));
+    }
+
+private:
+    SVGPathSegLinetoVerticalAbs(SVGPathElement* element, SVGPathSegRole role, float y)
+        : SVGPathSegLinetoVertical(element, role, y)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_LINETO_VERTICAL_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "V"; }
+};
+
+class SVGPathSegLinetoVerticalRel : public SVGPathSegLinetoVertical {
+public:
+    static PassRefPtr<SVGPathSegLinetoVerticalRel> create(SVGPathElement* element, SVGPathSegRole role, float y)
+    {
+        return adoptRef(new SVGPathSegLinetoVerticalRel(element, role, y));
+    }
+
+private:
+    SVGPathSegLinetoVerticalRel(SVGPathElement* element, SVGPathSegRole role, float y)
+        : SVGPathSegLinetoVertical(element, role, y)
+    {
+    }
+
+    virtual unsigned short pathSegType() const { return PATHSEG_LINETO_VERTICAL_REL; }
+    virtual String pathSegTypeAsLetter() const { return "v"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl b/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl
index b6ba7f1..a9af261 100644
--- a/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl
+++ b/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl
@@ -27,8 +27,7 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegLinetoVerticalAbs : SVGPathSeg {
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegLinetoVerticalRel.idl b/WebCore/svg/SVGPathSegLinetoVerticalRel.idl
index 7246c7d..a9b9b36 100644
--- a/WebCore/svg/SVGPathSegLinetoVerticalRel.idl
+++ b/WebCore/svg/SVGPathSegLinetoVerticalRel.idl
@@ -27,8 +27,7 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegLinetoVerticalRel : SVGPathSeg {
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegList.cpp b/WebCore/svg/SVGPathSegList.cpp
index 5a40c64..09a3c0d 100644
--- a/WebCore/svg/SVGPathSegList.cpp
+++ b/WebCore/svg/SVGPathSegList.cpp
@@ -25,11 +25,23 @@
 #if ENABLE(SVG)
 #include "SVGPathSegList.h"
 
+#include "SVGPathElement.h"
+#include "SVGPathParserFactory.h"
+
 namespace WebCore {
 
-SVGPathSegList::SVGPathSegList(const QualifiedName& attributeName)
-    : SVGList<RefPtr<SVGPathSeg> >(attributeName)
+String SVGPathSegList::valueAsString() const
+{
+    String pathString;
+    SVGPathParserFactory::self()->buildStringFromSVGPathSegList(*this, pathString, UnalteredParsing);
+    return pathString;
+}
+
+void SVGPathSegList::commitChange(SVGElement* contextElement)
 {
+    ASSERT(contextElement);
+    ASSERT(contextElement->hasTagName(SVGNames::pathTag));
+    static_cast<SVGPathElement*>(contextElement)->pathSegListChanged(m_role);
 }
 
 }
diff --git a/WebCore/svg/SVGPathSegList.h b/WebCore/svg/SVGPathSegList.h
index 6e61c06..48a1845 100644
--- a/WebCore/svg/SVGPathSegList.h
+++ b/WebCore/svg/SVGPathSegList.h
@@ -21,19 +21,36 @@
 #define SVGPathSegList_h
 
 #if ENABLE(SVG)
-#include "SVGList.h"
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
+
 #include "SVGPathSeg.h"
+#include "SVGPropertyTraits.h"
 
 namespace WebCore {
 
 class SVGElement;
 
-class SVGPathSegList : public SVGList<RefPtr<SVGPathSeg> > {
+class SVGPathSegList : public Vector<RefPtr<SVGPathSeg> > {
 public:
-    static PassRefPtr<SVGPathSegList> create(const QualifiedName& attributeName) { return adoptRef(new SVGPathSegList(attributeName)); }
+    SVGPathSegList(SVGPathSegRole role)
+        : m_role(role)
+    {
+    }
+
+    String valueAsString() const;
+
+    // Only used by SVGPathSegListPropertyTearOff.
+    void commitChange(SVGElement* contextElement);
 
 private:
-    SVGPathSegList(const QualifiedName&);
+    SVGPathSegRole m_role;
+};
+
+template<>
+struct SVGPropertyTraits<SVGPathSegList> {
+    static SVGPathSegList initialValue() { return SVGPathSegList(PathSegUndefinedRole); }
+    typedef RefPtr<SVGPathSeg> ListItemType;
 };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGPathSegList.idl b/WebCore/svg/SVGPathSegList.idl
index 1407b33..e77a997 100644
--- a/WebCore/svg/SVGPathSegList.idl
+++ b/WebCore/svg/SVGPathSegList.idl
@@ -29,19 +29,19 @@ module svg {
     interface [Conditional=SVG] SVGPathSegList {
         readonly attribute unsigned long numberOfItems;
 
-        [JSCCustom] void clear()
+        void clear()
             raises(DOMException);
-        [JSCCustom] SVGPathSeg initialize(in SVGPathSeg newItem)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPathSeg initialize(in SVGPathSeg newItem)
             raises(DOMException, SVGException);
-        [JSCCustom] SVGPathSeg getItem(in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPathSeg getItem(in unsigned long index)
             raises(DOMException);
-        [JSCCustom] SVGPathSeg insertItemBefore(in SVGPathSeg newItem, in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPathSeg insertItemBefore(in SVGPathSeg newItem, in unsigned long index)
             raises(DOMException, SVGException);
-        [JSCCustom] SVGPathSeg replaceItem(in SVGPathSeg newItem, in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPathSeg replaceItem(in SVGPathSeg newItem, in unsigned long index)
             raises(DOMException, SVGException);
-        [JSCCustom] SVGPathSeg removeItem(in unsigned long index)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPathSeg removeItem(in unsigned long index)
             raises(DOMException);
-        [JSCCustom] SVGPathSeg appendItem(in SVGPathSeg newItem)
+        [StrictTypeChecking, RequiresAllArguments=Raise] SVGPathSeg appendItem(in SVGPathSeg newItem)
             raises(DOMException, SVGException);
     };
 
diff --git a/WebCore/svg/SVGPathSegListBuilder.cpp b/WebCore/svg/SVGPathSegListBuilder.cpp
index 342de88..bd657c3 100644
--- a/WebCore/svg/SVGPathSegListBuilder.cpp
+++ b/WebCore/svg/SVGPathSegListBuilder.cpp
@@ -43,115 +43,107 @@
 namespace WebCore {
 
 SVGPathSegListBuilder::SVGPathSegListBuilder()
-    : m_pathSegList(0)
+    : m_pathElement(0)
+    , m_pathSegList(0)
+    , m_pathSegRole(PathSegUndefinedRole)
 {
 }
 
 void SVGPathSegListBuilder::moveTo(const FloatPoint& targetPoint, bool, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegMovetoAbs(targetPoint.x(), targetPoint.y()), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegMovetoAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegMovetoRel(targetPoint.x(), targetPoint.y()), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegMovetoRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegLinetoAbs(targetPoint.x(), targetPoint.y()), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegLinetoAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegLinetoRel(targetPoint.x(), targetPoint.y()), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegLinetoRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::lineToHorizontal(float x, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegLinetoHorizontalAbs(x), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegLinetoHorizontalAbs(x, m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegLinetoHorizontalRel(x), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegLinetoHorizontalRel(x, m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::lineToVertical(float y, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegLinetoVerticalAbs(y), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegLinetoVerticalAbs(y, m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegLinetoVerticalRel(y), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegLinetoVerticalRel(y, m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::curveToCubic(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoCubicAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y()), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoCubicAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y(), m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoCubicRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y()), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoCubicRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y(), m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::curveToCubicSmooth(const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs(targetPoint.x(), targetPoint.y(), point2.x(), point2.y()), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoCubicSmoothAbs(targetPoint.x(), targetPoint.y(), point2.x(), point2.y(), m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel(targetPoint.x(), targetPoint.y(), point2.x(), point2.y()), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoCubicSmoothRel(targetPoint.x(), targetPoint.y(), point2.x(), point2.y(), m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::curveToQuadratic(const FloatPoint& point1, const FloatPoint& targetPoint, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoQuadraticAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y()), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoQuadraticAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoQuadraticRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y()), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoQuadraticRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs(targetPoint.x(), targetPoint.y()), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoQuadraticSmoothAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel(targetPoint.x(), targetPoint.y()), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegCurvetoQuadraticSmoothRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::arcTo(float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode)
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
     if (mode == AbsoluteCoordinates)
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegArcAbs(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag), ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegArcAbs(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag, m_pathSegRole));
     else
-        m_pathSegList->appendItem(SVGPathElement::createSVGPathSegArcRel(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag), ec);
-    ASSERT(!ec);
+        m_pathSegList->append(m_pathElement->createSVGPathSegArcRel(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag, m_pathSegRole));
 }
 
 void SVGPathSegListBuilder::closePath()
 {
+    ASSERT(m_pathElement);
     ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
-    m_pathSegList->appendItem(SVGPathElement::createSVGPathSegClosePath(), ec);
-    ASSERT(!ec);
+    m_pathSegList->append(m_pathElement->createSVGPathSegClosePath(m_pathSegRole));
 }
 
 }
diff --git a/WebCore/svg/SVGPathSegListBuilder.h b/WebCore/svg/SVGPathSegListBuilder.h
index f376706..8f75b26 100644
--- a/WebCore/svg/SVGPathSegListBuilder.h
+++ b/WebCore/svg/SVGPathSegListBuilder.h
@@ -27,6 +27,7 @@
 #if ENABLE(SVG)
 #include "FloatPoint.h"
 #include "SVGPathConsumer.h"
+#include "SVGPathElement.h"
 #include "SVGPathSegList.h"
 
 namespace WebCore {
@@ -35,12 +36,19 @@ class SVGPathSegListBuilder : public SVGPathConsumer {
 public:
     SVGPathSegListBuilder();
 
-    void setCurrentSVGPathSegList(SVGPathSegList* pathSegList) { m_pathSegList = pathSegList; }
+    void setCurrentSVGPathElement(SVGPathElement* pathElement) { m_pathElement = pathElement; }
+    void setCurrentSVGPathSegList(SVGPathSegList& pathSegList) { m_pathSegList = &pathSegList; }
+    void setCurrentSVGPathSegRole(SVGPathSegRole pathSegRole) { m_pathSegRole = pathSegRole; }
 
 private:
     virtual void incrementPathSegmentCount() { }
     virtual bool continueConsuming() { return true; }
-    virtual void cleanup() { m_pathSegList = 0; }
+    virtual void cleanup()
+    {
+        m_pathElement = 0;
+        m_pathSegList = 0;
+        m_pathSegRole = PathSegUndefinedRole;
+    }
 
     // Used in UnalteredParisng/NormalizedParsing modes.
     virtual void moveTo(const FloatPoint&, bool closed, PathCoordinateMode);
@@ -56,7 +64,9 @@ private:
     virtual void curveToQuadraticSmooth(const FloatPoint&, PathCoordinateMode);
     virtual void arcTo(float, float, float, bool largeArcFlag, bool sweepFlag, const FloatPoint&, PathCoordinateMode);
 
+    SVGPathElement* m_pathElement;
     SVGPathSegList* m_pathSegList;
+    SVGPathSegRole m_pathSegRole;
 };
 
 } // namespace WebCore
diff --git a/WebCore/svg/SVGPathSegListSource.cpp b/WebCore/svg/SVGPathSegListSource.cpp
index 2378743..5526cd6 100644
--- a/WebCore/svg/SVGPathSegListSource.cpp
+++ b/WebCore/svg/SVGPathSegListSource.cpp
@@ -31,12 +31,11 @@
 
 namespace WebCore {
 
-SVGPathSegListSource::SVGPathSegListSource(SVGPathSegList* pathSegList)
+SVGPathSegListSource::SVGPathSegListSource(const SVGPathSegList& pathSegList)
     : m_pathSegList(pathSegList)
 {
-    ASSERT(m_pathSegList);
     m_itemCurrent = 0;
-    m_itemEnd = m_pathSegList->numberOfItems();
+    m_itemEnd = m_pathSegList.size();
 }
 
 bool SVGPathSegListSource::hasMoreData() const
@@ -46,11 +45,7 @@ bool SVGPathSegListSource::hasMoreData() const
 
 bool SVGPathSegListSource::parseSVGSegmentType(SVGPathSegType& pathSegType)
 {
-    ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
-    m_segment = m_pathSegList->getItem(m_itemCurrent, ec);
-    if (ec)
-        return false;
+    m_segment = m_pathSegList.at(m_itemCurrent);
     pathSegType = static_cast<SVGPathSegType>(m_segment->pathSegType());
     ++m_itemCurrent;
     return true;
@@ -58,11 +53,7 @@ bool SVGPathSegListSource::parseSVGSegmentType(SVGPathSegType& pathSegType)
 
 SVGPathSegType SVGPathSegListSource::nextCommand(SVGPathSegType)
 {
-    ASSERT(m_pathSegList);
-    ExceptionCode ec = 0;
-    m_segment = m_pathSegList->getItem(m_itemCurrent, ec);
-    if (ec)
-        return PathSegUnknown;
+    m_segment = m_pathSegList.at(m_itemCurrent);
     SVGPathSegType pathSegType = static_cast<SVGPathSegType>(m_segment->pathSegType());
     ++m_itemCurrent;
     return pathSegType;
@@ -72,7 +63,7 @@ bool SVGPathSegListSource::parseMoveToSegment(FloatPoint& targetPoint)
 {
     ASSERT(m_segment);
     ASSERT(m_segment->pathSegType() == PathSegMoveToAbs || m_segment->pathSegType() == PathSegMoveToRel);
-    SVGPathSegSingleCoord* moveTo = static_cast<SVGPathSegSingleCoord*>(m_segment.get());
+    SVGPathSegSingleCoordinate* moveTo = static_cast<SVGPathSegSingleCoordinate*>(m_segment.get());
     targetPoint = FloatPoint(moveTo->x(), moveTo->y());
     return true;
 }
@@ -81,7 +72,7 @@ bool SVGPathSegListSource::parseLineToSegment(FloatPoint& targetPoint)
 {
     ASSERT(m_segment);
     ASSERT(m_segment->pathSegType() == PathSegLineToAbs || m_segment->pathSegType() == PathSegLineToRel);
-    SVGPathSegSingleCoord* lineTo = static_cast<SVGPathSegSingleCoord*>(m_segment.get());
+    SVGPathSegSingleCoordinate* lineTo = static_cast<SVGPathSegSingleCoordinate*>(m_segment.get());
     targetPoint = FloatPoint(lineTo->x(), lineTo->y());
     return true;
 }
@@ -139,7 +130,7 @@ bool SVGPathSegListSource::parseCurveToQuadraticSmoothSegment(FloatPoint& target
 {
     ASSERT(m_segment);
     ASSERT(m_segment->pathSegType() == PathSegCurveToQuadraticSmoothAbs || m_segment->pathSegType() == PathSegCurveToQuadraticSmoothRel);
-    SVGPathSegSingleCoord* quadraticSmooth = static_cast<SVGPathSegSingleCoord*>(m_segment.get());
+    SVGPathSegSingleCoordinate* quadraticSmooth = static_cast<SVGPathSegSingleCoordinate*>(m_segment.get());
     targetPoint = FloatPoint(quadraticSmooth->x(), quadraticSmooth->y());
     return true;
 }
diff --git a/WebCore/svg/SVGPathSegListSource.h b/WebCore/svg/SVGPathSegListSource.h
index 4f93be1..357248f 100644
--- a/WebCore/svg/SVGPathSegListSource.h
+++ b/WebCore/svg/SVGPathSegListSource.h
@@ -32,13 +32,13 @@ namespace WebCore {
 
 class SVGPathSegListSource : public SVGPathSource {
 public:
-    static PassOwnPtr<SVGPathSegListSource> create(SVGPathSegList* pathSegList)
+    static PassOwnPtr<SVGPathSegListSource> create(const SVGPathSegList& pathSegList)
     {
         return adoptPtr(new SVGPathSegListSource(pathSegList));
     }
 
 private:
-    SVGPathSegListSource(SVGPathSegList*);
+    SVGPathSegListSource(const SVGPathSegList&);
 
     virtual bool hasMoreData() const;
     virtual bool moveToNextToken() { return true; }
@@ -55,7 +55,7 @@ private:
     virtual bool parseCurveToQuadraticSmoothSegment(FloatPoint&);
     virtual bool parseArcToSegment(float&, float&, float&, bool&, bool&, FloatPoint&);
 
-    SVGPathSegList* m_pathSegList;
+    const SVGPathSegList& m_pathSegList;
     RefPtr<SVGPathSeg> m_segment;
     int m_itemCurrent;
     int m_itemEnd;
diff --git a/WebCore/svg/SVGPathSegMoveto.cpp b/WebCore/svg/SVGPathSegMoveto.cpp
deleted file mode 100644
index f87077f..0000000
--- a/WebCore/svg/SVGPathSegMoveto.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * Copyright (C) 2004, 2005, 2006, 2008 Rob Buis <buis at kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "SVGPathSegMoveto.h"
-
-namespace WebCore {
-
-SVGPathSegMovetoAbs::SVGPathSegMovetoAbs(float x, float y)
-    : SVGPathSegSingleCoord(x, y)
-{
-}
-
-SVGPathSegMovetoRel::SVGPathSegMovetoRel(float x, float y)
-    : SVGPathSegSingleCoord(x, y)
-{
-}
-}
-
-#endif // ENABLE(SVG)
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegMoveto.h b/WebCore/svg/SVGPathSegMoveto.h
index edaff4b..87fcd7d 100644
--- a/WebCore/svg/SVGPathSegMoveto.h
+++ b/WebCore/svg/SVGPathSegMoveto.h
@@ -22,36 +22,45 @@
 #define SVGPathSegMoveto_h
 
 #if ENABLE(SVG)
-
-#include "PlatformString.h"
-#include "SVGPathSeg.h"
+#include "SVGPathSegWithContext.h"
 
 namespace WebCore {
-    class SVGPathSegMovetoAbs : public SVGPathSegSingleCoord { 
-    public:
-        static PassRefPtr<SVGPathSegMovetoAbs> create(float x, float y) { return adoptRef(new SVGPathSegMovetoAbs(x, y)); }
 
-    private:
-        SVGPathSegMovetoAbs(float x, float y);
+class SVGPathSegMovetoAbs : public SVGPathSegSingleCoordinate { 
+public:
+    static PassRefPtr<SVGPathSegMovetoAbs> create(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+    {
+        return adoptRef(new SVGPathSegMovetoAbs(element, role, x, y));
+    }
+
+private:
+    SVGPathSegMovetoAbs(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegSingleCoordinate(element, role, x, y)
+    {
+    }
 
-        virtual unsigned short pathSegType() const { return PATHSEG_MOVETO_ABS; }
-        virtual String pathSegTypeAsLetter() const { return "M"; }
-    };
+    virtual unsigned short pathSegType() const { return PATHSEG_MOVETO_ABS; }
+    virtual String pathSegTypeAsLetter() const { return "M"; }
+};
 
-    class SVGPathSegMovetoRel : public SVGPathSegSingleCoord { 
-    public:
-        static PassRefPtr<SVGPathSegMovetoRel> create(float x, float y) { return adoptRef(new SVGPathSegMovetoRel(x, y)); }
+class SVGPathSegMovetoRel : public SVGPathSegSingleCoordinate { 
+public:
+    static PassRefPtr<SVGPathSegMovetoRel> create(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+    {
+        return adoptRef(new SVGPathSegMovetoRel(element, role, x, y));
+    }
 
-    private:
-        SVGPathSegMovetoRel(float x, float y);
+private:
+    SVGPathSegMovetoRel(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegSingleCoordinate(element, role, x, y)
+    {
+    }
 
-        virtual unsigned short pathSegType() const { return PATHSEG_MOVETO_REL; }
-        virtual String pathSegTypeAsLetter() const { return "m"; }
-    };
+    virtual unsigned short pathSegType() const { return PATHSEG_MOVETO_REL; }
+    virtual String pathSegTypeAsLetter() const { return "m"; }
+};
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet
diff --git a/WebCore/svg/SVGPathSegMovetoAbs.idl b/WebCore/svg/SVGPathSegMovetoAbs.idl
index e10163e..bf371a2 100644
--- a/WebCore/svg/SVGPathSegMovetoAbs.idl
+++ b/WebCore/svg/SVGPathSegMovetoAbs.idl
@@ -27,10 +27,8 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegMovetoAbs : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegMovetoRel.idl b/WebCore/svg/SVGPathSegMovetoRel.idl
index 78ba078..a8763a1 100644
--- a/WebCore/svg/SVGPathSegMovetoRel.idl
+++ b/WebCore/svg/SVGPathSegMovetoRel.idl
@@ -27,10 +27,8 @@
 module svg {
 
     interface [Conditional=SVG] SVGPathSegMovetoRel : SVGPathSeg {
-                 attribute float   x
-                     /*setter raises(DOMException)*/;
-                 attribute float   y
-                     /*setter raises(DOMException)*/;
+        attribute [StrictTypeChecking] float x;
+        attribute [StrictTypeChecking] float y;
     };
 
 }
diff --git a/WebCore/svg/SVGPathSegWithContext.h b/WebCore/svg/SVGPathSegWithContext.h
new file mode 100644
index 0000000..97d8df1
--- /dev/null
+++ b/WebCore/svg/SVGPathSegWithContext.h
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGPathSegWithContext_h
+#define SVGPathSegWithContext_h
+
+#if ENABLE(SVG)
+#include "SVGPathElement.h"
+
+namespace WebCore {
+
+class SVGPathSegWithContext : public SVGPathSeg {
+public:
+    SVGPathSegWithContext(SVGPathElement* element, SVGPathSegRole role)
+        : m_role(role)
+        , m_element(element)
+    {
+    }
+
+    SVGAnimatedProperty* animatedProperty() const
+    {
+        switch (m_role) {
+        case PathSegUndefinedRole:
+            return 0;
+        case PathSegUnalteredRole:
+            return m_element->animatablePathSegList();
+        case PathSegNormalizedRole:
+            // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
+            return 0;
+        };
+
+        return 0;
+    }
+
+    SVGPathElement* contextElement() const { return m_element.get(); }
+    SVGPathSegRole role() const { return m_role; }
+
+    void setContextAndRole(SVGPathElement* element, SVGPathSegRole role)
+    {
+        m_role = role;
+        m_element = element;
+    }
+
+protected:
+    void commitChange()
+    {
+        if (!m_element) {
+            ASSERT(m_role == PathSegUndefinedRole);
+            return;
+        }
+
+        ASSERT(m_role != PathSegUndefinedRole);
+        m_element->pathSegListChanged(m_role);
+    }
+
+private:
+    SVGPathSegRole m_role;
+    RefPtr<SVGPathElement> m_element;
+};
+
+class SVGPathSegSingleCoordinate : public SVGPathSegWithContext { 
+public:
+    float x() const { return m_x; }
+    void setX(float x)
+    {
+        m_x = x;
+        commitChange();
+    }
+
+    float y() const { return m_y; }
+    void setY(float y)
+    {
+        m_y = y;
+        commitChange();
+    }
+
+protected:
+    SVGPathSegSingleCoordinate(SVGPathElement* element, SVGPathSegRole role, float x, float y)
+        : SVGPathSegWithContext(element, role)
+        , m_x(x)
+        , m_y(y)
+    {
+    }
+
+private:
+    float m_x;
+    float m_y;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG)
+#endif
diff --git a/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h b/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h
new file mode 100644
index 0000000..f515ab4
--- /dev/null
+++ b/WebCore/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGAnimatedPathSegListPropertyTearOff_h
+#define SVGAnimatedPathSegListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGAnimatedListPropertyTearOff.h"
+#include "SVGPathSegList.h"
+#include "SVGPathSegListPropertyTearOff.h"
+
+namespace WebCore {
+
+class SVGPathSegListPropertyTearOff;
+
+class SVGAnimatedPathSegListPropertyTearOff : public SVGAnimatedListPropertyTearOff<SVGPathSegList> {
+public:
+    SVGProperty* baseVal(SVGPathSegRole role)
+    {
+        if (!m_baseVal)
+            m_baseVal = SVGPathSegListPropertyTearOff::create(this, BaseValRole, role);
+        return m_baseVal.get();
+    }
+
+    SVGProperty* animVal(SVGPathSegRole role)
+    {
+        if (!m_animVal)
+            m_animVal = SVGPathSegListPropertyTearOff::create(this, AnimValRole, role);
+        return m_animVal.get();
+    }
+
+    int removeItemFromList(const RefPtr<SVGPathSeg>& segment, bool shouldSynchronizeWrappers)
+    {
+        // This should ever be called for our baseVal, as animVal can't modify the list.
+        return static_pointer_cast<SVGPathSegListPropertyTearOff>(m_baseVal)->removeItemFromList(segment, shouldSynchronizeWrappers);
+    }
+
+private:
+    friend class SVGAnimatedProperty;
+
+    static PassRefPtr<SVGAnimatedPathSegListPropertyTearOff> create(SVGElement* contextElement, const QualifiedName& attributeName, SVGPathSegList& values)
+    {
+        ASSERT(contextElement);
+        return adoptRef(new SVGAnimatedPathSegListPropertyTearOff(contextElement, attributeName, values));
+    }
+
+    SVGAnimatedPathSegListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, SVGPathSegList& values)
+        : SVGAnimatedListPropertyTearOff<SVGPathSegList>(contextElement, attributeName, values)
+    {
+    }
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGAnimatedPathSegListPropertyTearOff_h
diff --git a/WebCore/svg/properties/SVGPathSegListPropertyTearOff.cpp b/WebCore/svg/properties/SVGPathSegListPropertyTearOff.cpp
new file mode 100644
index 0000000..af1b30c
--- /dev/null
+++ b/WebCore/svg/properties/SVGPathSegListPropertyTearOff.cpp
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#if ENABLE(SVG)
+#include "SVGPathSegListPropertyTearOff.h"
+
+#include "SVGAnimatedPathSegListPropertyTearOff.h"
+#include "SVGPathElement.h"
+#include "SVGPathSegWithContext.h"
+
+namespace WebCore {
+
+void SVGPathSegListPropertyTearOff::clear(ExceptionCode& ec)
+{
+    SVGPathSegList& values = m_animatedProperty->values();
+    if (values.isEmpty())
+        return;
+
+    unsigned size = values.size();
+    for (unsigned i = 0; i < size; ++i) {
+        ListItemType item = values.at(i);
+        static_cast<SVGPathSegWithContext*>(item.get())->setContextAndRole(0, PathSegUndefinedRole);
+    }
+
+    SVGPathSegListPropertyTearOff::Base::clearValues(values, ec);
+}
+
+SVGPathSegListPropertyTearOff::PassListItemType SVGPathSegListPropertyTearOff::getItem(unsigned index, ExceptionCode& ec)
+{
+    SVGPathSegList& values = m_animatedProperty->values();
+    ListItemType returnedItem = Base::getItemValues(values, index, ec);
+    if (returnedItem) {
+        ASSERT(static_cast<SVGPathSegWithContext*>(returnedItem.get())->contextElement() == contextElement());
+        ASSERT(static_cast<SVGPathSegWithContext*>(returnedItem.get())->role() == m_pathSegRole);
+    }
+    return returnedItem.release();
+}
+
+SVGPathSegListPropertyTearOff::PassListItemType SVGPathSegListPropertyTearOff::removeItem(unsigned index, ExceptionCode& ec)
+{
+    SVGPathSegList& values = m_animatedProperty->values();
+    SVGPathSegListPropertyTearOff::ListItemType removedItem = SVGPathSegListPropertyTearOff::Base::removeItemValues(values, index, ec);
+    if (removedItem)
+        static_cast<SVGPathSegWithContext*>(removedItem.get())->setContextAndRole(0, PathSegUndefinedRole);
+    return removedItem.release();
+}
+
+SVGPathElement* SVGPathSegListPropertyTearOff::contextElement() const
+{
+    SVGElement* contextElement = m_animatedProperty->contextElement();
+    ASSERT(contextElement);
+    ASSERT(contextElement->hasTagName(SVGNames::pathTag));
+    return static_cast<SVGPathElement*>(contextElement);
+}
+
+void SVGPathSegListPropertyTearOff::processIncomingListItemValue(const ListItemType& newItem, unsigned* indexToModify)
+{
+    SVGPathSegWithContext* newItemWithContext = static_cast<SVGPathSegWithContext*>(newItem.get());
+    SVGAnimatedProperty* animatedPropertyOfItem = newItemWithContext->animatedProperty();
+
+    // Alter the role, after calling animatedProperty(), as that may influence the returned animated property.
+    newItemWithContext->setContextAndRole(contextElement(), m_pathSegRole);
+
+    if (!animatedPropertyOfItem)
+        return;
+
+    // newItem belongs to a SVGPathElement, but its associated SVGAnimatedProperty is not an animated list tear off.
+    // (for example: "pathElement.pathSegList.appendItem(pathElement.createSVGPathSegClosepath())")
+    if (!animatedPropertyOfItem->isAnimatedListTearOff())
+        return;
+
+    // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
+    // 'newItem' is already living in another list. If it's not our list, synchronize the other lists wrappers after the removal.
+    bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty;
+    int removedIndex = static_cast<SVGAnimatedPathSegListPropertyTearOff*>(animatedPropertyOfItem)->removeItemFromList(newItem.get(), livesInOtherList);
+    ASSERT(removedIndex != -1);
+
+    if (!indexToModify)
+        return;
+
+    // If the item lived in our list, adjust the insertion index.
+    if (!livesInOtherList) {
+        unsigned& index = *indexToModify;
+        // Spec: If the item is already in this list, note that the index of the item to (replace|insert before) is before the removal of the item.
+        if (static_cast<unsigned>(removedIndex) < index)
+            --index;
+    }
+}
+
+}
+
+#endif // ENABLE(SVG)
diff --git a/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h b/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h
new file mode 100644
index 0000000..71977d1
--- /dev/null
+++ b/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGPathSegListPropertyTearOff_h
+#define SVGPathSegListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGAnimatedListPropertyTearOff.h"
+#include "SVGPathSegList.h"
+
+namespace WebCore {
+
+class SVGPathElement;
+
+class SVGPathSegListPropertyTearOff : public SVGListProperty<SVGPathSegList> {
+public:
+    typedef SVGListProperty<SVGPathSegList> Base;
+    typedef SVGAnimatedListPropertyTearOff<SVGPathSegList> AnimatedListPropertyTearOff;
+    typedef SVGPropertyTraits<SVGPathSegList>::ListItemType ListItemType;
+    typedef PassRefPtr<SVGPathSeg> PassListItemType;
+
+    static PassRefPtr<SVGPathSegListPropertyTearOff> create(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role, SVGPathSegRole pathSegRole)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(new SVGPathSegListPropertyTearOff(animatedProperty, role, pathSegRole));
+    }
+
+    int removeItemFromList(const ListItemType& removeItem, bool shouldSynchronizeWrappers)
+    {
+        SVGPathSegList& values = m_animatedProperty->values();
+
+        unsigned size = values.size();
+        for (unsigned i = 0; i < size; ++i) {
+            ListItemType& item = values.at(i);
+            if (item != removeItem)
+                continue;
+
+            values.remove(i);
+
+            if (shouldSynchronizeWrappers)
+                commitChange();
+
+            return i;
+        }
+
+        return -1;
+    }
+
+    // SVGList API
+    void clear(ExceptionCode&);
+
+    unsigned numberOfItems() const
+    {
+        SVGPathSegList& values = m_animatedProperty->values();
+        return Base::numberOfItemsValues(values);
+    }
+
+    PassListItemType initialize(PassListItemType passNewItem, ExceptionCode& ec)
+    {
+        // Not specified, but FF/Opera do it this way, and it's just sane.
+        if (!passNewItem) {
+            ec = TYPE_MISMATCH_ERR;
+            return 0;
+        }
+
+        ListItemType newItem = passNewItem;
+        SVGPathSegList& values = m_animatedProperty->values();
+        return Base::initializeValues(values, newItem, ec);
+    }
+
+    PassListItemType getItem(unsigned index, ExceptionCode&);
+
+    PassListItemType insertItemBefore(PassListItemType passNewItem, unsigned index, ExceptionCode& ec)
+    {
+        // Not specified, but FF/Opera do it this way, and it's just sane.
+        if (!passNewItem) {
+            ec = TYPE_MISMATCH_ERR;
+            return 0;
+        }
+
+        ListItemType newItem = passNewItem;
+        SVGPathSegList& values = m_animatedProperty->values();
+        return Base::insertItemBeforeValues(values, newItem, index, ec);
+    }
+
+    PassListItemType replaceItem(PassListItemType passNewItem, unsigned index, ExceptionCode& ec)
+    {
+        // Not specified, but FF/Opera do it this way, and it's just sane.
+        if (!passNewItem) {
+            ec = TYPE_MISMATCH_ERR;
+            return 0;
+        }
+
+        ListItemType newItem = passNewItem;
+        SVGPathSegList& values = m_animatedProperty->values();
+        return Base::replaceItemValues(values, newItem, index, ec);
+    }
+
+    PassListItemType removeItem(unsigned index, ExceptionCode&);
+
+    PassListItemType appendItem(PassListItemType passNewItem, ExceptionCode& ec)
+    {
+        // Not specified, but FF/Opera do it this way, and it's just sane.
+        if (!passNewItem) {
+            ec = TYPE_MISMATCH_ERR;
+            return 0;
+        }
+
+        ListItemType newItem = passNewItem;
+        SVGPathSegList& values = m_animatedProperty->values();
+        return Base::appendItemValues(values, newItem, ec);
+    }
+
+private:
+    SVGPathSegListPropertyTearOff(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role, SVGPathSegRole pathSegRole)
+        : SVGListProperty<SVGPathSegList>(role)
+        , m_animatedProperty(animatedProperty)
+        , m_pathSegRole(pathSegRole)
+    {
+    }
+
+    SVGPathElement* contextElement() const;
+
+    virtual void commitChange()
+    {
+        SVGPathSegList& values = m_animatedProperty->values();
+        values.commitChange(m_animatedProperty->contextElement());
+    }
+
+    virtual void processIncomingListItemValue(const ListItemType& newItem, unsigned* indexToModify);
+    virtual void processIncomingListItemWrapper(RefPtr<ListItemTearOff>&, unsigned*)
+    {
+        ASSERT_NOT_REACHED();
+    }
+
+private:
+    RefPtr<AnimatedListPropertyTearOff> m_animatedProperty;
+    SVGPathSegRole m_pathSegRole;
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGListPropertyTearOff_h
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 53c9e9f..b085e36 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,12 @@
+2010-11-19  Nikolas Zimmermann  <nzimmermann at rim.com>
+
+        Reviewed by Dirk Schulze.
+
+        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
+        https://bugs.webkit.org/show_bug.cgi?id=49580
+
+        * WebView/WebRenderLayer.mm: Add missing StyledElement.h include.
+
 2010-11-18  Mark Rowe  <mrowe at apple.com>
 
         Rubber-stamped by Adam Roben.
diff --git a/WebKit/mac/WebView/WebRenderLayer.mm b/WebKit/mac/WebView/WebRenderLayer.mm
index edffac2..c282643 100644
--- a/WebKit/mac/WebView/WebRenderLayer.mm
+++ b/WebKit/mac/WebView/WebRenderLayer.mm
@@ -32,6 +32,7 @@
 #import <WebCore/RenderLayer.h>
 #import <WebCore/RenderLayerBacking.h>
 #import <WebCore/RenderView.h>
+#import <WebCore/StyledElement.h>
 
 using namespace WebCore;
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list