 		}
 		return xml;
 	}
+
+	private function differ(s:String, t:String):void
+	{
+		var sl:Array = s.split("\n");
+		var tl:Array = t.split("\n");
+		trace(sl.length, tl.length);
+		var n:int = Math.max(sl.length, tl.length);
+		for (var i:int = 0; i < n; i++)
+		{
+			var a:String = (i < sl.length) ? sl[i] : "";
+			var b:String = (i < tl.length) ? tl[i] : "";
+			if (a != b)
+			{
+				var c:String = "";
+				var d:String = "";
+				trace(i, "cur: ", a);
+				trace(i, "xml: ", b);
+				var m:int = Math.max(a.length, b.length);
+				for (var j:int = 0; j < m; j++)
+				{
+					c += a.charCodeAt(j) + " ";
+					d += b.charCodeAt(j) + " ";
+				}
+				trace(i, "cur: ", c);
+				trace(i, "xml: ", d);
+			}
+		}
+	}
 }
 
 }

////////////////////////////////////////////////////////////////////////////////
package  { 

import flash.display.IBitmapDrawable;
import flash.utils.*;
import flash.net.*;
import flash.events.*;
import flash.display.*;
import flash.text.*;
import flash.text.engine.*;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import mx.core.IChildList;
import mx.core.IRawChildrenContainer;
import mx.core.mx_internal;

	// scan entire display list, but only dump objects intersecting target
	protected function getDisplayListXML(target:DisplayObject):XML
	{
		var i:int;
		var n:int;
		var child:DisplayObject;
		var childXML:XML;
		
