<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>16708</bug_id>
          
          <creation_ts>2008-01-02 05:52:18 -0800</creation_ts>
          <short_desc>CSS: Slow parsing of rgb() with percent values</short_desc>
          <delta_ts>2011-03-31 09:28:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://canvex.lazyilluminati.com/misc/3d.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46591</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Andras Becsi">abecsi</assigned_to>
          <cc>abecsi</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>excors</cc>
    
    <cc>jberlin</cc>
    
    <cc>jon</cc>
    
    <cc>kling</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>psolanki</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66019</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-02 05:52:18 -0800</bug_when>
    <thetext>Safari renders 3d canvas demo too slowly

http://canvex.lazyilluminati.com/misc/3d.html

Shipping 3.0.4 says 4.2 fps on my machine.

We&apos;re probably much better in TOT, as I expect the slowdown here is JS.  A resolution to this bug would be to make sure that this is already covered by sunspider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66020</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-02 06:13:00 -0800</bug_when>
    <thetext>I only see 7.6fps on TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66024</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-02 07:02:51 -0800</bug_when>
    <thetext>I took a shark sample (which I can send to anyone who cares).

High level:

	13.5%	13.5%	WebCore	WebCore::CanvasRenderingContext2D::fill()	
	5.9%	5.9%	JavaScriptCore	KJS::BracketAccessorNode::evaluateToNumber(KJS::ExecState*)	
	5.6%	5.6%	WebCore	WebCore::ScrollView::updateContents(WebCore::IntRect const&amp;, bool)	
	3.2%	3.2%	JavaScriptCore	kjs_dtoa	
	2.9%	2.9%	JavaScriptCore	WTF::fastMalloc(unsigned long)	
	2.5%	2.5%	JavaScriptCore	KJS::ArrayInstance::getOwnPropertySlot(KJS::ExecState*, unsigned, KJS::PropertySlot&amp;)	
	2.4%	2.4%	JavaScriptCore	kjs_strtod	
	2.4%	2.4%	WebCore	WebCore::CanvasStyle::applyFillColor(WebCore::GraphicsContext*)	
	2.2%	2.2%	JavaScriptCore	WTF::fastFree(void*)	
	2.0%	2.0%	WebCore	cssyyparse(void*)	
	1.9%	1.9%	WebCore	WebCore::CSSParser::lex()	
	1.9%	1.9%	JavaScriptCore	KJS::AddNode::evaluate(KJS::ExecState*)	
	1.9%	1.9%	JavaScriptCore	quorem	
	1.6%	1.6%	JavaScriptCore	diff	
	1.6%	1.6%	JavaScriptCore	KJS::ActivationImp::~ActivationImp [in-charge]()	
	1.6%	1.6%	JavaScriptCore	KJS::ArrayInstance::mark()	
	1.5%	1.5%	JavaScriptCore	void* KJS::Collector::heapAllocate&lt;(KJS::Collector::HeapType)1&gt;(unsigned long)	
	1.4%	1.4%	JavaScriptCore	KJS::LocalVarAccessNode::evaluate(KJS::ExecState*)	
	1.3%	1.3%	JavaScriptCore	KJS::MultNode::evaluateToNumber(KJS::ExecState*)	
	1.3%	1.3%	JavaScriptCore	KJS::FunctionBodyNode::execute(KJS::ExecState*)	
	1.2%	1.2%	JavaScriptCore	unsigned long KJS::Collector::sweep&lt;(KJS::Collector::HeapType)1&gt;(bool)	
	1.1%	1.1%	WebCore	WebCore::HTMLCanvasElement::paint(WebCore::GraphicsContext*, WebCore::IntRect const&amp;)	
	1.0%	1.0%	WebCore	WebCore::ScrollView::visibleContentRect() const	
	1.0%	1.0%	JavaScriptCore	KJS::NumberImp::toNumber(KJS::ExecState*) const	
	0.9%	0.9%	WebCore	WebCore::CSSParser::text(int*)	
	0.9%	0.9%	JavaScriptCore	KJS::AssignBracketNode::evaluate(KJS::ExecState*)	
	0.9%	0.9%	JavaScriptCore	void* KJS::Collector::heapAllocate&lt;(KJS::Collector::HeapType)0&gt;(unsigned long)	
	0.9%	0.9%	JavaScriptCore	KJS::ImmediateNumberNode::evaluate(KJS::ExecState*)	
	0.8%	0.8%	JavaScriptCore	KJS::BracketAccessorNode::evaluate(KJS::ExecState*)	
	0.8%	0.8%	WebCore	WebCore::Path::clear()	
	0.8%	0.8%	JavaScriptCore	WTF::fastRealloc(void*, unsigned long)	
	0.7%	0.7%	JavaScriptCore	KJS::ArrayInstance::put(KJS::ExecState*, unsigned, KJS::JSValue*, int)	
	0.7%	0.7%	WebKit	-[WebHTMLView visibleRect]	
	0.7%	0.7%	JavaScriptCore	unsigned long KJS::Collector::sweep&lt;(KJS::Collector::HeapType)0&gt;(bool)	
	0.7%	0.7%	JavaScriptCore	KJS::JSObject::toObject(KJS::ExecState*) const	
	0.7%	0.7%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::RemoveRange(void**, void**, int*)	
	0.7%	0.7%	WebCore	WebCore::ScrollView::getDocumentView() const	
	0.7%	0.7%	JavaScriptCore	KJS::AddNumbersNode::evaluate(KJS::ExecState*)	
	0.7%	0.7%	WebCore	WebCore::DeprecatedStringData::makeAscii()	
	0.6%	0.6%	JavaScriptCore	KJS::jsNumberCell(double)	
	0.6%	0.6%	JavaScriptCore	KJS::ExecState::ExecState[not-in-charge](KJS::JSGlobalObject*, KJS::JSObject*, KJS::FunctionBodyNode*, KJS::ExecState*, KJS::FunctionImp*, KJS::List const&amp;)	
	0.6%	0.6%	JavaScriptCore	KJS::UString::UString[not-in-charge](KJS::UString const&amp;, KJS::UString const&amp;)	
	0.5%	0.5%	JavaScriptCore	KJS::FunctionCallResolveNode::evaluate(KJS::ExecState*)	
	0.5%	0.5%	JavaScriptCore	KJS::AddNumbersNode::evaluateToNumber(KJS::ExecState*)	
	0.5%	0.5%	WebCore	WebCore::CSSParser::setupParser(char const*, WebCore::String const&amp;, char const*)	
	0.5%	0.5%	JavaScriptCore	KJS::ExprStatementNode::execute(KJS::ExecState*)	
	0.5%	0.5%	JavaScriptCore	KJS::Lookup::findEntry(KJS::HashTable const*, KJS::Identifier const&amp;)	
	0.5%	0.5%	JavaScriptCore	KJS::FunctionCallDotNode::evaluate(KJS::ExecState*)	
	0.5%	0.5%	JavaScriptCore	KJS::MultNode::evaluate(KJS::ExecState*)	
	0.5%	0.5%	JavaScriptCore	KJS::PropertyMap::mark() const	
	0.4%	0.4%	JavaScriptCore	KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.4%	0.4%	JavaScriptCore	KJS::DivNode::evaluate(KJS::ExecState*)	
	0.4%	0.4%	JavaScriptCore	KJS::ArgumentListNode::evaluateList(KJS::ExecState*, KJS::List&amp;)	
	0.4%	0.4%	WebCore	WebCore::StringImpl::lower() const	
	0.4%	0.4%	JavaScriptCore	KJS::LocalVarAccessNode::evaluateToNumber(KJS::ExecState*)	
	0.4%	0.4%	JavaScriptCore	KJS::BlockNode::execute(KJS::ExecState*)	
	0.4%	0.4%	JavaScriptCore	KJS::AddNode::evaluateToNumber(KJS::ExecState*)	
	0.4%	0.4%	JavaScriptCore	pow5mult	
	0.3%	0.3%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe()	
	0.3%	0.3%	WebCore	WebCore::CSSParser::lex(void*)	
	0.3%	0.3%	JavaScriptCore	KJS::StringImp::~StringImp [in-charge]()	
	0.3%	0.3%	JavaScriptCore	KJS::AssignLocalVarNode::evaluate(KJS::ExecState*)	
	0.3%	0.3%	JavaScriptCore	KJS::VarStatementNode::execute(KJS::ExecState*)	
	0.3%	0.3%	WebCore	WebCore::GraphicsContext::fillRect(WebCore::IntRect const&amp;, WebCore::Color const&amp;)	
	0.3%	0.3%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::ReleaseListToSpans(void*)	
	0.3%	0.3%	WebCore	WebCore::CanvasRenderingContext2D::fillRect(float, float, float, float, int&amp;)	
	0.3%	0.3%	JavaScriptCore	KJS::SubNode::evaluate(KJS::ExecState*)	
	0.3%	0.3%	JavaScriptCore	KJS::ActivationImp::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.3%	0.3%	WebCore	WebCore::RenderView::repaintViewRectangle(WebCore::IntRect const&amp;, bool)	
	0.3%	0.3%	JavaScriptCore	d2b	
	0.3%	0.3%	JavaScriptCore	KJS::JSValue::toFloat(KJS::ExecState*) const	
	0.3%	0.3%	JavaScriptCore	KJS::ElementNode::evaluate(KJS::ExecState*)	
	0.3%	0.3%	JavaScriptCore	KJS::compareWithCompareFunctionForQSort(void const*, void const*)	
	0.2%	0.2%	WebCore	WebCore::String::String[not-in-charge](KJS::UString const&amp;)	
	0.2%	0.2%	JavaScriptCore	KJS::ForNode::execute(KJS::ExecState*)	
	0.2%	0.2%	WebCore	void WTF::deleteAllValues&lt;WebCore::ValueList*, WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; const&gt;(WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; const&amp;)	
	0.2%	0.2%	JavaScriptCore	KJS::PreIncLocalVarNode::evaluate(KJS::ExecState*)	
	0.2%	0.2%	JavaScriptCore	KJS::ArrayInstance::sort(KJS::ExecState*, KJS::JSObject*)	
	0.2%	0.2%	JavaScriptCore	KJS::UString::UString[not-in-charge](char const*)	
	0.2%	0.2%	JavaScriptCore	KJS::UString::from(double)	
	0.2%	0.2%	JavaScriptCore	KJS::NumberImp::toString(KJS::ExecState*) const	
	0.2%	0.2%	JavaScriptCore	KJS::ArrayInstance::~ArrayInstance [not-in-charge]()	
	0.2%	0.2%	WebCore	void WTF::deleteAllValues&lt;WebCore::Function*, WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; const&gt;(WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; const&amp;)	
	0.2%	0.2%	JavaScriptCore	KJS::Collector::markStackObjectsConservatively(void*, void*)	
	0.1%	0.1%	WebCore	WebCore::RenderBox::absoluteClippedOverflowRect()	
	0.1%	0.1%	JavaScriptCore	KJS::PropertyMap::get(KJS::Identifier const&amp;) const	
	0.1%	0.1%	JavaScriptCore	KJS::NumberNode::evaluateToNumber(KJS::ExecState*)	
	0.1%	0.1%	WebCore	WebCore::RenderBox::computeAbsoluteRepaintRect(WebCore::IntRect&amp;, bool)	
	0.1%	0.1%	JavaScriptCore	KJS::NumberImp::type() const	
	0.1%	0.1%	JavaScriptCore	KJS::JSCell::mark()	
	0.1%	0.1%	WebCore	WebCore::JSDOMWindow::customGetOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.1%	0.1%	WebCore	WebCore::CSSParser::parseColorFromValue(WebCore::Value*, unsigned&amp;, bool)	
	0.1%	0.1%	WebCore	std::pair&lt;WTF::HashTableIterator&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;, bool&gt; WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::add&lt;WebCore::ValueList*, WebCore::ValueList*, WTF::HashSetTranslator&lt;(bool)1, WebCore::ValueList*, WTF::HashTraits&lt;WebCore::ValueList*&gt;, WTF::HashTraits&lt;int&gt;, WTF::PtrHash&lt;WebCore::ValueList*&gt; &gt; &gt;(WebCore::ValueList* const&amp;, WebCore::ValueList* const&amp;)	
	0.1%	0.1%	JavaScriptCore	WTF::HashMap&lt;WTF::RefPtr&lt;KJS::UString::Rep&gt;, unsigned long, KJS::IdentifierRepHash, KJS::IdentifierRepHashTraits, KJS::SymbolTableIndexHashTraits&gt;::get(KJS::UString::Rep*) const	
	0.1%	0.1%	WebCore	WebCore::JSDOMWindow::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.1%	0.1%	WebCore	WebCore::JSCanvasRenderingContext2DPrototypeFunctionFill::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.1%	0.1%	WebCore	findProp(char const*, unsigned)	
	0.1%	0.1%	WebCore	WebCore::ValueList::~ValueList [not-in-charge]()	
	0.1%	0.1%	JavaScriptCore	KJS::ReturnNode::execute(KJS::ExecState*)	
	0.1%	0.1%	JavaScriptCore	KJS::PropertyMap::~PropertyMap [not-in-charge]()	
	0.1%	0.1%	WebCore	WebCore::RenderObject::repaint(bool)	
	0.1%	0.1%	WebCore	WebCore::DeprecatedString::isAllASCII() const	
	0.1%	0.1%	JavaScriptCore	KJS::StringImp::toString(KJS::ExecState*) const	
	0.1%	0.1%	WebCore	WebCore::CSSParser::parseColorParameters(WebCore::Value*, int*, bool)	
	0.1%	0.1%	JavaScriptCore	KJS::LessEqNode::evaluateToBoolean(KJS::ExecState*)	
	0.1%	0.1%	WebCore	WTF::HashTableIterator&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::find&lt;int, WTF::IdentityHashTranslator&lt;int, int, WTF::IntHash&lt;int&gt; &gt; &gt;(int const&amp;)	
	0.1%	0.1%	WebCore	WebCore::toHTMLCanvasStyle(KJS::ExecState*, KJS::JSValue*)	
	0.1%	0.1%	WebCore	WebCore::DeprecatedString::~DeprecatedString [not-in-charge]()	
	0.1%	0.1%	WebCore	WebCore::CSSParser::~CSSParser [not-in-charge]()	
	0.1%	0.1%	JavaScriptCore	KJS::JSObject::type() const	
	0.1%	0.1%	JavaScriptCore	WTF::fastZeroedMalloc(unsigned long)	
	0.1%	0.1%	WebCore	WebCore::JSCanvasRenderingContext2D::putValueProperty(KJS::ExecState*, int, KJS::JSValue*, int)	
	0.1%	0.1%	WebCore	WebCore::Frame::settings() const	
	0.1%	0.1%	WebCore	WebCore::CanvasRenderingContext2D::setFillStyle(WTF::PassRefPtr&lt;WebCore::CanvasStyle&gt;)	
	0.1%	0.1%	JavaScriptCore	KJS::AssignDotNode::evaluate(KJS::ExecState*)	
	0.1%	0.1%	WebCore	WebCore::Widget::getView() const	
	0.1%	0.1%	WebCore	WebCore::CSSParser::parseValue(int, bool)	
	0.1%	0.1%	WebCore	KJS::Window::allowsAccessFrom(KJS::JSGlobalObject const*) const	
	0.1%	0.1%	JavaScriptCore	KJS::ExecState::lexicalGlobalObject() const	
	0.1%	0.1%	WebCore	WebCore::RenderView::printing() const	
	0.1%	0.1%	WebCore	WebCore::RenderObject::container() const	
	0.1%	0.1%	JavaScriptCore	KJS::PropertyMap::getLocation(KJS::Identifier const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::jsString(KJS::UString const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::JSObject::mark()	
	0.1%	0.1%	JavaScriptCore	KJS::ArrayInstance::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.1%	0.1%	WebCore	WebCore::JSCanvasRenderingContext2D::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::Collector::markProtectedObjects()	
	0.1%	0.1%	WebCore	WebCore::Document::settings() const	
	0.1%	0.1%	WebCore	WebCore::CSSParser::parseColor(WebCore::String const&amp;, unsigned&amp;, bool)	
	0.1%	0.1%	JavaScriptCore	KJS::MathProtoFuncSqrt::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::LessNode::evaluateToBoolean(KJS::ExecState*)	
	0.1%	0.1%	JavaScriptCore	KJS::JSGlobalObject::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::FunctionCallDotNode::evaluateToNumber(KJS::ExecState*)	
	0.1%	0.1%	WebCore	WebCore::JSCanvasRenderingContext2DPrototypeFunctionBeginPath::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.1%	0.1%	WebCore	WebCore::JSCanvasRenderingContext2DPrototype::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.1%	0.1%	WebCore	WebCore::DeprecatedString::toDouble(bool*) const	
	0.1%	0.1%	WebCore	WebCore::DeprecatedString::DeprecatedString[not-in-charge](WebCore::DeprecatedChar const*, unsigned)	
	0.1%	0.1%	WebCore	WebCore::Color::setNamedColor(WebCore::String const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::DotAccessorNode::evaluate(KJS::ExecState*)	
	0.1%	0.1%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::InsertRange(void*, void*, int)	
	0.1%	0.1%	WebCore	WebCore::String::length() const	
	0.1%	0.1%	WebCore	WebCore::Path::addLineTo(WebCore::FloatPoint const&amp;)	
	0.1%	0.1%	WebCore	WebCore::CSSParser::CSSParser[not-in-charge](bool)	
	0.1%	0.1%	WebCore	std::pair&lt;WTF::HashTableIterator&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;, bool&gt; WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::add&lt;WebCore::Function*, WebCore::Function*, WTF::HashSetTranslator&lt;(bool)1, WebCore::Function*, WTF::HashTraits&lt;WebCore::Function*&gt;, WTF::HashTraits&lt;int&gt;, WTF::PtrHash&lt;WebCore::Function*&gt; &gt; &gt;(WebCore::Function* const&amp;, WebCore::Function* const&amp;)	
	0.1%	0.1%	WebCore	KJS::staticFunctionGetter(KJS::ExecState*, KJS::JSObject*, KJS::Identifier const&amp;, KJS::PropertySlot const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::jsOwnedString(KJS::UString const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::FunctionImp::mark()	
	0.1%	0.1%	JavaScriptCore	KJS::ArrayNode::evaluate(KJS::ExecState*)	
	0.1%	0.1%	JavaScriptCore	KJS::ArrayInstance::ArrayInstance[not-in-charge](KJS::JSObject*, KJS::List const&amp;)	
	0.1%	0.1%	WebCore	WebCore::String::deprecatedString() const	
	0.1%	0.1%	WebCore	WebCore::ParseString::lower()	
	0.1%	0.1%	WebCore	WebCore::CSSPrimitiveValue::~CSSPrimitiveValue [in-charge deleting]()	
	0.1%	0.1%	JavaScriptCore	KJS::AddStringsNode::evaluate(KJS::ExecState*)	
	0.1%	0.1%	WebKit	-[WebHTMLView drawSingleRect:]	
	0.1%	0.1%	WebCore	WebCore::String::lower() const	
	0.1%	0.1%	WebCore	WebCore::setSharedTimerFireTime(double)	
	0.1%	0.1%	WebCore	WebCore::RenderReplaced::overflowRect(bool) const	
	0.1%	0.1%	WebCore	WebCore::DeprecatedStringData::DeprecatedStringData[not-in-charge]()	
	0.1%	0.1%	WebCore	WebCore::CSSParser::validUnit(WebCore::Value*, WebCore::CSSParser::Units, bool)	
	0.1%	0.1%	WebCore	WebCore::CSSParser::parseColor(unsigned&amp;, WebCore::String const&amp;, bool)	
	0.1%	0.1%	WebCore	WebCore::CanvasRenderingContext2D::clearPathForDashboardBackwardCompatibilityMode()	
	0.1%	0.1%	JavaScriptCore	KJS::ArrayObjectImp::construct(KJS::ExecState*, KJS::List const&amp;)	
	0.1%	0.1%	JavaScriptCore	KJS::ActivationImp::mark()	
	0.1%	0.1%	JavaScriptCore	Balloc	
	0.0%	0.0%	WebCore	WTF::Vector&lt;WebCore::Value, (unsigned long)16&gt;::shrink(unsigned long)	
	0.0%	0.0%	WebCore	WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::expand()	
	0.0%	0.0%	WebCore	WebCore::JSCanvasRenderingContext2D::put(KJS::ExecState*, KJS::Identifier const&amp;, KJS::JSValue*, int)	
	0.0%	0.0%	WebCore	WebCore::JSCanvasRenderingContext2D::classInfo() const	
	0.0%	0.0%	WebCore	WebCore::HTMLCanvasElement::drawingContext() const	
	0.0%	0.0%	WebCore	WebCore::DeprecatedStringData::initialize(WebCore::DeprecatedChar const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedString::makeSharedNullHandle()	
	0.0%	0.0%	JavaScriptCore	KJS::InternalFunctionImp::implementsCall() const	
	0.0%	0.0%	WebCore	WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::rehash(int)	
	0.0%	0.0%	WebCore	WebCore::StyleBase::stylesheet()	
	0.0%	0.0%	WebCore	WebCore::String::String[in-charge](unsigned short const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::RenderObject::view() const	
	0.0%	0.0%	WebCore	WebCore::RenderBlock::isBlockFlow() const	
	0.0%	0.0%	WebCore	WebCore::JSCanvasRenderingContext2DPrototypeFunctionMoveTo::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.0%	0.0%	WebCore	WebCore::JSCanvasRenderingContext2DPrototypeFunctionLineTo::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedStringData::DeprecatedStringData[in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CSSParser::sinkFloatingValueList(WebCore::ValueList*)	
	0.0%	0.0%	WebCore	WebCore::CSSParser::parseColor(WebCore::CSSMutableStyleDeclaration*, WebCore::String const&amp;)	
	0.0%	0.0%	JavaScriptCore	KJS::StringImp::type() const	
	0.0%	0.0%	JavaScriptCore	KJS::ReadModifyLocalVarNode::evaluate(KJS::ExecState*)	
	0.0%	0.0%	JavaScriptCore	KJS::AddStringLeftNode::evaluate(KJS::ExecState*)	
	0.0%	0.0%	WebKit	-[WebHTMLView(WebPrivate) _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]	
	0.0%	0.0%	WebCore	WebCore::StringImpl::~StringImpl [not-in-charge]()	
	0.0%	0.0%	WebCore	WebCore::StringImpl::StringImpl[in-charge](unsigned short const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::RenderBox::borderBox() const	
	0.0%	0.0%	WebCore	WebCore::Frame::ownerElement() const	
	0.0%	0.0%	WebCore	WebCore::DeprecatedString::toFloat(bool*) const	
	0.0%	0.0%	WebCore	WebCore::CSSStyleDeclaration::CSSStyleDeclaration[not-in-charge](WebCore::CSSRule*)	
	0.0%	0.0%	WebCore	WebCore::CSSParser::parseColor(WebCore::Value*)	
	0.0%	0.0%	WebCore	WebCore::CanvasRenderingContext2D::lineTo(float, float)	
	0.0%	0.0%	JavaScriptCore	KJS::ArrayInstance::~ArrayInstance [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::Document::ownerElement() const	
	0.0%	0.0%	WebCore	WebCore::CSSPrimitiveValue::cleanup()	
	0.0%	0.0%	WebCore	WebCore::CSSParser::createFloatingValueList()	
	0.0%	0.0%	WebCore	KJS::JSGlobalObject::isGlobalObject() const	
	0.0%	0.0%	JavaScriptCore	KJS::ArrayInstance::lengthGetter(KJS::ExecState*, KJS::JSObject*, KJS::Identifier const&amp;, KJS::PropertySlot const&amp;)	
	0.0%	0.0%	WebCore	WebCore::String::String[not-in-charge](unsigned short const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::JSDOMWindow::impl() const	
	0.0%	0.0%	WebCore	WebCore::equal(WebCore::StringImpl const*, char const*)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedString::DeprecatedString[not-in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CSSPrimitiveValue::cssValueType() const	
	0.0%	0.0%	WebCore	WebCore::CSSMutableStyleDeclaration::~CSSMutableStyleDeclaration [in-charge deleting]()	
	0.0%	0.0%	WebCore	WebCore::CanvasRenderingContext2D::drawingContext() const	
	0.0%	0.0%	WebCore	KJS::ScriptInterpreter::markDOMNodesForDocument(WebCore::Document*)	
	0.0%	0.0%	JavaScriptCore	KJS::NumberNode::evaluate(KJS::ExecState*)	
	0.0%	0.0%	WebCore	WTF::HashSet&lt;WebCore::ValueList*, WTF::PtrHash&lt;WebCore::ValueList*&gt;, WTF::HashTraits&lt;WebCore::ValueList*&gt; &gt;::add(WebCore::ValueList* const&amp;)	
	0.0%	0.0%	WebCore	WebCore::HTMLCanvasElement::willDraw(WebCore::FloatRect const&amp;)	
	0.0%	0.0%	WebCore	WebCore::GraphicsContext::platformContext() const	
	0.0%	0.0%	WebCore	WebCore::FrameView::repaintRectangle(WebCore::IntRect const&amp;, bool)	
	0.0%	0.0%	WebCore	WebCore::deprecatedString(WebCore::ParseString const&amp;)	
	0.0%	0.0%	WebCore	WebCore::CSSParser::clearProperties()	
	0.0%	0.0%	WebCore	WebCore::CSSParser::addProperty(int, WTF::PassRefPtr&lt;WebCore::CSSValue&gt;, bool)	
	0.0%	0.0%	JavaScriptCore	KJS::JSVariableObject::mark()	
	0.0%	0.0%	WebCore	WTF::Vector&lt;WTF::RefPtr&lt;WebCore::CSSRuleList&gt;, (unsigned long)0&gt;::shrink(unsigned long)	
	0.0%	0.0%	WebCore	WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::deallocateTable(int*, int)	
	0.0%	0.0%	WebCore	WebCore::StringImpl::init(unsigned short const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::RenderBox::height() const	
	0.0%	0.0%	WebCore	WebCore::FloatSize::FloatSize[not-in-charge](_NSSize const&amp;)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedValueListImpl::DeprecatedValueListImpl[not-in-charge](void (*)(WebCore::DeprecatedValueListImplNode*), WebCore::DeprecatedValueListImplNode* (*)(WebCore::DeprecatedValueListImplNode*))	
	0.0%	0.0%	WebCore	WebCore::DeprecatedValueListImpl::DeprecatedValueListImpl[in-charge](void (*)(WebCore::DeprecatedValueListImplNode*), WebCore::DeprecatedValueListImplNode* (*)(WebCore::DeprecatedValueListImplNode*))	
	0.0%	0.0%	WebCore	WebCore::DeprecatedString::DeprecatedString[in-charge](WebCore::DeprecatedChar const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::CSSParser::~CSSParser [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration[not-in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration[in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CanvasStyle::CanvasStyle[not-in-charge](WebCore::String const&amp;)	
	0.0%	0.0%	JavaScriptCore	KJS::ResolveNode::evaluate(KJS::ExecState*)	
	0.0%	0.0%	JavaScriptCore	KJS::JSGlobalObject::mark()	
	0.0%	0.0%	WebKit	-[WebHTMLView isFlipped]	
	0.0%	0.0%	WebCore	WTF::Vector&lt;WTF::RefPtr&lt;WebCore::StyleBase&gt;, (unsigned long)0&gt;::shrink(unsigned long)	
	0.0%	0.0%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::ShrinkCache(int, bool)	
	0.0%	0.0%	WebCore	WTF::HashSet&lt;WebCore::Function*, WTF::PtrHash&lt;WebCore::Function*&gt;, WTF::HashTraits&lt;WebCore::Function*&gt; &gt;::add(WebCore::Function* const&amp;)	
	0.0%	0.0%	WebCore	WebCore::StyleBase::isStyleSheet() const	
	0.0%	0.0%	WebCore	WebCore::stopSharedTimer()	
	0.0%	0.0%	WebCore	WebCore::RenderObject::borderTopExtra() const	
	0.0%	0.0%	WebCore	WebCore::RenderFlow::hasColumns() const	
	0.0%	0.0%	WebCore	WebCore::IntRect::operator _NSRect() const	
	0.0%	0.0%	WebCore	WebCore::freeHandle(WebCore::DeprecatedStringData**)	
	0.0%	0.0%	WebCore	WebCore::FloatRect::FloatRect[not-in-charge](_NSRect const&amp;)	
	0.0%	0.0%	WebCore	WebCore::FloatRect::FloatRect[in-charge](_NSRect const&amp;)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedStringData::~DeprecatedStringData [not-in-charge]()	
	0.0%	0.0%	WebCore	WebCore::DeprecatedStringData::~DeprecatedStringData [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CSSParser::sinkFloatingValue(WebCore::Value&amp;)	
	0.0%	0.0%	WebCore	WebCore::CSSParser::createFloatingFunction()	
	0.0%	0.0%	WebCore	WebCore::CSSParser::checkForOrphanedUnits()	
	0.0%	0.0%	WebCore	void WTF::deleteAllValues&lt;WebCore::CSSSelector*, WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; const&gt;(WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt; const&amp;)	
	0.0%	0.0%	WebCore	KJS::JSObject::isActivationObject()	
	0.0%	0.0%	WebKit	-[WebClipView hasAdditionalClip]	
	0.0%	0.0%	WebCore	WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::remove(int*)	
	0.0%	0.0%	WebCore	WebCore::String::String[in-charge](KJS::UString const&amp;)	
	0.0%	0.0%	WebCore	WebCore::RenderView::computeAbsoluteRepaintRect(WebCore::IntRect&amp;, bool)	
	0.0%	0.0%	WebCore	WebCore::RenderObject::isTable() const	
	0.0%	0.0%	WebCore	WebCore::Path::moveTo(WebCore::FloatPoint const&amp;)	
	0.0%	0.0%	WebCore	WebCore::makeRGB(int, int, int)	
	0.0%	0.0%	WebCore	WebCore::JSCanvasRenderingContext2D::setFillStyle(KJS::ExecState*, KJS::JSValue*)	
	0.0%	0.0%	WebCore	WebCore::FloatRect::FloatRect[not-in-charge](CGRect const&amp;)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedValueListImpl::~DeprecatedValueListImpl [not-in-charge]()	
	0.0%	0.0%	WebCore	WebCore::DeprecatedValueListImpl::~DeprecatedValueListImpl [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::DeprecatedString::~DeprecatedString [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CSSPrimitiveValue::CSSPrimitiveValue[in-charge](unsigned)	
	0.0%	0.0%	WebCore	WebCore::CanvasRenderingContext2D::willDraw(WebCore::FloatRect const&amp;)	
	0.0%	0.0%	JavaScriptCore	KJS::StringNode::evaluate(KJS::ExecState*)	
	0.0%	0.0%	WebKit	-[WebHTMLView drawRect:]	
	0.0%	0.0%	JavaScriptCore	WTF::TCMalloc_PageHeap::IncrementalScavenge(unsigned long)	
	0.0%	0.0%	WebCore	WTF::HashTable&lt;int, int, WTF::IdentityExtractor&lt;int&gt;, WTF::IntHash&lt;int&gt;, WTF::HashTraits&lt;int&gt;, WTF::HashTraits&lt;int&gt; &gt;::allocateTable(int)	
	0.0%	0.0%	WebCore	WebCore::ScheduledAction::execute(KJS::Window*)	
	0.0%	0.0%	WebCore	WebCore::RenderView::isRenderView() const	
	0.0%	0.0%	WebCore	WebCore::RenderObject::borderBottomExtra() const	
	0.0%	0.0%	WebCore	WebCore::RenderBox::width() const	
	0.0%	0.0%	WebCore	WebCore::JSCanvasRenderingContext2DPrototypeFunctionSave::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.0%	0.0%	WebCore	WebCore::getPropertyID(char const*, int)	
	0.0%	0.0%	WebCore	WebCore::FloatRect::operator _NSRect() const	
	0.0%	0.0%	WebCore	WebCore::FloatRect::FloatRect[in-charge](CGRect const&amp;)	
	0.0%	0.0%	WebCore	WebCore::FloatPoint::FloatPoint[not-in-charge](_NSPoint const&amp;)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedValueListImpl::Private::deleteList(WebCore::DeprecatedValueListImplNode*)	
	0.0%	0.0%	WebCore	WebCore::CSSPrimitiveValue::CSSPrimitiveValue[not-in-charge](unsigned)	
	0.0%	0.0%	WebCore	WebCore::CSSParser::CSSParser[in-charge](bool)	
	0.0%	0.0%	WebCore	WebCore::ContainerNode::virtualFirstChild() const	
	0.0%	0.0%	WebCore	WebCore::Color::parseHexColor(WebCore::String const&amp;, unsigned&amp;)	
	0.0%	0.0%	WebCore	WebCore::CanvasRenderingContext2D::moveTo(float, float)	
	0.0%	0.0%	WebCore	WebCore::CanvasRenderingContext2D::beginPath()	
	0.0%	0.0%	JavaScriptCore	KJS::NumberImp::toPrimitive(KJS::ExecState*, KJS::JSType) const	
	0.0%	0.0%	JavaScriptCore	KJS::MathObjectImp::getOwnPropertySlot(KJS::ExecState*, KJS::Identifier const&amp;, KJS::PropertySlot&amp;)	
	0.0%	0.0%	JavaScriptCore	KJS::ArrayInstance::compactForSorting()	
	0.0%	0.0%	WebCore	WebCore::ValueList::~ValueList [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::timerFired(__CFRunLoopTimer*, void*)	
	0.0%	0.0%	WebCore	WebCore::StringImpl::~StringImpl [in-charge]()	
	0.0%	0.0%	WebCore	WebCore::StringImpl::StringImpl[not-in-charge](unsigned short const*, unsigned)	
	0.0%	0.0%	WebCore	WebCore::String::characters() const	
	0.0%	0.0%	WebCore	WebCore::setCGFillColor(CGContext*, WebCore::Color const&amp;)	
	0.0%	0.0%	WebCore	WebCore::ScrollView::contentsHeight() const	
	0.0%	0.0%	WebCore	WebCore::RenderObject::hasControlClip() const	
	0.0%	0.0%	WebCore	WebCore::RenderFlow::paintLines(WebCore::RenderObject::PaintInfo&amp;, int, int)	
	0.0%	0.0%	WebCore	WebCore::RenderBox::paintRootBoxDecorations(WebCore::RenderObject::PaintInfo&amp;, int, int)	
	0.0%	0.0%	WebCore	WebCore::RenderBlock::overflowLeft(bool) const	
	0.0%	0.0%	WebCore	WebCore::RenderBlock::MarginInfo::MarginInfo[not-in-charge](WebCore::RenderBlock*, int, int)	
	0.0%	0.0%	WebCore	WebCore::Path::Path[not-in-charge](WebCore::Path const&amp;)	
	0.0%	0.0%	WebCore	WebCore::Path::isEmpty() const	
	0.0%	0.0%	WebCore	WebCore::Node::virtualFirstChild() const	
	0.0%	0.0%	WebCore	WebCore::Node::traverseNextNode(WebCore::Node const*) const	
	0.0%	0.0%	WebCore	WebCore::JSNode::mark()	
	0.0%	0.0%	WebCore	WebCore::JSDocument::mark()	
	0.0%	0.0%	WebCore	WebCore::InlineBox::paint(WebCore::RenderObject::PaintInfo&amp;, int, int)	
	0.0%	0.0%	WebCore	WebCore::HTMLTokenizer::write(WebCore::SegmentedString const&amp;, bool)	
	0.0%	0.0%	WebCore	WebCore::FrameLoader::client() const	
	0.0%	0.0%	WebCore	WebCore::Frame::dragCaretController() const	
	0.0%	0.0%	WebCore	WebCore::Frame::document() const	
	0.0%	0.0%	WebCore	WebCore::Font::drawGlyphs(WebCore::GraphicsContext*, WebCore::FontData const*, WebCore::GlyphBuffer const&amp;, int, int, WebCore::FloatPoint const&amp;) const	
	0.0%	0.0%	WebCore	WebCore::FloatSize::FloatSize[in-charge](CGSize const&amp;)	
	0.0%	0.0%	WebCore	WebCore::FloatSize::FloatSize[in-charge](_NSSize const&amp;)	
	0.0%	0.0%	WebCore	WebCore::FloatPoint::FloatPoint[in-charge](CGPoint const&amp;)	
	0.0%	0.0%	WebCore	WebCore::DeprecatedString::DeprecatedString[in-charge]()	
	0.0%	0.0%	WebCore	WebCore::CanvasStyle::CanvasStyle[in-charge](WebCore::String const&amp;)	
	0.0%	0.0%	JavaScriptCore	KJS::NativeErrorImp::mark()	
	0.0%	0.0%	JavaScriptCore	KJS::MathProtoFuncSin::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&amp;)	
	0.0%	0.0%	JavaScriptCore	KJS::JSWrapperObject::mark()	
	0.0%	0.0%	JavaScriptCore	KJS::JSLock::registerThread()	
	0.0%	0.0%	JavaScriptCore	KJS::FunctionImp::~FunctionImp [in-charge]()	
	0.0%	0.0%	JavaScriptCore	KJS::ExecState::mark()	
	0.0%	0.0%	JavaScriptCore	KJS::Collector::collect()	
	0.0%	0.0%	WebKit	core(WebFrame*)	
	0.0%	0.0%	WebKit	-[WebHTMLView(WebPrivate) viewWillDraw]	
	0.0%	0.0%	WebKit	-[WebHTMLView(WebHTMLViewFileInternal) _isTopHTMLView]	
	0.0%	0.0%	WebKit	-[WebHTMLView respondsToSelector:]	
	0.0%	0.0%	WebKit	-[WebFrameView documentView]	
	0.0%	0.0%	WebKit	-[_WebSafeForwarder forwardInvocation:]	

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72886</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-03-06 02:47:34 -0800</bug_when>
    <thetext>Indeed we are slow, but, well, by my measurements ToT is faster than firefox nightlies as of a couple of days ago, and Opera weeklies...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238595</commentid>
    <comment_count>4</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-06-15 15:59:11 -0700</bug_when>
    <thetext>After 2 years of inattention, we&apos;re up to 27fps on shipping Safari 5. Is that fast enough to close this bug out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238596</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-06-15 16:03:25 -0700</bug_when>
    <thetext>I suspect we should sample this and get an up to date idea of where perf is being consumed, on my mac book pro this only gets 15-20fps.  I am sure we can do better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266566</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-08-18 23:32:54 -0700</bug_when>
    <thetext>The bottleneck here is CSSParser::parseColor()&apos;s handling of rgb() colors with percent values. There&apos;s no fast-path for those so it goes through cssyyparse(). Circa 30% of runtime is spent doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365963</commentid>
    <comment_count>7</comment_count>
      <attachid>85468</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-11 06:20:28 -0800</bug_when>
    <thetext>Created attachment 85468
proposed patch

With QtWebKit trunk on my Core i5 Linux machine without the patch I get 23-24 fps, and 35-36 fps with it on http://canvex.lazyilluminati.com/misc/3d.html.
In comparison on Chromium 9.0.597.107 I get 34-35 fps on Opera 11.01 I get 44-45 fps on this machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366012</commentid>
    <comment_count>8</comment_count>
      <attachid>85468</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-03-11 08:14:38 -0800</bug_when>
    <thetext>Comment on attachment 85468
proposed patch

Quoth CSS ( http://www.w3.org/TR/css3-color/#rgb-def ):

&quot;The format of an RGB value in the functional notation is ‘rgb(’ followed by a comma-separated list of three numerical values (either three integer values or three percentage values) followed by ‘)’.&quot; (And the same is basically repeated for rgba().)

Thus we should not allow mixing integer and percentage component values, i.e it should be either all integers, or all percentages.

The in-tree test css2.1/t040306-syntax-01-f.html covers mixing of RGB component types, and should fail with this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366386</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-11 15:49:08 -0800</bug_when>
    <thetext>Attachment 85468 did not build on mac:
Build output: http://queues.webkit.org/results/8135486</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366498</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 20:35:36 -0800</bug_when>
    <thetext>Attachment 85468 did not build on chromium:
Build output: http://queues.webkit.org/results/8131530</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366590</commentid>
    <comment_count>11</comment_count>
      <attachid>85596</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-12 09:38:02 -0800</bug_when>
    <thetext>Created attachment 85596
proposed patch

Do not allow mixing of percentage and integer values.

Thanks Andreas for pointing this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366591</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-12 09:50:33 -0800</bug_when>
    <thetext>Attachment 85596 did not build on mac:
Build output: http://queues.webkit.org/results/8132729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366592</commentid>
    <comment_count>13</comment_count>
      <attachid>85597</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-12 09:55:33 -0800</bug_when>
    <thetext>Created attachment 85597
proposed patch

Fix the Mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366596</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-12 10:30:55 -0800</bug_when>
    <thetext>Attachment 85596 did not build on chromium:
Build output: http://queues.webkit.org/results/8141735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367584</commentid>
    <comment_count>15</comment_count>
      <attachid>85597</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-15 02:34:41 -0700</bug_when>
    <thetext>Comment on attachment 85597
proposed patch

View in context: https://bugs.webkit.org/attachment.cgi?id=85597&amp;action=review

I got excited about this patch, but I&apos;m too tired to finish reviewing it.

&gt; Source/WebCore/css/CSSParser.cpp:3922
&gt; +        bytes[i] = string[i];

I would put a static_cast here to emphasize the change in type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368319</commentid>
    <comment_count>16</comment_count>
      <attachid>85925</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-16 06:44:09 -0700</bug_when>
    <thetext>Created attachment 85925
updated patch

Update patch to ToT and use static_cast for explicit type conversion in parseDoubleIfValid.
Thanks Adam for taking a look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369179</commentid>
    <comment_count>17</comment_count>
      <attachid>85925</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-17 11:24:35 -0700</bug_when>
    <thetext>Comment on attachment 85925
updated patch

This patch looks correct to me, but I don&apos;t really know this code that well.  I&apos;d feel better if someone who knows the CSS parser better did the final review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369679</commentid>
    <comment_count>18</comment_count>
      <attachid>86172</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-18 09:47:19 -0700</bug_when>
    <thetext>Created attachment 86172
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369729</commentid>
    <comment_count>19</comment_count>
      <attachid>86172</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-18 11:04:05 -0700</bug_when>
    <thetext>Comment on attachment 86172
updated patch

View in context: https://bugs.webkit.org/attachment.cgi?id=86172&amp;action=review

I think we need some more test cases beyond the ones added here. I don’t think the test cases cover all the branches in the code. For example, I don’t see any test cases with multiple periods and a percentage sign or with any other illegal characters.

&gt; Source/WebCore/css/CSSParser.cpp:3901
&gt; +static inline int parseDoubleIfValid(const UChar* string, const UChar* end, UChar terminator, double&amp; value)

I think it’s unclear that this function result is the number of characters consumed. There should be a comment saying so.

I don’t think it makes sense to mark this function inline. It’s called in three different places and it’s pretty long too.

&gt; Source/WebCore/css/CSSParser.cpp:3933
&gt; +    if (processedLength) {
&gt; +        value = 0.0;
&gt; +        bytes[processedLength] = static_cast&lt;char&gt;(terminator);
&gt; +        bytes[processedLength + 1] = &apos;\0&apos;;
&gt; +        char* foundTerminator;
&gt; +        value = WTF::strtod(bytes.data(), &amp;foundTerminator);
&gt; +        return (*foundTerminator == static_cast&lt;char&gt;(terminator)) ? processedLength : 0;
&gt; +    }
&gt; +    return 0;

This should use early return instead of putting all the code inside an if.

It’s not a good idea to cast a UChar into a char. If the terminator is guaranteed to be an ASCII character, then it should be passed in to this function as a char, not a UChar. If it’s not, then this code won’t work.

Does this code really need to use WTF::strtod?

&gt; Source/WebCore/css/CSSParser.cpp:3936
&gt; +static inline bool parseColorIntOrPercentage(const UChar*&amp; string, const UChar* end, UChar terminator, CSSPrimitiveValue::UnitTypes&amp; expect, int&amp; value)

I don’t think it makes sense to mark a function inline that’s this long and called in so many places.

&gt; Source/WebCore/css/CSSParser.cpp:3939
&gt; +    double localValue = 0.0;

We normally just say 0, not 0.0.

&gt; Source/WebCore/css/CSSParser.cpp:3982
&gt; +        localValue =  localValue / 100.0 * 256.0;

There’s an extra space here. Multiplying by 256 is wrong. You should multiply by nextafter(256, 0).

&gt; Source/WebCore/css/CSSParser.cpp:3984
&gt; +        if (localValue &gt; 255)
&gt; +            localValue = 255;

This probably wouldn’t be necessary if we multiplied by the right value. Unless we allow percentage values over 100.

&gt; Source/WebCore/css/CSSParser.cpp:4034
&gt; +        double d;

Can you use a word name for this local variable rather than just &quot;d&quot;?

&gt; Source/WebCore/css/CSSParser.cpp:4035
&gt; +        if (parseDoubleIfValid(string, end, terminator, d)) {

This code does significant extra work that it didn’t before, including calling strtod. That doesn’t seem good for performance.

&gt; Source/WebCore/css/CSSParser.cpp:4062
&gt; +    double d = 0.0;
&gt; +    if (parseDoubleIfValid(string, end, terminator, d)) {
&gt; +        value = negative ? 0 : static_cast&lt;int&gt;(d * nextafter(256.0, 0.0));
&gt; +        string = end;
&gt; +        return true;
&gt; +    }
&gt; +    return false;

Can you use a word name for this local variable rather than just &quot;d&quot;? Not sure why you are initializing it.

This should be early return style, not “nest the success case inside an if” style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370408</commentid>
    <comment_count>20</comment_count>
      <attachid>86322</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-21 09:15:31 -0700</bug_when>
    <thetext>Created attachment 86322
proposed patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370416</commentid>
    <comment_count>21</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-21 09:28:35 -0700</bug_when>
    <thetext>(In reply to comment #19)

Thanks for the comprehensive review.

&gt; I think we need some more test cases beyond the ones added here. I don’t think the test cases cover all the branches in the code. For example, I don’t see any test cases with multiple periods and a percentage sign or with any other illegal characters.

Added some cases to test consistency in case of illegal combinations.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:3901
&gt; &gt; +static inline int parseDoubleIfValid(const UChar* string, const UChar* end, UChar terminator, double&amp; value)
&gt; 
&gt; I think it’s unclear that this function result is the number of characters consumed. There should be a comment saying so.

Added comments.

&gt; 
&gt; I don’t think it makes sense to mark this function inline. It’s called in three different places and it’s pretty long too.

Removed inline.

&gt; It’s not a good idea to cast a UChar into a char. If the terminator is guaranteed to be an ASCII character, then it should be passed in to this function as a char, not a UChar. If it’s not, then this code won’t work.
&gt; 
&gt; Does this code really need to use WTF::strtod?

I think it is much more safe to use strtod than trying to implement it here.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:3936
&gt; &gt; +static inline bool parseColorIntOrPercentage(const UChar*&amp; string, const UChar* end, UChar terminator, CSSPrimitiveValue::UnitTypes&amp; expect, int&amp; value)
&gt; 
&gt; I don’t think it makes sense to mark a function inline that’s this long and called in so many places.
&gt; 

Removed inline.

&gt; &gt; Source/WebCore/css/CSSParser.cpp:3939
&gt; &gt; +    double localValue = 0.0;
&gt; 
&gt; We normally just say 0, not 0.0.
&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:3982
&gt; &gt; +        localValue =  localValue / 100.0 * 256.0;
&gt; 
&gt; There’s an extra space here. Multiplying by 256 is wrong. You should multiply by nextafter(256, 0).

If I use nextafter here I get wrong values because the double is casted to int at the end. (For example for 50% using nextafter gives a value of 127 instead of 128)

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:3984
&gt; &gt; +        if (localValue &gt; 255)
&gt; &gt; +            localValue = 255;
&gt; 
&gt; This probably wouldn’t be necessary if we multiplied by the right value. Unless we allow percentage values over 100.

We need to check the value here because the percentageg need to be clamped to the 0-100 intervall to retain consistency.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:4034
&gt; &gt; +        double d;
&gt; 
&gt; Can you use a word name for this local variable rather than just &quot;d&quot;?
&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:4035
&gt; &gt; +        if (parseDoubleIfValid(string, end, terminator, d)) {
&gt; 
&gt; This code does significant extra work that it didn’t before, including calling strtod. That doesn’t seem good for performance.

I changed the code to have a separate isValidDouble function.

&gt; 
&gt; &gt; Source/WebCore/css/CSSParser.cpp:4062
&gt; &gt; +    double d = 0.0;
&gt; &gt; +    if (parseDoubleIfValid(string, end, terminator, d)) {
&gt; &gt; +        value = negative ? 0 : static_cast&lt;int&gt;(d * nextafter(256.0, 0.0));
&gt; &gt; +        string = end;
&gt; &gt; +        return true;
&gt; &gt; +    }
&gt; &gt; +    return false;
&gt; 
&gt; Can you use a word name for this local variable rather than just &quot;d&quot;? Not sure why you are initializing it.

I need to initialize it because on chromium it fails to build without initializing the value, because of a compiler warning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370419</commentid>
    <comment_count>22</comment_count>
      <attachid>86325</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-21 09:32:23 -0700</bug_when>
    <thetext>Created attachment 86325
proposed patch v2

Using early return, in parseAlphaValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370424</commentid>
    <comment_count>23</comment_count>
      <attachid>86326</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-21 09:44:48 -0700</bug_when>
    <thetext>Created attachment 86326
proposed patch v2 with layout test

Mixing of percentage and numeric values is already covered by css2.1/t040306-syntax-01-f.html, as Andreas pointed out earlier, so the added cases should explicitly test invalid combinations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371510</commentid>
    <comment_count>24</comment_count>
      <attachid>86486</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-22 11:38:14 -0700</bug_when>
    <thetext>Created attachment 86486
proposed patch v3

- Avoid using strtod, and add result of new test cases to the expected file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373500</commentid>
    <comment_count>25</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-25 07:41:14 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Created an attachment (id=86486) [details]
&gt; proposed patch v3
&gt; 
&gt; - Avoid using strtod, and add result of new test cases to the expected file.

This patch still applies.
Darin, could you take a look at this approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375504</commentid>
    <comment_count>26</comment_count>
      <attachid>86486</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-29 10:41:20 -0700</bug_when>
    <thetext>Comment on attachment 86486
proposed patch v3

View in context: https://bugs.webkit.org/attachment.cgi?id=86486&amp;action=review

&gt; Source/WebCore/css/CSSParser.cpp:3904
&gt; +// Returns the number of characters which form a valid double
&gt; +// and are terminated by the given terminator character
&gt; +static int isValidDouble(const UChar* string, const UChar* end, const char terminator)

Given that this returns the number of characters, the function name should probably be something that doesn’t make it sound like it returns a boolean.

&gt; Source/WebCore/css/CSSParser.cpp:3964
&gt; +    unsigned scale = 1;
&gt; +
&gt; +    while (position &lt; length &amp;&amp; scale &lt; MAX_SCALE) {
&gt; +        fraction = fraction * 10 + string[position++] - &apos;0&apos;;
&gt; +        scale *= 10;
&gt; +    }
&gt; +
&gt; +    value = localValue + (fraction / static_cast&lt;double&gt;(scale));

It seems that &quot;scale&quot; should be a double here instead of unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375511</commentid>
    <comment_count>27</comment_count>
      <attachid>86486</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-29 10:44:40 -0700</bug_when>
    <thetext>Comment on attachment 86486
proposed patch v3

Setting cq- to address Darins suggestions, landing by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375633</commentid>
    <comment_count>28</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-29 12:01:53 -0700</bug_when>
    <thetext>This change appears to have broken the Windows 7 Release Tests:

http://build.webkit.org/builders/Windows%207%20Release%20%28Tests%29/builds/10932
http://build.webkit.org/results/Windows%207%20Release%20(Tests)/r82284%20(10933)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375649</commentid>
    <comment_count>29</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-29 12:11:58 -0700</bug_when>
    <thetext>And Snow Leopard:

http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r82289%20(27421)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375717</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-29 13:46:07 -0700</bug_when>
    <thetext>Andras, are you going to fix the failing tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375728</commentid>
    <comment_count>31</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-03-29 13:57:27 -0700</bug_when>
    <thetext>I rolled out the original patch, the unreviewed fix and the chromium expected results: http://trac.webkit.org/changeset/82315

Andras can check this fail tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376190</commentid>
    <comment_count>32</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-30 04:42:33 -0700</bug_when>
    <thetext>I&apos;m investigating the roundig issue and relanding it with the fix later.
Since we now calculate everything in double and cast to int at the very end, it seems that the value is rounded incorrectly.

Thanks Ossy for taking care of the rollout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377234</commentid>
    <comment_count>33</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-03-31 09:28:12 -0700</bug_when>
    <thetext>Re-landed in http://trac.webkit.org/changeset/82464.
Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85468</attachid>
            <date>2011-03-11 06:20:28 -0800</date>
            <delta_ts>2011-03-12 09:38:02 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-BUG-16708-CSS-Slow-parsing-of-rgb-with-percent-value.patch</filename>
            <type>text/plain</type>
            <size>9559</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAxMTE5OWNhZjAyZTMxZGY2MDM5M2EyYTdiMTIzOTdjNmVlMjg3OGRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFiZWNzaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDExIE1hciAyMDExIDE1OjAyOjA5ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gW0JVRyAx
NjcwOF0gQ1NTOiBTbG93IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZhbHVlcy4KCi0t
LQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDEzICsrKwogLi4uL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMgICAg
ICAgfCAgICA4ICsrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTcgKysrCiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCAgICAg
ICAgICAgICAgICAgICB8ICAxMTIgKysrKysrKysrKysrKy0tLS0tLS0KIDQgZmlsZXMgY2hhbmdl
ZCwgMTEyIGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjNTg0MTkyLi5l
MGVjNTQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMtMTEgIEFuZHJhcyBCZWNzaSAg
PGFiZWNzaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENTUzogU2xvdyBwYXJzaW5nIG9mIHJnYigpIHdpdGggcGVyY2VudCB2YWx1
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA4
CisKKyAgICAgICAgSW1wbGVtZW50IGZhc3QtcGF0aCBwYXJzaW5nIGZvciBwZXJjZW50YWdlIGNv
bG9yIHZhbHVlcy4KKworICAgICAgICBHYWluIH4zMCUgc3BlZWR1cCBvbiBodHRwOi8vY2FudmV4
LmxhenlpbGx1bWluYXRpLmNvbS9taXNjLzNkLmh0bWwuCisKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzOiBBZGQgdGVzdCBjYXNlcyB0byB0ZXN0IHRo
ZSBuZXcgY29kZSBwYXRoLgorCiAyMDExLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5n
LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5q
cwppbmRleCBjZTEwZDM4Li4zZDAxODFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3NjcmlwdC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMKQEAgLTEyLDYgKzEyLDE0IEBAIGZ1
bmN0aW9uIHBhcnNlKHJnYmEpIHsKICAgICByZXR1cm4gIlJHQkFbIiArIGRhdGFbMF0gKyAiLCAi
ICsgZGF0YVsxXSArICIsICIgKyBkYXRhWzJdICsgIiwgIiArIGRhdGFbM10gKyAiXSI7CiB9CiAK
K3Nob3VsZEJlKCJwYXJzZSgncmdiYSgwJSwgMCUsIDAlLCAxKScpIiwgIidSR0JBWzAsIDAsIDAs
IDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTAuMCUsIDUwLjAlLCA1MC4wJSwgMSkn
KSIsICInUkdCQVsxMjgsIDEyOCwgMTI4LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2Jh
KDEwMCUsIDEwMCUsIDEwMCUsIDEpJykiLCAiJ1JHQkFbMjU1LCAyNTUsIDI1NSwgMjU1XSciKTsK
K3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMC41JSwgODAlLCA3MCUsIDEpJykiLCAiJ1JHQkFbMjYs
IDIwNCwgMTc5LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDU1LjUlLCAwLjUlLCAx
MTAlLCAxKScpIiwgIidSR0JBWzE0MiwgMSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNl
KCdyZ2JhKDYwLjU5OTk4JSwgMC41OTk5OSUsIDExMC4xMjM0NSUsIDEpJykiLCAiJ1JHQkFbMTU1
LCAxLCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAuOTk5JSwgMC45OTkl
LCAwLjAwMDAwOSUsIDEpJykiLCAiJ1JHQkFbMjgsIDIsIDAsIDI1NV0nIik7CitzaG91bGRCZSgi
cGFyc2UoJ3JnYmEoNzkuOTk5OTklLCA5OS45OTk5OSUsIDUwMCUsIDEpJykiLCAiJ1JHQkFbMjA0
LCAyNTUsIDI1NSwgMjU1XSciKTsKIHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAwLCAwLCAtMC4x
MCknKSIsICInUkdCQVswLCAwLCAwLCAwXSciKTsKIHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAw
LCAwLCAtNS4wKScpIiwgIidSR0JBWzAsIDAsIDAsIDBdJyIpOwogc2hvdWxkQmUoInBhcnNlKCdy
Z2JhKDAsIDAsIDAsIDUuMCknKSIsICInUkdCQVswLCAwLCAwLCAyNTVdJyIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDE4NjhmZDEuLmJlOGVhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0w
My0xMSAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTOiBTbG93IHBhcnNpbmcgb2Ygcmdi
KCkgd2l0aCBwZXJjZW50IHZhbHVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY3MDgKKworICAgICAgICBJbXBsZW1lbnQgZmFzdC1wYXRoIHBhcnNp
bmcgZm9yIHBlcmNlbnRhZ2UgY29sb3IgdmFsdWVzLgorCisgICAgICAgIEdhaW4gfjMwJSBzcGVl
ZHVwIG9uIGh0dHA6Ly9jYW52ZXgubGF6eWlsbHVtaW5hdGkuY29tL21pc2MvM2QuaHRtbC4KKwor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEb3Vi
bGVJZlZhbGlkKTogRXh0ZW5kIGlzVmFsaWREb3VibGUgdG8gcGFyc2UgdGhlIGRvdWJsZSB2YWx1
ZSBpZiB2YWxpZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2Up
OiBFeHRlbmQgcGFyc2VDb2xvckludCB0byBkZWFsIHdpdGggcGVyY2VudGFnZSB2YWx1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlQWxwaGFWYWx1ZSk6IFVzZSB0aGUgbmV3IGZ1bmN0aW9ucy4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6IERpdHRvLgorCiAyMDEx
LTAzLTExICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4
IDU1ODg3MGEuLjU4NjgxZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMzg1Mywx
MCArMzg1Myw0NSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9ySW50
KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9y
LCBpbnQmIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgcGFyc2VEb3VibGVJZlZhbGlkKGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGRvdWJs
ZSYgdmFsdWUpCit7CisgICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKKyAgICBpZiAobGVu
Z3RoIDwgMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBWZWN0b3I8Y2hhciwgOD4gYnl0ZXMo
bGVuZ3RoICsgMSk7CisgICAgYm9vbCBkZWNpbWFsTWFya1NlZW4gPSBmYWxzZTsKKyAgICBpbnQg
cHJvY2Vzc2VkTGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJtaW5hdG9yKSB7CisgICAgICAgICAg
ICBwcm9jZXNzZWRMZW5ndGggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgaWYgKCFk
ZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKKyAgICAgICAgICAgICAgICBkZWNp
bWFsTWFya1NlZW4gPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIGJ5dGVzW2ldID0gc3RyaW5nW2ldOworICAgIH0K
KworICAgIGlmIChwcm9jZXNzZWRMZW5ndGgpIHsKKyAgICAgICAgdmFsdWUgPSAwLjA7CisgICAg
ICAgIGJ5dGVzW3Byb2Nlc3NlZExlbmd0aF0gPSB0ZXJtaW5hdG9yOworICAgICAgICBieXRlc1tw
cm9jZXNzZWRMZW5ndGggKyAxXSA9ICdcMCc7CisgICAgICAgIGNoYXIqIGZvdW5kVGVybWluYXRv
cjsKKyAgICAgICAgdmFsdWUgPSBXVEY6OnN0cnRvZChieXRlcy5kYXRhKCksICZmb3VuZFRlcm1p
bmF0b3IpOworICAgICAgICByZXR1cm4gKCpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcikg
PyBwcm9jZXNzZWRMZW5ndGggOiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY29uc3QgVUNoYXIqJiBzdHJp
bmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGludCYgdmFsdWUpCiB7CiAg
ICAgY29uc3QgVUNoYXIqIGN1cnJlbnQgPSBzdHJpbmc7Ci0gICAgaW50IGxvY2FsVmFsdWUgPSAw
OworICAgIGRvdWJsZSBsb2NhbFZhbHVlID0gMC4wOwogICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxz
ZTsKICAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQog
ICAgICAgICBjdXJyZW50Kys7CkBAIC0zODc3LDEyICszOTEyLDMzIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBwYXJzZUNvbG9ySW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5k
LCBVQ2hhciB0CiAgICAgICAgIH0KICAgICAgICAgbG9jYWxWYWx1ZSA9IG5ld1ZhbHVlOwogICAg
IH0KKworICAgIGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBw
YXJzZWQgdGhlIGludGVncmFsIHBhcnQsIHRyeSB0byBwYXJzZQorICAgICAgICAvLyB0aGUgZnJh
Y3Rpb24gcGFydCBvZiB0aGUgcGVyY2VudGFnZSB2YWx1ZS4KKyAgICAgICAgZG91YmxlIHBlcmNl
bnRhZ2U7CisgICAgICAgIGludCBwYXJzZWQgPSBwYXJzZURvdWJsZUlmVmFsaWQoY3VycmVudCwg
ZW5kLCAnJScsIHBlcmNlbnRhZ2UpOworICAgICAgICBpZiAoIXBhcnNlZCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgY3VycmVudCArPSBwYXJzZWQ7CisgICAgICAgIGlmICgq
Y3VycmVudCAhPSAnJScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2Fs
VmFsdWUgKz0gcGVyY2VudGFnZTsKKyAgICB9CisKKyAgICBpZiAoKmN1cnJlbnQgPT0gJyUnKSB7
CisgICAgICAgIGxvY2FsVmFsdWUgPSAgbG9jYWxWYWx1ZSAvIDEwMC4wICogMjU2LjA7CisgICAg
ICAgIGlmIChsb2NhbFZhbHVlID4gMjU1KQorICAgICAgICAgICAgbG9jYWxWYWx1ZSA9IDI1NTsK
KyAgICAgICAgY3VycmVudCsrOworICAgIH0KKwogICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAm
JiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCiAgICAgICAgIGN1cnJlbnQrKzsKICAgICBpZiAoY3Vy
cmVudCA9PSBlbmQgfHwgKmN1cnJlbnQrKyAhPSB0ZXJtaW5hdG9yKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgLy8gQ2xhbXAgbmVnYXRpdmUgdmFsdWVzIGF0IHplcm8uCi0gICAgdmFsdWUg
PSBuZWdhdGl2ZSA/IDAgOiBsb2NhbFZhbHVlOworICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDog
c3RhdGljX2Nhc3Q8aW50Pihsb2NhbFZhbHVlKTsKICAgICBzdHJpbmcgPSBjdXJyZW50OwogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMzkwMCwyMCArMzk1Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc1RlbnRoQWxwaGEoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgaW50IGxlbmd0aCkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRG91YmxlKGNv
bnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IGludCBsZW5ndGgpCi17Ci0gICAgYm9vbCBkZWNpbWFs
TWFya1NlZW4gPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KHN0cmluZ1tpXSkpIHsKLSAgICAgICAgICAgIGlm
ICghZGVjaW1hbE1hcmtTZWVuICYmIHN0cmluZ1tpXSA9PSAnLicpCi0gICAgICAgICAgICAgICAg
ZGVjaW1hbE1hcmtTZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJpbmcs
IGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGludCYgdmFsdWUpCiB7CiAgICAg
d2hpbGUgKHN0cmluZyAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKnN0cmluZykpCkBAIC0zOTM2LDcg
KzM5NzgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFy
KiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhcgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoc3RyaW5nWzBdICE9ICcwJyAmJiBzdHJpbmdbMF0gIT0gJzEnICYmIHN0cmlu
Z1swXSAhPSAnLicpIHsKLSAgICAgICAgaWYgKGlzVmFsaWREb3VibGUoc3RyaW5nLCBsZW5ndGgg
LSAxKSkgeworICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgaWYgKHBhcnNlRG91YmxlSWZWYWxp
ZChzdHJpbmcsIGVuZCwgdGVybWluYXRvciwgZCkpIHsKICAgICAgICAgICAgIHZhbHVlID0gbmVn
YXRpdmUgPyAwIDogMjU1OwogICAgICAgICAgICAgc3RyaW5nID0gZW5kOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0zOTU3LDIwICs0MDAwLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBw
YXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVD
aGFyCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghaXNWYWxpZERvdWJs
ZShzdHJpbmcsIGxlbmd0aCAtIDEpKQotICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3Rv
cjxjaGFyLCA4PiBieXRlcyhsZW5ndGggKyAxKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgIGJ5dGVzW2ldID0gc3RyaW5nW2ldOwotCi0gICAgYnl0ZXNb
bGVuZ3RoXSA9ICdcMCc7Ci0gICAgY2hhciogZm91bmRUZXJtaW5hdG9yOwotICAgIGRvdWJsZSBk
ID0gV1RGOjpzdHJ0b2QoYnl0ZXMuZGF0YSgpLCAmZm91bmRUZXJtaW5hdG9yKTsKLSAgICB2YWx1
ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oZCAqIG5leHRhZnRlcigyNTYuMCwg
MC4wKSk7Ci0gICAgc3RyaW5nICs9IChmb3VuZFRlcm1pbmF0b3IgLSBieXRlcy5kYXRhKCkpICsg
MTsKLSAgICByZXR1cm4gKmZvdW5kVGVybWluYXRvciA9PSB0ZXJtaW5hdG9yOworICAgIGRvdWJs
ZSBkOworICAgIGlmIChwYXJzZURvdWJsZUlmVmFsaWQoc3RyaW5nLCBlbmQsIHRlcm1pbmF0b3Is
IGQpKSB7CisgICAgICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDogc3RhdGljX2Nhc3Q8aW50Pihk
ICogbmV4dGFmdGVyKDI1Ni4wLCAwLjApKTsKKyAgICAgICAgc3RyaW5nID0gZW5kOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgbWlnaHRCZVJHQkEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKQEAgLTQwMTcsMTEgKzQwNTMsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3Io
Y29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAgIGlu
dCBncmVlbjsKICAgICAgICAgaW50IGJsdWU7CiAgICAgICAgIGludCBhbHBoYTsKLSAgICAgICAg
aWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQorICAgICAgICBpZiAo
IXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIHJlZCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50
LCBlbmQsICcsJywgZ3JlZW4pKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UoY3VycmVudCwgZW5kLCAnLCcsIGdyZWVuKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBibHVlKSkKKyAg
ICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBi
bHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFwYXJzZUFscGhh
VmFsdWUoY3VycmVudCwgZW5kLCAnKScsIGFscGhhKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQwMzgsMTEgKzQwNzQsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29u
c3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAgIGludCBy
ZWQ7CiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50IGJsdWU7Ci0gICAgICAgIGlmICgh
cGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcsJywgcmVkKSkKKyAgICAgICAgaWYgKCFwYXJz
ZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5k
LCAnLCcsIGdyZWVuKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1
cnJlbnQsIGVuZCwgJywnLCBncmVlbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcpJywgYmx1ZSkpCisgICAgICAg
IGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcpJywgYmx1ZSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLS0gCjEuNy40LjEKCg==
</data>
<flag name="review"
          id="77600"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85596</attachid>
            <date>2011-03-12 09:38:02 -0800</date>
            <delta_ts>2011-03-12 09:55:33 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug16708.patch</filename>
            <type>text/plain</type>
            <size>10329</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAxOThiMzg1ZmUzYThjN2Q4ZmFjNWQxNzU3NGVjMmQ5MTMyMGQ0NjdjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFiZWNzaUB3ZWJraXQub3JnPgpEYXRl
OiBTYXQsIDEyIE1hciAyMDExIDE4OjI3OjQ2ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gW0JVRyAx
NjcwOF0gQ1NTOiBTbG93IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZhbHVlcwoKLS0t
CiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKysKIC4uLi9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzICAgICAg
IHwgICAgOCArKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDE3ICsrKwogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgICAgICAg
ICAgICAgICAgICAgfCAgMTIyICsrKysrKysrKysrKysrLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQs
IDEyMiBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2VlNWFkZS4uNzQz
ODA4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTEyICBBbmRyYXMgQmVjc2kgIDxh
YmVjc2lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDU1M6IFNsb3cgcGFyc2luZyBvZiByZ2IoKSB3aXRoIHBlcmNlbnQgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjcwOAor
CisgICAgICAgIEltcGxlbWVudCBmYXN0LXBhdGggcGFyc2luZyBmb3IgcGVyY2VudGFnZSBjb2xv
ciB2YWx1ZXMuCisKKyAgICAgICAgR2FpbiB+MzAlIHNwZWVkdXAgb24gaHR0cDovL2NhbnZleC5s
YXp5aWxsdW1pbmF0aS5jb20vbWlzYy8zZC5odG1sLgorCisgICAgICAgICogZmFzdC9jYW52YXMv
c2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qczogQWRkIHRlc3QgY2FzZXMgdG8gdGVzdCB0aGUg
bmV3IGNvZGUgcGF0aC4KKwogMjAxMS0wMy0xMiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVXBkYXRlIGNocm9taXVtIHRlc3Qg
ZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0
LXRlc3RzL3JnYmEtcGFyc2luZy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10
ZXN0cy9yZ2JhLXBhcnNpbmcuanMKaW5kZXggY2UxMGQzOC4uM2QwMTgxZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qcworKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCkBA
IC0xMiw2ICsxMiwxNCBAQCBmdW5jdGlvbiBwYXJzZShyZ2JhKSB7CiAgICAgcmV0dXJuICJSR0JB
WyIgKyBkYXRhWzBdICsgIiwgIiArIGRhdGFbMV0gKyAiLCAiICsgZGF0YVsyXSArICIsICIgKyBk
YXRhWzNdICsgIl0iOwogfQogCitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMCUsIDAlLCAwJSwgMSkn
KSIsICInUkdCQVswLCAwLCAwLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDUwLjAl
LCA1MC4wJSwgNTAuMCUsIDEpJykiLCAiJ1JHQkFbMTI4LCAxMjgsIDEyOCwgMjU1XSciKTsKK3No
b3VsZEJlKCJwYXJzZSgncmdiYSgxMDAlLCAxMDAlLCAxMDAlLCAxKScpIiwgIidSR0JBWzI1NSwg
MjU1LCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAuNSUsIDgwJSwgNzAl
LCAxKScpIiwgIidSR0JBWzI2LCAyMDQsIDE3OSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgn
cmdiYSg1NS41JSwgMC41JSwgMTEwJSwgMSknKSIsICInUkdCQVsxNDIsIDEsIDI1NSwgMjU1XSci
KTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSg2MC41OTk5OCUsIDAuNTk5OTklLCAxMTAuMTIzNDUl
LCAxKScpIiwgIidSR0JBWzE1NSwgMSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdy
Z2JhKDEwLjk5OSUsIDAuOTk5JSwgMC4wMDAwMDklLCAxKScpIiwgIidSR0JBWzI4LCAyLCAwLCAy
NTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDc5Ljk5OTk5JSwgOTkuOTk5OTklLCA1MDAl
LCAxKScpIiwgIidSR0JBWzIwNCwgMjU1LCAyNTUsIDI1NV0nIik7CiBzaG91bGRCZSgicGFyc2Uo
J3JnYmEoMCwgMCwgMCwgLTAuMTApJykiLCAiJ1JHQkFbMCwgMCwgMCwgMF0nIik7CiBzaG91bGRC
ZSgicGFyc2UoJ3JnYmEoMCwgMCwgMCwgLTUuMCknKSIsICInUkdCQVswLCAwLCAwLCAwXSciKTsK
IHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAwLCAwLCA1LjApJykiLCAiJ1JHQkFbMCwgMCwgMCwg
MjU1XSciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDQxNzJkLi5iMTk1ZWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMDMtMTIgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzog
U2xvdyBwYXJzaW5nIG9mIHJnYigpIHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVt
ZW50IGZhc3QtcGF0aCBwYXJzaW5nIGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAg
ICAgICBHYWluIH4zMCUgc3BlZWR1cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNv
bS9taXNjLzNkLmh0bWwuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlRG91YmxlSWZWYWxpZCk6IEV4dGVuZCBpc1ZhbGlkRG91YmxlIHRvIHBh
cnNlIHRoZSBkb3VibGUgdmFsdWUgaWYgdmFsaWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNv
bG9ySW50T3JQZXJjZW50YWdlKTogRXh0ZW5kIHBhcnNlQ29sb3JJbnQgdG8gZGVhbCB3aXRoIHBl
cmNlbnRhZ2UgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFscGhhVmFsdWUpOiBVc2Ug
dGhlIG5ldyBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29s
b3IpOiBEaXR0by4KKwogMjAxMS0wMy0xMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjgwOTE5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA1MzdmY2FjLi5jNzM1NjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcApAQCAtMzg5OCwxMCArMzg5OCw0NSBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9ySW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBV
Q2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQorc3RhdGljIGlubGluZSBp
bnQgcGFyc2VEb3VibGVJZlZhbGlkKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBl
bmQsIFVDaGFyIHRlcm1pbmF0b3IsIGRvdWJsZSYgdmFsdWUpCit7CisgICAgaW50IGxlbmd0aCA9
IGVuZCAtIHN0cmluZzsKKyAgICBpZiAobGVuZ3RoIDwgMSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBWZWN0b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMSk7CisgICAgYm9vbCBkZWNpbWFs
TWFya1NlZW4gPSBmYWxzZTsKKyAgICBpbnQgcHJvY2Vzc2VkTGVuZ3RoID0gMDsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ1tpXSA9
PSB0ZXJtaW5hdG9yKSB7CisgICAgICAgICAgICBwcm9jZXNzZWRMZW5ndGggPSBpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5n
W2ldKSkgeworICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09
ICcuJykKKyAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGJ5
dGVzW2ldID0gc3RyaW5nW2ldOworICAgIH0KKworICAgIGlmIChwcm9jZXNzZWRMZW5ndGgpIHsK
KyAgICAgICAgdmFsdWUgPSAwLjA7CisgICAgICAgIGJ5dGVzW3Byb2Nlc3NlZExlbmd0aF0gPSB0
ZXJtaW5hdG9yOworICAgICAgICBieXRlc1twcm9jZXNzZWRMZW5ndGggKyAxXSA9ICdcMCc7Cisg
ICAgICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKKyAgICAgICAgdmFsdWUgPSBXVEY6OnN0cnRv
ZChieXRlcy5kYXRhKCksICZmb3VuZFRlcm1pbmF0b3IpOworICAgICAgICByZXR1cm4gKCpmb3Vu
ZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcikgPyBwcm9jZXNzZWRMZW5ndGggOiAwOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIHBhcnNlQ29sb3JJbnRPclBl
cmNlbnRhZ2UoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRl
cm1pbmF0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2YWx1
ZSkKIHsKICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKLSAgICBpbnQgbG9jYWxW
YWx1ZSA9IDA7CisgICAgZG91YmxlIGxvY2FsVmFsdWUgPSAwLjA7CiAgICAgYm9vbCBuZWdhdGl2
ZSA9IGZhbHNlOwogICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3Vy
cmVudCkpCiAgICAgICAgIGN1cnJlbnQrKzsKQEAgLTM5MjIsMTIgKzM5NTcsNDEgQEAgc3RhdGlj
IGlubGluZSBib29sIHBhcnNlQ29sb3JJbnQoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVD
aGFyKiBlbmQsIFVDaGFyIHQKICAgICAgICAgfQogICAgICAgICBsb2NhbFZhbHVlID0gbmV3VmFs
dWU7CiAgICAgfQorCisgICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiAmJiAoKmN1cnJlbnQgPT0gJy4nIHx8ICpjdXJyZW50ID09ICclJykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAgICAgICAgLy8gV2Ug
YWxyZWFkeSBwYXJzZWQgdGhlIGludGVncmFsIHBhcnQsIHRyeSB0byBwYXJzZQorICAgICAgICAv
LyB0aGUgZnJhY3Rpb24gcGFydCBvZiB0aGUgcGVyY2VudGFnZSB2YWx1ZS4KKyAgICAgICAgZG91
YmxlIHBlcmNlbnRhZ2U7CisgICAgICAgIGludCBwYXJzZWQgPSBwYXJzZURvdWJsZUlmVmFsaWQo
Y3VycmVudCwgZW5kLCAnJScsIHBlcmNlbnRhZ2UpOworICAgICAgICBpZiAoIXBhcnNlZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY3VycmVudCArPSBwYXJzZWQ7CisgICAg
ICAgIGlmICgqY3VycmVudCAhPSAnJScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGxvY2FsVmFsdWUgKz0gcGVyY2VudGFnZTsKKyAgICB9CisKKyAgICBpZiAoZXhwZWN0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiAqY3VycmVudCAhPSAnJScpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgqY3VycmVudCA9PSAnJScpIHsKKyAgICAg
ICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOworICAgICAgICBs
b2NhbFZhbHVlID0gIGxvY2FsVmFsdWUgLyAxMDAuMCAqIDI1Ni4wOworICAgICAgICBpZiAobG9j
YWxWYWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIGxvY2FsVmFsdWUgPSAyNTU7CisgICAgICAgIGN1
cnJlbnQrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVI7CisKICAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3BhY2Uo
KmN1cnJlbnQpKQogICAgICAgICBjdXJyZW50Kys7CiAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8
ICpjdXJyZW50KysgIT0gdGVybWluYXRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IENsYW1wIG5lZ2F0aXZlIHZhbHVlcyBhdCB6ZXJvLgotICAgIHZhbHVlID0gbmVnYXRpdmUgPyAw
IDogbG9jYWxWYWx1ZTsKKyAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGlu
dD4obG9jYWxWYWx1ZSk7CiAgICAgc3RyaW5nID0gY3VycmVudDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTM5NDUsMjAgKzQwMDksNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNUZW50aEFscGhh
KGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IGludCBsZW5ndGgpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERvdWJsZShjb25zdCBVQ2hhciogc3Ry
aW5nLCBjb25zdCBpbnQgbGVuZ3RoKQotewotICAgIGJvb2wgZGVjaW1hbE1hcmtTZWVuID0gZmFs
c2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAo
IWlzQVNDSUlEaWdpdChzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAgICBpZiAoIWRlY2ltYWxNYXJr
U2VlbiAmJiBzdHJpbmdbaV0gPT0gJy4nKQotICAgICAgICAgICAgICAgIGRlY2ltYWxNYXJrU2Vl
biA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW5saW5l
IGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciog
ZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQogewogICAgIHdoaWxlIChzdHJpbmcg
IT0gZW5kICYmIGlzSFRNTFNwYWNlKCpzdHJpbmcpKQpAQCAtMzk4MSw3ICs0MDMxLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciomIHN0cmluZywgY29u
c3QgVUNoYXIqIGVuZCwgVUNoYXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0
cmluZ1swXSAhPSAnMCcgJiYgc3RyaW5nWzBdICE9ICcxJyAmJiBzdHJpbmdbMF0gIT0gJy4nKSB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkRG91YmxlKHN0cmluZywgbGVuZ3RoIC0gMSkpIHsKKyAgICAg
ICAgZG91YmxlIGQ7CisgICAgICAgIGlmIChwYXJzZURvdWJsZUlmVmFsaWQoc3RyaW5nLCBlbmQs
IHRlcm1pbmF0b3IsIGQpKSB7CiAgICAgICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IDI1
NTsKICAgICAgICAgICAgIHN0cmluZyA9IGVuZDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNDAwMiwyMCArNDA1MywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVl
KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhcgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIWlzVmFsaWREb3VibGUoc3RyaW5nLCBsZW5n
dGggLSAxKSkKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Y2hhciwgOD4gYnl0
ZXMobGVuZ3RoICsgMSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQot
ICAgICAgICBieXRlc1tpXSA9IHN0cmluZ1tpXTsKLQotICAgIGJ5dGVzW2xlbmd0aF0gPSAnXDAn
OwotICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKLSAgICBkb3VibGUgZCA9IFdURjo6c3RydG9k
KGJ5dGVzLmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7Ci0gICAgdmFsdWUgPSBuZWdhdGl2ZSA/
IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGQgKiBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCkpOwotICAgIHN0
cmluZyArPSAoZm91bmRUZXJtaW5hdG9yIC0gYnl0ZXMuZGF0YSgpKSArIDE7Ci0gICAgcmV0dXJu
ICpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcjsKKyAgICBkb3VibGUgZCA9IDAuMDsKKyAg
ICBpZiAocGFyc2VEb3VibGVJZlZhbGlkKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yLCBkKSkgewor
ICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oZCAqIG5leHRh
ZnRlcigyNTYuMCwgMC4wKSk7CisgICAgICAgIHN0cmluZyA9IGVuZDsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IG1pZ2h0QmVSR0JBKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCkBA
IC00MDQzLDYgKzQwODcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJp
bmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsKICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5h
bWUubGVuZ3RoKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBleHBlY3QgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CiAKICAgICBpZiAoIXN0cmljdCAmJiBsZW5n
dGggPj0gMykgewogICAgICAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKQEAgLTQwNjIsMTEgKzQx
MDcsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nICZuYW1lLCBS
R0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50
IGJsdWU7CiAgICAgICAgIGludCBhbHBoYTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1
cnJlbnQsIGVuZCwgJywnLCByZWQpKQorCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVy
Y2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcs
IGdyZWVuKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQs
IGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBibHVlKSkKKyAgICAg
ICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBl
Y3QsIGJsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIXBhcnNl
QWxwaGFWYWx1ZShjdXJyZW50LCBlbmQsICcpJywgYWxwaGEpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNDA4MywxMSArNDEyOSwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xv
cihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKICAgICAgICAg
aW50IHJlZDsKICAgICAgICAgaW50IGdyZWVuOwogICAgICAgICBpbnQgYmx1ZTsKLSAgICAgICAg
aWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQorICAgICAgICBpZiAo
IXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgcmVk
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50
KGN1cnJlbnQsIGVuZCwgJywnLCBncmVlbikpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9y
UGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQs
ICcpJywgYmx1ZSkpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJy
ZW50LCBlbmQsICcpJywgZXhwZWN0LCBibHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
LSAKMS43LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85597</attachid>
            <date>2011-03-12 09:55:33 -0800</date>
            <delta_ts>2011-03-16 06:44:09 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug16708.patch</filename>
            <type>text/plain</type>
            <size>10335</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAxOThiMzg1ZmUzYThjN2Q4ZmFjNWQxNzU3NGVjMmQ5MTMyMGQ0NjdjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFiZWNzaUB3ZWJraXQub3JnPgpEYXRl
OiBTYXQsIDEyIE1hciAyMDExIDE4OjI3OjQ2ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gW0JVRyAx
NjcwOF0gQ1NTOiBTbG93IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZhbHVlcwoKLS0t
CiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKysKIC4uLi9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzICAgICAg
IHwgICAgOCArKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDE3ICsrKwogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgICAgICAg
ICAgICAgICAgICAgfCAgMTIyICsrKysrKysrKysrKysrLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQs
IDEyMiBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2VlNWFkZS4uNzQz
ODA4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTEyICBBbmRyYXMgQmVjc2kgIDxh
YmVjc2lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDU1M6IFNsb3cgcGFyc2luZyBvZiByZ2IoKSB3aXRoIHBlcmNlbnQgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjcwOAor
CisgICAgICAgIEltcGxlbWVudCBmYXN0LXBhdGggcGFyc2luZyBmb3IgcGVyY2VudGFnZSBjb2xv
ciB2YWx1ZXMuCisKKyAgICAgICAgR2FpbiB+MzAlIHNwZWVkdXAgb24gaHR0cDovL2NhbnZleC5s
YXp5aWxsdW1pbmF0aS5jb20vbWlzYy8zZC5odG1sLgorCisgICAgICAgICogZmFzdC9jYW52YXMv
c2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qczogQWRkIHRlc3QgY2FzZXMgdG8gdGVzdCB0aGUg
bmV3IGNvZGUgcGF0aC4KKwogMjAxMS0wMy0xMiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVXBkYXRlIGNocm9taXVtIHRlc3Qg
ZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0
LXRlc3RzL3JnYmEtcGFyc2luZy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10
ZXN0cy9yZ2JhLXBhcnNpbmcuanMKaW5kZXggY2UxMGQzOC4uM2QwMTgxZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qcworKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCkBA
IC0xMiw2ICsxMiwxNCBAQCBmdW5jdGlvbiBwYXJzZShyZ2JhKSB7CiAgICAgcmV0dXJuICJSR0JB
WyIgKyBkYXRhWzBdICsgIiwgIiArIGRhdGFbMV0gKyAiLCAiICsgZGF0YVsyXSArICIsICIgKyBk
YXRhWzNdICsgIl0iOwogfQogCitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMCUsIDAlLCAwJSwgMSkn
KSIsICInUkdCQVswLCAwLCAwLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDUwLjAl
LCA1MC4wJSwgNTAuMCUsIDEpJykiLCAiJ1JHQkFbMTI4LCAxMjgsIDEyOCwgMjU1XSciKTsKK3No
b3VsZEJlKCJwYXJzZSgncmdiYSgxMDAlLCAxMDAlLCAxMDAlLCAxKScpIiwgIidSR0JBWzI1NSwg
MjU1LCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAuNSUsIDgwJSwgNzAl
LCAxKScpIiwgIidSR0JBWzI2LCAyMDQsIDE3OSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgn
cmdiYSg1NS41JSwgMC41JSwgMTEwJSwgMSknKSIsICInUkdCQVsxNDIsIDEsIDI1NSwgMjU1XSci
KTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSg2MC41OTk5OCUsIDAuNTk5OTklLCAxMTAuMTIzNDUl
LCAxKScpIiwgIidSR0JBWzE1NSwgMSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdy
Z2JhKDEwLjk5OSUsIDAuOTk5JSwgMC4wMDAwMDklLCAxKScpIiwgIidSR0JBWzI4LCAyLCAwLCAy
NTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDc5Ljk5OTk5JSwgOTkuOTk5OTklLCA1MDAl
LCAxKScpIiwgIidSR0JBWzIwNCwgMjU1LCAyNTUsIDI1NV0nIik7CiBzaG91bGRCZSgicGFyc2Uo
J3JnYmEoMCwgMCwgMCwgLTAuMTApJykiLCAiJ1JHQkFbMCwgMCwgMCwgMF0nIik7CiBzaG91bGRC
ZSgicGFyc2UoJ3JnYmEoMCwgMCwgMCwgLTUuMCknKSIsICInUkdCQVswLCAwLCAwLCAwXSciKTsK
IHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAwLCAwLCA1LjApJykiLCAiJ1JHQkFbMCwgMCwgMCwg
MjU1XSciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDQxNzJkLi5iMTk1ZWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMDMtMTIgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzog
U2xvdyBwYXJzaW5nIG9mIHJnYigpIHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVt
ZW50IGZhc3QtcGF0aCBwYXJzaW5nIGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAg
ICAgICBHYWluIH4zMCUgc3BlZWR1cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNv
bS9taXNjLzNkLmh0bWwuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlRG91YmxlSWZWYWxpZCk6IEV4dGVuZCBpc1ZhbGlkRG91YmxlIHRvIHBh
cnNlIHRoZSBkb3VibGUgdmFsdWUgaWYgdmFsaWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNv
bG9ySW50T3JQZXJjZW50YWdlKTogRXh0ZW5kIHBhcnNlQ29sb3JJbnQgdG8gZGVhbCB3aXRoIHBl
cmNlbnRhZ2UgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFscGhhVmFsdWUpOiBVc2Ug
dGhlIG5ldyBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29s
b3IpOiBEaXR0by4KKwogMjAxMS0wMy0xMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjgwOTE5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA1MzdmY2FjLi5jNzM1NjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcApAQCAtMzg5OCwxMCArMzg5OCw0NSBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9ySW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBV
Q2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQorc3RhdGljIGlubGluZSBp
bnQgcGFyc2VEb3VibGVJZlZhbGlkKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBl
bmQsIFVDaGFyIHRlcm1pbmF0b3IsIGRvdWJsZSYgdmFsdWUpCit7CisgICAgaW50IGxlbmd0aCA9
IGVuZCAtIHN0cmluZzsKKyAgICBpZiAobGVuZ3RoIDwgMSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBWZWN0b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMSk7CisgICAgYm9vbCBkZWNpbWFs
TWFya1NlZW4gPSBmYWxzZTsKKyAgICBpbnQgcHJvY2Vzc2VkTGVuZ3RoID0gMDsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ1tpXSA9
PSB0ZXJtaW5hdG9yKSB7CisgICAgICAgICAgICBwcm9jZXNzZWRMZW5ndGggPSBpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5n
W2ldKSkgeworICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09
ICcuJykKKyAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGJ5
dGVzW2ldID0gc3RyaW5nW2ldOworICAgIH0KKworICAgIGlmIChwcm9jZXNzZWRMZW5ndGgpIHsK
KyAgICAgICAgdmFsdWUgPSAwLjA7CisgICAgICAgIGJ5dGVzW3Byb2Nlc3NlZExlbmd0aF0gPSB0
ZXJtaW5hdG9yOworICAgICAgICBieXRlc1twcm9jZXNzZWRMZW5ndGggKyAxXSA9ICdcMCc7Cisg
ICAgICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKKyAgICAgICAgdmFsdWUgPSBXVEY6OnN0cnRv
ZChieXRlcy5kYXRhKCksICZmb3VuZFRlcm1pbmF0b3IpOworICAgICAgICByZXR1cm4gKCpmb3Vu
ZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcikgPyBwcm9jZXNzZWRMZW5ndGggOiAwOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIHBhcnNlQ29sb3JJbnRPclBl
cmNlbnRhZ2UoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRl
cm1pbmF0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2YWx1
ZSkKIHsKICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKLSAgICBpbnQgbG9jYWxW
YWx1ZSA9IDA7CisgICAgZG91YmxlIGxvY2FsVmFsdWUgPSAwLjA7CiAgICAgYm9vbCBuZWdhdGl2
ZSA9IGZhbHNlOwogICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3Vy
cmVudCkpCiAgICAgICAgIGN1cnJlbnQrKzsKQEAgLTM5MjIsMTIgKzM5NTcsNDEgQEAgc3RhdGlj
IGlubGluZSBib29sIHBhcnNlQ29sb3JJbnQoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVD
aGFyKiBlbmQsIFVDaGFyIHQKICAgICAgICAgfQogICAgICAgICBsb2NhbFZhbHVlID0gbmV3VmFs
dWU7CiAgICAgfQorCisgICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUiAmJiAoKmN1cnJlbnQgPT0gJy4nIHx8ICpjdXJyZW50ID09ICclJykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAgICAgICAgLy8gV2Ug
YWxyZWFkeSBwYXJzZWQgdGhlIGludGVncmFsIHBhcnQsIHRyeSB0byBwYXJzZQorICAgICAgICAv
LyB0aGUgZnJhY3Rpb24gcGFydCBvZiB0aGUgcGVyY2VudGFnZSB2YWx1ZS4KKyAgICAgICAgZG91
YmxlIHBlcmNlbnRhZ2UgPSAwLjA7CisgICAgICAgIGludCBwYXJzZWQgPSBwYXJzZURvdWJsZUlm
VmFsaWQoY3VycmVudCwgZW5kLCAnJScsIHBlcmNlbnRhZ2UpOworICAgICAgICBpZiAoIXBhcnNl
ZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY3VycmVudCArPSBwYXJzZWQ7
CisgICAgICAgIGlmICgqY3VycmVudCAhPSAnJScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGxvY2FsVmFsdWUgKz0gcGVyY2VudGFnZTsKKyAgICB9CisKKyAgICBpZiAoZXhw
ZWN0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiAqY3VycmVudCAhPSAn
JScpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgqY3VycmVudCA9PSAnJScpIHsK
KyAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOworICAg
ICAgICBsb2NhbFZhbHVlID0gIGxvY2FsVmFsdWUgLyAxMDAuMCAqIDI1Ni4wOworICAgICAgICBp
ZiAobG9jYWxWYWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIGxvY2FsVmFsdWUgPSAyNTU7CisgICAg
ICAgIGN1cnJlbnQrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVI7CisKICAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNIVE1M
U3BhY2UoKmN1cnJlbnQpKQogICAgICAgICBjdXJyZW50Kys7CiAgICAgaWYgKGN1cnJlbnQgPT0g
ZW5kIHx8ICpjdXJyZW50KysgIT0gdGVybWluYXRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIC8vIENsYW1wIG5lZ2F0aXZlIHZhbHVlcyBhdCB6ZXJvLgotICAgIHZhbHVlID0gbmVnYXRp
dmUgPyAwIDogbG9jYWxWYWx1ZTsKKyAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19j
YXN0PGludD4obG9jYWxWYWx1ZSk7CiAgICAgc3RyaW5nID0gY3VycmVudDsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTM5NDUsMjAgKzQwMDksNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNUZW50
aEFscGhhKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IGludCBsZW5ndGgpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERvdWJsZShjb25zdCBVQ2hh
ciogc3RyaW5nLCBjb25zdCBpbnQgbGVuZ3RoKQotewotICAgIGJvb2wgZGVjaW1hbE1hcmtTZWVu
ID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoIWlzQVNDSUlEaWdpdChzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAgICBpZiAoIWRlY2lt
YWxNYXJrU2VlbiAmJiBzdHJpbmdbaV0gPT0gJy4nKQotICAgICAgICAgICAgICAgIGRlY2ltYWxN
YXJrU2VlbiA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMg
aW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBV
Q2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQogewogICAgIHdoaWxlIChz
dHJpbmcgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpzdHJpbmcpKQpAQCAtMzk4MSw3ICs0MDMxLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciomIHN0cmlu
ZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKHN0cmluZ1swXSAhPSAnMCcgJiYgc3RyaW5nWzBdICE9ICcxJyAmJiBzdHJpbmdbMF0gIT0g
Jy4nKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlkRG91YmxlKHN0cmluZywgbGVuZ3RoIC0gMSkpIHsK
KyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlmIChwYXJzZURvdWJsZUlmVmFsaWQoc3RyaW5n
LCBlbmQsIHRlcm1pbmF0b3IsIGQpKSB7CiAgICAgICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8g
MCA6IDI1NTsKICAgICAgICAgICAgIHN0cmluZyA9IGVuZDsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtNDAwMiwyMCArNDA1MywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBo
YVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhcgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIWlzVmFsaWREb3VibGUoc3RyaW5n
LCBsZW5ndGggLSAxKSkKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Y2hhciwg
OD4gYnl0ZXMobGVuZ3RoICsgMSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICBieXRlc1tpXSA9IHN0cmluZ1tpXTsKLQotICAgIGJ5dGVzW2xlbmd0aF0g
PSAnXDAnOwotICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKLSAgICBkb3VibGUgZCA9IFdURjo6
c3RydG9kKGJ5dGVzLmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7Ci0gICAgdmFsdWUgPSBuZWdh
dGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGQgKiBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCkpOwot
ICAgIHN0cmluZyArPSAoZm91bmRUZXJtaW5hdG9yIC0gYnl0ZXMuZGF0YSgpKSArIDE7Ci0gICAg
cmV0dXJuICpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcjsKKyAgICBkb3VibGUgZCA9IDAu
MDsKKyAgICBpZiAocGFyc2VEb3VibGVJZlZhbGlkKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yLCBk
KSkgeworICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oZCAq
IG5leHRhZnRlcigyNTYuMCwgMC4wKSk7CisgICAgICAgIHN0cmluZyA9IGVuZDsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGlubGlu
ZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCkBAIC00MDQzLDYgKzQwODcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25z
dCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsKICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBleHBl
Y3QgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CiAKICAgICBpZiAoIXN0cmljdCAm
JiBsZW5ndGggPj0gMykgewogICAgICAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKQEAgLTQwNjIs
MTEgKzQxMDcsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nICZu
YW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAgIGludCBncmVlbjsKICAgICAg
ICAgaW50IGJsdWU7CiAgICAgICAgIGludCBhbHBoYTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9y
SW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQorCisgICAgICAgIGlmICghcGFyc2VDb2xvcklu
dE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5k
LCAnLCcsIGdyZWVuKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1
cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBibHVlKSkK
KyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywn
LCBleHBlY3QsIGJsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
IXBhcnNlQWxwaGFWYWx1ZShjdXJyZW50LCBlbmQsICcpJywgYWxwaGEpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNDA4MywxMSArNDEyOSwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKICAg
ICAgICAgaW50IHJlZDsKICAgICAgICAgaW50IGdyZWVuOwogICAgICAgICBpbnQgYmx1ZTsKLSAg
ICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQorICAgICAg
ICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVj
dCwgcmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNv
bG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBncmVlbikpCisgICAgICAgIGlmICghcGFyc2VDb2xv
ckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50
LCBlbmQsICcpJywgYmx1ZSkpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFn
ZShjdXJyZW50LCBlbmQsICcpJywgZXhwZWN0LCBibHVlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotLSAKMS43LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85925</attachid>
            <date>2011-03-16 06:44:09 -0700</date>
            <delta_ts>2011-03-18 09:47:19 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>0001-BUG-16708-CSS-Slow-parsing-of-rgb-with-percent-value.patch</filename>
            <type>text/plain</type>
            <size>10404</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSBjNDZkZDQ2MmY5ZmI0OWFmMTFhOTUzMGIwMjExM2QyOThhYTA2M2UzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFiZWNzaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDE2IE1hciAyMDExIDE0OjM0OjIzICswMTAwClN1YmplY3Q6IFtQQVRDSF0gW0JVRyAx
NjcwOF0gQ1NTOiBTbG93IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZhbHVlcwoKLS0t
CiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKysKIC4uLi9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzICAgICAg
IHwgICAgOCArKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDE3ICsrKwogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgICAgICAg
ICAgICAgICAgICAgfCAgMTIyICsrKysrKysrKysrKysrLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQs
IDEyMiBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzE4ZjZmMi4uN2U1
M2JmNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTE2ICBBbmRyYXMgQmVjc2kgIDxh
YmVjc2lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDU1M6IFNsb3cgcGFyc2luZyBvZiByZ2IoKSB3aXRoIHBlcmNlbnQgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjcwOAor
CisgICAgICAgIEltcGxlbWVudCBmYXN0LXBhdGggcGFyc2luZyBmb3IgcGVyY2VudGFnZSBjb2xv
ciB2YWx1ZXMuCisKKyAgICAgICAgR2FpbiB+MzAlIHNwZWVkdXAgb24gaHR0cDovL2NhbnZleC5s
YXp5aWxsdW1pbmF0aS5jb20vbWlzYy8zZC5odG1sLgorCisgICAgICAgICogZmFzdC9jYW52YXMv
c2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qczogQWRkIHRlc3QgY2FzZXMgdG8gdGVzdCB0aGUg
bmV3IGNvZGUgcGF0aC4KKwogMjAxMS0wMy0xNiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1XZWIgSW5zcGVjdG9yOiBpbnNwZWN0b3IvZWxlbWVu
dHMvbXV0YXRlLXVua25vd24tbm9kZS5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qcwppbmRleCBjZTEwZDM4Li4z
ZDAxODFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMv
cmdiYS1wYXJzaW5nLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0
cy9yZ2JhLXBhcnNpbmcuanMKQEAgLTEyLDYgKzEyLDE0IEBAIGZ1bmN0aW9uIHBhcnNlKHJnYmEp
IHsKICAgICByZXR1cm4gIlJHQkFbIiArIGRhdGFbMF0gKyAiLCAiICsgZGF0YVsxXSArICIsICIg
KyBkYXRhWzJdICsgIiwgIiArIGRhdGFbM10gKyAiXSI7CiB9CiAKK3Nob3VsZEJlKCJwYXJzZSgn
cmdiYSgwJSwgMCUsIDAlLCAxKScpIiwgIidSR0JBWzAsIDAsIDAsIDI1NV0nIik7CitzaG91bGRC
ZSgicGFyc2UoJ3JnYmEoNTAuMCUsIDUwLjAlLCA1MC4wJSwgMSknKSIsICInUkdCQVsxMjgsIDEy
OCwgMTI4LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDEwMCUsIDEwMCUsIDEwMCUs
IDEpJykiLCAiJ1JHQkFbMjU1LCAyNTUsIDI1NSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgn
cmdiYSgxMC41JSwgODAlLCA3MCUsIDEpJykiLCAiJ1JHQkFbMjYsIDIwNCwgMTc5LCAyNTVdJyIp
Oworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDU1LjUlLCAwLjUlLCAxMTAlLCAxKScpIiwgIidSR0JB
WzE0MiwgMSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDYwLjU5OTk4JSwg
MC41OTk5OSUsIDExMC4xMjM0NSUsIDEpJykiLCAiJ1JHQkFbMTU1LCAxLCAyNTUsIDI1NV0nIik7
CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAuOTk5JSwgMC45OTklLCAwLjAwMDAwOSUsIDEpJyki
LCAiJ1JHQkFbMjgsIDIsIDAsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNzkuOTk5
OTklLCA5OS45OTk5OSUsIDUwMCUsIDEpJykiLCAiJ1JHQkFbMjA0LCAyNTUsIDI1NSwgMjU1XSci
KTsKIHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAwLCAwLCAtMC4xMCknKSIsICInUkdCQVswLCAw
LCAwLCAwXSciKTsKIHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAwLCAwLCAtNS4wKScpIiwgIidS
R0JBWzAsIDAsIDAsIDBdJyIpOwogc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDAsIDAsIDAsIDUuMCkn
KSIsICInUkdCQVswLCAwLCAwLCAyNTVdJyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlmNTM5OWQuLjI1ZjBl
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wMy0xNiAgQW5kcmFzIEJlY3Np
ICA8YWJlY3NpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ1NTOiBTbG93IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZh
bHVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3
MDgKKworICAgICAgICBJbXBsZW1lbnQgZmFzdC1wYXRoIHBhcnNpbmcgZm9yIHBlcmNlbnRhZ2Ug
Y29sb3IgdmFsdWVzLgorCisgICAgICAgIEdhaW4gfjMwJSBzcGVlZHVwIG9uIGh0dHA6Ly9jYW52
ZXgubGF6eWlsbHVtaW5hdGkuY29tL21pc2MvM2QuaHRtbC4KKworICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEb3VibGVJZlZhbGlkKTogRXh0ZW5k
IGlzVmFsaWREb3VibGUgdG8gcGFyc2UgdGhlIGRvdWJsZSB2YWx1ZSBpZiB2YWxpZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UpOiBFeHRlbmQgcGFyc2VDb2xv
ckludCB0byBkZWFsIHdpdGggcGVyY2VudGFnZSB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlQWxwaGFWYWx1ZSk6IFVzZSB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6IERpdHRvLgorCiAyMDExLTAzLTE2ICBBbmRyZXkgQWRh
aWtpbiAgPGFhbmRyZXlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNl
bWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA1MzdmY2FjLi44MmJiYmQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMzg5OCwxMCArMzg5OCw0NSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9ySW50KGNvbnN0IFVDaGFyKiYgc3Ry
aW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQorc3Rh
dGljIGlubGluZSBpbnQgcGFyc2VEb3VibGVJZlZhbGlkKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNv
bnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGRvdWJsZSYgdmFsdWUpCit7CisgICAg
aW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKKyAgICBpZiAobGVuZ3RoIDwgMSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBWZWN0b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMSk7CisgICAg
Ym9vbCBkZWNpbWFsTWFya1NlZW4gPSBmYWxzZTsKKyAgICBpbnQgcHJvY2Vzc2VkTGVuZ3RoID0g
MDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYg
KHN0cmluZ1tpXSA9PSB0ZXJtaW5hdG9yKSB7CisgICAgICAgICAgICBwcm9jZXNzZWRMZW5ndGgg
PSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0FTQ0lJ
RGlnaXQoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYg
c3RyaW5nW2ldID09ICcuJykKKyAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisgICAgICAgIGJ5dGVzW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3RyaW5nW2ldKTsKKyAgICB9
CisKKyAgICBpZiAocHJvY2Vzc2VkTGVuZ3RoKSB7CisgICAgICAgIHZhbHVlID0gMC4wOworICAg
ICAgICBieXRlc1twcm9jZXNzZWRMZW5ndGhdID0gc3RhdGljX2Nhc3Q8Y2hhcj4odGVybWluYXRv
cik7CisgICAgICAgIGJ5dGVzW3Byb2Nlc3NlZExlbmd0aCArIDFdID0gJ1wwJzsKKyAgICAgICAg
Y2hhciogZm91bmRUZXJtaW5hdG9yOworICAgICAgICB2YWx1ZSA9IFdURjo6c3RydG9kKGJ5dGVz
LmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7CisgICAgICAgIHJldHVybiAoKmZvdW5kVGVybWlu
YXRvciA9PSBzdGF0aWNfY2FzdDxjaGFyPih0ZXJtaW5hdG9yKSkgPyBwcm9jZXNzZWRMZW5ndGgg
OiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIHBhcnNl
Q29sb3JJbnRPclBlcmNlbnRhZ2UoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBl
bmQsIFVDaGFyIHRlcm1pbmF0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVj
dCwgaW50JiB2YWx1ZSkKIHsKICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKLSAg
ICBpbnQgbG9jYWxWYWx1ZSA9IDA7CisgICAgZG91YmxlIGxvY2FsVmFsdWUgPSAwLjA7CiAgICAg
Ym9vbCBuZWdhdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0hU
TUxTcGFjZSgqY3VycmVudCkpCiAgICAgICAgIGN1cnJlbnQrKzsKQEAgLTM5MjIsMTIgKzM5NTcs
NDEgQEAgc3RhdGljIGlubGluZSBib29sIHBhcnNlQ29sb3JJbnQoY29uc3QgVUNoYXIqJiBzdHJp
bmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHQKICAgICAgICAgfQogICAgICAgICBsb2NhbFZh
bHVlID0gbmV3VmFsdWU7CiAgICAgfQorCisgICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiAmJiAoKmN1cnJlbnQgPT0gJy4nIHx8ICpjdXJyZW50ID09ICclJykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAg
ICAgICAgLy8gV2UgYWxyZWFkeSBwYXJzZWQgdGhlIGludGVncmFsIHBhcnQsIHRyeSB0byBwYXJz
ZQorICAgICAgICAvLyB0aGUgZnJhY3Rpb24gcGFydCBvZiB0aGUgcGVyY2VudGFnZSB2YWx1ZS4K
KyAgICAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAwLjA7CisgICAgICAgIGludCBwYXJzZWQgPSBw
YXJzZURvdWJsZUlmVmFsaWQoY3VycmVudCwgZW5kLCAnJScsIHBlcmNlbnRhZ2UpOworICAgICAg
ICBpZiAoIXBhcnNlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY3VycmVu
dCArPSBwYXJzZWQ7CisgICAgICAgIGlmICgqY3VycmVudCAhPSAnJScpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2FsVmFsdWUgKz0gcGVyY2VudGFnZTsKKyAgICB9CisK
KyAgICBpZiAoZXhwZWN0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiAq
Y3VycmVudCAhPSAnJScpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgqY3VycmVu
dCA9PSAnJScpIHsKKyAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFOworICAgICAgICBsb2NhbFZhbHVlID0gIGxvY2FsVmFsdWUgLyAxMDAuMCAqIDI1Ni4w
OworICAgICAgICBpZiAobG9jYWxWYWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIGxvY2FsVmFsdWUg
PSAyNTU7CisgICAgICAgIGN1cnJlbnQrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgZXhwZWN0ID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7CisKICAgICB3aGlsZSAoY3VycmVudCAhPSBl
bmQgJiYgaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQogICAgICAgICBjdXJyZW50Kys7CiAgICAgaWYg
KGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50KysgIT0gdGVybWluYXRvcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIC8vIENsYW1wIG5lZ2F0aXZlIHZhbHVlcyBhdCB6ZXJvLgotICAgIHZh
bHVlID0gbmVnYXRpdmUgPyAwIDogbG9jYWxWYWx1ZTsKKyAgICB2YWx1ZSA9IG5lZ2F0aXZlID8g
MCA6IHN0YXRpY19jYXN0PGludD4obG9jYWxWYWx1ZSk7CiAgICAgc3RyaW5nID0gY3VycmVudDsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NDUsMjAgKzQwMDksNiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNUZW50aEFscGhhKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IGludCBsZW5ndGgp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERvdWJs
ZShjb25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBpbnQgbGVuZ3RoKQotewotICAgIGJvb2wgZGVj
aW1hbE1hcmtTZWVuID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAg
ICBpZiAoIWRlY2ltYWxNYXJrU2VlbiAmJiBzdHJpbmdbaV0gPT0gJy4nKQotICAgICAgICAgICAg
ICAgIGRlY2ltYWxNYXJrU2VlbiA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCiBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3Ry
aW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQogewog
ICAgIHdoaWxlIChzdHJpbmcgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpzdHJpbmcpKQpAQCAtMzk4
MSw3ICs0MDMxLDggQEAgc3RhdGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBV
Q2hhciomIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHN0cmluZ1swXSAhPSAnMCcgJiYgc3RyaW5nWzBdICE9ICcxJyAmJiBz
dHJpbmdbMF0gIT0gJy4nKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlkRG91YmxlKHN0cmluZywgbGVu
Z3RoIC0gMSkpIHsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGlmIChwYXJzZURvdWJsZUlm
VmFsaWQoc3RyaW5nLCBlbmQsIHRlcm1pbmF0b3IsIGQpKSB7CiAgICAgICAgICAgICB2YWx1ZSA9
IG5lZ2F0aXZlID8gMCA6IDI1NTsKICAgICAgICAgICAgIHN0cmluZyA9IGVuZDsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDAwMiwyMCArNDA1MywxMyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5k
LCBVQ2hhcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIWlzVmFsaWRE
b3VibGUoc3RyaW5nLCBsZW5ndGggLSAxKSkKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBW
ZWN0b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICBieXRlc1tpXSA9IHN0cmluZ1tpXTsKLQotICAgIGJ5
dGVzW2xlbmd0aF0gPSAnXDAnOwotICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKLSAgICBkb3Vi
bGUgZCA9IFdURjo6c3RydG9kKGJ5dGVzLmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7Ci0gICAg
dmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGQgKiBuZXh0YWZ0ZXIoMjU2
LjAsIDAuMCkpOwotICAgIHN0cmluZyArPSAoZm91bmRUZXJtaW5hdG9yIC0gYnl0ZXMuZGF0YSgp
KSArIDE7Ci0gICAgcmV0dXJuICpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcjsKKyAgICBk
b3VibGUgZCA9IDAuMDsKKyAgICBpZiAocGFyc2VEb3VibGVJZlZhbGlkKHN0cmluZywgZW5kLCB0
ZXJtaW5hdG9yLCBkKSkgeworICAgICAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19j
YXN0PGludD4oZCAqIG5leHRhZnRlcigyNTYuMCwgMC4wKSk7CisgICAgICAgIHN0cmluZyA9IGVu
ZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAog
c3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCkBAIC00MDQzLDYgKzQwODcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsK
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyBleHBlY3QgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CiAKICAgICBp
ZiAoIXN0cmljdCAmJiBsZW5ndGggPj0gMykgewogICAgICAgICBpZiAobmFtZVswXSA9PSAnIycp
IHsKQEAgLTQwNjIsMTEgKzQxMDcsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29u
c3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAgIGludCBn
cmVlbjsKICAgICAgICAgaW50IGJsdWU7CiAgICAgICAgIGludCBhbHBoYTsKLSAgICAgICAgaWYg
KCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQorCisgICAgICAgIGlmICgh
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQo
Y3VycmVudCwgZW5kLCAnLCcsIGdyZWVuKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQ
ZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwg
JywnLCBibHVlKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJl
bnQsIGVuZCwgJywnLCBleHBlY3QsIGJsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIXBhcnNlQWxwaGFWYWx1ZShjdXJyZW50LCBlbmQsICcpJywgYWxwaGEpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA4MywxMSArNDEyOSwxMSBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29s
IHN0cmljdCkKICAgICAgICAgaW50IHJlZDsKICAgICAgICAgaW50IGdyZWVuOwogICAgICAgICBp
bnQgYmx1ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBy
ZWQpKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5k
LCAnLCcsIGV4cGVjdCwgcmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBncmVlbikpCisgICAgICAgIGlm
ICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBn
cmVlbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xv
ckludChjdXJyZW50LCBlbmQsICcpJywgYmx1ZSkpCisgICAgICAgIGlmICghcGFyc2VDb2xvcklu
dE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcpJywgZXhwZWN0LCBibHVlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotLSAKMS43LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86172</attachid>
            <date>2011-03-18 09:47:19 -0700</date>
            <delta_ts>2011-03-21 09:15:31 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>0001-BUG-16708-CSS-Slow-parsing-of-rgb-with-percent-value.patch</filename>
            <type>text/plain</type>
            <size>10053</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">Y29tbWl0IGJmYzIwOGVlYmVlNDk4MzczMWI5NTg3Y2I3ZmM5MGM4YjJjODBlOTcKQXV0aG9yOiBB
bmRyYXMgQmVjc2kgPGFiZWNzaUB3ZWJraXQub3JnPgpEYXRlOiAgIEZyaSBNYXIgMTggMTc6NDM6
NDUgMjAxMSArMDEwMAoKICAgIFtCVUcgMTY3MDhdIENTUzogU2xvdyBwYXJzaW5nIG9mIHJnYigp
IHdpdGggcGVyY2VudCB2YWx1ZXMKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWU2NmM5ZS4uZWYzYWU1ZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE2IEBACisyMDExLTAzLTE4ICBBbmRyYXMgQmVjc2kgIDxhYmVjc2lAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDU1M6
IFNsb3cgcGFyc2luZyBvZiByZ2IoKSB3aXRoIHBlcmNlbnQgdmFsdWVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjcwOAorCisgICAgICAgIEltcGxl
bWVudCBmYXN0LXBhdGggcGFyc2luZyBmb3IgcGVyY2VudGFnZSBjb2xvciB2YWx1ZXMuCisKKyAg
ICAgICAgR2FpbiB+MzAlIHNwZWVkdXAgb24gaHR0cDovL2NhbnZleC5sYXp5aWxsdW1pbmF0aS5j
b20vbWlzYy8zZC5odG1sLgorCisgICAgICAgICogZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL3Jn
YmEtcGFyc2luZy5qczogQWRkIHRlc3QgY2FzZXMgdG8gdGVzdCB0aGUgbmV3IGNvZGUgcGF0aC4K
KwogMjAxMS0wMy0xOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIGluc3BlY3Rvci9jb25zb2xlL2NvbW1hbmQtbGluZS1hcGkuaHRtbCB0aW1pbmcgb3V0IG9u
IFdpbmRvd3MgNyBSZWxlYXNlIChXZWJLaXQyIFRlc3RzKS4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCmluZGV4IGNlMTBkMzgu
LjNkMDE4MWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0
cy9yZ2JhLXBhcnNpbmcuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRl
c3RzL3JnYmEtcGFyc2luZy5qcwpAQCAtMTIsNiArMTIsMTQgQEAgZnVuY3Rpb24gcGFyc2Uocmdi
YSkgewogICAgIHJldHVybiAiUkdCQVsiICsgZGF0YVswXSArICIsICIgKyBkYXRhWzFdICsgIiwg
IiArIGRhdGFbMl0gKyAiLCAiICsgZGF0YVszXSArICJdIjsKIH0KIAorc2hvdWxkQmUoInBhcnNl
KCdyZ2JhKDAlLCAwJSwgMCUsIDEpJykiLCAiJ1JHQkFbMCwgMCwgMCwgMjU1XSciKTsKK3Nob3Vs
ZEJlKCJwYXJzZSgncmdiYSg1MC4wJSwgNTAuMCUsIDUwLjAlLCAxKScpIiwgIidSR0JBWzEyOCwg
MTI4LCAxMjgsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAwJSwgMTAwJSwgMTAw
JSwgMSknKSIsICInUkdCQVsyNTUsIDI1NSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNl
KCdyZ2JhKDEwLjUlLCA4MCUsIDcwJSwgMSknKSIsICInUkdCQVsyNiwgMjA0LCAxNzksIDI1NV0n
Iik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTUuNSUsIDAuNSUsIDExMCUsIDEpJykiLCAiJ1JH
QkFbMTQyLCAxLCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNjAuNTk5OTgl
LCAwLjU5OTk5JSwgMTEwLjEyMzQ1JSwgMSknKSIsICInUkdCQVsxNTUsIDEsIDI1NSwgMjU1XSci
KTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMC45OTklLCAwLjk5OSUsIDAuMDAwMDA5JSwgMSkn
KSIsICInUkdCQVsyOCwgMiwgMCwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSg3OS45
OTk5OSUsIDk5Ljk5OTk5JSwgNTAwJSwgMSknKSIsICInUkdCQVsyMDQsIDI1NSwgMjU1LCAyNTVd
JyIpOwogc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDAsIDAsIDAsIC0wLjEwKScpIiwgIidSR0JBWzAs
IDAsIDAsIDBdJyIpOwogc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDAsIDAsIDAsIC01LjApJykiLCAi
J1JHQkFbMCwgMCwgMCwgMF0nIik7CiBzaG91bGRCZSgicGFyc2UoJ3JnYmEoMCwgMCwgMCwgNS4w
KScpIiwgIidSR0JBWzAsIDAsIDAsIDI1NV0nIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzU2NWRlNi4uMDMw
ZDQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDExLTAzLTE4ICBBbmRyYXMgQmVj
c2kgIDxhYmVjc2lAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1M6IFNsb3cgcGFyc2luZyBvZiByZ2IoKSB3aXRoIHBlcmNlbnQg
dmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjcwOAorCisgICAgICAgIEltcGxlbWVudCBmYXN0LXBhdGggcGFyc2luZyBmb3IgcGVyY2VudGFn
ZSBjb2xvciB2YWx1ZXMuCisKKyAgICAgICAgR2FpbiB+MzAlIHNwZWVkdXAgb24gaHR0cDovL2Nh
bnZleC5sYXp5aWxsdW1pbmF0aS5jb20vbWlzYy8zZC5odG1sLgorCisgICAgICAgICogY3NzL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZURvdWJsZUlmVmFsaWQpOiBFeHRl
bmQgaXNWYWxpZERvdWJsZSB0byBwYXJzZSB0aGUgZG91YmxlIHZhbHVlIGlmIHZhbGlkLgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvckludE9yUGVyY2VudGFnZSk6IEV4dGVuZCBwYXJzZUNv
bG9ySW50IHRvIGRlYWwgd2l0aCBwZXJjZW50YWdlIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VBbHBoYVZhbHVlKTogVXNlIHRoZSBuZXcgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKTogRGl0dG8uCisKIDIwMTEtMDMtMTggIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVy
eSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNTM3ZmNhYy4uODJi
YmJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTM4OTgsMTAgKzM4OTgsNDUgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VDb2xvckludChjb25zdCBVQ2hhciom
IHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1ZSkK
K3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlRG91YmxlSWZWYWxpZChjb25zdCBVQ2hhciogc3RyaW5n
LCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZhbHVlKQorewor
ICAgIGludCBsZW5ndGggPSBlbmQgLSBzdHJpbmc7CisgICAgaWYgKGxlbmd0aCA8IDEpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgVmVjdG9yPGNoYXIsIDg+IGJ5dGVzKGxlbmd0aCArIDEpOwor
ICAgIGJvb2wgZGVjaW1hbE1hcmtTZWVuID0gZmFsc2U7CisgICAgaW50IHByb2Nlc3NlZExlbmd0
aCA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IGlmIChzdHJpbmdbaV0gPT0gdGVybWluYXRvcikgeworICAgICAgICAgICAgcHJvY2Vzc2VkTGVu
Z3RoID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNB
U0NJSURpZ2l0KHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIGlmICghZGVjaW1hbE1hcmtTZWVu
ICYmIHN0cmluZ1tpXSA9PSAnLicpCisgICAgICAgICAgICAgICAgZGVjaW1hbE1hcmtTZWVuID0g
dHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICBieXRlc1tpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHN0cmluZ1tpXSk7Cisg
ICAgfQorCisgICAgaWYgKHByb2Nlc3NlZExlbmd0aCkgeworICAgICAgICB2YWx1ZSA9IDAuMDsK
KyAgICAgICAgYnl0ZXNbcHJvY2Vzc2VkTGVuZ3RoXSA9IHN0YXRpY19jYXN0PGNoYXI+KHRlcm1p
bmF0b3IpOworICAgICAgICBieXRlc1twcm9jZXNzZWRMZW5ndGggKyAxXSA9ICdcMCc7CisgICAg
ICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKKyAgICAgICAgdmFsdWUgPSBXVEY6OnN0cnRvZChi
eXRlcy5kYXRhKCksICZmb3VuZFRlcm1pbmF0b3IpOworICAgICAgICByZXR1cm4gKCpmb3VuZFRl
cm1pbmF0b3IgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4odGVybWluYXRvcikpID8gcHJvY2Vzc2VkTGVu
Z3RoIDogMDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBw
YXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hh
ciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzJiBl
eHBlY3QsIGludCYgdmFsdWUpCiB7CiAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnQgPSBzdHJpbmc7
Ci0gICAgaW50IGxvY2FsVmFsdWUgPSAwOworICAgIGRvdWJsZSBsb2NhbFZhbHVlID0gMC4wOwog
ICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYg
aXNIVE1MU3BhY2UoKmN1cnJlbnQpKQogICAgICAgICBjdXJyZW50Kys7CkBAIC0zOTIyLDEyICsz
OTU3LDQxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9ySW50KGNvbnN0IFVDaGFyKiYg
c3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0CiAgICAgICAgIH0KICAgICAgICAgbG9j
YWxWYWx1ZSA9IG5ld1ZhbHVlOwogICAgIH0KKworICAgIGlmIChleHBlY3QgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgKCpjdXJyZW50ID09ICcuJyB8fCAqY3VycmVudCA9PSAn
JScpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoKmN1cnJlbnQgPT0gJy4nKSB7
CisgICAgICAgIC8vIFdlIGFscmVhZHkgcGFyc2VkIHRoZSBpbnRlZ3JhbCBwYXJ0LCB0cnkgdG8g
cGFyc2UKKyAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHBhcnQgb2YgdGhlIHBlcmNlbnRhZ2UgdmFs
dWUuCisgICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMC4wOworICAgICAgICBpbnQgcGFyc2Vk
ID0gcGFyc2VEb3VibGVJZlZhbGlkKGN1cnJlbnQsIGVuZCwgJyUnLCBwZXJjZW50YWdlKTsKKyAg
ICAgICAgaWYgKCFwYXJzZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGN1
cnJlbnQgKz0gcGFyc2VkOworICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJyUnKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhbFZhbHVlICs9IHBlcmNlbnRhZ2U7CisgICAg
fQorCisgICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Ug
JiYgKmN1cnJlbnQgIT0gJyUnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoKmN1
cnJlbnQgPT0gJyUnKSB7CisgICAgICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRTsKKyAgICAgICAgbG9jYWxWYWx1ZSA9ICBsb2NhbFZhbHVlIC8gMTAwLjAgKiAy
NTYuMDsKKyAgICAgICAgaWYgKGxvY2FsVmFsdWUgPiAyNTUpCisgICAgICAgICAgICBsb2NhbFZh
bHVlID0gMjU1OworICAgICAgICBjdXJyZW50Kys7CisgICAgfSBlbHNlCisgICAgICAgIGV4cGVj
dCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworCiAgICAgd2hpbGUgKGN1cnJlbnQg
IT0gZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKICAgICAgICAgY3VycmVudCsrOwogICAg
IGlmIChjdXJyZW50ID09IGVuZCB8fCAqY3VycmVudCsrICE9IHRlcm1pbmF0b3IpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAvLyBDbGFtcCBuZWdhdGl2ZSB2YWx1ZXMgYXQgemVyby4KLSAg
ICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IGxvY2FsVmFsdWU7CisgICAgdmFsdWUgPSBuZWdhdGl2
ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsVmFsdWUpOwogICAgIHN0cmluZyA9IGN1cnJl
bnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTQ1LDIwICs0MDA5LDYgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzVGVudGhBbHBoYShjb25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBpbnQgbGVu
Z3RoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRE
b3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgaW50IGxlbmd0aCkKLXsKLSAgICBib29s
IGRlY2ltYWxNYXJrU2VlbiA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgewotICAgICAg
ICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKLSAgICAgICAg
ICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciom
IHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1ZSkK
IHsKICAgICB3aGlsZSAoc3RyaW5nICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqc3RyaW5nKSkKQEAg
LTM5ODEsNyArNDAzMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29u
c3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChzdHJpbmdbMF0gIT0gJzAnICYmIHN0cmluZ1swXSAhPSAnMScg
JiYgc3RyaW5nWzBdICE9ICcuJykgewotICAgICAgICBpZiAoaXNWYWxpZERvdWJsZShzdHJpbmcs
IGxlbmd0aCAtIDEpKSB7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICBpZiAocGFyc2VEb3Vi
bGVJZlZhbGlkKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yLCBkKSkgewogICAgICAgICAgICAgdmFs
dWUgPSBuZWdhdGl2ZSA/IDAgOiAyNTU7CiAgICAgICAgICAgICBzdHJpbmcgPSBlbmQ7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwMDIsMjAgKzQwNTMsMTMgQEAgc3RhdGljIGlubGlu
ZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciomIHN0cmluZywgY29uc3QgVUNoYXIq
IGVuZCwgVUNoYXIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFpc1Zh
bGlkRG91YmxlKHN0cmluZywgbGVuZ3RoIC0gMSkpCi0gICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPGNoYXIsIDg+IGJ5dGVzKGxlbmd0aCArIDEpOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYnl0ZXNbaV0gPSBzdHJpbmdbaV07Ci0KLSAg
ICBieXRlc1tsZW5ndGhdID0gJ1wwJzsKLSAgICBjaGFyKiBmb3VuZFRlcm1pbmF0b3I7Ci0gICAg
ZG91YmxlIGQgPSBXVEY6OnN0cnRvZChieXRlcy5kYXRhKCksICZmb3VuZFRlcm1pbmF0b3IpOwot
ICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDogc3RhdGljX2Nhc3Q8aW50PihkICogbmV4dGFmdGVy
KDI1Ni4wLCAwLjApKTsKLSAgICBzdHJpbmcgKz0gKGZvdW5kVGVybWluYXRvciAtIGJ5dGVzLmRh
dGEoKSkgKyAxOwotICAgIHJldHVybiAqZm91bmRUZXJtaW5hdG9yID09IHRlcm1pbmF0b3I7Cisg
ICAgZG91YmxlIGQgPSAwLjA7CisgICAgaWYgKHBhcnNlRG91YmxlSWZWYWxpZChzdHJpbmcsIGVu
ZCwgdGVybWluYXRvciwgZCkpIHsKKyAgICAgICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0
aWNfY2FzdDxpbnQ+KGQgKiBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCkpOworICAgICAgICBzdHJpbmcg
PSBlbmQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCQShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQpAQCAtNDA0Myw2ICs0MDg3LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3Qp
CiB7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOwogCiAg
ICAgaWYgKCFzdHJpY3QgJiYgbGVuZ3RoID49IDMpIHsKICAgICAgICAgaWYgKG5hbWVbMF0gPT0g
JyMnKSB7CkBAIC00MDYyLDExICs0MTA3LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9y
KGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQogICAgICAgICBp
bnQgZ3JlZW47CiAgICAgICAgIGludCBibHVlOwogICAgICAgICBpbnQgYWxwaGE7Ci0gICAgICAg
IGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcsJywgcmVkKSkKKworICAgICAgICBp
ZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwg
cmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9y
SW50KGN1cnJlbnQsIGVuZCwgJywnLCBncmVlbikpCisgICAgICAgIGlmICghcGFyc2VDb2xvcklu
dE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBl
bmQsICcsJywgYmx1ZSkpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShj
dXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBibHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFwYXJzZUFscGhhVmFsdWUoY3VycmVudCwgZW5kLCAnKScsIGFscGhh
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQwODMsMTEgKzQxMjksMTEgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwg
Ym9vbCBzdHJpY3QpCiAgICAgICAgIGludCByZWQ7CiAgICAgICAgIGludCBncmVlbjsKICAgICAg
ICAgaW50IGJsdWU7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcs
JywgcmVkKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQs
IGVuZCwgJywnLCBleHBlY3QsIHJlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcsJywgZ3JlZW4pKQorICAgICAg
ICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVj
dCwgZ3JlZW4pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNl
Q29sb3JJbnQoY3VycmVudCwgZW5kLCAnKScsIGJsdWUpKQorICAgICAgICBpZiAoIXBhcnNlQ29s
b3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnKScsIGV4cGVjdCwgYmx1ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsK
</data>
<flag name="review"
          id="78409"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86322</attachid>
            <date>2011-03-21 09:15:31 -0700</date>
            <delta_ts>2011-03-21 09:32:23 -0700</delta_ts>
            <desc>proposed patch v2</desc>
            <filename>percentage.patch</filename>
            <type>text/plain</type>
            <size>11191</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNGRiOTAwLi5mMjk4OTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMt
MjEgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzogU2xvdyBwYXJzaW5nIG9mIHJnYigp
IHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVtZW50IGZhc3QtcGF0aCBwYXJzaW5n
IGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAgICAgICBHYWluIH4zMCUgc3BlZWR1
cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNvbS9taXNjLzNkLmh0bWwuCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzOiBBZGQgY2Fz
ZXMgdG8gdGVzdCB0aGUgY29uc2lzdGVuY3kuCisKIDIwMTEtMDMtMjEgIEFkYW0gUm9iZW4gIDxh
cm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgYW5vdGhlciBhc3NlcnRpbmcgYW5pbWF0
aW9ucyB0ZXN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVz
dHMvcmdiYS1wYXJzaW5nLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3Rz
L3JnYmEtcGFyc2luZy5qcwppbmRleCBjZTEwZDM4Li5hY2Y3MTMwIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMKQEAgLTEy
LDYgKzEyLDIzIEBAIGZ1bmN0aW9uIHBhcnNlKHJnYmEpIHsKICAgICByZXR1cm4gIlJHQkFbIiAr
IGRhdGFbMF0gKyAiLCAiICsgZGF0YVsxXSArICIsICIgKyBkYXRhWzJdICsgIiwgIiArIGRhdGFb
M10gKyAiXSI7CiB9CiAKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgwLjkuOSUsIDAsIDAsIDEpJyki
LCAiJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgw
JSwgMC4uLCAwLCAxKScpIiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1NV0nIik7CitzaG91bGRC
ZSgicGFyc2UoJ3JnYmEoMTAlLCAuLCAwLCAxKScpIiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1
NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTMuMzclMTMuMzcsIDUsIDUwLjAlLCAxKScp
IiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEo
JSwgNTAlLCA1MC4wJSwgMSknKSIsICInUkdCQVsxMDIsIDEwMiwgMTAyLCAyNTVdJyIpOworc2hv
dWxkQmUoInBhcnNlKCdyZ2JhKDUwLjAlLCA1MCUsIGElLCAxKScpIiwgIidSR0JBWzEwMiwgMTAy
LCAxMDIsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTAwJSwgMCUsIDAlLCAxKScp
IiwgIidSR0JBWzI1NSwgMCwgMCwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMDAl
LCAxMDAlLCAxMDAlLCAxKScpIiwgIidSR0JBWzI1NSwgMjU1LCAyNTUsIDI1NV0nIik7CitzaG91
bGRCZSgicGFyc2UoJ3JnYmEoMTAuNSUsIDgwJSwgNzAlLCAxKScpIiwgIidSR0JBWzI2LCAyMDQs
IDE3OSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgwJSwgMCUsIDAlLCAxKScpIiwg
IidSR0JBWzAsIDAsIDAsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTAuMCUsIDUw
LjAlLCA1MC4wJSwgMSknKSIsICInUkdCQVsxMjgsIDEyOCwgMTI4LCAyNTVdJyIpOworc2hvdWxk
QmUoInBhcnNlKCdyZ2JhKDEwMCUsIDEwMCUsIDEwMCUsIDEpJykiLCAiJ1JHQkFbMjU1LCAyNTUs
IDI1NSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMC41JSwgODAlLCA3MCUsIDEp
JykiLCAiJ1JHQkFbMjYsIDIwNCwgMTc5LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2Jh
KDU1LjUlLCAwLjUlLCAxMTAlLCAxKScpIiwgIidSR0JBWzE0MiwgMSwgMjU1LCAyNTVdJyIpOwor
c2hvdWxkQmUoInBhcnNlKCdyZ2JhKDYwLjU5OTk4JSwgMC41OTk5OSUsIDExMC4xMjM0NSUsIDEp
JykiLCAiJ1JHQkFbMTU1LCAxLCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEo
MTAuOTk5JSwgMC45OTklLCAwLjAwMDAwOSUsIDEpJykiLCAiJ1JHQkFbMjgsIDIsIDAsIDI1NV0n
Iik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNzkuOTk5OTklLCA5OS45OTk5OSUsIDUwMCUsIDEp
JykiLCAiJ1JHQkFbMjA0LCAyNTUsIDI1NSwgMjU1XSciKTsKIHNob3VsZEJlKCJwYXJzZSgncmdi
YSgwLCAwLCAwLCAtMC4xMCknKSIsICInUkdCQVswLCAwLCAwLCAwXSciKTsKIHNob3VsZEJlKCJw
YXJzZSgncmdiYSgwLCAwLCAwLCAtNS4wKScpIiwgIidSR0JBWzAsIDAsIDAsIDBdJyIpOwogc2hv
dWxkQmUoInBhcnNlKCdyZ2JhKDAsIDAsIDAsIDUuMCknKSIsICInUkdCQVswLCAwLCAwLCAyNTVd
JyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDk1YjdjOTYuLjkzOTM0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMS0wMy0yMSAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTOiBTbG93
IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZhbHVlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MDgKKworICAgICAgICBJbXBsZW1lbnQg
ZmFzdC1wYXRoIHBhcnNpbmcgZm9yIHBlcmNlbnRhZ2UgY29sb3IgdmFsdWVzLgorCisgICAgICAg
IEdhaW4gfjMwJSBzcGVlZHVwIG9uIGh0dHA6Ly9jYW52ZXgubGF6eWlsbHVtaW5hdGkuY29tL21p
c2MvM2QuaHRtbC4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNWYWxpZERvdWJsZSk6IEV4dGVuZCB0byByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGZvcm1pbmcgYSB2YWxpZCBkb3VibGUuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURv
dWJsZSk6IEZ1bmN0aW9uIGZvciBwYXJzaW5nIGRvdWJsZSB2YWx1ZXMgaWYgdGhleSBhcmUgdmFs
aWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKTogRXh0ZW5k
IHBhcnNlQ29sb3JJbnQgdG8gZGVhbCB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VBbHBoYVZhbHVlKTogVXNlIHRoZSBuZXcgZnVuY3Rpb25zLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKTogRGl0dG8uCisKIDIwMTEtMDMtMjEg
IEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEJlbmphbWluIFBvdWxhaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDUzN2ZjYWMu
LjQwMDkxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0zODk4LDEwICszODk4LDYz
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmdlKCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHBhcnNlQ29sb3JJbnQoY29uc3QgVUNo
YXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGludCYgdmFs
dWUpCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCBmb3JtIGEgdmFs
aWQgZG91YmxlCisvLyBhbmQgYXJlIHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuIHRlcm1pbmF0b3Ig
Y2hhcmFjdGVyCitzdGF0aWMgaW50IGlzVmFsaWREb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywg
Y29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yKQoreworICAgIGludCBsZW5n
dGggPSBlbmQgLSBzdHJpbmc7CisgICAgaWYgKGxlbmd0aCA8IDEpCisgICAgICAgIHJldHVybiAw
OworCisgICAgYm9vbCBkZWNpbWFsTWFya1NlZW4gPSBmYWxzZTsKKyAgICBpbnQgcHJvY2Vzc2Vk
TGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJtaW5hdG9yKSB7CisgICAgICAgICAgICBwcm9jZXNz
ZWRMZW5ndGggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFy
a1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKKyAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1Nl
ZW4gPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlY2ltYWxNYXJrU2VlbiAmJiBwcm9jZXNzZWRM
ZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcHJvY2Vzc2VkTGVu
Z3RoOworfQorCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBm
b3IgcGFyc2luZyBhIHZhbGlkIGRvdWJsZQorLy8gdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4gdGVy
bWluYXRvciBjaGFyYWN0ZXIKK3N0YXRpYyBpbnQgcGFyc2VEb3VibGUoY29uc3QgVUNoYXIqIHN0
cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZh
bHVlKQoreworICAgIGludCBsZW5ndGggPSBpc1ZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJt
aW5hdG9yKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBWZWN0
b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMik7CisKKyAgICAvLyBUaGUgY29uc3VtZWQgY2hh
cmFjdGVycyBoZXJlIGFyZSBndWFyYW50ZWVkIHRvIGJlIEFTQ0lJIGRpZ2l0cyB3aXRoIG9yIHdp
dGhvdXQgYSBkZWNpbWFsIG1hcmsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICBieXRlc1tpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHN0cmluZ1tpXSk7CisKKyAg
ICB2YWx1ZSA9IDA7CisgICAgYnl0ZXNbbGVuZ3RoXSA9IHRlcm1pbmF0b3I7CisgICAgYnl0ZXNb
bGVuZ3RoICsgMV0gPSAnXDAnOworICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKKyAgICB2YWx1
ZSA9IFdURjo6c3RydG9kKGJ5dGVzLmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7CisKKyAgICBy
ZXR1cm4gKCpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcikgPyBsZW5ndGggOiAwOworfQor
CitzdGF0aWMgYm9vbCBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvbnN0IFVDaGFyKiYgc3Ry
aW5nLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2YWx1ZSkKIHsKICAgICBjb25zdCBVQ2hh
ciogY3VycmVudCA9IHN0cmluZzsKLSAgICBpbnQgbG9jYWxWYWx1ZSA9IDA7CisgICAgZG91Ymxl
IGxvY2FsVmFsdWUgPSAwOwogICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQogICAgICAgICBjdXJyZW50
Kys7CkBAIC0zOTIyLDEyICszOTc1LDQxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9y
SW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0CiAgICAg
ICAgIH0KICAgICAgICAgbG9jYWxWYWx1ZSA9IG5ld1ZhbHVlOwogICAgIH0KKworICAgIGlmIChl
eHBlY3QgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgKCpjdXJyZW50ID09ICcu
JyB8fCAqY3VycmVudCA9PSAnJScpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
KmN1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgIC8vIFdlIGFscmVhZHkgcGFyc2VkIHRoZSBpbnRl
Z3JhbCBwYXJ0LCB0cnkgdG8gcGFyc2UKKyAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHBhcnQgb2Yg
dGhlIHBlcmNlbnRhZ2UgdmFsdWUuCisgICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMDsKKyAg
ICAgICAgaW50IHBhcnNlZCA9IHBhcnNlRG91YmxlKGN1cnJlbnQsIGVuZCwgJyUnLCBwZXJjZW50
YWdlKTsKKyAgICAgICAgaWYgKCFwYXJzZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGN1cnJlbnQgKz0gcGFyc2VkOworICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJyUnKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhbFZhbHVlICs9IHBlcmNlbnRh
Z2U7CisgICAgfQorCisgICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UgJiYgKmN1cnJlbnQgIT0gJyUnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoKmN1cnJlbnQgPT0gJyUnKSB7CisgICAgICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRTsKKyAgICAgICAgbG9jYWxWYWx1ZSA9IGxvY2FsVmFsdWUgLyAx
MDAuMCAqIDI1NjsKKyAgICAgICAgaWYgKGxvY2FsVmFsdWUgPiAyNTUpCisgICAgICAgICAgICBs
b2NhbFZhbHVlID0gMjU1OworICAgICAgICBjdXJyZW50Kys7CisgICAgfSBlbHNlCisgICAgICAg
IGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworCiAgICAgd2hpbGUgKGN1
cnJlbnQgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKICAgICAgICAgY3VycmVudCsr
OwogICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAqY3VycmVudCsrICE9IHRlcm1pbmF0b3IpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBDbGFtcCBuZWdhdGl2ZSB2YWx1ZXMgYXQgemVy
by4KLSAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IGxvY2FsVmFsdWU7CisgICAgdmFsdWUgPSBu
ZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsVmFsdWUpOwogICAgIHN0cmluZyA9
IGN1cnJlbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTQ1LDIxICs0MDI3LDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzVGVudGhBbHBoYShjb25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBp
bnQgbGVuZ3RoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWREb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgaW50IGxlbmd0aCkKLXsKLSAg
ICBib29sIGRlY2ltYWxNYXJrU2VlbiA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgewot
ICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKLSAg
ICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBV
Q2hhciomIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50JiB2
YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBz
dHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1
ZSkKIHsKICAgICB3aGlsZSAoc3RyaW5nICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqc3RyaW5nKSkK
ICAgICAgICAgc3RyaW5nKys7CkBAIC0zOTgxLDcgKzQwNDksNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5k
LCBVQ2hhcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3RyaW5nWzBdICE9ICcw
JyAmJiBzdHJpbmdbMF0gIT0gJzEnICYmIHN0cmluZ1swXSAhPSAnLicpIHsKLSAgICAgICAgaWYg
KGlzVmFsaWREb3VibGUoc3RyaW5nLCBsZW5ndGggLSAxKSkgeworICAgICAgICBpZiAoaXNWYWxp
ZERvdWJsZShzdHJpbmcsIGVuZCwgdGVybWluYXRvcikpIHsKICAgICAgICAgICAgIHZhbHVlID0g
bmVnYXRpdmUgPyAwIDogMjU1OwogICAgICAgICAgICAgc3RyaW5nID0gZW5kOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MDAyLDIwICs0MDcwLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQs
IFVDaGFyCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghaXNWYWxpZERv
dWJsZShzdHJpbmcsIGxlbmd0aCAtIDEpKQotICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZl
Y3RvcjxjaGFyLCA4PiBieXRlcyhsZW5ndGggKyAxKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGJ5dGVzW2ldID0gc3RyaW5nW2ldOwotCi0gICAgYnl0
ZXNbbGVuZ3RoXSA9ICdcMCc7Ci0gICAgY2hhciogZm91bmRUZXJtaW5hdG9yOwotICAgIGRvdWJs
ZSBkID0gV1RGOjpzdHJ0b2QoYnl0ZXMuZGF0YSgpLCAmZm91bmRUZXJtaW5hdG9yKTsKLSAgICB2
YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oZCAqIG5leHRhZnRlcigyNTYu
MCwgMC4wKSk7Ci0gICAgc3RyaW5nICs9IChmb3VuZFRlcm1pbmF0b3IgLSBieXRlcy5kYXRhKCkp
ICsgMTsKLSAgICByZXR1cm4gKmZvdW5kVGVybWluYXRvciA9PSB0ZXJtaW5hdG9yOworICAgIGRv
dWJsZSBhbHBoYSA9IDA7CisgICAgaWYgKHBhcnNlRG91YmxlKHN0cmluZywgZW5kLCB0ZXJtaW5h
dG9yLCBhbHBoYSkpIHsKKyAgICAgICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2Fz
dDxpbnQ+KGFscGhhICogbmV4dGFmdGVyKDI1Ni4wLCAwLjApKTsKKyAgICAgICAgc3RyaW5nID0g
ZW5kOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQkEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKQEAgLTQwNDMsNiArNDEwNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQog
ewogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKIAogICAg
IGlmICghc3RyaWN0ICYmIGxlbmd0aCA+PSAzKSB7CiAgICAgICAgIGlmIChuYW1lWzBdID09ICcj
JykgewpAQCAtNDA2MiwxMSArNDEyNCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihj
b25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKICAgICAgICAgaW50
IGdyZWVuOwogICAgICAgICBpbnQgYmx1ZTsKICAgICAgICAgaW50IGFscGhhOwotICAgICAgICBp
ZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcsIHJlZCkpCisKKyAgICAgICAgaWYg
KCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIHJl
ZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvcklu
dChjdXJyZW50LCBlbmQsICcsJywgZ3JlZW4pKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5k
LCAnLCcsIGJsdWUpKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3Vy
cmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGlmICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MDgzLDExICs0MTQ2LDExIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJv
b2wgc3RyaWN0KQogICAgICAgICBpbnQgcmVkOwogICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAg
IGludCBibHVlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcs
IHJlZCkpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBl
bmQsICcsJywgZXhwZWN0LCByZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcsIGdyZWVuKSkKKyAgICAgICAg
aWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3Qs
IGdyZWVuKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNv
bG9ySW50KGN1cnJlbnQsIGVuZCwgJyknLCBibHVlKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9y
SW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBleHBlY3QsIGJsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86325</attachid>
            <date>2011-03-21 09:32:23 -0700</date>
            <delta_ts>2011-03-21 09:44:48 -0700</delta_ts>
            <desc>proposed patch v2</desc>
            <filename>percentage.patch</filename>
            <type>text/plain</type>
            <size>11175</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNGRiOTAwLi5mMjk4OTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMt
MjEgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzogU2xvdyBwYXJzaW5nIG9mIHJnYigp
IHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVtZW50IGZhc3QtcGF0aCBwYXJzaW5n
IGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAgICAgICBHYWluIH4zMCUgc3BlZWR1
cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNvbS9taXNjLzNkLmh0bWwuCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzOiBBZGQgY2Fz
ZXMgdG8gdGVzdCB0aGUgY29uc2lzdGVuY3kuCisKIDIwMTEtMDMtMjEgIEFkYW0gUm9iZW4gIDxh
cm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgYW5vdGhlciBhc3NlcnRpbmcgYW5pbWF0
aW9ucyB0ZXN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVz
dHMvcmdiYS1wYXJzaW5nLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3Rz
L3JnYmEtcGFyc2luZy5qcwppbmRleCBjZTEwZDM4Li5hY2Y3MTMwIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMKQEAgLTEy
LDYgKzEyLDIzIEBAIGZ1bmN0aW9uIHBhcnNlKHJnYmEpIHsKICAgICByZXR1cm4gIlJHQkFbIiAr
IGRhdGFbMF0gKyAiLCAiICsgZGF0YVsxXSArICIsICIgKyBkYXRhWzJdICsgIiwgIiArIGRhdGFb
M10gKyAiXSI7CiB9CiAKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgwLjkuOSUsIDAsIDAsIDEpJyki
LCAiJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgw
JSwgMC4uLCAwLCAxKScpIiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1NV0nIik7CitzaG91bGRC
ZSgicGFyc2UoJ3JnYmEoMTAlLCAuLCAwLCAxKScpIiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1
NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTMuMzclMTMuMzcsIDUsIDUwLjAlLCAxKScp
IiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEo
JSwgNTAlLCA1MC4wJSwgMSknKSIsICInUkdCQVsxMDIsIDEwMiwgMTAyLCAyNTVdJyIpOworc2hv
dWxkQmUoInBhcnNlKCdyZ2JhKDUwLjAlLCA1MCUsIGElLCAxKScpIiwgIidSR0JBWzEwMiwgMTAy
LCAxMDIsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTAwJSwgMCUsIDAlLCAxKScp
IiwgIidSR0JBWzI1NSwgMCwgMCwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMDAl
LCAxMDAlLCAxMDAlLCAxKScpIiwgIidSR0JBWzI1NSwgMjU1LCAyNTUsIDI1NV0nIik7CitzaG91
bGRCZSgicGFyc2UoJ3JnYmEoMTAuNSUsIDgwJSwgNzAlLCAxKScpIiwgIidSR0JBWzI2LCAyMDQs
IDE3OSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgwJSwgMCUsIDAlLCAxKScpIiwg
IidSR0JBWzAsIDAsIDAsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTAuMCUsIDUw
LjAlLCA1MC4wJSwgMSknKSIsICInUkdCQVsxMjgsIDEyOCwgMTI4LCAyNTVdJyIpOworc2hvdWxk
QmUoInBhcnNlKCdyZ2JhKDEwMCUsIDEwMCUsIDEwMCUsIDEpJykiLCAiJ1JHQkFbMjU1LCAyNTUs
IDI1NSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMC41JSwgODAlLCA3MCUsIDEp
JykiLCAiJ1JHQkFbMjYsIDIwNCwgMTc5LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2Jh
KDU1LjUlLCAwLjUlLCAxMTAlLCAxKScpIiwgIidSR0JBWzE0MiwgMSwgMjU1LCAyNTVdJyIpOwor
c2hvdWxkQmUoInBhcnNlKCdyZ2JhKDYwLjU5OTk4JSwgMC41OTk5OSUsIDExMC4xMjM0NSUsIDEp
JykiLCAiJ1JHQkFbMTU1LCAxLCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEo
MTAuOTk5JSwgMC45OTklLCAwLjAwMDAwOSUsIDEpJykiLCAiJ1JHQkFbMjgsIDIsIDAsIDI1NV0n
Iik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNzkuOTk5OTklLCA5OS45OTk5OSUsIDUwMCUsIDEp
JykiLCAiJ1JHQkFbMjA0LCAyNTUsIDI1NSwgMjU1XSciKTsKIHNob3VsZEJlKCJwYXJzZSgncmdi
YSgwLCAwLCAwLCAtMC4xMCknKSIsICInUkdCQVswLCAwLCAwLCAwXSciKTsKIHNob3VsZEJlKCJw
YXJzZSgncmdiYSgwLCAwLCAwLCAtNS4wKScpIiwgIidSR0JBWzAsIDAsIDAsIDBdJyIpOwogc2hv
dWxkQmUoInBhcnNlKCdyZ2JhKDAsIDAsIDAsIDUuMCknKSIsICInUkdCQVswLCAwLCAwLCAyNTVd
JyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDk1YjdjOTYuLjkzOTM0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMS0wMy0yMSAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTOiBTbG93
IHBhcnNpbmcgb2YgcmdiKCkgd2l0aCBwZXJjZW50IHZhbHVlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MDgKKworICAgICAgICBJbXBsZW1lbnQg
ZmFzdC1wYXRoIHBhcnNpbmcgZm9yIHBlcmNlbnRhZ2UgY29sb3IgdmFsdWVzLgorCisgICAgICAg
IEdhaW4gfjMwJSBzcGVlZHVwIG9uIGh0dHA6Ly9jYW52ZXgubGF6eWlsbHVtaW5hdGkuY29tL21p
c2MvM2QuaHRtbC4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNWYWxpZERvdWJsZSk6IEV4dGVuZCB0byByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGZvcm1pbmcgYSB2YWxpZCBkb3VibGUuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURv
dWJsZSk6IEZ1bmN0aW9uIGZvciBwYXJzaW5nIGRvdWJsZSB2YWx1ZXMgaWYgdGhleSBhcmUgdmFs
aWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKTogRXh0ZW5k
IHBhcnNlQ29sb3JJbnQgdG8gZGVhbCB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VBbHBoYVZhbHVlKTogVXNlIHRoZSBuZXcgZnVuY3Rpb25zLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKTogRGl0dG8uCisKIDIwMTEtMDMtMjEg
IEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEJlbmphbWluIFBvdWxhaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDUzN2ZjYWMu
LjUzOTRjYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0zODk4LDEwICszODk4LDYz
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmdlKCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHBhcnNlQ29sb3JJbnQoY29uc3QgVUNo
YXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGludCYgdmFs
dWUpCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCBmb3JtIGEgdmFs
aWQgZG91YmxlCisvLyBhbmQgYXJlIHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuIHRlcm1pbmF0b3Ig
Y2hhcmFjdGVyCitzdGF0aWMgaW50IGlzVmFsaWREb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywg
Y29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yKQoreworICAgIGludCBsZW5n
dGggPSBlbmQgLSBzdHJpbmc7CisgICAgaWYgKGxlbmd0aCA8IDEpCisgICAgICAgIHJldHVybiAw
OworCisgICAgYm9vbCBkZWNpbWFsTWFya1NlZW4gPSBmYWxzZTsKKyAgICBpbnQgcHJvY2Vzc2Vk
TGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJtaW5hdG9yKSB7CisgICAgICAgICAgICBwcm9jZXNz
ZWRMZW5ndGggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFy
a1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKKyAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1Nl
ZW4gPSB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlY2ltYWxNYXJrU2VlbiAmJiBwcm9jZXNzZWRM
ZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcHJvY2Vzc2VkTGVu
Z3RoOworfQorCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBm
b3IgcGFyc2luZyBhIHZhbGlkIGRvdWJsZQorLy8gdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4gdGVy
bWluYXRvciBjaGFyYWN0ZXIKK3N0YXRpYyBpbnQgcGFyc2VEb3VibGUoY29uc3QgVUNoYXIqIHN0
cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZh
bHVlKQoreworICAgIGludCBsZW5ndGggPSBpc1ZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJt
aW5hdG9yKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBWZWN0
b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMik7CisKKyAgICAvLyBUaGUgY29uc3VtZWQgY2hh
cmFjdGVycyBoZXJlIGFyZSBndWFyYW50ZWVkIHRvIGJlIEFTQ0lJIGRpZ2l0cyB3aXRoIG9yIHdp
dGhvdXQgYSBkZWNpbWFsIG1hcmsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICBieXRlc1tpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHN0cmluZ1tpXSk7CisKKyAg
ICB2YWx1ZSA9IDA7CisgICAgYnl0ZXNbbGVuZ3RoXSA9IHRlcm1pbmF0b3I7CisgICAgYnl0ZXNb
bGVuZ3RoICsgMV0gPSAnXDAnOworICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKKyAgICB2YWx1
ZSA9IFdURjo6c3RydG9kKGJ5dGVzLmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7CisKKyAgICBy
ZXR1cm4gKCpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcikgPyBsZW5ndGggOiAwOworfQor
CitzdGF0aWMgYm9vbCBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvbnN0IFVDaGFyKiYgc3Ry
aW5nLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2YWx1ZSkKIHsKICAgICBjb25zdCBVQ2hh
ciogY3VycmVudCA9IHN0cmluZzsKLSAgICBpbnQgbG9jYWxWYWx1ZSA9IDA7CisgICAgZG91Ymxl
IGxvY2FsVmFsdWUgPSAwOwogICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQogICAgICAgICBjdXJyZW50
Kys7CkBAIC0zOTIyLDEyICszOTc1LDQxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9y
SW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0CiAgICAg
ICAgIH0KICAgICAgICAgbG9jYWxWYWx1ZSA9IG5ld1ZhbHVlOwogICAgIH0KKworICAgIGlmIChl
eHBlY3QgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgKCpjdXJyZW50ID09ICcu
JyB8fCAqY3VycmVudCA9PSAnJScpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
KmN1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgIC8vIFdlIGFscmVhZHkgcGFyc2VkIHRoZSBpbnRl
Z3JhbCBwYXJ0LCB0cnkgdG8gcGFyc2UKKyAgICAgICAgLy8gdGhlIGZyYWN0aW9uIHBhcnQgb2Yg
dGhlIHBlcmNlbnRhZ2UgdmFsdWUuCisgICAgICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMDsKKyAg
ICAgICAgaW50IHBhcnNlZCA9IHBhcnNlRG91YmxlKGN1cnJlbnQsIGVuZCwgJyUnLCBwZXJjZW50
YWdlKTsKKyAgICAgICAgaWYgKCFwYXJzZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGN1cnJlbnQgKz0gcGFyc2VkOworICAgICAgICBpZiAoKmN1cnJlbnQgIT0gJyUnKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhbFZhbHVlICs9IHBlcmNlbnRh
Z2U7CisgICAgfQorCisgICAgaWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UgJiYgKmN1cnJlbnQgIT0gJyUnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoKmN1cnJlbnQgPT0gJyUnKSB7CisgICAgICAgIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRTsKKyAgICAgICAgbG9jYWxWYWx1ZSA9IGxvY2FsVmFsdWUgLyAx
MDAuMCAqIDI1NjsKKyAgICAgICAgaWYgKGxvY2FsVmFsdWUgPiAyNTUpCisgICAgICAgICAgICBs
b2NhbFZhbHVlID0gMjU1OworICAgICAgICBjdXJyZW50Kys7CisgICAgfSBlbHNlCisgICAgICAg
IGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworCiAgICAgd2hpbGUgKGN1
cnJlbnQgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKICAgICAgICAgY3VycmVudCsr
OwogICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAqY3VycmVudCsrICE9IHRlcm1pbmF0b3IpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBDbGFtcCBuZWdhdGl2ZSB2YWx1ZXMgYXQgemVy
by4KLSAgICB2YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IGxvY2FsVmFsdWU7CisgICAgdmFsdWUgPSBu
ZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsVmFsdWUpOwogICAgIHN0cmluZyA9
IGN1cnJlbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zOTQ1LDIxICs0MDI3LDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzVGVudGhBbHBoYShjb25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBp
bnQgbGVuZ3RoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWREb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgaW50IGxlbmd0aCkKLXsKLSAg
ICBib29sIGRlY2ltYWxNYXJrU2VlbiA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkgewot
ICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykKLSAg
ICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBV
Q2hhciomIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50JiB2
YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBz
dHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1
ZSkKIHsKICAgICB3aGlsZSAoc3RyaW5nICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqc3RyaW5nKSkK
ICAgICAgICAgc3RyaW5nKys7CkBAIC0zOTgxLDcgKzQwNDksNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5k
LCBVQ2hhcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3RyaW5nWzBdICE9ICcw
JyAmJiBzdHJpbmdbMF0gIT0gJzEnICYmIHN0cmluZ1swXSAhPSAnLicpIHsKLSAgICAgICAgaWYg
KGlzVmFsaWREb3VibGUoc3RyaW5nLCBsZW5ndGggLSAxKSkgeworICAgICAgICBpZiAoaXNWYWxp
ZERvdWJsZShzdHJpbmcsIGVuZCwgdGVybWluYXRvcikpIHsKICAgICAgICAgICAgIHZhbHVlID0g
bmVnYXRpdmUgPyAwIDogMjU1OwogICAgICAgICAgICAgc3RyaW5nID0gZW5kOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MDAyLDIwICs0MDcwLDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQs
IFVDaGFyCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghaXNWYWxpZERv
dWJsZShzdHJpbmcsIGxlbmd0aCAtIDEpKQotICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZl
Y3RvcjxjaGFyLCA4PiBieXRlcyhsZW5ndGggKyAxKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGJ5dGVzW2ldID0gc3RyaW5nW2ldOwotCi0gICAgYnl0
ZXNbbGVuZ3RoXSA9ICdcMCc7Ci0gICAgY2hhciogZm91bmRUZXJtaW5hdG9yOwotICAgIGRvdWJs
ZSBkID0gV1RGOjpzdHJ0b2QoYnl0ZXMuZGF0YSgpLCAmZm91bmRUZXJtaW5hdG9yKTsKLSAgICB2
YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oZCAqIG5leHRhZnRlcigyNTYu
MCwgMC4wKSk7Ci0gICAgc3RyaW5nICs9IChmb3VuZFRlcm1pbmF0b3IgLSBieXRlcy5kYXRhKCkp
ICsgMTsKLSAgICByZXR1cm4gKmZvdW5kVGVybWluYXRvciA9PSB0ZXJtaW5hdG9yOworICAgIGRv
dWJsZSBhbHBoYSA9IDA7CisgICAgaWYgKCFwYXJzZURvdWJsZShzdHJpbmcsIGVuZCwgdGVybWlu
YXRvciwgYWxwaGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmFsdWUgPSBuZWdhdGl2
ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGFscGhhICogbmV4dGFmdGVyKDI1Ni4wLCAwLjApKTsK
KyAgICBzdHJpbmcgPSBlbmQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBtaWdodEJlUkdCQShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQpAQCAtNDA0Myw2ICs0MTAzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3Qg
U3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiB7CiAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBuYW1lLmxlbmd0aCgpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXhwZWN0
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOwogCiAgICAgaWYgKCFzdHJpY3QgJiYg
bGVuZ3RoID49IDMpIHsKICAgICAgICAgaWYgKG5hbWVbMF0gPT0gJyMnKSB7CkBAIC00MDYyLDEx
ICs0MTIzLDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFt
ZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQogICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAg
IGludCBibHVlOwogICAgICAgICBpbnQgYWxwaGE7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvcklu
dChjdXJyZW50LCBlbmQsICcsJywgcmVkKSkKKworICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgcmVkKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwg
JywnLCBncmVlbikpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJy
ZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcsJywgYmx1ZSkpCisg
ICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywg
ZXhwZWN0LCBibHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFw
YXJzZUFscGhhVmFsdWUoY3VycmVudCwgZW5kLCAnKScsIGFscGhhKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQwODMsMTEgKzQxNDUsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Q29sb3IoY29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAg
ICAgIGludCByZWQ7CiAgICAgICAgIGludCBncmVlbjsKICAgICAgICAgaW50IGJsdWU7Ci0gICAg
ICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBlbmQsICcsJywgcmVkKSkKKyAgICAgICAg
aWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3Qs
IHJlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xv
ckludChjdXJyZW50LCBlbmQsICcsJywgZ3JlZW4pKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJ
bnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwg
ZW5kLCAnKScsIGJsdWUpKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2Uo
Y3VycmVudCwgZW5kLCAnKScsIGV4cGVjdCwgYmx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86326</attachid>
            <date>2011-03-21 09:44:48 -0700</date>
            <delta_ts>2011-03-22 11:38:14 -0700</delta_ts>
            <desc>proposed patch v2 with layout test</desc>
            <filename>percentage.patch</filename>
            <type>text/plain</type>
            <size>11179</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNGRiOTAwLi5mMjk4OTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMt
MjEgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzogU2xvdyBwYXJzaW5nIG9mIHJnYigp
IHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVtZW50IGZhc3QtcGF0aCBwYXJzaW5n
IGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAgICAgICBHYWluIH4zMCUgc3BlZWR1
cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNvbS9taXNjLzNkLmh0bWwuCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzOiBBZGQgY2Fz
ZXMgdG8gdGVzdCB0aGUgY29uc2lzdGVuY3kuCisKIDIwMTEtMDMtMjEgIEFkYW0gUm9iZW4gIDxh
cm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgYW5vdGhlciBhc3NlcnRpbmcgYW5pbWF0
aW9ucyB0ZXN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVz
dHMvcmdiYS1wYXJzaW5nLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3Rz
L3JnYmEtcGFyc2luZy5qcwppbmRleCBjZTEwZDM4Li44MWEzODEyIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMKQEAgLTEy
LDYgKzEyLDIzIEBAIGZ1bmN0aW9uIHBhcnNlKHJnYmEpIHsKICAgICByZXR1cm4gIlJHQkFbIiAr
IGRhdGFbMF0gKyAiLCAiICsgZGF0YVsxXSArICIsICIgKyBkYXRhWzJdICsgIiwgIiArIGRhdGFb
M10gKyAiXSI7CiB9CiAKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgwLjkuOSUsIDAlLCAwJSwgMSkn
KSIsICInUkdCQVsxMDIsIDEwMiwgMTAyLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2Jh
KDAsIDAuLiwgMCwgMSknKSIsICInUkdCQVsxMDIsIDEwMiwgMTAyLCAyNTVdJyIpOworc2hvdWxk
QmUoInBhcnNlKCdyZ2JhKDEwJSwgLiUsIDAlLCAxKScpIiwgIidSR0JBWzEwMiwgMTAyLCAxMDIs
IDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTMuMzclMTMzNyUsIDUlLCA1MC4wJSwg
MSknKSIsICInUkdCQVsxMDIsIDEwMiwgMTAyLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdy
Z2JhKCUsIDUwJSwgNTAuMCUsIDEpJykiLCAiJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsK
K3Nob3VsZEJlKCJwYXJzZSgncmdiYSg1MC4wJSwgNTAlLCBhJSwgMSknKSIsICInUkdCQVsxMDIs
IDEwMiwgMTAyLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDUwMCUsIDAlLCAwJSwg
MSknKSIsICInUkdCQVsyNTUsIDAsIDAsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEo
MTAwJSwgMTAwJSwgMTAwJSwgMSknKSIsICInUkdCQVsyNTUsIDI1NSwgMjU1LCAyNTVdJyIpOwor
c2hvdWxkQmUoInBhcnNlKCdyZ2JhKDEwLjUlLCA4MCUsIDcwJSwgMSknKSIsICInUkdCQVsyNiwg
MjA0LCAxNzksIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMCUsIDAlLCAwJSwgMSkn
KSIsICInUkdCQVswLCAwLCAwLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDUwLjAl
LCA1MC4wJSwgNTAuMCUsIDEpJykiLCAiJ1JHQkFbMTI4LCAxMjgsIDEyOCwgMjU1XSciKTsKK3No
b3VsZEJlKCJwYXJzZSgncmdiYSgxMDAlLCAxMDAlLCAxMDAlLCAxKScpIiwgIidSR0JBWzI1NSwg
MjU1LCAyNTUsIDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAuNSUsIDgwJSwgNzAl
LCAxKScpIiwgIidSR0JBWzI2LCAyMDQsIDE3OSwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgn
cmdiYSg1NS41JSwgMC41JSwgMTEwJSwgMSknKSIsICInUkdCQVsxNDIsIDEsIDI1NSwgMjU1XSci
KTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSg2MC41OTk5OCUsIDAuNTk5OTklLCAxMTAuMTIzNDUl
LCAxKScpIiwgIidSR0JBWzE1NSwgMSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdy
Z2JhKDEwLjk5OSUsIDAuOTk5JSwgMC4wMDAwMDklLCAxKScpIiwgIidSR0JBWzI4LCAyLCAwLCAy
NTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDc5Ljk5OTk5JSwgOTkuOTk5OTklLCA1MDAl
LCAxKScpIiwgIidSR0JBWzIwNCwgMjU1LCAyNTUsIDI1NV0nIik7CiBzaG91bGRCZSgicGFyc2Uo
J3JnYmEoMCwgMCwgMCwgLTAuMTApJykiLCAiJ1JHQkFbMCwgMCwgMCwgMF0nIik7CiBzaG91bGRC
ZSgicGFyc2UoJ3JnYmEoMCwgMCwgMCwgLTUuMCknKSIsICInUkdCQVswLCAwLCAwLCAwXSciKTsK
IHNob3VsZEJlKCJwYXJzZSgncmdiYSgwLCAwLCAwLCA1LjApJykiLCAiJ1JHQkFbMCwgMCwgMCwg
MjU1XSciKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NWI3Yzk2Li45MzkzNDA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjEgQEAKKzIwMTEtMDMtMjEgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzog
U2xvdyBwYXJzaW5nIG9mIHJnYigpIHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVt
ZW50IGZhc3QtcGF0aCBwYXJzaW5nIGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAg
ICAgICBHYWluIH4zMCUgc3BlZWR1cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNv
bS9taXNjLzNkLmh0bWwuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzVmFsaWREb3VibGUpOiBFeHRlbmQgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBmb3JtaW5nIGEgdmFsaWQgZG91YmxlLgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VEb3VibGUpOiBGdW5jdGlvbiBmb3IgcGFyc2luZyBkb3VibGUgdmFsdWVzIGlmIHRoZXkgYXJl
IHZhbGlkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xvckludE9yUGVyY2VudGFnZSk6IEV4
dGVuZCBwYXJzZUNvbG9ySW50IHRvIGRlYWwgd2l0aCBwZXJjZW50YWdlIHZhbHVlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlQWxwaGFWYWx1ZSk6IFVzZSB0aGUgbmV3IGZ1bmN0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6IERpdHRvLgorCiAyMDExLTAz
LTIxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBCZW5qYW1pbiBQb3VsYWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA1Mzdm
Y2FjLi41Mzk0Y2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMzg5OCwxMCArMzg5
OCw2MyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZSgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUNvbG9ySW50KGNvbnN0
IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9yLCBpbnQm
IHZhbHVlKQorLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggZm9ybSBh
IHZhbGlkIGRvdWJsZQorLy8gYW5kIGFyZSB0ZXJtaW5hdGVkIGJ5IHRoZSBnaXZlbiB0ZXJtaW5h
dG9yIGNoYXJhY3Rlcgorc3RhdGljIGludCBpc1ZhbGlkRG91YmxlKGNvbnN0IFVDaGFyKiBzdHJp
bmcsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvcikKK3sKKyAgICBpbnQg
bGVuZ3RoID0gZW5kIC0gc3RyaW5nOworICAgIGlmIChsZW5ndGggPCAxKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGJvb2wgZGVjaW1hbE1hcmtTZWVuID0gZmFsc2U7CisgICAgaW50IHByb2Nl
c3NlZExlbmd0aCA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIGlmIChzdHJpbmdbaV0gPT0gdGVybWluYXRvcikgeworICAgICAgICAgICAgcHJv
Y2Vzc2VkTGVuZ3RoID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmICghaXNBU0NJSURpZ2l0KHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIGlmICghZGVjaW1h
bE1hcmtTZWVuICYmIHN0cmluZ1tpXSA9PSAnLicpCisgICAgICAgICAgICAgICAgZGVjaW1hbE1h
cmtTZWVuID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkZWNpbWFsTWFya1NlZW4gJiYgcHJvY2Vz
c2VkTGVuZ3RoID09IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHByb2Nlc3Nl
ZExlbmd0aDsKK30KKworLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3Vt
ZWQgZm9yIHBhcnNpbmcgYSB2YWxpZCBkb3VibGUKKy8vIHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVu
IHRlcm1pbmF0b3IgY2hhcmFjdGVyCitzdGF0aWMgaW50IHBhcnNlRG91YmxlKGNvbnN0IFVDaGFy
KiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgZG91Ymxl
JiB2YWx1ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0gaXNWYWxpZERvdWJsZShzdHJpbmcsIGVuZCwg
dGVybWluYXRvcik7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAg
VmVjdG9yPGNoYXIsIDg+IGJ5dGVzKGxlbmd0aCArIDIpOworCisgICAgLy8gVGhlIGNvbnN1bWVk
IGNoYXJhY3RlcnMgaGVyZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBBU0NJSSBkaWdpdHMgd2l0aCBv
ciB3aXRob3V0IGEgZGVjaW1hbCBtYXJrCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgYnl0ZXNbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihzdHJpbmdbaV0pOwor
CisgICAgdmFsdWUgPSAwOworICAgIGJ5dGVzW2xlbmd0aF0gPSB0ZXJtaW5hdG9yOworICAgIGJ5
dGVzW2xlbmd0aCArIDFdID0gJ1wwJzsKKyAgICBjaGFyKiBmb3VuZFRlcm1pbmF0b3I7CisgICAg
dmFsdWUgPSBXVEY6OnN0cnRvZChieXRlcy5kYXRhKCksICZmb3VuZFRlcm1pbmF0b3IpOworCisg
ICAgcmV0dXJuICgqZm91bmRUZXJtaW5hdG9yID09IHRlcm1pbmF0b3IpID8gbGVuZ3RoIDogMDsK
K30KKworc3RhdGljIGJvb2wgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjb25zdCBVQ2hhciom
IHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzJiBleHBlY3QsIGludCYgdmFsdWUpCiB7CiAgICAgY29uc3Qg
VUNoYXIqIGN1cnJlbnQgPSBzdHJpbmc7Ci0gICAgaW50IGxvY2FsVmFsdWUgPSAwOworICAgIGRv
dWJsZSBsb2NhbFZhbHVlID0gMDsKICAgICBib29sIG5lZ2F0aXZlID0gZmFsc2U7CiAgICAgd2hp
bGUgKGN1cnJlbnQgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpjdXJyZW50KSkKICAgICAgICAgY3Vy
cmVudCsrOwpAQCAtMzkyMiwxMiArMzk3NSw0MSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VD
b2xvckludChjb25zdCBVQ2hhciomIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdAog
ICAgICAgICB9CiAgICAgICAgIGxvY2FsVmFsdWUgPSBuZXdWYWx1ZTsKICAgICB9CisKKyAgICBp
ZiAoZXhwZWN0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmICgqY3VycmVudCA9
PSAnLicgfHwgKmN1cnJlbnQgPT0gJyUnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCpjdXJyZW50ID09ICcuJykgeworICAgICAgICAvLyBXZSBhbHJlYWR5IHBhcnNlZCB0aGUg
aW50ZWdyYWwgcGFydCwgdHJ5IHRvIHBhcnNlCisgICAgICAgIC8vIHRoZSBmcmFjdGlvbiBwYXJ0
IG9mIHRoZSBwZXJjZW50YWdlIHZhbHVlLgorICAgICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDA7
CisgICAgICAgIGludCBwYXJzZWQgPSBwYXJzZURvdWJsZShjdXJyZW50LCBlbmQsICclJywgcGVy
Y2VudGFnZSk7CisgICAgICAgIGlmICghcGFyc2VkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBjdXJyZW50ICs9IHBhcnNlZDsKKyAgICAgICAgaWYgKCpjdXJyZW50ICE9ICcl
JykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbG9jYWxWYWx1ZSArPSBwZXJj
ZW50YWdlOworICAgIH0KKworICAgIGlmIChleHBlY3QgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFICYmICpjdXJyZW50ICE9ICclJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCpjdXJyZW50ID09ICclJykgeworICAgICAgICBleHBlY3QgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgICAgIGxvY2FsVmFsdWUgPSBsb2NhbFZhbHVl
IC8gMTAwLjAgKiAyNTY7CisgICAgICAgIGlmIChsb2NhbFZhbHVlID4gMjU1KQorICAgICAgICAg
ICAgbG9jYWxWYWx1ZSA9IDI1NTsKKyAgICAgICAgY3VycmVudCsrOworICAgIH0gZWxzZQorICAg
ICAgICBleHBlY3QgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKKwogICAgIHdoaWxl
IChjdXJyZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCiAgICAgICAgIGN1cnJl
bnQrKzsKICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgKmN1cnJlbnQrKyAhPSB0ZXJtaW5hdG9y
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gQ2xhbXAgbmVnYXRpdmUgdmFsdWVzIGF0
IHplcm8uCi0gICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBsb2NhbFZhbHVlOworICAgIHZhbHVl
ID0gbmVnYXRpdmUgPyAwIDogc3RhdGljX2Nhc3Q8aW50Pihsb2NhbFZhbHVlKTsKICAgICBzdHJp
bmcgPSBjdXJyZW50OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzk0NSwyMSArNDAyNyw3IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc1RlbnRoQWxwaGEoY29uc3QgVUNoYXIqIHN0cmluZywgY29u
c3QgaW50IGxlbmd0aCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc1ZhbGlkRG91YmxlKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGNvbnN0IGludCBsZW5ndGgpCi17
Ci0gICAgYm9vbCBkZWNpbWFsTWFya1NlZW4gPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KHN0cmluZ1tpXSkp
IHsKLSAgICAgICAgICAgIGlmICghZGVjaW1hbE1hcmtTZWVuICYmIHN0cmluZ1tpXSA9PSAnLicp
Ci0gICAgICAgICAgICAgICAgZGVjaW1hbE1hcmtTZWVuID0gdHJ1ZTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29u
c3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHRlcm1pbmF0b3IsIGlu
dCYgdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFy
KiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIGludCYg
dmFsdWUpCiB7CiAgICAgd2hpbGUgKHN0cmluZyAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKnN0cmlu
ZykpCiAgICAgICAgIHN0cmluZysrOwpAQCAtMzk4MSw3ICs0MDQ5LDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciomIHN0cmluZywgY29uc3QgVUNoYXIq
IGVuZCwgVUNoYXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0cmluZ1swXSAh
PSAnMCcgJiYgc3RyaW5nWzBdICE9ICcxJyAmJiBzdHJpbmdbMF0gIT0gJy4nKSB7Ci0gICAgICAg
IGlmIChpc1ZhbGlkRG91YmxlKHN0cmluZywgbGVuZ3RoIC0gMSkpIHsKKyAgICAgICAgaWYgKGlz
VmFsaWREb3VibGUoc3RyaW5nLCBlbmQsIHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICAgICB2YWx1
ZSA9IG5lZ2F0aXZlID8gMCA6IDI1NTsKICAgICAgICAgICAgIHN0cmluZyA9IGVuZDsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDAwMiwyMCArNDA3MCwxMiBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgcGFyc2VBbHBoYVZhbHVlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciog
ZW5kLCBVQ2hhcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIWlzVmFs
aWREb3VibGUoc3RyaW5nLCBsZW5ndGggLSAxKSkKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBWZWN0b3I8Y2hhciwgOD4gYnl0ZXMobGVuZ3RoICsgMSk7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBieXRlc1tpXSA9IHN0cmluZ1tpXTsKLQotICAg
IGJ5dGVzW2xlbmd0aF0gPSAnXDAnOwotICAgIGNoYXIqIGZvdW5kVGVybWluYXRvcjsKLSAgICBk
b3VibGUgZCA9IFdURjo6c3RydG9kKGJ5dGVzLmRhdGEoKSwgJmZvdW5kVGVybWluYXRvcik7Ci0g
ICAgdmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ+KGQgKiBuZXh0YWZ0ZXIo
MjU2LjAsIDAuMCkpOwotICAgIHN0cmluZyArPSAoZm91bmRUZXJtaW5hdG9yIC0gYnl0ZXMuZGF0
YSgpKSArIDE7Ci0gICAgcmV0dXJuICpmb3VuZFRlcm1pbmF0b3IgPT0gdGVybWluYXRvcjsKKyAg
ICBkb3VibGUgYWxwaGEgPSAwOworICAgIGlmICghcGFyc2VEb3VibGUoc3RyaW5nLCBlbmQsIHRl
cm1pbmF0b3IsIGFscGhhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHZhbHVlID0gbmVn
YXRpdmUgPyAwIDogc3RhdGljX2Nhc3Q8aW50PihhbHBoYSAqIG5leHRhZnRlcigyNTYuMCwgMC4w
KSk7CisgICAgc3RyaW5nID0gZW5kOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW5s
aW5lIGJvb2wgbWlnaHRCZVJHQkEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKQEAgLTQwNDMsNiArNDEwMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNv
bnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQogewogICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIGV4
cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKIAogICAgIGlmICghc3RyaWN0
ICYmIGxlbmd0aCA+PSAzKSB7CiAgICAgICAgIGlmIChuYW1lWzBdID09ICcjJykgewpAQCAtNDA2
MiwxMSArNDEyMywxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcg
Jm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKICAgICAgICAgaW50IGdyZWVuOwogICAg
ICAgICBpbnQgYmx1ZTsKICAgICAgICAgaW50IGFscGhhOwotICAgICAgICBpZiAoIXBhcnNlQ29s
b3JJbnQoY3VycmVudCwgZW5kLCAnLCcsIHJlZCkpCisKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9y
SW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIHJlZCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChjdXJyZW50LCBl
bmQsICcsJywgZ3JlZW4pKQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2Uo
Y3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgZ3JlZW4pKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcsIGJsdWUp
KQorICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAn
LCcsIGV4cGVjdCwgYmx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00MDgzLDExICs0MTQ1LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yKGNvbnN0IFN0cmluZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQog
ICAgICAgICBpbnQgcmVkOwogICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAgIGludCBibHVlOwot
ICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcsIHJlZCkpCisgICAg
ICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhw
ZWN0LCByZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNl
Q29sb3JJbnQoY3VycmVudCwgZW5kLCAnLCcsIGdyZWVuKSkKKyAgICAgICAgaWYgKCFwYXJzZUNv
bG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJl
bnQsIGVuZCwgJyknLCBibHVlKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50
YWdlKGN1cnJlbnQsIGVuZCwgJyknLCBleHBlY3QsIGJsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86486</attachid>
            <date>2011-03-22 11:38:14 -0700</date>
            <delta_ts>2011-03-29 13:57:48 -0700</delta_ts>
            <desc>proposed patch v3</desc>
            <filename>percentage.patch</filename>
            <type>text/plain</type>
            <size>13520</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjZjRkMDE4Li45YmE3YmE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDMt
MjIgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENTUzogU2xvdyBwYXJzaW5nIG9mIHJnYigp
IHdpdGggcGVyY2VudCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NzA4CisKKyAgICAgICAgSW1wbGVtZW50IGZhc3QtcGF0aCBwYXJzaW5n
IGZvciBwZXJjZW50YWdlIGNvbG9yIHZhbHVlcy4KKworICAgICAgICBHYWluIH4zMCUgc3BlZWR1
cCBvbiBodHRwOi8vY2FudmV4LmxhenlpbGx1bWluYXRpLmNvbS9taXNjLzNkLmh0bWwuCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpzOiBBZGQgY2Fz
ZXMgdG8gdGVzdCB0aGUgY29uc2lzdGVuY3kuCisKIDIwMTEtMDMtMjIgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHI4MTY2NC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3JnYmEt
cGFyc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZ2JhLXBhcnNp
bmctZXhwZWN0ZWQudHh0CmluZGV4IDgwYzgwMmMuLjY1MzY0NDIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3JnYmEtcGFyc2luZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvcmdiYS1wYXJzaW5nLWV4cGVjdGVkLnR4dApAQCAtMyw2ICszLDIz
IEBAIFRlc3QgcmdiYSgpIGNvbG9yIHBhcnNpbmcgcmVzdWx0cwogT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgogCiAKK1BBU1MgcGFyc2UoJ3JnYmEoMC45LjklLCAwJSwgMCUsIDEpJykgaXMgJ1JH
QkFbMTAyLCAxMDIsIDEwMiwgMjU1XScKK1BBU1MgcGFyc2UoJ3JnYmEoMCwgMC4uLCAwLCAxKScp
IGlzICdSR0JBWzEwMiwgMTAyLCAxMDIsIDI1NV0nCitQQVNTIHBhcnNlKCdyZ2JhKDEwJSwgLiUs
IDAlLCAxKScpIGlzICdSR0JBWzEwMiwgMTAyLCAxMDIsIDI1NV0nCitQQVNTIHBhcnNlKCdyZ2Jh
KDEzLjM3JTEzMzclLCA1JSwgNTAuMCUsIDEpJykgaXMgJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1
XScKK1BBU1MgcGFyc2UoJ3JnYmEoJSwgNTAlLCA1MC4wJSwgMSknKSBpcyAnUkdCQVsxMDIsIDEw
MiwgMTAyLCAyNTVdJworUEFTUyBwYXJzZSgncmdiYSg1MC4wJSwgNTAlLCBhJSwgMSknKSBpcyAn
UkdCQVsxMDIsIDEwMiwgMTAyLCAyNTVdJworUEFTUyBwYXJzZSgncmdiYSg1MDAlLCAwJSwgMCUs
IDEpJykgaXMgJ1JHQkFbMjU1LCAwLCAwLCAyNTVdJworUEFTUyBwYXJzZSgncmdiYSgxMDAlLCAx
MDAlLCAxMDAlLCAxKScpIGlzICdSR0JBWzI1NSwgMjU1LCAyNTUsIDI1NV0nCitQQVNTIHBhcnNl
KCdyZ2JhKDEwLjUlLCA4MCUsIDcwJSwgMSknKSBpcyAnUkdCQVsyNiwgMjA0LCAxNzksIDI1NV0n
CitQQVNTIHBhcnNlKCdyZ2JhKDAlLCAwJSwgMCUsIDEpJykgaXMgJ1JHQkFbMCwgMCwgMCwgMjU1
XScKK1BBU1MgcGFyc2UoJ3JnYmEoNTAuMCUsIDUwLjAlLCA1MC4wJSwgMSknKSBpcyAnUkdCQVsx
MjgsIDEyOCwgMTI4LCAyNTVdJworUEFTUyBwYXJzZSgncmdiYSgxMDAlLCAxMDAlLCAxMDAlLCAx
KScpIGlzICdSR0JBWzI1NSwgMjU1LCAyNTUsIDI1NV0nCitQQVNTIHBhcnNlKCdyZ2JhKDEwLjUl
LCA4MCUsIDcwJSwgMSknKSBpcyAnUkdCQVsyNiwgMjA0LCAxNzksIDI1NV0nCitQQVNTIHBhcnNl
KCdyZ2JhKDU1LjUlLCAwLjUlLCAxMTAlLCAxKScpIGlzICdSR0JBWzE0MiwgMSwgMjU1LCAyNTVd
JworUEFTUyBwYXJzZSgncmdiYSg2MC41OTk5OCUsIDAuNTk5OTklLCAxMTAuMTIzNDUlLCAxKScp
IGlzICdSR0JBWzE1NSwgMSwgMjU1LCAyNTVdJworUEFTUyBwYXJzZSgncmdiYSgxMC45OTklLCAw
Ljk5OSUsIDAuMDAwMDA5JSwgMSknKSBpcyAnUkdCQVsyOCwgMiwgMCwgMjU1XScKK1BBU1MgcGFy
c2UoJ3JnYmEoNzkuOTk5OTklLCA5OS45OTk5OSUsIDUwMCUsIDEpJykgaXMgJ1JHQkFbMjA0LCAy
NTUsIDI1NSwgMjU1XScKIFBBU1MgcGFyc2UoJ3JnYmEoMCwgMCwgMCwgLTAuMTApJykgaXMgJ1JH
QkFbMCwgMCwgMCwgMF0nCiBQQVNTIHBhcnNlKCdyZ2JhKDAsIDAsIDAsIC01LjApJykgaXMgJ1JH
QkFbMCwgMCwgMCwgMF0nCiBQQVNTIHBhcnNlKCdyZ2JhKDAsIDAsIDAsIDUuMCknKSBpcyAnUkdC
QVswLCAwLCAwLCAyNTVdJwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2Ny
aXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Njcmlw
dC10ZXN0cy9yZ2JhLXBhcnNpbmcuanMKaW5kZXggY2UxMGQzOC4uYjY4MWFmZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL3JnYmEtcGFyc2luZy5qcwor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvcmdiYS1wYXJzaW5nLmpz
CkBAIC0xMiw2ICsxMiwyMyBAQCBmdW5jdGlvbiBwYXJzZShyZ2JhKSB7CiAgICAgcmV0dXJuICJS
R0JBWyIgKyBkYXRhWzBdICsgIiwgIiArIGRhdGFbMV0gKyAiLCAiICsgZGF0YVsyXSArICIsICIg
KyBkYXRhWzNdICsgIl0iOwogfQogCitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMC45LjklLCAwJSwg
MCUsIDEpJykiLCAiJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJz
ZSgncmdiYSgwLCAwLi4sIDAsIDEpJykiLCAiJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsK
K3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMCUsIC4lLCAwJSwgMSknKSIsICInUkdCQVsxMDIsIDEw
MiwgMTAyLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDEzLjM3JTEzMzclLCA1JSwg
NTAuMCUsIDEpJykiLCAiJ1JHQkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsKK3Nob3VsZEJlKCJw
YXJzZSgncmdiYSglLCA1MCUsIDUwLjAlLCAxKScpIiwgIidSR0JBWzEwMiwgMTAyLCAxMDIsIDI1
NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNTAuMCUsIDUwJSwgYSUsIDEpJykiLCAiJ1JH
QkFbMTAyLCAxMDIsIDEwMiwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSg1MDAlLCAw
JSwgMCUsIDEpJykiLCAiJ1JHQkFbMjU1LCAwLCAwLCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNl
KCdyZ2JhKDEwMCUsIDEwMCUsIDEwMCUsIDEpJykiLCAiJ1JHQkFbMjU1LCAyNTUsIDI1NSwgMjU1
XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSgxMC41JSwgODAlLCA3MCUsIDEpJykiLCAiJ1JH
QkFbMjYsIDIwNCwgMTc5LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDAlLCAwJSwg
MCUsIDEpJykiLCAiJ1JHQkFbMCwgMCwgMCwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdi
YSg1MC4wJSwgNTAuMCUsIDUwLjAlLCAxKScpIiwgIidSR0JBWzEyNywgMTI3LCAxMjcsIDI1NV0n
Iik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoMTAwJSwgMTAwJSwgMTAwJSwgMSknKSIsICInUkdC
QVsyNTUsIDI1NSwgMjU1LCAyNTVdJyIpOworc2hvdWxkQmUoInBhcnNlKCdyZ2JhKDEwLjUlLCA4
MCUsIDcwJSwgMSknKSIsICInUkdCQVsyNiwgMjA0LCAxNzksIDI1NV0nIik7CitzaG91bGRCZSgi
cGFyc2UoJ3JnYmEoNTUuNSUsIDAuNSUsIDExMCUsIDEpJykiLCAiJ1JHQkFbMTQyLCAxLCAyNTUs
IDI1NV0nIik7CitzaG91bGRCZSgicGFyc2UoJ3JnYmEoNjAuNTk5OTglLCAwLjU5OTk5JSwgMTEw
LjEyMzQ1JSwgMSknKSIsICInUkdCQVsxNTUsIDEsIDI1NSwgMjU1XSciKTsKK3Nob3VsZEJlKCJw
YXJzZSgncmdiYSgxMC45OTklLCAwLjk5OSUsIDAuMDAwMDA5JSwgMSknKSIsICInUkdCQVsyOCwg
MiwgMCwgMjU1XSciKTsKK3Nob3VsZEJlKCJwYXJzZSgncmdiYSg3OS45OTk5OSUsIDk5Ljk5OTk5
JSwgNTAwJSwgMSknKSIsICInUkdCQVsyMDQsIDI1NSwgMjU1LCAyNTVdJyIpOwogc2hvdWxkQmUo
InBhcnNlKCdyZ2JhKDAsIDAsIDAsIC0wLjEwKScpIiwgIidSR0JBWzAsIDAsIDAsIDBdJyIpOwog
c2hvdWxkQmUoInBhcnNlKCdyZ2JhKDAsIDAsIDAsIC01LjApJykiLCAiJ1JHQkFbMCwgMCwgMCwg
MF0nIik7CiBzaG91bGRCZSgicGFyc2UoJ3JnYmEoMCwgMCwgMCwgNS4wKScpIiwgIidSR0JBWzAs
IDAsIDAsIDI1NV0nIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRiNWExMC4uMmM1ZmU0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTAzLTIyICBBbmRyYXMgQmVjc2kgIDxhYmVjc2lAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDU1M6IFNsb3cgcGFyc2luZyBvZiByZ2IoKSB3aXRoIHBlcmNlbnQgdmFsdWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjcwOAorCisgICAgICAg
IEltcGxlbWVudCBmYXN0LXBhdGggcGFyc2luZyBmb3IgcGVyY2VudGFnZSBjb2xvciB2YWx1ZXMu
CisKKyAgICAgICAgR2FpbiB+MzAlIHNwZWVkdXAgb24gaHR0cDovL2NhbnZleC5sYXp5aWxsdW1p
bmF0aS5jb20vbWlzYy8zZC5odG1sLgorCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc1ZhbGlkRG91YmxlKTogRXh0ZW5kIHRvIHJldHVybiB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgZm9ybWluZyBhIHZhbGlkIGRvdWJsZS4KKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRG91YmxlKTogRnVuY3Rpb24gZm9yIHBhcnNpbmcgZG91YmxlIHZhbHVlcyBpZiB0
aGV5IGFyZSB2YWxpZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UpOiBFeHRlbmQgcGFyc2VDb2xvckludCB0byBkZWFsIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMu
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFscGhhVmFsdWUpOiBVc2UgdGhlIG5ldyBmdW5jdGlv
bnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOiBEaXR0by4KKwog
MjAxMS0wMy0yMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjgxNjUzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAppbmRleCA1MzdmY2FjLi4wYjY3ZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cApAQCAtOTMsNiArOTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgSU5WQUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJ
RVMgPSBVSU5UX01BWDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBNQVhfU0NBTEUgPSAxMDAwMDAw
OwogCiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGEsIGNvbnN0IGNo
YXIqIGIpCiB7CkBAIC0zODk4LDEwICszODk5LDc2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZv
bnRGYWNlVW5pY29kZVJhbmdlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIHBhcnNlQ29sb3JJbnQoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBl
bmQsIFVDaGFyIHRlcm1pbmF0b3IsIGludCYgdmFsdWUpCisvLyBSZXR1cm5zIHRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyB3aGljaCBmb3JtIGEgdmFsaWQgZG91YmxlCisvLyBhbmQgYXJlIHRlcm1p
bmF0ZWQgYnkgdGhlIGdpdmVuIHRlcm1pbmF0b3IgY2hhcmFjdGVyCitzdGF0aWMgaW50IGlzVmFs
aWREb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hh
ciB0ZXJtaW5hdG9yKQoreworICAgIGludCBsZW5ndGggPSBlbmQgLSBzdHJpbmc7CisgICAgaWYg
KGxlbmd0aCA8IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCBkZWNpbWFsTWFya1Nl
ZW4gPSBmYWxzZTsKKyAgICBpbnQgcHJvY2Vzc2VkTGVuZ3RoID0gMDsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ1tpXSA9PSB0ZXJt
aW5hdG9yKSB7CisgICAgICAgICAgICBwcm9jZXNzZWRMZW5ndGggPSBpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoc3RyaW5nW2ldKSkg
eworICAgICAgICAgICAgaWYgKCFkZWNpbWFsTWFya1NlZW4gJiYgc3RyaW5nW2ldID09ICcuJykK
KyAgICAgICAgICAgICAgICBkZWNpbWFsTWFya1NlZW4gPSB0cnVlOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGRlY2ltYWxNYXJrU2VlbiAmJiBwcm9jZXNzZWRMZW5ndGggPT0gMSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gcHJvY2Vzc2VkTGVuZ3RoOworfQorCisvLyBSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBmb3IgcGFyc2luZyBhIHZhbGlkIGRvdWJsZQor
Ly8gdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKK3N0YXRpYyBp
bnQgcGFyc2VEb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29u
c3QgY2hhciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZhbHVlKQoreworICAgIGludCBsZW5ndGggPSBp
c1ZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yKTsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgcG9zaXRpb24gPSAwOworICAgIGRvdWJsZSBs
b2NhbFZhbHVlID0gMDsKKworICAgIC8vIFRoZSBjb25zdW1lZCBjaGFyYWN0ZXJzIGhlcmUgYXJl
IGd1YXJhbnRlZWQgdG8gYmUKKyAgICAvLyBBU0NJSSBkaWdpdHMgd2l0aCBvciB3aXRob3V0IGEg
ZGVjaW1hbCBtYXJrCisgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoOyArK3Bvc2l0aW9uKSB7
CisgICAgICAgIGlmIChzdHJpbmdbcG9zaXRpb25dID09ICcuJykKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBsb2NhbFZhbHVlID0gbG9jYWxWYWx1ZSAqIDEwICsgc3RyaW5nW3Bvc2l0aW9u
XSAtICcwJzsKKyAgICB9CisKKyAgICBpZiAoKytwb3NpdGlvbiA9PSBsZW5ndGgpIHsKKyAgICAg
ICAgdmFsdWUgPSBsb2NhbFZhbHVlOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKwor
ICAgIGRvdWJsZSBmcmFjdGlvbiA9IDA7CisgICAgdW5zaWduZWQgc2NhbGUgPSAxOworCisgICAg
d2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoICYmIHNjYWxlIDwgTUFYX1NDQUxFKSB7CisgICAgICAg
IGZyYWN0aW9uID0gZnJhY3Rpb24gKiAxMCArIHN0cmluZ1twb3NpdGlvbisrXSAtICcwJzsKKyAg
ICAgICAgc2NhbGUgKj0gMTA7CisgICAgfQorCisgICAgdmFsdWUgPSBsb2NhbFZhbHVlICsgKGZy
YWN0aW9uIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzY2FsZSkpOworICAgIHJldHVybiBsZW5ndGg7
Cit9CisKK3N0YXRpYyBib29sIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY29uc3QgVUNoYXIq
JiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyYgZXhwZWN0LCBpbnQmIHZhbHVlKQogewogICAgIGNvbnN0
IFVDaGFyKiBjdXJyZW50ID0gc3RyaW5nOwotICAgIGludCBsb2NhbFZhbHVlID0gMDsKKyAgICBk
b3VibGUgbG9jYWxWYWx1ZSA9IDA7CiAgICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwogICAgIHdo
aWxlIChjdXJyZW50ICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCiAgICAgICAgIGN1
cnJlbnQrKzsKQEAgLTM5MjIsMTIgKzM5ODksNDIgQEAgc3RhdGljIGlubGluZSBib29sIHBhcnNl
Q29sb3JJbnQoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIHQK
ICAgICAgICAgfQogICAgICAgICBsb2NhbFZhbHVlID0gbmV3VmFsdWU7CiAgICAgfQorCisgICAg
aWYgKGV4cGVjdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiAoKmN1cnJlbnQg
PT0gJy4nIHx8ICpjdXJyZW50ID09ICclJykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBwYXJzZWQgdGhl
IGludGVncmFsIHBhcnQsIHRyeSB0byBwYXJzZQorICAgICAgICAvLyB0aGUgZnJhY3Rpb24gcGFy
dCBvZiB0aGUgcGVyY2VudGFnZSB2YWx1ZS4KKyAgICAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAw
OworICAgICAgICBpbnQgcGFyc2VkID0gcGFyc2VEb3VibGUoY3VycmVudCwgZW5kLCAnJScsIHBl
cmNlbnRhZ2UpOworICAgICAgICBpZiAoIXBhcnNlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY3VycmVudCArPSBwYXJzZWQ7CisgICAgICAgIGlmICgqY3VycmVudCAhPSAn
JScpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2FsVmFsdWUgKz0gcGVy
Y2VudGFnZTsKKyAgICB9CisKKyAgICBpZiAoZXhwZWN0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSAmJiAqY3VycmVudCAhPSAnJScpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICgqY3VycmVudCA9PSAnJScpIHsKKyAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOworICAgICAgICBsb2NhbFZhbHVlID0gbG9jYWxWYWx1
ZSAvIDEwMC4wICogMjU2LjA7CisgICAgICAgIC8vIENsYW1wIHZhbHVlcyBhdCAyNTUgZm9yIHBl
cmNlbnRhZ2VzIG92ZXIgMTAwJQorICAgICAgICBpZiAobG9jYWxWYWx1ZSA+IDI1NSkKKyAgICAg
ICAgICAgIGxvY2FsVmFsdWUgPSAyNTU7CisgICAgICAgIGN1cnJlbnQrKzsKKyAgICB9IGVsc2UK
KyAgICAgICAgZXhwZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7CisKICAgICB3
aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKmN1cnJlbnQpKQogICAgICAgICBj
dXJyZW50Kys7CiAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50KysgIT0gdGVybWlu
YXRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIENsYW1wIG5lZ2F0aXZlIHZhbHVl
cyBhdCB6ZXJvLgotICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDogbG9jYWxWYWx1ZTsKKyAgICB2
YWx1ZSA9IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4obG9jYWxWYWx1ZSk7CiAgICAg
c3RyaW5nID0gY3VycmVudDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NDUsMjEgKzQwNDIs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNUZW50aEFscGhhKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGNvbnN0IGludCBsZW5ndGgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNWYWxpZERvdWJsZShjb25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBpbnQgbGVuZ3Ro
KQotewotICAgIGJvb2wgZGVjaW1hbE1hcmtTZWVuID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChzdHJpbmdb
aV0pKSB7Ci0gICAgICAgICAgICBpZiAoIWRlY2ltYWxNYXJrU2VlbiAmJiBzdHJpbmdbaV0gPT0g
Jy4nKQotICAgICAgICAgICAgICAgIGRlY2ltYWxNYXJrU2VlbiA9IHRydWU7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZhbHVl
KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW5hdG9y
LCBpbnQmIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBV
Q2hhciomIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBp
bnQmIHZhbHVlKQogewogICAgIHdoaWxlIChzdHJpbmcgIT0gZW5kICYmIGlzSFRNTFNwYWNlKCpz
dHJpbmcpKQogICAgICAgICBzdHJpbmcrKzsKQEAgLTM5ODEsNyArNDA2NCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJpbmcsIGNvbnN0IFVD
aGFyKiBlbmQsIFVDaGFyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChzdHJpbmdb
MF0gIT0gJzAnICYmIHN0cmluZ1swXSAhPSAnMScgJiYgc3RyaW5nWzBdICE9ICcuJykgewotICAg
ICAgICBpZiAoaXNWYWxpZERvdWJsZShzdHJpbmcsIGxlbmd0aCAtIDEpKSB7CisgICAgICAgIGlm
IChpc1ZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yKSkgewogICAgICAgICAgICAg
dmFsdWUgPSBuZWdhdGl2ZSA/IDAgOiAyNTU7CiAgICAgICAgICAgICBzdHJpbmcgPSBlbmQ7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwMDIsMjAgKzQwODUsMTIgQEAgc3RhdGljIGlu
bGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciomIHN0cmluZywgY29uc3QgVUNo
YXIqIGVuZCwgVUNoYXIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFp
c1ZhbGlkRG91YmxlKHN0cmluZywgbGVuZ3RoIC0gMSkpCi0gICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgVmVjdG9yPGNoYXIsIDg+IGJ5dGVzKGxlbmd0aCArIDEpOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYnl0ZXNbaV0gPSBzdHJpbmdbaV07Ci0K
LSAgICBieXRlc1tsZW5ndGhdID0gJ1wwJzsKLSAgICBjaGFyKiBmb3VuZFRlcm1pbmF0b3I7Ci0g
ICAgZG91YmxlIGQgPSBXVEY6OnN0cnRvZChieXRlcy5kYXRhKCksICZmb3VuZFRlcm1pbmF0b3Ip
OwotICAgIHZhbHVlID0gbmVnYXRpdmUgPyAwIDogc3RhdGljX2Nhc3Q8aW50PihkICogbmV4dGFm
dGVyKDI1Ni4wLCAwLjApKTsKLSAgICBzdHJpbmcgKz0gKGZvdW5kVGVybWluYXRvciAtIGJ5dGVz
LmRhdGEoKSkgKyAxOwotICAgIHJldHVybiAqZm91bmRUZXJtaW5hdG9yID09IHRlcm1pbmF0b3I7
CisgICAgZG91YmxlIGFscGhhID0gMDsKKyAgICBpZiAoIXBhcnNlRG91YmxlKHN0cmluZywgZW5k
LCB0ZXJtaW5hdG9yLCBhbHBoYSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9
IG5lZ2F0aXZlID8gMCA6IHN0YXRpY19jYXN0PGludD4oYWxwaGEgKiBuZXh0YWZ0ZXIoMjU2LjAs
IDAuMCkpOworICAgIHN0cmluZyA9IGVuZDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGlj
IGlubGluZSBib29sIG1pZ2h0QmVSR0JBKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpCkBAIC00MDQzLDYgKzQxMTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xv
cihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsKICAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
cyBleHBlY3QgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CiAKICAgICBpZiAoIXN0
cmljdCAmJiBsZW5ndGggPj0gMykgewogICAgICAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKQEAg
LTQwNjIsMTEgKzQxMzgsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3Ry
aW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAgIGludCBncmVlbjsK
ICAgICAgICAgaW50IGJsdWU7CiAgICAgICAgIGludCBhbHBoYTsKLSAgICAgICAgaWYgKCFwYXJz
ZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQorCisgICAgICAgIGlmICghcGFyc2VD
b2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnQoY3VycmVu
dCwgZW5kLCAnLCcsIGdyZWVuKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50
YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBi
bHVlKSkKKyAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVu
ZCwgJywnLCBleHBlY3QsIGJsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBpZiAoIXBhcnNlQWxwaGFWYWx1ZShjdXJyZW50LCBlbmQsICcpJywgYWxwaGEpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDA4MywxMSArNDE2MCwxMSBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmlj
dCkKICAgICAgICAgaW50IHJlZDsKICAgICAgICAgaW50IGdyZWVuOwogICAgICAgICBpbnQgYmx1
ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCByZWQpKQor
ICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcs
IGV4cGVjdCwgcmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFw
YXJzZUNvbG9ySW50KGN1cnJlbnQsIGVuZCwgJywnLCBncmVlbikpCisgICAgICAgIGlmICghcGFy
c2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghcGFyc2VDb2xvckludChj
dXJyZW50LCBlbmQsICcpJywgYmx1ZSkpCisgICAgICAgIGlmICghcGFyc2VDb2xvckludE9yUGVy
Y2VudGFnZShjdXJyZW50LCBlbmQsICcpJywgZXhwZWN0LCBibHVlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>