<?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>139548</bug_id>
          
          <creation_ts>2014-12-11 11:57:14 -0800</creation_ts>
          <short_desc>Tests with infinite recursion frequently crash</short_desc>
          <delta_ts>2014-12-19 15:45:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=132281</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=139840</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, LayoutTestFailure, MakingBotsRed</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1054567</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-11 11:57:14 -0800</bug_when>
    <thetext>fast/workers/worker-constructor.html crashes every time on 10.8 and 10.9 release bots. 

This started to happen in &lt;http://trac.webkit.org/log/?verbose=on&amp;rev=177149&amp;stop_rev=177144&gt;, although the test used to crash in the same way before that (quite rarely).

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x000000010f1b3126 JSC::CodeBlock::handlerForBytecodeOffset(unsigned int) + 6 (RefCountedArray.h:124)
1   com.apple.JavaScriptCore      	0x000000010f41002f JSC::UnwindFunctor::operator()(JSC::StackVisitor&amp;) + 111 (Interpreter.cpp:649)
2   com.apple.JavaScriptCore      	0x000000010f40cd8b JSC::Interpreter::unwind(void*&amp;, JSC::ExecState*&amp;, JSC::JSValue&amp;) + 587 (StackVisitor.h:127)
3   com.apple.JavaScriptCore      	0x000000010f42b2db JSC::genericUnwind(JSC::VM*, JSC::ExecState*, JSC::JSValue) + 91 (JITExceptions.cpp:52)
4   com.apple.JavaScriptCore      	0x000000010f44f105 lookupExceptionHandlerFromCallerFrame + 85 (Interpreter.h:197)
5   ???                           	0x00003b1d5220aa88 0 + 64997117962888
6   com.apple.JavaScriptCore      	0x000000010f51d4b8 vmEntryToJavaScript + 326
7   com.apple.JavaScriptCore      	0x000000010f4299d9 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 169 (VM.h:378)
8   com.apple.JavaScriptCore      	0x000000010f40f039 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 489 (Interpreter.cpp:978)
9   com.apple.JavaScriptCore      	0x000000010f1a013e JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 62 (CallData.cpp:39)
10  com.apple.JavaScriptCore      	0x000000010f4a890d JSC::JSObject::defaultValue(JSC::JSObject const*, JSC::ExecState*, JSC::PreferredPrimitiveType) + 525 (Register.h:116)
11  com.apple.JavaScriptCore      	0x000000010f47ca0c JSC::JSValue::toStringSlowCase(JSC::ExecState*) const + 732 (JSCJSValue.cpp:369)
12  com.apple.WebCore             	0x00000001117651a4 WebCore::constructJSWorker(JSC::ExecState*) + 132 (JSString.h:667)
13  com.apple.JavaScriptCore      	0x000000010f44f6fd JSC::handleHostCall(JSC::ExecState*, JSC::JSValue, JSC::CodeSpecializationKind) + 189 (JITOperations.cpp:667)
14  com.apple.JavaScriptCore      	0x000000010f44f965 linkFor + 101 (JITOperations.cpp:690)
15  ???                           	0x00003b1d5220a2c4 0 + 64997117960900
16  ???                           	0x00003b1d5220a97f 0 + 64997117962623
17  com.apple.JavaScriptCore      	0x000000010f51d4b8 vmEntryToJavaScript + 326
18  com.apple.JavaScriptCore      	0x000000010f4299d9 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 169 (VM.h:378)
19  com.apple.JavaScriptCore      	0x000000010f40f039 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 489 (Interpreter.cpp:978)
20  com.apple.JavaScriptCore      	0x000000010f1a013e JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 62 (CallData.cpp:39)
21  com.apple.JavaScriptCore      	0x000000010f4a890d JSC::JSObject::defaultValue(JSC::JSObject const*, JSC::ExecState*, JSC::PreferredPrimitiveType) + 525 (Register.h:116)
22  com.apple.JavaScriptCore      	0x000000010f47ca0c JSC::JSValue::toStringSlowCase(JSC::ExecState*) const + 732 (JSCJSValue.cpp:369)
23  com.apple.WebCore             	0x00000001117651a4 WebCore::constructJSWorker(JSC::ExecState*) + 132 (JSString.h:667)
24  com.apple.JavaScriptCore      	0x000000010f44f6fd JSC::handleHostCall(JSC::ExecState*, JSC::JSValue, JSC::CodeSpecializationKind) + 189 (JITOperations.cpp:667)
25  com.apple.JavaScriptCore      	0x000000010f44f965 linkFor + 101 (JITOperations.cpp:690)
26  ???                           	0x00003b1d5220a2c4 0 + 64997117960900
27  ???                           	0x00003b1d5220a97f 0 + 64997117962623
28  com.apple.JavaScriptCore      	0x000000010f51d4b8 vmEntryToJavaScript + 326
29  com.apple.JavaScriptCore      	0x000000010f4299d9 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 169 (VM.h:378)
30  com.apple.JavaScriptCore      	0x000000010f40f039 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 489 (Interpreter.cpp:978)
31  com.apple.JavaScriptCore      	0x000000010f1a013e JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 62 (CallData.cpp:39)
32  com.apple.JavaScriptCore      	0x000000010f4a890d JSC::JSObject::defaultValue(JSC::JSObject const*, JSC::ExecState*, JSC::PreferredPrimitiveType) + 525 (Register.h:116)
33  com.apple.JavaScriptCore      	0x000000010f47ca0c JSC::JSValue::toStringSlowCase(JSC::ExecState*) const + 732 (JSCJSValue.cpp:369)
34  com.apple.WebCore             	0x00000001117651a4 WebCore::constructJSWorker(JSC::ExecState*) + 132 (JSString.h:667)
35  com.apple.JavaScriptCore      	0x000000010f44f6fd JSC::handleHostCall(JSC::ExecState*, JSC::JSValue, JSC::CodeSpecializationKind) + 189 (JITOperations.cpp:667)
36  com.apple.JavaScriptCore      	0x000000010f44f965 linkFor + 101 (JITOperations.cpp:690)
37  ???                           	0x00003b1d5220a2c4 0 + 64997117960900
38  ???                           	0x00003b1d5220a97f 0 + 64997117962623
39  com.apple.JavaScriptCore      	0x000000010f51d4b8 vmEntryToJavaScript + 326
40  com.apple.JavaScriptCore      	0x000000010f4299d9 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 169 (VM.h:378)
41  com.apple.JavaScriptCore      	0x000000010f40f039 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 489 (Interpreter.cpp:978)
42  com.apple.JavaScriptCore      	0x000000010f1a013e JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 62 (CallData.cpp:39)
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054585</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-11 12:40:30 -0800</bug_when>
    <thetext>Skipped in &lt;http://trac.webkit.org/r177174&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054605</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 13:33:01 -0800</bug_when>
    <thetext>The test itself creates the recursion.  The bug appears to be that we crash sometimes when handling the stack overflow exception.

function testRecursiveWorkerCreation()
{
    try {
        var foo = {toString:function(){new Worker(foo)}}
        new Worker(foo);
        log(&quot;FAIL: no exception when trying to create workers recursively&quot;);
    } catch (ex) {
        log(&quot;PASS: trying to create workers recursively resulted in an exception (&quot; + ex + &quot;)&quot;);
    }
    runNextTest();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054610</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-11 13:51:54 -0800</bug_when>
    <thetext>I suspect that the issue is in lookupExceptionHandlerFromCallerFrame() when it gets its caller&apos;s frame.  That it isn&apos;t getting a JS frame, but a native frame.  It is hard to prove without being able to reproduce the issue.

Thinking about how to write a reliable test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055528</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-14 18:34:25 -0800</bug_when>
    <thetext>Another test for recursion started to crash today in a similar manner, fast/xmlhttprequest/xmlhttprequest-recursive-sync-event.html. This started with &lt;http://trac.webkit.org/changeset/177264&gt;, which is clearly unrelated.

Given that we started to see multiple infinite recursion tests misbehave any time anything changes in stack depth, there must have been a very recent regression that broke this for real.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055529</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-14 18:38:27 -0800</bug_when>
    <thetext>Updated expectations in &lt;http://trac.webkit.org/r177268&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055689</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-15 11:44:02 -0800</bug_when>
    <thetext>It&apos;s possible that we had a bug all along, and &lt;http://trac.webkit.org/changeset/177146&gt;, by changing the depth of the stack, triggered the bug in our tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055693</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-15 11:50:22 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; It&apos;s possible that we had a bug all along, and
&gt; &lt;http://trac.webkit.org/changeset/177146&gt;, by changing the depth of the
&gt; stack, triggered the bug in our tests.

That is the assumption I&apos;m working under.  I&apos;m developing a test case now to catch this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055696</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-15 12:01:23 -0800</bug_when>
    <thetext>This is what I think too, expect that I&apos;m also saying that the underlying bug was likely introduced very recently.

Neither r177146 not r177264 introduced the root cause, but the fact that unrelated check-ins made within a few days triggered similar problems in different tests fairly strongly indicates that we didn&apos;t have the problem until recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056197</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-16 17:36:26 -0800</bug_when>
    <thetext>rdar://problem/19272941</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056222</commentid>
    <comment_count>10</comment_count>
      <attachid>243419</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-16 18:25:42 -0800</bug_when>
    <thetext>Created attachment 243419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056227</commentid>
    <comment_count>11</comment_count>
      <attachid>243419</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-16 18:45:17 -0800</bug_when>
    <thetext>Comment on attachment 243419
Patch

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

&gt; LayoutTests/ChangeLog:10
&gt; +        * js/regress-139548-expected.txt: Added.

Nice! Could you please also unskip the two tests skipped due to this issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056244</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-16 19:13:45 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 243419 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243419&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:10
&gt; &gt; +        * js/regress-139548-expected.txt: Added.
&gt; 
&gt; Nice! Could you please also unskip the two tests skipped due to this issue?

I will unskip the three tests skipped in &lt;http://trac.webkit.org/changeset/177268&gt; when I check this in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056373</commentid>
    <comment_count>13</comment_count>
      <attachid>243419</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-17 10:47:30 -0800</bug_when>
    <thetext>Comment on attachment 243419
Patch

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

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:650
&gt; +        if (!m_isTermination &amp;&amp; !m_codeBlock)
&gt; +            return StackVisitor::Continue;

Two things are incorrect about this:

(1) It will continue past a host call frame, even though unwinding is supposed to stop at host call frames;

(2) It will unwind a frame without notifying the profiler.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:-672
&gt; -    ASSERT(codeBlock);

When/why is it valid to attempt to unwind the current frame without a code block?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056464</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-17 11:26:02 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 243419 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243419&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:650
&gt; &gt; +        if (!m_isTermination &amp;&amp; !m_codeBlock)
&gt; &gt; +            return StackVisitor::Continue;
&gt; 
&gt; Two things are incorrect about this:
&gt; 
&gt; (1) It will continue past a host call frame, even though unwinding is
&gt; supposed to stop at host call frames;
&gt; 
&gt; (2) It will unwind a frame without notifying the profiler.

I&apos;ll post a patch with a fix.
 
&gt; &gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:-672
&gt; &gt; -    ASSERT(codeBlock);
&gt; 
&gt; When/why is it valid to attempt to unwind the current frame without a code
&gt; block?

If the stack overflow check at the top of a JS function fails, which is before we allocate locals on the stack, we throw an out of stack exception.  We can&apos;t process the exception with the callee&apos;s frame, it is incomplete.  Also, we have to handle the exception somewhere up the stack from the callee.  Therefore we start unwinding beginning with the caller&apos;s frame.  If the caller is native code it won&apos;t have a code block.  Here is the top of a back trace from that ASSERT in just such a case:

 bt 40
* thread #1: tid = 0x793ad, 0x00000001009d90aa JavaScriptCore`WTFCrash + 42 at Assertions.cpp:321, queue = &apos;com.apple.main-thread&apos;, stop reason = EXC_BAD_ACCESS (code=1, address=0xbbadbeef)
  * frame #0: 0x00000001009d90aa JavaScriptCore`WTFCrash + 42 at Assertions.cpp:321
    frame #1: 0x000000010060574d JavaScriptCore`JSC::Interpreter::unwind(this=0x0000000105ff4000, vmEntryFrame=0x00007fff5f81f668, callFrame=0x00007fff5f81f678, exceptionValue=0x00007fff5f81f688) + 93 at Interpreter.cpp:674
    frame #2: 0x000000010062667a JavaScriptCore`JSC::genericUnwind(vm=0x0000000104010000, callFrame=0x00007fff5f81fb90, exceptionValue=JSValue at 0x00007fff5f81f688) + 202 at JITExceptions.cpp:52
    frame #3: 0x0000000100638b33 JavaScriptCore`lookupExceptionHandlerFromCallerFrame(vm=0x0000000104010000, exec=0x00007fff5f81f700) + 227 at JITOperations.cpp:1867
    frame #4: 0x00005177fc803261
    frame #5: 0x0000000100798dd9 JavaScriptCore`vmEntryToJavaScript + 361
    frame #6: 0x00000001006230aa JavaScriptCore`JSC::JITCode::execute(this=0x00000001057ce000, vm=0x0000000104010000, protoCallFrame=0x00007fff5f81f8f0) + 266 at JITCode.cpp:77
    frame #7: 0x00000001006076f4 JavaScriptCore`JSC::Interpreter::executeCall(this=0x0000000105ff4000, callFrame=0x00007fff5f81fb90, function=0x0000000103cec230, callType=CallTypeJS, callData=0x00007fff5f81fb30, thisValue=JSValue at 0x00007fff5f81f9d0, args=0x00007fff5f81faf0) + 1508 at Interpreter.cpp:980
    frame #8: 0x000000010010e45e JavaScriptCore`JSC::call(exec=0x00007fff5f81fb90, functionObject=JSValue at 0x00007fff5f81fab0, callType=CallTypeJS, callData=0x00007fff5f81fb30, thisValue=JSValue at 0x00007fff5f81faa8, args=0x00007fff5f81faf0) + 190 at CallData.cpp:39
    frame #9: 0x00000001007fb77c JavaScriptCore`JSC::objectProtoFuncToLocaleString(exec=0x00007fff5f81fb90) + 364 at ObjectPrototype.cpp:210
    frame #10: 0x00005177fc801034
    frame #11: 0x000051783c80050b
    frame #12: 0x000051783c800715
    frame #13: 0x000051783c800715
    frame #14: 0x000051783c800715</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056504</commentid>
    <comment_count>15</comment_count>
      <attachid>243452</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-17 12:34:40 -0800</bug_when>
    <thetext>Created attachment 243452
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056520</commentid>
    <comment_count>16</comment_count>
      <attachid>243452</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-17 13:12:30 -0800</bug_when>
    <thetext>Comment on attachment 243452
Updated patch

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

r=me

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:650
&gt; +        if (m_isTermination || !(m_handler = m_codeBlock ? m_codeBlock-&gt;handlerForBytecodeOffset(bytecodeOffset) : 0)) {

Should be nullptr instead of 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056534</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-12-17 13:37:54 -0800</bug_when>
    <thetext>Committed r177460: &lt;http://trac.webkit.org/changeset/177460&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243419</attachid>
            <date>2014-12-16 18:25:42 -0800</date>
            <delta_ts>2014-12-17 12:34:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>139548.patch</filename>
            <type>text/plain</type>
            <size>6512</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3NDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBA
CisyMDE0LTEyLTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRlc3RzIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIGZyZXF1ZW50bHkgY3Jhc2gKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTU0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoaWxlIHVud2luZGlu
ZywgaWYgd2UgZG9uJ3QgaGF2ZSBhIGNvZGVibG9jaywgdGhlbiB3ZSBhcmUgaW4gbmF0aXZlIGNv
ZGUgYW5kIHNob3VsZCAKKyAgICAgICAgY29udGludWUgdW53aW5kaW5nLgorCisgICAgICAgICog
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9y
OjpvcGVyYXRvcigpKToKKwogMjAxNC0xMi0xNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVl
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3NzM4MC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTc3NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ2LDYgKzY0Niw5IEBA
IHB1YmxpYzoKICAgICAgICAgbV9jb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgp
OwogCisgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uICYmICFtX2NvZGVCbG9jaykKKyAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworCiAgICAgICAgIGlmIChtX2lz
VGVybWluYXRpb24gfHwgIShtX2hhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKICAgICAgICAgICAgIGlmICghdW53aW5kQ2Fs
bEZyYW1lKHZpc2l0b3IpKSB7CiAgICAgICAgICAgICAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBw
cm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQpAQCAtNjY5LDcgKzY3Miw2IEBAIHByaXZh
dGU6CiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1bndpbmQoVk1FbnRy
eUZyYW1lKiYgdm1FbnRyeUZyYW1lLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUmIGV4
Y2VwdGlvblZhbHVlKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBib29sIGlzVGVybWluYXRp
b24gPSBmYWxzZTsKIAogICAgIEFTU0VSVCghZXhjZXB0aW9uVmFsdWUuaXNFbXB0eSgpKTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE3NzQwOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE0LTEyLTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFRlc3RzIHdpdGggaW5maW5pdGUgcmVjdXJzaW9u
IGZyZXF1ZW50bHkgY3Jhc2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzOTU0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5ldyB0ZXN0IHRoYXQgZXhlcmNpc2VzIHRoZSB2YXJpb3VzIHBsYWNlcyB0aGF0
IHdlIGRvIHN0YWNrIG92ZXJmbG93IGNoZWNrcy4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MtMTM5
NTQ4LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy0xMzk1NDguaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTM5NTQ4LmpzOiBB
ZGRlZC4KKyAgICAgICAgKFRvU3RyaW5nT2JqKToKKyAgICAgICAgKFRvU3RyaW5nT2JqLnByb3Rv
dHlwZS50b1N0cmluZyk6CisgICAgICAgIChtYWtlQXJnc0FycmF5KToKKyAgICAgICAgKHJlY3Vy
c2VOb0RGRyk6CisgICAgICAgIChyZWN1cnNlKToKKyAgICAgICAgKHByb2JlQW5kUmVjdXJzZSk6
CisKIDIwMTQtMTItMTYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZWJhc2VsaW5lIE1hdmVyaWNrcyB0ZXN0IHJlc3VsdCBhZnRlciByMTc3Mzk4
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTEzOTU0OC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xMzk1NDgtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xMzk1NDgtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczov
L3dlYmtpdC5vcmcvYi8xMzk1NDguIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNoLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTM5NTQ4
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xMzk1NDguaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTM5NTQ4Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTM5NTQ4LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9yZWdyZXNzLTEzOTU0OC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcmVncmVzcy0xMzk1NDgu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcmVncmVzcy0x
Mzk1NDguanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKK2Rlc2NyaXB0aW9uKCJS
ZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzOTU0OC4gVGhpcyB0ZXN0
IHNob3VsZCBub3QgY3Jhc2guIik7CisKK3ZhciBtYXhBcmdDb3VudCA9IDg7Cit2YXIgYXJnSW5j
cmVtZW50ID0gMTsKKworZnVuY3Rpb24gVG9TdHJpbmdPYmooKQoreworICAgIHM6ICIiCit9CisK
Ky8vIFdhbnQgYSBmdW5jdGlvbiB0aGF0IGEgbmF0aXZlIEMrKyBmdW5jdGlvbiBjYW4gY2FsbC4K
K1RvU3RyaW5nT2JqLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyB0aGlzLnMgPSBu
ZXcgU3RyaW5nKCIiKTsgcmV0dXJuIHRoaXMuczsgfTsKKwordmFyIG15T2JqID0gbmV3IFRvU3Ry
aW5nT2JqKCk7CisKK2Z1bmN0aW9uIG1ha2VBcmdzQXJyYXkoZmlyc3RBcmcsIGFyZ0NvdW50KQor
eworICAgIHZhciBhcmdzID0gW2ZpcnN0QXJnXTsKKyAgICBmb3IgKHZhciBhcmdJbmRleCA9IDE7
IGFyZ0luZGV4IDwgYXJnQ291bnQ7IGFyZ0luZGV4KyspCisgICAgICAgIGFyZ3MucHVzaChhcmdJ
bmRleCk7CisKKyAgICByZXR1cm4gYXJnczsKK30KKworZnVuY3Rpb24gcmVjdXJzZU5vREZHKGRl
cHRoKQoreworICAgIHZhciBzID0gIiI7CisgICAgaWYgKGRlcHRoIDw9IDApCisgICAgICAgIHJl
dHVybiAwOworCisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXhBcmdDb3VudDsgaSArPSBhcmdJ
bmNyZW1lbnQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHMgPSBteU9iai50b0xvY2Fs
ZVN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2VOb0RGRy5hcHBseSh0aGlzLCBt
YWtlQXJnc0FycmF5KGRlcHRoIC0gMSwgaSkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0cmluZykKKyAgICAgICAgICAgICAgICB0aHJvdyBl
OworCisgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IG1heEFyZ0NvdW50OyBqICs9IGFy
Z0luY3JlbWVudCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAg
IHMgPSBteU9iai50b0xvY2FsZVN0cmluZygpOworICAgICAgICAgICAgICAgICAgICByZWN1cnNl
Tm9ERkcuYXBwbHkodGhpcywgbWFrZUFyZ3NBcnJheShkZXB0aCAtIDEsIGopKSArIDE7CisgICAg
ICAgICAgICAgICAgfSBjYXRjaCAoZTEpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHRocm93ICJHb3QgYW4gZXhjZXB0aW9uIjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcy5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIHJlY3Vyc2UoZGVwdGgp
Cit7CisgICAgdmFyIHMgPSAiIjsKKworICAgIGlmIChkZXB0aCA8PSAwKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbWF4QXJnQ291bnQ7IGkgKz0gYXJnSW5j
cmVtZW50KSB7CisgICAgICAgIHMgPSBteU9iai50b0xvY2FsZVN0cmluZygpOworICAgICAgICBy
ZXR1cm4gcmVjdXJzZS5hcHBseSh0aGlzLCBtYWtlQXJnc0FycmF5KGRlcHRoIC0gMSwgaSkpOwor
ICAgIH0KKworICAgIHJldHVybiBzLmxlbmd0aDsKK30KKworZnVuY3Rpb24gcHJvYmVBbmRSZWN1
cnNlKGRlcHRoKQoreworICAgIHZhciByZXN1bHQ7CisKKyAgICAvLyBQcm9iZSBzdGFjayBkZXB0
aAorICAgIHRyeSB7CisgICAgICAgIHJlc3VsdCA9IHByb2JlQW5kUmVjdXJzZShkZXB0aCk7Cisg
ICAgICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgICAgICAgICAgIGRlcHRoID0gNTA7CisgICAgICAg
IGVsc2UgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgMTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIC8vIEdvIHVwIGEgc2V2ZXJhbCBmcmFtZXMgYW5kIHRoZW4gY2FsbCByZWN1cnNp
dmUgZnVuY3Rpb25zIHRoYXQgY29uc3VtZQorICAgICAgICAvLyB2YXJpYWJsZSBzdGFjayBhbW91
bnRzIGluIGFuIGVmZm9ydCB0byBleGVyY2lzZSB2YXJpb3VzIHN0YWNrIGNoZWNrcy4KKyAgICAg
ICAgcmV0dXJuIC02OworICAgIH0KKworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbWF4QXJnQ291
bnQ7IGkgKz0gYXJnSW5jcmVtZW50KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZWN1
cnNlTm9ERkcuYXBwbHkodGhpcywgbWFrZUFyZ3NBcnJheShkZXB0aCwgaSkpOworICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8
IG1heEFyZ0NvdW50OyBpICs9IGFyZ0luY3JlbWVudCkgeworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgcmVjdXJzZS5hcHBseSh0aGlzLCBtYWtlQXJnc0FycmF5KGRlcHRoLCBpKSk7CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAxOworfQor
CisvLyBXYXJtIHVwIHJlY3Vyc2UgZnVuY3Rpb25zCitmb3IgKHZhciBsb29wQ291bnQgPSAwOyBs
b29wQ291bnQgPCA1MDAwOyBsb29wQ291bnQrKykKKyAgICByZWN1cnNlKDEwKTsKKworcHJvYmVB
bmRSZWN1cnNlKDApOwo=
</data>
<flag name="review"
          id="268295"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243452</attachid>
            <date>2014-12-17 12:34:40 -0800</date>
            <delta_ts>2014-12-17 13:12:30 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>139548-2.patch</filename>
            <type>text/plain</type>
            <size>9258</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3NDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDE0LTEyLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFRlc3RzIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIGZyZXF1ZW50bHkgY3Jhc2gKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTU0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoaWxlIHVud2luZGlu
ZywgaWYgdGhlIGNhbGwgZnJhbWUgZG9lc24ndCBoYXZlIGEgY29kZWJsb2NrLCB0aGVuIHdlCisg
ICAgICAgIGFyZSBpbiBuYXRpdmUgY29kZSwgaGFuZGxlIGFwcHJvcHJpYXRlbHkuCisKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OnVud2luZENh
bGxGcmFtZSk6CisgICAgICAgIChKU0M6OlVud2luZEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAg
ICAgICBBZGRlZCBjaGVja3MgZm9yIG51bGwgQ29kZUJsb2NrLgorCisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjp1bndpbmQpOiBSZW1vdmVkIHdyb25nIEFTU0VSVC4KKwogMjAxNC0xMi0xNyAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBDb3Jy
ZWN0IERlYnVnU3VmZml4IGJ1aWxkcyB1bmRlciBNU0J1aWxkCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE3
NzQwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNiw3ICs0MzYsNiBAQCBib29sIEludGVycHJldGVyOjpp
c09wY29kZShPcGNvZGUgb3Bjb2RlCiBzdGF0aWMgYm9vbCB1bndpbmRDYWxsRnJhbWUoU3RhY2tW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gdmlzaXRvci0+
Y2FsbEZyYW1lKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxv
Y2soKTsKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xv
YmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKICAgICAgICAgQ2xlYXJFeGNlcHRpb25TY29wZSBz
Y29wZSgmY2FsbEZyYW1lLT52bSgpKTsKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQpAQCAtNDQ2LDIwICs0NDUsMjIgQEAgc3RhdGlj
IGJvb2wgdW53aW5kQ2FsbEZyYW1lKFN0YWNrVmlzaXRvcgogICAgICAgICBBU1NFUlQoIWNhbGxG
cmFtZS0+aGFkRXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIGlmIChjb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCkpIHsK
KyAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkgewor
ICAgICAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2Rl
QmxvY2stPm5lZWRzQWN0aXZhdGlvbigpKSB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKCF2aXNpdG9yLT5pc0lubGluZWRGcmFtZSgpKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCF2aXNpdG9yLT5pc0lubGluZWRGcmFtZSgpKTsKICNlbmRpZgotICAg
IH0KKyAgICAgICAgfQogCi0gICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpIHsKLSAgICAgICAgaWYgKEFyZ3Vt
ZW50cyogYXJndW1lbnRzID0gdmlzaXRvci0+ZXhpc3RpbmdBcmd1bWVudHMoKSkgeworICAgICAg
ICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxvY2st
PnVzZXNBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgaWYgKEFyZ3VtZW50cyogYXJndW1lbnRz
ID0gdmlzaXRvci0+ZXhpc3RpbmdBcmd1bWVudHMoKSkgewogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmlzSW5saW5lZEZyYW1lKCkpCi0gICAgICAgICAgICAg
ICAgYXJndW1lbnRzLT50ZWFyT2ZmKGNhbGxGcmFtZSwgdmlzaXRvci0+aW5saW5lQ2FsbEZyYW1l
KCkpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLT5pc0lu
bGluZWRGcmFtZSgpKQorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnRlYXJPZmYoY2Fs
bEZyYW1lLCB2aXNpdG9yLT5pbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQogI2VuZGlmCi0gICAgICAgICAgICAgICAgYXJndW1lbnRzLT50ZWFyT2ZmKGNhbGxGcmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+dGVhck9mZihjYWxsRnJhbWUpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC02NDYsNyArNjQ3LDcgQEAgcHVibGlj
OgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CiAKLSAg
ICAgICAgaWYgKG1faXNUZXJtaW5hdGlvbiB8fCAhKG1faGFuZGxlciA9IG1fY29kZUJsb2NrLT5o
YW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgeworICAgICAgICBpZiAo
bV9pc1Rlcm1pbmF0aW9uIHx8ICEobV9oYW5kbGVyID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9j
ay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSA6IDApKSB7CiAgICAg
ICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZSh2aXNpdG9yKSkgewogICAgICAgICAgICAgICAg
IGlmIChMZWdhY3lQcm9maWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAg
ICAgICAgICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChtX2NhbGxGcmFtZSk7
CkBAIC02NjksNyArNjcwLDYgQEAgcHJpdmF0ZToKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyog
SW50ZXJwcmV0ZXI6OnVud2luZChWTUVudHJ5RnJhbWUqJiB2bUVudHJ5RnJhbWUsIENhbGxGcmFt
ZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUpCiB7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIEFTU0VSVChjb2RlQmxv
Y2spOwogICAgIGJvb2wgaXNUZXJtaW5hdGlvbiA9IGZhbHNlOwogCiAgICAgQVNTRVJUKCFleGNl
cHRpb25WYWx1ZS5pc0VtcHR5KCkpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3NDUyKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQt
MTItMTcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgVGVz
dHMgd2l0aCBpbmZpbml0ZSByZWN1cnNpb24gZnJlcXVlbnRseSBjcmFzaAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NTQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3QgdGhhdCBleGVyY2lz
ZXMgdGhlIHZhcmlvdXMgcGxhY2VzIHRoYXQgd2UgZG8gc3RhY2sgb3ZlcmZsb3cgY2hlY2tzLgor
CisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBqcy9yZWdyZXNzLTEzOTU0
OC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MtMTM5NTQ4Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9yZWdyZXNzLTEzOTU0OC5qczogQWRk
ZWQuCisgICAgICAgIChUb1N0cmluZ09iaik6CisgICAgICAgIChUb1N0cmluZ09iai5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAobWFrZUFyZ3NBcnJheSk6CisgICAgICAgIChyZWN1cnNl
Tm9ERkcpOgorICAgICAgICAocmVjdXJzZSk6CisgICAgICAgIChwcm9iZUFuZFJlY3Vyc2UpOgor
CiAyMDE0LTEyLTE2ICBTaGl2YWt1bWFyIEpNICA8c2hpdmEuam1Ac2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgdGV4dCBub2RlIHNob3VsZCBub3QgYmUgY3JlYXRlZCwgT24gc2V0dGluZyBkb2N1bWVu
dC50aXRsZSB0byB0aGUgZW1wdHkgc3RyaW5nLgpJbmRleDogTGF5b3V0VGVzdHMvVGVzdEV4cGVj
dGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCShyZXZp
c2lvbiAxNzc0MDgpCisrKyBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjQsMTAgKzMyNCw2IEBAIHdlYmtpdC5vcmcvYi8xMzk1OTUgaHR0cC90ZXN0cy94
bWxodHRwcmUKIFsgRGVidWcgXSBmYXN0L2hpc3RvcnkvaGlzdG9yeS1iYWNrLXdoaWxlLXBkZi1p
bi1wYWdlY2FjaGUuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzEyMTYyOCBbIFJlbGVhc2Ug
XSBmYXN0L2hpc3RvcnkvaGlzdG9yeS1iYWNrLXdoaWxlLXBkZi1pbi1wYWdlY2FjaGUuaHRtbCBb
IFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKLSMgQ2F0Y2hpbmcgaW5maW5pdGUgcmVjdXJzaW9u
IGlzIGJyb2tlbi4KLXdlYmtpdC5vcmcvYi8xMzk1NDggZmFzdC93b3JrZXJzL3dvcmtlci1jb25z
dHJ1Y3Rvci5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTM5NTQ4IGZhc3QveG1saHR0cHJl
cXVlc3QveG1saHR0cHJlcXVlc3QtcmVjdXJzaXZlLXN5bmMtZXZlbnQuaHRtbCBbIFNraXAgXQot
CiAjIE5ldHdvcmsgcHJvY2VzcyBkaXNrIGNhY2hlIGlzIG5vdCBlbmFibGVkIHlldAogd2Via2l0
Lm9yZy9iLzMwMzIyIGh0dHAvdGVzdHMvY2FjaGUvZGlzay1jYWNoZS12YWxpZGF0aW9uLmh0bWwg
WyBTa2lwIF0KIApJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xMzk1NDgtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTM5NTQ4LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTM5NTQ4LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK1JlZ3Jlc3Npb24gdGVzdCBm
b3IgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTM5NTQ4LiBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBjcmFz
aC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzLTEzOTU0OC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTM5
NTQ4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTEzOTU0OC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWdyZXNzLTEzOTU0OC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcmVncmVzcy0x
Mzk1NDguanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jl
c3MtMTM5NTQ4LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L3JlZ3Jlc3MtMTM5NTQ4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACitkZXNj
cmlwdGlvbigiUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL3dlYmtpdC5vcmcvYi8xMzk1NDgu
IFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNoLiIpOworCit2YXIgbWF4QXJnQ291bnQgPSA4Owor
dmFyIGFyZ0luY3JlbWVudCA9IDE7CisKK2Z1bmN0aW9uIFRvU3RyaW5nT2JqKCkKK3sKKyAgICBz
OiAiIgorfQorCisvLyBXYW50IGEgZnVuY3Rpb24gdGhhdCBhIG5hdGl2ZSBDKysgZnVuY3Rpb24g
Y2FuIGNhbGwuCitUb1N0cmluZ09iai5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsg
dGhpcy5zID0gbmV3IFN0cmluZygiIik7IHJldHVybiB0aGlzLnM7IH07CisKK3ZhciBteU9iaiA9
IG5ldyBUb1N0cmluZ09iaigpOworCitmdW5jdGlvbiBtYWtlQXJnc0FycmF5KGZpcnN0QXJnLCBh
cmdDb3VudCkKK3sKKyAgICB2YXIgYXJncyA9IFtmaXJzdEFyZ107CisgICAgZm9yICh2YXIgYXJn
SW5kZXggPSAxOyBhcmdJbmRleCA8IGFyZ0NvdW50OyBhcmdJbmRleCsrKQorICAgICAgICBhcmdz
LnB1c2goYXJnSW5kZXgpOworCisgICAgcmV0dXJuIGFyZ3M7Cit9CisKK2Z1bmN0aW9uIHJlY3Vy
c2VOb0RGRyhkZXB0aCkKK3sKKyAgICB2YXIgcyA9ICIiOworICAgIGlmIChkZXB0aCA8PSAwKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbWF4QXJnQ291bnQ7
IGkgKz0gYXJnSW5jcmVtZW50KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzID0gbXlP
YmoudG9Mb2NhbGVTdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybiByZWN1cnNlTm9ERkcuYXBw
bHkodGhpcywgbWFrZUFyZ3NBcnJheShkZXB0aCAtIDEsIGkpKTsKKyAgICAgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdHJpbmcpCisgICAgICAgICAgICAg
ICAgdGhyb3cgZTsKKworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBtYXhBcmdDb3Vu
dDsgaiArPSBhcmdJbmNyZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgICAgICBzID0gbXlPYmoudG9Mb2NhbGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVjdXJzZU5vREZHLmFwcGx5KHRoaXMsIG1ha2VBcmdzQXJyYXkoZGVwdGggLSAxLCBqKSkg
KyAxOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUxKSB7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aHJvdyAiR290IGFuIGV4Y2VwdGlvbiI7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHMubGVuZ3RoOworfQorCitmdW5jdGlvbiByZWN1
cnNlKGRlcHRoKQoreworICAgIHZhciBzID0gIiI7CisKKyAgICBpZiAoZGVwdGggPD0gMCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IG1heEFyZ0NvdW50OyBp
ICs9IGFyZ0luY3JlbWVudCkgeworICAgICAgICBzID0gbXlPYmoudG9Mb2NhbGVTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHJlY3Vyc2UuYXBwbHkodGhpcywgbWFrZUFyZ3NBcnJheShkZXB0aCAt
IDEsIGkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcy5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIHBy
b2JlQW5kUmVjdXJzZShkZXB0aCkKK3sKKyAgICB2YXIgcmVzdWx0OworCisgICAgLy8gUHJvYmUg
c3RhY2sgZGVwdGgKKyAgICB0cnkgeworICAgICAgICByZXN1bHQgPSBwcm9iZUFuZFJlY3Vyc2Uo
ZGVwdGgpOworICAgICAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgICAgICBkZXB0aCA9IDUw
OworICAgICAgICBlbHNlIGlmIChyZXN1bHQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dCArIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAvLyBHbyB1cCBhIHNldmVyYWwgZnJhbWVzIGFuZCB0aGVuIGNh
bGwgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNvbnN1bWUKKyAgICAgICAgLy8gdmFyaWFibGUg
c3RhY2sgYW1vdW50cyBpbiBhbiBlZmZvcnQgdG8gZXhlcmNpc2UgdmFyaW91cyBzdGFjayBjaGVj
a3MuCisgICAgICAgIHJldHVybiAtNjsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8
IG1heEFyZ0NvdW50OyBpICs9IGFyZ0luY3JlbWVudCkgeworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgcmVjdXJzZU5vREZHLmFwcGx5KHRoaXMsIG1ha2VBcmdzQXJyYXkoZGVwdGgsIGkpKTsK
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh2YXIg
aSA9IDE7IGkgPCBtYXhBcmdDb3VudDsgaSArPSBhcmdJbmNyZW1lbnQpIHsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIHJlY3Vyc2UuYXBwbHkodGhpcywgbWFrZUFyZ3NBcnJheShkZXB0aCwg
aSkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gMTsKK30KKworLy8gV2FybSB1cCByZWN1cnNlIGZ1bmN0aW9ucworZm9yICh2YXIgbG9vcENv
dW50ID0gMDsgbG9vcENvdW50IDwgNTAwMDsgbG9vcENvdW50KyspCisgICAgcmVjdXJzZSgxMCk7
CisKK3Byb2JlQW5kUmVjdXJzZSgwKTsK
</data>
<flag name="review"
          id="268335"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>