<?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>125881</bug_id>
          
          <creation_ts>2013-12-17 16:07:21 -0800</creation_ts>
          <short_desc>frameRegisterCount() should include maxFrameExtentForSlowPathCall.</short_desc>
          <delta_ts>2013-12-17 21:58:52 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960702</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 16:07:21 -0800</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=125849#c8, Pizlo said, &quot;The *entire point* of frameRegisterCount() is that it should already include maxFrameExtentForSlowPathCall.&quot;

Patch coming to make frameRegisterCount() include maxFrameExtentForSlowPathCall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960709</commentid>
    <comment_count>1</comment_count>
      <attachid>219463</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 16:14:20 -0800</bug_when>
    <thetext>Created attachment 219463
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960715</commentid>
    <comment_count>2</comment_count>
      <attachid>219463</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 16:26:09 -0800</bug_when>
    <thetext>Comment on attachment 219463
the patch.

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3376
&gt; +        return jitCode()-&gt;dfgCommon()-&gt;frameRegisterCountWithSlowPathFrameExtent();
&gt; +

This is wrong.  This doesn&apos;t actually change the DFG&apos;s stack layout behavior.  The DFG never calls CodeBlock::frameRegisterCount().  (Nor should it - the DFG knows that it&apos;s the DFG so it will call Graph::frameRegisterCount() directly.  Also, during DFG compilation we don&apos;t have a JITCode yet, so this method would just segfault.)

Just change Graph::frameRegisterCount() to include the parameter slow path thingy.  And make sure that it does the right thing for both JS calls and slow path calls.  Right now the DFG lays out a parameter area for itself already.  The only thing missing is that it only accounts for the number of parameter slots needed for JS-&gt;JS calls (Graph::m_parameterSlots).  So, just use something like std::max(m_parameterSlots, maxFrameExtentForSlowPathCall).  Of course there will probably be some alignment or other arithmetic.

&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:83
&gt; +unsigned CommonData::frameRegisterCountWithSlowPathFrameExtent()
&gt; +{
&gt; +    size_t registerCount = frameRegisterCount + maxFrameExtentForSlowPathCallInRegisters;
&gt; +    ASSERT(registerCount == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), registerCount));
&gt; +    return registerCount;
&gt; +}
&gt; +

Remove this.

&gt; Source/JavaScriptCore/dfg/DFGCommonData.h:94
&gt; +    unsigned frameRegisterCountWithSlowPathFrameExtent();
&gt; +

Remove.

&gt; Source/JavaScriptCore/jit/JIT.h:251
&gt; +        static unsigned frameRegisterCountInBytesFor(CodeBlock* codeBlock)
&gt;          {
&gt; -            ASSERT(!(codeBlock-&gt;m_numCalleeRegisters &amp; 1));
&gt; -            return codeBlock-&gt;m_numCalleeRegisters;
&gt; +            return -virtualRegisterForLocal(frameRegisterCountFor(codeBlock) - 1).offset() * sizeof(Register);
&gt;          }

Why does this exist?  Why can&apos;t you just always say frameRegisterCountFor(codeBlock) * sizeof(Register)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960746</commentid>
    <comment_count>3</comment_count>
      <attachid>219463</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-17 16:59:12 -0800</bug_when>
    <thetext>Comment on attachment 219463
the patch.

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3378
&gt; +        return jitCode()-&gt;dfgCommon()-&gt;frameRegisterCountWithSlowPathFrameExtent();
&gt; +
&gt;      case JITCode::FTLJIT:
&gt;          return jitCode()-&gt;dfgCommon()-&gt;frameRegisterCount;

This smells fishy.

I don&apos;t think the DFG wants a frameRegisterCount, and a separate frameRegisterCountWithSlowPathFrameExtent helper function, where the former is an invitation to do things wrong, and the latter is the right answer. I think we just want to put the right answer into frameRegisterCount. My understanding is that&apos;s the whole point of that data member.

frameRegisterCount is already initialized for us. The bug you need to fix is that DFG::Graph::frameRegisterCount() does not add in the max slow path thingy. (This also means that the DFG is using the wrong value for SP right now.)

&gt; Source/JavaScriptCore/jit/JIT.cpp:785
&gt; +    ASSERT(!(codeBlock-&gt;m_numCalleeRegisters &amp; 1));

Let&apos;s remove this.

&gt; Source/JavaScriptCore/jit/JIT.h:250
&gt; +            return -virtualRegisterForLocal(frameRegisterCountFor(codeBlock) - 1).offset() * sizeof(Register);

Instead of frameRegisterCountInBytes, it look like what we need is for VirtualRegister to provide an offsetInBytes() function.

We don&apos;t want to directly encode the &quot;-&quot; here, because that makes an assumption about the number line used by VirtualRegister, and the whole point of virtualRegisterForLocal is to encapsulate that number line.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:640
&gt; +    size_t frameExtent = JIT::frameRegisterCountInBytesFor(codeBlock());

Let&apos;s rename the LHS to match the RHS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960755</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 17:20:23 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 219463 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219463&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3378
&gt; &gt; +        return jitCode()-&gt;dfgCommon()-&gt;frameRegisterCountWithSlowPathFrameExtent();
&gt; &gt; +
&gt; &gt;      case JITCode::FTLJIT:
&gt; &gt;          return jitCode()-&gt;dfgCommon()-&gt;frameRegisterCount;
&gt; 
&gt; This smells fishy.
&gt; 
&gt; I don&apos;t think the DFG wants a frameRegisterCount, and a separate frameRegisterCountWithSlowPathFrameExtent helper function, where the former is an invitation to do things wrong, and the latter is the right answer. I think we just want to put the right answer into frameRegisterCount. My understanding is that&apos;s the whole point of that data member.

Yup.

&gt; 
&gt; frameRegisterCount is already initialized for us. The bug you need to fix is that DFG::Graph::frameRegisterCount() does not add in the max slow path thingy. (This also means that the DFG is using the wrong value for SP right now.)

Yes.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JIT.cpp:785
&gt; &gt; +    ASSERT(!(codeBlock-&gt;m_numCalleeRegisters &amp; 1));
&gt; 
&gt; Let&apos;s remove this.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JIT.h:250
&gt; &gt; +            return -virtualRegisterForLocal(frameRegisterCountFor(codeBlock) - 1).offset() * sizeof(Register);
&gt; 
&gt; Instead of frameRegisterCountInBytes, it look like what we need is for VirtualRegister to provide an offsetInBytes() function.
&gt; 
&gt; We don&apos;t want to directly encode the &quot;-&quot; here, because that makes an assumption about the number line used by VirtualRegister, and the whole point of virtualRegisterForLocal is to encapsulate that number line.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:640
&gt; &gt; +    size_t frameExtent = JIT::frameRegisterCountInBytesFor(codeBlock());
&gt; 
&gt; Let&apos;s rename the LHS to match the RHS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960759</commentid>
    <comment_count>5</comment_count>
      <attachid>219479</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 17:29:44 -0800</bug_when>
    <thetext>Created attachment 219479
patch 2: applied requested fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960763</commentid>
    <comment_count>6</comment_count>
      <attachid>219479</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-17 17:41:42 -0800</bug_when>
    <thetext>Comment on attachment 219479
patch 2: applied requested fixes.

Let&apos;s remove the JSStack::CallerFrameAndPCSize line. The slow path helper, by definition, must include those. (That value seems to have been added in &lt;http://trac.webkit.org/changeset/160506&gt; as a crude estimate of maxFrameExtentForSlowPathCallInRegisters.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960774</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-17 18:15:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 219479 [details])
&gt; Let&apos;s remove the JSStack::CallerFrameAndPCSize line. The slow path helper, by definition, must include those. (That value seems to have been added in &lt;http://trac.webkit.org/changeset/160506&gt; as a crude estimate of maxFrameExtentForSlowPathCallInRegisters.)

CallerFrameAndPCSize was added in &lt;http://trac.webkit.org/changeset/160506&gt; to account for the caller&apos;s frame pointer and return PC for outgoing calls.  If we remove CallerFrameAndPCSize from this place, then maxFrameExtentForSlowPathCallInRegisters should be adjusted up on all platforms to account for the same.  I believe that Mark will do this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960777</commentid>
    <comment_count>8</comment_count>
      <attachid>219479</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 18:26:02 -0800</bug_when>
    <thetext>Comment on attachment 219479
patch 2: applied requested fixes.

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

I smell weirdness.  Can you comment on what is going on in the DFG with CallerFrameAndPCSize, and why the other engines don&apos;t do similar?

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:708
&gt; +    unsigned maxOutgoingArgsSlots = std::max(m_parameterSlots, static_cast&lt;unsigned&gt;(JSStack::CallerFrameAndPCSize));

Isn&apos;t the point here that you&apos;re trying to account for the outgoing frame header size for calls on platforms that can pass all arguments in registers?

In that case, why isn&apos;t this just part of maxFrameExtentForSlowPathCallInRegisters?

And why doesn&apos;t the baseline JIT also use this as part of its frameRegisterCount() calculation?

&gt; Source/JavaScriptCore/jit/JIT.cpp:787
&gt; +    size_t registerCount = codeBlock-&gt;m_numCalleeRegisters + maxFrameExtentForSlowPathCallInRegisters;
&gt; +    ASSERT(registerCount == WTF::roundUpToMultipleOf(stackAlignmentRegisters(), registerCount));
&gt; +    return registerCount;

This feels like it should also take into account JSStack::CallerFrameAndPCSize, just like you&apos;re doing in the DFG.

Or, even better, neither should take it into account because it would be factored into maxFrameExtentForSlowPathCallInRegisters or some other constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960778</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 18:27:26 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 219479 [details] [details])
&gt; &gt; Let&apos;s remove the JSStack::CallerFrameAndPCSize line. The slow path helper, by definition, must include those. (That value seems to have been added in &lt;http://trac.webkit.org/changeset/160506&gt; as a crude estimate of maxFrameExtentForSlowPathCallInRegisters.)
&gt; 
&gt; CallerFrameAndPCSize was added in &lt;http://trac.webkit.org/changeset/160506&gt; to account for the caller&apos;s frame pointer and return PC for outgoing calls.  If we remove CallerFrameAndPCSize from this place, then maxFrameExtentForSlowPathCallInRegisters should be adjusted up on all platforms to account for the same.  I believe that Mark will do this in a separate patch.

OK, but it would really be better to do this as part of this patch.  I don&apos;t like how this patch leaves the code in an inconsistent state.  It&apos;ll make revision archeology very confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960789</commentid>
    <comment_count>10</comment_count>
      <attachid>219488</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 18:45:37 -0800</bug_when>
    <thetext>Created attachment 219488
Patch for commit.  Extra bits reviewed by msaboff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960791</commentid>
    <comment_count>11</comment_count>
      <attachid>219488</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 18:46:37 -0800</bug_when>
    <thetext>Comment on attachment 219488
Patch for commit.  Extra bits reviewed by msaboff.

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

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:708
&gt; -    unsigned result = m_nextMachineLocal + std::max(m_parameterSlots, static_cast&lt;unsigned&gt;(JSStack::CallerFrameAndPCSize));
&gt; +    unsigned result = m_nextMachineLocal + std::max(m_parameterSlots, static_cast&lt;unsigned&gt;(maxFrameExtentForSlowPathCallInRegisters));

OMG so much better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960792</commentid>
    <comment_count>12</comment_count>
      <attachid>219488</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 18:46:50 -0800</bug_when>
    <thetext>Comment on attachment 219488
Patch for commit.  Extra bits reviewed by msaboff.

r=me too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960807</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-17 19:35:53 -0800</bug_when>
    <thetext>Thanks for all the reviews.  Landed in r160745: &lt;http://trac.webkit.org/r160745&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960820</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-17 20:18:12 -0800</bug_when>
    <thetext>&gt; CallerFrameAndPCSize was added in &lt;http://trac.webkit.org/changeset/160506&gt; to account for the caller&apos;s frame pointer and return PC for outgoing calls.

Do you mean outgoing calls to VM helper functions, or outgoing calls to JavaScript functions?

If we have an outgoing call to a JavaScript function, m_parameterSlots should be non-0, and maxing with CallerFrameAndPCSize should be a no-op. Also, it would be supremely weird to encode the stack frame needs of a JavaScript function call in a variable named maxFrameExtentForSlowPathCall.

If we have an outgoing call to a VM helper function, the return PC and return BP of the host frame are pushed after the call, and so they do not influence what frameRegisterCount should be set to, since frameRegisterCount is the value that sp should hold before the call instruction.

Either way, it smells like this patch covered up a really nasty bug by arbitrarily making the stack frame a tiny bit bigger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960830</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-12-17 21:15:51 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; CallerFrameAndPCSize was added in &lt;http://trac.webkit.org/changeset/160506&gt; to account for the caller&apos;s frame pointer and return PC for outgoing calls.
&gt; 
&gt; Do you mean outgoing calls to VM helper functions, or outgoing calls to JavaScript functions?
&gt; 
&gt; If we have an outgoing call to a JavaScript function, m_parameterSlots should be non-0, and maxing with CallerFrameAndPCSize should be a no-op. Also, it would be supremely weird to encode the stack frame needs of a JavaScript function call in a variable named maxFrameExtentForSlowPathCall.
&gt; 
&gt; If we have an outgoing call to a VM helper function, the return PC and return BP of the host frame are pushed after the call, and so they do not influence what frameRegisterCount should be set to, since frameRegisterCount is the value that sp should hold before the call instruction.
&gt; 
&gt; Either way, it smells like this patch covered up a really nasty bug by arbitrarily making the stack frame a tiny bit bigger.

It was only for outgoing calls to VM helper functions.

frameRegisterCount needs to include the size of the largest outgoing frame and it includes the return PC and return BP that the callee will push.  When there aren&apos;t any outgoing JS calls, we need to include space for the return PC and BP of any outgoing VM helper calls.  Therefore the max() of m_parameterSlots and CallerFrameAndPCSize. When the stack pointer is set up, we don&apos;t include (i.e. subtract out) CallerFrameAndPCSize as the callee will push return PC and return BP.  The current patch rightly doesn&apos;t change the setting of the stack pointer, we are still subtracting out CallerFrameAndPCSize.  The current patch didn&apos;t change any of the calculations results for the DFG, it just moved CallerFrameAndPCSize to be part of maxFrameExtentForSlowPathCall.

If frameRegisterCount is the value that sp should set to before the call, we create a stack frame that has two extra slots.  This is due to m_parameterSlots including the size of a full frame header.  See ByteCodeParser::addCall() where we have:
    m_parameterSlots = JSStack::ThisArgument + argCount

The stack check must check at least frameRegisterCount without subtracting CallerFrameAndPCSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960835</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-17 21:58:52 -0800</bug_when>
    <thetext>&gt; If frameRegisterCount is the value that sp should set to before the call, we create a stack frame that has
&gt; two extra slots.  This is due to m_parameterSlots including the size of a full frame header.  See
&gt; ByteCodeParser::addCall() where we have:
&gt;     m_parameterSlots = JSStack::ThisArgument + argCount

Can we fix this by initializing m_parameterSlots to a more appropriate value (JSStack::CallFrameHeaderSize - CallerFrameAndPCSize + argCount)? What&apos;s the motivation behind pretending that we have two more outgoing parameter slots than we have actually allocated in our stack frame? If somebody ever tried to iterate from 0 to m_parameterSlots, they would corrupt the stack. That doesn&apos;t seem so good.

&gt; The stack check must check at least frameRegisterCount without subtracting CallerFrameAndPCSize.

Sure, the stack check has special needs. But the stack check computation is distinct from setting sp. The purpose of frameRegisterCount is to set sp.

I believe our stated plan for accommodating CallerFrameAndPCSize in C++ helper functions was just to fold it into in the redzone we already need for C++ functions generally. Knowing that you have 16 bytes free on the stack does you no good if you&apos;re about to call a C++ function that uses that 16 bytes for CallerFrameAndPCSize plus an additional 1kB for its local variables.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219463</attachid>
            <date>2013-12-17 16:14:20 -0800</date>
            <delta_ts>2013-12-17 17:29:44 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-125881.patch</filename>
            <type>text/plain</type>
            <size>8723</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDEzLTEyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBm
cmFtZVJlZ2lzdGVyQ291bnQoKSBzaG91bGQgaW5jbHVkZSBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNTg4MS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZnJh
bWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgLSBSZWRpcmVjdGVkIERGR0pJVCBjYXNlIGZvciBm
cmFtZVJlZ2lzdGVyQ291bnQgdG8gdGhlIG5ldworICAgICAgICAgIERGRzo6Q29tbW9uRGF0YTo6
ZnJhbWVSZWdpc3RlckNvdW50V2l0aFNsb3dQYXRoRnJhbWVFeHRlbnQoKQorICAgICAgICAgIHdo
aWNoIGFkZHMgaW4gdGhlIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLgorICAgICAgICAq
IGRmZy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpm
cmFtZVJlZ2lzdGVyQ291bnRXaXRoU2xvd1BhdGhGcmFtZUV4dGVudCk6CisgICAgICAgIC0gQWRk
cyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCB0byB0aGUgREZHJ3MgZnJhbWVSZWdpc3Rl
ckNvdW50CisgICAgICAgICAgZm9yIGNvbXB1dGluZyB0aGUgc3RhY2tQb2ludGVyIHZhbHVlLgor
ICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlND
OjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEluQnl0ZXNGb3IpOgorICAgICAgICAtIHRoaXMgaXMg
YSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSBmcmFtZVJlZ2lzdGVyQ291bnQg
aW4KKyAgICAgICAgICB1bml0cyBvZiBieXRlcyBmb3IgdGhlIEpJVC4gVGhpcyBsZXNzZW5zIHZl
cmJvc2l0eSBhbmQgdG8gbWFrZSB0aGUKKyAgICAgICAgICBjb2RlIG1vcmUgcmVhZGFibGUuCisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Y2F0Y2gpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAqIGxsaW50L0xMSW50RW50cnlwb2ludC5j
cHA6CisgICAgICAgIChKU0M6OkxMSW50OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IpOgorCiAyMDEz
LTEyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1
Y2UgYSBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzIHZhbHVlLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcyLDYgKzMzNzIsOCBAQCB1bnNpZ25lZCBDb2RlQmxv
Y2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBjYXNl
IEpJVENvZGU6OkRGR0pJVDoKKyAgICAgICAgcmV0dXJuIGppdENvZGUoKS0+ZGZnQ29tbW9uKCkt
PmZyYW1lUmVnaXN0ZXJDb3VudFdpdGhTbG93UGF0aEZyYW1lRXh0ZW50KCk7CisKICAgICBjYXNl
IEpJVENvZGU6OkZUTEpJVDoKICAgICAgICAgcmV0dXJuIGppdENvZGUoKS0+ZGZnQ29tbW9uKCkt
PmZyYW1lUmVnaXN0ZXJDb3VudDsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTYw
NzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCisjaW5jbHVkZSAiTWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC03Miw2ICs3NCwxMyBAQCBib29sIENvbW1vbkRhdGE6Omlu
dmFsaWRhdGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCit1bnNpZ25lZCBDb21tb25EYXRhOjpm
cmFtZVJlZ2lzdGVyQ291bnRXaXRoU2xvd1BhdGhGcmFtZUV4dGVudCgpCit7CisgICAgc2l6ZV90
IHJlZ2lzdGVyQ291bnQgPSBmcmFtZVJlZ2lzdGVyQ291bnQgKyBtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbEluUmVnaXN0ZXJzOworICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCByZWdpc3RlckNv
dW50KSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyQ291bnQ7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw2ICs5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGZyYW1lUmVnaXN0
ZXJDb3VudCwgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCk7CiAgICAgfQogCisgICAgdW5z
aWduZWQgZnJhbWVSZWdpc3RlckNvdW50V2l0aFNsb3dQYXRoRnJhbWVFeHRlbnQoKTsKKwogICAg
IE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IGlubGluZUNhbGxGcmFtZXM7CiAgICAgVmVjdG9y
PENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjb2RlT3JpZ2luczsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE2MDcyOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCBKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpTU0UyQ2hlY2tTCiAjaW5jbHVk
ZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlNs
b3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CkBAIC01MzksNyArNTQwLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSQogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihtX2NvZGVCbG9jaykg
LSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgLSBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLWZyYW1lUmVnaXN0ZXJDb3VudEluQnl0ZXNGb3IobV9jb2RlQmxvY2spKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICAgICAgc3RhY2tDaGVjayA9IGJyYW5jaFB0cihB
Ym92ZSwgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPmFkZHJlc3NPZkpTU3RhY2tMaW1pdCgpKSwgcmVn
VDEpOwogICAgIH0KIApAQCAtNzc5LDYgKzc4MCwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVFeGNlcHRpb25IYW5kbGVyCiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwogfQogCit1
bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICBBU1NFUlQoIShjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICYgMSkpOwor
ICAgIHNpemVfdCByZWdpc3RlckNvdW50ID0gY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVy
cyArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnM7CisgICAgQVNTRVJU
KHJlZ2lzdGVyQ291bnQgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHJlZ2lzdGVyQ291bnQpKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsK
K30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMTYwNzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQ0LDEwICsyNDQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIENvZGVQ
dHIsIENhbGxMaW5rSW5mbyosIFZNKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGxpbmtTbG93Q2FsbChDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ2Fs
bExpbmtJbmZvKik7CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdp
c3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgdW5z
aWduZWQgZnJhbWVSZWdpc3RlckNvdW50SW5CeXRlc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
ICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCEoY29kZUJsb2NrLT5tX251bUNhbGxlZVJl
Z2lzdGVycyAmIDEpKTsKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzOworICAgICAgICAgICAgcmV0dXJuIC12aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE2MDcyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTI0LDggKzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0
aW9uKiBjdXIKICAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9y
IHRoZSBoYW5kbGVyLgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9y
VGhyb3dPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgIHNpemVfdCBmcmFtZUV4
dGVudCA9IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbDsKLSAgICBBU1NFUlQoZnJh
bWVFeHRlbnQgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgZnJhbWVFeHRlbnQpKTsKKyAgICBzaXplX3QgZnJhbWVFeHRlbnQgPSBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEluQnl0ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLWZyYW1lRXh0ZW50KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIAogICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhjZXB0aW9uIHJldHVybmVkIGJ5IG9wZXJhdGlv
blRocm93LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAxNjA3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzcsOCArNjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVn
VDMpOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yVGhyb3dPZmZz
ZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgIHNpemVfdCBmcmFtZUV4dGVudCA9IEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3Rlcikg
KyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbDsKLSAgICBBU1NFUlQoZnJhbWVFeHRlbnQg
PT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVF
eHRlbnQpKTsKKyAgICBzaXplX3QgZnJhbWVFeHRlbnQgPSBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3Vu
dEluQnl0ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWZyYW1l
RXh0ZW50KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNw
cAkocmV2aXNpb24gMTYwNzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTG93TGV2
ZWxJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKQEAgLTEyMyw3ICsxMjUsOSBAQCB2b2lkIHNl
dEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvCiAKIHVuc2lnbmVkIGZyYW1lUmVnaXN0
ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2Nr
LT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICBzaXplX3QgcmVnaXN0ZXJDb3VudCA9IGNvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bEluUmVnaXN0ZXJzOworICAgIEFTU0VSVChyZWdpc3RlckNvdW50ID09IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCByZWdpc3RlckNvdW50KSk7Cisg
ICAgcmV0dXJuIHJlZ2lzdGVyQ291bnQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTElu
dAo=
</data>
<flag name="review"
          id="243097"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219479</attachid>
            <date>2013-12-17 17:29:44 -0800</date>
            <delta_ts>2013-12-17 18:45:37 -0800</delta_ts>
            <desc>patch 2: applied requested fixes.</desc>
            <filename>bug-125881.patch</filename>
            <type>text/plain</type>
            <size>8294</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDEzLTEyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBm
cmFtZVJlZ2lzdGVyQ291bnQoKSBzaG91bGQgaW5jbHVkZSBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNTg4MS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVn
aXN0ZXI6Om9mZnNldEluQnl0ZXMpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OmZyYW1lUmVnaXN0ZXJDb3VudCk6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2NhdGNoKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnQu
Y3BwOgorICAgICAgICAoSlNDOjpMTEludDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKwogMjAx
My0xMi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9k
dWNlIGEgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyB2YWx1ZS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVy
LmgJKHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
aXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6
CiAgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFTU0VSVChpc0FyZ3VtZW50KCkpOyByZXR1
cm4gb3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgaW50IHRvQ29u
c3RhbnRJbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzQ29uc3RhbnQoKSk7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciAtIHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICBpbnQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXI7IH0KKyAgICBpbnQgb2Zmc2V0
SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lz
dGVyKTsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpcnR1YWxSZWdpc3RlciBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPT0gb3RoZXIubV92aXJ0dWFsUmVn
aXN0ZXI7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmlydHVhbFJlZ2lzdGVyIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBvdGhlci5tX3ZpcnR1YWxSZWdp
c3RlcjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgor
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiT3Bl
cmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCkBAIC03MDQsNyArNzA1LDkgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRl
Y29kZShWaXJ0dWFsUmVnaQogCiB1bnNpZ25lZCBHcmFwaDo6ZnJhbWVSZWdpc3RlckNvdW50KCkK
IHsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSBtX25leHRNYWNoaW5lTG9jYWwgKyBzdGQ6Om1heCht
X3BhcmFtZXRlclNsb3RzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNTdGFjazo6Q2FsbGVyRnJh
bWVBbmRQQ1NpemUpKTsKKyAgICB1bnNpZ25lZCBtYXhPdXRnb2luZ0FyZ3NTbG90cyA9IHN0ZDo6
bWF4KG1fcGFyYW1ldGVyU2xvdHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSkpOworICAgIG1heE91dGdvaW5nQXJnc1Nsb3RzID0gc3RkOjptYXgo
bWF4T3V0Z29pbmdBcmdzU2xvdHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKSk7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9u
ZXh0TWFjaGluZUxvY2FsICsgbWF4T3V0Z29pbmdBcmdzU2xvdHM7CiAgICAgcmVzdWx0ID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjpTU0UyQ2hlY2tTCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBs
aW5nVG9vbC5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlN0YWNrQWxp
Z25tZW50LmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC01MzksNyArNTQwLDcgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0
ZXJDb3VudEZvcihtX2NvZGVCbG9jaykgLSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikg
LSBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKG1fY29kZUJsb2NrKSAtIDEpLm9mZnNldEluQnl0ZXMoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIHN0YWNrQ2hlY2sgPSBicmFuY2hQ
dHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZKU1N0YWNrTGltaXQoKSks
IHJlZ1QxKTsKICAgICB9CiAKQEAgLTc3OSw2ICs3ODAsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKIH0K
IAordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgc2l6ZV90IHJlZ2lzdGVyQ291bnQgPSBjb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVyczsKKyAg
ICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSwgcmVnaXN0ZXJDb3VudCkpOworICAgIHJldHVybiByZWdpc3Rl
ckNvdW50OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxNjA3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTEgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2Nr
LCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBWTSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwog
ICAgICAgICBzdGF0aWMgdm9pZCBsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2ssIENhbGxMaW5rSW5mbyopOwogICAgICAgICAKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKCEoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAmIDEpKTsK
LSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29k
ZUJsb2NrKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBKSVQoVk0qLCBDb2RlQmxvY2sqID0g
MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiAxNjA3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNCw5ICs5MjQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgLy8gb3BlcmF0aW9uVGhyb3cg
cmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxlci4KICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvclRocm93T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CiAKLSAgICBzaXplX3QgZnJhbWVFeHRlbnQgPSBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGw7Ci0gICAgQVNTRVJUKGZyYW1lRXh0ZW50ID09IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lRXh0ZW50KSk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtZnJhbWVFeHRlbnQpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGludCBvZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKCkpIC0gMSkub2Zmc2V0SW5CeXRlcygpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIob2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhjZXB0aW9uIHJldHVybmVk
IGJ5IG9wZXJhdGlvblRocm93LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0
aW9uT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw5ICs2MzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCBy
ZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JUaHJvd09m
ZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCi0gICAgc2l6ZV90IGZyYW1lRXh0ZW50ID0g
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsOwotICAgIEFTU0VSVChmcmFtZUV4dGVu
dCA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFt
ZUV4dGVudCkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWZyYW1lRXh0ZW50KSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBpbnQgb2Zmc2V0ID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaygpKSAt
IDEpLm9mZnNldEluQnl0ZXMoKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG9mZnNldCksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMTYwNzI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkxMSW50
VGh1bmtzLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIk1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQu
aCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsK
QEAgLTEyMyw3ICsxMjUsOSBAQCB2b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvCiAKIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICBz
aXplX3QgcmVnaXN0ZXJDb3VudCA9IGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzOworICAgIEFTU0VSVChyZWdp
c3RlckNvdW50ID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpLCByZWdpc3RlckNvdW50KSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyQ291bnQ7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAo=
</data>
<flag name="review"
          id="243109"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219488</attachid>
            <date>2013-12-17 18:45:37 -0800</date>
            <delta_ts>2013-12-17 18:46:50 -0800</delta_ts>
            <desc>Patch for commit.  Extra bits reviewed by msaboff.</desc>
            <filename>bug-125881.patch</filename>
            <type>text/plain</type>
            <size>13072</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTEyLTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBm
cmFtZVJlZ2lzdGVyQ291bnQoKSBzaG91bGQgaW5jbHVkZSBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNTg4MS4KKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbiBhbmQgTWljaGFl
bCBTYWJvZmYuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwuaDoKKyAgICAgICAgLSBBZGRlZCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSB0byBhbGwgdGhl
IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsIHZhbHVlcy4KKyAgICAgICAgKiBieXRlY29k
ZS9WaXJ0dWFsUmVnaXN0ZXIuaDoKKyAgICAgICAgKEpTQzo6VmlydHVhbFJlZ2lzdGVyOjpvZmZz
ZXRJbkJ5dGVzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYXRjaCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgLSBBZGp1c3RlZCBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCB2YWx1ZXMgZm9yIENhbGxlckZyYW1lQW5kUENT
aXplLgorICAgICAgICAqIGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAtIEFkanVzdGVkIG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsIHZhbHVlcyBmb3IgQ2FsbGVyRnJhbWVBbmRQQ1NpemUuCisKIDIwMTMtMTItMTcg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBhIG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMgdmFsdWUuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAxNjA3MzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDM2ICszNSw0MyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIHRoYXQg
Y2FuIGJlIHVzZWQgZm9yIG91dGdvaW5nIGFyZ3Mgd2hlbiBjYWxsaW5nIGEgc2xvdyBwYXRoIEMg
ZnVuY3Rpb24KIC8vIGZyb20gSlMgY29kZS4KIAorLy8gV2UgYWxzbyBuZWVkIHRvIGFkZCBzcGFj
ZSB0byBhY2NvdW50IGZvciBDYWxsZXJGcmFtZUFuZFBDU2l6ZSAoMiBwb2ludGVycykKKy8vIGFu
ZCBwYWQgdGhlIHN1bSB1cCB0byBhbiBpbmNyZW1lbnQgb2Ygc3RhY2tBbGlnbm1lbnRCeXRlcygp
LgorCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSAwOwogCiAjZWxpZiBDUFUoWDg2XzY0KSAmJiBPUyhX
SU5ET1dTKQotLy8gNCBhcmdzIGluIHJlZ2lzdGVycywgYnV0IHN0YWNrIHNwYWNlIG5lZWRzIHRv
IGJlIGFsbG9jYXRlZCBmb3IgYWxsIGFyZ3MuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gNDg7CisvLyA0IGFyZ3MgaW4gcmVnaXN0ZXJzLCBidXQg
c3RhY2sgc3BhY2UgbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGZvciBhbGwgYXJncywKKy8vIHBsdXMg
MTYgYnl0ZXMgZm9yIENhbGxlckZyYW1lQW5kUENTaXplLgorc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDY0OwogCiAjZWxpZiBDUFUoWDg2XzY0KQot
Ly8gQWxsIGFyZ3MgaW4gcmVnaXN0ZXJzLgotc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCA9IDA7CisvLyBBbGwgYXJncyBpbiByZWdpc3RlcnMsIHBsdXMg
MTYgYnl0ZXMgZm9yIENhbGxlckZyYW1lQW5kUENTaXplLgorc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDE2OwogCiAjZWxpZiBDUFUoWDg2KQotLy8g
NiBhcmdzIG9uIHN0YWNrICgyNCBieXRlcykgKyA4IGJ5dGVzIHRvIGFsaWduIHRoZSBzdGFjay4K
Ky8vIDYgYXJncyBvbiBzdGFjayAoMjQgYnl0ZXMpIHBsdXMgOCBieXRlcyBmb3IgQ2FsbGVyRnJh
bWVBbmRQQ1NpemUuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsID0gMzI7CiAKICNlbGlmIENQVShBUk02NCkKLS8vIEFsbCBhcmdzIGluIHJlZ2lzdGVy
cy4KLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPSAw
OworLy8gQWxsIGFyZ3MgaW4gcmVnaXN0ZXJzLCBwbHVzIDE2IGJ5dGVzIGZvciBDYWxsZXJGcmFt
ZUFuZFBDU2l6ZS4KK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwgPSAxNjsKIAogI2VsaWYgQ1BVKEFSTSkKLS8vIEZpcnN0IGZvdXIgYXJncyBpbiByZWdp
c3RlcnMsIHJlbWFpbmluZyA0IGFyZ3Mgb24gc3RhY2suCi1zdGF0aWMgY29uc3Qgc2l6ZV90IG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMTY7CisvLyBGaXJzdCBmb3VyIGFyZ3MgaW4g
cmVnaXN0ZXJzLCByZW1haW5pbmcgNCBhcmdzIG9uIHN0YWNrLAorLy8gcGx1cyA4IGJ5dGUgZm9y
IENhbGxlckZyYW1lQW5kUENTaXplIGFuZCA4IGJ5dGVzIHBhZGRpbmcuCitzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMzI7CiAKICNlbGlmIENQVShT
SDQpCi0vLyBGaXJzdCBmb3VyIGFyZ3MgaW4gcmVnaXN0ZXJzLCByZW1haW5pbmcgNCBhcmdzIG9u
IHN0YWNrLgotc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCA9IDE2OworLy8gRmlyc3QgZm91ciBhcmdzIGluIHJlZ2lzdGVycywgcmVtYWluaW5nIDQgYXJn
cyBvbiBzdGFjaywKKy8vIHBsdXMgOCBieXRlIGZvciBDYWxsZXJGcmFtZUFuZFBDU2l6ZSBhbmQg
OCBieXRlcyBwYWRkaW5nLgorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCA9IDMyOwogCiAjZWxpZiBDUFUoTUlQUykKLS8vIFRob3VnaCBhcmdzIGFyZSBp
biByZWdpc3RlcnMsIHRoZXJlIG5lZWQgdG8gYmUgc3BhY2Ugb24gdGhlIHN0YWNrIGZvciBhbGwg
YXJncy4KLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwg
PSAzMjsKKy8vIFRob3VnaCBhcmdzIGFyZSBpbiByZWdpc3RlcnMsIHRoZXJlIG5lZWQgdG8gYmUg
c3BhY2Ugb24gdGhlIHN0YWNrIGZvciBhbGwgYXJncywKKy8vIHBsdXMgOCBieXRlcyBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSBhbmQgOCBieXRlcyBwYWRkaW5nLgorc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDQ4OwogCiAjZWxzZQogI2Vycm9yICJVbnN1
cHBvcnRlZCBDUFU6IG5lZWQgdmFsdWUgZm9yIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVn
aXN0ZXIuaAkocmV2aXNpb24gMTYwNzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHB1
YmxpYzoKICAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7
IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBpbnQg
dG9Db25zdGFudEluZGV4KCkgY29uc3QgeyBBU1NFUlQoaXNDb25zdGFudCgpKTsgcmV0dXJuIG1f
dmlydHVhbFJlZ2lzdGVyIC0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQogICAgIGlu
dCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsgfQorICAgIGludCBv
ZmZzZXRJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2Yo
UmVnaXN0ZXIpOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlydHVhbFJlZ2lzdGVy
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA9PSBvdGhlci5tX3ZpcnR1
YWxSZWdpc3RlcjsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXJ0dWFsUmVnaXN0ZXIg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IG90aGVyLm1fdmlydHVh
bFJlZ2lzdGVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTYwNzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCisjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRl
ICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
U3RhY2tBbGlnbm1lbnQuaCIKQEAgLTcwNCw3ICs3MDUsNyBAQCBib29sIEdyYXBoOjppc0xpdmVJ
bkJ5dGVjb2RlKFZpcnR1YWxSZWdpCiAKIHVuc2lnbmVkIEdyYXBoOjpmcmFtZVJlZ2lzdGVyQ291
bnQoKQogewotICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbmV4dE1hY2hpbmVMb2NhbCArIHN0ZDo6
bWF4KG1fcGFyYW1ldGVyU2xvdHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSkpOworICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fbmV4dE1hY2hpbmVM
b2NhbCArIHN0ZDo6bWF4KG1fcGFyYW1ldGVyU2xvdHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKSk7CiAgICAgcmVzdWx0ID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHJlc3Vs
dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uOjpTU0UyQ2hlY2tTCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNh
bXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVy
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC01MzksNyArNTQwLDcgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICB9CiAjZW5kaWYKIAotICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVn
aXN0ZXJDb3VudEZvcihtX2NvZGVCbG9jaykgLSAxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikgLSBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKG1fY29kZUJsb2NrKSAtIDEpLm9mZnNldEluQnl0ZXMo
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgICAgIHN0YWNrQ2hlY2sgPSBicmFu
Y2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5hZGRyZXNzT2ZKU1N0YWNrTGltaXQo
KSksIHJlZ1QxKTsKICAgICB9CiAKQEAgLTc3OSw2ICs3ODAsMTIgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsK
IH0KIAordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit7CisgICAgc2l6ZV90IHJlZ2lzdGVyQ291bnQgPSBjb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVyczsK
KyAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgcmVnaXN0ZXJDb3VudCkpOworICAgIHJldHVybiByZWdp
c3RlckNvdW50OworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAxNjA3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTEgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qIGNh
bGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJs
b2NrLCBDb2RlUHRyLCBDYWxsTGlua0luZm8qLCBWTSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgICAgICBzdGF0aWMgdm9pZCBsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2ssIENhbGxMaW5rSW5mbyopOwogICAgICAgICAKLSAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKCEoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAmIDEp
KTsKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwot
ICAgICAgICB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
Q29kZUJsb2NrKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBKSVQoVk0qLCBDb2RlQmxvY2sq
ID0gMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjA3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNCw5ICs5MjQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgLy8gb3BlcmF0aW9uVGhy
b3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxlci4KICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvclRocm93T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdp
c3Rlcik7CiAKLSAgICBzaXplX3QgZnJhbWVFeHRlbnQgPSBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpICsgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGw7Ci0gICAgQVNTRVJUKGZyYW1lRXh0ZW50ID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lRXh0ZW50KSk7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtZnJhbWVFeHRlbnQpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGludCBvZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKCkpIC0gMSkub2Zmc2V0SW5CeXRlcygpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIob2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhjZXB0aW9uIHJldHVy
bmVkIGJ5IG9wZXJhdGlvblRocm93LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpLCByZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw5ICs2MzcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0p
LCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JUaHJv
d09mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCi0gICAgc2l6ZV90IGZyYW1lRXh0ZW50
ID0gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsOwotICAgIEFTU0VSVChmcmFtZUV4
dGVudCA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBm
cmFtZUV4dGVudCkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWZyYW1lRXh0ZW50KSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBpbnQgb2Zmc2V0ID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaygp
KSAtIDEpLm9mZnNldEluQnl0ZXMoKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG9mZnNldCks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQo
QWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOwogICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdU
MywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMTYwNzI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMiArMTI1
LDE2IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogICAgIEFTU0VSVChW
YWx1ZVVuZGVmaW5lZCA9PSAoVGFnQml0VHlwZU90aGVyIHwgVGFnQml0VW5kZWZpbmVkKSk7CiAg
ICAgQVNTRVJUKFZhbHVlTnVsbCA9PSBUYWdCaXRUeXBlT3RoZXIpOwogI2VuZGlmCi0jaWYgQ1BV
KFg4Nl82NCkgfHwgQ1BVKEFSTTY0KSB8fCBFTkFCTEUoTExJTlRfQ19MT09QKQorI2lmIEVOQUJM
RShMTElOVF9DX0xPT1ApCiAgICAgQVNTRVJUKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
ID09IDApOwotI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFNINCkKKyNlbGlmIENQVShYODZfNjQpICYm
IE9TKFdJTkRPV1MpCisgICAgQVNTRVJUKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID09
IDY0KTsKKyNlbGlmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKICAgICBBU1NFUlQobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPT0gMTYpOwotI2VsaWYgQ1BVKFg4NikgfHwgQ1BVKE1J
UFMpCisjZWxpZiBDUFUoWDg2KSB8fCBDUFUoQVJNKSB8fCBDUFUoU0g0KQogICAgIEFTU0VSVCht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9PSAzMik7CisjZWxpZiBDUFUoTUlQUykKKyAg
ICBBU1NFUlQobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgPT0gNDgpOwogI2VuZGlmCiAg
ICAgQVNTRVJUKFN0cmluZ1R5cGUgPT0gNSk7CiAgICAgQVNTRVJUKE9iamVjdFR5cGUgPT0gMTcp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dC5jcHAJKHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIkxv
d0xldmVsSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAiVk0uaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CkBAIC0xMjMsNyArMTI1LDkgQEAgdm9p
ZCBzZXRFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjbwogCiB1bnNpZ25lZCBmcmFtZVJl
Z2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgc2l6ZV90IHJlZ2lzdGVyQ291bnQgPSBj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGxJblJlZ2lzdGVyczsKKyAgICBBU1NFUlQocmVnaXN0ZXJDb3VudCA9PSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgcmVnaXN0ZXJDb3VudCkp
OworICAgIHJldHVybiByZWdpc3RlckNvdW50OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE2MDcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzMs
MTIgKzczLDE0IEBAIGNvbnN0IERlbGV0ZWRWYWx1ZVRhZyA9IC03CiBjb25zdCBMb3dlc3RUYWcg
PSBEZWxldGVkVmFsdWVUYWcKIGVuZAogCi1pZiBYODZfNjQgb3IgQVJNNjQgb3IgQ19MT09QCitp
ZiBDX0xPT1AKIGNvbnN0IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMAotZWxzaWYg
QVJNIG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIEFSTXY3IG9yIFNINAorZWxzaWYgWDg2XzY0IG9y
IEFSTTY0CiBjb25zdCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA9IDE2Ci1lbHNpZiBY
ODYgb3IgTUlQUworZWxzaWYgWDg2IG9yIEFSTSBvciBBUk12N19UUkFESVRJT05BTCBvciBBUk12
NyBvciBTSDQKIGNvbnN0IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gMzIKK2Vsc2lm
IE1JUFMKK2NvbnN0IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gNDgKIGVuZAogCiAj
IFdhdGNocG9pbnQgc3RhdGVzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>